Training courses
Kernel and Embedded Linux
Bootlin training courses
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207
/* SPDX-License-Identifier: GPL-2.0-only */ /* * QLogic iSCSI Offload Driver * Copyright (c) 2016 Cavium Inc. */ #ifndef NVM_ISCSI_CFG_H #define NVM_ISCSI_CFG_H #define NUM_OF_ISCSI_TARGET_PER_PF 4 /* Defined as per the * ISCSI IBFT constraint */ #define NUM_OF_ISCSI_PF_SUPPORTED 4 /* One PF per Port - * assuming 4 port card */ #define NVM_ISCSI_CFG_DHCP_NAME_MAX_LEN 256 union nvm_iscsi_dhcp_vendor_id { u32 value[NVM_ISCSI_CFG_DHCP_NAME_MAX_LEN / 4]; u8 byte[NVM_ISCSI_CFG_DHCP_NAME_MAX_LEN]; }; #define NVM_ISCSI_IPV4_ADDR_BYTE_LEN 4 union nvm_iscsi_ipv4_addr { u32 addr; u8 byte[NVM_ISCSI_IPV4_ADDR_BYTE_LEN]; }; #define NVM_ISCSI_IPV6_ADDR_BYTE_LEN 16 union nvm_iscsi_ipv6_addr { u32 addr[4]; u8 byte[NVM_ISCSI_IPV6_ADDR_BYTE_LEN]; }; struct nvm_iscsi_initiator_ipv4 { union nvm_iscsi_ipv4_addr addr; /* 0x0 */ union nvm_iscsi_ipv4_addr subnet_mask; /* 0x4 */ union nvm_iscsi_ipv4_addr gateway; /* 0x8 */ union nvm_iscsi_ipv4_addr primary_dns; /* 0xC */ union nvm_iscsi_ipv4_addr secondary_dns; /* 0x10 */ union nvm_iscsi_ipv4_addr dhcp_addr; /* 0x14 */ union nvm_iscsi_ipv4_addr isns_server; /* 0x18 */ union nvm_iscsi_ipv4_addr slp_server; /* 0x1C */ union nvm_iscsi_ipv4_addr primay_radius_server; /* 0x20 */ union nvm_iscsi_ipv4_addr secondary_radius_server; /* 0x24 */ union nvm_iscsi_ipv4_addr rsvd[4]; /* 0x28 */ }; struct nvm_iscsi_initiator_ipv6 { union nvm_iscsi_ipv6_addr addr; /* 0x0 */ union nvm_iscsi_ipv6_addr subnet_mask; /* 0x10 */ union nvm_iscsi_ipv6_addr gateway; /* 0x20 */ union nvm_iscsi_ipv6_addr primary_dns; /* 0x30 */ union nvm_iscsi_ipv6_addr secondary_dns; /* 0x40 */ union nvm_iscsi_ipv6_addr dhcp_addr; /* 0x50 */ union nvm_iscsi_ipv6_addr isns_server; /* 0x60 */ union nvm_iscsi_ipv6_addr slp_server; /* 0x70 */ union nvm_iscsi_ipv6_addr primay_radius_server; /* 0x80 */ union nvm_iscsi_ipv6_addr secondary_radius_server; /* 0x90 */ union nvm_iscsi_ipv6_addr rsvd[3]; /* 0xA0 */ u32 config; /* 0xD0 */ #define NVM_ISCSI_CFG_INITIATOR_IPV6_SUBNET_MASK_PREFIX_MASK 0x000000FF #define NVM_ISCSI_CFG_INITIATOR_IPV6_SUBNET_MASK_PREFIX_OFFSET 0 u32 rsvd_1[3]; }; #define NVM_ISCSI_CFG_ISCSI_NAME_MAX_LEN 256 union nvm_iscsi_name { u32 value[NVM_ISCSI_CFG_ISCSI_NAME_MAX_LEN / 4]; u8 byte[NVM_ISCSI_CFG_ISCSI_NAME_MAX_LEN]; }; #define NVM_ISCSI_CFG_CHAP_NAME_MAX_LEN 256 union nvm_iscsi_chap_name { u32 value[NVM_ISCSI_CFG_CHAP_NAME_MAX_LEN / 4]; u8 byte[NVM_ISCSI_CFG_CHAP_NAME_MAX_LEN]; }; #define NVM_ISCSI_CFG_CHAP_PWD_MAX_LEN 16 /* md5 need per RFC1996 * is 16 octets */ union nvm_iscsi_chap_password { u32 value[NVM_ISCSI_CFG_CHAP_PWD_MAX_LEN / 4]; u8 byte[NVM_ISCSI_CFG_CHAP_PWD_MAX_LEN]; }; union nvm_iscsi_lun { u8 byte[8]; u32 value[2]; }; struct nvm_iscsi_generic { u32 ctrl_flags; /* 0x0 */ #define NVM_ISCSI_CFG_GEN_CHAP_ENABLED BIT(0) #define NVM_ISCSI_CFG_GEN_DHCP_TCPIP_CONFIG_ENABLED BIT(1) #define NVM_ISCSI_CFG_GEN_DHCP_ISCSI_CONFIG_ENABLED BIT(2) #define NVM_ISCSI_CFG_GEN_IPV6_ENABLED BIT(3) #define NVM_ISCSI_CFG_GEN_IPV4_FALLBACK_ENABLED BIT(4) #define NVM_ISCSI_CFG_GEN_ISNS_WORLD_LOGIN BIT(5) #define NVM_ISCSI_CFG_GEN_ISNS_SELECTIVE_LOGIN BIT(6) #define NVM_ISCSI_CFG_GEN_ADDR_REDIRECT_ENABLED BIT(7) #define NVM_ISCSI_CFG_GEN_CHAP_MUTUAL_ENABLED BIT(8) u32 timeout; /* 0x4 */ #define NVM_ISCSI_CFG_GEN_DHCP_REQUEST_TIMEOUT_MASK 0x0000FFFF #define NVM_ISCSI_CFG_GEN_DHCP_REQUEST_TIMEOUT_OFFSET 0 #define NVM_ISCSI_CFG_GEN_PORT_LOGIN_TIMEOUT_MASK 0xFFFF0000 #define NVM_ISCSI_CFG_GEN_PORT_LOGIN_TIMEOUT_OFFSET 16 union nvm_iscsi_dhcp_vendor_id dhcp_vendor_id; /* 0x8 */ u32 rsvd[62]; /* 0x108 */ }; struct nvm_iscsi_initiator { struct nvm_iscsi_initiator_ipv4 ipv4; /* 0x0 */ struct nvm_iscsi_initiator_ipv6 ipv6; /* 0x38 */ union nvm_iscsi_name initiator_name; /* 0x118 */ union nvm_iscsi_chap_name chap_name; /* 0x218 */ union nvm_iscsi_chap_password chap_password; /* 0x318 */ u32 generic_cont0; /* 0x398 */ #define NVM_ISCSI_CFG_INITIATOR_VLAN_MASK 0x0000FFFF #define NVM_ISCSI_CFG_INITIATOR_VLAN_OFFSET 0 #define NVM_ISCSI_CFG_INITIATOR_IP_VERSION_MASK 0x00030000 #define NVM_ISCSI_CFG_INITIATOR_IP_VERSION_OFFSET 16 #define NVM_ISCSI_CFG_INITIATOR_IP_VERSION_4 1 #define NVM_ISCSI_CFG_INITIATOR_IP_VERSION_6 2 #define NVM_ISCSI_CFG_INITIATOR_IP_VERSION_4_AND_6 3 u32 ctrl_flags; #define NVM_ISCSI_CFG_INITIATOR_IP_VERSION_PRIORITY_V6 BIT(0) #define NVM_ISCSI_CFG_INITIATOR_VLAN_ENABLED BIT(1) u32 rsvd[116]; /* 0x32C */ }; struct nvm_iscsi_target { u32 ctrl_flags; /* 0x0 */ #define NVM_ISCSI_CFG_TARGET_ENABLED BIT(0) #define NVM_ISCSI_CFG_BOOT_TIME_LOGIN_STATUS BIT(1) u32 generic_cont0; /* 0x4 */ #define NVM_ISCSI_CFG_TARGET_TCP_PORT_MASK 0x0000FFFF #define NVM_ISCSI_CFG_TARGET_TCP_PORT_OFFSET 0 u32 ip_ver; #define NVM_ISCSI_CFG_IPv4 4 #define NVM_ISCSI_CFG_IPv6 6 u32 rsvd_1[7]; /* 0x24 */ union nvm_iscsi_ipv4_addr ipv4_addr; /* 0x28 */ union nvm_iscsi_ipv6_addr ipv6_addr; /* 0x2C */ union nvm_iscsi_lun lun; /* 0x3C */ union nvm_iscsi_name target_name; /* 0x44 */ union nvm_iscsi_chap_name chap_name; /* 0x144 */ union nvm_iscsi_chap_password chap_password; /* 0x244 */ u32 rsvd_2[107]; /* 0x2C4 */ }; struct nvm_iscsi_block { u32 id; /* 0x0 */ #define NVM_ISCSI_CFG_BLK_MAPPED_PF_ID_MASK 0x0000000F #define NVM_ISCSI_CFG_BLK_MAPPED_PF_ID_OFFSET 0 #define NVM_ISCSI_CFG_BLK_CTRL_FLAG_MASK 0x00000FF0 #define NVM_ISCSI_CFG_BLK_CTRL_FLAG_OFFSET 4 #define NVM_ISCSI_CFG_BLK_CTRL_FLAG_IS_NOT_EMPTY BIT(0) #define NVM_ISCSI_CFG_BLK_CTRL_FLAG_PF_MAPPED BIT(1) u32 rsvd_1[5]; /* 0x4 */ struct nvm_iscsi_generic generic; /* 0x18 */ struct nvm_iscsi_initiator initiator; /* 0x218 */ struct nvm_iscsi_target target[NUM_OF_ISCSI_TARGET_PER_PF]; /* 0x718 */ u32 rsvd_2[58]; /* 0x1718 */ /* total size - 0x1800 - 6K block */ }; struct nvm_iscsi_cfg { u32 id; /* 0x0 */ #define NVM_ISCSI_CFG_BLK_VERSION_MINOR_MASK 0x000000FF #define NVM_ISCSI_CFG_BLK_VERSION_MAJOR_MASK 0x0000FF00 #define NVM_ISCSI_CFG_BLK_SIGNATURE_MASK 0xFFFF0000 #define NVM_ISCSI_CFG_BLK_SIGNATURE 0x49430000 /* IC - Iscsi * Config */ #define NVM_ISCSI_CFG_BLK_VERSION_MAJOR 0 #define NVM_ISCSI_CFG_BLK_VERSION_MINOR 10 #define NVM_ISCSI_CFG_BLK_VERSION ((NVM_ISCSI_CFG_BLK_VERSION_MAJOR << 8) | \ NVM_ISCSI_CFG_BLK_VERSION_MINOR) struct nvm_iscsi_block block[NUM_OF_ISCSI_PF_SUPPORTED]; /* 0x4 */ }; #endif