Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  * Copyright 2008 Cisco Systems, Inc.  All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) #ifndef _FC_FIP_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) #define _FC_FIP_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) #include <scsi/fc/fc_ns.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11)  * This version is based on:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12)  * http://www.t11.org/ftp/t11/pub/fc/bb-5/08-543v1.pdf
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13)  * and T11 FC-BB-6 13-091v5.pdf (December 2013 VN2VN proposal)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) #define FIP_DEF_PRI	128	/* default selection priority */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) #define FIP_DEF_FC_MAP	0x0efc00 /* default FCoE MAP (MAC OUI) value */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) #define FIP_DEF_FKA	8000	/* default FCF keep-alive/advert period (mS) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) #define FIP_VN_KA_PERIOD 90000	/* required VN_port keep-alive period (mS) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) #define FIP_FCF_FUZZ	100	/* random time added by FCF (mS) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23)  * VN2VN proposed-standard values.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) #define FIP_VN_FC_MAP	0x0efd00 /* MAC OUI for VN2VN use */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) #define FIP_VN_PROBE_WAIT 100	/* interval between VN2VN probes (ms) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) #define FIP_VN_ANN_WAIT 400	/* interval between VN2VN announcements (ms) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) #define FIP_VN_RLIM_INT 10000	/* interval between probes when rate limited */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) #define FIP_VN_RLIM_COUNT 10	/* number of probes before rate limiting */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) #define FIP_VN_BEACON_INT 8000	/* interval between VN2VN beacons */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) #define FIP_VN_BEACON_FUZZ 100	/* random time to add to beacon period (ms) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34)  * Multicast MAC addresses.  T11-adopted.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) #define FIP_ALL_FCOE_MACS	((__u8[6]) { 1, 0x10, 0x18, 1, 0, 0 })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) #define FIP_ALL_ENODE_MACS	((__u8[6]) { 1, 0x10, 0x18, 1, 0, 1 })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) #define FIP_ALL_FCF_MACS	((__u8[6]) { 1, 0x10, 0x18, 1, 0, 2 })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) #define FIP_ALL_VN2VN_MACS	((__u8[6]) { 1, 0x10, 0x18, 1, 0, 4 })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) #define FIP_ALL_P2P_MACS	((__u8[6]) { 1, 0x10, 0x18, 1, 0, 5 })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) #define FIP_VER		1		/* version for fip_header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) struct fip_header {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 	__u8	fip_ver;		/* upper 4 bits are the version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 	__u8	fip_resv1;		/* reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 	__be16	fip_op;			/* operation code */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 	__u8	fip_resv2;		/* reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 	__u8	fip_subcode;		/* lower 4 bits are sub-code */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 	__be16	fip_dl_len;		/* length of descriptors in words */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 	__be16	fip_flags;		/* header flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) #define FIP_VER_SHIFT	4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) #define FIP_VER_ENCAPS(v) ((v) << FIP_VER_SHIFT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) #define FIP_VER_DECAPS(v) ((v) >> FIP_VER_SHIFT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) #define FIP_BPW		4		/* bytes per word for lengths */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60)  * fip_op.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) enum fip_opcode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 	FIP_OP_DISC =	1,		/* discovery, advertisement, etc. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 	FIP_OP_LS =	2,		/* Link Service request or reply */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 	FIP_OP_CTRL =	3,		/* Keep Alive / Link Reset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	FIP_OP_VLAN =	4,		/* VLAN discovery */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	FIP_OP_VN2VN =	5,		/* VN2VN operation */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 	FIP_OP_VENDOR_MIN = 0xfff8,	/* min vendor-specific opcode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 	FIP_OP_VENDOR_MAX = 0xfffe,	/* max vendor-specific opcode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73)  * Subcodes for FIP_OP_DISC.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) enum fip_disc_subcode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 	FIP_SC_SOL =	1,		/* solicitation */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 	FIP_SC_ADV =	2,		/* advertisement */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81)  * Subcodes for FIP_OP_LS.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) enum fip_trans_subcode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 	FIP_SC_REQ =	1,		/* request */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 	FIP_SC_REP =	2,		/* reply */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89)  * Subcodes for FIP_OP_RESET.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) enum fip_reset_subcode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 	FIP_SC_KEEP_ALIVE = 1,		/* keep-alive from VN_Port */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 	FIP_SC_CLR_VLINK = 2,		/* clear virtual link from VF_Port */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97)  * Subcodes for FIP_OP_VLAN.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) enum fip_vlan_subcode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 	FIP_SC_VL_REQ =	1,		/* vlan request */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 	FIP_SC_VL_NOTE = 2,		/* vlan notification */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 	FIP_SC_VL_VN2VN_NOTE = 3,	/* VN2VN vlan notification */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106)  * Subcodes for FIP_OP_VN2VN.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) enum fip_vn2vn_subcode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 	FIP_SC_VN_PROBE_REQ = 1,	/* probe request */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 	FIP_SC_VN_PROBE_REP = 2,	/* probe reply */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 	FIP_SC_VN_CLAIM_NOTIFY = 3,	/* claim notification */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 	FIP_SC_VN_CLAIM_REP = 4,	/* claim response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 	FIP_SC_VN_BEACON = 5,		/* beacon */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117)  * flags in header fip_flags.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) enum fip_flag {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 	FIP_FL_FPMA =	0x8000,		/* supports FPMA fabric-provided MACs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 	FIP_FL_SPMA =	0x4000,		/* supports SPMA server-provided MACs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 	FIP_FL_FCF =	0x0020,		/* originated from a controlling FCF */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 	FIP_FL_FDF =	0x0010,		/* originated from an FDF */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 	FIP_FL_REC_OR_P2P = 0x0008,	/* configured addr or point-to-point */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 	FIP_FL_AVAIL =	0x0004,		/* available for FLOGI/ELP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 	FIP_FL_SOL =	0x0002,		/* this is a solicited message */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 	FIP_FL_FPORT =	0x0001,		/* sent from an F port */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131)  * Common descriptor header format.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) struct fip_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 	__u8	fip_dtype;		/* type - see below */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 	__u8	fip_dlen;		/* length - in 32-bit words */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) enum fip_desc_type {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 	FIP_DT_PRI =	1,		/* priority for forwarder selection */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 	FIP_DT_MAC =	2,		/* MAC address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 	FIP_DT_MAP_OUI = 3,		/* FC-MAP OUI */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 	FIP_DT_NAME =	4,		/* switch name or node name */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 	FIP_DT_FAB =	5,		/* fabric descriptor */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 	FIP_DT_FCOE_SIZE = 6,		/* max FCoE frame size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 	FIP_DT_FLOGI =	7,		/* FLOGI request or response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 	FIP_DT_FDISC =	8,		/* FDISC request or response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 	FIP_DT_LOGO =	9,		/* LOGO request or response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 	FIP_DT_ELP =	10,		/* ELP request or response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 	FIP_DT_VN_ID =	11,		/* VN_Node Identifier */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 	FIP_DT_FKA =	12,		/* advertisement keep-alive period */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 	FIP_DT_VENDOR =	13,		/* vendor ID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) 	FIP_DT_VLAN =	14,		/* vlan number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 	FIP_DT_FC4F =	15,		/* FC-4 features */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) 	FIP_DT_LIMIT,			/* max defined desc_type + 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 	FIP_DT_NON_CRITICAL = 128,	/* First non-critical descriptor */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 	FIP_DT_CLR_VLINKS = 128,	/* Clear virtual links reason code */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 	FIP_DT_VENDOR_BASE = 241,	/* first vendor-specific desc_type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161)  * FIP_DT_PRI - priority descriptor.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) struct fip_pri_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 	struct fip_desc fd_desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 	__u8		fd_resvd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 	__u8		fd_pri;		/* FCF priority:  higher is better */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170)  * FIP_DT_MAC - MAC address descriptor.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) struct fip_mac_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 	struct fip_desc fd_desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 	__u8		fd_mac[ETH_ALEN];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178)  * FIP_DT_MAP - descriptor.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) struct fip_map_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) 	struct fip_desc fd_desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 	__u8		fd_resvd[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 	__u8		fd_map[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187)  * FIP_DT_NAME descriptor.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) struct fip_wwn_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) 	struct fip_desc fd_desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) 	__u8		fd_resvd[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) 	__be64		fd_wwn;		/* 64-bit WWN, unaligned */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196)  * FIP_DT_FAB descriptor.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) struct fip_fab_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 	struct fip_desc fd_desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 	__be16		fd_vfid;	/* virtual fabric ID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 	__u8		fd_resvd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) 	__u8		fd_map[3];	/* FC-MAP value */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 	__be64		fd_wwn;		/* fabric name, unaligned */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207)  * FIP_DT_FCOE_SIZE descriptor.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) struct fip_size_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) 	struct fip_desc fd_desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) 	__be16		fd_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215)  * Descriptor that encapsulates an ELS or ILS frame.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216)  * The encapsulated frame immediately follows this header, without
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217)  * SOF, EOF, or CRC.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) struct fip_encaps {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) 	struct fip_desc fd_desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) 	__u8		fd_resvd[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225)  * FIP_DT_VN_ID - VN_Node Identifier descriptor.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) struct fip_vn_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) 	struct fip_desc fd_desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 	__u8		fd_mac[ETH_ALEN];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) 	__u8		fd_resvd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) 	__u8		fd_fc_id[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) 	__be64		fd_wwpn;	/* port name, unaligned */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236)  * FIP_DT_FKA - Advertisement keep-alive period.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) struct fip_fka_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) 	struct fip_desc fd_desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) 	__u8		fd_resvd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) 	__u8		fd_flags;	/* bit0 is fka disable flag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) 	__be32		fd_fka_period;	/* adv./keep-alive period in mS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246)  * flags for fip_fka_desc.fd_flags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) enum fip_fka_flags {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) 	FIP_FKA_ADV_D =	0x01,		/* no need for FKA from ENode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) /* FIP_DT_FKA flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255)  * FIP_DT_VLAN descriptor
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) struct fip_vlan_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) 	struct fip_desc fd_desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) 	__be16		fd_vlan; /* Note: highest 4 bytes are unused */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263)  * FIP_DT_FC4F - FC-4 features.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) struct fip_fc4_feat {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) 	struct fip_desc fd_desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) 	__u8		fd_resvd[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) 	struct fc_ns_fts fd_fts;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) 	struct fc_ns_ff	fd_ff;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273)  * FIP_DT_VENDOR descriptor.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) struct fip_vendor_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) 	struct fip_desc fd_desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) 	__u8		fd_resvd[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) 	__u8		fd_vendor_id[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) #endif /* _FC_FIP_H_ */