if_ixlvar.h revision 1.6 1 1.6 yamaguch /* $NetBSD: if_ixlvar.h,v 1.6 2020/02/12 06:37:21 yamaguchi Exp $ */
2 1.1 yamaguch
3 1.1 yamaguch /*
4 1.1 yamaguch * Copyright (c) 2019 Internet Initiative Japan, Inc.
5 1.1 yamaguch * All rights reserved.
6 1.1 yamaguch *
7 1.1 yamaguch * Redistribution and use in source and binary forms, with or without
8 1.1 yamaguch * modification, are permitted provided that the following conditions
9 1.1 yamaguch * are met:
10 1.1 yamaguch * 1. Redistributions of source code must retain the above copyright
11 1.1 yamaguch * notice, this list of conditions and the following disclaimer.
12 1.1 yamaguch * 2. Redistributions in binary form must reproduce the above copyright
13 1.1 yamaguch * notice, this list of conditions and the following disclaimer in the
14 1.1 yamaguch * documentation and/or other materials provided with the distribution.
15 1.1 yamaguch *
16 1.1 yamaguch * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
17 1.1 yamaguch * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
18 1.1 yamaguch * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 1.1 yamaguch * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
20 1.1 yamaguch * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 1.1 yamaguch * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 1.1 yamaguch * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 1.1 yamaguch * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24 1.1 yamaguch * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 1.1 yamaguch * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 1.1 yamaguch * POSSIBILITY OF SUCH DAMAGE.
27 1.1 yamaguch */
28 1.1 yamaguch
29 1.1 yamaguch #ifndef _DEV_PCI_IF_IXLVAR_H_
30 1.1 yamaguch #define _DEV_PCI_IF_IXLVAR_H_
31 1.1 yamaguch
32 1.1 yamaguch enum i40e_filter_pctype {
33 1.1 yamaguch /* Note: Values 0-28 are reserved for future use.
34 1.1 yamaguch * Value 29, 30, 32 are not supported on XL710 and X710.
35 1.1 yamaguch */
36 1.1 yamaguch I40E_FILTER_PCTYPE_NONF_UNICAST_IPV4_UDP = 29,
37 1.1 yamaguch I40E_FILTER_PCTYPE_NONF_MULTICAST_IPV4_UDP = 30,
38 1.1 yamaguch I40E_FILTER_PCTYPE_NONF_IPV4_UDP = 31,
39 1.1 yamaguch I40E_FILTER_PCTYPE_NONF_IPV4_TCP_SYN_NO_ACK = 32,
40 1.1 yamaguch I40E_FILTER_PCTYPE_NONF_IPV4_TCP = 33,
41 1.1 yamaguch I40E_FILTER_PCTYPE_NONF_IPV4_SCTP = 34,
42 1.1 yamaguch I40E_FILTER_PCTYPE_NONF_IPV4_OTHER = 35,
43 1.1 yamaguch I40E_FILTER_PCTYPE_FRAG_IPV4 = 36,
44 1.1 yamaguch /* Note: Values 37-38 are reserved for future use.
45 1.1 yamaguch * Value 39, 40, 42 are not supported on XL710 and X710.
46 1.1 yamaguch */
47 1.1 yamaguch I40E_FILTER_PCTYPE_NONF_UNICAST_IPV6_UDP = 39,
48 1.1 yamaguch I40E_FILTER_PCTYPE_NONF_MULTICAST_IPV6_UDP = 40,
49 1.1 yamaguch I40E_FILTER_PCTYPE_NONF_IPV6_UDP = 41,
50 1.1 yamaguch I40E_FILTER_PCTYPE_NONF_IPV6_TCP_SYN_NO_ACK = 42,
51 1.1 yamaguch I40E_FILTER_PCTYPE_NONF_IPV6_TCP = 43,
52 1.1 yamaguch I40E_FILTER_PCTYPE_NONF_IPV6_SCTP = 44,
53 1.1 yamaguch I40E_FILTER_PCTYPE_NONF_IPV6_OTHER = 45,
54 1.1 yamaguch I40E_FILTER_PCTYPE_FRAG_IPV6 = 46,
55 1.1 yamaguch /* Note: Value 47 is reserved for future use */
56 1.1 yamaguch I40E_FILTER_PCTYPE_FCOE_OX = 48,
57 1.1 yamaguch I40E_FILTER_PCTYPE_FCOE_RX = 49,
58 1.1 yamaguch I40E_FILTER_PCTYPE_FCOE_OTHER = 50,
59 1.1 yamaguch /* Note: Values 51-62 are reserved for future use */
60 1.1 yamaguch I40E_FILTER_PCTYPE_L2_PAYLOAD = 63,
61 1.1 yamaguch };
62 1.1 yamaguch
63 1.1 yamaguch enum i40e_reset_type {
64 1.1 yamaguch I40E_RESET_POR = 0,
65 1.1 yamaguch I40E_RESET_CORER = 1,
66 1.1 yamaguch I40E_RESET_GLOBR = 2,
67 1.1 yamaguch I40E_RESET_EMPR = 3,
68 1.1 yamaguch };
69 1.1 yamaguch
70 1.1 yamaguch struct ixl_aq_desc {
71 1.1 yamaguch uint16_t iaq_flags;
72 1.1 yamaguch #define IXL_AQ_DD (1U << 0)
73 1.1 yamaguch #define IXL_AQ_CMP (1U << 1)
74 1.1 yamaguch #define IXL_AQ_ERR (1U << 2)
75 1.1 yamaguch #define IXL_AQ_VFE (1U << 3)
76 1.1 yamaguch #define IXL_AQ_LB (1U << 9)
77 1.1 yamaguch #define IXL_AQ_RD (1U << 10)
78 1.1 yamaguch #define IXL_AQ_VFC (1U << 11)
79 1.1 yamaguch #define IXL_AQ_BUF (1U << 12)
80 1.1 yamaguch #define IXL_AQ_SI (1U << 13)
81 1.1 yamaguch #define IXL_AQ_EI (1U << 14)
82 1.1 yamaguch #define IXL_AQ_FE (1U << 15)
83 1.1 yamaguch
84 1.1 yamaguch #define IXL_AQ_FLAGS_FMT "\020" "\020FE" "\017EI" "\016SI" "\015BUF" \
85 1.1 yamaguch "\014VFC" "\013DB" "\012LB" "\004VFE" \
86 1.1 yamaguch "\003ERR" "\002CMP" "\001DD"
87 1.1 yamaguch
88 1.1 yamaguch uint16_t iaq_opcode;
89 1.1 yamaguch
90 1.1 yamaguch uint16_t iaq_datalen;
91 1.1 yamaguch uint16_t iaq_retval;
92 1.1 yamaguch
93 1.1 yamaguch uint64_t iaq_cookie;
94 1.1 yamaguch
95 1.1 yamaguch uint32_t iaq_param[4];
96 1.1 yamaguch /* iaq_data_hi iaq_param[2] */
97 1.1 yamaguch /* iaq_data_lo iaq_param[3] */
98 1.1 yamaguch } __packed __aligned(16);
99 1.1 yamaguch
100 1.1 yamaguch /* aq commands */
101 1.1 yamaguch #define IXL_AQ_OP_GET_VERSION 0x0001
102 1.1 yamaguch #define IXL_AQ_OP_DRIVER_VERSION 0x0002
103 1.1 yamaguch #define IXL_AQ_OP_QUEUE_SHUTDOWN 0x0003
104 1.1 yamaguch #define IXL_AQ_OP_SET_PF_CONTEXT 0x0004
105 1.1 yamaguch #define IXL_AQ_OP_GET_AQ_ERR_REASON 0x0005
106 1.1 yamaguch #define IXL_AQ_OP_REQUEST_RESOURCE 0x0008
107 1.1 yamaguch #define IXL_AQ_OP_RELEASE_RESOURCE 0x0009
108 1.1 yamaguch #define IXL_AQ_OP_LIST_FUNC_CAP 0x000a
109 1.1 yamaguch #define IXL_AQ_OP_LIST_DEV_CAP 0x000b
110 1.1 yamaguch #define IXL_AQ_OP_MAC_ADDRESS_READ 0x0107
111 1.1 yamaguch #define IXL_AQ_OP_CLEAR_PXE_MODE 0x0110
112 1.1 yamaguch #define IXL_AQ_OP_SWITCH_GET_CONFIG 0x0200
113 1.1 yamaguch #define IXL_AQ_OP_RX_CTL_REG_READ 0x0206
114 1.1 yamaguch #define IXL_AQ_OP_RX_CTL_REG_WRITE 0x0207
115 1.1 yamaguch #define IXL_AQ_OP_ADD_VSI 0x0210
116 1.1 yamaguch #define IXL_AQ_OP_UPD_VSI_PARAMS 0x0211
117 1.1 yamaguch #define IXL_AQ_OP_GET_VSI_PARAMS 0x0212
118 1.1 yamaguch #define IXL_AQ_OP_ADD_VEB 0x0230
119 1.1 yamaguch #define IXL_AQ_OP_UPD_VEB_PARAMS 0x0231
120 1.1 yamaguch #define IXL_AQ_OP_GET_VEB_PARAMS 0x0232
121 1.1 yamaguch #define IXL_AQ_OP_ADD_MACVLAN 0x0250
122 1.1 yamaguch #define IXL_AQ_OP_REMOVE_MACVLAN 0x0251
123 1.1 yamaguch #define IXL_AQ_OP_SET_VSI_PROMISC 0x0254
124 1.1 yamaguch #define IXL_AQ_OP_PHY_GET_ABILITIES 0x0600
125 1.1 yamaguch #define IXL_AQ_OP_PHY_SET_CONFIG 0x0601
126 1.1 yamaguch #define IXL_AQ_OP_PHY_SET_MAC_CONFIG 0x0603
127 1.1 yamaguch #define IXL_AQ_OP_PHY_RESTART_AN 0x0605
128 1.1 yamaguch #define IXL_AQ_OP_PHY_LINK_STATUS 0x0607
129 1.1 yamaguch #define IXL_AQ_OP_PHY_SET_EVENT_MASK 0x0613
130 1.1 yamaguch #define IXL_AQ_OP_PHY_SET_REGISTER 0x0628
131 1.1 yamaguch #define IXL_AQ_OP_PHY_GET_REGISTER 0x0629
132 1.4 yamaguch #define IXL_AQ_OP_NVM_READ 0x0701
133 1.1 yamaguch #define IXL_AQ_OP_LLDP_GET_MIB 0x0a00
134 1.1 yamaguch #define IXL_AQ_OP_LLDP_MIB_CHG_EV 0x0a01
135 1.1 yamaguch #define IXL_AQ_OP_LLDP_ADD_TLV 0x0a02
136 1.1 yamaguch #define IXL_AQ_OP_LLDP_UPD_TLV 0x0a03
137 1.1 yamaguch #define IXL_AQ_OP_LLDP_DEL_TLV 0x0a04
138 1.1 yamaguch #define IXL_AQ_OP_LLDP_STOP_AGENT 0x0a05
139 1.1 yamaguch #define IXL_AQ_OP_LLDP_START_AGENT 0x0a06
140 1.1 yamaguch #define IXL_AQ_OP_LLDP_GET_CEE_DCBX 0x0a07
141 1.1 yamaguch #define IXL_AQ_OP_LLDP_SPECIFIC_AGENT 0x0a09
142 1.6 yamaguch #define IXL_AQ_OP_RSS_SET_KEY 0x0b02
143 1.6 yamaguch #define IXL_AQ_OP_RSS_SET_LUT 0x0b03
144 1.6 yamaguch #define IXL_AQ_OP_RSS_GET_KEY 0x0b04
145 1.6 yamaguch #define IXL_AQ_OP_RSS_GET_LUT 0x0b05
146 1.1 yamaguch
147 1.1 yamaguch struct ixl_aq_mac_addresses {
148 1.1 yamaguch uint8_t pf_lan[ETHER_ADDR_LEN];
149 1.1 yamaguch uint8_t pf_san[ETHER_ADDR_LEN];
150 1.1 yamaguch uint8_t port[ETHER_ADDR_LEN];
151 1.1 yamaguch uint8_t pf_wol[ETHER_ADDR_LEN];
152 1.1 yamaguch } __packed;
153 1.1 yamaguch
154 1.1 yamaguch #define IXL_AQ_MAC_PF_LAN_VALID (1U << 4)
155 1.1 yamaguch #define IXL_AQ_MAC_PF_SAN_VALID (1U << 5)
156 1.1 yamaguch #define IXL_AQ_MAC_PORT_VALID (1U << 6)
157 1.1 yamaguch #define IXL_AQ_MAC_PF_WOL_VALID (1U << 7)
158 1.1 yamaguch
159 1.1 yamaguch struct ixl_aq_capability {
160 1.1 yamaguch uint16_t cap_id;
161 1.1 yamaguch #define IXL_AQ_CAP_SWITCH_MODE 0x0001
162 1.1 yamaguch #define IXL_AQ_CAP_MNG_MODE 0x0002
163 1.1 yamaguch #define IXL_AQ_CAP_NPAR_ACTIVE 0x0003
164 1.1 yamaguch #define IXL_AQ_CAP_OS2BMC_CAP 0x0004
165 1.1 yamaguch #define IXL_AQ_CAP_FUNCTIONS_VALID 0x0005
166 1.1 yamaguch #define IXL_AQ_CAP_ALTERNATE_RAM 0x0006
167 1.1 yamaguch #define IXL_AQ_CAP_WOL_AND_PROXY 0x0008
168 1.1 yamaguch #define IXL_AQ_CAP_SRIOV 0x0012
169 1.1 yamaguch #define IXL_AQ_CAP_VF 0x0013
170 1.1 yamaguch #define IXL_AQ_CAP_VMDQ 0x0014
171 1.1 yamaguch #define IXL_AQ_CAP_8021QBG 0x0015
172 1.1 yamaguch #define IXL_AQ_CAP_8021QBR 0x0016
173 1.1 yamaguch #define IXL_AQ_CAP_VSI 0x0017
174 1.1 yamaguch #define IXL_AQ_CAP_DCB 0x0018
175 1.1 yamaguch #define IXL_AQ_CAP_FCOE 0x0021
176 1.1 yamaguch #define IXL_AQ_CAP_ISCSI 0x0022
177 1.1 yamaguch #define IXL_AQ_CAP_RSS 0x0040
178 1.1 yamaguch #define IXL_AQ_CAP_RXQ 0x0041
179 1.1 yamaguch #define IXL_AQ_CAP_TXQ 0x0042
180 1.1 yamaguch #define IXL_AQ_CAP_MSIX 0x0043
181 1.1 yamaguch #define IXL_AQ_CAP_VF_MSIX 0x0044
182 1.1 yamaguch #define IXL_AQ_CAP_FLOW_DIRECTOR 0x0045
183 1.1 yamaguch #define IXL_AQ_CAP_1588 0x0046
184 1.1 yamaguch #define IXL_AQ_CAP_IWARP 0x0051
185 1.1 yamaguch #define IXL_AQ_CAP_LED 0x0061
186 1.1 yamaguch #define IXL_AQ_CAP_SDP 0x0062
187 1.1 yamaguch #define IXL_AQ_CAP_MDIO 0x0063
188 1.1 yamaguch #define IXL_AQ_CAP_WSR_PROT 0x0064
189 1.1 yamaguch #define IXL_AQ_CAP_NVM_MGMT 0x0080
190 1.1 yamaguch #define IXL_AQ_CAP_FLEX10 0x00F1
191 1.1 yamaguch #define IXL_AQ_CAP_CEM 0x00F2
192 1.1 yamaguch uint8_t major_rev;
193 1.1 yamaguch uint8_t minor_rev;
194 1.1 yamaguch uint32_t number;
195 1.1 yamaguch uint32_t logical_id;
196 1.1 yamaguch uint32_t phys_id;
197 1.1 yamaguch uint8_t _reserved[16];
198 1.1 yamaguch } __packed __aligned(4);
199 1.1 yamaguch
200 1.1 yamaguch #define IXL_LLDP_SHUTDOWN 0x1
201 1.1 yamaguch
202 1.1 yamaguch struct ixl_aq_switch_config {
203 1.1 yamaguch uint16_t num_reported;
204 1.1 yamaguch uint16_t num_total;
205 1.1 yamaguch uint8_t _reserved[12];
206 1.1 yamaguch } __packed __aligned(4);
207 1.1 yamaguch
208 1.1 yamaguch struct ixl_aq_switch_config_element {
209 1.1 yamaguch uint8_t type;
210 1.1 yamaguch #define IXL_AQ_SW_ELEM_TYPE_MAC 1
211 1.1 yamaguch #define IXL_AQ_SW_ELEM_TYPE_PF 2
212 1.1 yamaguch #define IXL_AQ_SW_ELEM_TYPE_VF 3
213 1.1 yamaguch #define IXL_AQ_SW_ELEM_TYPE_EMP 4
214 1.1 yamaguch #define IXL_AQ_SW_ELEM_TYPE_BMC 5
215 1.1 yamaguch #define IXL_AQ_SW_ELEM_TYPE_PV 16
216 1.1 yamaguch #define IXL_AQ_SW_ELEM_TYPE_VEB 17
217 1.1 yamaguch #define IXL_AQ_SW_ELEM_TYPE_PA 18
218 1.1 yamaguch #define IXL_AQ_SW_ELEM_TYPE_VSI 19
219 1.1 yamaguch uint8_t revision;
220 1.1 yamaguch #define IXL_AQ_SW_ELEM_REV_1 1
221 1.1 yamaguch uint16_t seid;
222 1.1 yamaguch
223 1.1 yamaguch uint16_t uplink_seid;
224 1.1 yamaguch uint16_t downlink_seid;
225 1.1 yamaguch
226 1.1 yamaguch uint8_t _reserved[3];
227 1.1 yamaguch uint8_t connection_type;
228 1.1 yamaguch #define IXL_AQ_CONN_TYPE_REGULAR 0x1
229 1.1 yamaguch #define IXL_AQ_CONN_TYPE_DEFAULT 0x2
230 1.1 yamaguch #define IXL_AQ_CONN_TYPE_CASCADED 0x3
231 1.1 yamaguch
232 1.1 yamaguch uint16_t scheduler_id;
233 1.1 yamaguch uint16_t element_info;
234 1.1 yamaguch } __packed __aligned(4);
235 1.1 yamaguch
236 1.1 yamaguch #define IXL_PHY_TYPE_SGMII 0x00
237 1.1 yamaguch #define IXL_PHY_TYPE_1000BASE_KX 0x01
238 1.1 yamaguch #define IXL_PHY_TYPE_10GBASE_KX4 0x02
239 1.1 yamaguch #define IXL_PHY_TYPE_10GBASE_KR 0x03
240 1.1 yamaguch #define IXL_PHY_TYPE_40GBASE_KR4 0x04
241 1.1 yamaguch #define IXL_PHY_TYPE_XAUI 0x05
242 1.1 yamaguch #define IXL_PHY_TYPE_XFI 0x06
243 1.1 yamaguch #define IXL_PHY_TYPE_SFI 0x07
244 1.1 yamaguch #define IXL_PHY_TYPE_XLAUI 0x08
245 1.1 yamaguch #define IXL_PHY_TYPE_XLPPI 0x09
246 1.1 yamaguch #define IXL_PHY_TYPE_40GBASE_CR4_CU 0x0a
247 1.1 yamaguch #define IXL_PHY_TYPE_10GBASE_CR1_CU 0x0b
248 1.1 yamaguch #define IXL_PHY_TYPE_10GBASE_AOC 0x0c
249 1.1 yamaguch #define IXL_PHY_TYPE_40GBASE_AOC 0x0d
250 1.1 yamaguch #define IXL_PHY_TYPE_100BASE_TX 0x11
251 1.1 yamaguch #define IXL_PHY_TYPE_1000BASE_T 0x12
252 1.1 yamaguch #define IXL_PHY_TYPE_10GBASE_T 0x13
253 1.1 yamaguch #define IXL_PHY_TYPE_10GBASE_SR 0x14
254 1.1 yamaguch #define IXL_PHY_TYPE_10GBASE_LR 0x15
255 1.1 yamaguch #define IXL_PHY_TYPE_10GBASE_SFPP_CU 0x16
256 1.1 yamaguch #define IXL_PHY_TYPE_10GBASE_CR1 0x17
257 1.1 yamaguch #define IXL_PHY_TYPE_40GBASE_CR4 0x18
258 1.1 yamaguch #define IXL_PHY_TYPE_40GBASE_SR4 0x19
259 1.1 yamaguch #define IXL_PHY_TYPE_40GBASE_LR4 0x1a
260 1.1 yamaguch #define IXL_PHY_TYPE_1000BASE_SX 0x1b
261 1.1 yamaguch #define IXL_PHY_TYPE_1000BASE_LX 0x1c
262 1.1 yamaguch #define IXL_PHY_TYPE_1000BASE_T_OPTICAL 0x1d
263 1.1 yamaguch #define IXL_PHY_TYPE_20GBASE_KR2 0x1e
264 1.1 yamaguch
265 1.1 yamaguch #define IXL_PHY_TYPE_25GBASE_KR 0x1f
266 1.1 yamaguch #define IXL_PHY_TYPE_25GBASE_CR 0x20
267 1.1 yamaguch #define IXL_PHY_TYPE_25GBASE_SR 0x21
268 1.1 yamaguch #define IXL_PHY_TYPE_25GBASE_LR 0x22
269 1.1 yamaguch #define IXL_PHY_TYPE_25GBASE_AOC 0x23
270 1.1 yamaguch #define IXL_PHY_TYPE_25GBASE_ACC 0x24
271 1.1 yamaguch
272 1.5 yamaguch #define IXL_PHY_LINK_SPEED_100MB (1 << 1)
273 1.5 yamaguch #define IXL_PHY_LINK_SPEED_1000MB (1 << 2)
274 1.5 yamaguch #define IXL_PHY_LINK_SPEED_10GB (1 << 3)
275 1.5 yamaguch #define IXL_PHY_LINK_SPEED_40GB (1 << 4)
276 1.5 yamaguch #define IXL_PHY_LINK_SPEED_20GB (1 << 5)
277 1.5 yamaguch #define IXL_PHY_LINK_SPEED_25GB (1 << 6)
278 1.5 yamaguch
279 1.5 yamaguch #define IXL_PHY_ABILITY_PAUSE_TX (1 << 0)
280 1.5 yamaguch #define IXL_PHY_ABILITY_PAUSE_RX (1 << 1)
281 1.5 yamaguch #define IXL_PHY_ABILITY_LOWPOW (1 << 2)
282 1.5 yamaguch #define IXL_PHY_ABILITY_LINKUP (1 << 3)
283 1.5 yamaguch #define IXL_PHY_ABILITY_AUTONEGO (1 << 4)
284 1.5 yamaguch #define IXL_PHY_ABILITY_MODQUAL (1 << 5)
285 1.5 yamaguch
286 1.1 yamaguch struct ixl_aq_module_desc {
287 1.1 yamaguch uint8_t oui[3];
288 1.1 yamaguch uint8_t _reserved1;
289 1.1 yamaguch uint8_t part_number[16];
290 1.1 yamaguch uint8_t revision[4];
291 1.1 yamaguch uint8_t _reserved2[8];
292 1.1 yamaguch } __packed __aligned(4);
293 1.1 yamaguch
294 1.1 yamaguch struct ixl_aq_phy_abilities {
295 1.1 yamaguch uint32_t phy_type;
296 1.1 yamaguch
297 1.1 yamaguch uint8_t link_speed;
298 1.1 yamaguch uint8_t abilities;
299 1.1 yamaguch uint16_t eee_capability;
300 1.1 yamaguch
301 1.1 yamaguch uint32_t eeer_val;
302 1.1 yamaguch
303 1.1 yamaguch uint8_t d3_lpan;
304 1.1 yamaguch uint8_t phy_type_ext;
305 1.1 yamaguch #define IXL_AQ_PHY_TYPE_EXT_25G_KR 0x01
306 1.1 yamaguch #define IXL_AQ_PHY_TYPE_EXT_25G_CR 0x02
307 1.1 yamaguch #define IXL_AQ_PHY_TYPE_EXT_25G_SR 0x04
308 1.1 yamaguch #define IXL_AQ_PHY_TYPE_EXT_25G_LR 0x08
309 1.1 yamaguch uint8_t fec_cfg_curr_mod_ext_info;
310 1.1 yamaguch #define IXL_AQ_ENABLE_FEC_KR 0x01
311 1.1 yamaguch #define IXL_AQ_ENABLE_FEC_RS 0x02
312 1.1 yamaguch #define IXL_AQ_REQUEST_FEC_KR 0x04
313 1.1 yamaguch #define IXL_AQ_REQUEST_FEC_RS 0x08
314 1.1 yamaguch #define IXL_AQ_ENABLE_FEC_AUTO 0x10
315 1.1 yamaguch #define IXL_AQ_MODULE_TYPE_EXT_MASK 0xe0
316 1.1 yamaguch #define IXL_AQ_MODULE_TYPE_EXT_SHIFT 5
317 1.1 yamaguch uint8_t ext_comp_code;
318 1.1 yamaguch
319 1.1 yamaguch uint8_t phy_id[4];
320 1.1 yamaguch
321 1.1 yamaguch uint8_t module_type[3];
322 1.1 yamaguch #define IXL_SFF8024_ID_SFP 0x03
323 1.1 yamaguch #define IXL_SFF8024_ID_QSFP 0x0c
324 1.1 yamaguch #define IXL_SFF8024_ID_QSFP_PLUS 0x0d
325 1.1 yamaguch #define IXL_SFF8024_ID_QSFP28 0x11
326 1.1 yamaguch uint8_t qualified_module_count;
327 1.1 yamaguch #define IXL_AQ_PHY_MAX_QMS 16
328 1.1 yamaguch struct ixl_aq_module_desc
329 1.1 yamaguch qualified_module[IXL_AQ_PHY_MAX_QMS];
330 1.1 yamaguch } __packed __aligned(4);
331 1.1 yamaguch
332 1.5 yamaguch struct ixl_aq_phy_param {
333 1.5 yamaguch uint32_t phy_types;
334 1.5 yamaguch uint8_t link_speed;
335 1.5 yamaguch uint8_t abilities;
336 1.5 yamaguch #define IXL_AQ_PHY_ABILITY_AUTO_LINK (1 << 5)
337 1.5 yamaguch uint16_t eee_capability;
338 1.5 yamaguch uint32_t eeer_val;
339 1.5 yamaguch uint8_t d3_lpan;
340 1.5 yamaguch uint8_t phy_type_ext;
341 1.5 yamaguch uint8_t fec_cfg;
342 1.5 yamaguch uint8_t config;
343 1.5 yamaguch } __packed __aligned(4);
344 1.5 yamaguch
345 1.1 yamaguch struct ixl_aq_link_param {
346 1.1 yamaguch uint8_t notify;
347 1.1 yamaguch #define IXL_AQ_LINK_NOTIFY 0x03
348 1.1 yamaguch uint8_t _reserved1;
349 1.1 yamaguch uint8_t phy;
350 1.1 yamaguch uint8_t speed;
351 1.1 yamaguch uint8_t status;
352 1.1 yamaguch uint8_t _reserved2[11];
353 1.1 yamaguch } __packed __aligned(4);
354 1.1 yamaguch
355 1.1 yamaguch struct ixl_aq_vsi_param {
356 1.1 yamaguch uint16_t uplink_seid;
357 1.1 yamaguch uint8_t connect_type;
358 1.1 yamaguch #define IXL_AQ_VSI_CONN_TYPE_NORMAL (0x1)
359 1.1 yamaguch #define IXL_AQ_VSI_CONN_TYPE_DEFAULT (0x2)
360 1.1 yamaguch #define IXL_AQ_VSI_CONN_TYPE_CASCADED (0x3)
361 1.1 yamaguch uint8_t _reserved1;
362 1.1 yamaguch
363 1.1 yamaguch uint8_t vf_id;
364 1.1 yamaguch uint8_t _reserved2;
365 1.1 yamaguch uint16_t vsi_flags;
366 1.1 yamaguch #define IXL_AQ_VSI_TYPE_SHIFT 0x0
367 1.1 yamaguch #define IXL_AQ_VSI_TYPE_MASK (0x3 << IXL_AQ_VSI_TYPE_SHIFT)
368 1.1 yamaguch #define IXL_AQ_VSI_TYPE_VF 0x0
369 1.1 yamaguch #define IXL_AQ_VSI_TYPE_VMDQ2 0x1
370 1.1 yamaguch #define IXL_AQ_VSI_TYPE_PF 0x2
371 1.1 yamaguch #define IXL_AQ_VSI_TYPE_EMP_MNG 0x3
372 1.1 yamaguch #define IXL_AQ_VSI_FLAG_CASCADED_PV 0x4
373 1.1 yamaguch
374 1.1 yamaguch uint32_t addr_hi;
375 1.1 yamaguch uint32_t addr_lo;
376 1.1 yamaguch } __packed __aligned(16);
377 1.1 yamaguch
378 1.1 yamaguch struct ixl_aq_add_macvlan {
379 1.1 yamaguch uint16_t num_addrs;
380 1.1 yamaguch uint16_t seid0;
381 1.1 yamaguch uint16_t seid1;
382 1.1 yamaguch uint16_t seid2;
383 1.1 yamaguch uint32_t addr_hi;
384 1.1 yamaguch uint32_t addr_lo;
385 1.1 yamaguch } __packed __aligned(16);
386 1.1 yamaguch
387 1.1 yamaguch struct ixl_aq_add_macvlan_elem {
388 1.1 yamaguch uint8_t macaddr[6];
389 1.1 yamaguch uint16_t vlan;
390 1.1 yamaguch uint16_t flags;
391 1.1 yamaguch #define IXL_AQ_OP_ADD_MACVLAN_PERFECT_MATCH 0x0001
392 1.1 yamaguch #define IXL_AQ_OP_ADD_MACVLAN_IGNORE_VLAN 0x0004
393 1.1 yamaguch uint16_t queue;
394 1.1 yamaguch uint32_t _reserved;
395 1.1 yamaguch } __packed __aligned(16);
396 1.1 yamaguch
397 1.1 yamaguch struct ixl_aq_remove_macvlan {
398 1.1 yamaguch uint16_t num_addrs;
399 1.1 yamaguch uint16_t seid0;
400 1.1 yamaguch uint16_t seid1;
401 1.1 yamaguch uint16_t seid2;
402 1.1 yamaguch uint32_t addr_hi;
403 1.1 yamaguch uint32_t addr_lo;
404 1.1 yamaguch } __packed __aligned(16);
405 1.1 yamaguch
406 1.1 yamaguch struct ixl_aq_remove_macvlan_elem {
407 1.1 yamaguch uint8_t macaddr[6];
408 1.1 yamaguch uint16_t vlan;
409 1.1 yamaguch uint8_t flags;
410 1.1 yamaguch #define IXL_AQ_OP_REMOVE_MACVLAN_PERFECT_MATCH 0x0001
411 1.1 yamaguch #define IXL_AQ_OP_REMOVE_MACVLAN_IGNORE_VLAN 0x0008
412 1.1 yamaguch uint8_t _reserved[7];
413 1.1 yamaguch } __packed __aligned(16);
414 1.1 yamaguch
415 1.1 yamaguch struct ixl_aq_vsi_reply {
416 1.1 yamaguch uint16_t seid;
417 1.1 yamaguch uint16_t vsi_number;
418 1.1 yamaguch
419 1.1 yamaguch uint16_t vsis_used;
420 1.1 yamaguch uint16_t vsis_free;
421 1.1 yamaguch
422 1.1 yamaguch uint32_t addr_hi;
423 1.1 yamaguch uint32_t addr_lo;
424 1.1 yamaguch } __packed __aligned(16);
425 1.1 yamaguch
426 1.1 yamaguch struct ixl_aq_vsi_data {
427 1.1 yamaguch /* first 96 byte are written by SW */
428 1.1 yamaguch uint16_t valid_sections;
429 1.1 yamaguch #define IXL_AQ_VSI_VALID_SWITCH (1 << 0)
430 1.1 yamaguch #define IXL_AQ_VSI_VALID_SECURITY (1 << 1)
431 1.1 yamaguch #define IXL_AQ_VSI_VALID_VLAN (1 << 2)
432 1.1 yamaguch #define IXL_AQ_VSI_VALID_CAS_PV (1 << 3)
433 1.1 yamaguch #define IXL_AQ_VSI_VALID_INGRESS_UP (1 << 4)
434 1.1 yamaguch #define IXL_AQ_VSI_VALID_EGRESS_UP (1 << 5)
435 1.1 yamaguch #define IXL_AQ_VSI_VALID_QUEUE_MAP (1 << 6)
436 1.1 yamaguch #define IXL_AQ_VSI_VALID_QUEUE_OPT (1 << 7)
437 1.1 yamaguch #define IXL_AQ_VSI_VALID_OUTER_UP (1 << 8)
438 1.1 yamaguch #define IXL_AQ_VSI_VALID_SCHED (1 << 9)
439 1.1 yamaguch /* switch section */
440 1.1 yamaguch uint16_t switch_id;
441 1.1 yamaguch #define IXL_AQ_VSI_SWITCH_ID_SHIFT 0
442 1.1 yamaguch #define IXL_AQ_VSI_SWITCH_ID_MASK (0xfff << IXL_AQ_VSI_SWITCH_ID_SHIFT)
443 1.1 yamaguch #define IXL_AQ_VSI_SWITCH_NOT_STAG (1 << 12)
444 1.1 yamaguch #define IXL_AQ_VSI_SWITCH_LOCAL_LB (1 << 14)
445 1.1 yamaguch
446 1.1 yamaguch uint8_t _reserved1[2];
447 1.1 yamaguch /* security section */
448 1.1 yamaguch uint8_t sec_flags;
449 1.1 yamaguch #define IXL_AQ_VSI_SEC_ALLOW_DEST_OVRD (1 << 0)
450 1.1 yamaguch #define IXL_AQ_VSI_SEC_ENABLE_VLAN_CHK (1 << 1)
451 1.1 yamaguch #define IXL_AQ_VSI_SEC_ENABLE_MAC_CHK (1 << 2)
452 1.1 yamaguch uint8_t _reserved2;
453 1.1 yamaguch
454 1.1 yamaguch /* vlan section */
455 1.1 yamaguch uint16_t pvid;
456 1.1 yamaguch uint16_t fcoe_pvid;
457 1.1 yamaguch
458 1.1 yamaguch uint8_t port_vlan_flags;
459 1.1 yamaguch #define IXL_AQ_VSI_PVLAN_MODE_SHIFT 0
460 1.1 yamaguch #define IXL_AQ_VSI_PVLAN_MODE_MASK (0x3 << IXL_AQ_VSI_PVLAN_MODE_SHIFT)
461 1.1 yamaguch #define IXL_AQ_VSI_PVLAN_MODE_TAGGED (0x1 << IXL_AQ_VSI_PVLAN_MODE_SHIFT)
462 1.1 yamaguch #define IXL_AQ_VSI_PVLAN_MODE_UNTAGGED (0x2 << IXL_AQ_VSI_PVLAN_MODE_SHIFT)
463 1.1 yamaguch #define IXL_AQ_VSI_PVLAN_MODE_ALL (0x3 << IXL_AQ_VSI_PVLAN_MODE_SHIFT)
464 1.1 yamaguch #define IXL_AQ_VSI_PVLAN_INSERT_PVID (0x4 << IXL_AQ_VSI_PVLAN_MODE_SHIFT)
465 1.1 yamaguch #define IXL_AQ_VSI_PVLAN_EMOD_SHIFT 0x3
466 1.1 yamaguch #define IXL_AQ_VSI_PVLAN_EMOD_MASK (0x3 << IXL_AQ_VSI_PVLAN_EMOD_SHIFT)
467 1.1 yamaguch #define IXL_AQ_VSI_PVLAN_EMOD_STR_BOTH (0x0 << IXL_AQ_VSI_PVLAN_EMOD_SHIFT)
468 1.1 yamaguch #define IXL_AQ_VSI_PVLAN_EMOD_STR_UP (0x1 << IXL_AQ_VSI_PVLAN_EMOD_SHIFT)
469 1.1 yamaguch #define IXL_AQ_VSI_PVLAN_EMOD_STR (0x2 << IXL_AQ_VSI_PVLAN_EMOD_SHIFT)
470 1.1 yamaguch #define IXL_AQ_VSI_PVLAN_EMOD_NOTHING (0x3 << IXL_AQ_VSI_PVLAN_EMOD_SHIFT)
471 1.1 yamaguch uint8_t _reserved3[3];
472 1.1 yamaguch
473 1.1 yamaguch /* ingress egress up section */
474 1.1 yamaguch uint32_t ingress_table;
475 1.1 yamaguch #define IXL_AQ_VSI_UP_SHIFT(_up) ((_up) * 3)
476 1.1 yamaguch #define IXL_AQ_VSI_UP_MASK(_up) (0x7 << (IXL_AQ_VSI_UP_SHIFT(_up))
477 1.1 yamaguch uint32_t egress_table;
478 1.1 yamaguch
479 1.1 yamaguch /* cascaded pv section */
480 1.1 yamaguch uint16_t cas_pv_tag;
481 1.1 yamaguch uint8_t cas_pv_flags;
482 1.1 yamaguch #define IXL_AQ_VSI_CAS_PV_TAGX_SHIFT 0
483 1.1 yamaguch #define IXL_AQ_VSI_CAS_PV_TAGX_MASK (0x3 << IXL_AQ_VSI_CAS_PV_TAGX_SHIFT)
484 1.1 yamaguch #define IXL_AQ_VSI_CAS_PV_TAGX_LEAVE (0x0 << IXL_AQ_VSI_CAS_PV_TAGX_SHIFT)
485 1.1 yamaguch #define IXL_AQ_VSI_CAS_PV_TAGX_REMOVE (0x1 << IXL_AQ_VSI_CAS_PV_TAGX_SHIFT)
486 1.1 yamaguch #define IXL_AQ_VSI_CAS_PV_TAGX_COPY (0x2 << IXL_AQ_VSI_CAS_PV_TAGX_SHIFT)
487 1.1 yamaguch #define IXL_AQ_VSI_CAS_PV_INSERT_TAG (1 << 4)
488 1.1 yamaguch #define IXL_AQ_VSI_CAS_PV_ETAG_PRUNE (1 << 5)
489 1.1 yamaguch #define IXL_AQ_VSI_CAS_PV_ACCEPT_HOST_TAG \
490 1.1 yamaguch (1 << 6)
491 1.1 yamaguch uint8_t _reserved4;
492 1.1 yamaguch
493 1.1 yamaguch /* queue mapping section */
494 1.1 yamaguch uint16_t mapping_flags;
495 1.1 yamaguch #define IXL_AQ_VSI_QUE_MAP_MASK 0x1
496 1.1 yamaguch #define IXL_AQ_VSI_QUE_MAP_CONTIG 0x0
497 1.1 yamaguch #define IXL_AQ_VSI_QUE_MAP_NONCONTIG 0x1
498 1.1 yamaguch uint16_t queue_mapping[16];
499 1.1 yamaguch #define IXL_AQ_VSI_QUEUE_SHIFT 0x0
500 1.1 yamaguch #define IXL_AQ_VSI_QUEUE_MASK (0x7ff << IXL_AQ_VSI_QUEUE_SHIFT)
501 1.1 yamaguch uint16_t tc_mapping[8];
502 1.1 yamaguch #define IXL_AQ_VSI_TC_Q_OFFSET_SHIFT 0
503 1.1 yamaguch #define IXL_AQ_VSI_TC_Q_OFFSET_MASK (0x1ff << IXL_AQ_VSI_TC_Q_OFFSET_SHIFT)
504 1.1 yamaguch #define IXL_AQ_VSI_TC_Q_NUMBER_SHIFT 9
505 1.1 yamaguch #define IXL_AQ_VSI_TC_Q_NUMBER_MASK (0x7 << IXL_AQ_VSI_TC_Q_NUMBER_SHIFT)
506 1.1 yamaguch
507 1.1 yamaguch /* queueing option section */
508 1.1 yamaguch uint8_t queueing_opt_flags;
509 1.1 yamaguch #define IXL_AQ_VSI_QUE_OPT_MCAST_UDP_EN (1 << 2)
510 1.1 yamaguch #define IXL_AQ_VSI_QUE_OPT_UCAST_UDP_EN (1 << 3)
511 1.1 yamaguch #define IXL_AQ_VSI_QUE_OPT_TCP_EN (1 << 4)
512 1.1 yamaguch #define IXL_AQ_VSI_QUE_OPT_FCOE_EN (1 << 5)
513 1.1 yamaguch #define IXL_AQ_VSI_QUE_OPT_RSS_LUT_PF 0
514 1.1 yamaguch #define IXL_AQ_VSI_QUE_OPT_RSS_LUT_VSI (1 << 6)
515 1.1 yamaguch uint8_t _reserved5[3];
516 1.1 yamaguch
517 1.1 yamaguch /* scheduler section */
518 1.1 yamaguch uint8_t up_enable_bits;
519 1.1 yamaguch uint8_t _reserved6;
520 1.1 yamaguch
521 1.1 yamaguch /* outer up section */
522 1.1 yamaguch uint32_t outer_up_table; /* same as ingress/egress tables */
523 1.1 yamaguch uint8_t _reserved7[8];
524 1.1 yamaguch
525 1.1 yamaguch /* last 32 bytes are written by FW */
526 1.1 yamaguch uint16_t qs_handle[8];
527 1.1 yamaguch #define IXL_AQ_VSI_QS_HANDLE_INVALID 0xffff
528 1.1 yamaguch uint16_t stat_counter_idx;
529 1.1 yamaguch uint16_t sched_id;
530 1.1 yamaguch
531 1.1 yamaguch uint8_t _reserved8[12];
532 1.1 yamaguch } __packed __aligned(8);
533 1.1 yamaguch
534 1.1 yamaguch CTASSERT(sizeof(struct ixl_aq_vsi_data) == 128);
535 1.1 yamaguch
536 1.1 yamaguch struct ixl_aq_vsi_promisc_param {
537 1.1 yamaguch uint16_t flags;
538 1.1 yamaguch uint16_t valid_flags;
539 1.1 yamaguch #define IXL_AQ_VSI_PROMISC_FLAG_UCAST (1 << 0)
540 1.1 yamaguch #define IXL_AQ_VSI_PROMISC_FLAG_MCAST (1 << 1)
541 1.1 yamaguch #define IXL_AQ_VSI_PROMISC_FLAG_BCAST (1 << 2)
542 1.1 yamaguch #define IXL_AQ_VSI_PROMISC_FLAG_DFLT (1 << 3)
543 1.1 yamaguch #define IXL_AQ_VSI_PROMISC_FLAG_VLAN (1 << 4)
544 1.1 yamaguch #define IXL_AQ_VSI_PROMISC_FLAG_RXONLY (1 << 15)
545 1.1 yamaguch
546 1.1 yamaguch uint16_t seid;
547 1.1 yamaguch #define IXL_AQ_VSI_PROMISC_SEID_VALID (1 << 15)
548 1.1 yamaguch uint16_t vlan;
549 1.1 yamaguch #define IXL_AQ_VSI_PROMISC_VLAN_VALID (1 << 15)
550 1.1 yamaguch uint32_t reserved[2];
551 1.1 yamaguch } __packed __aligned(8);
552 1.1 yamaguch
553 1.1 yamaguch struct ixl_aq_veb_param {
554 1.1 yamaguch uint16_t uplink_seid;
555 1.1 yamaguch uint16_t downlink_seid;
556 1.1 yamaguch uint16_t veb_flags;
557 1.1 yamaguch #define IXL_AQ_ADD_VEB_FLOATING (1 << 0)
558 1.1 yamaguch #define IXL_AQ_ADD_VEB_PORT_TYPE_SHIFT 1
559 1.1 yamaguch #define IXL_AQ_ADD_VEB_PORT_TYPE_MASK (0x3 << IXL_AQ_ADD_VEB_PORT_TYPE_SHIFT)
560 1.1 yamaguch #define IXL_AQ_ADD_VEB_PORT_TYPE_DEFAULT \
561 1.1 yamaguch (0x2 << IXL_AQ_ADD_VEB_PORT_TYPE_SHIFT)
562 1.1 yamaguch #define IXL_AQ_ADD_VEB_PORT_TYPE_DATA (0x4 << IXL_AQ_ADD_VEB_PORT_TYPE_SHIFT)
563 1.1 yamaguch #define IXL_AQ_ADD_VEB_ENABLE_L2_FILTER (1 << 3) /* deprecated */
564 1.1 yamaguch #define IXL_AQ_ADD_VEB_DISABLE_STATS (1 << 4)
565 1.1 yamaguch uint8_t enable_tcs;
566 1.1 yamaguch uint8_t _reserved[9];
567 1.1 yamaguch } __packed __aligned(16);
568 1.1 yamaguch
569 1.1 yamaguch struct ixl_aq_veb_reply {
570 1.1 yamaguch uint16_t _reserved1;
571 1.1 yamaguch uint16_t _reserved2;
572 1.1 yamaguch uint16_t _reserved3;
573 1.1 yamaguch uint16_t switch_seid;
574 1.1 yamaguch uint16_t veb_seid;
575 1.1 yamaguch #define IXL_AQ_VEB_ERR_FLAG_NO_VEB (1 << 0)
576 1.1 yamaguch #define IXL_AQ_VEB_ERR_FLAG_NO_SCHED (1 << 1)
577 1.1 yamaguch #define IXL_AQ_VEB_ERR_FLAG_NO_COUNTER (1 << 2)
578 1.1 yamaguch #define IXL_AQ_VEB_ERR_FLAG_NO_ENTRY (1 << 3);
579 1.1 yamaguch uint16_t statistic_index;
580 1.1 yamaguch uint16_t vebs_used;
581 1.1 yamaguch uint16_t vebs_free;
582 1.1 yamaguch } __packed __aligned(16);
583 1.1 yamaguch
584 1.1 yamaguch /* GET PHY ABILITIES param[0] */
585 1.1 yamaguch #define IXL_AQ_PHY_REPORT_QUAL (1 << 0)
586 1.1 yamaguch #define IXL_AQ_PHY_REPORT_INIT (1 << 1)
587 1.1 yamaguch
588 1.1 yamaguch struct ixl_aq_phy_reg_access {
589 1.1 yamaguch uint8_t phy_iface;
590 1.1 yamaguch #define IXL_AQ_PHY_IF_INTERNAL 0
591 1.1 yamaguch #define IXL_AQ_PHY_IF_EXTERNAL 1
592 1.1 yamaguch #define IXL_AQ_PHY_IF_MODULE 2
593 1.1 yamaguch uint8_t dev_addr;
594 1.1 yamaguch uint16_t recall;
595 1.1 yamaguch #define IXL_AQ_PHY_QSFP_DEV_ADDR 0
596 1.1 yamaguch #define IXL_AQ_PHY_QSFP_LAST 1
597 1.1 yamaguch uint32_t reg;
598 1.1 yamaguch uint32_t val;
599 1.1 yamaguch uint32_t _reserved2;
600 1.1 yamaguch } __packed __aligned(16);
601 1.1 yamaguch
602 1.1 yamaguch /* RESTART_AN param[0] */
603 1.1 yamaguch #define IXL_AQ_PHY_RESTART_AN (1 << 1)
604 1.1 yamaguch #define IXL_AQ_PHY_LINK_ENABLE (1 << 2)
605 1.1 yamaguch
606 1.1 yamaguch struct ixl_aq_link_status { /* this occupies the iaq_param space */
607 1.1 yamaguch uint16_t command_flags; /* only field set on command */
608 1.1 yamaguch #define IXL_AQ_LSE_MASK 0x3
609 1.1 yamaguch #define IXL_AQ_LSE_NOP 0x0
610 1.1 yamaguch #define IXL_AQ_LSE_DISABLE 0x2
611 1.1 yamaguch #define IXL_AQ_LSE_ENABLE 0x3
612 1.1 yamaguch #define IXL_AQ_LSE_IS_ENABLED 0x1 /* only set in response */
613 1.1 yamaguch uint8_t phy_type;
614 1.1 yamaguch uint8_t link_speed;
615 1.1 yamaguch #define IXL_AQ_LINK_SPEED_100MB (1 << 1)
616 1.1 yamaguch #define IXL_AQ_LINK_SPEED_1000MB (1 << 2)
617 1.1 yamaguch #define IXL_AQ_LINK_SPEED_10GB (1 << 3)
618 1.1 yamaguch #define IXL_AQ_LINK_SPEED_40GB (1 << 4)
619 1.1 yamaguch #define IXL_AQ_LINK_SPEED_25GB (1 << 6)
620 1.1 yamaguch uint8_t link_info;
621 1.1 yamaguch #define IXL_AQ_LINK_UP_FUNCTION 0x01
622 1.1 yamaguch #define IXL_AQ_LINK_FAULT 0x02
623 1.1 yamaguch #define IXL_AQ_LINK_FAULT_TX 0x04
624 1.1 yamaguch #define IXL_AQ_LINK_FAULT_RX 0x08
625 1.1 yamaguch #define IXL_AQ_LINK_FAULT_REMOTE 0x10
626 1.1 yamaguch #define IXL_AQ_LINK_UP_PORT 0x20
627 1.1 yamaguch #define IXL_AQ_MEDIA_AVAILABLE 0x40
628 1.1 yamaguch #define IXL_AQ_SIGNAL_DETECT 0x80
629 1.1 yamaguch uint8_t an_info;
630 1.1 yamaguch #define IXL_AQ_AN_COMPLETED 0x01
631 1.1 yamaguch #define IXL_AQ_LP_AN_ABILITY 0x02
632 1.1 yamaguch #define IXL_AQ_PD_FAULT 0x04
633 1.1 yamaguch #define IXL_AQ_FEC_EN 0x08
634 1.1 yamaguch #define IXL_AQ_PHY_LOW_POWER 0x10
635 1.1 yamaguch #define IXL_AQ_LINK_PAUSE_TX 0x20
636 1.1 yamaguch #define IXL_AQ_LINK_PAUSE_RX 0x40
637 1.1 yamaguch #define IXL_AQ_QUALIFIED_MODULE 0x80
638 1.1 yamaguch
639 1.1 yamaguch uint8_t ext_info;
640 1.1 yamaguch #define IXL_AQ_LINK_PHY_TEMP_ALARM 0x01
641 1.1 yamaguch #define IXL_AQ_LINK_XCESSIVE_ERRORS 0x02
642 1.1 yamaguch #define IXL_AQ_LINK_TX_SHIFT 0x02
643 1.1 yamaguch #define IXL_AQ_LINK_TX_MASK (0x03 << IXL_AQ_LINK_TX_SHIFT)
644 1.1 yamaguch #define IXL_AQ_LINK_TX_ACTIVE 0x00
645 1.1 yamaguch #define IXL_AQ_LINK_TX_DRAINED 0x01
646 1.1 yamaguch #define IXL_AQ_LINK_TX_FLUSHED 0x03
647 1.1 yamaguch #define IXL_AQ_LINK_FORCED_40G 0x10
648 1.1 yamaguch /* 25G Error Codes */
649 1.1 yamaguch #define IXL_AQ_25G_NO_ERR 0X00
650 1.1 yamaguch #define IXL_AQ_25G_NOT_PRESENT 0X01
651 1.1 yamaguch #define IXL_AQ_25G_NVM_CRC_ERR 0X02
652 1.1 yamaguch #define IXL_AQ_25G_SBUS_UCODE_ERR 0X03
653 1.1 yamaguch #define IXL_AQ_25G_SERDES_UCODE_ERR 0X04
654 1.1 yamaguch #define IXL_AQ_25G_NIMB_UCODE_ERR 0X05
655 1.1 yamaguch uint8_t loopback;
656 1.1 yamaguch uint16_t max_frame_size;
657 1.1 yamaguch
658 1.1 yamaguch uint8_t config;
659 1.1 yamaguch #define IXL_AQ_CONFIG_FEC_KR_ENA 0x01
660 1.1 yamaguch #define IXL_AQ_CONFIG_FEC_RS_ENA 0x02
661 1.1 yamaguch #define IXL_AQ_CONFIG_CRC_ENA 0x04
662 1.1 yamaguch #define IXL_AQ_CONFIG_PACING_MASK 0x78
663 1.1 yamaguch uint8_t power_desc;
664 1.1 yamaguch #define IXL_AQ_LINK_POWER_CLASS_1 0x00
665 1.1 yamaguch #define IXL_AQ_LINK_POWER_CLASS_2 0x01
666 1.1 yamaguch #define IXL_AQ_LINK_POWER_CLASS_3 0x02
667 1.1 yamaguch #define IXL_AQ_LINK_POWER_CLASS_4 0x03
668 1.1 yamaguch #define IXL_AQ_PWR_CLASS_MASK 0x03
669 1.1 yamaguch
670 1.1 yamaguch uint8_t reserved[4];
671 1.1 yamaguch } __packed __aligned(4);
672 1.1 yamaguch
673 1.1 yamaguch /* event mask command flags for param[2] */
674 1.1 yamaguch #define IXL_AQ_PHY_EV_MASK 0x3ff
675 1.1 yamaguch #define IXL_AQ_PHY_EV_LINK_UPDOWN (1 << 1)
676 1.1 yamaguch #define IXL_AQ_PHY_EV_MEDIA_NA (1 << 2)
677 1.1 yamaguch #define IXL_AQ_PHY_EV_LINK_FAULT (1 << 3)
678 1.1 yamaguch #define IXL_AQ_PHY_EV_PHY_TEMP_ALARM (1 << 4)
679 1.1 yamaguch #define IXL_AQ_PHY_EV_EXCESS_ERRORS (1 << 5)
680 1.1 yamaguch #define IXL_AQ_PHY_EV_SIGNAL_DETECT (1 << 6)
681 1.1 yamaguch #define IXL_AQ_PHY_EV_AN_COMPLETED (1 << 7)
682 1.1 yamaguch #define IXL_AQ_PHY_EV_MODULE_QUAL_FAIL (1 << 8)
683 1.1 yamaguch #define IXL_AQ_PHY_EV_PORT_TX_SUSPENDED (1 << 9)
684 1.1 yamaguch
685 1.4 yamaguch struct ixl_aq_req_resource_param {
686 1.4 yamaguch uint16_t resource_id;
687 1.4 yamaguch #define IXL_AQ_RESOURCE_ID_NVM 0x0001
688 1.4 yamaguch #define IXL_AQ_RESOURCE_ID_SDP 0x0002
689 1.4 yamaguch
690 1.4 yamaguch uint16_t access_type;
691 1.4 yamaguch #define IXL_AQ_RESOURCE_ACCES_READ 0x01
692 1.4 yamaguch #define IXL_AQ_RESOURCE_ACCES_WRITE 0x02
693 1.4 yamaguch
694 1.4 yamaguch uint16_t timeout;
695 1.4 yamaguch uint32_t resource_num;
696 1.4 yamaguch uint32_t reserved;
697 1.4 yamaguch } __packed __aligned(8);
698 1.4 yamaguch
699 1.4 yamaguch struct ixl_aq_rel_resource_param {
700 1.4 yamaguch uint16_t resource_id;
701 1.4 yamaguch /* defined in ixl_aq_req_resource_param */
702 1.4 yamaguch uint16_t _reserved1[3];
703 1.4 yamaguch uint32_t resource_num;
704 1.4 yamaguch uint32_t _reserved2;
705 1.4 yamaguch } __packed __aligned(8);
706 1.4 yamaguch
707 1.4 yamaguch struct ixl_aq_nvm_param {
708 1.4 yamaguch uint8_t command_flags;
709 1.4 yamaguch #define IXL_AQ_NVM_LAST_CMD (1 << 0)
710 1.4 yamaguch #define IXL_AQ_NVM_FLASH_ONLY (1 << 7)
711 1.4 yamaguch uint8_t module_pointer;
712 1.4 yamaguch uint16_t length;
713 1.4 yamaguch uint32_t offset;
714 1.4 yamaguch uint32_t addr_hi;
715 1.4 yamaguch uint32_t addr_lo;
716 1.4 yamaguch } __packed __aligned(4);
717 1.4 yamaguch
718 1.6 yamaguch struct ixl_aq_rss_key_param {
719 1.6 yamaguch uint16_t vsi_id;
720 1.6 yamaguch #define IXL_AQ_RSSKEY_VSI_VALID (0x01 << 15)
721 1.6 yamaguch #define IXL_AQ_RSSKEY_VSI_ID_SHIFT 0
722 1.6 yamaguch #define IXL_AQ_RSSKEY_VSI_ID_MASK (0x3FF << IXL_RSSKEY_VSI_ID_SHIFT)
723 1.6 yamaguch
724 1.6 yamaguch uint8_t reserved[6];
725 1.6 yamaguch uint32_t addr_hi;
726 1.6 yamaguch uint32_t addr_lo;
727 1.6 yamaguch } __packed __aligned(8);
728 1.6 yamaguch
729 1.6 yamaguch struct ixl_aq_rss_key_data {
730 1.6 yamaguch uint8_t standard_rss_key[0x28];
731 1.6 yamaguch uint8_t extended_hash_key[0xc];
732 1.6 yamaguch } __packed __aligned(8);
733 1.6 yamaguch
734 1.6 yamaguch struct ixl_aq_rss_lut_param {
735 1.6 yamaguch uint16_t vsi_id;
736 1.6 yamaguch #define IXL_AQ_RSSLUT_VSI_VALID (0x01 << 15)
737 1.6 yamaguch #define IXL_AQ_RSSLUT_VSI_ID_SHIFT 0
738 1.6 yamaguch #define IXL_AQ_RSSLUT_VSI_ID_MASK (0x03FF << IXL_AQ_RSSLUT_VSI_ID_SHIFT)
739 1.6 yamaguch
740 1.6 yamaguch uint16_t flags;
741 1.6 yamaguch #define IXL_AQ_RSSLUT_TABLE_TYPE_SHIFT 0
742 1.6 yamaguch #define IXL_AQ_RSSLUT_TABLE_TYPE_MASK (0x01 << IXL_AQ_RSSLUT_TABLE_TYPE_SHIFT)
743 1.6 yamaguch #define IXL_AQ_RSSLUT_TABLE_TYPE_VSI 0
744 1.6 yamaguch #define IXL_AQ_RSSLUT_TABLE_TYPE_PF 1
745 1.6 yamaguch uint8_t reserved[4];
746 1.6 yamaguch uint32_t addr_hi;
747 1.6 yamaguch uint32_t addr_lo;
748 1.6 yamaguch } __packed __aligned(8);
749 1.6 yamaguch
750 1.1 yamaguch /* aq response codes */
751 1.1 yamaguch #define IXL_AQ_RC_OK 0 /* success */
752 1.1 yamaguch #define IXL_AQ_RC_EPERM 1 /* Operation not permitted */
753 1.1 yamaguch #define IXL_AQ_RC_ENOENT 2 /* No such element */
754 1.1 yamaguch #define IXL_AQ_RC_ESRCH 3 /* Bad opcode */
755 1.1 yamaguch #define IXL_AQ_RC_EINTR 4 /* operation interrupted */
756 1.1 yamaguch #define IXL_AQ_RC_EIO 5 /* I/O error */
757 1.1 yamaguch #define IXL_AQ_RC_ENXIO 6 /* No such resource */
758 1.1 yamaguch #define IXL_AQ_RC_E2BIG 7 /* Arg too long */
759 1.1 yamaguch #define IXL_AQ_RC_EAGAIN 8 /* Try again */
760 1.1 yamaguch #define IXL_AQ_RC_ENOMEM 9 /* Out of memory */
761 1.1 yamaguch #define IXL_AQ_RC_EACCES 10 /* Permission denied */
762 1.1 yamaguch #define IXL_AQ_RC_EFAULT 11 /* Bad address */
763 1.1 yamaguch #define IXL_AQ_RC_EBUSY 12 /* Device or resource busy */
764 1.1 yamaguch #define IXL_AQ_RC_EEXIST 13 /* object already exists */
765 1.1 yamaguch #define IXL_AQ_RC_EINVAL 14 /* invalid argument */
766 1.1 yamaguch #define IXL_AQ_RC_ENOTTY 15 /* not a typewriter */
767 1.1 yamaguch #define IXL_AQ_RC_ENOSPC 16 /* No space or alloc failure */
768 1.1 yamaguch #define IXL_AQ_RC_ENOSYS 17 /* function not implemented */
769 1.1 yamaguch #define IXL_AQ_RC_ERANGE 18 /* parameter out of range */
770 1.1 yamaguch #define IXL_AQ_RC_EFLUSHED 19 /* cmd flushed due to prev error */
771 1.1 yamaguch #define IXL_AQ_RC_BAD_ADDR 20 /* contains a bad pointer */
772 1.1 yamaguch #define IXL_AQ_RC_EMODE 21 /* not allowed in current mode */
773 1.1 yamaguch #define IXL_AQ_RC_EFBIG 22 /* file too large */
774 1.1 yamaguch
775 1.1 yamaguch struct ixl_tx_desc {
776 1.1 yamaguch uint64_t addr;
777 1.1 yamaguch uint64_t cmd;
778 1.1 yamaguch #define IXL_TX_DESC_DTYPE_SHIFT 0
779 1.1 yamaguch #define IXL_TX_DESC_DTYPE_MASK (0xfULL << IXL_TX_DESC_DTYPE_SHIFT)
780 1.1 yamaguch #define IXL_TX_DESC_DTYPE_DATA (0x0ULL << IXL_TX_DESC_DTYPE_SHIFT)
781 1.1 yamaguch #define IXL_TX_DESC_DTYPE_NOP (0x1ULL << IXL_TX_DESC_DTYPE_SHIFT)
782 1.1 yamaguch #define IXL_TX_DESC_DTYPE_CONTEXT (0x1ULL << IXL_TX_DESC_DTYPE_SHIFT)
783 1.1 yamaguch #define IXL_TX_DESC_DTYPE_FCOE_CTX (0x2ULL << IXL_TX_DESC_DTYPE_SHIFT)
784 1.1 yamaguch #define IXL_TX_DESC_DTYPE_FD (0x8ULL << IXL_TX_DESC_DTYPE_SHIFT)
785 1.1 yamaguch #define IXL_TX_DESC_DTYPE_DDP_CTX (0x9ULL << IXL_TX_DESC_DTYPE_SHIFT)
786 1.1 yamaguch #define IXL_TX_DESC_DTYPE_FLEX_DATA (0xbULL << IXL_TX_DESC_DTYPE_SHIFT)
787 1.1 yamaguch #define IXL_TX_DESC_DTYPE_FLEX_CTX_1 (0xcULL << IXL_TX_DESC_DTYPE_SHIFT)
788 1.1 yamaguch #define IXL_TX_DESC_DTYPE_FLEX_CTX_2 (0xdULL << IXL_TX_DESC_DTYPE_SHIFT)
789 1.1 yamaguch #define IXL_TX_DESC_DTYPE_DONE (0xfULL << IXL_TX_DESC_DTYPE_SHIFT)
790 1.1 yamaguch
791 1.1 yamaguch #define IXL_TX_DESC_CMD_SHIFT 4
792 1.1 yamaguch #define IXL_TX_DESC_CMD_MASK (0x3ffULL << IXL_TX_DESC_CMD_SHIFT)
793 1.1 yamaguch #define IXL_TX_DESC_CMD_EOP (0x001 << IXL_TX_DESC_CMD_SHIFT)
794 1.1 yamaguch #define IXL_TX_DESC_CMD_RS (0x002 << IXL_TX_DESC_CMD_SHIFT)
795 1.1 yamaguch #define IXL_TX_DESC_CMD_ICRC (0x004 << IXL_TX_DESC_CMD_SHIFT)
796 1.1 yamaguch #define IXL_TX_DESC_CMD_IL2TAG1 (0x008 << IXL_TX_DESC_CMD_SHIFT)
797 1.1 yamaguch #define IXL_TX_DESC_CMD_DUMMY (0x010 << IXL_TX_DESC_CMD_SHIFT)
798 1.1 yamaguch #define IXL_TX_DESC_CMD_IIPT_MASK (0x060 << IXL_TX_DESC_CMD_SHIFT)
799 1.1 yamaguch #define IXL_TX_DESC_CMD_IIPT_NONIP (0x000 << IXL_TX_DESC_CMD_SHIFT)
800 1.1 yamaguch #define IXL_TX_DESC_CMD_IIPT_IPV6 (0x020 << IXL_TX_DESC_CMD_SHIFT)
801 1.1 yamaguch #define IXL_TX_DESC_CMD_IIPT_IPV4 (0x040 << IXL_TX_DESC_CMD_SHIFT)
802 1.1 yamaguch #define IXL_TX_DESC_CMD_IIPT_IPV4_CSUM (0x060 << IXL_TX_DESC_CMD_SHIFT)
803 1.1 yamaguch #define IXL_TX_DESC_CMD_FCOET (0x080 << IXL_TX_DESC_CMD_SHIFT)
804 1.1 yamaguch #define IXL_TX_DESC_CMD_L4T_EOFT_MASK (0x300 << IXL_TX_DESC_CMD_SHIFT)
805 1.1 yamaguch #define IXL_TX_DESC_CMD_L4T_EOFT_UNK (0x000 << IXL_TX_DESC_CMD_SHIFT)
806 1.1 yamaguch #define IXL_TX_DESC_CMD_L4T_EOFT_TCP (0x100 << IXL_TX_DESC_CMD_SHIFT)
807 1.1 yamaguch #define IXL_TX_DESC_CMD_L4T_EOFT_SCTP (0x200 << IXL_TX_DESC_CMD_SHIFT)
808 1.1 yamaguch #define IXL_TX_DESC_CMD_L4T_EOFT_UDP (0x300 << IXL_TX_DESC_CMD_SHIFT)
809 1.1 yamaguch
810 1.1 yamaguch #define IXL_TX_DESC_MACLEN_SHIFT 16
811 1.1 yamaguch #define IXL_TX_DESC_MACLEN_MASK (0x7fULL << IXL_TX_DESC_MACLEN_SHIFT)
812 1.1 yamaguch #define IXL_TX_DESC_IPLEN_SHIFT 23
813 1.1 yamaguch #define IXL_TX_DESC_IPLEN_MASK (0x7fULL << IXL_TX_DESC_IPLEN_SHIFT)
814 1.1 yamaguch #define IXL_TX_DESC_L4LEN_SHIFT 30
815 1.1 yamaguch #define IXL_TX_DESC_L4LEN_MASK (0xfULL << IXL_TX_DESC_L4LEN_SHIFT)
816 1.1 yamaguch #define IXL_TX_DESC_FCLEN_SHIFT 30
817 1.1 yamaguch #define IXL_TX_DESC_FCLEN_MASK (0xfULL << IXL_TX_DESC_FCLEN_SHIFT)
818 1.1 yamaguch
819 1.1 yamaguch #define IXL_TX_DESC_BSIZE_SHIFT 34
820 1.1 yamaguch #define IXL_TX_DESC_BSIZE_MAX 0x3fffULL
821 1.1 yamaguch #define IXL_TX_DESC_BSIZE_MASK \
822 1.1 yamaguch (IXL_TX_DESC_BSIZE_MAX << IXL_TX_DESC_BSIZE_SHIFT)
823 1.2 yamaguch #define IXL_TX_DESC_L2TAG1_SHIFT 48
824 1.1 yamaguch } __packed __aligned(16);
825 1.1 yamaguch
826 1.1 yamaguch struct ixl_rx_rd_desc_16 {
827 1.1 yamaguch uint64_t paddr; /* packet addr */
828 1.1 yamaguch uint64_t haddr; /* header addr */
829 1.1 yamaguch } __packed __aligned(16);
830 1.1 yamaguch
831 1.1 yamaguch struct ixl_rx_rd_desc_32 {
832 1.1 yamaguch uint64_t paddr; /* packet addr */
833 1.1 yamaguch uint64_t haddr; /* header addr */
834 1.1 yamaguch uint64_t _reserved1;
835 1.1 yamaguch uint64_t _reserved2;
836 1.1 yamaguch } __packed __aligned(16);
837 1.1 yamaguch
838 1.1 yamaguch struct ixl_rx_wb_desc_16 {
839 1.1 yamaguch uint64_t qword0;
840 1.2 yamaguch #define IXL_RX_DESC_L2TAG1_SHIFT 16
841 1.2 yamaguch #define IXL_RX_DESC_L2TAG1_MASK (0xffffULL << IXL_RX_DESC_L2TAG1_SHIFT)
842 1.1 yamaguch uint64_t qword1;
843 1.1 yamaguch #define IXL_RX_DESC_DD (1 << 0)
844 1.1 yamaguch #define IXL_RX_DESC_EOP (1 << 1)
845 1.1 yamaguch #define IXL_RX_DESC_L2TAG1P (1 << 2)
846 1.1 yamaguch #define IXL_RX_DESC_L3L4P (1 << 3)
847 1.1 yamaguch #define IXL_RX_DESC_CRCP (1 << 4)
848 1.1 yamaguch #define IXL_RX_DESC_TSYNINDX_SHIFT 5 /* TSYNINDX */
849 1.1 yamaguch #define IXL_RX_DESC_TSYNINDX_MASK (7 << IXL_RX_DESC_TSYNINDX_SHIFT)
850 1.1 yamaguch #define IXL_RX_DESC_UMB_SHIFT 9
851 1.1 yamaguch #define IXL_RX_DESC_UMB_MASK (0x3 << IXL_RX_DESC_UMB_SHIFT)
852 1.1 yamaguch #define IXL_RX_DESC_UMB_UCAST (0x0 << IXL_RX_DESC_UMB_SHIFT)
853 1.1 yamaguch #define IXL_RX_DESC_UMB_MCAST (0x1 << IXL_RX_DESC_UMB_SHIFT)
854 1.1 yamaguch #define IXL_RX_DESC_UMB_BCAST (0x2 << IXL_RX_DESC_UMB_SHIFT)
855 1.1 yamaguch #define IXL_RX_DESC_UMB_MIRROR (0x3 << IXL_RX_DESC_UMB_SHIFT)
856 1.1 yamaguch #define IXL_RX_DESC_FLM (1 << 11)
857 1.1 yamaguch #define IXL_RX_DESC_FLTSTAT_SHIFT 12
858 1.1 yamaguch #define IXL_RX_DESC_FLTSTAT_MASK (0x3 << IXL_RX_DESC_FLTSTAT_SHIFT)
859 1.1 yamaguch #define IXL_RX_DESC_FLTSTAT_NODATA (0x0 << IXL_RX_DESC_FLTSTAT_SHIFT)
860 1.1 yamaguch #define IXL_RX_DESC_FLTSTAT_FDFILTID (0x1 << IXL_RX_DESC_FLTSTAT_SHIFT)
861 1.1 yamaguch #define IXL_RX_DESC_FLTSTAT_RSS (0x3 << IXL_RX_DESC_FLTSTAT_SHIFT)
862 1.1 yamaguch #define IXL_RX_DESC_LPBK (1 << 14)
863 1.1 yamaguch #define IXL_RX_DESC_IPV6EXTADD (1 << 15)
864 1.1 yamaguch #define IXL_RX_DESC_INT_UDP_0 (1 << 18)
865 1.1 yamaguch
866 1.1 yamaguch #define IXL_RX_DESC_RXE (1 << 19)
867 1.1 yamaguch #define IXL_RX_DESC_HBO (1 << 21)
868 1.1 yamaguch #define IXL_RX_DESC_IPE (1 << 22)
869 1.1 yamaguch #define IXL_RX_DESC_L4E (1 << 23)
870 1.1 yamaguch #define IXL_RX_DESC_EIPE (1 << 24)
871 1.1 yamaguch #define IXL_RX_DESC_OVERSIZE (1 << 25)
872 1.1 yamaguch
873 1.1 yamaguch #define IXL_RX_DESC_PTYPE_SHIFT 30
874 1.1 yamaguch #define IXL_RX_DESC_PTYPE_MASK (0xffULL << IXL_RX_DESC_PTYPE_SHIFT)
875 1.1 yamaguch
876 1.1 yamaguch #define IXL_RX_DESC_PLEN_SHIFT 38
877 1.1 yamaguch #define IXL_RX_DESC_PLEN_MASK (0x3fffULL << IXL_RX_DESC_PLEN_SHIFT)
878 1.1 yamaguch #define IXL_RX_DESC_HLEN_SHIFT 42
879 1.1 yamaguch #define IXL_RX_DESC_HLEN_MASK (0x7ffULL << IXL_RX_DESC_HLEN_SHIFT)
880 1.1 yamaguch } __packed __aligned(16);
881 1.1 yamaguch
882 1.3 yamaguch enum ixl_rx_desc_ptype {
883 1.3 yamaguch IXL_RX_DESC_PTYPE_IPV4FRAG = 22,
884 1.3 yamaguch IXL_RX_DESC_PTYPE_IPV4 = 23,
885 1.3 yamaguch IXL_RX_DESC_PTYPE_UDPV4 = 24,
886 1.3 yamaguch IXL_RX_DESC_PTYPE_TCPV4 = 26,
887 1.3 yamaguch IXL_RX_DESC_PTYPE_SCTPV4 = 27,
888 1.3 yamaguch IXL_RX_DESC_PTYPE_ICMPV4 = 28,
889 1.3 yamaguch
890 1.3 yamaguch IXL_RX_DESC_PTYPE_IPV6FRAG = 88,
891 1.3 yamaguch IXL_RX_DESC_PTYPE_IPV6 = 89,
892 1.3 yamaguch IXL_RX_DESC_PTYPE_UDPV6 = 90,
893 1.3 yamaguch IXL_RX_DESC_PTYPE_TCPV6 = 92,
894 1.3 yamaguch IXL_RX_DESC_PTYPE_SCTPV6 = 93,
895 1.3 yamaguch IXL_RX_DESC_PTYPE_ICMPV6 = 94,
896 1.3 yamaguch };
897 1.3 yamaguch
898 1.1 yamaguch struct ixl_rx_wb_desc_32 {
899 1.1 yamaguch uint64_t qword0;
900 1.1 yamaguch uint64_t qword1;
901 1.1 yamaguch uint64_t qword2;
902 1.1 yamaguch uint64_t qword3;
903 1.1 yamaguch } __packed __aligned(16);
904 1.1 yamaguch
905 1.1 yamaguch enum i40e_mac_type {
906 1.1 yamaguch I40E_MAC_XL710,
907 1.1 yamaguch I40E_MAC_X722,
908 1.1 yamaguch I40E_MAC_X722_VF,
909 1.1 yamaguch I40E_MAC_VF,
910 1.1 yamaguch I40E_MAC_GENERIC
911 1.1 yamaguch };
912 1.1 yamaguch
913 1.4 yamaguch #define I40E_SR_NVM_DEV_STARTER_VERSION 0x18
914 1.4 yamaguch #define I40E_SR_BOOT_CONFIG_PTR 0x17
915 1.4 yamaguch #define I40E_NVM_OEM_VER_OFF 0x83
916 1.4 yamaguch #define I40E_SR_NVM_EETRACK_LO 0x2D
917 1.4 yamaguch #define I40E_SR_NVM_EETRACK_HI 0x2E
918 1.4 yamaguch
919 1.4 yamaguch #define IXL_NVM_VERSION_LO_SHIFT 0
920 1.4 yamaguch #define IXL_NVM_VERSION_LO_MASK (0xffUL << IXL_NVM_VERSION_LO_SHIFT)
921 1.4 yamaguch #define IXL_NVM_VERSION_HI_SHIFT 12
922 1.4 yamaguch #define IXL_NVM_VERSION_HI_MASK (0xfUL << IXL_NVM_VERSION_HI_SHIFT)
923 1.4 yamaguch #define IXL_NVM_OEMVERSION_SHIFT 24
924 1.4 yamaguch #define IXL_NVM_OEMVERSION_MASK (0xffUL << IXL_NVM_OEMVERSION_SHIFT)
925 1.4 yamaguch #define IXL_NVM_OEMBUILD_SHIFT 8
926 1.4 yamaguch #define IXL_NVM_OEMBUILD_MASK (0xffffUL << IXL_NVM_OEMBUILD_SHIFT)
927 1.4 yamaguch #define IXL_NVM_OEMPATCH_SHIFT 0
928 1.4 yamaguch #define IXL_NVM_OEMPATCH_MASK (0xff << IXL_NVM_OEMPATCH_SHIFT)
929 1.1 yamaguch #endif
930