aboutsummaryrefslogtreecommitdiff
path: root/drivers/scsi/qedi/qedi_nvm_iscsi_cfg.h
blob: df39b69b366d31bc0cebe3c0a43cb33c8f18ab6b (plain)
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
208
209
210
/*
 * QLogic iSCSI Offload Driver
 * Copyright (c) 2016 Cavium Inc.
 *
 * This software is available under the terms of the GNU General Public License
 * (GPL) Version 2, available from the file COPYING in the main directory of
 * this source tree.
 */

#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