1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Copyright(c) 2024 Intel Corporation. */
3 
4 #ifndef _IXGBE_TYPE_E610_H_
5 #define _IXGBE_TYPE_E610_H_
6 
7 #define BYTES_PER_DWORD	4
8 
9 /* General E610 defines */
10 #define IXGBE_MAX_VSI			768
11 
12 /* Checksum and Shadow RAM pointers */
13 #define E610_SR_SW_CHECKSUM_WORD		0x3F
14 
15 /* Shadow RAM related */
16 #define IXGBE_SR_WORDS_IN_1KB	512
17 
18 /* Firmware Status Register (GL_FWSTS) */
19 #define GL_FWSTS		0x00083048 /* Reset Source: POR */
20 #define GL_FWSTS_EP_PF0		BIT(24)
21 #define GL_FWSTS_EP_PF1		BIT(25)
22 
23 /* Global NVM General Status Register */
24 #define GLNVM_GENS		0x000B6100 /* Reset Source: POR */
25 #define GLNVM_GENS_SR_SIZE_M	GENMASK(7, 5)
26 
27 /* Flash Access Register */
28 #define IXGBE_GLNVM_FLA			0x000B6108 /* Reset Source: POR */
29 #define IXGBE_GLNVM_FLA_LOCKED_S	6
30 #define IXGBE_GLNVM_FLA_LOCKED_M	BIT(6)
31 
32 /* Admin Command Interface (ACI) registers */
33 #define IXGBE_PF_HIDA(_i)			(0x00085000 + ((_i) * 4))
34 #define IXGBE_PF_HIDA_2(_i)			(0x00085020 + ((_i) * 4))
35 #define IXGBE_PF_HIBA(_i)			(0x00084000 + ((_i) * 4))
36 #define IXGBE_PF_HICR				0x00082048
37 
38 #define IXGBE_PF_HICR_EN			BIT(0)
39 #define IXGBE_PF_HICR_C				BIT(1)
40 #define IXGBE_PF_HICR_SV			BIT(2)
41 #define IXGBE_PF_HICR_EV			BIT(3)
42 
43 #define IXGBE_ACI_DESC_SIZE		32
44 #define IXGBE_ACI_DESC_SIZE_IN_DWORDS	(IXGBE_ACI_DESC_SIZE / BYTES_PER_DWORD)
45 
46 #define IXGBE_ACI_MAX_BUFFER_SIZE		4096    /* Size in bytes */
47 #define IXGBE_ACI_SEND_DELAY_TIME_MS		10
48 #define IXGBE_ACI_SEND_MAX_EXECUTE		3
49 #define IXGBE_ACI_SEND_TIMEOUT_MS		\
50 		(IXGBE_ACI_SEND_MAX_EXECUTE * IXGBE_ACI_SEND_DELAY_TIME_MS)
51 /* [ms] timeout of waiting for sync response */
52 #define IXGBE_ACI_SYNC_RESPONSE_TIMEOUT		100000
53 /* [ms] timeout of waiting for async response */
54 #define IXGBE_ACI_ASYNC_RESPONSE_TIMEOUT	150000
55 /* [ms] timeout of waiting for resource release */
56 #define IXGBE_ACI_RELEASE_RES_TIMEOUT		10000
57 
58 /* FW defined boundary for a large buffer, 4k >= Large buffer > 512 bytes */
59 #define IXGBE_ACI_LG_BUF		512
60 
61 /* Flags sub-structure
62  * |0  |1  |2  |3  |4  |5  |6  |7  |8  |9  |10 |11 |12 |13 |14 |15 |
63  * |DD |CMP|ERR|VFE| * *  RESERVED * * |LB |RD |VFC|BUF|SI |EI |FE |
64  */
65 
66 #define IXGBE_ACI_FLAG_DD	BIT(0) /* 0x1 */
67 #define IXGBE_ACI_FLAG_CMP	BIT(1) /* 0x2 */
68 #define IXGBE_ACI_FLAG_ERR	BIT(2) /* 0x4 */
69 #define IXGBE_ACI_FLAG_VFE	BIT(3) /* 0x8 */
70 #define IXGBE_ACI_FLAG_LB	BIT(9) /* 0x200 */
71 #define IXGBE_ACI_FLAG_RD	BIT(10) /* 0x400 */
72 #define IXGBE_ACI_FLAG_VFC	BIT(11) /* 0x800 */
73 #define IXGBE_ACI_FLAG_BUF	BIT(12) /* 0x1000 */
74 #define IXGBE_ACI_FLAG_SI	BIT(13) /* 0x2000 */
75 #define IXGBE_ACI_FLAG_EI	BIT(14) /* 0x4000 */
76 #define IXGBE_ACI_FLAG_FE	BIT(15) /* 0x8000 */
77 
78 /* Admin Command Interface (ACI) error codes */
79 enum ixgbe_aci_err {
80 	IXGBE_ACI_RC_OK		= 0,  /* Success */
81 	IXGBE_ACI_RC_EPERM	= 1,  /* Operation not permitted */
82 	IXGBE_ACI_RC_ENOENT	= 2,  /* No such element */
83 	IXGBE_ACI_RC_ESRCH	= 3,  /* Bad opcode */
84 	IXGBE_ACI_RC_EINTR	= 4,  /* Operation interrupted */
85 	IXGBE_ACI_RC_EIO	= 5,  /* I/O error */
86 	IXGBE_ACI_RC_ENXIO	= 6,  /* No such resource */
87 	IXGBE_ACI_RC_E2BIG	= 7,  /* Arg too long */
88 	IXGBE_ACI_RC_EAGAIN	= 8,  /* Try again */
89 	IXGBE_ACI_RC_ENOMEM	= 9,  /* Out of memory */
90 	IXGBE_ACI_RC_EACCES	= 10, /* Permission denied */
91 	IXGBE_ACI_RC_EFAULT	= 11, /* Bad address */
92 	IXGBE_ACI_RC_EBUSY	= 12, /* Device or resource busy */
93 	IXGBE_ACI_RC_EEXIST	= 13, /* Object already exists */
94 	IXGBE_ACI_RC_EINVAL	= 14, /* Invalid argument */
95 	IXGBE_ACI_RC_ENOTTY	= 15, /* Not a typewriter */
96 	IXGBE_ACI_RC_ENOSPC	= 16, /* No space left or alloc failure */
97 	IXGBE_ACI_RC_ENOSYS	= 17, /* Function not implemented */
98 	IXGBE_ACI_RC_ERANGE	= 18, /* Parameter out of range */
99 	IXGBE_ACI_RC_EFLUSHED	= 19, /* Cmd flushed due to prev cmd error */
100 	IXGBE_ACI_RC_BAD_ADDR	= 20, /* Descriptor contains a bad pointer */
101 	IXGBE_ACI_RC_EMODE	= 21, /* Op not allowed in current dev mode */
102 	IXGBE_ACI_RC_EFBIG	= 22, /* File too big */
103 	IXGBE_ACI_RC_ESBCOMP	= 23, /* SB-IOSF completion unsuccessful */
104 	IXGBE_ACI_RC_ENOSEC	= 24, /* Missing security manifest */
105 	IXGBE_ACI_RC_EBADSIG	= 25, /* Bad RSA signature */
106 	IXGBE_ACI_RC_ESVN	= 26, /* SVN number prohibits this package */
107 	IXGBE_ACI_RC_EBADMAN	= 27, /* Manifest hash mismatch */
108 	IXGBE_ACI_RC_EBADBUF	= 28, /* Buffer hash mismatches manifest */
109 	IXGBE_ACI_RC_EACCES_BMCU	= 29, /* BMC Update in progress */
110 };
111 
112 /* Admin Command Interface (ACI) opcodes */
113 enum ixgbe_aci_opc {
114 	ixgbe_aci_opc_get_ver				= 0x0001,
115 	ixgbe_aci_opc_driver_ver			= 0x0002,
116 	ixgbe_aci_opc_get_exp_err			= 0x0005,
117 
118 	/* resource ownership */
119 	ixgbe_aci_opc_req_res				= 0x0008,
120 	ixgbe_aci_opc_release_res			= 0x0009,
121 
122 	/* device/function capabilities */
123 	ixgbe_aci_opc_list_func_caps			= 0x000A,
124 	ixgbe_aci_opc_list_dev_caps			= 0x000B,
125 
126 	/* safe disable of RXEN */
127 	ixgbe_aci_opc_disable_rxen			= 0x000C,
128 
129 	/* FW events */
130 	ixgbe_aci_opc_get_fw_event			= 0x0014,
131 
132 	/* PHY commands */
133 	ixgbe_aci_opc_get_phy_caps			= 0x0600,
134 	ixgbe_aci_opc_set_phy_cfg			= 0x0601,
135 	ixgbe_aci_opc_restart_an			= 0x0605,
136 	ixgbe_aci_opc_get_link_status			= 0x0607,
137 	ixgbe_aci_opc_set_event_mask			= 0x0613,
138 	ixgbe_aci_opc_get_link_topo			= 0x06E0,
139 	ixgbe_aci_opc_get_link_topo_pin			= 0x06E1,
140 	ixgbe_aci_opc_read_i2c				= 0x06E2,
141 	ixgbe_aci_opc_write_i2c				= 0x06E3,
142 	ixgbe_aci_opc_read_mdio				= 0x06E4,
143 	ixgbe_aci_opc_write_mdio			= 0x06E5,
144 	ixgbe_aci_opc_set_gpio_by_func			= 0x06E6,
145 	ixgbe_aci_opc_get_gpio_by_func			= 0x06E7,
146 	ixgbe_aci_opc_set_gpio				= 0x06EC,
147 	ixgbe_aci_opc_get_gpio				= 0x06ED,
148 	ixgbe_aci_opc_sff_eeprom			= 0x06EE,
149 	ixgbe_aci_opc_prog_topo_dev_nvm			= 0x06F2,
150 	ixgbe_aci_opc_read_topo_dev_nvm			= 0x06F3,
151 
152 	/* NVM commands */
153 	ixgbe_aci_opc_nvm_read				= 0x0701,
154 	ixgbe_aci_opc_nvm_erase				= 0x0702,
155 	ixgbe_aci_opc_nvm_write				= 0x0703,
156 	ixgbe_aci_opc_nvm_cfg_read			= 0x0704,
157 	ixgbe_aci_opc_nvm_cfg_write			= 0x0705,
158 	ixgbe_aci_opc_nvm_checksum			= 0x0706,
159 	ixgbe_aci_opc_nvm_write_activate		= 0x0707,
160 	ixgbe_aci_opc_nvm_sr_dump			= 0x0707,
161 	ixgbe_aci_opc_nvm_save_factory_settings		= 0x0708,
162 	ixgbe_aci_opc_nvm_update_empr			= 0x0709,
163 	ixgbe_aci_opc_nvm_pkg_data			= 0x070A,
164 	ixgbe_aci_opc_nvm_pass_component_tbl		= 0x070B,
165 
166 	/* Alternate Structure Commands */
167 	ixgbe_aci_opc_write_alt_direct			= 0x0900,
168 	ixgbe_aci_opc_write_alt_indirect		= 0x0901,
169 	ixgbe_aci_opc_read_alt_direct			= 0x0902,
170 	ixgbe_aci_opc_read_alt_indirect			= 0x0903,
171 	ixgbe_aci_opc_done_alt_write			= 0x0904,
172 	ixgbe_aci_opc_clear_port_alt_write		= 0x0906,
173 
174 	/* TCA Events */
175 	ixgbe_aci_opc_temp_tca_event                    = 0x0C94,
176 
177 	/* debug commands */
178 	ixgbe_aci_opc_debug_dump_internals		= 0xFF08,
179 
180 	/* SystemDiagnostic commands */
181 	ixgbe_aci_opc_set_health_status_config		= 0xFF20,
182 	ixgbe_aci_opc_get_supported_health_status_codes	= 0xFF21,
183 	ixgbe_aci_opc_get_health_status			= 0xFF22,
184 	ixgbe_aci_opc_clear_health_status		= 0xFF23,
185 };
186 
187 /* Get version (direct 0x0001) */
188 struct ixgbe_aci_cmd_get_ver {
189 	__le32 rom_ver;
190 	__le32 fw_build;
191 	u8 fw_branch;
192 	u8 fw_major;
193 	u8 fw_minor;
194 	u8 fw_patch;
195 	u8 api_branch;
196 	u8 api_major;
197 	u8 api_minor;
198 	u8 api_patch;
199 };
200 
201 #define IXGBE_DRV_VER_STR_LEN_E610	32
202 
203 /* Send driver version (indirect 0x0002) */
204 struct ixgbe_aci_cmd_driver_ver {
205 	u8 major_ver;
206 	u8 minor_ver;
207 	u8 build_ver;
208 	u8 subbuild_ver;
209 	u8 reserved[4];
210 	__le32 addr_high;
211 	__le32 addr_low;
212 };
213 
214 /* Get Expanded Error Code (0x0005, direct) */
215 struct ixgbe_aci_cmd_get_exp_err {
216 	__le32 reason;
217 #define IXGBE_ACI_EXPANDED_ERROR_NOT_PROVIDED	0xFFFFFFFF
218 	__le32 identifier;
219 	u8 rsvd[8];
220 };
221 
222 /* FW update timeout definitions are in milliseconds */
223 #define IXGBE_NVM_TIMEOUT		180000
224 
225 enum ixgbe_aci_res_access_type {
226 	IXGBE_RES_READ = 1,
227 	IXGBE_RES_WRITE
228 };
229 
230 enum ixgbe_aci_res_ids {
231 	IXGBE_NVM_RES_ID = 1,
232 	IXGBE_SPD_RES_ID,
233 	IXGBE_CHANGE_LOCK_RES_ID,
234 	IXGBE_GLOBAL_CFG_LOCK_RES_ID
235 };
236 
237 /* Request resource ownership (direct 0x0008)
238  * Release resource ownership (direct 0x0009)
239  */
240 struct ixgbe_aci_cmd_req_res {
241 	__le16 res_id;
242 	__le16 access_type;
243 
244 	/* Upon successful completion, FW writes this value and driver is
245 	 * expected to release resource before timeout. This value is provided
246 	 * in milliseconds.
247 	 */
248 	__le32 timeout;
249 #define IXGBE_ACI_RES_NVM_READ_DFLT_TIMEOUT_MS	3000
250 #define IXGBE_ACI_RES_NVM_WRITE_DFLT_TIMEOUT_MS	180000
251 #define IXGBE_ACI_RES_CHNG_LOCK_DFLT_TIMEOUT_MS	1000
252 #define IXGBE_ACI_RES_GLBL_LOCK_DFLT_TIMEOUT_MS	3000
253 	/* For SDP: pin ID of the SDP */
254 	__le32 res_number;
255 	__le16 status;
256 #define IXGBE_ACI_RES_GLBL_SUCCESS		0
257 #define IXGBE_ACI_RES_GLBL_IN_PROG		1
258 #define IXGBE_ACI_RES_GLBL_DONE			2
259 	u8 reserved[2];
260 };
261 
262 /* Get function capabilities (indirect 0x000A)
263  * Get device capabilities (indirect 0x000B)
264  */
265 struct ixgbe_aci_cmd_list_caps {
266 	u8 cmd_flags;
267 	u8 pf_index;
268 	u8 reserved[2];
269 	__le32 count;
270 	__le32 addr_high;
271 	__le32 addr_low;
272 };
273 
274 /* Device/Function buffer entry, repeated per reported capability */
275 struct ixgbe_aci_cmd_list_caps_elem {
276 	__le16 cap;
277 #define IXGBE_ACI_CAPS_VALID_FUNCTIONS			0x0005
278 #define IXGBE_ACI_MAX_VALID_FUNCTIONS			0x8
279 #define IXGBE_ACI_CAPS_SRIOV				0x0012
280 #define IXGBE_ACI_CAPS_VF				0x0013
281 #define IXGBE_ACI_CAPS_VMDQ				0x0014
282 #define IXGBE_ACI_CAPS_VSI				0x0017
283 #define IXGBE_ACI_CAPS_DCB				0x0018
284 #define IXGBE_ACI_CAPS_RSS				0x0040
285 #define IXGBE_ACI_CAPS_RXQS				0x0041
286 #define IXGBE_ACI_CAPS_TXQS				0x0042
287 #define IXGBE_ACI_CAPS_MSIX				0x0043
288 #define IXGBE_ACI_CAPS_FD				0x0045
289 #define IXGBE_ACI_CAPS_1588				0x0046
290 #define IXGBE_ACI_CAPS_MAX_MTU				0x0047
291 #define IXGBE_ACI_CAPS_NVM_VER				0x0048
292 #define IXGBE_ACI_CAPS_PENDING_NVM_VER			0x0049
293 #define IXGBE_ACI_CAPS_OROM_VER				0x004A
294 #define IXGBE_ACI_CAPS_PENDING_OROM_VER			0x004B
295 #define IXGBE_ACI_CAPS_PENDING_NET_VER			0x004D
296 #define IXGBE_ACI_CAPS_INLINE_IPSEC			0x0070
297 #define IXGBE_ACI_CAPS_NUM_ENABLED_PORTS		0x0072
298 #define IXGBE_ACI_CAPS_PCIE_RESET_AVOIDANCE		0x0076
299 #define IXGBE_ACI_CAPS_POST_UPDATE_RESET_RESTRICT	0x0077
300 #define IXGBE_ACI_CAPS_NVM_MGMT				0x0080
301 #define IXGBE_ACI_CAPS_EXT_TOPO_DEV_IMG0		0x0081
302 #define IXGBE_ACI_CAPS_EXT_TOPO_DEV_IMG1		0x0082
303 #define IXGBE_ACI_CAPS_EXT_TOPO_DEV_IMG2		0x0083
304 #define IXGBE_ACI_CAPS_EXT_TOPO_DEV_IMG3		0x0084
305 	u8 major_ver;
306 	u8 minor_ver;
307 	/* Number of resources described by this capability */
308 	__le32 number;
309 	/* Only meaningful for some types of resources */
310 	__le32 logical_id;
311 	/* Only meaningful for some types of resources */
312 	__le32 phys_id;
313 	__le64 rsvd1;
314 	__le64 rsvd2;
315 };
316 
317 /* Disable RXEN (direct 0x000C) */
318 struct ixgbe_aci_cmd_disable_rxen {
319 	u8 lport_num;
320 	u8 reserved[15];
321 };
322 
323 /* Get PHY capabilities (indirect 0x0600) */
324 struct ixgbe_aci_cmd_get_phy_caps {
325 	u8 lport_num;
326 	u8 reserved;
327 	__le16 param0;
328 	/* 18.0 - Report qualified modules */
329 #define IXGBE_ACI_GET_PHY_RQM		BIT(0)
330 	/* 18.1 - 18.3 : Report mode
331 	 * 000b - Report topology capabilities, without media
332 	 * 001b - Report topology capabilities, with media
333 	 * 010b - Report Active configuration
334 	 * 011b - Report PHY Type and FEC mode capabilities
335 	 * 100b - Report Default capabilities
336 	 */
337 #define IXGBE_ACI_REPORT_MODE_M			GENMASK(3, 1)
338 #define IXGBE_ACI_REPORT_TOPO_CAP_NO_MEDIA	0
339 #define IXGBE_ACI_REPORT_TOPO_CAP_MEDIA		BIT(1)
340 #define IXGBE_ACI_REPORT_ACTIVE_CFG		BIT(2)
341 #define IXGBE_ACI_REPORT_DFLT_CFG		BIT(3)
342 	__le32 reserved1;
343 	__le32 addr_high;
344 	__le32 addr_low;
345 };
346 
347 /* This is #define of PHY type (Extended):
348  * The first set of defines is for phy_type_low.
349  */
350 #define IXGBE_PHY_TYPE_LOW_100BASE_TX		BIT_ULL(0)
351 #define IXGBE_PHY_TYPE_LOW_100M_SGMII		BIT_ULL(1)
352 #define IXGBE_PHY_TYPE_LOW_1000BASE_T		BIT_ULL(2)
353 #define IXGBE_PHY_TYPE_LOW_1000BASE_SX		BIT_ULL(3)
354 #define IXGBE_PHY_TYPE_LOW_1000BASE_LX		BIT_ULL(4)
355 #define IXGBE_PHY_TYPE_LOW_1000BASE_KX		BIT_ULL(5)
356 #define IXGBE_PHY_TYPE_LOW_1G_SGMII		BIT_ULL(6)
357 #define IXGBE_PHY_TYPE_LOW_2500BASE_T		BIT_ULL(7)
358 #define IXGBE_PHY_TYPE_LOW_2500BASE_X		BIT_ULL(8)
359 #define IXGBE_PHY_TYPE_LOW_2500BASE_KX		BIT_ULL(9)
360 #define IXGBE_PHY_TYPE_LOW_5GBASE_T		BIT_ULL(10)
361 #define IXGBE_PHY_TYPE_LOW_5GBASE_KR		BIT_ULL(11)
362 #define IXGBE_PHY_TYPE_LOW_10GBASE_T		BIT_ULL(12)
363 #define IXGBE_PHY_TYPE_LOW_10G_SFI_DA		BIT_ULL(13)
364 #define IXGBE_PHY_TYPE_LOW_10GBASE_SR		BIT_ULL(14)
365 #define IXGBE_PHY_TYPE_LOW_10GBASE_LR		BIT_ULL(15)
366 #define IXGBE_PHY_TYPE_LOW_10GBASE_KR_CR1	BIT_ULL(16)
367 #define IXGBE_PHY_TYPE_LOW_10G_SFI_AOC_ACC	BIT_ULL(17)
368 #define IXGBE_PHY_TYPE_LOW_10G_SFI_C2C		BIT_ULL(18)
369 #define IXGBE_PHY_TYPE_LOW_25GBASE_T		BIT_ULL(19)
370 #define IXGBE_PHY_TYPE_LOW_25GBASE_CR		BIT_ULL(20)
371 #define IXGBE_PHY_TYPE_LOW_25GBASE_CR_S		BIT_ULL(21)
372 #define IXGBE_PHY_TYPE_LOW_25GBASE_CR1		BIT_ULL(22)
373 #define IXGBE_PHY_TYPE_LOW_25GBASE_SR		BIT_ULL(23)
374 #define IXGBE_PHY_TYPE_LOW_25GBASE_LR		BIT_ULL(24)
375 #define IXGBE_PHY_TYPE_LOW_25GBASE_KR		BIT_ULL(25)
376 #define IXGBE_PHY_TYPE_LOW_25GBASE_KR_S		BIT_ULL(26)
377 #define IXGBE_PHY_TYPE_LOW_25GBASE_KR1		BIT_ULL(27)
378 #define IXGBE_PHY_TYPE_LOW_25G_AUI_AOC_ACC	BIT_ULL(28)
379 #define IXGBE_PHY_TYPE_LOW_25G_AUI_C2C		BIT_ULL(29)
380 #define IXGBE_PHY_TYPE_LOW_MAX_INDEX		29
381 /* The second set of defines is for phy_type_high. */
382 #define IXGBE_PHY_TYPE_HIGH_10BASE_T		BIT_ULL(1)
383 #define IXGBE_PHY_TYPE_HIGH_10M_SGMII		BIT_ULL(2)
384 #define IXGBE_PHY_TYPE_HIGH_2500M_SGMII		BIT_ULL(56)
385 #define IXGBE_PHY_TYPE_HIGH_100M_USXGMII	BIT_ULL(57)
386 #define IXGBE_PHY_TYPE_HIGH_1G_USXGMII		BIT_ULL(58)
387 #define IXGBE_PHY_TYPE_HIGH_2500M_USXGMII	BIT_ULL(59)
388 #define IXGBE_PHY_TYPE_HIGH_5G_USXGMII		BIT_ULL(60)
389 #define IXGBE_PHY_TYPE_HIGH_10G_USXGMII		BIT_ULL(61)
390 #define IXGBE_PHY_TYPE_HIGH_MAX_INDEX		61
391 
392 struct ixgbe_aci_cmd_get_phy_caps_data {
393 	__le64 phy_type_low; /* Use values from IXGBE_PHY_TYPE_LOW_* */
394 	__le64 phy_type_high; /* Use values from IXGBE_PHY_TYPE_HIGH_* */
395 	u8 caps;
396 #define IXGBE_ACI_PHY_EN_TX_LINK_PAUSE			BIT(0)
397 #define IXGBE_ACI_PHY_EN_RX_LINK_PAUSE			BIT(1)
398 #define IXGBE_ACI_PHY_LOW_POWER_MODE			BIT(2)
399 #define IXGBE_ACI_PHY_EN_LINK				BIT(3)
400 #define IXGBE_ACI_PHY_AN_MODE				BIT(4)
401 #define IXGBE_ACI_PHY_EN_MOD_QUAL			BIT(5)
402 #define IXGBE_ACI_PHY_EN_LESM				BIT(6)
403 #define IXGBE_ACI_PHY_EN_AUTO_FEC			BIT(7)
404 #define IXGBE_ACI_PHY_CAPS_MASK				GENMASK(7, 0)
405 	u8 low_power_ctrl_an;
406 #define IXGBE_ACI_PHY_EN_D3COLD_LOW_POWER_AUTONEG	BIT(0)
407 #define IXGBE_ACI_PHY_AN_EN_CLAUSE28			BIT(1)
408 #define IXGBE_ACI_PHY_AN_EN_CLAUSE73			BIT(2)
409 #define IXGBE_ACI_PHY_AN_EN_CLAUSE37			BIT(3)
410 	__le16 eee_cap;
411 #define IXGBE_ACI_PHY_EEE_EN_100BASE_TX			BIT(0)
412 #define IXGBE_ACI_PHY_EEE_EN_1000BASE_T			BIT(1)
413 #define IXGBE_ACI_PHY_EEE_EN_10GBASE_T			BIT(2)
414 #define IXGBE_ACI_PHY_EEE_EN_1000BASE_KX		BIT(3)
415 #define IXGBE_ACI_PHY_EEE_EN_10GBASE_KR			BIT(4)
416 #define IXGBE_ACI_PHY_EEE_EN_25GBASE_KR			BIT(5)
417 #define IXGBE_ACI_PHY_EEE_EN_10BASE_T			BIT(11)
418 	__le16 eeer_value;
419 	u8 phy_id_oui[4]; /* PHY/Module ID connected on the port */
420 	u8 phy_fw_ver[8];
421 	u8 link_fec_options;
422 #define IXGBE_ACI_PHY_FEC_10G_KR_40G_KR4_EN		BIT(0)
423 #define IXGBE_ACI_PHY_FEC_10G_KR_40G_KR4_REQ		BIT(1)
424 #define IXGBE_ACI_PHY_FEC_25G_RS_528_REQ		BIT(2)
425 #define IXGBE_ACI_PHY_FEC_25G_KR_REQ			BIT(3)
426 #define IXGBE_ACI_PHY_FEC_25G_RS_544_REQ		BIT(4)
427 #define IXGBE_ACI_PHY_FEC_25G_RS_CLAUSE91_EN		BIT(6)
428 #define IXGBE_ACI_PHY_FEC_25G_KR_CLAUSE74_EN		BIT(7)
429 #define IXGBE_ACI_PHY_FEC_MASK				0xdf
430 	u8 module_compliance_enforcement;
431 #define IXGBE_ACI_MOD_ENFORCE_STRICT_MODE		BIT(0)
432 	u8 extended_compliance_code;
433 #define IXGBE_ACI_MODULE_TYPE_TOTAL_BYTE		3
434 	u8 module_type[IXGBE_ACI_MODULE_TYPE_TOTAL_BYTE];
435 #define IXGBE_ACI_MOD_TYPE_BYTE0_SFP_PLUS		0xA0
436 #define IXGBE_ACI_MOD_TYPE_BYTE0_QSFP_PLUS		0x80
437 #define IXGBE_ACI_MOD_TYPE_IDENT			1
438 #define IXGBE_ACI_MOD_TYPE_BYTE1_SFP_PLUS_CU_PASSIVE	BIT(0)
439 #define IXGBE_ACI_MOD_TYPE_BYTE1_SFP_PLUS_CU_ACTIVE	BIT(1)
440 #define IXGBE_ACI_MOD_TYPE_BYTE1_10G_BASE_SR		BIT(4)
441 #define IXGBE_ACI_MOD_TYPE_BYTE1_10G_BASE_LR		BIT(5)
442 #define IXGBE_ACI_MOD_TYPE_BYTE1_10G_BASE_LRM		BIT(6)
443 #define IXGBE_ACI_MOD_TYPE_BYTE1_10G_BASE_ER		BIT(7)
444 #define IXGBE_ACI_MOD_TYPE_BYTE2_SFP_PLUS		0xA0
445 #define IXGBE_ACI_MOD_TYPE_BYTE2_QSFP_PLUS		0x86
446 	u8 qualified_module_count;
447 	u8 rsvd2[7];	/* Bytes 47:41 reserved */
448 #define IXGBE_ACI_QUAL_MOD_COUNT_MAX			16
449 	struct {
450 		u8 v_oui[3];
451 		u8 rsvd3;
452 		u8 v_part[16];
453 		__le32 v_rev;
454 		__le64 rsvd4;
455 	} qual_modules[IXGBE_ACI_QUAL_MOD_COUNT_MAX];
456 };
457 
458 /* Set PHY capabilities (direct 0x0601)
459  * NOTE: This command must be followed by setup link and restart auto-neg
460  */
461 struct ixgbe_aci_cmd_set_phy_cfg {
462 	u8 lport_num;
463 	u8 reserved[7];
464 	__le32 addr_high;
465 	__le32 addr_low;
466 };
467 
468 /* Set PHY config command data structure */
469 struct ixgbe_aci_cmd_set_phy_cfg_data {
470 	__le64 phy_type_low; /* Use values from IXGBE_PHY_TYPE_LOW_* */
471 	__le64 phy_type_high; /* Use values from IXGBE_PHY_TYPE_HIGH_* */
472 	u8 caps;
473 #define IXGBE_ACI_PHY_ENA_VALID_MASK		0xef
474 #define IXGBE_ACI_PHY_ENA_TX_PAUSE_ABILITY	BIT(0)
475 #define IXGBE_ACI_PHY_ENA_RX_PAUSE_ABILITY	BIT(1)
476 #define IXGBE_ACI_PHY_ENA_LOW_POWER		BIT(2)
477 #define IXGBE_ACI_PHY_ENA_LINK			BIT(3)
478 #define IXGBE_ACI_PHY_ENA_AUTO_LINK_UPDT	BIT(5)
479 #define IXGBE_ACI_PHY_ENA_LESM			BIT(6)
480 #define IXGBE_ACI_PHY_ENA_AUTO_FEC		BIT(7)
481 	u8 low_power_ctrl_an;
482 	__le16 eee_cap; /* Value from ixgbe_aci_get_phy_caps */
483 	__le16 eeer_value; /* Use defines from ixgbe_aci_get_phy_caps */
484 	u8 link_fec_opt; /* Use defines from ixgbe_aci_get_phy_caps */
485 	u8 module_compliance_enforcement;
486 };
487 
488 /* Restart AN command data structure (direct 0x0605)
489  * Also used for response, with only the lport_num field present.
490  */
491 struct ixgbe_aci_cmd_restart_an {
492 	u8 lport_num;
493 	u8 reserved;
494 	u8 cmd_flags;
495 #define IXGBE_ACI_RESTART_AN_LINK_RESTART	BIT(1)
496 #define IXGBE_ACI_RESTART_AN_LINK_ENABLE	BIT(2)
497 	u8 reserved2[13];
498 };
499 
500 /* Get link status (indirect 0x0607), also used for Link Status Event */
501 struct ixgbe_aci_cmd_get_link_status {
502 	u8 lport_num;
503 	u8 reserved;
504 	__le16 cmd_flags;
505 #define IXGBE_ACI_LSE_M				GENMASK(1, 0)
506 #define IXGBE_ACI_LSE_NOP			0x0
507 #define IXGBE_ACI_LSE_DIS			0x2
508 #define IXGBE_ACI_LSE_ENA			0x3
509 	/* only response uses this flag */
510 #define IXGBE_ACI_LSE_IS_ENABLED		0x1
511 	__le32 reserved2;
512 	__le32 addr_high;
513 	__le32 addr_low;
514 };
515 
516 /* Get link status response data structure, also used for Link Status Event */
517 struct ixgbe_aci_cmd_get_link_status_data {
518 	u8 topo_media_conflict;
519 #define IXGBE_ACI_LINK_TOPO_CONFLICT		BIT(0)
520 #define IXGBE_ACI_LINK_MEDIA_CONFLICT		BIT(1)
521 #define IXGBE_ACI_LINK_TOPO_CORRUPT		BIT(2)
522 #define IXGBE_ACI_LINK_TOPO_UNREACH_PRT		BIT(4)
523 #define IXGBE_ACI_LINK_TOPO_UNDRUTIL_PRT	BIT(5)
524 #define IXGBE_ACI_LINK_TOPO_UNDRUTIL_MEDIA	BIT(6)
525 #define IXGBE_ACI_LINK_TOPO_UNSUPP_MEDIA	BIT(7)
526 	u8 link_cfg_err;
527 #define IXGBE_ACI_LINK_CFG_ERR				BIT(0)
528 #define IXGBE_ACI_LINK_CFG_COMPLETED			BIT(1)
529 #define IXGBE_ACI_LINK_ACT_PORT_OPT_INVAL		BIT(2)
530 #define IXGBE_ACI_LINK_FEAT_ID_OR_CONFIG_ID_INVAL	BIT(3)
531 #define IXGBE_ACI_LINK_TOPO_CRITICAL_SDP_ERR		BIT(4)
532 #define IXGBE_ACI_LINK_MODULE_POWER_UNSUPPORTED		BIT(5)
533 #define IXGBE_ACI_LINK_EXTERNAL_PHY_LOAD_FAILURE	BIT(6)
534 #define IXGBE_ACI_LINK_INVAL_MAX_POWER_LIMIT		BIT(7)
535 	u8 link_info;
536 #define IXGBE_ACI_LINK_UP		BIT(0)	/* Link Status */
537 #define IXGBE_ACI_LINK_FAULT		BIT(1)
538 #define IXGBE_ACI_LINK_FAULT_TX		BIT(2)
539 #define IXGBE_ACI_LINK_FAULT_RX		BIT(3)
540 #define IXGBE_ACI_LINK_FAULT_REMOTE	BIT(4)
541 #define IXGBE_ACI_LINK_UP_PORT		BIT(5)	/* External Port Link Status */
542 #define IXGBE_ACI_MEDIA_AVAILABLE	BIT(6)
543 #define IXGBE_ACI_SIGNAL_DETECT		BIT(7)
544 	u8 an_info;
545 #define IXGBE_ACI_AN_COMPLETED		BIT(0)
546 #define IXGBE_ACI_LP_AN_ABILITY		BIT(1)
547 #define IXGBE_ACI_PD_FAULT		BIT(2)	/* Parallel Detection Fault */
548 #define IXGBE_ACI_FEC_EN		BIT(3)
549 #define IXGBE_ACI_PHY_LOW_POWER		BIT(4)	/* Low Power State */
550 #define IXGBE_ACI_LINK_PAUSE_TX		BIT(5)
551 #define IXGBE_ACI_LINK_PAUSE_RX		BIT(6)
552 #define IXGBE_ACI_QUALIFIED_MODULE	BIT(7)
553 	u8 ext_info;
554 #define IXGBE_ACI_LINK_PHY_TEMP_ALARM	BIT(0)
555 #define IXGBE_ACI_LINK_EXCESSIVE_ERRORS	BIT(1)	/* Excessive Link Errors */
556 	/* Port Tx Suspended */
557 #define IXGBE_ACI_LINK_TX_ACTIVE	0
558 #define IXGBE_ACI_LINK_TX_DRAINED	1
559 #define IXGBE_ACI_LINK_TX_FLUSHED	3
560 	u8 lb_status;
561 #define IXGBE_ACI_LINK_LB_PHY_LCL	BIT(0)
562 #define IXGBE_ACI_LINK_LB_PHY_RMT	BIT(1)
563 #define IXGBE_ACI_LINK_LB_MAC_LCL	BIT(2)
564 	__le16 max_frame_size;
565 	u8 cfg;
566 #define IXGBE_ACI_LINK_25G_KR_FEC_EN		BIT(0)
567 #define IXGBE_ACI_LINK_25G_RS_528_FEC_EN	BIT(1)
568 #define IXGBE_ACI_LINK_25G_RS_544_FEC_EN	BIT(2)
569 #define IXGBE_ACI_FEC_MASK			GENMASK(2, 0)
570 	/* Pacing Config */
571 #define IXGBE_ACI_CFG_PACING_M		GENMASK(6, 3)
572 #define IXGBE_ACI_CFG_PACING_TYPE_M	BIT(7)
573 #define IXGBE_ACI_CFG_PACING_TYPE_AVG	0
574 #define IXGBE_ACI_CFG_PACING_TYPE_FIXED	IXGBE_ACI_CFG_PACING_TYPE_M
575 	/* External Device Power Ability */
576 	u8 power_desc;
577 #define IXGBE_ACI_PWR_CLASS_M			GENMASK(5, 0)
578 #define IXGBE_ACI_LINK_PWR_BASET_LOW_HIGH	0
579 #define IXGBE_ACI_LINK_PWR_BASET_HIGH		1
580 #define IXGBE_ACI_LINK_PWR_QSFP_CLASS_1		0
581 #define IXGBE_ACI_LINK_PWR_QSFP_CLASS_2		1
582 #define IXGBE_ACI_LINK_PWR_QSFP_CLASS_3		2
583 #define IXGBE_ACI_LINK_PWR_QSFP_CLASS_4		3
584 	__le16 link_speed;
585 #define IXGBE_ACI_LINK_SPEED_M			GENMASK(10, 0)
586 #define IXGBE_ACI_LINK_SPEED_10MB		BIT(0)
587 #define IXGBE_ACI_LINK_SPEED_100MB		BIT(1)
588 #define IXGBE_ACI_LINK_SPEED_1000MB		BIT(2)
589 #define IXGBE_ACI_LINK_SPEED_2500MB		BIT(3)
590 #define IXGBE_ACI_LINK_SPEED_5GB		BIT(4)
591 #define IXGBE_ACI_LINK_SPEED_10GB		BIT(5)
592 #define IXGBE_ACI_LINK_SPEED_20GB		BIT(6)
593 #define IXGBE_ACI_LINK_SPEED_25GB		BIT(7)
594 #define IXGBE_ACI_LINK_SPEED_40GB		BIT(8)
595 #define IXGBE_ACI_LINK_SPEED_50GB		BIT(9)
596 #define IXGBE_ACI_LINK_SPEED_100GB		BIT(10)
597 #define IXGBE_ACI_LINK_SPEED_200GB		BIT(11)
598 #define IXGBE_ACI_LINK_SPEED_UNKNOWN		BIT(15)
599 	__le16 reserved3;
600 	u8 ext_fec_status;
601 #define IXGBE_ACI_LINK_RS_272_FEC_EN	BIT(0) /* RS 272 FEC enabled */
602 	u8 reserved4;
603 	__le64 phy_type_low; /* Use values from ICE_PHY_TYPE_LOW_* */
604 	__le64 phy_type_high; /* Use values from ICE_PHY_TYPE_HIGH_* */
605 	/* Get link status version 2 link partner data */
606 	__le64 lp_phy_type_low; /* Use values from ICE_PHY_TYPE_LOW_* */
607 	__le64 lp_phy_type_high; /* Use values from ICE_PHY_TYPE_HIGH_* */
608 	u8 lp_fec_adv;
609 #define IXGBE_ACI_LINK_LP_10G_KR_FEC_CAP	BIT(0)
610 #define IXGBE_ACI_LINK_LP_25G_KR_FEC_CAP	BIT(1)
611 #define IXGBE_ACI_LINK_LP_RS_528_FEC_CAP	BIT(2)
612 #define IXGBE_ACI_LINK_LP_50G_KR_272_FEC_CAP	BIT(3)
613 #define IXGBE_ACI_LINK_LP_100G_KR_272_FEC_CAP	BIT(4)
614 #define IXGBE_ACI_LINK_LP_200G_KR_272_FEC_CAP	BIT(5)
615 	u8 lp_fec_req;
616 #define IXGBE_ACI_LINK_LP_10G_KR_FEC_REQ	BIT(0)
617 #define IXGBE_ACI_LINK_LP_25G_KR_FEC_REQ	BIT(1)
618 #define IXGBE_ACI_LINK_LP_RS_528_FEC_REQ	BIT(2)
619 #define IXGBE_ACI_LINK_LP_KR_272_FEC_REQ	BIT(3)
620 	u8 lp_flowcontrol;
621 #define IXGBE_ACI_LINK_LP_PAUSE_ADV		BIT(0)
622 #define IXGBE_ACI_LINK_LP_ASM_DIR_ADV		BIT(1)
623 	u8 reserved5[5];
624 } __packed;
625 
626 /* Set event mask command (direct 0x0613) */
627 struct ixgbe_aci_cmd_set_event_mask {
628 	u8	lport_num;
629 	u8	reserved[7];
630 	__le16	event_mask;
631 #define IXGBE_ACI_LINK_EVENT_UPDOWN		BIT(1)
632 #define IXGBE_ACI_LINK_EVENT_MEDIA_NA		BIT(2)
633 #define IXGBE_ACI_LINK_EVENT_LINK_FAULT		BIT(3)
634 #define IXGBE_ACI_LINK_EVENT_PHY_TEMP_ALARM	BIT(4)
635 #define IXGBE_ACI_LINK_EVENT_EXCESSIVE_ERRORS	BIT(5)
636 #define IXGBE_ACI_LINK_EVENT_SIGNAL_DETECT	BIT(6)
637 #define IXGBE_ACI_LINK_EVENT_AN_COMPLETED	BIT(7)
638 #define IXGBE_ACI_LINK_EVENT_MODULE_QUAL_FAIL	BIT(8)
639 #define IXGBE_ACI_LINK_EVENT_PORT_TX_SUSPENDED	BIT(9)
640 #define IXGBE_ACI_LINK_EVENT_TOPO_CONFLICT	BIT(10)
641 #define IXGBE_ACI_LINK_EVENT_MEDIA_CONFLICT	BIT(11)
642 #define IXGBE_ACI_LINK_EVENT_PHY_FW_LOAD_FAIL	BIT(12)
643 	u8	reserved1[6];
644 };
645 
646 struct ixgbe_aci_cmd_link_topo_params {
647 	u8 lport_num;
648 	u8 lport_num_valid;
649 #define IXGBE_ACI_LINK_TOPO_PORT_NUM_VALID	BIT(0)
650 	u8 node_type_ctx;
651 #define IXGBE_ACI_LINK_TOPO_NODE_TYPE_M		GENMASK(3, 0)
652 #define IXGBE_ACI_LINK_TOPO_NODE_TYPE_PHY	0
653 #define IXGBE_ACI_LINK_TOPO_NODE_TYPE_GPIO_CTRL	1
654 #define IXGBE_ACI_LINK_TOPO_NODE_TYPE_MUX_CTRL	2
655 #define IXGBE_ACI_LINK_TOPO_NODE_TYPE_LED_CTRL	3
656 #define IXGBE_ACI_LINK_TOPO_NODE_TYPE_LED	4
657 #define IXGBE_ACI_LINK_TOPO_NODE_TYPE_THERMAL	5
658 #define IXGBE_ACI_LINK_TOPO_NODE_TYPE_CAGE	6
659 #define IXGBE_ACI_LINK_TOPO_NODE_TYPE_MEZZ	7
660 #define IXGBE_ACI_LINK_TOPO_NODE_TYPE_ID_EEPROM	8
661 #define IXGBE_ACI_LINK_TOPO_NODE_TYPE_CLK_CTRL	9
662 #define IXGBE_ACI_LINK_TOPO_NODE_TYPE_CLK_MUX	10
663 #define IXGBE_ACI_LINK_TOPO_NODE_TYPE_GPS	11
664 #define IXGBE_ACI_LINK_TOPO_NODE_CTX_S		4
665 #define IXGBE_ACI_LINK_TOPO_NODE_CTX_M		GENMASK(7, 4)
666 #define IXGBE_ACI_LINK_TOPO_NODE_CTX_GLOBAL			0
667 #define IXGBE_ACI_LINK_TOPO_NODE_CTX_BOARD			1
668 #define IXGBE_ACI_LINK_TOPO_NODE_CTX_PORT			2
669 #define IXGBE_ACI_LINK_TOPO_NODE_CTX_NODE			3
670 #define IXGBE_ACI_LINK_TOPO_NODE_CTX_NODE_HANDLE		4
671 #define IXGBE_ACI_LINK_TOPO_NODE_CTX_DIRECT_BUS_ACCESS		5
672 #define IXGBE_ACI_LINK_TOPO_NODE_CTX_NODE_HANDLE_BUS_ADDRESS	6
673 	u8 index;
674 };
675 
676 struct ixgbe_aci_cmd_link_topo_addr {
677 	struct ixgbe_aci_cmd_link_topo_params topo_params;
678 	__le16 handle;
679 /* Used to decode the handle field */
680 #define IXGBE_ACI_LINK_TOPO_HANDLE_BRD_TYPE_M		BIT(9)
681 #define IXGBE_ACI_LINK_TOPO_HANDLE_BRD_TYPE_LOM		BIT(9)
682 #define IXGBE_ACI_LINK_TOPO_HANDLE_BRD_TYPE_MEZZ	0
683 };
684 
685 /* Get Link Topology Handle (direct, 0x06E0) */
686 struct ixgbe_aci_cmd_get_link_topo {
687 	struct ixgbe_aci_cmd_link_topo_addr addr;
688 	u8 node_part_num;
689 #define IXGBE_ACI_GET_LINK_TOPO_NODE_NR_PCA9575		0x21
690 #define IXGBE_ACI_GET_LINK_TOPO_NODE_NR_ZL30632_80032	0x24
691 #define IXGBE_ACI_GET_LINK_TOPO_NODE_NR_SI5384		0x25
692 #define IXGBE_ACI_GET_LINK_TOPO_NODE_NR_C827		0x31
693 #define IXGBE_ACI_GET_LINK_TOPO_NODE_NR_GEN_CLK_MUX	0x47
694 #define IXGBE_ACI_GET_LINK_TOPO_NODE_NR_GEN_GPS		0x48
695 #define IXGBE_ACI_GET_LINK_TOPO_NODE_NR_E610_PTC	0x49
696 	u8 rsvd[9];
697 };
698 
699 /* Get Link Topology Pin (direct, 0x06E1) */
700 struct ixgbe_aci_cmd_get_link_topo_pin {
701 	struct ixgbe_aci_cmd_link_topo_addr addr;
702 	u8 input_io_params;
703 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_GPIO	0
704 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_RESET_N	1
705 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_INT_N	2
706 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_PRESENT_N	3
707 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_TX_DIS	4
708 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_MODSEL_N	5
709 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_LPMODE	6
710 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_TX_FAULT	7
711 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_RX_LOSS	8
712 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_RS0		9
713 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_RS1		10
714 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_EEPROM_WP	11
715 /* 12 repeats intentionally due to two different uses depending on context */
716 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_LED		12
717 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_RED_LED	12
718 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_GREEN_LED	13
719 #define IXGBE_ACI_LINK_TOPO_IO_FUNC_BLUE_LED	14
720 #define IXGBE_ACI_LINK_TOPO_INPUT_IO_TYPE_GPIO	3
721 /* Use IXGBE_ACI_LINK_TOPO_NODE_TYPE_* for the type values */
722 	u8 output_io_params;
723 /* Use IXGBE_ACI_LINK_TOPO_NODE_TYPE_* for the type values */
724 	u8 output_io_flags;
725 #define IXGBE_ACI_LINK_TOPO_OUTPUT_POLARITY	BIT(5)
726 #define IXGBE_ACI_LINK_TOPO_OUTPUT_VALUE	BIT(6)
727 #define IXGBE_ACI_LINK_TOPO_OUTPUT_DRIVEN	BIT(7)
728 	u8 rsvd[7];
729 };
730 
731 /* Read/Write SFF EEPROM command (indirect 0x06EE) */
732 struct ixgbe_aci_cmd_sff_eeprom {
733 	u8 lport_num;
734 	u8 lport_num_valid;
735 #define IXGBE_ACI_SFF_PORT_NUM_VALID		BIT(0)
736 	__le16 i2c_bus_addr;
737 #define IXGBE_ACI_SFF_I2CBUS_7BIT_M		GENMASK(6, 0)
738 #define IXGBE_ACI_SFF_I2CBUS_10BIT_M		GENMASK(9, 0)
739 #define IXGBE_ACI_SFF_I2CBUS_TYPE_M		BIT(10)
740 #define IXGBE_ACI_SFF_I2CBUS_TYPE_7BIT		0
741 #define IXGBE_ACI_SFF_I2CBUS_TYPE_10BIT		IXGBE_ACI_SFF_I2CBUS_TYPE_M
742 #define IXGBE_ACI_SFF_NO_PAGE_BANK_UPDATE	0
743 #define IXGBE_ACI_SFF_UPDATE_PAGE		1
744 #define IXGBE_ACI_SFF_UPDATE_BANK		2
745 #define IXGBE_ACI_SFF_UPDATE_PAGE_BANK		3
746 #define IXGBE_ACI_SFF_IS_WRITE			BIT(15)
747 	__le16 i2c_offset;
748 	u8 module_bank;
749 	u8 module_page;
750 	__le32 addr_high;
751 	__le32 addr_low;
752 };
753 
754 /* NVM Read command (indirect 0x0701)
755  * NVM Erase commands (direct 0x0702)
756  * NVM Write commands (indirect 0x0703)
757  * NVM Write Activate commands (direct 0x0707)
758  * NVM Shadow RAM Dump commands (direct 0x0707)
759  */
760 struct ixgbe_aci_cmd_nvm {
761 #define IXGBE_ACI_NVM_MAX_OFFSET	0xFFFFFF
762 	__le16 offset_low;
763 	u8 offset_high; /* For Write Activate offset_high is used as flags2 */
764 	u8 cmd_flags;
765 #define IXGBE_ACI_NVM_LAST_CMD		BIT(0)
766 #define IXGBE_ACI_NVM_PCIR_REQ		BIT(0) /* Used by NVM Write reply */
767 #define IXGBE_ACI_NVM_PRESERVE_ALL	BIT(1)
768 #define IXGBE_ACI_NVM_ACTIV_SEL_NVM	BIT(3) /* Write Activate/SR Dump only */
769 #define IXGBE_ACI_NVM_ACTIV_SEL_OROM	BIT(4)
770 #define IXGBE_ACI_NVM_ACTIV_SEL_NETLIST	BIT(5)
771 #define IXGBE_ACI_NVM_SPECIAL_UPDATE	BIT(6)
772 #define IXGBE_ACI_NVM_REVERT_LAST_ACTIV	BIT(6) /* Write Activate only */
773 #define IXGBE_ACI_NVM_FLASH_ONLY	BIT(7)
774 #define IXGBE_ACI_NVM_RESET_LVL_M	GENMASK(1, 0) /* Write reply only */
775 #define IXGBE_ACI_NVM_POR_FLAG		0
776 #define IXGBE_ACI_NVM_PERST_FLAG	1
777 #define IXGBE_ACI_NVM_EMPR_FLAG		2
778 #define IXGBE_ACI_NVM_EMPR_ENA		BIT(0) /* Write Activate reply only */
779 	/* For Write Activate, several flags are sent as part of a separate
780 	 * flags2 field using a separate byte. For simplicity of the software
781 	 * interface, we pass the flags as a 16 bit value so these flags are
782 	 * all offset by 8 bits
783 	 */
784 #define IXGBE_ACI_NVM_ACTIV_REQ_EMPR	BIT(8) /* NVM Write Activate only */
785 	__le16 module_typeid;
786 	__le16 length;
787 #define IXGBE_ACI_NVM_ERASE_LEN	0xFFFF
788 	__le32 addr_high;
789 	__le32 addr_low;
790 };
791 
792 /* NVM Module_Type ID, needed offset and read_len for
793  * struct ixgbe_aci_cmd_nvm.
794  */
795 #define IXGBE_ACI_NVM_START_POINT		0
796 
797 /* NVM Checksum Command (direct, 0x0706) */
798 struct ixgbe_aci_cmd_nvm_checksum {
799 	u8 flags;
800 #define IXGBE_ACI_NVM_CHECKSUM_VERIFY	BIT(0)
801 #define IXGBE_ACI_NVM_CHECKSUM_RECALC	BIT(1)
802 	u8 rsvd;
803 	__le16 checksum; /* Used only by response */
804 #define IXGBE_ACI_NVM_CHECKSUM_CORRECT	0xBABA
805 	u8 rsvd2[12];
806 };
807 
808 /**
809  * struct ixgbe_aci_desc - Admin Command (AC) descriptor
810  * @flags: IXGBE_ACI_FLAG_* flags
811  * @opcode: Admin command opcode
812  * @datalen: length in bytes of indirect/external data buffer
813  * @retval: return value from firmware
814  * @cookie_high: opaque data high-half
815  * @cookie_low: opaque data low-half
816  * @params: command-specific parameters
817  *
818  * Descriptor format for commands the driver posts via the
819  * Admin Command Interface (ACI).
820  * The firmware writes back onto the command descriptor and returns
821  * the result of the command. Asynchronous events that are not an immediate
822  * result of the command are written to the Admin Command Interface (ACI) using
823  * the same descriptor format. Descriptors are in little-endian notation with
824  * 32-bit words.
825  */
826 struct ixgbe_aci_desc {
827 	__le16 flags;
828 	__le16 opcode;
829 	__le16 datalen;
830 	__le16 retval;
831 	__le32 cookie_high;
832 	__le32 cookie_low;
833 	union {
834 		u8 raw[16];
835 		struct ixgbe_aci_cmd_get_ver get_ver;
836 		struct ixgbe_aci_cmd_driver_ver driver_ver;
837 		struct ixgbe_aci_cmd_get_exp_err exp_err;
838 		struct ixgbe_aci_cmd_req_res res_owner;
839 		struct ixgbe_aci_cmd_list_caps get_cap;
840 		struct ixgbe_aci_cmd_disable_rxen disable_rxen;
841 		struct ixgbe_aci_cmd_get_phy_caps get_phy;
842 		struct ixgbe_aci_cmd_set_phy_cfg set_phy;
843 		struct ixgbe_aci_cmd_restart_an restart_an;
844 		struct ixgbe_aci_cmd_get_link_status get_link_status;
845 		struct ixgbe_aci_cmd_set_event_mask set_event_mask;
846 		struct ixgbe_aci_cmd_get_link_topo get_link_topo;
847 		struct ixgbe_aci_cmd_get_link_topo_pin get_link_topo_pin;
848 		struct ixgbe_aci_cmd_sff_eeprom read_write_sff_param;
849 		struct ixgbe_aci_cmd_nvm nvm;
850 		struct ixgbe_aci_cmd_nvm_checksum nvm_checksum;
851 	} params;
852 };
853 
854 /* E610-specific adapter context structures */
855 
856 struct ixgbe_link_status {
857 	/* Refer to ixgbe_aci_phy_type for bits definition */
858 	u64 phy_type_low;
859 	u64 phy_type_high;
860 	u16 max_frame_size;
861 	u16 link_speed;
862 	u16 req_speeds;
863 	u8 topo_media_conflict;
864 	u8 link_cfg_err;
865 	u8 lse_ena;	/* Link Status Event notification */
866 	u8 link_info;
867 	u8 an_info;
868 	u8 ext_info;
869 	u8 fec_info;
870 	u8 pacing;
871 	/* Refer to #define from module_type[IXGBE_ACI_MODULE_TYPE_TOTAL_BYTE]
872 	 * of ixgbe_aci_get_phy_caps structure
873 	 */
874 	u8 module_type[IXGBE_ACI_MODULE_TYPE_TOTAL_BYTE];
875 };
876 
877 /* Common HW capabilities for SW use */
878 struct ixgbe_hw_caps {
879 	/* Write CSR protection */
880 	u64 wr_csr_prot;
881 	u32 switching_mode;
882 	/* switching mode supported - EVB switching (including cloud) */
883 #define IXGBE_NVM_IMAGE_TYPE_EVB		0x0
884 
885 	/* Manageability mode & supported protocols over MCTP */
886 	u32 mgmt_mode;
887 #define IXGBE_MGMT_MODE_PASS_THRU_MODE_M	GENMASK(3, 0)
888 #define IXGBE_MGMT_MODE_CTL_INTERFACE_M		GENMASK(7, 4)
889 #define IXGBE_MGMT_MODE_REDIR_SB_INTERFACE_M	GENMASK(11, 8)
890 
891 	u32 mgmt_protocols_mctp;
892 #define IXGBE_MGMT_MODE_PROTO_RSVD	BIT(0)
893 #define IXGBE_MGMT_MODE_PROTO_PLDM	BIT(1)
894 #define IXGBE_MGMT_MODE_PROTO_OEM	BIT(2)
895 #define IXGBE_MGMT_MODE_PROTO_NC_SI	BIT(3)
896 
897 	u32 os2bmc;
898 	u32 valid_functions;
899 	/* DCB capabilities */
900 	u32 active_tc_bitmap;
901 	u32 maxtc;
902 
903 	/* RSS related capabilities */
904 	u32 rss_table_size;		/* 512 for PFs and 64 for VFs */
905 	u32 rss_table_entry_width;	/* RSS Entry width in bits */
906 
907 	/* Tx/Rx queues */
908 	u32 num_rxq;			/* Number/Total Rx queues */
909 	u32 rxq_first_id;		/* First queue ID for Rx queues */
910 	u32 num_txq;			/* Number/Total Tx queues */
911 	u32 txq_first_id;		/* First queue ID for Tx queues */
912 
913 	/* MSI-X vectors */
914 	u32 num_msix_vectors;
915 	u32 msix_vector_first_id;
916 
917 	/* Max MTU for function or device */
918 	u32 max_mtu;
919 
920 	/* WOL related */
921 	u32 num_wol_proxy_fltr;
922 	u32 wol_proxy_vsi_seid;
923 
924 	/* LED/SDP pin count */
925 	u32 led_pin_num;
926 	u32 sdp_pin_num;
927 
928 	/* LED/SDP - Supports up to 12 LED pins and 8 SDP signals */
929 #define IXGBE_MAX_SUPPORTED_GPIO_LED	12
930 #define IXGBE_MAX_SUPPORTED_GPIO_SDP	8
931 	u8 led[IXGBE_MAX_SUPPORTED_GPIO_LED];
932 	u8 sdp[IXGBE_MAX_SUPPORTED_GPIO_SDP];
933 	/* SR-IOV virtualization */
934 	u8 sr_iov_1_1;			/* SR-IOV enabled */
935 	/* VMDQ */
936 	u8 vmdq;			/* VMDQ supported */
937 
938 	/* EVB capabilities */
939 	u8 evb_802_1_qbg;		/* Edge Virtual Bridging */
940 	u8 evb_802_1_qbh;		/* Bridge Port Extension */
941 
942 	u8 dcb;
943 	u8 iscsi;
944 	u8 ieee_1588;
945 	u8 mgmt_cem;
946 
947 	/* WoL and APM support */
948 #define IXGBE_WOL_SUPPORT_M		BIT(0)
949 #define IXGBE_ACPI_PROG_MTHD_M		BIT(1)
950 #define IXGBE_PROXY_SUPPORT_M		BIT(2)
951 	u8 apm_wol_support;
952 	u8 acpi_prog_mthd;
953 	u8 proxy_support;
954 	bool nvm_update_pending_nvm;
955 	bool nvm_update_pending_orom;
956 	bool nvm_update_pending_netlist;
957 #define IXGBE_NVM_PENDING_NVM_IMAGE		BIT(0)
958 #define IXGBE_NVM_PENDING_OROM			BIT(1)
959 #define IXGBE_NVM_PENDING_NETLIST		BIT(2)
960 	bool sec_rev_disabled;
961 	bool update_disabled;
962 	bool nvm_unified_update;
963 	bool netlist_auth;
964 #define IXGBE_NVM_MGMT_SEC_REV_DISABLED		BIT(0)
965 #define IXGBE_NVM_MGMT_UPDATE_DISABLED		BIT(1)
966 #define IXGBE_NVM_MGMT_UNIFIED_UPD_SUPPORT	BIT(3)
967 #define IXGBE_NVM_MGMT_NETLIST_AUTH_SUPPORT	BIT(5)
968 	bool no_drop_policy_support;
969 	/* PCIe reset avoidance */
970 	bool pcie_reset_avoidance; /* false: not supported, true: supported */
971 	/* Post update reset restriction */
972 	bool reset_restrict_support; /* false: not supported, true: supported */
973 
974 	/* External topology device images within the NVM */
975 #define IXGBE_EXT_TOPO_DEV_IMG_COUNT	4
976 	u32 ext_topo_dev_img_ver_high[IXGBE_EXT_TOPO_DEV_IMG_COUNT];
977 	u32 ext_topo_dev_img_ver_low[IXGBE_EXT_TOPO_DEV_IMG_COUNT];
978 	u8 ext_topo_dev_img_part_num[IXGBE_EXT_TOPO_DEV_IMG_COUNT];
979 #define IXGBE_EXT_TOPO_DEV_IMG_PART_NUM_S	8
980 #define IXGBE_EXT_TOPO_DEV_IMG_PART_NUM_M	GENMASK(15, 8)
981 	bool ext_topo_dev_img_load_en[IXGBE_EXT_TOPO_DEV_IMG_COUNT];
982 #define IXGBE_EXT_TOPO_DEV_IMG_LOAD_EN	BIT(0)
983 	bool ext_topo_dev_img_prog_en[IXGBE_EXT_TOPO_DEV_IMG_COUNT];
984 #define IXGBE_EXT_TOPO_DEV_IMG_PROG_EN	BIT(1)
985 } __packed;
986 
987 /* Function specific capabilities */
988 struct ixgbe_hw_func_caps {
989 	u32 num_allocd_vfs;		/* Number of allocated VFs */
990 	u32 vf_base_id;			/* Logical ID of the first VF */
991 	u32 guar_num_vsi;
992 	struct ixgbe_hw_caps common_cap;
993 	bool no_drop_policy_ena;
994 };
995 
996 /* Device wide capabilities */
997 struct ixgbe_hw_dev_caps {
998 	struct ixgbe_hw_caps common_cap;
999 	u32 num_vfs_exposed;		/* Total number of VFs exposed */
1000 	u32 num_vsi_allocd_to_host;	/* Excluding EMP VSI */
1001 	u32 num_flow_director_fltr;	/* Number of FD filters available */
1002 	u32 num_funcs;
1003 };
1004 
1005 /* ACI event information */
1006 struct ixgbe_aci_event {
1007 	struct ixgbe_aci_desc desc;
1008 	u8 *msg_buf;
1009 	u16 msg_len;
1010 	u16 buf_len;
1011 };
1012 
1013 struct ixgbe_aci_info {
1014 	struct mutex lock;		/* admin command interface lock */
1015 	enum ixgbe_aci_err last_status;	/* last status of sent admin command */
1016 };
1017 
1018 /* Option ROM version information */
1019 struct ixgbe_orom_info {
1020 	u8 major;			/* Major version of OROM */
1021 	u8 patch;			/* Patch version of OROM */
1022 	u16 build;			/* Build version of OROM */
1023 	u32 srev;			/* Security revision */
1024 };
1025 
1026 /* NVM version information */
1027 struct ixgbe_nvm_info {
1028 	u32 eetrack;
1029 	u32 srev;
1030 	u8 major;
1031 	u8 minor;
1032 } __packed;
1033 
1034 /* netlist version information */
1035 struct ixgbe_netlist_info {
1036 	u32 major;			/* major high/low */
1037 	u32 minor;			/* minor high/low */
1038 	u32 type;			/* type high/low */
1039 	u32 rev;			/* revision high/low */
1040 	u32 hash;			/* SHA-1 hash word */
1041 	u16 cust_ver;			/* customer version */
1042 } __packed;
1043 
1044 /* Enumeration of possible flash banks for the NVM, OROM, and Netlist modules
1045  * of the flash image.
1046  */
1047 enum ixgbe_flash_bank {
1048 	IXGBE_INVALID_FLASH_BANK,
1049 	IXGBE_1ST_FLASH_BANK,
1050 	IXGBE_2ND_FLASH_BANK,
1051 };
1052 
1053 /* information for accessing NVM, OROM, and Netlist flash banks */
1054 struct ixgbe_bank_info {
1055 	u32 nvm_ptr;				/* Pointer to 1st NVM bank */
1056 	u32 nvm_size;				/* Size of NVM bank */
1057 	u32 orom_ptr;				/* Pointer to 1st OROM bank */
1058 	u32 orom_size;				/* Size of OROM bank */
1059 	u32 netlist_ptr;			/* Ptr to 1st Netlist bank */
1060 	u32 netlist_size;			/* Size of Netlist bank */
1061 	enum ixgbe_flash_bank nvm_bank;		/* Active NVM bank */
1062 	enum ixgbe_flash_bank orom_bank;	/* Active OROM bank */
1063 	enum ixgbe_flash_bank netlist_bank;	/* Active Netlist bank */
1064 };
1065 
1066 /* Flash Chip Information */
1067 struct ixgbe_flash_info {
1068 	struct ixgbe_orom_info orom;	/* Option ROM version info */
1069 	u32 flash_size;			/* Available flash size in bytes */
1070 	struct ixgbe_nvm_info nvm;	/* NVM version information */
1071 	struct ixgbe_netlist_info netlist;	/* Netlist version info */
1072 	struct ixgbe_bank_info banks;	/* Flash Bank information */
1073 	u16 sr_words;			/* Shadow RAM size in words */
1074 	u8 blank_nvm_mode;		/* is NVM empty (no FW present) */
1075 };
1076 
1077 #endif /* _IXGBE_TYPE_E610_H_ */
1078