]> git.proxmox.com Git - ceph.git/blame - ceph/src/seastar/dpdk/drivers/net/bnxt/hsi_struct_def_dpdk.h
import 15.2.0 Octopus source
[ceph.git] / ceph / src / seastar / dpdk / drivers / net / bnxt / hsi_struct_def_dpdk.h
CommitLineData
9f95a23c
TL
1/* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright (c) 2014-2018 Broadcom Limited
3 * All rights reserved.
7c673cae 4 *
9f95a23c 5 * DO NOT MODIFY!!! This file is automatically generated.
7c673cae
FG
6 */
7
9f95a23c
TL
8#ifndef _HSI_STRUCT_DEF_DPDK_H_
9#define _HSI_STRUCT_DEF_DPDK_H_
7c673cae 10
9f95a23c
TL
11/* This is the HWRM command header. */
12/* hwrm_cmd_hdr (size:128b/16B) */
13struct hwrm_cmd_hdr {
14 /* The HWRM command request type. */
15 uint16_t req_type;
16 /*
17 * The completion ring to send the completion event on. This should
18 * be the NQ ID returned from the `nq_alloc` HWRM command.
19 */
20 uint16_t cmpl_ring;
21 /*
22 * The sequence ID is used by the driver for tracking multiple
23 * commands. This ID is treated as opaque data by the firmware and
24 * the value is returned in the `hwrm_resp_hdr` upon completion.
25 */
26 uint16_t seq_id;
27 /*
28 * The target ID of the command:
29 * * 0x0-0xFFF8 - The function ID
30 * * 0xFFF8-0xFFFE - Reserved for internal processors
31 * * 0xFFFF - HWRM
32 */
33 uint16_t target_id;
34 /*
35 * A physical address pointer pointing to a host buffer that the
36 * command's response data will be written. This can be either a host
37 * physical address (HPA) or a guest physical address (GPA) and must
38 * point to a physically contiguous block of memory.
39 */
40 uint64_t resp_addr;
41} __attribute__((packed));
7c673cae 42
9f95a23c
TL
43/* This is the HWRM response header. */
44/* hwrm_resp_hdr (size:64b/8B) */
45struct hwrm_resp_hdr {
46 /* The specific error status for the command. */
47 uint16_t error_code;
48 /* The HWRM command request type. */
49 uint16_t req_type;
50 /* The sequence ID from the original command. */
51 uint16_t seq_id;
52 /* The length of the response data in number of bytes. */
53 uint16_t resp_len;
54} __attribute__((packed));
7c673cae
FG
55
56/*
9f95a23c
TL
57 * TLV encapsulated message. Use the TLV type field of the
58 * TLV to determine the type of message encapsulated.
7c673cae 59 */
9f95a23c
TL
60#define CMD_DISCR_TLV_ENCAP UINT32_C(0x8000)
61#define CMD_DISCR_LAST CMD_DISCR_TLV_ENCAP
7c673cae 62
7c673cae 63
9f95a23c
TL
64/* HWRM request message */
65#define TLV_TYPE_HWRM_REQUEST UINT32_C(0x1)
66/* HWRM response message */
67#define TLV_TYPE_HWRM_RESPONSE UINT32_C(0x2)
68/* RoCE slow path command */
69#define TLV_TYPE_ROCE_SP_COMMAND UINT32_C(0x3)
70/* RoCE slow path command to query CC Gen1 support. */
71#define TLV_TYPE_QUERY_ROCE_CC_GEN1 UINT32_C(0xcommand 0x0005)
72/* RoCE slow path command to modify CC Gen1 support. */
73#define TLV_TYPE_MODIFY_ROCE_CC_GEN1 UINT32_C(0xcommand 0x0005)
74/* Engine CKV - The device's serial number. */
75#define TLV_TYPE_ENGINE_CKV_DEVICE_SERIAL_NUMBER UINT32_C(0x8001)
76/* Engine CKV - Per-function random nonce data. */
77#define TLV_TYPE_ENGINE_CKV_NONCE UINT32_C(0x8002)
78/* Engine CKV - Initialization vector. */
79#define TLV_TYPE_ENGINE_CKV_IV UINT32_C(0x8003)
80/* Engine CKV - Authentication tag. */
81#define TLV_TYPE_ENGINE_CKV_AUTH_TAG UINT32_C(0x8004)
82/* Engine CKV - The encrypted data. */
83#define TLV_TYPE_ENGINE_CKV_CIPHERTEXT UINT32_C(0x8005)
84/* Engine CKV - Supported algorithms. */
85#define TLV_TYPE_ENGINE_CKV_ALGORITHMS UINT32_C(0x8006)
86/* Engine CKV - The EC curve name and ECC public key information. */
87#define TLV_TYPE_ENGINE_CKV_ECC_PUBLIC_KEY UINT32_C(0x8007)
88/* Engine CKV - The ECDSA signature. */
89#define TLV_TYPE_ENGINE_CKV_ECDSA_SIGNATURE UINT32_C(0x8008)
90#define TLV_TYPE_LAST \
91 TLV_TYPE_ENGINE_CKV_ECDSA_SIGNATURE
7c673cae 92
9f95a23c
TL
93
94/* tlv (size:64b/8B) */
95struct tlv {
96 /*
97 * The command discriminator is used to differentiate between various
98 * types of HWRM messages. This includes legacy HWRM and RoCE slowpath
99 * command messages as well as newer TLV encapsulated HWRM commands.
100 *
101 * For TLV encapsulated messages this field must be 0x8000.
102 */
103 uint16_t cmd_discr;
104 uint8_t reserved_8b;
105 uint8_t flags;
106 /*
107 * Indicates the presence of additional TLV encapsulated data
108 * follows this TLV.
109 */
110 #define TLV_FLAGS_MORE UINT32_C(0x1)
111 /* Last TLV in a sequence of TLVs. */
112 #define TLV_FLAGS_MORE_LAST UINT32_C(0x0)
113 /* More TLVs follow this TLV. */
114 #define TLV_FLAGS_MORE_NOT_LAST UINT32_C(0x1)
115 /*
116 * When an HWRM receiver detects a TLV type that it does not
117 * support with the TLV required flag set, the receiver must
118 * reject the HWRM message with an error code indicating an
119 * unsupported TLV type.
120 */
121 #define TLV_FLAGS_REQUIRED UINT32_C(0x2)
122 /* No */
123 #define TLV_FLAGS_REQUIRED_NO (UINT32_C(0x0) << 1)
124 /* Yes */
125 #define TLV_FLAGS_REQUIRED_YES (UINT32_C(0x1) << 1)
126 #define TLV_FLAGS_REQUIRED_LAST TLV_FLAGS_REQUIRED_YES
127 /*
128 * This field defines the TLV type value which is divided into
129 * two ranges to differentiate between global and local TLV types.
130 * Global TLV types must be unique across all defined TLV types.
131 * Local TLV types are valid only for extensions to a given
132 * HWRM message and may be repeated across different HWRM message
133 * types. There is a direct correlation of each HWRM message type
134 * to a single global TLV type value.
135 *
136 * Global TLV range: `0 - (63k-1)`
137 *
138 * Local TLV range: `63k - (64k-1)`
139 */
140 uint16_t tlv_type;
141 /*
142 * Length of the message data encapsulated by this TLV in bytes.
143 * This length does not include the size of the TLV header itself
144 * and it must be an integer multiple of 8B.
145 */
146 uint16_t length;
147} __attribute__((packed));
148
149/* Input */
150/* input (size:128b/16B) */
151struct input {
7c673cae 152 /*
9f95a23c
TL
153 * This value indicates what type of request this is. The format
154 * for the rest of the command is determined by this field.
7c673cae 155 */
9f95a23c 156 uint16_t req_type;
7c673cae 157 /*
9f95a23c
TL
158 * This value indicates the what completion ring the request will
159 * be optionally completed on. If the value is -1, then no
160 * CR completion will be generated. Any other value must be a
161 * valid CR ring_id value for this function.
7c673cae 162 */
9f95a23c
TL
163 uint16_t cmpl_ring;
164 /* This value indicates the command sequence number. */
165 uint16_t seq_id;
7c673cae 166 /*
9f95a23c
TL
167 * Target ID of this command.
168 *
169 * 0x0 - 0xFFF8 - Used for function ids
170 * 0xFFF8 - 0xFFFE - Reserved for internal processors
171 * 0xFFFF - HWRM
7c673cae 172 */
9f95a23c 173 uint16_t target_id;
7c673cae 174 /*
9f95a23c
TL
175 * This is the host address where the response will be written
176 * when the request is complete. This area must be 16B aligned
177 * and must be cleared to zero before the request is made.
7c673cae 178 */
9f95a23c
TL
179 uint64_t resp_addr;
180} __attribute__((packed));
181
182/* Output */
183/* output (size:64b/8B) */
184struct output {
7c673cae 185 /*
9f95a23c
TL
186 * Pass/Fail or error type
187 *
188 * Note: receiver to verify the in parameters, and fail the call
189 * with an error when appropriate
7c673cae 190 */
9f95a23c
TL
191 uint16_t error_code;
192 /* This field returns the type of original request. */
193 uint16_t req_type;
194 /* This field provides original sequence number of the command. */
195 uint16_t seq_id;
7c673cae 196 /*
9f95a23c
TL
197 * This field is the length of the response in bytes. The
198 * last byte of the response is a valid flag that will read
199 * as '1' when the command has been completely written to
200 * memory.
7c673cae 201 */
9f95a23c
TL
202 uint16_t resp_len;
203} __attribute__((packed));
204
205/* Short Command Structure */
206/* hwrm_short_input (size:128b/16B) */
207struct hwrm_short_input {
7c673cae 208 /*
9f95a23c
TL
209 * This field indicates the type of request in the request buffer.
210 * The format for the rest of the command (request) is determined
211 * by this field.
7c673cae 212 */
9f95a23c 213 uint16_t req_type;
7c673cae 214 /*
9f95a23c
TL
215 * This field indicates a signature that is used to identify short
216 * form of the command listed here. This field shall be set to
217 * 17185 (0x4321).
7c673cae 218 */
9f95a23c
TL
219 uint16_t signature;
220 /* Signature indicating this is a short form of HWRM command */
221 #define HWRM_SHORT_INPUT_SIGNATURE_SHORT_CMD UINT32_C(0x4321)
222 #define HWRM_SHORT_INPUT_SIGNATURE_LAST \
223 HWRM_SHORT_INPUT_SIGNATURE_SHORT_CMD
224 /* Reserved for future use. */
225 uint16_t unused_0;
226 /* This value indicates the length of the request. */
227 uint16_t size;
7c673cae 228 /*
9f95a23c
TL
229 * This is the host address where the request was written.
230 * This area must be 16B aligned.
7c673cae 231 */
9f95a23c 232 uint64_t req_addr;
7c673cae
FG
233} __attribute__((packed));
234
9f95a23c
TL
235/*
236 * Command numbering
237 * # NOTE - definitions already in hwrm_req_type, in hwrm_types.yaml
238 * # So only structure definition is provided here.
239 */
240/* cmd_nums (size:64b/8B) */
241struct cmd_nums {
242 /*
243 * This version of the specification defines the commands listed in
244 * the table below. The following are general implementation
245 * requirements for these commands:
246 *
247 * # All commands listed below that are marked neither
248 * reserved nor experimental shall be implemented by the HWRM.
249 * # A HWRM client compliant to this specification should not use
250 * commands outside of the list below.
251 * # A HWRM client compliant to this specification should not use
252 * command numbers marked reserved below.
253 * # A command marked experimental below may not be implemented
254 * by the HWRM.
255 * # A command marked experimental may change in the
256 * future version of the HWRM specification.
257 * # A command not listed below may be implemented by the HWRM.
258 * The behavior of commands that are not listed below is outside
259 * the scope of this specification.
260 */
261 uint16_t req_type;
262 #define HWRM_VER_GET UINT32_C(0x0)
263 #define HWRM_FUNC_DRV_IF_CHANGE UINT32_C(0xd)
264 #define HWRM_FUNC_BUF_UNRGTR UINT32_C(0xe)
265 #define HWRM_FUNC_VF_CFG UINT32_C(0xf)
266 /* Reserved for future use. */
267 #define HWRM_RESERVED1 UINT32_C(0x10)
268 #define HWRM_FUNC_RESET UINT32_C(0x11)
269 #define HWRM_FUNC_GETFID UINT32_C(0x12)
270 #define HWRM_FUNC_VF_ALLOC UINT32_C(0x13)
271 #define HWRM_FUNC_VF_FREE UINT32_C(0x14)
272 #define HWRM_FUNC_QCAPS UINT32_C(0x15)
273 #define HWRM_FUNC_QCFG UINT32_C(0x16)
274 #define HWRM_FUNC_CFG UINT32_C(0x17)
275 #define HWRM_FUNC_QSTATS UINT32_C(0x18)
276 #define HWRM_FUNC_CLR_STATS UINT32_C(0x19)
277 #define HWRM_FUNC_DRV_UNRGTR UINT32_C(0x1a)
278 #define HWRM_FUNC_VF_RESC_FREE UINT32_C(0x1b)
279 #define HWRM_FUNC_VF_VNIC_IDS_QUERY UINT32_C(0x1c)
280 #define HWRM_FUNC_DRV_RGTR UINT32_C(0x1d)
281 #define HWRM_FUNC_DRV_QVER UINT32_C(0x1e)
282 #define HWRM_FUNC_BUF_RGTR UINT32_C(0x1f)
283 #define HWRM_PORT_PHY_CFG UINT32_C(0x20)
284 #define HWRM_PORT_MAC_CFG UINT32_C(0x21)
285 /* Experimental */
286 #define HWRM_PORT_TS_QUERY UINT32_C(0x22)
287 #define HWRM_PORT_QSTATS UINT32_C(0x23)
288 #define HWRM_PORT_LPBK_QSTATS UINT32_C(0x24)
289 /* Experimental */
290 #define HWRM_PORT_CLR_STATS UINT32_C(0x25)
291 /* Experimental */
292 #define HWRM_PORT_LPBK_CLR_STATS UINT32_C(0x26)
293 #define HWRM_PORT_PHY_QCFG UINT32_C(0x27)
294 #define HWRM_PORT_MAC_QCFG UINT32_C(0x28)
295 /* Experimental */
296 #define HWRM_PORT_MAC_PTP_QCFG UINT32_C(0x29)
297 #define HWRM_PORT_PHY_QCAPS UINT32_C(0x2a)
298 #define HWRM_PORT_PHY_I2C_WRITE UINT32_C(0x2b)
299 #define HWRM_PORT_PHY_I2C_READ UINT32_C(0x2c)
300 #define HWRM_PORT_LED_CFG UINT32_C(0x2d)
301 #define HWRM_PORT_LED_QCFG UINT32_C(0x2e)
302 #define HWRM_PORT_LED_QCAPS UINT32_C(0x2f)
303 #define HWRM_QUEUE_QPORTCFG UINT32_C(0x30)
304 #define HWRM_QUEUE_QCFG UINT32_C(0x31)
305 #define HWRM_QUEUE_CFG UINT32_C(0x32)
306 #define HWRM_FUNC_VLAN_CFG UINT32_C(0x33)
307 #define HWRM_FUNC_VLAN_QCFG UINT32_C(0x34)
308 #define HWRM_QUEUE_PFCENABLE_QCFG UINT32_C(0x35)
309 #define HWRM_QUEUE_PFCENABLE_CFG UINT32_C(0x36)
310 #define HWRM_QUEUE_PRI2COS_QCFG UINT32_C(0x37)
311 #define HWRM_QUEUE_PRI2COS_CFG UINT32_C(0x38)
312 #define HWRM_QUEUE_COS2BW_QCFG UINT32_C(0x39)
313 #define HWRM_QUEUE_COS2BW_CFG UINT32_C(0x3a)
314 /* Experimental */
315 #define HWRM_QUEUE_DSCP_QCAPS UINT32_C(0x3b)
316 /* Experimental */
317 #define HWRM_QUEUE_DSCP2PRI_QCFG UINT32_C(0x3c)
318 /* Experimental */
319 #define HWRM_QUEUE_DSCP2PRI_CFG UINT32_C(0x3d)
320 #define HWRM_VNIC_ALLOC UINT32_C(0x40)
321 #define HWRM_VNIC_FREE UINT32_C(0x41)
322 #define HWRM_VNIC_CFG UINT32_C(0x42)
323 #define HWRM_VNIC_QCFG UINT32_C(0x43)
324 #define HWRM_VNIC_TPA_CFG UINT32_C(0x44)
325 /* Experimental */
326 #define HWRM_VNIC_TPA_QCFG UINT32_C(0x45)
327 #define HWRM_VNIC_RSS_CFG UINT32_C(0x46)
328 #define HWRM_VNIC_RSS_QCFG UINT32_C(0x47)
329 #define HWRM_VNIC_PLCMODES_CFG UINT32_C(0x48)
330 #define HWRM_VNIC_PLCMODES_QCFG UINT32_C(0x49)
331 #define HWRM_VNIC_QCAPS UINT32_C(0x4a)
332 #define HWRM_RING_ALLOC UINT32_C(0x50)
333 #define HWRM_RING_FREE UINT32_C(0x51)
334 #define HWRM_RING_CMPL_RING_QAGGINT_PARAMS UINT32_C(0x52)
335 #define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS UINT32_C(0x53)
336 #define HWRM_RING_AGGINT_QCAPS UINT32_C(0x54)
337 #define HWRM_RING_RESET UINT32_C(0x5e)
338 #define HWRM_RING_GRP_ALLOC UINT32_C(0x60)
339 #define HWRM_RING_GRP_FREE UINT32_C(0x61)
340 /* Reserved for future use. */
341 #define HWRM_RESERVED5 UINT32_C(0x64)
342 /* Reserved for future use. */
343 #define HWRM_RESERVED6 UINT32_C(0x65)
344 #define HWRM_VNIC_RSS_COS_LB_CTX_ALLOC UINT32_C(0x70)
345 #define HWRM_VNIC_RSS_COS_LB_CTX_FREE UINT32_C(0x71)
346 #define HWRM_CFA_L2_FILTER_ALLOC UINT32_C(0x90)
347 #define HWRM_CFA_L2_FILTER_FREE UINT32_C(0x91)
348 #define HWRM_CFA_L2_FILTER_CFG UINT32_C(0x92)
349 #define HWRM_CFA_L2_SET_RX_MASK UINT32_C(0x93)
350 #define HWRM_CFA_VLAN_ANTISPOOF_CFG UINT32_C(0x94)
351 #define HWRM_CFA_TUNNEL_FILTER_ALLOC UINT32_C(0x95)
352 #define HWRM_CFA_TUNNEL_FILTER_FREE UINT32_C(0x96)
353 /* Experimental */
354 #define HWRM_CFA_ENCAP_RECORD_ALLOC UINT32_C(0x97)
355 /* Experimental */
356 #define HWRM_CFA_ENCAP_RECORD_FREE UINT32_C(0x98)
357 #define HWRM_CFA_NTUPLE_FILTER_ALLOC UINT32_C(0x99)
358 #define HWRM_CFA_NTUPLE_FILTER_FREE UINT32_C(0x9a)
359 #define HWRM_CFA_NTUPLE_FILTER_CFG UINT32_C(0x9b)
360 /* Experimental */
361 #define HWRM_CFA_EM_FLOW_ALLOC UINT32_C(0x9c)
362 /* Experimental */
363 #define HWRM_CFA_EM_FLOW_FREE UINT32_C(0x9d)
364 /* Experimental */
365 #define HWRM_CFA_EM_FLOW_CFG UINT32_C(0x9e)
366 #define HWRM_TUNNEL_DST_PORT_QUERY UINT32_C(0xa0)
367 #define HWRM_TUNNEL_DST_PORT_ALLOC UINT32_C(0xa1)
368 #define HWRM_TUNNEL_DST_PORT_FREE UINT32_C(0xa2)
369 #define HWRM_STAT_CTX_ALLOC UINT32_C(0xb0)
370 #define HWRM_STAT_CTX_FREE UINT32_C(0xb1)
371 #define HWRM_STAT_CTX_QUERY UINT32_C(0xb2)
372 #define HWRM_STAT_CTX_CLR_STATS UINT32_C(0xb3)
373 #define HWRM_PORT_QSTATS_EXT UINT32_C(0xb4)
374 #define HWRM_FW_RESET UINT32_C(0xc0)
375 #define HWRM_FW_QSTATUS UINT32_C(0xc1)
376 #define HWRM_FW_HEALTH_CHECK UINT32_C(0xc2)
377 #define HWRM_FW_SYNC UINT32_C(0xc3)
378 /* Experimental */
379 #define HWRM_FW_SET_TIME UINT32_C(0xc8)
380 /* Experimental */
381 #define HWRM_FW_GET_TIME UINT32_C(0xc9)
382 /* Experimental */
383 #define HWRM_FW_SET_STRUCTURED_DATA UINT32_C(0xca)
384 /* Experimental */
385 #define HWRM_FW_GET_STRUCTURED_DATA UINT32_C(0xcb)
386 /* Experimental */
387 #define HWRM_FW_IPC_MAILBOX UINT32_C(0xcc)
388 #define HWRM_EXEC_FWD_RESP UINT32_C(0xd0)
389 #define HWRM_REJECT_FWD_RESP UINT32_C(0xd1)
390 #define HWRM_FWD_RESP UINT32_C(0xd2)
391 #define HWRM_FWD_ASYNC_EVENT_CMPL UINT32_C(0xd3)
392 #define HWRM_OEM_CMD UINT32_C(0xd4)
393 #define HWRM_TEMP_MONITOR_QUERY UINT32_C(0xe0)
394 #define HWRM_WOL_FILTER_ALLOC UINT32_C(0xf0)
395 #define HWRM_WOL_FILTER_FREE UINT32_C(0xf1)
396 #define HWRM_WOL_FILTER_QCFG UINT32_C(0xf2)
397 #define HWRM_WOL_REASON_QCFG UINT32_C(0xf3)
398 /* Experimental */
399 #define HWRM_CFA_METER_PROFILE_ALLOC UINT32_C(0xf5)
400 /* Experimental */
401 #define HWRM_CFA_METER_PROFILE_FREE UINT32_C(0xf6)
402 /* Experimental */
403 #define HWRM_CFA_METER_PROFILE_CFG UINT32_C(0xf7)
404 /* Experimental */
405 #define HWRM_CFA_METER_INSTANCE_ALLOC UINT32_C(0xf8)
406 /* Experimental */
407 #define HWRM_CFA_METER_INSTANCE_FREE UINT32_C(0xf9)
408 /* Experimental */
409 #define HWRM_CFA_VFR_ALLOC UINT32_C(0xfd)
410 /* Experimental */
411 #define HWRM_CFA_VFR_FREE UINT32_C(0xfe)
412 /* Experimental */
413 #define HWRM_CFA_VF_PAIR_ALLOC UINT32_C(0x100)
414 /* Experimental */
415 #define HWRM_CFA_VF_PAIR_FREE UINT32_C(0x101)
416 /* Experimental */
417 #define HWRM_CFA_VF_PAIR_INFO UINT32_C(0x102)
418 /* Experimental */
419 #define HWRM_CFA_FLOW_ALLOC UINT32_C(0x103)
420 /* Experimental */
421 #define HWRM_CFA_FLOW_FREE UINT32_C(0x104)
422 /* Experimental */
423 #define HWRM_CFA_FLOW_FLUSH UINT32_C(0x105)
424 /* Experimental */
425 #define HWRM_CFA_FLOW_STATS UINT32_C(0x106)
426 /* Experimental */
427 #define HWRM_CFA_FLOW_INFO UINT32_C(0x107)
428 /* Experimental */
429 #define HWRM_CFA_DECAP_FILTER_ALLOC UINT32_C(0x108)
430 /* Experimental */
431 #define HWRM_CFA_DECAP_FILTER_FREE UINT32_C(0x109)
432 #define HWRM_CFA_VLAN_ANTISPOOF_QCFG UINT32_C(0x10a)
433 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC UINT32_C(0x10b)
434 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE UINT32_C(0x10c)
435 /* Experimental */
436 #define HWRM_CFA_PAIR_ALLOC UINT32_C(0x10d)
437 /* Experimental */
438 #define HWRM_CFA_PAIR_FREE UINT32_C(0x10e)
439 /* Experimental */
440 #define HWRM_CFA_PAIR_INFO UINT32_C(0x10f)
441 /* Experimental */
442 #define HWRM_FW_IPC_MSG UINT32_C(0x110)
443 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO UINT32_C(0x111)
444 #define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE UINT32_C(0x112)
445 /* Engine CKV - Ping the device and SRT firmware to get the public key. */
446 #define HWRM_ENGINE_CKV_HELLO UINT32_C(0x12d)
447 /* Engine CKV - Get the current allocation status of keys provisioned in the key vault. */
448 #define HWRM_ENGINE_CKV_STATUS UINT32_C(0x12e)
449 /* Engine CKV - Add a new CKEK used to encrypt keys. */
450 #define HWRM_ENGINE_CKV_CKEK_ADD UINT32_C(0x12f)
451 /* Engine CKV - Delete a previously added CKEK. */
452 #define HWRM_ENGINE_CKV_CKEK_DELETE UINT32_C(0x130)
453 /* Engine CKV - Add a new key to the key vault. */
454 #define HWRM_ENGINE_CKV_KEY_ADD UINT32_C(0x131)
455 /* Engine CKV - Delete a key from the key vault. */
456 #define HWRM_ENGINE_CKV_KEY_DELETE UINT32_C(0x132)
457 /* Engine CKV - Delete all keys from the key vault. */
458 #define HWRM_ENGINE_CKV_FLUSH UINT32_C(0x133)
459 /* Engine CKV - Get random data. */
460 #define HWRM_ENGINE_CKV_RNG_GET UINT32_C(0x134)
461 /* Engine CKV - Generate and encrypt a new AES key. */
462 #define HWRM_ENGINE_CKV_KEY_GEN UINT32_C(0x135)
463 /* Engine - Query the available queue groups configuration. */
464 #define HWRM_ENGINE_QG_CONFIG_QUERY UINT32_C(0x13c)
465 /* Engine - Query the queue groups assigned to a function. */
466 #define HWRM_ENGINE_QG_QUERY UINT32_C(0x13d)
467 /* Engine - Query the available queue group meter profile configuration. */
468 #define HWRM_ENGINE_QG_METER_PROFILE_CONFIG_QUERY UINT32_C(0x13e)
469 /* Engine - Query the configuration of a queue group meter profile. */
470 #define HWRM_ENGINE_QG_METER_PROFILE_QUERY UINT32_C(0x13f)
471 /* Engine - Allocate a queue group meter profile. */
472 #define HWRM_ENGINE_QG_METER_PROFILE_ALLOC UINT32_C(0x140)
473 /* Engine - Free a queue group meter profile. */
474 #define HWRM_ENGINE_QG_METER_PROFILE_FREE UINT32_C(0x141)
475 /* Engine - Query the meters assigned to a queue group. */
476 #define HWRM_ENGINE_QG_METER_QUERY UINT32_C(0x142)
477 /* Engine - Bind a queue group meter profile to a queue group. */
478 #define HWRM_ENGINE_QG_METER_BIND UINT32_C(0x143)
479 /* Engine - Unbind a queue group meter profile from a queue group. */
480 #define HWRM_ENGINE_QG_METER_UNBIND UINT32_C(0x144)
481 /* Engine - Bind a queue group to a function. */
482 #define HWRM_ENGINE_QG_FUNC_BIND UINT32_C(0x145)
483 /* Engine - Query the scheduling group configuration. */
484 #define HWRM_ENGINE_SG_CONFIG_QUERY UINT32_C(0x146)
485 /* Engine - Query the queue groups assigned to a scheduling group. */
486 #define HWRM_ENGINE_SG_QUERY UINT32_C(0x147)
487 /* Engine - Query the configuration of a scheduling group's meter profiles. */
488 #define HWRM_ENGINE_SG_METER_QUERY UINT32_C(0x148)
489 /* Engine - Configure a scheduling group's meter profiles. */
490 #define HWRM_ENGINE_SG_METER_CONFIG UINT32_C(0x149)
491 /* Engine - Bind a queue group to a scheduling group. */
492 #define HWRM_ENGINE_SG_QG_BIND UINT32_C(0x14a)
493 /* Engine - Unbind a queue group from its scheduling group. */
494 #define HWRM_ENGINE_QG_SG_UNBIND UINT32_C(0x14b)
495 /* Engine - Query the Engine configuration. */
496 #define HWRM_ENGINE_CONFIG_QUERY UINT32_C(0x154)
497 /* Engine - Configure the statistics accumulator for an Engine. */
498 #define HWRM_ENGINE_STATS_CONFIG UINT32_C(0x155)
499 /* Engine - Clear the statistics accumulator for an Engine. */
500 #define HWRM_ENGINE_STATS_CLEAR UINT32_C(0x156)
501 /* Engine - Query the statistics accumulator for an Engine. */
502 #define HWRM_ENGINE_STATS_QUERY UINT32_C(0x157)
503 /* Engine - Allocate an Engine RQ. */
504 #define HWRM_ENGINE_RQ_ALLOC UINT32_C(0x15e)
505 /* Engine - Free an Engine RQ. */
506 #define HWRM_ENGINE_RQ_FREE UINT32_C(0x15f)
507 /* Engine - Allocate an Engine CQ. */
508 #define HWRM_ENGINE_CQ_ALLOC UINT32_C(0x160)
509 /* Engine - Free an Engine CQ. */
510 #define HWRM_ENGINE_CQ_FREE UINT32_C(0x161)
511 /* Engine - Allocate an NQ. */
512 #define HWRM_ENGINE_NQ_ALLOC UINT32_C(0x162)
513 /* Engine - Free an NQ. */
514 #define HWRM_ENGINE_NQ_FREE UINT32_C(0x163)
515 /* Engine - Set the on-die RQE credit update location. */
516 #define HWRM_ENGINE_ON_DIE_RQE_CREDITS UINT32_C(0x164)
517 /* Experimental */
518 #define HWRM_FUNC_RESOURCE_QCAPS UINT32_C(0x190)
519 /* Experimental */
520 #define HWRM_FUNC_VF_RESOURCE_CFG UINT32_C(0x191)
521 /* Experimental */
522 #define HWRM_FUNC_BACKING_STORE_QCAPS UINT32_C(0x192)
523 /* Experimental */
524 #define HWRM_FUNC_BACKING_STORE_CFG UINT32_C(0x193)
525 /* Experimental */
526 #define HWRM_FUNC_BACKING_STORE_QCFG UINT32_C(0x194)
527 /* Configures the BW of any VF */
528 #define HWRM_FUNC_VF_BW_CFG UINT32_C(0x195)
529 /* Queries the BW of any VF */
530 #define HWRM_FUNC_VF_BW_QCFG UINT32_C(0x196)
531 /* Experimental */
532 #define HWRM_SELFTEST_QLIST UINT32_C(0x200)
533 /* Experimental */
534 #define HWRM_SELFTEST_EXEC UINT32_C(0x201)
535 /* Experimental */
536 #define HWRM_SELFTEST_IRQ UINT32_C(0x202)
537 /* Experimental */
538 #define HWRM_SELFTEST_RETRIEVE_SERDES_DATA UINT32_C(0x203)
539 /* Experimental */
540 #define HWRM_PCIE_QSTATS UINT32_C(0x204)
541 /* Experimental */
542 #define HWRM_DBG_READ_DIRECT UINT32_C(0xff10)
543 /* Experimental */
544 #define HWRM_DBG_READ_INDIRECT UINT32_C(0xff11)
545 /* Experimental */
546 #define HWRM_DBG_WRITE_DIRECT UINT32_C(0xff12)
547 /* Experimental */
548 #define HWRM_DBG_WRITE_INDIRECT UINT32_C(0xff13)
549 #define HWRM_DBG_DUMP UINT32_C(0xff14)
550 /* Experimental */
551 #define HWRM_DBG_ERASE_NVM UINT32_C(0xff15)
552 /* Experimental */
553 #define HWRM_DBG_CFG UINT32_C(0xff16)
554 /* Experimental */
555 #define HWRM_DBG_COREDUMP_LIST UINT32_C(0xff17)
556 /* Experimental */
557 #define HWRM_DBG_COREDUMP_INITIATE UINT32_C(0xff18)
558 /* Experimental */
559 #define HWRM_DBG_COREDUMP_RETRIEVE UINT32_C(0xff19)
560 /* Experimental */
561 #define HWRM_DBG_FW_CLI UINT32_C(0xff1a)
562 /* */
563 #define HWRM_DBG_I2C_CMD UINT32_C(0xff1b)
564 /* */
565 #define HWRM_DBG_RING_INFO_GET UINT32_C(0xff1c)
566 /* Experimental */
567 #define HWRM_NVM_FACTORY_DEFAULTS UINT32_C(0xffee)
568 #define HWRM_NVM_VALIDATE_OPTION UINT32_C(0xffef)
569 #define HWRM_NVM_FLUSH UINT32_C(0xfff0)
570 #define HWRM_NVM_GET_VARIABLE UINT32_C(0xfff1)
571 #define HWRM_NVM_SET_VARIABLE UINT32_C(0xfff2)
572 #define HWRM_NVM_INSTALL_UPDATE UINT32_C(0xfff3)
573 #define HWRM_NVM_MODIFY UINT32_C(0xfff4)
574 #define HWRM_NVM_VERIFY_UPDATE UINT32_C(0xfff5)
575 #define HWRM_NVM_GET_DEV_INFO UINT32_C(0xfff6)
576 #define HWRM_NVM_ERASE_DIR_ENTRY UINT32_C(0xfff7)
577 #define HWRM_NVM_MOD_DIR_ENTRY UINT32_C(0xfff8)
578 #define HWRM_NVM_FIND_DIR_ENTRY UINT32_C(0xfff9)
579 #define HWRM_NVM_GET_DIR_ENTRIES UINT32_C(0xfffa)
580 #define HWRM_NVM_GET_DIR_INFO UINT32_C(0xfffb)
581 #define HWRM_NVM_RAW_DUMP UINT32_C(0xfffc)
582 #define HWRM_NVM_READ UINT32_C(0xfffd)
583 #define HWRM_NVM_WRITE UINT32_C(0xfffe)
584 #define HWRM_NVM_RAW_WRITE_BLK UINT32_C(0xffff)
585 #define HWRM_LAST HWRM_NVM_RAW_WRITE_BLK
586 uint16_t unused_0[3];
587} __attribute__((packed));
588
589/* Return Codes */
590/* ret_codes (size:64b/8B) */
591struct ret_codes {
592 uint16_t error_code;
593 /* Request was successfully executed by the HWRM. */
594 #define HWRM_ERR_CODE_SUCCESS UINT32_C(0x0)
595 /* The HWRM failed to execute the request. */
596 #define HWRM_ERR_CODE_FAIL UINT32_C(0x1)
7c673cae 597 /*
9f95a23c
TL
598 * The request contains invalid argument(s) or input
599 * parameters.
7c673cae 600 */
9f95a23c 601 #define HWRM_ERR_CODE_INVALID_PARAMS UINT32_C(0x2)
7c673cae 602 /*
9f95a23c
TL
603 * The requester is not allowed to access the requested
604 * resource. This error code shall be provided in a
605 * response to a request to query or modify an existing
606 * resource that is not accessible by the requester.
7c673cae 607 */
9f95a23c 608 #define HWRM_ERR_CODE_RESOURCE_ACCESS_DENIED UINT32_C(0x3)
7c673cae 609 /*
9f95a23c
TL
610 * The HWRM is unable to allocate the requested resource.
611 * This code only applies to requests for HWRM resource
612 * allocations.
7c673cae 613 */
9f95a23c 614 #define HWRM_ERR_CODE_RESOURCE_ALLOC_ERROR UINT32_C(0x4)
7c673cae 615 /*
9f95a23c
TL
616 * Invalid combination of flags is specified in the
617 * request.
7c673cae 618 */
9f95a23c 619 #define HWRM_ERR_CODE_INVALID_FLAGS UINT32_C(0x5)
7c673cae 620 /*
9f95a23c
TL
621 * Invalid combination of enables fields is specified in
622 * the request.
7c673cae 623 */
9f95a23c 624 #define HWRM_ERR_CODE_INVALID_ENABLES UINT32_C(0x6)
7c673cae 625 /*
9f95a23c
TL
626 * Request contains a required TLV that is not supported by
627 * the installed version of firmware.
7c673cae 628 */
9f95a23c 629 #define HWRM_ERR_CODE_UNSUPPORTED_TLV UINT32_C(0x7)
7c673cae 630 /*
9f95a23c
TL
631 * No firmware buffer available to accept the request. Driver
632 * should retry the request.
7c673cae 633 */
9f95a23c 634 #define HWRM_ERR_CODE_NO_BUFFER UINT32_C(0x8)
7c673cae 635 /*
9f95a23c
TL
636 * This error code is only reported by firmware when some
637 * sub-option of a supported HWRM command is unsupported.
7c673cae 638 */
9f95a23c 639 #define HWRM_ERR_CODE_UNSUPPORTED_OPTION_ERR UINT32_C(0x9)
7c673cae 640 /*
9f95a23c
TL
641 * Generic HWRM execution error that represents an
642 * internal error.
7c673cae 643 */
9f95a23c
TL
644 #define HWRM_ERR_CODE_HWRM_ERROR UINT32_C(0xf)
645 /* Unknown error */
646 #define HWRM_ERR_CODE_UNKNOWN_ERR UINT32_C(0xfffe)
647 /* Unsupported or invalid command */
648 #define HWRM_ERR_CODE_CMD_NOT_SUPPORTED UINT32_C(0xffff)
649 #define HWRM_ERR_CODE_LAST \
650 HWRM_ERR_CODE_CMD_NOT_SUPPORTED
651 uint16_t unused_0[3];
7c673cae
FG
652} __attribute__((packed));
653
9f95a23c
TL
654/* Output */
655/* hwrm_err_output (size:128b/16B) */
656struct hwrm_err_output {
7c673cae 657 /*
9f95a23c
TL
658 * Pass/Fail or error type
659 *
660 * Note: receiver to verify the in parameters, and fail the call
661 * with an error when appropriate
7c673cae 662 */
9f95a23c
TL
663 uint16_t error_code;
664 /* This field returns the type of original request. */
665 uint16_t req_type;
666 /* This field provides original sequence number of the command. */
667 uint16_t seq_id;
7c673cae 668 /*
9f95a23c
TL
669 * This field is the length of the response in bytes. The
670 * last byte of the response is a valid flag that will read
671 * as '1' when the command has been completely written to
672 * memory.
7c673cae 673 */
9f95a23c
TL
674 uint16_t resp_len;
675 /* debug info for this error response. */
676 uint32_t opaque_0;
677 /* debug info for this error response. */
678 uint16_t opaque_1;
7c673cae 679 /*
9f95a23c
TL
680 * In the case of an error response, command specific error
681 * code is returned in this field.
7c673cae 682 */
9f95a23c 683 uint8_t cmd_err;
7c673cae 684 /*
9f95a23c
TL
685 * This field is used in Output records to indicate that the output
686 * is completely written to RAM. This field should be read as '1'
687 * to indicate that the output has been completely written.
688 * When writing a command completion or response to an internal processor,
689 * the order of writes has to be such that this field is written last.
7c673cae 690 */
9f95a23c
TL
691 uint8_t valid;
692} __attribute__((packed));
693/*
694 * Following is the signature for HWRM message field that indicates not
695 * applicable (All F's). Need to cast it the size of the field if needed.
696 */
697#define HWRM_NA_SIGNATURE ((uint32_t)(-1))
698/* hwrm_func_buf_rgtr */
699#define HWRM_MAX_REQ_LEN 128
700/* hwrm_selftest_qlist */
701#define HWRM_MAX_RESP_LEN 280
702/* 7 bit indirection table index. */
703#define HW_HASH_INDEX_SIZE 0x80
704#define HW_HASH_KEY_SIZE 40
705/* valid key for HWRM response */
706#define HWRM_RESP_VALID_KEY 1
707#define HWRM_VERSION_MAJOR 1
708#define HWRM_VERSION_MINOR 9
709#define HWRM_VERSION_UPDATE 2
710/* non-zero means beta version */
711#define HWRM_VERSION_RSVD 53
712#define HWRM_VERSION_STR "1.9.2.53"
713
714/****************
715 * hwrm_ver_get *
716 ****************/
717
718
719/* hwrm_ver_get_input (size:192b/24B) */
720struct hwrm_ver_get_input {
721 /* The HWRM command request type. */
722 uint16_t req_type;
7c673cae 723 /*
9f95a23c
TL
724 * The completion ring to send the completion event on. This should
725 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 726 */
9f95a23c 727 uint16_t cmpl_ring;
7c673cae 728 /*
9f95a23c
TL
729 * The sequence ID is used by the driver for tracking multiple
730 * commands. This ID is treated as opaque data by the firmware and
731 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 732 */
9f95a23c 733 uint16_t seq_id;
7c673cae 734 /*
9f95a23c
TL
735 * The target ID of the command:
736 * * 0x0-0xFFF8 - The function ID
737 * * 0xFFF8-0xFFFE - Reserved for internal processors
738 * * 0xFFFF - HWRM
7c673cae 739 */
9f95a23c 740 uint16_t target_id;
7c673cae 741 /*
9f95a23c
TL
742 * A physical address pointer pointing to a host buffer that the
743 * command's response data will be written. This can be either a host
744 * physical address (HPA) or a guest physical address (GPA) and must
745 * point to a physically contiguous block of memory.
7c673cae 746 */
9f95a23c 747 uint64_t resp_addr;
7c673cae 748 /*
9f95a23c
TL
749 * This field represents the major version of HWRM interface
750 * specification supported by the driver HWRM implementation.
751 * The interface major version is intended to change only when
752 * non backward compatible changes are made to the HWRM
753 * interface specification.
7c673cae 754 */
9f95a23c 755 uint8_t hwrm_intf_maj;
7c673cae 756 /*
9f95a23c
TL
757 * This field represents the minor version of HWRM interface
758 * specification supported by the driver HWRM implementation.
759 * A change in interface minor version is used to reflect
760 * significant backward compatible modification to HWRM
761 * interface specification.
762 * This can be due to addition or removal of functionality.
763 * HWRM interface specifications with the same major version
764 * but different minor versions are compatible.
7c673cae 765 */
9f95a23c 766 uint8_t hwrm_intf_min;
7c673cae 767 /*
9f95a23c
TL
768 * This field represents the update version of HWRM interface
769 * specification supported by the driver HWRM implementation.
770 * The interface update version is used to reflect minor
771 * changes or bug fixes to a released HWRM interface
772 * specification.
7c673cae 773 */
9f95a23c
TL
774 uint8_t hwrm_intf_upd;
775 uint8_t unused_0[5];
776} __attribute__((packed));
777
778/* hwrm_ver_get_output (size:1408b/176B) */
779struct hwrm_ver_get_output {
780 /* The specific error status for the command. */
781 uint16_t error_code;
782 /* The HWRM command request type. */
783 uint16_t req_type;
784 /* The sequence ID from the original command. */
785 uint16_t seq_id;
786 /* The length of the response data in number of bytes. */
787 uint16_t resp_len;
7c673cae 788 /*
9f95a23c
TL
789 * This field represents the major version of HWRM interface
790 * specification supported by the HWRM implementation.
791 * The interface major version is intended to change only when
792 * non backward compatible changes are made to the HWRM
793 * interface specification.
794 * A HWRM implementation that is compliant with this
795 * specification shall provide value of 1 in this field.
7c673cae 796 */
9f95a23c 797 uint8_t hwrm_intf_maj_8b;
7c673cae 798 /*
9f95a23c
TL
799 * This field represents the minor version of HWRM interface
800 * specification supported by the HWRM implementation.
801 * A change in interface minor version is used to reflect
802 * significant backward compatible modification to HWRM
803 * interface specification.
804 * This can be due to addition or removal of functionality.
805 * HWRM interface specifications with the same major version
806 * but different minor versions are compatible.
807 * A HWRM implementation that is compliant with this
808 * specification shall provide value of 2 in this field.
7c673cae 809 */
9f95a23c 810 uint8_t hwrm_intf_min_8b;
7c673cae 811 /*
9f95a23c
TL
812 * This field represents the update version of HWRM interface
813 * specification supported by the HWRM implementation.
814 * The interface update version is used to reflect minor
815 * changes or bug fixes to a released HWRM interface
816 * specification.
817 * A HWRM implementation that is compliant with this
818 * specification shall provide value of 2 in this field.
7c673cae 819 */
9f95a23c
TL
820 uint8_t hwrm_intf_upd_8b;
821 uint8_t hwrm_intf_rsvd_8b;
7c673cae 822 /*
9f95a23c
TL
823 * This field represents the major version of HWRM firmware.
824 * A change in firmware major version represents a major
825 * firmware release.
7c673cae 826 */
9f95a23c 827 uint8_t hwrm_fw_maj_8b;
7c673cae 828 /*
9f95a23c
TL
829 * This field represents the minor version of HWRM firmware.
830 * A change in firmware minor version represents significant
831 * firmware functionality changes.
7c673cae 832 */
9f95a23c 833 uint8_t hwrm_fw_min_8b;
7c673cae 834 /*
9f95a23c
TL
835 * This field represents the build version of HWRM firmware.
836 * A change in firmware build version represents bug fixes
837 * to a released firmware.
7c673cae 838 */
9f95a23c 839 uint8_t hwrm_fw_bld_8b;
7c673cae 840 /*
9f95a23c
TL
841 * This field is a reserved field. This field can be used to
842 * represent firmware branches or customer specific releases
843 * tied to a specific (major,minor,update) version of the
844 * HWRM firmware.
7c673cae 845 */
9f95a23c 846 uint8_t hwrm_fw_rsvd_8b;
7c673cae 847 /*
9f95a23c
TL
848 * This field represents the major version of mgmt firmware.
849 * A change in major version represents a major release.
7c673cae 850 */
9f95a23c 851 uint8_t mgmt_fw_maj_8b;
7c673cae 852 /*
9f95a23c
TL
853 * This field represents the minor version of mgmt firmware.
854 * A change in minor version represents significant
855 * functionality changes.
7c673cae 856 */
9f95a23c 857 uint8_t mgmt_fw_min_8b;
7c673cae 858 /*
9f95a23c
TL
859 * This field represents the build version of mgmt firmware.
860 * A change in update version represents bug fixes.
7c673cae 861 */
9f95a23c 862 uint8_t mgmt_fw_bld_8b;
7c673cae 863 /*
9f95a23c
TL
864 * This field is a reserved field. This field can be used to
865 * represent firmware branches or customer specific releases
866 * tied to a specific (major,minor,update) version
7c673cae 867 */
9f95a23c 868 uint8_t mgmt_fw_rsvd_8b;
7c673cae 869 /*
9f95a23c
TL
870 * This field represents the major version of network
871 * control firmware.
872 * A change in major version represents a major release.
7c673cae 873 */
9f95a23c 874 uint8_t netctrl_fw_maj_8b;
7c673cae 875 /*
9f95a23c
TL
876 * This field represents the minor version of network
877 * control firmware.
878 * A change in minor version represents significant
879 * functionality changes.
7c673cae 880 */
9f95a23c 881 uint8_t netctrl_fw_min_8b;
7c673cae 882 /*
9f95a23c
TL
883 * This field represents the build version of network
884 * control firmware.
885 * A change in update version represents bug fixes.
7c673cae 886 */
9f95a23c 887 uint8_t netctrl_fw_bld_8b;
7c673cae 888 /*
9f95a23c
TL
889 * This field is a reserved field. This field can be used to
890 * represent firmware branches or customer specific releases
891 * tied to a specific (major,minor,update) version
7c673cae 892 */
9f95a23c 893 uint8_t netctrl_fw_rsvd_8b;
7c673cae 894 /*
9f95a23c
TL
895 * This field is used to indicate device's capabilities and
896 * configurations.
7c673cae 897 */
9f95a23c 898 uint32_t dev_caps_cfg;
7c673cae 899 /*
9f95a23c
TL
900 * If set to 1, then secure firmware update behavior
901 * is supported.
902 * If set to 0, then secure firmware update behavior is
903 * not supported.
7c673cae 904 */
9f95a23c
TL
905 #define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_SECURE_FW_UPD_SUPPORTED \
906 UINT32_C(0x1)
7c673cae 907 /*
9f95a23c
TL
908 * If set to 1, then firmware based DCBX agent is supported.
909 * If set to 0, then firmware based DCBX agent capability
910 * is not supported on this device.
7c673cae 911 */
9f95a23c
TL
912 #define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_FW_DCBX_AGENT_SUPPORTED \
913 UINT32_C(0x2)
7c673cae 914 /*
9f95a23c
TL
915 * If set to 1, then HWRM short command format is supported.
916 * If set to 0, then HWRM short command format is not supported.
7c673cae 917 */
9f95a23c
TL
918 #define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_SHORT_CMD_SUPPORTED \
919 UINT32_C(0x4)
7c673cae 920 /*
9f95a23c
TL
921 * If set to 1, then HWRM short command format is required.
922 * If set to 0, then HWRM short command format is not required.
7c673cae 923 */
9f95a23c
TL
924 #define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_SHORT_CMD_REQUIRED \
925 UINT32_C(0x8)
7c673cae 926 /*
9f95a23c
TL
927 * If set to 1, then the KONG host mailbox channel is supported.
928 * If set to 0, then the KONG host mailbox channel is not supported.
929 * By default, this flag should be 0 for older version of core firmware.
7c673cae 930 */
9f95a23c
TL
931 #define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_KONG_MB_CHNL_SUPPORTED \
932 UINT32_C(0x10)
7c673cae 933 /*
9f95a23c
TL
934 * If set to 1, then the 64bit flow handle is supported in addition to the
935 * legacy 16bit flow handle. If set to 0, then the 64bit flow handle is not
936 * supported. By default, this flag should be 0 for older version of core firmware.
7c673cae 937 */
9f95a23c
TL
938 #define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_FLOW_HANDLE_64BIT_SUPPORTED \
939 UINT32_C(0x20)
7c673cae 940 /*
9f95a23c
TL
941 * If set to 1, then filter type can be provided in filter_alloc or filter_cfg
942 * filter types like L2 for l2 traffic and ROCE for roce & l2 traffic.
943 * If set to 0, then filter types not supported.
944 * By default, this flag should be 0 for older version of core firmware.
7c673cae 945 */
9f95a23c
TL
946 #define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_L2_FILTER_TYPES_ROCE_OR_L2_SUPPORTED \
947 UINT32_C(0x40)
7c673cae 948 /*
9f95a23c
TL
949 * If set to 1, firmware is capable to support virtio vSwitch offload model.
950 * If set to 0, firmware can't supported virtio vSwitch offload model.
951 * By default, this flag should be 0 for older version of core firmware.
7c673cae 952 */
9f95a23c
TL
953 #define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_VIRTIO_VSWITCH_OFFLOAD_SUPPORTED \
954 UINT32_C(0x80)
7c673cae 955 /*
9f95a23c
TL
956 * If set to 1, firmware is capable to support trusted VF.
957 * If set to 0, firmware is not capable to support trusted VF.
958 * By default, this flag should be 0 for older version of core firmware.
7c673cae 959 */
9f95a23c
TL
960 #define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_TRUSTED_VF_SUPPORTED \
961 UINT32_C(0x100)
7c673cae 962 /*
9f95a23c
TL
963 * This field represents the major version of RoCE firmware.
964 * A change in major version represents a major release.
7c673cae 965 */
9f95a23c 966 uint8_t roce_fw_maj_8b;
7c673cae 967 /*
9f95a23c
TL
968 * This field represents the minor version of RoCE firmware.
969 * A change in minor version represents significant
970 * functionality changes.
7c673cae 971 */
9f95a23c 972 uint8_t roce_fw_min_8b;
7c673cae 973 /*
9f95a23c
TL
974 * This field represents the build version of RoCE firmware.
975 * A change in update version represents bug fixes.
7c673cae 976 */
9f95a23c 977 uint8_t roce_fw_bld_8b;
7c673cae 978 /*
9f95a23c
TL
979 * This field is a reserved field. This field can be used to
980 * represent firmware branches or customer specific releases
981 * tied to a specific (major,minor,update) version
7c673cae 982 */
9f95a23c 983 uint8_t roce_fw_rsvd_8b;
7c673cae 984 /*
9f95a23c
TL
985 * This field represents the name of HWRM FW (ASCII chars
986 * with NULL at the end).
7c673cae 987 */
9f95a23c 988 char hwrm_fw_name[16];
7c673cae 989 /*
9f95a23c
TL
990 * This field represents the name of mgmt FW (ASCII chars
991 * with NULL at the end).
7c673cae 992 */
9f95a23c 993 char mgmt_fw_name[16];
7c673cae 994 /*
9f95a23c
TL
995 * This field represents the name of network control
996 * firmware (ASCII chars with NULL at the end).
7c673cae 997 */
9f95a23c 998 char netctrl_fw_name[16];
7c673cae 999 /*
9f95a23c
TL
1000 * This field is reserved for future use.
1001 * The responder should set it to 0.
1002 * The requester should ignore this field.
7c673cae 1003 */
9f95a23c 1004 uint8_t reserved2[16];
7c673cae 1005 /*
9f95a23c
TL
1006 * This field represents the name of RoCE FW (ASCII chars
1007 * with NULL at the end).
7c673cae 1008 */
9f95a23c
TL
1009 char roce_fw_name[16];
1010 /* This field returns the chip number. */
1011 uint16_t chip_num;
1012 /* This field returns the revision of chip. */
1013 uint8_t chip_rev;
1014 /* This field returns the chip metal number. */
1015 uint8_t chip_metal;
1016 /* This field returns the bond id of the chip. */
1017 uint8_t chip_bond_id;
1018 /* This value indicates the type of platform used for chip implementation. */
1019 uint8_t chip_platform_type;
1020 /* ASIC */
1021 #define HWRM_VER_GET_OUTPUT_CHIP_PLATFORM_TYPE_ASIC UINT32_C(0x0)
1022 /* FPGA platform of the chip. */
1023 #define HWRM_VER_GET_OUTPUT_CHIP_PLATFORM_TYPE_FPGA UINT32_C(0x1)
1024 /* Palladium platform of the chip. */
1025 #define HWRM_VER_GET_OUTPUT_CHIP_PLATFORM_TYPE_PALLADIUM UINT32_C(0x2)
1026 #define HWRM_VER_GET_OUTPUT_CHIP_PLATFORM_TYPE_LAST \
1027 HWRM_VER_GET_OUTPUT_CHIP_PLATFORM_TYPE_PALLADIUM
7c673cae 1028 /*
9f95a23c
TL
1029 * This field returns the maximum value of request window that
1030 * is supported by the HWRM. The request window is mapped
1031 * into device address space using MMIO.
7c673cae 1032 */
9f95a23c 1033 uint16_t max_req_win_len;
7c673cae 1034 /*
9f95a23c
TL
1035 * This field returns the maximum value of response buffer in
1036 * bytes.
7c673cae 1037 */
9f95a23c 1038 uint16_t max_resp_len;
7c673cae 1039 /*
9f95a23c
TL
1040 * This field returns the default request timeout value in
1041 * milliseconds.
7c673cae 1042 */
9f95a23c 1043 uint16_t def_req_timeout;
7c673cae 1044 /*
9f95a23c
TL
1045 * This field will indicate if any subsystems is not fully
1046 * initialized.
7c673cae 1047 */
9f95a23c 1048 uint8_t flags;
7c673cae 1049 /*
9f95a23c
TL
1050 * If set to 1, device is not ready.
1051 * If set to 0, device is ready to accept all HWRM commands.
7c673cae 1052 */
9f95a23c 1053 #define HWRM_VER_GET_OUTPUT_FLAGS_DEV_NOT_RDY UINT32_C(0x1)
7c673cae 1054 /*
9f95a23c
TL
1055 * If set to 1, external version present.
1056 * If set to 0, external version not present.
7c673cae 1057 */
9f95a23c
TL
1058 #define HWRM_VER_GET_OUTPUT_FLAGS_EXT_VER_AVAIL UINT32_C(0x2)
1059 uint8_t unused_0[2];
7c673cae 1060 /*
9f95a23c
TL
1061 * For backward compatibility this field must be set to 1.
1062 * Older drivers might look for this field to be 1 before
1063 * processing the message.
7c673cae 1064 */
9f95a23c 1065 uint8_t always_1;
7c673cae 1066 /*
9f95a23c
TL
1067 * This field represents the major version of HWRM interface
1068 * specification supported by the HWRM implementation.
1069 * The interface major version is intended to change only when
1070 * non backward compatible changes are made to the HWRM
1071 * interface specification. A HWRM implementation that is
1072 * compliant with this specification shall provide value of 1
1073 * in this field.
7c673cae 1074 */
9f95a23c 1075 uint16_t hwrm_intf_major;
7c673cae 1076 /*
9f95a23c
TL
1077 * This field represents the minor version of HWRM interface
1078 * specification supported by the HWRM implementation.
1079 * A change in interface minor version is used to reflect
1080 * significant backward compatible modification to HWRM
1081 * interface specification. This can be due to addition or
1082 * removal of functionality. HWRM interface specifications
1083 * with the same major version but different minor versions are
1084 * compatible. A HWRM implementation that is compliant with
1085 * this specification shall provide value of 2 in this field.
7c673cae 1086 */
9f95a23c 1087 uint16_t hwrm_intf_minor;
7c673cae 1088 /*
9f95a23c
TL
1089 * This field represents the update version of HWRM interface
1090 * specification supported by the HWRM implementation. The
1091 * interface update version is used to reflect minor changes or
1092 * bug fixes to a released HWRM interface specification.
1093 * A HWRM implementation that is compliant with this
1094 * specification shall provide value of 2 in this field.
7c673cae 1095 */
9f95a23c 1096 uint16_t hwrm_intf_build;
7c673cae 1097 /*
9f95a23c
TL
1098 * This field represents the patch version of HWRM interface
1099 * specification supported by the HWRM implementation.
7c673cae 1100 */
9f95a23c 1101 uint16_t hwrm_intf_patch;
7c673cae 1102 /*
9f95a23c
TL
1103 * This field represents the major version of HWRM firmware.
1104 * A change in firmware major version represents a major
1105 * firmware release.
7c673cae 1106 */
9f95a23c 1107 uint16_t hwrm_fw_major;
7c673cae 1108 /*
9f95a23c
TL
1109 * This field represents the minor version of HWRM firmware.
1110 * A change in firmware minor version represents significant
1111 * firmware functionality changes.
7c673cae 1112 */
9f95a23c 1113 uint16_t hwrm_fw_minor;
7c673cae 1114 /*
9f95a23c
TL
1115 * This field represents the build version of HWRM firmware.
1116 * A change in firmware build version represents bug fixes to
1117 * a released firmware.
7c673cae 1118 */
9f95a23c 1119 uint16_t hwrm_fw_build;
7c673cae 1120 /*
9f95a23c
TL
1121 * This field is a reserved field.
1122 * This field can be used to represent firmware branches or customer
1123 * specific releases tied to a specific (major,minor,update) version
1124 * of the HWRM firmware.
7c673cae 1125 */
9f95a23c 1126 uint16_t hwrm_fw_patch;
7c673cae 1127 /*
9f95a23c
TL
1128 * This field represents the major version of mgmt firmware.
1129 * A change in major version represents a major release.
7c673cae 1130 */
9f95a23c 1131 uint16_t mgmt_fw_major;
7c673cae 1132 /*
9f95a23c
TL
1133 * This field represents the minor version of HWRM firmware.
1134 * A change in firmware minor version represents significant
1135 * firmware functionality changes.
7c673cae 1136 */
9f95a23c 1137 uint16_t mgmt_fw_minor;
7c673cae 1138 /*
9f95a23c
TL
1139 * This field represents the build version of mgmt firmware.
1140 * A change in update version represents bug fixes.
7c673cae 1141 */
9f95a23c 1142 uint16_t mgmt_fw_build;
7c673cae 1143 /*
9f95a23c
TL
1144 * This field is a reserved field. This field can be used to
1145 * represent firmware branches or customer specific releases
1146 * tied to a specific (major,minor,update) version.
7c673cae 1147 */
9f95a23c 1148 uint16_t mgmt_fw_patch;
7c673cae 1149 /*
9f95a23c
TL
1150 * This field represents the major version of network control
1151 * firmware. A change in major version represents
1152 * a major release.
7c673cae 1153 */
9f95a23c 1154 uint16_t netctrl_fw_major;
7c673cae 1155 /*
9f95a23c
TL
1156 * This field represents the minor version of network control
1157 * firmware. A change in minor version represents significant
1158 * functionality changes.
7c673cae 1159 */
9f95a23c 1160 uint16_t netctrl_fw_minor;
7c673cae 1161 /*
9f95a23c
TL
1162 * This field represents the build version of network control
1163 * firmware. A change in update version represents bug fixes.
7c673cae 1164 */
9f95a23c 1165 uint16_t netctrl_fw_build;
7c673cae 1166 /*
9f95a23c
TL
1167 * This field is a reserved field. This field can be used to
1168 * represent firmware branches or customer specific releases
1169 * tied to a specific (major,minor,update) version
7c673cae 1170 */
9f95a23c 1171 uint16_t netctrl_fw_patch;
7c673cae 1172 /*
9f95a23c
TL
1173 * This field represents the major version of RoCE firmware.
1174 * A change in major version represents a major release.
7c673cae 1175 */
9f95a23c 1176 uint16_t roce_fw_major;
7c673cae 1177 /*
9f95a23c
TL
1178 * This field represents the minor version of RoCE firmware.
1179 * A change in minor version represents significant
1180 * functionality changes.
7c673cae 1181 */
9f95a23c 1182 uint16_t roce_fw_minor;
7c673cae 1183 /*
9f95a23c
TL
1184 * This field represents the build version of RoCE firmware.
1185 * A change in update version represents bug fixes.
7c673cae 1186 */
9f95a23c 1187 uint16_t roce_fw_build;
7c673cae 1188 /*
9f95a23c
TL
1189 * This field is a reserved field. This field can be used to
1190 * represent firmware branches or customer specific releases
1191 * tied to a specific (major,minor,update) version
7c673cae 1192 */
9f95a23c 1193 uint16_t roce_fw_patch;
7c673cae 1194 /*
9f95a23c
TL
1195 * This field returns the maximum extended request length acceptable
1196 * by the device which allows requests greater than mailbox size when
1197 * used with the short cmd request format.
7c673cae 1198 */
9f95a23c
TL
1199 uint16_t max_ext_req_len;
1200 uint8_t unused_1[5];
7c673cae 1201 /*
9f95a23c
TL
1202 * This field is used in Output records to indicate that the output
1203 * is completely written to RAM. This field should be read as '1'
1204 * to indicate that the output has been completely written.
1205 * When writing a command completion or response to an internal processor,
1206 * the order of writes has to be such that this field is written last.
7c673cae 1207 */
9f95a23c
TL
1208 uint8_t valid;
1209} __attribute__((packed));
1210
1211/* bd_base (size:64b/8B) */
1212struct bd_base {
1213 uint8_t type;
1214 /* This value identifies the type of buffer descriptor. */
1215 #define BD_BASE_TYPE_MASK UINT32_C(0x3f)
1216 #define BD_BASE_TYPE_SFT 0
7c673cae 1217 /*
9f95a23c
TL
1218 * Indicates that this BD is 16B long and is used for
1219 * normal L2 packet transmission.
7c673cae 1220 */
9f95a23c 1221 #define BD_BASE_TYPE_TX_BD_SHORT UINT32_C(0x0)
7c673cae 1222 /*
9f95a23c
TL
1223 * Indicates that this BD is 1BB long and is an empty
1224 * TX BD. Not valid for use by the driver.
7c673cae 1225 */
9f95a23c 1226 #define BD_BASE_TYPE_TX_BD_EMPTY UINT32_C(0x1)
7c673cae 1227 /*
9f95a23c
TL
1228 * Indicates that this BD is 16B long and is an RX Producer
1229 * (ie. empty) buffer descriptor.
7c673cae 1230 */
9f95a23c 1231 #define BD_BASE_TYPE_RX_PROD_PKT UINT32_C(0x4)
7c673cae 1232 /*
9f95a23c
TL
1233 * Indicates that this BD is 16B long and is an RX
1234 * Producer Buffer BD.
7c673cae 1235 */
9f95a23c 1236 #define BD_BASE_TYPE_RX_PROD_BFR UINT32_C(0x5)
7c673cae 1237 /*
9f95a23c
TL
1238 * Indicates that this BD is 16B long and is an
1239 * RX Producer Assembly Buffer Descriptor.
7c673cae 1240 */
9f95a23c 1241 #define BD_BASE_TYPE_RX_PROD_AGG UINT32_C(0x6)
7c673cae 1242 /*
9f95a23c
TL
1243 * Indicates that this BD is 32B long and is used for
1244 * normal L2 packet transmission.
7c673cae 1245 */
9f95a23c 1246 #define BD_BASE_TYPE_TX_BD_LONG UINT32_C(0x10)
7c673cae 1247 /*
9f95a23c
TL
1248 * Indicates that this BD is 32B long and is used for
1249 * L2 packet transmission for small packets that require
1250 * low latency.
7c673cae 1251 */
9f95a23c
TL
1252 #define BD_BASE_TYPE_TX_BD_LONG_INLINE UINT32_C(0x11)
1253 #define BD_BASE_TYPE_LAST BD_BASE_TYPE_TX_BD_LONG_INLINE
1254 uint8_t unused_1[7];
1255} __attribute__((packed));
1256
1257/* tx_bd_short (size:128b/16B) */
1258struct tx_bd_short {
7c673cae 1259 /*
9f95a23c
TL
1260 * All bits in this field must be valid on the first BD of a packet.
1261 * Only the packet_end bit must be valid for the remaining BDs
1262 * of a packet.
7c673cae 1263 */
9f95a23c
TL
1264 uint16_t flags_type;
1265 /* This value identifies the type of buffer descriptor. */
1266 #define TX_BD_SHORT_TYPE_MASK UINT32_C(0x3f)
1267 #define TX_BD_SHORT_TYPE_SFT 0
7c673cae 1268 /*
9f95a23c
TL
1269 * Indicates that this BD is 16B long and is used for
1270 * normal L2 packet transmission.
7c673cae 1271 */
9f95a23c
TL
1272 #define TX_BD_SHORT_TYPE_TX_BD_SHORT UINT32_C(0x0)
1273 #define TX_BD_SHORT_TYPE_LAST TX_BD_SHORT_TYPE_TX_BD_SHORT
7c673cae 1274 /*
9f95a23c
TL
1275 * All bits in this field must be valid on the first BD of a packet.
1276 * Only the packet_end bit must be valid for the remaining BDs
1277 * of a packet.
7c673cae 1278 */
9f95a23c
TL
1279 #define TX_BD_SHORT_FLAGS_MASK UINT32_C(0xffc0)
1280 #define TX_BD_SHORT_FLAGS_SFT 6
7c673cae 1281 /*
9f95a23c
TL
1282 * If set to 1, the packet ends with the data in the buffer
1283 * pointed to by this descriptor. This flag must be
1284 * valid on every BD.
7c673cae 1285 */
9f95a23c 1286 #define TX_BD_SHORT_FLAGS_PACKET_END UINT32_C(0x40)
7c673cae 1287 /*
9f95a23c
TL
1288 * If set to 1, the device will not generate a completion for
1289 * this transmit packet unless there is an error in it's
1290 * processing.
1291 * If this bit
1292 * is set to 0, then the packet will be completed normally.
1293 *
1294 * This bit must be valid only on the first BD of a packet.
7c673cae 1295 */
9f95a23c
TL
1296 #define TX_BD_SHORT_FLAGS_NO_CMPL UINT32_C(0x80)
1297 /*
1298 * This value indicates how many 16B BD locations are consumed
1299 * in the ring by this packet.
1300 * A value of 1 indicates that this BD is the only BD (and that
1301 * the it is a short BD). A value
1302 * of 3 indicates either 3 short BDs or 1 long BD and one short
1303 * BD in the packet. A value of 0 indicates
1304 * that there are 32 BD locations in the packet (the maximum).
1305 *
1306 * This field is valid only on the first BD of a packet.
1307 */
1308 #define TX_BD_SHORT_FLAGS_BD_CNT_MASK UINT32_C(0x1f00)
1309 #define TX_BD_SHORT_FLAGS_BD_CNT_SFT 8
1310 /*
1311 * This value is a hint for the length of the entire packet.
1312 * It is used by the chip to optimize internal processing.
1313 *
1314 * The packet will be dropped if the hint is too short.
1315 *
1316 * This field is valid only on the first BD of a packet.
1317 */
1318 #define TX_BD_SHORT_FLAGS_LHINT_MASK UINT32_C(0x6000)
1319 #define TX_BD_SHORT_FLAGS_LHINT_SFT 13
1320 /* indicates packet length < 512B */
1321 #define TX_BD_SHORT_FLAGS_LHINT_LT512 (UINT32_C(0x0) << 13)
1322 /* indicates 512 <= packet length < 1KB */
1323 #define TX_BD_SHORT_FLAGS_LHINT_LT1K (UINT32_C(0x1) << 13)
1324 /* indicates 1KB <= packet length < 2KB */
1325 #define TX_BD_SHORT_FLAGS_LHINT_LT2K (UINT32_C(0x2) << 13)
1326 /* indicates packet length >= 2KB */
1327 #define TX_BD_SHORT_FLAGS_LHINT_GTE2K (UINT32_C(0x3) << 13)
1328 #define TX_BD_SHORT_FLAGS_LHINT_LAST \
1329 TX_BD_SHORT_FLAGS_LHINT_GTE2K
7c673cae 1330 /*
9f95a23c
TL
1331 * If set to 1, the device immediately updates the Send Consumer
1332 * Index after the buffer associated with this descriptor has
1333 * been transferred via DMA to NIC memory from host memory. An
1334 * interrupt may or may not be generated according to the state
1335 * of the interrupt avoidance mechanisms. If this bit
1336 * is set to 0, then the Consumer Index is only updated as soon
1337 * as one of the host interrupt coalescing conditions has been met.
1338 *
1339 * This bit must be valid on the first BD of a packet.
7c673cae 1340 */
9f95a23c 1341 #define TX_BD_SHORT_FLAGS_COAL_NOW UINT32_C(0x8000)
7c673cae 1342 /*
9f95a23c
TL
1343 * This is the length of the host physical buffer this BD describes
1344 * in bytes.
1345 *
1346 * This field must be valid on all BDs of a packet.
7c673cae 1347 */
9f95a23c 1348 uint16_t len;
7c673cae 1349 /*
9f95a23c
TL
1350 * The opaque data field is pass through to the completion and can be
1351 * used for any data that the driver wants to associate with the
1352 * transmit BD.
1353 *
1354 * This field must be valid on the first BD of a packet.
7c673cae 1355 */
9f95a23c 1356 uint32_t opaque;
7c673cae 1357 /*
9f95a23c
TL
1358 * This is the host physical address for the portion of the packet
1359 * described by this TX BD.
1360 *
1361 * This value must be valid on all BDs of a packet.
7c673cae 1362 */
9f95a23c
TL
1363 uint64_t address;
1364} __attribute__((packed));
1365
1366/* tx_bd_long (size:128b/16B) */
1367struct tx_bd_long {
1368 /* This value identifies the type of buffer descriptor. */
1369 uint16_t flags_type;
7c673cae 1370 /*
9f95a23c
TL
1371 * This value indicates the type of buffer descriptor.
1372 * packet.
7c673cae 1373 */
9f95a23c
TL
1374 #define TX_BD_LONG_TYPE_MASK UINT32_C(0x3f)
1375 #define TX_BD_LONG_TYPE_SFT 0
7c673cae 1376 /*
9f95a23c
TL
1377 * Indicates that this BD is 32B long and is used for
1378 * normal L2 packet transmission.
7c673cae 1379 */
9f95a23c
TL
1380 #define TX_BD_LONG_TYPE_TX_BD_LONG UINT32_C(0x10)
1381 #define TX_BD_LONG_TYPE_LAST TX_BD_LONG_TYPE_TX_BD_LONG
7c673cae 1382 /*
9f95a23c
TL
1383 * All bits in this field must be valid on the first BD of a packet.
1384 * Only the packet_end bit must be valid for the remaining BDs
1385 * of a packet.
7c673cae 1386 */
9f95a23c
TL
1387 #define TX_BD_LONG_FLAGS_MASK UINT32_C(0xffc0)
1388 #define TX_BD_LONG_FLAGS_SFT 6
7c673cae 1389 /*
9f95a23c
TL
1390 * If set to 1, the packet ends with the data in the buffer
1391 * pointed to by this descriptor. This flag must be
1392 * valid on every BD.
7c673cae 1393 */
9f95a23c 1394 #define TX_BD_LONG_FLAGS_PACKET_END UINT32_C(0x40)
7c673cae 1395 /*
9f95a23c
TL
1396 * If set to 1, the device will not generate a completion for
1397 * this transmit packet unless there is an error in it's
1398 * processing.
1399 * If this bit
1400 * is set to 0, then the packet will be completed normally.
1401 *
1402 * This bit must be valid only on the first BD of a packet.
7c673cae 1403 */
9f95a23c
TL
1404 #define TX_BD_LONG_FLAGS_NO_CMPL UINT32_C(0x80)
1405 /*
1406 * This value indicates how many 16B BD locations are consumed
1407 * in the ring by this packet.
1408 * A value of 1 indicates that this BD is the only BD (and that
1409 * the it is a short BD). A value
1410 * of 3 indicates either 3 short BDs or 1 long BD and one short
1411 * BD in the packet. A value of 0 indicates
1412 * that there are 32 BD locations in the packet (the maximum).
1413 *
1414 * This field is valid only on the first BD of a packet.
1415 */
1416 #define TX_BD_LONG_FLAGS_BD_CNT_MASK UINT32_C(0x1f00)
1417 #define TX_BD_LONG_FLAGS_BD_CNT_SFT 8
1418 /*
1419 * This value is a hint for the length of the entire packet.
1420 * It is used by the chip to optimize internal processing.
1421 *
1422 * The packet will be dropped if the hint is too short.
1423 *
1424 * This field is valid only on the first BD of a packet.
1425 */
1426 #define TX_BD_LONG_FLAGS_LHINT_MASK UINT32_C(0x6000)
1427 #define TX_BD_LONG_FLAGS_LHINT_SFT 13
1428 /* indicates packet length < 512B */
1429 #define TX_BD_LONG_FLAGS_LHINT_LT512 (UINT32_C(0x0) << 13)
1430 /* indicates 512 <= packet length < 1KB */
1431 #define TX_BD_LONG_FLAGS_LHINT_LT1K (UINT32_C(0x1) << 13)
1432 /* indicates 1KB <= packet length < 2KB */
1433 #define TX_BD_LONG_FLAGS_LHINT_LT2K (UINT32_C(0x2) << 13)
1434 /* indicates packet length >= 2KB */
1435 #define TX_BD_LONG_FLAGS_LHINT_GTE2K (UINT32_C(0x3) << 13)
1436 #define TX_BD_LONG_FLAGS_LHINT_LAST TX_BD_LONG_FLAGS_LHINT_GTE2K
7c673cae 1437 /*
9f95a23c
TL
1438 * If set to 1, the device immediately updates the Send Consumer
1439 * Index after the buffer associated with this descriptor has
1440 * been transferred via DMA to NIC memory from host memory. An
1441 * interrupt may or may not be generated according to the state
1442 * of the interrupt avoidance mechanisms. If this bit
1443 * is set to 0, then the Consumer Index is only updated as soon
1444 * as one of the host interrupt coalescing conditions has been met.
1445 *
1446 * This bit must be valid on the first BD of a packet.
7c673cae 1447 */
9f95a23c 1448 #define TX_BD_LONG_FLAGS_COAL_NOW UINT32_C(0x8000)
7c673cae 1449 /*
9f95a23c
TL
1450 * This is the length of the host physical buffer this BD describes
1451 * in bytes.
1452 *
1453 * This field must be valid on all BDs of a packet.
7c673cae 1454 */
9f95a23c 1455 uint16_t len;
7c673cae 1456 /*
9f95a23c
TL
1457 * The opaque data field is pass through to the completion and can be
1458 * used for any data that the driver wants to associate with the
1459 * transmit BD.
1460 *
1461 * This field must be valid on the first BD of a packet.
7c673cae 1462 */
9f95a23c 1463 uint32_t opaque;
7c673cae 1464 /*
9f95a23c
TL
1465 * This is the host physical address for the portion of the packet
1466 * described by this TX BD.
1467 *
1468 * This value must be valid on all BDs of a packet.
7c673cae 1469 */
9f95a23c 1470 uint64_t address;
7c673cae
FG
1471} __attribute__((packed));
1472
9f95a23c
TL
1473/* Last 16 bytes of tx_bd_long. */
1474/* tx_bd_long_hi (size:128b/16B) */
1475struct tx_bd_long_hi {
7c673cae 1476 /*
9f95a23c
TL
1477 * All bits in this field must be valid on the first BD of a packet.
1478 * Their value on other BDs of the packet will be ignored.
7c673cae 1479 */
9f95a23c 1480 uint16_t lflags;
7c673cae 1481 /*
9f95a23c
TL
1482 * If set to 1, the controller replaces the TCP/UPD checksum
1483 * fields of normal TCP/UPD checksum, or the inner TCP/UDP
1484 * checksum field of the encapsulated TCP/UDP packets with the
1485 * hardware calculated TCP/UDP checksum for the packet associated
1486 * with this descriptor. The flag is ignored if the LSO flag is set.
1487 *
1488 * This bit must be valid on the first BD of a packet.
7c673cae 1489 */
9f95a23c 1490 #define TX_BD_LONG_LFLAGS_TCP_UDP_CHKSUM UINT32_C(0x1)
7c673cae 1491 /*
9f95a23c
TL
1492 * If set to 1, the controller replaces the IP checksum of the
1493 * normal packets, or the inner IP checksum of the encapsulated
1494 * packets with the hardware calculated IP checksum for the
1495 * packet associated with this descriptor.
1496 *
1497 * This bit must be valid on the first BD of a packet.
7c673cae 1498 */
9f95a23c 1499 #define TX_BD_LONG_LFLAGS_IP_CHKSUM UINT32_C(0x2)
7c673cae 1500 /*
9f95a23c
TL
1501 * If set to 1, the controller will not append an Ethernet CRC
1502 * to the end of the frame.
1503 *
1504 * This bit must be valid on the first BD of a packet.
1505 *
1506 * Packet must be 64B or longer when this flag is set. It is not
1507 * useful to use this bit with any form of TX offload such as
1508 * CSO or LSO. The intent is that the packet from the host already
1509 * has a valid Ethernet CRC on the packet.
7c673cae 1510 */
9f95a23c 1511 #define TX_BD_LONG_LFLAGS_NOCRC UINT32_C(0x4)
7c673cae 1512 /*
9f95a23c
TL
1513 * If set to 1, the device will record the time at which the packet
1514 * was actually transmitted at the TX MAC.
1515 *
1516 * This bit must be valid on the first BD of a packet.
7c673cae 1517 */
9f95a23c 1518 #define TX_BD_LONG_LFLAGS_STAMP UINT32_C(0x8)
7c673cae 1519 /*
9f95a23c
TL
1520 * If set to 1, The controller replaces the tunnel IP checksum
1521 * field with hardware calculated IP checksum for the IP header
1522 * of the packet associated with this descriptor.
1523 *
1524 * For outer UDP checksum, global outer UDP checksum TE_NIC register
1525 * needs to be enabled. If the global outer UDP checksum TE_NIC register
1526 * bit is set, outer UDP checksum will be calculated for the following
1527 * cases:
1528 * 1. Packets with tcp_udp_chksum flag set to offload checksum for inner
1529 * packet AND the inner packet is TCP/UDP. If the inner packet is ICMP for
1530 * example (non-TCP/UDP), even if the tcp_udp_chksum is set, the outer UDP
1531 * checksum will not be calculated.
1532 * 2. Packets with lso flag set which implies inner TCP checksum calculation
1533 * as part of LSO operation.
1534 */
1535 #define TX_BD_LONG_LFLAGS_T_IP_CHKSUM UINT32_C(0x10)
1536 /*
1537 * If set to 1, the device will treat this packet with LSO(Large
1538 * Send Offload) processing for both normal or encapsulated
1539 * packets, which is a form of TCP segmentation. When this bit
1540 * is 1, the hdr_size and mss fields must be valid. The driver
1541 * doesn't need to set t_ip_chksum, ip_chksum, and tcp_udp_chksum
1542 * flags since the controller will replace the appropriate
1543 * checksum fields for segmented packets.
1544 *
1545 * When this bit is 1, the hdr_size and mss fields must be valid.
7c673cae 1546 */
9f95a23c 1547 #define TX_BD_LONG_LFLAGS_LSO UINT32_C(0x20)
7c673cae 1548 /*
9f95a23c
TL
1549 * If set to zero when LSO is '1', then the IPID will be treated
1550 * as a 16b number and will be wrapped if it exceeds a value of
1551 * 0xffff.
1552 *
1553 * If set to one when LSO is '1', then the IPID will be treated
1554 * as a 15b number and will be wrapped if it exceeds a value 0f
1555 * 0x7fff.
7c673cae 1556 */
9f95a23c 1557 #define TX_BD_LONG_LFLAGS_IPID_FMT UINT32_C(0x40)
7c673cae 1558 /*
9f95a23c
TL
1559 * If set to zero when LSO is '1', then the IPID of the tunnel
1560 * IP header will not be modified during LSO operations.
1561 *
1562 * If set to one when LSO is '1', then the IPID of the tunnel
1563 * IP header will be incremented for each subsequent segment of an
1564 * LSO operation.
1565 *
1566 * The flag is ignored if the LSO packet is a normal (non-tunneled)
1567 * TCP packet.
7c673cae 1568 */
9f95a23c 1569 #define TX_BD_LONG_LFLAGS_T_IPID UINT32_C(0x80)
7c673cae 1570 /*
9f95a23c
TL
1571 * If set to '1', then the RoCE ICRC will be appended to the
1572 * packet. Packet must be a valid RoCE format packet.
7c673cae 1573 */
9f95a23c 1574 #define TX_BD_LONG_LFLAGS_ROCE_CRC UINT32_C(0x100)
7c673cae 1575 /*
9f95a23c
TL
1576 * If set to '1', then the FCoE CRC will be appended to the
1577 * packet. Packet must be a valid FCoE format packet.
7c673cae 1578 */
9f95a23c
TL
1579 #define TX_BD_LONG_LFLAGS_FCOE_CRC UINT32_C(0x200)
1580 uint16_t hdr_size;
7c673cae 1581 /*
9f95a23c
TL
1582 * When LSO is '1', this field must contain the offset of the
1583 * TCP payload from the beginning of the packet in as
1584 * 16b words. In case of encapsulated/tunneling packet, this field
1585 * contains the offset of the inner TCP payload from beginning of the
1586 * packet as 16-bit words.
1587 *
1588 * This value must be valid on the first BD of a packet.
1589 */
1590 #define TX_BD_LONG_HDR_SIZE_MASK UINT32_C(0x1ff)
1591 #define TX_BD_LONG_HDR_SIZE_SFT 0
1592 uint32_t mss;
1593 /*
1594 * This is the MSS value that will be used to do the LSO processing.
1595 * The value is the length in bytes of the TCP payload for each
1596 * segment generated by the LSO operation.
1597 *
1598 * This value must be valid on the first BD of a packet.
1599 */
1600 #define TX_BD_LONG_MSS_MASK UINT32_C(0x7fff)
1601 #define TX_BD_LONG_MSS_SFT 0
1602 uint16_t unused2;
1603 /*
1604 * This value selects a CFA action to perform on the packet.
1605 * Set this value to zero if no CFA action is desired.
1606 *
1607 * This value must be valid on the first BD of a packet.
1608 */
1609 uint16_t cfa_action;
1610 /*
1611 * This value is action meta-data that defines CFA edit operations
1612 * that are done in addition to any action editing.
1613 */
1614 uint32_t cfa_meta;
1615 /* When key=1, This is the VLAN tag VID value. */
1616 #define TX_BD_LONG_CFA_META_VLAN_VID_MASK UINT32_C(0xfff)
1617 #define TX_BD_LONG_CFA_META_VLAN_VID_SFT 0
1618 /* When key=1, This is the VLAN tag DE value. */
1619 #define TX_BD_LONG_CFA_META_VLAN_DE UINT32_C(0x1000)
1620 /* When key=1, This is the VLAN tag PRI value. */
1621 #define TX_BD_LONG_CFA_META_VLAN_PRI_MASK UINT32_C(0xe000)
1622 #define TX_BD_LONG_CFA_META_VLAN_PRI_SFT 13
1623 /* When key=1, This is the VLAN tag TPID select value. */
1624 #define TX_BD_LONG_CFA_META_VLAN_TPID_MASK UINT32_C(0x70000)
1625 #define TX_BD_LONG_CFA_META_VLAN_TPID_SFT 16
1626 /* 0x88a8 */
1627 #define TX_BD_LONG_CFA_META_VLAN_TPID_TPID88A8 (UINT32_C(0x0) << 16)
1628 /* 0x8100 */
1629 #define TX_BD_LONG_CFA_META_VLAN_TPID_TPID8100 (UINT32_C(0x1) << 16)
1630 /* 0x9100 */
1631 #define TX_BD_LONG_CFA_META_VLAN_TPID_TPID9100 (UINT32_C(0x2) << 16)
1632 /* 0x9200 */
1633 #define TX_BD_LONG_CFA_META_VLAN_TPID_TPID9200 (UINT32_C(0x3) << 16)
1634 /* 0x9300 */
1635 #define TX_BD_LONG_CFA_META_VLAN_TPID_TPID9300 (UINT32_C(0x4) << 16)
1636 /* Value programmed in CFA VLANTPID register. */
1637 #define TX_BD_LONG_CFA_META_VLAN_TPID_TPIDCFG (UINT32_C(0x5) << 16)
1638 #define TX_BD_LONG_CFA_META_VLAN_TPID_LAST \
1639 TX_BD_LONG_CFA_META_VLAN_TPID_TPIDCFG
1640 /* When key=1, This is the VLAN tag TPID select value. */
1641 #define TX_BD_LONG_CFA_META_VLAN_RESERVED_MASK UINT32_C(0xff80000)
1642 #define TX_BD_LONG_CFA_META_VLAN_RESERVED_SFT 19
7c673cae 1643 /*
9f95a23c
TL
1644 * This field identifies the type of edit to be performed
1645 * on the packet.
1646 *
1647 * This value must be valid on the first BD of a packet.
7c673cae 1648 */
9f95a23c
TL
1649 #define TX_BD_LONG_CFA_META_KEY_MASK UINT32_C(0xf0000000)
1650 #define TX_BD_LONG_CFA_META_KEY_SFT 28
1651 /* No editing */
1652 #define TX_BD_LONG_CFA_META_KEY_NONE (UINT32_C(0x0) << 28)
7c673cae 1653 /*
9f95a23c
TL
1654 * - meta[17:16] - TPID select value (0 = 0x8100).
1655 * - meta[15:12] - PRI/DE value.
1656 * - meta[11:0] - VID value.
7c673cae 1657 */
9f95a23c
TL
1658 #define TX_BD_LONG_CFA_META_KEY_VLAN_TAG (UINT32_C(0x1) << 28)
1659 #define TX_BD_LONG_CFA_META_KEY_LAST \
1660 TX_BD_LONG_CFA_META_KEY_VLAN_TAG
7c673cae
FG
1661} __attribute__((packed));
1662
9f95a23c
TL
1663/*
1664 * This structure is used to inform the NIC of packet data that needs to be
1665 * transmitted with additional processing that requires extra data such as
1666 * VLAN insertion plus attached inline data. This BD type may be used to
1667 * improve latency for small packets needing the additional extended features
1668 * supported by long BDs.
1669 */
1670/* tx_bd_long_inline (size:256b/32B) */
1671struct tx_bd_long_inline {
1672 uint16_t flags_type;
1673 /* This value identifies the type of buffer descriptor. */
1674 #define TX_BD_LONG_INLINE_TYPE_MASK UINT32_C(0x3f)
1675 #define TX_BD_LONG_INLINE_TYPE_SFT 0
7c673cae 1676 /*
9f95a23c
TL
1677 * This type of BD is 32B long and is used for inline L2 packet
1678 * transmission.
7c673cae 1679 */
9f95a23c
TL
1680 #define TX_BD_LONG_INLINE_TYPE_TX_BD_LONG_INLINE UINT32_C(0x11)
1681 #define TX_BD_LONG_INLINE_TYPE_LAST \
1682 TX_BD_LONG_INLINE_TYPE_TX_BD_LONG_INLINE
7c673cae 1683 /*
9f95a23c
TL
1684 * All bits in this field may be set on the first BD of a packet.
1685 * Only the packet_end bit may be set in non-first BDs.
7c673cae 1686 */
9f95a23c
TL
1687 #define TX_BD_LONG_INLINE_FLAGS_MASK UINT32_C(0xffc0)
1688 #define TX_BD_LONG_INLINE_FLAGS_SFT 6
7c673cae 1689 /*
9f95a23c
TL
1690 * If set to 1, the packet ends with the data in the buffer
1691 * pointed to by this descriptor. This flag must be
1692 * valid on every BD.
7c673cae 1693 */
9f95a23c 1694 #define TX_BD_LONG_INLINE_FLAGS_PACKET_END UINT32_C(0x40)
7c673cae 1695 /*
9f95a23c
TL
1696 * If set to 1, the device will not generate a completion for
1697 * this transmit packet unless there is an error in its processing.
1698 * If this bit is set to 0, then the packet will be completed
1699 * normally.
1700 *
1701 * This bit may be set only on the first BD of a packet.
7c673cae 1702 */
9f95a23c 1703 #define TX_BD_LONG_INLINE_FLAGS_NO_CMPL UINT32_C(0x80)
7c673cae 1704 /*
9f95a23c
TL
1705 * This value indicates how many 16B BD locations are consumed
1706 * in the ring by this packet, including the BD and inline
1707 * data.
7c673cae 1708 */
9f95a23c
TL
1709 #define TX_BD_LONG_INLINE_FLAGS_BD_CNT_MASK UINT32_C(0x1f00)
1710 #define TX_BD_LONG_INLINE_FLAGS_BD_CNT_SFT 8
1711 /* This field is deprecated. */
1712 #define TX_BD_LONG_INLINE_FLAGS_LHINT_MASK UINT32_C(0x6000)
1713 #define TX_BD_LONG_INLINE_FLAGS_LHINT_SFT 13
7c673cae 1714 /*
9f95a23c
TL
1715 * If set to 1, the device immediately updates the Send Consumer
1716 * Index after the buffer associated with this descriptor has
1717 * been transferred via DMA to NIC memory from host memory. An
1718 * interrupt may or may not be generated according to the state
1719 * of the interrupt avoidance mechanisms. If this bit
1720 * is set to 0, then the Consumer Index is only updated as soon
1721 * as one of the host interrupt coalescing conditions has been met.
1722 *
1723 * This bit must be valid on the first BD of a packet.
7c673cae 1724 */
9f95a23c 1725 #define TX_BD_LONG_INLINE_FLAGS_COAL_NOW UINT32_C(0x8000)
7c673cae 1726 /*
9f95a23c
TL
1727 * This is the length of the inline data, not including BD length, in
1728 * bytes.
1729 * The maximum value is 480.
1730 *
1731 * This field must be valid on all BDs of a packet.
7c673cae 1732 */
9f95a23c 1733 uint16_t len;
7c673cae 1734 /*
9f95a23c
TL
1735 * The opaque data field is passed through to the completion and can be
1736 * used for any data that the driver wants to associate with the transmit
1737 * BD.
1738 *
1739 * This field must be valid on the first BD of a packet.
7c673cae 1740 */
9f95a23c
TL
1741 uint32_t opaque;
1742 uint64_t unused1;
7c673cae 1743 /*
9f95a23c
TL
1744 * All bits in this field must be valid on the first BD of a packet.
1745 * Their value on other BDs of the packet is ignored.
7c673cae 1746 */
9f95a23c 1747 uint16_t lflags;
7c673cae 1748 /*
9f95a23c
TL
1749 * If set to 1, the controller replaces the TCP/UPD checksum
1750 * fields of normal TCP/UPD checksum, or the inner TCP/UDP
1751 * checksum field of the encapsulated TCP/UDP packets with the
1752 * hardware calculated TCP/UDP checksum for the packet associated
1753 * with this descriptor. The flag is ignored if the LSO flag is set.
7c673cae 1754 */
9f95a23c 1755 #define TX_BD_LONG_INLINE_LFLAGS_TCP_UDP_CHKSUM UINT32_C(0x1)
7c673cae 1756 /*
9f95a23c
TL
1757 * If set to 1, the controller replaces the IP checksum of the
1758 * normal packets, or the inner IP checksum of the encapsulated
1759 * packets with the hardware calculated IP checksum for the
1760 * packet associated with this descriptor.
7c673cae 1761 */
9f95a23c 1762 #define TX_BD_LONG_INLINE_LFLAGS_IP_CHKSUM UINT32_C(0x2)
7c673cae 1763 /*
9f95a23c
TL
1764 * If set to 1, the controller will not append an Ethernet CRC
1765 * to the end of the frame.
1766 *
1767 * Packet must be 64B or longer when this flag is set. It is not
1768 * useful to use this bit with any form of TX offload such as
1769 * CSO or LSO. The intent is that the packet from the host already
1770 * has a valid Ethernet CRC on the packet.
7c673cae 1771 */
9f95a23c 1772 #define TX_BD_LONG_INLINE_LFLAGS_NOCRC UINT32_C(0x4)
7c673cae 1773 /*
9f95a23c
TL
1774 * If set to 1, the device will record the time at which the packet
1775 * was actually transmitted at the TX MAC.
7c673cae 1776 */
9f95a23c 1777 #define TX_BD_LONG_INLINE_LFLAGS_STAMP UINT32_C(0x8)
7c673cae 1778 /*
9f95a23c
TL
1779 * If set to 1, the controller replaces the tunnel IP checksum
1780 * field with hardware calculated IP checksum for the IP header
1781 * of the packet associated with this descriptor. The hardware
1782 * updates an outer UDP checksum if it is non-zero.
7c673cae 1783 */
9f95a23c 1784 #define TX_BD_LONG_INLINE_LFLAGS_T_IP_CHKSUM UINT32_C(0x10)
7c673cae 1785 /*
9f95a23c
TL
1786 * This bit must be 0 for BDs of this type. LSO is not supported with
1787 * inline BDs.
7c673cae 1788 */
9f95a23c
TL
1789 #define TX_BD_LONG_INLINE_LFLAGS_LSO UINT32_C(0x20)
1790 /* Since LSO is not supported with inline BDs, this bit is not used. */
1791 #define TX_BD_LONG_INLINE_LFLAGS_IPID_FMT UINT32_C(0x40)
1792 /* Since LSO is not supported with inline BDs, this bit is not used. */
1793 #define TX_BD_LONG_INLINE_LFLAGS_T_IPID UINT32_C(0x80)
7c673cae 1794 /*
9f95a23c
TL
1795 * If set to '1', then the RoCE ICRC will be appended to the
1796 * packet. Packet must be a valid RoCE format packet.
7c673cae 1797 */
9f95a23c 1798 #define TX_BD_LONG_INLINE_LFLAGS_ROCE_CRC UINT32_C(0x100)
7c673cae 1799 /*
9f95a23c
TL
1800 * If set to '1', then the FCoE CRC will be appended to the
1801 * packet. Packet must be a valid FCoE format packet.
1802 */
1803 #define TX_BD_LONG_INLINE_LFLAGS_FCOE_CRC UINT32_C(0x200)
1804 uint16_t unused2;
1805 uint32_t unused3;
1806 uint16_t unused4;
1807 /*
1808 * This value selects a CFA action to perform on the packet.
1809 * Set this value to zero if no CFA action is desired.
1810 *
1811 * This value must be valid on the first BD of a packet.
1812 */
1813 uint16_t cfa_action;
1814 /*
1815 * This value is action meta-data that defines CFA edit operations
1816 * that are done in addition to any action editing.
1817 */
1818 uint32_t cfa_meta;
1819 /* When key = 1, this is the VLAN tag VID value. */
1820 #define TX_BD_LONG_INLINE_CFA_META_VLAN_VID_MASK UINT32_C(0xfff)
1821 #define TX_BD_LONG_INLINE_CFA_META_VLAN_VID_SFT 0
1822 /* When key = 1, this is the VLAN tag DE value. */
1823 #define TX_BD_LONG_INLINE_CFA_META_VLAN_DE UINT32_C(0x1000)
1824 /* When key = 1, this is the VLAN tag PRI value. */
1825 #define TX_BD_LONG_INLINE_CFA_META_VLAN_PRI_MASK UINT32_C(0xe000)
1826 #define TX_BD_LONG_INLINE_CFA_META_VLAN_PRI_SFT 13
1827 /* When key = 1, this is the VLAN tag TPID select value. */
1828 #define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_MASK UINT32_C(0x70000)
1829 #define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_SFT 16
1830 /* 0x88a8 */
1831 #define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_TPID88A8 \
1832 (UINT32_C(0x0) << 16)
1833 /* 0x8100 */
1834 #define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_TPID8100 \
1835 (UINT32_C(0x1) << 16)
1836 /* 0x9100 */
1837 #define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_TPID9100 \
1838 (UINT32_C(0x2) << 16)
1839 /* 0x9200 */
1840 #define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_TPID9200 \
1841 (UINT32_C(0x3) << 16)
1842 /* 0x9300 */
1843 #define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_TPID9300 \
1844 (UINT32_C(0x4) << 16)
1845 /* Value programmed in CFA VLANTPID register. */
1846 #define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_TPIDCFG \
1847 (UINT32_C(0x5) << 16)
1848 #define TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_LAST \
1849 TX_BD_LONG_INLINE_CFA_META_VLAN_TPID_TPIDCFG
1850 #define TX_BD_LONG_INLINE_CFA_META_VLAN_RESERVED_MASK \
1851 UINT32_C(0xff80000)
1852 #define TX_BD_LONG_INLINE_CFA_META_VLAN_RESERVED_SFT 19
1853 /*
1854 * This field identifies the type of edit to be performed
1855 * on the packet.
1856 *
1857 * This value must be valid on the first BD of a packet.
1858 */
1859 #define TX_BD_LONG_INLINE_CFA_META_KEY_MASK \
1860 UINT32_C(0xf0000000)
1861 #define TX_BD_LONG_INLINE_CFA_META_KEY_SFT 28
1862 /* No editing */
1863 #define TX_BD_LONG_INLINE_CFA_META_KEY_NONE \
1864 (UINT32_C(0x0) << 28)
7c673cae 1865 /*
9f95a23c
TL
1866 * - meta[17:16] - TPID select value (0 = 0x8100).
1867 * - meta[15:12] - PRI/DE value.
1868 * - meta[11:0] - VID value.
7c673cae 1869 */
9f95a23c
TL
1870 #define TX_BD_LONG_INLINE_CFA_META_KEY_VLAN_TAG \
1871 (UINT32_C(0x1) << 28)
1872 #define TX_BD_LONG_INLINE_CFA_META_KEY_LAST \
1873 TX_BD_LONG_INLINE_CFA_META_KEY_VLAN_TAG
1874} __attribute__((packed));
1875
1876/* tx_bd_empty (size:128b/16B) */
1877struct tx_bd_empty {
1878 /* This value identifies the type of buffer descriptor. */
1879 uint8_t type;
1880 #define TX_BD_EMPTY_TYPE_MASK UINT32_C(0x3f)
1881 #define TX_BD_EMPTY_TYPE_SFT 0
1882 /*
1883 * Indicates that this BD is 1BB long and is an empty
1884 * TX BD. Not valid for use by the driver.
1885 */
1886 #define TX_BD_EMPTY_TYPE_TX_BD_EMPTY UINT32_C(0x1)
1887 #define TX_BD_EMPTY_TYPE_LAST TX_BD_EMPTY_TYPE_TX_BD_EMPTY
1888 uint8_t unused_1[3];
1889 uint8_t unused_2;
1890 uint8_t unused_3[3];
1891 uint8_t unused_4[8];
1892} __attribute__((packed));
1893
1894/* rx_prod_pkt_bd (size:128b/16B) */
1895struct rx_prod_pkt_bd {
1896 /* This value identifies the type of buffer descriptor. */
1897 uint16_t flags_type;
1898 /* This value identifies the type of buffer descriptor. */
1899 #define RX_PROD_PKT_BD_TYPE_MASK UINT32_C(0x3f)
1900 #define RX_PROD_PKT_BD_TYPE_SFT 0
7c673cae 1901 /*
9f95a23c
TL
1902 * Indicates that this BD is 16B long and is an RX Producer
1903 * (ie. empty) buffer descriptor.
7c673cae 1904 */
9f95a23c
TL
1905 #define RX_PROD_PKT_BD_TYPE_RX_PROD_PKT UINT32_C(0x4)
1906 #define RX_PROD_PKT_BD_TYPE_LAST \
1907 RX_PROD_PKT_BD_TYPE_RX_PROD_PKT
1908 #define RX_PROD_PKT_BD_FLAGS_MASK UINT32_C(0xffc0)
1909 #define RX_PROD_PKT_BD_FLAGS_SFT 6
7c673cae 1910 /*
9f95a23c
TL
1911 * If set to 1, the packet will be placed at the address plus
1912 * 2B. The 2 Bytes of padding will be written as zero.
7c673cae 1913 */
9f95a23c 1914 #define RX_PROD_PKT_BD_FLAGS_SOP_PAD UINT32_C(0x40)
7c673cae 1915 /*
9f95a23c
TL
1916 * If set to 1, the packet write will be padded out to the
1917 * nearest cache-line with zero value padding.
7c673cae 1918 */
9f95a23c
TL
1919 #define RX_PROD_PKT_BD_FLAGS_EOP_PAD UINT32_C(0x80)
1920 /*
1921 * This value is the number of additional buffers in the ring that
1922 * describe the buffer space to be consumed for the this packet.
1923 * If the value is zero, then the packet must fit within the
1924 * space described by this BD. If this value is 1 or more, it
1925 * indicates how many additional "buffer" BDs are in the ring
1926 * immediately following this BD to be used for the same
1927 * network packet.
1928 *
1929 * Even if the packet to be placed does not need all the
1930 * additional buffers, they will be consumed anyway.
7c673cae 1931 */
9f95a23c
TL
1932 #define RX_PROD_PKT_BD_FLAGS_BUFFERS_MASK UINT32_C(0x300)
1933 #define RX_PROD_PKT_BD_FLAGS_BUFFERS_SFT 8
7c673cae 1934 /*
9f95a23c
TL
1935 * This is the length in Bytes of the host physical buffer where
1936 * data for the packet may be placed in host memory.
7c673cae 1937 */
9f95a23c 1938 uint16_t len;
7c673cae 1939 /*
9f95a23c
TL
1940 * The opaque data field is pass through to the completion and can be
1941 * used for any data that the driver wants to associate with this
1942 * receive buffer set.
7c673cae 1943 */
9f95a23c 1944 uint32_t opaque;
7c673cae 1945 /*
9f95a23c
TL
1946 * This is the host physical address where data for the packet may
1947 * by placed in host memory.
7c673cae 1948 */
9f95a23c
TL
1949 uint64_t address;
1950} __attribute__((packed));
1951
1952/* rx_prod_bfr_bd (size:128b/16B) */
1953struct rx_prod_bfr_bd {
1954 /* This value identifies the type of buffer descriptor. */
1955 uint16_t flags_type;
1956 /* This value identifies the type of buffer descriptor. */
1957 #define RX_PROD_BFR_BD_TYPE_MASK UINT32_C(0x3f)
1958 #define RX_PROD_BFR_BD_TYPE_SFT 0
7c673cae 1959 /*
9f95a23c
TL
1960 * Indicates that this BD is 16B long and is an RX
1961 * Producer Buffer BD.
7c673cae 1962 */
9f95a23c
TL
1963 #define RX_PROD_BFR_BD_TYPE_RX_PROD_BFR UINT32_C(0x5)
1964 #define RX_PROD_BFR_BD_TYPE_LAST RX_PROD_BFR_BD_TYPE_RX_PROD_BFR
1965 #define RX_PROD_BFR_BD_FLAGS_MASK UINT32_C(0xffc0)
1966 #define RX_PROD_BFR_BD_FLAGS_SFT 6
7c673cae 1967 /*
9f95a23c
TL
1968 * This is the length in Bytes of the host physical buffer where
1969 * data for the packet may be placed in host memory.
7c673cae 1970 */
9f95a23c
TL
1971 uint16_t len;
1972 /* This field is not used. */
1973 uint32_t opaque;
7c673cae 1974 /*
9f95a23c
TL
1975 * This is the host physical address where data for the packet may
1976 * by placed in host memory.
7c673cae 1977 */
9f95a23c
TL
1978 uint64_t address;
1979} __attribute__((packed));
1980
1981/* rx_prod_agg_bd (size:128b/16B) */
1982struct rx_prod_agg_bd {
1983 /* This value identifies the type of buffer descriptor. */
1984 uint16_t flags_type;
1985 /* This value identifies the type of buffer descriptor. */
1986 #define RX_PROD_AGG_BD_TYPE_MASK UINT32_C(0x3f)
1987 #define RX_PROD_AGG_BD_TYPE_SFT 0
7c673cae 1988 /*
9f95a23c
TL
1989 * Indicates that this BD is 16B long and is an
1990 * RX Producer Assembly Buffer Descriptor.
7c673cae 1991 */
9f95a23c
TL
1992 #define RX_PROD_AGG_BD_TYPE_RX_PROD_AGG UINT32_C(0x6)
1993 #define RX_PROD_AGG_BD_TYPE_LAST \
1994 RX_PROD_AGG_BD_TYPE_RX_PROD_AGG
1995 #define RX_PROD_AGG_BD_FLAGS_MASK UINT32_C(0xffc0)
1996 #define RX_PROD_AGG_BD_FLAGS_SFT 6
7c673cae 1997 /*
9f95a23c
TL
1998 * If set to 1, the packet write will be padded out to the
1999 * nearest cache-line with zero value padding.
7c673cae 2000 */
9f95a23c 2001 #define RX_PROD_AGG_BD_FLAGS_EOP_PAD UINT32_C(0x40)
7c673cae 2002 /*
9f95a23c
TL
2003 * This is the length in Bytes of the host physical buffer where
2004 * data for the packet may be placed in host memory.
2005 */
2006 uint16_t len;
2007 /*
2008 * The opaque data field is pass through to the completion and can be
2009 * used for any data that the driver wants to associate with this
2010 * receive assembly buffer.
7c673cae 2011 */
9f95a23c 2012 uint32_t opaque;
7c673cae 2013 /*
9f95a23c
TL
2014 * This is the host physical address where data for the packet may
2015 * by placed in host memory.
7c673cae 2016 */
9f95a23c 2017 uint64_t address;
7c673cae
FG
2018} __attribute__((packed));
2019
9f95a23c
TL
2020/* cmpl_base (size:128b/16B) */
2021struct cmpl_base {
2022 uint16_t type;
7c673cae 2023 /*
9f95a23c
TL
2024 * This field indicates the exact type of the completion.
2025 * By convention, the LSB identifies the length of the
2026 * record in 16B units. Even values indicate 16B
2027 * records. Odd values indicate 32B
2028 * records.
7c673cae 2029 */
9f95a23c
TL
2030 #define CMPL_BASE_TYPE_MASK UINT32_C(0x3f)
2031 #define CMPL_BASE_TYPE_SFT 0
7c673cae 2032 /*
9f95a23c
TL
2033 * TX L2 completion:
2034 * Completion of TX packet. Length = 16B
7c673cae 2035 */
9f95a23c 2036 #define CMPL_BASE_TYPE_TX_L2 UINT32_C(0x0)
7c673cae 2037 /*
9f95a23c
TL
2038 * RX L2 completion:
2039 * Completion of and L2 RX packet. Length = 32B
7c673cae 2040 */
9f95a23c 2041 #define CMPL_BASE_TYPE_RX_L2 UINT32_C(0x11)
7c673cae 2042 /*
9f95a23c
TL
2043 * RX Aggregation Buffer completion :
2044 * Completion of an L2 aggregation buffer in support of
2045 * TPA, HDS, or Jumbo packet completion. Length = 16B
7c673cae 2046 */
9f95a23c 2047 #define CMPL_BASE_TYPE_RX_AGG UINT32_C(0x12)
7c673cae 2048 /*
9f95a23c
TL
2049 * RX L2 TPA Start Completion:
2050 * Completion at the beginning of a TPA operation.
2051 * Length = 32B
7c673cae 2052 */
9f95a23c 2053 #define CMPL_BASE_TYPE_RX_TPA_START UINT32_C(0x13)
7c673cae 2054 /*
9f95a23c
TL
2055 * RX L2 TPA End Completion:
2056 * Completion at the end of a TPA operation.
2057 * Length = 32B
7c673cae 2058 */
9f95a23c
TL
2059 #define CMPL_BASE_TYPE_RX_TPA_END UINT32_C(0x15)
2060 /*
2061 * Statistics Ejection Completion:
2062 * Completion of statistics data ejection buffer.
2063 * Length = 16B
2064 */
2065 #define CMPL_BASE_TYPE_STAT_EJECT UINT32_C(0x1a)
7c673cae 2066 /*
9f95a23c
TL
2067 * HWRM Command Completion:
2068 * Completion of an HWRM command.
7c673cae 2069 */
9f95a23c
TL
2070 #define CMPL_BASE_TYPE_HWRM_DONE UINT32_C(0x20)
2071 /* Forwarded HWRM Request */
2072 #define CMPL_BASE_TYPE_HWRM_FWD_REQ UINT32_C(0x22)
2073 /* Forwarded HWRM Response */
2074 #define CMPL_BASE_TYPE_HWRM_FWD_RESP UINT32_C(0x24)
2075 /* HWRM Asynchronous Event Information */
2076 #define CMPL_BASE_TYPE_HWRM_ASYNC_EVENT UINT32_C(0x2e)
2077 /* CQ Notification */
2078 #define CMPL_BASE_TYPE_CQ_NOTIFICATION UINT32_C(0x30)
2079 /* SRQ Threshold Event */
2080 #define CMPL_BASE_TYPE_SRQ_EVENT UINT32_C(0x32)
2081 /* DBQ Threshold Event */
2082 #define CMPL_BASE_TYPE_DBQ_EVENT UINT32_C(0x34)
2083 /* QP Async Notification */
2084 #define CMPL_BASE_TYPE_QP_EVENT UINT32_C(0x38)
2085 /* Function Async Notification */
2086 #define CMPL_BASE_TYPE_FUNC_EVENT UINT32_C(0x3a)
2087 #define CMPL_BASE_TYPE_LAST CMPL_BASE_TYPE_FUNC_EVENT
2088 /* info1 is 16 b */
2089 uint16_t info1;
2090 /* info2 is 32 b */
2091 uint32_t info2;
7c673cae 2092 /*
9f95a23c
TL
2093 * This value is written by the NIC such that it will be different
2094 * for each pass through the completion queue. The even passes
2095 * will write 1. The odd passes will write 0.
7c673cae 2096 */
9f95a23c
TL
2097 uint32_t info3_v;
2098 #define CMPL_BASE_V UINT32_C(0x1)
2099 #define CMPL_BASE_INFO3_MASK UINT32_C(0xfffffffe)
2100 #define CMPL_BASE_INFO3_SFT 1
2101 /* info4 is 32 b */
2102 uint32_t info4;
7c673cae
FG
2103} __attribute__((packed));
2104
9f95a23c
TL
2105/* tx_cmpl (size:128b/16B) */
2106struct tx_cmpl {
2107 uint16_t flags_type;
7c673cae 2108 /*
9f95a23c
TL
2109 * This field indicates the exact type of the completion.
2110 * By convention, the LSB identifies the length of the
2111 * record in 16B units. Even values indicate 16B
2112 * records. Odd values indicate 32B
2113 * records.
7c673cae 2114 */
9f95a23c
TL
2115 #define TX_CMPL_TYPE_MASK UINT32_C(0x3f)
2116 #define TX_CMPL_TYPE_SFT 0
7c673cae 2117 /*
9f95a23c
TL
2118 * TX L2 completion:
2119 * Completion of TX packet. Length = 16B
7c673cae 2120 */
9f95a23c
TL
2121 #define TX_CMPL_TYPE_TX_L2 UINT32_C(0x0)
2122 #define TX_CMPL_TYPE_LAST TX_CMPL_TYPE_TX_L2
2123 #define TX_CMPL_FLAGS_MASK UINT32_C(0xffc0)
2124 #define TX_CMPL_FLAGS_SFT 6
7c673cae 2125 /*
9f95a23c
TL
2126 * When this bit is '1', it indicates a packet that has an
2127 * error of some type. Type of error is indicated in
2128 * error_flags.
7c673cae 2129 */
9f95a23c 2130 #define TX_CMPL_FLAGS_ERROR UINT32_C(0x40)
7c673cae 2131 /*
9f95a23c
TL
2132 * When this bit is '1', it indicates that the packet completed
2133 * was transmitted using the push acceleration data provided
2134 * by the driver. When this bit is '0', it indicates that the
2135 * packet had not push acceleration data written or was executed
2136 * as a normal packet even though push data was provided.
7c673cae 2137 */
9f95a23c
TL
2138 #define TX_CMPL_FLAGS_PUSH UINT32_C(0x80)
2139 /* unused1 is 16 b */
2140 uint16_t unused_0;
7c673cae 2141 /*
9f95a23c
TL
2142 * This is a copy of the opaque field from the first TX BD of this
2143 * transmitted packet.
7c673cae 2144 */
9f95a23c
TL
2145 uint32_t opaque;
2146 uint16_t errors_v;
7c673cae 2147 /*
9f95a23c
TL
2148 * This value is written by the NIC such that it will be different
2149 * for each pass through the completion queue. The even passes
2150 * will write 1. The odd passes will write 0.
7c673cae 2151 */
9f95a23c
TL
2152 #define TX_CMPL_V UINT32_C(0x1)
2153 #define TX_CMPL_ERRORS_MASK UINT32_C(0xfffe)
2154 #define TX_CMPL_ERRORS_SFT 1
7c673cae 2155 /*
9f95a23c
TL
2156 * This error indicates that there was some sort of problem
2157 * with the BDs for the packet.
7c673cae 2158 */
9f95a23c
TL
2159 #define TX_CMPL_ERRORS_BUFFER_ERROR_MASK UINT32_C(0xe)
2160 #define TX_CMPL_ERRORS_BUFFER_ERROR_SFT 1
2161 /* No error */
2162 #define TX_CMPL_ERRORS_BUFFER_ERROR_NO_ERROR (UINT32_C(0x0) << 1)
7c673cae 2163 /*
9f95a23c
TL
2164 * Bad Format:
2165 * BDs were not formatted correctly.
7c673cae 2166 */
9f95a23c
TL
2167 #define TX_CMPL_ERRORS_BUFFER_ERROR_BAD_FMT (UINT32_C(0x2) << 1)
2168 #define TX_CMPL_ERRORS_BUFFER_ERROR_LAST \
2169 TX_CMPL_ERRORS_BUFFER_ERROR_BAD_FMT
7c673cae 2170 /*
9f95a23c
TL
2171 * When this bit is '1', it indicates that the length of
2172 * the packet was zero. No packet was transmitted.
7c673cae 2173 */
9f95a23c 2174 #define TX_CMPL_ERRORS_ZERO_LENGTH_PKT UINT32_C(0x10)
7c673cae 2175 /*
9f95a23c
TL
2176 * When this bit is '1', it indicates that the packet
2177 * was longer than the programmed limit in TDI. No
2178 * packet was transmitted.
7c673cae 2179 */
9f95a23c 2180 #define TX_CMPL_ERRORS_EXCESSIVE_BD_LENGTH UINT32_C(0x20)
7c673cae 2181 /*
9f95a23c
TL
2182 * When this bit is '1', it indicates that one or more of the
2183 * BDs associated with this packet generated a PCI error.
2184 * This probably means the address was not valid.
7c673cae 2185 */
9f95a23c 2186 #define TX_CMPL_ERRORS_DMA_ERROR UINT32_C(0x40)
7c673cae 2187 /*
9f95a23c
TL
2188 * When this bit is '1', it indicates that the packet was longer
2189 * than indicated by the hint. No packet was transmitted.
7c673cae 2190 */
9f95a23c 2191 #define TX_CMPL_ERRORS_HINT_TOO_SHORT UINT32_C(0x80)
7c673cae 2192 /*
9f95a23c
TL
2193 * When this bit is '1', it indicates that the packet was
2194 * dropped due to Poison TLP error on one or more of the
2195 * TLPs in the PXP completion.
7c673cae 2196 */
9f95a23c
TL
2197 #define TX_CMPL_ERRORS_POISON_TLP_ERROR UINT32_C(0x100)
2198 /* unused2 is 16 b */
2199 uint16_t unused_1;
2200 /* unused3 is 32 b */
2201 uint32_t unused_2;
2202} __attribute__((packed));
2203
2204/* rx_pkt_cmpl (size:128b/16B) */
2205struct rx_pkt_cmpl {
2206 uint16_t flags_type;
7c673cae 2207 /*
9f95a23c
TL
2208 * This field indicates the exact type of the completion.
2209 * By convention, the LSB identifies the length of the
2210 * record in 16B units. Even values indicate 16B
2211 * records. Odd values indicate 32B
2212 * records.
7c673cae 2213 */
9f95a23c
TL
2214 #define RX_PKT_CMPL_TYPE_MASK UINT32_C(0x3f)
2215 #define RX_PKT_CMPL_TYPE_SFT 0
7c673cae 2216 /*
9f95a23c
TL
2217 * RX L2 completion:
2218 * Completion of and L2 RX packet. Length = 32B
7c673cae 2219 */
9f95a23c
TL
2220 #define RX_PKT_CMPL_TYPE_RX_L2 UINT32_C(0x11)
2221 #define RX_PKT_CMPL_TYPE_LAST RX_PKT_CMPL_TYPE_RX_L2
2222 #define RX_PKT_CMPL_FLAGS_MASK UINT32_C(0xffc0)
2223 #define RX_PKT_CMPL_FLAGS_SFT 6
7c673cae 2224 /*
9f95a23c
TL
2225 * When this bit is '1', it indicates a packet that has an
2226 * error of some type. Type of error is indicated in
2227 * error_flags.
7c673cae 2228 */
9f95a23c
TL
2229 #define RX_PKT_CMPL_FLAGS_ERROR UINT32_C(0x40)
2230 /* This field indicates how the packet was placed in the buffer. */
2231 #define RX_PKT_CMPL_FLAGS_PLACEMENT_MASK UINT32_C(0x380)
2232 #define RX_PKT_CMPL_FLAGS_PLACEMENT_SFT 7
7c673cae 2233 /*
9f95a23c
TL
2234 * Normal:
2235 * Packet was placed using normal algorithm.
7c673cae 2236 */
9f95a23c 2237 #define RX_PKT_CMPL_FLAGS_PLACEMENT_NORMAL (UINT32_C(0x0) << 7)
7c673cae 2238 /*
9f95a23c
TL
2239 * Jumbo:
2240 * Packet was placed using jumbo algorithm.
7c673cae 2241 */
9f95a23c 2242 #define RX_PKT_CMPL_FLAGS_PLACEMENT_JUMBO (UINT32_C(0x1) << 7)
7c673cae 2243 /*
9f95a23c
TL
2244 * Header/Data Separation:
2245 * Packet was placed using Header/Data separation algorithm.
2246 * The separation location is indicated by the itype field.
7c673cae 2247 */
9f95a23c
TL
2248 #define RX_PKT_CMPL_FLAGS_PLACEMENT_HDS (UINT32_C(0x2) << 7)
2249 #define RX_PKT_CMPL_FLAGS_PLACEMENT_LAST \
2250 RX_PKT_CMPL_FLAGS_PLACEMENT_HDS
2251 /* This bit is '1' if the RSS field in this completion is valid. */
2252 #define RX_PKT_CMPL_FLAGS_RSS_VALID UINT32_C(0x400)
2253 /* unused is 1 b */
2254 #define RX_PKT_CMPL_FLAGS_UNUSED UINT32_C(0x800)
7c673cae 2255 /*
9f95a23c
TL
2256 * This value indicates what the inner packet determined for the
2257 * packet was.
7c673cae 2258 */
9f95a23c
TL
2259 #define RX_PKT_CMPL_FLAGS_ITYPE_MASK UINT32_C(0xf000)
2260 #define RX_PKT_CMPL_FLAGS_ITYPE_SFT 12
7c673cae 2261 /*
9f95a23c
TL
2262 * Not Known:
2263 * Indicates that the packet type was not known.
7c673cae 2264 */
9f95a23c
TL
2265 #define RX_PKT_CMPL_FLAGS_ITYPE_NOT_KNOWN \
2266 (UINT32_C(0x0) << 12)
7c673cae 2267 /*
9f95a23c
TL
2268 * IP Packet:
2269 * Indicates that the packet was an IP packet, but further
2270 * classification was not possible.
7c673cae 2271 */
9f95a23c
TL
2272 #define RX_PKT_CMPL_FLAGS_ITYPE_IP \
2273 (UINT32_C(0x1) << 12)
7c673cae 2274 /*
9f95a23c
TL
2275 * TCP Packet:
2276 * Indicates that the packet was IP and TCP.
2277 * This indicates that the payload_offset field is valid.
7c673cae 2278 */
9f95a23c
TL
2279 #define RX_PKT_CMPL_FLAGS_ITYPE_TCP \
2280 (UINT32_C(0x2) << 12)
7c673cae 2281 /*
9f95a23c
TL
2282 * UDP Packet:
2283 * Indicates that the packet was IP and UDP.
2284 * This indicates that the payload_offset field is valid.
7c673cae 2285 */
9f95a23c
TL
2286 #define RX_PKT_CMPL_FLAGS_ITYPE_UDP \
2287 (UINT32_C(0x3) << 12)
7c673cae 2288 /*
9f95a23c
TL
2289 * FCoE Packet:
2290 * Indicates that the packet was recognized as a FCoE.
2291 * This also indicates that the payload_offset field is valid.
7c673cae 2292 */
9f95a23c
TL
2293 #define RX_PKT_CMPL_FLAGS_ITYPE_FCOE \
2294 (UINT32_C(0x4) << 12)
7c673cae 2295 /*
9f95a23c
TL
2296 * RoCE Packet:
2297 * Indicates that the packet was recognized as a RoCE.
2298 * This also indicates that the payload_offset field is valid.
7c673cae 2299 */
9f95a23c
TL
2300 #define RX_PKT_CMPL_FLAGS_ITYPE_ROCE \
2301 (UINT32_C(0x5) << 12)
7c673cae 2302 /*
9f95a23c
TL
2303 * ICMP Packet:
2304 * Indicates that the packet was recognized as ICMP.
2305 * This indicates that the payload_offset field is valid.
7c673cae 2306 */
9f95a23c
TL
2307 #define RX_PKT_CMPL_FLAGS_ITYPE_ICMP \
2308 (UINT32_C(0x7) << 12)
7c673cae 2309 /*
9f95a23c
TL
2310 * PtP packet wo/timestamp:
2311 * Indicates that the packet was recognized as a PtP
2312 * packet.
7c673cae 2313 */
9f95a23c
TL
2314 #define RX_PKT_CMPL_FLAGS_ITYPE_PTP_WO_TIMESTAMP \
2315 (UINT32_C(0x8) << 12)
7c673cae 2316 /*
9f95a23c
TL
2317 * PtP packet w/timestamp:
2318 * Indicates that the packet was recognized as a PtP
2319 * packet and that a timestamp was taken for the packet.
7c673cae 2320 */
9f95a23c
TL
2321 #define RX_PKT_CMPL_FLAGS_ITYPE_PTP_W_TIMESTAMP \
2322 (UINT32_C(0x9) << 12)
2323 #define RX_PKT_CMPL_FLAGS_ITYPE_LAST \
2324 RX_PKT_CMPL_FLAGS_ITYPE_PTP_W_TIMESTAMP
7c673cae 2325 /*
9f95a23c
TL
2326 * This is the length of the data for the packet stored in the
2327 * buffer(s) identified by the opaque value. This includes
2328 * the packet BD and any associated buffer BDs. This does not include
2329 * the the length of any data places in aggregation BDs.
7c673cae 2330 */
9f95a23c 2331 uint16_t len;
7c673cae 2332 /*
9f95a23c
TL
2333 * This is a copy of the opaque field from the RX BD this completion
2334 * corresponds to.
7c673cae 2335 */
9f95a23c
TL
2336 uint32_t opaque;
2337 uint8_t agg_bufs_v1;
7c673cae 2338 /*
9f95a23c
TL
2339 * This value is written by the NIC such that it will be different
2340 * for each pass through the completion queue. The even passes
2341 * will write 1. The odd passes will write 0.
7c673cae 2342 */
9f95a23c 2343 #define RX_PKT_CMPL_V1 UINT32_C(0x1)
7c673cae 2344 /*
9f95a23c
TL
2345 * This value is the number of aggregation buffers that follow this
2346 * entry in the completion ring that are a part of this packet.
2347 * If the value is zero, then the packet is completely contained
2348 * in the buffer space provided for the packet in the RX ring.
7c673cae 2349 */
9f95a23c
TL
2350 #define RX_PKT_CMPL_AGG_BUFS_MASK UINT32_C(0x3e)
2351 #define RX_PKT_CMPL_AGG_BUFS_SFT 1
2352 /* unused1 is 2 b */
2353 #define RX_PKT_CMPL_UNUSED1_MASK UINT32_C(0xc0)
2354 #define RX_PKT_CMPL_UNUSED1_SFT 6
2355 /*
2356 * This is the RSS hash type for the packet. The value is packed
2357 * {tuple_extrac_op[1:0],rss_profile_id[4:0],tuple_extrac_op[2]}.
2358 *
2359 * The value of tuple_extrac_op provides the information about
2360 * what fields the hash was computed on.
2361 * * 0: The RSS hash was computed over source IP address,
2362 * destination IP address, source port, and destination port of inner
2363 * IP and TCP or UDP headers. Note: For non-tunneled packets,
2364 * the packet headers are considered inner packet headers for the RSS
2365 * hash computation purpose.
2366 * * 1: The RSS hash was computed over source IP address and destination
2367 * IP address of inner IP header. Note: For non-tunneled packets,
2368 * the packet headers are considered inner packet headers for the RSS
2369 * hash computation purpose.
2370 * * 2: The RSS hash was computed over source IP address,
2371 * destination IP address, source port, and destination port of
2372 * IP and TCP or UDP headers of outer tunnel headers.
2373 * Note: For non-tunneled packets, this value is not applicable.
2374 * * 3: The RSS hash was computed over source IP address and
2375 * destination IP address of IP header of outer tunnel headers.
2376 * Note: For non-tunneled packets, this value is not applicable.
2377 *
2378 * Note that 4-tuples values listed above are applicable
2379 * for layer 4 protocols supported and enabled for RSS in the hardware,
2380 * HWRM firmware, and drivers. For example, if RSS hash is supported and
2381 * enabled for TCP traffic only, then the values of tuple_extract_op
2382 * corresponding to 4-tuples are only valid for TCP traffic.
2383 */
2384 uint8_t rss_hash_type;
2385 /*
2386 * This value indicates the offset in bytes from the beginning of the packet
2387 * where the inner payload starts. This value is valid for TCP, UDP,
2388 * FCoE, and RoCE packets.
2389 *
2390 * A value of zero indicates that header is 256B into the packet.
2391 */
2392 uint8_t payload_offset;
2393 /* unused2 is 8 b */
2394 uint8_t unused1;
7c673cae 2395 /*
9f95a23c
TL
2396 * This value is the RSS hash value calculated for the packet
2397 * based on the mode bits and key value in the VNIC.
7c673cae 2398 */
9f95a23c
TL
2399 uint32_t rss_hash;
2400} __attribute__((packed));
2401
2402/* Last 16 bytes of rx_pkt_cmpl. */
2403/* rx_pkt_cmpl_hi (size:128b/16B) */
2404struct rx_pkt_cmpl_hi {
2405 uint32_t flags2;
7c673cae 2406 /*
9f95a23c
TL
2407 * This indicates that the ip checksum was calculated for the
2408 * inner packet and that the ip_cs_error field indicates if there
2409 * was an error.
7c673cae 2410 */
9f95a23c 2411 #define RX_PKT_CMPL_FLAGS2_IP_CS_CALC UINT32_C(0x1)
7c673cae 2412 /*
9f95a23c
TL
2413 * This indicates that the TCP, UDP or ICMP checksum was
2414 * calculated for the inner packet and that the l4_cs_error field
2415 * indicates if there was an error.
7c673cae 2416 */
9f95a23c 2417 #define RX_PKT_CMPL_FLAGS2_L4_CS_CALC UINT32_C(0x2)
7c673cae 2418 /*
9f95a23c
TL
2419 * This indicates that the ip checksum was calculated for the
2420 * tunnel header and that the t_ip_cs_error field indicates if there
2421 * was an error.
7c673cae 2422 */
9f95a23c 2423 #define RX_PKT_CMPL_FLAGS2_T_IP_CS_CALC UINT32_C(0x4)
7c673cae 2424 /*
9f95a23c
TL
2425 * This indicates that the UDP checksum was
2426 * calculated for the tunnel packet and that the t_l4_cs_error field
2427 * indicates if there was an error.
7c673cae 2428 */
9f95a23c
TL
2429 #define RX_PKT_CMPL_FLAGS2_T_L4_CS_CALC UINT32_C(0x8)
2430 /* This value indicates what format the metadata field is. */
2431 #define RX_PKT_CMPL_FLAGS2_META_FORMAT_MASK UINT32_C(0xf0)
2432 #define RX_PKT_CMPL_FLAGS2_META_FORMAT_SFT 4
2433 /* No metadata informtaion. Value is zero. */
2434 #define RX_PKT_CMPL_FLAGS2_META_FORMAT_NONE (UINT32_C(0x0) << 4)
2435 /*
2436 * The metadata field contains the VLAN tag and TPID value.
2437 * - metadata[11:0] contains the vlan VID value.
2438 * - metadata[12] contains the vlan DE value.
2439 * - metadata[15:13] contains the vlan PRI value.
2440 * - metadata[31:16] contains the vlan TPID value.
2441 */
2442 #define RX_PKT_CMPL_FLAGS2_META_FORMAT_VLAN (UINT32_C(0x1) << 4)
2443 #define RX_PKT_CMPL_FLAGS2_META_FORMAT_LAST \
2444 RX_PKT_CMPL_FLAGS2_META_FORMAT_VLAN
7c673cae 2445 /*
9f95a23c
TL
2446 * This field indicates the IP type for the inner-most IP header.
2447 * A value of '0' indicates IPv4. A value of '1' indicates IPv6.
2448 * This value is only valid if itype indicates a packet
2449 * with an IP header.
7c673cae 2450 */
9f95a23c 2451 #define RX_PKT_CMPL_FLAGS2_IP_TYPE UINT32_C(0x100)
7c673cae 2452 /*
9f95a23c
TL
2453 * This is data from the CFA block as indicated by the meta_format
2454 * field.
7c673cae 2455 */
9f95a23c
TL
2456 uint32_t metadata;
2457 /* When meta_format=1, this value is the VLAN VID. */
2458 #define RX_PKT_CMPL_METADATA_VID_MASK UINT32_C(0xfff)
2459 #define RX_PKT_CMPL_METADATA_VID_SFT 0
2460 /* When meta_format=1, this value is the VLAN DE. */
2461 #define RX_PKT_CMPL_METADATA_DE UINT32_C(0x1000)
2462 /* When meta_format=1, this value is the VLAN PRI. */
2463 #define RX_PKT_CMPL_METADATA_PRI_MASK UINT32_C(0xe000)
2464 #define RX_PKT_CMPL_METADATA_PRI_SFT 13
2465 /* When meta_format=1, this value is the VLAN TPID. */
2466 #define RX_PKT_CMPL_METADATA_TPID_MASK UINT32_C(0xffff0000)
2467 #define RX_PKT_CMPL_METADATA_TPID_SFT 16
2468 uint16_t errors_v2;
7c673cae 2469 /*
9f95a23c
TL
2470 * This value is written by the NIC such that it will be different
2471 * for each pass through the completion queue. The even passes
2472 * will write 1. The odd passes will write 0.
7c673cae 2473 */
9f95a23c
TL
2474 #define RX_PKT_CMPL_V2 \
2475 UINT32_C(0x1)
2476 #define RX_PKT_CMPL_ERRORS_MASK \
2477 UINT32_C(0xfffe)
2478 #define RX_PKT_CMPL_ERRORS_SFT 1
7c673cae 2479 /*
9f95a23c
TL
2480 * This error indicates that there was some sort of problem with
2481 * the BDs for the packet that was found after part of the
2482 * packet was already placed. The packet should be treated as
2483 * invalid.
7c673cae 2484 */
9f95a23c
TL
2485 #define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_MASK \
2486 UINT32_C(0xe)
2487 #define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_SFT 1
2488 /* No buffer error */
2489 #define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_NO_BUFFER \
2490 (UINT32_C(0x0) << 1)
7c673cae 2491 /*
9f95a23c
TL
2492 * Did Not Fit:
2493 * Packet did not fit into packet buffer provided.
2494 * For regular placement, this means the packet did not fit
2495 * in the buffer provided. For HDS and jumbo placement, this
2496 * means that the packet could not be placed into 7 physical
2497 * buffers or less.
7c673cae 2498 */
9f95a23c
TL
2499 #define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_DID_NOT_FIT \
2500 (UINT32_C(0x1) << 1)
7c673cae 2501 /*
9f95a23c
TL
2502 * Not On Chip:
2503 * All BDs needed for the packet were not on-chip when
2504 * the packet arrived.
7c673cae 2505 */
9f95a23c
TL
2506 #define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_NOT_ON_CHIP \
2507 (UINT32_C(0x2) << 1)
7c673cae 2508 /*
9f95a23c
TL
2509 * Bad Format:
2510 * BDs were not formatted correctly.
7c673cae 2511 */
9f95a23c
TL
2512 #define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_BAD_FORMAT \
2513 (UINT32_C(0x3) << 1)
2514 #define RX_PKT_CMPL_ERRORS_BUFFER_ERROR_LAST \
2515 RX_PKT_CMPL_ERRORS_BUFFER_ERROR_BAD_FORMAT
7c673cae 2516 /*
9f95a23c
TL
2517 * This indicates that there was an error in the IP header
2518 * checksum.
7c673cae 2519 */
9f95a23c
TL
2520 #define RX_PKT_CMPL_ERRORS_IP_CS_ERROR \
2521 UINT32_C(0x10)
7c673cae 2522 /*
9f95a23c
TL
2523 * This indicates that there was an error in the TCP, UDP
2524 * or ICMP checksum.
7c673cae 2525 */
9f95a23c
TL
2526 #define RX_PKT_CMPL_ERRORS_L4_CS_ERROR \
2527 UINT32_C(0x20)
7c673cae 2528 /*
9f95a23c
TL
2529 * This indicates that there was an error in the tunnel
2530 * IP header checksum.
7c673cae 2531 */
9f95a23c
TL
2532 #define RX_PKT_CMPL_ERRORS_T_IP_CS_ERROR \
2533 UINT32_C(0x40)
7c673cae 2534 /*
9f95a23c
TL
2535 * This indicates that there was an error in the tunnel
2536 * UDP checksum.
7c673cae 2537 */
9f95a23c
TL
2538 #define RX_PKT_CMPL_ERRORS_T_L4_CS_ERROR \
2539 UINT32_C(0x80)
7c673cae 2540 /*
9f95a23c
TL
2541 * This indicates that there was a CRC error on either an FCoE
2542 * or RoCE packet. The itype indicates the packet type.
7c673cae 2543 */
9f95a23c
TL
2544 #define RX_PKT_CMPL_ERRORS_CRC_ERROR \
2545 UINT32_C(0x100)
7c673cae 2546 /*
9f95a23c
TL
2547 * This indicates that there was an error in the tunnel
2548 * portion of the packet when this
2549 * field is non-zero.
7c673cae 2550 */
9f95a23c
TL
2551 #define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_MASK \
2552 UINT32_C(0xe00)
2553 #define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_SFT 9
7c673cae 2554 /*
9f95a23c
TL
2555 * No additional error occurred on the tunnel portion
2556 * of the packet of the packet does not have a tunnel.
7c673cae 2557 */
9f95a23c
TL
2558 #define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_NO_ERROR \
2559 (UINT32_C(0x0) << 9)
7c673cae 2560 /*
9f95a23c
TL
2561 * Indicates that IP header version does not match
2562 * expectation from L2 Ethertype for IPv4 and IPv6
2563 * in the tunnel header.
7c673cae 2564 */
9f95a23c
TL
2565 #define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_VERSION \
2566 (UINT32_C(0x1) << 9)
7c673cae 2567 /*
9f95a23c
TL
2568 * Indicates that header length is out of range in the
2569 * tunnel header. Valid for
2570 * IPv4.
7c673cae 2571 */
9f95a23c
TL
2572 #define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_HDR_LEN \
2573 (UINT32_C(0x2) << 9)
7c673cae 2574 /*
9f95a23c
TL
2575 * Indicates that the physical packet is shorter than that
2576 * claimed by the PPPoE header length for a tunnel PPPoE
2577 * packet.
7c673cae 2578 */
9f95a23c
TL
2579 #define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_TUNNEL_TOTAL_ERROR \
2580 (UINT32_C(0x3) << 9)
7c673cae 2581 /*
9f95a23c
TL
2582 * Indicates that physical packet is shorter than that claimed
2583 * by the tunnel l3 header length. Valid for IPv4, or IPv6
2584 * tunnel packet packets.
7c673cae 2585 */
9f95a23c
TL
2586 #define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_IP_TOTAL_ERROR \
2587 (UINT32_C(0x4) << 9)
7c673cae 2588 /*
9f95a23c
TL
2589 * Indicates that the physical packet is shorter than that
2590 * claimed by the tunnel UDP header length for a tunnel
2591 * UDP packet that is not fragmented.
7c673cae 2592 */
9f95a23c
TL
2593 #define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_UDP_TOTAL_ERROR \
2594 (UINT32_C(0x5) << 9)
7c673cae 2595 /*
9f95a23c
TL
2596 * indicates that the IPv4 TTL or IPv6 hop limit check
2597 * have failed (e.g. TTL = 0) in the tunnel header. Valid
2598 * for IPv4, and IPv6.
7c673cae 2599 */
9f95a23c
TL
2600 #define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_TTL \
2601 (UINT32_C(0x6) << 9)
2602 #define RX_PKT_CMPL_ERRORS_T_PKT_ERROR_LAST \
2603 RX_PKT_CMPL_ERRORS_T_PKT_ERROR_T_L3_BAD_TTL
7c673cae 2604 /*
9f95a23c
TL
2605 * This indicates that there was an error in the inner
2606 * portion of the packet when this
2607 * field is non-zero.
7c673cae 2608 */
9f95a23c
TL
2609 #define RX_PKT_CMPL_ERRORS_PKT_ERROR_MASK \
2610 UINT32_C(0xf000)
2611 #define RX_PKT_CMPL_ERRORS_PKT_ERROR_SFT 12
7c673cae 2612 /*
9f95a23c
TL
2613 * No additional error occurred on the tunnel portion
2614 * of the packet of the packet does not have a tunnel.
7c673cae 2615 */
9f95a23c
TL
2616 #define RX_PKT_CMPL_ERRORS_PKT_ERROR_NO_ERROR \
2617 (UINT32_C(0x0) << 12)
7c673cae 2618 /*
9f95a23c
TL
2619 * Indicates that IP header version does not match
2620 * expectation from L2 Ethertype for IPv4 and IPv6 or that
2621 * option other than VFT was parsed on
2622 * FCoE packet.
7c673cae 2623 */
9f95a23c
TL
2624 #define RX_PKT_CMPL_ERRORS_PKT_ERROR_L3_BAD_VERSION \
2625 (UINT32_C(0x1) << 12)
7c673cae 2626 /*
9f95a23c
TL
2627 * indicates that header length is out of range. Valid for
2628 * IPv4 and RoCE
7c673cae 2629 */
9f95a23c
TL
2630 #define RX_PKT_CMPL_ERRORS_PKT_ERROR_L3_BAD_HDR_LEN \
2631 (UINT32_C(0x2) << 12)
7c673cae 2632 /*
9f95a23c
TL
2633 * indicates that the IPv4 TTL or IPv6 hop limit check
2634 * have failed (e.g. TTL = 0). Valid for IPv4, and IPv6
7c673cae 2635 */
9f95a23c
TL
2636 #define RX_PKT_CMPL_ERRORS_PKT_ERROR_L3_BAD_TTL \
2637 (UINT32_C(0x3) << 12)
7c673cae 2638 /*
9f95a23c
TL
2639 * Indicates that physical packet is shorter than that
2640 * claimed by the l3 header length. Valid for IPv4,
2641 * IPv6 packet or RoCE packets.
7c673cae 2642 */
9f95a23c
TL
2643 #define RX_PKT_CMPL_ERRORS_PKT_ERROR_IP_TOTAL_ERROR \
2644 (UINT32_C(0x4) << 12)
7c673cae 2645 /*
9f95a23c
TL
2646 * Indicates that the physical packet is shorter than that
2647 * claimed by the UDP header length for a UDP packet that is
2648 * not fragmented.
7c673cae 2649 */
9f95a23c
TL
2650 #define RX_PKT_CMPL_ERRORS_PKT_ERROR_UDP_TOTAL_ERROR \
2651 (UINT32_C(0x5) << 12)
7c673cae 2652 /*
9f95a23c
TL
2653 * Indicates that TCP header length > IP payload. Valid for
2654 * TCP packets only.
7c673cae 2655 */
9f95a23c
TL
2656 #define RX_PKT_CMPL_ERRORS_PKT_ERROR_L4_BAD_HDR_LEN \
2657 (UINT32_C(0x6) << 12)
2658 /* Indicates that TCP header length < 5. Valid for TCP. */
2659 #define RX_PKT_CMPL_ERRORS_PKT_ERROR_L4_BAD_HDR_LEN_TOO_SMALL \
2660 (UINT32_C(0x7) << 12)
7c673cae 2661 /*
9f95a23c
TL
2662 * Indicates that TCP option headers result in a TCP header
2663 * size that does not match data offset in TCP header. Valid
2664 * for TCP.
7c673cae 2665 */
9f95a23c
TL
2666 #define RX_PKT_CMPL_ERRORS_PKT_ERROR_L4_BAD_OPT_LEN \
2667 (UINT32_C(0x8) << 12)
2668 #define RX_PKT_CMPL_ERRORS_PKT_ERROR_LAST \
2669 RX_PKT_CMPL_ERRORS_PKT_ERROR_L4_BAD_OPT_LEN
7c673cae 2670 /*
9f95a23c
TL
2671 * This field identifies the CFA action rule that was used for this
2672 * packet.
7c673cae 2673 */
9f95a23c
TL
2674 uint16_t cfa_code;
2675 uint32_t reorder;
7c673cae 2676 /*
9f95a23c
TL
2677 * This value holds the reordering sequence number for the packet.
2678 * If the reordering sequence is not valid, then this value is zero.
2679 * The reordering domain for the packet is in the bottom 8 to 10b of
2680 * the rss_hash value. The bottom 20b of this value contain the
2681 * ordering domain value for the packet.
7c673cae 2682 */
9f95a23c
TL
2683 #define RX_PKT_CMPL_REORDER_MASK UINT32_C(0xffffff)
2684 #define RX_PKT_CMPL_REORDER_SFT 0
2685} __attribute__((packed));
2686
2687/* rx_tpa_start_cmpl (size:128b/16B) */
2688struct rx_tpa_start_cmpl {
2689 uint16_t flags_type;
2690 /*
2691 * This field indicates the exact type of the completion.
2692 * By convention, the LSB identifies the length of the
2693 * record in 16B units. Even values indicate 16B
2694 * records. Odd values indicate 32B
2695 * records.
2696 */
2697 #define RX_TPA_START_CMPL_TYPE_MASK UINT32_C(0x3f)
2698 #define RX_TPA_START_CMPL_TYPE_SFT 0
2699 /*
2700 * RX L2 TPA Start Completion:
2701 * Completion at the beginning of a TPA operation.
2702 * Length = 32B
2703 */
2704 #define RX_TPA_START_CMPL_TYPE_RX_TPA_START UINT32_C(0x13)
2705 #define RX_TPA_START_CMPL_TYPE_LAST \
2706 RX_TPA_START_CMPL_TYPE_RX_TPA_START
2707 #define RX_TPA_START_CMPL_FLAGS_MASK UINT32_C(0xffc0)
2708 #define RX_TPA_START_CMPL_FLAGS_SFT 6
2709 /* This bit will always be '0' for TPA start completions. */
2710 #define RX_TPA_START_CMPL_FLAGS_ERROR UINT32_C(0x40)
2711 /* This field indicates how the packet was placed in the buffer. */
2712 #define RX_TPA_START_CMPL_FLAGS_PLACEMENT_MASK UINT32_C(0x380)
2713 #define RX_TPA_START_CMPL_FLAGS_PLACEMENT_SFT 7
2714 /*
2715 * Jumbo:
2716 * TPA Packet was placed using jumbo algorithm. This means
2717 * that the first buffer will be filled with data before
2718 * moving to aggregation buffers. Each aggregation buffer
2719 * will be filled before moving to the next aggregation
2720 * buffer.
2721 */
2722 #define RX_TPA_START_CMPL_FLAGS_PLACEMENT_JUMBO \
2723 (UINT32_C(0x1) << 7)
2724 /*
2725 * Header/Data Separation:
2726 * Packet was placed using Header/Data separation algorithm.
2727 * The separation location is indicated by the itype field.
2728 */
2729 #define RX_TPA_START_CMPL_FLAGS_PLACEMENT_HDS \
2730 (UINT32_C(0x2) << 7)
2731 /*
2732 * GRO/Jumbo:
2733 * Packet will be placed using GRO/Jumbo where the first
2734 * packet is filled with data. Subsequent packets will be
2735 * placed such that any one packet does not span two
2736 * aggregation buffers unless it starts at the beginning of
2737 * an aggregation buffer.
2738 */
2739 #define RX_TPA_START_CMPL_FLAGS_PLACEMENT_GRO_JUMBO \
2740 (UINT32_C(0x5) << 7)
2741 /*
2742 * GRO/Header-Data Separation:
2743 * Packet will be placed using GRO/HDS where the header
2744 * is in the first packet.
2745 * Payload of each packet will be
2746 * placed such that any one packet does not span two
2747 * aggregation buffers unless it starts at the beginning of
2748 * an aggregation buffer.
2749 */
2750 #define RX_TPA_START_CMPL_FLAGS_PLACEMENT_GRO_HDS \
2751 (UINT32_C(0x6) << 7)
2752 #define RX_TPA_START_CMPL_FLAGS_PLACEMENT_LAST \
2753 RX_TPA_START_CMPL_FLAGS_PLACEMENT_GRO_HDS
2754 /* This bit is '1' if the RSS field in this completion is valid. */
2755 #define RX_TPA_START_CMPL_FLAGS_RSS_VALID UINT32_C(0x400)
2756 /* unused is 1 b */
2757 #define RX_TPA_START_CMPL_FLAGS_UNUSED UINT32_C(0x800)
7c673cae 2758 /*
9f95a23c
TL
2759 * This value indicates what the inner packet determined for the
2760 * packet was.
7c673cae 2761 */
9f95a23c
TL
2762 #define RX_TPA_START_CMPL_FLAGS_ITYPE_MASK UINT32_C(0xf000)
2763 #define RX_TPA_START_CMPL_FLAGS_ITYPE_SFT 12
2764 /*
2765 * TCP Packet:
2766 * Indicates that the packet was IP and TCP.
2767 */
2768 #define RX_TPA_START_CMPL_FLAGS_ITYPE_TCP \
2769 (UINT32_C(0x2) << 12)
2770 #define RX_TPA_START_CMPL_FLAGS_ITYPE_LAST \
2771 RX_TPA_START_CMPL_FLAGS_ITYPE_TCP
2772 /*
2773 * This value indicates the amount of packet data written to the
2774 * buffer the opaque field in this completion corresponds to.
2775 */
2776 uint16_t len;
2777 /*
2778 * This is a copy of the opaque field from the RX BD this completion
2779 * corresponds to.
2780 */
2781 uint32_t opaque;
2782 /*
2783 * This value is written by the NIC such that it will be different
2784 * for each pass through the completion queue. The even passes
2785 * will write 1. The odd passes will write 0.
2786 */
2787 uint8_t v1;
2788 /*
2789 * This value is written by the NIC such that it will be different
2790 * for each pass through the completion queue. The even passes
2791 * will write 1. The odd passes will write 0.
2792 */
2793 #define RX_TPA_START_CMPL_V1 UINT32_C(0x1)
2794 #define RX_TPA_START_CMPL_LAST RX_TPA_START_CMPL_V1
2795 /*
2796 * This is the RSS hash type for the packet. The value is packed
2797 * {tuple_extrac_op[1:0],rss_profile_id[4:0],tuple_extrac_op[2]}.
2798 *
2799 * The value of tuple_extrac_op provides the information about
2800 * what fields the hash was computed on.
2801 * * 0: The RSS hash was computed over source IP address,
2802 * destination IP address, source port, and destination port of inner
2803 * IP and TCP or UDP headers. Note: For non-tunneled packets,
2804 * the packet headers are considered inner packet headers for the RSS
2805 * hash computation purpose.
2806 * * 1: The RSS hash was computed over source IP address and destination
2807 * IP address of inner IP header. Note: For non-tunneled packets,
2808 * the packet headers are considered inner packet headers for the RSS
2809 * hash computation purpose.
2810 * * 2: The RSS hash was computed over source IP address,
2811 * destination IP address, source port, and destination port of
2812 * IP and TCP or UDP headers of outer tunnel headers.
2813 * Note: For non-tunneled packets, this value is not applicable.
2814 * * 3: The RSS hash was computed over source IP address and
2815 * destination IP address of IP header of outer tunnel headers.
2816 * Note: For non-tunneled packets, this value is not applicable.
2817 *
2818 * Note that 4-tuples values listed above are applicable
2819 * for layer 4 protocols supported and enabled for RSS in the hardware,
2820 * HWRM firmware, and drivers. For example, if RSS hash is supported and
2821 * enabled for TCP traffic only, then the values of tuple_extract_op
2822 * corresponding to 4-tuples are only valid for TCP traffic.
2823 */
2824 uint8_t rss_hash_type;
2825 /*
2826 * This is the aggregation ID that the completion is associated
2827 * with. Use this number to correlate the TPA start completion
2828 * with the TPA end completion.
2829 */
2830 uint16_t agg_id;
2831 /* unused2 is 9 b */
2832 #define RX_TPA_START_CMPL_UNUSED2_MASK UINT32_C(0x1ff)
2833 #define RX_TPA_START_CMPL_UNUSED2_SFT 0
2834 /*
2835 * This is the aggregation ID that the completion is associated
2836 * with. Use this number to correlate the TPA start completion
2837 * with the TPA end completion.
2838 */
2839 #define RX_TPA_START_CMPL_AGG_ID_MASK UINT32_C(0xfe00)
2840 #define RX_TPA_START_CMPL_AGG_ID_SFT 9
7c673cae 2841 /*
9f95a23c
TL
2842 * This value is the RSS hash value calculated for the packet
2843 * based on the mode bits and key value in the VNIC.
7c673cae 2844 */
9f95a23c 2845 uint32_t rss_hash;
7c673cae
FG
2846} __attribute__((packed));
2847
9f95a23c
TL
2848/* Last 16 bytes of rx_tpq_start_cmpl. */
2849/* rx_tpa_start_cmpl_hi (size:128b/16B) */
2850struct rx_tpa_start_cmpl_hi {
2851 uint32_t flags2;
7c673cae 2852 /*
9f95a23c
TL
2853 * This indicates that the ip checksum was calculated for the
2854 * inner packet and that the sum passed for all segments
2855 * included in the aggregation.
7c673cae 2856 */
9f95a23c 2857 #define RX_TPA_START_CMPL_FLAGS2_IP_CS_CALC UINT32_C(0x1)
7c673cae 2858 /*
9f95a23c
TL
2859 * This indicates that the TCP, UDP or ICMP checksum was
2860 * calculated for the inner packet and that the sum passed
2861 * for all segments included in the aggregation.
7c673cae 2862 */
9f95a23c 2863 #define RX_TPA_START_CMPL_FLAGS2_L4_CS_CALC UINT32_C(0x2)
7c673cae 2864 /*
9f95a23c
TL
2865 * This indicates that the ip checksum was calculated for the
2866 * tunnel header and that the sum passed for all segments
2867 * included in the aggregation.
7c673cae 2868 */
9f95a23c 2869 #define RX_TPA_START_CMPL_FLAGS2_T_IP_CS_CALC UINT32_C(0x4)
7c673cae 2870 /*
9f95a23c
TL
2871 * This indicates that the UDP checksum was
2872 * calculated for the tunnel packet and that the sum passed for
2873 * all segments included in the aggregation.
7c673cae 2874 */
9f95a23c
TL
2875 #define RX_TPA_START_CMPL_FLAGS2_T_L4_CS_CALC UINT32_C(0x8)
2876 /* This value indicates what format the metadata field is. */
2877 #define RX_TPA_START_CMPL_FLAGS2_META_FORMAT_MASK UINT32_C(0xf0)
2878 #define RX_TPA_START_CMPL_FLAGS2_META_FORMAT_SFT 4
2879 /* No metadata informtaion. Value is zero. */
2880 #define RX_TPA_START_CMPL_FLAGS2_META_FORMAT_NONE \
2881 (UINT32_C(0x0) << 4)
7c673cae 2882 /*
9f95a23c
TL
2883 * The metadata field contains the VLAN tag and TPID value.
2884 * - metadata[11:0] contains the vlan VID value.
2885 * - metadata[12] contains the vlan DE value.
2886 * - metadata[15:13] contains the vlan PRI value.
2887 * - metadata[31:16] contains the vlan TPID value.
7c673cae 2888 */
9f95a23c
TL
2889 #define RX_TPA_START_CMPL_FLAGS2_META_FORMAT_VLAN \
2890 (UINT32_C(0x1) << 4)
2891 #define RX_TPA_START_CMPL_FLAGS2_META_FORMAT_LAST \
2892 RX_TPA_START_CMPL_FLAGS2_META_FORMAT_VLAN
7c673cae 2893 /*
9f95a23c
TL
2894 * This field indicates the IP type for the inner-most IP header.
2895 * A value of '0' indicates IPv4. A value of '1' indicates IPv6.
7c673cae 2896 */
9f95a23c 2897 #define RX_TPA_START_CMPL_FLAGS2_IP_TYPE UINT32_C(0x100)
7c673cae 2898 /*
9f95a23c
TL
2899 * This is data from the CFA block as indicated by the meta_format
2900 * field.
7c673cae 2901 */
9f95a23c
TL
2902 uint32_t metadata;
2903 /* When meta_format=1, this value is the VLAN VID. */
2904 #define RX_TPA_START_CMPL_METADATA_VID_MASK UINT32_C(0xfff)
2905 #define RX_TPA_START_CMPL_METADATA_VID_SFT 0
2906 /* When meta_format=1, this value is the VLAN DE. */
2907 #define RX_TPA_START_CMPL_METADATA_DE UINT32_C(0x1000)
2908 /* When meta_format=1, this value is the VLAN PRI. */
2909 #define RX_TPA_START_CMPL_METADATA_PRI_MASK UINT32_C(0xe000)
2910 #define RX_TPA_START_CMPL_METADATA_PRI_SFT 13
2911 /* When meta_format=1, this value is the VLAN TPID. */
2912 #define RX_TPA_START_CMPL_METADATA_TPID_MASK UINT32_C(0xffff0000)
2913 #define RX_TPA_START_CMPL_METADATA_TPID_SFT 16
2914 uint16_t v2;
7c673cae 2915 /*
9f95a23c
TL
2916 * This value is written by the NIC such that it will be different
2917 * for each pass through the completion queue. The even passes
2918 * will write 1. The odd passes will write 0.
7c673cae 2919 */
9f95a23c 2920 #define RX_TPA_START_CMPL_V2 UINT32_C(0x1)
7c673cae 2921 /*
9f95a23c
TL
2922 * This field identifies the CFA action rule that was used for this
2923 * packet.
7c673cae 2924 */
9f95a23c 2925 uint16_t cfa_code;
7c673cae 2926 /*
9f95a23c
TL
2927 * This is the size in bytes of the inner most L4 header.
2928 * This can be subtracted from the payload_offset to determine
2929 * the start of the inner most L4 header.
7c673cae 2930 */
9f95a23c 2931 uint32_t inner_l4_size_inner_l3_offset_inner_l2_offset_outer_l3_offset;
7c673cae 2932 /*
9f95a23c
TL
2933 * This is the offset from the beginning of the packet in bytes for
2934 * the outer L3 header. If there is no outer L3 header, then this
2935 * value is zero.
7c673cae 2936 */
9f95a23c
TL
2937 #define RX_TPA_START_CMPL_OUTER_L3_OFFSET_MASK UINT32_C(0x1ff)
2938 #define RX_TPA_START_CMPL_OUTER_L3_OFFSET_SFT 0
7c673cae 2939 /*
9f95a23c
TL
2940 * This is the offset from the beginning of the packet in bytes for
2941 * the inner most L2 header.
7c673cae 2942 */
9f95a23c
TL
2943 #define RX_TPA_START_CMPL_INNER_L2_OFFSET_MASK UINT32_C(0x3fe00)
2944 #define RX_TPA_START_CMPL_INNER_L2_OFFSET_SFT 9
7c673cae 2945 /*
9f95a23c
TL
2946 * This is the offset from the beginning of the packet in bytes for
2947 * the inner most L3 header.
7c673cae 2948 */
9f95a23c
TL
2949 #define RX_TPA_START_CMPL_INNER_L3_OFFSET_MASK UINT32_C(0x7fc0000)
2950 #define RX_TPA_START_CMPL_INNER_L3_OFFSET_SFT 18
7c673cae 2951 /*
9f95a23c
TL
2952 * This is the size in bytes of the inner most L4 header.
2953 * This can be subtracted from the payload_offset to determine
2954 * the start of the inner most L4 header.
7c673cae 2955 */
9f95a23c
TL
2956 #define RX_TPA_START_CMPL_INNER_L4_SIZE_MASK UINT32_C(0xf8000000)
2957 #define RX_TPA_START_CMPL_INNER_L4_SIZE_SFT 27
2958} __attribute__((packed));
2959
2960/* rx_tpa_end_cmpl (size:128b/16B) */
2961struct rx_tpa_end_cmpl {
2962 uint16_t flags_type;
2963 /*
2964 * This field indicates the exact type of the completion.
2965 * By convention, the LSB identifies the length of the
2966 * record in 16B units. Even values indicate 16B
2967 * records. Odd values indicate 32B
2968 * records.
2969 */
2970 #define RX_TPA_END_CMPL_TYPE_MASK UINT32_C(0x3f)
2971 #define RX_TPA_END_CMPL_TYPE_SFT 0
2972 /*
2973 * RX L2 TPA End Completion:
2974 * Completion at the end of a TPA operation.
2975 * Length = 32B
2976 */
2977 #define RX_TPA_END_CMPL_TYPE_RX_TPA_END UINT32_C(0x15)
2978 #define RX_TPA_END_CMPL_TYPE_LAST \
2979 RX_TPA_END_CMPL_TYPE_RX_TPA_END
2980 #define RX_TPA_END_CMPL_FLAGS_MASK UINT32_C(0xffc0)
2981 #define RX_TPA_END_CMPL_FLAGS_SFT 6
2982 /*
2983 * When this bit is '1', it indicates a packet that has an
2984 * error of some type. Type of error is indicated in
2985 * error_flags.
2986 */
2987 #define RX_TPA_END_CMPL_FLAGS_ERROR UINT32_C(0x40)
2988 /* This field indicates how the packet was placed in the buffer. */
2989 #define RX_TPA_END_CMPL_FLAGS_PLACEMENT_MASK UINT32_C(0x380)
2990 #define RX_TPA_END_CMPL_FLAGS_PLACEMENT_SFT 7
2991 /*
2992 * Jumbo:
2993 * TPA Packet was placed using jumbo algorithm. This means
2994 * that the first buffer will be filled with data before
2995 * moving to aggregation buffers. Each aggregation buffer
2996 * will be filled before moving to the next aggregation
2997 * buffer.
2998 */
2999 #define RX_TPA_END_CMPL_FLAGS_PLACEMENT_JUMBO \
3000 (UINT32_C(0x1) << 7)
3001 /*
3002 * Header/Data Separation:
3003 * Packet was placed using Header/Data separation algorithm.
3004 * The separation location is indicated by the itype field.
3005 */
3006 #define RX_TPA_END_CMPL_FLAGS_PLACEMENT_HDS \
3007 (UINT32_C(0x2) << 7)
3008 /*
3009 * GRO/Jumbo:
3010 * Packet will be placed using GRO/Jumbo where the first
3011 * packet is filled with data. Subsequent packets will be
3012 * placed such that any one packet does not span two
3013 * aggregation buffers unless it starts at the beginning of
3014 * an aggregation buffer.
3015 */
3016 #define RX_TPA_END_CMPL_FLAGS_PLACEMENT_GRO_JUMBO \
3017 (UINT32_C(0x5) << 7)
3018 /*
3019 * GRO/Header-Data Separation:
3020 * Packet will be placed using GRO/HDS where the header
3021 * is in the first packet.
3022 * Payload of each packet will be
3023 * placed such that any one packet does not span two
3024 * aggregation buffers unless it starts at the beginning of
3025 * an aggregation buffer.
3026 */
3027 #define RX_TPA_END_CMPL_FLAGS_PLACEMENT_GRO_HDS \
3028 (UINT32_C(0x6) << 7)
3029 #define RX_TPA_END_CMPL_FLAGS_PLACEMENT_LAST \
3030 RX_TPA_END_CMPL_FLAGS_PLACEMENT_GRO_HDS
3031 /* unused is 2 b */
3032 #define RX_TPA_END_CMPL_FLAGS_UNUSED_MASK UINT32_C(0xc00)
3033 #define RX_TPA_END_CMPL_FLAGS_UNUSED_SFT 10
7c673cae 3034 /*
9f95a23c
TL
3035 * This value indicates what the inner packet determined for the
3036 * packet was.
3037 * - 2 TCP Packet
3038 * Indicates that the packet was IP and TCP. This indicates
3039 * that the ip_cs field is valid and that the tcp_udp_cs
3040 * field is valid and contains the TCP checksum.
3041 * This also indicates that the payload_offset field is valid.
7c673cae 3042 */
9f95a23c
TL
3043 #define RX_TPA_END_CMPL_FLAGS_ITYPE_MASK UINT32_C(0xf000)
3044 #define RX_TPA_END_CMPL_FLAGS_ITYPE_SFT 12
7c673cae 3045 /*
9f95a23c
TL
3046 * This value is zero for TPA End completions.
3047 * There is no data in the buffer that corresponds to the opaque
3048 * value in this completion.
7c673cae 3049 */
9f95a23c 3050 uint16_t len;
7c673cae 3051 /*
9f95a23c
TL
3052 * This is a copy of the opaque field from the RX BD this completion
3053 * corresponds to.
7c673cae 3054 */
9f95a23c 3055 uint32_t opaque;
7c673cae 3056 /*
9f95a23c
TL
3057 * This value is written by the NIC such that it will be different
3058 * for each pass through the completion queue. The even passes
3059 * will write 1. The odd passes will write 0.
7c673cae 3060 */
9f95a23c 3061 uint8_t agg_bufs_v1;
7c673cae 3062 /*
9f95a23c
TL
3063 * This value is written by the NIC such that it will be different
3064 * for each pass through the completion queue. The even passes
3065 * will write 1. The odd passes will write 0.
7c673cae 3066 */
9f95a23c 3067 #define RX_TPA_END_CMPL_V1 UINT32_C(0x1)
7c673cae 3068 /*
9f95a23c
TL
3069 * This value is the number of aggregation buffers that follow this
3070 * entry in the completion ring that are a part of this aggregation
3071 * packet.
3072 * If the value is zero, then the packet is completely contained
3073 * in the buffer space provided in the aggregation start completion.
3074 */
3075 #define RX_TPA_END_CMPL_AGG_BUFS_MASK UINT32_C(0x7e)
3076 #define RX_TPA_END_CMPL_AGG_BUFS_SFT 1
3077 /* This value is the number of segments in the TPA operation. */
3078 uint8_t tpa_segs;
3079 /*
3080 * This value indicates the offset in bytes from the beginning of the packet
3081 * where the inner payload starts. This value is valid for TCP, UDP,
3082 * FCoE, and RoCE packets.
3083 *
3084 * A value of zero indicates an offset of 256 bytes.
3085 */
3086 uint8_t payload_offset;
3087 uint8_t agg_id;
3088 /* unused2 is 1 b */
3089 #define RX_TPA_END_CMPL_UNUSED2 UINT32_C(0x1)
3090 /*
3091 * This is the aggregation ID that the completion is associated
3092 * with. Use this number to correlate the TPA start completion
3093 * with the TPA end completion.
3094 */
3095 #define RX_TPA_END_CMPL_AGG_ID_MASK UINT32_C(0xfe)
3096 #define RX_TPA_END_CMPL_AGG_ID_SFT 1
3097 /*
3098 * For non-GRO packets, this value is the
3099 * timestamp delta between earliest and latest timestamp values for
3100 * TPA packet. If packets were not time stamped, then delta will be
3101 * zero.
3102 *
3103 * For GRO packets, this field is zero except for the following
3104 * sub-fields.
3105 * - tsdelta[31]
3106 * Timestamp present indication. When '0', no Timestamp
3107 * option is in the packet. When '1', then a Timestamp
3108 * option is present in the packet.
3109 */
3110 uint32_t tsdelta;
7c673cae
FG
3111} __attribute__((packed));
3112
9f95a23c
TL
3113/* Last 16 bytes of rx_tpa_end_cmpl. */
3114/* rx_tpa_end_cmpl_hi (size:128b/16B) */
3115struct rx_tpa_end_cmpl_hi {
7c673cae 3116 /*
9f95a23c
TL
3117 * This value is the number of duplicate ACKs that have been
3118 * received as part of the TPA operation.
7c673cae 3119 */
9f95a23c 3120 uint32_t tpa_dup_acks;
7c673cae 3121 /*
9f95a23c
TL
3122 * This value is the number of duplicate ACKs that have been
3123 * received as part of the TPA operation.
7c673cae 3124 */
9f95a23c
TL
3125 #define RX_TPA_END_CMPL_TPA_DUP_ACKS_MASK UINT32_C(0xf)
3126 #define RX_TPA_END_CMPL_TPA_DUP_ACKS_SFT 0
7c673cae 3127 /*
9f95a23c
TL
3128 * This value is the valid when TPA completion is active. It
3129 * indicates the length of the longest segment of the TPA operation
3130 * for LRO mode and the length of the first segment in GRO mode.
3131 *
3132 * This value may be used by GRO software to re-construct the original
3133 * packet stream from the TPA packet. This is the length of all
3134 * but the last segment for GRO. In LRO mode this value may be used
3135 * to indicate MSS size to the stack.
7c673cae 3136 */
9f95a23c
TL
3137 uint16_t tpa_seg_len;
3138 /* unused4 is 16 b */
3139 uint16_t unused3;
3140 uint16_t errors_v2;
7c673cae 3141 /*
9f95a23c
TL
3142 * This value is written by the NIC such that it will be different
3143 * for each pass through the completion queue. The even passes
3144 * will write 1. The odd passes will write 0.
7c673cae 3145 */
9f95a23c
TL
3146 #define RX_TPA_END_CMPL_V2 UINT32_C(0x1)
3147 #define RX_TPA_END_CMPL_ERRORS_MASK UINT32_C(0xfffe)
3148 #define RX_TPA_END_CMPL_ERRORS_SFT 1
7c673cae 3149 /*
9f95a23c
TL
3150 * This error indicates that there was some sort of problem with
3151 * the BDs for the packet that was found after part of the
3152 * packet was already placed. The packet should be treated as
3153 * invalid.
7c673cae 3154 */
9f95a23c
TL
3155 #define RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_MASK UINT32_C(0xe)
3156 #define RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_SFT 1
3157 /*
3158 * This error occurs when there is a fatal HW problem in
3159 * the chip only. It indicates that there were not
3160 * BDs on chip but that there was adequate reservation.
3161 * provided by the TPA block.
3162 */
3163 #define RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_NOT_ON_CHIP \
3164 (UINT32_C(0x2) << 1)
3165 /*
3166 * This error occurs when TPA block was not configured to
3167 * reserve adequate BDs for TPA operations on this RX
3168 * ring. All data for the TPA operation was not placed.
3169 *
3170 * This error can also be generated when the number of
3171 * segments is not programmed correctly in TPA and the
3172 * 33 total aggregation buffers allowed for the TPA
3173 * operation has been exceeded.
3174 */
3175 #define RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_RSV_ERROR \
3176 (UINT32_C(0x4) << 1)
3177 #define RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_LAST \
3178 RX_TPA_END_CMPL_ERRORS_BUFFER_ERROR_RSV_ERROR
3179 /* unused5 is 16 b */
3180 uint16_t unused_4;
3181 /*
3182 * This is the opaque value that was completed for the TPA start
3183 * completion that corresponds to this TPA end completion.
3184 */
3185 uint32_t start_opaque;
3186} __attribute__((packed));
3187
3188/* rx_abuf_cmpl (size:128b/16B) */
3189struct rx_abuf_cmpl {
3190 uint16_t type;
7c673cae 3191 /*
9f95a23c
TL
3192 * This field indicates the exact type of the completion.
3193 * By convention, the LSB identifies the length of the
3194 * record in 16B units. Even values indicate 16B
3195 * records. Odd values indicate 32B
3196 * records.
7c673cae 3197 */
9f95a23c
TL
3198 #define RX_ABUF_CMPL_TYPE_MASK UINT32_C(0x3f)
3199 #define RX_ABUF_CMPL_TYPE_SFT 0
7c673cae 3200 /*
9f95a23c
TL
3201 * RX Aggregation Buffer completion :
3202 * Completion of an L2 aggregation buffer in support of
3203 * TPA, HDS, or Jumbo packet completion. Length = 16B
7c673cae 3204 */
9f95a23c
TL
3205 #define RX_ABUF_CMPL_TYPE_RX_AGG UINT32_C(0x12)
3206 #define RX_ABUF_CMPL_TYPE_LAST RX_ABUF_CMPL_TYPE_RX_AGG
7c673cae 3207 /*
9f95a23c
TL
3208 * This is the length of the data for the packet stored in this
3209 * aggregation buffer identified by the opaque value. This does not
3210 * include the length of any
3211 * data placed in other aggregation BDs or in the packet or buffer
3212 * BDs. This length does not include any space added due to
3213 * hdr_offset register during HDS placement mode.
7c673cae 3214 */
9f95a23c 3215 uint16_t len;
7c673cae 3216 /*
9f95a23c
TL
3217 * This is a copy of the opaque field from the RX BD this aggregation
3218 * buffer corresponds to.
7c673cae 3219 */
9f95a23c
TL
3220 uint32_t opaque;
3221 uint32_t v;
7c673cae 3222 /*
9f95a23c
TL
3223 * This value is written by the NIC such that it will be different
3224 * for each pass through the completion queue. The even passes
3225 * will write 1. The odd passes will write 0.
7c673cae 3226 */
9f95a23c
TL
3227 #define RX_ABUF_CMPL_V UINT32_C(0x1)
3228 /* unused3 is 32 b */
3229 uint32_t unused_2;
3230} __attribute__((packed));
3231
3232/* eject_cmpl (size:128b/16B) */
3233struct eject_cmpl {
3234 uint16_t type;
7c673cae 3235 /*
9f95a23c
TL
3236 * This field indicates the exact type of the completion.
3237 * By convention, the LSB identifies the length of the
3238 * record in 16B units. Even values indicate 16B
3239 * records. Odd values indicate 32B
3240 * records.
7c673cae 3241 */
9f95a23c
TL
3242 #define EJECT_CMPL_TYPE_MASK UINT32_C(0x3f)
3243 #define EJECT_CMPL_TYPE_SFT 0
7c673cae 3244 /*
9f95a23c
TL
3245 * Statistics Ejection Completion:
3246 * Completion of statistics data ejection buffer.
3247 * Length = 16B
7c673cae 3248 */
9f95a23c
TL
3249 #define EJECT_CMPL_TYPE_STAT_EJECT UINT32_C(0x1a)
3250 #define EJECT_CMPL_TYPE_LAST EJECT_CMPL_TYPE_STAT_EJECT
7c673cae 3251 /*
9f95a23c
TL
3252 * This is the length of the statistics data stored in this
3253 * buffer.
7c673cae 3254 */
9f95a23c 3255 uint16_t len;
7c673cae 3256 /*
9f95a23c
TL
3257 * This is a copy of the opaque field from the RX BD this ejection
3258 * buffer corresponds to.
7c673cae 3259 */
9f95a23c
TL
3260 uint32_t opaque;
3261 uint32_t v;
7c673cae 3262 /*
9f95a23c
TL
3263 * This value is written by the NIC such that it will be different
3264 * for each pass through the completion queue. The even passes
3265 * will write 1. The odd passes will write 0.
7c673cae 3266 */
9f95a23c
TL
3267 #define EJECT_CMPL_V UINT32_C(0x1)
3268 /* unused3 is 32 b */
3269 uint32_t unused_2;
3270} __attribute__((packed));
3271
3272/* hwrm_cmpl (size:128b/16B) */
3273struct hwrm_cmpl {
3274 uint16_t type;
3275 /*
3276 * This field indicates the exact type of the completion.
3277 * By convention, the LSB identifies the length of the
3278 * record in 16B units. Even values indicate 16B
3279 * records. Odd values indicate 32B
3280 * records.
3281 */
3282 #define HWRM_CMPL_TYPE_MASK UINT32_C(0x3f)
3283 #define HWRM_CMPL_TYPE_SFT 0
3284 /*
3285 * HWRM Command Completion:
3286 * Completion of an HWRM command.
3287 */
3288 #define HWRM_CMPL_TYPE_HWRM_DONE UINT32_C(0x20)
3289 #define HWRM_CMPL_TYPE_LAST HWRM_CMPL_TYPE_HWRM_DONE
3290 /* This is the sequence_id of the HWRM command that has completed. */
3291 uint16_t sequence_id;
3292 /* unused2 is 32 b */
3293 uint32_t unused_1;
3294 uint32_t v;
3295 /*
3296 * This value is written by the NIC such that it will be different
3297 * for each pass through the completion queue. The even passes
3298 * will write 1. The odd passes will write 0.
3299 */
3300 #define HWRM_CMPL_V UINT32_C(0x1)
3301 /* unused4 is 32 b */
3302 uint32_t unused_3;
3303} __attribute__((packed));
3304
3305/* hwrm_fwd_req_cmpl (size:128b/16B) */
3306struct hwrm_fwd_req_cmpl {
7c673cae 3307 /*
9f95a23c
TL
3308 * This field indicates the exact type of the completion.
3309 * By convention, the LSB identifies the length of the
3310 * record in 16B units. Even values indicate 16B
3311 * records. Odd values indicate 32B
3312 * records.
7c673cae 3313 */
9f95a23c 3314 uint16_t req_len_type;
7c673cae 3315 /*
9f95a23c
TL
3316 * This field indicates the exact type of the completion.
3317 * By convention, the LSB identifies the length of the
3318 * record in 16B units. Even values indicate 16B
3319 * records. Odd values indicate 32B
3320 * records.
7c673cae 3321 */
9f95a23c
TL
3322 #define HWRM_FWD_REQ_CMPL_TYPE_MASK UINT32_C(0x3f)
3323 #define HWRM_FWD_REQ_CMPL_TYPE_SFT 0
3324 /* Forwarded HWRM Request */
3325 #define HWRM_FWD_REQ_CMPL_TYPE_HWRM_FWD_REQ UINT32_C(0x22)
3326 #define HWRM_FWD_REQ_CMPL_TYPE_LAST \
3327 HWRM_FWD_REQ_CMPL_TYPE_HWRM_FWD_REQ
3328 /* Length of forwarded request in bytes. */
3329 #define HWRM_FWD_REQ_CMPL_REQ_LEN_MASK UINT32_C(0xffc0)
3330 #define HWRM_FWD_REQ_CMPL_REQ_LEN_SFT 6
7c673cae 3331 /*
9f95a23c
TL
3332 * Source ID of this request.
3333 * Typically used in forwarding requests and responses.
3334 * 0x0 - 0xFFF8 - Used for function ids
3335 * 0xFFF8 - 0xFFFE - Reserved for internal processors
3336 * 0xFFFF - HWRM
7c673cae 3337 */
9f95a23c
TL
3338 uint16_t source_id;
3339 /* unused1 is 32 b */
3340 uint32_t unused0;
3341 /* Address of forwarded request. */
3342 uint32_t req_buf_addr_v[2];
7c673cae 3343 /*
9f95a23c
TL
3344 * This value is written by the NIC such that it will be different
3345 * for each pass through the completion queue. The even passes
3346 * will write 1. The odd passes will write 0.
7c673cae 3347 */
9f95a23c
TL
3348 #define HWRM_FWD_REQ_CMPL_V UINT32_C(0x1)
3349 /* Address of forwarded request. */
3350 #define HWRM_FWD_REQ_CMPL_REQ_BUF_ADDR_MASK UINT32_C(0xfffffffe)
3351 #define HWRM_FWD_REQ_CMPL_REQ_BUF_ADDR_SFT 1
3352} __attribute__((packed));
3353
3354/* hwrm_fwd_resp_cmpl (size:128b/16B) */
3355struct hwrm_fwd_resp_cmpl {
3356 uint16_t type;
3357 /*
3358 * This field indicates the exact type of the completion.
3359 * By convention, the LSB identifies the length of the
3360 * record in 16B units. Even values indicate 16B
3361 * records. Odd values indicate 32B
3362 * records.
3363 */
3364 #define HWRM_FWD_RESP_CMPL_TYPE_MASK UINT32_C(0x3f)
3365 #define HWRM_FWD_RESP_CMPL_TYPE_SFT 0
3366 /* Forwarded HWRM Response */
3367 #define HWRM_FWD_RESP_CMPL_TYPE_HWRM_FWD_RESP UINT32_C(0x24)
3368 #define HWRM_FWD_RESP_CMPL_TYPE_LAST \
3369 HWRM_FWD_RESP_CMPL_TYPE_HWRM_FWD_RESP
3370 /*
3371 * Source ID of this response.
3372 * Typically used in forwarding requests and responses.
3373 * 0x0 - 0xFFF8 - Used for function ids
3374 * 0xFFF8 - 0xFFFE - Reserved for internal processors
3375 * 0xFFFF - HWRM
3376 */
3377 uint16_t source_id;
3378 /* Length of forwarded response in bytes. */
3379 uint16_t resp_len;
3380 /* unused2 is 16 b */
3381 uint16_t unused_1;
3382 /* Address of forwarded request. */
3383 uint32_t resp_buf_addr_v[2];
7c673cae 3384 /*
9f95a23c
TL
3385 * This value is written by the NIC such that it will be different
3386 * for each pass through the completion queue. The even passes
3387 * will write 1. The odd passes will write 0.
7c673cae 3388 */
9f95a23c
TL
3389 #define HWRM_FWD_RESP_CMPL_V UINT32_C(0x1)
3390 /* Address of forwarded request. */
3391 #define HWRM_FWD_RESP_CMPL_RESP_BUF_ADDR_MASK UINT32_C(0xfffffffe)
3392 #define HWRM_FWD_RESP_CMPL_RESP_BUF_ADDR_SFT 1
3393} __attribute__((packed));
3394
3395/* hwrm_async_event_cmpl (size:128b/16B) */
3396struct hwrm_async_event_cmpl {
3397 uint16_t type;
7c673cae 3398 /*
9f95a23c
TL
3399 * This field indicates the exact type of the completion.
3400 * By convention, the LSB identifies the length of the
3401 * record in 16B units. Even values indicate 16B
3402 * records. Odd values indicate 32B
3403 * records.
7c673cae 3404 */
9f95a23c
TL
3405 #define HWRM_ASYNC_EVENT_CMPL_TYPE_MASK UINT32_C(0x3f)
3406 #define HWRM_ASYNC_EVENT_CMPL_TYPE_SFT 0
3407 /* HWRM Asynchronous Event Information */
3408 #define HWRM_ASYNC_EVENT_CMPL_TYPE_HWRM_ASYNC_EVENT UINT32_C(0x2e)
3409 #define HWRM_ASYNC_EVENT_CMPL_TYPE_LAST \
3410 HWRM_ASYNC_EVENT_CMPL_TYPE_HWRM_ASYNC_EVENT
3411 /* Identifiers of events. */
3412 uint16_t event_id;
3413 /* Link status changed */
3414 #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_STATUS_CHANGE \
3415 UINT32_C(0x0)
3416 /* Link MTU changed */
3417 #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_MTU_CHANGE \
3418 UINT32_C(0x1)
3419 /* Link speed changed */
3420 #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_SPEED_CHANGE \
3421 UINT32_C(0x2)
3422 /* DCB Configuration changed */
3423 #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_DCB_CONFIG_CHANGE \
3424 UINT32_C(0x3)
3425 /* Port connection not allowed */
3426 #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PORT_CONN_NOT_ALLOWED \
3427 UINT32_C(0x4)
3428 /* Link speed configuration was not allowed */
3429 #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_SPEED_CFG_NOT_ALLOWED \
3430 UINT32_C(0x5)
3431 /* Link speed configuration change */
3432 #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_SPEED_CFG_CHANGE \
3433 UINT32_C(0x6)
3434 /* Port PHY configuration change */
3435 #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PORT_PHY_CFG_CHANGE \
3436 UINT32_C(0x7)
3437 /* Reset notification to clients */
3438 #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_RESET_NOTIFY \
3439 UINT32_C(0x8)
3440 /* Function driver unloaded */
3441 #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_FUNC_DRVR_UNLOAD \
3442 UINT32_C(0x10)
3443 /* Function driver loaded */
3444 #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_FUNC_DRVR_LOAD \
3445 UINT32_C(0x11)
3446 /* Function FLR related processing has completed */
3447 #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_FUNC_FLR_PROC_CMPLT \
3448 UINT32_C(0x12)
3449 /* PF driver unloaded */
3450 #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PF_DRVR_UNLOAD \
3451 UINT32_C(0x20)
3452 /* PF driver loaded */
3453 #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PF_DRVR_LOAD \
3454 UINT32_C(0x21)
3455 /* VF Function Level Reset (FLR) */
3456 #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_VF_FLR \
3457 UINT32_C(0x30)
3458 /* VF MAC Address Change */
3459 #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_VF_MAC_ADDR_CHANGE \
3460 UINT32_C(0x31)
3461 /* PF-VF communication channel status change. */
3462 #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PF_VF_COMM_STATUS_CHANGE \
3463 UINT32_C(0x32)
3464 /* VF Configuration Change */
3465 #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_VF_CFG_CHANGE \
3466 UINT32_C(0x33)
3467 /* LLFC/PFC Configuration Change */
3468 #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LLFC_PFC_CHANGE \
3469 UINT32_C(0x34)
3470 /* Default VNIC Configuration Change */
3471 #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_DEFAULT_VNIC_CHANGE \
3472 UINT32_C(0x35)
3473 /* HWRM Error */
3474 #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_HWRM_ERROR \
3475 UINT32_C(0xff)
3476 #define HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LAST \
3477 HWRM_ASYNC_EVENT_CMPL_EVENT_ID_HWRM_ERROR
3478 /* Event specific data */
3479 uint32_t event_data2;
3480 uint8_t opaque_v;
7c673cae 3481 /*
9f95a23c
TL
3482 * This value is written by the NIC such that it will be different
3483 * for each pass through the completion queue. The even passes
3484 * will write 1. The odd passes will write 0.
7c673cae 3485 */
9f95a23c
TL
3486 #define HWRM_ASYNC_EVENT_CMPL_V UINT32_C(0x1)
3487 /* opaque is 7 b */
3488 #define HWRM_ASYNC_EVENT_CMPL_OPAQUE_MASK UINT32_C(0xfe)
3489 #define HWRM_ASYNC_EVENT_CMPL_OPAQUE_SFT 1
3490 /* 8-lsb timestamp from POR (100-msec resolution) */
3491 uint8_t timestamp_lo;
3492 /* 16-lsb timestamp from POR (100-msec resolution) */
3493 uint16_t timestamp_hi;
3494 /* Event specific data */
3495 uint32_t event_data1;
3496} __attribute__((packed));
3497
3498/* hwrm_async_event_cmpl_link_status_change (size:128b/16B) */
3499struct hwrm_async_event_cmpl_link_status_change {
3500 uint16_t type;
3501 /*
3502 * This field indicates the exact type of the completion.
3503 * By convention, the LSB identifies the length of the
3504 * record in 16B units. Even values indicate 16B
3505 * records. Odd values indicate 32B
3506 * records.
3507 */
3508 #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_TYPE_MASK \
3509 UINT32_C(0x3f)
3510 #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_TYPE_SFT 0
3511 /* HWRM Asynchronous Event Information */
3512 #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_TYPE_HWRM_ASYNC_EVENT \
3513 UINT32_C(0x2e)
3514 #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_TYPE_LAST \
3515 HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_TYPE_HWRM_ASYNC_EVENT
3516 /* Identifiers of events. */
3517 uint16_t event_id;
3518 /* Link status changed */
3519 #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_ID_LINK_STATUS_CHANGE \
3520 UINT32_C(0x0)
3521 #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_ID_LAST \
3522 HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_ID_LINK_STATUS_CHANGE
3523 /* Event specific data */
3524 uint32_t event_data2;
3525 uint8_t opaque_v;
7c673cae 3526 /*
9f95a23c
TL
3527 * This value is written by the NIC such that it will be different
3528 * for each pass through the completion queue. The even passes
3529 * will write 1. The odd passes will write 0.
7c673cae 3530 */
9f95a23c
TL
3531 #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_V \
3532 UINT32_C(0x1)
3533 /* opaque is 7 b */
3534 #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_OPAQUE_MASK \
3535 UINT32_C(0xfe)
3536 #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_OPAQUE_SFT 1
3537 /* 8-lsb timestamp from POR (100-msec resolution) */
3538 uint8_t timestamp_lo;
3539 /* 16-lsb timestamp from POR (100-msec resolution) */
3540 uint16_t timestamp_hi;
3541 /* Event specific data */
3542 uint32_t event_data1;
3543 /* Indicates link status change */
3544 #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_LINK_CHANGE \
3545 UINT32_C(0x1)
7c673cae 3546 /*
9f95a23c
TL
3547 * If this bit set to 0, then it indicates that the link
3548 * was up and it went down.
7c673cae 3549 */
9f95a23c
TL
3550 #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_LINK_CHANGE_DOWN \
3551 UINT32_C(0x0)
7c673cae 3552 /*
9f95a23c
TL
3553 * If this bit is set to 1, then it indicates that the link
3554 * was down and it went up.
7c673cae 3555 */
9f95a23c
TL
3556 #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_LINK_CHANGE_UP \
3557 UINT32_C(0x1)
3558 #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_LINK_CHANGE_LAST \
3559 HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_LINK_CHANGE_UP
3560 /* Indicates the physical port this link status change occur */
3561 #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_PORT_MASK \
3562 UINT32_C(0xe)
3563 #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_PORT_SFT \
3564 1
3565 /* PORT ID */
3566 #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_PORT_ID_MASK \
3567 UINT32_C(0xffff0)
3568 #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_PORT_ID_SFT \
3569 4
3570 /* Indicates the physical function this event occured on. */
3571 #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_PF_ID_MASK \
3572 UINT32_C(0xff00000)
3573 #define HWRM_ASYNC_EVENT_CMPL_LINK_STATUS_CHANGE_EVENT_DATA1_PF_ID_SFT \
3574 20
3575} __attribute__((packed));
3576
3577/* hwrm_async_event_cmpl_link_mtu_change (size:128b/16B) */
3578struct hwrm_async_event_cmpl_link_mtu_change {
3579 uint16_t type;
3580 /*
3581 * This field indicates the exact type of the completion.
3582 * By convention, the LSB identifies the length of the
3583 * record in 16B units. Even values indicate 16B
3584 * records. Odd values indicate 32B
3585 * records.
3586 */
3587 #define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_TYPE_MASK \
3588 UINT32_C(0x3f)
3589 #define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_TYPE_SFT 0
3590 /* HWRM Asynchronous Event Information */
3591 #define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_TYPE_HWRM_ASYNC_EVENT \
3592 UINT32_C(0x2e)
3593 #define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_TYPE_LAST \
3594 HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_TYPE_HWRM_ASYNC_EVENT
3595 /* Identifiers of events. */
3596 uint16_t event_id;
3597 /* Link MTU changed */
3598 #define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_EVENT_ID_LINK_MTU_CHANGE \
3599 UINT32_C(0x1)
3600 #define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_EVENT_ID_LAST \
3601 HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_EVENT_ID_LINK_MTU_CHANGE
3602 /* Event specific data */
3603 uint32_t event_data2;
3604 uint8_t opaque_v;
7c673cae 3605 /*
9f95a23c
TL
3606 * This value is written by the NIC such that it will be different
3607 * for each pass through the completion queue. The even passes
3608 * will write 1. The odd passes will write 0.
7c673cae 3609 */
9f95a23c
TL
3610 #define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_V UINT32_C(0x1)
3611 /* opaque is 7 b */
3612 #define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_OPAQUE_MASK \
3613 UINT32_C(0xfe)
3614 #define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_OPAQUE_SFT 1
3615 /* 8-lsb timestamp from POR (100-msec resolution) */
3616 uint8_t timestamp_lo;
3617 /* 16-lsb timestamp from POR (100-msec resolution) */
3618 uint16_t timestamp_hi;
3619 /* Event specific data */
3620 uint32_t event_data1;
3621 /* The new MTU of the link in bytes. */
3622 #define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_EVENT_DATA1_NEW_MTU_MASK \
3623 UINT32_C(0xffff)
3624 #define HWRM_ASYNC_EVENT_CMPL_LINK_MTU_CHANGE_EVENT_DATA1_NEW_MTU_SFT 0
3625} __attribute__((packed));
3626
3627/* hwrm_async_event_cmpl_link_speed_change (size:128b/16B) */
3628struct hwrm_async_event_cmpl_link_speed_change {
3629 uint16_t type;
3630 /*
3631 * This field indicates the exact type of the completion.
3632 * By convention, the LSB identifies the length of the
3633 * record in 16B units. Even values indicate 16B
3634 * records. Odd values indicate 32B
3635 * records.
3636 */
3637 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_TYPE_MASK \
3638 UINT32_C(0x3f)
3639 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_TYPE_SFT 0
3640 /* HWRM Asynchronous Event Information */
3641 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_TYPE_HWRM_ASYNC_EVENT \
3642 UINT32_C(0x2e)
3643 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_TYPE_LAST \
3644 HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_TYPE_HWRM_ASYNC_EVENT
3645 /* Identifiers of events. */
3646 uint16_t event_id;
3647 /* Link speed changed */
3648 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_ID_LINK_SPEED_CHANGE \
3649 UINT32_C(0x2)
3650 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_ID_LAST \
3651 HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_ID_LINK_SPEED_CHANGE
3652 /* Event specific data */
3653 uint32_t event_data2;
3654 uint8_t opaque_v;
7c673cae 3655 /*
9f95a23c
TL
3656 * This value is written by the NIC such that it will be different
3657 * for each pass through the completion queue. The even passes
3658 * will write 1. The odd passes will write 0.
7c673cae 3659 */
9f95a23c
TL
3660 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_V \
3661 UINT32_C(0x1)
3662 /* opaque is 7 b */
3663 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_OPAQUE_MASK \
3664 UINT32_C(0xfe)
3665 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_OPAQUE_SFT 1
3666 /* 8-lsb timestamp from POR (100-msec resolution) */
3667 uint8_t timestamp_lo;
3668 /* 16-lsb timestamp from POR (100-msec resolution) */
3669 uint16_t timestamp_hi;
3670 /* Event specific data */
3671 uint32_t event_data1;
7c673cae 3672 /*
9f95a23c
TL
3673 * When this bit is '1', the link was forced to the
3674 * force_link_speed value.
7c673cae 3675 */
9f95a23c
TL
3676 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_FORCE \
3677 UINT32_C(0x1)
3678 /* The new link speed in 100 Mbps units. */
3679 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_MASK \
3680 UINT32_C(0xfffe)
3681 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_SFT \
3682 1
7c673cae 3683 /* 100Mb link speed */
9f95a23c
TL
3684 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_100MB \
3685 (UINT32_C(0x1) << 1)
7c673cae 3686 /* 1Gb link speed */
9f95a23c
TL
3687 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_1GB \
3688 (UINT32_C(0xa) << 1)
7c673cae 3689 /* 2Gb link speed */
9f95a23c
TL
3690 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_2GB \
3691 (UINT32_C(0x14) << 1)
7c673cae 3692 /* 25Gb link speed */
9f95a23c
TL
3693 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_2_5GB \
3694 (UINT32_C(0x19) << 1)
7c673cae 3695 /* 10Gb link speed */
9f95a23c
TL
3696 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_10GB \
3697 (UINT32_C(0x64) << 1)
3698 /* 20Mb link speed */
3699 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_20GB \
3700 (UINT32_C(0xc8) << 1)
7c673cae 3701 /* 25Gb link speed */
9f95a23c
TL
3702 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_25GB \
3703 (UINT32_C(0xfa) << 1)
7c673cae 3704 /* 40Gb link speed */
9f95a23c
TL
3705 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_40GB \
3706 (UINT32_C(0x190) << 1)
7c673cae 3707 /* 50Gb link speed */
9f95a23c
TL
3708 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_50GB \
3709 (UINT32_C(0x1f4) << 1)
7c673cae 3710 /* 100Gb link speed */
9f95a23c
TL
3711 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_100GB \
3712 (UINT32_C(0x3e8) << 1)
3713 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_LAST \
3714 HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_NEW_LINK_SPEED_100MBPS_100GB
3715 /* PORT ID */
3716 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_PORT_ID_MASK \
3717 UINT32_C(0xffff0000)
3718 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CHANGE_EVENT_DATA1_PORT_ID_SFT \
3719 16
7c673cae
FG
3720} __attribute__((packed));
3721
9f95a23c
TL
3722/* hwrm_async_event_cmpl_dcb_config_change (size:128b/16B) */
3723struct hwrm_async_event_cmpl_dcb_config_change {
3724 uint16_t type;
3725 /*
3726 * This field indicates the exact type of the completion.
3727 * By convention, the LSB identifies the length of the
3728 * record in 16B units. Even values indicate 16B
3729 * records. Odd values indicate 32B
3730 * records.
3731 */
3732 #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_TYPE_MASK \
3733 UINT32_C(0x3f)
3734 #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_TYPE_SFT 0
3735 /* HWRM Asynchronous Event Information */
3736 #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_TYPE_HWRM_ASYNC_EVENT \
3737 UINT32_C(0x2e)
3738 #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_TYPE_LAST \
3739 HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_TYPE_HWRM_ASYNC_EVENT
3740 /* Identifiers of events. */
3741 uint16_t event_id;
3742 /* DCB Configuration changed */
3743 #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_ID_DCB_CONFIG_CHANGE \
3744 UINT32_C(0x3)
3745 #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_ID_LAST \
3746 HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_ID_DCB_CONFIG_CHANGE
3747 /* Event specific data */
3748 uint32_t event_data2;
3749 /* ETS configuration change */
3750 #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA2_ETS \
3751 UINT32_C(0x1)
3752 /* PFC configuration change */
3753 #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA2_PFC \
3754 UINT32_C(0x2)
3755 /* APP configuration change */
3756 #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA2_APP \
3757 UINT32_C(0x4)
3758 uint8_t opaque_v;
7c673cae 3759 /*
9f95a23c
TL
3760 * This value is written by the NIC such that it will be different
3761 * for each pass through the completion queue. The even passes
3762 * will write 1. The odd passes will write 0.
7c673cae 3763 */
9f95a23c
TL
3764 #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_V \
3765 UINT32_C(0x1)
3766 /* opaque is 7 b */
3767 #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_OPAQUE_MASK \
3768 UINT32_C(0xfe)
3769 #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_OPAQUE_SFT 1
3770 /* 8-lsb timestamp from POR (100-msec resolution) */
3771 uint8_t timestamp_lo;
3772 /* 16-lsb timestamp from POR (100-msec resolution) */
3773 uint16_t timestamp_hi;
3774 /* Event specific data */
3775 uint32_t event_data1;
3776 /* PORT ID */
3777 #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_PORT_ID_MASK \
3778 UINT32_C(0xffff)
3779 #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_PORT_ID_SFT \
3780 0
3781 /* Priority recommended for RoCE traffic */
3782 #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_ROCE_PRIORITY_MASK \
3783 UINT32_C(0xff0000)
3784 #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_ROCE_PRIORITY_SFT \
3785 16
3786 /* none is 255 */
3787 #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_ROCE_PRIORITY_NONE \
3788 (UINT32_C(0xff) << 16)
3789 #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_ROCE_PRIORITY_LAST \
3790 HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_ROCE_PRIORITY_NONE
3791 /* Priority recommended for L2 traffic */
3792 #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_L2_PRIORITY_MASK \
3793 UINT32_C(0xff000000)
3794 #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_L2_PRIORITY_SFT \
3795 24
3796 /* none is 255 */
3797 #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_L2_PRIORITY_NONE \
3798 (UINT32_C(0xff) << 24)
3799 #define HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_L2_PRIORITY_LAST \
3800 HWRM_ASYNC_EVENT_CMPL_DCB_CONFIG_CHANGE_EVENT_DATA1_RECOMMEND_L2_PRIORITY_NONE
3801} __attribute__((packed));
3802
3803/* hwrm_async_event_cmpl_port_conn_not_allowed (size:128b/16B) */
3804struct hwrm_async_event_cmpl_port_conn_not_allowed {
3805 uint16_t type;
3806 /*
3807 * This field indicates the exact type of the completion.
3808 * By convention, the LSB identifies the length of the
3809 * record in 16B units. Even values indicate 16B
3810 * records. Odd values indicate 32B
3811 * records.
3812 */
3813 #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_TYPE_MASK \
3814 UINT32_C(0x3f)
3815 #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_TYPE_SFT \
3816 0
3817 /* HWRM Asynchronous Event Information */
3818 #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_TYPE_HWRM_ASYNC_EVENT \
3819 UINT32_C(0x2e)
3820 #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_TYPE_LAST \
3821 HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_TYPE_HWRM_ASYNC_EVENT
3822 /* Identifiers of events. */
3823 uint16_t event_id;
3824 /* Port connection not allowed */
3825 #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_ID_PORT_CONN_NOT_ALLOWED \
3826 UINT32_C(0x4)
3827 #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_ID_LAST \
3828 HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_ID_PORT_CONN_NOT_ALLOWED
3829 /* Event specific data */
3830 uint32_t event_data2;
3831 uint8_t opaque_v;
7c673cae 3832 /*
9f95a23c
TL
3833 * This value is written by the NIC such that it will be different
3834 * for each pass through the completion queue. The even passes
3835 * will write 1. The odd passes will write 0.
7c673cae 3836 */
9f95a23c
TL
3837 #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_V \
3838 UINT32_C(0x1)
3839 /* opaque is 7 b */
3840 #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_OPAQUE_MASK \
3841 UINT32_C(0xfe)
3842 #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_OPAQUE_SFT 1
3843 /* 8-lsb timestamp from POR (100-msec resolution) */
3844 uint8_t timestamp_lo;
3845 /* 16-lsb timestamp from POR (100-msec resolution) */
3846 uint16_t timestamp_hi;
3847 /* Event specific data */
3848 uint32_t event_data1;
3849 /* PORT ID */
3850 #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_PORT_ID_MASK \
3851 UINT32_C(0xffff)
3852 #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_PORT_ID_SFT \
3853 0
3854 /*
3855 * This value indicates the current port level enforcement policy
3856 * for the optics module when there is an optical module mismatch
3857 * and port is not connected.
3858 */
3859 #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_MASK \
3860 UINT32_C(0xff0000)
3861 #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_SFT \
3862 16
3863 /* No enforcement */
3864 #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_NONE \
3865 (UINT32_C(0x0) << 16)
3866 /* Disable Transmit side Laser. */
3867 #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_DISABLETX \
3868 (UINT32_C(0x1) << 16)
3869 /* Raise a warning message. */
3870 #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_WARNINGMSG \
3871 (UINT32_C(0x2) << 16)
3872 /* Power down the module. */
3873 #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_PWRDOWN \
3874 (UINT32_C(0x3) << 16)
3875 #define HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_LAST \
3876 HWRM_ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_ENFORCEMENT_POLICY_PWRDOWN
3877} __attribute__((packed));
3878
3879/* hwrm_async_event_cmpl_link_speed_cfg_not_allowed (size:128b/16B) */
3880struct hwrm_async_event_cmpl_link_speed_cfg_not_allowed {
3881 uint16_t type;
3882 /*
3883 * This field indicates the exact type of the completion.
3884 * By convention, the LSB identifies the length of the
3885 * record in 16B units. Even values indicate 16B
3886 * records. Odd values indicate 32B
3887 * records.
3888 */
3889 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_TYPE_MASK \
3890 UINT32_C(0x3f)
3891 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_TYPE_SFT \
3892 0
3893 /* HWRM Asynchronous Event Information */
3894 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_TYPE_HWRM_ASYNC_EVENT \
3895 UINT32_C(0x2e)
3896 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_TYPE_LAST \
3897 HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_TYPE_HWRM_ASYNC_EVENT
3898 /* Identifiers of events. */
3899 uint16_t event_id;
3900 /* Link speed configuration was not allowed */
3901 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_EVENT_ID_LINK_SPEED_CFG_NOT_ALLOWED \
3902 UINT32_C(0x5)
3903 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_EVENT_ID_LAST \
3904 HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_EVENT_ID_LINK_SPEED_CFG_NOT_ALLOWED
3905 /* Event specific data */
3906 uint32_t event_data2;
3907 uint8_t opaque_v;
7c673cae 3908 /*
9f95a23c
TL
3909 * This value is written by the NIC such that it will be different
3910 * for each pass through the completion queue. The even passes
3911 * will write 1. The odd passes will write 0.
7c673cae 3912 */
9f95a23c
TL
3913 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_V \
3914 UINT32_C(0x1)
3915 /* opaque is 7 b */
3916 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_OPAQUE_MASK \
3917 UINT32_C(0xfe)
3918 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_OPAQUE_SFT 1
3919 /* 8-lsb timestamp from POR (100-msec resolution) */
3920 uint8_t timestamp_lo;
3921 /* 16-lsb timestamp from POR (100-msec resolution) */
3922 uint16_t timestamp_hi;
3923 /* Event specific data */
3924 uint32_t event_data1;
3925 /* PORT ID */
3926 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_EVENT_DATA1_PORT_ID_MASK \
3927 UINT32_C(0xffff)
3928 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_NOT_ALLOWED_EVENT_DATA1_PORT_ID_SFT \
3929 0
7c673cae
FG
3930} __attribute__((packed));
3931
9f95a23c
TL
3932/* hwrm_async_event_cmpl_link_speed_cfg_change (size:128b/16B) */
3933struct hwrm_async_event_cmpl_link_speed_cfg_change {
3934 uint16_t type;
3935 /*
3936 * This field indicates the exact type of the completion.
3937 * By convention, the LSB identifies the length of the
3938 * record in 16B units. Even values indicate 16B
3939 * records. Odd values indicate 32B
3940 * records.
3941 */
3942 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_TYPE_MASK \
3943 UINT32_C(0x3f)
3944 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_TYPE_SFT \
3945 0
3946 /* HWRM Asynchronous Event Information */
3947 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT \
3948 UINT32_C(0x2e)
3949 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_TYPE_LAST \
3950 HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT
3951 /* Identifiers of events. */
3952 uint16_t event_id;
3953 /* Link speed configuration change */
3954 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_ID_LINK_SPEED_CFG_CHANGE \
3955 UINT32_C(0x6)
3956 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_ID_LAST \
3957 HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_ID_LINK_SPEED_CFG_CHANGE
3958 /* Event specific data */
3959 uint32_t event_data2;
3960 uint8_t opaque_v;
7c673cae 3961 /*
9f95a23c
TL
3962 * This value is written by the NIC such that it will be different
3963 * for each pass through the completion queue. The even passes
3964 * will write 1. The odd passes will write 0.
7c673cae 3965 */
9f95a23c
TL
3966 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_V \
3967 UINT32_C(0x1)
3968 /* opaque is 7 b */
3969 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_OPAQUE_MASK \
3970 UINT32_C(0xfe)
3971 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_OPAQUE_SFT 1
3972 /* 8-lsb timestamp from POR (100-msec resolution) */
3973 uint8_t timestamp_lo;
3974 /* 16-lsb timestamp from POR (100-msec resolution) */
3975 uint16_t timestamp_hi;
3976 /* Event specific data */
3977 uint32_t event_data1;
3978 /* PORT ID */
3979 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_DATA1_PORT_ID_MASK \
3980 UINT32_C(0xffff)
3981 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_DATA1_PORT_ID_SFT \
3982 0
3983 /*
3984 * If set to 1, it indicates that the supported link speeds
3985 * configuration on the port has changed.
3986 * If set to 0, then there is no change in supported link speeds
3987 * configuration.
3988 */
3989 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_DATA1_SUPPORTED_LINK_SPEEDS_CHANGE \
3990 UINT32_C(0x10000)
3991 /*
3992 * If set to 1, it indicates that the link speed configuration
3993 * on the port has become illegal or invalid.
3994 * If set to 0, then the link speed configuration on the port is
3995 * legal or valid.
3996 */
3997 #define HWRM_ASYNC_EVENT_CMPL_LINK_SPEED_CFG_CHANGE_EVENT_DATA1_ILLEGAL_LINK_SPEED_CFG \
3998 UINT32_C(0x20000)
3999} __attribute__((packed));
4000
4001/* hwrm_async_event_cmpl_port_phy_cfg_change (size:128b/16B) */
4002struct hwrm_async_event_cmpl_port_phy_cfg_change {
4003 uint16_t type;
4004 /*
4005 * This field indicates the exact type of the completion.
4006 * By convention, the LSB identifies the length of the
4007 * record in 16B units. Even values indicate 16B
4008 * records. Odd values indicate 32B
4009 * records.
4010 */
4011 #define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_TYPE_MASK \
4012 UINT32_C(0x3f)
4013 #define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_TYPE_SFT \
4014 0
4015 /* HWRM Asynchronous Event Information */
4016 #define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT \
4017 UINT32_C(0x2e)
4018 #define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_TYPE_LAST \
4019 HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT
4020 /* Identifiers of events. */
4021 uint16_t event_id;
4022 /* Port PHY configuration change */
4023 #define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_ID_PORT_PHY_CFG_CHANGE \
4024 UINT32_C(0x7)
4025 #define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_ID_LAST \
4026 HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_ID_PORT_PHY_CFG_CHANGE
4027 /* Event specific data */
4028 uint32_t event_data2;
4029 uint8_t opaque_v;
4030 /*
4031 * This value is written by the NIC such that it will be different
4032 * for each pass through the completion queue. The even passes
4033 * will write 1. The odd passes will write 0.
4034 */
4035 #define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_V \
4036 UINT32_C(0x1)
4037 /* opaque is 7 b */
4038 #define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_OPAQUE_MASK \
4039 UINT32_C(0xfe)
4040 #define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_OPAQUE_SFT 1
4041 /* 8-lsb timestamp from POR (100-msec resolution) */
4042 uint8_t timestamp_lo;
4043 /* 16-lsb timestamp from POR (100-msec resolution) */
4044 uint16_t timestamp_hi;
4045 /* Event specific data */
4046 uint32_t event_data1;
4047 /* PORT ID */
4048 #define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_DATA1_PORT_ID_MASK \
4049 UINT32_C(0xffff)
4050 #define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_DATA1_PORT_ID_SFT \
4051 0
4052 /*
4053 * If set to 1, it indicates that the FEC
4054 * configuration on the port has changed.
4055 * If set to 0, then there is no change in FEC configuration.
4056 */
4057 #define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_DATA1_FEC_CFG_CHANGE \
4058 UINT32_C(0x10000)
4059 /*
4060 * If set to 1, it indicates that the EEE configuration
4061 * on the port has changed.
4062 * If set to 0, then there is no change in EEE configuration
4063 * on the port.
4064 */
4065 #define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_DATA1_EEE_CFG_CHANGE \
4066 UINT32_C(0x20000)
4067 /*
4068 * If set to 1, it indicates that the pause configuration
4069 * on the PHY has changed.
4070 * If set to 0, then there is no change in the pause
4071 * configuration on the PHY.
4072 */
4073 #define HWRM_ASYNC_EVENT_CMPL_PORT_PHY_CFG_CHANGE_EVENT_DATA1_PAUSE_CFG_CHANGE \
4074 UINT32_C(0x40000)
4075} __attribute__((packed));
4076
4077/* hwrm_async_event_cmpl_reset_notify (size:128b/16B) */
4078struct hwrm_async_event_cmpl_reset_notify {
4079 uint16_t type;
4080 /*
4081 * This field indicates the exact type of the completion.
4082 * By convention, the LSB identifies the length of the
4083 * record in 16B units. Even values indicate 16B
4084 * records. Odd values indicate 32B
4085 * records.
4086 */
4087 #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_TYPE_MASK \
4088 UINT32_C(0x3f)
4089 #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_TYPE_SFT 0
4090 /* HWRM Asynchronous Event Information */
4091 #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_TYPE_HWRM_ASYNC_EVENT \
4092 UINT32_C(0x2e)
4093 #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_TYPE_LAST \
4094 HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_TYPE_HWRM_ASYNC_EVENT
4095 /* Identifiers of events. */
4096 uint16_t event_id;
4097 /* Notify clients of imminent reset. */
4098 #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_ID_RESET_NOTIFY \
4099 UINT32_C(0x8)
4100 #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_ID_LAST \
4101 HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_ID_RESET_NOTIFY
4102 /* Event specific data */
4103 uint32_t event_data2;
4104 uint8_t opaque_v;
4105 /*
4106 * This value is written by the NIC such that it will be different
4107 * for each pass through the completion queue. The even passes
4108 * will write 1. The odd passes will write 0.
4109 */
4110 #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_V UINT32_C(0x1)
4111 /* opaque is 7 b */
4112 #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_OPAQUE_MASK UINT32_C(0xfe)
4113 #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_OPAQUE_SFT 1
4114 /* 8-lsb timestamp from POR (100-msec resolution) */
4115 uint8_t timestamp_lo;
4116 /* 16-lsb timestamp from POR (100-msec resolution) */
4117 uint16_t timestamp_hi;
4118 /* Event specific data */
4119 uint32_t event_data1;
4120 /* Indicates driver action requested */
4121 #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_DRIVER_ACTION_MASK \
4122 UINT32_C(0xff)
4123 #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_DRIVER_ACTION_SFT \
4124 0
4125 /*
4126 * If set to 1, it indicates that the l2 client should
4127 * stop sending in band traffic to Nitro.
4128 * if set to 0, there is no change in L2 client behavior.
4129 */
4130 #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_DRIVER_ACTION_DRIVER_STOP_TX_QUEUE \
4131 UINT32_C(0x1)
4132 /*
4133 * If set to 1, it indicates that the L2 client should
4134 * bring down the interface.
4135 * If set to 0, then there is no change in L2 client behavior.
4136 */
4137 #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_DRIVER_ACTION_DRIVER_IFDOWN \
4138 UINT32_C(0x2)
4139 #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_DRIVER_ACTION_LAST \
4140 HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_DRIVER_ACTION_DRIVER_IFDOWN
4141 /* Indicates reason for reset. */
4142 #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_MASK \
4143 UINT32_C(0xff00)
4144 #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_SFT \
4145 8
4146 /* A management client has requested reset. */
4147 #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_MANAGEMENT_RESET_REQUEST \
4148 (UINT32_C(0x1) << 8)
4149 /* A fatal firmware exception has occurred. */
4150 #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_FW_EXCEPTION_FATAL \
4151 (UINT32_C(0x2) << 8)
4152 /* A non-fatal firmware exception has occurred. */
4153 #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_FW_EXCEPTION_NON_FATAL \
4154 (UINT32_C(0x3) << 8)
4155 #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_LAST \
4156 HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_FW_EXCEPTION_NON_FATAL
4157 /*
4158 * Minimum time before driver should attempt access - units 100ms ticks.
4159 * Range 0-65535
4160 */
4161 #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_DELAY_IN_100MS_TICKS_MASK \
4162 UINT32_C(0xffff0000)
4163 #define HWRM_ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_DELAY_IN_100MS_TICKS_SFT \
4164 16
4165} __attribute__((packed));
4166
4167/* hwrm_async_event_cmpl_func_drvr_unload (size:128b/16B) */
4168struct hwrm_async_event_cmpl_func_drvr_unload {
4169 uint16_t type;
4170 /*
4171 * This field indicates the exact type of the completion.
4172 * By convention, the LSB identifies the length of the
4173 * record in 16B units. Even values indicate 16B
4174 * records. Odd values indicate 32B
4175 * records.
4176 */
4177 #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_TYPE_MASK \
4178 UINT32_C(0x3f)
4179 #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_TYPE_SFT 0
4180 /* HWRM Asynchronous Event Information */
4181 #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_TYPE_HWRM_ASYNC_EVENT \
4182 UINT32_C(0x2e)
4183 #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_TYPE_LAST \
4184 HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_TYPE_HWRM_ASYNC_EVENT
4185 /* Identifiers of events. */
4186 uint16_t event_id;
4187 /* Function driver unloaded */
4188 #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_EVENT_ID_FUNC_DRVR_UNLOAD \
4189 UINT32_C(0x10)
4190 #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_EVENT_ID_LAST \
4191 HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_EVENT_ID_FUNC_DRVR_UNLOAD
4192 /* Event specific data */
4193 uint32_t event_data2;
4194 uint8_t opaque_v;
4195 /*
4196 * This value is written by the NIC such that it will be different
4197 * for each pass through the completion queue. The even passes
4198 * will write 1. The odd passes will write 0.
4199 */
4200 #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_V UINT32_C(0x1)
4201 /* opaque is 7 b */
4202 #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_OPAQUE_MASK \
4203 UINT32_C(0xfe)
4204 #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_OPAQUE_SFT 1
4205 /* 8-lsb timestamp from POR (100-msec resolution) */
4206 uint8_t timestamp_lo;
4207 /* 16-lsb timestamp from POR (100-msec resolution) */
4208 uint16_t timestamp_hi;
4209 /* Event specific data */
4210 uint32_t event_data1;
4211 /* Function ID */
4212 #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_EVENT_DATA1_FUNC_ID_MASK \
4213 UINT32_C(0xffff)
4214 #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_UNLOAD_EVENT_DATA1_FUNC_ID_SFT \
4215 0
4216} __attribute__((packed));
4217
4218/* hwrm_async_event_cmpl_func_drvr_load (size:128b/16B) */
4219struct hwrm_async_event_cmpl_func_drvr_load {
4220 uint16_t type;
4221 /*
4222 * This field indicates the exact type of the completion.
4223 * By convention, the LSB identifies the length of the
4224 * record in 16B units. Even values indicate 16B
4225 * records. Odd values indicate 32B
4226 * records.
4227 */
4228 #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_TYPE_MASK \
4229 UINT32_C(0x3f)
4230 #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_TYPE_SFT 0
4231 /* HWRM Asynchronous Event Information */
4232 #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_TYPE_HWRM_ASYNC_EVENT \
4233 UINT32_C(0x2e)
4234 #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_TYPE_LAST \
4235 HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_TYPE_HWRM_ASYNC_EVENT
4236 /* Identifiers of events. */
4237 uint16_t event_id;
4238 /* Function driver loaded */
4239 #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_EVENT_ID_FUNC_DRVR_LOAD \
4240 UINT32_C(0x11)
4241 #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_EVENT_ID_LAST \
4242 HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_EVENT_ID_FUNC_DRVR_LOAD
4243 /* Event specific data */
4244 uint32_t event_data2;
4245 uint8_t opaque_v;
4246 /*
4247 * This value is written by the NIC such that it will be different
4248 * for each pass through the completion queue. The even passes
4249 * will write 1. The odd passes will write 0.
4250 */
4251 #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_V UINT32_C(0x1)
4252 /* opaque is 7 b */
4253 #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_OPAQUE_MASK UINT32_C(0xfe)
4254 #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_OPAQUE_SFT 1
4255 /* 8-lsb timestamp from POR (100-msec resolution) */
4256 uint8_t timestamp_lo;
4257 /* 16-lsb timestamp from POR (100-msec resolution) */
4258 uint16_t timestamp_hi;
4259 /* Event specific data */
4260 uint32_t event_data1;
4261 /* Function ID */
4262 #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_EVENT_DATA1_FUNC_ID_MASK \
4263 UINT32_C(0xffff)
4264 #define HWRM_ASYNC_EVENT_CMPL_FUNC_DRVR_LOAD_EVENT_DATA1_FUNC_ID_SFT 0
4265} __attribute__((packed));
4266
4267/* hwrm_async_event_cmpl_func_flr_proc_cmplt (size:128b/16B) */
4268struct hwrm_async_event_cmpl_func_flr_proc_cmplt {
4269 uint16_t type;
4270 /*
4271 * This field indicates the exact type of the completion.
4272 * By convention, the LSB identifies the length of the
4273 * record in 16B units. Even values indicate 16B
4274 * records. Odd values indicate 32B
4275 * records.
4276 */
4277 #define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_TYPE_MASK \
4278 UINT32_C(0x3f)
4279 #define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_TYPE_SFT \
4280 0
4281 /* HWRM Asynchronous Event Information */
4282 #define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_TYPE_HWRM_ASYNC_EVENT \
4283 UINT32_C(0x2e)
4284 #define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_TYPE_LAST \
4285 HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_TYPE_HWRM_ASYNC_EVENT
4286 /* Identifiers of events. */
4287 uint16_t event_id;
4288 /* Function FLR related processing has completed */
4289 #define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_EVENT_ID_FUNC_FLR_PROC_CMPLT \
4290 UINT32_C(0x12)
4291 #define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_EVENT_ID_LAST \
4292 HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_EVENT_ID_FUNC_FLR_PROC_CMPLT
4293 /* Event specific data */
4294 uint32_t event_data2;
4295 uint8_t opaque_v;
4296 /*
4297 * This value is written by the NIC such that it will be different
4298 * for each pass through the completion queue. The even passes
4299 * will write 1. The odd passes will write 0.
4300 */
4301 #define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_V \
4302 UINT32_C(0x1)
4303 /* opaque is 7 b */
4304 #define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_OPAQUE_MASK \
4305 UINT32_C(0xfe)
4306 #define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_OPAQUE_SFT 1
4307 /* 8-lsb timestamp from POR (100-msec resolution) */
4308 uint8_t timestamp_lo;
4309 /* 16-lsb timestamp from POR (100-msec resolution) */
4310 uint16_t timestamp_hi;
4311 /* Event specific data */
4312 uint32_t event_data1;
4313 /* Function ID */
4314 #define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_EVENT_DATA1_FUNC_ID_MASK \
4315 UINT32_C(0xffff)
4316 #define HWRM_ASYNC_EVENT_CMPL_FUNC_FLR_PROC_CMPLT_EVENT_DATA1_FUNC_ID_SFT \
4317 0
4318} __attribute__((packed));
4319
4320/* hwrm_async_event_cmpl_pf_drvr_unload (size:128b/16B) */
4321struct hwrm_async_event_cmpl_pf_drvr_unload {
4322 uint16_t type;
4323 /*
4324 * This field indicates the exact type of the completion.
4325 * By convention, the LSB identifies the length of the
4326 * record in 16B units. Even values indicate 16B
4327 * records. Odd values indicate 32B
4328 * records.
4329 */
4330 #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_TYPE_MASK \
4331 UINT32_C(0x3f)
4332 #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_TYPE_SFT 0
4333 /* HWRM Asynchronous Event Information */
4334 #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_TYPE_HWRM_ASYNC_EVENT \
4335 UINT32_C(0x2e)
4336 #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_TYPE_LAST \
4337 HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_TYPE_HWRM_ASYNC_EVENT
4338 /* Identifiers of events. */
4339 uint16_t event_id;
4340 /* PF driver unloaded */
4341 #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_ID_PF_DRVR_UNLOAD \
4342 UINT32_C(0x20)
4343 #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_ID_LAST \
4344 HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_ID_PF_DRVR_UNLOAD
4345 /* Event specific data */
4346 uint32_t event_data2;
4347 uint8_t opaque_v;
4348 /*
4349 * This value is written by the NIC such that it will be different
4350 * for each pass through the completion queue. The even passes
4351 * will write 1. The odd passes will write 0.
4352 */
4353 #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_V UINT32_C(0x1)
4354 /* opaque is 7 b */
4355 #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_OPAQUE_MASK UINT32_C(0xfe)
4356 #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_OPAQUE_SFT 1
4357 /* 8-lsb timestamp from POR (100-msec resolution) */
4358 uint8_t timestamp_lo;
4359 /* 16-lsb timestamp from POR (100-msec resolution) */
4360 uint16_t timestamp_hi;
4361 /* Event specific data */
4362 uint32_t event_data1;
4363 /* PF ID */
4364 #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_DATA1_FUNC_ID_MASK \
4365 UINT32_C(0xffff)
4366 #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_DATA1_FUNC_ID_SFT 0
4367 /* Indicates the physical port this pf belongs to */
4368 #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_DATA1_PORT_MASK \
4369 UINT32_C(0x70000)
4370 #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_UNLOAD_EVENT_DATA1_PORT_SFT 16
4371} __attribute__((packed));
4372
4373/* hwrm_async_event_cmpl_pf_drvr_load (size:128b/16B) */
4374struct hwrm_async_event_cmpl_pf_drvr_load {
4375 uint16_t type;
4376 /*
4377 * This field indicates the exact type of the completion.
4378 * By convention, the LSB identifies the length of the
4379 * record in 16B units. Even values indicate 16B
4380 * records. Odd values indicate 32B
4381 * records.
4382 */
4383 #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_TYPE_MASK \
4384 UINT32_C(0x3f)
4385 #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_TYPE_SFT 0
4386 /* HWRM Asynchronous Event Information */
4387 #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_TYPE_HWRM_ASYNC_EVENT \
4388 UINT32_C(0x2e)
4389 #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_TYPE_LAST \
4390 HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_TYPE_HWRM_ASYNC_EVENT
4391 /* Identifiers of events. */
4392 uint16_t event_id;
4393 /* PF driver loaded */
4394 #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_EVENT_ID_PF_DRVR_LOAD \
4395 UINT32_C(0x21)
4396 #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_EVENT_ID_LAST \
4397 HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_EVENT_ID_PF_DRVR_LOAD
4398 /* Event specific data */
4399 uint32_t event_data2;
4400 uint8_t opaque_v;
4401 /*
4402 * This value is written by the NIC such that it will be different
4403 * for each pass through the completion queue. The even passes
4404 * will write 1. The odd passes will write 0.
4405 */
4406 #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_V UINT32_C(0x1)
4407 /* opaque is 7 b */
4408 #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_OPAQUE_MASK UINT32_C(0xfe)
4409 #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_OPAQUE_SFT 1
4410 /* 8-lsb timestamp from POR (100-msec resolution) */
4411 uint8_t timestamp_lo;
4412 /* 16-lsb timestamp from POR (100-msec resolution) */
4413 uint16_t timestamp_hi;
4414 /* Event specific data */
4415 uint32_t event_data1;
4416 /* PF ID */
4417 #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_EVENT_DATA1_FUNC_ID_MASK \
4418 UINT32_C(0xffff)
4419 #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_EVENT_DATA1_FUNC_ID_SFT 0
4420 /* Indicates the physical port this pf belongs to */
4421 #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_EVENT_DATA1_PORT_MASK \
4422 UINT32_C(0x70000)
4423 #define HWRM_ASYNC_EVENT_CMPL_PF_DRVR_LOAD_EVENT_DATA1_PORT_SFT 16
4424} __attribute__((packed));
4425
4426/* hwrm_async_event_cmpl_vf_flr (size:128b/16B) */
4427struct hwrm_async_event_cmpl_vf_flr {
4428 uint16_t type;
4429 /*
4430 * This field indicates the exact type of the completion.
4431 * By convention, the LSB identifies the length of the
4432 * record in 16B units. Even values indicate 16B
4433 * records. Odd values indicate 32B
4434 * records.
4435 */
4436 #define HWRM_ASYNC_EVENT_CMPL_VF_FLR_TYPE_MASK \
4437 UINT32_C(0x3f)
4438 #define HWRM_ASYNC_EVENT_CMPL_VF_FLR_TYPE_SFT 0
4439 /* HWRM Asynchronous Event Information */
4440 #define HWRM_ASYNC_EVENT_CMPL_VF_FLR_TYPE_HWRM_ASYNC_EVENT \
4441 UINT32_C(0x2e)
4442 #define HWRM_ASYNC_EVENT_CMPL_VF_FLR_TYPE_LAST \
4443 HWRM_ASYNC_EVENT_CMPL_VF_FLR_TYPE_HWRM_ASYNC_EVENT
4444 /* Identifiers of events. */
4445 uint16_t event_id;
4446 /* VF Function Level Reset (FLR) */
4447 #define HWRM_ASYNC_EVENT_CMPL_VF_FLR_EVENT_ID_VF_FLR UINT32_C(0x30)
4448 #define HWRM_ASYNC_EVENT_CMPL_VF_FLR_EVENT_ID_LAST \
4449 HWRM_ASYNC_EVENT_CMPL_VF_FLR_EVENT_ID_VF_FLR
4450 /* Event specific data */
4451 uint32_t event_data2;
4452 uint8_t opaque_v;
4453 /*
4454 * This value is written by the NIC such that it will be different
4455 * for each pass through the completion queue. The even passes
4456 * will write 1. The odd passes will write 0.
4457 */
4458 #define HWRM_ASYNC_EVENT_CMPL_VF_FLR_V UINT32_C(0x1)
4459 /* opaque is 7 b */
4460 #define HWRM_ASYNC_EVENT_CMPL_VF_FLR_OPAQUE_MASK UINT32_C(0xfe)
4461 #define HWRM_ASYNC_EVENT_CMPL_VF_FLR_OPAQUE_SFT 1
4462 /* 8-lsb timestamp from POR (100-msec resolution) */
4463 uint8_t timestamp_lo;
4464 /* 16-lsb timestamp from POR (100-msec resolution) */
4465 uint16_t timestamp_hi;
4466 /* Event specific data */
4467 uint32_t event_data1;
4468 /* VF ID */
4469 #define HWRM_ASYNC_EVENT_CMPL_VF_FLR_EVENT_DATA1_VF_ID_MASK \
4470 UINT32_C(0xffff)
4471 #define HWRM_ASYNC_EVENT_CMPL_VF_FLR_EVENT_DATA1_VF_ID_SFT 0
4472 /* Indicates the physical function this event occured on. */
4473 #define HWRM_ASYNC_EVENT_CMPL_VF_FLR_EVENT_DATA1_PF_ID_MASK \
4474 UINT32_C(0xff0000)
4475 #define HWRM_ASYNC_EVENT_CMPL_VF_FLR_EVENT_DATA1_PF_ID_SFT 16
4476} __attribute__((packed));
4477
4478/* hwrm_async_event_cmpl_vf_mac_addr_change (size:128b/16B) */
4479struct hwrm_async_event_cmpl_vf_mac_addr_change {
4480 uint16_t type;
4481 /*
4482 * This field indicates the exact type of the completion.
4483 * By convention, the LSB identifies the length of the
4484 * record in 16B units. Even values indicate 16B
4485 * records. Odd values indicate 32B
4486 * records.
4487 */
4488 #define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_TYPE_MASK \
4489 UINT32_C(0x3f)
4490 #define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_TYPE_SFT 0
4491 /* HWRM Asynchronous Event Information */
4492 #define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_TYPE_HWRM_ASYNC_EVENT \
4493 UINT32_C(0x2e)
4494 #define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_TYPE_LAST \
4495 HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_TYPE_HWRM_ASYNC_EVENT
4496 /* Identifiers of events. */
4497 uint16_t event_id;
4498 /* VF MAC Address Change */
4499 #define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_EVENT_ID_VF_MAC_ADDR_CHANGE \
4500 UINT32_C(0x31)
4501 #define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_EVENT_ID_LAST \
4502 HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_EVENT_ID_VF_MAC_ADDR_CHANGE
4503 /* Event specific data */
4504 uint32_t event_data2;
4505 uint8_t opaque_v;
4506 /*
4507 * This value is written by the NIC such that it will be different
4508 * for each pass through the completion queue. The even passes
4509 * will write 1. The odd passes will write 0.
4510 */
4511 #define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_V \
4512 UINT32_C(0x1)
4513 /* opaque is 7 b */
4514 #define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_OPAQUE_MASK \
4515 UINT32_C(0xfe)
4516 #define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_OPAQUE_SFT 1
4517 /* 8-lsb timestamp from POR (100-msec resolution) */
4518 uint8_t timestamp_lo;
4519 /* 16-lsb timestamp from POR (100-msec resolution) */
4520 uint16_t timestamp_hi;
4521 /* Event specific data */
4522 uint32_t event_data1;
4523 /* VF ID */
4524 #define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_EVENT_DATA1_VF_ID_MASK \
4525 UINT32_C(0xffff)
4526 #define HWRM_ASYNC_EVENT_CMPL_VF_MAC_ADDR_CHANGE_EVENT_DATA1_VF_ID_SFT \
4527 0
4528} __attribute__((packed));
4529
4530/* hwrm_async_event_cmpl_pf_vf_comm_status_change (size:128b/16B) */
4531struct hwrm_async_event_cmpl_pf_vf_comm_status_change {
4532 uint16_t type;
4533 /*
4534 * This field indicates the exact type of the completion.
4535 * By convention, the LSB identifies the length of the
4536 * record in 16B units. Even values indicate 16B
4537 * records. Odd values indicate 32B
4538 * records.
4539 */
4540 #define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_TYPE_MASK \
4541 UINT32_C(0x3f)
4542 #define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_TYPE_SFT \
4543 0
4544 /* HWRM Asynchronous Event Information */
4545 #define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_TYPE_HWRM_ASYNC_EVENT \
4546 UINT32_C(0x2e)
4547 #define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_TYPE_LAST \
4548 HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_TYPE_HWRM_ASYNC_EVENT
4549 /* Identifiers of events. */
4550 uint16_t event_id;
4551 /* PF-VF communication channel status change. */
4552 #define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_EVENT_ID_PF_VF_COMM_STATUS_CHANGE \
4553 UINT32_C(0x32)
4554 #define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_EVENT_ID_LAST \
4555 HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_EVENT_ID_PF_VF_COMM_STATUS_CHANGE
4556 /* Event specific data */
4557 uint32_t event_data2;
4558 uint8_t opaque_v;
4559 /*
4560 * This value is written by the NIC such that it will be different
4561 * for each pass through the completion queue. The even passes
4562 * will write 1. The odd passes will write 0.
4563 */
4564 #define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_V \
4565 UINT32_C(0x1)
4566 /* opaque is 7 b */
4567 #define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_OPAQUE_MASK \
4568 UINT32_C(0xfe)
4569 #define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_OPAQUE_SFT 1
4570 /* 8-lsb timestamp from POR (100-msec resolution) */
4571 uint8_t timestamp_lo;
4572 /* 16-lsb timestamp from POR (100-msec resolution) */
4573 uint16_t timestamp_hi;
4574 /* Event specific data */
4575 uint32_t event_data1;
4576 /*
4577 * If this bit is set to 1, then it indicates that the PF-VF
4578 * communication was lost and it is established.
4579 * If this bit set to 0, then it indicates that the PF-VF
4580 * communication was established and it is lost.
4581 */
4582 #define HWRM_ASYNC_EVENT_CMPL_PF_VF_COMM_STATUS_CHANGE_EVENT_DATA1_COMM_ESTABLISHED \
4583 UINT32_C(0x1)
4584} __attribute__((packed));
4585
4586/* hwrm_async_event_cmpl_vf_cfg_change (size:128b/16B) */
4587struct hwrm_async_event_cmpl_vf_cfg_change {
4588 uint16_t type;
4589 /*
4590 * This field indicates the exact type of the completion.
4591 * By convention, the LSB identifies the length of the
4592 * record in 16B units. Even values indicate 16B
4593 * records. Odd values indicate 32B
4594 * records.
4595 */
4596 #define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_TYPE_MASK \
4597 UINT32_C(0x3f)
4598 #define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_TYPE_SFT 0
4599 /* HWRM Asynchronous Event Information */
4600 #define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT \
4601 UINT32_C(0x2e)
4602 #define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_TYPE_LAST \
4603 HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_TYPE_HWRM_ASYNC_EVENT
4604 /* Identifiers of events. */
4605 uint16_t event_id;
4606 /* VF Configuration Change */
4607 #define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_ID_VF_CFG_CHANGE \
4608 UINT32_C(0x33)
4609 #define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_ID_LAST \
4610 HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_ID_VF_CFG_CHANGE
4611 /* Event specific data */
4612 uint32_t event_data2;
4613 uint8_t opaque_v;
4614 /*
4615 * This value is written by the NIC such that it will be different
4616 * for each pass through the completion queue. The even passes
4617 * will write 1. The odd passes will write 0.
4618 */
4619 #define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_V UINT32_C(0x1)
4620 /* opaque is 7 b */
4621 #define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_OPAQUE_MASK UINT32_C(0xfe)
4622 #define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_OPAQUE_SFT 1
4623 /* 8-lsb timestamp from POR (100-msec resolution) */
4624 uint8_t timestamp_lo;
4625 /* 16-lsb timestamp from POR (100-msec resolution) */
4626 uint16_t timestamp_hi;
4627 /*
4628 * Each flag provided in this field indicates a specific VF
4629 * configuration change. At least one of these flags shall be set to 1
4630 * when an asynchronous event completion of this type is provided
4631 * by the HWRM.
4632 */
4633 uint32_t event_data1;
4634 /*
4635 * If this bit is set to 1, then the value of MTU
4636 * was changed on this VF.
4637 * If set to 0, then this bit should be ignored.
4638 */
4639 #define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_DATA1_MTU_CHANGE \
4640 UINT32_C(0x1)
4641 /*
4642 * If this bit is set to 1, then the value of MRU
4643 * was changed on this VF.
4644 * If set to 0, then this bit should be ignored.
4645 */
4646 #define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_DATA1_MRU_CHANGE \
4647 UINT32_C(0x2)
4648 /*
4649 * If this bit is set to 1, then the value of default MAC
4650 * address was changed on this VF.
4651 * If set to 0, then this bit should be ignored.
4652 */
4653 #define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_DATA1_DFLT_MAC_ADDR_CHANGE \
4654 UINT32_C(0x4)
4655 /*
4656 * If this bit is set to 1, then the value of default VLAN
4657 * was changed on this VF.
4658 * If set to 0, then this bit should be ignored.
4659 */
4660 #define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_DATA1_DFLT_VLAN_CHANGE \
4661 UINT32_C(0x8)
4662 /*
4663 * If this bit is set to 1, then the value of trusted VF enable
4664 * was changed on this VF.
4665 * If set to 0, then this bit should be ignored.
4666 */
4667 #define HWRM_ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_DATA1_TRUSTED_VF_CFG_CHANGE \
4668 UINT32_C(0x10)
4669} __attribute__((packed));
4670
4671/* hwrm_async_event_cmpl_llfc_pfc_change (size:128b/16B) */
4672struct hwrm_async_event_cmpl_llfc_pfc_change {
4673 uint16_t type;
4674 /*
4675 * This field indicates the exact type of the completion.
4676 * By convention, the LSB identifies the length of the
4677 * record in 16B units. Even values indicate 16B
4678 * records. Odd values indicate 32B
4679 * records.
4680 */
4681 #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_TYPE_MASK \
4682 UINT32_C(0x3f)
4683 #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_TYPE_SFT 0
4684 /* HWRM Asynchronous Event Information */
4685 #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_TYPE_HWRM_ASYNC_EVENT \
4686 UINT32_C(0x2e)
4687 #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_TYPE_LAST \
4688 HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_TYPE_HWRM_ASYNC_EVENT
4689 /* unused1 is 10 b */
4690 #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_UNUSED1_MASK \
4691 UINT32_C(0xffc0)
4692 #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_UNUSED1_SFT 6
4693 /* Identifiers of events. */
4694 uint16_t event_id;
4695 /* LLFC/PFC Configuration Change */
4696 #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_ID_LLFC_PFC_CHANGE \
4697 UINT32_C(0x34)
4698 #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_ID_LAST \
4699 HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_ID_LLFC_PFC_CHANGE
4700 /* Event specific data */
4701 uint32_t event_data2;
4702 uint8_t opaque_v;
4703 /*
4704 * This value is written by the NIC such that it will be different
4705 * for each pass through the completion queue. The even passes
4706 * will write 1. The odd passes will write 0.
4707 */
4708 #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_V UINT32_C(0x1)
4709 /* opaque is 7 b */
4710 #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_OPAQUE_MASK \
4711 UINT32_C(0xfe)
4712 #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_OPAQUE_SFT 1
4713 /* 8-lsb timestamp from POR (100-msec resolution) */
4714 uint8_t timestamp_lo;
4715 /* 16-lsb timestamp from POR (100-msec resolution) */
4716 uint16_t timestamp_hi;
4717 /* Event specific data */
4718 uint32_t event_data1;
4719 /* Indicates llfc pfc status change */
4720 #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_LLFC_PFC_MASK \
4721 UINT32_C(0x3)
4722 #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_LLFC_PFC_SFT \
4723 0
4724 /*
4725 * If this field set to 1, then it indicates that llfc is
4726 * enabled.
4727 */
4728 #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_LLFC_PFC_LLFC \
4729 UINT32_C(0x1)
4730 /*
4731 * If this field is set to 2, then it indicates that pfc
4732 * is enabled.
4733 */
4734 #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_LLFC_PFC_PFC \
4735 UINT32_C(0x2)
4736 #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_LLFC_PFC_LAST \
4737 HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_LLFC_PFC_PFC
4738 /* Indicates the physical port this llfc pfc change occur */
4739 #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_PORT_MASK \
4740 UINT32_C(0x1c)
4741 #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_PORT_SFT \
4742 2
4743 /* PORT ID */
4744 #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_PORT_ID_MASK \
4745 UINT32_C(0x1fffe0)
4746 #define HWRM_ASYNC_EVENT_CMPL_LLFC_PFC_CHANGE_EVENT_DATA1_PORT_ID_SFT \
4747 5
4748} __attribute__((packed));
4749
4750/* hwrm_async_event_cmpl_default_vnic_change (size:128b/16B) */
4751struct hwrm_async_event_cmpl_default_vnic_change {
4752 uint16_t type;
4753 /*
4754 * This field indicates the exact type of the completion.
4755 * By convention, the LSB identifies the length of the
4756 * record in 16B units. Even values indicate 16B
4757 * records. Odd values indicate 32B
4758 * records.
4759 */
4760 #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_TYPE_MASK \
4761 UINT32_C(0x3f)
4762 #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_TYPE_SFT \
4763 0
4764 /* HWRM Asynchronous Event Information */
4765 #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_TYPE_HWRM_ASYNC_EVENT \
4766 UINT32_C(0x2e)
4767 #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_TYPE_LAST \
4768 HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_TYPE_HWRM_ASYNC_EVENT
4769 /* unused1 is 10 b */
4770 #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_UNUSED1_MASK \
4771 UINT32_C(0xffc0)
4772 #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_UNUSED1_SFT \
4773 6
4774 /* Identifiers of events. */
4775 uint16_t event_id;
4776 /* Notification of a default vnic allocaiton or free */
4777 #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_ID_ALLOC_FREE_NOTIFICATION \
4778 UINT32_C(0x35)
4779 #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_ID_LAST \
4780 HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_ID_ALLOC_FREE_NOTIFICATION
4781 /* Event specific data */
4782 uint32_t event_data2;
4783 uint8_t opaque_v;
4784 /*
4785 * This value is written by the NIC such that it will be different
4786 * for each pass through the completion queue. The even passes
4787 * will write 1. The odd passes will write 0.
4788 */
4789 #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_V \
4790 UINT32_C(0x1)
4791 /* opaque is 7 b */
4792 #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_OPAQUE_MASK \
4793 UINT32_C(0xfe)
4794 #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_OPAQUE_SFT 1
4795 /* 8-lsb timestamp from POR (100-msec resolution) */
4796 uint8_t timestamp_lo;
4797 /* 16-lsb timestamp from POR (100-msec resolution) */
4798 uint16_t timestamp_hi;
4799 /* Event specific data */
4800 uint32_t event_data1;
4801 /* Indicates default vnic configuration change */
4802 #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_MASK \
4803 UINT32_C(0x3)
4804 #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_SFT \
4805 0
4806 /*
4807 * If this field is set to 1, then it indicates that
4808 * a default VNIC has been allocate.
4809 */
4810 #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_DEF_VNIC_ALLOC \
4811 UINT32_C(0x1)
4812 /*
4813 * If this field is set to 2, then it indicates that
4814 * a default VNIC has been freed.
4815 */
4816 #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_DEF_VNIC_FREE \
4817 UINT32_C(0x2)
4818 #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_LAST \
4819 HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_DEF_VNIC_FREE
4820 /* Indicates the physical function this event occured on. */
4821 #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_PF_ID_MASK \
4822 UINT32_C(0x3fc)
4823 #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_PF_ID_SFT \
4824 2
4825 /* Indicates the virtual function this event occured on */
4826 #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_VF_ID_MASK \
4827 UINT32_C(0x3fffc00)
4828 #define HWRM_ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_VF_ID_SFT \
4829 10
4830} __attribute__((packed));
4831
4832/* hwrm_async_event_cmpl_hwrm_error (size:128b/16B) */
4833struct hwrm_async_event_cmpl_hwrm_error {
4834 uint16_t type;
4835 /*
4836 * This field indicates the exact type of the completion.
4837 * By convention, the LSB identifies the length of the
4838 * record in 16B units. Even values indicate 16B
4839 * records. Odd values indicate 32B
4840 * records.
4841 */
4842 #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_TYPE_MASK \
4843 UINT32_C(0x3f)
4844 #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_TYPE_SFT 0
4845 /* HWRM Asynchronous Event Information */
4846 #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_TYPE_HWRM_ASYNC_EVENT \
4847 UINT32_C(0x2e)
4848 #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_TYPE_LAST \
4849 HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_TYPE_HWRM_ASYNC_EVENT
4850 /* Identifiers of events. */
4851 uint16_t event_id;
4852 /* HWRM Error */
4853 #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_ID_HWRM_ERROR \
4854 UINT32_C(0xff)
4855 #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_ID_LAST \
4856 HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_ID_HWRM_ERROR
4857 /* Event specific data */
4858 uint32_t event_data2;
4859 /* Severity of HWRM Error */
4860 #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_MASK \
4861 UINT32_C(0xff)
4862 #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_SFT 0
4863 /* Warning */
4864 #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_WARNING \
4865 UINT32_C(0x0)
4866 /* Non-fatal Error */
4867 #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_NONFATAL \
4868 UINT32_C(0x1)
4869 /* Fatal Error */
4870 #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_FATAL \
4871 UINT32_C(0x2)
4872 #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_LAST \
4873 HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA2_SEVERITY_FATAL
4874 uint8_t opaque_v;
4875 /*
4876 * This value is written by the NIC such that it will be different
4877 * for each pass through the completion queue. The even passes
4878 * will write 1. The odd passes will write 0.
4879 */
4880 #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_V UINT32_C(0x1)
4881 /* opaque is 7 b */
4882 #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_OPAQUE_MASK UINT32_C(0xfe)
4883 #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_OPAQUE_SFT 1
4884 /* 8-lsb timestamp from POR (100-msec resolution) */
4885 uint8_t timestamp_lo;
4886 /* 16-lsb timestamp from POR (100-msec resolution) */
4887 uint16_t timestamp_hi;
4888 /* Event specific data */
4889 uint32_t event_data1;
4890 /* Time stamp for error event */
4891 #define HWRM_ASYNC_EVENT_CMPL_HWRM_ERROR_EVENT_DATA1_TIMESTAMP \
4892 UINT32_C(0x1)
4893} __attribute__((packed));
4894
4895/*******************
4896 * hwrm_func_reset *
4897 *******************/
4898
4899
4900/* hwrm_func_reset_input (size:192b/24B) */
4901struct hwrm_func_reset_input {
4902 /* The HWRM command request type. */
4903 uint16_t req_type;
4904 /*
4905 * The completion ring to send the completion event on. This should
4906 * be the NQ ID returned from the `nq_alloc` HWRM command.
4907 */
4908 uint16_t cmpl_ring;
4909 /*
4910 * The sequence ID is used by the driver for tracking multiple
4911 * commands. This ID is treated as opaque data by the firmware and
4912 * the value is returned in the `hwrm_resp_hdr` upon completion.
4913 */
4914 uint16_t seq_id;
4915 /*
4916 * The target ID of the command:
4917 * * 0x0-0xFFF8 - The function ID
4918 * * 0xFFF8-0xFFFE - Reserved for internal processors
4919 * * 0xFFFF - HWRM
4920 */
4921 uint16_t target_id;
4922 /*
4923 * A physical address pointer pointing to a host buffer that the
4924 * command's response data will be written. This can be either a host
4925 * physical address (HPA) or a guest physical address (GPA) and must
4926 * point to a physically contiguous block of memory.
4927 */
4928 uint64_t resp_addr;
4929 uint32_t enables;
4930 /*
4931 * This bit must be '1' for the vf_id_valid field to be
4932 * configured.
4933 */
4934 #define HWRM_FUNC_RESET_INPUT_ENABLES_VF_ID_VALID UINT32_C(0x1)
4935 /*
4936 * The ID of the VF that this PF is trying to reset.
4937 * Only the parent PF shall be allowed to reset a child VF.
4938 *
4939 * A parent PF driver shall use this field only when a specific child VF
4940 * is requested to be reset.
4941 */
4942 uint16_t vf_id;
4943 /* This value indicates the level of a function reset. */
4944 uint8_t func_reset_level;
4945 /*
4946 * Reset the caller function and its children VFs (if any). If no
4947 * children functions exist, then reset the caller function only.
4948 */
4949 #define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETALL \
4950 UINT32_C(0x0)
4951 /* Reset the caller function only */
4952 #define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETME \
4953 UINT32_C(0x1)
4954 /*
4955 * Reset all children VFs of the caller function driver if the
4956 * caller is a PF driver.
4957 * It is an error to specify this level by a VF driver.
4958 * It is an error to specify this level by a PF driver with
4959 * no children VFs.
4960 */
4961 #define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETCHILDREN \
4962 UINT32_C(0x2)
4963 /*
4964 * Reset a specific VF of the caller function driver if the caller
4965 * is the parent PF driver.
4966 * It is an error to specify this level by a VF driver.
4967 * It is an error to specify this level by a PF driver that is not
4968 * the parent of the VF that is being requested to reset.
4969 */
4970 #define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETVF \
4971 UINT32_C(0x3)
4972 #define HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_LAST \
4973 HWRM_FUNC_RESET_INPUT_FUNC_RESET_LEVEL_RESETVF
4974 uint8_t unused_0;
4975} __attribute__((packed));
4976
4977/* hwrm_func_reset_output (size:128b/16B) */
4978struct hwrm_func_reset_output {
4979 /* The specific error status for the command. */
4980 uint16_t error_code;
4981 /* The HWRM command request type. */
4982 uint16_t req_type;
4983 /* The sequence ID from the original command. */
4984 uint16_t seq_id;
4985 /* The length of the response data in number of bytes. */
4986 uint16_t resp_len;
4987 uint8_t unused_0[7];
4988 /*
4989 * This field is used in Output records to indicate that the output
4990 * is completely written to RAM. This field should be read as '1'
4991 * to indicate that the output has been completely written.
4992 * When writing a command completion or response to an internal processor,
4993 * the order of writes has to be such that this field is written last.
4994 */
4995 uint8_t valid;
4996} __attribute__((packed));
4997
4998/********************
4999 * hwrm_func_getfid *
5000 ********************/
5001
5002
5003/* hwrm_func_getfid_input (size:192b/24B) */
5004struct hwrm_func_getfid_input {
5005 /* The HWRM command request type. */
5006 uint16_t req_type;
5007 /*
5008 * The completion ring to send the completion event on. This should
5009 * be the NQ ID returned from the `nq_alloc` HWRM command.
5010 */
5011 uint16_t cmpl_ring;
5012 /*
5013 * The sequence ID is used by the driver for tracking multiple
5014 * commands. This ID is treated as opaque data by the firmware and
5015 * the value is returned in the `hwrm_resp_hdr` upon completion.
5016 */
5017 uint16_t seq_id;
5018 /*
5019 * The target ID of the command:
5020 * * 0x0-0xFFF8 - The function ID
5021 * * 0xFFF8-0xFFFE - Reserved for internal processors
5022 * * 0xFFFF - HWRM
5023 */
5024 uint16_t target_id;
5025 /*
5026 * A physical address pointer pointing to a host buffer that the
5027 * command's response data will be written. This can be either a host
5028 * physical address (HPA) or a guest physical address (GPA) and must
5029 * point to a physically contiguous block of memory.
5030 */
5031 uint64_t resp_addr;
5032 uint32_t enables;
5033 /*
5034 * This bit must be '1' for the pci_id field to be
5035 * configured.
5036 */
5037 #define HWRM_FUNC_GETFID_INPUT_ENABLES_PCI_ID UINT32_C(0x1)
5038 /*
5039 * This value is the PCI ID of the queried function.
5040 * If ARI is enabled, then it is
5041 * Bus Number (8b):Function Number(8b). Otherwise, it is
5042 * Bus Number (8b):Device Number (5b):Function Number(3b).
5043 */
5044 uint16_t pci_id;
5045 uint8_t unused_0[2];
5046} __attribute__((packed));
5047
5048/* hwrm_func_getfid_output (size:128b/16B) */
5049struct hwrm_func_getfid_output {
5050 /* The specific error status for the command. */
5051 uint16_t error_code;
5052 /* The HWRM command request type. */
5053 uint16_t req_type;
5054 /* The sequence ID from the original command. */
5055 uint16_t seq_id;
5056 /* The length of the response data in number of bytes. */
5057 uint16_t resp_len;
5058 /*
5059 * FID value. This value is used to identify operations on the PCI
5060 * bus as belonging to a particular PCI function.
5061 */
5062 uint16_t fid;
5063 uint8_t unused_0[5];
5064 /*
5065 * This field is used in Output records to indicate that the output
5066 * is completely written to RAM. This field should be read as '1'
5067 * to indicate that the output has been completely written.
5068 * When writing a command completion or response to an internal processor,
5069 * the order of writes has to be such that this field is written last.
5070 */
5071 uint8_t valid;
5072} __attribute__((packed));
5073
5074/**********************
5075 * hwrm_func_vf_alloc *
5076 **********************/
5077
5078
5079/* hwrm_func_vf_alloc_input (size:192b/24B) */
5080struct hwrm_func_vf_alloc_input {
5081 /* The HWRM command request type. */
5082 uint16_t req_type;
5083 /*
5084 * The completion ring to send the completion event on. This should
5085 * be the NQ ID returned from the `nq_alloc` HWRM command.
5086 */
5087 uint16_t cmpl_ring;
5088 /*
5089 * The sequence ID is used by the driver for tracking multiple
5090 * commands. This ID is treated as opaque data by the firmware and
5091 * the value is returned in the `hwrm_resp_hdr` upon completion.
5092 */
5093 uint16_t seq_id;
5094 /*
5095 * The target ID of the command:
5096 * * 0x0-0xFFF8 - The function ID
5097 * * 0xFFF8-0xFFFE - Reserved for internal processors
5098 * * 0xFFFF - HWRM
5099 */
5100 uint16_t target_id;
5101 /*
5102 * A physical address pointer pointing to a host buffer that the
5103 * command's response data will be written. This can be either a host
5104 * physical address (HPA) or a guest physical address (GPA) and must
5105 * point to a physically contiguous block of memory.
5106 */
5107 uint64_t resp_addr;
5108 uint32_t enables;
5109 /*
5110 * This bit must be '1' for the first_vf_id field to be
5111 * configured.
5112 */
5113 #define HWRM_FUNC_VF_ALLOC_INPUT_ENABLES_FIRST_VF_ID UINT32_C(0x1)
5114 /*
5115 * This value is used to identify a Virtual Function (VF).
5116 * The scope of VF ID is local within a PF.
5117 */
5118 uint16_t first_vf_id;
5119 /* The number of virtual functions requested. */
5120 uint16_t num_vfs;
5121} __attribute__((packed));
5122
5123/* hwrm_func_vf_alloc_output (size:128b/16B) */
5124struct hwrm_func_vf_alloc_output {
5125 /* The specific error status for the command. */
5126 uint16_t error_code;
5127 /* The HWRM command request type. */
5128 uint16_t req_type;
5129 /* The sequence ID from the original command. */
5130 uint16_t seq_id;
5131 /* The length of the response data in number of bytes. */
5132 uint16_t resp_len;
5133 /* The ID of the first VF allocated. */
5134 uint16_t first_vf_id;
5135 uint8_t unused_0[5];
5136 /*
5137 * This field is used in Output records to indicate that the output
5138 * is completely written to RAM. This field should be read as '1'
5139 * to indicate that the output has been completely written.
5140 * When writing a command completion or response to an internal processor,
5141 * the order of writes has to be such that this field is written last.
5142 */
5143 uint8_t valid;
5144} __attribute__((packed));
5145
5146/*********************
5147 * hwrm_func_vf_free *
5148 *********************/
5149
5150
5151/* hwrm_func_vf_free_input (size:192b/24B) */
5152struct hwrm_func_vf_free_input {
5153 /* The HWRM command request type. */
5154 uint16_t req_type;
5155 /*
5156 * The completion ring to send the completion event on. This should
5157 * be the NQ ID returned from the `nq_alloc` HWRM command.
5158 */
5159 uint16_t cmpl_ring;
5160 /*
5161 * The sequence ID is used by the driver for tracking multiple
5162 * commands. This ID is treated as opaque data by the firmware and
5163 * the value is returned in the `hwrm_resp_hdr` upon completion.
5164 */
5165 uint16_t seq_id;
5166 /*
5167 * The target ID of the command:
5168 * * 0x0-0xFFF8 - The function ID
5169 * * 0xFFF8-0xFFFE - Reserved for internal processors
5170 * * 0xFFFF - HWRM
5171 */
5172 uint16_t target_id;
5173 /*
5174 * A physical address pointer pointing to a host buffer that the
5175 * command's response data will be written. This can be either a host
5176 * physical address (HPA) or a guest physical address (GPA) and must
5177 * point to a physically contiguous block of memory.
5178 */
5179 uint64_t resp_addr;
5180 uint32_t enables;
5181 /*
5182 * This bit must be '1' for the first_vf_id field to be
5183 * configured.
5184 */
5185 #define HWRM_FUNC_VF_FREE_INPUT_ENABLES_FIRST_VF_ID UINT32_C(0x1)
5186 /*
5187 * This value is used to identify a Virtual Function (VF).
5188 * The scope of VF ID is local within a PF.
5189 */
5190 uint16_t first_vf_id;
5191 /*
5192 * The number of virtual functions requested.
5193 * 0xFFFF - Cleanup all children of this PF.
5194 */
5195 uint16_t num_vfs;
5196} __attribute__((packed));
5197
5198/* hwrm_func_vf_free_output (size:128b/16B) */
5199struct hwrm_func_vf_free_output {
5200 /* The specific error status for the command. */
5201 uint16_t error_code;
5202 /* The HWRM command request type. */
5203 uint16_t req_type;
5204 /* The sequence ID from the original command. */
5205 uint16_t seq_id;
5206 /* The length of the response data in number of bytes. */
5207 uint16_t resp_len;
5208 uint8_t unused_0[7];
5209 /*
5210 * This field is used in Output records to indicate that the output
5211 * is completely written to RAM. This field should be read as '1'
5212 * to indicate that the output has been completely written.
5213 * When writing a command completion or response to an internal processor,
5214 * the order of writes has to be such that this field is written last.
5215 */
5216 uint8_t valid;
5217} __attribute__((packed));
5218
5219/********************
5220 * hwrm_func_vf_cfg *
5221 ********************/
5222
5223
5224/* hwrm_func_vf_cfg_input (size:448b/56B) */
5225struct hwrm_func_vf_cfg_input {
5226 /* The HWRM command request type. */
5227 uint16_t req_type;
5228 /*
5229 * The completion ring to send the completion event on. This should
5230 * be the NQ ID returned from the `nq_alloc` HWRM command.
5231 */
5232 uint16_t cmpl_ring;
5233 /*
5234 * The sequence ID is used by the driver for tracking multiple
5235 * commands. This ID is treated as opaque data by the firmware and
5236 * the value is returned in the `hwrm_resp_hdr` upon completion.
5237 */
5238 uint16_t seq_id;
5239 /*
5240 * The target ID of the command:
5241 * * 0x0-0xFFF8 - The function ID
5242 * * 0xFFF8-0xFFFE - Reserved for internal processors
5243 * * 0xFFFF - HWRM
5244 */
5245 uint16_t target_id;
5246 /*
5247 * A physical address pointer pointing to a host buffer that the
5248 * command's response data will be written. This can be either a host
5249 * physical address (HPA) or a guest physical address (GPA) and must
5250 * point to a physically contiguous block of memory.
5251 */
5252 uint64_t resp_addr;
5253 uint32_t enables;
5254 /*
5255 * This bit must be '1' for the mtu field to be
5256 * configured.
5257 */
5258 #define HWRM_FUNC_VF_CFG_INPUT_ENABLES_MTU \
5259 UINT32_C(0x1)
5260 /*
5261 * This bit must be '1' for the guest_vlan field to be
5262 * configured.
5263 */
5264 #define HWRM_FUNC_VF_CFG_INPUT_ENABLES_GUEST_VLAN \
5265 UINT32_C(0x2)
5266 /*
5267 * This bit must be '1' for the async_event_cr field to be
5268 * configured.
5269 */
5270 #define HWRM_FUNC_VF_CFG_INPUT_ENABLES_ASYNC_EVENT_CR \
5271 UINT32_C(0x4)
5272 /*
5273 * This bit must be '1' for the dflt_mac_addr field to be
5274 * configured.
5275 */
5276 #define HWRM_FUNC_VF_CFG_INPUT_ENABLES_DFLT_MAC_ADDR \
5277 UINT32_C(0x8)
5278 /*
5279 * This bit must be '1' for the num_rsscos_ctxs field to be
5280 * configured.
5281 */
5282 #define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_RSSCOS_CTXS \
5283 UINT32_C(0x10)
5284 /*
5285 * This bit must be '1' for the num_cmpl_rings field to be
5286 * configured.
5287 */
5288 #define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_CMPL_RINGS \
5289 UINT32_C(0x20)
5290 /*
5291 * This bit must be '1' for the num_tx_rings field to be
5292 * configured.
5293 */
5294 #define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_TX_RINGS \
5295 UINT32_C(0x40)
5296 /*
5297 * This bit must be '1' for the num_rx_rings field to be
5298 * configured.
5299 */
5300 #define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_RX_RINGS \
5301 UINT32_C(0x80)
5302 /*
5303 * This bit must be '1' for the num_l2_ctxs field to be
5304 * configured.
5305 */
5306 #define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_L2_CTXS \
5307 UINT32_C(0x100)
5308 /*
5309 * This bit must be '1' for the num_vnics field to be
5310 * configured.
5311 */
5312 #define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_VNICS \
5313 UINT32_C(0x200)
5314 /*
5315 * This bit must be '1' for the num_stat_ctxs field to be
5316 * configured.
5317 */
5318 #define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_STAT_CTXS \
5319 UINT32_C(0x400)
5320 /*
5321 * This bit must be '1' for the num_hw_ring_grps field to be
5322 * configured.
5323 */
5324 #define HWRM_FUNC_VF_CFG_INPUT_ENABLES_NUM_HW_RING_GRPS \
5325 UINT32_C(0x800)
5326 /*
5327 * The maximum transmission unit requested on the function.
5328 * The HWRM should make sure that the mtu of
5329 * the function does not exceed the mtu of the physical
5330 * port that this function is associated with.
5331 *
5332 * In addition to requesting mtu per function, it is
5333 * possible to configure mtu per transmit ring.
5334 * By default, the mtu of each transmit ring associated
5335 * with a function is equal to the mtu of the function.
5336 * The HWRM should make sure that the mtu of each transmit
5337 * ring that is assigned to a function has a valid mtu.
5338 */
5339 uint16_t mtu;
5340 /*
5341 * The guest VLAN for the function being configured.
5342 * This field's format is same as 802.1Q Tag's
5343 * Tag Control Information (TCI) format that includes both
5344 * Priority Code Point (PCP) and VLAN Identifier (VID).
5345 */
5346 uint16_t guest_vlan;
5347 /*
5348 * ID of the target completion ring for receiving asynchronous
5349 * event completions. If this field is not valid, then the
5350 * HWRM shall use the default completion ring of the function
5351 * that is being configured as the target completion ring for
5352 * providing any asynchronous event completions for that
5353 * function.
5354 * If this field is valid, then the HWRM shall use the
5355 * completion ring identified by this ID as the target
5356 * completion ring for providing any asynchronous event
5357 * completions for the function that is being configured.
5358 */
5359 uint16_t async_event_cr;
5360 /*
5361 * This value is the current MAC address requested by the VF
5362 * driver to be configured on this VF. A value of
5363 * 00-00-00-00-00-00 indicates no MAC address configuration
5364 * is requested by the VF driver.
5365 * The parent PF driver may reject or overwrite this
5366 * MAC address.
5367 */
5368 uint8_t dflt_mac_addr[6];
5369 uint32_t flags;
5370 /*
5371 * This bit requests that the firmware test to see if all the assets
5372 * requested in this command (i.e. number of TX rings) are available.
5373 * The firmware will return an error if the requested assets are
5374 * not available. The firwmare will NOT reserve the assets if they
5375 * are available.
5376 */
5377 #define HWRM_FUNC_VF_CFG_INPUT_FLAGS_TX_ASSETS_TEST \
5378 UINT32_C(0x1)
5379 /*
5380 * This bit requests that the firmware test to see if all the assets
5381 * requested in this command (i.e. number of RX rings) are available.
5382 * The firmware will return an error if the requested assets are
5383 * not available. The firwmare will NOT reserve the assets if they
5384 * are available.
5385 */
5386 #define HWRM_FUNC_VF_CFG_INPUT_FLAGS_RX_ASSETS_TEST \
5387 UINT32_C(0x2)
5388 /*
5389 * This bit requests that the firmware test to see if all the assets
5390 * requested in this command (i.e. number of CMPL rings) are available.
5391 * The firmware will return an error if the requested assets are
5392 * not available. The firwmare will NOT reserve the assets if they
5393 * are available.
5394 */
5395 #define HWRM_FUNC_VF_CFG_INPUT_FLAGS_CMPL_ASSETS_TEST \
5396 UINT32_C(0x4)
5397 /*
5398 * This bit requests that the firmware test to see if all the assets
5399 * requested in this command (i.e. number of RSS ctx) are available.
5400 * The firmware will return an error if the requested assets are
5401 * not available. The firwmare will NOT reserve the assets if they
5402 * are available.
5403 */
5404 #define HWRM_FUNC_VF_CFG_INPUT_FLAGS_RSSCOS_CTX_ASSETS_TEST \
5405 UINT32_C(0x8)
5406 /*
5407 * This bit requests that the firmware test to see if all the assets
5408 * requested in this command (i.e. number of ring groups) are available.
5409 * The firmware will return an error if the requested assets are
5410 * not available. The firwmare will NOT reserve the assets if they
5411 * are available.
5412 */
5413 #define HWRM_FUNC_VF_CFG_INPUT_FLAGS_RING_GRP_ASSETS_TEST \
5414 UINT32_C(0x10)
5415 /*
5416 * This bit requests that the firmware test to see if all the assets
5417 * requested in this command (i.e. number of stat ctx) are available.
5418 * The firmware will return an error if the requested assets are
5419 * not available. The firwmare will NOT reserve the assets if they
5420 * are available.
5421 */
5422 #define HWRM_FUNC_VF_CFG_INPUT_FLAGS_STAT_CTX_ASSETS_TEST \
5423 UINT32_C(0x20)
5424 /*
5425 * This bit requests that the firmware test to see if all the assets
5426 * requested in this command (i.e. number of VNICs) are available.
5427 * The firmware will return an error if the requested assets are
5428 * not available. The firwmare will NOT reserve the assets if they
5429 * are available.
5430 */
5431 #define HWRM_FUNC_VF_CFG_INPUT_FLAGS_VNIC_ASSETS_TEST \
5432 UINT32_C(0x40)
5433 /*
5434 * This bit requests that the firmware test to see if all the assets
5435 * requested in this command (i.e. number of L2 ctx) are available.
5436 * The firmware will return an error if the requested assets are
5437 * not available. The firwmare will NOT reserve the assets if they
5438 * are available.
5439 */
5440 #define HWRM_FUNC_VF_CFG_INPUT_FLAGS_L2_CTX_ASSETS_TEST \
5441 UINT32_C(0x80)
5442 /* The number of RSS/COS contexts requested for the VF. */
5443 uint16_t num_rsscos_ctxs;
5444 /* The number of completion rings requested for the VF. */
5445 uint16_t num_cmpl_rings;
5446 /* The number of transmit rings requested for the VF. */
5447 uint16_t num_tx_rings;
5448 /* The number of receive rings requested for the VF. */
5449 uint16_t num_rx_rings;
5450 /* The number of L2 contexts requested for the VF. */
5451 uint16_t num_l2_ctxs;
5452 /* The number of vnics requested for the VF. */
5453 uint16_t num_vnics;
5454 /* The number of statistic contexts requested for the VF. */
5455 uint16_t num_stat_ctxs;
5456 /* The number of HW ring groups requested for the VF. */
5457 uint16_t num_hw_ring_grps;
5458 uint8_t unused_0[4];
5459} __attribute__((packed));
5460
5461/* hwrm_func_vf_cfg_output (size:128b/16B) */
5462struct hwrm_func_vf_cfg_output {
5463 /* The specific error status for the command. */
5464 uint16_t error_code;
5465 /* The HWRM command request type. */
5466 uint16_t req_type;
5467 /* The sequence ID from the original command. */
5468 uint16_t seq_id;
5469 /* The length of the response data in number of bytes. */
5470 uint16_t resp_len;
5471 uint8_t unused_0[7];
5472 /*
5473 * This field is used in Output records to indicate that the output
5474 * is completely written to RAM. This field should be read as '1'
5475 * to indicate that the output has been completely written.
5476 * When writing a command completion or response to an internal processor,
5477 * the order of writes has to be such that this field is written last.
5478 */
5479 uint8_t valid;
5480} __attribute__((packed));
5481
5482/*******************
5483 * hwrm_func_qcaps *
5484 *******************/
5485
5486
5487/* hwrm_func_qcaps_input (size:192b/24B) */
5488struct hwrm_func_qcaps_input {
5489 /* The HWRM command request type. */
5490 uint16_t req_type;
5491 /*
5492 * The completion ring to send the completion event on. This should
5493 * be the NQ ID returned from the `nq_alloc` HWRM command.
5494 */
5495 uint16_t cmpl_ring;
5496 /*
5497 * The sequence ID is used by the driver for tracking multiple
5498 * commands. This ID is treated as opaque data by the firmware and
5499 * the value is returned in the `hwrm_resp_hdr` upon completion.
5500 */
5501 uint16_t seq_id;
5502 /*
5503 * The target ID of the command:
5504 * * 0x0-0xFFF8 - The function ID
5505 * * 0xFFF8-0xFFFE - Reserved for internal processors
5506 * * 0xFFFF - HWRM
5507 */
5508 uint16_t target_id;
5509 /*
5510 * A physical address pointer pointing to a host buffer that the
5511 * command's response data will be written. This can be either a host
5512 * physical address (HPA) or a guest physical address (GPA) and must
5513 * point to a physically contiguous block of memory.
5514 */
5515 uint64_t resp_addr;
5516 /*
5517 * Function ID of the function that is being queried.
5518 * 0xFF... (All Fs) if the query is for the requesting
5519 * function.
5520 */
5521 uint16_t fid;
5522 uint8_t unused_0[6];
5523} __attribute__((packed));
5524
5525/* hwrm_func_qcaps_output (size:640b/80B) */
5526struct hwrm_func_qcaps_output {
5527 /* The specific error status for the command. */
5528 uint16_t error_code;
5529 /* The HWRM command request type. */
5530 uint16_t req_type;
5531 /* The sequence ID from the original command. */
5532 uint16_t seq_id;
5533 /* The length of the response data in number of bytes. */
5534 uint16_t resp_len;
5535 /*
5536 * FID value. This value is used to identify operations on the PCI
5537 * bus as belonging to a particular PCI function.
5538 */
5539 uint16_t fid;
5540 /*
5541 * Port ID of port that this function is associated with.
5542 * Valid only for the PF.
5543 * 0xFF... (All Fs) if this function is not associated with
5544 * any port.
5545 * 0xFF... (All Fs) if this function is called from a VF.
5546 */
5547 uint16_t port_id;
5548 uint32_t flags;
5549 /* If 1, then Push mode is supported on this function. */
5550 #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_PUSH_MODE_SUPPORTED \
5551 UINT32_C(0x1)
5552 /*
5553 * If 1, then the global MSI-X auto-masking is enabled for the
5554 * device.
5555 */
5556 #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_GLOBAL_MSIX_AUTOMASKING \
5557 UINT32_C(0x2)
5558 /*
5559 * If 1, then the Precision Time Protocol (PTP) processing
5560 * is supported on this function.
5561 * The HWRM should enable PTP on only a single Physical
5562 * Function (PF) per port.
5563 */
5564 #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_PTP_SUPPORTED \
5565 UINT32_C(0x4)
5566 /*
5567 * If 1, then RDMA over Converged Ethernet (RoCE) v1
5568 * is supported on this function.
5569 */
5570 #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_ROCE_V1_SUPPORTED \
5571 UINT32_C(0x8)
5572 /*
5573 * If 1, then RDMA over Converged Ethernet (RoCE) v2
5574 * is supported on this function.
5575 */
5576 #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_ROCE_V2_SUPPORTED \
5577 UINT32_C(0x10)
5578 /*
5579 * If 1, then control and configuration of WoL magic packet
5580 * are supported on this function.
5581 */
5582 #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_WOL_MAGICPKT_SUPPORTED \
5583 UINT32_C(0x20)
5584 /*
5585 * If 1, then control and configuration of bitmap pattern
5586 * packet are supported on this function.
5587 */
5588 #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_WOL_BMP_SUPPORTED \
5589 UINT32_C(0x40)
5590 /*
5591 * If set to 1, then the control and configuration of rate limit
5592 * of an allocated TX ring on the queried function is supported.
5593 */
5594 #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_TX_RING_RL_SUPPORTED \
5595 UINT32_C(0x80)
5596 /*
5597 * If 1, then control and configuration of minimum and
5598 * maximum bandwidths are supported on the queried function.
5599 */
5600 #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_TX_BW_CFG_SUPPORTED \
5601 UINT32_C(0x100)
5602 /*
5603 * If the query is for a VF, then this flag shall be ignored.
5604 * If this query is for a PF and this flag is set to 1,
5605 * then the PF has the capability to set the rate limits
5606 * on the TX rings of its children VFs.
5607 * If this query is for a PF and this flag is set to 0, then
5608 * the PF does not have the capability to set the rate limits
5609 * on the TX rings of its children VFs.
5610 */
5611 #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_VF_TX_RING_RL_SUPPORTED \
5612 UINT32_C(0x200)
5613 /*
5614 * If the query is for a VF, then this flag shall be ignored.
5615 * If this query is for a PF and this flag is set to 1,
5616 * then the PF has the capability to set the minimum and/or
5617 * maximum bandwidths for its children VFs.
5618 * If this query is for a PF and this flag is set to 0, then
5619 * the PF does not have the capability to set the minimum or
5620 * maximum bandwidths for its children VFs.
5621 */
5622 #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_VF_BW_CFG_SUPPORTED \
5623 UINT32_C(0x400)
5624 /*
5625 * Standard TX Ring mode is used for the allocation of TX ring
5626 * and underlying scheduling resources that allow bandwidth
5627 * reservation and limit settings on the queried function.
5628 * If set to 1, then standard TX ring mode is supported
5629 * on the queried function.
5630 * If set to 0, then standard TX ring mode is not available
5631 * on the queried function.
5632 */
5633 #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_STD_TX_RING_MODE_SUPPORTED \
5634 UINT32_C(0x800)
5635 /*
5636 * If the query is for a VF, then this flag shall be ignored,
5637 * If this query is for a PF and this flag is set to 1,
5638 * then the PF has the capability to detect GENEVE tunnel
5639 * flags.
5640 */
5641 #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_GENEVE_TUN_FLAGS_SUPPORTED \
5642 UINT32_C(0x1000)
5643 /*
5644 * If the query is for a VF, then this flag shall be ignored,
5645 * If this query is for a PF and this flag is set to 1,
5646 * then the PF has the capability to detect NVGRE tunnel
5647 * flags.
5648 */
5649 #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_NVGRE_TUN_FLAGS_SUPPORTED \
5650 UINT32_C(0x2000)
5651 /*
5652 * If the query is for a VF, then this flag shall be ignored,
5653 * If this query is for a PF and this flag is set to 1,
5654 * then the PF has the capability to detect GRE tunnel
5655 * flags.
5656 */
5657 #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_GRE_TUN_FLAGS_SUPPORTED \
5658 UINT32_C(0x4000)
5659 /*
5660 * If the query is for a VF, then this flag shall be ignored,
5661 * If this query is for a PF and this flag is set to 1,
5662 * then the PF has the capability to detect MPLS tunnel
5663 * flags.
5664 */
5665 #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_MPLS_TUN_FLAGS_SUPPORTED \
5666 UINT32_C(0x8000)
5667 /*
5668 * If the query is for a VF, then this flag shall be ignored,
5669 * If this query is for a PF and this flag is set to 1,
5670 * then the PF has the capability to support pcie stats.
5671 */
5672 #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_PCIE_STATS_SUPPORTED \
5673 UINT32_C(0x10000)
5674 /*
5675 * If the query is for a VF, then this flag shall be ignored,
5676 * If this query is for a PF and this flag is set to 1,
5677 * then the PF has the capability to adopt the VF's belonging
5678 * to another PF.
5679 */
5680 #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_ADOPTED_PF_SUPPORTED \
5681 UINT32_C(0x20000)
5682 /*
5683 * If the query is for a VF, then this flag shall be ignored,
5684 * If this query is for a PF and this flag is set to 1,
5685 * then the PF has the capability to administer another PF.
5686 */
5687 #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_ADMIN_PF_SUPPORTED \
5688 UINT32_C(0x40000)
5689 /*
5690 * If the query is for a VF, then this flag shall be ignored.
5691 * If this query is for a PF and this flag is set to 1, then
5692 * the PF will know that the firmware has the capability to track
5693 * the virtual link status.
5694 */
5695 #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_LINK_ADMIN_STATUS_SUPPORTED \
5696 UINT32_C(0x80000)
5697 /*
5698 * If 1, then this function supports the push mode that uses
5699 * write combine buffers and the long inline tx buffer descriptor.
5700 */
5701 #define HWRM_FUNC_QCAPS_OUTPUT_FLAGS_WCB_PUSH_MODE \
5702 UINT32_C(0x100000)
5703 /*
5704 * This value is current MAC address configured for this
5705 * function. A value of 00-00-00-00-00-00 indicates no
5706 * MAC address is currently configured.
5707 */
5708 uint8_t mac_address[6];
5709 /*
5710 * The maximum number of RSS/COS contexts that can be
5711 * allocated to the function.
5712 */
5713 uint16_t max_rsscos_ctx;
5714 /*
5715 * The maximum number of completion rings that can be
5716 * allocated to the function.
5717 */
5718 uint16_t max_cmpl_rings;
5719 /*
5720 * The maximum number of transmit rings that can be
5721 * allocated to the function.
5722 */
5723 uint16_t max_tx_rings;
5724 /*
5725 * The maximum number of receive rings that can be
5726 * allocated to the function.
5727 */
5728 uint16_t max_rx_rings;
5729 /*
5730 * The maximum number of L2 contexts that can be
5731 * allocated to the function.
5732 */
5733 uint16_t max_l2_ctxs;
5734 /*
5735 * The maximum number of VNICs that can be
5736 * allocated to the function.
5737 */
5738 uint16_t max_vnics;
5739 /*
5740 * The identifier for the first VF enabled on a PF. This
5741 * is valid only on the PF with SR-IOV enabled.
5742 * 0xFF... (All Fs) if this command is called on a PF with
5743 * SR-IOV disabled or on a VF.
5744 */
5745 uint16_t first_vf_id;
5746 /*
5747 * The maximum number of VFs that can be
5748 * allocated to the function. This is valid only on the
5749 * PF with SR-IOV enabled. 0xFF... (All Fs) if this
5750 * command is called on a PF with SR-IOV disabled or
5751 * on a VF.
5752 */
5753 uint16_t max_vfs;
5754 /*
5755 * The maximum number of statistic contexts that can be
5756 * allocated to the function.
5757 */
5758 uint16_t max_stat_ctx;
5759 /*
5760 * The maximum number of Encapsulation records that can be
5761 * offloaded by this function.
5762 */
5763 uint32_t max_encap_records;
5764 /*
5765 * The maximum number of decapsulation records that can
5766 * be offloaded by this function.
5767 */
5768 uint32_t max_decap_records;
5769 /*
5770 * The maximum number of Exact Match (EM) flows that can be
5771 * offloaded by this function on the TX side.
5772 */
5773 uint32_t max_tx_em_flows;
5774 /*
5775 * The maximum number of Wildcard Match (WM) flows that can
5776 * be offloaded by this function on the TX side.
5777 */
5778 uint32_t max_tx_wm_flows;
5779 /*
5780 * The maximum number of Exact Match (EM) flows that can be
5781 * offloaded by this function on the RX side.
5782 */
5783 uint32_t max_rx_em_flows;
5784 /*
5785 * The maximum number of Wildcard Match (WM) flows that can
5786 * be offloaded by this function on the RX side.
5787 */
5788 uint32_t max_rx_wm_flows;
5789 /*
5790 * The maximum number of multicast filters that can
5791 * be supported by this function on the RX side.
5792 */
5793 uint32_t max_mcast_filters;
5794 /*
5795 * The maximum value of flow_id that can be supported
5796 * in completion records.
5797 */
5798 uint32_t max_flow_id;
5799 /*
5800 * The maximum number of HW ring groups that can be
5801 * supported on this function.
5802 */
5803 uint32_t max_hw_ring_grps;
5804 /*
5805 * The maximum number of strict priority transmit rings
5806 * that can be allocated to the function.
5807 * This number indicates the maximum number of TX rings
5808 * that can be assigned strict priorities out of the
5809 * maximum number of TX rings that can be allocated
5810 * (max_tx_rings) to the function.
5811 */
5812 uint16_t max_sp_tx_rings;
5813 uint8_t unused_0;
5814 /*
5815 * This field is used in Output records to indicate that the output
5816 * is completely written to RAM. This field should be read as '1'
5817 * to indicate that the output has been completely written.
5818 * When writing a command completion or response to an internal processor,
5819 * the order of writes has to be such that this field is written last.
5820 */
5821 uint8_t valid;
5822} __attribute__((packed));
5823
5824/******************
5825 * hwrm_func_qcfg *
5826 ******************/
5827
5828
5829/* hwrm_func_qcfg_input (size:192b/24B) */
5830struct hwrm_func_qcfg_input {
5831 /* The HWRM command request type. */
5832 uint16_t req_type;
5833 /*
5834 * The completion ring to send the completion event on. This should
5835 * be the NQ ID returned from the `nq_alloc` HWRM command.
5836 */
5837 uint16_t cmpl_ring;
5838 /*
5839 * The sequence ID is used by the driver for tracking multiple
5840 * commands. This ID is treated as opaque data by the firmware and
5841 * the value is returned in the `hwrm_resp_hdr` upon completion.
5842 */
5843 uint16_t seq_id;
5844 /*
5845 * The target ID of the command:
5846 * * 0x0-0xFFF8 - The function ID
5847 * * 0xFFF8-0xFFFE - Reserved for internal processors
5848 * * 0xFFFF - HWRM
5849 */
5850 uint16_t target_id;
5851 /*
5852 * A physical address pointer pointing to a host buffer that the
5853 * command's response data will be written. This can be either a host
5854 * physical address (HPA) or a guest physical address (GPA) and must
5855 * point to a physically contiguous block of memory.
5856 */
5857 uint64_t resp_addr;
5858 /*
5859 * Function ID of the function that is being queried.
5860 * 0xFF... (All Fs) if the query is for the requesting
5861 * function.
5862 */
5863 uint16_t fid;
5864 uint8_t unused_0[6];
5865} __attribute__((packed));
5866
5867/* hwrm_func_qcfg_output (size:640b/80B) */
5868struct hwrm_func_qcfg_output {
5869 /* The specific error status for the command. */
5870 uint16_t error_code;
5871 /* The HWRM command request type. */
5872 uint16_t req_type;
5873 /* The sequence ID from the original command. */
5874 uint16_t seq_id;
5875 /* The length of the response data in number of bytes. */
5876 uint16_t resp_len;
5877 /*
5878 * FID value. This value is used to identify operations on the PCI
5879 * bus as belonging to a particular PCI function.
5880 */
5881 uint16_t fid;
5882 /*
5883 * Port ID of port that this function is associated with.
5884 * 0xFF... (All Fs) if this function is not associated with
5885 * any port.
5886 */
5887 uint16_t port_id;
5888 /*
5889 * This value is the current VLAN setting for this
5890 * function. The value of 0 for this field indicates
5891 * no priority tagging or VLAN is used.
5892 * This field's format is same as 802.1Q Tag's
5893 * Tag Control Information (TCI) format that includes both
5894 * Priority Code Point (PCP) and VLAN Identifier (VID).
5895 */
5896 uint16_t vlan;
5897 uint16_t flags;
5898 /*
5899 * If 1, then magic packet based Out-Of-Box WoL is enabled on
5900 * the port associated with this function.
5901 */
5902 #define HWRM_FUNC_QCFG_OUTPUT_FLAGS_OOB_WOL_MAGICPKT_ENABLED \
5903 UINT32_C(0x1)
5904 /*
5905 * If 1, then bitmap pattern based Out-Of-Box WoL packet is enabled
5906 * on the port associated with this function.
5907 */
5908 #define HWRM_FUNC_QCFG_OUTPUT_FLAGS_OOB_WOL_BMP_ENABLED \
5909 UINT32_C(0x2)
5910 /*
5911 * If set to 1, then FW based DCBX agent is enabled and running on
5912 * the port associated with this function.
5913 * If set to 0, then DCBX agent is not running in the firmware.
5914 */
5915 #define HWRM_FUNC_QCFG_OUTPUT_FLAGS_FW_DCBX_AGENT_ENABLED \
5916 UINT32_C(0x4)
5917 /*
5918 * Standard TX Ring mode is used for the allocation of TX ring
5919 * and underlying scheduling resources that allow bandwidth
5920 * reservation and limit settings on the queried function.
5921 * If set to 1, then standard TX ring mode is enabled
5922 * on the queried function.
5923 * If set to 0, then the standard TX ring mode is disabled
5924 * on the queried function. In this extended TX ring resource
5925 * mode, the minimum and maximum bandwidth settings are not
5926 * supported to allow the allocation of TX rings to span multiple
5927 * scheduler nodes.
5928 */
5929 #define HWRM_FUNC_QCFG_OUTPUT_FLAGS_STD_TX_RING_MODE_ENABLED \
5930 UINT32_C(0x8)
5931 /*
5932 * If set to 1 then FW based LLDP agent is enabled and running on
5933 * the port associated with this function.
5934 * If set to 0 then the LLDP agent is not running in the firmware.
5935 */
5936 #define HWRM_FUNC_QCFG_OUTPUT_FLAGS_FW_LLDP_AGENT_ENABLED \
5937 UINT32_C(0x10)
5938 /*
5939 * If set to 1, then multi-host mode is active for this function.
5940 * If set to 0, then multi-host mode is inactive for this function
5941 * or not applicable for this device.
5942 */
5943 #define HWRM_FUNC_QCFG_OUTPUT_FLAGS_MULTI_HOST \
5944 UINT32_C(0x20)
5945 /*
5946 * If the function that is being queried is a PF, then the HWRM shall
5947 * set this field to 0 and the HWRM client shall ignore this field.
5948 * If the function that is being queried is a VF, then the HWRM shall
5949 * set this field to 1 if the queried VF is trusted, otherwise the HWRM
5950 * shall set this field to 0.
5951 */
5952 #define HWRM_FUNC_QCFG_OUTPUT_FLAGS_TRUSTED_VF \
5953 UINT32_C(0x40)
5954 /*
5955 * This value is current MAC address configured for this
5956 * function. A value of 00-00-00-00-00-00 indicates no
5957 * MAC address is currently configured.
5958 */
5959 uint8_t mac_address[6];
5960 /*
5961 * This value is current PCI ID of this
5962 * function. If ARI is enabled, then it is
5963 * Bus Number (8b):Function Number(8b). Otherwise, it is
5964 * Bus Number (8b):Device Number (4b):Function Number(4b).
5965 * If multi-host mode is active, the 4 lsb will indicate
5966 * the PF index for this function.
5967 */
5968 uint16_t pci_id;
5969 /*
5970 * The number of RSS/COS contexts currently
5971 * allocated to the function.
5972 */
5973 uint16_t alloc_rsscos_ctx;
5974 /*
5975 * The number of completion rings currently allocated to
5976 * the function. This does not include the rings allocated
5977 * to any children functions if any.
5978 */
5979 uint16_t alloc_cmpl_rings;
5980 /*
5981 * The number of transmit rings currently allocated to
5982 * the function. This does not include the rings allocated
5983 * to any children functions if any.
5984 */
5985 uint16_t alloc_tx_rings;
5986 /*
5987 * The number of receive rings currently allocated to
5988 * the function. This does not include the rings allocated
5989 * to any children functions if any.
5990 */
5991 uint16_t alloc_rx_rings;
5992 /* The allocated number of L2 contexts to the function. */
5993 uint16_t alloc_l2_ctx;
5994 /* The allocated number of vnics to the function. */
5995 uint16_t alloc_vnics;
5996 /*
5997 * The maximum transmission unit of the function.
5998 * For rings allocated on this function, this default
5999 * value is used if ring MTU is not specified.
6000 */
6001 uint16_t mtu;
6002 /*
6003 * The maximum receive unit of the function.
6004 * For vnics allocated on this function, this default
6005 * value is used if vnic MRU is not specified.
6006 */
6007 uint16_t mru;
6008 /* The statistics context assigned to a function. */
6009 uint16_t stat_ctx_id;
6010 /*
6011 * The HWRM shall return Unknown value for this field
6012 * when this command is used to query VF's configuration.
6013 */
6014 uint8_t port_partition_type;
6015 /* Single physical function */
6016 #define HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_SPF UINT32_C(0x0)
6017 /* Multiple physical functions */
6018 #define HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_MPFS UINT32_C(0x1)
6019 /* Network Partitioning 1.0 */
6020 #define HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_NPAR1_0 UINT32_C(0x2)
6021 /* Network Partitioning 1.5 */
6022 #define HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_NPAR1_5 UINT32_C(0x3)
6023 /* Network Partitioning 2.0 */
6024 #define HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_NPAR2_0 UINT32_C(0x4)
6025 /* Unknown */
6026 #define HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_UNKNOWN \
6027 UINT32_C(0xff)
6028 #define HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_LAST \
6029 HWRM_FUNC_QCFG_OUTPUT_PORT_PARTITION_TYPE_UNKNOWN
6030 /*
6031 * This field will indicate number of physical functions on this port_partition.
6032 * HWRM shall return unavail (i.e. value of 0) for this field
6033 * when this command is used to query VF's configuration or
6034 * from older firmware that doesn't support this field.
6035 */
6036 uint8_t port_pf_cnt;
6037 /* number of PFs is not available */
6038 #define HWRM_FUNC_QCFG_OUTPUT_PORT_PF_CNT_UNAVAIL UINT32_C(0x0)
6039 #define HWRM_FUNC_QCFG_OUTPUT_PORT_PF_CNT_LAST \
6040 HWRM_FUNC_QCFG_OUTPUT_PORT_PF_CNT_UNAVAIL
6041 /*
6042 * The default VNIC ID assigned to a function that is
6043 * being queried.
6044 */
6045 uint16_t dflt_vnic_id;
6046 uint16_t max_mtu_configured;
6047 /*
6048 * Minimum BW allocated for this function.
6049 * The HWRM will translate this value into byte counter and
6050 * time interval used for the scheduler inside the device.
6051 * A value of 0 indicates the minimum bandwidth is not
6052 * configured.
6053 */
6054 uint32_t min_bw;
6055 /* The bandwidth value. */
6056 #define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_MASK \
6057 UINT32_C(0xfffffff)
6058 #define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_SFT 0
6059 /* The granularity of the value (bits or bytes). */
6060 #define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_SCALE \
6061 UINT32_C(0x10000000)
6062 /* Value is in bits. */
6063 #define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_SCALE_BITS \
6064 (UINT32_C(0x0) << 28)
6065 /* Value is in bytes. */
6066 #define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_SCALE_BYTES \
6067 (UINT32_C(0x1) << 28)
6068 #define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_SCALE_LAST \
6069 HWRM_FUNC_QCFG_OUTPUT_MIN_BW_SCALE_BYTES
6070 /* bw_value_unit is 3 b */
6071 #define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_MASK \
6072 UINT32_C(0xe0000000)
6073 #define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_SFT 29
6074 /* Value is in Mb or MB (base 10). */
6075 #define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_MEGA \
6076 (UINT32_C(0x0) << 29)
6077 /* Value is in Kb or KB (base 10). */
6078 #define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_KILO \
6079 (UINT32_C(0x2) << 29)
6080 /* Value is in bits or bytes. */
6081 #define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_BASE \
6082 (UINT32_C(0x4) << 29)
6083 /* Value is in Gb or GB (base 10). */
6084 #define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_GIGA \
6085 (UINT32_C(0x6) << 29)
6086 /* Value is in 1/100th of a percentage of total bandwidth. */
6087 #define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
6088 (UINT32_C(0x1) << 29)
6089 /* Invalid unit */
6090 #define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_INVALID \
6091 (UINT32_C(0x7) << 29)
6092 #define HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_LAST \
6093 HWRM_FUNC_QCFG_OUTPUT_MIN_BW_BW_VALUE_UNIT_INVALID
6094 /*
6095 * Maximum BW allocated for this function.
6096 * The HWRM will translate this value into byte counter and
6097 * time interval used for the scheduler inside the device.
6098 * A value of 0 indicates that the maximum bandwidth is not
6099 * configured.
6100 */
6101 uint32_t max_bw;
6102 /* The bandwidth value. */
6103 #define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_MASK \
6104 UINT32_C(0xfffffff)
6105 #define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_SFT 0
6106 /* The granularity of the value (bits or bytes). */
6107 #define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_SCALE \
6108 UINT32_C(0x10000000)
6109 /* Value is in bits. */
6110 #define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_SCALE_BITS \
6111 (UINT32_C(0x0) << 28)
6112 /* Value is in bytes. */
6113 #define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_SCALE_BYTES \
6114 (UINT32_C(0x1) << 28)
6115 #define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_SCALE_LAST \
6116 HWRM_FUNC_QCFG_OUTPUT_MAX_BW_SCALE_BYTES
6117 /* bw_value_unit is 3 b */
6118 #define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_MASK \
6119 UINT32_C(0xe0000000)
6120 #define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_SFT 29
6121 /* Value is in Mb or MB (base 10). */
6122 #define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_MEGA \
6123 (UINT32_C(0x0) << 29)
6124 /* Value is in Kb or KB (base 10). */
6125 #define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_KILO \
6126 (UINT32_C(0x2) << 29)
6127 /* Value is in bits or bytes. */
6128 #define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_BASE \
6129 (UINT32_C(0x4) << 29)
6130 /* Value is in Gb or GB (base 10). */
6131 #define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_GIGA \
6132 (UINT32_C(0x6) << 29)
6133 /* Value is in 1/100th of a percentage of total bandwidth. */
6134 #define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
6135 (UINT32_C(0x1) << 29)
6136 /* Invalid unit */
6137 #define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_INVALID \
6138 (UINT32_C(0x7) << 29)
6139 #define HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_LAST \
6140 HWRM_FUNC_QCFG_OUTPUT_MAX_BW_BW_VALUE_UNIT_INVALID
6141 /*
6142 * This value indicates the Edge virtual bridge mode for the
6143 * domain that this function belongs to.
6144 */
6145 uint8_t evb_mode;
6146 /* No Edge Virtual Bridging (EVB) */
6147 #define HWRM_FUNC_QCFG_OUTPUT_EVB_MODE_NO_EVB UINT32_C(0x0)
6148 /* Virtual Ethernet Bridge (VEB) */
6149 #define HWRM_FUNC_QCFG_OUTPUT_EVB_MODE_VEB UINT32_C(0x1)
6150 /* Virtual Ethernet Port Aggregator (VEPA) */
6151 #define HWRM_FUNC_QCFG_OUTPUT_EVB_MODE_VEPA UINT32_C(0x2)
6152 #define HWRM_FUNC_QCFG_OUTPUT_EVB_MODE_LAST \
6153 HWRM_FUNC_QCFG_OUTPUT_EVB_MODE_VEPA
6154 uint8_t options;
6155 /*
6156 * This value indicates the PCIE device cache line size.
6157 * The cache line size allows the DMA writes to terminate and
6158 * start at the cache boundary.
6159 */
6160 #define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_CACHE_LINESIZE_MASK \
6161 UINT32_C(0x3)
6162 #define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_CACHE_LINESIZE_SFT 0
6163 /* Cache Line Size 64 bytes */
6164 #define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_CACHE_LINESIZE_SIZE_64 \
6165 UINT32_C(0x0)
6166 /* Cache Line Size 128 bytes */
6167 #define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_CACHE_LINESIZE_SIZE_128 \
6168 UINT32_C(0x1)
6169 #define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_CACHE_LINESIZE_LAST \
6170 HWRM_FUNC_QCFG_OUTPUT_OPTIONS_CACHE_LINESIZE_SIZE_128
6171 /* This value is the virtual link admin state setting. */
6172 #define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_LINK_ADMIN_STATE_MASK \
6173 UINT32_C(0xc)
6174 #define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_LINK_ADMIN_STATE_SFT 2
6175 /* Admin link state is in forced down mode. */
6176 #define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_LINK_ADMIN_STATE_FORCED_DOWN \
6177 (UINT32_C(0x0) << 2)
6178 /* Admin link state is in forced up mode. */
6179 #define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_LINK_ADMIN_STATE_FORCED_UP \
6180 (UINT32_C(0x1) << 2)
6181 /* Admin link state is in auto mode - follows the physical link state. */
6182 #define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_LINK_ADMIN_STATE_AUTO \
6183 (UINT32_C(0x2) << 2)
6184 #define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_LINK_ADMIN_STATE_LAST \
6185 HWRM_FUNC_QCFG_OUTPUT_OPTIONS_LINK_ADMIN_STATE_AUTO
6186 /* Reserved for future. */
6187 #define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_RSVD_MASK \
6188 UINT32_C(0xf0)
6189 #define HWRM_FUNC_QCFG_OUTPUT_OPTIONS_RSVD_SFT 4
6190 /*
6191 * The number of VFs that are allocated to the function.
6192 * This is valid only on the PF with SR-IOV enabled.
6193 * 0xFF... (All Fs) if this command is called on a PF with
6194 * SR-IOV disabled or on a VF.
6195 */
6196 uint16_t alloc_vfs;
6197 /*
6198 * The number of allocated multicast filters for this
6199 * function on the RX side.
6200 */
6201 uint32_t alloc_mcast_filters;
6202 /*
6203 * The number of allocated HW ring groups for this
6204 * function.
6205 */
6206 uint32_t alloc_hw_ring_grps;
6207 /*
6208 * The number of strict priority transmit rings out of
6209 * currently allocated TX rings to the function
6210 * (alloc_tx_rings).
6211 */
6212 uint16_t alloc_sp_tx_rings;
6213 /*
6214 * The number of statistics contexts
6215 * currently reserved for the function.
6216 */
6217 uint16_t alloc_stat_ctx;
6218 /*
6219 * This field specifies how many NQs are reserved for the PF.
6220 * Remaining NQs that belong to the PF are available for VFs.
6221 * Once a PF has created VFs, it cannot change how many NQs are
6222 * reserved for itself (since the NQs must be contiguous in HW).
6223 */
6224 uint16_t alloc_msix;
6225 uint8_t unused_2[5];
6226 /*
6227 * This field is used in Output records to indicate that the output
6228 * is completely written to RAM. This field should be read as '1'
6229 * to indicate that the output has been completely written.
6230 * When writing a command completion or response to an internal processor,
6231 * the order of writes has to be such that this field is written last.
6232 */
6233 uint8_t valid;
6234} __attribute__((packed));
6235
6236/*****************
6237 * hwrm_func_cfg *
6238 *****************/
6239
6240
6241/* hwrm_func_cfg_input (size:704b/88B) */
6242struct hwrm_func_cfg_input {
6243 /* The HWRM command request type. */
6244 uint16_t req_type;
6245 /*
6246 * The completion ring to send the completion event on. This should
6247 * be the NQ ID returned from the `nq_alloc` HWRM command.
6248 */
6249 uint16_t cmpl_ring;
6250 /*
6251 * The sequence ID is used by the driver for tracking multiple
6252 * commands. This ID is treated as opaque data by the firmware and
6253 * the value is returned in the `hwrm_resp_hdr` upon completion.
6254 */
6255 uint16_t seq_id;
6256 /*
6257 * The target ID of the command:
6258 * * 0x0-0xFFF8 - The function ID
6259 * * 0xFFF8-0xFFFE - Reserved for internal processors
6260 * * 0xFFFF - HWRM
6261 */
6262 uint16_t target_id;
6263 /*
6264 * A physical address pointer pointing to a host buffer that the
6265 * command's response data will be written. This can be either a host
6266 * physical address (HPA) or a guest physical address (GPA) and must
6267 * point to a physically contiguous block of memory.
6268 */
6269 uint64_t resp_addr;
6270 /*
6271 * Function ID of the function that is being
6272 * configured.
6273 * If set to 0xFF... (All Fs), then the the configuration is
6274 * for the requesting function.
6275 */
6276 uint16_t fid;
6277 /*
6278 * This field specifies how many NQs will be reserved for the PF.
6279 * Remaining NQs that belong to the PF become available for VFs.
6280 * Once a PF has created VFs, it cannot change how many NQs are
6281 * reserved for itself (since the NQs must be contiguous in HW).
6282 */
6283 uint16_t num_msix;
6284 uint32_t flags;
6285 /*
6286 * When this bit is '1', the function is disabled with
6287 * source MAC address check.
6288 * This is an anti-spoofing check. If this flag is set,
6289 * then the function shall be configured to disallow
6290 * transmission of frames with the source MAC address that
6291 * is configured for this function.
6292 */
6293 #define HWRM_FUNC_CFG_INPUT_FLAGS_SRC_MAC_ADDR_CHECK_DISABLE \
6294 UINT32_C(0x1)
6295 /*
6296 * When this bit is '1', the function is enabled with
6297 * source MAC address check.
6298 * This is an anti-spoofing check. If this flag is set,
6299 * then the function shall be configured to allow
6300 * transmission of frames with the source MAC address that
6301 * is configured for this function.
6302 */
6303 #define HWRM_FUNC_CFG_INPUT_FLAGS_SRC_MAC_ADDR_CHECK_ENABLE \
6304 UINT32_C(0x2)
6305 /* reserved. */
6306 #define HWRM_FUNC_CFG_INPUT_FLAGS_RSVD_MASK \
6307 UINT32_C(0x1fc)
6308 #define HWRM_FUNC_CFG_INPUT_FLAGS_RSVD_SFT 2
6309 /*
6310 * Standard TX Ring mode is used for the allocation of TX ring
6311 * and underlying scheduling resources that allow bandwidth
6312 * reservation and limit settings on the queried function.
6313 * If set to 1, then standard TX ring mode is requested to be
6314 * enabled on the function being configured.
6315 */
6316 #define HWRM_FUNC_CFG_INPUT_FLAGS_STD_TX_RING_MODE_ENABLE \
6317 UINT32_C(0x200)
6318 /*
6319 * Standard TX Ring mode is used for the allocation of TX ring
6320 * and underlying scheduling resources that allow bandwidth
6321 * reservation and limit settings on the queried function.
6322 * If set to 1, then the standard TX ring mode is requested to
6323 * be disabled on the function being configured. In this extended
6324 * TX ring resource mode, the minimum and maximum bandwidth settings
6325 * are not supported to allow the allocation of TX rings to
6326 * span multiple scheduler nodes.
6327 */
6328 #define HWRM_FUNC_CFG_INPUT_FLAGS_STD_TX_RING_MODE_DISABLE \
6329 UINT32_C(0x400)
6330 /*
6331 * If this bit is set, virtual mac address configured
6332 * in this command will be persistent over warm boot.
6333 */
6334 #define HWRM_FUNC_CFG_INPUT_FLAGS_VIRT_MAC_PERSIST \
6335 UINT32_C(0x800)
6336 /*
6337 * This bit only applies to the VF. If this bit is set, the statistic
6338 * context counters will not be cleared when the statistic context is freed
6339 * or a function reset is called on VF. This bit will be cleared when the PF
6340 * is unloaded or a function reset is called on the PF.
6341 */
6342 #define HWRM_FUNC_CFG_INPUT_FLAGS_NO_AUTOCLEAR_STATISTIC \
6343 UINT32_C(0x1000)
6344 /*
6345 * This bit requests that the firmware test to see if all the assets
6346 * requested in this command (i.e. number of TX rings) are available.
6347 * The firmware will return an error if the requested assets are
6348 * not available. The firwmare will NOT reserve the assets if they
6349 * are available.
6350 */
6351 #define HWRM_FUNC_CFG_INPUT_FLAGS_TX_ASSETS_TEST \
6352 UINT32_C(0x2000)
6353 /*
6354 * This bit requests that the firmware test to see if all the assets
6355 * requested in this command (i.e. number of RX rings) are available.
6356 * The firmware will return an error if the requested assets are
6357 * not available. The firwmare will NOT reserve the assets if they
6358 * are available.
6359 */
6360 #define HWRM_FUNC_CFG_INPUT_FLAGS_RX_ASSETS_TEST \
6361 UINT32_C(0x4000)
6362 /*
6363 * This bit requests that the firmware test to see if all the assets
6364 * requested in this command (i.e. number of CMPL rings) are available.
6365 * The firmware will return an error if the requested assets are
6366 * not available. The firwmare will NOT reserve the assets if they
6367 * are available.
6368 */
6369 #define HWRM_FUNC_CFG_INPUT_FLAGS_CMPL_ASSETS_TEST \
6370 UINT32_C(0x8000)
6371 /*
6372 * This bit requests that the firmware test to see if all the assets
6373 * requested in this command (i.e. number of RSS ctx) are available.
6374 * The firmware will return an error if the requested assets are
6375 * not available. The firwmare will NOT reserve the assets if they
6376 * are available.
6377 */
6378 #define HWRM_FUNC_CFG_INPUT_FLAGS_RSSCOS_CTX_ASSETS_TEST \
6379 UINT32_C(0x10000)
6380 /*
6381 * This bit requests that the firmware test to see if all the assets
6382 * requested in this command (i.e. number of ring groups) are available.
6383 * The firmware will return an error if the requested assets are
6384 * not available. The firwmare will NOT reserve the assets if they
6385 * are available.
6386 */
6387 #define HWRM_FUNC_CFG_INPUT_FLAGS_RING_GRP_ASSETS_TEST \
6388 UINT32_C(0x20000)
6389 /*
6390 * This bit requests that the firmware test to see if all the assets
6391 * requested in this command (i.e. number of stat ctx) are available.
6392 * The firmware will return an error if the requested assets are
6393 * not available. The firwmare will NOT reserve the assets if they
6394 * are available.
6395 */
6396 #define HWRM_FUNC_CFG_INPUT_FLAGS_STAT_CTX_ASSETS_TEST \
6397 UINT32_C(0x40000)
6398 /*
6399 * This bit requests that the firmware test to see if all the assets
6400 * requested in this command (i.e. number of VNICs) are available.
6401 * The firmware will return an error if the requested assets are
6402 * not available. The firwmare will NOT reserve the assets if they
6403 * are available.
6404 */
6405 #define HWRM_FUNC_CFG_INPUT_FLAGS_VNIC_ASSETS_TEST \
6406 UINT32_C(0x80000)
6407 /*
6408 * This bit requests that the firmware test to see if all the assets
6409 * requested in this command (i.e. number of L2 ctx) are available.
6410 * The firmware will return an error if the requested assets are
6411 * not available. The firwmare will NOT reserve the assets if they
6412 * are available.
6413 */
6414 #define HWRM_FUNC_CFG_INPUT_FLAGS_L2_CTX_ASSETS_TEST \
6415 UINT32_C(0x100000)
6416 /*
6417 * This configuration change can be initiated by a PF driver. This
6418 * configuration request shall be targeted to a VF. From local host
6419 * resident HWRM clients, only the parent PF driver shall be allowed
6420 * to initiate this change on one of its children VFs. If this bit is
6421 * set to 1, then the VF that is being configured is requested to be
6422 * trusted. If this bit is set to 0, then the VF that is being configured
6423 * is requested to be not trusted.
6424 */
6425 #define HWRM_FUNC_CFG_INPUT_FLAGS_TRUSTED_VF_ENABLE \
6426 UINT32_C(0x200000)
6427 uint32_t enables;
6428 /*
6429 * This bit must be '1' for the mtu field to be
6430 * configured.
6431 */
6432 #define HWRM_FUNC_CFG_INPUT_ENABLES_MTU \
6433 UINT32_C(0x1)
6434 /*
6435 * This bit must be '1' for the mru field to be
6436 * configured.
6437 */
6438 #define HWRM_FUNC_CFG_INPUT_ENABLES_MRU \
6439 UINT32_C(0x2)
6440 /*
6441 * This bit must be '1' for the num_rsscos_ctxs field to be
6442 * configured.
6443 */
6444 #define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_RSSCOS_CTXS \
6445 UINT32_C(0x4)
6446 /*
6447 * This bit must be '1' for the num_cmpl_rings field to be
6448 * configured.
6449 */
6450 #define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_CMPL_RINGS \
6451 UINT32_C(0x8)
6452 /*
6453 * This bit must be '1' for the num_tx_rings field to be
6454 * configured.
6455 */
6456 #define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_TX_RINGS \
6457 UINT32_C(0x10)
6458 /*
6459 * This bit must be '1' for the num_rx_rings field to be
6460 * configured.
6461 */
6462 #define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_RX_RINGS \
6463 UINT32_C(0x20)
6464 /*
6465 * This bit must be '1' for the num_l2_ctxs field to be
6466 * configured.
6467 */
6468 #define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_L2_CTXS \
6469 UINT32_C(0x40)
6470 /*
6471 * This bit must be '1' for the num_vnics field to be
6472 * configured.
6473 */
6474 #define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_VNICS \
6475 UINT32_C(0x80)
6476 /*
6477 * This bit must be '1' for the num_stat_ctxs field to be
6478 * configured.
6479 */
6480 #define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_STAT_CTXS \
6481 UINT32_C(0x100)
6482 /*
6483 * This bit must be '1' for the dflt_mac_addr field to be
6484 * configured.
6485 */
6486 #define HWRM_FUNC_CFG_INPUT_ENABLES_DFLT_MAC_ADDR \
6487 UINT32_C(0x200)
6488 /*
6489 * This bit must be '1' for the dflt_vlan field to be
6490 * configured.
6491 */
6492 #define HWRM_FUNC_CFG_INPUT_ENABLES_DFLT_VLAN \
6493 UINT32_C(0x400)
6494 /*
6495 * This bit must be '1' for the dflt_ip_addr field to be
6496 * configured.
6497 */
6498 #define HWRM_FUNC_CFG_INPUT_ENABLES_DFLT_IP_ADDR \
6499 UINT32_C(0x800)
6500 /*
6501 * This bit must be '1' for the min_bw field to be
6502 * configured.
6503 */
6504 #define HWRM_FUNC_CFG_INPUT_ENABLES_MIN_BW \
6505 UINT32_C(0x1000)
6506 /*
6507 * This bit must be '1' for the max_bw field to be
6508 * configured.
6509 */
6510 #define HWRM_FUNC_CFG_INPUT_ENABLES_MAX_BW \
6511 UINT32_C(0x2000)
6512 /*
6513 * This bit must be '1' for the async_event_cr field to be
6514 * configured.
6515 */
6516 #define HWRM_FUNC_CFG_INPUT_ENABLES_ASYNC_EVENT_CR \
6517 UINT32_C(0x4000)
6518 /*
6519 * This bit must be '1' for the vlan_antispoof_mode field to be
6520 * configured.
6521 */
6522 #define HWRM_FUNC_CFG_INPUT_ENABLES_VLAN_ANTISPOOF_MODE \
6523 UINT32_C(0x8000)
6524 /*
6525 * This bit must be '1' for the allowed_vlan_pris field to be
6526 * configured.
6527 */
6528 #define HWRM_FUNC_CFG_INPUT_ENABLES_ALLOWED_VLAN_PRIS \
6529 UINT32_C(0x10000)
6530 /*
6531 * This bit must be '1' for the evb_mode field to be
6532 * configured.
6533 */
6534 #define HWRM_FUNC_CFG_INPUT_ENABLES_EVB_MODE \
6535 UINT32_C(0x20000)
6536 /*
6537 * This bit must be '1' for the num_mcast_filters field to be
6538 * configured.
6539 */
6540 #define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_MCAST_FILTERS \
6541 UINT32_C(0x40000)
6542 /*
6543 * This bit must be '1' for the num_hw_ring_grps field to be
6544 * configured.
6545 */
6546 #define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_HW_RING_GRPS \
6547 UINT32_C(0x80000)
6548 /*
6549 * This bit must be '1' for the cache_linesize field to be
6550 * configured.
6551 */
6552 #define HWRM_FUNC_CFG_INPUT_ENABLES_CACHE_LINESIZE \
6553 UINT32_C(0x100000)
6554 /*
6555 * This bit must be '1' for the num_msix field to be
6556 * configured.
6557 */
6558 #define HWRM_FUNC_CFG_INPUT_ENABLES_NUM_MSIX \
6559 UINT32_C(0x200000)
6560 /*
6561 * This bit must be '1' for the link admin state field to be
6562 * configured.
6563 */
6564 #define HWRM_FUNC_CFG_INPUT_ENABLES_ADMIN_LINK_STATE \
6565 UINT32_C(0x400000)
6566 /*
6567 * The maximum transmission unit of the function.
6568 * The HWRM should make sure that the mtu of
6569 * the function does not exceed the mtu of the physical
6570 * port that this function is associated with.
6571 *
6572 * In addition to configuring mtu per function, it is
6573 * possible to configure mtu per transmit ring.
6574 * By default, the mtu of each transmit ring associated
6575 * with a function is equal to the mtu of the function.
6576 * The HWRM should make sure that the mtu of each transmit
6577 * ring that is assigned to a function has a valid mtu.
6578 */
6579 uint16_t mtu;
6580 /*
6581 * The maximum receive unit of the function.
6582 * The HWRM should make sure that the mru of
6583 * the function does not exceed the mru of the physical
6584 * port that this function is associated with.
6585 *
6586 * In addition to configuring mru per function, it is
6587 * possible to configure mru per vnic.
6588 * By default, the mru of each vnic associated
6589 * with a function is equal to the mru of the function.
6590 * The HWRM should make sure that the mru of each vnic
6591 * that is assigned to a function has a valid mru.
6592 */
6593 uint16_t mru;
6594 /*
6595 * The number of RSS/COS contexts requested for the
6596 * function.
6597 */
6598 uint16_t num_rsscos_ctxs;
6599 /*
6600 * The number of completion rings requested for the
6601 * function. This does not include the rings allocated
6602 * to any children functions if any.
6603 */
6604 uint16_t num_cmpl_rings;
6605 /*
6606 * The number of transmit rings requested for the function.
6607 * This does not include the rings allocated to any
6608 * children functions if any.
6609 */
6610 uint16_t num_tx_rings;
6611 /*
6612 * The number of receive rings requested for the function.
6613 * This does not include the rings allocated
6614 * to any children functions if any.
6615 */
6616 uint16_t num_rx_rings;
6617 /* The requested number of L2 contexts for the function. */
6618 uint16_t num_l2_ctxs;
6619 /* The requested number of vnics for the function. */
6620 uint16_t num_vnics;
6621 /* The requested number of statistic contexts for the function. */
6622 uint16_t num_stat_ctxs;
6623 /*
6624 * The number of HW ring groups that should
6625 * be reserved for this function.
6626 */
6627 uint16_t num_hw_ring_grps;
6628 /* The default MAC address for the function being configured. */
6629 uint8_t dflt_mac_addr[6];
6630 /*
6631 * The default VLAN for the function being configured.
6632 * This field's format is same as 802.1Q Tag's
6633 * Tag Control Information (TCI) format that includes both
6634 * Priority Code Point (PCP) and VLAN Identifier (VID).
6635 */
6636 uint16_t dflt_vlan;
6637 /*
6638 * The default IP address for the function being configured.
6639 * This address is only used in enabling source property check.
6640 */
6641 uint32_t dflt_ip_addr[4];
6642 /*
6643 * Minimum BW allocated for this function.
6644 * The HWRM will translate this value into byte counter and
6645 * time interval used for the scheduler inside the device.
6646 */
6647 uint32_t min_bw;
6648 /* The bandwidth value. */
6649 #define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_MASK \
6650 UINT32_C(0xfffffff)
6651 #define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_SFT 0
6652 /* The granularity of the value (bits or bytes). */
6653 #define HWRM_FUNC_CFG_INPUT_MIN_BW_SCALE \
6654 UINT32_C(0x10000000)
6655 /* Value is in bits. */
6656 #define HWRM_FUNC_CFG_INPUT_MIN_BW_SCALE_BITS \
6657 (UINT32_C(0x0) << 28)
6658 /* Value is in bytes. */
6659 #define HWRM_FUNC_CFG_INPUT_MIN_BW_SCALE_BYTES \
6660 (UINT32_C(0x1) << 28)
6661 #define HWRM_FUNC_CFG_INPUT_MIN_BW_SCALE_LAST \
6662 HWRM_FUNC_CFG_INPUT_MIN_BW_SCALE_BYTES
6663 /* bw_value_unit is 3 b */
6664 #define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_MASK \
6665 UINT32_C(0xe0000000)
6666 #define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_SFT 29
6667 /* Value is in Mb or MB (base 10). */
6668 #define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_MEGA \
6669 (UINT32_C(0x0) << 29)
6670 /* Value is in Kb or KB (base 10). */
6671 #define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_KILO \
6672 (UINT32_C(0x2) << 29)
6673 /* Value is in bits or bytes. */
6674 #define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_BASE \
6675 (UINT32_C(0x4) << 29)
6676 /* Value is in Gb or GB (base 10). */
6677 #define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_GIGA \
6678 (UINT32_C(0x6) << 29)
6679 /* Value is in 1/100th of a percentage of total bandwidth. */
6680 #define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
6681 (UINT32_C(0x1) << 29)
6682 /* Invalid unit */
6683 #define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_INVALID \
6684 (UINT32_C(0x7) << 29)
6685 #define HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_LAST \
6686 HWRM_FUNC_CFG_INPUT_MIN_BW_BW_VALUE_UNIT_INVALID
6687 /*
6688 * Maximum BW allocated for this function.
6689 * The HWRM will translate this value into byte counter and
6690 * time interval used for the scheduler inside the device.
6691 */
6692 uint32_t max_bw;
6693 /* The bandwidth value. */
6694 #define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_MASK \
6695 UINT32_C(0xfffffff)
6696 #define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_SFT 0
6697 /* The granularity of the value (bits or bytes). */
6698 #define HWRM_FUNC_CFG_INPUT_MAX_BW_SCALE \
6699 UINT32_C(0x10000000)
6700 /* Value is in bits. */
6701 #define HWRM_FUNC_CFG_INPUT_MAX_BW_SCALE_BITS \
6702 (UINT32_C(0x0) << 28)
6703 /* Value is in bytes. */
6704 #define HWRM_FUNC_CFG_INPUT_MAX_BW_SCALE_BYTES \
6705 (UINT32_C(0x1) << 28)
6706 #define HWRM_FUNC_CFG_INPUT_MAX_BW_SCALE_LAST \
6707 HWRM_FUNC_CFG_INPUT_MAX_BW_SCALE_BYTES
6708 /* bw_value_unit is 3 b */
6709 #define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_MASK \
6710 UINT32_C(0xe0000000)
6711 #define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_SFT 29
6712 /* Value is in Mb or MB (base 10). */
6713 #define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_MEGA \
6714 (UINT32_C(0x0) << 29)
6715 /* Value is in Kb or KB (base 10). */
6716 #define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_KILO \
6717 (UINT32_C(0x2) << 29)
6718 /* Value is in bits or bytes. */
6719 #define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_BASE \
6720 (UINT32_C(0x4) << 29)
6721 /* Value is in Gb or GB (base 10). */
6722 #define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_GIGA \
6723 (UINT32_C(0x6) << 29)
6724 /* Value is in 1/100th of a percentage of total bandwidth. */
6725 #define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
6726 (UINT32_C(0x1) << 29)
6727 /* Invalid unit */
6728 #define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_INVALID \
6729 (UINT32_C(0x7) << 29)
6730 #define HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_LAST \
6731 HWRM_FUNC_CFG_INPUT_MAX_BW_BW_VALUE_UNIT_INVALID
6732 /*
6733 * ID of the target completion ring for receiving asynchronous
6734 * event completions. If this field is not valid, then the
6735 * HWRM shall use the default completion ring of the function
6736 * that is being configured as the target completion ring for
6737 * providing any asynchronous event completions for that
6738 * function.
6739 * If this field is valid, then the HWRM shall use the
6740 * completion ring identified by this ID as the target
6741 * completion ring for providing any asynchronous event
6742 * completions for the function that is being configured.
6743 */
6744 uint16_t async_event_cr;
6745 /* VLAN Anti-spoofing mode. */
6746 uint8_t vlan_antispoof_mode;
6747 /* No VLAN anti-spoofing checks are enabled */
6748 #define HWRM_FUNC_CFG_INPUT_VLAN_ANTISPOOF_MODE_NOCHECK \
6749 UINT32_C(0x0)
6750 /* Validate VLAN against the configured VLAN(s) */
6751 #define HWRM_FUNC_CFG_INPUT_VLAN_ANTISPOOF_MODE_VALIDATE_VLAN \
6752 UINT32_C(0x1)
6753 /* Insert VLAN if it does not exist, otherwise discard */
6754 #define HWRM_FUNC_CFG_INPUT_VLAN_ANTISPOOF_MODE_INSERT_IF_VLANDNE \
6755 UINT32_C(0x2)
6756 /* Insert VLAN if it does not exist, override VLAN if it exists */
6757 #define HWRM_FUNC_CFG_INPUT_VLAN_ANTISPOOF_MODE_INSERT_OR_OVERRIDE_VLAN \
6758 UINT32_C(0x3)
6759 #define HWRM_FUNC_CFG_INPUT_VLAN_ANTISPOOF_MODE_LAST \
6760 HWRM_FUNC_CFG_INPUT_VLAN_ANTISPOOF_MODE_INSERT_OR_OVERRIDE_VLAN
6761 /*
6762 * This bit field defines VLAN PRIs that are allowed on
6763 * this function.
6764 * If nth bit is set, then VLAN PRI n is allowed on this
6765 * function.
6766 */
6767 uint8_t allowed_vlan_pris;
6768 /*
6769 * The HWRM shall allow a PF driver to change EVB mode for the
6770 * partition it belongs to.
6771 * The HWRM shall not allow a VF driver to change the EVB mode.
6772 * The HWRM shall take into account the switching of EVB mode
6773 * from one to another and reconfigure hardware resources as
6774 * appropriately.
6775 * The switching from VEB to VEPA mode requires
6776 * the disabling of the loopback traffic. Additionally,
6777 * source knock outs are handled differently in VEB and VEPA
6778 * modes.
6779 */
6780 uint8_t evb_mode;
6781 /* No Edge Virtual Bridging (EVB) */
6782 #define HWRM_FUNC_CFG_INPUT_EVB_MODE_NO_EVB UINT32_C(0x0)
6783 /* Virtual Ethernet Bridge (VEB) */
6784 #define HWRM_FUNC_CFG_INPUT_EVB_MODE_VEB UINT32_C(0x1)
6785 /* Virtual Ethernet Port Aggregator (VEPA) */
6786 #define HWRM_FUNC_CFG_INPUT_EVB_MODE_VEPA UINT32_C(0x2)
6787 #define HWRM_FUNC_CFG_INPUT_EVB_MODE_LAST \
6788 HWRM_FUNC_CFG_INPUT_EVB_MODE_VEPA
6789 uint8_t options;
6790 /*
6791 * This value indicates the PCIE device cache line size.
6792 * The cache line size allows the DMA writes to terminate and
6793 * start at the cache boundary.
6794 */
6795 #define HWRM_FUNC_CFG_INPUT_OPTIONS_CACHE_LINESIZE_MASK \
6796 UINT32_C(0x3)
6797 #define HWRM_FUNC_CFG_INPUT_OPTIONS_CACHE_LINESIZE_SFT 0
6798 /* Cache Line Size 64 bytes */
6799 #define HWRM_FUNC_CFG_INPUT_OPTIONS_CACHE_LINESIZE_SIZE_64 \
6800 UINT32_C(0x0)
6801 /* Cache Line Size 128 bytes */
6802 #define HWRM_FUNC_CFG_INPUT_OPTIONS_CACHE_LINESIZE_SIZE_128 \
6803 UINT32_C(0x1)
6804 #define HWRM_FUNC_CFG_INPUT_OPTIONS_CACHE_LINESIZE_LAST \
6805 HWRM_FUNC_CFG_INPUT_OPTIONS_CACHE_LINESIZE_SIZE_128
6806 /* This value is the virtual link admin state setting. */
6807 #define HWRM_FUNC_CFG_INPUT_OPTIONS_LINK_ADMIN_STATE_MASK \
6808 UINT32_C(0xc)
6809 #define HWRM_FUNC_CFG_INPUT_OPTIONS_LINK_ADMIN_STATE_SFT 2
6810 /* Admin state is forced down. */
6811 #define HWRM_FUNC_CFG_INPUT_OPTIONS_LINK_ADMIN_STATE_FORCED_DOWN \
6812 (UINT32_C(0x0) << 2)
6813 /* Admin state is forced up. */
6814 #define HWRM_FUNC_CFG_INPUT_OPTIONS_LINK_ADMIN_STATE_FORCED_UP \
6815 (UINT32_C(0x1) << 2)
6816 /* Admin state is in auto mode - is to follow the physical link state. */
6817 #define HWRM_FUNC_CFG_INPUT_OPTIONS_LINK_ADMIN_STATE_AUTO \
6818 (UINT32_C(0x2) << 2)
6819 #define HWRM_FUNC_CFG_INPUT_OPTIONS_LINK_ADMIN_STATE_LAST \
6820 HWRM_FUNC_CFG_INPUT_OPTIONS_LINK_ADMIN_STATE_AUTO
6821 /* Reserved for future. */
6822 #define HWRM_FUNC_CFG_INPUT_OPTIONS_RSVD_MASK \
6823 UINT32_C(0xf0)
6824 #define HWRM_FUNC_CFG_INPUT_OPTIONS_RSVD_SFT 4
6825 /*
6826 * The number of multicast filters that should
6827 * be reserved for this function on the RX side.
6828 */
6829 uint16_t num_mcast_filters;
6830} __attribute__((packed));
6831
6832/* hwrm_func_cfg_output (size:128b/16B) */
6833struct hwrm_func_cfg_output {
6834 /* The specific error status for the command. */
6835 uint16_t error_code;
6836 /* The HWRM command request type. */
6837 uint16_t req_type;
6838 /* The sequence ID from the original command. */
6839 uint16_t seq_id;
6840 /* The length of the response data in number of bytes. */
6841 uint16_t resp_len;
6842 uint8_t unused_0[7];
6843 /*
6844 * This field is used in Output records to indicate that the output
6845 * is completely written to RAM. This field should be read as '1'
6846 * to indicate that the output has been completely written.
6847 * When writing a command completion or response to an internal processor,
6848 * the order of writes has to be such that this field is written last.
6849 */
6850 uint8_t valid;
6851} __attribute__((packed));
6852
6853/********************
6854 * hwrm_func_qstats *
6855 ********************/
6856
6857
6858/* hwrm_func_qstats_input (size:192b/24B) */
6859struct hwrm_func_qstats_input {
6860 /* The HWRM command request type. */
6861 uint16_t req_type;
6862 /*
6863 * The completion ring to send the completion event on. This should
6864 * be the NQ ID returned from the `nq_alloc` HWRM command.
6865 */
6866 uint16_t cmpl_ring;
6867 /*
6868 * The sequence ID is used by the driver for tracking multiple
6869 * commands. This ID is treated as opaque data by the firmware and
6870 * the value is returned in the `hwrm_resp_hdr` upon completion.
6871 */
6872 uint16_t seq_id;
6873 /*
6874 * The target ID of the command:
6875 * * 0x0-0xFFF8 - The function ID
6876 * * 0xFFF8-0xFFFE - Reserved for internal processors
6877 * * 0xFFFF - HWRM
6878 */
6879 uint16_t target_id;
6880 /*
6881 * A physical address pointer pointing to a host buffer that the
6882 * command's response data will be written. This can be either a host
6883 * physical address (HPA) or a guest physical address (GPA) and must
6884 * point to a physically contiguous block of memory.
6885 */
6886 uint64_t resp_addr;
6887 /*
6888 * Function ID of the function that is being queried.
6889 * 0xFF... (All Fs) if the query is for the requesting
6890 * function.
6891 */
6892 uint16_t fid;
6893 uint8_t unused_0[6];
6894} __attribute__((packed));
6895
6896/* hwrm_func_qstats_output (size:1408b/176B) */
6897struct hwrm_func_qstats_output {
6898 /* The specific error status for the command. */
6899 uint16_t error_code;
6900 /* The HWRM command request type. */
6901 uint16_t req_type;
6902 /* The sequence ID from the original command. */
6903 uint16_t seq_id;
6904 /* The length of the response data in number of bytes. */
6905 uint16_t resp_len;
6906 /* Number of transmitted unicast packets on the function. */
6907 uint64_t tx_ucast_pkts;
6908 /* Number of transmitted multicast packets on the function. */
6909 uint64_t tx_mcast_pkts;
6910 /* Number of transmitted broadcast packets on the function. */
6911 uint64_t tx_bcast_pkts;
6912 /*
6913 * Number of transmitted packets that were discarded due to
6914 * internal NIC resource problems. For transmit, this
6915 * can only happen if TMP is configured to allow dropping
6916 * in HOL blocking conditions, which is not a normal
6917 * configuration.
6918 */
6919 uint64_t tx_discard_pkts;
6920 /*
6921 * Number of dropped packets on transmit path on the function.
6922 * These are packets that have been marked for drop by
6923 * the TE CFA block or are packets that exceeded the
6924 * transmit MTU limit for the function.
6925 */
6926 uint64_t tx_drop_pkts;
6927 /* Number of transmitted bytes for unicast traffic on the function. */
6928 uint64_t tx_ucast_bytes;
6929 /* Number of transmitted bytes for multicast traffic on the function. */
6930 uint64_t tx_mcast_bytes;
6931 /* Number of transmitted bytes for broadcast traffic on the function. */
6932 uint64_t tx_bcast_bytes;
6933 /* Number of received unicast packets on the function. */
6934 uint64_t rx_ucast_pkts;
6935 /* Number of received multicast packets on the function. */
6936 uint64_t rx_mcast_pkts;
6937 /* Number of received broadcast packets on the function. */
6938 uint64_t rx_bcast_pkts;
6939 /*
6940 * Number of received packets that were discarded on the function
6941 * due to resource limitations. This can happen for 3 reasons.
6942 * # The BD used for the packet has a bad format.
6943 * # There were no BDs available in the ring for the packet.
6944 * # There were no BDs available on-chip for the packet.
6945 */
6946 uint64_t rx_discard_pkts;
6947 /*
6948 * Number of dropped packets on received path on the function.
6949 * These are packets that have been marked for drop by the
6950 * RE CFA.
6951 */
6952 uint64_t rx_drop_pkts;
6953 /* Number of received bytes for unicast traffic on the function. */
6954 uint64_t rx_ucast_bytes;
6955 /* Number of received bytes for multicast traffic on the function. */
6956 uint64_t rx_mcast_bytes;
6957 /* Number of received bytes for broadcast traffic on the function. */
6958 uint64_t rx_bcast_bytes;
6959 /* Number of aggregated unicast packets on the function. */
6960 uint64_t rx_agg_pkts;
6961 /* Number of aggregated unicast bytes on the function. */
6962 uint64_t rx_agg_bytes;
6963 /* Number of aggregation events on the function. */
6964 uint64_t rx_agg_events;
6965 /* Number of aborted aggregations on the function. */
6966 uint64_t rx_agg_aborts;
6967 uint8_t unused_0[7];
6968 /*
6969 * This field is used in Output records to indicate that the output
6970 * is completely written to RAM. This field should be read as '1'
6971 * to indicate that the output has been completely written.
6972 * When writing a command completion or response to an internal processor,
6973 * the order of writes has to be such that this field is written last.
6974 */
6975 uint8_t valid;
6976} __attribute__((packed));
6977
6978/***********************
6979 * hwrm_func_clr_stats *
6980 ***********************/
6981
6982
6983/* hwrm_func_clr_stats_input (size:192b/24B) */
6984struct hwrm_func_clr_stats_input {
6985 /* The HWRM command request type. */
6986 uint16_t req_type;
6987 /*
6988 * The completion ring to send the completion event on. This should
6989 * be the NQ ID returned from the `nq_alloc` HWRM command.
6990 */
6991 uint16_t cmpl_ring;
6992 /*
6993 * The sequence ID is used by the driver for tracking multiple
6994 * commands. This ID is treated as opaque data by the firmware and
6995 * the value is returned in the `hwrm_resp_hdr` upon completion.
6996 */
6997 uint16_t seq_id;
6998 /*
6999 * The target ID of the command:
7000 * * 0x0-0xFFF8 - The function ID
7001 * * 0xFFF8-0xFFFE - Reserved for internal processors
7002 * * 0xFFFF - HWRM
7003 */
7004 uint16_t target_id;
7005 /*
7006 * A physical address pointer pointing to a host buffer that the
7007 * command's response data will be written. This can be either a host
7008 * physical address (HPA) or a guest physical address (GPA) and must
7009 * point to a physically contiguous block of memory.
7010 */
7011 uint64_t resp_addr;
7012 /*
7013 * Function ID of the function.
7014 * 0xFF... (All Fs) if the query is for the requesting
7015 * function.
7016 */
7017 uint16_t fid;
7018 uint8_t unused_0[6];
7019} __attribute__((packed));
7020
7021/* hwrm_func_clr_stats_output (size:128b/16B) */
7022struct hwrm_func_clr_stats_output {
7023 /* The specific error status for the command. */
7024 uint16_t error_code;
7025 /* The HWRM command request type. */
7026 uint16_t req_type;
7027 /* The sequence ID from the original command. */
7028 uint16_t seq_id;
7029 /* The length of the response data in number of bytes. */
7030 uint16_t resp_len;
7031 uint8_t unused_0[7];
7032 /*
7033 * This field is used in Output records to indicate that the output
7034 * is completely written to RAM. This field should be read as '1'
7035 * to indicate that the output has been completely written.
7036 * When writing a command completion or response to an internal processor,
7037 * the order of writes has to be such that this field is written last.
7038 */
7039 uint8_t valid;
7040} __attribute__((packed));
7041
7042/**************************
7043 * hwrm_func_vf_resc_free *
7044 **************************/
7045
7046
7047/* hwrm_func_vf_resc_free_input (size:192b/24B) */
7048struct hwrm_func_vf_resc_free_input {
7049 /* The HWRM command request type. */
7050 uint16_t req_type;
7051 /*
7052 * The completion ring to send the completion event on. This should
7053 * be the NQ ID returned from the `nq_alloc` HWRM command.
7054 */
7055 uint16_t cmpl_ring;
7056 /*
7057 * The sequence ID is used by the driver for tracking multiple
7058 * commands. This ID is treated as opaque data by the firmware and
7059 * the value is returned in the `hwrm_resp_hdr` upon completion.
7060 */
7061 uint16_t seq_id;
7062 /*
7063 * The target ID of the command:
7064 * * 0x0-0xFFF8 - The function ID
7065 * * 0xFFF8-0xFFFE - Reserved for internal processors
7066 * * 0xFFFF - HWRM
7067 */
7068 uint16_t target_id;
7069 /*
7070 * A physical address pointer pointing to a host buffer that the
7071 * command's response data will be written. This can be either a host
7072 * physical address (HPA) or a guest physical address (GPA) and must
7073 * point to a physically contiguous block of memory.
7074 */
7075 uint64_t resp_addr;
7076 /*
7077 * This value is used to identify a Virtual Function (VF).
7078 * The scope of VF ID is local within a PF.
7079 */
7080 uint16_t vf_id;
7081 uint8_t unused_0[6];
7082} __attribute__((packed));
7083
7084/* hwrm_func_vf_resc_free_output (size:128b/16B) */
7085struct hwrm_func_vf_resc_free_output {
7086 /* The specific error status for the command. */
7087 uint16_t error_code;
7088 /* The HWRM command request type. */
7089 uint16_t req_type;
7090 /* The sequence ID from the original command. */
7091 uint16_t seq_id;
7092 /* The length of the response data in number of bytes. */
7093 uint16_t resp_len;
7094 uint8_t unused_0[7];
7095 /*
7096 * This field is used in Output records to indicate that the output
7097 * is completely written to RAM. This field should be read as '1'
7098 * to indicate that the output has been completely written.
7099 * When writing a command completion or response to an internal processor,
7100 * the order of writes has to be such that this field is written last.
7101 */
7102 uint8_t valid;
7103} __attribute__((packed));
7104
7105/**********************
7106 * hwrm_func_drv_rgtr *
7107 **********************/
7108
7109
7110/* hwrm_func_drv_rgtr_input (size:896b/112B) */
7111struct hwrm_func_drv_rgtr_input {
7112 /* The HWRM command request type. */
7113 uint16_t req_type;
7114 /*
7115 * The completion ring to send the completion event on. This should
7116 * be the NQ ID returned from the `nq_alloc` HWRM command.
7117 */
7118 uint16_t cmpl_ring;
7119 /*
7120 * The sequence ID is used by the driver for tracking multiple
7121 * commands. This ID is treated as opaque data by the firmware and
7122 * the value is returned in the `hwrm_resp_hdr` upon completion.
7123 */
7124 uint16_t seq_id;
7125 /*
7126 * The target ID of the command:
7127 * * 0x0-0xFFF8 - The function ID
7128 * * 0xFFF8-0xFFFE - Reserved for internal processors
7129 * * 0xFFFF - HWRM
7130 */
7131 uint16_t target_id;
7132 /*
7133 * A physical address pointer pointing to a host buffer that the
7134 * command's response data will be written. This can be either a host
7135 * physical address (HPA) or a guest physical address (GPA) and must
7136 * point to a physically contiguous block of memory.
7137 */
7138 uint64_t resp_addr;
7139 uint32_t flags;
7140 /*
7141 * When this bit is '1', the function driver is requesting
7142 * all requests from its children VF drivers to be
7143 * forwarded to itself.
7144 * This flag can only be set by the PF driver.
7145 * If a VF driver sets this flag, it should be ignored
7146 * by the HWRM.
7147 */
7148 #define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_FWD_ALL_MODE \
7149 UINT32_C(0x1)
7150 /*
7151 * When this bit is '1', the function is requesting none of
7152 * the requests from its children VF drivers to be
7153 * forwarded to itself.
7154 * This flag can only be set by the PF driver.
7155 * If a VF driver sets this flag, it should be ignored
7156 * by the HWRM.
7157 */
7158 #define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_FWD_NONE_MODE \
7159 UINT32_C(0x2)
7160 /*
7161 * When this bit is '1', then ver_maj_8b, ver_min_8b, ver_upd_8b
7162 * fields shall be ignored and ver_maj, ver_min, ver_upd
7163 * and ver_patch shall be used for the driver version information.
7164 * When this bit is '0', then ver_maj_8b, ver_min_8b, ver_upd_8b
7165 * fields shall be used for the driver version information and
7166 * ver_maj, ver_min, ver_upd and ver_patch shall be ignored.
7167 */
7168 #define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_16BIT_VER_MODE \
7169 UINT32_C(0x4)
7170 /*
7171 * When this bit is '1', the function is indicating support of
7172 * 64bit flow handle. The firmware that only supports 64bit flow
7173 * handle should check this bit before allowing processing of
7174 * HWRM_CFA_FLOW_XXX commands from the requesting function as firmware
7175 * with 64bit flow handle support can only be compatible with drivers
7176 * that support 64bit flow handle. The legacy drivers that don't support
7177 * 64bit flow handle won't be able to use HWRM_CFA_FLOW_XXX commands when
7178 * running with new firmware that only supports 64bit flow handle. The new
7179 * firmware support 64bit flow handle returns HWRM_ERR_CODE_CMD_NOT_SUPPORTED
7180 * status to the legacy driver when encounters these commands.
7181 */
7182 #define HWRM_FUNC_DRV_RGTR_INPUT_FLAGS_FLOW_HANDLE_64BIT_MODE \
7183 UINT32_C(0x8)
7184 uint32_t enables;
7185 /*
7186 * This bit must be '1' for the os_type field to be
7187 * configured.
7188 */
7189 #define HWRM_FUNC_DRV_RGTR_INPUT_ENABLES_OS_TYPE \
7190 UINT32_C(0x1)
7191 /*
7192 * This bit must be '1' for the ver field to be
7193 * configured.
7194 */
7195 #define HWRM_FUNC_DRV_RGTR_INPUT_ENABLES_VER \
7196 UINT32_C(0x2)
7197 /*
7198 * This bit must be '1' for the timestamp field to be
7199 * configured.
7200 */
7201 #define HWRM_FUNC_DRV_RGTR_INPUT_ENABLES_TIMESTAMP \
7202 UINT32_C(0x4)
7203 /*
7204 * This bit must be '1' for the vf_req_fwd field to be
7205 * configured.
7206 */
7207 #define HWRM_FUNC_DRV_RGTR_INPUT_ENABLES_VF_REQ_FWD \
7208 UINT32_C(0x8)
7209 /*
7210 * This bit must be '1' for the async_event_fwd field to be
7211 * configured.
7212 */
7213 #define HWRM_FUNC_DRV_RGTR_INPUT_ENABLES_ASYNC_EVENT_FWD \
7214 UINT32_C(0x10)
7215 /* This value indicates the type of OS. The values are based on CIM_OperatingSystem.mof file as published by the DMTF. */
7216 uint16_t os_type;
7217 /* Unknown */
7218 #define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_UNKNOWN UINT32_C(0x0)
7219 /* Other OS not listed below. */
7220 #define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_OTHER UINT32_C(0x1)
7221 /* MSDOS OS. */
7222 #define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_MSDOS UINT32_C(0xe)
7223 /* Windows OS. */
7224 #define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_WINDOWS UINT32_C(0x12)
7225 /* Solaris OS. */
7226 #define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_SOLARIS UINT32_C(0x1d)
7227 /* Linux OS. */
7228 #define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_LINUX UINT32_C(0x24)
7229 /* FreeBSD OS. */
7230 #define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_FREEBSD UINT32_C(0x2a)
7231 /* VMware ESXi OS. */
7232 #define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_ESXI UINT32_C(0x68)
7233 /* Microsoft Windows 8 64-bit OS. */
7234 #define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_WIN864 UINT32_C(0x73)
7235 /* Microsoft Windows Server 2012 R2 OS. */
7236 #define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_WIN2012R2 UINT32_C(0x74)
7237 /* UEFI driver. */
7238 #define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_UEFI UINT32_C(0x8000)
7239 #define HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_LAST \
7240 HWRM_FUNC_DRV_RGTR_INPUT_OS_TYPE_UEFI
7241 /* This is the 8bit major version of the driver. */
7242 uint8_t ver_maj_8b;
7243 /* This is the 8bit minor version of the driver. */
7244 uint8_t ver_min_8b;
7245 /* This is the 8bit update version of the driver. */
7246 uint8_t ver_upd_8b;
7247 uint8_t unused_0[3];
7248 /*
7249 * This is a 32-bit timestamp provided by the driver for
7250 * keep alive.
7251 * The timestamp is in multiples of 1ms.
7252 */
7253 uint32_t timestamp;
7254 uint8_t unused_1[4];
7255 /*
7256 * This is a 256-bit bit mask provided by the PF driver for
7257 * letting the HWRM know what commands issued by the VF driver
7258 * to the HWRM should be forwarded to the PF driver.
7259 * Nth bit refers to the Nth req_type.
7260 *
7261 * Setting Nth bit to 1 indicates that requests from the
7262 * VF driver with req_type equal to N shall be forwarded to
7263 * the parent PF driver.
7264 *
7265 * This field is not valid for the VF driver.
7266 */
7267 uint32_t vf_req_fwd[8];
7268 /*
7269 * This is a 256-bit bit mask provided by the function driver
7270 * (PF or VF driver) to indicate the list of asynchronous event
7271 * completions to be forwarded.
7272 *
7273 * Nth bit refers to the Nth event_id.
7274 *
7275 * Setting Nth bit to 1 by the function driver shall result in
7276 * the HWRM forwarding asynchronous event completion with
7277 * event_id equal to N.
7278 *
7279 * If all bits are set to 0 (value of 0), then the HWRM shall
7280 * not forward any asynchronous event completion to this
7281 * function driver.
7282 */
7283 uint32_t async_event_fwd[8];
7284 /* This is the 16bit major version of the driver. */
7285 uint16_t ver_maj;
7286 /* This is the 16bit minor version of the driver. */
7287 uint16_t ver_min;
7288 /* This is the 16bit update version of the driver. */
7289 uint16_t ver_upd;
7290 /* This is the 16bit patch version of the driver. */
7291 uint16_t ver_patch;
7292} __attribute__((packed));
7293
7294/* hwrm_func_drv_rgtr_output (size:128b/16B) */
7295struct hwrm_func_drv_rgtr_output {
7296 /* The specific error status for the command. */
7297 uint16_t error_code;
7298 /* The HWRM command request type. */
7299 uint16_t req_type;
7300 /* The sequence ID from the original command. */
7301 uint16_t seq_id;
7302 /* The length of the response data in number of bytes. */
7303 uint16_t resp_len;
7304 uint32_t flags;
7305 /*
7306 * When this bit is '1', it indicates that the
7307 * HWRM_FUNC_DRV_IF_CHANGE call is supported.
7308 */
7309 #define HWRM_FUNC_DRV_RGTR_OUTPUT_FLAGS_IF_CHANGE_SUPPORTED \
7310 UINT32_C(0x1)
7311 uint8_t unused_0[3];
7312 /*
7313 * This field is used in Output records to indicate that the output
7314 * is completely written to RAM. This field should be read as '1'
7315 * to indicate that the output has been completely written.
7316 * When writing a command completion or response to an internal processor,
7317 * the order of writes has to be such that this field is written last.
7318 */
7319 uint8_t valid;
7320} __attribute__((packed));
7321
7322/************************
7323 * hwrm_func_drv_unrgtr *
7324 ************************/
7325
7326
7327/* hwrm_func_drv_unrgtr_input (size:192b/24B) */
7328struct hwrm_func_drv_unrgtr_input {
7329 /* The HWRM command request type. */
7330 uint16_t req_type;
7331 /*
7332 * The completion ring to send the completion event on. This should
7333 * be the NQ ID returned from the `nq_alloc` HWRM command.
7334 */
7335 uint16_t cmpl_ring;
7336 /*
7337 * The sequence ID is used by the driver for tracking multiple
7338 * commands. This ID is treated as opaque data by the firmware and
7339 * the value is returned in the `hwrm_resp_hdr` upon completion.
7340 */
7341 uint16_t seq_id;
7342 /*
7343 * The target ID of the command:
7344 * * 0x0-0xFFF8 - The function ID
7345 * * 0xFFF8-0xFFFE - Reserved for internal processors
7346 * * 0xFFFF - HWRM
7347 */
7348 uint16_t target_id;
7349 /*
7350 * A physical address pointer pointing to a host buffer that the
7351 * command's response data will be written. This can be either a host
7352 * physical address (HPA) or a guest physical address (GPA) and must
7353 * point to a physically contiguous block of memory.
7354 */
7355 uint64_t resp_addr;
7356 uint32_t flags;
7357 /*
7358 * When this bit is '1', the function driver is notifying
7359 * the HWRM to prepare for the shutdown.
7360 */
7361 #define HWRM_FUNC_DRV_UNRGTR_INPUT_FLAGS_PREPARE_FOR_SHUTDOWN \
7362 UINT32_C(0x1)
7363 uint8_t unused_0[4];
7364} __attribute__((packed));
7365
7366/* hwrm_func_drv_unrgtr_output (size:128b/16B) */
7367struct hwrm_func_drv_unrgtr_output {
7368 /* The specific error status for the command. */
7369 uint16_t error_code;
7370 /* The HWRM command request type. */
7371 uint16_t req_type;
7372 /* The sequence ID from the original command. */
7373 uint16_t seq_id;
7374 /* The length of the response data in number of bytes. */
7375 uint16_t resp_len;
7376 uint8_t unused_0[7];
7377 /*
7378 * This field is used in Output records to indicate that the output
7379 * is completely written to RAM. This field should be read as '1'
7380 * to indicate that the output has been completely written.
7381 * When writing a command completion or response to an internal processor,
7382 * the order of writes has to be such that this field is written last.
7383 */
7384 uint8_t valid;
7385} __attribute__((packed));
7386
7387/**********************
7388 * hwrm_func_buf_rgtr *
7389 **********************/
7390
7391
7392/* hwrm_func_buf_rgtr_input (size:1024b/128B) */
7393struct hwrm_func_buf_rgtr_input {
7394 /* The HWRM command request type. */
7395 uint16_t req_type;
7396 /*
7397 * The completion ring to send the completion event on. This should
7398 * be the NQ ID returned from the `nq_alloc` HWRM command.
7399 */
7400 uint16_t cmpl_ring;
7401 /*
7402 * The sequence ID is used by the driver for tracking multiple
7403 * commands. This ID is treated as opaque data by the firmware and
7404 * the value is returned in the `hwrm_resp_hdr` upon completion.
7405 */
7406 uint16_t seq_id;
7407 /*
7408 * The target ID of the command:
7409 * * 0x0-0xFFF8 - The function ID
7410 * * 0xFFF8-0xFFFE - Reserved for internal processors
7411 * * 0xFFFF - HWRM
7412 */
7413 uint16_t target_id;
7414 /*
7415 * A physical address pointer pointing to a host buffer that the
7416 * command's response data will be written. This can be either a host
7417 * physical address (HPA) or a guest physical address (GPA) and must
7418 * point to a physically contiguous block of memory.
7419 */
7420 uint64_t resp_addr;
7421 uint32_t enables;
7422 /*
7423 * This bit must be '1' for the vf_id field to be
7424 * configured.
7425 */
7426 #define HWRM_FUNC_BUF_RGTR_INPUT_ENABLES_VF_ID UINT32_C(0x1)
7427 /*
7428 * This bit must be '1' for the err_buf_addr field to be
7429 * configured.
7430 */
7431 #define HWRM_FUNC_BUF_RGTR_INPUT_ENABLES_ERR_BUF_ADDR UINT32_C(0x2)
7432 /*
7433 * This value is used to identify a Virtual Function (VF).
7434 * The scope of VF ID is local within a PF.
7435 */
7436 uint16_t vf_id;
7437 /*
7438 * This field represents the number of pages used for request
7439 * buffer(s).
7440 */
7441 uint16_t req_buf_num_pages;
7442 /*
7443 * This field represents the page size used for request
7444 * buffer(s).
7445 */
7446 uint16_t req_buf_page_size;
7447 /* 16 bytes */
7448 #define HWRM_FUNC_BUF_RGTR_INPUT_REQ_BUF_PAGE_SIZE_16B UINT32_C(0x4)
7449 /* 4 Kbytes */
7450 #define HWRM_FUNC_BUF_RGTR_INPUT_REQ_BUF_PAGE_SIZE_4K UINT32_C(0xc)
7451 /* 8 Kbytes */
7452 #define HWRM_FUNC_BUF_RGTR_INPUT_REQ_BUF_PAGE_SIZE_8K UINT32_C(0xd)
7453 /* 64 Kbytes */
7454 #define HWRM_FUNC_BUF_RGTR_INPUT_REQ_BUF_PAGE_SIZE_64K UINT32_C(0x10)
7455 /* 2 Mbytes */
7456 #define HWRM_FUNC_BUF_RGTR_INPUT_REQ_BUF_PAGE_SIZE_2M UINT32_C(0x15)
7457 /* 4 Mbytes */
7458 #define HWRM_FUNC_BUF_RGTR_INPUT_REQ_BUF_PAGE_SIZE_4M UINT32_C(0x16)
7459 /* 1 Gbytes */
7460 #define HWRM_FUNC_BUF_RGTR_INPUT_REQ_BUF_PAGE_SIZE_1G UINT32_C(0x1e)
7461 #define HWRM_FUNC_BUF_RGTR_INPUT_REQ_BUF_PAGE_SIZE_LAST \
7462 HWRM_FUNC_BUF_RGTR_INPUT_REQ_BUF_PAGE_SIZE_1G
7463 /* The length of the request buffer per VF in bytes. */
7464 uint16_t req_buf_len;
7465 /* The length of the response buffer in bytes. */
7466 uint16_t resp_buf_len;
7467 uint8_t unused_0[2];
7468 /* This field represents the page address of page #0. */
7469 uint64_t req_buf_page_addr0;
7470 /* This field represents the page address of page #1. */
7471 uint64_t req_buf_page_addr1;
7472 /* This field represents the page address of page #2. */
7473 uint64_t req_buf_page_addr2;
7474 /* This field represents the page address of page #3. */
7475 uint64_t req_buf_page_addr3;
7476 /* This field represents the page address of page #4. */
7477 uint64_t req_buf_page_addr4;
7478 /* This field represents the page address of page #5. */
7479 uint64_t req_buf_page_addr5;
7480 /* This field represents the page address of page #6. */
7481 uint64_t req_buf_page_addr6;
7482 /* This field represents the page address of page #7. */
7483 uint64_t req_buf_page_addr7;
7484 /* This field represents the page address of page #8. */
7485 uint64_t req_buf_page_addr8;
7486 /* This field represents the page address of page #9. */
7487 uint64_t req_buf_page_addr9;
7488 /*
7489 * This field is used to receive the error reporting from
7490 * the chipset. Only applicable for PFs.
7491 */
7492 uint64_t error_buf_addr;
7493 /*
7494 * This field is used to receive the response forwarded by the
7495 * HWRM.
7496 */
7497 uint64_t resp_buf_addr;
7498} __attribute__((packed));
7499
7500/* hwrm_func_buf_rgtr_output (size:128b/16B) */
7501struct hwrm_func_buf_rgtr_output {
7502 /* The specific error status for the command. */
7503 uint16_t error_code;
7504 /* The HWRM command request type. */
7505 uint16_t req_type;
7506 /* The sequence ID from the original command. */
7507 uint16_t seq_id;
7508 /* The length of the response data in number of bytes. */
7509 uint16_t resp_len;
7510 uint8_t unused_0[7];
7511 /*
7512 * This field is used in Output records to indicate that the output
7513 * is completely written to RAM. This field should be read as '1'
7514 * to indicate that the output has been completely written.
7515 * When writing a command completion or response to an internal processor,
7516 * the order of writes has to be such that this field is written last.
7517 */
7518 uint8_t valid;
7519} __attribute__((packed));
7520
7521/************************
7522 * hwrm_func_buf_unrgtr *
7523 ************************/
7524
7525
7526/* hwrm_func_buf_unrgtr_input (size:192b/24B) */
7527struct hwrm_func_buf_unrgtr_input {
7528 /* The HWRM command request type. */
7529 uint16_t req_type;
7530 /*
7531 * The completion ring to send the completion event on. This should
7532 * be the NQ ID returned from the `nq_alloc` HWRM command.
7533 */
7534 uint16_t cmpl_ring;
7535 /*
7536 * The sequence ID is used by the driver for tracking multiple
7537 * commands. This ID is treated as opaque data by the firmware and
7538 * the value is returned in the `hwrm_resp_hdr` upon completion.
7539 */
7540 uint16_t seq_id;
7541 /*
7542 * The target ID of the command:
7543 * * 0x0-0xFFF8 - The function ID
7544 * * 0xFFF8-0xFFFE - Reserved for internal processors
7545 * * 0xFFFF - HWRM
7546 */
7547 uint16_t target_id;
7548 /*
7549 * A physical address pointer pointing to a host buffer that the
7550 * command's response data will be written. This can be either a host
7551 * physical address (HPA) or a guest physical address (GPA) and must
7552 * point to a physically contiguous block of memory.
7553 */
7554 uint64_t resp_addr;
7555 uint32_t enables;
7556 /*
7557 * This bit must be '1' for the vf_id field to be
7558 * configured.
7559 */
7560 #define HWRM_FUNC_BUF_UNRGTR_INPUT_ENABLES_VF_ID UINT32_C(0x1)
7561 /*
7562 * This value is used to identify a Virtual Function (VF).
7563 * The scope of VF ID is local within a PF.
7564 */
7565 uint16_t vf_id;
7566 uint8_t unused_0[2];
7567} __attribute__((packed));
7568
7569/* hwrm_func_buf_unrgtr_output (size:128b/16B) */
7570struct hwrm_func_buf_unrgtr_output {
7571 /* The specific error status for the command. */
7572 uint16_t error_code;
7573 /* The HWRM command request type. */
7574 uint16_t req_type;
7575 /* The sequence ID from the original command. */
7576 uint16_t seq_id;
7577 /* The length of the response data in number of bytes. */
7578 uint16_t resp_len;
7579 uint8_t unused_0[7];
7580 /*
7581 * This field is used in Output records to indicate that the output
7582 * is completely written to RAM. This field should be read as '1'
7583 * to indicate that the output has been completely written.
7584 * When writing a command completion or response to an internal processor,
7585 * the order of writes has to be such that this field is written last.
7586 */
7587 uint8_t valid;
7588} __attribute__((packed));
7589
7590/**********************
7591 * hwrm_func_drv_qver *
7592 **********************/
7593
7594
7595/* hwrm_func_drv_qver_input (size:192b/24B) */
7596struct hwrm_func_drv_qver_input {
7597 /* The HWRM command request type. */
7598 uint16_t req_type;
7599 /*
7600 * The completion ring to send the completion event on. This should
7601 * be the NQ ID returned from the `nq_alloc` HWRM command.
7602 */
7603 uint16_t cmpl_ring;
7604 /*
7605 * The sequence ID is used by the driver for tracking multiple
7606 * commands. This ID is treated as opaque data by the firmware and
7607 * the value is returned in the `hwrm_resp_hdr` upon completion.
7608 */
7609 uint16_t seq_id;
7610 /*
7611 * The target ID of the command:
7612 * * 0x0-0xFFF8 - The function ID
7613 * * 0xFFF8-0xFFFE - Reserved for internal processors
7614 * * 0xFFFF - HWRM
7615 */
7616 uint16_t target_id;
7617 /*
7618 * A physical address pointer pointing to a host buffer that the
7619 * command's response data will be written. This can be either a host
7620 * physical address (HPA) or a guest physical address (GPA) and must
7621 * point to a physically contiguous block of memory.
7622 */
7623 uint64_t resp_addr;
7624 /* Reserved for future use. */
7625 uint32_t reserved;
7626 /*
7627 * Function ID of the function that is being queried.
7628 * 0xFF... (All Fs) if the query is for the requesting
7629 * function.
7630 */
7631 uint16_t fid;
7632 uint8_t unused_0[2];
7633} __attribute__((packed));
7634
7635/* hwrm_func_drv_qver_output (size:256b/32B) */
7636struct hwrm_func_drv_qver_output {
7637 /* The specific error status for the command. */
7638 uint16_t error_code;
7639 /* The HWRM command request type. */
7640 uint16_t req_type;
7641 /* The sequence ID from the original command. */
7642 uint16_t seq_id;
7643 /* The length of the response data in number of bytes. */
7644 uint16_t resp_len;
7645 /* This value indicates the type of OS. The values are based on CIM_OperatingSystem.mof file as published by the DMTF. */
7646 uint16_t os_type;
7647 /* Unknown */
7648 #define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_UNKNOWN UINT32_C(0x0)
7649 /* Other OS not listed below. */
7650 #define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_OTHER UINT32_C(0x1)
7651 /* MSDOS OS. */
7652 #define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_MSDOS UINT32_C(0xe)
7653 /* Windows OS. */
7654 #define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_WINDOWS UINT32_C(0x12)
7655 /* Solaris OS. */
7656 #define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_SOLARIS UINT32_C(0x1d)
7657 /* Linux OS. */
7658 #define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_LINUX UINT32_C(0x24)
7659 /* FreeBSD OS. */
7660 #define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_FREEBSD UINT32_C(0x2a)
7661 /* VMware ESXi OS. */
7662 #define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_ESXI UINT32_C(0x68)
7663 /* Microsoft Windows 8 64-bit OS. */
7664 #define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_WIN864 UINT32_C(0x73)
7665 /* Microsoft Windows Server 2012 R2 OS. */
7666 #define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_WIN2012R2 UINT32_C(0x74)
7667 /* UEFI driver. */
7668 #define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_UEFI UINT32_C(0x8000)
7669 #define HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_LAST \
7670 HWRM_FUNC_DRV_QVER_OUTPUT_OS_TYPE_UEFI
7671 /* This is the 8bit major version of the driver. */
7672 uint8_t ver_maj_8b;
7673 /* This is the 8bit minor version of the driver. */
7674 uint8_t ver_min_8b;
7675 /* This is the 8bit update version of the driver. */
7676 uint8_t ver_upd_8b;
7677 uint8_t unused_0[3];
7678 /* This is the 16bit major version of the driver. */
7679 uint16_t ver_maj;
7680 /* This is the 16bit minor version of the driver. */
7681 uint16_t ver_min;
7682 /* This is the 16bit update version of the driver. */
7683 uint16_t ver_upd;
7684 /* This is the 16bit patch version of the driver. */
7685 uint16_t ver_patch;
7686 uint8_t unused_1[7];
7687 /*
7688 * This field is used in Output records to indicate that the output
7689 * is completely written to RAM. This field should be read as '1'
7690 * to indicate that the output has been completely written.
7691 * When writing a command completion or response to an internal processor,
7692 * the order of writes has to be such that this field is written last.
7693 */
7694 uint8_t valid;
7695} __attribute__((packed));
7696
7697/****************************
7698 * hwrm_func_resource_qcaps *
7699 ****************************/
7700
7701
7702/* hwrm_func_resource_qcaps_input (size:192b/24B) */
7703struct hwrm_func_resource_qcaps_input {
7704 /* The HWRM command request type. */
7705 uint16_t req_type;
7706 /*
7707 * The completion ring to send the completion event on. This should
7708 * be the NQ ID returned from the `nq_alloc` HWRM command.
7709 */
7710 uint16_t cmpl_ring;
7711 /*
7712 * The sequence ID is used by the driver for tracking multiple
7713 * commands. This ID is treated as opaque data by the firmware and
7714 * the value is returned in the `hwrm_resp_hdr` upon completion.
7715 */
7716 uint16_t seq_id;
7717 /*
7718 * The target ID of the command:
7719 * * 0x0-0xFFF8 - The function ID
7720 * * 0xFFF8-0xFFFE - Reserved for internal processors
7721 * * 0xFFFF - HWRM
7722 */
7723 uint16_t target_id;
7724 /*
7725 * A physical address pointer pointing to a host buffer that the
7726 * command's response data will be written. This can be either a host
7727 * physical address (HPA) or a guest physical address (GPA) and must
7728 * point to a physically contiguous block of memory.
7729 */
7730 uint64_t resp_addr;
7731 /*
7732 * Function ID of the function that is being queried.
7733 * 0xFF... (All Fs) if the query is for the requesting
7734 * function.
7735 */
7736 uint16_t fid;
7737 uint8_t unused_0[6];
7738} __attribute__((packed));
7739
7740/* hwrm_func_resource_qcaps_output (size:448b/56B) */
7741struct hwrm_func_resource_qcaps_output {
7742 /* The specific error status for the command. */
7743 uint16_t error_code;
7744 /* The HWRM command request type. */
7745 uint16_t req_type;
7746 /* The sequence ID from the original command. */
7747 uint16_t seq_id;
7748 /* The length of the response data in number of bytes. */
7749 uint16_t resp_len;
7750 /* Maximum guaranteed number of VFs supported by PF. Not applicable for VFs. */
7751 uint16_t max_vfs;
7752 /* Maximum guaranteed number of MSI-X vectors supported by function */
7753 uint16_t max_msix;
7754 /* Hint of strategy to be used by PF driver to reserve resources for its VF */
7755 uint16_t vf_reservation_strategy;
7756 /* The PF driver should evenly divide its remaining resources among all VFs. */
7757 #define HWRM_FUNC_RESOURCE_QCAPS_OUTPUT_VF_RESERVATION_STRATEGY_MAXIMAL \
7758 UINT32_C(0x0)
7759 /* The PF driver should only reserve minimal resources for each VF. */
7760 #define HWRM_FUNC_RESOURCE_QCAPS_OUTPUT_VF_RESERVATION_STRATEGY_MINIMAL \
7761 UINT32_C(0x1)
7762 /*
7763 * The PF driver should not reserve any resources for each VF until the
7764 * the VF interface is brought up.
7765 */
7766 #define HWRM_FUNC_RESOURCE_QCAPS_OUTPUT_VF_RESERVATION_STRATEGY_MINIMAL_STATIC \
7767 UINT32_C(0x2)
7768 #define HWRM_FUNC_RESOURCE_QCAPS_OUTPUT_VF_RESERVATION_STRATEGY_LAST \
7769 HWRM_FUNC_RESOURCE_QCAPS_OUTPUT_VF_RESERVATION_STRATEGY_MINIMAL_STATIC
7770 /* Minimum guaranteed number of RSS/COS contexts */
7771 uint16_t min_rsscos_ctx;
7772 /* Maximum non-guaranteed number of RSS/COS contexts */
7773 uint16_t max_rsscos_ctx;
7774 /* Minimum guaranteed number of completion rings */
7775 uint16_t min_cmpl_rings;
7776 /* Maximum non-guaranteed number of completion rings */
7777 uint16_t max_cmpl_rings;
7778 /* Minimum guaranteed number of transmit rings */
7779 uint16_t min_tx_rings;
7780 /* Maximum non-guaranteed number of transmit rings */
7781 uint16_t max_tx_rings;
7782 /* Minimum guaranteed number of receive rings */
7783 uint16_t min_rx_rings;
7784 /* Maximum non-guaranteed number of receive rings */
7785 uint16_t max_rx_rings;
7786 /* Minimum guaranteed number of L2 contexts */
7787 uint16_t min_l2_ctxs;
7788 /* Maximum non-guaranteed number of L2 contexts */
7789 uint16_t max_l2_ctxs;
7790 /* Minimum guaranteed number of VNICs */
7791 uint16_t min_vnics;
7792 /* Maximum non-guaranteed number of VNICs */
7793 uint16_t max_vnics;
7794 /* Minimum guaranteed number of statistic contexts */
7795 uint16_t min_stat_ctx;
7796 /* Maximum non-guaranteed number of statistic contexts */
7797 uint16_t max_stat_ctx;
7798 /* Minimum guaranteed number of ring groups */
7799 uint16_t min_hw_ring_grps;
7800 /* Maximum non-guaranteed number of ring groups */
7801 uint16_t max_hw_ring_grps;
7802 /*
7803 * Maximum number of inputs into the transmit scheduler for this function.
7804 * The number of TX rings assigned to the function cannot exceed this value.
7805 */
7806 uint16_t max_tx_scheduler_inputs;
7807 uint16_t flags;
7808 /*
7809 * When this bit is '1', it indicates that VF_RESOURCE_CFG supports
7810 * feature to reserve all minimum resources when minimum >= 1, otherwise
7811 * returns an error.
7812 */
7813 #define HWRM_FUNC_RESOURCE_QCAPS_OUTPUT_FLAGS_MIN_GUARANTEED \
7814 UINT32_C(0x1)
7815 uint8_t unused_0[5];
7816 /*
7817 * This field is used in Output records to indicate that the output
7818 * is completely written to RAM. This field should be read as '1'
7819 * to indicate that the output has been completely written.
7820 * When writing a command completion or response to an internal processor,
7821 * the order of writes has to be such that this field is written last.
7822 */
7823 uint8_t valid;
7824} __attribute__((packed));
7825
7826/*********************************
7827 * hwrm_func_backing_store_qcaps *
7828 *********************************/
7829
7830
7831/* hwrm_func_backing_store_qcaps_input (size:128b/16B) */
7832struct hwrm_func_backing_store_qcaps_input {
7833 /* The HWRM command request type. */
7834 uint16_t req_type;
7835 /*
7836 * The completion ring to send the completion event on. This should
7837 * be the NQ ID returned from the `nq_alloc` HWRM command.
7838 */
7839 uint16_t cmpl_ring;
7840 /*
7841 * The sequence ID is used by the driver for tracking multiple
7842 * commands. This ID is treated as opaque data by the firmware and
7843 * the value is returned in the `hwrm_resp_hdr` upon completion.
7844 */
7845 uint16_t seq_id;
7846 /*
7847 * The target ID of the command:
7848 * * 0x0-0xFFF8 - The function ID
7849 * * 0xFFF8-0xFFFE - Reserved for internal processors
7850 * * 0xFFFF - HWRM
7851 */
7852 uint16_t target_id;
7853 /*
7854 * A physical address pointer pointing to a host buffer that the
7855 * command's response data will be written. This can be either a host
7856 * physical address (HPA) or a guest physical address (GPA) and must
7857 * point to a physically contiguous block of memory.
7858 */
7859 uint64_t resp_addr;
7860} __attribute__((packed));
7861
7862/* hwrm_func_backing_store_qcaps_output (size:576b/72B) */
7863struct hwrm_func_backing_store_qcaps_output {
7864 /* The specific error status for the command. */
7865 uint16_t error_code;
7866 /* The HWRM command request type. */
7867 uint16_t req_type;
7868 /* The sequence ID from the original command. */
7869 uint16_t seq_id;
7870 /* The length of the response data in number of bytes. */
7871 uint16_t resp_len;
7872 /* Maximum number of QP context entries supported for this function. */
7873 uint32_t qp_max_entries;
7874 /*
7875 * Minimum number of QP context entries that are needed to be reserved
7876 * for QP1 for the PF and its VFs. PF drivers must allocate at least
7877 * this many QP context entries, even if RoCE will not be used.
7878 */
7879 uint16_t qp_min_qp1_entries;
7880 /* Maximum number of QP context entries that can be used for L2. */
7881 uint16_t qp_max_l2_entries;
7882 /* Number of bytes that must be allocated for each context entry. */
7883 uint16_t qp_entry_size;
7884 /* Maximum number of SRQ context entries that can be used for L2. */
7885 uint16_t srq_max_l2_entries;
7886 /* Maximum number of SRQ context entries supported for this function. */
7887 uint32_t srq_max_entries;
7888 /* Number of bytes that must be allocated for each context entry. */
7889 uint16_t srq_entry_size;
7890 /* Maximum number of CQ context entries that can be used for L2. */
7891 uint16_t cq_max_l2_entries;
7892 /* Maximum number of CQ context entries supported for this function. */
7893 uint32_t cq_max_entries;
7894 /* Number of bytes that must be allocated for each context entry. */
7895 uint16_t cq_entry_size;
7896 /* Maximum number of VNIC context entries supported for this function. */
7897 uint16_t vnic_max_vnic_entries;
7898 /* Maximum number of Ring table context entries supported for this function. */
7899 uint16_t vnic_max_ring_table_entries;
7900 /* Number of bytes that must be allocated for each context entry. */
7901 uint16_t vnic_entry_size;
7902 /* Maximum number of statistic context entries supported for this function. */
7903 uint32_t stat_max_entries;
7904 /* Number of bytes that must be allocated for each context entry. */
7905 uint16_t stat_entry_size;
7906 /* Number of bytes that must be allocated for each context entry. */
7907 uint16_t tqm_entry_size;
7908 /* Minimum number of TQM context entries required per ring. */
7909 uint32_t tqm_min_entries_per_ring;
7910 /*
7911 * Maximum number of TQM context entries supported per ring. This is
7912 * actually a recommended TQM queue size based on worst case usage of
7913 * the TQM queue.
7914 *
7915 * TQM fastpath rings should be sized large enough to accommodate the
7916 * maximum number of QPs (either L2 or RoCE, or both if shared)
7917 * that can be enqueued to the TQM ring.
7918 *
7919 * TQM slowpath rings should be sized as follows:
7920 *
7921 * num_entries = num_vnics + num_l2_tx_rings + num_roce_qps + tqm_min_size
7922 *
7923 * Where:
7924 * num_vnics is the number of VNICs allocated in the VNIC backing store
7925 * num_l2_tx_rings is the number of L2 rings in the QP backing store
7926 * num_roce_qps is the number of RoCE QPs in the QP backing store
7927 * tqm_min_size is tqm_min_entries_per_ring reported by
7928 * HWRM_FUNC_BACKING_STORE_QCAPS
7929 *
7930 * Note that TQM ring sizes cannot be extended while the system is
7931 * operational. If a PF driver needs to extend a TQM ring, it needs
7932 * to reset the function (e.g. HWRM_FUNC_RESET) and then reallocate
7933 * the backing store.
7934 */
7935 uint32_t tqm_max_entries_per_ring;
7936 /* Maximum number of MR/AV context entries supported for this function. */
7937 uint32_t mrav_max_entries;
7938 /* Number of bytes that must be allocated for each context entry. */
7939 uint16_t mrav_entry_size;
7940 /* Number of bytes that must be allocated for each context entry. */
7941 uint16_t tim_entry_size;
7942 /* Maximum number of Timer context entries supported for this function. */
7943 uint32_t tim_max_entries;
7944 uint8_t unused_0[2];
7945 /*
7946 * The number of entries specified for any TQM ring must be a
7947 * multiple of this value to prevent any resource allocation
7948 * limitations.
7949 */
7950 uint8_t tqm_entries_multiple;
7951 /*
7952 * This field is used in Output records to indicate that the output
7953 * is completely written to RAM. This field should be read as '1'
7954 * to indicate that the output has been completely written.
7955 * When writing a command completion or response to an internal processor,
7956 * the order of writes has to be such that this field is written last.
7957 */
7958 uint8_t valid;
7959} __attribute__((packed));
7960
7961/*******************************
7962 * hwrm_func_backing_store_cfg *
7963 *******************************/
7964
7965
7966/* hwrm_func_backing_store_cfg_input (size:2048b/256B) */
7967struct hwrm_func_backing_store_cfg_input {
7968 /* The HWRM command request type. */
7969 uint16_t req_type;
7970 /*
7971 * The completion ring to send the completion event on. This should
7972 * be the NQ ID returned from the `nq_alloc` HWRM command.
7973 */
7974 uint16_t cmpl_ring;
7975 /*
7976 * The sequence ID is used by the driver for tracking multiple
7977 * commands. This ID is treated as opaque data by the firmware and
7978 * the value is returned in the `hwrm_resp_hdr` upon completion.
7979 */
7980 uint16_t seq_id;
7981 /*
7982 * The target ID of the command:
7983 * * 0x0-0xFFF8 - The function ID
7984 * * 0xFFF8-0xFFFE - Reserved for internal processors
7985 * * 0xFFFF - HWRM
7986 */
7987 uint16_t target_id;
7988 /*
7989 * A physical address pointer pointing to a host buffer that the
7990 * command's response data will be written. This can be either a host
7991 * physical address (HPA) or a guest physical address (GPA) and must
7992 * point to a physically contiguous block of memory.
7993 */
7994 uint64_t resp_addr;
7995 uint32_t flags;
7996 /*
7997 * When set, the firmware only uses on-chip resources and does not
7998 * expect any backing store to be provided by the host driver. This
7999 * mode provides minimal L2 functionality (e.g. limited L2 resources,
8000 * no RoCE).
8001 */
8002 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_FLAGS_PREBOOT_MODE \
8003 UINT32_C(0x1)
8004 uint32_t enables;
8005 /*
8006 * This bit must be '1' for the qp fields to be
8007 * configured.
8008 */
8009 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_QP \
8010 UINT32_C(0x1)
8011 /*
8012 * This bit must be '1' for the srq fields to be
8013 * configured.
8014 */
8015 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_SRQ \
8016 UINT32_C(0x2)
8017 /*
8018 * This bit must be '1' for the cq fields to be
8019 * configured.
8020 */
8021 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_CQ \
8022 UINT32_C(0x4)
8023 /*
8024 * This bit must be '1' for the vnic fields to be
8025 * configured.
8026 */
8027 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_VNIC \
8028 UINT32_C(0x8)
8029 /*
8030 * This bit must be '1' for the stat fields to be
8031 * configured.
8032 */
8033 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_STAT \
8034 UINT32_C(0x10)
8035 /*
8036 * This bit must be '1' for the tqm_sp fields to be
8037 * configured.
8038 */
8039 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_SP \
8040 UINT32_C(0x20)
8041 /*
8042 * This bit must be '1' for the tqm_ring0 fields to be
8043 * configured.
8044 */
8045 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING0 \
8046 UINT32_C(0x40)
8047 /*
8048 * This bit must be '1' for the tqm_ring1 fields to be
8049 * configured.
8050 */
8051 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING1 \
8052 UINT32_C(0x80)
8053 /*
8054 * This bit must be '1' for the tqm_ring2 fields to be
8055 * configured.
8056 */
8057 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING2 \
8058 UINT32_C(0x100)
8059 /*
8060 * This bit must be '1' for the tqm_ring3 fields to be
8061 * configured.
8062 */
8063 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING3 \
8064 UINT32_C(0x200)
8065 /*
8066 * This bit must be '1' for the tqm_ring4 fields to be
8067 * configured.
8068 */
8069 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING4 \
8070 UINT32_C(0x400)
8071 /*
8072 * This bit must be '1' for the tqm_ring5 fields to be
8073 * configured.
8074 */
8075 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING5 \
8076 UINT32_C(0x800)
8077 /*
8078 * This bit must be '1' for the tqm_ring6 fields to be
8079 * configured.
8080 */
8081 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING6 \
8082 UINT32_C(0x1000)
8083 /*
8084 * This bit must be '1' for the tqm_ring7 fields to be
8085 * configured.
8086 */
8087 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TQM_RING7 \
8088 UINT32_C(0x2000)
8089 /*
8090 * This bit must be '1' for the mrav fields to be
8091 * configured.
8092 */
8093 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_MRAV \
8094 UINT32_C(0x4000)
8095 /*
8096 * This bit must be '1' for the tim fields to be
8097 * configured.
8098 */
8099 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_ENABLES_TIM \
8100 UINT32_C(0x8000)
8101 /* QPC page size and level. */
8102 uint8_t qpc_pg_size_qpc_lvl;
8103 /* QPC PBL indirect levels. */
8104 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_LVL_MASK \
8105 UINT32_C(0xf)
8106 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_LVL_SFT 0
8107 /* PBL pointer is physical start address. */
8108 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_LVL_LVL_0 \
8109 UINT32_C(0x0)
8110 /* PBL pointer points to PTE table. */
8111 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_LVL_LVL_1 \
8112 UINT32_C(0x1)
8113 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
8114 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_LVL_LVL_2 \
8115 UINT32_C(0x2)
8116 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_LVL_LAST \
8117 HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_LVL_LVL_2
8118 /* QPC page size. */
8119 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_MASK \
8120 UINT32_C(0xf0)
8121 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_SFT 4
8122 /* 4KB. */
8123 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_PG_4K \
8124 (UINT32_C(0x0) << 4)
8125 /* 8KB. */
8126 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_PG_8K \
8127 (UINT32_C(0x1) << 4)
8128 /* 64KB. */
8129 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_PG_64K \
8130 (UINT32_C(0x2) << 4)
8131 /* 2MB. */
8132 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_PG_2M \
8133 (UINT32_C(0x3) << 4)
8134 /* 8MB. */
8135 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_PG_8M \
8136 (UINT32_C(0x4) << 4)
8137 /* 1GB. */
8138 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_PG_1G \
8139 (UINT32_C(0x5) << 4)
8140 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_LAST \
8141 HWRM_FUNC_BACKING_STORE_CFG_INPUT_QPC_PG_SIZE_PG_1G
8142 /* SRQ page size and level. */
8143 uint8_t srq_pg_size_srq_lvl;
8144 /* SRQ PBL indirect levels. */
8145 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_LVL_MASK \
8146 UINT32_C(0xf)
8147 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_LVL_SFT 0
8148 /* PBL pointer is physical start address. */
8149 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_LVL_LVL_0 \
8150 UINT32_C(0x0)
8151 /* PBL pointer points to PTE table. */
8152 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_LVL_LVL_1 \
8153 UINT32_C(0x1)
8154 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
8155 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_LVL_LVL_2 \
8156 UINT32_C(0x2)
8157 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_LVL_LAST \
8158 HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_LVL_LVL_2
8159 /* SRQ page size. */
8160 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_MASK \
8161 UINT32_C(0xf0)
8162 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_SFT 4
8163 /* 4KB. */
8164 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_4K \
8165 (UINT32_C(0x0) << 4)
8166 /* 8KB. */
8167 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_8K \
8168 (UINT32_C(0x1) << 4)
8169 /* 64KB. */
8170 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_64K \
8171 (UINT32_C(0x2) << 4)
8172 /* 2MB. */
8173 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_2M \
8174 (UINT32_C(0x3) << 4)
8175 /* 8MB. */
8176 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_8M \
8177 (UINT32_C(0x4) << 4)
8178 /* 1GB. */
8179 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_1G \
8180 (UINT32_C(0x5) << 4)
8181 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_LAST \
8182 HWRM_FUNC_BACKING_STORE_CFG_INPUT_SRQ_PG_SIZE_PG_1G
8183 /* CQ page size and level. */
8184 uint8_t cq_pg_size_cq_lvl;
8185 /* CQ PBL indirect levels. */
8186 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_LVL_MASK \
8187 UINT32_C(0xf)
8188 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_LVL_SFT 0
8189 /* PBL pointer is physical start address. */
8190 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_LVL_LVL_0 \
8191 UINT32_C(0x0)
8192 /* PBL pointer points to PTE table. */
8193 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_LVL_LVL_1 \
8194 UINT32_C(0x1)
8195 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
8196 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_LVL_LVL_2 \
8197 UINT32_C(0x2)
8198 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_LVL_LAST \
8199 HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_LVL_LVL_2
8200 /* CQ page size. */
8201 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_MASK \
8202 UINT32_C(0xf0)
8203 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_SFT 4
8204 /* 4KB. */
8205 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_PG_4K \
8206 (UINT32_C(0x0) << 4)
8207 /* 8KB. */
8208 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_PG_8K \
8209 (UINT32_C(0x1) << 4)
8210 /* 64KB. */
8211 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_PG_64K \
8212 (UINT32_C(0x2) << 4)
8213 /* 2MB. */
8214 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_PG_2M \
8215 (UINT32_C(0x3) << 4)
8216 /* 8MB. */
8217 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_PG_8M \
8218 (UINT32_C(0x4) << 4)
8219 /* 1GB. */
8220 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_PG_1G \
8221 (UINT32_C(0x5) << 4)
8222 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_LAST \
8223 HWRM_FUNC_BACKING_STORE_CFG_INPUT_CQ_PG_SIZE_PG_1G
8224 /* VNIC page size and level. */
8225 uint8_t vnic_pg_size_vnic_lvl;
8226 /* VNIC PBL indirect levels. */
8227 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_LVL_MASK \
8228 UINT32_C(0xf)
8229 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_LVL_SFT 0
8230 /* PBL pointer is physical start address. */
8231 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_LVL_LVL_0 \
8232 UINT32_C(0x0)
8233 /* PBL pointer points to PTE table. */
8234 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_LVL_LVL_1 \
8235 UINT32_C(0x1)
8236 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
8237 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_LVL_LVL_2 \
8238 UINT32_C(0x2)
8239 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_LVL_LAST \
8240 HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_LVL_LVL_2
8241 /* VNIC page size. */
8242 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_MASK \
8243 UINT32_C(0xf0)
8244 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_SFT 4
8245 /* 4KB. */
8246 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_PG_4K \
8247 (UINT32_C(0x0) << 4)
8248 /* 8KB. */
8249 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_PG_8K \
8250 (UINT32_C(0x1) << 4)
8251 /* 64KB. */
8252 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_PG_64K \
8253 (UINT32_C(0x2) << 4)
8254 /* 2MB. */
8255 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_PG_2M \
8256 (UINT32_C(0x3) << 4)
8257 /* 8MB. */
8258 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_PG_8M \
8259 (UINT32_C(0x4) << 4)
8260 /* 1GB. */
8261 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_PG_1G \
8262 (UINT32_C(0x5) << 4)
8263 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_LAST \
8264 HWRM_FUNC_BACKING_STORE_CFG_INPUT_VNIC_PG_SIZE_PG_1G
8265 /* Stat page size and level. */
8266 uint8_t stat_pg_size_stat_lvl;
8267 /* Stat PBL indirect levels. */
8268 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_LVL_MASK \
8269 UINT32_C(0xf)
8270 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_LVL_SFT 0
8271 /* PBL pointer is physical start address. */
8272 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_LVL_LVL_0 \
8273 UINT32_C(0x0)
8274 /* PBL pointer points to PTE table. */
8275 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_LVL_LVL_1 \
8276 UINT32_C(0x1)
8277 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
8278 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_LVL_LVL_2 \
8279 UINT32_C(0x2)
8280 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_LVL_LAST \
8281 HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_LVL_LVL_2
8282 /* Stat page size. */
8283 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_MASK \
8284 UINT32_C(0xf0)
8285 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_SFT 4
8286 /* 4KB. */
8287 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_PG_4K \
8288 (UINT32_C(0x0) << 4)
8289 /* 8KB. */
8290 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_PG_8K \
8291 (UINT32_C(0x1) << 4)
8292 /* 64KB. */
8293 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_PG_64K \
8294 (UINT32_C(0x2) << 4)
8295 /* 2MB. */
8296 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_PG_2M \
8297 (UINT32_C(0x3) << 4)
8298 /* 8MB. */
8299 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_PG_8M \
8300 (UINT32_C(0x4) << 4)
8301 /* 1GB. */
8302 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_PG_1G \
8303 (UINT32_C(0x5) << 4)
8304 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_LAST \
8305 HWRM_FUNC_BACKING_STORE_CFG_INPUT_STAT_PG_SIZE_PG_1G
8306 /* TQM slow path page size and level. */
8307 uint8_t tqm_sp_pg_size_tqm_sp_lvl;
8308 /* TQM slow path PBL indirect levels. */
8309 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_LVL_MASK \
8310 UINT32_C(0xf)
8311 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_LVL_SFT 0
8312 /* PBL pointer is physical start address. */
8313 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_LVL_LVL_0 \
8314 UINT32_C(0x0)
8315 /* PBL pointer points to PTE table. */
8316 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_LVL_LVL_1 \
8317 UINT32_C(0x1)
8318 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
8319 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_LVL_LVL_2 \
8320 UINT32_C(0x2)
8321 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_LVL_LAST \
8322 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_LVL_LVL_2
8323 /* TQM slow path page size. */
8324 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_MASK \
8325 UINT32_C(0xf0)
8326 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_SFT 4
8327 /* 4KB. */
8328 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_PG_4K \
8329 (UINT32_C(0x0) << 4)
8330 /* 8KB. */
8331 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_PG_8K \
8332 (UINT32_C(0x1) << 4)
8333 /* 64KB. */
8334 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_PG_64K \
8335 (UINT32_C(0x2) << 4)
8336 /* 2MB. */
8337 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_PG_2M \
8338 (UINT32_C(0x3) << 4)
8339 /* 8MB. */
8340 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_PG_8M \
8341 (UINT32_C(0x4) << 4)
8342 /* 1GB. */
8343 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_PG_1G \
8344 (UINT32_C(0x5) << 4)
8345 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_LAST \
8346 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_SP_PG_SIZE_PG_1G
8347 /* TQM ring 0 page size and level. */
8348 uint8_t tqm_ring0_pg_size_tqm_ring0_lvl;
8349 /* TQM ring 0 PBL indirect levels. */
8350 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_LVL_MASK \
8351 UINT32_C(0xf)
8352 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_LVL_SFT 0
8353 /* PBL pointer is physical start address. */
8354 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_LVL_LVL_0 \
8355 UINT32_C(0x0)
8356 /* PBL pointer points to PTE table. */
8357 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_LVL_LVL_1 \
8358 UINT32_C(0x1)
8359 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
8360 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_LVL_LVL_2 \
8361 UINT32_C(0x2)
8362 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_LVL_LAST \
8363 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_LVL_LVL_2
8364 /* TQM ring 0 page size. */
8365 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_MASK \
8366 UINT32_C(0xf0)
8367 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_SFT 4
8368 /* 4KB. */
8369 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_PG_4K \
8370 (UINT32_C(0x0) << 4)
8371 /* 8KB. */
8372 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_PG_8K \
8373 (UINT32_C(0x1) << 4)
8374 /* 64KB. */
8375 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_PG_64K \
8376 (UINT32_C(0x2) << 4)
8377 /* 2MB. */
8378 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_PG_2M \
8379 (UINT32_C(0x3) << 4)
8380 /* 8MB. */
8381 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_PG_8M \
8382 (UINT32_C(0x4) << 4)
8383 /* 1GB. */
8384 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_PG_1G \
8385 (UINT32_C(0x5) << 4)
8386 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_LAST \
8387 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING0_PG_SIZE_PG_1G
8388 /* TQM ring 1 page size and level. */
8389 uint8_t tqm_ring1_pg_size_tqm_ring1_lvl;
8390 /* TQM ring 1 PBL indirect levels. */
8391 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_LVL_MASK \
8392 UINT32_C(0xf)
8393 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_LVL_SFT 0
8394 /* PBL pointer is physical start address. */
8395 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_LVL_LVL_0 \
8396 UINT32_C(0x0)
8397 /* PBL pointer points to PTE table. */
8398 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_LVL_LVL_1 \
8399 UINT32_C(0x1)
8400 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
8401 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_LVL_LVL_2 \
8402 UINT32_C(0x2)
8403 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_LVL_LAST \
8404 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_LVL_LVL_2
8405 /* TQM ring 1 page size. */
8406 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_MASK \
8407 UINT32_C(0xf0)
8408 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_SFT 4
8409 /* 4KB. */
8410 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_PG_4K \
8411 (UINT32_C(0x0) << 4)
8412 /* 8KB. */
8413 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_PG_8K \
8414 (UINT32_C(0x1) << 4)
8415 /* 64KB. */
8416 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_PG_64K \
8417 (UINT32_C(0x2) << 4)
8418 /* 2MB. */
8419 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_PG_2M \
8420 (UINT32_C(0x3) << 4)
8421 /* 8MB. */
8422 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_PG_8M \
8423 (UINT32_C(0x4) << 4)
8424 /* 1GB. */
8425 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_PG_1G \
8426 (UINT32_C(0x5) << 4)
8427 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_LAST \
8428 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING1_PG_SIZE_PG_1G
8429 /* TQM ring 2 page size and level. */
8430 uint8_t tqm_ring2_pg_size_tqm_ring2_lvl;
8431 /* TQM ring 2 PBL indirect levels. */
8432 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_LVL_MASK \
8433 UINT32_C(0xf)
8434 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_LVL_SFT 0
8435 /* PBL pointer is physical start address. */
8436 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_LVL_LVL_0 \
8437 UINT32_C(0x0)
8438 /* PBL pointer points to PTE table. */
8439 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_LVL_LVL_1 \
8440 UINT32_C(0x1)
8441 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
8442 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_LVL_LVL_2 \
8443 UINT32_C(0x2)
8444 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_LVL_LAST \
8445 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_LVL_LVL_2
8446 /* TQM ring 2 page size. */
8447 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_MASK \
8448 UINT32_C(0xf0)
8449 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_SFT 4
8450 /* 4KB. */
8451 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_PG_4K \
8452 (UINT32_C(0x0) << 4)
8453 /* 8KB. */
8454 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_PG_8K \
8455 (UINT32_C(0x1) << 4)
8456 /* 64KB. */
8457 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_PG_64K \
8458 (UINT32_C(0x2) << 4)
8459 /* 2MB. */
8460 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_PG_2M \
8461 (UINT32_C(0x3) << 4)
8462 /* 8MB. */
8463 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_PG_8M \
8464 (UINT32_C(0x4) << 4)
8465 /* 1GB. */
8466 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_PG_1G \
8467 (UINT32_C(0x5) << 4)
8468 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_LAST \
8469 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING2_PG_SIZE_PG_1G
8470 /* TQM ring 3 page size and level. */
8471 uint8_t tqm_ring3_pg_size_tqm_ring3_lvl;
8472 /* TQM ring 3 PBL indirect levels. */
8473 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_LVL_MASK \
8474 UINT32_C(0xf)
8475 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_LVL_SFT 0
8476 /* PBL pointer is physical start address. */
8477 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_LVL_LVL_0 \
8478 UINT32_C(0x0)
8479 /* PBL pointer points to PTE table. */
8480 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_LVL_LVL_1 \
8481 UINT32_C(0x1)
8482 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
8483 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_LVL_LVL_2 \
8484 UINT32_C(0x2)
8485 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_LVL_LAST \
8486 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_LVL_LVL_2
8487 /* TQM ring 3 page size. */
8488 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_MASK \
8489 UINT32_C(0xf0)
8490 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_SFT 4
8491 /* 4KB. */
8492 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_PG_4K \
8493 (UINT32_C(0x0) << 4)
8494 /* 8KB. */
8495 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_PG_8K \
8496 (UINT32_C(0x1) << 4)
8497 /* 64KB. */
8498 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_PG_64K \
8499 (UINT32_C(0x2) << 4)
8500 /* 2MB. */
8501 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_PG_2M \
8502 (UINT32_C(0x3) << 4)
8503 /* 8MB. */
8504 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_PG_8M \
8505 (UINT32_C(0x4) << 4)
8506 /* 1GB. */
8507 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_PG_1G \
8508 (UINT32_C(0x5) << 4)
8509 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_LAST \
8510 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING3_PG_SIZE_PG_1G
8511 /* TQM ring 4 page size and level. */
8512 uint8_t tqm_ring4_pg_size_tqm_ring4_lvl;
8513 /* TQM ring 4 PBL indirect levels. */
8514 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_LVL_MASK \
8515 UINT32_C(0xf)
8516 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_LVL_SFT 0
8517 /* PBL pointer is physical start address. */
8518 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_LVL_LVL_0 \
8519 UINT32_C(0x0)
8520 /* PBL pointer points to PTE table. */
8521 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_LVL_LVL_1 \
8522 UINT32_C(0x1)
8523 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
8524 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_LVL_LVL_2 \
8525 UINT32_C(0x2)
8526 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_LVL_LAST \
8527 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_LVL_LVL_2
8528 /* TQM ring 4 page size. */
8529 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_MASK \
8530 UINT32_C(0xf0)
8531 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_SFT 4
8532 /* 4KB. */
8533 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_PG_4K \
8534 (UINT32_C(0x0) << 4)
8535 /* 8KB. */
8536 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_PG_8K \
8537 (UINT32_C(0x1) << 4)
8538 /* 64KB. */
8539 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_PG_64K \
8540 (UINT32_C(0x2) << 4)
8541 /* 2MB. */
8542 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_PG_2M \
8543 (UINT32_C(0x3) << 4)
8544 /* 8MB. */
8545 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_PG_8M \
8546 (UINT32_C(0x4) << 4)
8547 /* 1GB. */
8548 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_PG_1G \
8549 (UINT32_C(0x5) << 4)
8550 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_LAST \
8551 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING4_PG_SIZE_PG_1G
8552 /* TQM ring 5 page size and level. */
8553 uint8_t tqm_ring5_pg_size_tqm_ring5_lvl;
8554 /* TQM ring 5 PBL indirect levels. */
8555 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_LVL_MASK \
8556 UINT32_C(0xf)
8557 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_LVL_SFT 0
8558 /* PBL pointer is physical start address. */
8559 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_LVL_LVL_0 \
8560 UINT32_C(0x0)
8561 /* PBL pointer points to PTE table. */
8562 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_LVL_LVL_1 \
8563 UINT32_C(0x1)
8564 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
8565 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_LVL_LVL_2 \
8566 UINT32_C(0x2)
8567 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_LVL_LAST \
8568 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_LVL_LVL_2
8569 /* TQM ring 5 page size. */
8570 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_MASK \
8571 UINT32_C(0xf0)
8572 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_SFT 4
8573 /* 4KB. */
8574 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_PG_4K \
8575 (UINT32_C(0x0) << 4)
8576 /* 8KB. */
8577 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_PG_8K \
8578 (UINT32_C(0x1) << 4)
8579 /* 64KB. */
8580 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_PG_64K \
8581 (UINT32_C(0x2) << 4)
8582 /* 2MB. */
8583 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_PG_2M \
8584 (UINT32_C(0x3) << 4)
8585 /* 8MB. */
8586 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_PG_8M \
8587 (UINT32_C(0x4) << 4)
8588 /* 1GB. */
8589 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_PG_1G \
8590 (UINT32_C(0x5) << 4)
8591 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_LAST \
8592 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING5_PG_SIZE_PG_1G
8593 /* TQM ring 6 page size and level. */
8594 uint8_t tqm_ring6_pg_size_tqm_ring6_lvl;
8595 /* TQM ring 6 PBL indirect levels. */
8596 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_LVL_MASK \
8597 UINT32_C(0xf)
8598 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_LVL_SFT 0
8599 /* PBL pointer is physical start address. */
8600 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_LVL_LVL_0 \
8601 UINT32_C(0x0)
8602 /* PBL pointer points to PTE table. */
8603 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_LVL_LVL_1 \
8604 UINT32_C(0x1)
8605 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
8606 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_LVL_LVL_2 \
8607 UINT32_C(0x2)
8608 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_LVL_LAST \
8609 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_LVL_LVL_2
8610 /* TQM ring 6 page size. */
8611 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_MASK \
8612 UINT32_C(0xf0)
8613 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_SFT 4
8614 /* 4KB. */
8615 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_PG_4K \
8616 (UINT32_C(0x0) << 4)
8617 /* 8KB. */
8618 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_PG_8K \
8619 (UINT32_C(0x1) << 4)
8620 /* 64KB. */
8621 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_PG_64K \
8622 (UINT32_C(0x2) << 4)
8623 /* 2MB. */
8624 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_PG_2M \
8625 (UINT32_C(0x3) << 4)
8626 /* 8MB. */
8627 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_PG_8M \
8628 (UINT32_C(0x4) << 4)
8629 /* 1GB. */
8630 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_PG_1G \
8631 (UINT32_C(0x5) << 4)
8632 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_LAST \
8633 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING6_PG_SIZE_PG_1G
8634 /* TQM ring 7 page size and level. */
8635 uint8_t tqm_ring7_pg_size_tqm_ring7_lvl;
8636 /* TQM ring 7 PBL indirect levels. */
8637 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_LVL_MASK \
8638 UINT32_C(0xf)
8639 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_LVL_SFT 0
8640 /* PBL pointer is physical start address. */
8641 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_LVL_LVL_0 \
8642 UINT32_C(0x0)
8643 /* PBL pointer points to PTE table. */
8644 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_LVL_LVL_1 \
8645 UINT32_C(0x1)
8646 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
8647 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_LVL_LVL_2 \
8648 UINT32_C(0x2)
8649 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_LVL_LAST \
8650 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_LVL_LVL_2
8651 /* TQM ring 7 page size. */
8652 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_MASK \
8653 UINT32_C(0xf0)
8654 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_SFT 4
8655 /* 4KB. */
8656 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_PG_4K \
8657 (UINT32_C(0x0) << 4)
8658 /* 8KB. */
8659 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_PG_8K \
8660 (UINT32_C(0x1) << 4)
8661 /* 64KB. */
8662 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_PG_64K \
8663 (UINT32_C(0x2) << 4)
8664 /* 2MB. */
8665 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_PG_2M \
8666 (UINT32_C(0x3) << 4)
8667 /* 8MB. */
8668 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_PG_8M \
8669 (UINT32_C(0x4) << 4)
8670 /* 1GB. */
8671 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_PG_1G \
8672 (UINT32_C(0x5) << 4)
8673 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_LAST \
8674 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TQM_RING7_PG_SIZE_PG_1G
8675 /* MR/AV page size and level. */
8676 uint8_t mrav_pg_size_mrav_lvl;
8677 /* MR/AV PBL indirect levels. */
8678 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_LVL_MASK \
8679 UINT32_C(0xf)
8680 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_LVL_SFT 0
8681 /* PBL pointer is physical start address. */
8682 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_LVL_LVL_0 \
8683 UINT32_C(0x0)
8684 /* PBL pointer points to PTE table. */
8685 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_LVL_LVL_1 \
8686 UINT32_C(0x1)
8687 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
8688 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_LVL_LVL_2 \
8689 UINT32_C(0x2)
8690 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_LVL_LAST \
8691 HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_LVL_LVL_2
8692 /* MR/AV page size. */
8693 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_MASK \
8694 UINT32_C(0xf0)
8695 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_SFT 4
8696 /* 4KB. */
8697 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_PG_4K \
8698 (UINT32_C(0x0) << 4)
8699 /* 8KB. */
8700 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_PG_8K \
8701 (UINT32_C(0x1) << 4)
8702 /* 64KB. */
8703 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_PG_64K \
8704 (UINT32_C(0x2) << 4)
8705 /* 2MB. */
8706 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_PG_2M \
8707 (UINT32_C(0x3) << 4)
8708 /* 8MB. */
8709 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_PG_8M \
8710 (UINT32_C(0x4) << 4)
8711 /* 1GB. */
8712 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_PG_1G \
8713 (UINT32_C(0x5) << 4)
8714 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_LAST \
8715 HWRM_FUNC_BACKING_STORE_CFG_INPUT_MRAV_PG_SIZE_PG_1G
8716 /* Timer page size and level. */
8717 uint8_t tim_pg_size_tim_lvl;
8718 /* Timer PBL indirect levels. */
8719 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_LVL_MASK \
8720 UINT32_C(0xf)
8721 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_LVL_SFT 0
8722 /* PBL pointer is physical start address. */
8723 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_LVL_LVL_0 \
8724 UINT32_C(0x0)
8725 /* PBL pointer points to PTE table. */
8726 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_LVL_LVL_1 \
8727 UINT32_C(0x1)
8728 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
8729 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_LVL_LVL_2 \
8730 UINT32_C(0x2)
8731 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_LVL_LAST \
8732 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_LVL_LVL_2
8733 /* Timer page size. */
8734 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_MASK \
8735 UINT32_C(0xf0)
8736 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_SFT 4
8737 /* 4KB. */
8738 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_PG_4K \
8739 (UINT32_C(0x0) << 4)
8740 /* 8KB. */
8741 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_PG_8K \
8742 (UINT32_C(0x1) << 4)
8743 /* 64KB. */
8744 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_PG_64K \
8745 (UINT32_C(0x2) << 4)
8746 /* 2MB. */
8747 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_PG_2M \
8748 (UINT32_C(0x3) << 4)
8749 /* 8MB. */
8750 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_PG_8M \
8751 (UINT32_C(0x4) << 4)
8752 /* 1GB. */
8753 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_PG_1G \
8754 (UINT32_C(0x5) << 4)
8755 #define HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_LAST \
8756 HWRM_FUNC_BACKING_STORE_CFG_INPUT_TIM_PG_SIZE_PG_1G
8757 /* QP page directory. */
8758 uint64_t qpc_page_dir;
8759 /* SRQ page directory. */
8760 uint64_t srq_page_dir;
8761 /* CQ page directory. */
8762 uint64_t cq_page_dir;
8763 /* VNIC page directory. */
8764 uint64_t vnic_page_dir;
8765 /* Stat page directory. */
8766 uint64_t stat_page_dir;
8767 /* TQM slowpath page directory. */
8768 uint64_t tqm_sp_page_dir;
8769 /* TQM ring 0 page directory. */
8770 uint64_t tqm_ring0_page_dir;
8771 /* TQM ring 1 page directory. */
8772 uint64_t tqm_ring1_page_dir;
8773 /* TQM ring 2 page directory. */
8774 uint64_t tqm_ring2_page_dir;
8775 /* TQM ring 3 page directory. */
8776 uint64_t tqm_ring3_page_dir;
8777 /* TQM ring 4 page directory. */
8778 uint64_t tqm_ring4_page_dir;
8779 /* TQM ring 5 page directory. */
8780 uint64_t tqm_ring5_page_dir;
8781 /* TQM ring 6 page directory. */
8782 uint64_t tqm_ring6_page_dir;
8783 /* TQM ring 7 page directory. */
8784 uint64_t tqm_ring7_page_dir;
8785 /* MR/AV page directory. */
8786 uint64_t mrav_page_dir;
8787 /* Timer page directory. */
8788 uint64_t tim_page_dir;
8789 /* Number of QPs. */
8790 uint32_t qp_num_entries;
8791 /* Number of SRQs. */
8792 uint32_t srq_num_entries;
8793 /* Number of CQs. */
8794 uint32_t cq_num_entries;
8795 /* Number of Stats. */
8796 uint32_t stat_num_entries;
8797 /*
8798 * Number of TQM slowpath entries.
8799 *
8800 * TQM slowpath rings should be sized as follows:
8801 *
8802 * num_entries = num_vnics + num_l2_tx_rings + num_roce_qps + tqm_min_size
8803 *
8804 * Where:
8805 * num_vnics is the number of VNICs allocated in the VNIC backing store
8806 * num_l2_tx_rings is the number of L2 rings in the QP backing store
8807 * num_roce_qps is the number of RoCE QPs in the QP backing store
8808 * tqm_min_size is tqm_min_entries_per_ring reported by
8809 * HWRM_FUNC_BACKING_STORE_QCAPS
8810 *
8811 * Note that TQM ring sizes cannot be extended while the system is
8812 * operational. If a PF driver needs to extend a TQM ring, it needs
8813 * to reset the function (e.g. HWRM_FUNC_RESET) and then reallocate
8814 * the backing store.
8815 */
8816 uint32_t tqm_sp_num_entries;
8817 /*
8818 * Number of TQM ring 0 entries.
8819 *
8820 * TQM fastpath rings should be sized large enough to accommodate the
8821 * maximum number of QPs (either L2 or RoCE, or both if shared)
8822 * that can be enqueued to the TQM ring.
8823 *
8824 * Note that TQM ring sizes cannot be extended while the system is
8825 * operational. If a PF driver needs to extend a TQM ring, it needs
8826 * to reset the function (e.g. HWRM_FUNC_RESET) and then reallocate
8827 * the backing store.
8828 */
8829 uint32_t tqm_ring0_num_entries;
8830 /*
8831 * Number of TQM ring 1 entries.
8832 *
8833 * TQM fastpath rings should be sized large enough to accommodate the
8834 * maximum number of QPs (either L2 or RoCE, or both if shared)
8835 * that can be enqueued to the TQM ring.
8836 *
8837 * Note that TQM ring sizes cannot be extended while the system is
8838 * operational. If a PF driver needs to extend a TQM ring, it needs
8839 * to reset the function (e.g. HWRM_FUNC_RESET) and then reallocate
8840 * the backing store.
8841 */
8842 uint32_t tqm_ring1_num_entries;
8843 /*
8844 * Number of TQM ring 2 entries.
8845 *
8846 * TQM fastpath rings should be sized large enough to accommodate the
8847 * maximum number of QPs (either L2 or RoCE, or both if shared)
8848 * that can be enqueued to the TQM ring.
8849 *
8850 * Note that TQM ring sizes cannot be extended while the system is
8851 * operational. If a PF driver needs to extend a TQM ring, it needs
8852 * to reset the function (e.g. HWRM_FUNC_RESET) and then reallocate
8853 * the backing store.
8854 */
8855 uint32_t tqm_ring2_num_entries;
8856 /*
8857 * Number of TQM ring 3 entries.
8858 *
8859 * TQM fastpath rings should be sized large enough to accommodate the
8860 * maximum number of QPs (either L2 or RoCE, or both if shared)
8861 * that can be enqueued to the TQM ring.
8862 *
8863 * Note that TQM ring sizes cannot be extended while the system is
8864 * operational. If a PF driver needs to extend a TQM ring, it needs
8865 * to reset the function (e.g. HWRM_FUNC_RESET) and then reallocate
8866 * the backing store.
8867 */
8868 uint32_t tqm_ring3_num_entries;
8869 /*
8870 * Number of TQM ring 4 entries.
8871 *
8872 * TQM fastpath rings should be sized large enough to accommodate the
8873 * maximum number of QPs (either L2 or RoCE, or both if shared)
8874 * that can be enqueued to the TQM ring.
8875 *
8876 * Note that TQM ring sizes cannot be extended while the system is
8877 * operational. If a PF driver needs to extend a TQM ring, it needs
8878 * to reset the function (e.g. HWRM_FUNC_RESET) and then reallocate
8879 * the backing store.
8880 */
8881 uint32_t tqm_ring4_num_entries;
8882 /*
8883 * Number of TQM ring 5 entries.
8884 *
8885 * TQM fastpath rings should be sized large enough to accommodate the
8886 * maximum number of QPs (either L2 or RoCE, or both if shared)
8887 * that can be enqueued to the TQM ring.
8888 *
8889 * Note that TQM ring sizes cannot be extended while the system is
8890 * operational. If a PF driver needs to extend a TQM ring, it needs
8891 * to reset the function (e.g. HWRM_FUNC_RESET) and then reallocate
8892 * the backing store.
8893 */
8894 uint32_t tqm_ring5_num_entries;
8895 /*
8896 * Number of TQM ring 6 entries.
8897 *
8898 * TQM fastpath rings should be sized large enough to accommodate the
8899 * maximum number of QPs (either L2 or RoCE, or both if shared)
8900 * that can be enqueued to the TQM ring.
8901 *
8902 * Note that TQM ring sizes cannot be extended while the system is
8903 * operational. If a PF driver needs to extend a TQM ring, it needs
8904 * to reset the function (e.g. HWRM_FUNC_RESET) and then reallocate
8905 * the backing store.
8906 */
8907 uint32_t tqm_ring6_num_entries;
8908 /*
8909 * Number of TQM ring 7 entries.
8910 *
8911 * TQM fastpath rings should be sized large enough to accommodate the
8912 * maximum number of QPs (either L2 or RoCE, or both if shared)
8913 * that can be enqueued to the TQM ring.
8914 *
8915 * Note that TQM ring sizes cannot be extended while the system is
8916 * operational. If a PF driver needs to extend a TQM ring, it needs
8917 * to reset the function (e.g. HWRM_FUNC_RESET) and then reallocate
8918 * the backing store.
8919 */
8920 uint32_t tqm_ring7_num_entries;
8921 /* Number of MR/AV entries. */
8922 uint32_t mrav_num_entries;
8923 /* Number of Timer entries. */
8924 uint32_t tim_num_entries;
8925 /* Number of entries to reserve for QP1 */
8926 uint16_t qp_num_qp1_entries;
8927 /* Number of entries to reserve for L2 */
8928 uint16_t qp_num_l2_entries;
8929 /* Number of bytes that have been allocated for each context entry. */
8930 uint16_t qp_entry_size;
8931 /* Number of entries to reserve for L2 */
8932 uint16_t srq_num_l2_entries;
8933 /* Number of bytes that have been allocated for each context entry. */
8934 uint16_t srq_entry_size;
8935 /* Number of entries to reserve for L2 */
8936 uint16_t cq_num_l2_entries;
8937 /* Number of bytes that have been allocated for each context entry. */
8938 uint16_t cq_entry_size;
8939 /* Number of entries to reserve for VNIC entries */
8940 uint16_t vnic_num_vnic_entries;
8941 /* Number of entries to reserve for Ring table entries */
8942 uint16_t vnic_num_ring_table_entries;
8943 /* Number of bytes that have been allocated for each context entry. */
8944 uint16_t vnic_entry_size;
8945 /* Number of bytes that have been allocated for each context entry. */
8946 uint16_t stat_entry_size;
8947 /* Number of bytes that have been allocated for each context entry. */
8948 uint16_t tqm_entry_size;
8949 /* Number of bytes that have been allocated for each context entry. */
8950 uint16_t mrav_entry_size;
8951 /* Number of bytes that have been allocated for each context entry. */
8952 uint16_t tim_entry_size;
8953} __attribute__((packed));
8954
8955/* hwrm_func_backing_store_cfg_output (size:128b/16B) */
8956struct hwrm_func_backing_store_cfg_output {
8957 /* The specific error status for the command. */
8958 uint16_t error_code;
8959 /* The HWRM command request type. */
8960 uint16_t req_type;
8961 /* The sequence ID from the original command. */
8962 uint16_t seq_id;
8963 /* The length of the response data in number of bytes. */
8964 uint16_t resp_len;
8965 uint8_t unused_0[7];
8966 /*
8967 * This field is used in Output records to indicate that the output
8968 * is completely written to RAM. This field should be read as '1'
8969 * to indicate that the output has been completely written.
8970 * When writing a command completion or response to an internal processor,
8971 * the order of writes has to be such that this field is written last.
8972 */
8973 uint8_t valid;
8974} __attribute__((packed));
8975
8976/********************************
8977 * hwrm_func_backing_store_qcfg *
8978 ********************************/
8979
8980
8981/* hwrm_func_backing_store_qcfg_input (size:128b/16B) */
8982struct hwrm_func_backing_store_qcfg_input {
8983 /* The HWRM command request type. */
8984 uint16_t req_type;
8985 /*
8986 * The completion ring to send the completion event on. This should
8987 * be the NQ ID returned from the `nq_alloc` HWRM command.
8988 */
8989 uint16_t cmpl_ring;
8990 /*
8991 * The sequence ID is used by the driver for tracking multiple
8992 * commands. This ID is treated as opaque data by the firmware and
8993 * the value is returned in the `hwrm_resp_hdr` upon completion.
8994 */
8995 uint16_t seq_id;
8996 /*
8997 * The target ID of the command:
8998 * * 0x0-0xFFF8 - The function ID
8999 * * 0xFFF8-0xFFFE - Reserved for internal processors
9000 * * 0xFFFF - HWRM
9001 */
9002 uint16_t target_id;
9003 /*
9004 * A physical address pointer pointing to a host buffer that the
9005 * command's response data will be written. This can be either a host
9006 * physical address (HPA) or a guest physical address (GPA) and must
9007 * point to a physically contiguous block of memory.
9008 */
9009 uint64_t resp_addr;
9010} __attribute__((packed));
9011
9012/* hwrm_func_backing_store_qcfg_output (size:1920b/240B) */
9013struct hwrm_func_backing_store_qcfg_output {
9014 /* The specific error status for the command. */
9015 uint16_t error_code;
9016 /* The HWRM command request type. */
9017 uint16_t req_type;
9018 /* The sequence ID from the original command. */
9019 uint16_t seq_id;
9020 /* The length of the response data in number of bytes. */
9021 uint16_t resp_len;
9022 uint32_t flags;
9023 /*
9024 * When set, the firmware only uses on-chip resources and does not
9025 * expect any backing store to be provided by the host driver. This
9026 * mode provides minimal L2 functionality (e.g. limited L2 resources,
9027 * no RoCE).
9028 */
9029 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_FLAGS_PREBOOT_MODE \
9030 UINT32_C(0x1)
9031 uint8_t unused_0[4];
9032 /*
9033 * This bit must be '1' for the qp fields to be
9034 * configured.
9035 */
9036 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_QP \
9037 UINT32_C(0x1)
9038 /*
9039 * This bit must be '1' for the srq fields to be
9040 * configured.
9041 */
9042 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_SRQ \
9043 UINT32_C(0x2)
9044 /*
9045 * This bit must be '1' for the cq fields to be
9046 * configured.
9047 */
9048 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_CQ \
9049 UINT32_C(0x4)
9050 /*
9051 * This bit must be '1' for the vnic fields to be
9052 * configured.
9053 */
9054 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_VNIC \
9055 UINT32_C(0x8)
9056 /*
9057 * This bit must be '1' for the stat fields to be
9058 * configured.
9059 */
9060 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_STAT \
9061 UINT32_C(0x10)
9062 /*
9063 * This bit must be '1' for the tqm_sp fields to be
9064 * configured.
9065 */
9066 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_TQM_SP \
9067 UINT32_C(0x20)
9068 /*
9069 * This bit must be '1' for the tqm_ring0 fields to be
9070 * configured.
9071 */
9072 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_TQM_RING0 \
9073 UINT32_C(0x40)
9074 /*
9075 * This bit must be '1' for the tqm_ring1 fields to be
9076 * configured.
9077 */
9078 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_TQM_RING1 \
9079 UINT32_C(0x80)
9080 /*
9081 * This bit must be '1' for the tqm_ring2 fields to be
9082 * configured.
9083 */
9084 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_TQM_RING2 \
9085 UINT32_C(0x100)
9086 /*
9087 * This bit must be '1' for the tqm_ring3 fields to be
9088 * configured.
9089 */
9090 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_TQM_RING3 \
9091 UINT32_C(0x200)
9092 /*
9093 * This bit must be '1' for the tqm_ring4 fields to be
9094 * configured.
9095 */
9096 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_TQM_RING4 \
9097 UINT32_C(0x400)
9098 /*
9099 * This bit must be '1' for the tqm_ring5 fields to be
9100 * configured.
9101 */
9102 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_TQM_RING5 \
9103 UINT32_C(0x800)
9104 /*
9105 * This bit must be '1' for the tqm_ring6 fields to be
9106 * configured.
9107 */
9108 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_TQM_RING6 \
9109 UINT32_C(0x1000)
9110 /*
9111 * This bit must be '1' for the tqm_ring7 fields to be
9112 * configured.
9113 */
9114 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_TQM_RING7 \
9115 UINT32_C(0x2000)
9116 /*
9117 * This bit must be '1' for the mrav fields to be
9118 * configured.
9119 */
9120 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_MRAV \
9121 UINT32_C(0x4000)
9122 /*
9123 * This bit must be '1' for the tim fields to be
9124 * configured.
9125 */
9126 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_UNUSED_0_TIM \
9127 UINT32_C(0x8000)
9128 /* QPC page size and level. */
9129 uint8_t qpc_pg_size_qpc_lvl;
9130 /* QPC PBL indirect levels. */
9131 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_LVL_MASK \
9132 UINT32_C(0xf)
9133 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_LVL_SFT 0
9134 /* PBL pointer is physical start address. */
9135 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_LVL_LVL_0 \
9136 UINT32_C(0x0)
9137 /* PBL pointer points to PTE table. */
9138 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_LVL_LVL_1 \
9139 UINT32_C(0x1)
9140 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
9141 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_LVL_LVL_2 \
9142 UINT32_C(0x2)
9143 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_LVL_LAST \
9144 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_LVL_LVL_2
9145 /* QPC page size. */
9146 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_MASK \
9147 UINT32_C(0xf0)
9148 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_SFT 4
9149 /* 4KB. */
9150 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_PG_4K \
9151 (UINT32_C(0x0) << 4)
9152 /* 8KB. */
9153 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_PG_8K \
9154 (UINT32_C(0x1) << 4)
9155 /* 64KB. */
9156 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_PG_64K \
9157 (UINT32_C(0x2) << 4)
9158 /* 2MB. */
9159 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_PG_2M \
9160 (UINT32_C(0x3) << 4)
9161 /* 8MB. */
9162 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_PG_8M \
9163 (UINT32_C(0x4) << 4)
9164 /* 1GB. */
9165 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_PG_1G \
9166 (UINT32_C(0x5) << 4)
9167 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_LAST \
9168 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_QPC_PG_SIZE_PG_1G
9169 /* SRQ page size and level. */
9170 uint8_t srq_pg_size_srq_lvl;
9171 /* SRQ PBL indirect levels. */
9172 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_LVL_MASK \
9173 UINT32_C(0xf)
9174 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_LVL_SFT 0
9175 /* PBL pointer is physical start address. */
9176 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_LVL_LVL_0 \
9177 UINT32_C(0x0)
9178 /* PBL pointer points to PTE table. */
9179 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_LVL_LVL_1 \
9180 UINT32_C(0x1)
9181 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
9182 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_LVL_LVL_2 \
9183 UINT32_C(0x2)
9184 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_LVL_LAST \
9185 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_LVL_LVL_2
9186 /* SRQ page size. */
9187 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_MASK \
9188 UINT32_C(0xf0)
9189 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_SFT 4
9190 /* 4KB. */
9191 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_PG_4K \
9192 (UINT32_C(0x0) << 4)
9193 /* 8KB. */
9194 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_PG_8K \
9195 (UINT32_C(0x1) << 4)
9196 /* 64KB. */
9197 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_PG_64K \
9198 (UINT32_C(0x2) << 4)
9199 /* 2MB. */
9200 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_PG_2M \
9201 (UINT32_C(0x3) << 4)
9202 /* 8MB. */
9203 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_PG_8M \
9204 (UINT32_C(0x4) << 4)
9205 /* 1GB. */
9206 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_PG_1G \
9207 (UINT32_C(0x5) << 4)
9208 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_LAST \
9209 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_SRQ_PG_SIZE_PG_1G
9210 /* CQ page size and level. */
9211 uint8_t cq_pg_size_cq_lvl;
9212 /* CQ PBL indirect levels. */
9213 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_LVL_MASK \
9214 UINT32_C(0xf)
9215 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_LVL_SFT 0
9216 /* PBL pointer is physical start address. */
9217 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_LVL_LVL_0 \
9218 UINT32_C(0x0)
9219 /* PBL pointer points to PTE table. */
9220 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_LVL_LVL_1 \
9221 UINT32_C(0x1)
9222 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
9223 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_LVL_LVL_2 \
9224 UINT32_C(0x2)
9225 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_LVL_LAST \
9226 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_LVL_LVL_2
9227 /* CQ page size. */
9228 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_MASK \
9229 UINT32_C(0xf0)
9230 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_SFT 4
9231 /* 4KB. */
9232 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_PG_4K \
9233 (UINT32_C(0x0) << 4)
9234 /* 8KB. */
9235 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_PG_8K \
9236 (UINT32_C(0x1) << 4)
9237 /* 64KB. */
9238 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_PG_64K \
9239 (UINT32_C(0x2) << 4)
9240 /* 2MB. */
9241 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_PG_2M \
9242 (UINT32_C(0x3) << 4)
9243 /* 8MB. */
9244 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_PG_8M \
9245 (UINT32_C(0x4) << 4)
9246 /* 1GB. */
9247 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_PG_1G \
9248 (UINT32_C(0x5) << 4)
9249 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_LAST \
9250 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_CQ_PG_SIZE_PG_1G
9251 /* VNIC page size and level. */
9252 uint8_t vnic_pg_size_vnic_lvl;
9253 /* VNIC PBL indirect levels. */
9254 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_LVL_MASK \
9255 UINT32_C(0xf)
9256 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_LVL_SFT 0
9257 /* PBL pointer is physical start address. */
9258 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_LVL_LVL_0 \
9259 UINT32_C(0x0)
9260 /* PBL pointer points to PTE table. */
9261 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_LVL_LVL_1 \
9262 UINT32_C(0x1)
9263 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
9264 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_LVL_LVL_2 \
9265 UINT32_C(0x2)
9266 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_LVL_LAST \
9267 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_LVL_LVL_2
9268 /* VNIC page size. */
9269 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_MASK \
9270 UINT32_C(0xf0)
9271 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_SFT 4
9272 /* 4KB. */
9273 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_PG_4K \
9274 (UINT32_C(0x0) << 4)
9275 /* 8KB. */
9276 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_PG_8K \
9277 (UINT32_C(0x1) << 4)
9278 /* 64KB. */
9279 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_PG_64K \
9280 (UINT32_C(0x2) << 4)
9281 /* 2MB. */
9282 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_PG_2M \
9283 (UINT32_C(0x3) << 4)
9284 /* 8MB. */
9285 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_PG_8M \
9286 (UINT32_C(0x4) << 4)
9287 /* 1GB. */
9288 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_PG_1G \
9289 (UINT32_C(0x5) << 4)
9290 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_LAST \
9291 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_VNIC_PG_SIZE_PG_1G
9292 /* Stat page size and level. */
9293 uint8_t stat_pg_size_stat_lvl;
9294 /* Stat PBL indirect levels. */
9295 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_LVL_MASK \
9296 UINT32_C(0xf)
9297 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_LVL_SFT 0
9298 /* PBL pointer is physical start address. */
9299 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_LVL_LVL_0 \
9300 UINT32_C(0x0)
9301 /* PBL pointer points to PTE table. */
9302 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_LVL_LVL_1 \
9303 UINT32_C(0x1)
9304 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
9305 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_LVL_LVL_2 \
9306 UINT32_C(0x2)
9307 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_LVL_LAST \
9308 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_LVL_LVL_2
9309 /* Stat page size. */
9310 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_MASK \
9311 UINT32_C(0xf0)
9312 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_SFT 4
9313 /* 4KB. */
9314 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_PG_4K \
9315 (UINT32_C(0x0) << 4)
9316 /* 8KB. */
9317 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_PG_8K \
9318 (UINT32_C(0x1) << 4)
9319 /* 64KB. */
9320 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_PG_64K \
9321 (UINT32_C(0x2) << 4)
9322 /* 2MB. */
9323 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_PG_2M \
9324 (UINT32_C(0x3) << 4)
9325 /* 8MB. */
9326 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_PG_8M \
9327 (UINT32_C(0x4) << 4)
9328 /* 1GB. */
9329 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_PG_1G \
9330 (UINT32_C(0x5) << 4)
9331 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_LAST \
9332 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_STAT_PG_SIZE_PG_1G
9333 /* TQM slow path page size and level. */
9334 uint8_t tqm_sp_pg_size_tqm_sp_lvl;
9335 /* TQM slow path PBL indirect levels. */
9336 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_LVL_MASK \
9337 UINT32_C(0xf)
9338 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_LVL_SFT 0
9339 /* PBL pointer is physical start address. */
9340 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_LVL_LVL_0 \
9341 UINT32_C(0x0)
9342 /* PBL pointer points to PTE table. */
9343 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_LVL_LVL_1 \
9344 UINT32_C(0x1)
9345 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
9346 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_LVL_LVL_2 \
9347 UINT32_C(0x2)
9348 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_LVL_LAST \
9349 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_LVL_LVL_2
9350 /* TQM slow path page size. */
9351 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_MASK \
9352 UINT32_C(0xf0)
9353 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_SFT 4
9354 /* 4KB. */
9355 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_PG_4K \
9356 (UINT32_C(0x0) << 4)
9357 /* 8KB. */
9358 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_PG_8K \
9359 (UINT32_C(0x1) << 4)
9360 /* 64KB. */
9361 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_PG_64K \
9362 (UINT32_C(0x2) << 4)
9363 /* 2MB. */
9364 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_PG_2M \
9365 (UINT32_C(0x3) << 4)
9366 /* 8MB. */
9367 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_PG_8M \
9368 (UINT32_C(0x4) << 4)
9369 /* 1GB. */
9370 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_PG_1G \
9371 (UINT32_C(0x5) << 4)
9372 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_LAST \
9373 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_SP_PG_SIZE_PG_1G
9374 /* TQM ring 0 page size and level. */
9375 uint8_t tqm_ring0_pg_size_tqm_ring0_lvl;
9376 /* TQM ring 0 PBL indirect levels. */
9377 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_LVL_MASK \
9378 UINT32_C(0xf)
9379 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_LVL_SFT 0
9380 /* PBL pointer is physical start address. */
9381 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_LVL_LVL_0 \
9382 UINT32_C(0x0)
9383 /* PBL pointer points to PTE table. */
9384 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_LVL_LVL_1 \
9385 UINT32_C(0x1)
9386 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
9387 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_LVL_LVL_2 \
9388 UINT32_C(0x2)
9389 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_LVL_LAST \
9390 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_LVL_LVL_2
9391 /* TQM ring 0 page size. */
9392 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_MASK \
9393 UINT32_C(0xf0)
9394 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_SFT 4
9395 /* 4KB. */
9396 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_PG_4K \
9397 (UINT32_C(0x0) << 4)
9398 /* 8KB. */
9399 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_PG_8K \
9400 (UINT32_C(0x1) << 4)
9401 /* 64KB. */
9402 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_PG_64K \
9403 (UINT32_C(0x2) << 4)
9404 /* 2MB. */
9405 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_PG_2M \
9406 (UINT32_C(0x3) << 4)
9407 /* 8MB. */
9408 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_PG_8M \
9409 (UINT32_C(0x4) << 4)
9410 /* 1GB. */
9411 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_PG_1G \
9412 (UINT32_C(0x5) << 4)
9413 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_LAST \
9414 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING0_PG_SIZE_PG_1G
9415 /* TQM ring 1 page size and level. */
9416 uint8_t tqm_ring1_pg_size_tqm_ring1_lvl;
9417 /* TQM ring 1 PBL indirect levels. */
9418 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_LVL_MASK \
9419 UINT32_C(0xf)
9420 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_LVL_SFT 0
9421 /* PBL pointer is physical start address. */
9422 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_LVL_LVL_0 \
9423 UINT32_C(0x0)
9424 /* PBL pointer points to PTE table. */
9425 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_LVL_LVL_1 \
9426 UINT32_C(0x1)
9427 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
9428 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_LVL_LVL_2 \
9429 UINT32_C(0x2)
9430 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_LVL_LAST \
9431 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_LVL_LVL_2
9432 /* TQM ring 1 page size. */
9433 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_MASK \
9434 UINT32_C(0xf0)
9435 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_SFT 4
9436 /* 4KB. */
9437 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_PG_4K \
9438 (UINT32_C(0x0) << 4)
9439 /* 8KB. */
9440 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_PG_8K \
9441 (UINT32_C(0x1) << 4)
9442 /* 64KB. */
9443 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_PG_64K \
9444 (UINT32_C(0x2) << 4)
9445 /* 2MB. */
9446 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_PG_2M \
9447 (UINT32_C(0x3) << 4)
9448 /* 8MB. */
9449 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_PG_8M \
9450 (UINT32_C(0x4) << 4)
9451 /* 1GB. */
9452 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_PG_1G \
9453 (UINT32_C(0x5) << 4)
9454 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_LAST \
9455 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING1_PG_SIZE_PG_1G
9456 /* TQM ring 2 page size and level. */
9457 uint8_t tqm_ring2_pg_size_tqm_ring2_lvl;
9458 /* TQM ring 2 PBL indirect levels. */
9459 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_LVL_MASK \
9460 UINT32_C(0xf)
9461 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_LVL_SFT 0
9462 /* PBL pointer is physical start address. */
9463 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_LVL_LVL_0 \
9464 UINT32_C(0x0)
9465 /* PBL pointer points to PTE table. */
9466 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_LVL_LVL_1 \
9467 UINT32_C(0x1)
9468 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
9469 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_LVL_LVL_2 \
9470 UINT32_C(0x2)
9471 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_LVL_LAST \
9472 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_LVL_LVL_2
9473 /* TQM ring 2 page size. */
9474 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_MASK \
9475 UINT32_C(0xf0)
9476 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_SFT 4
9477 /* 4KB. */
9478 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_PG_4K \
9479 (UINT32_C(0x0) << 4)
9480 /* 8KB. */
9481 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_PG_8K \
9482 (UINT32_C(0x1) << 4)
9483 /* 64KB. */
9484 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_PG_64K \
9485 (UINT32_C(0x2) << 4)
9486 /* 2MB. */
9487 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_PG_2M \
9488 (UINT32_C(0x3) << 4)
9489 /* 8MB. */
9490 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_PG_8M \
9491 (UINT32_C(0x4) << 4)
9492 /* 1GB. */
9493 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_PG_1G \
9494 (UINT32_C(0x5) << 4)
9495 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_LAST \
9496 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING2_PG_SIZE_PG_1G
9497 /* TQM ring 3 page size and level. */
9498 uint8_t tqm_ring3_pg_size_tqm_ring3_lvl;
9499 /* TQM ring 3 PBL indirect levels. */
9500 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_LVL_MASK \
9501 UINT32_C(0xf)
9502 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_LVL_SFT 0
9503 /* PBL pointer is physical start address. */
9504 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_LVL_LVL_0 \
9505 UINT32_C(0x0)
9506 /* PBL pointer points to PTE table. */
9507 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_LVL_LVL_1 \
9508 UINT32_C(0x1)
9509 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
9510 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_LVL_LVL_2 \
9511 UINT32_C(0x2)
9512 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_LVL_LAST \
9513 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_LVL_LVL_2
9514 /* TQM ring 3 page size. */
9515 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_MASK \
9516 UINT32_C(0xf0)
9517 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_SFT 4
9518 /* 4KB. */
9519 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_PG_4K \
9520 (UINT32_C(0x0) << 4)
9521 /* 8KB. */
9522 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_PG_8K \
9523 (UINT32_C(0x1) << 4)
9524 /* 64KB. */
9525 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_PG_64K \
9526 (UINT32_C(0x2) << 4)
9527 /* 2MB. */
9528 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_PG_2M \
9529 (UINT32_C(0x3) << 4)
9530 /* 8MB. */
9531 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_PG_8M \
9532 (UINT32_C(0x4) << 4)
9533 /* 1GB. */
9534 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_PG_1G \
9535 (UINT32_C(0x5) << 4)
9536 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_LAST \
9537 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING3_PG_SIZE_PG_1G
9538 /* TQM ring 4 page size and level. */
9539 uint8_t tqm_ring4_pg_size_tqm_ring4_lvl;
9540 /* TQM ring 4 PBL indirect levels. */
9541 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_LVL_MASK \
9542 UINT32_C(0xf)
9543 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_LVL_SFT 0
9544 /* PBL pointer is physical start address. */
9545 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_LVL_LVL_0 \
9546 UINT32_C(0x0)
9547 /* PBL pointer points to PTE table. */
9548 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_LVL_LVL_1 \
9549 UINT32_C(0x1)
9550 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
9551 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_LVL_LVL_2 \
9552 UINT32_C(0x2)
9553 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_LVL_LAST \
9554 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_LVL_LVL_2
9555 /* TQM ring 4 page size. */
9556 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_MASK \
9557 UINT32_C(0xf0)
9558 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_SFT 4
9559 /* 4KB. */
9560 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_PG_4K \
9561 (UINT32_C(0x0) << 4)
9562 /* 8KB. */
9563 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_PG_8K \
9564 (UINT32_C(0x1) << 4)
9565 /* 64KB. */
9566 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_PG_64K \
9567 (UINT32_C(0x2) << 4)
9568 /* 2MB. */
9569 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_PG_2M \
9570 (UINT32_C(0x3) << 4)
9571 /* 8MB. */
9572 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_PG_8M \
9573 (UINT32_C(0x4) << 4)
9574 /* 1GB. */
9575 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_PG_1G \
9576 (UINT32_C(0x5) << 4)
9577 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_LAST \
9578 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING4_PG_SIZE_PG_1G
9579 /* TQM ring 5 page size and level. */
9580 uint8_t tqm_ring5_pg_size_tqm_ring5_lvl;
9581 /* TQM ring 5 PBL indirect levels. */
9582 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_LVL_MASK \
9583 UINT32_C(0xf)
9584 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_LVL_SFT 0
9585 /* PBL pointer is physical start address. */
9586 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_LVL_LVL_0 \
9587 UINT32_C(0x0)
9588 /* PBL pointer points to PTE table. */
9589 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_LVL_LVL_1 \
9590 UINT32_C(0x1)
9591 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
9592 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_LVL_LVL_2 \
9593 UINT32_C(0x2)
9594 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_LVL_LAST \
9595 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_LVL_LVL_2
9596 /* TQM ring 5 page size. */
9597 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_MASK \
9598 UINT32_C(0xf0)
9599 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_SFT 4
9600 /* 4KB. */
9601 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_PG_4K \
9602 (UINT32_C(0x0) << 4)
9603 /* 8KB. */
9604 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_PG_8K \
9605 (UINT32_C(0x1) << 4)
9606 /* 64KB. */
9607 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_PG_64K \
9608 (UINT32_C(0x2) << 4)
9609 /* 2MB. */
9610 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_PG_2M \
9611 (UINT32_C(0x3) << 4)
9612 /* 8MB. */
9613 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_PG_8M \
9614 (UINT32_C(0x4) << 4)
9615 /* 1GB. */
9616 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_PG_1G \
9617 (UINT32_C(0x5) << 4)
9618 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_LAST \
9619 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING5_PG_SIZE_PG_1G
9620 /* TQM ring 6 page size and level. */
9621 uint8_t tqm_ring6_pg_size_tqm_ring6_lvl;
9622 /* TQM ring 6 PBL indirect levels. */
9623 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_LVL_MASK \
9624 UINT32_C(0xf)
9625 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_LVL_SFT 0
9626 /* PBL pointer is physical start address. */
9627 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_LVL_LVL_0 \
9628 UINT32_C(0x0)
9629 /* PBL pointer points to PTE table. */
9630 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_LVL_LVL_1 \
9631 UINT32_C(0x1)
9632 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
9633 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_LVL_LVL_2 \
9634 UINT32_C(0x2)
9635 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_LVL_LAST \
9636 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_LVL_LVL_2
9637 /* TQM ring 6 page size. */
9638 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_MASK \
9639 UINT32_C(0xf0)
9640 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_SFT 4
9641 /* 4KB. */
9642 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_PG_4K \
9643 (UINT32_C(0x0) << 4)
9644 /* 8KB. */
9645 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_PG_8K \
9646 (UINT32_C(0x1) << 4)
9647 /* 64KB. */
9648 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_PG_64K \
9649 (UINT32_C(0x2) << 4)
9650 /* 2MB. */
9651 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_PG_2M \
9652 (UINT32_C(0x3) << 4)
9653 /* 8MB. */
9654 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_PG_8M \
9655 (UINT32_C(0x4) << 4)
9656 /* 1GB. */
9657 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_PG_1G \
9658 (UINT32_C(0x5) << 4)
9659 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_LAST \
9660 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING6_PG_SIZE_PG_1G
9661 /* TQM ring 7 page size and level. */
9662 uint8_t tqm_ring7_pg_size_tqm_ring7_lvl;
9663 /* TQM ring 7 PBL indirect levels. */
9664 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_LVL_MASK \
9665 UINT32_C(0xf)
9666 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_LVL_SFT 0
9667 /* PBL pointer is physical start address. */
9668 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_LVL_LVL_0 \
9669 UINT32_C(0x0)
9670 /* PBL pointer points to PTE table. */
9671 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_LVL_LVL_1 \
9672 UINT32_C(0x1)
9673 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
9674 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_LVL_LVL_2 \
9675 UINT32_C(0x2)
9676 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_LVL_LAST \
9677 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_LVL_LVL_2
9678 /* TQM ring 7 page size. */
9679 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_MASK \
9680 UINT32_C(0xf0)
9681 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_SFT 4
9682 /* 4KB. */
9683 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_PG_4K \
9684 (UINT32_C(0x0) << 4)
9685 /* 8KB. */
9686 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_PG_8K \
9687 (UINT32_C(0x1) << 4)
9688 /* 64KB. */
9689 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_PG_64K \
9690 (UINT32_C(0x2) << 4)
9691 /* 2MB. */
9692 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_PG_2M \
9693 (UINT32_C(0x3) << 4)
9694 /* 8MB. */
9695 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_PG_8M \
9696 (UINT32_C(0x4) << 4)
9697 /* 1GB. */
9698 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_PG_1G \
9699 (UINT32_C(0x5) << 4)
9700 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_LAST \
9701 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TQM_RING7_PG_SIZE_PG_1G
9702 /* MR/AV page size and level. */
9703 uint8_t mrav_pg_size_mrav_lvl;
9704 /* MR/AV PBL indirect levels. */
9705 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_LVL_MASK \
9706 UINT32_C(0xf)
9707 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_LVL_SFT 0
9708 /* PBL pointer is physical start address. */
9709 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_LVL_LVL_0 \
9710 UINT32_C(0x0)
9711 /* PBL pointer points to PTE table. */
9712 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_LVL_LVL_1 \
9713 UINT32_C(0x1)
9714 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
9715 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_LVL_LVL_2 \
9716 UINT32_C(0x2)
9717 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_LVL_LAST \
9718 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_LVL_LVL_2
9719 /* MR/AV page size. */
9720 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_MASK \
9721 UINT32_C(0xf0)
9722 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_SFT 4
9723 /* 4KB. */
9724 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_PG_4K \
9725 (UINT32_C(0x0) << 4)
9726 /* 8KB. */
9727 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_PG_8K \
9728 (UINT32_C(0x1) << 4)
9729 /* 64KB. */
9730 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_PG_64K \
9731 (UINT32_C(0x2) << 4)
9732 /* 2MB. */
9733 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_PG_2M \
9734 (UINT32_C(0x3) << 4)
9735 /* 8MB. */
9736 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_PG_8M \
9737 (UINT32_C(0x4) << 4)
9738 /* 1GB. */
9739 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_PG_1G \
9740 (UINT32_C(0x5) << 4)
9741 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_LAST \
9742 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_MRAV_PG_SIZE_PG_1G
9743 /* Timer page size and level. */
9744 uint8_t tim_pg_size_tim_lvl;
9745 /* Timer PBL indirect levels. */
9746 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_LVL_MASK \
9747 UINT32_C(0xf)
9748 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_LVL_SFT 0
9749 /* PBL pointer is physical start address. */
9750 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_LVL_LVL_0 \
9751 UINT32_C(0x0)
9752 /* PBL pointer points to PTE table. */
9753 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_LVL_LVL_1 \
9754 UINT32_C(0x1)
9755 /* PBL pointer points to PDE table with each entry pointing to PTE tables. */
9756 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_LVL_LVL_2 \
9757 UINT32_C(0x2)
9758 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_LVL_LAST \
9759 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_LVL_LVL_2
9760 /* Timer page size. */
9761 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_MASK \
9762 UINT32_C(0xf0)
9763 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_SFT 4
9764 /* 4KB. */
9765 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_PG_4K \
9766 (UINT32_C(0x0) << 4)
9767 /* 8KB. */
9768 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_PG_8K \
9769 (UINT32_C(0x1) << 4)
9770 /* 64KB. */
9771 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_PG_64K \
9772 (UINT32_C(0x2) << 4)
9773 /* 2MB. */
9774 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_PG_2M \
9775 (UINT32_C(0x3) << 4)
9776 /* 8MB. */
9777 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_PG_8M \
9778 (UINT32_C(0x4) << 4)
9779 /* 1GB. */
9780 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_PG_1G \
9781 (UINT32_C(0x5) << 4)
9782 #define HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_LAST \
9783 HWRM_FUNC_BACKING_STORE_QCFG_OUTPUT_TIM_PG_SIZE_PG_1G
9784 /* QP page directory. */
9785 uint64_t qpc_page_dir;
9786 /* SRQ page directory. */
9787 uint64_t srq_page_dir;
9788 /* CQ page directory. */
9789 uint64_t cq_page_dir;
9790 /* VNIC page directory. */
9791 uint64_t vnic_page_dir;
9792 /* Stat page directory. */
9793 uint64_t stat_page_dir;
9794 /* TQM slowpath page directory. */
9795 uint64_t tqm_sp_page_dir;
9796 /* TQM ring 0 page directory. */
9797 uint64_t tqm_ring0_page_dir;
9798 /* TQM ring 1 page directory. */
9799 uint64_t tqm_ring1_page_dir;
9800 /* TQM ring 2 page directory. */
9801 uint64_t tqm_ring2_page_dir;
9802 /* TQM ring 3 page directory. */
9803 uint64_t tqm_ring3_page_dir;
9804 /* TQM ring 4 page directory. */
9805 uint64_t tqm_ring4_page_dir;
9806 /* TQM ring 5 page directory. */
9807 uint64_t tqm_ring5_page_dir;
9808 /* TQM ring 6 page directory. */
9809 uint64_t tqm_ring6_page_dir;
9810 /* TQM ring 7 page directory. */
9811 uint64_t tqm_ring7_page_dir;
9812 /* MR/AV page directory. */
9813 uint64_t mrav_page_dir;
9814 /* Timer page directory. */
9815 uint64_t tim_page_dir;
9816 /* Number of entries to reserve for QP1 */
9817 uint16_t qp_num_qp1_entries;
9818 /* Number of entries to reserve for L2 */
9819 uint16_t qp_num_l2_entries;
9820 /* Number of QPs. */
9821 uint32_t qp_num_entries;
9822 /* Number of SRQs. */
9823 uint32_t srq_num_entries;
9824 /* Number of entries to reserve for L2 */
9825 uint16_t srq_num_l2_entries;
9826 /* Number of entries to reserve for L2 */
9827 uint16_t cq_num_l2_entries;
9828 /* Number of CQs. */
9829 uint32_t cq_num_entries;
9830 /* Number of entries to reserve for VNIC entries */
9831 uint16_t vnic_num_vnic_entries;
9832 /* Number of entries to reserve for Ring table entries */
9833 uint16_t vnic_num_ring_table_entries;
9834 /* Number of Stats. */
9835 uint32_t stat_num_entries;
9836 /* Number of TQM slowpath entries. */
9837 uint32_t tqm_sp_num_entries;
9838 /* Number of TQM ring 0 entries. */
9839 uint32_t tqm_ring0_num_entries;
9840 /* Number of TQM ring 1 entries. */
9841 uint32_t tqm_ring1_num_entries;
9842 /* Number of TQM ring 2 entries. */
9843 uint32_t tqm_ring2_num_entries;
9844 /* Number of TQM ring 3 entries. */
9845 uint32_t tqm_ring3_num_entries;
9846 /* Number of TQM ring 4 entries. */
9847 uint32_t tqm_ring4_num_entries;
9848 /* Number of TQM ring 5 entries. */
9849 uint32_t tqm_ring5_num_entries;
9850 /* Number of TQM ring 6 entries. */
9851 uint32_t tqm_ring6_num_entries;
9852 /* Number of TQM ring 7 entries. */
9853 uint32_t tqm_ring7_num_entries;
9854 /* Number of MR/AV entries. */
9855 uint32_t mrav_num_entries;
9856 /* Number of Timer entries. */
9857 uint32_t tim_num_entries;
9858 uint8_t unused_1[7];
9859 /*
9860 * This field is used in Output records to indicate that the output
9861 * is completely written to RAM. This field should be read as '1'
9862 * to indicate that the output has been completely written.
9863 * When writing a command completion or response to an internal processor,
9864 * the order of writes has to be such that this field is written last.
9865 */
9866 uint8_t valid;
9867} __attribute__((packed));
9868
9869/***********************
9870 * hwrm_func_vlan_qcfg *
9871 ***********************/
9872
9873
9874/* hwrm_func_vlan_qcfg_input (size:192b/24B) */
9875struct hwrm_func_vlan_qcfg_input {
9876 /* The HWRM command request type. */
9877 uint16_t req_type;
9878 /*
9879 * The completion ring to send the completion event on. This should
9880 * be the NQ ID returned from the `nq_alloc` HWRM command.
9881 */
9882 uint16_t cmpl_ring;
9883 /*
9884 * The sequence ID is used by the driver for tracking multiple
9885 * commands. This ID is treated as opaque data by the firmware and
9886 * the value is returned in the `hwrm_resp_hdr` upon completion.
9887 */
9888 uint16_t seq_id;
9889 /*
9890 * The target ID of the command:
9891 * * 0x0-0xFFF8 - The function ID
9892 * * 0xFFF8-0xFFFE - Reserved for internal processors
9893 * * 0xFFFF - HWRM
9894 */
9895 uint16_t target_id;
9896 /*
9897 * A physical address pointer pointing to a host buffer that the
9898 * command's response data will be written. This can be either a host
9899 * physical address (HPA) or a guest physical address (GPA) and must
9900 * point to a physically contiguous block of memory.
9901 */
9902 uint64_t resp_addr;
9903 /*
9904 * Function ID of the function that is being
9905 * configured.
9906 * If set to 0xFF... (All Fs), then the configuration is
9907 * for the requesting function.
9908 */
9909 uint16_t fid;
9910 uint8_t unused_0[6];
9911} __attribute__((packed));
9912
9913/* hwrm_func_vlan_qcfg_output (size:320b/40B) */
9914struct hwrm_func_vlan_qcfg_output {
9915 /* The specific error status for the command. */
9916 uint16_t error_code;
9917 /* The HWRM command request type. */
9918 uint16_t req_type;
9919 /* The sequence ID from the original command. */
9920 uint16_t seq_id;
9921 /* The length of the response data in number of bytes. */
9922 uint16_t resp_len;
9923 uint64_t unused_0;
9924 /* S-TAG VLAN identifier configured for the function. */
9925 uint16_t stag_vid;
9926 /* S-TAG PCP value configured for the function. */
9927 uint8_t stag_pcp;
9928 uint8_t unused_1;
9929 /*
9930 * S-TAG TPID value configured for the function. This field is specified in
9931 * network byte order.
9932 */
9933 uint16_t stag_tpid;
9934 /* C-TAG VLAN identifier configured for the function. */
9935 uint16_t ctag_vid;
9936 /* C-TAG PCP value configured for the function. */
9937 uint8_t ctag_pcp;
9938 uint8_t unused_2;
9939 /*
9940 * C-TAG TPID value configured for the function. This field is specified in
9941 * network byte order.
9942 */
9943 uint16_t ctag_tpid;
9944 /* Future use. */
9945 uint32_t rsvd2;
9946 /* Future use. */
9947 uint32_t rsvd3;
9948 uint8_t unused_3[3];
9949 /*
9950 * This field is used in Output records to indicate that the output
9951 * is completely written to RAM. This field should be read as '1'
9952 * to indicate that the output has been completely written.
9953 * When writing a command completion or response to an internal processor,
9954 * the order of writes has to be such that this field is written last.
9955 */
9956 uint8_t valid;
9957} __attribute__((packed));
9958
9959/**********************
9960 * hwrm_func_vlan_cfg *
9961 **********************/
9962
9963
9964/* hwrm_func_vlan_cfg_input (size:384b/48B) */
9965struct hwrm_func_vlan_cfg_input {
9966 /* The HWRM command request type. */
9967 uint16_t req_type;
9968 /*
9969 * The completion ring to send the completion event on. This should
9970 * be the NQ ID returned from the `nq_alloc` HWRM command.
9971 */
9972 uint16_t cmpl_ring;
9973 /*
9974 * The sequence ID is used by the driver for tracking multiple
9975 * commands. This ID is treated as opaque data by the firmware and
9976 * the value is returned in the `hwrm_resp_hdr` upon completion.
9977 */
9978 uint16_t seq_id;
9979 /*
9980 * The target ID of the command:
9981 * * 0x0-0xFFF8 - The function ID
9982 * * 0xFFF8-0xFFFE - Reserved for internal processors
9983 * * 0xFFFF - HWRM
9984 */
9985 uint16_t target_id;
9986 /*
9987 * A physical address pointer pointing to a host buffer that the
9988 * command's response data will be written. This can be either a host
9989 * physical address (HPA) or a guest physical address (GPA) and must
9990 * point to a physically contiguous block of memory.
9991 */
9992 uint64_t resp_addr;
9993 /*
9994 * Function ID of the function that is being
9995 * configured.
9996 * If set to 0xFF... (All Fs), then the configuration is
9997 * for the requesting function.
9998 */
9999 uint16_t fid;
10000 uint8_t unused_0[2];
10001 uint32_t enables;
10002 /*
10003 * This bit must be '1' for the stag_vid field to be
10004 * configured.
10005 */
10006 #define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_STAG_VID UINT32_C(0x1)
10007 /*
10008 * This bit must be '1' for the ctag_vid field to be
10009 * configured.
10010 */
10011 #define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_CTAG_VID UINT32_C(0x2)
10012 /*
10013 * This bit must be '1' for the stag_pcp field to be
10014 * configured.
10015 */
10016 #define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_STAG_PCP UINT32_C(0x4)
10017 /*
10018 * This bit must be '1' for the ctag_pcp field to be
10019 * configured.
10020 */
10021 #define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_CTAG_PCP UINT32_C(0x8)
10022 /*
10023 * This bit must be '1' for the stag_tpid field to be
10024 * configured.
10025 */
10026 #define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_STAG_TPID UINT32_C(0x10)
10027 /*
10028 * This bit must be '1' for the ctag_tpid field to be
10029 * configured.
10030 */
10031 #define HWRM_FUNC_VLAN_CFG_INPUT_ENABLES_CTAG_TPID UINT32_C(0x20)
10032 /* S-TAG VLAN identifier configured for the function. */
10033 uint16_t stag_vid;
10034 /* S-TAG PCP value configured for the function. */
10035 uint8_t stag_pcp;
10036 uint8_t unused_1;
10037 /*
10038 * S-TAG TPID value configured for the function. This field is specified in
10039 * network byte order.
10040 */
10041 uint16_t stag_tpid;
10042 /* C-TAG VLAN identifier configured for the function. */
10043 uint16_t ctag_vid;
10044 /* C-TAG PCP value configured for the function. */
10045 uint8_t ctag_pcp;
10046 uint8_t unused_2;
10047 /*
10048 * C-TAG TPID value configured for the function. This field is specified in
10049 * network byte order.
10050 */
10051 uint16_t ctag_tpid;
10052 /* Future use. */
10053 uint32_t rsvd1;
10054 /* Future use. */
10055 uint32_t rsvd2;
10056 uint8_t unused_3[4];
10057} __attribute__((packed));
10058
10059/* hwrm_func_vlan_cfg_output (size:128b/16B) */
10060struct hwrm_func_vlan_cfg_output {
10061 /* The specific error status for the command. */
10062 uint16_t error_code;
10063 /* The HWRM command request type. */
10064 uint16_t req_type;
10065 /* The sequence ID from the original command. */
10066 uint16_t seq_id;
10067 /* The length of the response data in number of bytes. */
10068 uint16_t resp_len;
10069 uint8_t unused_0[7];
10070 /*
10071 * This field is used in Output records to indicate that the output
10072 * is completely written to RAM. This field should be read as '1'
10073 * to indicate that the output has been completely written.
10074 * When writing a command completion or response to an internal processor,
10075 * the order of writes has to be such that this field is written last.
10076 */
10077 uint8_t valid;
10078} __attribute__((packed));
10079
10080/*******************************
10081 * hwrm_func_vf_vnic_ids_query *
10082 *******************************/
10083
10084
10085/* hwrm_func_vf_vnic_ids_query_input (size:256b/32B) */
10086struct hwrm_func_vf_vnic_ids_query_input {
10087 /* The HWRM command request type. */
10088 uint16_t req_type;
10089 /*
10090 * The completion ring to send the completion event on. This should
10091 * be the NQ ID returned from the `nq_alloc` HWRM command.
10092 */
10093 uint16_t cmpl_ring;
10094 /*
10095 * The sequence ID is used by the driver for tracking multiple
10096 * commands. This ID is treated as opaque data by the firmware and
10097 * the value is returned in the `hwrm_resp_hdr` upon completion.
10098 */
10099 uint16_t seq_id;
10100 /*
10101 * The target ID of the command:
10102 * * 0x0-0xFFF8 - The function ID
10103 * * 0xFFF8-0xFFFE - Reserved for internal processors
10104 * * 0xFFFF - HWRM
10105 */
10106 uint16_t target_id;
10107 /*
10108 * A physical address pointer pointing to a host buffer that the
10109 * command's response data will be written. This can be either a host
10110 * physical address (HPA) or a guest physical address (GPA) and must
10111 * point to a physically contiguous block of memory.
10112 */
10113 uint64_t resp_addr;
10114 /*
10115 * This value is used to identify a Virtual Function (VF).
10116 * The scope of VF ID is local within a PF.
10117 */
10118 uint16_t vf_id;
10119 uint8_t unused_0[2];
10120 /* Max number of vnic ids in vnic id table */
10121 uint32_t max_vnic_id_cnt;
10122 /* This is the address for VF VNIC ID table */
10123 uint64_t vnic_id_tbl_addr;
10124} __attribute__((packed));
10125
10126/* hwrm_func_vf_vnic_ids_query_output (size:128b/16B) */
10127struct hwrm_func_vf_vnic_ids_query_output {
10128 /* The specific error status for the command. */
10129 uint16_t error_code;
10130 /* The HWRM command request type. */
10131 uint16_t req_type;
10132 /* The sequence ID from the original command. */
10133 uint16_t seq_id;
10134 /* The length of the response data in number of bytes. */
10135 uint16_t resp_len;
10136 /*
10137 * Actual number of vnic ids
10138 *
10139 * Each VNIC ID is written as a 32-bit number.
10140 */
10141 uint32_t vnic_id_cnt;
10142 uint8_t unused_0[3];
10143 /*
10144 * This field is used in Output records to indicate that the output
10145 * is completely written to RAM. This field should be read as '1'
10146 * to indicate that the output has been completely written.
10147 * When writing a command completion or response to an internal processor,
10148 * the order of writes has to be such that this field is written last.
10149 */
10150 uint8_t valid;
10151} __attribute__((packed));
10152
10153/***********************
10154 * hwrm_func_vf_bw_cfg *
10155 ***********************/
10156
10157
10158/* hwrm_func_vf_bw_cfg_input (size:960b/120B) */
10159struct hwrm_func_vf_bw_cfg_input {
10160 /* The HWRM command request type. */
10161 uint16_t req_type;
10162 /*
10163 * The completion ring to send the completion event on. This should
10164 * be the NQ ID returned from the `nq_alloc` HWRM command.
10165 */
10166 uint16_t cmpl_ring;
10167 /*
10168 * The sequence ID is used by the driver for tracking multiple
10169 * commands. This ID is treated as opaque data by the firmware and
10170 * the value is returned in the `hwrm_resp_hdr` upon completion.
10171 */
10172 uint16_t seq_id;
10173 /*
10174 * The target ID of the command:
10175 * * 0x0-0xFFF8 - The function ID
10176 * * 0xFFF8-0xFFFE - Reserved for internal processors
10177 * * 0xFFFF - HWRM
10178 */
10179 uint16_t target_id;
10180 /*
10181 * A physical address pointer pointing to a host buffer that the
10182 * command's response data will be written. This can be either a host
10183 * physical address (HPA) or a guest physical address (GPA) and must
10184 * point to a physically contiguous block of memory.
10185 */
10186 uint64_t resp_addr;
10187 /*
10188 * The number of VF functions that are being configured.
10189 * The cmd space allows up to 50 VFs' BW to be configured with one cmd.
10190 */
10191 uint16_t num_vfs;
10192 uint16_t unused[3];
10193 /* These 16-bit fields contain the VF fid and the rate scale percentage. */
10194 uint16_t vfn[48];
10195 /* The physical VF id the adjustment will be made to. */
10196 #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_VFID_MASK UINT32_C(0xfff)
10197 #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_VFID_SFT 0
10198 /*
10199 * This field configures the rate scale percentage of the VF as specified
10200 * by the physical VF id.
10201 */
10202 #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_MASK UINT32_C(0xf000)
10203 #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_SFT 12
10204 /* 0% of the max tx rate */
10205 #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_0 \
10206 (UINT32_C(0x0) << 12)
10207 /* 6.66% of the max tx rate */
10208 #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_6_66 \
10209 (UINT32_C(0x1) << 12)
10210 /* 13.33% of the max tx rate */
10211 #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_13_33 \
10212 (UINT32_C(0x2) << 12)
10213 /* 20% of the max tx rate */
10214 #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_20 \
10215 (UINT32_C(0x3) << 12)
10216 /* 26.66% of the max tx rate */
10217 #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_26_66 \
10218 (UINT32_C(0x4) << 12)
10219 /* 33% of the max tx rate */
10220 #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_33_33 \
10221 (UINT32_C(0x5) << 12)
10222 /* 40% of the max tx rate */
10223 #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_40 \
10224 (UINT32_C(0x6) << 12)
10225 /* 46.66% of the max tx rate */
10226 #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_46_66 \
10227 (UINT32_C(0x7) << 12)
10228 /* 53.33% of the max tx rate */
10229 #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_53_33 \
10230 (UINT32_C(0x8) << 12)
10231 /* 60% of the max tx rate */
10232 #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_60 \
10233 (UINT32_C(0x9) << 12)
10234 /* 66.66% of the max tx rate */
10235 #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_66_66 \
10236 (UINT32_C(0xa) << 12)
10237 /* 53.33% of the max tx rate */
10238 #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_73_33 \
10239 (UINT32_C(0xb) << 12)
10240 /* 80% of the max tx rate */
10241 #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_80 \
10242 (UINT32_C(0xc) << 12)
10243 /* 86.66% of the max tx rate */
10244 #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_86_66 \
10245 (UINT32_C(0xd) << 12)
10246 /* 93.33% of the max tx rate */
10247 #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_93_33 \
10248 (UINT32_C(0xe) << 12)
10249 /* 100% of the max tx rate */
10250 #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_100 \
10251 (UINT32_C(0xf) << 12)
10252 #define HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_LAST \
10253 HWRM_FUNC_VF_BW_CFG_INPUT_VFN_RATE_PCT_100
10254} __attribute__((packed));
10255
10256/* hwrm_func_vf_bw_cfg_output (size:128b/16B) */
10257struct hwrm_func_vf_bw_cfg_output {
10258 /* The specific error status for the command. */
10259 uint16_t error_code;
10260 /* The HWRM command request type. */
10261 uint16_t req_type;
10262 /* The sequence ID from the original command. */
10263 uint16_t seq_id;
10264 /* The length of the response data in number of bytes. */
10265 uint16_t resp_len;
10266 uint8_t unused_0[7];
10267 /*
10268 * This field is used in Output records to indicate that the output
10269 * is completely written to RAM. This field should be read as '1'
10270 * to indicate that the output has been completely written.
10271 * When writing a command completion or response to an internal processor,
10272 * the order of writes has to be such that this field is written last.
10273 */
10274 uint8_t valid;
10275} __attribute__((packed));
10276
10277/************************
10278 * hwrm_func_vf_bw_qcfg *
10279 ************************/
10280
10281
10282/* hwrm_func_vf_bw_qcfg_input (size:960b/120B) */
10283struct hwrm_func_vf_bw_qcfg_input {
10284 /* The HWRM command request type. */
10285 uint16_t req_type;
10286 /*
10287 * The completion ring to send the completion event on. This should
10288 * be the NQ ID returned from the `nq_alloc` HWRM command.
10289 */
10290 uint16_t cmpl_ring;
10291 /*
10292 * The sequence ID is used by the driver for tracking multiple
10293 * commands. This ID is treated as opaque data by the firmware and
10294 * the value is returned in the `hwrm_resp_hdr` upon completion.
10295 */
10296 uint16_t seq_id;
10297 /*
10298 * The target ID of the command:
10299 * * 0x0-0xFFF8 - The function ID
10300 * * 0xFFF8-0xFFFE - Reserved for internal processors
10301 * * 0xFFFF - HWRM
10302 */
10303 uint16_t target_id;
10304 /*
10305 * A physical address pointer pointing to a host buffer that the
10306 * command's response data will be written. This can be either a host
10307 * physical address (HPA) or a guest physical address (GPA) and must
10308 * point to a physically contiguous block of memory.
10309 */
10310 uint64_t resp_addr;
10311 /*
10312 * The number of VF functions that are being queried.
10313 * The inline response space allows the host to query up to 50 VFs'
10314 * rate scale percentage
10315 */
10316 uint16_t num_vfs;
10317 uint16_t unused[3];
10318 /* These 16-bit fields contain the VF fid */
10319 uint16_t vfn[48];
10320 /* The physical VF id of interest */
10321 #define HWRM_FUNC_VF_BW_QCFG_INPUT_VFN_VFID_MASK UINT32_C(0xfff)
10322 #define HWRM_FUNC_VF_BW_QCFG_INPUT_VFN_VFID_SFT 0
10323} __attribute__((packed));
10324
10325/* hwrm_func_vf_bw_qcfg_output (size:960b/120B) */
10326struct hwrm_func_vf_bw_qcfg_output {
10327 /* The specific error status for the command. */
10328 uint16_t error_code;
10329 /* The HWRM command request type. */
10330 uint16_t req_type;
10331 /* The sequence ID from the original command. */
10332 uint16_t seq_id;
10333 /* The length of the response data in number of bytes. */
10334 uint16_t resp_len;
10335 /*
10336 * The number of VF functions that are being queried.
10337 * The inline response space allows the host to query up to 50 VFs' rate
10338 * scale percentage
10339 */
10340 uint16_t num_vfs;
10341 uint16_t unused[3];
10342 /* These 16-bit fields contain the VF fid and the rate scale percentage. */
10343 uint16_t vfn[48];
10344 /* The physical VF id the adjustment will be made to. */
10345 #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_VFID_MASK UINT32_C(0xfff)
10346 #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_VFID_SFT 0
10347 /*
10348 * This field configures the rate scale percentage of the VF as specified
10349 * by the physical VF id.
10350 */
10351 #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_MASK UINT32_C(0xf000)
10352 #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_SFT 12
10353 /* 0% of the max tx rate */
10354 #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_0 \
10355 (UINT32_C(0x0) << 12)
10356 /* 6.66% of the max tx rate */
10357 #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_6_66 \
10358 (UINT32_C(0x1) << 12)
10359 /* 13.33% of the max tx rate */
10360 #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_13_33 \
10361 (UINT32_C(0x2) << 12)
10362 /* 20% of the max tx rate */
10363 #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_20 \
10364 (UINT32_C(0x3) << 12)
10365 /* 26.66% of the max tx rate */
10366 #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_26_66 \
10367 (UINT32_C(0x4) << 12)
10368 /* 33% of the max tx rate */
10369 #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_33_33 \
10370 (UINT32_C(0x5) << 12)
10371 /* 40% of the max tx rate */
10372 #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_40 \
10373 (UINT32_C(0x6) << 12)
10374 /* 46.66% of the max tx rate */
10375 #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_46_66 \
10376 (UINT32_C(0x7) << 12)
10377 /* 53.33% of the max tx rate */
10378 #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_53_33 \
10379 (UINT32_C(0x8) << 12)
10380 /* 60% of the max tx rate */
10381 #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_60 \
10382 (UINT32_C(0x9) << 12)
10383 /* 66.66% of the max tx rate */
10384 #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_66_66 \
10385 (UINT32_C(0xa) << 12)
10386 /* 53.33% of the max tx rate */
10387 #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_73_33 \
10388 (UINT32_C(0xb) << 12)
10389 /* 80% of the max tx rate */
10390 #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_80 \
10391 (UINT32_C(0xc) << 12)
10392 /* 86.66% of the max tx rate */
10393 #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_86_66 \
10394 (UINT32_C(0xd) << 12)
10395 /* 93.33% of the max tx rate */
10396 #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_93_33 \
10397 (UINT32_C(0xe) << 12)
10398 /* 100% of the max tx rate */
10399 #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_100 \
10400 (UINT32_C(0xf) << 12)
10401 #define HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_LAST \
10402 HWRM_FUNC_VF_BW_QCFG_OUTPUT_VFN_RATE_PCT_100
10403 uint8_t unused_0[7];
10404 /*
10405 * This field is used in Output records to indicate that the output
10406 * is completely written to RAM. This field should be read as '1'
10407 * to indicate that the output has been completely written.
10408 * When writing a command completion or response to an internal processor,
10409 * the order of writes has to be such that this field is written last.
10410 */
10411 uint8_t valid;
10412} __attribute__((packed));
10413
10414/***************************
10415 * hwrm_func_drv_if_change *
10416 ***************************/
10417
10418
10419/* hwrm_func_drv_if_change_input (size:192b/24B) */
10420struct hwrm_func_drv_if_change_input {
10421 /* The HWRM command request type. */
10422 uint16_t req_type;
10423 /*
10424 * The completion ring to send the completion event on. This should
10425 * be the NQ ID returned from the `nq_alloc` HWRM command.
10426 */
10427 uint16_t cmpl_ring;
10428 /*
10429 * The sequence ID is used by the driver for tracking multiple
10430 * commands. This ID is treated as opaque data by the firmware and
10431 * the value is returned in the `hwrm_resp_hdr` upon completion.
10432 */
10433 uint16_t seq_id;
10434 /*
10435 * The target ID of the command:
10436 * * 0x0-0xFFF8 - The function ID
10437 * * 0xFFF8-0xFFFE - Reserved for internal processors
10438 * * 0xFFFF - HWRM
10439 */
10440 uint16_t target_id;
10441 /*
10442 * A physical address pointer pointing to a host buffer that the
10443 * command's response data will be written. This can be either a host
10444 * physical address (HPA) or a guest physical address (GPA) and must
10445 * point to a physically contiguous block of memory.
10446 */
10447 uint64_t resp_addr;
10448 uint32_t flags;
10449 /*
10450 * When this bit is '1', the function driver is indicating
10451 * that the IF state is changing to UP state. The call should
10452 * be made at the beginning of the driver's open call before
10453 * resources are allocated. After making the call, the driver
10454 * should check the response to see if any resources may have
10455 * changed (see the response below). If the driver fails
10456 * the open call, the driver should make this call again with
10457 * this bit cleared to indicate that the IF state is not UP.
10458 * During the driver's close call when the IF state is changing
10459 * to DOWN, the driver should make this call with the bit cleared
10460 * after all resources have been freed.
10461 */
10462 #define HWRM_FUNC_DRV_IF_CHANGE_INPUT_FLAGS_UP UINT32_C(0x1)
10463 uint32_t unused;
10464} __attribute__((packed));
10465
10466/* hwrm_func_drv_if_change_output (size:128b/16B) */
10467struct hwrm_func_drv_if_change_output {
10468 /* The specific error status for the command. */
10469 uint16_t error_code;
10470 /* The HWRM command request type. */
10471 uint16_t req_type;
10472 /* The sequence ID from the original command. */
10473 uint16_t seq_id;
10474 /* The length of the response data in number of bytes. */
10475 uint16_t resp_len;
10476 uint32_t flags;
10477 /*
10478 * When this bit is '1', it indicates that the resources reserved
10479 * for this function may have changed. The driver should check
10480 * resource capabilities and reserve resources again before
10481 * allocating resources.
10482 */
10483 #define HWRM_FUNC_DRV_IF_CHANGE_OUTPUT_FLAGS_RESC_CHANGE \
10484 UINT32_C(0x1)
10485 uint8_t unused_0[3];
10486 /*
10487 * This field is used in Output records to indicate that the output
10488 * is completely written to RAM. This field should be read as '1'
10489 * to indicate that the output has been completely written.
10490 * When writing a command completion or response to an internal processor,
10491 * the order of writes has to be such that this field is written last.
10492 */
10493 uint8_t valid;
10494} __attribute__((packed));
10495
10496/*********************
10497 * hwrm_port_phy_cfg *
10498 *********************/
10499
10500
10501/* hwrm_port_phy_cfg_input (size:448b/56B) */
10502struct hwrm_port_phy_cfg_input {
10503 /* The HWRM command request type. */
10504 uint16_t req_type;
10505 /*
10506 * The completion ring to send the completion event on. This should
10507 * be the NQ ID returned from the `nq_alloc` HWRM command.
10508 */
10509 uint16_t cmpl_ring;
10510 /*
10511 * The sequence ID is used by the driver for tracking multiple
10512 * commands. This ID is treated as opaque data by the firmware and
10513 * the value is returned in the `hwrm_resp_hdr` upon completion.
10514 */
10515 uint16_t seq_id;
10516 /*
10517 * The target ID of the command:
10518 * * 0x0-0xFFF8 - The function ID
10519 * * 0xFFF8-0xFFFE - Reserved for internal processors
10520 * * 0xFFFF - HWRM
10521 */
10522 uint16_t target_id;
10523 /*
10524 * A physical address pointer pointing to a host buffer that the
10525 * command's response data will be written. This can be either a host
10526 * physical address (HPA) or a guest physical address (GPA) and must
10527 * point to a physically contiguous block of memory.
10528 */
10529 uint64_t resp_addr;
10530 uint32_t flags;
10531 /*
10532 * When this bit is set to '1', the PHY for the port shall
10533 * be reset.
10534 *
10535 * # If this bit is set to 1, then the HWRM shall reset the
10536 * PHY after applying PHY configuration changes specified
10537 * in this command.
10538 * # In order to guarantee that PHY configuration changes
10539 * specified in this command take effect, the HWRM
10540 * client should set this flag to 1.
10541 * # If this bit is not set to 1, then the HWRM may reset
10542 * the PHY depending on the current PHY configuration and
10543 * settings specified in this command.
10544 */
10545 #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_RESET_PHY \
10546 UINT32_C(0x1)
10547 /* deprecated bit. Do not use!!! */
10548 #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_DEPRECATED \
10549 UINT32_C(0x2)
10550 /*
10551 * When this bit is set to '1', the link shall be forced to
10552 * the force_link_speed value.
10553 *
10554 * When this bit is set to '1', the HWRM client should
10555 * not enable any of the auto negotiation related
10556 * fields represented by auto_XXX fields in this command.
10557 * When this bit is set to '1' and the HWRM client has
10558 * enabled a auto_XXX field in this command, then the
10559 * HWRM shall ignore the enabled auto_XXX field.
10560 *
10561 * When this bit is set to zero, the link
10562 * shall be allowed to autoneg.
10563 */
10564 #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FORCE \
10565 UINT32_C(0x4)
10566 /*
10567 * When this bit is set to '1', the auto-negotiation process
10568 * shall be restarted on the link.
10569 */
10570 #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_RESTART_AUTONEG \
10571 UINT32_C(0x8)
10572 /*
10573 * When this bit is set to '1', Energy Efficient Ethernet
10574 * (EEE) is requested to be enabled on this link.
10575 * If EEE is not supported on this port, then this flag
10576 * shall be ignored by the HWRM.
10577 */
10578 #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_EEE_ENABLE \
10579 UINT32_C(0x10)
10580 /*
10581 * When this bit is set to '1', Energy Efficient Ethernet
10582 * (EEE) is requested to be disabled on this link.
10583 * If EEE is not supported on this port, then this flag
10584 * shall be ignored by the HWRM.
10585 */
10586 #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_EEE_DISABLE \
10587 UINT32_C(0x20)
10588 /*
10589 * When this bit is set to '1' and EEE is enabled on this
10590 * link, then TX LPI is requested to be enabled on the link.
10591 * If EEE is not supported on this port, then this flag
10592 * shall be ignored by the HWRM.
10593 * If EEE is disabled on this port, then this flag shall be
10594 * ignored by the HWRM.
10595 */
10596 #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_EEE_TX_LPI_ENABLE \
10597 UINT32_C(0x40)
10598 /*
10599 * When this bit is set to '1' and EEE is enabled on this
10600 * link, then TX LPI is requested to be disabled on the link.
10601 * If EEE is not supported on this port, then this flag
10602 * shall be ignored by the HWRM.
10603 * If EEE is disabled on this port, then this flag shall be
10604 * ignored by the HWRM.
10605 */
10606 #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_EEE_TX_LPI_DISABLE \
10607 UINT32_C(0x80)
10608 /*
10609 * When set to 1, then the HWRM shall enable FEC autonegotitation
10610 * on this port if supported.
10611 * When set to 0, then this flag shall be ignored.
10612 * If FEC autonegotiation is not supported, then the HWRM shall ignore this
10613 * flag.
10614 */
10615 #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_AUTONEG_ENABLE \
10616 UINT32_C(0x100)
10617 /*
10618 * When set to 1, then the HWRM shall disable FEC autonegotiation
10619 * on this port if supported.
10620 * When set to 0, then this flag shall be ignored.
10621 * If FEC autonegotiation is not supported, then the HWRM shall ignore this
10622 * flag.
10623 */
10624 #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_AUTONEG_DISABLE \
10625 UINT32_C(0x200)
10626 /*
10627 * When set to 1, then the HWRM shall enable FEC CLAUSE 74 (Fire Code)
10628 * on this port if supported.
10629 * When set to 0, then this flag shall be ignored.
10630 * If FEC CLAUSE 74 is not supported, then the HWRM shall ignore this
10631 * flag.
10632 */
10633 #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_CLAUSE74_ENABLE \
10634 UINT32_C(0x400)
10635 /*
10636 * When set to 1, then the HWRM shall disable FEC CLAUSE 74 (Fire Code)
10637 * on this port if supported.
10638 * When set to 0, then this flag shall be ignored.
10639 * If FEC CLAUSE 74 is not supported, then the HWRM shall ignore this
10640 * flag.
10641 */
10642 #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_CLAUSE74_DISABLE \
10643 UINT32_C(0x800)
10644 /*
10645 * When set to 1, then the HWRM shall enable FEC CLAUSE 91 (Reed Solomon)
10646 * on this port if supported.
10647 * When set to 0, then this flag shall be ignored.
10648 * If FEC CLAUSE 91 is not supported, then the HWRM shall ignore this
10649 * flag.
10650 */
10651 #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_CLAUSE91_ENABLE \
10652 UINT32_C(0x1000)
10653 /*
10654 * When set to 1, then the HWRM shall disable FEC CLAUSE 91 (Reed Solomon)
10655 * on this port if supported.
10656 * When set to 0, then this flag shall be ignored.
10657 * If FEC CLAUSE 91 is not supported, then the HWRM shall ignore this
10658 * flag.
10659 */
10660 #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FEC_CLAUSE91_DISABLE \
10661 UINT32_C(0x2000)
10662 /*
10663 * When this bit is set to '1', the link shall be forced to
10664 * be taken down.
10665 *
10666 * # When this bit is set to '1", all other
10667 * command input settings related to the link speed shall
10668 * be ignored.
10669 * Once the link state is forced down, it can be
10670 * explicitly cleared from that state by setting this flag
10671 * to '0'.
10672 * # If this flag is set to '0', then the link shall be
10673 * cleared from forced down state if the link is in forced
10674 * down state.
10675 * There may be conditions (e.g. out-of-band or sideband
10676 * configuration changes for the link) outside the scope
10677 * of the HWRM implementation that may clear forced down
10678 * link state.
10679 */
10680 #define HWRM_PORT_PHY_CFG_INPUT_FLAGS_FORCE_LINK_DWN \
10681 UINT32_C(0x4000)
10682 uint32_t enables;
10683 /*
10684 * This bit must be '1' for the auto_mode field to be
10685 * configured.
10686 */
10687 #define HWRM_PORT_PHY_CFG_INPUT_ENABLES_AUTO_MODE \
10688 UINT32_C(0x1)
10689 /*
10690 * This bit must be '1' for the auto_duplex field to be
10691 * configured.
10692 */
10693 #define HWRM_PORT_PHY_CFG_INPUT_ENABLES_AUTO_DUPLEX \
10694 UINT32_C(0x2)
10695 /*
10696 * This bit must be '1' for the auto_pause field to be
10697 * configured.
10698 */
10699 #define HWRM_PORT_PHY_CFG_INPUT_ENABLES_AUTO_PAUSE \
10700 UINT32_C(0x4)
10701 /*
10702 * This bit must be '1' for the auto_link_speed field to be
10703 * configured.
10704 */
10705 #define HWRM_PORT_PHY_CFG_INPUT_ENABLES_AUTO_LINK_SPEED \
10706 UINT32_C(0x8)
10707 /*
10708 * This bit must be '1' for the auto_link_speed_mask field to be
10709 * configured.
10710 */
10711 #define HWRM_PORT_PHY_CFG_INPUT_ENABLES_AUTO_LINK_SPEED_MASK \
10712 UINT32_C(0x10)
10713 /*
10714 * This bit must be '1' for the wirespeed field to be
10715 * configured.
10716 */
10717 #define HWRM_PORT_PHY_CFG_INPUT_ENABLES_WIRESPEED \
10718 UINT32_C(0x20)
10719 /*
10720 * This bit must be '1' for the lpbk field to be
10721 * configured.
10722 */
10723 #define HWRM_PORT_PHY_CFG_INPUT_ENABLES_LPBK \
10724 UINT32_C(0x40)
10725 /*
10726 * This bit must be '1' for the preemphasis field to be
10727 * configured.
10728 */
10729 #define HWRM_PORT_PHY_CFG_INPUT_ENABLES_PREEMPHASIS \
10730 UINT32_C(0x80)
10731 /*
10732 * This bit must be '1' for the force_pause field to be
10733 * configured.
10734 */
10735 #define HWRM_PORT_PHY_CFG_INPUT_ENABLES_FORCE_PAUSE \
10736 UINT32_C(0x100)
10737 /*
10738 * This bit must be '1' for the eee_link_speed_mask field to be
10739 * configured.
10740 */
10741 #define HWRM_PORT_PHY_CFG_INPUT_ENABLES_EEE_LINK_SPEED_MASK \
10742 UINT32_C(0x200)
10743 /*
10744 * This bit must be '1' for the tx_lpi_timer field to be
10745 * configured.
10746 */
10747 #define HWRM_PORT_PHY_CFG_INPUT_ENABLES_TX_LPI_TIMER \
10748 UINT32_C(0x400)
10749 /* Port ID of port that is to be configured. */
10750 uint16_t port_id;
10751 /*
10752 * This is the speed that will be used if the force
10753 * bit is '1'. If unsupported speed is selected, an error
10754 * will be generated.
10755 */
10756 uint16_t force_link_speed;
10757 /* 100Mb link speed */
10758 #define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_100MB UINT32_C(0x1)
10759 /* 1Gb link speed */
10760 #define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_1GB UINT32_C(0xa)
10761 /* 2Gb link speed */
10762 #define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_2GB UINT32_C(0x14)
10763 /* 25Gb link speed */
10764 #define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_2_5GB UINT32_C(0x19)
10765 /* 10Gb link speed */
10766 #define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_10GB UINT32_C(0x64)
10767 /* 20Mb link speed */
10768 #define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_20GB UINT32_C(0xc8)
10769 /* 25Gb link speed */
10770 #define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_25GB UINT32_C(0xfa)
10771 /* 40Gb link speed */
10772 #define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_40GB UINT32_C(0x190)
10773 /* 50Gb link speed */
10774 #define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_50GB UINT32_C(0x1f4)
10775 /* 100Gb link speed */
10776 #define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_100GB UINT32_C(0x3e8)
10777 /* 10Mb link speed */
10778 #define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_10MB UINT32_C(0xffff)
10779 #define HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_LAST \
10780 HWRM_PORT_PHY_CFG_INPUT_FORCE_LINK_SPEED_10MB
10781 /*
10782 * This value is used to identify what autoneg mode is
10783 * used when the link speed is not being forced.
10784 */
10785 uint8_t auto_mode;
10786 /* Disable autoneg or autoneg disabled. No speeds are selected. */
10787 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_MODE_NONE UINT32_C(0x0)
10788 /* Select all possible speeds for autoneg mode. */
10789 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_MODE_ALL_SPEEDS UINT32_C(0x1)
10790 /*
10791 * Select only the auto_link_speed speed for autoneg mode. This mode has
10792 * been DEPRECATED. An HWRM client should not use this mode.
10793 */
10794 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_MODE_ONE_SPEED UINT32_C(0x2)
10795 /*
10796 * Select the auto_link_speed or any speed below that speed for autoneg.
10797 * This mode has been DEPRECATED. An HWRM client should not use this mode.
10798 */
10799 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_MODE_ONE_OR_BELOW UINT32_C(0x3)
10800 /*
10801 * Select the speeds based on the corresponding link speed mask value
10802 * that is provided.
10803 */
10804 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_MODE_SPEED_MASK UINT32_C(0x4)
10805 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_MODE_LAST \
10806 HWRM_PORT_PHY_CFG_INPUT_AUTO_MODE_SPEED_MASK
10807 /*
10808 * This is the duplex setting that will be used if the autoneg_mode
10809 * is "one_speed" or "one_or_below".
10810 */
10811 uint8_t auto_duplex;
10812 /* Half Duplex will be requested. */
10813 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_DUPLEX_HALF UINT32_C(0x0)
10814 /* Full duplex will be requested. */
10815 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_DUPLEX_FULL UINT32_C(0x1)
10816 /* Both Half and Full dupex will be requested. */
10817 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_DUPLEX_BOTH UINT32_C(0x2)
10818 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_DUPLEX_LAST \
10819 HWRM_PORT_PHY_CFG_INPUT_AUTO_DUPLEX_BOTH
10820 /*
10821 * This value is used to configure the pause that will be
10822 * used for autonegotiation.
10823 * Add text on the usage of auto_pause and force_pause.
10824 */
10825 uint8_t auto_pause;
10826 /*
10827 * When this bit is '1', Generation of tx pause messages
10828 * has been requested. Disabled otherwise.
10829 */
10830 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_PAUSE_TX \
10831 UINT32_C(0x1)
10832 /*
10833 * When this bit is '1', Reception of rx pause messages
10834 * has been requested. Disabled otherwise.
10835 */
10836 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_PAUSE_RX \
10837 UINT32_C(0x2)
10838 /*
10839 * When set to 1, the advertisement of pause is enabled.
10840 *
10841 * # When the auto_mode is not set to none and this flag is
10842 * set to 1, then the auto_pause bits on this port are being
10843 * advertised and autoneg pause results are being interpreted.
10844 * # When the auto_mode is not set to none and this
10845 * flag is set to 0, the pause is forced as indicated in
10846 * force_pause, and also advertised as auto_pause bits, but
10847 * the autoneg results are not interpreted since the pause
10848 * configuration is being forced.
10849 * # When the auto_mode is set to none and this flag is set to
10850 * 1, auto_pause bits should be ignored and should be set to 0.
10851 */
10852 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_PAUSE_AUTONEG_PAUSE \
10853 UINT32_C(0x4)
10854 uint8_t unused_0;
10855 /*
10856 * This is the speed that will be used if the autoneg_mode
10857 * is "one_speed" or "one_or_below". If an unsupported speed
10858 * is selected, an error will be generated.
10859 */
10860 uint16_t auto_link_speed;
10861 /* 100Mb link speed */
10862 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_100MB UINT32_C(0x1)
10863 /* 1Gb link speed */
10864 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_1GB UINT32_C(0xa)
10865 /* 2Gb link speed */
10866 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_2GB UINT32_C(0x14)
10867 /* 25Gb link speed */
10868 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_2_5GB UINT32_C(0x19)
10869 /* 10Gb link speed */
10870 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_10GB UINT32_C(0x64)
10871 /* 20Mb link speed */
10872 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_20GB UINT32_C(0xc8)
10873 /* 25Gb link speed */
10874 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_25GB UINT32_C(0xfa)
10875 /* 40Gb link speed */
10876 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_40GB UINT32_C(0x190)
10877 /* 50Gb link speed */
10878 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_50GB UINT32_C(0x1f4)
10879 /* 100Gb link speed */
10880 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_100GB UINT32_C(0x3e8)
10881 /* 10Mb link speed */
10882 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_10MB UINT32_C(0xffff)
10883 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_LAST \
10884 HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_10MB
10885 /*
10886 * This is a mask of link speeds that will be used if
10887 * autoneg_mode is "mask". If unsupported speed is enabled
10888 * an error will be generated.
10889 */
10890 uint16_t auto_link_speed_mask;
10891 /* 100Mb link speed (Half-duplex) */
10892 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_100MBHD \
10893 UINT32_C(0x1)
10894 /* 100Mb link speed (Full-duplex) */
10895 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_100MB \
10896 UINT32_C(0x2)
10897 /* 1Gb link speed (Half-duplex) */
10898 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_1GBHD \
10899 UINT32_C(0x4)
10900 /* 1Gb link speed (Full-duplex) */
10901 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_1GB \
10902 UINT32_C(0x8)
10903 /* 2Gb link speed */
10904 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_2GB \
10905 UINT32_C(0x10)
10906 /* 25Gb link speed */
10907 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_2_5GB \
10908 UINT32_C(0x20)
10909 /* 10Gb link speed */
10910 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_10GB \
10911 UINT32_C(0x40)
10912 /* 20Gb link speed */
10913 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_20GB \
10914 UINT32_C(0x80)
10915 /* 25Gb link speed */
10916 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_25GB \
10917 UINT32_C(0x100)
10918 /* 40Gb link speed */
10919 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_40GB \
10920 UINT32_C(0x200)
10921 /* 50Gb link speed */
10922 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_50GB \
10923 UINT32_C(0x400)
10924 /* 100Gb link speed */
10925 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_100GB \
10926 UINT32_C(0x800)
10927 /* 10Mb link speed (Half-duplex) */
10928 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_10MBHD \
10929 UINT32_C(0x1000)
10930 /* 10Mb link speed (Full-duplex) */
10931 #define HWRM_PORT_PHY_CFG_INPUT_AUTO_LINK_SPEED_MASK_10MB \
10932 UINT32_C(0x2000)
10933 /* This value controls the wirespeed feature. */
10934 uint8_t wirespeed;
10935 /* Wirespeed feature is disabled. */
10936 #define HWRM_PORT_PHY_CFG_INPUT_WIRESPEED_OFF UINT32_C(0x0)
10937 /* Wirespeed feature is enabled. */
10938 #define HWRM_PORT_PHY_CFG_INPUT_WIRESPEED_ON UINT32_C(0x1)
10939 #define HWRM_PORT_PHY_CFG_INPUT_WIRESPEED_LAST \
10940 HWRM_PORT_PHY_CFG_INPUT_WIRESPEED_ON
10941 /* This value controls the loopback setting for the PHY. */
10942 uint8_t lpbk;
10943 /* No loopback is selected. Normal operation. */
10944 #define HWRM_PORT_PHY_CFG_INPUT_LPBK_NONE UINT32_C(0x0)
10945 /*
10946 * The HW will be configured with local loopback such that
10947 * host data is sent back to the host without modification.
10948 */
10949 #define HWRM_PORT_PHY_CFG_INPUT_LPBK_LOCAL UINT32_C(0x1)
10950 /*
10951 * The HW will be configured with remote loopback such that
10952 * port logic will send packets back out the transmitter that
10953 * are received.
10954 */
10955 #define HWRM_PORT_PHY_CFG_INPUT_LPBK_REMOTE UINT32_C(0x2)
10956 /*
10957 * The HW will be configured with external loopback such that
10958 * host data is sent on the trasmitter and based on the external
10959 * loopback connection the data will be received without modification.
10960 */
10961 #define HWRM_PORT_PHY_CFG_INPUT_LPBK_EXTERNAL UINT32_C(0x3)
10962 #define HWRM_PORT_PHY_CFG_INPUT_LPBK_LAST \
10963 HWRM_PORT_PHY_CFG_INPUT_LPBK_EXTERNAL
10964 /*
10965 * This value is used to configure the pause that will be
10966 * used for force mode.
10967 */
10968 uint8_t force_pause;
10969 /*
10970 * When this bit is '1', Generation of tx pause messages
10971 * is supported. Disabled otherwise.
10972 */
10973 #define HWRM_PORT_PHY_CFG_INPUT_FORCE_PAUSE_TX UINT32_C(0x1)
10974 /*
10975 * When this bit is '1', Reception of rx pause messages
10976 * is supported. Disabled otherwise.
10977 */
10978 #define HWRM_PORT_PHY_CFG_INPUT_FORCE_PAUSE_RX UINT32_C(0x2)
10979 uint8_t unused_1;
10980 /*
10981 * This value controls the pre-emphasis to be used for the
10982 * link. Driver should not set this value (use
10983 * enable.preemphasis = 0) unless driver is sure of setting.
10984 * Normally HWRM FW will determine proper pre-emphasis.
10985 */
10986 uint32_t preemphasis;
10987 /*
10988 * Setting for link speed mask that is used to
10989 * advertise speeds during autonegotiation when EEE is enabled.
10990 * This field is valid only when EEE is enabled.
10991 * The speeds specified in this field shall be a subset of
10992 * speeds specified in auto_link_speed_mask.
10993 * If EEE is enabled,then at least one speed shall be provided
10994 * in this mask.
10995 */
10996 uint16_t eee_link_speed_mask;
10997 /* Reserved */
10998 #define HWRM_PORT_PHY_CFG_INPUT_EEE_LINK_SPEED_MASK_RSVD1 \
10999 UINT32_C(0x1)
11000 /* 100Mb link speed (Full-duplex) */
11001 #define HWRM_PORT_PHY_CFG_INPUT_EEE_LINK_SPEED_MASK_100MB \
11002 UINT32_C(0x2)
11003 /* Reserved */
11004 #define HWRM_PORT_PHY_CFG_INPUT_EEE_LINK_SPEED_MASK_RSVD2 \
11005 UINT32_C(0x4)
11006 /* 1Gb link speed (Full-duplex) */
11007 #define HWRM_PORT_PHY_CFG_INPUT_EEE_LINK_SPEED_MASK_1GB \
11008 UINT32_C(0x8)
11009 /* Reserved */
11010 #define HWRM_PORT_PHY_CFG_INPUT_EEE_LINK_SPEED_MASK_RSVD3 \
11011 UINT32_C(0x10)
11012 /* Reserved */
11013 #define HWRM_PORT_PHY_CFG_INPUT_EEE_LINK_SPEED_MASK_RSVD4 \
11014 UINT32_C(0x20)
11015 /* 10Gb link speed */
11016 #define HWRM_PORT_PHY_CFG_INPUT_EEE_LINK_SPEED_MASK_10GB \
11017 UINT32_C(0x40)
11018 uint8_t unused_2[2];
11019 /*
11020 * Reuested setting of TX LPI timer in microseconds.
11021 * This field is valid only when EEE is enabled and TX LPI is
11022 * enabled.
11023 */
11024 uint32_t tx_lpi_timer;
11025 #define HWRM_PORT_PHY_CFG_INPUT_TX_LPI_TIMER_MASK UINT32_C(0xffffff)
11026 #define HWRM_PORT_PHY_CFG_INPUT_TX_LPI_TIMER_SFT 0
11027 uint32_t unused_3;
11028} __attribute__((packed));
11029
11030/* hwrm_port_phy_cfg_output (size:128b/16B) */
11031struct hwrm_port_phy_cfg_output {
11032 /* The specific error status for the command. */
11033 uint16_t error_code;
11034 /* The HWRM command request type. */
11035 uint16_t req_type;
11036 /* The sequence ID from the original command. */
11037 uint16_t seq_id;
11038 /* The length of the response data in number of bytes. */
11039 uint16_t resp_len;
11040 uint8_t unused_0[7];
11041 /*
11042 * This field is used in Output records to indicate that the output
11043 * is completely written to RAM. This field should be read as '1'
11044 * to indicate that the output has been completely written.
11045 * When writing a command completion or response to an internal processor,
11046 * the order of writes has to be such that this field is written last.
11047 */
11048 uint8_t valid;
11049} __attribute__((packed));
11050
11051/* hwrm_port_phy_cfg_cmd_err (size:64b/8B) */
11052struct hwrm_port_phy_cfg_cmd_err {
11053 /*
11054 * command specific error codes that goes to
11055 * the cmd_err field in Common HWRM Error Response.
11056 */
11057 uint8_t code;
11058 /* Unknown error */
11059 #define HWRM_PORT_PHY_CFG_CMD_ERR_CODE_UNKNOWN UINT32_C(0x0)
11060 /* Unable to complete operation due to invalid speed */
11061 #define HWRM_PORT_PHY_CFG_CMD_ERR_CODE_ILLEGAL_SPEED UINT32_C(0x1)
11062 /*
11063 * retry the command since the phy is not ready.
11064 * retry count is returned in opaque_0.
11065 * This is only valid for the first command and
11066 * this value will not change for successive calls.
11067 * but if a 0 is returned at any time then this should
11068 * be treated as an un recoverable failure,
11069 *
11070 * retry interval in milli seconds is returned in opaque_1.
11071 * This specifies the time that user should wait before
11072 * issuing the next port_phy_cfg command.
11073 */
11074 #define HWRM_PORT_PHY_CFG_CMD_ERR_CODE_RETRY UINT32_C(0x2)
11075 #define HWRM_PORT_PHY_CFG_CMD_ERR_CODE_LAST \
11076 HWRM_PORT_PHY_CFG_CMD_ERR_CODE_RETRY
11077 uint8_t unused_0[7];
11078} __attribute__((packed));
11079
11080/**********************
11081 * hwrm_port_phy_qcfg *
11082 **********************/
11083
11084
11085/* hwrm_port_phy_qcfg_input (size:192b/24B) */
11086struct hwrm_port_phy_qcfg_input {
11087 /* The HWRM command request type. */
11088 uint16_t req_type;
11089 /*
11090 * The completion ring to send the completion event on. This should
11091 * be the NQ ID returned from the `nq_alloc` HWRM command.
11092 */
11093 uint16_t cmpl_ring;
11094 /*
11095 * The sequence ID is used by the driver for tracking multiple
11096 * commands. This ID is treated as opaque data by the firmware and
11097 * the value is returned in the `hwrm_resp_hdr` upon completion.
11098 */
11099 uint16_t seq_id;
11100 /*
11101 * The target ID of the command:
11102 * * 0x0-0xFFF8 - The function ID
11103 * * 0xFFF8-0xFFFE - Reserved for internal processors
11104 * * 0xFFFF - HWRM
11105 */
11106 uint16_t target_id;
11107 /*
11108 * A physical address pointer pointing to a host buffer that the
11109 * command's response data will be written. This can be either a host
11110 * physical address (HPA) or a guest physical address (GPA) and must
11111 * point to a physically contiguous block of memory.
11112 */
11113 uint64_t resp_addr;
11114 /* Port ID of port that is to be queried. */
11115 uint16_t port_id;
11116 uint8_t unused_0[6];
11117} __attribute__((packed));
11118
11119/* hwrm_port_phy_qcfg_output (size:768b/96B) */
11120struct hwrm_port_phy_qcfg_output {
11121 /* The specific error status for the command. */
11122 uint16_t error_code;
11123 /* The HWRM command request type. */
11124 uint16_t req_type;
11125 /* The sequence ID from the original command. */
11126 uint16_t seq_id;
11127 /* The length of the response data in number of bytes. */
11128 uint16_t resp_len;
11129 /* This value indicates the current link status. */
11130 uint8_t link;
11131 /* There is no link or cable detected. */
11132 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_NO_LINK UINT32_C(0x0)
11133 /* There is no link, but a cable has been detected. */
11134 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SIGNAL UINT32_C(0x1)
11135 /* There is a link. */
11136 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_LINK UINT32_C(0x2)
11137 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_LAST \
11138 HWRM_PORT_PHY_QCFG_OUTPUT_LINK_LINK
11139 uint8_t unused_0;
11140 /* This value indicates the current link speed of the connection. */
11141 uint16_t link_speed;
11142 /* 100Mb link speed */
11143 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_100MB UINT32_C(0x1)
11144 /* 1Gb link speed */
11145 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_1GB UINT32_C(0xa)
11146 /* 2Gb link speed */
11147 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_2GB UINT32_C(0x14)
11148 /* 25Gb link speed */
11149 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_2_5GB UINT32_C(0x19)
11150 /* 10Gb link speed */
11151 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_10GB UINT32_C(0x64)
11152 /* 20Mb link speed */
11153 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_20GB UINT32_C(0xc8)
11154 /* 25Gb link speed */
11155 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_25GB UINT32_C(0xfa)
11156 /* 40Gb link speed */
11157 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_40GB UINT32_C(0x190)
11158 /* 50Gb link speed */
11159 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_50GB UINT32_C(0x1f4)
11160 /* 100Gb link speed */
11161 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_100GB UINT32_C(0x3e8)
11162 /* 10Mb link speed */
11163 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_10MB UINT32_C(0xffff)
11164 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_LAST \
11165 HWRM_PORT_PHY_QCFG_OUTPUT_LINK_SPEED_10MB
11166 /*
11167 * This value is indicates the duplex of the current
11168 * configuration.
11169 */
11170 uint8_t duplex_cfg;
11171 /* Half Duplex connection. */
11172 #define HWRM_PORT_PHY_QCFG_OUTPUT_DUPLEX_CFG_HALF UINT32_C(0x0)
11173 /* Full duplex connection. */
11174 #define HWRM_PORT_PHY_QCFG_OUTPUT_DUPLEX_CFG_FULL UINT32_C(0x1)
11175 #define HWRM_PORT_PHY_QCFG_OUTPUT_DUPLEX_CFG_LAST \
11176 HWRM_PORT_PHY_QCFG_OUTPUT_DUPLEX_CFG_FULL
11177 /*
11178 * This value is used to indicate the current
11179 * pause configuration. When autoneg is enabled, this value
11180 * represents the autoneg results of pause configuration.
11181 */
11182 uint8_t pause;
11183 /*
11184 * When this bit is '1', Generation of tx pause messages
11185 * is supported. Disabled otherwise.
11186 */
11187 #define HWRM_PORT_PHY_QCFG_OUTPUT_PAUSE_TX UINT32_C(0x1)
11188 /*
11189 * When this bit is '1', Reception of rx pause messages
11190 * is supported. Disabled otherwise.
11191 */
11192 #define HWRM_PORT_PHY_QCFG_OUTPUT_PAUSE_RX UINT32_C(0x2)
11193 /*
11194 * The supported speeds for the port. This is a bit mask.
11195 * For each speed that is supported, the corrresponding
11196 * bit will be set to '1'.
11197 */
11198 uint16_t support_speeds;
11199 /* 100Mb link speed (Half-duplex) */
11200 #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_100MBHD \
11201 UINT32_C(0x1)
11202 /* 100Mb link speed (Full-duplex) */
11203 #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_100MB \
11204 UINT32_C(0x2)
11205 /* 1Gb link speed (Half-duplex) */
11206 #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_1GBHD \
11207 UINT32_C(0x4)
11208 /* 1Gb link speed (Full-duplex) */
11209 #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_1GB \
11210 UINT32_C(0x8)
11211 /* 2Gb link speed */
11212 #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_2GB \
11213 UINT32_C(0x10)
11214 /* 25Gb link speed */
11215 #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_2_5GB \
11216 UINT32_C(0x20)
11217 /* 10Gb link speed */
11218 #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_10GB \
11219 UINT32_C(0x40)
11220 /* 20Gb link speed */
11221 #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_20GB \
11222 UINT32_C(0x80)
11223 /* 25Gb link speed */
11224 #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_25GB \
11225 UINT32_C(0x100)
11226 /* 40Gb link speed */
11227 #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_40GB \
11228 UINT32_C(0x200)
11229 /* 50Gb link speed */
11230 #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_50GB \
11231 UINT32_C(0x400)
11232 /* 100Gb link speed */
11233 #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_100GB \
11234 UINT32_C(0x800)
11235 /* 10Mb link speed (Half-duplex) */
11236 #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_10MBHD \
11237 UINT32_C(0x1000)
11238 /* 10Mb link speed (Full-duplex) */
11239 #define HWRM_PORT_PHY_QCFG_OUTPUT_SUPPORT_SPEEDS_10MB \
11240 UINT32_C(0x2000)
11241 /*
11242 * Current setting of forced link speed.
11243 * When the link speed is not being forced, this
11244 * value shall be set to 0.
11245 */
11246 uint16_t force_link_speed;
11247 /* 100Mb link speed */
11248 #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_100MB UINT32_C(0x1)
11249 /* 1Gb link speed */
11250 #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_1GB UINT32_C(0xa)
11251 /* 2Gb link speed */
11252 #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_2GB UINT32_C(0x14)
11253 /* 25Gb link speed */
11254 #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_2_5GB UINT32_C(0x19)
11255 /* 10Gb link speed */
11256 #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_10GB UINT32_C(0x64)
11257 /* 20Mb link speed */
11258 #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_20GB UINT32_C(0xc8)
11259 /* 25Gb link speed */
11260 #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_25GB UINT32_C(0xfa)
11261 /* 40Gb link speed */
11262 #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_40GB \
11263 UINT32_C(0x190)
11264 /* 50Gb link speed */
11265 #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_50GB \
11266 UINT32_C(0x1f4)
11267 /* 100Gb link speed */
11268 #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_100GB \
11269 UINT32_C(0x3e8)
11270 /* 10Mb link speed */
11271 #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_10MB \
11272 UINT32_C(0xffff)
11273 #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_LAST \
11274 HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_LINK_SPEED_10MB
11275 /* Current setting of auto negotiation mode. */
11276 uint8_t auto_mode;
11277 /* Disable autoneg or autoneg disabled. No speeds are selected. */
11278 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_MODE_NONE UINT32_C(0x0)
11279 /* Select all possible speeds for autoneg mode. */
11280 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_MODE_ALL_SPEEDS UINT32_C(0x1)
11281 /*
11282 * Select only the auto_link_speed speed for autoneg mode. This mode has
11283 * been DEPRECATED. An HWRM client should not use this mode.
11284 */
11285 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_MODE_ONE_SPEED UINT32_C(0x2)
11286 /*
11287 * Select the auto_link_speed or any speed below that speed for autoneg.
11288 * This mode has been DEPRECATED. An HWRM client should not use this mode.
11289 */
11290 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_MODE_ONE_OR_BELOW UINT32_C(0x3)
11291 /*
11292 * Select the speeds based on the corresponding link speed mask value
11293 * that is provided.
11294 */
11295 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_MODE_SPEED_MASK UINT32_C(0x4)
11296 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_MODE_LAST \
11297 HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_MODE_SPEED_MASK
11298 /*
11299 * Current setting of pause autonegotiation.
11300 * Move autoneg_pause flag here.
11301 */
11302 uint8_t auto_pause;
11303 /*
11304 * When this bit is '1', Generation of tx pause messages
11305 * has been requested. Disabled otherwise.
11306 */
11307 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_PAUSE_TX \
11308 UINT32_C(0x1)
11309 /*
11310 * When this bit is '1', Reception of rx pause messages
11311 * has been requested. Disabled otherwise.
11312 */
11313 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_PAUSE_RX \
11314 UINT32_C(0x2)
11315 /*
11316 * When set to 1, the advertisement of pause is enabled.
11317 *
11318 * # When the auto_mode is not set to none and this flag is
11319 * set to 1, then the auto_pause bits on this port are being
11320 * advertised and autoneg pause results are being interpreted.
11321 * # When the auto_mode is not set to none and this
11322 * flag is set to 0, the pause is forced as indicated in
11323 * force_pause, and also advertised as auto_pause bits, but
11324 * the autoneg results are not interpreted since the pause
11325 * configuration is being forced.
11326 * # When the auto_mode is set to none and this flag is set to
11327 * 1, auto_pause bits should be ignored and should be set to 0.
11328 */
11329 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_PAUSE_AUTONEG_PAUSE \
11330 UINT32_C(0x4)
11331 /*
11332 * Current setting for auto_link_speed. This field is only
11333 * valid when auto_mode is set to "one_speed" or "one_or_below".
11334 */
11335 uint16_t auto_link_speed;
11336 /* 100Mb link speed */
11337 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_100MB UINT32_C(0x1)
11338 /* 1Gb link speed */
11339 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_1GB UINT32_C(0xa)
11340 /* 2Gb link speed */
11341 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_2GB UINT32_C(0x14)
11342 /* 25Gb link speed */
11343 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_2_5GB UINT32_C(0x19)
11344 /* 10Gb link speed */
11345 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_10GB UINT32_C(0x64)
11346 /* 20Mb link speed */
11347 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_20GB UINT32_C(0xc8)
11348 /* 25Gb link speed */
11349 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_25GB UINT32_C(0xfa)
11350 /* 40Gb link speed */
11351 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_40GB UINT32_C(0x190)
11352 /* 50Gb link speed */
11353 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_50GB UINT32_C(0x1f4)
11354 /* 100Gb link speed */
11355 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_100GB UINT32_C(0x3e8)
11356 /* 10Mb link speed */
11357 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_10MB \
11358 UINT32_C(0xffff)
11359 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_LAST \
11360 HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_10MB
11361 /*
11362 * Current setting for auto_link_speed_mask that is used to
11363 * advertise speeds during autonegotiation.
11364 * This field is only valid when auto_mode is set to "mask".
11365 * The speeds specified in this field shall be a subset of
11366 * supported speeds on this port.
11367 */
11368 uint16_t auto_link_speed_mask;
11369 /* 100Mb link speed (Half-duplex) */
11370 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_100MBHD \
11371 UINT32_C(0x1)
11372 /* 100Mb link speed (Full-duplex) */
11373 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_100MB \
11374 UINT32_C(0x2)
11375 /* 1Gb link speed (Half-duplex) */
11376 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_1GBHD \
11377 UINT32_C(0x4)
11378 /* 1Gb link speed (Full-duplex) */
11379 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_1GB \
11380 UINT32_C(0x8)
11381 /* 2Gb link speed */
11382 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_2GB \
11383 UINT32_C(0x10)
11384 /* 25Gb link speed */
11385 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_2_5GB \
11386 UINT32_C(0x20)
11387 /* 10Gb link speed */
11388 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_10GB \
11389 UINT32_C(0x40)
11390 /* 20Gb link speed */
11391 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_20GB \
11392 UINT32_C(0x80)
11393 /* 25Gb link speed */
11394 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_25GB \
11395 UINT32_C(0x100)
11396 /* 40Gb link speed */
11397 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_40GB \
11398 UINT32_C(0x200)
11399 /* 50Gb link speed */
11400 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_50GB \
11401 UINT32_C(0x400)
11402 /* 100Gb link speed */
11403 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_100GB \
11404 UINT32_C(0x800)
11405 /* 10Mb link speed (Half-duplex) */
11406 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_10MBHD \
11407 UINT32_C(0x1000)
11408 /* 10Mb link speed (Full-duplex) */
11409 #define HWRM_PORT_PHY_QCFG_OUTPUT_AUTO_LINK_SPEED_MASK_10MB \
11410 UINT32_C(0x2000)
11411 /* Current setting for wirespeed. */
11412 uint8_t wirespeed;
11413 /* Wirespeed feature is disabled. */
11414 #define HWRM_PORT_PHY_QCFG_OUTPUT_WIRESPEED_OFF UINT32_C(0x0)
11415 /* Wirespeed feature is enabled. */
11416 #define HWRM_PORT_PHY_QCFG_OUTPUT_WIRESPEED_ON UINT32_C(0x1)
11417 #define HWRM_PORT_PHY_QCFG_OUTPUT_WIRESPEED_LAST \
11418 HWRM_PORT_PHY_QCFG_OUTPUT_WIRESPEED_ON
11419 /* Current setting for loopback. */
11420 uint8_t lpbk;
11421 /* No loopback is selected. Normal operation. */
11422 #define HWRM_PORT_PHY_QCFG_OUTPUT_LPBK_NONE UINT32_C(0x0)
11423 /*
11424 * The HW will be configured with local loopback such that
11425 * host data is sent back to the host without modification.
11426 */
11427 #define HWRM_PORT_PHY_QCFG_OUTPUT_LPBK_LOCAL UINT32_C(0x1)
11428 /*
11429 * The HW will be configured with remote loopback such that
11430 * port logic will send packets back out the transmitter that
11431 * are received.
11432 */
11433 #define HWRM_PORT_PHY_QCFG_OUTPUT_LPBK_REMOTE UINT32_C(0x2)
11434 /*
11435 * The HW will be configured with external loopback such that
11436 * host data is sent on the trasmitter and based on the external
11437 * loopback connection the data will be received without modification.
11438 */
11439 #define HWRM_PORT_PHY_QCFG_OUTPUT_LPBK_EXTERNAL UINT32_C(0x3)
11440 #define HWRM_PORT_PHY_QCFG_OUTPUT_LPBK_LAST \
11441 HWRM_PORT_PHY_QCFG_OUTPUT_LPBK_EXTERNAL
11442 /*
11443 * Current setting of forced pause.
11444 * When the pause configuration is not being forced, then
11445 * this value shall be set to 0.
11446 */
11447 uint8_t force_pause;
11448 /*
11449 * When this bit is '1', Generation of tx pause messages
11450 * is supported. Disabled otherwise.
11451 */
11452 #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_PAUSE_TX UINT32_C(0x1)
11453 /*
11454 * When this bit is '1', Reception of rx pause messages
11455 * is supported. Disabled otherwise.
11456 */
11457 #define HWRM_PORT_PHY_QCFG_OUTPUT_FORCE_PAUSE_RX UINT32_C(0x2)
11458 /*
11459 * This value indicates the current status of the optics module on
11460 * this port.
11461 */
11462 uint8_t module_status;
11463 /* Module is inserted and accepted */
11464 #define HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_NONE \
11465 UINT32_C(0x0)
11466 /* Module is rejected and transmit side Laser is disabled. */
11467 #define HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_DISABLETX \
11468 UINT32_C(0x1)
11469 /* Module mismatch warning. */
11470 #define HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_WARNINGMSG \
11471 UINT32_C(0x2)
11472 /* Module is rejected and powered down. */
11473 #define HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_PWRDOWN \
11474 UINT32_C(0x3)
11475 /* Module is not inserted. */
11476 #define HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_NOTINSERTED \
11477 UINT32_C(0x4)
11478 /* Module status is not applicable. */
11479 #define HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_NOTAPPLICABLE \
11480 UINT32_C(0xff)
11481 #define HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_LAST \
11482 HWRM_PORT_PHY_QCFG_OUTPUT_MODULE_STATUS_NOTAPPLICABLE
11483 /* Current setting for preemphasis. */
11484 uint32_t preemphasis;
11485 /* This field represents the major version of the PHY. */
11486 uint8_t phy_maj;
11487 /* This field represents the minor version of the PHY. */
11488 uint8_t phy_min;
11489 /* This field represents the build version of the PHY. */
11490 uint8_t phy_bld;
11491 /* This value represents a PHY type. */
11492 uint8_t phy_type;
11493 /* Unknown */
11494 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_UNKNOWN \
11495 UINT32_C(0x0)
11496 /* BASE-CR */
11497 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASECR \
11498 UINT32_C(0x1)
11499 /* BASE-KR4 (Deprecated) */
11500 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKR4 \
11501 UINT32_C(0x2)
11502 /* BASE-LR */
11503 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASELR \
11504 UINT32_C(0x3)
11505 /* BASE-SR */
11506 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASESR \
11507 UINT32_C(0x4)
11508 /* BASE-KR2 (Deprecated) */
11509 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKR2 \
11510 UINT32_C(0x5)
11511 /* BASE-KX */
11512 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKX \
11513 UINT32_C(0x6)
11514 /* BASE-KR */
11515 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASEKR \
11516 UINT32_C(0x7)
11517 /* BASE-T */
11518 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASET \
11519 UINT32_C(0x8)
11520 /* EEE capable BASE-T */
11521 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASETE \
11522 UINT32_C(0x9)
11523 /* SGMII connected external PHY */
11524 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_SGMIIEXTPHY \
11525 UINT32_C(0xa)
11526 /* 25G_BASECR_CA_L */
11527 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_25G_BASECR_CA_L \
11528 UINT32_C(0xb)
11529 /* 25G_BASECR_CA_S */
11530 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_25G_BASECR_CA_S \
11531 UINT32_C(0xc)
11532 /* 25G_BASECR_CA_N */
11533 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_25G_BASECR_CA_N \
11534 UINT32_C(0xd)
11535 /* 25G_BASESR */
11536 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_25G_BASESR \
11537 UINT32_C(0xe)
11538 /* 100G_BASECR4 */
11539 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_100G_BASECR4 \
11540 UINT32_C(0xf)
11541 /* 100G_BASESR4 */
11542 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_100G_BASESR4 \
11543 UINT32_C(0x10)
11544 /* 100G_BASELR4 */
11545 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_100G_BASELR4 \
11546 UINT32_C(0x11)
11547 /* 100G_BASEER4 */
11548 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_100G_BASEER4 \
11549 UINT32_C(0x12)
11550 /* 100G_BASESR10 */
11551 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_100G_BASESR10 \
11552 UINT32_C(0x13)
11553 /* 40G_BASECR4 */
11554 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_40G_BASECR4 \
11555 UINT32_C(0x14)
11556 /* 40G_BASESR4 */
11557 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_40G_BASESR4 \
11558 UINT32_C(0x15)
11559 /* 40G_BASELR4 */
11560 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_40G_BASELR4 \
11561 UINT32_C(0x16)
11562 /* 40G_BASEER4 */
11563 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_40G_BASEER4 \
11564 UINT32_C(0x17)
11565 /* 40G_ACTIVE_CABLE */
11566 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_40G_ACTIVE_CABLE \
11567 UINT32_C(0x18)
11568 /* 1G_baseT */
11569 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_1G_BASET \
11570 UINT32_C(0x19)
11571 /* 1G_baseSX */
11572 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_1G_BASESX \
11573 UINT32_C(0x1a)
11574 /* 1G_baseCX */
11575 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_1G_BASECX \
11576 UINT32_C(0x1b)
11577 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_LAST \
11578 HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_1G_BASECX
11579 /* This value represents a media type. */
11580 uint8_t media_type;
11581 /* Unknown */
11582 #define HWRM_PORT_PHY_QCFG_OUTPUT_MEDIA_TYPE_UNKNOWN UINT32_C(0x0)
11583 /* Twisted Pair */
11584 #define HWRM_PORT_PHY_QCFG_OUTPUT_MEDIA_TYPE_TP UINT32_C(0x1)
11585 /* Direct Attached Copper */
11586 #define HWRM_PORT_PHY_QCFG_OUTPUT_MEDIA_TYPE_DAC UINT32_C(0x2)
11587 /* Fiber */
11588 #define HWRM_PORT_PHY_QCFG_OUTPUT_MEDIA_TYPE_FIBRE UINT32_C(0x3)
11589 #define HWRM_PORT_PHY_QCFG_OUTPUT_MEDIA_TYPE_LAST \
11590 HWRM_PORT_PHY_QCFG_OUTPUT_MEDIA_TYPE_FIBRE
11591 /* This value represents a transceiver type. */
11592 uint8_t xcvr_pkg_type;
11593 /* PHY and MAC are in the same package */
11594 #define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_PKG_TYPE_XCVR_INTERNAL \
11595 UINT32_C(0x1)
11596 /* PHY and MAC are in different packages */
11597 #define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_PKG_TYPE_XCVR_EXTERNAL \
11598 UINT32_C(0x2)
11599 #define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_PKG_TYPE_LAST \
11600 HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_PKG_TYPE_XCVR_EXTERNAL
11601 uint8_t eee_config_phy_addr;
11602 /* This field represents PHY address. */
11603 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_ADDR_MASK \
11604 UINT32_C(0x1f)
11605 #define HWRM_PORT_PHY_QCFG_OUTPUT_PHY_ADDR_SFT 0
11606 /*
11607 * This field represents flags related to EEE configuration.
11608 * These EEE configuration flags are valid only when the
11609 * auto_mode is not set to none (in other words autonegotiation
11610 * is enabled).
11611 */
11612 #define HWRM_PORT_PHY_QCFG_OUTPUT_EEE_CONFIG_MASK \
11613 UINT32_C(0xe0)
11614 #define HWRM_PORT_PHY_QCFG_OUTPUT_EEE_CONFIG_SFT 5
11615 /*
11616 * When set to 1, Energy Efficient Ethernet (EEE) mode is enabled.
11617 * Speeds for autoneg with EEE mode enabled
11618 * are based on eee_link_speed_mask.
11619 */
11620 #define HWRM_PORT_PHY_QCFG_OUTPUT_EEE_CONFIG_EEE_ENABLED \
11621 UINT32_C(0x20)
11622 /*
11623 * This flag is valid only when eee_enabled is set to 1.
11624 *
11625 * # If eee_enabled is set to 0, then EEE mode is disabled
11626 * and this flag shall be ignored.
11627 * # If eee_enabled is set to 1 and this flag is set to 1,
11628 * then Energy Efficient Ethernet (EEE) mode is enabled
11629 * and in use.
11630 * # If eee_enabled is set to 1 and this flag is set to 0,
11631 * then Energy Efficient Ethernet (EEE) mode is enabled
11632 * but is currently not in use.
11633 */
11634 #define HWRM_PORT_PHY_QCFG_OUTPUT_EEE_CONFIG_EEE_ACTIVE \
11635 UINT32_C(0x40)
11636 /*
11637 * This flag is valid only when eee_enabled is set to 1.
11638 *
11639 * # If eee_enabled is set to 0, then EEE mode is disabled
11640 * and this flag shall be ignored.
11641 * # If eee_enabled is set to 1 and this flag is set to 1,
11642 * then Energy Efficient Ethernet (EEE) mode is enabled
11643 * and TX LPI is enabled.
11644 * # If eee_enabled is set to 1 and this flag is set to 0,
11645 * then Energy Efficient Ethernet (EEE) mode is enabled
11646 * but TX LPI is disabled.
11647 */
11648 #define HWRM_PORT_PHY_QCFG_OUTPUT_EEE_CONFIG_EEE_TX_LPI \
11649 UINT32_C(0x80)
11650 /*
11651 * When set to 1, the parallel detection is used to determine
11652 * the speed of the link partner.
11653 *
11654 * Parallel detection is used when a autonegotiation capable
11655 * device is connected to a link parter that is not capable
11656 * of autonegotiation.
11657 */
11658 uint8_t parallel_detect;
11659 /*
11660 * When set to 1, the parallel detection is used to determine
11661 * the speed of the link partner.
11662 *
11663 * Parallel detection is used when a autonegotiation capable
11664 * device is connected to a link parter that is not capable
11665 * of autonegotiation.
11666 */
11667 #define HWRM_PORT_PHY_QCFG_OUTPUT_PARALLEL_DETECT UINT32_C(0x1)
11668 /*
11669 * The advertised speeds for the port by the link partner.
11670 * Each advertised speed will be set to '1'.
11671 */
11672 uint16_t link_partner_adv_speeds;
11673 /* 100Mb link speed (Half-duplex) */
11674 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_100MBHD \
11675 UINT32_C(0x1)
11676 /* 100Mb link speed (Full-duplex) */
11677 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_100MB \
11678 UINT32_C(0x2)
11679 /* 1Gb link speed (Half-duplex) */
11680 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_1GBHD \
11681 UINT32_C(0x4)
11682 /* 1Gb link speed (Full-duplex) */
11683 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_1GB \
11684 UINT32_C(0x8)
11685 /* 2Gb link speed */
11686 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_2GB \
11687 UINT32_C(0x10)
11688 /* 25Gb link speed */
11689 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_2_5GB \
11690 UINT32_C(0x20)
11691 /* 10Gb link speed */
11692 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_10GB \
11693 UINT32_C(0x40)
11694 /* 20Gb link speed */
11695 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_20GB \
11696 UINT32_C(0x80)
11697 /* 25Gb link speed */
11698 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_25GB \
11699 UINT32_C(0x100)
11700 /* 40Gb link speed */
11701 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_40GB \
11702 UINT32_C(0x200)
11703 /* 50Gb link speed */
11704 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_50GB \
11705 UINT32_C(0x400)
11706 /* 100Gb link speed */
11707 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_100GB \
11708 UINT32_C(0x800)
11709 /* 10Mb link speed (Half-duplex) */
11710 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_10MBHD \
11711 UINT32_C(0x1000)
11712 /* 10Mb link speed (Full-duplex) */
11713 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_SPEEDS_10MB \
11714 UINT32_C(0x2000)
11715 /*
11716 * The advertised autoneg for the port by the link partner.
11717 * This field is deprecated and should be set to 0.
11718 */
11719 uint8_t link_partner_adv_auto_mode;
11720 /* Disable autoneg or autoneg disabled. No speeds are selected. */
11721 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_AUTO_MODE_NONE \
11722 UINT32_C(0x0)
11723 /* Select all possible speeds for autoneg mode. */
11724 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_AUTO_MODE_ALL_SPEEDS \
11725 UINT32_C(0x1)
11726 /*
11727 * Select only the auto_link_speed speed for autoneg mode. This mode has
11728 * been DEPRECATED. An HWRM client should not use this mode.
11729 */
11730 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_AUTO_MODE_ONE_SPEED \
11731 UINT32_C(0x2)
11732 /*
11733 * Select the auto_link_speed or any speed below that speed for autoneg.
11734 * This mode has been DEPRECATED. An HWRM client should not use this mode.
11735 */
11736 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_AUTO_MODE_ONE_OR_BELOW \
11737 UINT32_C(0x3)
11738 /*
11739 * Select the speeds based on the corresponding link speed mask value
11740 * that is provided.
11741 */
11742 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_AUTO_MODE_SPEED_MASK \
11743 UINT32_C(0x4)
11744 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_AUTO_MODE_LAST \
11745 HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_AUTO_MODE_SPEED_MASK
11746 /* The advertised pause settings on the port by the link partner. */
11747 uint8_t link_partner_adv_pause;
11748 /*
11749 * When this bit is '1', Generation of tx pause messages
11750 * is supported. Disabled otherwise.
11751 */
11752 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_PAUSE_TX \
11753 UINT32_C(0x1)
11754 /*
11755 * When this bit is '1', Reception of rx pause messages
11756 * is supported. Disabled otherwise.
11757 */
11758 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_PAUSE_RX \
11759 UINT32_C(0x2)
11760 /*
11761 * Current setting for link speed mask that is used to
11762 * advertise speeds during autonegotiation when EEE is enabled.
11763 * This field is valid only when eee_enabled flags is set to 1.
11764 * The speeds specified in this field shall be a subset of
11765 * speeds specified in auto_link_speed_mask.
11766 */
11767 uint16_t adv_eee_link_speed_mask;
11768 /* Reserved */
11769 #define HWRM_PORT_PHY_QCFG_OUTPUT_ADV_EEE_LINK_SPEED_MASK_RSVD1 \
11770 UINT32_C(0x1)
11771 /* 100Mb link speed (Full-duplex) */
11772 #define HWRM_PORT_PHY_QCFG_OUTPUT_ADV_EEE_LINK_SPEED_MASK_100MB \
11773 UINT32_C(0x2)
11774 /* Reserved */
11775 #define HWRM_PORT_PHY_QCFG_OUTPUT_ADV_EEE_LINK_SPEED_MASK_RSVD2 \
11776 UINT32_C(0x4)
11777 /* 1Gb link speed (Full-duplex) */
11778 #define HWRM_PORT_PHY_QCFG_OUTPUT_ADV_EEE_LINK_SPEED_MASK_1GB \
11779 UINT32_C(0x8)
11780 /* Reserved */
11781 #define HWRM_PORT_PHY_QCFG_OUTPUT_ADV_EEE_LINK_SPEED_MASK_RSVD3 \
11782 UINT32_C(0x10)
11783 /* Reserved */
11784 #define HWRM_PORT_PHY_QCFG_OUTPUT_ADV_EEE_LINK_SPEED_MASK_RSVD4 \
11785 UINT32_C(0x20)
11786 /* 10Gb link speed */
11787 #define HWRM_PORT_PHY_QCFG_OUTPUT_ADV_EEE_LINK_SPEED_MASK_10GB \
11788 UINT32_C(0x40)
11789 /*
11790 * Current setting for link speed mask that is advertised by
11791 * the link partner when EEE is enabled.
11792 * This field is valid only when eee_enabled flags is set to 1.
11793 */
11794 uint16_t link_partner_adv_eee_link_speed_mask;
11795 /* Reserved */
11796 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_EEE_LINK_SPEED_MASK_RSVD1 \
11797 UINT32_C(0x1)
11798 /* 100Mb link speed (Full-duplex) */
11799 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_EEE_LINK_SPEED_MASK_100MB \
11800 UINT32_C(0x2)
11801 /* Reserved */
11802 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_EEE_LINK_SPEED_MASK_RSVD2 \
11803 UINT32_C(0x4)
11804 /* 1Gb link speed (Full-duplex) */
11805 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_EEE_LINK_SPEED_MASK_1GB \
11806 UINT32_C(0x8)
11807 /* Reserved */
11808 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_EEE_LINK_SPEED_MASK_RSVD3 \
11809 UINT32_C(0x10)
11810 /* Reserved */
11811 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_EEE_LINK_SPEED_MASK_RSVD4 \
11812 UINT32_C(0x20)
11813 /* 10Gb link speed */
11814 #define HWRM_PORT_PHY_QCFG_OUTPUT_LINK_PARTNER_ADV_EEE_LINK_SPEED_MASK_10GB \
11815 UINT32_C(0x40)
11816 uint32_t xcvr_identifier_type_tx_lpi_timer;
11817 /*
11818 * Current setting of TX LPI timer in microseconds.
11819 * This field is valid only when_eee_enabled flag is set to 1
11820 * and tx_lpi_enabled is set to 1.
11821 */
11822 #define HWRM_PORT_PHY_QCFG_OUTPUT_TX_LPI_TIMER_MASK \
11823 UINT32_C(0xffffff)
11824 #define HWRM_PORT_PHY_QCFG_OUTPUT_TX_LPI_TIMER_SFT 0
11825 /* This value represents transceiver identifier type. */
11826 #define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_MASK \
11827 UINT32_C(0xff000000)
11828 #define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_SFT 24
11829 /* Unknown */
11830 #define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_UNKNOWN \
11831 (UINT32_C(0x0) << 24)
11832 /* SFP/SFP+/SFP28 */
11833 #define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_SFP \
11834 (UINT32_C(0x3) << 24)
11835 /* QSFP+ */
11836 #define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_QSFP \
11837 (UINT32_C(0xc) << 24)
11838 /* QSFP+ */
11839 #define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_QSFPPLUS \
11840 (UINT32_C(0xd) << 24)
11841 /* QSFP28 */
11842 #define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_QSFP28 \
11843 (UINT32_C(0x11) << 24)
11844 #define HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_LAST \
11845 HWRM_PORT_PHY_QCFG_OUTPUT_XCVR_IDENTIFIER_TYPE_QSFP28
11846 /*
11847 * This value represents the current configuration of
11848 * Forward Error Correction (FEC) on the port.
11849 */
11850 uint16_t fec_cfg;
11851 /*
11852 * When set to 1, then FEC is not supported on this port. If this flag
11853 * is set to 1, then all other FEC configuration flags shall be ignored.
11854 * When set to 0, then FEC is supported as indicated by other
11855 * configuration flags.
11856 * If no cable is attached and the HWRM does not yet know the FEC
11857 * capability, then the HWRM shall set this flag to 1 when reporting
11858 * FEC capability.
11859 */
11860 #define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_NONE_SUPPORTED \
11861 UINT32_C(0x1)
11862 /*
11863 * When set to 1, then FEC autonegotiation is supported on this port.
11864 * When set to 0, then FEC autonegotiation is not supported on this port.
11865 */
11866 #define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_AUTONEG_SUPPORTED \
11867 UINT32_C(0x2)
11868 /*
11869 * When set to 1, then FEC autonegotiation is enabled on this port.
11870 * When set to 0, then FEC autonegotiation is disabled if supported.
11871 * This flag should be ignored if FEC autonegotiation is not supported on this port.
11872 */
11873 #define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_AUTONEG_ENABLED \
11874 UINT32_C(0x4)
11875 /*
11876 * When set to 1, then FEC CLAUSE 74 (Fire Code) is supported on this port.
11877 * When set to 0, then FEC CLAUSE 74 (Fire Code) is not supported on this port.
11878 */
11879 #define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_CLAUSE74_SUPPORTED \
11880 UINT32_C(0x8)
11881 /*
11882 * When set to 1, then FEC CLAUSE 74 (Fire Code) is enabled on this port.
11883 * When set to 0, then FEC CLAUSE 74 (Fire Code) is disabled if supported.
11884 * This flag should be ignored if FEC CLAUSE 74 is not supported on this port.
11885 */
11886 #define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_CLAUSE74_ENABLED \
11887 UINT32_C(0x10)
11888 /*
11889 * When set to 1, then FEC CLAUSE 91 (Reed Solomon) is supported on this port.
11890 * When set to 0, then FEC CLAUSE 91 (Reed Solomon) is not supported on this port.
11891 */
11892 #define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_CLAUSE91_SUPPORTED \
11893 UINT32_C(0x20)
11894 /*
11895 * When set to 1, then FEC CLAUSE 91 (Reed Solomon) is enabled on this port.
11896 * When set to 0, then FEC CLAUSE 91 (Reed Solomon) is disabled if supported.
11897 * This flag should be ignored if FEC CLAUSE 91 is not supported on this port.
11898 */
11899 #define HWRM_PORT_PHY_QCFG_OUTPUT_FEC_CFG_FEC_CLAUSE91_ENABLED \
11900 UINT32_C(0x40)
11901 /*
11902 * This value is indicates the duplex of the current
11903 * connection state.
11904 */
11905 uint8_t duplex_state;
11906 /* Half Duplex connection. */
11907 #define HWRM_PORT_PHY_QCFG_OUTPUT_DUPLEX_STATE_HALF UINT32_C(0x0)
11908 /* Full duplex connection. */
11909 #define HWRM_PORT_PHY_QCFG_OUTPUT_DUPLEX_STATE_FULL UINT32_C(0x1)
11910 #define HWRM_PORT_PHY_QCFG_OUTPUT_DUPLEX_STATE_LAST \
11911 HWRM_PORT_PHY_QCFG_OUTPUT_DUPLEX_STATE_FULL
11912 /* Option flags fields. */
11913 uint8_t option_flags;
11914 /* When this bit is '1', Media auto detect is enabled. */
11915 #define HWRM_PORT_PHY_QCFG_OUTPUT_OPTION_FLAGS_MEDIA_AUTO_DETECT \
11916 UINT32_C(0x1)
11917 /*
11918 * Up to 16 bytes of null padded ASCII string representing
11919 * PHY vendor.
11920 * If the string is set to null, then the vendor name is not
11921 * available.
11922 */
11923 char phy_vendor_name[16];
11924 /*
11925 * Up to 16 bytes of null padded ASCII string that
11926 * identifies vendor specific part number of the PHY.
11927 * If the string is set to null, then the vendor specific
11928 * part number is not available.
11929 */
11930 char phy_vendor_partnumber[16];
11931 uint8_t unused_2[7];
11932 /*
11933 * This field is used in Output records to indicate that the output
11934 * is completely written to RAM. This field should be read as '1'
11935 * to indicate that the output has been completely written.
11936 * When writing a command completion or response to an internal processor,
11937 * the order of writes has to be such that this field is written last.
11938 */
11939 uint8_t valid;
11940} __attribute__((packed));
11941
11942/*********************
11943 * hwrm_port_mac_cfg *
11944 *********************/
11945
11946
11947/* hwrm_port_mac_cfg_input (size:320b/40B) */
11948struct hwrm_port_mac_cfg_input {
11949 /* The HWRM command request type. */
11950 uint16_t req_type;
11951 /*
11952 * The completion ring to send the completion event on. This should
11953 * be the NQ ID returned from the `nq_alloc` HWRM command.
11954 */
11955 uint16_t cmpl_ring;
11956 /*
11957 * The sequence ID is used by the driver for tracking multiple
11958 * commands. This ID is treated as opaque data by the firmware and
11959 * the value is returned in the `hwrm_resp_hdr` upon completion.
11960 */
11961 uint16_t seq_id;
11962 /*
11963 * The target ID of the command:
11964 * * 0x0-0xFFF8 - The function ID
11965 * * 0xFFF8-0xFFFE - Reserved for internal processors
11966 * * 0xFFFF - HWRM
11967 */
11968 uint16_t target_id;
11969 /*
11970 * A physical address pointer pointing to a host buffer that the
11971 * command's response data will be written. This can be either a host
11972 * physical address (HPA) or a guest physical address (GPA) and must
11973 * point to a physically contiguous block of memory.
11974 */
11975 uint64_t resp_addr;
11976 /*
11977 * In this field, there are a number of CoS mappings related flags
11978 * that are used to configure CoS mappings and their corresponding
11979 * priorities in the hardware.
11980 * For the priorities of CoS mappings, the HWRM uses the following
11981 * priority order (high to low) by default:
11982 * # vlan pri
11983 * # ip_dscp
11984 * # tunnel_vlan_pri
11985 * # default cos
11986 *
11987 * A subset of CoS mappings can be enabled.
11988 * If a priority is not specified for an enabled CoS mapping, the
11989 * priority will be assigned in the above order for the enabled CoS
11990 * mappings. For example, if vlan_pri and ip_dscp CoS mappings are
11991 * enabled and their priorities are not specified, the following
11992 * priority order (high to low) will be used by the HWRM:
11993 * # vlan_pri
11994 * # ip_dscp
11995 * # default cos
11996 *
11997 * vlan_pri CoS mapping together with default CoS with lower priority
11998 * are enabled by default by the HWRM.
11999 */
12000 uint32_t flags;
12001 /*
12002 * When this bit is '1', this command will configure
12003 * the MAC to match the current link state of the PHY.
12004 * If the link is not established on the PHY, then this
12005 * bit has no effect.
12006 */
12007 #define HWRM_PORT_MAC_CFG_INPUT_FLAGS_MATCH_LINK \
12008 UINT32_C(0x1)
12009 /*
12010 * When this bit is set to '1', the inner VLAN PRI to CoS mapping
12011 * is requested to be enabled.
12012 */
12013 #define HWRM_PORT_MAC_CFG_INPUT_FLAGS_VLAN_PRI2COS_ENABLE \
12014 UINT32_C(0x2)
12015 /*
12016 * When this bit is set to '1', tunnel VLAN PRI field to
12017 * CoS mapping is requested to be enabled.
12018 */
12019 #define HWRM_PORT_MAC_CFG_INPUT_FLAGS_TUNNEL_PRI2COS_ENABLE \
12020 UINT32_C(0x4)
12021 /*
12022 * When this bit is set to '1', the IP DSCP to CoS mapping is
12023 * requested to be enabled.
12024 */
12025 #define HWRM_PORT_MAC_CFG_INPUT_FLAGS_IP_DSCP2COS_ENABLE \
12026 UINT32_C(0x8)
12027 /*
12028 * When this bit is '1', the HWRM is requested to
12029 * enable timestamp capture capability on the receive side
12030 * of this port.
12031 */
12032 #define HWRM_PORT_MAC_CFG_INPUT_FLAGS_PTP_RX_TS_CAPTURE_ENABLE \
12033 UINT32_C(0x10)
12034 /*
12035 * When this bit is '1', the HWRM is requested to
12036 * disable timestamp capture capability on the receive side
12037 * of this port.
12038 */
12039 #define HWRM_PORT_MAC_CFG_INPUT_FLAGS_PTP_RX_TS_CAPTURE_DISABLE \
12040 UINT32_C(0x20)
12041 /*
12042 * When this bit is '1', the HWRM is requested to
12043 * enable timestamp capture capability on the transmit side
12044 * of this port.
12045 */
12046 #define HWRM_PORT_MAC_CFG_INPUT_FLAGS_PTP_TX_TS_CAPTURE_ENABLE \
12047 UINT32_C(0x40)
12048 /*
12049 * When this bit is '1', the HWRM is requested to
12050 * disable timestamp capture capability on the transmit side
12051 * of this port.
12052 */
12053 #define HWRM_PORT_MAC_CFG_INPUT_FLAGS_PTP_TX_TS_CAPTURE_DISABLE \
12054 UINT32_C(0x80)
12055 /*
12056 * When this bit is '1', the Out-Of-Box WoL is requested to
12057 * be enabled on this port.
12058 */
12059 #define HWRM_PORT_MAC_CFG_INPUT_FLAGS_OOB_WOL_ENABLE \
12060 UINT32_C(0x100)
12061 /*
12062 * When this bit is '1', the the Out-Of-Box WoL is requested to
12063 * be disabled on this port.
12064 */
12065 #define HWRM_PORT_MAC_CFG_INPUT_FLAGS_OOB_WOL_DISABLE \
12066 UINT32_C(0x200)
12067 /*
12068 * When this bit is set to '1', the inner VLAN PRI to CoS mapping
12069 * is requested to be disabled.
12070 */
12071 #define HWRM_PORT_MAC_CFG_INPUT_FLAGS_VLAN_PRI2COS_DISABLE \
12072 UINT32_C(0x400)
12073 /*
12074 * When this bit is set to '1', tunnel VLAN PRI field to
12075 * CoS mapping is requested to be disabled.
12076 */
12077 #define HWRM_PORT_MAC_CFG_INPUT_FLAGS_TUNNEL_PRI2COS_DISABLE \
12078 UINT32_C(0x800)
12079 /*
12080 * When this bit is set to '1', the IP DSCP to CoS mapping is
12081 * requested to be disabled.
12082 */
12083 #define HWRM_PORT_MAC_CFG_INPUT_FLAGS_IP_DSCP2COS_DISABLE \
12084 UINT32_C(0x1000)
12085 uint32_t enables;
12086 /*
12087 * This bit must be '1' for the ipg field to be
12088 * configured.
12089 */
12090 #define HWRM_PORT_MAC_CFG_INPUT_ENABLES_IPG \
12091 UINT32_C(0x1)
12092 /*
12093 * This bit must be '1' for the lpbk field to be
12094 * configured.
12095 */
12096 #define HWRM_PORT_MAC_CFG_INPUT_ENABLES_LPBK \
12097 UINT32_C(0x2)
12098 /*
12099 * This bit must be '1' for the vlan_pri2cos_map_pri field to be
12100 * configured.
12101 */
12102 #define HWRM_PORT_MAC_CFG_INPUT_ENABLES_VLAN_PRI2COS_MAP_PRI \
12103 UINT32_C(0x4)
12104 /*
12105 * This bit must be '1' for the tunnel_pri2cos_map_pri field to be
12106 * configured.
12107 */
12108 #define HWRM_PORT_MAC_CFG_INPUT_ENABLES_TUNNEL_PRI2COS_MAP_PRI \
12109 UINT32_C(0x10)
12110 /*
12111 * This bit must be '1' for the dscp2cos_map_pri field to be
12112 * configured.
12113 */
12114 #define HWRM_PORT_MAC_CFG_INPUT_ENABLES_DSCP2COS_MAP_PRI \
12115 UINT32_C(0x20)
12116 /*
12117 * This bit must be '1' for the rx_ts_capture_ptp_msg_type field to be
12118 * configured.
12119 */
12120 #define HWRM_PORT_MAC_CFG_INPUT_ENABLES_RX_TS_CAPTURE_PTP_MSG_TYPE \
12121 UINT32_C(0x40)
12122 /*
12123 * This bit must be '1' for the tx_ts_capture_ptp_msg_type field to be
12124 * configured.
12125 */
12126 #define HWRM_PORT_MAC_CFG_INPUT_ENABLES_TX_TS_CAPTURE_PTP_MSG_TYPE \
12127 UINT32_C(0x80)
12128 /*
12129 * This bit must be '1' for the cos_field_cfg field to be
12130 * configured.
12131 */
12132 #define HWRM_PORT_MAC_CFG_INPUT_ENABLES_COS_FIELD_CFG \
12133 UINT32_C(0x100)
12134 /* Port ID of port that is to be configured. */
12135 uint16_t port_id;
12136 /*
12137 * This value is used to configure the minimum IPG that will
12138 * be sent between packets by this port.
12139 */
12140 uint8_t ipg;
12141 /* This value controls the loopback setting for the MAC. */
12142 uint8_t lpbk;
12143 /* No loopback is selected. Normal operation. */
12144 #define HWRM_PORT_MAC_CFG_INPUT_LPBK_NONE UINT32_C(0x0)
12145 /*
12146 * The HW will be configured with local loopback such that
12147 * host data is sent back to the host without modification.
12148 */
12149 #define HWRM_PORT_MAC_CFG_INPUT_LPBK_LOCAL UINT32_C(0x1)
12150 /*
12151 * The HW will be configured with remote loopback such that
12152 * port logic will send packets back out the transmitter that
12153 * are received.
12154 */
12155 #define HWRM_PORT_MAC_CFG_INPUT_LPBK_REMOTE UINT32_C(0x2)
12156 #define HWRM_PORT_MAC_CFG_INPUT_LPBK_LAST \
12157 HWRM_PORT_MAC_CFG_INPUT_LPBK_REMOTE
12158 /*
12159 * This value controls the priority setting of VLAN PRI to CoS
12160 * mapping based on VLAN Tags of inner packet headers of
12161 * tunneled packets or packet headers of non-tunneled packets.
12162 *
12163 * # Each XXX_pri variable shall have a unique priority value
12164 * when it is being specified.
12165 * # When comparing priorities of mappings, higher value
12166 * indicates higher priority.
12167 * For example, a value of 0-3 is returned where 0 is being
12168 * the lowest priority and 3 is being the highest priority.
12169 */
12170 uint8_t vlan_pri2cos_map_pri;
12171 /* Reserved field. */
12172 uint8_t reserved1;
12173 /*
12174 * This value controls the priority setting of VLAN PRI to CoS
12175 * mapping based on VLAN Tags of tunneled header.
12176 * This mapping only applies when tunneled headers
12177 * are present.
12178 *
12179 * # Each XXX_pri variable shall have a unique priority value
12180 * when it is being specified.
12181 * # When comparing priorities of mappings, higher value
12182 * indicates higher priority.
12183 * For example, a value of 0-3 is returned where 0 is being
12184 * the lowest priority and 3 is being the highest priority.
12185 */
12186 uint8_t tunnel_pri2cos_map_pri;
12187 /*
12188 * This value controls the priority setting of IP DSCP to CoS
12189 * mapping based on inner IP header of tunneled packets or
12190 * IP header of non-tunneled packets.
12191 *
12192 * # Each XXX_pri variable shall have a unique priority value
12193 * when it is being specified.
12194 * # When comparing priorities of mappings, higher value
12195 * indicates higher priority.
12196 * For example, a value of 0-3 is returned where 0 is being
12197 * the lowest priority and 3 is being the highest priority.
12198 */
12199 uint8_t dscp2pri_map_pri;
12200 /*
12201 * This is a 16-bit bit mask that is used to request a
12202 * specific configuration of time stamp capture of PTP messages
12203 * on the receive side of this port.
12204 * This field shall be ignored if the ptp_rx_ts_capture_enable
12205 * flag is not set in this command.
12206 * Otherwise, if bit 'i' is set, then the HWRM is being
12207 * requested to configure the receive side of the port to
12208 * capture the time stamp of every received PTP message
12209 * with messageType field value set to i.
12210 */
12211 uint16_t rx_ts_capture_ptp_msg_type;
12212 /*
12213 * This is a 16-bit bit mask that is used to request a
12214 * specific configuration of time stamp capture of PTP messages
12215 * on the transmit side of this port.
12216 * This field shall be ignored if the ptp_tx_ts_capture_enable
12217 * flag is not set in this command.
12218 * Otherwise, if bit 'i' is set, then the HWRM is being
12219 * requested to configure the transmit sied of the port to
12220 * capture the time stamp of every transmitted PTP message
12221 * with messageType field value set to i.
12222 */
12223 uint16_t tx_ts_capture_ptp_msg_type;
12224 /* Configuration of CoS fields. */
12225 uint8_t cos_field_cfg;
12226 /* Reserved */
12227 #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_RSVD1 \
12228 UINT32_C(0x1)
12229 /*
12230 * This field is used to specify selection of VLAN PRI value
12231 * based on whether one or two VLAN Tags are present in
12232 * the inner packet headers of tunneled packets or
12233 * non-tunneled packets.
12234 * This field is valid only if inner VLAN PRI to CoS mapping
12235 * is enabled.
12236 * If VLAN PRI to CoS mapping is not enabled, then this
12237 * field shall be ignored.
12238 */
12239 #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_VLAN_PRI_SEL_MASK \
12240 UINT32_C(0x6)
12241 #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_VLAN_PRI_SEL_SFT \
12242 1
12243 /*
12244 * Select inner VLAN PRI when 1 or 2 VLAN Tags are
12245 * present in the inner packet headers
12246 */
12247 #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_VLAN_PRI_SEL_INNERMOST \
12248 (UINT32_C(0x0) << 1)
12249 /*
12250 * Select outer VLAN Tag PRI when 2 VLAN Tags are
12251 * present in the inner packet headers.
12252 * No VLAN PRI shall be selected for this configuration
12253 * if only one VLAN Tag is present in the inner
12254 * packet headers.
12255 */
12256 #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_VLAN_PRI_SEL_OUTER \
12257 (UINT32_C(0x1) << 1)
12258 /*
12259 * Select outermost VLAN PRI when 1 or 2 VLAN Tags
12260 * are present in the inner packet headers
12261 */
12262 #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_VLAN_PRI_SEL_OUTERMOST \
12263 (UINT32_C(0x2) << 1)
12264 /* Unspecified */
12265 #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_VLAN_PRI_SEL_UNSPECIFIED \
12266 (UINT32_C(0x3) << 1)
12267 #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_VLAN_PRI_SEL_LAST \
12268 HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_VLAN_PRI_SEL_UNSPECIFIED
12269 /*
12270 * This field is used to specify selection of tunnel VLAN
12271 * PRI value based on whether one or two VLAN Tags are
12272 * present in tunnel headers.
12273 * This field is valid only if tunnel VLAN PRI to CoS mapping
12274 * is enabled.
12275 * If tunnel VLAN PRI to CoS mapping is not enabled, then this
12276 * field shall be ignored.
12277 */
12278 #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_MASK \
12279 UINT32_C(0x18)
12280 #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_SFT \
12281 3
12282 /*
12283 * Select inner VLAN PRI when 1 or 2 VLAN Tags are
12284 * present in the tunnel packet headers
12285 */
12286 #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_INNERMOST \
12287 (UINT32_C(0x0) << 3)
12288 /*
12289 * Select outer VLAN Tag PRI when 2 VLAN Tags are
12290 * present in the tunnel packet headers.
12291 * No tunnel VLAN PRI shall be selected for this
12292 * configuration if only one VLAN Tag is present in
12293 * the tunnel packet headers.
12294 */
12295 #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_OUTER \
12296 (UINT32_C(0x1) << 3)
12297 /*
12298 * Select outermost VLAN PRI when 1 or 2 VLAN Tags
12299 * are present in the tunnel packet headers
12300 */
12301 #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_OUTERMOST \
12302 (UINT32_C(0x2) << 3)
12303 /* Unspecified */
12304 #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_UNSPECIFIED \
12305 (UINT32_C(0x3) << 3)
12306 #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_LAST \
12307 HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_UNSPECIFIED
12308 /*
12309 * This field shall be used to provide default CoS value
12310 * that has been configured on this port.
12311 * This field is valid only if default CoS mapping
12312 * is enabled.
12313 * If default CoS mapping is not enabled, then this
12314 * field shall be ignored.
12315 */
12316 #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_DEFAULT_COS_MASK \
12317 UINT32_C(0xe0)
12318 #define HWRM_PORT_MAC_CFG_INPUT_COS_FIELD_CFG_DEFAULT_COS_SFT \
12319 5
12320 uint8_t unused_0[3];
12321} __attribute__((packed));
12322
12323/* hwrm_port_mac_cfg_output (size:128b/16B) */
12324struct hwrm_port_mac_cfg_output {
12325 /* The specific error status for the command. */
12326 uint16_t error_code;
12327 /* The HWRM command request type. */
12328 uint16_t req_type;
12329 /* The sequence ID from the original command. */
12330 uint16_t seq_id;
12331 /* The length of the response data in number of bytes. */
12332 uint16_t resp_len;
12333 /*
12334 * This is the configured maximum length of Ethernet packet
12335 * payload that is allowed to be received on the port.
12336 * This value does not include the number of bytes used by
12337 * Ethernet header and trailer (CRC).
12338 */
12339 uint16_t mru;
12340 /*
12341 * This is the configured maximum length of Ethernet packet
12342 * payload that is allowed to be transmitted on the port.
12343 * This value does not include the number of bytes used by
12344 * Ethernet header and trailer (CRC).
12345 */
12346 uint16_t mtu;
12347 /* Current configuration of the IPG value. */
12348 uint8_t ipg;
12349 /* Current value of the loopback value. */
12350 uint8_t lpbk;
12351 /* No loopback is selected. Normal operation. */
12352 #define HWRM_PORT_MAC_CFG_OUTPUT_LPBK_NONE UINT32_C(0x0)
12353 /*
12354 * The HW will be configured with local loopback such that
12355 * host data is sent back to the host without modification.
12356 */
12357 #define HWRM_PORT_MAC_CFG_OUTPUT_LPBK_LOCAL UINT32_C(0x1)
12358 /*
12359 * The HW will be configured with remote loopback such that
12360 * port logic will send packets back out the transmitter that
12361 * are received.
12362 */
12363 #define HWRM_PORT_MAC_CFG_OUTPUT_LPBK_REMOTE UINT32_C(0x2)
12364 #define HWRM_PORT_MAC_CFG_OUTPUT_LPBK_LAST \
12365 HWRM_PORT_MAC_CFG_OUTPUT_LPBK_REMOTE
12366 uint8_t unused_0;
12367 /*
12368 * This field is used in Output records to indicate that the output
12369 * is completely written to RAM. This field should be read as '1'
12370 * to indicate that the output has been completely written.
12371 * When writing a command completion or response to an internal processor,
12372 * the order of writes has to be such that this field is written last.
12373 */
12374 uint8_t valid;
12375} __attribute__((packed));
12376
12377/**********************
12378 * hwrm_port_mac_qcfg *
12379 **********************/
12380
12381
12382/* hwrm_port_mac_qcfg_input (size:192b/24B) */
12383struct hwrm_port_mac_qcfg_input {
12384 /* The HWRM command request type. */
12385 uint16_t req_type;
12386 /*
12387 * The completion ring to send the completion event on. This should
12388 * be the NQ ID returned from the `nq_alloc` HWRM command.
12389 */
12390 uint16_t cmpl_ring;
12391 /*
12392 * The sequence ID is used by the driver for tracking multiple
12393 * commands. This ID is treated as opaque data by the firmware and
12394 * the value is returned in the `hwrm_resp_hdr` upon completion.
12395 */
12396 uint16_t seq_id;
12397 /*
12398 * The target ID of the command:
12399 * * 0x0-0xFFF8 - The function ID
12400 * * 0xFFF8-0xFFFE - Reserved for internal processors
12401 * * 0xFFFF - HWRM
12402 */
12403 uint16_t target_id;
12404 /*
12405 * A physical address pointer pointing to a host buffer that the
12406 * command's response data will be written. This can be either a host
12407 * physical address (HPA) or a guest physical address (GPA) and must
12408 * point to a physically contiguous block of memory.
12409 */
12410 uint64_t resp_addr;
12411 /* Port ID of port that is to be configured. */
12412 uint16_t port_id;
12413 uint8_t unused_0[6];
12414} __attribute__((packed));
12415
12416/* hwrm_port_mac_qcfg_output (size:192b/24B) */
12417struct hwrm_port_mac_qcfg_output {
12418 /* The specific error status for the command. */
12419 uint16_t error_code;
12420 /* The HWRM command request type. */
12421 uint16_t req_type;
12422 /* The sequence ID from the original command. */
12423 uint16_t seq_id;
12424 /* The length of the response data in number of bytes. */
12425 uint16_t resp_len;
12426 /*
12427 * This is the configured maximum length of Ethernet packet
12428 * payload that is allowed to be received on the port.
12429 * This value does not include the number of bytes used by the
12430 * Ethernet header and trailer (CRC).
12431 */
12432 uint16_t mru;
12433 /*
12434 * This is the configured maximum length of Ethernet packet
12435 * payload that is allowed to be transmitted on the port.
12436 * This value does not include the number of bytes used by the
12437 * Ethernet header and trailer (CRC).
12438 */
12439 uint16_t mtu;
12440 /*
12441 * The minimum IPG that will
12442 * be sent between packets by this port.
12443 */
12444 uint8_t ipg;
12445 /* The loopback setting for the MAC. */
12446 uint8_t lpbk;
12447 /* No loopback is selected. Normal operation. */
12448 #define HWRM_PORT_MAC_QCFG_OUTPUT_LPBK_NONE UINT32_C(0x0)
12449 /*
12450 * The HW will be configured with local loopback such that
12451 * host data is sent back to the host without modification.
12452 */
12453 #define HWRM_PORT_MAC_QCFG_OUTPUT_LPBK_LOCAL UINT32_C(0x1)
12454 /*
12455 * The HW will be configured with remote loopback such that
12456 * port logic will send packets back out the transmitter that
12457 * are received.
12458 */
12459 #define HWRM_PORT_MAC_QCFG_OUTPUT_LPBK_REMOTE UINT32_C(0x2)
12460 #define HWRM_PORT_MAC_QCFG_OUTPUT_LPBK_LAST \
12461 HWRM_PORT_MAC_QCFG_OUTPUT_LPBK_REMOTE
12462 /*
12463 * Priority setting for VLAN PRI to CoS mapping.
12464 * # Each XXX_pri variable shall have a unique priority value
12465 * when it is being used.
12466 * # When comparing priorities of mappings, higher value
12467 * indicates higher priority.
12468 * For example, a value of 0-3 is returned where 0 is being
12469 * the lowest priority and 3 is being the highest priority.
12470 * # If the correspoding CoS mapping is not enabled, then this
12471 * field should be ignored.
12472 * # This value indicates the normalized priority value retained
12473 * in the HWRM.
12474 */
12475 uint8_t vlan_pri2cos_map_pri;
12476 /*
12477 * In this field, a number of CoS mappings related flags
12478 * are used to indicate configured CoS mappings.
12479 */
12480 uint8_t flags;
12481 /*
12482 * When this bit is set to '1', the inner VLAN PRI to CoS mapping
12483 * is enabled.
12484 */
12485 #define HWRM_PORT_MAC_QCFG_OUTPUT_FLAGS_VLAN_PRI2COS_ENABLE \
12486 UINT32_C(0x1)
12487 /*
12488 * When this bit is set to '1', tunnel VLAN PRI field to
12489 * CoS mapping is enabled.
12490 */
12491 #define HWRM_PORT_MAC_QCFG_OUTPUT_FLAGS_TUNNEL_PRI2COS_ENABLE \
12492 UINT32_C(0x2)
12493 /*
12494 * When this bit is set to '1', the IP DSCP to CoS mapping is
12495 * enabled.
12496 */
12497 #define HWRM_PORT_MAC_QCFG_OUTPUT_FLAGS_IP_DSCP2COS_ENABLE \
12498 UINT32_C(0x4)
12499 /*
12500 * When this bit is '1', the Out-Of-Box WoL is enabled on this
12501 * port.
12502 */
12503 #define HWRM_PORT_MAC_QCFG_OUTPUT_FLAGS_OOB_WOL_ENABLE \
12504 UINT32_C(0x8)
12505 /* When this bit is '1', PTP is enabled for RX on this port. */
12506 #define HWRM_PORT_MAC_QCFG_OUTPUT_FLAGS_PTP_RX_TS_CAPTURE_ENABLE \
12507 UINT32_C(0x10)
12508 /* When this bit is '1', PTP is enabled for TX on this port. */
12509 #define HWRM_PORT_MAC_QCFG_OUTPUT_FLAGS_PTP_TX_TS_CAPTURE_ENABLE \
12510 UINT32_C(0x20)
12511 /*
12512 * Priority setting for tunnel VLAN PRI to CoS mapping.
12513 * # Each XXX_pri variable shall have a unique priority value
12514 * when it is being used.
12515 * # When comparing priorities of mappings, higher value
12516 * indicates higher priority.
12517 * For example, a value of 0-3 is returned where 0 is being
12518 * the lowest priority and 3 is being the highest priority.
12519 * # If the correspoding CoS mapping is not enabled, then this
12520 * field should be ignored.
12521 * # This value indicates the normalized priority value retained
12522 * in the HWRM.
12523 */
12524 uint8_t tunnel_pri2cos_map_pri;
12525 /*
12526 * Priority setting for DSCP to PRI mapping.
12527 * # Each XXX_pri variable shall have a unique priority value
12528 * when it is being used.
12529 * # When comparing priorities of mappings, higher value
12530 * indicates higher priority.
12531 * For example, a value of 0-3 is returned where 0 is being
12532 * the lowest priority and 3 is being the highest priority.
12533 * # If the correspoding CoS mapping is not enabled, then this
12534 * field should be ignored.
12535 * # This value indicates the normalized priority value retained
12536 * in the HWRM.
12537 */
12538 uint8_t dscp2pri_map_pri;
12539 /*
12540 * This is a 16-bit bit mask that represents the
12541 * current configuration of time stamp capture of PTP messages
12542 * on the receive side of this port.
12543 * If bit 'i' is set, then the receive side of the port
12544 * is configured to capture the time stamp of every
12545 * received PTP message with messageType field value set
12546 * to i.
12547 * If all bits are set to 0 (i.e. field value set 0),
12548 * then the receive side of the port is not configured
12549 * to capture timestamp for PTP messages.
12550 * If all bits are set to 1, then the receive side of the
12551 * port is configured to capture timestamp for all PTP
12552 * messages.
12553 */
12554 uint16_t rx_ts_capture_ptp_msg_type;
12555 /*
12556 * This is a 16-bit bit mask that represents the
12557 * current configuration of time stamp capture of PTP messages
12558 * on the transmit side of this port.
12559 * If bit 'i' is set, then the transmit side of the port
12560 * is configured to capture the time stamp of every
12561 * received PTP message with messageType field value set
12562 * to i.
12563 * If all bits are set to 0 (i.e. field value set 0),
12564 * then the transmit side of the port is not configured
12565 * to capture timestamp for PTP messages.
12566 * If all bits are set to 1, then the transmit side of the
12567 * port is configured to capture timestamp for all PTP
12568 * messages.
12569 */
12570 uint16_t tx_ts_capture_ptp_msg_type;
12571 /* Configuration of CoS fields. */
12572 uint8_t cos_field_cfg;
12573 /* Reserved */
12574 #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_RSVD \
12575 UINT32_C(0x1)
12576 /*
12577 * This field is used for selecting VLAN PRI value
12578 * based on whether one or two VLAN Tags are present in
12579 * the inner packet headers of tunneled packets or
12580 * non-tunneled packets.
12581 */
12582 #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_VLAN_PRI_SEL_MASK \
12583 UINT32_C(0x6)
12584 #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_VLAN_PRI_SEL_SFT \
12585 1
12586 /*
12587 * Select inner VLAN PRI when 1 or 2 VLAN Tags are
12588 * present in the inner packet headers
12589 */
12590 #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_VLAN_PRI_SEL_INNERMOST \
12591 (UINT32_C(0x0) << 1)
12592 /*
12593 * Select outer VLAN Tag PRI when 2 VLAN Tags are
12594 * present in the inner packet headers.
12595 * No VLAN PRI is selected for this configuration
12596 * if only one VLAN Tag is present in the inner
12597 * packet headers.
12598 */
12599 #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_VLAN_PRI_SEL_OUTER \
12600 (UINT32_C(0x1) << 1)
12601 /*
12602 * Select outermost VLAN PRI when 1 or 2 VLAN Tags
12603 * are present in the inner packet headers
12604 */
12605 #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_VLAN_PRI_SEL_OUTERMOST \
12606 (UINT32_C(0x2) << 1)
12607 /* Unspecified */
12608 #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_VLAN_PRI_SEL_UNSPECIFIED \
12609 (UINT32_C(0x3) << 1)
12610 #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_VLAN_PRI_SEL_LAST \
12611 HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_VLAN_PRI_SEL_UNSPECIFIED
12612 /*
12613 * This field is used for selecting tunnel VLAN PRI value
12614 * based on whether one or two VLAN Tags are present in
12615 * the tunnel headers of tunneled packets. This selection
12616 * does not apply to non-tunneled packets.
12617 */
12618 #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_MASK \
12619 UINT32_C(0x18)
12620 #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_SFT \
12621 3
12622 /*
12623 * Select inner VLAN PRI when 1 or 2 VLAN Tags are
12624 * present in the tunnel packet headers
12625 */
12626 #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_INNERMOST \
12627 (UINT32_C(0x0) << 3)
12628 /*
12629 * Select outer VLAN Tag PRI when 2 VLAN Tags are
12630 * present in the tunnel packet headers.
12631 * No VLAN PRI is selected for this configuration
12632 * if only one VLAN Tag is present in the tunnel
12633 * packet headers.
12634 */
12635 #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_OUTER \
12636 (UINT32_C(0x1) << 3)
12637 /*
12638 * Select outermost VLAN PRI when 1 or 2 VLAN Tags
12639 * are present in the tunnel packet headers
12640 */
12641 #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_OUTERMOST \
12642 (UINT32_C(0x2) << 3)
12643 /* Unspecified */
12644 #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_UNSPECIFIED \
12645 (UINT32_C(0x3) << 3)
12646 #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_LAST \
12647 HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_T_VLAN_PRI_SEL_UNSPECIFIED
12648 /*
12649 * This field is used to provide default CoS value that
12650 * has been configured on this port.
12651 */
12652 #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_DEFAULT_COS_MASK \
12653 UINT32_C(0xe0)
12654 #define HWRM_PORT_MAC_QCFG_OUTPUT_COS_FIELD_CFG_DEFAULT_COS_SFT \
12655 5
12656 /*
12657 * This field is used in Output records to indicate that the output
12658 * is completely written to RAM. This field should be read as '1'
12659 * to indicate that the output has been completely written.
12660 * When writing a command completion or response to an internal processor,
12661 * the order of writes has to be such that this field is written last.
12662 */
12663 uint8_t valid;
12664} __attribute__((packed));
12665
12666/**************************
12667 * hwrm_port_mac_ptp_qcfg *
12668 **************************/
12669
12670
12671/* hwrm_port_mac_ptp_qcfg_input (size:192b/24B) */
12672struct hwrm_port_mac_ptp_qcfg_input {
12673 /* The HWRM command request type. */
12674 uint16_t req_type;
12675 /*
12676 * The completion ring to send the completion event on. This should
12677 * be the NQ ID returned from the `nq_alloc` HWRM command.
12678 */
12679 uint16_t cmpl_ring;
12680 /*
12681 * The sequence ID is used by the driver for tracking multiple
12682 * commands. This ID is treated as opaque data by the firmware and
12683 * the value is returned in the `hwrm_resp_hdr` upon completion.
12684 */
12685 uint16_t seq_id;
12686 /*
12687 * The target ID of the command:
12688 * * 0x0-0xFFF8 - The function ID
12689 * * 0xFFF8-0xFFFE - Reserved for internal processors
12690 * * 0xFFFF - HWRM
12691 */
12692 uint16_t target_id;
12693 /*
12694 * A physical address pointer pointing to a host buffer that the
12695 * command's response data will be written. This can be either a host
12696 * physical address (HPA) or a guest physical address (GPA) and must
12697 * point to a physically contiguous block of memory.
12698 */
12699 uint64_t resp_addr;
12700 /* Port ID of port that is being queried. */
12701 uint16_t port_id;
12702 uint8_t unused_0[6];
12703} __attribute__((packed));
12704
12705/* hwrm_port_mac_ptp_qcfg_output (size:640b/80B) */
12706struct hwrm_port_mac_ptp_qcfg_output {
12707 /* The specific error status for the command. */
12708 uint16_t error_code;
12709 /* The HWRM command request type. */
12710 uint16_t req_type;
12711 /* The sequence ID from the original command. */
12712 uint16_t seq_id;
12713 /* The length of the response data in number of bytes. */
12714 uint16_t resp_len;
12715 /*
12716 * In this field, a number of PTP related flags
12717 * are used to indicate configured PTP capabilities.
12718 */
12719 uint8_t flags;
12720 /*
12721 * When this bit is set to '1', the PTP related registers are
12722 * directly accessible by the host.
12723 */
12724 #define HWRM_PORT_MAC_PTP_QCFG_OUTPUT_FLAGS_DIRECT_ACCESS \
12725 UINT32_C(0x1)
12726 /*
12727 * When this bit is set to '1', the PTP information is accessible
12728 * via HWRM commands.
12729 */
12730 #define HWRM_PORT_MAC_PTP_QCFG_OUTPUT_FLAGS_HWRM_ACCESS \
12731 UINT32_C(0x2)
12732 uint8_t unused_0[3];
12733 /* Offset of the PTP register for the lower 32 bits of timestamp for RX. */
12734 uint32_t rx_ts_reg_off_lower;
12735 /* Offset of the PTP register for the upper 32 bits of timestamp for RX. */
12736 uint32_t rx_ts_reg_off_upper;
12737 /* Offset of the PTP register for the sequence ID for RX. */
12738 uint32_t rx_ts_reg_off_seq_id;
12739 /* Offset of the first PTP source ID for RX. */
12740 uint32_t rx_ts_reg_off_src_id_0;
12741 /* Offset of the second PTP source ID for RX. */
12742 uint32_t rx_ts_reg_off_src_id_1;
12743 /* Offset of the third PTP source ID for RX. */
12744 uint32_t rx_ts_reg_off_src_id_2;
12745 /* Offset of the domain ID for RX. */
12746 uint32_t rx_ts_reg_off_domain_id;
12747 /* Offset of the PTP FIFO register for RX. */
12748 uint32_t rx_ts_reg_off_fifo;
12749 /* Offset of the PTP advance FIFO register for RX. */
12750 uint32_t rx_ts_reg_off_fifo_adv;
12751 /* PTP timestamp granularity for RX. */
12752 uint32_t rx_ts_reg_off_granularity;
12753 /* Offset of the PTP register for the lower 32 bits of timestamp for TX. */
12754 uint32_t tx_ts_reg_off_lower;
12755 /* Offset of the PTP register for the upper 32 bits of timestamp for TX. */
12756 uint32_t tx_ts_reg_off_upper;
12757 /* Offset of the PTP register for the sequence ID for TX. */
12758 uint32_t tx_ts_reg_off_seq_id;
12759 /* Offset of the PTP FIFO register for TX. */
12760 uint32_t tx_ts_reg_off_fifo;
12761 /* PTP timestamp granularity for TX. */
12762 uint32_t tx_ts_reg_off_granularity;
12763 uint8_t unused_1[7];
12764 /*
12765 * This field is used in Output records to indicate that the output
12766 * is completely written to RAM. This field should be read as '1'
12767 * to indicate that the output has been completely written.
12768 * When writing a command completion or response to an internal processor,
12769 * the order of writes has to be such that this field is written last.
12770 */
12771 uint8_t valid;
12772} __attribute__((packed));
12773
12774/* Port Tx Statistics Formats */
12775/* tx_port_stats (size:3264b/408B) */
12776struct tx_port_stats {
12777 /* Total Number of 64 Bytes frames transmitted */
12778 uint64_t tx_64b_frames;
12779 /* Total Number of 65-127 Bytes frames transmitted */
12780 uint64_t tx_65b_127b_frames;
12781 /* Total Number of 128-255 Bytes frames transmitted */
12782 uint64_t tx_128b_255b_frames;
12783 /* Total Number of 256-511 Bytes frames transmitted */
12784 uint64_t tx_256b_511b_frames;
12785 /* Total Number of 512-1023 Bytes frames transmitted */
12786 uint64_t tx_512b_1023b_frames;
12787 /* Total Number of 1024-1518 Bytes frames transmitted */
12788 uint64_t tx_1024b_1518b_frames;
12789 /*
12790 * Total Number of each good VLAN (exludes FCS errors)
12791 * frame transmitted which is 1519 to 1522 bytes in length
12792 * inclusive (excluding framing bits but including FCS bytes).
12793 */
12794 uint64_t tx_good_vlan_frames;
12795 /* Total Number of 1519-2047 Bytes frames transmitted */
12796 uint64_t tx_1519b_2047b_frames;
12797 /* Total Number of 2048-4095 Bytes frames transmitted */
12798 uint64_t tx_2048b_4095b_frames;
12799 /* Total Number of 4096-9216 Bytes frames transmitted */
12800 uint64_t tx_4096b_9216b_frames;
12801 /* Total Number of 9217-16383 Bytes frames transmitted */
12802 uint64_t tx_9217b_16383b_frames;
12803 /* Total Number of good frames transmitted */
12804 uint64_t tx_good_frames;
12805 /* Total Number of frames transmitted */
12806 uint64_t tx_total_frames;
12807 /* Total number of unicast frames transmitted */
12808 uint64_t tx_ucast_frames;
12809 /* Total number of multicast frames transmitted */
12810 uint64_t tx_mcast_frames;
12811 /* Total number of broadcast frames transmitted */
12812 uint64_t tx_bcast_frames;
12813 /* Total number of PAUSE control frames transmitted */
12814 uint64_t tx_pause_frames;
12815 /*
12816 * Total number of PFC/per-priority PAUSE
12817 * control frames transmitted
12818 */
12819 uint64_t tx_pfc_frames;
12820 /* Total number of jabber frames transmitted */
12821 uint64_t tx_jabber_frames;
12822 /* Total number of frames transmitted with FCS error */
12823 uint64_t tx_fcs_err_frames;
12824 /* Total number of control frames transmitted */
12825 uint64_t tx_control_frames;
12826 /* Total number of over-sized frames transmitted */
12827 uint64_t tx_oversz_frames;
12828 /* Total number of frames with single deferral */
12829 uint64_t tx_single_dfrl_frames;
12830 /* Total number of frames with multiple deferrals */
12831 uint64_t tx_multi_dfrl_frames;
12832 /* Total number of frames with single collision */
12833 uint64_t tx_single_coll_frames;
12834 /* Total number of frames with multiple collisions */
12835 uint64_t tx_multi_coll_frames;
12836 /* Total number of frames with late collisions */
12837 uint64_t tx_late_coll_frames;
12838 /* Total number of frames with excessive collisions */
12839 uint64_t tx_excessive_coll_frames;
12840 /* Total number of fragmented frames transmitted */
12841 uint64_t tx_frag_frames;
12842 /* Total number of transmit errors */
12843 uint64_t tx_err;
12844 /* Total number of single VLAN tagged frames transmitted */
12845 uint64_t tx_tagged_frames;
12846 /* Total number of double VLAN tagged frames transmitted */
12847 uint64_t tx_dbl_tagged_frames;
12848 /* Total number of runt frames transmitted */
12849 uint64_t tx_runt_frames;
12850 /* Total number of TX FIFO under runs */
12851 uint64_t tx_fifo_underruns;
12852 /*
12853 * Total number of PFC frames with PFC enabled bit for
12854 * Pri 0 transmitted
12855 */
12856 uint64_t tx_pfc_ena_frames_pri0;
12857 /*
12858 * Total number of PFC frames with PFC enabled bit for
12859 * Pri 1 transmitted
12860 */
12861 uint64_t tx_pfc_ena_frames_pri1;
12862 /*
12863 * Total number of PFC frames with PFC enabled bit for
12864 * Pri 2 transmitted
12865 */
12866 uint64_t tx_pfc_ena_frames_pri2;
12867 /*
12868 * Total number of PFC frames with PFC enabled bit for
12869 * Pri 3 transmitted
12870 */
12871 uint64_t tx_pfc_ena_frames_pri3;
12872 /*
12873 * Total number of PFC frames with PFC enabled bit for
12874 * Pri 4 transmitted
12875 */
12876 uint64_t tx_pfc_ena_frames_pri4;
12877 /*
12878 * Total number of PFC frames with PFC enabled bit for
12879 * Pri 5 transmitted
12880 */
12881 uint64_t tx_pfc_ena_frames_pri5;
12882 /*
12883 * Total number of PFC frames with PFC enabled bit for
12884 * Pri 6 transmitted
12885 */
12886 uint64_t tx_pfc_ena_frames_pri6;
12887 /*
12888 * Total number of PFC frames with PFC enabled bit for
12889 * Pri 7 transmitted
12890 */
12891 uint64_t tx_pfc_ena_frames_pri7;
12892 /* Total number of EEE LPI Events on TX */
12893 uint64_t tx_eee_lpi_events;
12894 /* EEE LPI Duration Counter on TX */
12895 uint64_t tx_eee_lpi_duration;
12896 /*
12897 * Total number of Link Level Flow Control (LLFC) messages
12898 * transmitted
12899 */
12900 uint64_t tx_llfc_logical_msgs;
12901 /* Total number of HCFC messages transmitted */
12902 uint64_t tx_hcfc_msgs;
12903 /* Total number of TX collisions */
12904 uint64_t tx_total_collisions;
12905 /* Total number of transmitted bytes */
12906 uint64_t tx_bytes;
12907 /* Total number of end-to-end HOL frames */
12908 uint64_t tx_xthol_frames;
12909 /* Total Tx Drops per Port reported by STATS block */
12910 uint64_t tx_stat_discard;
12911 /* Total Tx Error Drops per Port reported by STATS block */
12912 uint64_t tx_stat_error;
12913} __attribute__((packed));
12914
12915/* Port Rx Statistics Formats */
12916/* rx_port_stats (size:4224b/528B) */
12917struct rx_port_stats {
12918 /* Total Number of 64 Bytes frames received */
12919 uint64_t rx_64b_frames;
12920 /* Total Number of 65-127 Bytes frames received */
12921 uint64_t rx_65b_127b_frames;
12922 /* Total Number of 128-255 Bytes frames received */
12923 uint64_t rx_128b_255b_frames;
12924 /* Total Number of 256-511 Bytes frames received */
12925 uint64_t rx_256b_511b_frames;
12926 /* Total Number of 512-1023 Bytes frames received */
12927 uint64_t rx_512b_1023b_frames;
12928 /* Total Number of 1024-1518 Bytes frames received */
12929 uint64_t rx_1024b_1518b_frames;
12930 /*
12931 * Total Number of each good VLAN (exludes FCS errors)
12932 * frame received which is 1519 to 1522 bytes in length
12933 * inclusive (excluding framing bits but including FCS bytes).
12934 */
12935 uint64_t rx_good_vlan_frames;
12936 /* Total Number of 1519-2047 Bytes frames received */
12937 uint64_t rx_1519b_2047b_frames;
12938 /* Total Number of 2048-4095 Bytes frames received */
12939 uint64_t rx_2048b_4095b_frames;
12940 /* Total Number of 4096-9216 Bytes frames received */
12941 uint64_t rx_4096b_9216b_frames;
12942 /* Total Number of 9217-16383 Bytes frames received */
12943 uint64_t rx_9217b_16383b_frames;
12944 /* Total number of frames received */
12945 uint64_t rx_total_frames;
12946 /* Total number of unicast frames received */
12947 uint64_t rx_ucast_frames;
12948 /* Total number of multicast frames received */
12949 uint64_t rx_mcast_frames;
12950 /* Total number of broadcast frames received */
12951 uint64_t rx_bcast_frames;
12952 /* Total number of received frames with FCS error */
12953 uint64_t rx_fcs_err_frames;
12954 /* Total number of control frames received */
12955 uint64_t rx_ctrl_frames;
12956 /* Total number of PAUSE frames received */
12957 uint64_t rx_pause_frames;
12958 /* Total number of PFC frames received */
12959 uint64_t rx_pfc_frames;
12960 /*
12961 * Total number of frames received with an unsupported
12962 * opcode
12963 */
12964 uint64_t rx_unsupported_opcode_frames;
12965 /*
12966 * Total number of frames received with an unsupported
12967 * DA for pause and PFC
12968 */
12969 uint64_t rx_unsupported_da_pausepfc_frames;
12970 /* Total number of frames received with an unsupported SA */
12971 uint64_t rx_wrong_sa_frames;
12972 /* Total number of received packets with alignment error */
12973 uint64_t rx_align_err_frames;
12974 /* Total number of received frames with out-of-range length */
12975 uint64_t rx_oor_len_frames;
12976 /* Total number of received frames with error termination */
12977 uint64_t rx_code_err_frames;
12978 /*
12979 * Total number of received frames with a false carrier is
12980 * detected during idle, as defined by RX_ER samples active
12981 * and RXD is 0xE. The event is reported along with the
12982 * statistics generated on the next received frame. Only
12983 * one false carrier condition can be detected and logged
12984 * between frames.
12985 *
12986 * Carrier event, valid for 10M/100M speed modes only.
12987 */
12988 uint64_t rx_false_carrier_frames;
12989 /* Total number of over-sized frames received */
12990 uint64_t rx_ovrsz_frames;
12991 /* Total number of jabber packets received */
12992 uint64_t rx_jbr_frames;
12993 /* Total number of received frames with MTU error */
12994 uint64_t rx_mtu_err_frames;
12995 /* Total number of received frames with CRC match */
12996 uint64_t rx_match_crc_frames;
12997 /* Total number of frames received promiscuously */
12998 uint64_t rx_promiscuous_frames;
12999 /*
13000 * Total number of received frames with one or two VLAN
13001 * tags
13002 */
13003 uint64_t rx_tagged_frames;
13004 /* Total number of received frames with two VLAN tags */
13005 uint64_t rx_double_tagged_frames;
13006 /* Total number of truncated frames received */
13007 uint64_t rx_trunc_frames;
13008 /* Total number of good frames (without errors) received */
13009 uint64_t rx_good_frames;
13010 /*
13011 * Total number of received PFC frames with transition from
13012 * XON to XOFF on Pri 0
13013 */
13014 uint64_t rx_pfc_xon2xoff_frames_pri0;
13015 /*
13016 * Total number of received PFC frames with transition from
13017 * XON to XOFF on Pri 1
13018 */
13019 uint64_t rx_pfc_xon2xoff_frames_pri1;
13020 /*
13021 * Total number of received PFC frames with transition from
13022 * XON to XOFF on Pri 2
13023 */
13024 uint64_t rx_pfc_xon2xoff_frames_pri2;
13025 /*
13026 * Total number of received PFC frames with transition from
13027 * XON to XOFF on Pri 3
13028 */
13029 uint64_t rx_pfc_xon2xoff_frames_pri3;
13030 /*
13031 * Total number of received PFC frames with transition from
13032 * XON to XOFF on Pri 4
13033 */
13034 uint64_t rx_pfc_xon2xoff_frames_pri4;
13035 /*
13036 * Total number of received PFC frames with transition from
13037 * XON to XOFF on Pri 5
13038 */
13039 uint64_t rx_pfc_xon2xoff_frames_pri5;
13040 /*
13041 * Total number of received PFC frames with transition from
13042 * XON to XOFF on Pri 6
13043 */
13044 uint64_t rx_pfc_xon2xoff_frames_pri6;
13045 /*
13046 * Total number of received PFC frames with transition from
13047 * XON to XOFF on Pri 7
13048 */
13049 uint64_t rx_pfc_xon2xoff_frames_pri7;
13050 /*
13051 * Total number of received PFC frames with PFC enabled
13052 * bit for Pri 0
13053 */
13054 uint64_t rx_pfc_ena_frames_pri0;
13055 /*
13056 * Total number of received PFC frames with PFC enabled
13057 * bit for Pri 1
13058 */
13059 uint64_t rx_pfc_ena_frames_pri1;
13060 /*
13061 * Total number of received PFC frames with PFC enabled
13062 * bit for Pri 2
13063 */
13064 uint64_t rx_pfc_ena_frames_pri2;
13065 /*
13066 * Total number of received PFC frames with PFC enabled
13067 * bit for Pri 3
13068 */
13069 uint64_t rx_pfc_ena_frames_pri3;
13070 /*
13071 * Total number of received PFC frames with PFC enabled
13072 * bit for Pri 4
13073 */
13074 uint64_t rx_pfc_ena_frames_pri4;
13075 /*
13076 * Total number of received PFC frames with PFC enabled
13077 * bit for Pri 5
13078 */
13079 uint64_t rx_pfc_ena_frames_pri5;
13080 /*
13081 * Total number of received PFC frames with PFC enabled
13082 * bit for Pri 6
13083 */
13084 uint64_t rx_pfc_ena_frames_pri6;
13085 /*
13086 * Total number of received PFC frames with PFC enabled
13087 * bit for Pri 7
13088 */
13089 uint64_t rx_pfc_ena_frames_pri7;
13090 /* Total Number of frames received with SCH CRC error */
13091 uint64_t rx_sch_crc_err_frames;
13092 /* Total Number of under-sized frames received */
13093 uint64_t rx_undrsz_frames;
13094 /* Total Number of fragmented frames received */
13095 uint64_t rx_frag_frames;
13096 /* Total number of RX EEE LPI Events */
13097 uint64_t rx_eee_lpi_events;
13098 /* EEE LPI Duration Counter on RX */
13099 uint64_t rx_eee_lpi_duration;
13100 /*
13101 * Total number of physical type Link Level Flow Control
13102 * (LLFC) messages received
13103 */
13104 uint64_t rx_llfc_physical_msgs;
13105 /*
13106 * Total number of logical type Link Level Flow Control
13107 * (LLFC) messages received
13108 */
13109 uint64_t rx_llfc_logical_msgs;
13110 /*
13111 * Total number of logical type Link Level Flow Control
13112 * (LLFC) messages received with CRC error
13113 */
13114 uint64_t rx_llfc_msgs_with_crc_err;
13115 /* Total number of HCFC messages received */
13116 uint64_t rx_hcfc_msgs;
13117 /* Total number of HCFC messages received with CRC error */
13118 uint64_t rx_hcfc_msgs_with_crc_err;
13119 /* Total number of received bytes */
13120 uint64_t rx_bytes;
13121 /* Total number of bytes received in runt frames */
13122 uint64_t rx_runt_bytes;
13123 /* Total number of runt frames received */
13124 uint64_t rx_runt_frames;
13125 /* Total Rx Discards per Port reported by STATS block */
13126 uint64_t rx_stat_discard;
13127 uint64_t rx_stat_err;
13128} __attribute__((packed));
13129
13130/********************
13131 * hwrm_port_qstats *
13132 ********************/
13133
13134
13135/* hwrm_port_qstats_input (size:320b/40B) */
13136struct hwrm_port_qstats_input {
13137 /* The HWRM command request type. */
13138 uint16_t req_type;
13139 /*
13140 * The completion ring to send the completion event on. This should
13141 * be the NQ ID returned from the `nq_alloc` HWRM command.
13142 */
13143 uint16_t cmpl_ring;
13144 /*
13145 * The sequence ID is used by the driver for tracking multiple
13146 * commands. This ID is treated as opaque data by the firmware and
13147 * the value is returned in the `hwrm_resp_hdr` upon completion.
13148 */
13149 uint16_t seq_id;
13150 /*
13151 * The target ID of the command:
13152 * * 0x0-0xFFF8 - The function ID
13153 * * 0xFFF8-0xFFFE - Reserved for internal processors
13154 * * 0xFFFF - HWRM
13155 */
13156 uint16_t target_id;
13157 /*
13158 * A physical address pointer pointing to a host buffer that the
13159 * command's response data will be written. This can be either a host
13160 * physical address (HPA) or a guest physical address (GPA) and must
13161 * point to a physically contiguous block of memory.
13162 */
13163 uint64_t resp_addr;
13164 /* Port ID of port that is being queried. */
13165 uint16_t port_id;
13166 uint8_t unused_0[6];
13167 /*
13168 * This is the host address where
13169 * Tx port statistics will be stored
13170 */
13171 uint64_t tx_stat_host_addr;
13172 /*
13173 * This is the host address where
13174 * Rx port statistics will be stored
13175 */
13176 uint64_t rx_stat_host_addr;
13177} __attribute__((packed));
13178
13179/* hwrm_port_qstats_output (size:128b/16B) */
13180struct hwrm_port_qstats_output {
13181 /* The specific error status for the command. */
13182 uint16_t error_code;
13183 /* The HWRM command request type. */
13184 uint16_t req_type;
13185 /* The sequence ID from the original command. */
13186 uint16_t seq_id;
13187 /* The length of the response data in number of bytes. */
13188 uint16_t resp_len;
13189 /* The size of TX port statistics block in bytes. */
13190 uint16_t tx_stat_size;
13191 /* The size of RX port statistics block in bytes. */
13192 uint16_t rx_stat_size;
13193 uint8_t unused_0[3];
13194 /*
13195 * This field is used in Output records to indicate that the output
13196 * is completely written to RAM. This field should be read as '1'
13197 * to indicate that the output has been completely written.
13198 * When writing a command completion or response to an internal processor,
13199 * the order of writes has to be such that this field is written last.
13200 */
13201 uint8_t valid;
13202} __attribute__((packed));
13203
13204/* Port Tx Statistics extended Formats */
13205/* tx_port_stats_ext (size:2048b/256B) */
13206struct tx_port_stats_ext {
13207 /* Total number of tx bytes count on cos queue 0 */
13208 uint64_t tx_bytes_cos0;
13209 /* Total number of tx bytes count on cos queue 1 */
13210 uint64_t tx_bytes_cos1;
13211 /* Total number of tx bytes count on cos queue 2 */
13212 uint64_t tx_bytes_cos2;
13213 /* Total number of tx bytes count on cos queue 3 */
13214 uint64_t tx_bytes_cos3;
13215 /* Total number of tx bytes count on cos queue 4 */
13216 uint64_t tx_bytes_cos4;
13217 /* Total number of tx bytes count on cos queue 5 */
13218 uint64_t tx_bytes_cos5;
13219 /* Total number of tx bytes count on cos queue 6 */
13220 uint64_t tx_bytes_cos6;
13221 /* Total number of tx bytes count on cos queue 7 */
13222 uint64_t tx_bytes_cos7;
13223 /* Total number of tx packets count on cos queue 0 */
13224 uint64_t tx_packets_cos0;
13225 /* Total number of tx packets count on cos queue 1 */
13226 uint64_t tx_packets_cos1;
13227 /* Total number of tx packets count on cos queue 2 */
13228 uint64_t tx_packets_cos2;
13229 /* Total number of tx packets count on cos queue 3 */
13230 uint64_t tx_packets_cos3;
13231 /* Total number of tx packets count on cos queue 4 */
13232 uint64_t tx_packets_cos4;
13233 /* Total number of tx packets count on cos queue 5 */
13234 uint64_t tx_packets_cos5;
13235 /* Total number of tx packets count on cos queue 6 */
13236 uint64_t tx_packets_cos6;
13237 /* Total number of tx packets count on cos queue 7 */
13238 uint64_t tx_packets_cos7;
13239 /* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 0 */
13240 uint64_t pfc_pri0_tx_duration_us;
13241 /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 0 */
13242 uint64_t pfc_pri0_tx_transitions;
13243 /* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 1 */
13244 uint64_t pfc_pri1_tx_duration_us;
13245 /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 1 */
13246 uint64_t pfc_pri1_tx_transitions;
13247 /* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 2 */
13248 uint64_t pfc_pri2_tx_duration_us;
13249 /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 2 */
13250 uint64_t pfc_pri2_tx_transitions;
13251 /* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 3 */
13252 uint64_t pfc_pri3_tx_duration_us;
13253 /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 3 */
13254 uint64_t pfc_pri3_tx_transitions;
13255 /* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 4 */
13256 uint64_t pfc_pri4_tx_duration_us;
13257 /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 4 */
13258 uint64_t pfc_pri4_tx_transitions;
13259 /* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 5 */
13260 uint64_t pfc_pri5_tx_duration_us;
13261 /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 5 */
13262 uint64_t pfc_pri5_tx_transitions;
13263 /* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 6 */
13264 uint64_t pfc_pri6_tx_duration_us;
13265 /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 6 */
13266 uint64_t pfc_pri6_tx_transitions;
13267 /* time duration between transmitting a XON -> XOFF and a subsequent XOFF -> XON for priority 7 */
13268 uint64_t pfc_pri7_tx_duration_us;
13269 /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 7 */
13270 uint64_t pfc_pri7_tx_transitions;
13271} __attribute__((packed));
13272
13273/* Port Rx Statistics extended Formats */
13274/* rx_port_stats_ext (size:2368b/296B) */
13275struct rx_port_stats_ext {
13276 /* Number of times link state changed to down */
13277 uint64_t link_down_events;
13278 /* Number of times the idle rings with pause bit are found */
13279 uint64_t continuous_pause_events;
13280 /* Number of times the active rings pause bit resumed back */
13281 uint64_t resume_pause_events;
13282 /* Number of times, the ROCE cos queue PFC is disabled to avoid pause flood/burst */
13283 uint64_t continuous_roce_pause_events;
13284 /* Number of times, the ROCE cos queue PFC is enabled back */
13285 uint64_t resume_roce_pause_events;
13286 /* Total number of rx bytes count on cos queue 0 */
13287 uint64_t rx_bytes_cos0;
13288 /* Total number of rx bytes count on cos queue 1 */
13289 uint64_t rx_bytes_cos1;
13290 /* Total number of rx bytes count on cos queue 2 */
13291 uint64_t rx_bytes_cos2;
13292 /* Total number of rx bytes count on cos queue 3 */
13293 uint64_t rx_bytes_cos3;
13294 /* Total number of rx bytes count on cos queue 4 */
13295 uint64_t rx_bytes_cos4;
13296 /* Total number of rx bytes count on cos queue 5 */
13297 uint64_t rx_bytes_cos5;
13298 /* Total number of rx bytes count on cos queue 6 */
13299 uint64_t rx_bytes_cos6;
13300 /* Total number of rx bytes count on cos queue 7 */
13301 uint64_t rx_bytes_cos7;
13302 /* Total number of rx packets count on cos queue 0 */
13303 uint64_t rx_packets_cos0;
13304 /* Total number of rx packets count on cos queue 1 */
13305 uint64_t rx_packets_cos1;
13306 /* Total number of rx packets count on cos queue 2 */
13307 uint64_t rx_packets_cos2;
13308 /* Total number of rx packets count on cos queue 3 */
13309 uint64_t rx_packets_cos3;
13310 /* Total number of rx packets count on cos queue 4 */
13311 uint64_t rx_packets_cos4;
13312 /* Total number of rx packets count on cos queue 5 */
13313 uint64_t rx_packets_cos5;
13314 /* Total number of rx packets count on cos queue 6 */
13315 uint64_t rx_packets_cos6;
13316 /* Total number of rx packets count on cos queue 7 */
13317 uint64_t rx_packets_cos7;
13318 /* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 0 */
13319 uint64_t pfc_pri0_rx_duration_us;
13320 /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 0 */
13321 uint64_t pfc_pri0_rx_transitions;
13322 /* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 1 */
13323 uint64_t pfc_pri1_rx_duration_us;
13324 /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 1 */
13325 uint64_t pfc_pri1_rx_transitions;
13326 /* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 2 */
13327 uint64_t pfc_pri2_rx_duration_us;
13328 /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 2 */
13329 uint64_t pfc_pri2_rx_transitions;
13330 /* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 3 */
13331 uint64_t pfc_pri3_rx_duration_us;
13332 /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 3 */
13333 uint64_t pfc_pri3_rx_transitions;
13334 /* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 4 */
13335 uint64_t pfc_pri4_rx_duration_us;
13336 /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 4 */
13337 uint64_t pfc_pri4_rx_transitions;
13338 /* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 5 */
13339 uint64_t pfc_pri5_rx_duration_us;
13340 /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 5 */
13341 uint64_t pfc_pri5_rx_transitions;
13342 /* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 6 */
13343 uint64_t pfc_pri6_rx_duration_us;
13344 /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 6 */
13345 uint64_t pfc_pri6_rx_transitions;
13346 /* time duration receiving a XON -> XOFF and a subsequent XOFF -> XON for priority 7 */
13347 uint64_t pfc_pri7_rx_duration_us;
13348 /* Number of times, a XON -> XOFF and XOFF -> XON transitions occur for priority 7 */
13349 uint64_t pfc_pri7_rx_transitions;
13350} __attribute__((packed));
13351
13352/************************
13353 * hwrm_port_qstats_ext *
13354 ************************/
13355
13356
13357/* hwrm_port_qstats_ext_input (size:320b/40B) */
13358struct hwrm_port_qstats_ext_input {
13359 /* The HWRM command request type. */
13360 uint16_t req_type;
13361 /*
13362 * The completion ring to send the completion event on. This should
13363 * be the NQ ID returned from the `nq_alloc` HWRM command.
13364 */
13365 uint16_t cmpl_ring;
13366 /*
13367 * The sequence ID is used by the driver for tracking multiple
13368 * commands. This ID is treated as opaque data by the firmware and
13369 * the value is returned in the `hwrm_resp_hdr` upon completion.
13370 */
13371 uint16_t seq_id;
13372 /*
13373 * The target ID of the command:
13374 * * 0x0-0xFFF8 - The function ID
13375 * * 0xFFF8-0xFFFE - Reserved for internal processors
13376 * * 0xFFFF - HWRM
13377 */
13378 uint16_t target_id;
13379 /*
13380 * A physical address pointer pointing to a host buffer that the
13381 * command's response data will be written. This can be either a host
13382 * physical address (HPA) or a guest physical address (GPA) and must
13383 * point to a physically contiguous block of memory.
13384 */
13385 uint64_t resp_addr;
13386 /* Port ID of port that is being queried. */
13387 uint16_t port_id;
13388 /*
13389 * The size of TX port extended
13390 * statistics block in bytes.
13391 */
13392 uint16_t tx_stat_size;
13393 /*
13394 * The size of RX port extended
13395 * statistics block in bytes
13396 */
13397 uint16_t rx_stat_size;
13398 uint8_t unused_0[2];
13399 /*
13400 * This is the host address where
13401 * Tx port statistics will be stored
13402 */
13403 uint64_t tx_stat_host_addr;
13404 /*
13405 * This is the host address where
13406 * Rx port statistics will be stored
13407 */
13408 uint64_t rx_stat_host_addr;
13409} __attribute__((packed));
13410
13411/* hwrm_port_qstats_ext_output (size:128b/16B) */
13412struct hwrm_port_qstats_ext_output {
13413 /* The specific error status for the command. */
13414 uint16_t error_code;
13415 /* The HWRM command request type. */
13416 uint16_t req_type;
13417 /* The sequence ID from the original command. */
13418 uint16_t seq_id;
13419 /* The length of the response data in number of bytes. */
13420 uint16_t resp_len;
13421 /* The size of TX port statistics block in bytes. */
13422 uint16_t tx_stat_size;
13423 /* The size of RX port statistics block in bytes. */
13424 uint16_t rx_stat_size;
13425 /* Total number of active cos queues available. */
13426 uint16_t total_active_cos_queues;
13427 uint8_t flags;
13428 /*
13429 * If set to 1, then this field indicates that clear
13430 * roce specific counters is supported.
13431 */
13432 #define HWRM_PORT_QSTATS_EXT_OUTPUT_FLAGS_CLEAR_ROCE_COUNTERS_SUPPORTED \
13433 UINT32_C(0x1)
13434 /*
13435 * This field is used in Output records to indicate that the output
13436 * is completely written to RAM. This field should be read as '1'
13437 * to indicate that the output has been completely written.
13438 * When writing a command completion or response to an internal processor,
13439 * the order of writes has to be such that this field is written last.
13440 */
13441 uint8_t valid;
13442} __attribute__((packed));
13443
13444/*************************
13445 * hwrm_port_lpbk_qstats *
13446 *************************/
13447
13448
13449/* hwrm_port_lpbk_qstats_input (size:128b/16B) */
13450struct hwrm_port_lpbk_qstats_input {
13451 /* The HWRM command request type. */
13452 uint16_t req_type;
13453 /*
13454 * The completion ring to send the completion event on. This should
13455 * be the NQ ID returned from the `nq_alloc` HWRM command.
13456 */
13457 uint16_t cmpl_ring;
13458 /*
13459 * The sequence ID is used by the driver for tracking multiple
13460 * commands. This ID is treated as opaque data by the firmware and
13461 * the value is returned in the `hwrm_resp_hdr` upon completion.
13462 */
13463 uint16_t seq_id;
13464 /*
13465 * The target ID of the command:
13466 * * 0x0-0xFFF8 - The function ID
13467 * * 0xFFF8-0xFFFE - Reserved for internal processors
13468 * * 0xFFFF - HWRM
13469 */
13470 uint16_t target_id;
13471 /*
13472 * A physical address pointer pointing to a host buffer that the
13473 * command's response data will be written. This can be either a host
13474 * physical address (HPA) or a guest physical address (GPA) and must
13475 * point to a physically contiguous block of memory.
13476 */
13477 uint64_t resp_addr;
13478} __attribute__((packed));
13479
13480/* hwrm_port_lpbk_qstats_output (size:768b/96B) */
13481struct hwrm_port_lpbk_qstats_output {
13482 /* The specific error status for the command. */
13483 uint16_t error_code;
13484 /* The HWRM command request type. */
13485 uint16_t req_type;
13486 /* The sequence ID from the original command. */
13487 uint16_t seq_id;
13488 /* The length of the response data in number of bytes. */
13489 uint16_t resp_len;
13490 /* Number of transmitted unicast frames */
13491 uint64_t lpbk_ucast_frames;
13492 /* Number of transmitted multicast frames */
13493 uint64_t lpbk_mcast_frames;
13494 /* Number of transmitted broadcast frames */
13495 uint64_t lpbk_bcast_frames;
13496 /* Number of transmitted bytes for unicast traffic */
13497 uint64_t lpbk_ucast_bytes;
13498 /* Number of transmitted bytes for multicast traffic */
13499 uint64_t lpbk_mcast_bytes;
13500 /* Number of transmitted bytes for broadcast traffic */
13501 uint64_t lpbk_bcast_bytes;
13502 /* Total Tx Drops for loopback traffic reported by STATS block */
13503 uint64_t tx_stat_discard;
13504 /* Total Tx Error Drops for loopback traffic reported by STATS block */
13505 uint64_t tx_stat_error;
13506 /* Total Rx Drops for loopback traffic reported by STATS block */
13507 uint64_t rx_stat_discard;
13508 /* Total Rx Error Drops for loopback traffic reported by STATS block */
13509 uint64_t rx_stat_error;
13510 uint8_t unused_0[7];
13511 /*
13512 * This field is used in Output records to indicate that the output
13513 * is completely written to RAM. This field should be read as '1'
13514 * to indicate that the output has been completely written.
13515 * When writing a command completion or response to an internal processor,
13516 * the order of writes has to be such that this field is written last.
13517 */
13518 uint8_t valid;
13519} __attribute__((packed));
13520
13521/***********************
13522 * hwrm_port_clr_stats *
13523 ***********************/
13524
13525
13526/* hwrm_port_clr_stats_input (size:192b/24B) */
13527struct hwrm_port_clr_stats_input {
13528 /* The HWRM command request type. */
13529 uint16_t req_type;
13530 /*
13531 * The completion ring to send the completion event on. This should
13532 * be the NQ ID returned from the `nq_alloc` HWRM command.
13533 */
13534 uint16_t cmpl_ring;
13535 /*
13536 * The sequence ID is used by the driver for tracking multiple
13537 * commands. This ID is treated as opaque data by the firmware and
13538 * the value is returned in the `hwrm_resp_hdr` upon completion.
13539 */
13540 uint16_t seq_id;
13541 /*
13542 * The target ID of the command:
13543 * * 0x0-0xFFF8 - The function ID
13544 * * 0xFFF8-0xFFFE - Reserved for internal processors
13545 * * 0xFFFF - HWRM
13546 */
13547 uint16_t target_id;
13548 /*
13549 * A physical address pointer pointing to a host buffer that the
13550 * command's response data will be written. This can be either a host
13551 * physical address (HPA) or a guest physical address (GPA) and must
13552 * point to a physically contiguous block of memory.
13553 */
13554 uint64_t resp_addr;
13555 /* Port ID of port that is being queried. */
13556 uint16_t port_id;
13557 uint8_t flags;
13558 /*
13559 * If set to 1, then this field indicates clear the following RoCE
13560 * specific counters.
13561 * RoCE associated TX/RX cos counters
13562 * CNP associated TX/RX cos counters
13563 * RoCE/CNP specific TX/RX flow counters
13564 * Firmware will determine the RoCE/CNP cos queue based on qos profile.
13565 * This flag is honored only when RoCE is enabled on that port.
13566 */
13567 #define HWRM_PORT_CLR_STATS_INPUT_FLAGS_ROCE_COUNTERS UINT32_C(0x1)
13568 uint8_t unused_0[5];
13569} __attribute__((packed));
13570
13571/* hwrm_port_clr_stats_output (size:128b/16B) */
13572struct hwrm_port_clr_stats_output {
13573 /* The specific error status for the command. */
13574 uint16_t error_code;
13575 /* The HWRM command request type. */
13576 uint16_t req_type;
13577 /* The sequence ID from the original command. */
13578 uint16_t seq_id;
13579 /* The length of the response data in number of bytes. */
13580 uint16_t resp_len;
13581 uint8_t unused_0[7];
13582 /*
13583 * This field is used in Output records to indicate that the output
13584 * is completely written to RAM. This field should be read as '1'
13585 * to indicate that the output has been completely written.
13586 * When writing a command completion or response to an internal processor,
13587 * the order of writes has to be such that this field is written last.
13588 */
13589 uint8_t valid;
13590} __attribute__((packed));
13591
13592/***********************
13593 * hwrm_port_phy_qcaps *
13594 ***********************/
13595
13596
13597/* hwrm_port_phy_qcaps_input (size:192b/24B) */
13598struct hwrm_port_phy_qcaps_input {
13599 /* The HWRM command request type. */
13600 uint16_t req_type;
13601 /*
13602 * The completion ring to send the completion event on. This should
13603 * be the NQ ID returned from the `nq_alloc` HWRM command.
13604 */
13605 uint16_t cmpl_ring;
13606 /*
13607 * The sequence ID is used by the driver for tracking multiple
13608 * commands. This ID is treated as opaque data by the firmware and
13609 * the value is returned in the `hwrm_resp_hdr` upon completion.
13610 */
13611 uint16_t seq_id;
13612 /*
13613 * The target ID of the command:
13614 * * 0x0-0xFFF8 - The function ID
13615 * * 0xFFF8-0xFFFE - Reserved for internal processors
13616 * * 0xFFFF - HWRM
13617 */
13618 uint16_t target_id;
13619 /*
13620 * A physical address pointer pointing to a host buffer that the
13621 * command's response data will be written. This can be either a host
13622 * physical address (HPA) or a guest physical address (GPA) and must
13623 * point to a physically contiguous block of memory.
13624 */
13625 uint64_t resp_addr;
13626 /* Port ID of port that is being queried. */
13627 uint16_t port_id;
13628 uint8_t unused_0[6];
13629} __attribute__((packed));
13630
13631/* hwrm_port_phy_qcaps_output (size:192b/24B) */
13632struct hwrm_port_phy_qcaps_output {
13633 /* The specific error status for the command. */
13634 uint16_t error_code;
13635 /* The HWRM command request type. */
13636 uint16_t req_type;
13637 /* The sequence ID from the original command. */
13638 uint16_t seq_id;
13639 /* The length of the response data in number of bytes. */
13640 uint16_t resp_len;
13641 /* PHY capability flags */
13642 uint8_t flags;
13643 /*
13644 * If set to 1, then this field indicates that the
13645 * link is capable of supporting EEE.
13646 */
13647 #define HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS_EEE_SUPPORTED \
13648 UINT32_C(0x1)
13649 /*
13650 * If set to 1, then this field indicates that the
13651 * PHY is capable of supporting external loopback.
13652 */
13653 #define HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS_EXTERNAL_LPBK_SUPPORTED \
13654 UINT32_C(0x2)
13655 /*
13656 * Reserved field. The HWRM shall set this field to 0.
13657 * An HWRM client shall ignore this field.
13658 */
13659 #define HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS_RSVD1_MASK \
13660 UINT32_C(0xfc)
13661 #define HWRM_PORT_PHY_QCAPS_OUTPUT_FLAGS_RSVD1_SFT 2
13662 /* Number of front panel ports for this device. */
13663 uint8_t port_cnt;
13664 /* Not supported or unknown */
13665 #define HWRM_PORT_PHY_QCAPS_OUTPUT_PORT_CNT_UNKNOWN UINT32_C(0x0)
13666 /* single port device */
13667 #define HWRM_PORT_PHY_QCAPS_OUTPUT_PORT_CNT_1 UINT32_C(0x1)
13668 /* 2-port device */
13669 #define HWRM_PORT_PHY_QCAPS_OUTPUT_PORT_CNT_2 UINT32_C(0x2)
13670 /* 3-port device */
13671 #define HWRM_PORT_PHY_QCAPS_OUTPUT_PORT_CNT_3 UINT32_C(0x3)
13672 /* 4-port device */
13673 #define HWRM_PORT_PHY_QCAPS_OUTPUT_PORT_CNT_4 UINT32_C(0x4)
13674 #define HWRM_PORT_PHY_QCAPS_OUTPUT_PORT_CNT_LAST \
13675 HWRM_PORT_PHY_QCAPS_OUTPUT_PORT_CNT_4
13676 /*
13677 * This is a bit mask to indicate what speeds are supported
13678 * as forced speeds on this link.
13679 * For each speed that can be forced on this link, the
13680 * corresponding mask bit shall be set to '1'.
13681 */
13682 uint16_t supported_speeds_force_mode;
13683 /* 100Mb link speed (Half-duplex) */
13684 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_100MBHD \
13685 UINT32_C(0x1)
13686 /* 100Mb link speed (Full-duplex) */
13687 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_100MB \
13688 UINT32_C(0x2)
13689 /* 1Gb link speed (Half-duplex) */
13690 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_1GBHD \
13691 UINT32_C(0x4)
13692 /* 1Gb link speed (Full-duplex) */
13693 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_1GB \
13694 UINT32_C(0x8)
13695 /* 2Gb link speed */
13696 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_2GB \
13697 UINT32_C(0x10)
13698 /* 25Gb link speed */
13699 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_2_5GB \
13700 UINT32_C(0x20)
13701 /* 10Gb link speed */
13702 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_10GB \
13703 UINT32_C(0x40)
13704 /* 20Gb link speed */
13705 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_20GB \
13706 UINT32_C(0x80)
13707 /* 25Gb link speed */
13708 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_25GB \
13709 UINT32_C(0x100)
13710 /* 40Gb link speed */
13711 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_40GB \
13712 UINT32_C(0x200)
13713 /* 50Gb link speed */
13714 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_50GB \
13715 UINT32_C(0x400)
13716 /* 100Gb link speed */
13717 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_100GB \
13718 UINT32_C(0x800)
13719 /* 10Mb link speed (Half-duplex) */
13720 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_10MBHD \
13721 UINT32_C(0x1000)
13722 /* 10Mb link speed (Full-duplex) */
13723 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_FORCE_MODE_10MB \
13724 UINT32_C(0x2000)
13725 /*
13726 * This is a bit mask to indicate what speeds are supported
13727 * for autonegotiation on this link.
13728 * For each speed that can be autonegotiated on this link, the
13729 * corresponding mask bit shall be set to '1'.
13730 */
13731 uint16_t supported_speeds_auto_mode;
13732 /* 100Mb link speed (Half-duplex) */
13733 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_100MBHD \
13734 UINT32_C(0x1)
13735 /* 100Mb link speed (Full-duplex) */
13736 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_100MB \
13737 UINT32_C(0x2)
13738 /* 1Gb link speed (Half-duplex) */
13739 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_1GBHD \
13740 UINT32_C(0x4)
13741 /* 1Gb link speed (Full-duplex) */
13742 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_1GB \
13743 UINT32_C(0x8)
13744 /* 2Gb link speed */
13745 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_2GB \
13746 UINT32_C(0x10)
13747 /* 25Gb link speed */
13748 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_2_5GB \
13749 UINT32_C(0x20)
13750 /* 10Gb link speed */
13751 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_10GB \
13752 UINT32_C(0x40)
13753 /* 20Gb link speed */
13754 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_20GB \
13755 UINT32_C(0x80)
13756 /* 25Gb link speed */
13757 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_25GB \
13758 UINT32_C(0x100)
13759 /* 40Gb link speed */
13760 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_40GB \
13761 UINT32_C(0x200)
13762 /* 50Gb link speed */
13763 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_50GB \
13764 UINT32_C(0x400)
13765 /* 100Gb link speed */
13766 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_100GB \
13767 UINT32_C(0x800)
13768 /* 10Mb link speed (Half-duplex) */
13769 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_10MBHD \
13770 UINT32_C(0x1000)
13771 /* 10Mb link speed (Full-duplex) */
13772 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_AUTO_MODE_10MB \
13773 UINT32_C(0x2000)
13774 /*
13775 * This is a bit mask to indicate what speeds are supported
13776 * for EEE on this link.
13777 * For each speed that can be autonegotiated when EEE is enabled
13778 * on this link, the corresponding mask bit shall be set to '1'.
13779 * This field is only valid when the eee_suppotred is set to '1'.
13780 */
13781 uint16_t supported_speeds_eee_mode;
13782 /* Reserved */
13783 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_EEE_MODE_RSVD1 \
13784 UINT32_C(0x1)
13785 /* 100Mb link speed (Full-duplex) */
13786 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_EEE_MODE_100MB \
13787 UINT32_C(0x2)
13788 /* Reserved */
13789 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_EEE_MODE_RSVD2 \
13790 UINT32_C(0x4)
13791 /* 1Gb link speed (Full-duplex) */
13792 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_EEE_MODE_1GB \
13793 UINT32_C(0x8)
13794 /* Reserved */
13795 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_EEE_MODE_RSVD3 \
13796 UINT32_C(0x10)
13797 /* Reserved */
13798 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_EEE_MODE_RSVD4 \
13799 UINT32_C(0x20)
13800 /* 10Gb link speed */
13801 #define HWRM_PORT_PHY_QCAPS_OUTPUT_SUPPORTED_SPEEDS_EEE_MODE_10GB \
13802 UINT32_C(0x40)
13803 uint32_t tx_lpi_timer_low;
13804 /*
13805 * The lowest value of TX LPI timer that can be set on this link
13806 * when EEE is enabled. This value is in microseconds.
13807 * This field is valid only when_eee_supported is set to '1'.
13808 */
13809 #define HWRM_PORT_PHY_QCAPS_OUTPUT_TX_LPI_TIMER_LOW_MASK \
13810 UINT32_C(0xffffff)
13811 #define HWRM_PORT_PHY_QCAPS_OUTPUT_TX_LPI_TIMER_LOW_SFT 0
13812 /*
13813 * Reserved field. The HWRM shall set this field to 0.
13814 * An HWRM client shall ignore this field.
13815 */
13816 #define HWRM_PORT_PHY_QCAPS_OUTPUT_RSVD2_MASK \
13817 UINT32_C(0xff000000)
13818 #define HWRM_PORT_PHY_QCAPS_OUTPUT_RSVD2_SFT 24
13819 uint32_t valid_tx_lpi_timer_high;
13820 /*
13821 * The highest value of TX LPI timer that can be set on this link
13822 * when EEE is enabled. This value is in microseconds.
13823 * This field is valid only when_eee_supported is set to '1'.
13824 */
13825 #define HWRM_PORT_PHY_QCAPS_OUTPUT_TX_LPI_TIMER_HIGH_MASK \
13826 UINT32_C(0xffffff)
13827 #define HWRM_PORT_PHY_QCAPS_OUTPUT_TX_LPI_TIMER_HIGH_SFT 0
13828 /*
13829 * This field is used in Output records to indicate that the output
13830 * is completely written to RAM. This field should be read as '1'
13831 * to indicate that the output has been completely written.
13832 * When writing a command completion or response to an internal processor,
13833 * the order of writes has to be such that this field is written last.
13834 */
13835 #define HWRM_PORT_PHY_QCAPS_OUTPUT_VALID_MASK \
13836 UINT32_C(0xff000000)
13837 #define HWRM_PORT_PHY_QCAPS_OUTPUT_VALID_SFT 24
13838} __attribute__((packed));
13839
13840/*********************
13841 * hwrm_port_led_cfg *
13842 *********************/
13843
13844
13845/* hwrm_port_led_cfg_input (size:512b/64B) */
13846struct hwrm_port_led_cfg_input {
13847 /* The HWRM command request type. */
13848 uint16_t req_type;
13849 /*
13850 * The completion ring to send the completion event on. This should
13851 * be the NQ ID returned from the `nq_alloc` HWRM command.
13852 */
13853 uint16_t cmpl_ring;
13854 /*
13855 * The sequence ID is used by the driver for tracking multiple
13856 * commands. This ID is treated as opaque data by the firmware and
13857 * the value is returned in the `hwrm_resp_hdr` upon completion.
13858 */
13859 uint16_t seq_id;
13860 /*
13861 * The target ID of the command:
13862 * * 0x0-0xFFF8 - The function ID
13863 * * 0xFFF8-0xFFFE - Reserved for internal processors
13864 * * 0xFFFF - HWRM
13865 */
13866 uint16_t target_id;
13867 /*
13868 * A physical address pointer pointing to a host buffer that the
13869 * command's response data will be written. This can be either a host
13870 * physical address (HPA) or a guest physical address (GPA) and must
13871 * point to a physically contiguous block of memory.
13872 */
13873 uint64_t resp_addr;
13874 uint32_t enables;
13875 /*
13876 * This bit must be '1' for the led0_id field to be
13877 * configured.
13878 */
13879 #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED0_ID \
13880 UINT32_C(0x1)
13881 /*
13882 * This bit must be '1' for the led0_state field to be
13883 * configured.
13884 */
13885 #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED0_STATE \
13886 UINT32_C(0x2)
13887 /*
13888 * This bit must be '1' for the led0_color field to be
13889 * configured.
13890 */
13891 #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED0_COLOR \
13892 UINT32_C(0x4)
13893 /*
13894 * This bit must be '1' for the led0_blink_on field to be
13895 * configured.
13896 */
13897 #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED0_BLINK_ON \
13898 UINT32_C(0x8)
13899 /*
13900 * This bit must be '1' for the led0_blink_off field to be
13901 * configured.
13902 */
13903 #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED0_BLINK_OFF \
13904 UINT32_C(0x10)
13905 /*
13906 * This bit must be '1' for the led0_group_id field to be
13907 * configured.
13908 */
13909 #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED0_GROUP_ID \
13910 UINT32_C(0x20)
13911 /*
13912 * This bit must be '1' for the led1_id field to be
13913 * configured.
13914 */
13915 #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED1_ID \
13916 UINT32_C(0x40)
13917 /*
13918 * This bit must be '1' for the led1_state field to be
13919 * configured.
13920 */
13921 #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED1_STATE \
13922 UINT32_C(0x80)
13923 /*
13924 * This bit must be '1' for the led1_color field to be
13925 * configured.
13926 */
13927 #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED1_COLOR \
13928 UINT32_C(0x100)
13929 /*
13930 * This bit must be '1' for the led1_blink_on field to be
13931 * configured.
13932 */
13933 #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED1_BLINK_ON \
13934 UINT32_C(0x200)
13935 /*
13936 * This bit must be '1' for the led1_blink_off field to be
13937 * configured.
13938 */
13939 #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED1_BLINK_OFF \
13940 UINT32_C(0x400)
13941 /*
13942 * This bit must be '1' for the led1_group_id field to be
13943 * configured.
13944 */
13945 #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED1_GROUP_ID \
13946 UINT32_C(0x800)
13947 /*
13948 * This bit must be '1' for the led2_id field to be
13949 * configured.
13950 */
13951 #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED2_ID \
13952 UINT32_C(0x1000)
13953 /*
13954 * This bit must be '1' for the led2_state field to be
13955 * configured.
13956 */
13957 #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED2_STATE \
13958 UINT32_C(0x2000)
13959 /*
13960 * This bit must be '1' for the led2_color field to be
13961 * configured.
13962 */
13963 #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED2_COLOR \
13964 UINT32_C(0x4000)
13965 /*
13966 * This bit must be '1' for the led2_blink_on field to be
13967 * configured.
13968 */
13969 #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED2_BLINK_ON \
13970 UINT32_C(0x8000)
13971 /*
13972 * This bit must be '1' for the led2_blink_off field to be
13973 * configured.
13974 */
13975 #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED2_BLINK_OFF \
13976 UINT32_C(0x10000)
13977 /*
13978 * This bit must be '1' for the led2_group_id field to be
13979 * configured.
13980 */
13981 #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED2_GROUP_ID \
13982 UINT32_C(0x20000)
13983 /*
13984 * This bit must be '1' for the led3_id field to be
13985 * configured.
13986 */
13987 #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED3_ID \
13988 UINT32_C(0x40000)
13989 /*
13990 * This bit must be '1' for the led3_state field to be
13991 * configured.
13992 */
13993 #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED3_STATE \
13994 UINT32_C(0x80000)
13995 /*
13996 * This bit must be '1' for the led3_color field to be
13997 * configured.
13998 */
13999 #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED3_COLOR \
14000 UINT32_C(0x100000)
14001 /*
14002 * This bit must be '1' for the led3_blink_on field to be
14003 * configured.
14004 */
14005 #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED3_BLINK_ON \
14006 UINT32_C(0x200000)
14007 /*
14008 * This bit must be '1' for the led3_blink_off field to be
14009 * configured.
14010 */
14011 #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED3_BLINK_OFF \
14012 UINT32_C(0x400000)
14013 /*
14014 * This bit must be '1' for the led3_group_id field to be
14015 * configured.
14016 */
14017 #define HWRM_PORT_LED_CFG_INPUT_ENABLES_LED3_GROUP_ID \
14018 UINT32_C(0x800000)
14019 /* Port ID of port whose LEDs are configured. */
14020 uint16_t port_id;
14021 /*
14022 * The number of LEDs that are being configured.
14023 * Up to 4 LEDs can be configured with this command.
14024 */
14025 uint8_t num_leds;
14026 /* Reserved field. */
14027 uint8_t rsvd;
14028 /* An identifier for the LED #0. */
14029 uint8_t led0_id;
14030 /* The requested state of the LED #0. */
14031 uint8_t led0_state;
14032 /* Default state of the LED */
14033 #define HWRM_PORT_LED_CFG_INPUT_LED0_STATE_DEFAULT UINT32_C(0x0)
14034 /* Off */
14035 #define HWRM_PORT_LED_CFG_INPUT_LED0_STATE_OFF UINT32_C(0x1)
14036 /* On */
14037 #define HWRM_PORT_LED_CFG_INPUT_LED0_STATE_ON UINT32_C(0x2)
14038 /* Blink */
14039 #define HWRM_PORT_LED_CFG_INPUT_LED0_STATE_BLINK UINT32_C(0x3)
14040 /* Blink Alternately */
14041 #define HWRM_PORT_LED_CFG_INPUT_LED0_STATE_BLINKALT UINT32_C(0x4)
14042 #define HWRM_PORT_LED_CFG_INPUT_LED0_STATE_LAST \
14043 HWRM_PORT_LED_CFG_INPUT_LED0_STATE_BLINKALT
14044 /* The requested color of LED #0. */
14045 uint8_t led0_color;
14046 /* Default */
14047 #define HWRM_PORT_LED_CFG_INPUT_LED0_COLOR_DEFAULT UINT32_C(0x0)
14048 /* Amber */
14049 #define HWRM_PORT_LED_CFG_INPUT_LED0_COLOR_AMBER UINT32_C(0x1)
14050 /* Green */
14051 #define HWRM_PORT_LED_CFG_INPUT_LED0_COLOR_GREEN UINT32_C(0x2)
14052 /* Green or Amber */
14053 #define HWRM_PORT_LED_CFG_INPUT_LED0_COLOR_GREENAMBER UINT32_C(0x3)
14054 #define HWRM_PORT_LED_CFG_INPUT_LED0_COLOR_LAST \
14055 HWRM_PORT_LED_CFG_INPUT_LED0_COLOR_GREENAMBER
14056 uint8_t unused_0;
14057 /*
14058 * If the LED #0 state is "blink" or "blinkalt", then
14059 * this field represents the requested time in milliseconds
14060 * to keep LED on between cycles.
14061 */
14062 uint16_t led0_blink_on;
14063 /*
14064 * If the LED #0 state is "blink" or "blinkalt", then
14065 * this field represents the requested time in milliseconds
14066 * to keep LED off between cycles.
14067 */
14068 uint16_t led0_blink_off;
14069 /*
14070 * An identifier for the group of LEDs that LED #0 belongs
14071 * to.
14072 * If set to 0, then the LED #0 shall not be grouped and
14073 * shall be treated as an individual resource.
14074 * For all other non-zero values of this field, LED #0 shall
14075 * be grouped together with the LEDs with the same group ID
14076 * value.
14077 */
14078 uint8_t led0_group_id;
14079 /* Reserved field. */
14080 uint8_t rsvd0;
14081 /* An identifier for the LED #1. */
14082 uint8_t led1_id;
14083 /* The requested state of the LED #1. */
14084 uint8_t led1_state;
14085 /* Default state of the LED */
14086 #define HWRM_PORT_LED_CFG_INPUT_LED1_STATE_DEFAULT UINT32_C(0x0)
14087 /* Off */
14088 #define HWRM_PORT_LED_CFG_INPUT_LED1_STATE_OFF UINT32_C(0x1)
14089 /* On */
14090 #define HWRM_PORT_LED_CFG_INPUT_LED1_STATE_ON UINT32_C(0x2)
14091 /* Blink */
14092 #define HWRM_PORT_LED_CFG_INPUT_LED1_STATE_BLINK UINT32_C(0x3)
14093 /* Blink Alternately */
14094 #define HWRM_PORT_LED_CFG_INPUT_LED1_STATE_BLINKALT UINT32_C(0x4)
14095 #define HWRM_PORT_LED_CFG_INPUT_LED1_STATE_LAST \
14096 HWRM_PORT_LED_CFG_INPUT_LED1_STATE_BLINKALT
14097 /* The requested color of LED #1. */
14098 uint8_t led1_color;
14099 /* Default */
14100 #define HWRM_PORT_LED_CFG_INPUT_LED1_COLOR_DEFAULT UINT32_C(0x0)
14101 /* Amber */
14102 #define HWRM_PORT_LED_CFG_INPUT_LED1_COLOR_AMBER UINT32_C(0x1)
14103 /* Green */
14104 #define HWRM_PORT_LED_CFG_INPUT_LED1_COLOR_GREEN UINT32_C(0x2)
14105 /* Green or Amber */
14106 #define HWRM_PORT_LED_CFG_INPUT_LED1_COLOR_GREENAMBER UINT32_C(0x3)
14107 #define HWRM_PORT_LED_CFG_INPUT_LED1_COLOR_LAST \
14108 HWRM_PORT_LED_CFG_INPUT_LED1_COLOR_GREENAMBER
14109 uint8_t unused_1;
14110 /*
14111 * If the LED #1 state is "blink" or "blinkalt", then
14112 * this field represents the requested time in milliseconds
14113 * to keep LED on between cycles.
14114 */
14115 uint16_t led1_blink_on;
14116 /*
14117 * If the LED #1 state is "blink" or "blinkalt", then
14118 * this field represents the requested time in milliseconds
14119 * to keep LED off between cycles.
14120 */
14121 uint16_t led1_blink_off;
14122 /*
14123 * An identifier for the group of LEDs that LED #1 belongs
14124 * to.
14125 * If set to 0, then the LED #1 shall not be grouped and
14126 * shall be treated as an individual resource.
14127 * For all other non-zero values of this field, LED #1 shall
14128 * be grouped together with the LEDs with the same group ID
14129 * value.
14130 */
14131 uint8_t led1_group_id;
14132 /* Reserved field. */
14133 uint8_t rsvd1;
14134 /* An identifier for the LED #2. */
14135 uint8_t led2_id;
14136 /* The requested state of the LED #2. */
14137 uint8_t led2_state;
14138 /* Default state of the LED */
14139 #define HWRM_PORT_LED_CFG_INPUT_LED2_STATE_DEFAULT UINT32_C(0x0)
14140 /* Off */
14141 #define HWRM_PORT_LED_CFG_INPUT_LED2_STATE_OFF UINT32_C(0x1)
14142 /* On */
14143 #define HWRM_PORT_LED_CFG_INPUT_LED2_STATE_ON UINT32_C(0x2)
14144 /* Blink */
14145 #define HWRM_PORT_LED_CFG_INPUT_LED2_STATE_BLINK UINT32_C(0x3)
14146 /* Blink Alternately */
14147 #define HWRM_PORT_LED_CFG_INPUT_LED2_STATE_BLINKALT UINT32_C(0x4)
14148 #define HWRM_PORT_LED_CFG_INPUT_LED2_STATE_LAST \
14149 HWRM_PORT_LED_CFG_INPUT_LED2_STATE_BLINKALT
14150 /* The requested color of LED #2. */
14151 uint8_t led2_color;
14152 /* Default */
14153 #define HWRM_PORT_LED_CFG_INPUT_LED2_COLOR_DEFAULT UINT32_C(0x0)
14154 /* Amber */
14155 #define HWRM_PORT_LED_CFG_INPUT_LED2_COLOR_AMBER UINT32_C(0x1)
14156 /* Green */
14157 #define HWRM_PORT_LED_CFG_INPUT_LED2_COLOR_GREEN UINT32_C(0x2)
14158 /* Green or Amber */
14159 #define HWRM_PORT_LED_CFG_INPUT_LED2_COLOR_GREENAMBER UINT32_C(0x3)
14160 #define HWRM_PORT_LED_CFG_INPUT_LED2_COLOR_LAST \
14161 HWRM_PORT_LED_CFG_INPUT_LED2_COLOR_GREENAMBER
14162 uint8_t unused_2;
14163 /*
14164 * If the LED #2 state is "blink" or "blinkalt", then
14165 * this field represents the requested time in milliseconds
14166 * to keep LED on between cycles.
14167 */
14168 uint16_t led2_blink_on;
14169 /*
14170 * If the LED #2 state is "blink" or "blinkalt", then
14171 * this field represents the requested time in milliseconds
14172 * to keep LED off between cycles.
14173 */
14174 uint16_t led2_blink_off;
14175 /*
14176 * An identifier for the group of LEDs that LED #2 belongs
14177 * to.
14178 * If set to 0, then the LED #2 shall not be grouped and
14179 * shall be treated as an individual resource.
14180 * For all other non-zero values of this field, LED #2 shall
14181 * be grouped together with the LEDs with the same group ID
14182 * value.
14183 */
14184 uint8_t led2_group_id;
14185 /* Reserved field. */
14186 uint8_t rsvd2;
14187 /* An identifier for the LED #3. */
14188 uint8_t led3_id;
14189 /* The requested state of the LED #3. */
14190 uint8_t led3_state;
14191 /* Default state of the LED */
14192 #define HWRM_PORT_LED_CFG_INPUT_LED3_STATE_DEFAULT UINT32_C(0x0)
14193 /* Off */
14194 #define HWRM_PORT_LED_CFG_INPUT_LED3_STATE_OFF UINT32_C(0x1)
14195 /* On */
14196 #define HWRM_PORT_LED_CFG_INPUT_LED3_STATE_ON UINT32_C(0x2)
14197 /* Blink */
14198 #define HWRM_PORT_LED_CFG_INPUT_LED3_STATE_BLINK UINT32_C(0x3)
14199 /* Blink Alternately */
14200 #define HWRM_PORT_LED_CFG_INPUT_LED3_STATE_BLINKALT UINT32_C(0x4)
14201 #define HWRM_PORT_LED_CFG_INPUT_LED3_STATE_LAST \
14202 HWRM_PORT_LED_CFG_INPUT_LED3_STATE_BLINKALT
14203 /* The requested color of LED #3. */
14204 uint8_t led3_color;
14205 /* Default */
14206 #define HWRM_PORT_LED_CFG_INPUT_LED3_COLOR_DEFAULT UINT32_C(0x0)
14207 /* Amber */
14208 #define HWRM_PORT_LED_CFG_INPUT_LED3_COLOR_AMBER UINT32_C(0x1)
14209 /* Green */
14210 #define HWRM_PORT_LED_CFG_INPUT_LED3_COLOR_GREEN UINT32_C(0x2)
14211 /* Green or Amber */
14212 #define HWRM_PORT_LED_CFG_INPUT_LED3_COLOR_GREENAMBER UINT32_C(0x3)
14213 #define HWRM_PORT_LED_CFG_INPUT_LED3_COLOR_LAST \
14214 HWRM_PORT_LED_CFG_INPUT_LED3_COLOR_GREENAMBER
14215 uint8_t unused_3;
14216 /*
14217 * If the LED #3 state is "blink" or "blinkalt", then
14218 * this field represents the requested time in milliseconds
14219 * to keep LED on between cycles.
14220 */
14221 uint16_t led3_blink_on;
14222 /*
14223 * If the LED #3 state is "blink" or "blinkalt", then
14224 * this field represents the requested time in milliseconds
14225 * to keep LED off between cycles.
14226 */
14227 uint16_t led3_blink_off;
14228 /*
14229 * An identifier for the group of LEDs that LED #3 belongs
14230 * to.
14231 * If set to 0, then the LED #3 shall not be grouped and
14232 * shall be treated as an individual resource.
14233 * For all other non-zero values of this field, LED #3 shall
14234 * be grouped together with the LEDs with the same group ID
14235 * value.
14236 */
14237 uint8_t led3_group_id;
14238 /* Reserved field. */
14239 uint8_t rsvd3;
14240} __attribute__((packed));
14241
14242/* hwrm_port_led_cfg_output (size:128b/16B) */
14243struct hwrm_port_led_cfg_output {
14244 /* The specific error status for the command. */
14245 uint16_t error_code;
14246 /* The HWRM command request type. */
14247 uint16_t req_type;
14248 /* The sequence ID from the original command. */
14249 uint16_t seq_id;
14250 /* The length of the response data in number of bytes. */
14251 uint16_t resp_len;
14252 uint8_t unused_0[7];
14253 /*
14254 * This field is used in Output records to indicate that the output
14255 * is completely written to RAM. This field should be read as '1'
14256 * to indicate that the output has been completely written.
14257 * When writing a command completion or response to an internal processor,
14258 * the order of writes has to be such that this field is written last.
14259 */
14260 uint8_t valid;
14261} __attribute__((packed));
14262
14263/**********************
14264 * hwrm_port_led_qcfg *
14265 **********************/
14266
14267
14268/* hwrm_port_led_qcfg_input (size:192b/24B) */
14269struct hwrm_port_led_qcfg_input {
14270 /* The HWRM command request type. */
14271 uint16_t req_type;
14272 /*
14273 * The completion ring to send the completion event on. This should
14274 * be the NQ ID returned from the `nq_alloc` HWRM command.
14275 */
14276 uint16_t cmpl_ring;
14277 /*
14278 * The sequence ID is used by the driver for tracking multiple
14279 * commands. This ID is treated as opaque data by the firmware and
14280 * the value is returned in the `hwrm_resp_hdr` upon completion.
14281 */
14282 uint16_t seq_id;
14283 /*
14284 * The target ID of the command:
14285 * * 0x0-0xFFF8 - The function ID
14286 * * 0xFFF8-0xFFFE - Reserved for internal processors
14287 * * 0xFFFF - HWRM
14288 */
14289 uint16_t target_id;
14290 /*
14291 * A physical address pointer pointing to a host buffer that the
14292 * command's response data will be written. This can be either a host
14293 * physical address (HPA) or a guest physical address (GPA) and must
14294 * point to a physically contiguous block of memory.
14295 */
14296 uint64_t resp_addr;
14297 /* Port ID of port whose LED configuration is being queried. */
14298 uint16_t port_id;
14299 uint8_t unused_0[6];
14300} __attribute__((packed));
14301
14302/* hwrm_port_led_qcfg_output (size:448b/56B) */
14303struct hwrm_port_led_qcfg_output {
14304 /* The specific error status for the command. */
14305 uint16_t error_code;
14306 /* The HWRM command request type. */
14307 uint16_t req_type;
14308 /* The sequence ID from the original command. */
14309 uint16_t seq_id;
14310 /* The length of the response data in number of bytes. */
14311 uint16_t resp_len;
14312 /*
14313 * The number of LEDs that are configured on this port.
14314 * Up to 4 LEDs can be returned in the response.
14315 */
14316 uint8_t num_leds;
14317 /* An identifier for the LED #0. */
14318 uint8_t led0_id;
14319 /* The type of LED #0. */
14320 uint8_t led0_type;
14321 /* Speed LED */
14322 #define HWRM_PORT_LED_QCFG_OUTPUT_LED0_TYPE_SPEED UINT32_C(0x0)
14323 /* Activity LED */
14324 #define HWRM_PORT_LED_QCFG_OUTPUT_LED0_TYPE_ACTIVITY UINT32_C(0x1)
14325 /* Invalid */
14326 #define HWRM_PORT_LED_QCFG_OUTPUT_LED0_TYPE_INVALID UINT32_C(0xff)
14327 #define HWRM_PORT_LED_QCFG_OUTPUT_LED0_TYPE_LAST \
14328 HWRM_PORT_LED_QCFG_OUTPUT_LED0_TYPE_INVALID
14329 /* The current state of the LED #0. */
14330 uint8_t led0_state;
14331 /* Default state of the LED */
14332 #define HWRM_PORT_LED_QCFG_OUTPUT_LED0_STATE_DEFAULT UINT32_C(0x0)
14333 /* Off */
14334 #define HWRM_PORT_LED_QCFG_OUTPUT_LED0_STATE_OFF UINT32_C(0x1)
14335 /* On */
14336 #define HWRM_PORT_LED_QCFG_OUTPUT_LED0_STATE_ON UINT32_C(0x2)
14337 /* Blink */
14338 #define HWRM_PORT_LED_QCFG_OUTPUT_LED0_STATE_BLINK UINT32_C(0x3)
14339 /* Blink Alternately */
14340 #define HWRM_PORT_LED_QCFG_OUTPUT_LED0_STATE_BLINKALT UINT32_C(0x4)
14341 #define HWRM_PORT_LED_QCFG_OUTPUT_LED0_STATE_LAST \
14342 HWRM_PORT_LED_QCFG_OUTPUT_LED0_STATE_BLINKALT
14343 /* The color of LED #0. */
14344 uint8_t led0_color;
14345 /* Default */
14346 #define HWRM_PORT_LED_QCFG_OUTPUT_LED0_COLOR_DEFAULT UINT32_C(0x0)
14347 /* Amber */
14348 #define HWRM_PORT_LED_QCFG_OUTPUT_LED0_COLOR_AMBER UINT32_C(0x1)
14349 /* Green */
14350 #define HWRM_PORT_LED_QCFG_OUTPUT_LED0_COLOR_GREEN UINT32_C(0x2)
14351 /* Green or Amber */
14352 #define HWRM_PORT_LED_QCFG_OUTPUT_LED0_COLOR_GREENAMBER UINT32_C(0x3)
14353 #define HWRM_PORT_LED_QCFG_OUTPUT_LED0_COLOR_LAST \
14354 HWRM_PORT_LED_QCFG_OUTPUT_LED0_COLOR_GREENAMBER
14355 uint8_t unused_0;
14356 /*
14357 * If the LED #0 state is "blink" or "blinkalt", then
14358 * this field represents the requested time in milliseconds
14359 * to keep LED on between cycles.
14360 */
14361 uint16_t led0_blink_on;
14362 /*
14363 * If the LED #0 state is "blink" or "blinkalt", then
14364 * this field represents the requested time in milliseconds
14365 * to keep LED off between cycles.
14366 */
14367 uint16_t led0_blink_off;
14368 /*
14369 * An identifier for the group of LEDs that LED #0 belongs
14370 * to.
14371 * If set to 0, then the LED #0 is not grouped.
14372 * For all other non-zero values of this field, LED #0 is
14373 * grouped together with the LEDs with the same group ID
14374 * value.
14375 */
14376 uint8_t led0_group_id;
14377 /* An identifier for the LED #1. */
14378 uint8_t led1_id;
14379 /* The type of LED #1. */
14380 uint8_t led1_type;
14381 /* Speed LED */
14382 #define HWRM_PORT_LED_QCFG_OUTPUT_LED1_TYPE_SPEED UINT32_C(0x0)
14383 /* Activity LED */
14384 #define HWRM_PORT_LED_QCFG_OUTPUT_LED1_TYPE_ACTIVITY UINT32_C(0x1)
14385 /* Invalid */
14386 #define HWRM_PORT_LED_QCFG_OUTPUT_LED1_TYPE_INVALID UINT32_C(0xff)
14387 #define HWRM_PORT_LED_QCFG_OUTPUT_LED1_TYPE_LAST \
14388 HWRM_PORT_LED_QCFG_OUTPUT_LED1_TYPE_INVALID
14389 /* The current state of the LED #1. */
14390 uint8_t led1_state;
14391 /* Default state of the LED */
14392 #define HWRM_PORT_LED_QCFG_OUTPUT_LED1_STATE_DEFAULT UINT32_C(0x0)
14393 /* Off */
14394 #define HWRM_PORT_LED_QCFG_OUTPUT_LED1_STATE_OFF UINT32_C(0x1)
14395 /* On */
14396 #define HWRM_PORT_LED_QCFG_OUTPUT_LED1_STATE_ON UINT32_C(0x2)
14397 /* Blink */
14398 #define HWRM_PORT_LED_QCFG_OUTPUT_LED1_STATE_BLINK UINT32_C(0x3)
14399 /* Blink Alternately */
14400 #define HWRM_PORT_LED_QCFG_OUTPUT_LED1_STATE_BLINKALT UINT32_C(0x4)
14401 #define HWRM_PORT_LED_QCFG_OUTPUT_LED1_STATE_LAST \
14402 HWRM_PORT_LED_QCFG_OUTPUT_LED1_STATE_BLINKALT
14403 /* The color of LED #1. */
14404 uint8_t led1_color;
14405 /* Default */
14406 #define HWRM_PORT_LED_QCFG_OUTPUT_LED1_COLOR_DEFAULT UINT32_C(0x0)
14407 /* Amber */
14408 #define HWRM_PORT_LED_QCFG_OUTPUT_LED1_COLOR_AMBER UINT32_C(0x1)
14409 /* Green */
14410 #define HWRM_PORT_LED_QCFG_OUTPUT_LED1_COLOR_GREEN UINT32_C(0x2)
14411 /* Green or Amber */
14412 #define HWRM_PORT_LED_QCFG_OUTPUT_LED1_COLOR_GREENAMBER UINT32_C(0x3)
14413 #define HWRM_PORT_LED_QCFG_OUTPUT_LED1_COLOR_LAST \
14414 HWRM_PORT_LED_QCFG_OUTPUT_LED1_COLOR_GREENAMBER
14415 uint8_t unused_1;
14416 /*
14417 * If the LED #1 state is "blink" or "blinkalt", then
14418 * this field represents the requested time in milliseconds
14419 * to keep LED on between cycles.
14420 */
14421 uint16_t led1_blink_on;
14422 /*
14423 * If the LED #1 state is "blink" or "blinkalt", then
14424 * this field represents the requested time in milliseconds
14425 * to keep LED off between cycles.
14426 */
14427 uint16_t led1_blink_off;
14428 /*
14429 * An identifier for the group of LEDs that LED #1 belongs
14430 * to.
14431 * If set to 0, then the LED #1 is not grouped.
14432 * For all other non-zero values of this field, LED #1 is
14433 * grouped together with the LEDs with the same group ID
14434 * value.
14435 */
14436 uint8_t led1_group_id;
14437 /* An identifier for the LED #2. */
14438 uint8_t led2_id;
14439 /* The type of LED #2. */
14440 uint8_t led2_type;
14441 /* Speed LED */
14442 #define HWRM_PORT_LED_QCFG_OUTPUT_LED2_TYPE_SPEED UINT32_C(0x0)
14443 /* Activity LED */
14444 #define HWRM_PORT_LED_QCFG_OUTPUT_LED2_TYPE_ACTIVITY UINT32_C(0x1)
14445 /* Invalid */
14446 #define HWRM_PORT_LED_QCFG_OUTPUT_LED2_TYPE_INVALID UINT32_C(0xff)
14447 #define HWRM_PORT_LED_QCFG_OUTPUT_LED2_TYPE_LAST \
14448 HWRM_PORT_LED_QCFG_OUTPUT_LED2_TYPE_INVALID
14449 /* The current state of the LED #2. */
14450 uint8_t led2_state;
14451 /* Default state of the LED */
14452 #define HWRM_PORT_LED_QCFG_OUTPUT_LED2_STATE_DEFAULT UINT32_C(0x0)
14453 /* Off */
14454 #define HWRM_PORT_LED_QCFG_OUTPUT_LED2_STATE_OFF UINT32_C(0x1)
14455 /* On */
14456 #define HWRM_PORT_LED_QCFG_OUTPUT_LED2_STATE_ON UINT32_C(0x2)
14457 /* Blink */
14458 #define HWRM_PORT_LED_QCFG_OUTPUT_LED2_STATE_BLINK UINT32_C(0x3)
14459 /* Blink Alternately */
14460 #define HWRM_PORT_LED_QCFG_OUTPUT_LED2_STATE_BLINKALT UINT32_C(0x4)
14461 #define HWRM_PORT_LED_QCFG_OUTPUT_LED2_STATE_LAST \
14462 HWRM_PORT_LED_QCFG_OUTPUT_LED2_STATE_BLINKALT
14463 /* The color of LED #2. */
14464 uint8_t led2_color;
14465 /* Default */
14466 #define HWRM_PORT_LED_QCFG_OUTPUT_LED2_COLOR_DEFAULT UINT32_C(0x0)
14467 /* Amber */
14468 #define HWRM_PORT_LED_QCFG_OUTPUT_LED2_COLOR_AMBER UINT32_C(0x1)
14469 /* Green */
14470 #define HWRM_PORT_LED_QCFG_OUTPUT_LED2_COLOR_GREEN UINT32_C(0x2)
14471 /* Green or Amber */
14472 #define HWRM_PORT_LED_QCFG_OUTPUT_LED2_COLOR_GREENAMBER UINT32_C(0x3)
14473 #define HWRM_PORT_LED_QCFG_OUTPUT_LED2_COLOR_LAST \
14474 HWRM_PORT_LED_QCFG_OUTPUT_LED2_COLOR_GREENAMBER
14475 uint8_t unused_2;
14476 /*
14477 * If the LED #2 state is "blink" or "blinkalt", then
14478 * this field represents the requested time in milliseconds
14479 * to keep LED on between cycles.
14480 */
14481 uint16_t led2_blink_on;
14482 /*
14483 * If the LED #2 state is "blink" or "blinkalt", then
14484 * this field represents the requested time in milliseconds
14485 * to keep LED off between cycles.
14486 */
14487 uint16_t led2_blink_off;
14488 /*
14489 * An identifier for the group of LEDs that LED #2 belongs
14490 * to.
14491 * If set to 0, then the LED #2 is not grouped.
14492 * For all other non-zero values of this field, LED #2 is
14493 * grouped together with the LEDs with the same group ID
14494 * value.
14495 */
14496 uint8_t led2_group_id;
14497 /* An identifier for the LED #3. */
14498 uint8_t led3_id;
14499 /* The type of LED #3. */
14500 uint8_t led3_type;
14501 /* Speed LED */
14502 #define HWRM_PORT_LED_QCFG_OUTPUT_LED3_TYPE_SPEED UINT32_C(0x0)
14503 /* Activity LED */
14504 #define HWRM_PORT_LED_QCFG_OUTPUT_LED3_TYPE_ACTIVITY UINT32_C(0x1)
14505 /* Invalid */
14506 #define HWRM_PORT_LED_QCFG_OUTPUT_LED3_TYPE_INVALID UINT32_C(0xff)
14507 #define HWRM_PORT_LED_QCFG_OUTPUT_LED3_TYPE_LAST \
14508 HWRM_PORT_LED_QCFG_OUTPUT_LED3_TYPE_INVALID
14509 /* The current state of the LED #3. */
14510 uint8_t led3_state;
14511 /* Default state of the LED */
14512 #define HWRM_PORT_LED_QCFG_OUTPUT_LED3_STATE_DEFAULT UINT32_C(0x0)
14513 /* Off */
14514 #define HWRM_PORT_LED_QCFG_OUTPUT_LED3_STATE_OFF UINT32_C(0x1)
14515 /* On */
14516 #define HWRM_PORT_LED_QCFG_OUTPUT_LED3_STATE_ON UINT32_C(0x2)
14517 /* Blink */
14518 #define HWRM_PORT_LED_QCFG_OUTPUT_LED3_STATE_BLINK UINT32_C(0x3)
14519 /* Blink Alternately */
14520 #define HWRM_PORT_LED_QCFG_OUTPUT_LED3_STATE_BLINKALT UINT32_C(0x4)
14521 #define HWRM_PORT_LED_QCFG_OUTPUT_LED3_STATE_LAST \
14522 HWRM_PORT_LED_QCFG_OUTPUT_LED3_STATE_BLINKALT
14523 /* The color of LED #3. */
14524 uint8_t led3_color;
14525 /* Default */
14526 #define HWRM_PORT_LED_QCFG_OUTPUT_LED3_COLOR_DEFAULT UINT32_C(0x0)
14527 /* Amber */
14528 #define HWRM_PORT_LED_QCFG_OUTPUT_LED3_COLOR_AMBER UINT32_C(0x1)
14529 /* Green */
14530 #define HWRM_PORT_LED_QCFG_OUTPUT_LED3_COLOR_GREEN UINT32_C(0x2)
14531 /* Green or Amber */
14532 #define HWRM_PORT_LED_QCFG_OUTPUT_LED3_COLOR_GREENAMBER UINT32_C(0x3)
14533 #define HWRM_PORT_LED_QCFG_OUTPUT_LED3_COLOR_LAST \
14534 HWRM_PORT_LED_QCFG_OUTPUT_LED3_COLOR_GREENAMBER
14535 uint8_t unused_3;
14536 /*
14537 * If the LED #3 state is "blink" or "blinkalt", then
14538 * this field represents the requested time in milliseconds
14539 * to keep LED on between cycles.
14540 */
14541 uint16_t led3_blink_on;
14542 /*
14543 * If the LED #3 state is "blink" or "blinkalt", then
14544 * this field represents the requested time in milliseconds
14545 * to keep LED off between cycles.
14546 */
14547 uint16_t led3_blink_off;
14548 /*
14549 * An identifier for the group of LEDs that LED #3 belongs
14550 * to.
14551 * If set to 0, then the LED #3 is not grouped.
14552 * For all other non-zero values of this field, LED #3 is
14553 * grouped together with the LEDs with the same group ID
14554 * value.
14555 */
14556 uint8_t led3_group_id;
14557 uint8_t unused_4[6];
14558 /*
14559 * This field is used in Output records to indicate that the output
14560 * is completely written to RAM. This field should be read as '1'
14561 * to indicate that the output has been completely written.
14562 * When writing a command completion or response to an internal processor,
14563 * the order of writes has to be such that this field is written last.
14564 */
14565 uint8_t valid;
14566} __attribute__((packed));
14567
14568/***********************
14569 * hwrm_port_led_qcaps *
14570 ***********************/
14571
14572
14573/* hwrm_port_led_qcaps_input (size:192b/24B) */
14574struct hwrm_port_led_qcaps_input {
14575 /* The HWRM command request type. */
14576 uint16_t req_type;
14577 /*
14578 * The completion ring to send the completion event on. This should
14579 * be the NQ ID returned from the `nq_alloc` HWRM command.
14580 */
14581 uint16_t cmpl_ring;
14582 /*
14583 * The sequence ID is used by the driver for tracking multiple
14584 * commands. This ID is treated as opaque data by the firmware and
14585 * the value is returned in the `hwrm_resp_hdr` upon completion.
14586 */
14587 uint16_t seq_id;
14588 /*
14589 * The target ID of the command:
14590 * * 0x0-0xFFF8 - The function ID
14591 * * 0xFFF8-0xFFFE - Reserved for internal processors
14592 * * 0xFFFF - HWRM
14593 */
14594 uint16_t target_id;
14595 /*
14596 * A physical address pointer pointing to a host buffer that the
14597 * command's response data will be written. This can be either a host
14598 * physical address (HPA) or a guest physical address (GPA) and must
14599 * point to a physically contiguous block of memory.
14600 */
14601 uint64_t resp_addr;
14602 /* Port ID of port whose LED configuration is being queried. */
14603 uint16_t port_id;
14604 uint8_t unused_0[6];
14605} __attribute__((packed));
14606
14607/* hwrm_port_led_qcaps_output (size:384b/48B) */
14608struct hwrm_port_led_qcaps_output {
14609 /* The specific error status for the command. */
14610 uint16_t error_code;
14611 /* The HWRM command request type. */
14612 uint16_t req_type;
14613 /* The sequence ID from the original command. */
14614 uint16_t seq_id;
14615 /* The length of the response data in number of bytes. */
14616 uint16_t resp_len;
14617 /*
14618 * The number of LEDs that are configured on this port.
14619 * Up to 4 LEDs can be returned in the response.
14620 */
14621 uint8_t num_leds;
14622 /* Reserved for future use. */
14623 uint8_t unused[3];
14624 /* An identifier for the LED #0. */
14625 uint8_t led0_id;
14626 /* The type of LED #0. */
14627 uint8_t led0_type;
14628 /* Speed LED */
14629 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_TYPE_SPEED UINT32_C(0x0)
14630 /* Activity LED */
14631 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_TYPE_ACTIVITY UINT32_C(0x1)
14632 /* Invalid */
14633 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_TYPE_INVALID UINT32_C(0xff)
14634 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_TYPE_LAST \
14635 HWRM_PORT_LED_QCAPS_OUTPUT_LED0_TYPE_INVALID
14636 /*
14637 * An identifier for the group of LEDs that LED #0 belongs
14638 * to.
14639 * If set to 0, then the LED #0 cannot be grouped.
14640 * For all other non-zero values of this field, LED #0 is
14641 * grouped together with the LEDs with the same group ID
14642 * value.
14643 */
14644 uint8_t led0_group_id;
14645 uint8_t unused_0;
14646 /* The states supported by LED #0. */
14647 uint16_t led0_state_caps;
14648 /*
14649 * If set to 1, this LED is enabled.
14650 * If set to 0, this LED is disabled.
14651 */
14652 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_STATE_CAPS_ENABLED \
14653 UINT32_C(0x1)
14654 /*
14655 * If set to 1, off state is supported on this LED.
14656 * If set to 0, off state is not supported on this LED.
14657 */
14658 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_STATE_CAPS_OFF_SUPPORTED \
14659 UINT32_C(0x2)
14660 /*
14661 * If set to 1, on state is supported on this LED.
14662 * If set to 0, on state is not supported on this LED.
14663 */
14664 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_STATE_CAPS_ON_SUPPORTED \
14665 UINT32_C(0x4)
14666 /*
14667 * If set to 1, blink state is supported on this LED.
14668 * If set to 0, blink state is not supported on this LED.
14669 */
14670 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_STATE_CAPS_BLINK_SUPPORTED \
14671 UINT32_C(0x8)
14672 /*
14673 * If set to 1, blink_alt state is supported on this LED.
14674 * If set to 0, blink_alt state is not supported on this LED.
14675 */
14676 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_STATE_CAPS_BLINK_ALT_SUPPORTED \
14677 UINT32_C(0x10)
14678 /* The colors supported by LED #0. */
14679 uint16_t led0_color_caps;
14680 /* reserved. */
14681 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_COLOR_CAPS_RSVD \
14682 UINT32_C(0x1)
14683 /*
14684 * If set to 1, Amber color is supported on this LED.
14685 * If set to 0, Amber color is not supported on this LED.
14686 */
14687 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_COLOR_CAPS_AMBER_SUPPORTED \
14688 UINT32_C(0x2)
14689 /*
14690 * If set to 1, Green color is supported on this LED.
14691 * If set to 0, Green color is not supported on this LED.
14692 */
14693 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED0_COLOR_CAPS_GREEN_SUPPORTED \
14694 UINT32_C(0x4)
14695 /* An identifier for the LED #1. */
14696 uint8_t led1_id;
14697 /* The type of LED #1. */
14698 uint8_t led1_type;
14699 /* Speed LED */
14700 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_TYPE_SPEED UINT32_C(0x0)
14701 /* Activity LED */
14702 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_TYPE_ACTIVITY UINT32_C(0x1)
14703 /* Invalid */
14704 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_TYPE_INVALID UINT32_C(0xff)
14705 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_TYPE_LAST \
14706 HWRM_PORT_LED_QCAPS_OUTPUT_LED1_TYPE_INVALID
14707 /*
14708 * An identifier for the group of LEDs that LED #1 belongs
14709 * to.
14710 * If set to 0, then the LED #0 cannot be grouped.
14711 * For all other non-zero values of this field, LED #0 is
14712 * grouped together with the LEDs with the same group ID
14713 * value.
14714 */
14715 uint8_t led1_group_id;
14716 uint8_t unused_1;
14717 /* The states supported by LED #1. */
14718 uint16_t led1_state_caps;
14719 /*
14720 * If set to 1, this LED is enabled.
14721 * If set to 0, this LED is disabled.
14722 */
14723 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_STATE_CAPS_ENABLED \
14724 UINT32_C(0x1)
14725 /*
14726 * If set to 1, off state is supported on this LED.
14727 * If set to 0, off state is not supported on this LED.
14728 */
14729 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_STATE_CAPS_OFF_SUPPORTED \
14730 UINT32_C(0x2)
14731 /*
14732 * If set to 1, on state is supported on this LED.
14733 * If set to 0, on state is not supported on this LED.
14734 */
14735 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_STATE_CAPS_ON_SUPPORTED \
14736 UINT32_C(0x4)
14737 /*
14738 * If set to 1, blink state is supported on this LED.
14739 * If set to 0, blink state is not supported on this LED.
14740 */
14741 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_STATE_CAPS_BLINK_SUPPORTED \
14742 UINT32_C(0x8)
14743 /*
14744 * If set to 1, blink_alt state is supported on this LED.
14745 * If set to 0, blink_alt state is not supported on this LED.
14746 */
14747 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_STATE_CAPS_BLINK_ALT_SUPPORTED \
14748 UINT32_C(0x10)
14749 /* The colors supported by LED #1. */
14750 uint16_t led1_color_caps;
14751 /* reserved. */
14752 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_COLOR_CAPS_RSVD \
14753 UINT32_C(0x1)
14754 /*
14755 * If set to 1, Amber color is supported on this LED.
14756 * If set to 0, Amber color is not supported on this LED.
14757 */
14758 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_COLOR_CAPS_AMBER_SUPPORTED \
14759 UINT32_C(0x2)
14760 /*
14761 * If set to 1, Green color is supported on this LED.
14762 * If set to 0, Green color is not supported on this LED.
14763 */
14764 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED1_COLOR_CAPS_GREEN_SUPPORTED \
14765 UINT32_C(0x4)
14766 /* An identifier for the LED #2. */
14767 uint8_t led2_id;
14768 /* The type of LED #2. */
14769 uint8_t led2_type;
14770 /* Speed LED */
14771 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_TYPE_SPEED UINT32_C(0x0)
14772 /* Activity LED */
14773 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_TYPE_ACTIVITY UINT32_C(0x1)
14774 /* Invalid */
14775 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_TYPE_INVALID UINT32_C(0xff)
14776 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_TYPE_LAST \
14777 HWRM_PORT_LED_QCAPS_OUTPUT_LED2_TYPE_INVALID
14778 /*
14779 * An identifier for the group of LEDs that LED #0 belongs
14780 * to.
14781 * If set to 0, then the LED #0 cannot be grouped.
14782 * For all other non-zero values of this field, LED #0 is
14783 * grouped together with the LEDs with the same group ID
14784 * value.
14785 */
14786 uint8_t led2_group_id;
14787 uint8_t unused_2;
14788 /* The states supported by LED #2. */
14789 uint16_t led2_state_caps;
14790 /*
14791 * If set to 1, this LED is enabled.
14792 * If set to 0, this LED is disabled.
14793 */
14794 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_STATE_CAPS_ENABLED \
14795 UINT32_C(0x1)
14796 /*
14797 * If set to 1, off state is supported on this LED.
14798 * If set to 0, off state is not supported on this LED.
14799 */
14800 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_STATE_CAPS_OFF_SUPPORTED \
14801 UINT32_C(0x2)
14802 /*
14803 * If set to 1, on state is supported on this LED.
14804 * If set to 0, on state is not supported on this LED.
14805 */
14806 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_STATE_CAPS_ON_SUPPORTED \
14807 UINT32_C(0x4)
14808 /*
14809 * If set to 1, blink state is supported on this LED.
14810 * If set to 0, blink state is not supported on this LED.
14811 */
14812 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_STATE_CAPS_BLINK_SUPPORTED \
14813 UINT32_C(0x8)
14814 /*
14815 * If set to 1, blink_alt state is supported on this LED.
14816 * If set to 0, blink_alt state is not supported on this LED.
14817 */
14818 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_STATE_CAPS_BLINK_ALT_SUPPORTED \
14819 UINT32_C(0x10)
14820 /* The colors supported by LED #2. */
14821 uint16_t led2_color_caps;
14822 /* reserved. */
14823 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_COLOR_CAPS_RSVD \
14824 UINT32_C(0x1)
14825 /*
14826 * If set to 1, Amber color is supported on this LED.
14827 * If set to 0, Amber color is not supported on this LED.
14828 */
14829 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_COLOR_CAPS_AMBER_SUPPORTED \
14830 UINT32_C(0x2)
14831 /*
14832 * If set to 1, Green color is supported on this LED.
14833 * If set to 0, Green color is not supported on this LED.
14834 */
14835 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED2_COLOR_CAPS_GREEN_SUPPORTED \
14836 UINT32_C(0x4)
14837 /* An identifier for the LED #3. */
14838 uint8_t led3_id;
14839 /* The type of LED #3. */
14840 uint8_t led3_type;
14841 /* Speed LED */
14842 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_TYPE_SPEED UINT32_C(0x0)
14843 /* Activity LED */
14844 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_TYPE_ACTIVITY UINT32_C(0x1)
14845 /* Invalid */
14846 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_TYPE_INVALID UINT32_C(0xff)
14847 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_TYPE_LAST \
14848 HWRM_PORT_LED_QCAPS_OUTPUT_LED3_TYPE_INVALID
14849 /*
14850 * An identifier for the group of LEDs that LED #3 belongs
14851 * to.
14852 * If set to 0, then the LED #0 cannot be grouped.
14853 * For all other non-zero values of this field, LED #0 is
14854 * grouped together with the LEDs with the same group ID
14855 * value.
14856 */
14857 uint8_t led3_group_id;
14858 uint8_t unused_3;
14859 /* The states supported by LED #3. */
14860 uint16_t led3_state_caps;
14861 /*
14862 * If set to 1, this LED is enabled.
14863 * If set to 0, this LED is disabled.
14864 */
14865 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_STATE_CAPS_ENABLED \
14866 UINT32_C(0x1)
14867 /*
14868 * If set to 1, off state is supported on this LED.
14869 * If set to 0, off state is not supported on this LED.
14870 */
14871 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_STATE_CAPS_OFF_SUPPORTED \
14872 UINT32_C(0x2)
14873 /*
14874 * If set to 1, on state is supported on this LED.
14875 * If set to 0, on state is not supported on this LED.
14876 */
14877 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_STATE_CAPS_ON_SUPPORTED \
14878 UINT32_C(0x4)
14879 /*
14880 * If set to 1, blink state is supported on this LED.
14881 * If set to 0, blink state is not supported on this LED.
14882 */
14883 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_STATE_CAPS_BLINK_SUPPORTED \
14884 UINT32_C(0x8)
14885 /*
14886 * If set to 1, blink_alt state is supported on this LED.
14887 * If set to 0, blink_alt state is not supported on this LED.
14888 */
14889 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_STATE_CAPS_BLINK_ALT_SUPPORTED \
14890 UINT32_C(0x10)
14891 /* The colors supported by LED #3. */
14892 uint16_t led3_color_caps;
14893 /* reserved. */
14894 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_COLOR_CAPS_RSVD \
14895 UINT32_C(0x1)
14896 /*
14897 * If set to 1, Amber color is supported on this LED.
14898 * If set to 0, Amber color is not supported on this LED.
14899 */
14900 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_COLOR_CAPS_AMBER_SUPPORTED \
14901 UINT32_C(0x2)
14902 /*
14903 * If set to 1, Green color is supported on this LED.
14904 * If set to 0, Green color is not supported on this LED.
14905 */
14906 #define HWRM_PORT_LED_QCAPS_OUTPUT_LED3_COLOR_CAPS_GREEN_SUPPORTED \
14907 UINT32_C(0x4)
14908 uint8_t unused_4[3];
14909 /*
14910 * This field is used in Output records to indicate that the output
14911 * is completely written to RAM. This field should be read as '1'
14912 * to indicate that the output has been completely written.
14913 * When writing a command completion or response to an internal processor,
14914 * the order of writes has to be such that this field is written last.
14915 */
14916 uint8_t valid;
14917} __attribute__((packed));
14918
14919/***********************
14920 * hwrm_queue_qportcfg *
14921 ***********************/
14922
14923
14924/* hwrm_queue_qportcfg_input (size:192b/24B) */
14925struct hwrm_queue_qportcfg_input {
14926 /* The HWRM command request type. */
14927 uint16_t req_type;
14928 /*
14929 * The completion ring to send the completion event on. This should
14930 * be the NQ ID returned from the `nq_alloc` HWRM command.
14931 */
14932 uint16_t cmpl_ring;
14933 /*
14934 * The sequence ID is used by the driver for tracking multiple
14935 * commands. This ID is treated as opaque data by the firmware and
14936 * the value is returned in the `hwrm_resp_hdr` upon completion.
14937 */
14938 uint16_t seq_id;
14939 /*
14940 * The target ID of the command:
14941 * * 0x0-0xFFF8 - The function ID
14942 * * 0xFFF8-0xFFFE - Reserved for internal processors
14943 * * 0xFFFF - HWRM
14944 */
14945 uint16_t target_id;
14946 /*
14947 * A physical address pointer pointing to a host buffer that the
14948 * command's response data will be written. This can be either a host
14949 * physical address (HPA) or a guest physical address (GPA) and must
14950 * point to a physically contiguous block of memory.
14951 */
14952 uint64_t resp_addr;
14953 uint32_t flags;
14954 /*
14955 * Enumeration denoting the RX, TX type of the resource.
14956 * This enumeration is used for resources that are similar for both
14957 * TX and RX paths of the chip.
14958 */
14959 #define HWRM_QUEUE_QPORTCFG_INPUT_FLAGS_PATH UINT32_C(0x1)
14960 /* tx path */
14961 #define HWRM_QUEUE_QPORTCFG_INPUT_FLAGS_PATH_TX UINT32_C(0x0)
14962 /* rx path */
14963 #define HWRM_QUEUE_QPORTCFG_INPUT_FLAGS_PATH_RX UINT32_C(0x1)
14964 #define HWRM_QUEUE_QPORTCFG_INPUT_FLAGS_PATH_LAST \
14965 HWRM_QUEUE_QPORTCFG_INPUT_FLAGS_PATH_RX
14966 /*
14967 * Port ID of port for which the queue configuration is being
14968 * queried. This field is only required when sent by IPC.
14969 */
14970 uint16_t port_id;
14971 /*
14972 * Drivers will set this capability when it can use
14973 * queue_idx_service_profile to map the queues to application.
14974 */
14975 uint8_t drv_qmap_cap;
14976 /* disabled */
14977 #define HWRM_QUEUE_QPORTCFG_INPUT_DRV_QMAP_CAP_DISABLED UINT32_C(0x0)
14978 /* enabled */
14979 #define HWRM_QUEUE_QPORTCFG_INPUT_DRV_QMAP_CAP_ENABLED UINT32_C(0x1)
14980 #define HWRM_QUEUE_QPORTCFG_INPUT_DRV_QMAP_CAP_LAST \
14981 HWRM_QUEUE_QPORTCFG_INPUT_DRV_QMAP_CAP_ENABLED
14982 uint8_t unused_0;
14983} __attribute__((packed));
14984
14985/* hwrm_queue_qportcfg_output (size:256b/32B) */
14986struct hwrm_queue_qportcfg_output {
14987 /* The specific error status for the command. */
14988 uint16_t error_code;
14989 /* The HWRM command request type. */
14990 uint16_t req_type;
14991 /* The sequence ID from the original command. */
14992 uint16_t seq_id;
14993 /* The length of the response data in number of bytes. */
14994 uint16_t resp_len;
14995 /*
14996 * The maximum number of queues that can be configured on this
14997 * port.
14998 * Valid values range from 1 through 8.
14999 */
15000 uint8_t max_configurable_queues;
15001 /*
15002 * The maximum number of lossless queues that can be configured
15003 * on this port.
15004 * Valid values range from 0 through 8.
15005 */
15006 uint8_t max_configurable_lossless_queues;
15007 /*
15008 * Bitmask indicating which queues can be configured by the
15009 * hwrm_queue_cfg command.
15010 *
15011 * Each bit represents a specific queue where bit 0 represents
15012 * queue 0 and bit 7 represents queue 7.
15013 * # A value of 0 indicates that the queue is not configurable
15014 * by the hwrm_queue_cfg command.
15015 * # A value of 1 indicates that the queue is configurable.
15016 * # A hwrm_queue_cfg command shall return error when trying to
15017 * configure a queue not configurable.
15018 */
15019 uint8_t queue_cfg_allowed;
15020 /* Information about queue configuration. */
15021 uint8_t queue_cfg_info;
15022 /*
15023 * If this flag is set to '1', then the queues are
15024 * configured asymmetrically on TX and RX sides.
15025 * If this flag is set to '0', then the queues are
15026 * configured symmetrically on TX and RX sides. For
15027 * symmetric configuration, the queue configuration
15028 * including queue ids and service profiles on the
15029 * TX side is the same as the corresponding queue
15030 * configuration on the RX side.
15031 */
15032 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_CFG_INFO_ASYM_CFG \
15033 UINT32_C(0x1)
15034 /*
15035 * Bitmask indicating which queues can be configured by the
15036 * hwrm_queue_pfcenable_cfg command.
15037 *
15038 * Each bit represents a specific priority where bit 0 represents
15039 * priority 0 and bit 7 represents priority 7.
15040 * # A value of 0 indicates that the priority is not configurable by
15041 * the hwrm_queue_pfcenable_cfg command.
15042 * # A value of 1 indicates that the priority is configurable.
15043 * # A hwrm_queue_pfcenable_cfg command shall return error when
15044 * trying to configure a priority that is not configurable.
15045 */
15046 uint8_t queue_pfcenable_cfg_allowed;
15047 /*
15048 * Bitmask indicating which queues can be configured by the
15049 * hwrm_queue_pri2cos_cfg command.
15050 *
15051 * Each bit represents a specific queue where bit 0 represents
15052 * queue 0 and bit 7 represents queue 7.
15053 * # A value of 0 indicates that the queue is not configurable
15054 * by the hwrm_queue_pri2cos_cfg command.
15055 * # A value of 1 indicates that the queue is configurable.
15056 * # A hwrm_queue_pri2cos_cfg command shall return error when
15057 * trying to configure a queue that is not configurable.
15058 */
15059 uint8_t queue_pri2cos_cfg_allowed;
15060 /*
15061 * Bitmask indicating which queues can be configured by the
15062 * hwrm_queue_pri2cos_cfg command.
15063 *
15064 * Each bit represents a specific queue where bit 0 represents
15065 * queue 0 and bit 7 represents queue 7.
15066 * # A value of 0 indicates that the queue is not configurable
15067 * by the hwrm_queue_pri2cos_cfg command.
15068 * # A value of 1 indicates that the queue is configurable.
15069 * # A hwrm_queue_pri2cos_cfg command shall return error when
15070 * trying to configure a queue not configurable.
15071 */
15072 uint8_t queue_cos2bw_cfg_allowed;
15073 /*
15074 * ID of CoS Queue 0.
15075 * FF - Invalid id
15076 *
15077 * # This ID can be used on any subsequent call to an hwrm command
15078 * that takes a queue id.
15079 * # IDs must always be queried by this command before any use
15080 * by the driver or software.
15081 * # Any driver or software should not make any assumptions about
15082 * queue IDs.
15083 * # A value of 0xff indicates that the queue is not available.
15084 * # Available queues may not be in sequential order.
15085 */
15086 uint8_t queue_id0;
15087 /* This value is applicable to CoS queues only. */
15088 uint8_t queue_id0_service_profile;
15089 /* Lossy (best-effort) */
15090 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_LOSSY \
15091 UINT32_C(0x0)
15092 /* Lossless (legacy) */
15093 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_LOSSLESS \
15094 UINT32_C(0x1)
15095 /* Lossless RoCE */
15096 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_LOSSLESS_ROCE \
15097 UINT32_C(0x1)
15098 /* Lossy RoCE CNP */
15099 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_LOSSY_ROCE_CNP \
15100 UINT32_C(0x2)
15101 /* Lossless NIC */
15102 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_LOSSLESS_NIC \
15103 UINT32_C(0x3)
15104 /* Set to 0xFF... (All Fs) if there is no service profile specified */
15105 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_UNKNOWN \
15106 UINT32_C(0xff)
15107 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_LAST \
15108 HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_UNKNOWN
15109 /*
15110 * ID of CoS Queue 1.
15111 * FF - Invalid id
15112 *
15113 * # This ID can be used on any subsequent call to an hwrm command
15114 * that takes a queue id.
15115 * # IDs must always be queried by this command before any use
15116 * by the driver or software.
15117 * # Any driver or software should not make any assumptions about
15118 * queue IDs.
15119 * # A value of 0xff indicates that the queue is not available.
15120 * # Available queues may not be in sequential order.
15121 */
15122 uint8_t queue_id1;
15123 /* This value is applicable to CoS queues only. */
15124 uint8_t queue_id1_service_profile;
15125 /* Lossy (best-effort) */
15126 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID1_SERVICE_PROFILE_LOSSY \
15127 UINT32_C(0x0)
15128 /* Lossless (legacy) */
15129 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID1_SERVICE_PROFILE_LOSSLESS \
15130 UINT32_C(0x1)
15131 /* Lossless RoCE */
15132 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID1_SERVICE_PROFILE_LOSSLESS_ROCE \
15133 UINT32_C(0x1)
15134 /* Lossy RoCE CNP */
15135 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID1_SERVICE_PROFILE_LOSSY_ROCE_CNP \
15136 UINT32_C(0x2)
15137 /* Lossless NIC */
15138 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID1_SERVICE_PROFILE_LOSSLESS_NIC \
15139 UINT32_C(0x3)
15140 /* Set to 0xFF... (All Fs) if there is no service profile specified */
15141 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID1_SERVICE_PROFILE_UNKNOWN \
15142 UINT32_C(0xff)
15143 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID1_SERVICE_PROFILE_LAST \
15144 HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID1_SERVICE_PROFILE_UNKNOWN
15145 /*
15146 * ID of CoS Queue 2.
15147 * FF - Invalid id
15148 *
15149 * # This ID can be used on any subsequent call to an hwrm command
15150 * that takes a queue id.
15151 * # IDs must always be queried by this command before any use
15152 * by the driver or software.
15153 * # Any driver or software should not make any assumptions about
15154 * queue IDs.
15155 * # A value of 0xff indicates that the queue is not available.
15156 * # Available queues may not be in sequential order.
15157 */
15158 uint8_t queue_id2;
15159 /* This value is applicable to CoS queues only. */
15160 uint8_t queue_id2_service_profile;
15161 /* Lossy (best-effort) */
15162 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID2_SERVICE_PROFILE_LOSSY \
15163 UINT32_C(0x0)
15164 /* Lossless (legacy) */
15165 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID2_SERVICE_PROFILE_LOSSLESS \
15166 UINT32_C(0x1)
15167 /* Lossless RoCE */
15168 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID2_SERVICE_PROFILE_LOSSLESS_ROCE \
15169 UINT32_C(0x1)
15170 /* Lossy RoCE CNP */
15171 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID2_SERVICE_PROFILE_LOSSY_ROCE_CNP \
15172 UINT32_C(0x2)
15173 /* Lossless NIC */
15174 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID2_SERVICE_PROFILE_LOSSLESS_NIC \
15175 UINT32_C(0x3)
15176 /* Set to 0xFF... (All Fs) if there is no service profile specified */
15177 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID2_SERVICE_PROFILE_UNKNOWN \
15178 UINT32_C(0xff)
15179 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID2_SERVICE_PROFILE_LAST \
15180 HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID2_SERVICE_PROFILE_UNKNOWN
15181 /*
15182 * ID of CoS Queue 3.
15183 * FF - Invalid id
15184 *
15185 * # This ID can be used on any subsequent call to an hwrm command
15186 * that takes a queue id.
15187 * # IDs must always be queried by this command before any use
15188 * by the driver or software.
15189 * # Any driver or software should not make any assumptions about
15190 * queue IDs.
15191 * # A value of 0xff indicates that the queue is not available.
15192 * # Available queues may not be in sequential order.
15193 */
15194 uint8_t queue_id3;
15195 /* This value is applicable to CoS queues only. */
15196 uint8_t queue_id3_service_profile;
15197 /* Lossy (best-effort) */
15198 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID3_SERVICE_PROFILE_LOSSY \
15199 UINT32_C(0x0)
15200 /* Lossless (legacy) */
15201 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID3_SERVICE_PROFILE_LOSSLESS \
15202 UINT32_C(0x1)
15203 /* Lossless RoCE */
15204 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID3_SERVICE_PROFILE_LOSSLESS_ROCE \
15205 UINT32_C(0x1)
15206 /* Lossy RoCE CNP */
15207 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID3_SERVICE_PROFILE_LOSSY_ROCE_CNP \
15208 UINT32_C(0x2)
15209 /* Lossless NIC */
15210 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID3_SERVICE_PROFILE_LOSSLESS_NIC \
15211 UINT32_C(0x3)
15212 /* Set to 0xFF... (All Fs) if there is no service profile specified */
15213 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID3_SERVICE_PROFILE_UNKNOWN \
15214 UINT32_C(0xff)
15215 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID3_SERVICE_PROFILE_LAST \
15216 HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID3_SERVICE_PROFILE_UNKNOWN
15217 /*
15218 * ID of CoS Queue 4.
15219 * FF - Invalid id
15220 *
15221 * # This ID can be used on any subsequent call to an hwrm command
15222 * that takes a queue id.
15223 * # IDs must always be queried by this command before any use
15224 * by the driver or software.
15225 * # Any driver or software should not make any assumptions about
15226 * queue IDs.
15227 * # A value of 0xff indicates that the queue is not available.
15228 * # Available queues may not be in sequential order.
15229 */
15230 uint8_t queue_id4;
15231 /* This value is applicable to CoS queues only. */
15232 uint8_t queue_id4_service_profile;
15233 /* Lossy (best-effort) */
15234 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID4_SERVICE_PROFILE_LOSSY \
15235 UINT32_C(0x0)
15236 /* Lossless (legacy) */
15237 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID4_SERVICE_PROFILE_LOSSLESS \
15238 UINT32_C(0x1)
15239 /* Lossless RoCE */
15240 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID4_SERVICE_PROFILE_LOSSLESS_ROCE \
15241 UINT32_C(0x1)
15242 /* Lossy RoCE CNP */
15243 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID4_SERVICE_PROFILE_LOSSY_ROCE_CNP \
15244 UINT32_C(0x2)
15245 /* Lossless NIC */
15246 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID4_SERVICE_PROFILE_LOSSLESS_NIC \
15247 UINT32_C(0x3)
15248 /* Set to 0xFF... (All Fs) if there is no service profile specified */
15249 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID4_SERVICE_PROFILE_UNKNOWN \
15250 UINT32_C(0xff)
15251 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID4_SERVICE_PROFILE_LAST \
15252 HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID4_SERVICE_PROFILE_UNKNOWN
15253 /*
15254 * ID of CoS Queue 5.
15255 * FF - Invalid id
15256 *
15257 * # This ID can be used on any subsequent call to an hwrm command
15258 * that takes a queue id.
15259 * # IDs must always be queried by this command before any use
15260 * by the driver or software.
15261 * # Any driver or software should not make any assumptions about
15262 * queue IDs.
15263 * # A value of 0xff indicates that the queue is not available.
15264 * # Available queues may not be in sequential order.
15265 */
15266 uint8_t queue_id5;
15267 /* This value is applicable to CoS queues only. */
15268 uint8_t queue_id5_service_profile;
15269 /* Lossy (best-effort) */
15270 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID5_SERVICE_PROFILE_LOSSY \
15271 UINT32_C(0x0)
15272 /* Lossless (legacy) */
15273 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID5_SERVICE_PROFILE_LOSSLESS \
15274 UINT32_C(0x1)
15275 /* Lossless RoCE */
15276 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID5_SERVICE_PROFILE_LOSSLESS_ROCE \
15277 UINT32_C(0x1)
15278 /* Lossy RoCE CNP */
15279 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID5_SERVICE_PROFILE_LOSSY_ROCE_CNP \
15280 UINT32_C(0x2)
15281 /* Lossless NIC */
15282 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID5_SERVICE_PROFILE_LOSSLESS_NIC \
15283 UINT32_C(0x3)
15284 /* Set to 0xFF... (All Fs) if there is no service profile specified */
15285 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID5_SERVICE_PROFILE_UNKNOWN \
15286 UINT32_C(0xff)
15287 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID5_SERVICE_PROFILE_LAST \
15288 HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID5_SERVICE_PROFILE_UNKNOWN
15289 /*
15290 * ID of CoS Queue 6.
15291 * FF - Invalid id
15292 *
15293 * # This ID can be used on any subsequent call to an hwrm command
15294 * that takes a queue id.
15295 * # IDs must always be queried by this command before any use
15296 * by the driver or software.
15297 * # Any driver or software should not make any assumptions about
15298 * queue IDs.
15299 * # A value of 0xff indicates that the queue is not available.
15300 * # Available queues may not be in sequential order.
15301 */
15302 uint8_t queue_id6;
15303 /* This value is applicable to CoS queues only. */
15304 uint8_t queue_id6_service_profile;
15305 /* Lossy (best-effort) */
15306 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID6_SERVICE_PROFILE_LOSSY \
15307 UINT32_C(0x0)
15308 /* Lossless (legacy) */
15309 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID6_SERVICE_PROFILE_LOSSLESS \
15310 UINT32_C(0x1)
15311 /* Lossless RoCE */
15312 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID6_SERVICE_PROFILE_LOSSLESS_ROCE \
15313 UINT32_C(0x1)
15314 /* Lossy RoCE CNP */
15315 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID6_SERVICE_PROFILE_LOSSY_ROCE_CNP \
15316 UINT32_C(0x2)
15317 /* Lossless NIC */
15318 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID6_SERVICE_PROFILE_LOSSLESS_NIC \
15319 UINT32_C(0x3)
15320 /* Set to 0xFF... (All Fs) if there is no service profile specified */
15321 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID6_SERVICE_PROFILE_UNKNOWN \
15322 UINT32_C(0xff)
15323 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID6_SERVICE_PROFILE_LAST \
15324 HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID6_SERVICE_PROFILE_UNKNOWN
15325 /*
15326 * ID of CoS Queue 7.
15327 * FF - Invalid id
15328 *
15329 * # This ID can be used on any subsequent call to an hwrm command
15330 * that takes a queue id.
15331 * # IDs must always be queried by this command before any use
15332 * by the driver or software.
15333 * # Any driver or software should not make any assumptions about
15334 * queue IDs.
15335 * # A value of 0xff indicates that the queue is not available.
15336 * # Available queues may not be in sequential order.
15337 */
15338 uint8_t queue_id7;
15339 /* This value is applicable to CoS queues only. */
15340 uint8_t queue_id7_service_profile;
15341 /* Lossy (best-effort) */
15342 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID7_SERVICE_PROFILE_LOSSY \
15343 UINT32_C(0x0)
15344 /* Lossless (legacy) */
15345 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID7_SERVICE_PROFILE_LOSSLESS \
15346 UINT32_C(0x1)
15347 /* Lossless RoCE */
15348 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID7_SERVICE_PROFILE_LOSSLESS_ROCE \
15349 UINT32_C(0x1)
15350 /* Lossy RoCE CNP */
15351 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID7_SERVICE_PROFILE_LOSSY_ROCE_CNP \
15352 UINT32_C(0x2)
15353 /* Lossless NIC */
15354 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID7_SERVICE_PROFILE_LOSSLESS_NIC \
15355 UINT32_C(0x3)
15356 /* Set to 0xFF... (All Fs) if there is no service profile specified */
15357 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID7_SERVICE_PROFILE_UNKNOWN \
15358 UINT32_C(0xff)
15359 #define HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID7_SERVICE_PROFILE_LAST \
15360 HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID7_SERVICE_PROFILE_UNKNOWN
15361 /*
15362 * This field is used in Output records to indicate that the output
15363 * is completely written to RAM. This field should be read as '1'
15364 * to indicate that the output has been completely written.
15365 * When writing a command completion or response to an internal processor,
15366 * the order of writes has to be such that this field is written last.
15367 */
15368 uint8_t valid;
15369} __attribute__((packed));
15370
15371/*******************
15372 * hwrm_queue_qcfg *
15373 *******************/
15374
15375
15376/* hwrm_queue_qcfg_input (size:192b/24B) */
15377struct hwrm_queue_qcfg_input {
15378 /* The HWRM command request type. */
15379 uint16_t req_type;
15380 /*
15381 * The completion ring to send the completion event on. This should
15382 * be the NQ ID returned from the `nq_alloc` HWRM command.
15383 */
15384 uint16_t cmpl_ring;
15385 /*
15386 * The sequence ID is used by the driver for tracking multiple
15387 * commands. This ID is treated as opaque data by the firmware and
15388 * the value is returned in the `hwrm_resp_hdr` upon completion.
15389 */
15390 uint16_t seq_id;
15391 /*
15392 * The target ID of the command:
15393 * * 0x0-0xFFF8 - The function ID
15394 * * 0xFFF8-0xFFFE - Reserved for internal processors
15395 * * 0xFFFF - HWRM
15396 */
15397 uint16_t target_id;
15398 /*
15399 * A physical address pointer pointing to a host buffer that the
15400 * command's response data will be written. This can be either a host
15401 * physical address (HPA) or a guest physical address (GPA) and must
15402 * point to a physically contiguous block of memory.
15403 */
15404 uint64_t resp_addr;
15405 uint32_t flags;
15406 /*
15407 * Enumeration denoting the RX, TX type of the resource.
15408 * This enumeration is used for resources that are similar for both
15409 * TX and RX paths of the chip.
15410 */
15411 #define HWRM_QUEUE_QCFG_INPUT_FLAGS_PATH UINT32_C(0x1)
15412 /* tx path */
15413 #define HWRM_QUEUE_QCFG_INPUT_FLAGS_PATH_TX UINT32_C(0x0)
15414 /* rx path */
15415 #define HWRM_QUEUE_QCFG_INPUT_FLAGS_PATH_RX UINT32_C(0x1)
15416 #define HWRM_QUEUE_QCFG_INPUT_FLAGS_PATH_LAST \
15417 HWRM_QUEUE_QCFG_INPUT_FLAGS_PATH_RX
15418 /* Queue ID of the queue. */
15419 uint32_t queue_id;
15420} __attribute__((packed));
15421
15422/* hwrm_queue_qcfg_output (size:128b/16B) */
15423struct hwrm_queue_qcfg_output {
15424 /* The specific error status for the command. */
15425 uint16_t error_code;
15426 /* The HWRM command request type. */
15427 uint16_t req_type;
15428 /* The sequence ID from the original command. */
15429 uint16_t seq_id;
15430 /* The length of the response data in number of bytes. */
15431 uint16_t resp_len;
15432 /*
15433 * This value is a the estimate packet length used in the
15434 * TX arbiter.
15435 */
15436 uint32_t queue_len;
15437 /* This value is applicable to CoS queues only. */
15438 uint8_t service_profile;
15439 /* Lossy (best-effort) */
15440 #define HWRM_QUEUE_QCFG_OUTPUT_SERVICE_PROFILE_LOSSY UINT32_C(0x0)
15441 /* Lossless */
15442 #define HWRM_QUEUE_QCFG_OUTPUT_SERVICE_PROFILE_LOSSLESS UINT32_C(0x1)
15443 /* Set to 0xFF... (All Fs) if there is no service profile specified */
15444 #define HWRM_QUEUE_QCFG_OUTPUT_SERVICE_PROFILE_UNKNOWN UINT32_C(0xff)
15445 #define HWRM_QUEUE_QCFG_OUTPUT_SERVICE_PROFILE_LAST \
15446 HWRM_QUEUE_QCFG_OUTPUT_SERVICE_PROFILE_UNKNOWN
15447 /* Information about queue configuration. */
15448 uint8_t queue_cfg_info;
15449 /*
15450 * If this flag is set to '1', then the queue is
15451 * configured asymmetrically on TX and RX sides.
15452 * If this flag is set to '0', then this queue is
15453 * configured symmetrically on TX and RX sides.
15454 */
15455 #define HWRM_QUEUE_QCFG_OUTPUT_QUEUE_CFG_INFO_ASYM_CFG \
15456 UINT32_C(0x1)
15457 uint8_t unused_0;
15458 /*
15459 * This field is used in Output records to indicate that the output
15460 * is completely written to RAM. This field should be read as '1'
15461 * to indicate that the output has been completely written.
15462 * When writing a command completion or response to an internal processor,
15463 * the order of writes has to be such that this field is written last.
15464 */
15465 uint8_t valid;
15466} __attribute__((packed));
15467
15468/******************
15469 * hwrm_queue_cfg *
15470 ******************/
15471
15472
15473/* hwrm_queue_cfg_input (size:320b/40B) */
15474struct hwrm_queue_cfg_input {
15475 /* The HWRM command request type. */
15476 uint16_t req_type;
15477 /*
15478 * The completion ring to send the completion event on. This should
15479 * be the NQ ID returned from the `nq_alloc` HWRM command.
15480 */
15481 uint16_t cmpl_ring;
15482 /*
15483 * The sequence ID is used by the driver for tracking multiple
15484 * commands. This ID is treated as opaque data by the firmware and
15485 * the value is returned in the `hwrm_resp_hdr` upon completion.
15486 */
15487 uint16_t seq_id;
15488 /*
15489 * The target ID of the command:
15490 * * 0x0-0xFFF8 - The function ID
15491 * * 0xFFF8-0xFFFE - Reserved for internal processors
15492 * * 0xFFFF - HWRM
15493 */
15494 uint16_t target_id;
15495 /*
15496 * A physical address pointer pointing to a host buffer that the
15497 * command's response data will be written. This can be either a host
15498 * physical address (HPA) or a guest physical address (GPA) and must
15499 * point to a physically contiguous block of memory.
15500 */
15501 uint64_t resp_addr;
15502 uint32_t flags;
15503 /*
15504 * Enumeration denoting the RX, TX, or both directions applicable to the resource.
15505 * This enumeration is used for resources that are similar for both
15506 * TX and RX paths of the chip.
15507 */
15508 #define HWRM_QUEUE_CFG_INPUT_FLAGS_PATH_MASK UINT32_C(0x3)
15509 #define HWRM_QUEUE_CFG_INPUT_FLAGS_PATH_SFT 0
15510 /* tx path */
15511 #define HWRM_QUEUE_CFG_INPUT_FLAGS_PATH_TX UINT32_C(0x0)
15512 /* rx path */
15513 #define HWRM_QUEUE_CFG_INPUT_FLAGS_PATH_RX UINT32_C(0x1)
15514 /* Bi-directional (Symmetrically applicable to TX and RX paths) */
15515 #define HWRM_QUEUE_CFG_INPUT_FLAGS_PATH_BIDIR UINT32_C(0x2)
15516 #define HWRM_QUEUE_CFG_INPUT_FLAGS_PATH_LAST \
15517 HWRM_QUEUE_CFG_INPUT_FLAGS_PATH_BIDIR
15518 uint32_t enables;
15519 /*
15520 * This bit must be '1' for the dflt_len field to be
15521 * configured.
15522 */
15523 #define HWRM_QUEUE_CFG_INPUT_ENABLES_DFLT_LEN UINT32_C(0x1)
15524 /*
15525 * This bit must be '1' for the service_profile field to be
15526 * configured.
15527 */
15528 #define HWRM_QUEUE_CFG_INPUT_ENABLES_SERVICE_PROFILE UINT32_C(0x2)
15529 /* Queue ID of queue that is to be configured by this function. */
15530 uint32_t queue_id;
15531 /*
15532 * This value is a the estimate packet length used in the
15533 * TX arbiter.
15534 * Set to 0xFF... (All Fs) to not adjust this value.
15535 */
15536 uint32_t dflt_len;
15537 /* This value is applicable to CoS queues only. */
15538 uint8_t service_profile;
15539 /* Lossy (best-effort) */
15540 #define HWRM_QUEUE_CFG_INPUT_SERVICE_PROFILE_LOSSY UINT32_C(0x0)
15541 /* Lossless */
15542 #define HWRM_QUEUE_CFG_INPUT_SERVICE_PROFILE_LOSSLESS UINT32_C(0x1)
15543 /* Set to 0xFF... (All Fs) if there is no service profile specified */
15544 #define HWRM_QUEUE_CFG_INPUT_SERVICE_PROFILE_UNKNOWN UINT32_C(0xff)
15545 #define HWRM_QUEUE_CFG_INPUT_SERVICE_PROFILE_LAST \
15546 HWRM_QUEUE_CFG_INPUT_SERVICE_PROFILE_UNKNOWN
15547 uint8_t unused_0[7];
15548} __attribute__((packed));
15549
15550/* hwrm_queue_cfg_output (size:128b/16B) */
15551struct hwrm_queue_cfg_output {
15552 /* The specific error status for the command. */
15553 uint16_t error_code;
15554 /* The HWRM command request type. */
15555 uint16_t req_type;
15556 /* The sequence ID from the original command. */
15557 uint16_t seq_id;
15558 /* The length of the response data in number of bytes. */
15559 uint16_t resp_len;
15560 uint8_t unused_0[7];
15561 /*
15562 * This field is used in Output records to indicate that the output
15563 * is completely written to RAM. This field should be read as '1'
15564 * to indicate that the output has been completely written.
15565 * When writing a command completion or response to an internal processor,
15566 * the order of writes has to be such that this field is written last.
15567 */
15568 uint8_t valid;
15569} __attribute__((packed));
15570
15571/*****************************
15572 * hwrm_queue_pfcenable_qcfg *
15573 *****************************/
15574
15575
15576/* hwrm_queue_pfcenable_qcfg_input (size:192b/24B) */
15577struct hwrm_queue_pfcenable_qcfg_input {
15578 /* The HWRM command request type. */
15579 uint16_t req_type;
15580 /*
15581 * The completion ring to send the completion event on. This should
15582 * be the NQ ID returned from the `nq_alloc` HWRM command.
15583 */
15584 uint16_t cmpl_ring;
15585 /*
15586 * The sequence ID is used by the driver for tracking multiple
15587 * commands. This ID is treated as opaque data by the firmware and
15588 * the value is returned in the `hwrm_resp_hdr` upon completion.
15589 */
15590 uint16_t seq_id;
15591 /*
15592 * The target ID of the command:
15593 * * 0x0-0xFFF8 - The function ID
15594 * * 0xFFF8-0xFFFE - Reserved for internal processors
15595 * * 0xFFFF - HWRM
15596 */
15597 uint16_t target_id;
15598 /*
15599 * A physical address pointer pointing to a host buffer that the
15600 * command's response data will be written. This can be either a host
15601 * physical address (HPA) or a guest physical address (GPA) and must
15602 * point to a physically contiguous block of memory.
15603 */
15604 uint64_t resp_addr;
15605 /*
15606 * Port ID of port for which the table is being configured.
15607 * The HWRM needs to check whether this function is allowed
15608 * to configure pri2cos mapping on this port.
15609 */
15610 uint16_t port_id;
15611 uint8_t unused_0[6];
15612} __attribute__((packed));
15613
15614/* hwrm_queue_pfcenable_qcfg_output (size:128b/16B) */
15615struct hwrm_queue_pfcenable_qcfg_output {
15616 /* The specific error status for the command. */
15617 uint16_t error_code;
15618 /* The HWRM command request type. */
15619 uint16_t req_type;
15620 /* The sequence ID from the original command. */
15621 uint16_t seq_id;
15622 /* The length of the response data in number of bytes. */
15623 uint16_t resp_len;
15624 uint32_t flags;
15625 /* If set to 1, then PFC is enabled on PRI 0. */
15626 #define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI0_PFC_ENABLED \
15627 UINT32_C(0x1)
15628 /* If set to 1, then PFC is enabled on PRI 1. */
15629 #define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI1_PFC_ENABLED \
15630 UINT32_C(0x2)
15631 /* If set to 1, then PFC is enabled on PRI 2. */
15632 #define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI2_PFC_ENABLED \
15633 UINT32_C(0x4)
15634 /* If set to 1, then PFC is enabled on PRI 3. */
15635 #define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI3_PFC_ENABLED \
15636 UINT32_C(0x8)
15637 /* If set to 1, then PFC is enabled on PRI 4. */
15638 #define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI4_PFC_ENABLED \
15639 UINT32_C(0x10)
15640 /* If set to 1, then PFC is enabled on PRI 5. */
15641 #define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI5_PFC_ENABLED \
15642 UINT32_C(0x20)
15643 /* If set to 1, then PFC is enabled on PRI 6. */
15644 #define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI6_PFC_ENABLED \
15645 UINT32_C(0x40)
15646 /* If set to 1, then PFC is enabled on PRI 7. */
15647 #define HWRM_QUEUE_PFCENABLE_QCFG_OUTPUT_FLAGS_PRI7_PFC_ENABLED \
15648 UINT32_C(0x80)
15649 uint8_t unused_0[3];
15650 /*
15651 * This field is used in Output records to indicate that the output
15652 * is completely written to RAM. This field should be read as '1'
15653 * to indicate that the output has been completely written.
15654 * When writing a command completion or response to an internal processor,
15655 * the order of writes has to be such that this field is written last.
15656 */
15657 uint8_t valid;
15658} __attribute__((packed));
15659
15660/****************************
15661 * hwrm_queue_pfcenable_cfg *
15662 ****************************/
15663
15664
15665/* hwrm_queue_pfcenable_cfg_input (size:192b/24B) */
15666struct hwrm_queue_pfcenable_cfg_input {
15667 /* The HWRM command request type. */
15668 uint16_t req_type;
15669 /*
15670 * The completion ring to send the completion event on. This should
15671 * be the NQ ID returned from the `nq_alloc` HWRM command.
15672 */
15673 uint16_t cmpl_ring;
15674 /*
15675 * The sequence ID is used by the driver for tracking multiple
15676 * commands. This ID is treated as opaque data by the firmware and
15677 * the value is returned in the `hwrm_resp_hdr` upon completion.
15678 */
15679 uint16_t seq_id;
15680 /*
15681 * The target ID of the command:
15682 * * 0x0-0xFFF8 - The function ID
15683 * * 0xFFF8-0xFFFE - Reserved for internal processors
15684 * * 0xFFFF - HWRM
15685 */
15686 uint16_t target_id;
15687 /*
15688 * A physical address pointer pointing to a host buffer that the
15689 * command's response data will be written. This can be either a host
15690 * physical address (HPA) or a guest physical address (GPA) and must
15691 * point to a physically contiguous block of memory.
15692 */
15693 uint64_t resp_addr;
15694 uint32_t flags;
15695 /* If set to 1, then PFC is requested to be enabled on PRI 0. */
15696 #define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI0_PFC_ENABLED \
15697 UINT32_C(0x1)
15698 /* If set to 1, then PFC is requested to be enabled on PRI 1. */
15699 #define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI1_PFC_ENABLED \
15700 UINT32_C(0x2)
15701 /* If set to 1, then PFC is requested to be enabled on PRI 2. */
15702 #define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI2_PFC_ENABLED \
15703 UINT32_C(0x4)
15704 /* If set to 1, then PFC is requested to be enabled on PRI 3. */
15705 #define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI3_PFC_ENABLED \
15706 UINT32_C(0x8)
15707 /* If set to 1, then PFC is requested to be enabled on PRI 4. */
15708 #define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI4_PFC_ENABLED \
15709 UINT32_C(0x10)
15710 /* If set to 1, then PFC is requested to be enabled on PRI 5. */
15711 #define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI5_PFC_ENABLED \
15712 UINT32_C(0x20)
15713 /* If set to 1, then PFC is requested to be enabled on PRI 6. */
15714 #define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI6_PFC_ENABLED \
15715 UINT32_C(0x40)
15716 /* If set to 1, then PFC is requested to be enabled on PRI 7. */
15717 #define HWRM_QUEUE_PFCENABLE_CFG_INPUT_FLAGS_PRI7_PFC_ENABLED \
15718 UINT32_C(0x80)
15719 /*
15720 * Port ID of port for which the table is being configured.
15721 * The HWRM needs to check whether this function is allowed
15722 * to configure pri2cos mapping on this port.
15723 */
15724 uint16_t port_id;
15725 uint8_t unused_0[2];
15726} __attribute__((packed));
15727
15728/* hwrm_queue_pfcenable_cfg_output (size:128b/16B) */
15729struct hwrm_queue_pfcenable_cfg_output {
15730 /* The specific error status for the command. */
15731 uint16_t error_code;
15732 /* The HWRM command request type. */
15733 uint16_t req_type;
15734 /* The sequence ID from the original command. */
15735 uint16_t seq_id;
15736 /* The length of the response data in number of bytes. */
15737 uint16_t resp_len;
15738 uint8_t unused_0[7];
15739 /*
15740 * This field is used in Output records to indicate that the output
15741 * is completely written to RAM. This field should be read as '1'
15742 * to indicate that the output has been completely written.
15743 * When writing a command completion or response to an internal processor,
15744 * the order of writes has to be such that this field is written last.
15745 */
15746 uint8_t valid;
15747} __attribute__((packed));
15748
15749/***************************
15750 * hwrm_queue_pri2cos_qcfg *
15751 ***************************/
15752
15753
15754/* hwrm_queue_pri2cos_qcfg_input (size:192b/24B) */
15755struct hwrm_queue_pri2cos_qcfg_input {
15756 /* The HWRM command request type. */
15757 uint16_t req_type;
15758 /*
15759 * The completion ring to send the completion event on. This should
15760 * be the NQ ID returned from the `nq_alloc` HWRM command.
15761 */
15762 uint16_t cmpl_ring;
15763 /*
15764 * The sequence ID is used by the driver for tracking multiple
15765 * commands. This ID is treated as opaque data by the firmware and
15766 * the value is returned in the `hwrm_resp_hdr` upon completion.
15767 */
15768 uint16_t seq_id;
15769 /*
15770 * The target ID of the command:
15771 * * 0x0-0xFFF8 - The function ID
15772 * * 0xFFF8-0xFFFE - Reserved for internal processors
15773 * * 0xFFFF - HWRM
15774 */
15775 uint16_t target_id;
15776 /*
15777 * A physical address pointer pointing to a host buffer that the
15778 * command's response data will be written. This can be either a host
15779 * physical address (HPA) or a guest physical address (GPA) and must
15780 * point to a physically contiguous block of memory.
15781 */
15782 uint64_t resp_addr;
15783 uint32_t flags;
15784 /*
15785 * Enumeration denoting the RX, TX type of the resource.
15786 * This enumeration is used for resources that are similar for both
15787 * TX and RX paths of the chip.
15788 */
15789 #define HWRM_QUEUE_PRI2COS_QCFG_INPUT_FLAGS_PATH UINT32_C(0x1)
15790 /* tx path */
15791 #define HWRM_QUEUE_PRI2COS_QCFG_INPUT_FLAGS_PATH_TX UINT32_C(0x0)
15792 /* rx path */
15793 #define HWRM_QUEUE_PRI2COS_QCFG_INPUT_FLAGS_PATH_RX UINT32_C(0x1)
15794 #define HWRM_QUEUE_PRI2COS_QCFG_INPUT_FLAGS_PATH_LAST \
15795 HWRM_QUEUE_PRI2COS_QCFG_INPUT_FLAGS_PATH_RX
15796 /*
15797 * When this bit is set to '0', the query is
15798 * for VLAN PRI field in tunnel headers.
15799 * When this bit is set to '1', the query is
15800 * for VLAN PRI field in inner packet headers.
15801 */
15802 #define HWRM_QUEUE_PRI2COS_QCFG_INPUT_FLAGS_IVLAN UINT32_C(0x2)
15803 /*
15804 * Port ID of port for which the table is being configured.
15805 * The HWRM needs to check whether this function is allowed
15806 * to configure pri2cos mapping on this port.
15807 */
15808 uint8_t port_id;
15809 uint8_t unused_0[3];
15810} __attribute__((packed));
15811
15812/* hwrm_queue_pri2cos_qcfg_output (size:192b/24B) */
15813struct hwrm_queue_pri2cos_qcfg_output {
15814 /* The specific error status for the command. */
15815 uint16_t error_code;
15816 /* The HWRM command request type. */
15817 uint16_t req_type;
15818 /* The sequence ID from the original command. */
15819 uint16_t seq_id;
15820 /* The length of the response data in number of bytes. */
15821 uint16_t resp_len;
15822 /*
15823 * CoS Queue assigned to priority 0. This value can only
15824 * be changed before traffic has started.
15825 * A value of 0xff indicates that no CoS queue is assigned to the
15826 * specified priority.
15827 */
15828 uint8_t pri0_cos_queue_id;
15829 /*
15830 * CoS Queue assigned to priority 1. This value can only
15831 * be changed before traffic has started.
15832 * A value of 0xff indicates that no CoS queue is assigned to the
15833 * specified priority.
15834 */
15835 uint8_t pri1_cos_queue_id;
15836 /*
15837 * CoS Queue assigned to priority 2 This value can only
15838 * be changed before traffic has started.
15839 * A value of 0xff indicates that no CoS queue is assigned to the
15840 * specified priority.
15841 */
15842 uint8_t pri2_cos_queue_id;
15843 /*
15844 * CoS Queue assigned to priority 3. This value can only
15845 * be changed before traffic has started.
15846 * A value of 0xff indicates that no CoS queue is assigned to the
15847 * specified priority.
15848 */
15849 uint8_t pri3_cos_queue_id;
15850 /*
15851 * CoS Queue assigned to priority 4. This value can only
15852 * be changed before traffic has started.
15853 * A value of 0xff indicates that no CoS queue is assigned to the
15854 * specified priority.
15855 */
15856 uint8_t pri4_cos_queue_id;
15857 /*
15858 * CoS Queue assigned to priority 5. This value can only
15859 * be changed before traffic has started.
15860 * A value of 0xff indicates that no CoS queue is assigned to the
15861 * specified priority.
15862 */
15863 uint8_t pri5_cos_queue_id;
15864 /*
15865 * CoS Queue assigned to priority 6. This value can only
15866 * be changed before traffic has started.
15867 * A value of 0xff indicates that no CoS queue is assigned to the
15868 * specified priority.
15869 */
15870 uint8_t pri6_cos_queue_id;
15871 /*
15872 * CoS Queue assigned to priority 7. This value can only
15873 * be changed before traffic has started.
15874 * A value of 0xff indicates that no CoS queue is assigned to the
15875 * specified priority.
15876 */
15877 uint8_t pri7_cos_queue_id;
15878 /* Information about queue configuration. */
15879 uint8_t queue_cfg_info;
15880 /*
15881 * If this flag is set to '1', then the PRI to CoS
15882 * configuration is asymmetric on TX and RX sides.
15883 * If this flag is set to '0', then PRI to CoS configuration
15884 * is symmetric on TX and RX sides.
15885 */
15886 #define HWRM_QUEUE_PRI2COS_QCFG_OUTPUT_QUEUE_CFG_INFO_ASYM_CFG \
15887 UINT32_C(0x1)
15888 uint8_t unused_0[6];
15889 /*
15890 * This field is used in Output records to indicate that the output
15891 * is completely written to RAM. This field should be read as '1'
15892 * to indicate that the output has been completely written.
15893 * When writing a command completion or response to an internal processor,
15894 * the order of writes has to be such that this field is written last.
15895 */
15896 uint8_t valid;
15897} __attribute__((packed));
15898
15899/**************************
15900 * hwrm_queue_pri2cos_cfg *
15901 **************************/
15902
15903
15904/* hwrm_queue_pri2cos_cfg_input (size:320b/40B) */
15905struct hwrm_queue_pri2cos_cfg_input {
15906 /* The HWRM command request type. */
15907 uint16_t req_type;
15908 /*
15909 * The completion ring to send the completion event on. This should
15910 * be the NQ ID returned from the `nq_alloc` HWRM command.
15911 */
15912 uint16_t cmpl_ring;
15913 /*
15914 * The sequence ID is used by the driver for tracking multiple
15915 * commands. This ID is treated as opaque data by the firmware and
15916 * the value is returned in the `hwrm_resp_hdr` upon completion.
15917 */
15918 uint16_t seq_id;
15919 /*
15920 * The target ID of the command:
15921 * * 0x0-0xFFF8 - The function ID
15922 * * 0xFFF8-0xFFFE - Reserved for internal processors
15923 * * 0xFFFF - HWRM
15924 */
15925 uint16_t target_id;
15926 /*
15927 * A physical address pointer pointing to a host buffer that the
15928 * command's response data will be written. This can be either a host
15929 * physical address (HPA) or a guest physical address (GPA) and must
15930 * point to a physically contiguous block of memory.
15931 */
15932 uint64_t resp_addr;
15933 uint32_t flags;
15934 /*
15935 * Enumeration denoting the RX, TX, or both directions applicable to the resource.
15936 * This enumeration is used for resources that are similar for both
15937 * TX and RX paths of the chip.
15938 */
15939 #define HWRM_QUEUE_PRI2COS_CFG_INPUT_FLAGS_PATH_MASK UINT32_C(0x3)
15940 #define HWRM_QUEUE_PRI2COS_CFG_INPUT_FLAGS_PATH_SFT 0
15941 /* tx path */
15942 #define HWRM_QUEUE_PRI2COS_CFG_INPUT_FLAGS_PATH_TX UINT32_C(0x0)
15943 /* rx path */
15944 #define HWRM_QUEUE_PRI2COS_CFG_INPUT_FLAGS_PATH_RX UINT32_C(0x1)
15945 /* Bi-directional (Symmetrically applicable to TX and RX paths) */
15946 #define HWRM_QUEUE_PRI2COS_CFG_INPUT_FLAGS_PATH_BIDIR UINT32_C(0x2)
15947 #define HWRM_QUEUE_PRI2COS_CFG_INPUT_FLAGS_PATH_LAST \
15948 HWRM_QUEUE_PRI2COS_CFG_INPUT_FLAGS_PATH_BIDIR
15949 /*
15950 * When this bit is set to '0', the mapping is requested
15951 * for VLAN PRI field in tunnel headers.
15952 * When this bit is set to '1', the mapping is requested
15953 * for VLAN PRI field in inner packet headers.
15954 */
15955 #define HWRM_QUEUE_PRI2COS_CFG_INPUT_FLAGS_IVLAN UINT32_C(0x4)
15956 uint32_t enables;
15957 /*
15958 * This bit must be '1' for the pri0_cos_queue_id field to be
15959 * configured.
15960 */
15961 #define HWRM_QUEUE_PRI2COS_CFG_INPUT_ENABLES_PRI0_COS_QUEUE_ID \
15962 UINT32_C(0x1)
15963 /*
15964 * This bit must be '1' for the pri1_cos_queue_id field to be
15965 * configured.
15966 */
15967 #define HWRM_QUEUE_PRI2COS_CFG_INPUT_ENABLES_PRI1_COS_QUEUE_ID \
15968 UINT32_C(0x2)
15969 /*
15970 * This bit must be '1' for the pri2_cos_queue_id field to be
15971 * configured.
15972 */
15973 #define HWRM_QUEUE_PRI2COS_CFG_INPUT_ENABLES_PRI2_COS_QUEUE_ID \
15974 UINT32_C(0x4)
15975 /*
15976 * This bit must be '1' for the pri3_cos_queue_id field to be
15977 * configured.
15978 */
15979 #define HWRM_QUEUE_PRI2COS_CFG_INPUT_ENABLES_PRI3_COS_QUEUE_ID \
15980 UINT32_C(0x8)
15981 /*
15982 * This bit must be '1' for the pri4_cos_queue_id field to be
15983 * configured.
15984 */
15985 #define HWRM_QUEUE_PRI2COS_CFG_INPUT_ENABLES_PRI4_COS_QUEUE_ID \
15986 UINT32_C(0x10)
15987 /*
15988 * This bit must be '1' for the pri5_cos_queue_id field to be
15989 * configured.
15990 */
15991 #define HWRM_QUEUE_PRI2COS_CFG_INPUT_ENABLES_PRI5_COS_QUEUE_ID \
15992 UINT32_C(0x20)
15993 /*
15994 * This bit must be '1' for the pri6_cos_queue_id field to be
15995 * configured.
15996 */
15997 #define HWRM_QUEUE_PRI2COS_CFG_INPUT_ENABLES_PRI6_COS_QUEUE_ID \
15998 UINT32_C(0x40)
15999 /*
16000 * This bit must be '1' for the pri7_cos_queue_id field to be
16001 * configured.
16002 */
16003 #define HWRM_QUEUE_PRI2COS_CFG_INPUT_ENABLES_PRI7_COS_QUEUE_ID \
16004 UINT32_C(0x80)
16005 /*
16006 * Port ID of port for which the table is being configured.
16007 * The HWRM needs to check whether this function is allowed
16008 * to configure pri2cos mapping on this port.
16009 */
16010 uint8_t port_id;
16011 /*
16012 * CoS Queue assigned to priority 0. This value can only
16013 * be changed before traffic has started.
16014 */
16015 uint8_t pri0_cos_queue_id;
16016 /*
16017 * CoS Queue assigned to priority 1. This value can only
16018 * be changed before traffic has started.
16019 */
16020 uint8_t pri1_cos_queue_id;
16021 /*
16022 * CoS Queue assigned to priority 2 This value can only
16023 * be changed before traffic has started.
16024 */
16025 uint8_t pri2_cos_queue_id;
16026 /*
16027 * CoS Queue assigned to priority 3. This value can only
16028 * be changed before traffic has started.
16029 */
16030 uint8_t pri3_cos_queue_id;
16031 /*
16032 * CoS Queue assigned to priority 4. This value can only
16033 * be changed before traffic has started.
16034 */
16035 uint8_t pri4_cos_queue_id;
16036 /*
16037 * CoS Queue assigned to priority 5. This value can only
16038 * be changed before traffic has started.
16039 */
16040 uint8_t pri5_cos_queue_id;
16041 /*
16042 * CoS Queue assigned to priority 6. This value can only
16043 * be changed before traffic has started.
16044 */
16045 uint8_t pri6_cos_queue_id;
16046 /*
16047 * CoS Queue assigned to priority 7. This value can only
16048 * be changed before traffic has started.
16049 */
16050 uint8_t pri7_cos_queue_id;
16051 uint8_t unused_0[7];
16052} __attribute__((packed));
16053
16054/* hwrm_queue_pri2cos_cfg_output (size:128b/16B) */
16055struct hwrm_queue_pri2cos_cfg_output {
16056 /* The specific error status for the command. */
16057 uint16_t error_code;
16058 /* The HWRM command request type. */
16059 uint16_t req_type;
16060 /* The sequence ID from the original command. */
16061 uint16_t seq_id;
16062 /* The length of the response data in number of bytes. */
16063 uint16_t resp_len;
16064 uint8_t unused_0[7];
16065 /*
16066 * This field is used in Output records to indicate that the output
16067 * is completely written to RAM. This field should be read as '1'
16068 * to indicate that the output has been completely written.
16069 * When writing a command completion or response to an internal processor,
16070 * the order of writes has to be such that this field is written last.
16071 */
16072 uint8_t valid;
16073} __attribute__((packed));
16074
16075/**************************
16076 * hwrm_queue_cos2bw_qcfg *
16077 **************************/
16078
16079
16080/* hwrm_queue_cos2bw_qcfg_input (size:192b/24B) */
16081struct hwrm_queue_cos2bw_qcfg_input {
16082 /* The HWRM command request type. */
16083 uint16_t req_type;
16084 /*
16085 * The completion ring to send the completion event on. This should
16086 * be the NQ ID returned from the `nq_alloc` HWRM command.
16087 */
16088 uint16_t cmpl_ring;
16089 /*
16090 * The sequence ID is used by the driver for tracking multiple
16091 * commands. This ID is treated as opaque data by the firmware and
16092 * the value is returned in the `hwrm_resp_hdr` upon completion.
16093 */
16094 uint16_t seq_id;
16095 /*
16096 * The target ID of the command:
16097 * * 0x0-0xFFF8 - The function ID
16098 * * 0xFFF8-0xFFFE - Reserved for internal processors
16099 * * 0xFFFF - HWRM
16100 */
16101 uint16_t target_id;
16102 /*
16103 * A physical address pointer pointing to a host buffer that the
16104 * command's response data will be written. This can be either a host
16105 * physical address (HPA) or a guest physical address (GPA) and must
16106 * point to a physically contiguous block of memory.
16107 */
16108 uint64_t resp_addr;
16109 /*
16110 * Port ID of port for which the table is being configured.
16111 * The HWRM needs to check whether this function is allowed
16112 * to configure TC BW assignment on this port.
16113 */
16114 uint16_t port_id;
16115 uint8_t unused_0[6];
16116} __attribute__((packed));
16117
16118/* hwrm_queue_cos2bw_qcfg_output (size:896b/112B) */
16119struct hwrm_queue_cos2bw_qcfg_output {
16120 /* The specific error status for the command. */
16121 uint16_t error_code;
16122 /* The HWRM command request type. */
16123 uint16_t req_type;
16124 /* The sequence ID from the original command. */
16125 uint16_t seq_id;
16126 /* The length of the response data in number of bytes. */
16127 uint16_t resp_len;
16128 /* ID of CoS Queue 0. */
16129 uint8_t queue_id0;
16130 uint8_t unused_0;
16131 uint16_t unused_1;
16132 /*
16133 * Minimum BW allocated to CoS Queue.
16134 * The HWRM will translate this value into byte counter and
16135 * time interval used for this COS inside the device.
16136 */
16137 uint32_t queue_id0_min_bw;
16138 /* The bandwidth value. */
16139 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_MASK \
16140 UINT32_C(0xfffffff)
16141 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_SFT \
16142 0
16143 /* The granularity of the value (bits or bytes). */
16144 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_SCALE \
16145 UINT32_C(0x10000000)
16146 /* Value is in bits. */
16147 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_SCALE_BITS \
16148 (UINT32_C(0x0) << 28)
16149 /* Value is in bytes. */
16150 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_SCALE_BYTES \
16151 (UINT32_C(0x1) << 28)
16152 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_SCALE_LAST \
16153 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_SCALE_BYTES
16154 /* bw_value_unit is 3 b */
16155 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_MASK \
16156 UINT32_C(0xe0000000)
16157 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_SFT \
16158 29
16159 /* Value is in Mb or MB (base 10). */
16160 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_MEGA \
16161 (UINT32_C(0x0) << 29)
16162 /* Value is in Kb or KB (base 10). */
16163 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_KILO \
16164 (UINT32_C(0x2) << 29)
16165 /* Value is in bits or bytes. */
16166 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_BASE \
16167 (UINT32_C(0x4) << 29)
16168 /* Value is in Gb or GB (base 10). */
16169 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_GIGA \
16170 (UINT32_C(0x6) << 29)
16171 /* Value is in 1/100th of a percentage of total bandwidth. */
16172 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
16173 (UINT32_C(0x1) << 29)
16174 /* Invalid unit */
16175 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_INVALID \
16176 (UINT32_C(0x7) << 29)
16177 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_LAST \
16178 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_INVALID
16179 /*
16180 * Maximum BW allocated to CoS Queue.
16181 * The HWRM will translate this value into byte counter and
16182 * time interval used for this COS inside the device.
16183 */
16184 uint32_t queue_id0_max_bw;
16185 /* The bandwidth value. */
16186 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_MASK \
16187 UINT32_C(0xfffffff)
16188 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_SFT \
16189 0
16190 /* The granularity of the value (bits or bytes). */
16191 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_SCALE \
16192 UINT32_C(0x10000000)
16193 /* Value is in bits. */
16194 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_SCALE_BITS \
16195 (UINT32_C(0x0) << 28)
16196 /* Value is in bytes. */
16197 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_SCALE_BYTES \
16198 (UINT32_C(0x1) << 28)
16199 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_SCALE_LAST \
16200 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_SCALE_BYTES
16201 /* bw_value_unit is 3 b */
16202 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_MASK \
16203 UINT32_C(0xe0000000)
16204 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_SFT \
16205 29
16206 /* Value is in Mb or MB (base 10). */
16207 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_MEGA \
16208 (UINT32_C(0x0) << 29)
16209 /* Value is in Kb or KB (base 10). */
16210 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_KILO \
16211 (UINT32_C(0x2) << 29)
16212 /* Value is in bits or bytes. */
16213 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_BASE \
16214 (UINT32_C(0x4) << 29)
16215 /* Value is in Gb or GB (base 10). */
16216 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_GIGA \
16217 (UINT32_C(0x6) << 29)
16218 /* Value is in 1/100th of a percentage of total bandwidth. */
16219 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
16220 (UINT32_C(0x1) << 29)
16221 /* Invalid unit */
16222 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_INVALID \
16223 (UINT32_C(0x7) << 29)
16224 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_LAST \
16225 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_INVALID
16226 /* Transmission Selection Algorithm (TSA) for CoS Queue. */
16227 uint8_t queue_id0_tsa_assign;
16228 /* Strict Priority */
16229 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_TSA_ASSIGN_SP \
16230 UINT32_C(0x0)
16231 /* Enhanced Transmission Selection */
16232 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_TSA_ASSIGN_ETS \
16233 UINT32_C(0x1)
16234 /* reserved. */
16235 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_TSA_ASSIGN_RESERVED_FIRST \
16236 UINT32_C(0x2)
16237 /* reserved. */
16238 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID0_TSA_ASSIGN_RESERVED_LAST \
16239 UINT32_C(0xff)
16240 /*
16241 * Priority level for strict priority. Valid only when the
16242 * tsa_assign is 0 - Strict Priority (SP)
16243 * 0..7 - Valid values.
16244 * 8..255 - Reserved.
16245 */
16246 uint8_t queue_id0_pri_lvl;
16247 /*
16248 * Weight used to allocate remaining BW for this COS after
16249 * servicing guaranteed bandwidths for all COS.
16250 */
16251 uint8_t queue_id0_bw_weight;
16252 /* ID of CoS Queue 1. */
16253 uint8_t queue_id1;
16254 /*
16255 * Minimum BW allocated to CoS Queue.
16256 * The HWRM will translate this value into byte counter and
16257 * time interval used for this COS inside the device.
16258 */
16259 uint32_t queue_id1_min_bw;
16260 /* The bandwidth value. */
16261 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_MASK \
16262 UINT32_C(0xfffffff)
16263 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_SFT \
16264 0
16265 /* The granularity of the value (bits or bytes). */
16266 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_SCALE \
16267 UINT32_C(0x10000000)
16268 /* Value is in bits. */
16269 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_SCALE_BITS \
16270 (UINT32_C(0x0) << 28)
16271 /* Value is in bytes. */
16272 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_SCALE_BYTES \
16273 (UINT32_C(0x1) << 28)
16274 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_SCALE_LAST \
16275 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_SCALE_BYTES
16276 /* bw_value_unit is 3 b */
16277 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_MASK \
16278 UINT32_C(0xe0000000)
16279 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_SFT \
16280 29
16281 /* Value is in Mb or MB (base 10). */
16282 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_MEGA \
16283 (UINT32_C(0x0) << 29)
16284 /* Value is in Kb or KB (base 10). */
16285 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_KILO \
16286 (UINT32_C(0x2) << 29)
16287 /* Value is in bits or bytes. */
16288 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_BASE \
16289 (UINT32_C(0x4) << 29)
16290 /* Value is in Gb or GB (base 10). */
16291 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_GIGA \
16292 (UINT32_C(0x6) << 29)
16293 /* Value is in 1/100th of a percentage of total bandwidth. */
16294 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
16295 (UINT32_C(0x1) << 29)
16296 /* Invalid unit */
16297 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_INVALID \
16298 (UINT32_C(0x7) << 29)
16299 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_LAST \
16300 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_INVALID
16301 /*
16302 * Maximum BW allocated to CoS queue.
16303 * The HWRM will translate this value into byte counter and
16304 * time interval used for this COS inside the device.
16305 */
16306 uint32_t queue_id1_max_bw;
16307 /* The bandwidth value. */
16308 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_MASK \
16309 UINT32_C(0xfffffff)
16310 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_SFT \
16311 0
16312 /* The granularity of the value (bits or bytes). */
16313 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_SCALE \
16314 UINT32_C(0x10000000)
16315 /* Value is in bits. */
16316 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_SCALE_BITS \
16317 (UINT32_C(0x0) << 28)
16318 /* Value is in bytes. */
16319 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_SCALE_BYTES \
16320 (UINT32_C(0x1) << 28)
16321 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_SCALE_LAST \
16322 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_SCALE_BYTES
16323 /* bw_value_unit is 3 b */
16324 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_MASK \
16325 UINT32_C(0xe0000000)
16326 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_SFT \
16327 29
16328 /* Value is in Mb or MB (base 10). */
16329 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_MEGA \
16330 (UINT32_C(0x0) << 29)
16331 /* Value is in Kb or KB (base 10). */
16332 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_KILO \
16333 (UINT32_C(0x2) << 29)
16334 /* Value is in bits or bytes. */
16335 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_BASE \
16336 (UINT32_C(0x4) << 29)
16337 /* Value is in Gb or GB (base 10). */
16338 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_GIGA \
16339 (UINT32_C(0x6) << 29)
16340 /* Value is in 1/100th of a percentage of total bandwidth. */
16341 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
16342 (UINT32_C(0x1) << 29)
16343 /* Invalid unit */
16344 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_INVALID \
16345 (UINT32_C(0x7) << 29)
16346 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_LAST \
16347 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_INVALID
16348 /* Transmission Selection Algorithm (TSA) for CoS Queue. */
16349 uint8_t queue_id1_tsa_assign;
16350 /* Strict Priority */
16351 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_TSA_ASSIGN_SP \
16352 UINT32_C(0x0)
16353 /* Enhanced Transmission Selection */
16354 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_TSA_ASSIGN_ETS \
16355 UINT32_C(0x1)
16356 /* reserved. */
16357 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_TSA_ASSIGN_RESERVED_FIRST \
16358 UINT32_C(0x2)
16359 /* reserved. */
16360 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID1_TSA_ASSIGN_RESERVED_LAST \
16361 UINT32_C(0xff)
16362 /*
16363 * Priority level for strict priority. Valid only when the
16364 * tsa_assign is 0 - Strict Priority (SP)
16365 * 0..7 - Valid values.
16366 * 8..255 - Reserved.
16367 */
16368 uint8_t queue_id1_pri_lvl;
16369 /*
16370 * Weight used to allocate remaining BW for this COS after
16371 * servicing guaranteed bandwidths for all COS.
16372 */
16373 uint8_t queue_id1_bw_weight;
16374 /* ID of CoS Queue 2. */
16375 uint8_t queue_id2;
16376 /*
16377 * Minimum BW allocated to CoS Queue.
16378 * The HWRM will translate this value into byte counter and
16379 * time interval used for this COS inside the device.
16380 */
16381 uint32_t queue_id2_min_bw;
16382 /* The bandwidth value. */
16383 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_MASK \
16384 UINT32_C(0xfffffff)
16385 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_SFT \
16386 0
16387 /* The granularity of the value (bits or bytes). */
16388 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_SCALE \
16389 UINT32_C(0x10000000)
16390 /* Value is in bits. */
16391 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_SCALE_BITS \
16392 (UINT32_C(0x0) << 28)
16393 /* Value is in bytes. */
16394 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_SCALE_BYTES \
16395 (UINT32_C(0x1) << 28)
16396 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_SCALE_LAST \
16397 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_SCALE_BYTES
16398 /* bw_value_unit is 3 b */
16399 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_MASK \
16400 UINT32_C(0xe0000000)
16401 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_SFT \
16402 29
16403 /* Value is in Mb or MB (base 10). */
16404 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_MEGA \
16405 (UINT32_C(0x0) << 29)
16406 /* Value is in Kb or KB (base 10). */
16407 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_KILO \
16408 (UINT32_C(0x2) << 29)
16409 /* Value is in bits or bytes. */
16410 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_BASE \
16411 (UINT32_C(0x4) << 29)
16412 /* Value is in Gb or GB (base 10). */
16413 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_GIGA \
16414 (UINT32_C(0x6) << 29)
16415 /* Value is in 1/100th of a percentage of total bandwidth. */
16416 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
16417 (UINT32_C(0x1) << 29)
16418 /* Invalid unit */
16419 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_INVALID \
16420 (UINT32_C(0x7) << 29)
16421 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_LAST \
16422 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_INVALID
16423 /*
16424 * Maximum BW allocated to CoS queue.
16425 * The HWRM will translate this value into byte counter and
16426 * time interval used for this COS inside the device.
16427 */
16428 uint32_t queue_id2_max_bw;
16429 /* The bandwidth value. */
16430 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_MASK \
16431 UINT32_C(0xfffffff)
16432 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_SFT \
16433 0
16434 /* The granularity of the value (bits or bytes). */
16435 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_SCALE \
16436 UINT32_C(0x10000000)
16437 /* Value is in bits. */
16438 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_SCALE_BITS \
16439 (UINT32_C(0x0) << 28)
16440 /* Value is in bytes. */
16441 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_SCALE_BYTES \
16442 (UINT32_C(0x1) << 28)
16443 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_SCALE_LAST \
16444 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_SCALE_BYTES
16445 /* bw_value_unit is 3 b */
16446 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_MASK \
16447 UINT32_C(0xe0000000)
16448 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_SFT \
16449 29
16450 /* Value is in Mb or MB (base 10). */
16451 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_MEGA \
16452 (UINT32_C(0x0) << 29)
16453 /* Value is in Kb or KB (base 10). */
16454 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_KILO \
16455 (UINT32_C(0x2) << 29)
16456 /* Value is in bits or bytes. */
16457 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_BASE \
16458 (UINT32_C(0x4) << 29)
16459 /* Value is in Gb or GB (base 10). */
16460 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_GIGA \
16461 (UINT32_C(0x6) << 29)
16462 /* Value is in 1/100th of a percentage of total bandwidth. */
16463 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
16464 (UINT32_C(0x1) << 29)
16465 /* Invalid unit */
16466 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_INVALID \
16467 (UINT32_C(0x7) << 29)
16468 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_LAST \
16469 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_INVALID
16470 /* Transmission Selection Algorithm (TSA) for CoS Queue. */
16471 uint8_t queue_id2_tsa_assign;
16472 /* Strict Priority */
16473 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_TSA_ASSIGN_SP \
16474 UINT32_C(0x0)
16475 /* Enhanced Transmission Selection */
16476 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_TSA_ASSIGN_ETS \
16477 UINT32_C(0x1)
16478 /* reserved. */
16479 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_TSA_ASSIGN_RESERVED_FIRST \
16480 UINT32_C(0x2)
16481 /* reserved. */
16482 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID2_TSA_ASSIGN_RESERVED_LAST \
16483 UINT32_C(0xff)
16484 /*
16485 * Priority level for strict priority. Valid only when the
16486 * tsa_assign is 0 - Strict Priority (SP)
16487 * 0..7 - Valid values.
16488 * 8..255 - Reserved.
16489 */
16490 uint8_t queue_id2_pri_lvl;
16491 /*
16492 * Weight used to allocate remaining BW for this COS after
16493 * servicing guaranteed bandwidths for all COS.
16494 */
16495 uint8_t queue_id2_bw_weight;
16496 /* ID of CoS Queue 3. */
16497 uint8_t queue_id3;
16498 /*
16499 * Minimum BW allocated to CoS Queue.
16500 * The HWRM will translate this value into byte counter and
16501 * time interval used for this COS inside the device.
16502 */
16503 uint32_t queue_id3_min_bw;
16504 /* The bandwidth value. */
16505 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_MASK \
16506 UINT32_C(0xfffffff)
16507 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_SFT \
16508 0
16509 /* The granularity of the value (bits or bytes). */
16510 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_SCALE \
16511 UINT32_C(0x10000000)
16512 /* Value is in bits. */
16513 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_SCALE_BITS \
16514 (UINT32_C(0x0) << 28)
16515 /* Value is in bytes. */
16516 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_SCALE_BYTES \
16517 (UINT32_C(0x1) << 28)
16518 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_SCALE_LAST \
16519 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_SCALE_BYTES
16520 /* bw_value_unit is 3 b */
16521 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_MASK \
16522 UINT32_C(0xe0000000)
16523 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_SFT \
16524 29
16525 /* Value is in Mb or MB (base 10). */
16526 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_MEGA \
16527 (UINT32_C(0x0) << 29)
16528 /* Value is in Kb or KB (base 10). */
16529 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_KILO \
16530 (UINT32_C(0x2) << 29)
16531 /* Value is in bits or bytes. */
16532 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_BASE \
16533 (UINT32_C(0x4) << 29)
16534 /* Value is in Gb or GB (base 10). */
16535 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_GIGA \
16536 (UINT32_C(0x6) << 29)
16537 /* Value is in 1/100th of a percentage of total bandwidth. */
16538 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
16539 (UINT32_C(0x1) << 29)
16540 /* Invalid unit */
16541 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_INVALID \
16542 (UINT32_C(0x7) << 29)
16543 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_LAST \
16544 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_INVALID
16545 /*
16546 * Maximum BW allocated to CoS queue.
16547 * The HWRM will translate this value into byte counter and
16548 * time interval used for this COS inside the device.
16549 */
16550 uint32_t queue_id3_max_bw;
16551 /* The bandwidth value. */
16552 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_MASK \
16553 UINT32_C(0xfffffff)
16554 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_SFT \
16555 0
16556 /* The granularity of the value (bits or bytes). */
16557 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_SCALE \
16558 UINT32_C(0x10000000)
16559 /* Value is in bits. */
16560 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_SCALE_BITS \
16561 (UINT32_C(0x0) << 28)
16562 /* Value is in bytes. */
16563 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_SCALE_BYTES \
16564 (UINT32_C(0x1) << 28)
16565 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_SCALE_LAST \
16566 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_SCALE_BYTES
16567 /* bw_value_unit is 3 b */
16568 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_MASK \
16569 UINT32_C(0xe0000000)
16570 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_SFT \
16571 29
16572 /* Value is in Mb or MB (base 10). */
16573 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_MEGA \
16574 (UINT32_C(0x0) << 29)
16575 /* Value is in Kb or KB (base 10). */
16576 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_KILO \
16577 (UINT32_C(0x2) << 29)
16578 /* Value is in bits or bytes. */
16579 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_BASE \
16580 (UINT32_C(0x4) << 29)
16581 /* Value is in Gb or GB (base 10). */
16582 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_GIGA \
16583 (UINT32_C(0x6) << 29)
16584 /* Value is in 1/100th of a percentage of total bandwidth. */
16585 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
16586 (UINT32_C(0x1) << 29)
16587 /* Invalid unit */
16588 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_INVALID \
16589 (UINT32_C(0x7) << 29)
16590 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_LAST \
16591 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_INVALID
16592 /* Transmission Selection Algorithm (TSA) for CoS Queue. */
16593 uint8_t queue_id3_tsa_assign;
16594 /* Strict Priority */
16595 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_TSA_ASSIGN_SP \
16596 UINT32_C(0x0)
16597 /* Enhanced Transmission Selection */
16598 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_TSA_ASSIGN_ETS \
16599 UINT32_C(0x1)
16600 /* reserved. */
16601 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_TSA_ASSIGN_RESERVED_FIRST \
16602 UINT32_C(0x2)
16603 /* reserved. */
16604 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID3_TSA_ASSIGN_RESERVED_LAST \
16605 UINT32_C(0xff)
16606 /*
16607 * Priority level for strict priority. Valid only when the
16608 * tsa_assign is 0 - Strict Priority (SP)
16609 * 0..7 - Valid values.
16610 * 8..255 - Reserved.
16611 */
16612 uint8_t queue_id3_pri_lvl;
16613 /*
16614 * Weight used to allocate remaining BW for this COS after
16615 * servicing guaranteed bandwidths for all COS.
16616 */
16617 uint8_t queue_id3_bw_weight;
16618 /* ID of CoS Queue 4. */
16619 uint8_t queue_id4;
16620 /*
16621 * Minimum BW allocated to CoS Queue.
16622 * The HWRM will translate this value into byte counter and
16623 * time interval used for this COS inside the device.
16624 */
16625 uint32_t queue_id4_min_bw;
16626 /* The bandwidth value. */
16627 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_MASK \
16628 UINT32_C(0xfffffff)
16629 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_SFT \
16630 0
16631 /* The granularity of the value (bits or bytes). */
16632 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_SCALE \
16633 UINT32_C(0x10000000)
16634 /* Value is in bits. */
16635 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_SCALE_BITS \
16636 (UINT32_C(0x0) << 28)
16637 /* Value is in bytes. */
16638 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_SCALE_BYTES \
16639 (UINT32_C(0x1) << 28)
16640 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_SCALE_LAST \
16641 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_SCALE_BYTES
16642 /* bw_value_unit is 3 b */
16643 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_MASK \
16644 UINT32_C(0xe0000000)
16645 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_SFT \
16646 29
16647 /* Value is in Mb or MB (base 10). */
16648 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_MEGA \
16649 (UINT32_C(0x0) << 29)
16650 /* Value is in Kb or KB (base 10). */
16651 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_KILO \
16652 (UINT32_C(0x2) << 29)
16653 /* Value is in bits or bytes. */
16654 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_BASE \
16655 (UINT32_C(0x4) << 29)
16656 /* Value is in Gb or GB (base 10). */
16657 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_GIGA \
16658 (UINT32_C(0x6) << 29)
16659 /* Value is in 1/100th of a percentage of total bandwidth. */
16660 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
16661 (UINT32_C(0x1) << 29)
16662 /* Invalid unit */
16663 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_INVALID \
16664 (UINT32_C(0x7) << 29)
16665 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_LAST \
16666 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_INVALID
16667 /*
16668 * Maximum BW allocated to CoS queue.
16669 * The HWRM will translate this value into byte counter and
16670 * time interval used for this COS inside the device.
16671 */
16672 uint32_t queue_id4_max_bw;
16673 /* The bandwidth value. */
16674 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_MASK \
16675 UINT32_C(0xfffffff)
16676 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_SFT \
16677 0
16678 /* The granularity of the value (bits or bytes). */
16679 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_SCALE \
16680 UINT32_C(0x10000000)
16681 /* Value is in bits. */
16682 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_SCALE_BITS \
16683 (UINT32_C(0x0) << 28)
16684 /* Value is in bytes. */
16685 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_SCALE_BYTES \
16686 (UINT32_C(0x1) << 28)
16687 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_SCALE_LAST \
16688 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_SCALE_BYTES
16689 /* bw_value_unit is 3 b */
16690 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_MASK \
16691 UINT32_C(0xe0000000)
16692 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_SFT \
16693 29
16694 /* Value is in Mb or MB (base 10). */
16695 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_MEGA \
16696 (UINT32_C(0x0) << 29)
16697 /* Value is in Kb or KB (base 10). */
16698 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_KILO \
16699 (UINT32_C(0x2) << 29)
16700 /* Value is in bits or bytes. */
16701 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_BASE \
16702 (UINT32_C(0x4) << 29)
16703 /* Value is in Gb or GB (base 10). */
16704 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_GIGA \
16705 (UINT32_C(0x6) << 29)
16706 /* Value is in 1/100th of a percentage of total bandwidth. */
16707 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
16708 (UINT32_C(0x1) << 29)
16709 /* Invalid unit */
16710 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_INVALID \
16711 (UINT32_C(0x7) << 29)
16712 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_LAST \
16713 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_INVALID
16714 /* Transmission Selection Algorithm (TSA) for CoS Queue. */
16715 uint8_t queue_id4_tsa_assign;
16716 /* Strict Priority */
16717 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_TSA_ASSIGN_SP \
16718 UINT32_C(0x0)
16719 /* Enhanced Transmission Selection */
16720 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_TSA_ASSIGN_ETS \
16721 UINT32_C(0x1)
16722 /* reserved. */
16723 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_TSA_ASSIGN_RESERVED_FIRST \
16724 UINT32_C(0x2)
16725 /* reserved. */
16726 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID4_TSA_ASSIGN_RESERVED_LAST \
16727 UINT32_C(0xff)
16728 /*
16729 * Priority level for strict priority. Valid only when the
16730 * tsa_assign is 0 - Strict Priority (SP)
16731 * 0..7 - Valid values.
16732 * 8..255 - Reserved.
16733 */
16734 uint8_t queue_id4_pri_lvl;
16735 /*
16736 * Weight used to allocate remaining BW for this COS after
16737 * servicing guaranteed bandwidths for all COS.
16738 */
16739 uint8_t queue_id4_bw_weight;
16740 /* ID of CoS Queue 5. */
16741 uint8_t queue_id5;
16742 /*
16743 * Minimum BW allocated to CoS Queue.
16744 * The HWRM will translate this value into byte counter and
16745 * time interval used for this COS inside the device.
16746 */
16747 uint32_t queue_id5_min_bw;
16748 /* The bandwidth value. */
16749 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_MASK \
16750 UINT32_C(0xfffffff)
16751 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_SFT \
16752 0
16753 /* The granularity of the value (bits or bytes). */
16754 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_SCALE \
16755 UINT32_C(0x10000000)
16756 /* Value is in bits. */
16757 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_SCALE_BITS \
16758 (UINT32_C(0x0) << 28)
16759 /* Value is in bytes. */
16760 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_SCALE_BYTES \
16761 (UINT32_C(0x1) << 28)
16762 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_SCALE_LAST \
16763 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_SCALE_BYTES
16764 /* bw_value_unit is 3 b */
16765 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_MASK \
16766 UINT32_C(0xe0000000)
16767 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_SFT \
16768 29
16769 /* Value is in Mb or MB (base 10). */
16770 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_MEGA \
16771 (UINT32_C(0x0) << 29)
16772 /* Value is in Kb or KB (base 10). */
16773 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_KILO \
16774 (UINT32_C(0x2) << 29)
16775 /* Value is in bits or bytes. */
16776 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_BASE \
16777 (UINT32_C(0x4) << 29)
16778 /* Value is in Gb or GB (base 10). */
16779 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_GIGA \
16780 (UINT32_C(0x6) << 29)
16781 /* Value is in 1/100th of a percentage of total bandwidth. */
16782 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
16783 (UINT32_C(0x1) << 29)
16784 /* Invalid unit */
16785 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_INVALID \
16786 (UINT32_C(0x7) << 29)
16787 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_LAST \
16788 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_INVALID
16789 /*
16790 * Maximum BW allocated to CoS queue.
16791 * The HWRM will translate this value into byte counter and
16792 * time interval used for this COS inside the device.
16793 */
16794 uint32_t queue_id5_max_bw;
16795 /* The bandwidth value. */
16796 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_MASK \
16797 UINT32_C(0xfffffff)
16798 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_SFT \
16799 0
16800 /* The granularity of the value (bits or bytes). */
16801 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_SCALE \
16802 UINT32_C(0x10000000)
16803 /* Value is in bits. */
16804 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_SCALE_BITS \
16805 (UINT32_C(0x0) << 28)
16806 /* Value is in bytes. */
16807 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_SCALE_BYTES \
16808 (UINT32_C(0x1) << 28)
16809 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_SCALE_LAST \
16810 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_SCALE_BYTES
16811 /* bw_value_unit is 3 b */
16812 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_MASK \
16813 UINT32_C(0xe0000000)
16814 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_SFT \
16815 29
16816 /* Value is in Mb or MB (base 10). */
16817 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_MEGA \
16818 (UINT32_C(0x0) << 29)
16819 /* Value is in Kb or KB (base 10). */
16820 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_KILO \
16821 (UINT32_C(0x2) << 29)
16822 /* Value is in bits or bytes. */
16823 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_BASE \
16824 (UINT32_C(0x4) << 29)
16825 /* Value is in Gb or GB (base 10). */
16826 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_GIGA \
16827 (UINT32_C(0x6) << 29)
16828 /* Value is in 1/100th of a percentage of total bandwidth. */
16829 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
16830 (UINT32_C(0x1) << 29)
16831 /* Invalid unit */
16832 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_INVALID \
16833 (UINT32_C(0x7) << 29)
16834 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_LAST \
16835 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_INVALID
16836 /* Transmission Selection Algorithm (TSA) for CoS Queue. */
16837 uint8_t queue_id5_tsa_assign;
16838 /* Strict Priority */
16839 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_TSA_ASSIGN_SP \
16840 UINT32_C(0x0)
16841 /* Enhanced Transmission Selection */
16842 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_TSA_ASSIGN_ETS \
16843 UINT32_C(0x1)
16844 /* reserved. */
16845 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_TSA_ASSIGN_RESERVED_FIRST \
16846 UINT32_C(0x2)
16847 /* reserved. */
16848 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID5_TSA_ASSIGN_RESERVED_LAST \
16849 UINT32_C(0xff)
16850 /*
16851 * Priority level for strict priority. Valid only when the
16852 * tsa_assign is 0 - Strict Priority (SP)
16853 * 0..7 - Valid values.
16854 * 8..255 - Reserved.
16855 */
16856 uint8_t queue_id5_pri_lvl;
16857 /*
16858 * Weight used to allocate remaining BW for this COS after
16859 * servicing guaranteed bandwidths for all COS.
16860 */
16861 uint8_t queue_id5_bw_weight;
16862 /* ID of CoS Queue 6. */
16863 uint8_t queue_id6;
16864 /*
16865 * Minimum BW allocated to CoS Queue.
16866 * The HWRM will translate this value into byte counter and
16867 * time interval used for this COS inside the device.
16868 */
16869 uint32_t queue_id6_min_bw;
16870 /* The bandwidth value. */
16871 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_MASK \
16872 UINT32_C(0xfffffff)
16873 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_SFT \
16874 0
16875 /* The granularity of the value (bits or bytes). */
16876 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_SCALE \
16877 UINT32_C(0x10000000)
16878 /* Value is in bits. */
16879 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_SCALE_BITS \
16880 (UINT32_C(0x0) << 28)
16881 /* Value is in bytes. */
16882 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_SCALE_BYTES \
16883 (UINT32_C(0x1) << 28)
16884 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_SCALE_LAST \
16885 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_SCALE_BYTES
16886 /* bw_value_unit is 3 b */
16887 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_MASK \
16888 UINT32_C(0xe0000000)
16889 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_SFT \
16890 29
16891 /* Value is in Mb or MB (base 10). */
16892 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_MEGA \
16893 (UINT32_C(0x0) << 29)
16894 /* Value is in Kb or KB (base 10). */
16895 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_KILO \
16896 (UINT32_C(0x2) << 29)
16897 /* Value is in bits or bytes. */
16898 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_BASE \
16899 (UINT32_C(0x4) << 29)
16900 /* Value is in Gb or GB (base 10). */
16901 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_GIGA \
16902 (UINT32_C(0x6) << 29)
16903 /* Value is in 1/100th of a percentage of total bandwidth. */
16904 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
16905 (UINT32_C(0x1) << 29)
16906 /* Invalid unit */
16907 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_INVALID \
16908 (UINT32_C(0x7) << 29)
16909 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_LAST \
16910 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_INVALID
16911 /*
16912 * Maximum BW allocated to CoS queue.
16913 * The HWRM will translate this value into byte counter and
16914 * time interval used for this COS inside the device.
16915 */
16916 uint32_t queue_id6_max_bw;
16917 /* The bandwidth value. */
16918 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_MASK \
16919 UINT32_C(0xfffffff)
16920 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_SFT \
16921 0
16922 /* The granularity of the value (bits or bytes). */
16923 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_SCALE \
16924 UINT32_C(0x10000000)
16925 /* Value is in bits. */
16926 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_SCALE_BITS \
16927 (UINT32_C(0x0) << 28)
16928 /* Value is in bytes. */
16929 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_SCALE_BYTES \
16930 (UINT32_C(0x1) << 28)
16931 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_SCALE_LAST \
16932 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_SCALE_BYTES
16933 /* bw_value_unit is 3 b */
16934 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_MASK \
16935 UINT32_C(0xe0000000)
16936 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_SFT \
16937 29
16938 /* Value is in Mb or MB (base 10). */
16939 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_MEGA \
16940 (UINT32_C(0x0) << 29)
16941 /* Value is in Kb or KB (base 10). */
16942 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_KILO \
16943 (UINT32_C(0x2) << 29)
16944 /* Value is in bits or bytes. */
16945 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_BASE \
16946 (UINT32_C(0x4) << 29)
16947 /* Value is in Gb or GB (base 10). */
16948 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_GIGA \
16949 (UINT32_C(0x6) << 29)
16950 /* Value is in 1/100th of a percentage of total bandwidth. */
16951 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
16952 (UINT32_C(0x1) << 29)
16953 /* Invalid unit */
16954 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_INVALID \
16955 (UINT32_C(0x7) << 29)
16956 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_LAST \
16957 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_INVALID
16958 /* Transmission Selection Algorithm (TSA) for CoS Queue. */
16959 uint8_t queue_id6_tsa_assign;
16960 /* Strict Priority */
16961 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_TSA_ASSIGN_SP \
16962 UINT32_C(0x0)
16963 /* Enhanced Transmission Selection */
16964 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_TSA_ASSIGN_ETS \
16965 UINT32_C(0x1)
16966 /* reserved. */
16967 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_TSA_ASSIGN_RESERVED_FIRST \
16968 UINT32_C(0x2)
16969 /* reserved. */
16970 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID6_TSA_ASSIGN_RESERVED_LAST \
16971 UINT32_C(0xff)
16972 /*
16973 * Priority level for strict priority. Valid only when the
16974 * tsa_assign is 0 - Strict Priority (SP)
16975 * 0..7 - Valid values.
16976 * 8..255 - Reserved.
16977 */
16978 uint8_t queue_id6_pri_lvl;
16979 /*
16980 * Weight used to allocate remaining BW for this COS after
16981 * servicing guaranteed bandwidths for all COS.
16982 */
16983 uint8_t queue_id6_bw_weight;
16984 /* ID of CoS Queue 7. */
16985 uint8_t queue_id7;
16986 /*
16987 * Minimum BW allocated to CoS Queue.
16988 * The HWRM will translate this value into byte counter and
16989 * time interval used for this COS inside the device.
16990 */
16991 uint32_t queue_id7_min_bw;
16992 /* The bandwidth value. */
16993 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_MASK \
16994 UINT32_C(0xfffffff)
16995 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_SFT \
16996 0
16997 /* The granularity of the value (bits or bytes). */
16998 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_SCALE \
16999 UINT32_C(0x10000000)
17000 /* Value is in bits. */
17001 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_SCALE_BITS \
17002 (UINT32_C(0x0) << 28)
17003 /* Value is in bytes. */
17004 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_SCALE_BYTES \
17005 (UINT32_C(0x1) << 28)
17006 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_SCALE_LAST \
17007 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_SCALE_BYTES
17008 /* bw_value_unit is 3 b */
17009 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_MASK \
17010 UINT32_C(0xe0000000)
17011 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_SFT \
17012 29
17013 /* Value is in Mb or MB (base 10). */
17014 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_MEGA \
17015 (UINT32_C(0x0) << 29)
17016 /* Value is in Kb or KB (base 10). */
17017 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_KILO \
17018 (UINT32_C(0x2) << 29)
17019 /* Value is in bits or bytes. */
17020 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_BASE \
17021 (UINT32_C(0x4) << 29)
17022 /* Value is in Gb or GB (base 10). */
17023 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_GIGA \
17024 (UINT32_C(0x6) << 29)
17025 /* Value is in 1/100th of a percentage of total bandwidth. */
17026 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
17027 (UINT32_C(0x1) << 29)
17028 /* Invalid unit */
17029 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_INVALID \
17030 (UINT32_C(0x7) << 29)
17031 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_LAST \
17032 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_INVALID
17033 /*
17034 * Maximum BW allocated to CoS queue.
17035 * The HWRM will translate this value into byte counter and
17036 * time interval used for this COS inside the device.
17037 */
17038 uint32_t queue_id7_max_bw;
17039 /* The bandwidth value. */
17040 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_MASK \
17041 UINT32_C(0xfffffff)
17042 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_SFT \
17043 0
17044 /* The granularity of the value (bits or bytes). */
17045 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_SCALE \
17046 UINT32_C(0x10000000)
17047 /* Value is in bits. */
17048 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_SCALE_BITS \
17049 (UINT32_C(0x0) << 28)
17050 /* Value is in bytes. */
17051 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_SCALE_BYTES \
17052 (UINT32_C(0x1) << 28)
17053 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_SCALE_LAST \
17054 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_SCALE_BYTES
17055 /* bw_value_unit is 3 b */
17056 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_MASK \
17057 UINT32_C(0xe0000000)
17058 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_SFT \
17059 29
17060 /* Value is in Mb or MB (base 10). */
17061 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_MEGA \
17062 (UINT32_C(0x0) << 29)
17063 /* Value is in Kb or KB (base 10). */
17064 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_KILO \
17065 (UINT32_C(0x2) << 29)
17066 /* Value is in bits or bytes. */
17067 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_BASE \
17068 (UINT32_C(0x4) << 29)
17069 /* Value is in Gb or GB (base 10). */
17070 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_GIGA \
17071 (UINT32_C(0x6) << 29)
17072 /* Value is in 1/100th of a percentage of total bandwidth. */
17073 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
17074 (UINT32_C(0x1) << 29)
17075 /* Invalid unit */
17076 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_INVALID \
17077 (UINT32_C(0x7) << 29)
17078 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_LAST \
17079 HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_INVALID
17080 /* Transmission Selection Algorithm (TSA) for CoS Queue. */
17081 uint8_t queue_id7_tsa_assign;
17082 /* Strict Priority */
17083 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_TSA_ASSIGN_SP \
17084 UINT32_C(0x0)
17085 /* Enhanced Transmission Selection */
17086 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_TSA_ASSIGN_ETS \
17087 UINT32_C(0x1)
17088 /* reserved. */
17089 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_TSA_ASSIGN_RESERVED_FIRST \
17090 UINT32_C(0x2)
17091 /* reserved. */
17092 #define HWRM_QUEUE_COS2BW_QCFG_OUTPUT_QUEUE_ID7_TSA_ASSIGN_RESERVED_LAST \
17093 UINT32_C(0xff)
17094 /*
17095 * Priority level for strict priority. Valid only when the
17096 * tsa_assign is 0 - Strict Priority (SP)
17097 * 0..7 - Valid values.
17098 * 8..255 - Reserved.
17099 */
17100 uint8_t queue_id7_pri_lvl;
17101 /*
17102 * Weight used to allocate remaining BW for this COS after
17103 * servicing guaranteed bandwidths for all COS.
17104 */
17105 uint8_t queue_id7_bw_weight;
17106 uint8_t unused_2[4];
17107 /*
17108 * This field is used in Output records to indicate that the output
17109 * is completely written to RAM. This field should be read as '1'
17110 * to indicate that the output has been completely written.
17111 * When writing a command completion or response to an internal processor,
17112 * the order of writes has to be such that this field is written last.
17113 */
17114 uint8_t valid;
17115} __attribute__((packed));
17116
17117/*************************
17118 * hwrm_queue_cos2bw_cfg *
17119 *************************/
17120
17121
17122/* hwrm_queue_cos2bw_cfg_input (size:1024b/128B) */
17123struct hwrm_queue_cos2bw_cfg_input {
17124 /* The HWRM command request type. */
17125 uint16_t req_type;
17126 /*
17127 * The completion ring to send the completion event on. This should
17128 * be the NQ ID returned from the `nq_alloc` HWRM command.
17129 */
17130 uint16_t cmpl_ring;
17131 /*
17132 * The sequence ID is used by the driver for tracking multiple
17133 * commands. This ID is treated as opaque data by the firmware and
17134 * the value is returned in the `hwrm_resp_hdr` upon completion.
17135 */
17136 uint16_t seq_id;
17137 /*
17138 * The target ID of the command:
17139 * * 0x0-0xFFF8 - The function ID
17140 * * 0xFFF8-0xFFFE - Reserved for internal processors
17141 * * 0xFFFF - HWRM
17142 */
17143 uint16_t target_id;
17144 /*
17145 * A physical address pointer pointing to a host buffer that the
17146 * command's response data will be written. This can be either a host
17147 * physical address (HPA) or a guest physical address (GPA) and must
17148 * point to a physically contiguous block of memory.
17149 */
17150 uint64_t resp_addr;
17151 uint32_t flags;
17152 uint32_t enables;
17153 /*
17154 * If this bit is set to 1, then all queue_id0 related
17155 * parameters in this command are valid.
17156 */
17157 #define HWRM_QUEUE_COS2BW_CFG_INPUT_ENABLES_COS_QUEUE_ID0_VALID \
17158 UINT32_C(0x1)
17159 /*
17160 * If this bit is set to 1, then all queue_id1 related
17161 * parameters in this command are valid.
17162 */
17163 #define HWRM_QUEUE_COS2BW_CFG_INPUT_ENABLES_COS_QUEUE_ID1_VALID \
17164 UINT32_C(0x2)
17165 /*
17166 * If this bit is set to 1, then all queue_id2 related
17167 * parameters in this command are valid.
17168 */
17169 #define HWRM_QUEUE_COS2BW_CFG_INPUT_ENABLES_COS_QUEUE_ID2_VALID \
17170 UINT32_C(0x4)
17171 /*
17172 * If this bit is set to 1, then all queue_id3 related
17173 * parameters in this command are valid.
17174 */
17175 #define HWRM_QUEUE_COS2BW_CFG_INPUT_ENABLES_COS_QUEUE_ID3_VALID \
17176 UINT32_C(0x8)
17177 /*
17178 * If this bit is set to 1, then all queue_id4 related
17179 * parameters in this command are valid.
17180 */
17181 #define HWRM_QUEUE_COS2BW_CFG_INPUT_ENABLES_COS_QUEUE_ID4_VALID \
17182 UINT32_C(0x10)
17183 /*
17184 * If this bit is set to 1, then all queue_id5 related
17185 * parameters in this command are valid.
17186 */
17187 #define HWRM_QUEUE_COS2BW_CFG_INPUT_ENABLES_COS_QUEUE_ID5_VALID \
17188 UINT32_C(0x20)
17189 /*
17190 * If this bit is set to 1, then all queue_id6 related
17191 * parameters in this command are valid.
17192 */
17193 #define HWRM_QUEUE_COS2BW_CFG_INPUT_ENABLES_COS_QUEUE_ID6_VALID \
17194 UINT32_C(0x40)
17195 /*
17196 * If this bit is set to 1, then all queue_id7 related
17197 * parameters in this command are valid.
17198 */
17199 #define HWRM_QUEUE_COS2BW_CFG_INPUT_ENABLES_COS_QUEUE_ID7_VALID \
17200 UINT32_C(0x80)
17201 /*
17202 * Port ID of port for which the table is being configured.
17203 * The HWRM needs to check whether this function is allowed
17204 * to configure TC BW assignment on this port.
17205 */
17206 uint16_t port_id;
17207 /* ID of CoS Queue 0. */
17208 uint8_t queue_id0;
17209 uint8_t unused_0;
17210 /*
17211 * Minimum BW allocated to CoS Queue.
17212 * The HWRM will translate this value into byte counter and
17213 * time interval used for this COS inside the device.
17214 */
17215 uint32_t queue_id0_min_bw;
17216 /* The bandwidth value. */
17217 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_MASK \
17218 UINT32_C(0xfffffff)
17219 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_SFT \
17220 0
17221 /* The granularity of the value (bits or bytes). */
17222 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_SCALE \
17223 UINT32_C(0x10000000)
17224 /* Value is in bits. */
17225 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_SCALE_BITS \
17226 (UINT32_C(0x0) << 28)
17227 /* Value is in bytes. */
17228 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_SCALE_BYTES \
17229 (UINT32_C(0x1) << 28)
17230 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_SCALE_LAST \
17231 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_SCALE_BYTES
17232 /* bw_value_unit is 3 b */
17233 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_MASK \
17234 UINT32_C(0xe0000000)
17235 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_SFT \
17236 29
17237 /* Value is in Mb or MB (base 10). */
17238 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_MEGA \
17239 (UINT32_C(0x0) << 29)
17240 /* Value is in Kb or KB (base 10). */
17241 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_KILO \
17242 (UINT32_C(0x2) << 29)
17243 /* Value is in bits or bytes. */
17244 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_BASE \
17245 (UINT32_C(0x4) << 29)
17246 /* Value is in Gb or GB (base 10). */
17247 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_GIGA \
17248 (UINT32_C(0x6) << 29)
17249 /* Value is in 1/100th of a percentage of total bandwidth. */
17250 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
17251 (UINT32_C(0x1) << 29)
17252 /* Invalid unit */
17253 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_INVALID \
17254 (UINT32_C(0x7) << 29)
17255 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_LAST \
17256 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MIN_BW_BW_VALUE_UNIT_INVALID
17257 /*
17258 * Maximum BW allocated to CoS Queue.
17259 * The HWRM will translate this value into byte counter and
17260 * time interval used for this COS inside the device.
17261 */
17262 uint32_t queue_id0_max_bw;
17263 /* The bandwidth value. */
17264 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_MASK \
17265 UINT32_C(0xfffffff)
17266 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_SFT \
17267 0
17268 /* The granularity of the value (bits or bytes). */
17269 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_SCALE \
17270 UINT32_C(0x10000000)
17271 /* Value is in bits. */
17272 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_SCALE_BITS \
17273 (UINT32_C(0x0) << 28)
17274 /* Value is in bytes. */
17275 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_SCALE_BYTES \
17276 (UINT32_C(0x1) << 28)
17277 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_SCALE_LAST \
17278 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_SCALE_BYTES
17279 /* bw_value_unit is 3 b */
17280 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_MASK \
17281 UINT32_C(0xe0000000)
17282 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_SFT \
17283 29
17284 /* Value is in Mb or MB (base 10). */
17285 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_MEGA \
17286 (UINT32_C(0x0) << 29)
17287 /* Value is in Kb or KB (base 10). */
17288 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_KILO \
17289 (UINT32_C(0x2) << 29)
17290 /* Value is in bits or bytes. */
17291 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_BASE \
17292 (UINT32_C(0x4) << 29)
17293 /* Value is in Gb or GB (base 10). */
17294 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_GIGA \
17295 (UINT32_C(0x6) << 29)
17296 /* Value is in 1/100th of a percentage of total bandwidth. */
17297 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
17298 (UINT32_C(0x1) << 29)
17299 /* Invalid unit */
17300 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_INVALID \
17301 (UINT32_C(0x7) << 29)
17302 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_LAST \
17303 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_MAX_BW_BW_VALUE_UNIT_INVALID
17304 /* Transmission Selection Algorithm (TSA) for CoS Queue. */
17305 uint8_t queue_id0_tsa_assign;
17306 /* Strict Priority */
17307 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_TSA_ASSIGN_SP \
17308 UINT32_C(0x0)
17309 /* Enhanced Transmission Selection */
17310 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_TSA_ASSIGN_ETS \
17311 UINT32_C(0x1)
17312 /* reserved. */
17313 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_TSA_ASSIGN_RESERVED_FIRST \
17314 UINT32_C(0x2)
17315 /* reserved. */
17316 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID0_TSA_ASSIGN_RESERVED_LAST \
17317 UINT32_C(0xff)
17318 /*
17319 * Priority level for strict priority. Valid only when the
17320 * tsa_assign is 0 - Strict Priority (SP)
17321 * 0..7 - Valid values.
17322 * 8..255 - Reserved.
17323 */
17324 uint8_t queue_id0_pri_lvl;
17325 /*
17326 * Weight used to allocate remaining BW for this COS after
17327 * servicing guaranteed bandwidths for all COS.
17328 */
17329 uint8_t queue_id0_bw_weight;
17330 /* ID of CoS Queue 1. */
17331 uint8_t queue_id1;
17332 /*
17333 * Minimum BW allocated to CoS Queue.
17334 * The HWRM will translate this value into byte counter and
17335 * time interval used for this COS inside the device.
17336 */
17337 uint32_t queue_id1_min_bw;
17338 /* The bandwidth value. */
17339 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_MASK \
17340 UINT32_C(0xfffffff)
17341 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_SFT \
17342 0
17343 /* The granularity of the value (bits or bytes). */
17344 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_SCALE \
17345 UINT32_C(0x10000000)
17346 /* Value is in bits. */
17347 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_SCALE_BITS \
17348 (UINT32_C(0x0) << 28)
17349 /* Value is in bytes. */
17350 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_SCALE_BYTES \
17351 (UINT32_C(0x1) << 28)
17352 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_SCALE_LAST \
17353 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_SCALE_BYTES
17354 /* bw_value_unit is 3 b */
17355 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_MASK \
17356 UINT32_C(0xe0000000)
17357 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_SFT \
17358 29
17359 /* Value is in Mb or MB (base 10). */
17360 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_MEGA \
17361 (UINT32_C(0x0) << 29)
17362 /* Value is in Kb or KB (base 10). */
17363 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_KILO \
17364 (UINT32_C(0x2) << 29)
17365 /* Value is in bits or bytes. */
17366 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_BASE \
17367 (UINT32_C(0x4) << 29)
17368 /* Value is in Gb or GB (base 10). */
17369 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_GIGA \
17370 (UINT32_C(0x6) << 29)
17371 /* Value is in 1/100th of a percentage of total bandwidth. */
17372 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
17373 (UINT32_C(0x1) << 29)
17374 /* Invalid unit */
17375 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_INVALID \
17376 (UINT32_C(0x7) << 29)
17377 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_LAST \
17378 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MIN_BW_BW_VALUE_UNIT_INVALID
17379 /*
17380 * Maximum BW allocated to CoS queue.
17381 * The HWRM will translate this value into byte counter and
17382 * time interval used for this COS inside the device.
17383 */
17384 uint32_t queue_id1_max_bw;
17385 /* The bandwidth value. */
17386 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_MASK \
17387 UINT32_C(0xfffffff)
17388 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_SFT \
17389 0
17390 /* The granularity of the value (bits or bytes). */
17391 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_SCALE \
17392 UINT32_C(0x10000000)
17393 /* Value is in bits. */
17394 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_SCALE_BITS \
17395 (UINT32_C(0x0) << 28)
17396 /* Value is in bytes. */
17397 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_SCALE_BYTES \
17398 (UINT32_C(0x1) << 28)
17399 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_SCALE_LAST \
17400 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_SCALE_BYTES
17401 /* bw_value_unit is 3 b */
17402 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_MASK \
17403 UINT32_C(0xe0000000)
17404 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_SFT \
17405 29
17406 /* Value is in Mb or MB (base 10). */
17407 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_MEGA \
17408 (UINT32_C(0x0) << 29)
17409 /* Value is in Kb or KB (base 10). */
17410 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_KILO \
17411 (UINT32_C(0x2) << 29)
17412 /* Value is in bits or bytes. */
17413 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_BASE \
17414 (UINT32_C(0x4) << 29)
17415 /* Value is in Gb or GB (base 10). */
17416 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_GIGA \
17417 (UINT32_C(0x6) << 29)
17418 /* Value is in 1/100th of a percentage of total bandwidth. */
17419 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
17420 (UINT32_C(0x1) << 29)
17421 /* Invalid unit */
17422 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_INVALID \
17423 (UINT32_C(0x7) << 29)
17424 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_LAST \
17425 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_MAX_BW_BW_VALUE_UNIT_INVALID
17426 /* Transmission Selection Algorithm (TSA) for CoS Queue. */
17427 uint8_t queue_id1_tsa_assign;
17428 /* Strict Priority */
17429 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_TSA_ASSIGN_SP \
17430 UINT32_C(0x0)
17431 /* Enhanced Transmission Selection */
17432 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_TSA_ASSIGN_ETS \
17433 UINT32_C(0x1)
17434 /* reserved. */
17435 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_TSA_ASSIGN_RESERVED_FIRST \
17436 UINT32_C(0x2)
17437 /* reserved. */
17438 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID1_TSA_ASSIGN_RESERVED_LAST \
17439 UINT32_C(0xff)
17440 /*
17441 * Priority level for strict priority. Valid only when the
17442 * tsa_assign is 0 - Strict Priority (SP)
17443 * 0..7 - Valid values.
17444 * 8..255 - Reserved.
17445 */
17446 uint8_t queue_id1_pri_lvl;
17447 /*
17448 * Weight used to allocate remaining BW for this COS after
17449 * servicing guaranteed bandwidths for all COS.
17450 */
17451 uint8_t queue_id1_bw_weight;
17452 /* ID of CoS Queue 2. */
17453 uint8_t queue_id2;
17454 /*
17455 * Minimum BW allocated to CoS Queue.
17456 * The HWRM will translate this value into byte counter and
17457 * time interval used for this COS inside the device.
17458 */
17459 uint32_t queue_id2_min_bw;
17460 /* The bandwidth value. */
17461 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_MASK \
17462 UINT32_C(0xfffffff)
17463 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_SFT \
17464 0
17465 /* The granularity of the value (bits or bytes). */
17466 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_SCALE \
17467 UINT32_C(0x10000000)
17468 /* Value is in bits. */
17469 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_SCALE_BITS \
17470 (UINT32_C(0x0) << 28)
17471 /* Value is in bytes. */
17472 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_SCALE_BYTES \
17473 (UINT32_C(0x1) << 28)
17474 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_SCALE_LAST \
17475 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_SCALE_BYTES
17476 /* bw_value_unit is 3 b */
17477 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_MASK \
17478 UINT32_C(0xe0000000)
17479 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_SFT \
17480 29
17481 /* Value is in Mb or MB (base 10). */
17482 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_MEGA \
17483 (UINT32_C(0x0) << 29)
17484 /* Value is in Kb or KB (base 10). */
17485 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_KILO \
17486 (UINT32_C(0x2) << 29)
17487 /* Value is in bits or bytes. */
17488 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_BASE \
17489 (UINT32_C(0x4) << 29)
17490 /* Value is in Gb or GB (base 10). */
17491 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_GIGA \
17492 (UINT32_C(0x6) << 29)
17493 /* Value is in 1/100th of a percentage of total bandwidth. */
17494 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
17495 (UINT32_C(0x1) << 29)
17496 /* Invalid unit */
17497 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_INVALID \
17498 (UINT32_C(0x7) << 29)
17499 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_LAST \
17500 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MIN_BW_BW_VALUE_UNIT_INVALID
17501 /*
17502 * Maximum BW allocated to CoS queue.
17503 * The HWRM will translate this value into byte counter and
17504 * time interval used for this COS inside the device.
17505 */
17506 uint32_t queue_id2_max_bw;
17507 /* The bandwidth value. */
17508 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_MASK \
17509 UINT32_C(0xfffffff)
17510 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_SFT \
17511 0
17512 /* The granularity of the value (bits or bytes). */
17513 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_SCALE \
17514 UINT32_C(0x10000000)
17515 /* Value is in bits. */
17516 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_SCALE_BITS \
17517 (UINT32_C(0x0) << 28)
17518 /* Value is in bytes. */
17519 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_SCALE_BYTES \
17520 (UINT32_C(0x1) << 28)
17521 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_SCALE_LAST \
17522 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_SCALE_BYTES
17523 /* bw_value_unit is 3 b */
17524 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_MASK \
17525 UINT32_C(0xe0000000)
17526 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_SFT \
17527 29
17528 /* Value is in Mb or MB (base 10). */
17529 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_MEGA \
17530 (UINT32_C(0x0) << 29)
17531 /* Value is in Kb or KB (base 10). */
17532 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_KILO \
17533 (UINT32_C(0x2) << 29)
17534 /* Value is in bits or bytes. */
17535 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_BASE \
17536 (UINT32_C(0x4) << 29)
17537 /* Value is in Gb or GB (base 10). */
17538 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_GIGA \
17539 (UINT32_C(0x6) << 29)
17540 /* Value is in 1/100th of a percentage of total bandwidth. */
17541 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
17542 (UINT32_C(0x1) << 29)
17543 /* Invalid unit */
17544 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_INVALID \
17545 (UINT32_C(0x7) << 29)
17546 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_LAST \
17547 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_MAX_BW_BW_VALUE_UNIT_INVALID
17548 /* Transmission Selection Algorithm (TSA) for CoS Queue. */
17549 uint8_t queue_id2_tsa_assign;
17550 /* Strict Priority */
17551 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_TSA_ASSIGN_SP \
17552 UINT32_C(0x0)
17553 /* Enhanced Transmission Selection */
17554 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_TSA_ASSIGN_ETS \
17555 UINT32_C(0x1)
17556 /* reserved. */
17557 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_TSA_ASSIGN_RESERVED_FIRST \
17558 UINT32_C(0x2)
17559 /* reserved. */
17560 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID2_TSA_ASSIGN_RESERVED_LAST \
17561 UINT32_C(0xff)
17562 /*
17563 * Priority level for strict priority. Valid only when the
17564 * tsa_assign is 0 - Strict Priority (SP)
17565 * 0..7 - Valid values.
17566 * 8..255 - Reserved.
17567 */
17568 uint8_t queue_id2_pri_lvl;
17569 /*
17570 * Weight used to allocate remaining BW for this COS after
17571 * servicing guaranteed bandwidths for all COS.
17572 */
17573 uint8_t queue_id2_bw_weight;
17574 /* ID of CoS Queue 3. */
17575 uint8_t queue_id3;
17576 /*
17577 * Minimum BW allocated to CoS Queue.
17578 * The HWRM will translate this value into byte counter and
17579 * time interval used for this COS inside the device.
17580 */
17581 uint32_t queue_id3_min_bw;
17582 /* The bandwidth value. */
17583 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_MASK \
17584 UINT32_C(0xfffffff)
17585 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_SFT \
17586 0
17587 /* The granularity of the value (bits or bytes). */
17588 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_SCALE \
17589 UINT32_C(0x10000000)
17590 /* Value is in bits. */
17591 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_SCALE_BITS \
17592 (UINT32_C(0x0) << 28)
17593 /* Value is in bytes. */
17594 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_SCALE_BYTES \
17595 (UINT32_C(0x1) << 28)
17596 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_SCALE_LAST \
17597 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_SCALE_BYTES
17598 /* bw_value_unit is 3 b */
17599 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_MASK \
17600 UINT32_C(0xe0000000)
17601 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_SFT \
17602 29
17603 /* Value is in Mb or MB (base 10). */
17604 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_MEGA \
17605 (UINT32_C(0x0) << 29)
17606 /* Value is in Kb or KB (base 10). */
17607 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_KILO \
17608 (UINT32_C(0x2) << 29)
17609 /* Value is in bits or bytes. */
17610 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_BASE \
17611 (UINT32_C(0x4) << 29)
17612 /* Value is in Gb or GB (base 10). */
17613 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_GIGA \
17614 (UINT32_C(0x6) << 29)
17615 /* Value is in 1/100th of a percentage of total bandwidth. */
17616 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
17617 (UINT32_C(0x1) << 29)
17618 /* Invalid unit */
17619 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_INVALID \
17620 (UINT32_C(0x7) << 29)
17621 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_LAST \
17622 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MIN_BW_BW_VALUE_UNIT_INVALID
17623 /*
17624 * Maximum BW allocated to CoS queue.
17625 * The HWRM will translate this value into byte counter and
17626 * time interval used for this COS inside the device.
17627 */
17628 uint32_t queue_id3_max_bw;
17629 /* The bandwidth value. */
17630 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_MASK \
17631 UINT32_C(0xfffffff)
17632 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_SFT \
17633 0
17634 /* The granularity of the value (bits or bytes). */
17635 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_SCALE \
17636 UINT32_C(0x10000000)
17637 /* Value is in bits. */
17638 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_SCALE_BITS \
17639 (UINT32_C(0x0) << 28)
17640 /* Value is in bytes. */
17641 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_SCALE_BYTES \
17642 (UINT32_C(0x1) << 28)
17643 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_SCALE_LAST \
17644 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_SCALE_BYTES
17645 /* bw_value_unit is 3 b */
17646 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_MASK \
17647 UINT32_C(0xe0000000)
17648 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_SFT \
17649 29
17650 /* Value is in Mb or MB (base 10). */
17651 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_MEGA \
17652 (UINT32_C(0x0) << 29)
17653 /* Value is in Kb or KB (base 10). */
17654 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_KILO \
17655 (UINT32_C(0x2) << 29)
17656 /* Value is in bits or bytes. */
17657 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_BASE \
17658 (UINT32_C(0x4) << 29)
17659 /* Value is in Gb or GB (base 10). */
17660 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_GIGA \
17661 (UINT32_C(0x6) << 29)
17662 /* Value is in 1/100th of a percentage of total bandwidth. */
17663 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
17664 (UINT32_C(0x1) << 29)
17665 /* Invalid unit */
17666 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_INVALID \
17667 (UINT32_C(0x7) << 29)
17668 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_LAST \
17669 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_MAX_BW_BW_VALUE_UNIT_INVALID
17670 /* Transmission Selection Algorithm (TSA) for CoS Queue. */
17671 uint8_t queue_id3_tsa_assign;
17672 /* Strict Priority */
17673 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_TSA_ASSIGN_SP \
17674 UINT32_C(0x0)
17675 /* Enhanced Transmission Selection */
17676 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_TSA_ASSIGN_ETS \
17677 UINT32_C(0x1)
17678 /* reserved. */
17679 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_TSA_ASSIGN_RESERVED_FIRST \
17680 UINT32_C(0x2)
17681 /* reserved. */
17682 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID3_TSA_ASSIGN_RESERVED_LAST \
17683 UINT32_C(0xff)
17684 /*
17685 * Priority level for strict priority. Valid only when the
17686 * tsa_assign is 0 - Strict Priority (SP)
17687 * 0..7 - Valid values.
17688 * 8..255 - Reserved.
17689 */
17690 uint8_t queue_id3_pri_lvl;
17691 /*
17692 * Weight used to allocate remaining BW for this COS after
17693 * servicing guaranteed bandwidths for all COS.
17694 */
17695 uint8_t queue_id3_bw_weight;
17696 /* ID of CoS Queue 4. */
17697 uint8_t queue_id4;
17698 /*
17699 * Minimum BW allocated to CoS Queue.
17700 * The HWRM will translate this value into byte counter and
17701 * time interval used for this COS inside the device.
17702 */
17703 uint32_t queue_id4_min_bw;
17704 /* The bandwidth value. */
17705 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_MASK \
17706 UINT32_C(0xfffffff)
17707 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_SFT \
17708 0
17709 /* The granularity of the value (bits or bytes). */
17710 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_SCALE \
17711 UINT32_C(0x10000000)
17712 /* Value is in bits. */
17713 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_SCALE_BITS \
17714 (UINT32_C(0x0) << 28)
17715 /* Value is in bytes. */
17716 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_SCALE_BYTES \
17717 (UINT32_C(0x1) << 28)
17718 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_SCALE_LAST \
17719 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_SCALE_BYTES
17720 /* bw_value_unit is 3 b */
17721 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_MASK \
17722 UINT32_C(0xe0000000)
17723 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_SFT \
17724 29
17725 /* Value is in Mb or MB (base 10). */
17726 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_MEGA \
17727 (UINT32_C(0x0) << 29)
17728 /* Value is in Kb or KB (base 10). */
17729 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_KILO \
17730 (UINT32_C(0x2) << 29)
17731 /* Value is in bits or bytes. */
17732 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_BASE \
17733 (UINT32_C(0x4) << 29)
17734 /* Value is in Gb or GB (base 10). */
17735 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_GIGA \
17736 (UINT32_C(0x6) << 29)
17737 /* Value is in 1/100th of a percentage of total bandwidth. */
17738 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
17739 (UINT32_C(0x1) << 29)
17740 /* Invalid unit */
17741 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_INVALID \
17742 (UINT32_C(0x7) << 29)
17743 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_LAST \
17744 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MIN_BW_BW_VALUE_UNIT_INVALID
17745 /*
17746 * Maximum BW allocated to CoS queue.
17747 * The HWRM will translate this value into byte counter and
17748 * time interval used for this COS inside the device.
17749 */
17750 uint32_t queue_id4_max_bw;
17751 /* The bandwidth value. */
17752 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_MASK \
17753 UINT32_C(0xfffffff)
17754 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_SFT \
17755 0
17756 /* The granularity of the value (bits or bytes). */
17757 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_SCALE \
17758 UINT32_C(0x10000000)
17759 /* Value is in bits. */
17760 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_SCALE_BITS \
17761 (UINT32_C(0x0) << 28)
17762 /* Value is in bytes. */
17763 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_SCALE_BYTES \
17764 (UINT32_C(0x1) << 28)
17765 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_SCALE_LAST \
17766 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_SCALE_BYTES
17767 /* bw_value_unit is 3 b */
17768 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_MASK \
17769 UINT32_C(0xe0000000)
17770 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_SFT \
17771 29
17772 /* Value is in Mb or MB (base 10). */
17773 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_MEGA \
17774 (UINT32_C(0x0) << 29)
17775 /* Value is in Kb or KB (base 10). */
17776 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_KILO \
17777 (UINT32_C(0x2) << 29)
17778 /* Value is in bits or bytes. */
17779 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_BASE \
17780 (UINT32_C(0x4) << 29)
17781 /* Value is in Gb or GB (base 10). */
17782 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_GIGA \
17783 (UINT32_C(0x6) << 29)
17784 /* Value is in 1/100th of a percentage of total bandwidth. */
17785 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
17786 (UINT32_C(0x1) << 29)
17787 /* Invalid unit */
17788 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_INVALID \
17789 (UINT32_C(0x7) << 29)
17790 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_LAST \
17791 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_MAX_BW_BW_VALUE_UNIT_INVALID
17792 /* Transmission Selection Algorithm (TSA) for CoS Queue. */
17793 uint8_t queue_id4_tsa_assign;
17794 /* Strict Priority */
17795 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_TSA_ASSIGN_SP \
17796 UINT32_C(0x0)
17797 /* Enhanced Transmission Selection */
17798 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_TSA_ASSIGN_ETS \
17799 UINT32_C(0x1)
17800 /* reserved. */
17801 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_TSA_ASSIGN_RESERVED_FIRST \
17802 UINT32_C(0x2)
17803 /* reserved. */
17804 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID4_TSA_ASSIGN_RESERVED_LAST \
17805 UINT32_C(0xff)
17806 /*
17807 * Priority level for strict priority. Valid only when the
17808 * tsa_assign is 0 - Strict Priority (SP)
17809 * 0..7 - Valid values.
17810 * 8..255 - Reserved.
17811 */
17812 uint8_t queue_id4_pri_lvl;
17813 /*
17814 * Weight used to allocate remaining BW for this COS after
17815 * servicing guaranteed bandwidths for all COS.
17816 */
17817 uint8_t queue_id4_bw_weight;
17818 /* ID of CoS Queue 5. */
17819 uint8_t queue_id5;
17820 /*
17821 * Minimum BW allocated to CoS Queue.
17822 * The HWRM will translate this value into byte counter and
17823 * time interval used for this COS inside the device.
17824 */
17825 uint32_t queue_id5_min_bw;
17826 /* The bandwidth value. */
17827 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_MASK \
17828 UINT32_C(0xfffffff)
17829 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_SFT \
17830 0
17831 /* The granularity of the value (bits or bytes). */
17832 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_SCALE \
17833 UINT32_C(0x10000000)
17834 /* Value is in bits. */
17835 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_SCALE_BITS \
17836 (UINT32_C(0x0) << 28)
17837 /* Value is in bytes. */
17838 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_SCALE_BYTES \
17839 (UINT32_C(0x1) << 28)
17840 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_SCALE_LAST \
17841 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_SCALE_BYTES
17842 /* bw_value_unit is 3 b */
17843 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_MASK \
17844 UINT32_C(0xe0000000)
17845 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_SFT \
17846 29
17847 /* Value is in Mb or MB (base 10). */
17848 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_MEGA \
17849 (UINT32_C(0x0) << 29)
17850 /* Value is in Kb or KB (base 10). */
17851 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_KILO \
17852 (UINT32_C(0x2) << 29)
17853 /* Value is in bits or bytes. */
17854 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_BASE \
17855 (UINT32_C(0x4) << 29)
17856 /* Value is in Gb or GB (base 10). */
17857 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_GIGA \
17858 (UINT32_C(0x6) << 29)
17859 /* Value is in 1/100th of a percentage of total bandwidth. */
17860 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
17861 (UINT32_C(0x1) << 29)
17862 /* Invalid unit */
17863 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_INVALID \
17864 (UINT32_C(0x7) << 29)
17865 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_LAST \
17866 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MIN_BW_BW_VALUE_UNIT_INVALID
17867 /*
17868 * Maximum BW allocated to CoS queue.
17869 * The HWRM will translate this value into byte counter and
17870 * time interval used for this COS inside the device.
17871 */
17872 uint32_t queue_id5_max_bw;
17873 /* The bandwidth value. */
17874 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_MASK \
17875 UINT32_C(0xfffffff)
17876 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_SFT \
17877 0
17878 /* The granularity of the value (bits or bytes). */
17879 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_SCALE \
17880 UINT32_C(0x10000000)
17881 /* Value is in bits. */
17882 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_SCALE_BITS \
17883 (UINT32_C(0x0) << 28)
17884 /* Value is in bytes. */
17885 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_SCALE_BYTES \
17886 (UINT32_C(0x1) << 28)
17887 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_SCALE_LAST \
17888 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_SCALE_BYTES
17889 /* bw_value_unit is 3 b */
17890 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_MASK \
17891 UINT32_C(0xe0000000)
17892 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_SFT \
17893 29
17894 /* Value is in Mb or MB (base 10). */
17895 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_MEGA \
17896 (UINT32_C(0x0) << 29)
17897 /* Value is in Kb or KB (base 10). */
17898 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_KILO \
17899 (UINT32_C(0x2) << 29)
17900 /* Value is in bits or bytes. */
17901 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_BASE \
17902 (UINT32_C(0x4) << 29)
17903 /* Value is in Gb or GB (base 10). */
17904 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_GIGA \
17905 (UINT32_C(0x6) << 29)
17906 /* Value is in 1/100th of a percentage of total bandwidth. */
17907 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
17908 (UINT32_C(0x1) << 29)
17909 /* Invalid unit */
17910 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_INVALID \
17911 (UINT32_C(0x7) << 29)
17912 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_LAST \
17913 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_MAX_BW_BW_VALUE_UNIT_INVALID
17914 /* Transmission Selection Algorithm (TSA) for CoS Queue. */
17915 uint8_t queue_id5_tsa_assign;
17916 /* Strict Priority */
17917 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_TSA_ASSIGN_SP \
17918 UINT32_C(0x0)
17919 /* Enhanced Transmission Selection */
17920 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_TSA_ASSIGN_ETS \
17921 UINT32_C(0x1)
17922 /* reserved. */
17923 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_TSA_ASSIGN_RESERVED_FIRST \
17924 UINT32_C(0x2)
17925 /* reserved. */
17926 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID5_TSA_ASSIGN_RESERVED_LAST \
17927 UINT32_C(0xff)
17928 /*
17929 * Priority level for strict priority. Valid only when the
17930 * tsa_assign is 0 - Strict Priority (SP)
17931 * 0..7 - Valid values.
17932 * 8..255 - Reserved.
17933 */
17934 uint8_t queue_id5_pri_lvl;
17935 /*
17936 * Weight used to allocate remaining BW for this COS after
17937 * servicing guaranteed bandwidths for all COS.
17938 */
17939 uint8_t queue_id5_bw_weight;
17940 /* ID of CoS Queue 6. */
17941 uint8_t queue_id6;
17942 /*
17943 * Minimum BW allocated to CoS Queue.
17944 * The HWRM will translate this value into byte counter and
17945 * time interval used for this COS inside the device.
17946 */
17947 uint32_t queue_id6_min_bw;
17948 /* The bandwidth value. */
17949 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_MASK \
17950 UINT32_C(0xfffffff)
17951 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_SFT \
17952 0
17953 /* The granularity of the value (bits or bytes). */
17954 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_SCALE \
17955 UINT32_C(0x10000000)
17956 /* Value is in bits. */
17957 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_SCALE_BITS \
17958 (UINT32_C(0x0) << 28)
17959 /* Value is in bytes. */
17960 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_SCALE_BYTES \
17961 (UINT32_C(0x1) << 28)
17962 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_SCALE_LAST \
17963 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_SCALE_BYTES
17964 /* bw_value_unit is 3 b */
17965 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_MASK \
17966 UINT32_C(0xe0000000)
17967 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_SFT \
17968 29
17969 /* Value is in Mb or MB (base 10). */
17970 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_MEGA \
17971 (UINT32_C(0x0) << 29)
17972 /* Value is in Kb or KB (base 10). */
17973 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_KILO \
17974 (UINT32_C(0x2) << 29)
17975 /* Value is in bits or bytes. */
17976 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_BASE \
17977 (UINT32_C(0x4) << 29)
17978 /* Value is in Gb or GB (base 10). */
17979 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_GIGA \
17980 (UINT32_C(0x6) << 29)
17981 /* Value is in 1/100th of a percentage of total bandwidth. */
17982 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
17983 (UINT32_C(0x1) << 29)
17984 /* Invalid unit */
17985 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_INVALID \
17986 (UINT32_C(0x7) << 29)
17987 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_LAST \
17988 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MIN_BW_BW_VALUE_UNIT_INVALID
17989 /*
17990 * Maximum BW allocated to CoS queue.
17991 * The HWRM will translate this value into byte counter and
17992 * time interval used for this COS inside the device.
17993 */
17994 uint32_t queue_id6_max_bw;
17995 /* The bandwidth value. */
17996 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_MASK \
17997 UINT32_C(0xfffffff)
17998 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_SFT \
17999 0
18000 /* The granularity of the value (bits or bytes). */
18001 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_SCALE \
18002 UINT32_C(0x10000000)
18003 /* Value is in bits. */
18004 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_SCALE_BITS \
18005 (UINT32_C(0x0) << 28)
18006 /* Value is in bytes. */
18007 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_SCALE_BYTES \
18008 (UINT32_C(0x1) << 28)
18009 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_SCALE_LAST \
18010 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_SCALE_BYTES
18011 /* bw_value_unit is 3 b */
18012 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_MASK \
18013 UINT32_C(0xe0000000)
18014 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_SFT \
18015 29
18016 /* Value is in Mb or MB (base 10). */
18017 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_MEGA \
18018 (UINT32_C(0x0) << 29)
18019 /* Value is in Kb or KB (base 10). */
18020 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_KILO \
18021 (UINT32_C(0x2) << 29)
18022 /* Value is in bits or bytes. */
18023 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_BASE \
18024 (UINT32_C(0x4) << 29)
18025 /* Value is in Gb or GB (base 10). */
18026 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_GIGA \
18027 (UINT32_C(0x6) << 29)
18028 /* Value is in 1/100th of a percentage of total bandwidth. */
18029 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
18030 (UINT32_C(0x1) << 29)
18031 /* Invalid unit */
18032 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_INVALID \
18033 (UINT32_C(0x7) << 29)
18034 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_LAST \
18035 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_MAX_BW_BW_VALUE_UNIT_INVALID
18036 /* Transmission Selection Algorithm (TSA) for CoS Queue. */
18037 uint8_t queue_id6_tsa_assign;
18038 /* Strict Priority */
18039 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_TSA_ASSIGN_SP \
18040 UINT32_C(0x0)
18041 /* Enhanced Transmission Selection */
18042 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_TSA_ASSIGN_ETS \
18043 UINT32_C(0x1)
18044 /* reserved. */
18045 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_TSA_ASSIGN_RESERVED_FIRST \
18046 UINT32_C(0x2)
18047 /* reserved. */
18048 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID6_TSA_ASSIGN_RESERVED_LAST \
18049 UINT32_C(0xff)
18050 /*
18051 * Priority level for strict priority. Valid only when the
18052 * tsa_assign is 0 - Strict Priority (SP)
18053 * 0..7 - Valid values.
18054 * 8..255 - Reserved.
18055 */
18056 uint8_t queue_id6_pri_lvl;
18057 /*
18058 * Weight used to allocate remaining BW for this COS after
18059 * servicing guaranteed bandwidths for all COS.
18060 */
18061 uint8_t queue_id6_bw_weight;
18062 /* ID of CoS Queue 7. */
18063 uint8_t queue_id7;
18064 /*
18065 * Minimum BW allocated to CoS Queue.
18066 * The HWRM will translate this value into byte counter and
18067 * time interval used for this COS inside the device.
18068 */
18069 uint32_t queue_id7_min_bw;
18070 /* The bandwidth value. */
18071 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_MASK \
18072 UINT32_C(0xfffffff)
18073 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_SFT \
18074 0
18075 /* The granularity of the value (bits or bytes). */
18076 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_SCALE \
18077 UINT32_C(0x10000000)
18078 /* Value is in bits. */
18079 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_SCALE_BITS \
18080 (UINT32_C(0x0) << 28)
18081 /* Value is in bytes. */
18082 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_SCALE_BYTES \
18083 (UINT32_C(0x1) << 28)
18084 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_SCALE_LAST \
18085 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_SCALE_BYTES
18086 /* bw_value_unit is 3 b */
18087 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_MASK \
18088 UINT32_C(0xe0000000)
18089 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_SFT \
18090 29
18091 /* Value is in Mb or MB (base 10). */
18092 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_MEGA \
18093 (UINT32_C(0x0) << 29)
18094 /* Value is in Kb or KB (base 10). */
18095 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_KILO \
18096 (UINT32_C(0x2) << 29)
18097 /* Value is in bits or bytes. */
18098 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_BASE \
18099 (UINT32_C(0x4) << 29)
18100 /* Value is in Gb or GB (base 10). */
18101 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_GIGA \
18102 (UINT32_C(0x6) << 29)
18103 /* Value is in 1/100th of a percentage of total bandwidth. */
18104 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_PERCENT1_100 \
18105 (UINT32_C(0x1) << 29)
18106 /* Invalid unit */
18107 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_INVALID \
18108 (UINT32_C(0x7) << 29)
18109 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_LAST \
18110 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MIN_BW_BW_VALUE_UNIT_INVALID
18111 /*
18112 * Maximum BW allocated to CoS queue.
18113 * The HWRM will translate this value into byte counter and
18114 * time interval used for this COS inside the device.
18115 */
18116 uint32_t queue_id7_max_bw;
18117 /* The bandwidth value. */
18118 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_MASK \
18119 UINT32_C(0xfffffff)
18120 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_SFT \
18121 0
18122 /* The granularity of the value (bits or bytes). */
18123 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_SCALE \
18124 UINT32_C(0x10000000)
18125 /* Value is in bits. */
18126 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_SCALE_BITS \
18127 (UINT32_C(0x0) << 28)
18128 /* Value is in bytes. */
18129 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_SCALE_BYTES \
18130 (UINT32_C(0x1) << 28)
18131 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_SCALE_LAST \
18132 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_SCALE_BYTES
18133 /* bw_value_unit is 3 b */
18134 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_MASK \
18135 UINT32_C(0xe0000000)
18136 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_SFT \
18137 29
18138 /* Value is in Mb or MB (base 10). */
18139 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_MEGA \
18140 (UINT32_C(0x0) << 29)
18141 /* Value is in Kb or KB (base 10). */
18142 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_KILO \
18143 (UINT32_C(0x2) << 29)
18144 /* Value is in bits or bytes. */
18145 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_BASE \
18146 (UINT32_C(0x4) << 29)
18147 /* Value is in Gb or GB (base 10). */
18148 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_GIGA \
18149 (UINT32_C(0x6) << 29)
18150 /* Value is in 1/100th of a percentage of total bandwidth. */
18151 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
18152 (UINT32_C(0x1) << 29)
18153 /* Invalid unit */
18154 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_INVALID \
18155 (UINT32_C(0x7) << 29)
18156 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_LAST \
18157 HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_MAX_BW_BW_VALUE_UNIT_INVALID
18158 /* Transmission Selection Algorithm (TSA) for CoS Queue. */
18159 uint8_t queue_id7_tsa_assign;
18160 /* Strict Priority */
18161 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_TSA_ASSIGN_SP \
18162 UINT32_C(0x0)
18163 /* Enhanced Transmission Selection */
18164 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_TSA_ASSIGN_ETS \
18165 UINT32_C(0x1)
18166 /* reserved. */
18167 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_TSA_ASSIGN_RESERVED_FIRST \
18168 UINT32_C(0x2)
18169 /* reserved. */
18170 #define HWRM_QUEUE_COS2BW_CFG_INPUT_QUEUE_ID7_TSA_ASSIGN_RESERVED_LAST \
18171 UINT32_C(0xff)
18172 /*
18173 * Priority level for strict priority. Valid only when the
18174 * tsa_assign is 0 - Strict Priority (SP)
18175 * 0..7 - Valid values.
18176 * 8..255 - Reserved.
18177 */
18178 uint8_t queue_id7_pri_lvl;
18179 /*
18180 * Weight used to allocate remaining BW for this COS after
18181 * servicing guaranteed bandwidths for all COS.
18182 */
18183 uint8_t queue_id7_bw_weight;
18184 uint8_t unused_1[5];
18185} __attribute__((packed));
18186
18187/* hwrm_queue_cos2bw_cfg_output (size:128b/16B) */
18188struct hwrm_queue_cos2bw_cfg_output {
18189 /* The specific error status for the command. */
18190 uint16_t error_code;
18191 /* The HWRM command request type. */
18192 uint16_t req_type;
18193 /* The sequence ID from the original command. */
18194 uint16_t seq_id;
18195 /* The length of the response data in number of bytes. */
18196 uint16_t resp_len;
18197 uint8_t unused_0[7];
18198 /*
18199 * This field is used in Output records to indicate that the output
18200 * is completely written to RAM. This field should be read as '1'
18201 * to indicate that the output has been completely written.
18202 * When writing a command completion or response to an internal processor,
18203 * the order of writes has to be such that this field is written last.
18204 */
18205 uint8_t valid;
18206} __attribute__((packed));
18207
18208/*******************
18209 * hwrm_vnic_alloc *
18210 *******************/
18211
18212
18213/* hwrm_vnic_alloc_input (size:192b/24B) */
18214struct hwrm_vnic_alloc_input {
18215 /* The HWRM command request type. */
18216 uint16_t req_type;
18217 /*
18218 * The completion ring to send the completion event on. This should
18219 * be the NQ ID returned from the `nq_alloc` HWRM command.
18220 */
18221 uint16_t cmpl_ring;
18222 /*
18223 * The sequence ID is used by the driver for tracking multiple
18224 * commands. This ID is treated as opaque data by the firmware and
18225 * the value is returned in the `hwrm_resp_hdr` upon completion.
18226 */
18227 uint16_t seq_id;
18228 /*
18229 * The target ID of the command:
18230 * * 0x0-0xFFF8 - The function ID
18231 * * 0xFFF8-0xFFFE - Reserved for internal processors
18232 * * 0xFFFF - HWRM
18233 */
18234 uint16_t target_id;
18235 /*
18236 * A physical address pointer pointing to a host buffer that the
18237 * command's response data will be written. This can be either a host
18238 * physical address (HPA) or a guest physical address (GPA) and must
18239 * point to a physically contiguous block of memory.
18240 */
18241 uint64_t resp_addr;
18242 uint32_t flags;
18243 /*
18244 * When this bit is '1', this VNIC is requested to
18245 * be the default VNIC for this function.
18246 */
18247 #define HWRM_VNIC_ALLOC_INPUT_FLAGS_DEFAULT UINT32_C(0x1)
18248 uint8_t unused_0[4];
18249} __attribute__((packed));
18250
18251/* hwrm_vnic_alloc_output (size:128b/16B) */
18252struct hwrm_vnic_alloc_output {
18253 /* The specific error status for the command. */
18254 uint16_t error_code;
18255 /* The HWRM command request type. */
18256 uint16_t req_type;
18257 /* The sequence ID from the original command. */
18258 uint16_t seq_id;
18259 /* The length of the response data in number of bytes. */
18260 uint16_t resp_len;
18261 /* Logical vnic ID */
18262 uint32_t vnic_id;
18263 uint8_t unused_0[3];
18264 /*
18265 * This field is used in Output records to indicate that the output
18266 * is completely written to RAM. This field should be read as '1'
18267 * to indicate that the output has been completely written.
18268 * When writing a command completion or response to an internal processor,
18269 * the order of writes has to be such that this field is written last.
18270 */
18271 uint8_t valid;
18272} __attribute__((packed));
18273
18274/******************
18275 * hwrm_vnic_free *
18276 ******************/
18277
18278
18279/* hwrm_vnic_free_input (size:192b/24B) */
18280struct hwrm_vnic_free_input {
18281 /* The HWRM command request type. */
18282 uint16_t req_type;
18283 /*
18284 * The completion ring to send the completion event on. This should
18285 * be the NQ ID returned from the `nq_alloc` HWRM command.
18286 */
18287 uint16_t cmpl_ring;
18288 /*
18289 * The sequence ID is used by the driver for tracking multiple
18290 * commands. This ID is treated as opaque data by the firmware and
18291 * the value is returned in the `hwrm_resp_hdr` upon completion.
18292 */
18293 uint16_t seq_id;
18294 /*
18295 * The target ID of the command:
18296 * * 0x0-0xFFF8 - The function ID
18297 * * 0xFFF8-0xFFFE - Reserved for internal processors
18298 * * 0xFFFF - HWRM
18299 */
18300 uint16_t target_id;
18301 /*
18302 * A physical address pointer pointing to a host buffer that the
18303 * command's response data will be written. This can be either a host
18304 * physical address (HPA) or a guest physical address (GPA) and must
18305 * point to a physically contiguous block of memory.
18306 */
18307 uint64_t resp_addr;
18308 /* Logical vnic ID */
18309 uint32_t vnic_id;
18310 uint8_t unused_0[4];
18311} __attribute__((packed));
18312
18313/* hwrm_vnic_free_output (size:128b/16B) */
18314struct hwrm_vnic_free_output {
18315 /* The specific error status for the command. */
18316 uint16_t error_code;
18317 /* The HWRM command request type. */
18318 uint16_t req_type;
18319 /* The sequence ID from the original command. */
18320 uint16_t seq_id;
18321 /* The length of the response data in number of bytes. */
18322 uint16_t resp_len;
18323 uint8_t unused_0[7];
18324 /*
18325 * This field is used in Output records to indicate that the output
18326 * is completely written to RAM. This field should be read as '1'
18327 * to indicate that the output has been completely written.
18328 * When writing a command completion or response to an internal processor,
18329 * the order of writes has to be such that this field is written last.
18330 */
18331 uint8_t valid;
18332} __attribute__((packed));
18333
18334/*****************
18335 * hwrm_vnic_cfg *
18336 *****************/
18337
18338
18339/* hwrm_vnic_cfg_input (size:320b/40B) */
18340struct hwrm_vnic_cfg_input {
18341 /* The HWRM command request type. */
18342 uint16_t req_type;
18343 /*
18344 * The completion ring to send the completion event on. This should
18345 * be the NQ ID returned from the `nq_alloc` HWRM command.
18346 */
18347 uint16_t cmpl_ring;
18348 /*
18349 * The sequence ID is used by the driver for tracking multiple
18350 * commands. This ID is treated as opaque data by the firmware and
18351 * the value is returned in the `hwrm_resp_hdr` upon completion.
18352 */
18353 uint16_t seq_id;
18354 /*
18355 * The target ID of the command:
18356 * * 0x0-0xFFF8 - The function ID
18357 * * 0xFFF8-0xFFFE - Reserved for internal processors
18358 * * 0xFFFF - HWRM
18359 */
18360 uint16_t target_id;
18361 /*
18362 * A physical address pointer pointing to a host buffer that the
18363 * command's response data will be written. This can be either a host
18364 * physical address (HPA) or a guest physical address (GPA) and must
18365 * point to a physically contiguous block of memory.
18366 */
18367 uint64_t resp_addr;
18368 uint32_t flags;
18369 /*
18370 * When this bit is '1', the VNIC is requested to
18371 * be the default VNIC for the function.
18372 */
18373 #define HWRM_VNIC_CFG_INPUT_FLAGS_DEFAULT \
18374 UINT32_C(0x1)
18375 /*
18376 * When this bit is '1', the VNIC is being configured to
18377 * strip VLAN in the RX path.
18378 * If set to '0', then VLAN stripping is disabled on
18379 * this VNIC.
18380 */
18381 #define HWRM_VNIC_CFG_INPUT_FLAGS_VLAN_STRIP_MODE \
18382 UINT32_C(0x2)
18383 /*
18384 * When this bit is '1', the VNIC is being configured to
18385 * buffer receive packets in the hardware until the host
18386 * posts new receive buffers.
18387 * If set to '0', then bd_stall is being configured to be
18388 * disabled on this VNIC.
18389 */
18390 #define HWRM_VNIC_CFG_INPUT_FLAGS_BD_STALL_MODE \
18391 UINT32_C(0x4)
18392 /*
18393 * When this bit is '1', the VNIC is being configured to
18394 * receive both RoCE and non-RoCE traffic.
18395 * If set to '0', then this VNIC is not configured to be
18396 * operating in dual VNIC mode.
18397 */
18398 #define HWRM_VNIC_CFG_INPUT_FLAGS_ROCE_DUAL_VNIC_MODE \
18399 UINT32_C(0x8)
18400 /*
18401 * When this flag is set to '1', the VNIC is requested to
18402 * be configured to receive only RoCE traffic.
18403 * If this flag is set to '0', then this flag shall be
18404 * ignored by the HWRM.
18405 * If roce_dual_vnic_mode flag is set to '1'
18406 * or roce_mirroring_capable_vnic_mode flag to 1,
18407 * then the HWRM client shall not set this flag to '1'.
18408 */
18409 #define HWRM_VNIC_CFG_INPUT_FLAGS_ROCE_ONLY_VNIC_MODE \
18410 UINT32_C(0x10)
18411 /*
18412 * When a VNIC uses one destination ring group for certain
18413 * application (e.g. Receive Flow Steering) where
18414 * exact match is used to direct packets to a VNIC with one
18415 * destination ring group only, there is no need to configure
18416 * RSS indirection table for that VNIC as only one destination
18417 * ring group is used.
18418 *
18419 * This flag is used to enable a mode where
18420 * RSS is enabled in the VNIC using a RSS context
18421 * for computing RSS hash but the RSS indirection table is
18422 * not configured using hwrm_vnic_rss_cfg.
18423 *
18424 * If this mode is enabled, then the driver should not program
18425 * RSS indirection table for the RSS context that is used for
18426 * computing RSS hash only.
18427 */
18428 #define HWRM_VNIC_CFG_INPUT_FLAGS_RSS_DFLT_CR_MODE \
18429 UINT32_C(0x20)
18430 /*
18431 * When this bit is '1', the VNIC is being configured to
18432 * receive both RoCE and non-RoCE traffic, but forward only the
18433 * RoCE traffic further. Also, RoCE traffic can be mirrored to
18434 * L2 driver.
18435 */
18436 #define HWRM_VNIC_CFG_INPUT_FLAGS_ROCE_MIRRORING_CAPABLE_VNIC_MODE \
18437 UINT32_C(0x40)
18438 uint32_t enables;
18439 /*
18440 * This bit must be '1' for the dflt_ring_grp field to be
18441 * configured.
18442 */
18443 #define HWRM_VNIC_CFG_INPUT_ENABLES_DFLT_RING_GRP \
18444 UINT32_C(0x1)
18445 /*
18446 * This bit must be '1' for the rss_rule field to be
18447 * configured.
18448 */
18449 #define HWRM_VNIC_CFG_INPUT_ENABLES_RSS_RULE \
18450 UINT32_C(0x2)
18451 /*
18452 * This bit must be '1' for the cos_rule field to be
18453 * configured.
18454 */
18455 #define HWRM_VNIC_CFG_INPUT_ENABLES_COS_RULE \
18456 UINT32_C(0x4)
18457 /*
18458 * This bit must be '1' for the lb_rule field to be
18459 * configured.
18460 */
18461 #define HWRM_VNIC_CFG_INPUT_ENABLES_LB_RULE \
18462 UINT32_C(0x8)
18463 /*
18464 * This bit must be '1' for the mru field to be
18465 * configured.
18466 */
18467 #define HWRM_VNIC_CFG_INPUT_ENABLES_MRU \
18468 UINT32_C(0x10)
18469 /*
18470 * This bit must be '1' for the default_rx_ring_id field to be
18471 * configured.
18472 */
18473 #define HWRM_VNIC_CFG_INPUT_ENABLES_DEFAULT_RX_RING_ID \
18474 UINT32_C(0x20)
18475 /*
18476 * This bit must be '1' for the default_cmpl_ring_id field to be
18477 * configured.
18478 */
18479 #define HWRM_VNIC_CFG_INPUT_ENABLES_DEFAULT_CMPL_RING_ID \
18480 UINT32_C(0x40)
18481 /* Logical vnic ID */
18482 uint16_t vnic_id;
18483 /*
18484 * Default Completion ring for the VNIC. This ring will
18485 * be chosen if packet does not match any RSS rules and if
18486 * there is no COS rule.
18487 */
18488 uint16_t dflt_ring_grp;
18489 /*
18490 * RSS ID for RSS rule/table structure. 0xFF... (All Fs) if
18491 * there is no RSS rule.
18492 */
18493 uint16_t rss_rule;
18494 /*
18495 * RSS ID for COS rule/table structure. 0xFF... (All Fs) if
18496 * there is no COS rule.
18497 */
18498 uint16_t cos_rule;
18499 /*
18500 * RSS ID for load balancing rule/table structure.
18501 * 0xFF... (All Fs) if there is no LB rule.
18502 */
18503 uint16_t lb_rule;
18504 /*
18505 * The maximum receive unit of the vnic.
18506 * Each vnic is associated with a function.
18507 * The vnic mru value overwrites the mru setting of the
18508 * associated function.
18509 * The HWRM shall make sure that vnic mru does not exceed
18510 * the mru of the port the function is associated with.
18511 */
18512 uint16_t mru;
18513 /*
18514 * Default Rx ring for the VNIC. This ring will
18515 * be chosen if packet does not match any RSS rules.
18516 * The aggregation ring associated with the Rx ring is
18517 * implied based on the Rx ring specified when the
18518 * aggregation ring was allocated.
18519 */
18520 uint16_t default_rx_ring_id;
18521 /*
18522 * Default completion ring for the VNIC. This ring will
18523 * be chosen if packet does not match any RSS rules.
18524 */
18525 uint16_t default_cmpl_ring_id;
18526} __attribute__((packed));
18527
18528/* hwrm_vnic_cfg_output (size:128b/16B) */
18529struct hwrm_vnic_cfg_output {
18530 /* The specific error status for the command. */
18531 uint16_t error_code;
18532 /* The HWRM command request type. */
18533 uint16_t req_type;
18534 /* The sequence ID from the original command. */
18535 uint16_t seq_id;
18536 /* The length of the response data in number of bytes. */
18537 uint16_t resp_len;
18538 uint8_t unused_0[7];
18539 /*
18540 * This field is used in Output records to indicate that the output
18541 * is completely written to RAM. This field should be read as '1'
18542 * to indicate that the output has been completely written.
18543 * When writing a command completion or response to an internal processor,
18544 * the order of writes has to be such that this field is written last.
18545 */
18546 uint8_t valid;
18547} __attribute__((packed));
18548
18549/******************
18550 * hwrm_vnic_qcfg *
18551 ******************/
18552
18553
18554/* hwrm_vnic_qcfg_input (size:256b/32B) */
18555struct hwrm_vnic_qcfg_input {
18556 /* The HWRM command request type. */
18557 uint16_t req_type;
18558 /*
18559 * The completion ring to send the completion event on. This should
18560 * be the NQ ID returned from the `nq_alloc` HWRM command.
18561 */
18562 uint16_t cmpl_ring;
18563 /*
18564 * The sequence ID is used by the driver for tracking multiple
18565 * commands. This ID is treated as opaque data by the firmware and
18566 * the value is returned in the `hwrm_resp_hdr` upon completion.
18567 */
18568 uint16_t seq_id;
18569 /*
18570 * The target ID of the command:
18571 * * 0x0-0xFFF8 - The function ID
18572 * * 0xFFF8-0xFFFE - Reserved for internal processors
18573 * * 0xFFFF - HWRM
18574 */
18575 uint16_t target_id;
18576 /*
18577 * A physical address pointer pointing to a host buffer that the
18578 * command's response data will be written. This can be either a host
18579 * physical address (HPA) or a guest physical address (GPA) and must
18580 * point to a physically contiguous block of memory.
18581 */
18582 uint64_t resp_addr;
18583 uint32_t enables;
18584 /*
18585 * This bit must be '1' for the vf_id_valid field to be
18586 * configured.
18587 */
18588 #define HWRM_VNIC_QCFG_INPUT_ENABLES_VF_ID_VALID UINT32_C(0x1)
18589 /* Logical vnic ID */
18590 uint32_t vnic_id;
18591 /* ID of Virtual Function whose VNIC resource is being queried. */
18592 uint16_t vf_id;
18593 uint8_t unused_0[6];
18594} __attribute__((packed));
18595
18596/* hwrm_vnic_qcfg_output (size:256b/32B) */
18597struct hwrm_vnic_qcfg_output {
18598 /* The specific error status for the command. */
18599 uint16_t error_code;
18600 /* The HWRM command request type. */
18601 uint16_t req_type;
18602 /* The sequence ID from the original command. */
18603 uint16_t seq_id;
18604 /* The length of the response data in number of bytes. */
18605 uint16_t resp_len;
18606 /* Default Completion ring for the VNIC. */
18607 uint16_t dflt_ring_grp;
18608 /*
18609 * RSS ID for RSS rule/table structure. 0xFF... (All Fs) if
18610 * there is no RSS rule.
18611 */
18612 uint16_t rss_rule;
18613 /*
18614 * RSS ID for COS rule/table structure. 0xFF... (All Fs) if
18615 * there is no COS rule.
18616 */
18617 uint16_t cos_rule;
18618 /*
18619 * RSS ID for load balancing rule/table structure.
18620 * 0xFF... (All Fs) if there is no LB rule.
18621 */
18622 uint16_t lb_rule;
18623 /* The maximum receive unit of the vnic. */
18624 uint16_t mru;
18625 uint8_t unused_0[2];
18626 uint32_t flags;
18627 /*
18628 * When this bit is '1', the VNIC is the default VNIC for
18629 * the function.
18630 */
18631 #define HWRM_VNIC_QCFG_OUTPUT_FLAGS_DEFAULT \
18632 UINT32_C(0x1)
18633 /*
18634 * When this bit is '1', the VNIC is configured to
18635 * strip VLAN in the RX path.
18636 * If set to '0', then VLAN stripping is disabled on
18637 * this VNIC.
18638 */
18639 #define HWRM_VNIC_QCFG_OUTPUT_FLAGS_VLAN_STRIP_MODE \
18640 UINT32_C(0x2)
18641 /*
18642 * When this bit is '1', the VNIC is configured to
18643 * buffer receive packets in the hardware until the host
18644 * posts new receive buffers.
18645 * If set to '0', then bd_stall is disabled on
18646 * this VNIC.
18647 */
18648 #define HWRM_VNIC_QCFG_OUTPUT_FLAGS_BD_STALL_MODE \
18649 UINT32_C(0x4)
18650 /*
18651 * When this bit is '1', the VNIC is configured to
18652 * receive both RoCE and non-RoCE traffic.
18653 * If set to '0', then this VNIC is not configured to
18654 * operate in dual VNIC mode.
18655 */
18656 #define HWRM_VNIC_QCFG_OUTPUT_FLAGS_ROCE_DUAL_VNIC_MODE \
18657 UINT32_C(0x8)
18658 /*
18659 * When this flag is set to '1', the VNIC is configured to
18660 * receive only RoCE traffic.
18661 * When this flag is set to '0', the VNIC is not configured
18662 * to receive only RoCE traffic.
18663 * If roce_dual_vnic_mode flag and this flag both are set
18664 * to '1', then it is an invalid configuration of the
18665 * VNIC. The HWRM should not allow that type of
18666 * mis-configuration by HWRM clients.
18667 */
18668 #define HWRM_VNIC_QCFG_OUTPUT_FLAGS_ROCE_ONLY_VNIC_MODE \
18669 UINT32_C(0x10)
18670 /*
18671 * When a VNIC uses one destination ring group for certain
18672 * application (e.g. Receive Flow Steering) where
18673 * exact match is used to direct packets to a VNIC with one
18674 * destination ring group only, there is no need to configure
18675 * RSS indirection table for that VNIC as only one destination
18676 * ring group is used.
18677 *
18678 * When this bit is set to '1', then the VNIC is enabled in a
18679 * mode where RSS is enabled in the VNIC using a RSS context
18680 * for computing RSS hash but the RSS indirection table is
18681 * not configured.
18682 */
18683 #define HWRM_VNIC_QCFG_OUTPUT_FLAGS_RSS_DFLT_CR_MODE \
18684 UINT32_C(0x20)
18685 /*
18686 * When this bit is '1', the VNIC is configured to
18687 * receive both RoCE and non-RoCE traffic, but forward only
18688 * RoCE traffic further. Also RoCE traffic can be mirrored to
18689 * L2 driver.
18690 */
18691 #define HWRM_VNIC_QCFG_OUTPUT_FLAGS_ROCE_MIRRORING_CAPABLE_VNIC_MODE \
18692 UINT32_C(0x40)
18693 uint8_t unused_1[7];
18694 /*
18695 * This field is used in Output records to indicate that the output
18696 * is completely written to RAM. This field should be read as '1'
18697 * to indicate that the output has been completely written.
18698 * When writing a command completion or response to an internal processor,
18699 * the order of writes has to be such that this field is written last.
18700 */
18701 uint8_t valid;
18702} __attribute__((packed));
18703
18704/*******************
18705 * hwrm_vnic_qcaps *
18706 *******************/
18707
18708
18709/* hwrm_vnic_qcaps_input (size:192b/24B) */
18710struct hwrm_vnic_qcaps_input {
18711 /* The HWRM command request type. */
18712 uint16_t req_type;
18713 /*
18714 * The completion ring to send the completion event on. This should
18715 * be the NQ ID returned from the `nq_alloc` HWRM command.
18716 */
18717 uint16_t cmpl_ring;
18718 /*
18719 * The sequence ID is used by the driver for tracking multiple
18720 * commands. This ID is treated as opaque data by the firmware and
18721 * the value is returned in the `hwrm_resp_hdr` upon completion.
18722 */
18723 uint16_t seq_id;
18724 /*
18725 * The target ID of the command:
18726 * * 0x0-0xFFF8 - The function ID
18727 * * 0xFFF8-0xFFFE - Reserved for internal processors
18728 * * 0xFFFF - HWRM
18729 */
18730 uint16_t target_id;
18731 /*
18732 * A physical address pointer pointing to a host buffer that the
18733 * command's response data will be written. This can be either a host
18734 * physical address (HPA) or a guest physical address (GPA) and must
18735 * point to a physically contiguous block of memory.
18736 */
18737 uint64_t resp_addr;
18738 uint32_t enables;
18739 uint8_t unused_0[4];
18740} __attribute__((packed));
18741
18742/* hwrm_vnic_qcaps_output (size:192b/24B) */
18743struct hwrm_vnic_qcaps_output {
18744 /* The specific error status for the command. */
18745 uint16_t error_code;
18746 /* The HWRM command request type. */
18747 uint16_t req_type;
18748 /* The sequence ID from the original command. */
18749 uint16_t seq_id;
18750 /* The length of the response data in number of bytes. */
18751 uint16_t resp_len;
18752 /* The maximum receive unit that is settable on a vnic. */
18753 uint16_t mru;
18754 uint8_t unused_0[2];
18755 uint32_t flags;
18756 /* Unused. */
18757 #define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_UNUSED \
18758 UINT32_C(0x1)
18759 /*
18760 * When this bit is '1', the capability of stripping VLAN in
18761 * the RX path is supported on VNIC(s).
18762 * If set to '0', then VLAN stripping capability is
18763 * not supported on VNIC(s).
18764 */
18765 #define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_VLAN_STRIP_CAP \
18766 UINT32_C(0x2)
18767 /*
18768 * When this bit is '1', the capability to buffer receive
18769 * packets in the hardware until the host posts new receive buffers
18770 * is supported on VNIC(s).
18771 * If set to '0', then bd_stall capability is not supported
18772 * on VNIC(s).
18773 */
18774 #define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_BD_STALL_CAP \
18775 UINT32_C(0x4)
18776 /*
18777 * When this bit is '1', the capability to
18778 * receive both RoCE and non-RoCE traffic on VNIC(s) is
18779 * supported.
18780 * If set to '0', then the capability to receive
18781 * both RoCE and non-RoCE traffic on VNIC(s) is
18782 * not supported.
18783 */
18784 #define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_ROCE_DUAL_VNIC_CAP \
18785 UINT32_C(0x8)
18786 /*
18787 * When this bit is set to '1', the capability to configure
18788 * a VNIC to receive only RoCE traffic is supported.
18789 * When this flag is set to '0', the VNIC capability to
18790 * configure to receive only RoCE traffic is not supported.
18791 */
18792 #define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_ROCE_ONLY_VNIC_CAP \
18793 UINT32_C(0x10)
18794 /*
18795 * When this bit is set to '1', then the capability to enable
18796 * a VNIC in a mode where RSS context without configuring
18797 * RSS indirection table is supported (for RSS hash computation).
18798 * When this bit is set to '0', then a VNIC can not be configured
18799 * with a mode to enable RSS context without configuring RSS
18800 * indirection table.
18801 */
18802 #define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_RSS_DFLT_CR_CAP \
18803 UINT32_C(0x20)
18804 /*
18805 * When this bit is '1', the capability to
18806 * mirror the the RoCE traffic is supported.
18807 * If set to '0', then the capability to mirror the
18808 * RoCE traffic is not supported.
18809 */
18810 #define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_ROCE_MIRRORING_CAPABLE_VNIC_CAP \
18811 UINT32_C(0x40)
18812 /*
18813 * When this bit is '1', the outermost RSS hashing capability
18814 * is supported. If set to '0', then the outermost RSS hashing
18815 * capability is not supported.
18816 */
18817 #define HWRM_VNIC_QCAPS_OUTPUT_FLAGS_OUTERMOST_RSS_CAP \
18818 UINT32_C(0x80)
18819 uint8_t unused_1[7];
18820 /*
18821 * This field is used in Output records to indicate that the output
18822 * is completely written to RAM. This field should be read as '1'
18823 * to indicate that the output has been completely written.
18824 * When writing a command completion or response to an internal processor,
18825 * the order of writes has to be such that this field is written last.
18826 */
18827 uint8_t valid;
18828} __attribute__((packed));
18829
18830/*********************
18831 * hwrm_vnic_tpa_cfg *
18832 *********************/
18833
18834
18835/* hwrm_vnic_tpa_cfg_input (size:320b/40B) */
18836struct hwrm_vnic_tpa_cfg_input {
18837 /* The HWRM command request type. */
18838 uint16_t req_type;
18839 /*
18840 * The completion ring to send the completion event on. This should
18841 * be the NQ ID returned from the `nq_alloc` HWRM command.
18842 */
18843 uint16_t cmpl_ring;
18844 /*
18845 * The sequence ID is used by the driver for tracking multiple
18846 * commands. This ID is treated as opaque data by the firmware and
18847 * the value is returned in the `hwrm_resp_hdr` upon completion.
18848 */
18849 uint16_t seq_id;
18850 /*
18851 * The target ID of the command:
18852 * * 0x0-0xFFF8 - The function ID
18853 * * 0xFFF8-0xFFFE - Reserved for internal processors
18854 * * 0xFFFF - HWRM
18855 */
18856 uint16_t target_id;
18857 /*
18858 * A physical address pointer pointing to a host buffer that the
18859 * command's response data will be written. This can be either a host
18860 * physical address (HPA) or a guest physical address (GPA) and must
18861 * point to a physically contiguous block of memory.
18862 */
18863 uint64_t resp_addr;
18864 uint32_t flags;
18865 /*
18866 * When this bit is '1', the VNIC shall be configured to
18867 * perform transparent packet aggregation (TPA) of
18868 * non-tunneled TCP packets.
18869 */
18870 #define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_TPA \
18871 UINT32_C(0x1)
18872 /*
18873 * When this bit is '1', the VNIC shall be configured to
18874 * perform transparent packet aggregation (TPA) of
18875 * tunneled TCP packets.
18876 */
18877 #define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_ENCAP_TPA \
18878 UINT32_C(0x2)
18879 /*
18880 * When this bit is '1', the VNIC shall be configured to
18881 * perform transparent packet aggregation (TPA) according
18882 * to Windows Receive Segment Coalescing (RSC) rules.
18883 */
18884 #define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_RSC_WND_UPDATE \
18885 UINT32_C(0x4)
18886 /*
18887 * When this bit is '1', the VNIC shall be configured to
18888 * perform transparent packet aggregation (TPA) according
18889 * to Linux Generic Receive Offload (GRO) rules.
18890 */
18891 #define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_GRO \
18892 UINT32_C(0x8)
18893 /*
18894 * When this bit is '1', the VNIC shall be configured to
18895 * perform transparent packet aggregation (TPA) for TCP
18896 * packets with IP ECN set to non-zero.
18897 */
18898 #define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_AGG_WITH_ECN \
18899 UINT32_C(0x10)
18900 /*
18901 * When this bit is '1', the VNIC shall be configured to
18902 * perform transparent packet aggregation (TPA) for
18903 * GRE tunneled TCP packets only if all packets have the
18904 * same GRE sequence.
18905 */
18906 #define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_AGG_WITH_SAME_GRE_SEQ \
18907 UINT32_C(0x20)
18908 /*
18909 * When this bit is '1' and the GRO mode is enabled,
18910 * the VNIC shall be configured to
18911 * perform transparent packet aggregation (TPA) for
18912 * TCP/IPv4 packets with consecutively increasing IPIDs.
18913 * In other words, the last packet that is being
18914 * aggregated to an already existing aggregation context
18915 * shall have IPID 1 more than the IPID of the last packet
18916 * that was aggregated in that aggregation context.
18917 */
18918 #define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_GRO_IPID_CHECK \
18919 UINT32_C(0x40)
18920 /*
18921 * When this bit is '1' and the GRO mode is enabled,
18922 * the VNIC shall be configured to
18923 * perform transparent packet aggregation (TPA) for
18924 * TCP packets with the same TTL (IPv4) or Hop limit (IPv6)
18925 * value.
18926 */
18927 #define HWRM_VNIC_TPA_CFG_INPUT_FLAGS_GRO_TTL_CHECK \
18928 UINT32_C(0x80)
18929 uint32_t enables;
18930 /*
18931 * This bit must be '1' for the max_agg_segs field to be
18932 * configured.
18933 */
18934 #define HWRM_VNIC_TPA_CFG_INPUT_ENABLES_MAX_AGG_SEGS UINT32_C(0x1)
18935 /*
18936 * This bit must be '1' for the max_aggs field to be
18937 * configured.
18938 */
18939 #define HWRM_VNIC_TPA_CFG_INPUT_ENABLES_MAX_AGGS UINT32_C(0x2)
18940 /*
18941 * This bit must be '1' for the max_agg_timer field to be
18942 * configured.
18943 */
18944 #define HWRM_VNIC_TPA_CFG_INPUT_ENABLES_MAX_AGG_TIMER UINT32_C(0x4)
18945 /*
18946 * This bit must be '1' for the min_agg_len field to be
18947 * configured.
18948 */
18949 #define HWRM_VNIC_TPA_CFG_INPUT_ENABLES_MIN_AGG_LEN UINT32_C(0x8)
18950 /* Logical vnic ID */
18951 uint16_t vnic_id;
18952 /*
18953 * This is the maximum number of TCP segments that can
18954 * be aggregated (unit is Log2). Max value is 31.
18955 */
18956 uint16_t max_agg_segs;
18957 /* 1 segment */
18958 #define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_1 UINT32_C(0x0)
18959 /* 2 segments */
18960 #define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_2 UINT32_C(0x1)
18961 /* 4 segments */
18962 #define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_4 UINT32_C(0x2)
18963 /* 8 segments */
18964 #define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_8 UINT32_C(0x3)
18965 /* Any segment size larger than this is not valid */
18966 #define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_MAX UINT32_C(0x1f)
18967 #define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_LAST \
18968 HWRM_VNIC_TPA_CFG_INPUT_MAX_AGG_SEGS_MAX
18969 /*
18970 * This is the maximum number of aggregations this VNIC is
18971 * allowed (unit is Log2). Max value is 7
18972 */
18973 uint16_t max_aggs;
18974 /* 1 aggregation */
18975 #define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_1 UINT32_C(0x0)
18976 /* 2 aggregations */
18977 #define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_2 UINT32_C(0x1)
18978 /* 4 aggregations */
18979 #define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_4 UINT32_C(0x2)
18980 /* 8 aggregations */
18981 #define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_8 UINT32_C(0x3)
18982 /* 16 aggregations */
18983 #define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_16 UINT32_C(0x4)
18984 /* Any aggregation size larger than this is not valid */
18985 #define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_MAX UINT32_C(0x7)
18986 #define HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_LAST \
18987 HWRM_VNIC_TPA_CFG_INPUT_MAX_AGGS_MAX
18988 uint8_t unused_0[2];
18989 /*
18990 * This is the maximum amount of time allowed for
18991 * an aggregation context to complete after it was initiated.
18992 */
18993 uint32_t max_agg_timer;
18994 /*
18995 * This is the minimum amount of payload length required to
18996 * start an aggregation context.
18997 */
18998 uint32_t min_agg_len;
18999} __attribute__((packed));
19000
19001/* hwrm_vnic_tpa_cfg_output (size:128b/16B) */
19002struct hwrm_vnic_tpa_cfg_output {
19003 /* The specific error status for the command. */
19004 uint16_t error_code;
19005 /* The HWRM command request type. */
19006 uint16_t req_type;
19007 /* The sequence ID from the original command. */
19008 uint16_t seq_id;
19009 /* The length of the response data in number of bytes. */
19010 uint16_t resp_len;
19011 uint8_t unused_0[7];
19012 /*
19013 * This field is used in Output records to indicate that the output
19014 * is completely written to RAM. This field should be read as '1'
19015 * to indicate that the output has been completely written.
19016 * When writing a command completion or response to an internal processor,
19017 * the order of writes has to be such that this field is written last.
19018 */
19019 uint8_t valid;
19020} __attribute__((packed));
19021
19022/*********************
19023 * hwrm_vnic_rss_cfg *
19024 *********************/
19025
19026
19027/* hwrm_vnic_rss_cfg_input (size:384b/48B) */
19028struct hwrm_vnic_rss_cfg_input {
19029 /* The HWRM command request type. */
19030 uint16_t req_type;
19031 /*
19032 * The completion ring to send the completion event on. This should
19033 * be the NQ ID returned from the `nq_alloc` HWRM command.
19034 */
19035 uint16_t cmpl_ring;
19036 /*
19037 * The sequence ID is used by the driver for tracking multiple
19038 * commands. This ID is treated as opaque data by the firmware and
19039 * the value is returned in the `hwrm_resp_hdr` upon completion.
19040 */
19041 uint16_t seq_id;
19042 /*
19043 * The target ID of the command:
19044 * * 0x0-0xFFF8 - The function ID
19045 * * 0xFFF8-0xFFFE - Reserved for internal processors
19046 * * 0xFFFF - HWRM
19047 */
19048 uint16_t target_id;
19049 /*
19050 * A physical address pointer pointing to a host buffer that the
19051 * command's response data will be written. This can be either a host
19052 * physical address (HPA) or a guest physical address (GPA) and must
19053 * point to a physically contiguous block of memory.
19054 */
19055 uint64_t resp_addr;
19056 uint32_t hash_type;
19057 /*
19058 * When this bit is '1', the RSS hash shall be computed
19059 * over source and destination IPv4 addresses of IPv4
19060 * packets.
19061 */
19062 #define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_IPV4 UINT32_C(0x1)
19063 /*
19064 * When this bit is '1', the RSS hash shall be computed
19065 * over source/destination IPv4 addresses and
19066 * source/destination ports of TCP/IPv4 packets.
19067 */
19068 #define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_TCP_IPV4 UINT32_C(0x2)
19069 /*
19070 * When this bit is '1', the RSS hash shall be computed
19071 * over source/destination IPv4 addresses and
19072 * source/destination ports of UDP/IPv4 packets.
19073 */
19074 #define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_UDP_IPV4 UINT32_C(0x4)
19075 /*
19076 * When this bit is '1', the RSS hash shall be computed
19077 * over source and destination IPv4 addresses of IPv6
19078 * packets.
19079 */
19080 #define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_IPV6 UINT32_C(0x8)
19081 /*
19082 * When this bit is '1', the RSS hash shall be computed
19083 * over source/destination IPv6 addresses and
19084 * source/destination ports of TCP/IPv6 packets.
19085 */
19086 #define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_TCP_IPV6 UINT32_C(0x10)
19087 /*
19088 * When this bit is '1', the RSS hash shall be computed
19089 * over source/destination IPv6 addresses and
19090 * source/destination ports of UDP/IPv6 packets.
19091 */
19092 #define HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_UDP_IPV6 UINT32_C(0x20)
19093 /* VNIC ID of VNIC associated with RSS table being configured. */
19094 uint16_t vnic_id;
19095 /*
19096 * Specifies which VNIC ring table pair to configure.
19097 * Valid values range from 0 to 7.
19098 */
19099 uint8_t ring_table_pair_index;
19100 /* Flags to specify different RSS hash modes. */
19101 uint8_t hash_mode_flags;
19102 /*
19103 * When this bit is '1', it indicates using current RSS
19104 * hash mode setting configured in the device.
19105 */
19106 #define HWRM_VNIC_RSS_CFG_INPUT_HASH_MODE_FLAGS_DEFAULT \
19107 UINT32_C(0x1)
19108 /*
19109 * When this bit is '1', it indicates requesting support of
19110 * RSS hashing over innermost 4 tuples {l3.src, l3.dest,
19111 * l4.src, l4.dest} for tunnel packets. For none-tunnel
19112 * packets, the RSS hash is computed over the normal
19113 * src/dest l3 and src/dest l4 headers.
19114 */
19115 #define HWRM_VNIC_RSS_CFG_INPUT_HASH_MODE_FLAGS_INNERMOST_4 \
19116 UINT32_C(0x2)
19117 /*
19118 * When this bit is '1', it indicates requesting support of
19119 * RSS hashing over innermost 2 tuples {l3.src, l3.dest} for
19120 * tunnel packets. For none-tunnel packets, the RSS hash is
19121 * computed over the normal src/dest l3 headers.
19122 */
19123 #define HWRM_VNIC_RSS_CFG_INPUT_HASH_MODE_FLAGS_INNERMOST_2 \
19124 UINT32_C(0x4)
19125 /*
19126 * When this bit is '1', it indicates requesting support of
19127 * RSS hashing over outermost 4 tuples {t_l3.src, t_l3.dest,
19128 * t_l4.src, t_l4.dest} for tunnel packets. For none-tunnel
19129 * packets, the RSS hash is computed over the normal
19130 * src/dest l3 and src/dest l4 headers.
19131 */
19132 #define HWRM_VNIC_RSS_CFG_INPUT_HASH_MODE_FLAGS_OUTERMOST_4 \
19133 UINT32_C(0x8)
19134 /*
19135 * When this bit is '1', it indicates requesting support of
19136 * RSS hashing over outermost 2 tuples {t_l3.src, t_l3.dest} for
19137 * tunnel packets. For none-tunnel packets, the RSS hash is
19138 * computed over the normal src/dest l3 headers.
19139 */
19140 #define HWRM_VNIC_RSS_CFG_INPUT_HASH_MODE_FLAGS_OUTERMOST_2 \
19141 UINT32_C(0x10)
19142 /* This is the address for rss ring group table */
19143 uint64_t ring_grp_tbl_addr;
19144 /* This is the address for rss hash key table */
19145 uint64_t hash_key_tbl_addr;
19146 /* Index to the rss indirection table. */
19147 uint16_t rss_ctx_idx;
19148 uint8_t unused_1[6];
19149} __attribute__((packed));
19150
19151/* hwrm_vnic_rss_cfg_output (size:128b/16B) */
19152struct hwrm_vnic_rss_cfg_output {
19153 /* The specific error status for the command. */
19154 uint16_t error_code;
19155 /* The HWRM command request type. */
19156 uint16_t req_type;
19157 /* The sequence ID from the original command. */
19158 uint16_t seq_id;
19159 /* The length of the response data in number of bytes. */
19160 uint16_t resp_len;
19161 uint8_t unused_0[7];
19162 /*
19163 * This field is used in Output records to indicate that the output
19164 * is completely written to RAM. This field should be read as '1'
19165 * to indicate that the output has been completely written.
19166 * When writing a command completion or response to an internal processor,
19167 * the order of writes has to be such that this field is written last.
19168 */
19169 uint8_t valid;
19170} __attribute__((packed));
19171
19172/**********************
19173 * hwrm_vnic_rss_qcfg *
19174 **********************/
19175
19176
19177/* hwrm_vnic_rss_qcfg_input (size:192b/24B) */
19178struct hwrm_vnic_rss_qcfg_input {
19179 /* The HWRM command request type. */
19180 uint16_t req_type;
19181 /*
19182 * The completion ring to send the completion event on. This should
19183 * be the NQ ID returned from the `nq_alloc` HWRM command.
19184 */
19185 uint16_t cmpl_ring;
19186 /*
19187 * The sequence ID is used by the driver for tracking multiple
19188 * commands. This ID is treated as opaque data by the firmware and
19189 * the value is returned in the `hwrm_resp_hdr` upon completion.
19190 */
19191 uint16_t seq_id;
19192 /*
19193 * The target ID of the command:
19194 * * 0x0-0xFFF8 - The function ID
19195 * * 0xFFF8-0xFFFE - Reserved for internal processors
19196 * * 0xFFFF - HWRM
19197 */
19198 uint16_t target_id;
19199 /*
19200 * A physical address pointer pointing to a host buffer that the
19201 * command's response data will be written. This can be either a host
19202 * physical address (HPA) or a guest physical address (GPA) and must
19203 * point to a physically contiguous block of memory.
19204 */
19205 uint64_t resp_addr;
19206 /* Index to the rss indirection table. */
19207 uint16_t rss_ctx_idx;
19208 uint8_t unused_0[6];
19209} __attribute__((packed));
19210
19211/* hwrm_vnic_rss_qcfg_output (size:512b/64B) */
19212struct hwrm_vnic_rss_qcfg_output {
19213 /* The specific error status for the command. */
19214 uint16_t error_code;
19215 /* The HWRM command request type. */
19216 uint16_t req_type;
19217 /* The sequence ID from the original command. */
19218 uint16_t seq_id;
19219 /* The length of the response data in number of bytes. */
19220 uint16_t resp_len;
19221 uint32_t hash_type;
19222 /*
19223 * When this bit is '1', the RSS hash shall be computed
19224 * over source and destination IPv4 addresses of IPv4
19225 * packets.
19226 */
19227 #define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_TYPE_IPV4 UINT32_C(0x1)
19228 /*
19229 * When this bit is '1', the RSS hash shall be computed
19230 * over source/destination IPv4 addresses and
19231 * source/destination ports of TCP/IPv4 packets.
19232 */
19233 #define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_TYPE_TCP_IPV4 UINT32_C(0x2)
19234 /*
19235 * When this bit is '1', the RSS hash shall be computed
19236 * over source/destination IPv4 addresses and
19237 * source/destination ports of UDP/IPv4 packets.
19238 */
19239 #define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_TYPE_UDP_IPV4 UINT32_C(0x4)
19240 /*
19241 * When this bit is '1', the RSS hash shall be computed
19242 * over source and destination IPv4 addresses of IPv6
19243 * packets.
19244 */
19245 #define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_TYPE_IPV6 UINT32_C(0x8)
19246 /*
19247 * When this bit is '1', the RSS hash shall be computed
19248 * over source/destination IPv6 addresses and
19249 * source/destination ports of TCP/IPv6 packets.
19250 */
19251 #define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_TYPE_TCP_IPV6 UINT32_C(0x10)
19252 /*
19253 * When this bit is '1', the RSS hash shall be computed
19254 * over source/destination IPv6 addresses and
19255 * source/destination ports of UDP/IPv6 packets.
19256 */
19257 #define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_TYPE_UDP_IPV6 UINT32_C(0x20)
19258 uint8_t unused_0[4];
19259 /* This is the value of rss hash key */
19260 uint32_t hash_key[10];
19261 /* Flags to specify different RSS hash modes. */
19262 uint8_t hash_mode_flags;
19263 /*
19264 * When this bit is '1', it indicates using current RSS
19265 * hash mode setting configured in the device.
19266 */
19267 #define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_MODE_FLAGS_DEFAULT \
19268 UINT32_C(0x1)
19269 /*
19270 * When this bit is '1', it indicates requesting support of
19271 * RSS hashing over innermost 4 tuples {l3.src, l3.dest,
19272 * l4.src, l4.dest} for tunnel packets. For none-tunnel
19273 * packets, the RSS hash is computed over the normal
19274 * src/dest l3 and src/dest l4 headers.
19275 */
19276 #define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_MODE_FLAGS_INNERMOST_4 \
19277 UINT32_C(0x2)
19278 /*
19279 * When this bit is '1', it indicates requesting support of
19280 * RSS hashing over innermost 2 tuples {l3.src, l3.dest} for
19281 * tunnel packets. For none-tunnel packets, the RSS hash is
19282 * computed over the normal src/dest l3 headers.
19283 */
19284 #define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_MODE_FLAGS_INNERMOST_2 \
19285 UINT32_C(0x4)
19286 /*
19287 * When this bit is '1', it indicates requesting support of
19288 * RSS hashing over outermost 4 tuples {t_l3.src, t_l3.dest,
19289 * t_l4.src, t_l4.dest} for tunnel packets. For none-tunnel
19290 * packets, the RSS hash is computed over the normal
19291 * src/dest l3 and src/dest l4 headers.
19292 */
19293 #define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_MODE_FLAGS_OUTERMOST_4 \
19294 UINT32_C(0x8)
19295 /*
19296 * When this bit is '1', it indicates requesting support of
19297 * RSS hashing over outermost 2 tuples {t_l3.src, t_l3.dest} for
19298 * tunnel packets. For none-tunnel packets, the RSS hash is
19299 * computed over the normal src/dest l3 headers.
19300 */
19301 #define HWRM_VNIC_RSS_QCFG_OUTPUT_HASH_MODE_FLAGS_OUTERMOST_2 \
19302 UINT32_C(0x10)
19303 uint8_t unused_1[6];
19304 /*
19305 * This field is used in Output records to indicate that the output
19306 * is completely written to RAM. This field should be read as '1'
19307 * to indicate that the output has been completely written.
19308 * When writing a command completion or response to an internal processor,
19309 * the order of writes has to be such that this field is written last.
19310 */
19311 uint8_t valid;
19312} __attribute__((packed));
19313
19314/**************************
19315 * hwrm_vnic_plcmodes_cfg *
19316 **************************/
19317
19318
19319/* hwrm_vnic_plcmodes_cfg_input (size:320b/40B) */
19320struct hwrm_vnic_plcmodes_cfg_input {
19321 /* The HWRM command request type. */
19322 uint16_t req_type;
19323 /*
19324 * The completion ring to send the completion event on. This should
19325 * be the NQ ID returned from the `nq_alloc` HWRM command.
19326 */
19327 uint16_t cmpl_ring;
19328 /*
19329 * The sequence ID is used by the driver for tracking multiple
19330 * commands. This ID is treated as opaque data by the firmware and
19331 * the value is returned in the `hwrm_resp_hdr` upon completion.
19332 */
19333 uint16_t seq_id;
19334 /*
19335 * The target ID of the command:
19336 * * 0x0-0xFFF8 - The function ID
19337 * * 0xFFF8-0xFFFE - Reserved for internal processors
19338 * * 0xFFFF - HWRM
19339 */
19340 uint16_t target_id;
19341 /*
19342 * A physical address pointer pointing to a host buffer that the
19343 * command's response data will be written. This can be either a host
19344 * physical address (HPA) or a guest physical address (GPA) and must
19345 * point to a physically contiguous block of memory.
19346 */
19347 uint64_t resp_addr;
19348 uint32_t flags;
19349 /*
19350 * When this bit is '1', the VNIC shall be configured to
19351 * use regular placement algorithm.
19352 * By default, the regular placement algorithm shall be
19353 * enabled on the VNIC.
19354 */
19355 #define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_REGULAR_PLACEMENT \
19356 UINT32_C(0x1)
19357 /*
19358 * When this bit is '1', the VNIC shall be configured
19359 * use the jumbo placement algorithm.
19360 */
19361 #define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_JUMBO_PLACEMENT \
19362 UINT32_C(0x2)
19363 /*
19364 * When this bit is '1', the VNIC shall be configured
19365 * to enable Header-Data split for IPv4 packets according
19366 * to the following rules:
19367 * # If the packet is identified as TCP/IPv4, then the
19368 * packet is split at the beginning of the TCP payload.
19369 * # If the packet is identified as UDP/IPv4, then the
19370 * packet is split at the beginning of UDP payload.
19371 * # If the packet is identified as non-TCP and non-UDP
19372 * IPv4 packet, then the packet is split at the beginning
19373 * of the upper layer protocol header carried in the IPv4
19374 * packet.
19375 */
19376 #define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_HDS_IPV4 \
19377 UINT32_C(0x4)
19378 /*
19379 * When this bit is '1', the VNIC shall be configured
19380 * to enable Header-Data split for IPv6 packets according
19381 * to the following rules:
19382 * # If the packet is identified as TCP/IPv6, then the
19383 * packet is split at the beginning of the TCP payload.
19384 * # If the packet is identified as UDP/IPv6, then the
19385 * packet is split at the beginning of UDP payload.
19386 * # If the packet is identified as non-TCP and non-UDP
19387 * IPv6 packet, then the packet is split at the beginning
19388 * of the upper layer protocol header carried in the IPv6
19389 * packet.
19390 */
19391 #define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_HDS_IPV6 \
19392 UINT32_C(0x8)
19393 /*
19394 * When this bit is '1', the VNIC shall be configured
19395 * to enable Header-Data split for FCoE packets at the
19396 * beginning of FC payload.
19397 */
19398 #define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_HDS_FCOE \
19399 UINT32_C(0x10)
19400 /*
19401 * When this bit is '1', the VNIC shall be configured
19402 * to enable Header-Data split for RoCE packets at the
19403 * beginning of RoCE payload (after BTH/GRH headers).
19404 */
19405 #define HWRM_VNIC_PLCMODES_CFG_INPUT_FLAGS_HDS_ROCE \
19406 UINT32_C(0x20)
19407 uint32_t enables;
19408 /*
19409 * This bit must be '1' for the jumbo_thresh_valid field to be
19410 * configured.
19411 */
19412 #define HWRM_VNIC_PLCMODES_CFG_INPUT_ENABLES_JUMBO_THRESH_VALID \
19413 UINT32_C(0x1)
19414 /*
19415 * This bit must be '1' for the hds_offset_valid field to be
19416 * configured.
19417 */
19418 #define HWRM_VNIC_PLCMODES_CFG_INPUT_ENABLES_HDS_OFFSET_VALID \
19419 UINT32_C(0x2)
19420 /*
19421 * This bit must be '1' for the hds_threshold_valid field to be
19422 * configured.
19423 */
19424 #define HWRM_VNIC_PLCMODES_CFG_INPUT_ENABLES_HDS_THRESHOLD_VALID \
19425 UINT32_C(0x4)
19426 /* Logical vnic ID */
19427 uint32_t vnic_id;
19428 /*
19429 * When jumbo placement algorithm is enabled, this value
19430 * is used to determine the threshold for jumbo placement.
19431 * Packets with length larger than this value will be
19432 * placed according to the jumbo placement algorithm.
19433 */
19434 uint16_t jumbo_thresh;
19435 /*
19436 * This value is used to determine the offset into
19437 * packet buffer where the split data (payload) will be
19438 * placed according to one of of HDS placement algorithm.
19439 *
19440 * The lengths of packet buffers provided for split data
19441 * shall be larger than this value.
19442 */
19443 uint16_t hds_offset;
19444 /*
19445 * When one of the HDS placement algorithm is enabled, this
19446 * value is used to determine the threshold for HDS
19447 * placement.
19448 * Packets with length larger than this value will be
19449 * placed according to the HDS placement algorithm.
19450 * This value shall be in multiple of 4 bytes.
19451 */
19452 uint16_t hds_threshold;
19453 uint8_t unused_0[6];
19454} __attribute__((packed));
19455
19456/* hwrm_vnic_plcmodes_cfg_output (size:128b/16B) */
19457struct hwrm_vnic_plcmodes_cfg_output {
19458 /* The specific error status for the command. */
19459 uint16_t error_code;
19460 /* The HWRM command request type. */
19461 uint16_t req_type;
19462 /* The sequence ID from the original command. */
19463 uint16_t seq_id;
19464 /* The length of the response data in number of bytes. */
19465 uint16_t resp_len;
19466 uint8_t unused_0[7];
19467 /*
19468 * This field is used in Output records to indicate that the output
19469 * is completely written to RAM. This field should be read as '1'
19470 * to indicate that the output has been completely written.
19471 * When writing a command completion or response to an internal processor,
19472 * the order of writes has to be such that this field is written last.
19473 */
19474 uint8_t valid;
19475} __attribute__((packed));
19476
19477/***************************
19478 * hwrm_vnic_plcmodes_qcfg *
19479 ***************************/
19480
19481
19482/* hwrm_vnic_plcmodes_qcfg_input (size:192b/24B) */
19483struct hwrm_vnic_plcmodes_qcfg_input {
19484 /* The HWRM command request type. */
19485 uint16_t req_type;
19486 /*
19487 * The completion ring to send the completion event on. This should
19488 * be the NQ ID returned from the `nq_alloc` HWRM command.
19489 */
19490 uint16_t cmpl_ring;
19491 /*
19492 * The sequence ID is used by the driver for tracking multiple
19493 * commands. This ID is treated as opaque data by the firmware and
19494 * the value is returned in the `hwrm_resp_hdr` upon completion.
19495 */
19496 uint16_t seq_id;
19497 /*
19498 * The target ID of the command:
19499 * * 0x0-0xFFF8 - The function ID
19500 * * 0xFFF8-0xFFFE - Reserved for internal processors
19501 * * 0xFFFF - HWRM
19502 */
19503 uint16_t target_id;
19504 /*
19505 * A physical address pointer pointing to a host buffer that the
19506 * command's response data will be written. This can be either a host
19507 * physical address (HPA) or a guest physical address (GPA) and must
19508 * point to a physically contiguous block of memory.
19509 */
19510 uint64_t resp_addr;
19511 /* Logical vnic ID */
19512 uint32_t vnic_id;
19513 uint8_t unused_0[4];
19514} __attribute__((packed));
19515
19516/* hwrm_vnic_plcmodes_qcfg_output (size:192b/24B) */
19517struct hwrm_vnic_plcmodes_qcfg_output {
19518 /* The specific error status for the command. */
19519 uint16_t error_code;
19520 /* The HWRM command request type. */
19521 uint16_t req_type;
19522 /* The sequence ID from the original command. */
19523 uint16_t seq_id;
19524 /* The length of the response data in number of bytes. */
19525 uint16_t resp_len;
19526 uint32_t flags;
19527 /*
19528 * When this bit is '1', the VNIC is configured to
19529 * use regular placement algorithm.
19530 */
19531 #define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_REGULAR_PLACEMENT \
19532 UINT32_C(0x1)
19533 /*
19534 * When this bit is '1', the VNIC is configured to
19535 * use the jumbo placement algorithm.
19536 */
19537 #define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_JUMBO_PLACEMENT \
19538 UINT32_C(0x2)
19539 /*
19540 * When this bit is '1', the VNIC is configured
19541 * to enable Header-Data split for IPv4 packets.
19542 */
19543 #define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_HDS_IPV4 \
19544 UINT32_C(0x4)
19545 /*
19546 * When this bit is '1', the VNIC is configured
19547 * to enable Header-Data split for IPv6 packets.
19548 */
19549 #define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_HDS_IPV6 \
19550 UINT32_C(0x8)
19551 /*
19552 * When this bit is '1', the VNIC is configured
19553 * to enable Header-Data split for FCoE packets.
19554 */
19555 #define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_HDS_FCOE \
19556 UINT32_C(0x10)
19557 /*
19558 * When this bit is '1', the VNIC is configured
19559 * to enable Header-Data split for RoCE packets.
19560 */
19561 #define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_HDS_ROCE \
19562 UINT32_C(0x20)
19563 /*
19564 * When this bit is '1', the VNIC is configured
19565 * to be the default VNIC of the requesting function.
19566 */
19567 #define HWRM_VNIC_PLCMODES_QCFG_OUTPUT_FLAGS_DFLT_VNIC \
19568 UINT32_C(0x40)
19569 /*
19570 * When jumbo placement algorithm is enabled, this value
19571 * is used to determine the threshold for jumbo placement.
19572 * Packets with length larger than this value will be
19573 * placed according to the jumbo placement algorithm.
19574 */
19575 uint16_t jumbo_thresh;
19576 /*
19577 * This value is used to determine the offset into
19578 * packet buffer where the split data (payload) will be
19579 * placed according to one of of HDS placement algorithm.
19580 *
19581 * The lengths of packet buffers provided for split data
19582 * shall be larger than this value.
19583 */
19584 uint16_t hds_offset;
19585 /*
19586 * When one of the HDS placement algorithm is enabled, this
19587 * value is used to determine the threshold for HDS
19588 * placement.
19589 * Packets with length larger than this value will be
19590 * placed according to the HDS placement algorithm.
19591 * This value shall be in multiple of 4 bytes.
19592 */
19593 uint16_t hds_threshold;
19594 uint8_t unused_0[5];
19595 /*
19596 * This field is used in Output records to indicate that the output
19597 * is completely written to RAM. This field should be read as '1'
19598 * to indicate that the output has been completely written.
19599 * When writing a command completion or response to an internal processor,
19600 * the order of writes has to be such that this field is written last.
19601 */
19602 uint8_t valid;
19603} __attribute__((packed));
19604
19605/**********************************
19606 * hwrm_vnic_rss_cos_lb_ctx_alloc *
19607 **********************************/
19608
19609
19610/* hwrm_vnic_rss_cos_lb_ctx_alloc_input (size:128b/16B) */
19611struct hwrm_vnic_rss_cos_lb_ctx_alloc_input {
19612 /* The HWRM command request type. */
19613 uint16_t req_type;
19614 /*
19615 * The completion ring to send the completion event on. This should
19616 * be the NQ ID returned from the `nq_alloc` HWRM command.
19617 */
19618 uint16_t cmpl_ring;
19619 /*
19620 * The sequence ID is used by the driver for tracking multiple
19621 * commands. This ID is treated as opaque data by the firmware and
19622 * the value is returned in the `hwrm_resp_hdr` upon completion.
19623 */
19624 uint16_t seq_id;
19625 /*
19626 * The target ID of the command:
19627 * * 0x0-0xFFF8 - The function ID
19628 * * 0xFFF8-0xFFFE - Reserved for internal processors
19629 * * 0xFFFF - HWRM
19630 */
19631 uint16_t target_id;
19632 /*
19633 * A physical address pointer pointing to a host buffer that the
19634 * command's response data will be written. This can be either a host
19635 * physical address (HPA) or a guest physical address (GPA) and must
19636 * point to a physically contiguous block of memory.
19637 */
19638 uint64_t resp_addr;
19639} __attribute__((packed));
19640
19641/* hwrm_vnic_rss_cos_lb_ctx_alloc_output (size:128b/16B) */
19642struct hwrm_vnic_rss_cos_lb_ctx_alloc_output {
19643 /* The specific error status for the command. */
19644 uint16_t error_code;
19645 /* The HWRM command request type. */
19646 uint16_t req_type;
19647 /* The sequence ID from the original command. */
19648 uint16_t seq_id;
19649 /* The length of the response data in number of bytes. */
19650 uint16_t resp_len;
19651 /* rss_cos_lb_ctx_id is 16 b */
19652 uint16_t rss_cos_lb_ctx_id;
19653 uint8_t unused_0[5];
19654 /*
19655 * This field is used in Output records to indicate that the output
19656 * is completely written to RAM. This field should be read as '1'
19657 * to indicate that the output has been completely written.
19658 * When writing a command completion or response to an internal processor,
19659 * the order of writes has to be such that this field is written last.
19660 */
19661 uint8_t valid;
19662} __attribute__((packed));
19663
19664/*********************************
19665 * hwrm_vnic_rss_cos_lb_ctx_free *
19666 *********************************/
19667
19668
19669/* hwrm_vnic_rss_cos_lb_ctx_free_input (size:192b/24B) */
19670struct hwrm_vnic_rss_cos_lb_ctx_free_input {
19671 /* The HWRM command request type. */
19672 uint16_t req_type;
19673 /*
19674 * The completion ring to send the completion event on. This should
19675 * be the NQ ID returned from the `nq_alloc` HWRM command.
19676 */
19677 uint16_t cmpl_ring;
19678 /*
19679 * The sequence ID is used by the driver for tracking multiple
19680 * commands. This ID is treated as opaque data by the firmware and
19681 * the value is returned in the `hwrm_resp_hdr` upon completion.
19682 */
19683 uint16_t seq_id;
19684 /*
19685 * The target ID of the command:
19686 * * 0x0-0xFFF8 - The function ID
19687 * * 0xFFF8-0xFFFE - Reserved for internal processors
19688 * * 0xFFFF - HWRM
19689 */
19690 uint16_t target_id;
19691 /*
19692 * A physical address pointer pointing to a host buffer that the
19693 * command's response data will be written. This can be either a host
19694 * physical address (HPA) or a guest physical address (GPA) and must
19695 * point to a physically contiguous block of memory.
19696 */
19697 uint64_t resp_addr;
19698 /* rss_cos_lb_ctx_id is 16 b */
19699 uint16_t rss_cos_lb_ctx_id;
19700 uint8_t unused_0[6];
19701} __attribute__((packed));
19702
19703/* hwrm_vnic_rss_cos_lb_ctx_free_output (size:128b/16B) */
19704struct hwrm_vnic_rss_cos_lb_ctx_free_output {
19705 /* The specific error status for the command. */
19706 uint16_t error_code;
19707 /* The HWRM command request type. */
19708 uint16_t req_type;
19709 /* The sequence ID from the original command. */
19710 uint16_t seq_id;
19711 /* The length of the response data in number of bytes. */
19712 uint16_t resp_len;
19713 uint8_t unused_0[7];
19714 /*
19715 * This field is used in Output records to indicate that the output
19716 * is completely written to RAM. This field should be read as '1'
19717 * to indicate that the output has been completely written.
19718 * When writing a command completion or response to an internal processor,
19719 * the order of writes has to be such that this field is written last.
19720 */
19721 uint8_t valid;
19722} __attribute__((packed));
19723
19724/*******************
19725 * hwrm_ring_alloc *
19726 *******************/
19727
19728
19729/* hwrm_ring_alloc_input (size:704b/88B) */
19730struct hwrm_ring_alloc_input {
19731 /* The HWRM command request type. */
19732 uint16_t req_type;
19733 /*
19734 * The completion ring to send the completion event on. This should
19735 * be the NQ ID returned from the `nq_alloc` HWRM command.
19736 */
19737 uint16_t cmpl_ring;
19738 /*
19739 * The sequence ID is used by the driver for tracking multiple
19740 * commands. This ID is treated as opaque data by the firmware and
19741 * the value is returned in the `hwrm_resp_hdr` upon completion.
19742 */
19743 uint16_t seq_id;
19744 /*
19745 * The target ID of the command:
19746 * * 0x0-0xFFF8 - The function ID
19747 * * 0xFFF8-0xFFFE - Reserved for internal processors
19748 * * 0xFFFF - HWRM
19749 */
19750 uint16_t target_id;
19751 /*
19752 * A physical address pointer pointing to a host buffer that the
19753 * command's response data will be written. This can be either a host
19754 * physical address (HPA) or a guest physical address (GPA) and must
19755 * point to a physically contiguous block of memory.
19756 */
19757 uint64_t resp_addr;
19758 uint32_t enables;
19759 /*
19760 * This bit must be '1' for the ring_arb_cfg field to be
19761 * configured.
19762 */
19763 #define HWRM_RING_ALLOC_INPUT_ENABLES_RING_ARB_CFG \
19764 UINT32_C(0x2)
19765 /*
19766 * This bit must be '1' for the stat_ctx_id_valid field to be
19767 * configured.
19768 */
19769 #define HWRM_RING_ALLOC_INPUT_ENABLES_STAT_CTX_ID_VALID \
19770 UINT32_C(0x8)
19771 /*
19772 * This bit must be '1' for the max_bw_valid field to be
19773 * configured.
19774 */
19775 #define HWRM_RING_ALLOC_INPUT_ENABLES_MAX_BW_VALID \
19776 UINT32_C(0x20)
19777 /*
19778 * This bit must be '1' for the rx_ring_id field to be
19779 * configured.
19780 */
19781 #define HWRM_RING_ALLOC_INPUT_ENABLES_RX_RING_ID_VALID \
19782 UINT32_C(0x40)
19783 /*
19784 * This bit must be '1' for the nq_ring_id field to be
19785 * configured.
19786 */
19787 #define HWRM_RING_ALLOC_INPUT_ENABLES_NQ_RING_ID_VALID \
19788 UINT32_C(0x80)
19789 /*
19790 * This bit must be '1' for the rx_buf_size field to be
19791 * configured.
19792 */
19793 #define HWRM_RING_ALLOC_INPUT_ENABLES_RX_BUF_SIZE_VALID \
19794 UINT32_C(0x100)
19795 /* Ring Type. */
19796 uint8_t ring_type;
19797 /* L2 Completion Ring (CR) */
19798 #define HWRM_RING_ALLOC_INPUT_RING_TYPE_L2_CMPL UINT32_C(0x0)
19799 /* TX Ring (TR) */
19800 #define HWRM_RING_ALLOC_INPUT_RING_TYPE_TX UINT32_C(0x1)
19801 /* RX Ring (RR) */
19802 #define HWRM_RING_ALLOC_INPUT_RING_TYPE_RX UINT32_C(0x2)
19803 /* RoCE Notification Completion Ring (ROCE_CR) */
19804 #define HWRM_RING_ALLOC_INPUT_RING_TYPE_ROCE_CMPL UINT32_C(0x3)
19805 /* RX Aggregation Ring */
19806 #define HWRM_RING_ALLOC_INPUT_RING_TYPE_RX_AGG UINT32_C(0x4)
19807 /* Notification Queue */
19808 #define HWRM_RING_ALLOC_INPUT_RING_TYPE_NQ UINT32_C(0x5)
19809 #define HWRM_RING_ALLOC_INPUT_RING_TYPE_LAST \
19810 HWRM_RING_ALLOC_INPUT_RING_TYPE_NQ
19811 uint8_t unused_0;
19812 /* Ring allocation flags. */
19813 uint16_t flags;
19814 /*
19815 * For Rx rings, the incoming packet data can be placed at either
19816 * a 0B or 2B offset from the start of the Rx packet buffer. When
19817 * '1', the received packet will be padded with 2B of zeros at the
19818 * front of the packet. Note that this flag is only used for
19819 * Rx rings and is ignored for all other rings included Rx
19820 * Aggregation rings.
19821 */
19822 #define HWRM_RING_ALLOC_INPUT_FLAGS_RX_SOP_PAD UINT32_C(0x1)
19823 /*
19824 * This value is a pointer to the page table for the
19825 * Ring.
19826 */
19827 uint64_t page_tbl_addr;
19828 /* First Byte Offset of the first entry in the first page. */
19829 uint32_t fbo;
19830 /*
19831 * Actual page size in 2^page_size. The supported range is increments
19832 * in powers of 2 from 16 bytes to 1GB.
19833 * - 4 = 16 B
19834 * Page size is 16 B.
19835 * - 12 = 4 KB
19836 * Page size is 4 KB.
19837 * - 13 = 8 KB
19838 * Page size is 8 KB.
19839 * - 16 = 64 KB
19840 * Page size is 64 KB.
19841 * - 21 = 2 MB
19842 * Page size is 2 MB.
19843 * - 22 = 4 MB
19844 * Page size is 4 MB.
19845 * - 30 = 1 GB
19846 * Page size is 1 GB.
19847 */
19848 uint8_t page_size;
19849 /*
19850 * This value indicates the depth of page table.
19851 * For this version of the specification, value other than 0 or
19852 * 1 shall be considered as an invalid value.
19853 * When the page_tbl_depth = 0, then it is treated as a
19854 * special case with the following.
19855 * 1. FBO and page size fields are not valid.
19856 * 2. page_tbl_addr is the physical address of the first
19857 * element of the ring.
19858 */
19859 uint8_t page_tbl_depth;
19860 uint8_t unused_1[2];
19861 /*
19862 * Number of 16B units in the ring. Minimum size for
19863 * a ring is 16 16B entries.
19864 */
19865 uint32_t length;
19866 /*
19867 * Logical ring number for the ring to be allocated.
19868 * This value determines the position in the doorbell
19869 * area where the update to the ring will be made.
19870 *
19871 * For completion rings, this value is also the MSI-X
19872 * vector number for the function the completion ring is
19873 * associated with.
19874 */
19875 uint16_t logical_id;
19876 /*
19877 * This field is used only when ring_type is a TX ring.
19878 * This value indicates what completion ring the TX ring
19879 * is associated with.
19880 */
19881 uint16_t cmpl_ring_id;
19882 /*
19883 * This field is used only when ring_type is a TX ring.
19884 * This value indicates what CoS queue the TX ring
19885 * is associated with.
19886 */
19887 uint16_t queue_id;
19888 /*
19889 * When allocating a Rx ring or Rx aggregation ring, this field
19890 * specifies the size of the buffer descriptors posted to the ring.
19891 */
19892 uint16_t rx_buf_size;
19893 /*
19894 * When allocating an Rx aggregation ring, this field
19895 * specifies the associated Rx ring ID.
19896 */
19897 uint16_t rx_ring_id;
19898 /*
19899 * When allocating a completion ring, this field
19900 * specifies the associated NQ ring ID.
19901 */
19902 uint16_t nq_ring_id;
19903 /*
19904 * This field is used only when ring_type is a TX ring.
19905 * This field is used to configure arbitration related
19906 * parameters for a TX ring.
19907 */
19908 uint16_t ring_arb_cfg;
19909 /* Arbitration policy used for the ring. */
19910 #define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_MASK \
19911 UINT32_C(0xf)
19912 #define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_SFT 0
19913 /*
19914 * Use strict priority for the TX ring.
19915 * Priority value is specified in arb_policy_param
19916 */
19917 #define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_SP \
19918 UINT32_C(0x1)
19919 /*
19920 * Use weighted fair queue arbitration for the TX ring.
19921 * Weight is specified in arb_policy_param
19922 */
19923 #define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_WFQ \
19924 UINT32_C(0x2)
19925 #define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_LAST \
19926 HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_WFQ
19927 /* Reserved field. */
19928 #define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_RSVD_MASK \
19929 UINT32_C(0xf0)
19930 #define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_RSVD_SFT 4
19931 /*
19932 * Arbitration policy specific parameter.
19933 * # For strict priority arbitration policy, this field
19934 * represents a priority value. If set to 0, then the priority
19935 * is not specified and the HWRM is allowed to select
19936 * any priority for this TX ring.
19937 * # For weighted fair queue arbitration policy, this field
19938 * represents a weight value. If set to 0, then the weight
19939 * is not specified and the HWRM is allowed to select
19940 * any weight for this TX ring.
19941 */
19942 #define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_PARAM_MASK \
19943 UINT32_C(0xff00)
19944 #define HWRM_RING_ALLOC_INPUT_RING_ARB_CFG_ARB_POLICY_PARAM_SFT 8
19945 uint16_t unused_3;
19946 /*
19947 * This field is reserved for the future use.
19948 * It shall be set to 0.
19949 */
19950 uint32_t reserved3;
19951 /*
19952 * This field is used only when ring_type is a TX ring.
19953 * This input indicates what statistics context this ring
19954 * should be associated with.
19955 */
19956 uint32_t stat_ctx_id;
19957 /*
19958 * This field is reserved for the future use.
19959 * It shall be set to 0.
19960 */
19961 uint32_t reserved4;
19962 /*
19963 * This field is used only when ring_type is a TX ring
19964 * to specify maximum BW allocated to the TX ring.
19965 * The HWRM will translate this value into byte counter and
19966 * time interval used for this ring inside the device.
19967 */
19968 uint32_t max_bw;
19969 /* The bandwidth value. */
19970 #define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_MASK \
19971 UINT32_C(0xfffffff)
19972 #define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_SFT 0
19973 /* The granularity of the value (bits or bytes). */
19974 #define HWRM_RING_ALLOC_INPUT_MAX_BW_SCALE \
19975 UINT32_C(0x10000000)
19976 /* Value is in bits. */
19977 #define HWRM_RING_ALLOC_INPUT_MAX_BW_SCALE_BITS \
19978 (UINT32_C(0x0) << 28)
19979 /* Value is in bytes. */
19980 #define HWRM_RING_ALLOC_INPUT_MAX_BW_SCALE_BYTES \
19981 (UINT32_C(0x1) << 28)
19982 #define HWRM_RING_ALLOC_INPUT_MAX_BW_SCALE_LAST \
19983 HWRM_RING_ALLOC_INPUT_MAX_BW_SCALE_BYTES
19984 /* bw_value_unit is 3 b */
19985 #define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_MASK \
19986 UINT32_C(0xe0000000)
19987 #define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_SFT 29
19988 /* Value is in Mb or MB (base 10). */
19989 #define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_MEGA \
19990 (UINT32_C(0x0) << 29)
19991 /* Value is in Kb or KB (base 10). */
19992 #define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_KILO \
19993 (UINT32_C(0x2) << 29)
19994 /* Value is in bits or bytes. */
19995 #define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_BASE \
19996 (UINT32_C(0x4) << 29)
19997 /* Value is in Gb or GB (base 10). */
19998 #define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_GIGA \
19999 (UINT32_C(0x6) << 29)
20000 /* Value is in 1/100th of a percentage of total bandwidth. */
20001 #define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_PERCENT1_100 \
20002 (UINT32_C(0x1) << 29)
20003 /* Invalid unit */
20004 #define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_INVALID \
20005 (UINT32_C(0x7) << 29)
20006 #define HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_LAST \
20007 HWRM_RING_ALLOC_INPUT_MAX_BW_BW_VALUE_UNIT_INVALID
20008 /*
20009 * This field is used only when ring_type is a Completion ring.
20010 * This value indicates what interrupt mode should be used
20011 * on this completion ring.
20012 * Note: In the legacy interrupt mode, no more than 16
20013 * completion rings are allowed.
20014 */
20015 uint8_t int_mode;
20016 /* Legacy INTA */
20017 #define HWRM_RING_ALLOC_INPUT_INT_MODE_LEGACY UINT32_C(0x0)
20018 /* Reserved */
20019 #define HWRM_RING_ALLOC_INPUT_INT_MODE_RSVD UINT32_C(0x1)
20020 /* MSI-X */
20021 #define HWRM_RING_ALLOC_INPUT_INT_MODE_MSIX UINT32_C(0x2)
20022 /* No Interrupt - Polled mode */
20023 #define HWRM_RING_ALLOC_INPUT_INT_MODE_POLL UINT32_C(0x3)
20024 #define HWRM_RING_ALLOC_INPUT_INT_MODE_LAST \
20025 HWRM_RING_ALLOC_INPUT_INT_MODE_POLL
20026 uint8_t unused_4[3];
20027 /*
20028 * The cq_handle is specified when allocating a completion ring. For
20029 * devices that support NQs, this cq_handle will be included in the
20030 * NQE to specify which CQ should be read to retrieve the completion
20031 * record.
20032 */
20033 uint64_t cq_handle;
20034} __attribute__((packed));
20035
20036/* hwrm_ring_alloc_output (size:128b/16B) */
20037struct hwrm_ring_alloc_output {
20038 /* The specific error status for the command. */
20039 uint16_t error_code;
20040 /* The HWRM command request type. */
20041 uint16_t req_type;
20042 /* The sequence ID from the original command. */
20043 uint16_t seq_id;
20044 /* The length of the response data in number of bytes. */
20045 uint16_t resp_len;
20046 /*
20047 * Physical number of ring allocated.
20048 * This value shall be unique for a ring type.
20049 */
20050 uint16_t ring_id;
20051 /* Logical number of ring allocated. */
20052 uint16_t logical_ring_id;
20053 uint8_t unused_0[3];
20054 /*
20055 * This field is used in Output records to indicate that the output
20056 * is completely written to RAM. This field should be read as '1'
20057 * to indicate that the output has been completely written.
20058 * When writing a command completion or response to an internal processor,
20059 * the order of writes has to be such that this field is written last.
20060 */
20061 uint8_t valid;
20062} __attribute__((packed));
20063
20064/******************
20065 * hwrm_ring_free *
20066 ******************/
20067
20068
20069/* hwrm_ring_free_input (size:192b/24B) */
20070struct hwrm_ring_free_input {
20071 /* The HWRM command request type. */
20072 uint16_t req_type;
20073 /*
20074 * The completion ring to send the completion event on. This should
20075 * be the NQ ID returned from the `nq_alloc` HWRM command.
20076 */
20077 uint16_t cmpl_ring;
20078 /*
20079 * The sequence ID is used by the driver for tracking multiple
20080 * commands. This ID is treated as opaque data by the firmware and
20081 * the value is returned in the `hwrm_resp_hdr` upon completion.
20082 */
20083 uint16_t seq_id;
20084 /*
20085 * The target ID of the command:
20086 * * 0x0-0xFFF8 - The function ID
20087 * * 0xFFF8-0xFFFE - Reserved for internal processors
20088 * * 0xFFFF - HWRM
20089 */
20090 uint16_t target_id;
20091 /*
20092 * A physical address pointer pointing to a host buffer that the
20093 * command's response data will be written. This can be either a host
20094 * physical address (HPA) or a guest physical address (GPA) and must
20095 * point to a physically contiguous block of memory.
20096 */
20097 uint64_t resp_addr;
20098 /* Ring Type. */
20099 uint8_t ring_type;
20100 /* L2 Completion Ring (CR) */
20101 #define HWRM_RING_FREE_INPUT_RING_TYPE_L2_CMPL UINT32_C(0x0)
20102 /* TX Ring (TR) */
20103 #define HWRM_RING_FREE_INPUT_RING_TYPE_TX UINT32_C(0x1)
20104 /* RX Ring (RR) */
20105 #define HWRM_RING_FREE_INPUT_RING_TYPE_RX UINT32_C(0x2)
20106 /* RoCE Notification Completion Ring (ROCE_CR) */
20107 #define HWRM_RING_FREE_INPUT_RING_TYPE_ROCE_CMPL UINT32_C(0x3)
20108 /* RX Aggregation Ring */
20109 #define HWRM_RING_FREE_INPUT_RING_TYPE_RX_AGG UINT32_C(0x4)
20110 /* Notification Queue */
20111 #define HWRM_RING_FREE_INPUT_RING_TYPE_NQ UINT32_C(0x5)
20112 #define HWRM_RING_FREE_INPUT_RING_TYPE_LAST \
20113 HWRM_RING_FREE_INPUT_RING_TYPE_NQ
20114 uint8_t unused_0;
20115 /* Physical number of ring allocated. */
20116 uint16_t ring_id;
20117 uint8_t unused_1[4];
20118} __attribute__((packed));
20119
20120/* hwrm_ring_free_output (size:128b/16B) */
20121struct hwrm_ring_free_output {
20122 /* The specific error status for the command. */
20123 uint16_t error_code;
20124 /* The HWRM command request type. */
20125 uint16_t req_type;
20126 /* The sequence ID from the original command. */
20127 uint16_t seq_id;
20128 /* The length of the response data in number of bytes. */
20129 uint16_t resp_len;
20130 uint8_t unused_0[7];
20131 /*
20132 * This field is used in Output records to indicate that the output
20133 * is completely written to RAM. This field should be read as '1'
20134 * to indicate that the output has been completely written.
20135 * When writing a command completion or response to an internal processor,
20136 * the order of writes has to be such that this field is written last.
20137 */
20138 uint8_t valid;
20139} __attribute__((packed));
20140
20141/*******************
20142 * hwrm_ring_reset *
20143 *******************/
20144
20145
20146/* hwrm_ring_reset_input (size:192b/24B) */
20147struct hwrm_ring_reset_input {
20148 /* The HWRM command request type. */
20149 uint16_t req_type;
20150 /*
20151 * The completion ring to send the completion event on. This should
20152 * be the NQ ID returned from the `nq_alloc` HWRM command.
20153 */
20154 uint16_t cmpl_ring;
20155 /*
20156 * The sequence ID is used by the driver for tracking multiple
20157 * commands. This ID is treated as opaque data by the firmware and
20158 * the value is returned in the `hwrm_resp_hdr` upon completion.
20159 */
20160 uint16_t seq_id;
20161 /*
20162 * The target ID of the command:
20163 * * 0x0-0xFFF8 - The function ID
20164 * * 0xFFF8-0xFFFE - Reserved for internal processors
20165 * * 0xFFFF - HWRM
20166 */
20167 uint16_t target_id;
20168 /*
20169 * A physical address pointer pointing to a host buffer that the
20170 * command's response data will be written. This can be either a host
20171 * physical address (HPA) or a guest physical address (GPA) and must
20172 * point to a physically contiguous block of memory.
20173 */
20174 uint64_t resp_addr;
20175 /* Ring Type. */
20176 uint8_t ring_type;
20177 /* L2 Completion Ring (CR) */
20178 #define HWRM_RING_RESET_INPUT_RING_TYPE_L2_CMPL UINT32_C(0x0)
20179 /* TX Ring (TR) */
20180 #define HWRM_RING_RESET_INPUT_RING_TYPE_TX UINT32_C(0x1)
20181 /* RX Ring (RR) */
20182 #define HWRM_RING_RESET_INPUT_RING_TYPE_RX UINT32_C(0x2)
20183 /* RoCE Notification Completion Ring (ROCE_CR) */
20184 #define HWRM_RING_RESET_INPUT_RING_TYPE_ROCE_CMPL UINT32_C(0x3)
20185 #define HWRM_RING_RESET_INPUT_RING_TYPE_LAST \
20186 HWRM_RING_RESET_INPUT_RING_TYPE_ROCE_CMPL
20187 uint8_t unused_0;
20188 /* Physical number of the ring. */
20189 uint16_t ring_id;
20190 uint8_t unused_1[4];
20191} __attribute__((packed));
20192
20193/* hwrm_ring_reset_output (size:128b/16B) */
20194struct hwrm_ring_reset_output {
20195 /* The specific error status for the command. */
20196 uint16_t error_code;
20197 /* The HWRM command request type. */
20198 uint16_t req_type;
20199 /* The sequence ID from the original command. */
20200 uint16_t seq_id;
20201 /* The length of the response data in number of bytes. */
20202 uint16_t resp_len;
20203 uint8_t unused_0[7];
20204 /*
20205 * This field is used in Output records to indicate that the output
20206 * is completely written to RAM. This field should be read as '1'
20207 * to indicate that the output has been completely written.
20208 * When writing a command completion or response to an internal processor,
20209 * the order of writes has to be such that this field is written last.
20210 */
20211 uint8_t valid;
20212} __attribute__((packed));
20213
20214/**************************
20215 * hwrm_ring_aggint_qcaps *
20216 **************************/
20217
20218
20219/* hwrm_ring_aggint_qcaps_input (size:128b/16B) */
20220struct hwrm_ring_aggint_qcaps_input {
20221 /* The HWRM command request type. */
20222 uint16_t req_type;
20223 /*
20224 * The completion ring to send the completion event on. This should
20225 * be the NQ ID returned from the `nq_alloc` HWRM command.
20226 */
20227 uint16_t cmpl_ring;
20228 /*
20229 * The sequence ID is used by the driver for tracking multiple
20230 * commands. This ID is treated as opaque data by the firmware and
20231 * the value is returned in the `hwrm_resp_hdr` upon completion.
20232 */
20233 uint16_t seq_id;
20234 /*
20235 * The target ID of the command:
20236 * * 0x0-0xFFF8 - The function ID
20237 * * 0xFFF8-0xFFFE - Reserved for internal processors
20238 * * 0xFFFF - HWRM
20239 */
20240 uint16_t target_id;
20241 /*
20242 * A physical address pointer pointing to a host buffer that the
20243 * command's response data will be written. This can be either a host
20244 * physical address (HPA) or a guest physical address (GPA) and must
20245 * point to a physically contiguous block of memory.
20246 */
20247 uint64_t resp_addr;
20248} __attribute__((packed));
20249
20250/* hwrm_ring_aggint_qcaps_output (size:384b/48B) */
20251struct hwrm_ring_aggint_qcaps_output {
20252 /* The specific error status for the command. */
20253 uint16_t error_code;
20254 /* The HWRM command request type. */
20255 uint16_t req_type;
20256 /* The sequence ID from the original command. */
20257 uint16_t seq_id;
20258 /* The length of the response data in number of bytes. */
20259 uint16_t resp_len;
20260 uint32_t cmpl_params;
20261 /*
20262 * When this bit is set to '1', int_lat_tmr_min can be configured
20263 * on completion rings.
20264 */
20265 #define HWRM_RING_AGGINT_QCAPS_OUTPUT_CMPL_PARAMS_INT_LAT_TMR_MIN \
20266 UINT32_C(0x1)
20267 /*
20268 * When this bit is set to '1', int_lat_tmr_max can be configured
20269 * on completion rings.
20270 */
20271 #define HWRM_RING_AGGINT_QCAPS_OUTPUT_CMPL_PARAMS_INT_LAT_TMR_MAX \
20272 UINT32_C(0x2)
20273 /*
20274 * When this bit is set to '1', timer_reset can be enabled
20275 * on completion rings.
20276 */
20277 #define HWRM_RING_AGGINT_QCAPS_OUTPUT_CMPL_PARAMS_TIMER_RESET \
20278 UINT32_C(0x4)
20279 /*
20280 * When this bit is set to '1', ring_idle can be enabled
20281 * on completion rings.
20282 */
20283 #define HWRM_RING_AGGINT_QCAPS_OUTPUT_CMPL_PARAMS_RING_IDLE \
20284 UINT32_C(0x8)
20285 /*
20286 * When this bit is set to '1', num_cmpl_dma_aggr can be configured
20287 * on completion rings.
20288 */
20289 #define HWRM_RING_AGGINT_QCAPS_OUTPUT_CMPL_PARAMS_NUM_CMPL_DMA_AGGR \
20290 UINT32_C(0x10)
20291 /*
20292 * When this bit is set to '1', num_cmpl_dma_aggr_during_int can be configured
20293 * on completion rings.
20294 */
20295 #define HWRM_RING_AGGINT_QCAPS_OUTPUT_CMPL_PARAMS_NUM_CMPL_DMA_AGGR_DURING_INT \
20296 UINT32_C(0x20)
20297 /*
20298 * When this bit is set to '1', cmpl_aggr_dma_tmr can be configured
20299 * on completion rings.
20300 */
20301 #define HWRM_RING_AGGINT_QCAPS_OUTPUT_CMPL_PARAMS_CMPL_AGGR_DMA_TMR \
20302 UINT32_C(0x40)
20303 /*
20304 * When this bit is set to '1', cmpl_aggr_dma_tmr_during_int can be configured
20305 * on completion rings.
20306 */
20307 #define HWRM_RING_AGGINT_QCAPS_OUTPUT_CMPL_PARAMS_CMPL_AGGR_DMA_TMR_DURING_INT \
20308 UINT32_C(0x80)
20309 /*
20310 * When this bit is set to '1', num_cmpl_aggr_int can be configured
20311 * on completion rings.
20312 */
20313 #define HWRM_RING_AGGINT_QCAPS_OUTPUT_CMPL_PARAMS_NUM_CMPL_AGGR_INT \
20314 UINT32_C(0x100)
20315 uint32_t nq_params;
20316 /*
20317 * When this bit is set to '1', int_lat_tmr_min can be configured
20318 * on notification queues.
20319 */
20320 #define HWRM_RING_AGGINT_QCAPS_OUTPUT_NQ_PARAMS_INT_LAT_TMR_MIN \
20321 UINT32_C(0x1)
20322 /* Minimum value for num_cmpl_dma_aggr */
20323 uint16_t num_cmpl_dma_aggr_min;
20324 /* Maximum value for num_cmpl_dma_aggr */
20325 uint16_t num_cmpl_dma_aggr_max;
20326 /* Minimum value for num_cmpl_dma_aggr_during_int */
20327 uint16_t num_cmpl_dma_aggr_during_int_min;
20328 /* Maximum value for num_cmpl_dma_aggr_during_int */
20329 uint16_t num_cmpl_dma_aggr_during_int_max;
20330 /* Minimum value for cmpl_aggr_dma_tmr */
20331 uint16_t cmpl_aggr_dma_tmr_min;
20332 /* Maximum value for cmpl_aggr_dma_tmr */
20333 uint16_t cmpl_aggr_dma_tmr_max;
20334 /* Minimum value for cmpl_aggr_dma_tmr_during_int */
20335 uint16_t cmpl_aggr_dma_tmr_during_int_min;
20336 /* Maximum value for cmpl_aggr_dma_tmr_during_int */
20337 uint16_t cmpl_aggr_dma_tmr_during_int_max;
20338 /* Minimum value for int_lat_tmr_min */
20339 uint16_t int_lat_tmr_min_min;
20340 /* Maximum value for int_lat_tmr_min */
20341 uint16_t int_lat_tmr_min_max;
20342 /* Minimum value for int_lat_tmr_max */
20343 uint16_t int_lat_tmr_max_min;
20344 /* Maximum value for int_lat_tmr_max */
20345 uint16_t int_lat_tmr_max_max;
20346 /* Minimum value for num_cmpl_aggr_int */
20347 uint16_t num_cmpl_aggr_int_min;
20348 /* Maximum value for num_cmpl_aggr_int */
20349 uint16_t num_cmpl_aggr_int_max;
20350 /* The units for timer parameters, in nanoseconds. */
20351 uint16_t timer_units;
20352 uint8_t unused_0[1];
20353 /*
20354 * This field is used in Output records to indicate that the output
20355 * is completely written to RAM. This field should be read as '1'
20356 * to indicate that the output has been completely written.
20357 * When writing a command completion or response to an internal processor,
20358 * the order of writes has to be such that this field is written last.
20359 */
20360 uint8_t valid;
20361} __attribute__((packed));
20362
20363/**************************************
20364 * hwrm_ring_cmpl_ring_qaggint_params *
20365 **************************************/
20366
20367
20368/* hwrm_ring_cmpl_ring_qaggint_params_input (size:192b/24B) */
20369struct hwrm_ring_cmpl_ring_qaggint_params_input {
20370 /* The HWRM command request type. */
20371 uint16_t req_type;
20372 /*
20373 * The completion ring to send the completion event on. This should
20374 * be the NQ ID returned from the `nq_alloc` HWRM command.
20375 */
20376 uint16_t cmpl_ring;
20377 /*
20378 * The sequence ID is used by the driver for tracking multiple
20379 * commands. This ID is treated as opaque data by the firmware and
20380 * the value is returned in the `hwrm_resp_hdr` upon completion.
20381 */
20382 uint16_t seq_id;
20383 /*
20384 * The target ID of the command:
20385 * * 0x0-0xFFF8 - The function ID
20386 * * 0xFFF8-0xFFFE - Reserved for internal processors
20387 * * 0xFFFF - HWRM
20388 */
20389 uint16_t target_id;
20390 /*
20391 * A physical address pointer pointing to a host buffer that the
20392 * command's response data will be written. This can be either a host
20393 * physical address (HPA) or a guest physical address (GPA) and must
20394 * point to a physically contiguous block of memory.
20395 */
20396 uint64_t resp_addr;
20397 /* Physical number of completion ring. */
20398 uint16_t ring_id;
20399 uint8_t unused_0[6];
20400} __attribute__((packed));
20401
20402/* hwrm_ring_cmpl_ring_qaggint_params_output (size:256b/32B) */
20403struct hwrm_ring_cmpl_ring_qaggint_params_output {
20404 /* The specific error status for the command. */
20405 uint16_t error_code;
20406 /* The HWRM command request type. */
20407 uint16_t req_type;
20408 /* The sequence ID from the original command. */
20409 uint16_t seq_id;
20410 /* The length of the response data in number of bytes. */
20411 uint16_t resp_len;
20412 uint16_t flags;
20413 /*
20414 * When this bit is set to '1', interrupt max
20415 * timer is reset whenever a completion is received.
20416 */
20417 #define HWRM_RING_CMPL_RING_QAGGINT_PARAMS_OUTPUT_FLAGS_TIMER_RESET \
20418 UINT32_C(0x1)
20419 /*
20420 * When this bit is set to '1', ring idle mode
20421 * aggregation will be enabled.
20422 */
20423 #define HWRM_RING_CMPL_RING_QAGGINT_PARAMS_OUTPUT_FLAGS_RING_IDLE \
20424 UINT32_C(0x2)
20425 /*
20426 * Number of completions to aggregate before DMA
20427 * during the normal mode.
20428 */
20429 uint16_t num_cmpl_dma_aggr;
20430 /*
20431 * Number of completions to aggregate before DMA
20432 * during the interrupt mode.
20433 */
20434 uint16_t num_cmpl_dma_aggr_during_int;
20435 /*
20436 * Timer in unit of 80-nsec used to aggregate completions before
20437 * DMA during the normal mode (not in interrupt mode).
20438 */
20439 uint16_t cmpl_aggr_dma_tmr;
20440 /*
20441 * Timer in unit of 80-nsec used to aggregate completions before
20442 * DMA during the interrupt mode.
20443 */
20444 uint16_t cmpl_aggr_dma_tmr_during_int;
20445 /* Minimum time (in unit of 80-nsec) between two interrupts. */
20446 uint16_t int_lat_tmr_min;
20447 /*
20448 * Maximum wait time (in unit of 80-nsec) spent aggregating
20449 * completions before signaling the interrupt after the
20450 * interrupt is enabled.
20451 */
20452 uint16_t int_lat_tmr_max;
20453 /*
20454 * Minimum number of completions aggregated before signaling
20455 * an interrupt.
20456 */
20457 uint16_t num_cmpl_aggr_int;
20458 uint8_t unused_0[7];
20459 /*
20460 * This field is used in Output records to indicate that the output
20461 * is completely written to RAM. This field should be read as '1'
20462 * to indicate that the output has been completely written.
20463 * When writing a command completion or response to an internal processor,
20464 * the order of writes has to be such that this field is written last.
20465 */
20466 uint8_t valid;
20467} __attribute__((packed));
20468
20469/*****************************************
20470 * hwrm_ring_cmpl_ring_cfg_aggint_params *
20471 *****************************************/
20472
20473
20474/* hwrm_ring_cmpl_ring_cfg_aggint_params_input (size:320b/40B) */
20475struct hwrm_ring_cmpl_ring_cfg_aggint_params_input {
20476 /* The HWRM command request type. */
20477 uint16_t req_type;
20478 /*
20479 * The completion ring to send the completion event on. This should
20480 * be the NQ ID returned from the `nq_alloc` HWRM command.
20481 */
20482 uint16_t cmpl_ring;
20483 /*
20484 * The sequence ID is used by the driver for tracking multiple
20485 * commands. This ID is treated as opaque data by the firmware and
20486 * the value is returned in the `hwrm_resp_hdr` upon completion.
20487 */
20488 uint16_t seq_id;
20489 /*
20490 * The target ID of the command:
20491 * * 0x0-0xFFF8 - The function ID
20492 * * 0xFFF8-0xFFFE - Reserved for internal processors
20493 * * 0xFFFF - HWRM
20494 */
20495 uint16_t target_id;
20496 /*
20497 * A physical address pointer pointing to a host buffer that the
20498 * command's response data will be written. This can be either a host
20499 * physical address (HPA) or a guest physical address (GPA) and must
20500 * point to a physically contiguous block of memory.
20501 */
20502 uint64_t resp_addr;
20503 /* Physical number of completion ring. */
20504 uint16_t ring_id;
20505 uint16_t flags;
20506 /*
20507 * When this bit is set to '1', interrupt latency max
20508 * timer is reset whenever a completion is received.
20509 */
20510 #define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_FLAGS_TIMER_RESET \
20511 UINT32_C(0x1)
20512 /*
20513 * When this bit is set to '1', ring idle mode
20514 * aggregation will be enabled.
20515 */
20516 #define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_FLAGS_RING_IDLE \
20517 UINT32_C(0x2)
20518 /*
20519 * Set this flag to 1 when configuring parameters on a
20520 * notification queue. Set this flag to 0 when configuring
20521 * parameters on a completion queue.
20522 */
20523 #define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_FLAGS_IS_NQ \
20524 UINT32_C(0x4)
20525 /*
20526 * Number of completions to aggregate before DMA
20527 * during the normal mode.
20528 */
20529 uint16_t num_cmpl_dma_aggr;
20530 /*
20531 * Number of completions to aggregate before DMA
20532 * during the interrupt mode.
20533 */
20534 uint16_t num_cmpl_dma_aggr_during_int;
20535 /*
20536 * Timer in unit of 80-nsec used to aggregate completions before
20537 * DMA during the normal mode (not in interrupt mode).
20538 */
20539 uint16_t cmpl_aggr_dma_tmr;
20540 /*
20541 * Timer in unit of 80-nsec used to aggregate completions before
20542 * DMA during the interrupt mode.
20543 */
20544 uint16_t cmpl_aggr_dma_tmr_during_int;
20545 /* Minimum time (in unit of 80-nsec) between two interrupts. */
20546 uint16_t int_lat_tmr_min;
20547 /*
20548 * Maximum wait time (in unit of 80-nsec) spent aggregating
20549 * cmpls before signaling the interrupt after the
20550 * interrupt is enabled.
20551 */
20552 uint16_t int_lat_tmr_max;
20553 /*
20554 * Minimum number of completions aggregated before signaling
20555 * an interrupt.
20556 */
20557 uint16_t num_cmpl_aggr_int;
20558 /*
20559 * Bitfield that indicates which parameters are to be applied. Only
20560 * required when configuring devices with notification queues, and
20561 * used in that case to set certain parameters on completion queues
20562 * and others on notification queues.
20563 */
20564 uint16_t enables;
20565 /*
20566 * This bit must be '1' for the num_cmpl_dma_aggr field to be
20567 * configured.
20568 */
20569 #define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_ENABLES_NUM_CMPL_DMA_AGGR \
20570 UINT32_C(0x1)
20571 /*
20572 * This bit must be '1' for the num_cmpl_dma_aggr_during_int field to be
20573 * configured.
20574 */
20575 #define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_ENABLES_NUM_CMPL_DMA_AGGR_DURING_INT \
20576 UINT32_C(0x2)
20577 /*
20578 * This bit must be '1' for the cmpl_aggr_dma_tmr field to be
20579 * configured.
20580 */
20581 #define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_ENABLES_CMPL_AGGR_DMA_TMR \
20582 UINT32_C(0x4)
20583 /*
20584 * This bit must be '1' for the int_lat_tmr_min field to be
20585 * configured.
20586 */
20587 #define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_ENABLES_INT_LAT_TMR_MIN \
20588 UINT32_C(0x8)
20589 /*
20590 * This bit must be '1' for the int_lat_tmr_max field to be
20591 * configured.
20592 */
20593 #define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_ENABLES_INT_LAT_TMR_MAX \
20594 UINT32_C(0x10)
20595 /*
20596 * This bit must be '1' for the num_cmpl_aggr_int field to be
20597 * configured.
20598 */
20599 #define HWRM_RING_CMPL_RING_CFG_AGGINT_PARAMS_INPUT_ENABLES_NUM_CMPL_AGGR_INT \
20600 UINT32_C(0x20)
20601 uint8_t unused_0[4];
20602} __attribute__((packed));
20603
20604/* hwrm_ring_cmpl_ring_cfg_aggint_params_output (size:128b/16B) */
20605struct hwrm_ring_cmpl_ring_cfg_aggint_params_output {
20606 /* The specific error status for the command. */
20607 uint16_t error_code;
20608 /* The HWRM command request type. */
20609 uint16_t req_type;
20610 /* The sequence ID from the original command. */
20611 uint16_t seq_id;
20612 /* The length of the response data in number of bytes. */
20613 uint16_t resp_len;
20614 uint8_t unused_0[7];
20615 /*
20616 * This field is used in Output records to indicate that the output
20617 * is completely written to RAM. This field should be read as '1'
20618 * to indicate that the output has been completely written.
20619 * When writing a command completion or response to an internal processor,
20620 * the order of writes has to be such that this field is written last.
20621 */
20622 uint8_t valid;
20623} __attribute__((packed));
20624
20625/***********************
20626 * hwrm_ring_grp_alloc *
20627 ***********************/
20628
20629
20630/* hwrm_ring_grp_alloc_input (size:192b/24B) */
20631struct hwrm_ring_grp_alloc_input {
20632 /* The HWRM command request type. */
20633 uint16_t req_type;
20634 /*
20635 * The completion ring to send the completion event on. This should
20636 * be the NQ ID returned from the `nq_alloc` HWRM command.
20637 */
20638 uint16_t cmpl_ring;
20639 /*
20640 * The sequence ID is used by the driver for tracking multiple
20641 * commands. This ID is treated as opaque data by the firmware and
20642 * the value is returned in the `hwrm_resp_hdr` upon completion.
20643 */
20644 uint16_t seq_id;
20645 /*
20646 * The target ID of the command:
20647 * * 0x0-0xFFF8 - The function ID
20648 * * 0xFFF8-0xFFFE - Reserved for internal processors
20649 * * 0xFFFF - HWRM
20650 */
20651 uint16_t target_id;
20652 /*
20653 * A physical address pointer pointing to a host buffer that the
20654 * command's response data will be written. This can be either a host
20655 * physical address (HPA) or a guest physical address (GPA) and must
20656 * point to a physically contiguous block of memory.
20657 */
20658 uint64_t resp_addr;
20659 /*
20660 * This value identifies the CR associated with the ring
20661 * group.
20662 */
20663 uint16_t cr;
20664 /*
20665 * This value identifies the main RR associated with the ring
20666 * group.
20667 */
20668 uint16_t rr;
20669 /*
20670 * This value identifies the aggregation RR associated with
20671 * the ring group. If this value is 0xFF... (All Fs), then no
20672 * Aggregation ring will be set.
20673 */
20674 uint16_t ar;
20675 /*
20676 * This value identifies the statistics context associated
20677 * with the ring group.
20678 */
20679 uint16_t sc;
20680} __attribute__((packed));
20681
20682/* hwrm_ring_grp_alloc_output (size:128b/16B) */
20683struct hwrm_ring_grp_alloc_output {
20684 /* The specific error status for the command. */
20685 uint16_t error_code;
20686 /* The HWRM command request type. */
20687 uint16_t req_type;
20688 /* The sequence ID from the original command. */
20689 uint16_t seq_id;
20690 /* The length of the response data in number of bytes. */
20691 uint16_t resp_len;
20692 /*
20693 * This is the ring group ID value. Use this value to program
20694 * the default ring group for the VNIC or as table entries
20695 * in an RSS/COS context.
20696 */
20697 uint32_t ring_group_id;
20698 uint8_t unused_0[3];
20699 /*
20700 * This field is used in Output records to indicate that the output
20701 * is completely written to RAM. This field should be read as '1'
20702 * to indicate that the output has been completely written.
20703 * When writing a command completion or response to an internal processor,
20704 * the order of writes has to be such that this field is written last.
20705 */
20706 uint8_t valid;
20707} __attribute__((packed));
20708
20709/**********************
20710 * hwrm_ring_grp_free *
20711 **********************/
20712
20713
20714/* hwrm_ring_grp_free_input (size:192b/24B) */
20715struct hwrm_ring_grp_free_input {
20716 /* The HWRM command request type. */
20717 uint16_t req_type;
20718 /*
20719 * The completion ring to send the completion event on. This should
20720 * be the NQ ID returned from the `nq_alloc` HWRM command.
20721 */
20722 uint16_t cmpl_ring;
20723 /*
20724 * The sequence ID is used by the driver for tracking multiple
20725 * commands. This ID is treated as opaque data by the firmware and
20726 * the value is returned in the `hwrm_resp_hdr` upon completion.
20727 */
20728 uint16_t seq_id;
20729 /*
20730 * The target ID of the command:
20731 * * 0x0-0xFFF8 - The function ID
20732 * * 0xFFF8-0xFFFE - Reserved for internal processors
20733 * * 0xFFFF - HWRM
20734 */
20735 uint16_t target_id;
20736 /*
20737 * A physical address pointer pointing to a host buffer that the
20738 * command's response data will be written. This can be either a host
20739 * physical address (HPA) or a guest physical address (GPA) and must
20740 * point to a physically contiguous block of memory.
20741 */
20742 uint64_t resp_addr;
20743 /* This is the ring group ID value. */
20744 uint32_t ring_group_id;
20745 uint8_t unused_0[4];
20746} __attribute__((packed));
20747
20748/* hwrm_ring_grp_free_output (size:128b/16B) */
20749struct hwrm_ring_grp_free_output {
20750 /* The specific error status for the command. */
20751 uint16_t error_code;
20752 /* The HWRM command request type. */
20753 uint16_t req_type;
20754 /* The sequence ID from the original command. */
20755 uint16_t seq_id;
20756 /* The length of the response data in number of bytes. */
20757 uint16_t resp_len;
20758 uint8_t unused_0[7];
20759 /*
20760 * This field is used in Output records to indicate that the output
20761 * is completely written to RAM. This field should be read as '1'
20762 * to indicate that the output has been completely written.
20763 * When writing a command completion or response to an internal processor,
20764 * the order of writes has to be such that this field is written last.
20765 */
20766 uint8_t valid;
20767} __attribute__((packed));
20768
20769/****************************
20770 * hwrm_cfa_l2_filter_alloc *
20771 ****************************/
20772
20773
20774/* hwrm_cfa_l2_filter_alloc_input (size:768b/96B) */
20775struct hwrm_cfa_l2_filter_alloc_input {
20776 /* The HWRM command request type. */
20777 uint16_t req_type;
20778 /*
20779 * The completion ring to send the completion event on. This should
20780 * be the NQ ID returned from the `nq_alloc` HWRM command.
20781 */
20782 uint16_t cmpl_ring;
20783 /*
20784 * The sequence ID is used by the driver for tracking multiple
20785 * commands. This ID is treated as opaque data by the firmware and
20786 * the value is returned in the `hwrm_resp_hdr` upon completion.
20787 */
20788 uint16_t seq_id;
20789 /*
20790 * The target ID of the command:
20791 * * 0x0-0xFFF8 - The function ID
20792 * * 0xFFF8-0xFFFE - Reserved for internal processors
20793 * * 0xFFFF - HWRM
20794 */
20795 uint16_t target_id;
20796 /*
20797 * A physical address pointer pointing to a host buffer that the
20798 * command's response data will be written. This can be either a host
20799 * physical address (HPA) or a guest physical address (GPA) and must
20800 * point to a physically contiguous block of memory.
20801 */
20802 uint64_t resp_addr;
20803 uint32_t flags;
20804 /*
20805 * Enumeration denoting the RX, TX type of the resource.
20806 * This enumeration is used for resources that are similar for both
20807 * TX and RX paths of the chip.
20808 */
20809 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH \
20810 UINT32_C(0x1)
20811 /* tx path */
20812 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH_TX \
20813 UINT32_C(0x0)
20814 /* rx path */
20815 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH_RX \
20816 UINT32_C(0x1)
20817 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH_LAST \
20818 HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH_RX
20819 /* Setting of this flag indicates the applicability to the loopback path. */
20820 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_LOOPBACK \
20821 UINT32_C(0x2)
20822 /*
20823 * Setting of this flag indicates drop action. If this flag is not set,
20824 * then it should be considered accept action.
20825 */
20826 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_DROP \
20827 UINT32_C(0x4)
20828 /*
20829 * If this flag is set, all t_l2_* fields are invalid
20830 * and they should not be specified.
20831 * If this flag is set, then l2_* fields refer to
20832 * fields of outermost L2 header.
20833 */
20834 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_OUTERMOST \
20835 UINT32_C(0x8)
20836 /*
20837 * Enumeration denoting NO_ROCE_L2 to support old drivers.
20838 * New driver L2 for only L2 traffic, ROCE for roce and l2 traffic
20839 */
20840 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_TRAFFIC_MASK \
20841 UINT32_C(0x30)
20842 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_TRAFFIC_SFT 4
20843 /* To support old drivers */
20844 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_TRAFFIC_NO_ROCE_L2 \
20845 (UINT32_C(0x0) << 4)
20846 /* Only L2 traffic */
20847 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_TRAFFIC_L2 \
20848 (UINT32_C(0x1) << 4)
20849 /* Roce & L2 traffic */
20850 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_TRAFFIC_ROCE \
20851 (UINT32_C(0x2) << 4)
20852 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_TRAFFIC_LAST \
20853 HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_TRAFFIC_ROCE
20854 uint32_t enables;
20855 /*
20856 * This bit must be '1' for the l2_addr field to be
20857 * configured.
20858 */
20859 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_ADDR \
20860 UINT32_C(0x1)
20861 /*
20862 * This bit must be '1' for the l2_addr_mask field to be
20863 * configured.
20864 */
20865 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_ADDR_MASK \
20866 UINT32_C(0x2)
20867 /*
20868 * This bit must be '1' for the l2_ovlan field to be
20869 * configured.
20870 */
20871 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_OVLAN \
20872 UINT32_C(0x4)
20873 /*
20874 * This bit must be '1' for the l2_ovlan_mask field to be
20875 * configured.
20876 */
20877 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_OVLAN_MASK \
20878 UINT32_C(0x8)
20879 /*
20880 * This bit must be '1' for the l2_ivlan field to be
20881 * configured.
20882 */
20883 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_IVLAN \
20884 UINT32_C(0x10)
20885 /*
20886 * This bit must be '1' for the l2_ivlan_mask field to be
20887 * configured.
20888 */
20889 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_IVLAN_MASK \
20890 UINT32_C(0x20)
20891 /*
20892 * This bit must be '1' for the t_l2_addr field to be
20893 * configured.
20894 */
20895 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_ADDR \
20896 UINT32_C(0x40)
20897 /*
20898 * This bit must be '1' for the t_l2_addr_mask field to be
20899 * configured.
20900 */
20901 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_ADDR_MASK \
20902 UINT32_C(0x80)
20903 /*
20904 * This bit must be '1' for the t_l2_ovlan field to be
20905 * configured.
20906 */
20907 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_OVLAN \
20908 UINT32_C(0x100)
20909 /*
20910 * This bit must be '1' for the t_l2_ovlan_mask field to be
20911 * configured.
20912 */
20913 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_OVLAN_MASK \
20914 UINT32_C(0x200)
20915 /*
20916 * This bit must be '1' for the t_l2_ivlan field to be
20917 * configured.
20918 */
20919 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_IVLAN \
20920 UINT32_C(0x400)
20921 /*
20922 * This bit must be '1' for the t_l2_ivlan_mask field to be
20923 * configured.
20924 */
20925 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_T_L2_IVLAN_MASK \
20926 UINT32_C(0x800)
20927 /*
20928 * This bit must be '1' for the src_type field to be
20929 * configured.
20930 */
20931 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_SRC_TYPE \
20932 UINT32_C(0x1000)
20933 /*
20934 * This bit must be '1' for the src_id field to be
20935 * configured.
20936 */
20937 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_SRC_ID \
20938 UINT32_C(0x2000)
20939 /*
20940 * This bit must be '1' for the tunnel_type field to be
20941 * configured.
20942 */
20943 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_TUNNEL_TYPE \
20944 UINT32_C(0x4000)
20945 /*
20946 * This bit must be '1' for the dst_id field to be
20947 * configured.
20948 */
20949 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_DST_ID \
20950 UINT32_C(0x8000)
20951 /*
20952 * This bit must be '1' for the mirror_vnic_id field to be
20953 * configured.
20954 */
20955 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_MIRROR_VNIC_ID \
20956 UINT32_C(0x10000)
20957 /*
20958 * This value sets the match value for the L2 MAC address.
20959 * Destination MAC address for RX path.
20960 * Source MAC address for TX path.
20961 */
20962 uint8_t l2_addr[6];
20963 uint8_t unused_0[2];
20964 /*
20965 * This value sets the mask value for the L2 address.
20966 * A value of 0 will mask the corresponding bit from
20967 * compare.
20968 */
20969 uint8_t l2_addr_mask[6];
20970 /* This value sets VLAN ID value for outer VLAN. */
20971 uint16_t l2_ovlan;
20972 /*
20973 * This value sets the mask value for the ovlan id.
20974 * A value of 0 will mask the corresponding bit from
20975 * compare.
20976 */
20977 uint16_t l2_ovlan_mask;
20978 /* This value sets VLAN ID value for inner VLAN. */
20979 uint16_t l2_ivlan;
20980 /*
20981 * This value sets the mask value for the ivlan id.
20982 * A value of 0 will mask the corresponding bit from
20983 * compare.
20984 */
20985 uint16_t l2_ivlan_mask;
20986 uint8_t unused_1[2];
20987 /*
20988 * This value sets the match value for the tunnel
20989 * L2 MAC address.
20990 * Destination MAC address for RX path.
20991 * Source MAC address for TX path.
20992 */
20993 uint8_t t_l2_addr[6];
20994 uint8_t unused_2[2];
20995 /*
20996 * This value sets the mask value for the tunnel L2
20997 * address.
20998 * A value of 0 will mask the corresponding bit from
20999 * compare.
21000 */
21001 uint8_t t_l2_addr_mask[6];
21002 /* This value sets VLAN ID value for tunnel outer VLAN. */
21003 uint16_t t_l2_ovlan;
21004 /*
21005 * This value sets the mask value for the tunnel ovlan id.
21006 * A value of 0 will mask the corresponding bit from
21007 * compare.
21008 */
21009 uint16_t t_l2_ovlan_mask;
21010 /* This value sets VLAN ID value for tunnel inner VLAN. */
21011 uint16_t t_l2_ivlan;
21012 /*
21013 * This value sets the mask value for the tunnel ivlan id.
21014 * A value of 0 will mask the corresponding bit from
21015 * compare.
21016 */
21017 uint16_t t_l2_ivlan_mask;
21018 /* This value identifies the type of source of the packet. */
21019 uint8_t src_type;
21020 /* Network port */
21021 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_NPORT UINT32_C(0x0)
21022 /* Physical function */
21023 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_PF UINT32_C(0x1)
21024 /* Virtual function */
21025 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_VF UINT32_C(0x2)
21026 /* Virtual NIC of a function */
21027 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_VNIC UINT32_C(0x3)
21028 /* Embedded processor for CFA management */
21029 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_KONG UINT32_C(0x4)
21030 /* Embedded processor for OOB management */
21031 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_APE UINT32_C(0x5)
21032 /* Embedded processor for RoCE */
21033 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_BONO UINT32_C(0x6)
21034 /* Embedded processor for network proxy functions */
21035 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_TANG UINT32_C(0x7)
21036 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_LAST \
21037 HWRM_CFA_L2_FILTER_ALLOC_INPUT_SRC_TYPE_TANG
21038 uint8_t unused_3;
21039 /*
21040 * This value is the id of the source.
21041 * For a network port, it represents port_id.
21042 * For a physical function, it represents fid.
21043 * For a virtual function, it represents vf_id.
21044 * For a vnic, it represents vnic_id.
21045 * For embedded processors, this id is not valid.
21046 *
21047 * Notes:
21048 * 1. The function ID is implied if it src_id is
21049 * not provided for a src_type that is either
21050 */
21051 uint32_t src_id;
21052 /* Tunnel Type. */
21053 uint8_t tunnel_type;
21054 /* Non-tunnel */
21055 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \
21056 UINT32_C(0x0)
21057 /* Virtual eXtensible Local Area Network (VXLAN) */
21058 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \
21059 UINT32_C(0x1)
21060 /* Network Virtualization Generic Routing Encapsulation (NVGRE) */
21061 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \
21062 UINT32_C(0x2)
21063 /* Generic Routing Encapsulation (GRE) inside Ethernet payload */
21064 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \
21065 UINT32_C(0x3)
21066 /* IP in IP */
21067 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPIP \
21068 UINT32_C(0x4)
21069 /* Generic Network Virtualization Encapsulation (Geneve) */
21070 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \
21071 UINT32_C(0x5)
21072 /* Multi-Protocol Lable Switching (MPLS) */
21073 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_MPLS \
21074 UINT32_C(0x6)
21075 /* Stateless Transport Tunnel (STT) */
21076 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_STT \
21077 UINT32_C(0x7)
21078 /* Generic Routing Encapsulation (GRE) inside IP datagram payload */
21079 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \
21080 UINT32_C(0x8)
21081 /* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
21082 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \
21083 UINT32_C(0x9)
21084 /* Any tunneled traffic */
21085 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \
21086 UINT32_C(0xff)
21087 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_LAST \
21088 HWRM_CFA_L2_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL
21089 uint8_t unused_4;
21090 /*
21091 * If set, this value shall represent the
21092 * Logical VNIC ID of the destination VNIC for the RX
21093 * path and network port id of the destination port for
21094 * the TX path.
21095 */
21096 uint16_t dst_id;
21097 /*
21098 * Logical VNIC ID of the VNIC where traffic is
21099 * mirrored.
21100 */
21101 uint16_t mirror_vnic_id;
21102 /*
21103 * This hint is provided to help in placing
21104 * the filter in the filter table.
21105 */
21106 uint8_t pri_hint;
21107 /* No preference */
21108 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_NO_PREFER \
21109 UINT32_C(0x0)
21110 /* Above the given filter */
21111 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_ABOVE_FILTER \
21112 UINT32_C(0x1)
21113 /* Below the given filter */
21114 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_BELOW_FILTER \
21115 UINT32_C(0x2)
21116 /* As high as possible */
21117 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_MAX \
21118 UINT32_C(0x3)
21119 /* As low as possible */
21120 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_MIN \
21121 UINT32_C(0x4)
21122 #define HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_LAST \
21123 HWRM_CFA_L2_FILTER_ALLOC_INPUT_PRI_HINT_MIN
21124 uint8_t unused_5;
21125 uint32_t unused_6;
21126 /*
21127 * This is the ID of the filter that goes along with
21128 * the pri_hint.
21129 *
21130 * This field is valid only for the following values.
21131 * 1 - Above the given filter
21132 * 2 - Below the given filter
21133 */
21134 uint64_t l2_filter_id_hint;
21135} __attribute__((packed));
21136
21137/* hwrm_cfa_l2_filter_alloc_output (size:192b/24B) */
21138struct hwrm_cfa_l2_filter_alloc_output {
21139 /* The specific error status for the command. */
21140 uint16_t error_code;
21141 /* The HWRM command request type. */
21142 uint16_t req_type;
21143 /* The sequence ID from the original command. */
21144 uint16_t seq_id;
21145 /* The length of the response data in number of bytes. */
21146 uint16_t resp_len;
21147 /*
21148 * This value identifies a set of CFA data structures used for an L2
21149 * context.
21150 */
21151 uint64_t l2_filter_id;
21152 /*
21153 * This is the ID of the flow associated with this
21154 * filter.
21155 * This value shall be used to match and associate the
21156 * flow identifier returned in completion records.
21157 * A value of 0xFFFFFFFF shall indicate no flow id.
21158 */
21159 uint32_t flow_id;
21160 uint8_t unused_0[3];
21161 /*
21162 * This field is used in Output records to indicate that the output
21163 * is completely written to RAM. This field should be read as '1'
21164 * to indicate that the output has been completely written.
21165 * When writing a command completion or response to an internal processor,
21166 * the order of writes has to be such that this field is written last.
21167 */
21168 uint8_t valid;
21169} __attribute__((packed));
21170
21171/***************************
21172 * hwrm_cfa_l2_filter_free *
21173 ***************************/
21174
21175
21176/* hwrm_cfa_l2_filter_free_input (size:192b/24B) */
21177struct hwrm_cfa_l2_filter_free_input {
21178 /* The HWRM command request type. */
21179 uint16_t req_type;
21180 /*
21181 * The completion ring to send the completion event on. This should
21182 * be the NQ ID returned from the `nq_alloc` HWRM command.
21183 */
21184 uint16_t cmpl_ring;
21185 /*
21186 * The sequence ID is used by the driver for tracking multiple
21187 * commands. This ID is treated as opaque data by the firmware and
21188 * the value is returned in the `hwrm_resp_hdr` upon completion.
21189 */
21190 uint16_t seq_id;
21191 /*
21192 * The target ID of the command:
21193 * * 0x0-0xFFF8 - The function ID
21194 * * 0xFFF8-0xFFFE - Reserved for internal processors
21195 * * 0xFFFF - HWRM
21196 */
21197 uint16_t target_id;
21198 /*
21199 * A physical address pointer pointing to a host buffer that the
21200 * command's response data will be written. This can be either a host
21201 * physical address (HPA) or a guest physical address (GPA) and must
21202 * point to a physically contiguous block of memory.
21203 */
21204 uint64_t resp_addr;
21205 /*
21206 * This value identifies a set of CFA data structures used for an L2
21207 * context.
21208 */
21209 uint64_t l2_filter_id;
21210} __attribute__((packed));
21211
21212/* hwrm_cfa_l2_filter_free_output (size:128b/16B) */
21213struct hwrm_cfa_l2_filter_free_output {
21214 /* The specific error status for the command. */
21215 uint16_t error_code;
21216 /* The HWRM command request type. */
21217 uint16_t req_type;
21218 /* The sequence ID from the original command. */
21219 uint16_t seq_id;
21220 /* The length of the response data in number of bytes. */
21221 uint16_t resp_len;
21222 uint8_t unused_0[7];
21223 /*
21224 * This field is used in Output records to indicate that the output
21225 * is completely written to RAM. This field should be read as '1'
21226 * to indicate that the output has been completely written.
21227 * When writing a command completion or response to an internal processor,
21228 * the order of writes has to be such that this field is written last.
21229 */
21230 uint8_t valid;
21231} __attribute__((packed));
21232
21233/**************************
21234 * hwrm_cfa_l2_filter_cfg *
21235 **************************/
21236
21237
21238/* hwrm_cfa_l2_filter_cfg_input (size:320b/40B) */
21239struct hwrm_cfa_l2_filter_cfg_input {
21240 /* The HWRM command request type. */
21241 uint16_t req_type;
21242 /*
21243 * The completion ring to send the completion event on. This should
21244 * be the NQ ID returned from the `nq_alloc` HWRM command.
21245 */
21246 uint16_t cmpl_ring;
21247 /*
21248 * The sequence ID is used by the driver for tracking multiple
21249 * commands. This ID is treated as opaque data by the firmware and
21250 * the value is returned in the `hwrm_resp_hdr` upon completion.
21251 */
21252 uint16_t seq_id;
21253 /*
21254 * The target ID of the command:
21255 * * 0x0-0xFFF8 - The function ID
21256 * * 0xFFF8-0xFFFE - Reserved for internal processors
21257 * * 0xFFFF - HWRM
21258 */
21259 uint16_t target_id;
21260 /*
21261 * A physical address pointer pointing to a host buffer that the
21262 * command's response data will be written. This can be either a host
21263 * physical address (HPA) or a guest physical address (GPA) and must
21264 * point to a physically contiguous block of memory.
21265 */
21266 uint64_t resp_addr;
21267 uint32_t flags;
21268 /*
21269 * Enumeration denoting the RX, TX type of the resource.
21270 * This enumeration is used for resources that are similar for both
21271 * TX and RX paths of the chip.
21272 */
21273 #define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH \
21274 UINT32_C(0x1)
21275 /* tx path */
21276 #define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH_TX \
21277 UINT32_C(0x0)
21278 /* rx path */
21279 #define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH_RX \
21280 UINT32_C(0x1)
21281 #define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH_LAST \
21282 HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_PATH_RX
21283 /*
21284 * Setting of this flag indicates drop action. If this flag is not set,
21285 * then it should be considered accept action.
21286 */
21287 #define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_DROP \
21288 UINT32_C(0x2)
21289 /*
21290 * Enumeration denoting NO_ROCE_L2 to support old drivers.
21291 * New driver L2 for only L2 traffic, ROCE for roce and l2 traffic
21292 */
21293 #define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_TRAFFIC_MASK \
21294 UINT32_C(0xc)
21295 #define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_TRAFFIC_SFT 2
21296 /* To support old drivers */
21297 #define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_TRAFFIC_NO_ROCE_L2 \
21298 (UINT32_C(0x0) << 2)
21299 /* Only L2 traffic */
21300 #define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_TRAFFIC_L2 \
21301 (UINT32_C(0x1) << 2)
21302 /* Roce & L2 traffic */
21303 #define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_TRAFFIC_ROCE \
21304 (UINT32_C(0x2) << 2)
21305 #define HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_TRAFFIC_LAST \
21306 HWRM_CFA_L2_FILTER_CFG_INPUT_FLAGS_TRAFFIC_ROCE
21307 uint32_t enables;
21308 /*
21309 * This bit must be '1' for the dst_id field to be
21310 * configured.
21311 */
21312 #define HWRM_CFA_L2_FILTER_CFG_INPUT_ENABLES_DST_ID \
21313 UINT32_C(0x1)
21314 /*
21315 * This bit must be '1' for the new_mirror_vnic_id field to be
21316 * configured.
21317 */
21318 #define HWRM_CFA_L2_FILTER_CFG_INPUT_ENABLES_NEW_MIRROR_VNIC_ID \
21319 UINT32_C(0x2)
21320 /*
21321 * This value identifies a set of CFA data structures used for an L2
21322 * context.
21323 */
21324 uint64_t l2_filter_id;
21325 /*
21326 * If set, this value shall represent the
21327 * Logical VNIC ID of the destination VNIC for the RX
21328 * path and network port id of the destination port for
21329 * the TX path.
21330 */
21331 uint32_t dst_id;
21332 /*
21333 * New Logical VNIC ID of the VNIC where traffic is
21334 * mirrored.
21335 */
21336 uint32_t new_mirror_vnic_id;
21337} __attribute__((packed));
21338
21339/* hwrm_cfa_l2_filter_cfg_output (size:128b/16B) */
21340struct hwrm_cfa_l2_filter_cfg_output {
21341 /* The specific error status for the command. */
21342 uint16_t error_code;
21343 /* The HWRM command request type. */
21344 uint16_t req_type;
21345 /* The sequence ID from the original command. */
21346 uint16_t seq_id;
21347 /* The length of the response data in number of bytes. */
21348 uint16_t resp_len;
21349 uint8_t unused_0[7];
21350 /*
21351 * This field is used in Output records to indicate that the output
21352 * is completely written to RAM. This field should be read as '1'
21353 * to indicate that the output has been completely written.
21354 * When writing a command completion or response to an internal processor,
21355 * the order of writes has to be such that this field is written last.
21356 */
21357 uint8_t valid;
21358} __attribute__((packed));
21359
21360/***************************
21361 * hwrm_cfa_l2_set_rx_mask *
21362 ***************************/
21363
21364
21365/* hwrm_cfa_l2_set_rx_mask_input (size:448b/56B) */
21366struct hwrm_cfa_l2_set_rx_mask_input {
21367 /* The HWRM command request type. */
21368 uint16_t req_type;
21369 /*
21370 * The completion ring to send the completion event on. This should
21371 * be the NQ ID returned from the `nq_alloc` HWRM command.
21372 */
21373 uint16_t cmpl_ring;
21374 /*
21375 * The sequence ID is used by the driver for tracking multiple
21376 * commands. This ID is treated as opaque data by the firmware and
21377 * the value is returned in the `hwrm_resp_hdr` upon completion.
21378 */
21379 uint16_t seq_id;
21380 /*
21381 * The target ID of the command:
21382 * * 0x0-0xFFF8 - The function ID
21383 * * 0xFFF8-0xFFFE - Reserved for internal processors
21384 * * 0xFFFF - HWRM
21385 */
21386 uint16_t target_id;
21387 /*
21388 * A physical address pointer pointing to a host buffer that the
21389 * command's response data will be written. This can be either a host
21390 * physical address (HPA) or a guest physical address (GPA) and must
21391 * point to a physically contiguous block of memory.
21392 */
21393 uint64_t resp_addr;
21394 /* VNIC ID */
21395 uint32_t vnic_id;
21396 uint32_t mask;
21397 /*
21398 * When this bit is '1', the function is requested to accept
21399 * multi-cast packets specified by the multicast addr table.
21400 */
21401 #define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_MCAST \
21402 UINT32_C(0x2)
21403 /*
21404 * When this bit is '1', the function is requested to accept
21405 * all multi-cast packets.
21406 */
21407 #define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_ALL_MCAST \
21408 UINT32_C(0x4)
21409 /*
21410 * When this bit is '1', the function is requested to accept
21411 * broadcast packets.
21412 */
21413 #define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_BCAST \
21414 UINT32_C(0x8)
21415 /*
21416 * When this bit is '1', the function is requested to be
21417 * put in the promiscuous mode.
21418 *
21419 * The HWRM should accept any function to set up
21420 * promiscuous mode.
21421 *
21422 * The HWRM shall follow the semantics below for the
21423 * promiscuous mode support.
21424 * # When partitioning is not enabled on a port
21425 * (i.e. single PF on the port), then the PF shall
21426 * be allowed to be in the promiscuous mode. When the
21427 * PF is in the promiscuous mode, then it shall
21428 * receive all host bound traffic on that port.
21429 * # When partitioning is enabled on a port
21430 * (i.e. multiple PFs per port) and a PF on that
21431 * port is in the promiscuous mode, then the PF
21432 * receives all traffic within that partition as
21433 * identified by a unique identifier for the
21434 * PF (e.g. S-Tag). If a unique outer VLAN
21435 * for the PF is specified, then the setting of
21436 * promiscuous mode on that PF shall result in the
21437 * PF receiving all host bound traffic with matching
21438 * outer VLAN.
21439 * # A VF shall can be set in the promiscuous mode.
21440 * In the promiscuous mode, the VF does not receive any
21441 * traffic unless a unique outer VLAN for the
21442 * VF is specified. If a unique outer VLAN
21443 * for the VF is specified, then the setting of
21444 * promiscuous mode on that VF shall result in the
21445 * VF receiving all host bound traffic with the
21446 * matching outer VLAN.
21447 * # The HWRM shall allow the setting of promiscuous
21448 * mode on a function independently from the
21449 * promiscuous mode settings on other functions.
21450 */
21451 #define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_PROMISCUOUS \
21452 UINT32_C(0x10)
21453 /*
21454 * If this flag is set, the corresponding RX
21455 * filters shall be set up to cover multicast/broadcast
21456 * filters for the outermost Layer 2 destination MAC
21457 * address field.
21458 */
21459 #define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_OUTERMOST \
21460 UINT32_C(0x20)
21461 /*
21462 * If this flag is set, the corresponding RX
21463 * filters shall be set up to cover multicast/broadcast
21464 * filters for the VLAN-tagged packets that match the
21465 * TPID and VID fields of VLAN tags in the VLAN tag
21466 * table specified in this command.
21467 */
21468 #define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_VLANONLY \
21469 UINT32_C(0x40)
21470 /*
21471 * If this flag is set, the corresponding RX
21472 * filters shall be set up to cover multicast/broadcast
21473 * filters for non-VLAN tagged packets and VLAN-tagged
21474 * packets that match the TPID and VID fields of VLAN
21475 * tags in the VLAN tag table specified in this command.
21476 */
21477 #define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_VLAN_NONVLAN \
21478 UINT32_C(0x80)
21479 /*
21480 * If this flag is set, the corresponding RX
21481 * filters shall be set up to cover multicast/broadcast
21482 * filters for non-VLAN tagged packets and VLAN-tagged
21483 * packets matching any VLAN tag.
21484 *
21485 * If this flag is set, then the HWRM shall ignore
21486 * VLAN tags specified in vlan_tag_tbl.
21487 *
21488 * If none of vlanonly, vlan_nonvlan, and anyvlan_nonvlan
21489 * flags is set, then the HWRM shall ignore
21490 * VLAN tags specified in vlan_tag_tbl.
21491 *
21492 * The HWRM client shall set at most one flag out of
21493 * vlanonly, vlan_nonvlan, and anyvlan_nonvlan.
21494 */
21495 #define HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_ANYVLAN_NONVLAN \
21496 UINT32_C(0x100)
21497 /* This is the address for mcast address tbl. */
21498 uint64_t mc_tbl_addr;
21499 /*
21500 * This value indicates how many entries in mc_tbl are valid.
21501 * Each entry is 6 bytes.
21502 */
21503 uint32_t num_mc_entries;
21504 uint8_t unused_0[4];
21505 /*
21506 * This is the address for VLAN tag table.
21507 * Each VLAN entry in the table is 4 bytes of a VLAN tag
21508 * including TPID, PCP, DEI, and VID fields in network byte
21509 * order.
21510 */
21511 uint64_t vlan_tag_tbl_addr;
21512 /*
21513 * This value indicates how many entries in vlan_tag_tbl are
21514 * valid. Each entry is 4 bytes.
21515 */
21516 uint32_t num_vlan_tags;
21517 uint8_t unused_1[4];
21518} __attribute__((packed));
21519
21520/* hwrm_cfa_l2_set_rx_mask_output (size:128b/16B) */
21521struct hwrm_cfa_l2_set_rx_mask_output {
21522 /* The specific error status for the command. */
21523 uint16_t error_code;
21524 /* The HWRM command request type. */
21525 uint16_t req_type;
21526 /* The sequence ID from the original command. */
21527 uint16_t seq_id;
21528 /* The length of the response data in number of bytes. */
21529 uint16_t resp_len;
21530 uint8_t unused_0[7];
21531 /*
21532 * This field is used in Output records to indicate that the output
21533 * is completely written to RAM. This field should be read as '1'
21534 * to indicate that the output has been completely written.
21535 * When writing a command completion or response to an internal processor,
21536 * the order of writes has to be such that this field is written last.
21537 */
21538 uint8_t valid;
21539} __attribute__((packed));
21540
21541/* hwrm_cfa_l2_set_rx_mask_cmd_err (size:64b/8B) */
21542struct hwrm_cfa_l2_set_rx_mask_cmd_err {
21543 /*
21544 * command specific error codes that goes to
21545 * the cmd_err field in Common HWRM Error Response.
21546 */
21547 uint8_t code;
21548 /* Unknown error */
21549 #define HWRM_CFA_L2_SET_RX_MASK_CMD_ERR_CODE_UNKNOWN \
21550 UINT32_C(0x0)
21551 /* Unable to complete operation due to conflict with Ntuple Filter */
21552 #define HWRM_CFA_L2_SET_RX_MASK_CMD_ERR_CODE_NTUPLE_FILTER_CONFLICT_ERR \
21553 UINT32_C(0x1)
21554 #define HWRM_CFA_L2_SET_RX_MASK_CMD_ERR_CODE_LAST \
21555 HWRM_CFA_L2_SET_RX_MASK_CMD_ERR_CODE_NTUPLE_FILTER_CONFLICT_ERR
21556 uint8_t unused_0[7];
21557} __attribute__((packed));
21558
21559/*******************************
21560 * hwrm_cfa_vlan_antispoof_cfg *
21561 *******************************/
21562
21563
21564/* hwrm_cfa_vlan_antispoof_cfg_input (size:256b/32B) */
21565struct hwrm_cfa_vlan_antispoof_cfg_input {
21566 /* The HWRM command request type. */
21567 uint16_t req_type;
21568 /*
21569 * The completion ring to send the completion event on. This should
21570 * be the NQ ID returned from the `nq_alloc` HWRM command.
21571 */
21572 uint16_t cmpl_ring;
21573 /*
21574 * The sequence ID is used by the driver for tracking multiple
21575 * commands. This ID is treated as opaque data by the firmware and
21576 * the value is returned in the `hwrm_resp_hdr` upon completion.
21577 */
21578 uint16_t seq_id;
21579 /*
21580 * The target ID of the command:
21581 * * 0x0-0xFFF8 - The function ID
21582 * * 0xFFF8-0xFFFE - Reserved for internal processors
21583 * * 0xFFFF - HWRM
21584 */
21585 uint16_t target_id;
21586 /*
21587 * A physical address pointer pointing to a host buffer that the
21588 * command's response data will be written. This can be either a host
21589 * physical address (HPA) or a guest physical address (GPA) and must
21590 * point to a physically contiguous block of memory.
21591 */
21592 uint64_t resp_addr;
21593 /*
21594 * Function ID of the function that is being configured.
21595 * Only valid for a VF FID configured by the PF.
21596 */
21597 uint16_t fid;
21598 uint8_t unused_0[2];
21599 /* Number of VLAN entries in the vlan_tag_mask_tbl. */
21600 uint32_t num_vlan_entries;
21601 /*
21602 * The vlan_tag_mask_tbl_addr is the DMA address of the VLAN
21603 * antispoof table. Each table entry contains the 16-bit TPID
21604 * (0x8100 or 0x88a8 only), 16-bit VLAN ID, and a 16-bit mask,
21605 * all in network order to match hwrm_cfa_l2_set_rx_mask.
21606 * For an individual VLAN entry, the mask value should be 0xfff
21607 * for the 12-bit VLAN ID.
21608 */
21609 uint64_t vlan_tag_mask_tbl_addr;
21610} __attribute__((packed));
21611
21612/* hwrm_cfa_vlan_antispoof_cfg_output (size:128b/16B) */
21613struct hwrm_cfa_vlan_antispoof_cfg_output {
21614 /* The specific error status for the command. */
21615 uint16_t error_code;
21616 /* The HWRM command request type. */
21617 uint16_t req_type;
21618 /* The sequence ID from the original command. */
21619 uint16_t seq_id;
21620 /* The length of the response data in number of bytes. */
21621 uint16_t resp_len;
21622 uint8_t unused_0[7];
21623 /*
21624 * This field is used in Output records to indicate that the output
21625 * is completely written to RAM. This field should be read as '1'
21626 * to indicate that the output has been completely written.
21627 * When writing a command completion or response to an internal processor,
21628 * the order of writes has to be such that this field is written last.
21629 */
21630 uint8_t valid;
21631} __attribute__((packed));
21632
21633/********************************
21634 * hwrm_cfa_vlan_antispoof_qcfg *
21635 ********************************/
21636
21637
21638/* hwrm_cfa_vlan_antispoof_qcfg_input (size:256b/32B) */
21639struct hwrm_cfa_vlan_antispoof_qcfg_input {
21640 /* The HWRM command request type. */
21641 uint16_t req_type;
21642 /*
21643 * The completion ring to send the completion event on. This should
21644 * be the NQ ID returned from the `nq_alloc` HWRM command.
21645 */
21646 uint16_t cmpl_ring;
21647 /*
21648 * The sequence ID is used by the driver for tracking multiple
21649 * commands. This ID is treated as opaque data by the firmware and
21650 * the value is returned in the `hwrm_resp_hdr` upon completion.
21651 */
21652 uint16_t seq_id;
21653 /*
21654 * The target ID of the command:
21655 * * 0x0-0xFFF8 - The function ID
21656 * * 0xFFF8-0xFFFE - Reserved for internal processors
21657 * * 0xFFFF - HWRM
21658 */
21659 uint16_t target_id;
21660 /*
21661 * A physical address pointer pointing to a host buffer that the
21662 * command's response data will be written. This can be either a host
21663 * physical address (HPA) or a guest physical address (GPA) and must
21664 * point to a physically contiguous block of memory.
21665 */
21666 uint64_t resp_addr;
21667 /*
21668 * Function ID of the function that is being queried.
21669 * Only valid for a VF FID queried by the PF.
21670 */
21671 uint16_t fid;
21672 uint8_t unused_0[2];
21673 /*
21674 * Maximum number of VLAN entries the firmware is allowed to DMA
21675 * to vlan_tag_mask_tbl.
21676 */
21677 uint32_t max_vlan_entries;
21678 /*
21679 * The vlan_tag_mask_tbl_addr is the DMA address of the VLAN
21680 * antispoof table to which firmware will DMA to. Each table
21681 * entry will contain the 16-bit TPID (0x8100 or 0x88a8 only),
21682 * 16-bit VLAN ID, and a 16-bit mask, all in network order to
21683 * match hwrm_cfa_l2_set_rx_mask. For an individual VLAN entry,
21684 * the mask value should be 0xfff for the 12-bit VLAN ID.
21685 */
21686 uint64_t vlan_tag_mask_tbl_addr;
21687} __attribute__((packed));
21688
21689/* hwrm_cfa_vlan_antispoof_qcfg_output (size:128b/16B) */
21690struct hwrm_cfa_vlan_antispoof_qcfg_output {
21691 /* The specific error status for the command. */
21692 uint16_t error_code;
21693 /* The HWRM command request type. */
21694 uint16_t req_type;
21695 /* The sequence ID from the original command. */
21696 uint16_t seq_id;
21697 /* The length of the response data in number of bytes. */
21698 uint16_t resp_len;
21699 /* Number of valid entries DMAd by firmware to vlan_tag_mask_tbl. */
21700 uint32_t num_vlan_entries;
21701 uint8_t unused_0[3];
21702 /*
21703 * This field is used in Output records to indicate that the output
21704 * is completely written to RAM. This field should be read as '1'
21705 * to indicate that the output has been completely written.
21706 * When writing a command completion or response to an internal processor,
21707 * the order of writes has to be such that this field is written last.
21708 */
21709 uint8_t valid;
21710} __attribute__((packed));
21711
21712/********************************
21713 * hwrm_cfa_tunnel_filter_alloc *
21714 ********************************/
21715
21716
21717/* hwrm_cfa_tunnel_filter_alloc_input (size:704b/88B) */
21718struct hwrm_cfa_tunnel_filter_alloc_input {
21719 /* The HWRM command request type. */
21720 uint16_t req_type;
21721 /*
21722 * The completion ring to send the completion event on. This should
21723 * be the NQ ID returned from the `nq_alloc` HWRM command.
21724 */
21725 uint16_t cmpl_ring;
21726 /*
21727 * The sequence ID is used by the driver for tracking multiple
21728 * commands. This ID is treated as opaque data by the firmware and
21729 * the value is returned in the `hwrm_resp_hdr` upon completion.
21730 */
21731 uint16_t seq_id;
21732 /*
21733 * The target ID of the command:
21734 * * 0x0-0xFFF8 - The function ID
21735 * * 0xFFF8-0xFFFE - Reserved for internal processors
21736 * * 0xFFFF - HWRM
21737 */
21738 uint16_t target_id;
21739 /*
21740 * A physical address pointer pointing to a host buffer that the
21741 * command's response data will be written. This can be either a host
21742 * physical address (HPA) or a guest physical address (GPA) and must
21743 * point to a physically contiguous block of memory.
21744 */
21745 uint64_t resp_addr;
21746 uint32_t flags;
21747 /* Setting of this flag indicates the applicability to the loopback path. */
21748 #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_FLAGS_LOOPBACK \
21749 UINT32_C(0x1)
21750 uint32_t enables;
21751 /*
21752 * This bit must be '1' for the l2_filter_id field to be
21753 * configured.
21754 */
21755 #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_L2_FILTER_ID \
21756 UINT32_C(0x1)
21757 /*
21758 * This bit must be '1' for the l2_addr field to be
21759 * configured.
21760 */
21761 #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_L2_ADDR \
21762 UINT32_C(0x2)
21763 /*
21764 * This bit must be '1' for the l2_ivlan field to be
21765 * configured.
21766 */
21767 #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_L2_IVLAN \
21768 UINT32_C(0x4)
21769 /*
21770 * This bit must be '1' for the l3_addr field to be
21771 * configured.
21772 */
21773 #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_L3_ADDR \
21774 UINT32_C(0x8)
21775 /*
21776 * This bit must be '1' for the l3_addr_type field to be
21777 * configured.
21778 */
21779 #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_L3_ADDR_TYPE \
21780 UINT32_C(0x10)
21781 /*
21782 * This bit must be '1' for the t_l3_addr_type field to be
21783 * configured.
21784 */
21785 #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_T_L3_ADDR_TYPE \
21786 UINT32_C(0x20)
21787 /*
21788 * This bit must be '1' for the t_l3_addr field to be
21789 * configured.
21790 */
21791 #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_T_L3_ADDR \
21792 UINT32_C(0x40)
21793 /*
21794 * This bit must be '1' for the tunnel_type field to be
21795 * configured.
21796 */
21797 #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_TUNNEL_TYPE \
21798 UINT32_C(0x80)
21799 /*
21800 * This bit must be '1' for the vni field to be
21801 * configured.
21802 */
21803 #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_VNI \
21804 UINT32_C(0x100)
21805 /*
21806 * This bit must be '1' for the dst_vnic_id field to be
21807 * configured.
21808 */
21809 #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_DST_VNIC_ID \
21810 UINT32_C(0x200)
21811 /*
21812 * This bit must be '1' for the mirror_vnic_id field to be
21813 * configured.
21814 */
21815 #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_ENABLES_MIRROR_VNIC_ID \
21816 UINT32_C(0x400)
21817 /*
21818 * This value identifies a set of CFA data structures used for an L2
21819 * context.
21820 */
21821 uint64_t l2_filter_id;
21822 /*
21823 * This value sets the match value for the inner L2
21824 * MAC address.
21825 * Destination MAC address for RX path.
21826 * Source MAC address for TX path.
21827 */
21828 uint8_t l2_addr[6];
21829 /*
21830 * This value sets VLAN ID value for inner VLAN.
21831 * Only 12-bits of VLAN ID are used in setting the filter.
21832 */
21833 uint16_t l2_ivlan;
21834 /*
21835 * The value of inner destination IP address to be used in filtering.
21836 * For IPv4, first four bytes represent the IP address.
21837 */
21838 uint32_t l3_addr[4];
21839 /*
21840 * The value of tunnel destination IP address to be used in filtering.
21841 * For IPv4, first four bytes represent the IP address.
21842 */
21843 uint32_t t_l3_addr[4];
21844 /*
21845 * This value indicates the type of inner IP address.
21846 * 4 - IPv4
21847 * 6 - IPv6
21848 * All others are invalid.
21849 */
21850 uint8_t l3_addr_type;
21851 /*
21852 * This value indicates the type of tunnel IP address.
21853 * 4 - IPv4
21854 * 6 - IPv6
21855 * All others are invalid.
21856 */
21857 uint8_t t_l3_addr_type;
21858 /* Tunnel Type. */
21859 uint8_t tunnel_type;
21860 /* Non-tunnel */
21861 #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \
21862 UINT32_C(0x0)
21863 /* Virtual eXtensible Local Area Network (VXLAN) */
21864 #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \
21865 UINT32_C(0x1)
21866 /* Network Virtualization Generic Routing Encapsulation (NVGRE) */
21867 #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \
21868 UINT32_C(0x2)
21869 /* Generic Routing Encapsulation (GRE) inside Ethernet payload */
21870 #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \
21871 UINT32_C(0x3)
21872 /* IP in IP */
21873 #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPIP \
21874 UINT32_C(0x4)
21875 /* Generic Network Virtualization Encapsulation (Geneve) */
21876 #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \
21877 UINT32_C(0x5)
21878 /* Multi-Protocol Lable Switching (MPLS) */
21879 #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_MPLS \
21880 UINT32_C(0x6)
21881 /* Stateless Transport Tunnel (STT) */
21882 #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_STT \
21883 UINT32_C(0x7)
21884 /* Generic Routing Encapsulation (GRE) inside IP datagram payload */
21885 #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \
21886 UINT32_C(0x8)
21887 /* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
21888 #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \
21889 UINT32_C(0x9)
21890 /* Any tunneled traffic */
21891 #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \
21892 UINT32_C(0xff)
21893 #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_LAST \
21894 HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL
21895 /*
21896 * tunnel_flags allows the user to indicate the tunnel tag detection
21897 * for the tunnel type specified in tunnel_type.
21898 */
21899 uint8_t tunnel_flags;
21900 /*
21901 * If the tunnel_type is geneve, then this bit indicates if we
21902 * need to match the geneve OAM packet.
21903 * If the tunnel_type is nvgre or gre, then this bit indicates if
21904 * we need to detect checksum present bit in geneve header.
21905 * If the tunnel_type is mpls, then this bit indicates if we need
21906 * to match mpls packet with explicit IPV4/IPV6 null header.
21907 */
21908 #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_FLAGS_TUN_FLAGS_OAM_CHECKSUM_EXPLHDR \
21909 UINT32_C(0x1)
21910 /*
21911 * If the tunnel_type is geneve, then this bit indicates if we
21912 * need to detect the critical option bit set in the oam packet.
21913 * If the tunnel_type is nvgre or gre, then this bit indicates
21914 * if we need to match nvgre packets with key present bit set in
21915 * gre header.
21916 * If the tunnel_type is mpls, then this bit indicates if we
21917 * need to match mpls packet with S bit from inner/second label.
21918 */
21919 #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_FLAGS_TUN_FLAGS_CRITICAL_OPT_S1 \
21920 UINT32_C(0x2)
21921 /*
21922 * If the tunnel_type is geneve, then this bit indicates if we
21923 * need to match geneve packet with extended header bit set in
21924 * geneve header.
21925 * If the tunnel_type is nvgre or gre, then this bit indicates
21926 * if we need to match nvgre packets with sequence number
21927 * present bit set in gre header.
21928 * If the tunnel_type is mpls, then this bit indicates if we
21929 * need to match mpls packet with S bit from out/first label.
21930 */
21931 #define HWRM_CFA_TUNNEL_FILTER_ALLOC_INPUT_TUNNEL_FLAGS_TUN_FLAGS_EXTHDR_SEQNUM_S0 \
21932 UINT32_C(0x4)
21933 /*
21934 * Virtual Network Identifier (VNI). Only valid with
21935 * tunnel_types VXLAN, NVGRE, and Geneve.
21936 * Only lower 24-bits of VNI field are used
21937 * in setting up the filter.
21938 */
21939 uint32_t vni;
21940 /* Logical VNIC ID of the destination VNIC. */
21941 uint32_t dst_vnic_id;
7c673cae 21942 /*
9f95a23c
TL
21943 * Logical VNIC ID of the VNIC where traffic is
21944 * mirrored.
7c673cae 21945 */
9f95a23c
TL
21946 uint32_t mirror_vnic_id;
21947} __attribute__((packed));
21948
21949/* hwrm_cfa_tunnel_filter_alloc_output (size:192b/24B) */
21950struct hwrm_cfa_tunnel_filter_alloc_output {
21951 /* The specific error status for the command. */
21952 uint16_t error_code;
21953 /* The HWRM command request type. */
21954 uint16_t req_type;
21955 /* The sequence ID from the original command. */
21956 uint16_t seq_id;
21957 /* The length of the response data in number of bytes. */
21958 uint16_t resp_len;
21959 /* This value is an opaque id into CFA data structures. */
21960 uint64_t tunnel_filter_id;
21961 /*
21962 * This is the ID of the flow associated with this
21963 * filter.
21964 * This value shall be used to match and associate the
21965 * flow identifier returned in completion records.
21966 * A value of 0xFFFFFFFF shall indicate no flow id.
21967 */
21968 uint32_t flow_id;
21969 uint8_t unused_0[3];
21970 /*
21971 * This field is used in Output records to indicate that the output
21972 * is completely written to RAM. This field should be read as '1'
21973 * to indicate that the output has been completely written.
21974 * When writing a command completion or response to an internal processor,
21975 * the order of writes has to be such that this field is written last.
21976 */
21977 uint8_t valid;
21978} __attribute__((packed));
21979
21980/*******************************
21981 * hwrm_cfa_tunnel_filter_free *
21982 *******************************/
21983
21984
21985/* hwrm_cfa_tunnel_filter_free_input (size:192b/24B) */
21986struct hwrm_cfa_tunnel_filter_free_input {
21987 /* The HWRM command request type. */
21988 uint16_t req_type;
7c673cae 21989 /*
9f95a23c
TL
21990 * The completion ring to send the completion event on. This should
21991 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 21992 */
9f95a23c 21993 uint16_t cmpl_ring;
7c673cae 21994 /*
9f95a23c
TL
21995 * The sequence ID is used by the driver for tracking multiple
21996 * commands. This ID is treated as opaque data by the firmware and
21997 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 21998 */
9f95a23c
TL
21999 uint16_t seq_id;
22000 /*
22001 * The target ID of the command:
22002 * * 0x0-0xFFF8 - The function ID
22003 * * 0xFFF8-0xFFFE - Reserved for internal processors
22004 * * 0xFFFF - HWRM
22005 */
22006 uint16_t target_id;
22007 /*
22008 * A physical address pointer pointing to a host buffer that the
22009 * command's response data will be written. This can be either a host
22010 * physical address (HPA) or a guest physical address (GPA) and must
22011 * point to a physically contiguous block of memory.
22012 */
22013 uint64_t resp_addr;
22014 /* This value is an opaque id into CFA data structures. */
22015 uint64_t tunnel_filter_id;
7c673cae
FG
22016} __attribute__((packed));
22017
9f95a23c
TL
22018/* hwrm_cfa_tunnel_filter_free_output (size:128b/16B) */
22019struct hwrm_cfa_tunnel_filter_free_output {
22020 /* The specific error status for the command. */
22021 uint16_t error_code;
22022 /* The HWRM command request type. */
22023 uint16_t req_type;
22024 /* The sequence ID from the original command. */
22025 uint16_t seq_id;
22026 /* The length of the response data in number of bytes. */
22027 uint16_t resp_len;
22028 uint8_t unused_0[7];
22029 /*
22030 * This field is used in Output records to indicate that the output
22031 * is completely written to RAM. This field should be read as '1'
22032 * to indicate that the output has been completely written.
22033 * When writing a command completion or response to an internal processor,
22034 * the order of writes has to be such that this field is written last.
22035 */
22036 uint8_t valid;
22037} __attribute__((packed));
22038
22039/***************************************
22040 * hwrm_cfa_redirect_tunnel_type_alloc *
22041 ***************************************/
22042
22043
22044/* hwrm_cfa_redirect_tunnel_type_alloc_input (size:192b/24B) */
22045struct hwrm_cfa_redirect_tunnel_type_alloc_input {
22046 /* The HWRM command request type. */
22047 uint16_t req_type;
7c673cae 22048 /*
9f95a23c
TL
22049 * The completion ring to send the completion event on. This should
22050 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 22051 */
9f95a23c 22052 uint16_t cmpl_ring;
7c673cae 22053 /*
9f95a23c
TL
22054 * The sequence ID is used by the driver for tracking multiple
22055 * commands. This ID is treated as opaque data by the firmware and
22056 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 22057 */
9f95a23c 22058 uint16_t seq_id;
7c673cae 22059 /*
9f95a23c
TL
22060 * The target ID of the command:
22061 * * 0x0-0xFFF8 - The function ID
22062 * * 0xFFF8-0xFFFE - Reserved for internal processors
22063 * * 0xFFFF - HWRM
7c673cae 22064 */
9f95a23c 22065 uint16_t target_id;
7c673cae 22066 /*
9f95a23c
TL
22067 * A physical address pointer pointing to a host buffer that the
22068 * command's response data will be written. This can be either a host
22069 * physical address (HPA) or a guest physical address (GPA) and must
22070 * point to a physically contiguous block of memory.
7c673cae 22071 */
9f95a23c
TL
22072 uint64_t resp_addr;
22073 /* The destination function id, to whom the traffic is redirected. */
22074 uint16_t dest_fid;
22075 /* Tunnel Type. */
22076 uint8_t tunnel_type;
22077 /* Non-tunnel */
22078 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \
22079 UINT32_C(0x0)
22080 /* Virtual eXtensible Local Area Network (VXLAN) */
22081 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \
22082 UINT32_C(0x1)
22083 /* Network Virtualization Generic Routing Encapsulation (NVGRE) */
22084 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \
22085 UINT32_C(0x2)
22086 /* Generic Routing Encapsulation (GRE) inside Ethernet payload */
22087 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \
22088 UINT32_C(0x3)
22089 /* IP in IP */
22090 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_IPIP \
22091 UINT32_C(0x4)
22092 /* Generic Network Virtualization Encapsulation (Geneve) */
22093 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \
22094 UINT32_C(0x5)
22095 /* Multi-Protocol Lable Switching (MPLS) */
22096 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_MPLS \
22097 UINT32_C(0x6)
22098 /* Stateless Transport Tunnel (STT) */
22099 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_STT \
22100 UINT32_C(0x7)
22101 /* Generic Routing Encapsulation (GRE) inside IP datagram payload */
22102 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \
22103 UINT32_C(0x8)
22104 /* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
22105 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \
22106 UINT32_C(0x9)
22107 /* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */
22108 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_IPGRE_V1 \
22109 UINT32_C(0xa)
22110 /* Any tunneled traffic */
22111 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \
22112 UINT32_C(0xff)
22113 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_LAST \
22114 HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL
22115 /* Tunnel alloc flags. */
22116 uint8_t flags;
22117 /* Setting of this flag indicates modify existing redirect tunnel to new destination function ID. */
22118 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_ALLOC_INPUT_FLAGS_MODIFY_DST \
22119 UINT32_C(0x1)
22120 uint8_t unused_0[4];
22121} __attribute__((packed));
22122
22123/* hwrm_cfa_redirect_tunnel_type_alloc_output (size:128b/16B) */
22124struct hwrm_cfa_redirect_tunnel_type_alloc_output {
22125 /* The specific error status for the command. */
22126 uint16_t error_code;
22127 /* The HWRM command request type. */
22128 uint16_t req_type;
22129 /* The sequence ID from the original command. */
22130 uint16_t seq_id;
22131 /* The length of the response data in number of bytes. */
22132 uint16_t resp_len;
22133 uint8_t unused_0[7];
22134 /*
22135 * This field is used in Output records to indicate that the output
22136 * is completely written to RAM. This field should be read as '1'
22137 * to indicate that the output has been completely written.
22138 * When writing a command completion or response to an internal processor,
22139 * the order of writes has to be such that this field is written last.
22140 */
22141 uint8_t valid;
22142} __attribute__((packed));
22143
22144/**************************************
22145 * hwrm_cfa_redirect_tunnel_type_free *
22146 **************************************/
22147
22148
22149/* hwrm_cfa_redirect_tunnel_type_free_input (size:192b/24B) */
22150struct hwrm_cfa_redirect_tunnel_type_free_input {
22151 /* The HWRM command request type. */
22152 uint16_t req_type;
7c673cae 22153 /*
9f95a23c
TL
22154 * The completion ring to send the completion event on. This should
22155 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 22156 */
9f95a23c 22157 uint16_t cmpl_ring;
7c673cae 22158 /*
9f95a23c
TL
22159 * The sequence ID is used by the driver for tracking multiple
22160 * commands. This ID is treated as opaque data by the firmware and
22161 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 22162 */
9f95a23c
TL
22163 uint16_t seq_id;
22164 /*
22165 * The target ID of the command:
22166 * * 0x0-0xFFF8 - The function ID
22167 * * 0xFFF8-0xFFFE - Reserved for internal processors
22168 * * 0xFFFF - HWRM
22169 */
22170 uint16_t target_id;
22171 /*
22172 * A physical address pointer pointing to a host buffer that the
22173 * command's response data will be written. This can be either a host
22174 * physical address (HPA) or a guest physical address (GPA) and must
22175 * point to a physically contiguous block of memory.
22176 */
22177 uint64_t resp_addr;
22178 /* The destination function id, to whom the traffic is redirected. */
22179 uint16_t dest_fid;
22180 /* Tunnel Type. */
22181 uint8_t tunnel_type;
22182 /* Non-tunnel */
22183 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_NONTUNNEL \
22184 UINT32_C(0x0)
22185 /* Virtual eXtensible Local Area Network (VXLAN) */
22186 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_VXLAN \
7c673cae 22187 UINT32_C(0x1)
9f95a23c
TL
22188 /* Network Virtualization Generic Routing Encapsulation (NVGRE) */
22189 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_NVGRE \
22190 UINT32_C(0x2)
22191 /* Generic Routing Encapsulation (GRE) inside Ethernet payload */
22192 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_L2GRE \
22193 UINT32_C(0x3)
22194 /* IP in IP */
22195 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_IPIP \
22196 UINT32_C(0x4)
22197 /* Generic Network Virtualization Encapsulation (Geneve) */
22198 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_GENEVE \
22199 UINT32_C(0x5)
22200 /* Multi-Protocol Lable Switching (MPLS) */
22201 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_MPLS \
22202 UINT32_C(0x6)
22203 /* Stateless Transport Tunnel (STT) */
22204 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_STT \
22205 UINT32_C(0x7)
22206 /* Generic Routing Encapsulation (GRE) inside IP datagram payload */
22207 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_IPGRE \
22208 UINT32_C(0x8)
22209 /* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
22210 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_VXLAN_V4 \
22211 UINT32_C(0x9)
22212 /* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */
22213 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_IPGRE_V1 \
22214 UINT32_C(0xa)
22215 /* Any tunneled traffic */
22216 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_ANYTUNNEL \
22217 UINT32_C(0xff)
22218 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_LAST \
22219 HWRM_CFA_REDIRECT_TUNNEL_TYPE_FREE_INPUT_TUNNEL_TYPE_ANYTUNNEL
22220 uint8_t unused_0[5];
22221} __attribute__((packed));
22222
22223/* hwrm_cfa_redirect_tunnel_type_free_output (size:128b/16B) */
22224struct hwrm_cfa_redirect_tunnel_type_free_output {
22225 /* The specific error status for the command. */
22226 uint16_t error_code;
22227 /* The HWRM command request type. */
22228 uint16_t req_type;
22229 /* The sequence ID from the original command. */
22230 uint16_t seq_id;
22231 /* The length of the response data in number of bytes. */
22232 uint16_t resp_len;
22233 uint8_t unused_0[7];
22234 /*
22235 * This field is used in Output records to indicate that the output
22236 * is completely written to RAM. This field should be read as '1'
22237 * to indicate that the output has been completely written.
22238 * When writing a command completion or response to an internal processor,
22239 * the order of writes has to be such that this field is written last.
22240 */
22241 uint8_t valid;
22242} __attribute__((packed));
22243
22244/**************************************
22245 * hwrm_cfa_redirect_tunnel_type_info *
22246 **************************************/
22247
22248
22249/* hwrm_cfa_redirect_tunnel_type_info_input (size:192b/24B) */
22250struct hwrm_cfa_redirect_tunnel_type_info_input {
22251 /* The HWRM command request type. */
22252 uint16_t req_type;
7c673cae 22253 /*
9f95a23c
TL
22254 * The completion ring to send the completion event on. This should
22255 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 22256 */
9f95a23c
TL
22257 uint16_t cmpl_ring;
22258 /*
22259 * The sequence ID is used by the driver for tracking multiple
22260 * commands. This ID is treated as opaque data by the firmware and
22261 * the value is returned in the `hwrm_resp_hdr` upon completion.
22262 */
22263 uint16_t seq_id;
22264 /*
22265 * The target ID of the command:
22266 * * 0x0-0xFFF8 - The function ID
22267 * * 0xFFF8-0xFFFE - Reserved for internal processors
22268 * * 0xFFFF - HWRM
22269 */
22270 uint16_t target_id;
22271 /*
22272 * A physical address pointer pointing to a host buffer that the
22273 * command's response data will be written. This can be either a host
22274 * physical address (HPA) or a guest physical address (GPA) and must
22275 * point to a physically contiguous block of memory.
22276 */
22277 uint64_t resp_addr;
22278 /* The source function id. */
22279 uint16_t src_fid;
22280 /* Tunnel Type. */
22281 uint8_t tunnel_type;
22282 /* Non-tunnel */
22283 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_NONTUNNEL \
22284 UINT32_C(0x0)
22285 /* Virtual eXtensible Local Area Network (VXLAN) */
22286 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_VXLAN \
7c673cae 22287 UINT32_C(0x1)
9f95a23c
TL
22288 /* Network Virtualization Generic Routing Encapsulation (NVGRE) */
22289 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_NVGRE \
22290 UINT32_C(0x2)
22291 /* Generic Routing Encapsulation (GRE) inside Ethernet payload */
22292 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_L2GRE \
22293 UINT32_C(0x3)
22294 /* IP in IP */
22295 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_IPIP \
22296 UINT32_C(0x4)
22297 /* Generic Network Virtualization Encapsulation (Geneve) */
22298 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_GENEVE \
22299 UINT32_C(0x5)
22300 /* Multi-Protocol Lable Switching (MPLS) */
22301 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_MPLS \
22302 UINT32_C(0x6)
22303 /* Stateless Transport Tunnel (STT) */
22304 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_STT \
22305 UINT32_C(0x7)
22306 /* Generic Routing Encapsulation (GRE) inside IP datagram payload */
22307 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_IPGRE \
22308 UINT32_C(0x8)
22309 /* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
22310 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_VXLAN_V4 \
22311 UINT32_C(0x9)
22312 /* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */
22313 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_IPGRE_V1 \
22314 UINT32_C(0xa)
22315 /* Any tunneled traffic */
22316 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_ANYTUNNEL \
22317 UINT32_C(0xff)
22318 #define HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_LAST \
22319 HWRM_CFA_REDIRECT_TUNNEL_TYPE_INFO_INPUT_TUNNEL_TYPE_ANYTUNNEL
22320 uint8_t unused_0[5];
22321} __attribute__((packed));
22322
22323/* hwrm_cfa_redirect_tunnel_type_info_output (size:128b/16B) */
22324struct hwrm_cfa_redirect_tunnel_type_info_output {
22325 /* The specific error status for the command. */
22326 uint16_t error_code;
22327 /* The HWRM command request type. */
22328 uint16_t req_type;
22329 /* The sequence ID from the original command. */
22330 uint16_t seq_id;
22331 /* The length of the response data in number of bytes. */
22332 uint16_t resp_len;
22333 /* The destination function id, to whom the traffic is redirected. */
22334 uint16_t dest_fid;
22335 uint8_t unused_0[5];
22336 /*
22337 * This field is used in Output records to indicate that the output
22338 * is completely written to RAM. This field should be read as '1'
22339 * to indicate that the output has been completely written.
22340 * When writing a command completion or response to an internal processor,
22341 * the order of writes has to be such that this field is written last.
22342 */
22343 uint8_t valid;
22344} __attribute__((packed));
22345
22346/* hwrm_vxlan_ipv4_hdr (size:128b/16B) */
22347struct hwrm_vxlan_ipv4_hdr {
22348 /* IPv4 version and header length. */
22349 uint8_t ver_hlen;
22350 /* IPv4 header length */
22351 #define HWRM_VXLAN_IPV4_HDR_VER_HLEN_HEADER_LENGTH_MASK UINT32_C(0xf)
22352 #define HWRM_VXLAN_IPV4_HDR_VER_HLEN_HEADER_LENGTH_SFT 0
22353 /* Version */
22354 #define HWRM_VXLAN_IPV4_HDR_VER_HLEN_VERSION_MASK UINT32_C(0xf0)
22355 #define HWRM_VXLAN_IPV4_HDR_VER_HLEN_VERSION_SFT 4
22356 /* IPv4 type of service. */
22357 uint8_t tos;
22358 /* IPv4 identification. */
22359 uint16_t ip_id;
22360 /* IPv4 flags and offset. */
22361 uint16_t flags_frag_offset;
22362 /* IPv4 TTL. */
22363 uint8_t ttl;
22364 /* IPv4 protocol. */
22365 uint8_t protocol;
22366 /* IPv4 source address. */
22367 uint32_t src_ip_addr;
22368 /* IPv4 destination address. */
22369 uint32_t dest_ip_addr;
22370} __attribute__((packed));
22371
22372/* hwrm_vxlan_ipv6_hdr (size:320b/40B) */
22373struct hwrm_vxlan_ipv6_hdr {
22374 /* IPv6 version, traffic class and flow label. */
22375 uint32_t ver_tc_flow_label;
22376 /* IPv6 version shift */
22377 #define HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_VER_SFT \
22378 UINT32_C(0x1c)
22379 /* IPv6 version mask */
22380 #define HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_VER_MASK \
22381 UINT32_C(0xf0000000)
22382 /* IPv6 TC shift */
22383 #define HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_TC_SFT \
22384 UINT32_C(0x14)
22385 /* IPv6 TC mask */
22386 #define HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_TC_MASK \
22387 UINT32_C(0xff00000)
22388 /* IPv6 flow label shift */
22389 #define HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_FLOW_LABEL_SFT \
22390 UINT32_C(0x0)
22391 /* IPv6 flow label mask */
22392 #define HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_FLOW_LABEL_MASK \
22393 UINT32_C(0xfffff)
22394 #define HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_LAST \
22395 HWRM_VXLAN_IPV6_HDR_VER_TC_FLOW_LABEL_FLOW_LABEL_MASK
22396 /* IPv6 payload length. */
22397 uint16_t payload_len;
22398 /* IPv6 next header. */
22399 uint8_t next_hdr;
22400 /* IPv6 TTL. */
22401 uint8_t ttl;
22402 /* IPv6 source address. */
22403 uint32_t src_ip_addr[4];
22404 /* IPv6 destination address. */
22405 uint32_t dest_ip_addr[4];
22406} __attribute__((packed));
22407
22408/* hwrm_cfa_encap_data_vxlan (size:640b/80B) */
22409struct hwrm_cfa_encap_data_vxlan {
22410 /* Source MAC address. */
22411 uint8_t src_mac_addr[6];
22412 /* reserved. */
22413 uint16_t unused_0;
22414 /* Destination MAC address. */
22415 uint8_t dst_mac_addr[6];
22416 /* Number of VLAN tags. */
22417 uint8_t num_vlan_tags;
22418 /* reserved. */
22419 uint8_t unused_1;
22420 /* Outer VLAN TPID. */
22421 uint16_t ovlan_tpid;
22422 /* Outer VLAN TCI. */
22423 uint16_t ovlan_tci;
22424 /* Inner VLAN TPID. */
22425 uint16_t ivlan_tpid;
22426 /* Inner VLAN TCI. */
22427 uint16_t ivlan_tci;
22428 /* L3 header fields. */
22429 uint32_t l3[10];
22430 /* IP version mask. */
22431 #define HWRM_CFA_ENCAP_DATA_VXLAN_L3_VER_MASK UINT32_C(0xf)
22432 /* IP version 4. */
22433 #define HWRM_CFA_ENCAP_DATA_VXLAN_L3_VER_IPV4 UINT32_C(0x4)
22434 /* IP version 6. */
22435 #define HWRM_CFA_ENCAP_DATA_VXLAN_L3_VER_IPV6 UINT32_C(0x6)
22436 #define HWRM_CFA_ENCAP_DATA_VXLAN_L3_LAST \
22437 HWRM_CFA_ENCAP_DATA_VXLAN_L3_VER_IPV6
22438 /* UDP source port. */
22439 uint16_t src_port;
22440 /* UDP destination port. */
22441 uint16_t dst_port;
22442 /* VXLAN Network Identifier. */
22443 uint32_t vni;
22444 /* 3 bytes VXLAN header reserve fields from 1st dword of the VXLAN header. */
22445 uint8_t hdr_rsvd0[3];
22446 /* 1 byte VXLAN header reserve field from 2nd dword of the VXLAN header. */
22447 uint8_t hdr_rsvd1;
22448 /* VXLAN header flags field. */
22449 uint8_t hdr_flags;
22450 uint8_t unused[3];
22451} __attribute__((packed));
22452
22453/*******************************
22454 * hwrm_cfa_encap_record_alloc *
22455 *******************************/
22456
22457
22458/* hwrm_cfa_encap_record_alloc_input (size:832b/104B) */
22459struct hwrm_cfa_encap_record_alloc_input {
22460 /* The HWRM command request type. */
22461 uint16_t req_type;
7c673cae 22462 /*
9f95a23c
TL
22463 * The completion ring to send the completion event on. This should
22464 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 22465 */
9f95a23c
TL
22466 uint16_t cmpl_ring;
22467 /*
22468 * The sequence ID is used by the driver for tracking multiple
22469 * commands. This ID is treated as opaque data by the firmware and
22470 * the value is returned in the `hwrm_resp_hdr` upon completion.
22471 */
22472 uint16_t seq_id;
7c673cae 22473 /*
9f95a23c
TL
22474 * The target ID of the command:
22475 * * 0x0-0xFFF8 - The function ID
22476 * * 0xFFF8-0xFFFE - Reserved for internal processors
22477 * * 0xFFFF - HWRM
7c673cae 22478 */
9f95a23c 22479 uint16_t target_id;
7c673cae 22480 /*
9f95a23c
TL
22481 * A physical address pointer pointing to a host buffer that the
22482 * command's response data will be written. This can be either a host
22483 * physical address (HPA) or a guest physical address (GPA) and must
22484 * point to a physically contiguous block of memory.
7c673cae 22485 */
9f95a23c
TL
22486 uint64_t resp_addr;
22487 uint32_t flags;
22488 /* Setting of this flag indicates the applicability to the loopback path. */
22489 #define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_FLAGS_LOOPBACK \
22490 UINT32_C(0x1)
22491 /* Encapsulation Type. */
22492 uint8_t encap_type;
22493 /* Virtual eXtensible Local Area Network (VXLAN) */
22494 #define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_VXLAN \
22495 UINT32_C(0x1)
22496 /* Network Virtualization Generic Routing Encapsulation (NVGRE) */
22497 #define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_NVGRE \
22498 UINT32_C(0x2)
22499 /* Generic Routing Encapsulation (GRE) after inside Ethernet payload */
22500 #define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_L2GRE \
7c673cae 22501 UINT32_C(0x3)
9f95a23c
TL
22502 /* IP in IP */
22503 #define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_IPIP \
22504 UINT32_C(0x4)
22505 /* Generic Network Virtualization Encapsulation (Geneve) */
22506 #define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_GENEVE \
22507 UINT32_C(0x5)
22508 /* Multi-Protocol Lable Switching (MPLS) */
22509 #define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_MPLS \
22510 UINT32_C(0x6)
22511 /* VLAN */
22512 #define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_VLAN \
22513 UINT32_C(0x7)
22514 /* Generic Routing Encapsulation (GRE) inside IP datagram payload */
22515 #define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_IPGRE \
22516 UINT32_C(0x8)
22517 /* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
22518 #define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_VXLAN_V4 \
22519 UINT32_C(0x9)
22520 #define HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_LAST \
22521 HWRM_CFA_ENCAP_RECORD_ALLOC_INPUT_ENCAP_TYPE_VXLAN_V4
22522 uint8_t unused_0[3];
22523 /* This value is encap data used for the given encap type. */
22524 uint32_t encap_data[20];
22525} __attribute__((packed));
22526
22527/* hwrm_cfa_encap_record_alloc_output (size:128b/16B) */
22528struct hwrm_cfa_encap_record_alloc_output {
22529 /* The specific error status for the command. */
22530 uint16_t error_code;
22531 /* The HWRM command request type. */
22532 uint16_t req_type;
22533 /* The sequence ID from the original command. */
22534 uint16_t seq_id;
22535 /* The length of the response data in number of bytes. */
22536 uint16_t resp_len;
22537 /* This value is an opaque id into CFA data structures. */
22538 uint32_t encap_record_id;
22539 uint8_t unused_0[3];
22540 /*
22541 * This field is used in Output records to indicate that the output
22542 * is completely written to RAM. This field should be read as '1'
22543 * to indicate that the output has been completely written.
22544 * When writing a command completion or response to an internal processor,
22545 * the order of writes has to be such that this field is written last.
22546 */
22547 uint8_t valid;
22548} __attribute__((packed));
22549
22550/******************************
22551 * hwrm_cfa_encap_record_free *
22552 ******************************/
22553
22554
22555/* hwrm_cfa_encap_record_free_input (size:192b/24B) */
22556struct hwrm_cfa_encap_record_free_input {
22557 /* The HWRM command request type. */
22558 uint16_t req_type;
7c673cae 22559 /*
9f95a23c
TL
22560 * The completion ring to send the completion event on. This should
22561 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 22562 */
9f95a23c 22563 uint16_t cmpl_ring;
7c673cae 22564 /*
9f95a23c
TL
22565 * The sequence ID is used by the driver for tracking multiple
22566 * commands. This ID is treated as opaque data by the firmware and
22567 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 22568 */
9f95a23c 22569 uint16_t seq_id;
7c673cae 22570 /*
9f95a23c
TL
22571 * The target ID of the command:
22572 * * 0x0-0xFFF8 - The function ID
22573 * * 0xFFF8-0xFFFE - Reserved for internal processors
22574 * * 0xFFFF - HWRM
7c673cae 22575 */
9f95a23c 22576 uint16_t target_id;
7c673cae 22577 /*
9f95a23c
TL
22578 * A physical address pointer pointing to a host buffer that the
22579 * command's response data will be written. This can be either a host
22580 * physical address (HPA) or a guest physical address (GPA) and must
22581 * point to a physically contiguous block of memory.
7c673cae 22582 */
9f95a23c
TL
22583 uint64_t resp_addr;
22584 /* This value is an opaque id into CFA data structures. */
22585 uint32_t encap_record_id;
22586 uint8_t unused_0[4];
22587} __attribute__((packed));
22588
22589/* hwrm_cfa_encap_record_free_output (size:128b/16B) */
22590struct hwrm_cfa_encap_record_free_output {
22591 /* The specific error status for the command. */
22592 uint16_t error_code;
22593 /* The HWRM command request type. */
22594 uint16_t req_type;
22595 /* The sequence ID from the original command. */
22596 uint16_t seq_id;
22597 /* The length of the response data in number of bytes. */
22598 uint16_t resp_len;
22599 uint8_t unused_0[7];
22600 /*
22601 * This field is used in Output records to indicate that the output
22602 * is completely written to RAM. This field should be read as '1'
22603 * to indicate that the output has been completely written.
22604 * When writing a command completion or response to an internal processor,
22605 * the order of writes has to be such that this field is written last.
22606 */
22607 uint8_t valid;
22608} __attribute__((packed));
22609
22610/********************************
22611 * hwrm_cfa_ntuple_filter_alloc *
22612 ********************************/
22613
22614
22615/* hwrm_cfa_ntuple_filter_alloc_input (size:1024b/128B) */
22616struct hwrm_cfa_ntuple_filter_alloc_input {
22617 /* The HWRM command request type. */
22618 uint16_t req_type;
7c673cae 22619 /*
9f95a23c
TL
22620 * The completion ring to send the completion event on. This should
22621 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 22622 */
9f95a23c 22623 uint16_t cmpl_ring;
7c673cae 22624 /*
9f95a23c
TL
22625 * The sequence ID is used by the driver for tracking multiple
22626 * commands. This ID is treated as opaque data by the firmware and
22627 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 22628 */
9f95a23c 22629 uint16_t seq_id;
7c673cae 22630 /*
9f95a23c
TL
22631 * The target ID of the command:
22632 * * 0x0-0xFFF8 - The function ID
22633 * * 0xFFF8-0xFFFE - Reserved for internal processors
22634 * * 0xFFFF - HWRM
7c673cae 22635 */
9f95a23c
TL
22636 uint16_t target_id;
22637 /*
22638 * A physical address pointer pointing to a host buffer that the
22639 * command's response data will be written. This can be either a host
22640 * physical address (HPA) or a guest physical address (GPA) and must
22641 * point to a physically contiguous block of memory.
22642 */
22643 uint64_t resp_addr;
22644 uint32_t flags;
22645 /* Setting of this flag indicates the applicability to the loopback path. */
22646 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_LOOPBACK \
7c673cae 22647 UINT32_C(0x1)
9f95a23c
TL
22648 /*
22649 * Setting of this flag indicates drop action. If this flag is not set,
22650 * then it should be considered accept action.
22651 */
22652 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_DROP \
7c673cae 22653 UINT32_C(0x2)
9f95a23c
TL
22654 /*
22655 * Setting of this flag indicates that a meter is expected to be attached
22656 * to this flow. This hint can be used when choosing the action record
22657 * format required for the flow.
22658 */
22659 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_METER \
7c673cae 22660 UINT32_C(0x4)
9f95a23c
TL
22661 uint32_t enables;
22662 /*
22663 * This bit must be '1' for the l2_filter_id field to be
22664 * configured.
22665 */
22666 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_L2_FILTER_ID \
22667 UINT32_C(0x1)
22668 /*
22669 * This bit must be '1' for the ethertype field to be
22670 * configured.
22671 */
22672 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_ETHERTYPE \
22673 UINT32_C(0x2)
22674 /*
22675 * This bit must be '1' for the tunnel_type field to be
22676 * configured.
22677 */
22678 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_TUNNEL_TYPE \
22679 UINT32_C(0x4)
22680 /*
22681 * This bit must be '1' for the src_macaddr field to be
22682 * configured.
22683 */
22684 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_MACADDR \
7c673cae 22685 UINT32_C(0x8)
9f95a23c
TL
22686 /*
22687 * This bit must be '1' for the ipaddr_type field to be
22688 * configured.
22689 */
22690 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_IPADDR_TYPE \
7c673cae 22691 UINT32_C(0x10)
9f95a23c
TL
22692 /*
22693 * This bit must be '1' for the src_ipaddr field to be
22694 * configured.
22695 */
22696 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_IPADDR \
7c673cae 22697 UINT32_C(0x20)
9f95a23c
TL
22698 /*
22699 * This bit must be '1' for the src_ipaddr_mask field to be
22700 * configured.
22701 */
22702 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_IPADDR_MASK \
7c673cae 22703 UINT32_C(0x40)
9f95a23c
TL
22704 /*
22705 * This bit must be '1' for the dst_ipaddr field to be
22706 * configured.
22707 */
22708 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_IPADDR \
7c673cae 22709 UINT32_C(0x80)
9f95a23c
TL
22710 /*
22711 * This bit must be '1' for the dst_ipaddr_mask field to be
22712 * configured.
22713 */
22714 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_IPADDR_MASK \
7c673cae 22715 UINT32_C(0x100)
9f95a23c
TL
22716 /*
22717 * This bit must be '1' for the ip_protocol field to be
22718 * configured.
22719 */
22720 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_IP_PROTOCOL \
7c673cae 22721 UINT32_C(0x200)
9f95a23c
TL
22722 /*
22723 * This bit must be '1' for the src_port field to be
22724 * configured.
22725 */
22726 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_PORT \
7c673cae 22727 UINT32_C(0x400)
9f95a23c
TL
22728 /*
22729 * This bit must be '1' for the src_port_mask field to be
22730 * configured.
22731 */
22732 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_PORT_MASK \
7c673cae 22733 UINT32_C(0x800)
9f95a23c
TL
22734 /*
22735 * This bit must be '1' for the dst_port field to be
22736 * configured.
22737 */
22738 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_PORT \
7c673cae 22739 UINT32_C(0x1000)
9f95a23c
TL
22740 /*
22741 * This bit must be '1' for the dst_port_mask field to be
22742 * configured.
22743 */
22744 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_PORT_MASK \
7c673cae 22745 UINT32_C(0x2000)
7c673cae 22746 /*
9f95a23c
TL
22747 * This bit must be '1' for the pri_hint field to be
22748 * configured.
22749 */
22750 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_PRI_HINT \
22751 UINT32_C(0x4000)
22752 /*
22753 * This bit must be '1' for the ntuple_filter_id field to be
22754 * configured.
22755 */
22756 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_NTUPLE_FILTER_ID \
22757 UINT32_C(0x8000)
22758 /*
22759 * This bit must be '1' for the dst_id field to be
22760 * configured.
7c673cae 22761 */
9f95a23c
TL
22762 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_ID \
22763 UINT32_C(0x10000)
7c673cae 22764 /*
9f95a23c
TL
22765 * This bit must be '1' for the mirror_vnic_id field to be
22766 * configured.
7c673cae 22767 */
9f95a23c
TL
22768 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_MIRROR_VNIC_ID \
22769 UINT32_C(0x20000)
7c673cae 22770 /*
9f95a23c
TL
22771 * This bit must be '1' for the dst_macaddr field to be
22772 * configured.
7c673cae 22773 */
9f95a23c
TL
22774 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_DST_MACADDR \
22775 UINT32_C(0x40000)
7c673cae 22776 /*
9f95a23c
TL
22777 * This value identifies a set of CFA data structures used for an L2
22778 * context.
7c673cae 22779 */
9f95a23c 22780 uint64_t l2_filter_id;
7c673cae 22781 /*
9f95a23c
TL
22782 * This value indicates the source MAC address in
22783 * the Ethernet header.
7c673cae 22784 */
9f95a23c
TL
22785 uint8_t src_macaddr[6];
22786 /* This value indicates the ethertype in the Ethernet header. */
22787 uint16_t ethertype;
7c673cae 22788 /*
9f95a23c
TL
22789 * This value indicates the type of IP address.
22790 * 4 - IPv4
22791 * 6 - IPv6
22792 * All others are invalid.
7c673cae 22793 */
9f95a23c
TL
22794 uint8_t ip_addr_type;
22795 /* invalid */
22796 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_UNKNOWN \
22797 UINT32_C(0x0)
22798 /* IPv4 */
22799 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV4 \
22800 UINT32_C(0x4)
22801 /* IPv6 */
22802 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV6 \
22803 UINT32_C(0x6)
22804 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_LAST \
22805 HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV6
22806 /*
22807 * The value of protocol filed in IP header.
22808 * Applies to UDP and TCP traffic.
22809 * 6 - TCP
22810 * 17 - UDP
22811 */
22812 uint8_t ip_protocol;
22813 /* invalid */
22814 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_UNKNOWN \
22815 UINT32_C(0x0)
22816 /* TCP */
22817 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_TCP \
22818 UINT32_C(0x6)
22819 /* UDP */
22820 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_UDP \
22821 UINT32_C(0x11)
22822 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_LAST \
22823 HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_IP_PROTOCOL_UDP
22824 /*
22825 * If set, this value shall represent the
22826 * Logical VNIC ID of the destination VNIC for the RX
22827 * path and network port id of the destination port for
22828 * the TX path.
22829 */
22830 uint16_t dst_id;
22831 /*
22832 * Logical VNIC ID of the VNIC where traffic is
22833 * mirrored.
22834 */
22835 uint16_t mirror_vnic_id;
22836 /*
22837 * This value indicates the tunnel type for this filter.
22838 * If this field is not specified, then the filter shall
22839 * apply to both non-tunneled and tunneled packets.
22840 * If this field conflicts with the tunnel_type specified
22841 * in the l2_filter_id, then the HWRM shall return an
22842 * error for this command.
22843 */
22844 uint8_t tunnel_type;
22845 /* Non-tunnel */
22846 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \
22847 UINT32_C(0x0)
22848 /* Virtual eXtensible Local Area Network (VXLAN) */
22849 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \
7c673cae 22850 UINT32_C(0x1)
9f95a23c
TL
22851 /* Network Virtualization Generic Routing Encapsulation (NVGRE) */
22852 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \
7c673cae 22853 UINT32_C(0x2)
9f95a23c
TL
22854 /* Generic Routing Encapsulation (GRE) inside Ethernet payload */
22855 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \
22856 UINT32_C(0x3)
22857 /* IP in IP */
22858 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPIP \
7c673cae 22859 UINT32_C(0x4)
9f95a23c
TL
22860 /* Generic Network Virtualization Encapsulation (Geneve) */
22861 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \
22862 UINT32_C(0x5)
22863 /* Multi-Protocol Lable Switching (MPLS) */
22864 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_MPLS \
22865 UINT32_C(0x6)
22866 /* Stateless Transport Tunnel (STT) */
22867 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_STT \
22868 UINT32_C(0x7)
22869 /* Generic Routing Encapsulation (GRE) inside IP datagram payload */
22870 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \
22871 UINT32_C(0x8)
22872 /* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
22873 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \
22874 UINT32_C(0x9)
22875 /* Any tunneled traffic */
22876 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \
7c673cae 22877 UINT32_C(0xff)
9f95a23c
TL
22878 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_LAST \
22879 HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL
22880 /*
22881 * This hint is provided to help in placing
22882 * the filter in the filter table.
22883 */
22884 uint8_t pri_hint;
22885 /* No preference */
22886 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_NO_PREFER \
22887 UINT32_C(0x0)
22888 /* Above the given filter */
22889 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_ABOVE \
7c673cae 22890 UINT32_C(0x1)
9f95a23c
TL
22891 /* Below the given filter */
22892 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_BELOW \
7c673cae 22893 UINT32_C(0x2)
9f95a23c
TL
22894 /* As high as possible */
22895 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_HIGHEST \
22896 UINT32_C(0x3)
22897 /* As low as possible */
22898 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_LOWEST \
22899 UINT32_C(0x4)
22900 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_LAST \
22901 HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_PRI_HINT_LOWEST
7c673cae 22902 /*
9f95a23c
TL
22903 * The value of source IP address to be used in filtering.
22904 * For IPv4, first four bytes represent the IP address.
7c673cae 22905 */
9f95a23c 22906 uint32_t src_ipaddr[4];
7c673cae 22907 /*
9f95a23c
TL
22908 * The value of source IP address mask to be used in
22909 * filtering.
22910 * For IPv4, first four bytes represent the IP address mask.
7c673cae 22911 */
9f95a23c 22912 uint32_t src_ipaddr_mask[4];
7c673cae 22913 /*
9f95a23c
TL
22914 * The value of destination IP address to be used in filtering.
22915 * For IPv4, first four bytes represent the IP address.
7c673cae 22916 */
9f95a23c 22917 uint32_t dst_ipaddr[4];
7c673cae 22918 /*
9f95a23c
TL
22919 * The value of destination IP address mask to be used in
22920 * filtering.
22921 * For IPv4, first four bytes represent the IP address mask.
7c673cae 22922 */
9f95a23c 22923 uint32_t dst_ipaddr_mask[4];
7c673cae 22924 /*
9f95a23c
TL
22925 * The value of source port to be used in filtering.
22926 * Applies to UDP and TCP traffic.
7c673cae 22927 */
9f95a23c 22928 uint16_t src_port;
7c673cae 22929 /*
9f95a23c
TL
22930 * The value of source port mask to be used in filtering.
22931 * Applies to UDP and TCP traffic.
7c673cae 22932 */
9f95a23c 22933 uint16_t src_port_mask;
7c673cae 22934 /*
9f95a23c
TL
22935 * The value of destination port to be used in filtering.
22936 * Applies to UDP and TCP traffic.
7c673cae 22937 */
9f95a23c 22938 uint16_t dst_port;
7c673cae 22939 /*
9f95a23c
TL
22940 * The value of destination port mask to be used in
22941 * filtering.
22942 * Applies to UDP and TCP traffic.
7c673cae 22943 */
9f95a23c 22944 uint16_t dst_port_mask;
7c673cae 22945 /*
9f95a23c
TL
22946 * This is the ID of the filter that goes along with
22947 * the pri_hint.
7c673cae 22948 */
9f95a23c
TL
22949 uint64_t ntuple_filter_id_hint;
22950} __attribute__((packed));
22951
22952/* hwrm_cfa_ntuple_filter_alloc_output (size:192b/24B) */
22953struct hwrm_cfa_ntuple_filter_alloc_output {
22954 /* The specific error status for the command. */
22955 uint16_t error_code;
22956 /* The HWRM command request type. */
22957 uint16_t req_type;
22958 /* The sequence ID from the original command. */
22959 uint16_t seq_id;
22960 /* The length of the response data in number of bytes. */
22961 uint16_t resp_len;
22962 /* This value is an opaque id into CFA data structures. */
22963 uint64_t ntuple_filter_id;
22964 /*
22965 * This is the ID of the flow associated with this
22966 * filter.
22967 * This value shall be used to match and associate the
22968 * flow identifier returned in completion records.
22969 * A value of 0xFFFFFFFF shall indicate no flow id.
22970 */
22971 uint32_t flow_id;
22972 uint8_t unused_0[3];
22973 /*
22974 * This field is used in Output records to indicate that the output
22975 * is completely written to RAM. This field should be read as '1'
22976 * to indicate that the output has been completely written.
22977 * When writing a command completion or response to an internal processor,
22978 * the order of writes has to be such that this field is written last.
22979 */
22980 uint8_t valid;
22981} __attribute__((packed));
22982
22983/* hwrm_cfa_ntuple_filter_alloc_cmd_err (size:64b/8B) */
22984struct hwrm_cfa_ntuple_filter_alloc_cmd_err {
22985 /*
22986 * command specific error codes that goes to
22987 * the cmd_err field in Common HWRM Error Response.
22988 */
22989 uint8_t code;
22990 /* Unknown error */
22991 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_CMD_ERR_CODE_UNKNOWN \
7c673cae 22992 UINT32_C(0x0)
9f95a23c
TL
22993 /* Unable to complete operation due to conflict with Rx Mask VLAN */
22994 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_CMD_ERR_CODE_RX_MASK_VLAN_CONFLICT_ERR \
22995 UINT32_C(0x1)
22996 #define HWRM_CFA_NTUPLE_FILTER_ALLOC_CMD_ERR_CODE_LAST \
22997 HWRM_CFA_NTUPLE_FILTER_ALLOC_CMD_ERR_CODE_RX_MASK_VLAN_CONFLICT_ERR
22998 uint8_t unused_0[7];
22999} __attribute__((packed));
23000
23001/*******************************
23002 * hwrm_cfa_ntuple_filter_free *
23003 *******************************/
23004
23005
23006/* hwrm_cfa_ntuple_filter_free_input (size:192b/24B) */
23007struct hwrm_cfa_ntuple_filter_free_input {
23008 /* The HWRM command request type. */
23009 uint16_t req_type;
7c673cae 23010 /*
9f95a23c
TL
23011 * The completion ring to send the completion event on. This should
23012 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 23013 */
9f95a23c 23014 uint16_t cmpl_ring;
7c673cae 23015 /*
9f95a23c
TL
23016 * The sequence ID is used by the driver for tracking multiple
23017 * commands. This ID is treated as opaque data by the firmware and
23018 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 23019 */
9f95a23c 23020 uint16_t seq_id;
7c673cae 23021 /*
9f95a23c
TL
23022 * The target ID of the command:
23023 * * 0x0-0xFFF8 - The function ID
23024 * * 0xFFF8-0xFFFE - Reserved for internal processors
23025 * * 0xFFFF - HWRM
7c673cae 23026 */
9f95a23c 23027 uint16_t target_id;
7c673cae 23028 /*
9f95a23c
TL
23029 * A physical address pointer pointing to a host buffer that the
23030 * command's response data will be written. This can be either a host
23031 * physical address (HPA) or a guest physical address (GPA) and must
23032 * point to a physically contiguous block of memory.
7c673cae 23033 */
9f95a23c
TL
23034 uint64_t resp_addr;
23035 /* This value is an opaque id into CFA data structures. */
23036 uint64_t ntuple_filter_id;
23037} __attribute__((packed));
23038
23039/* hwrm_cfa_ntuple_filter_free_output (size:128b/16B) */
23040struct hwrm_cfa_ntuple_filter_free_output {
23041 /* The specific error status for the command. */
23042 uint16_t error_code;
23043 /* The HWRM command request type. */
23044 uint16_t req_type;
23045 /* The sequence ID from the original command. */
23046 uint16_t seq_id;
23047 /* The length of the response data in number of bytes. */
23048 uint16_t resp_len;
23049 uint8_t unused_0[7];
23050 /*
23051 * This field is used in Output records to indicate that the output
23052 * is completely written to RAM. This field should be read as '1'
23053 * to indicate that the output has been completely written.
23054 * When writing a command completion or response to an internal processor,
23055 * the order of writes has to be such that this field is written last.
23056 */
23057 uint8_t valid;
23058} __attribute__((packed));
23059
23060/******************************
23061 * hwrm_cfa_ntuple_filter_cfg *
23062 ******************************/
23063
23064
23065/* hwrm_cfa_ntuple_filter_cfg_input (size:384b/48B) */
23066struct hwrm_cfa_ntuple_filter_cfg_input {
23067 /* The HWRM command request type. */
23068 uint16_t req_type;
7c673cae 23069 /*
9f95a23c
TL
23070 * The completion ring to send the completion event on. This should
23071 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 23072 */
9f95a23c 23073 uint16_t cmpl_ring;
7c673cae 23074 /*
9f95a23c
TL
23075 * The sequence ID is used by the driver for tracking multiple
23076 * commands. This ID is treated as opaque data by the firmware and
23077 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 23078 */
9f95a23c
TL
23079 uint16_t seq_id;
23080 /*
23081 * The target ID of the command:
23082 * * 0x0-0xFFF8 - The function ID
23083 * * 0xFFF8-0xFFFE - Reserved for internal processors
23084 * * 0xFFFF - HWRM
23085 */
23086 uint16_t target_id;
23087 /*
23088 * A physical address pointer pointing to a host buffer that the
23089 * command's response data will be written. This can be either a host
23090 * physical address (HPA) or a guest physical address (GPA) and must
23091 * point to a physically contiguous block of memory.
23092 */
23093 uint64_t resp_addr;
23094 uint32_t enables;
23095 /*
23096 * This bit must be '1' for the new_dst_id field to be
23097 * configured.
23098 */
23099 #define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_ENABLES_NEW_DST_ID \
7c673cae 23100 UINT32_C(0x1)
9f95a23c
TL
23101 /*
23102 * This bit must be '1' for the new_mirror_vnic_id field to be
23103 * configured.
23104 */
23105 #define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_ENABLES_NEW_MIRROR_VNIC_ID \
7c673cae 23106 UINT32_C(0x2)
9f95a23c
TL
23107 /*
23108 * This bit must be '1' for the new_meter_instance_id field to be
23109 * configured.
23110 */
23111 #define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_ENABLES_NEW_METER_INSTANCE_ID \
7c673cae 23112 UINT32_C(0x4)
9f95a23c
TL
23113 uint8_t unused_0[4];
23114 /* This value is an opaque id into CFA data structures. */
23115 uint64_t ntuple_filter_id;
7c673cae 23116 /*
9f95a23c
TL
23117 * If set, this value shall represent the new
23118 * Logical VNIC ID of the destination VNIC for the RX
23119 * path and new network port id of the destination port for
23120 * the TX path.
7c673cae 23121 */
9f95a23c 23122 uint32_t new_dst_id;
7c673cae 23123 /*
9f95a23c
TL
23124 * New Logical VNIC ID of the VNIC where traffic is
23125 * mirrored.
7c673cae 23126 */
9f95a23c 23127 uint32_t new_mirror_vnic_id;
7c673cae 23128 /*
9f95a23c
TL
23129 * New meter to attach to the flow. Specifying the
23130 * invalid instance ID is used to remove any existing
23131 * meter from the flow.
7c673cae 23132 */
9f95a23c 23133 uint16_t new_meter_instance_id;
7c673cae 23134 /*
9f95a23c
TL
23135 * A value of 0xfff is considered invalid and implies the
23136 * instance is not configured.
7c673cae 23137 */
9f95a23c
TL
23138 #define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_NEW_METER_INSTANCE_ID_INVALID \
23139 UINT32_C(0xffff)
23140 #define HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_NEW_METER_INSTANCE_ID_LAST \
23141 HWRM_CFA_NTUPLE_FILTER_CFG_INPUT_NEW_METER_INSTANCE_ID_INVALID
23142 uint8_t unused_1[6];
23143} __attribute__((packed));
23144
23145/* hwrm_cfa_ntuple_filter_cfg_output (size:128b/16B) */
23146struct hwrm_cfa_ntuple_filter_cfg_output {
23147 /* The specific error status for the command. */
23148 uint16_t error_code;
23149 /* The HWRM command request type. */
23150 uint16_t req_type;
23151 /* The sequence ID from the original command. */
23152 uint16_t seq_id;
23153 /* The length of the response data in number of bytes. */
23154 uint16_t resp_len;
23155 uint8_t unused_0[7];
23156 /*
23157 * This field is used in Output records to indicate that the output
23158 * is completely written to RAM. This field should be read as '1'
23159 * to indicate that the output has been completely written.
23160 * When writing a command completion or response to an internal processor,
23161 * the order of writes has to be such that this field is written last.
23162 */
23163 uint8_t valid;
23164} __attribute__((packed));
23165
23166/**************************
23167 * hwrm_cfa_em_flow_alloc *
23168 **************************/
23169
23170
23171/* hwrm_cfa_em_flow_alloc_input (size:896b/112B) */
23172struct hwrm_cfa_em_flow_alloc_input {
23173 /* The HWRM command request type. */
23174 uint16_t req_type;
7c673cae 23175 /*
9f95a23c
TL
23176 * The completion ring to send the completion event on. This should
23177 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 23178 */
9f95a23c 23179 uint16_t cmpl_ring;
7c673cae 23180 /*
9f95a23c
TL
23181 * The sequence ID is used by the driver for tracking multiple
23182 * commands. This ID is treated as opaque data by the firmware and
23183 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 23184 */
9f95a23c 23185 uint16_t seq_id;
7c673cae 23186 /*
9f95a23c
TL
23187 * The target ID of the command:
23188 * * 0x0-0xFFF8 - The function ID
23189 * * 0xFFF8-0xFFFE - Reserved for internal processors
23190 * * 0xFFFF - HWRM
7c673cae 23191 */
9f95a23c 23192 uint16_t target_id;
7c673cae 23193 /*
9f95a23c
TL
23194 * A physical address pointer pointing to a host buffer that the
23195 * command's response data will be written. This can be either a host
23196 * physical address (HPA) or a guest physical address (GPA) and must
23197 * point to a physically contiguous block of memory.
7c673cae 23198 */
9f95a23c
TL
23199 uint64_t resp_addr;
23200 uint32_t flags;
7c673cae 23201 /*
9f95a23c
TL
23202 * Enumeration denoting the RX, TX type of the resource.
23203 * This enumeration is used for resources that are similar for both
23204 * TX and RX paths of the chip.
7c673cae 23205 */
9f95a23c
TL
23206 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH UINT32_C(0x1)
23207 /* tx path */
23208 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH_TX UINT32_C(0x0)
23209 /* rx path */
23210 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH_RX UINT32_C(0x1)
23211 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH_LAST \
23212 HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PATH_RX
7c673cae 23213 /*
9f95a23c
TL
23214 * Setting of this flag indicates enabling of a byte counter for a given
23215 * flow.
7c673cae 23216 */
9f95a23c 23217 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_BYTE_CTR UINT32_C(0x2)
7c673cae 23218 /*
9f95a23c
TL
23219 * Setting of this flag indicates enabling of a packet counter for a given
23220 * flow.
7c673cae 23221 */
9f95a23c
TL
23222 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_PKT_CTR UINT32_C(0x4)
23223 /* Setting of this flag indicates de-capsulation action for the given flow. */
23224 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_DECAP UINT32_C(0x8)
23225 /* Setting of this flag indicates encapsulation action for the given flow. */
23226 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_ENCAP UINT32_C(0x10)
7c673cae 23227 /*
9f95a23c
TL
23228 * Setting of this flag indicates drop action. If this flag is not set,
23229 * then it should be considered accept action.
7c673cae 23230 */
9f95a23c 23231 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_DROP UINT32_C(0x20)
7c673cae 23232 /*
9f95a23c
TL
23233 * Setting of this flag indicates that a meter is expected to be attached
23234 * to this flow. This hint can be used when choosing the action record
23235 * format required for the flow.
7c673cae 23236 */
9f95a23c
TL
23237 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_FLAGS_METER UINT32_C(0x40)
23238 uint32_t enables;
7c673cae 23239 /*
9f95a23c
TL
23240 * This bit must be '1' for the l2_filter_id field to be
23241 * configured.
7c673cae 23242 */
9f95a23c
TL
23243 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_L2_FILTER_ID \
23244 UINT32_C(0x1)
7c673cae 23245 /*
9f95a23c
TL
23246 * This bit must be '1' for the tunnel_type field to be
23247 * configured.
7c673cae 23248 */
9f95a23c
TL
23249 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_TUNNEL_TYPE \
23250 UINT32_C(0x2)
7c673cae 23251 /*
9f95a23c
TL
23252 * This bit must be '1' for the tunnel_id field to be
23253 * configured.
7c673cae 23254 */
9f95a23c
TL
23255 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_TUNNEL_ID \
23256 UINT32_C(0x4)
7c673cae 23257 /*
9f95a23c
TL
23258 * This bit must be '1' for the src_macaddr field to be
23259 * configured.
7c673cae 23260 */
9f95a23c
TL
23261 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_SRC_MACADDR \
23262 UINT32_C(0x8)
7c673cae 23263 /*
9f95a23c
TL
23264 * This bit must be '1' for the dst_macaddr field to be
23265 * configured.
7c673cae 23266 */
9f95a23c
TL
23267 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_DST_MACADDR \
23268 UINT32_C(0x10)
7c673cae 23269 /*
9f95a23c
TL
23270 * This bit must be '1' for the ovlan_vid field to be
23271 * configured.
7c673cae 23272 */
9f95a23c
TL
23273 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_OVLAN_VID \
23274 UINT32_C(0x20)
7c673cae 23275 /*
9f95a23c
TL
23276 * This bit must be '1' for the ivlan_vid field to be
23277 * configured.
7c673cae 23278 */
9f95a23c
TL
23279 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_IVLAN_VID \
23280 UINT32_C(0x40)
7c673cae 23281 /*
9f95a23c
TL
23282 * This bit must be '1' for the ethertype field to be
23283 * configured.
7c673cae 23284 */
9f95a23c
TL
23285 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_ETHERTYPE \
23286 UINT32_C(0x80)
7c673cae 23287 /*
9f95a23c
TL
23288 * This bit must be '1' for the src_ipaddr field to be
23289 * configured.
7c673cae 23290 */
9f95a23c
TL
23291 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_SRC_IPADDR \
23292 UINT32_C(0x100)
7c673cae 23293 /*
9f95a23c
TL
23294 * This bit must be '1' for the dst_ipaddr field to be
23295 * configured.
23296 */
23297 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_DST_IPADDR \
23298 UINT32_C(0x200)
23299 /*
23300 * This bit must be '1' for the ipaddr_type field to be
23301 * configured.
7c673cae 23302 */
9f95a23c
TL
23303 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_IPADDR_TYPE \
23304 UINT32_C(0x400)
7c673cae 23305 /*
9f95a23c
TL
23306 * This bit must be '1' for the ip_protocol field to be
23307 * configured.
7c673cae 23308 */
9f95a23c
TL
23309 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_IP_PROTOCOL \
23310 UINT32_C(0x800)
7c673cae 23311 /*
9f95a23c
TL
23312 * This bit must be '1' for the src_port field to be
23313 * configured.
7c673cae 23314 */
9f95a23c
TL
23315 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_SRC_PORT \
23316 UINT32_C(0x1000)
7c673cae 23317 /*
9f95a23c
TL
23318 * This bit must be '1' for the dst_port field to be
23319 * configured.
23320 */
23321 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_DST_PORT \
23322 UINT32_C(0x2000)
23323 /*
23324 * This bit must be '1' for the dst_id field to be
23325 * configured.
7c673cae 23326 */
9f95a23c
TL
23327 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_DST_ID \
23328 UINT32_C(0x4000)
7c673cae 23329 /*
9f95a23c
TL
23330 * This bit must be '1' for the mirror_vnic_id field to be
23331 * configured.
7c673cae 23332 */
9f95a23c
TL
23333 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_MIRROR_VNIC_ID \
23334 UINT32_C(0x8000)
7c673cae 23335 /*
9f95a23c
TL
23336 * This bit must be '1' for the encap_record_id field to be
23337 * configured.
7c673cae 23338 */
9f95a23c
TL
23339 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_ENCAP_RECORD_ID \
23340 UINT32_C(0x10000)
7c673cae 23341 /*
9f95a23c
TL
23342 * This bit must be '1' for the meter_instance_id field to be
23343 * configured.
7c673cae 23344 */
9f95a23c
TL
23345 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_ENABLES_METER_INSTANCE_ID \
23346 UINT32_C(0x20000)
7c673cae 23347 /*
9f95a23c
TL
23348 * This value identifies a set of CFA data structures used for an L2
23349 * context.
7c673cae 23350 */
9f95a23c
TL
23351 uint64_t l2_filter_id;
23352 /* Tunnel Type. */
23353 uint8_t tunnel_type;
23354 /* Non-tunnel */
23355 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \
7c673cae 23356 UINT32_C(0x0)
9f95a23c
TL
23357 /* Virtual eXtensible Local Area Network (VXLAN) */
23358 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \
7c673cae 23359 UINT32_C(0x1)
9f95a23c
TL
23360 /* Network Virtualization Generic Routing Encapsulation (NVGRE) */
23361 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \
23362 UINT32_C(0x2)
23363 /* Generic Routing Encapsulation (GRE) inside Ethernet payload */
23364 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \
23365 UINT32_C(0x3)
23366 /* IP in IP */
23367 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_IPIP \
23368 UINT32_C(0x4)
23369 /* Generic Network Virtualization Encapsulation (Geneve) */
23370 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \
23371 UINT32_C(0x5)
23372 /* Multi-Protocol Lable Switching (MPLS) */
23373 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_MPLS \
23374 UINT32_C(0x6)
23375 /* Stateless Transport Tunnel (STT) */
23376 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_STT \
23377 UINT32_C(0x7)
23378 /* Generic Routing Encapsulation (GRE) inside IP datagram payload */
23379 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \
23380 UINT32_C(0x8)
23381 /* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
23382 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \
23383 UINT32_C(0x9)
23384 /* Any tunneled traffic */
23385 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \
23386 UINT32_C(0xff)
23387 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_LAST \
23388 HWRM_CFA_EM_FLOW_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL
23389 uint8_t unused_0[3];
7c673cae 23390 /*
9f95a23c
TL
23391 * Tunnel identifier.
23392 * Virtual Network Identifier (VNI). Only valid with
23393 * tunnel_types VXLAN, NVGRE, and Geneve.
23394 * Only lower 24-bits of VNI field are used
23395 * in setting up the filter.
7c673cae 23396 */
9f95a23c 23397 uint32_t tunnel_id;
7c673cae 23398 /*
9f95a23c
TL
23399 * This value indicates the source MAC address in
23400 * the Ethernet header.
7c673cae 23401 */
9f95a23c
TL
23402 uint8_t src_macaddr[6];
23403 /* The meter instance to attach to the flow. */
23404 uint16_t meter_instance_id;
7c673cae 23405 /*
9f95a23c
TL
23406 * A value of 0xfff is considered invalid and implies the
23407 * instance is not configured.
7c673cae 23408 */
9f95a23c
TL
23409 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_METER_INSTANCE_ID_INVALID \
23410 UINT32_C(0xffff)
23411 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_METER_INSTANCE_ID_LAST \
23412 HWRM_CFA_EM_FLOW_ALLOC_INPUT_METER_INSTANCE_ID_INVALID
7c673cae 23413 /*
9f95a23c
TL
23414 * This value indicates the destination MAC address in
23415 * the Ethernet header.
7c673cae 23416 */
9f95a23c 23417 uint8_t dst_macaddr[6];
7c673cae 23418 /*
9f95a23c
TL
23419 * This value indicates the VLAN ID of the outer VLAN tag
23420 * in the Ethernet header.
7c673cae 23421 */
9f95a23c 23422 uint16_t ovlan_vid;
7c673cae 23423 /*
9f95a23c
TL
23424 * This value indicates the VLAN ID of the inner VLAN tag
23425 * in the Ethernet header.
7c673cae 23426 */
9f95a23c
TL
23427 uint16_t ivlan_vid;
23428 /* This value indicates the ethertype in the Ethernet header. */
23429 uint16_t ethertype;
7c673cae 23430 /*
9f95a23c
TL
23431 * This value indicates the type of IP address.
23432 * 4 - IPv4
23433 * 6 - IPv6
23434 * All others are invalid.
7c673cae 23435 */
9f95a23c
TL
23436 uint8_t ip_addr_type;
23437 /* invalid */
23438 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_UNKNOWN UINT32_C(0x0)
23439 /* IPv4 */
23440 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_IPV4 UINT32_C(0x4)
23441 /* IPv6 */
23442 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_IPV6 UINT32_C(0x6)
23443 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_LAST \
23444 HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_ADDR_TYPE_IPV6
7c673cae 23445 /*
9f95a23c
TL
23446 * The value of protocol filed in IP header.
23447 * Applies to UDP and TCP traffic.
23448 * 6 - TCP
23449 * 17 - UDP
7c673cae 23450 */
9f95a23c
TL
23451 uint8_t ip_protocol;
23452 /* invalid */
23453 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_UNKNOWN UINT32_C(0x0)
23454 /* TCP */
23455 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_TCP UINT32_C(0x6)
23456 /* UDP */
23457 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_UDP UINT32_C(0x11)
23458 #define HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_LAST \
23459 HWRM_CFA_EM_FLOW_ALLOC_INPUT_IP_PROTOCOL_UDP
23460 uint8_t unused_1[2];
7c673cae 23461 /*
9f95a23c
TL
23462 * The value of source IP address to be used in filtering.
23463 * For IPv4, first four bytes represent the IP address.
7c673cae 23464 */
9f95a23c 23465 uint32_t src_ipaddr[4];
7c673cae 23466 /*
9f95a23c
TL
23467 * big_endian = True
23468 * The value of destination IP address to be used in filtering.
23469 * For IPv4, first four bytes represent the IP address.
7c673cae 23470 */
9f95a23c 23471 uint32_t dst_ipaddr[4];
7c673cae 23472 /*
9f95a23c
TL
23473 * The value of source port to be used in filtering.
23474 * Applies to UDP and TCP traffic.
7c673cae 23475 */
9f95a23c 23476 uint16_t src_port;
7c673cae 23477 /*
9f95a23c
TL
23478 * The value of destination port to be used in filtering.
23479 * Applies to UDP and TCP traffic.
7c673cae 23480 */
9f95a23c 23481 uint16_t dst_port;
7c673cae 23482 /*
9f95a23c
TL
23483 * If set, this value shall represent the
23484 * Logical VNIC ID of the destination VNIC for the RX
23485 * path and network port id of the destination port for
23486 * the TX path.
7c673cae 23487 */
9f95a23c 23488 uint16_t dst_id;
7c673cae 23489 /*
9f95a23c
TL
23490 * Logical VNIC ID of the VNIC where traffic is
23491 * mirrored.
7c673cae 23492 */
9f95a23c
TL
23493 uint16_t mirror_vnic_id;
23494 /* Logical ID of the encapsulation record. */
23495 uint32_t encap_record_id;
23496 uint8_t unused_2[4];
7c673cae
FG
23497} __attribute__((packed));
23498
9f95a23c
TL
23499/* hwrm_cfa_em_flow_alloc_output (size:192b/24B) */
23500struct hwrm_cfa_em_flow_alloc_output {
23501 /* The specific error status for the command. */
23502 uint16_t error_code;
23503 /* The HWRM command request type. */
23504 uint16_t req_type;
23505 /* The sequence ID from the original command. */
23506 uint16_t seq_id;
23507 /* The length of the response data in number of bytes. */
23508 uint16_t resp_len;
23509 /* This value is an opaque id into CFA data structures. */
23510 uint64_t em_filter_id;
23511 /*
23512 * This is the ID of the flow associated with this
23513 * filter.
23514 * This value shall be used to match and associate the
23515 * flow identifier returned in completion records.
23516 * A value of 0xFFFFFFFF shall indicate no flow id.
23517 */
23518 uint32_t flow_id;
23519 uint8_t unused_0[3];
23520 /*
23521 * This field is used in Output records to indicate that the output
23522 * is completely written to RAM. This field should be read as '1'
23523 * to indicate that the output has been completely written.
23524 * When writing a command completion or response to an internal processor,
23525 * the order of writes has to be such that this field is written last.
23526 */
23527 uint8_t valid;
23528} __attribute__((packed));
23529
23530/*************************
23531 * hwrm_cfa_em_flow_free *
23532 *************************/
23533
23534
23535/* hwrm_cfa_em_flow_free_input (size:192b/24B) */
23536struct hwrm_cfa_em_flow_free_input {
23537 /* The HWRM command request type. */
23538 uint16_t req_type;
7c673cae 23539 /*
9f95a23c
TL
23540 * The completion ring to send the completion event on. This should
23541 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 23542 */
9f95a23c 23543 uint16_t cmpl_ring;
7c673cae 23544 /*
9f95a23c
TL
23545 * The sequence ID is used by the driver for tracking multiple
23546 * commands. This ID is treated as opaque data by the firmware and
23547 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 23548 */
9f95a23c 23549 uint16_t seq_id;
7c673cae 23550 /*
9f95a23c
TL
23551 * The target ID of the command:
23552 * * 0x0-0xFFF8 - The function ID
23553 * * 0xFFF8-0xFFFE - Reserved for internal processors
23554 * * 0xFFFF - HWRM
7c673cae 23555 */
9f95a23c 23556 uint16_t target_id;
7c673cae 23557 /*
9f95a23c
TL
23558 * A physical address pointer pointing to a host buffer that the
23559 * command's response data will be written. This can be either a host
23560 * physical address (HPA) or a guest physical address (GPA) and must
23561 * point to a physically contiguous block of memory.
7c673cae 23562 */
9f95a23c
TL
23563 uint64_t resp_addr;
23564 /* This value is an opaque id into CFA data structures. */
23565 uint64_t em_filter_id;
7c673cae
FG
23566} __attribute__((packed));
23567
9f95a23c
TL
23568/* hwrm_cfa_em_flow_free_output (size:128b/16B) */
23569struct hwrm_cfa_em_flow_free_output {
23570 /* The specific error status for the command. */
23571 uint16_t error_code;
23572 /* The HWRM command request type. */
23573 uint16_t req_type;
23574 /* The sequence ID from the original command. */
23575 uint16_t seq_id;
23576 /* The length of the response data in number of bytes. */
23577 uint16_t resp_len;
23578 uint8_t unused_0[7];
23579 /*
23580 * This field is used in Output records to indicate that the output
23581 * is completely written to RAM. This field should be read as '1'
23582 * to indicate that the output has been completely written.
23583 * When writing a command completion or response to an internal processor,
23584 * the order of writes has to be such that this field is written last.
23585 */
23586 uint8_t valid;
23587} __attribute__((packed));
23588
23589/*******************************
23590 * hwrm_cfa_decap_filter_alloc *
23591 *******************************/
23592
23593
23594/* hwrm_cfa_decap_filter_alloc_input (size:832b/104B) */
23595struct hwrm_cfa_decap_filter_alloc_input {
23596 /* The HWRM command request type. */
23597 uint16_t req_type;
7c673cae 23598 /*
9f95a23c
TL
23599 * The completion ring to send the completion event on. This should
23600 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 23601 */
9f95a23c 23602 uint16_t cmpl_ring;
7c673cae 23603 /*
9f95a23c
TL
23604 * The sequence ID is used by the driver for tracking multiple
23605 * commands. This ID is treated as opaque data by the firmware and
23606 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 23607 */
9f95a23c 23608 uint16_t seq_id;
7c673cae 23609 /*
9f95a23c
TL
23610 * The target ID of the command:
23611 * * 0x0-0xFFF8 - The function ID
23612 * * 0xFFF8-0xFFFE - Reserved for internal processors
23613 * * 0xFFFF - HWRM
7c673cae 23614 */
9f95a23c 23615 uint16_t target_id;
7c673cae 23616 /*
9f95a23c
TL
23617 * A physical address pointer pointing to a host buffer that the
23618 * command's response data will be written. This can be either a host
23619 * physical address (HPA) or a guest physical address (GPA) and must
23620 * point to a physically contiguous block of memory.
7c673cae 23621 */
9f95a23c
TL
23622 uint64_t resp_addr;
23623 uint32_t flags;
23624 /* ovs_tunnel is 1 b */
23625 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_FLAGS_OVS_TUNNEL \
23626 UINT32_C(0x1)
23627 uint32_t enables;
7c673cae 23628 /*
9f95a23c
TL
23629 * This bit must be '1' for the tunnel_type field to be
23630 * configured.
7c673cae 23631 */
9f95a23c
TL
23632 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_TUNNEL_TYPE \
23633 UINT32_C(0x1)
7c673cae 23634 /*
9f95a23c
TL
23635 * This bit must be '1' for the tunnel_id field to be
23636 * configured.
7c673cae 23637 */
9f95a23c
TL
23638 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_TUNNEL_ID \
23639 UINT32_C(0x2)
7c673cae 23640 /*
9f95a23c
TL
23641 * This bit must be '1' for the src_macaddr field to be
23642 * configured.
7c673cae 23643 */
9f95a23c
TL
23644 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_SRC_MACADDR \
23645 UINT32_C(0x4)
7c673cae 23646 /*
9f95a23c
TL
23647 * This bit must be '1' for the dst_macaddr field to be
23648 * configured.
7c673cae 23649 */
9f95a23c
TL
23650 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_DST_MACADDR \
23651 UINT32_C(0x8)
7c673cae 23652 /*
9f95a23c
TL
23653 * This bit must be '1' for the ovlan_vid field to be
23654 * configured.
7c673cae 23655 */
9f95a23c
TL
23656 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_OVLAN_VID \
23657 UINT32_C(0x10)
7c673cae 23658 /*
9f95a23c
TL
23659 * This bit must be '1' for the ivlan_vid field to be
23660 * configured.
7c673cae 23661 */
9f95a23c
TL
23662 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_IVLAN_VID \
23663 UINT32_C(0x20)
7c673cae 23664 /*
9f95a23c
TL
23665 * This bit must be '1' for the t_ovlan_vid field to be
23666 * configured.
7c673cae 23667 */
9f95a23c
TL
23668 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_T_OVLAN_VID \
23669 UINT32_C(0x40)
7c673cae 23670 /*
9f95a23c
TL
23671 * This bit must be '1' for the t_ivlan_vid field to be
23672 * configured.
7c673cae 23673 */
9f95a23c
TL
23674 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_T_IVLAN_VID \
23675 UINT32_C(0x80)
7c673cae 23676 /*
9f95a23c
TL
23677 * This bit must be '1' for the ethertype field to be
23678 * configured.
7c673cae 23679 */
9f95a23c
TL
23680 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_ETHERTYPE \
23681 UINT32_C(0x100)
7c673cae 23682 /*
9f95a23c
TL
23683 * This bit must be '1' for the src_ipaddr field to be
23684 * configured.
7c673cae 23685 */
9f95a23c
TL
23686 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_SRC_IPADDR \
23687 UINT32_C(0x200)
7c673cae 23688 /*
9f95a23c
TL
23689 * This bit must be '1' for the dst_ipaddr field to be
23690 * configured.
7c673cae 23691 */
9f95a23c
TL
23692 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_DST_IPADDR \
23693 UINT32_C(0x400)
7c673cae 23694 /*
9f95a23c
TL
23695 * This bit must be '1' for the ipaddr_type field to be
23696 * configured.
7c673cae 23697 */
9f95a23c
TL
23698 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_IPADDR_TYPE \
23699 UINT32_C(0x800)
7c673cae 23700 /*
9f95a23c
TL
23701 * This bit must be '1' for the ip_protocol field to be
23702 * configured.
7c673cae 23703 */
9f95a23c
TL
23704 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_IP_PROTOCOL \
23705 UINT32_C(0x1000)
7c673cae 23706 /*
9f95a23c
TL
23707 * This bit must be '1' for the src_port field to be
23708 * configured.
7c673cae 23709 */
9f95a23c
TL
23710 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_SRC_PORT \
23711 UINT32_C(0x2000)
7c673cae 23712 /*
9f95a23c
TL
23713 * This bit must be '1' for the dst_port field to be
23714 * configured.
7c673cae 23715 */
9f95a23c
TL
23716 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_DST_PORT \
23717 UINT32_C(0x4000)
7c673cae 23718 /*
9f95a23c
TL
23719 * This bit must be '1' for the dst_id field to be
23720 * configured.
23721 */
23722 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_DST_ID \
23723 UINT32_C(0x8000)
7c673cae 23724 /*
9f95a23c 23725 * This bit must be '1' for the mirror_vnic_id field to be
7c673cae
FG
23726 * configured.
23727 */
9f95a23c
TL
23728 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_ENABLES_MIRROR_VNIC_ID \
23729 UINT32_C(0x10000)
7c673cae 23730 /*
9f95a23c
TL
23731 * Tunnel identifier.
23732 * Virtual Network Identifier (VNI). Only valid with
23733 * tunnel_types VXLAN, NVGRE, and Geneve.
23734 * Only lower 24-bits of VNI field are used
23735 * in setting up the filter.
7c673cae 23736 */
9f95a23c
TL
23737 uint32_t tunnel_id;
23738 /* Tunnel Type. */
23739 uint8_t tunnel_type;
23740 /* Non-tunnel */
23741 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL \
23742 UINT32_C(0x0)
23743 /* Virtual eXtensible Local Area Network (VXLAN) */
23744 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \
23745 UINT32_C(0x1)
23746 /* Network Virtualization Generic Routing Encapsulation (NVGRE) */
23747 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_NVGRE \
23748 UINT32_C(0x2)
23749 /* Generic Routing Encapsulation (GRE) inside Ethernet payload */
23750 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_L2GRE \
23751 UINT32_C(0x3)
23752 /* IP in IP */
23753 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPIP \
23754 UINT32_C(0x4)
23755 /* Generic Network Virtualization Encapsulation (Geneve) */
23756 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \
23757 UINT32_C(0x5)
23758 /* Multi-Protocol Lable Switching (MPLS) */
23759 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_MPLS \
23760 UINT32_C(0x6)
23761 /* Stateless Transport Tunnel (STT) */
23762 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_STT \
23763 UINT32_C(0x7)
23764 /* Generic Routing Encapsulation (GRE) inside IP datagram payload */
23765 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_IPGRE \
23766 UINT32_C(0x8)
23767 /* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
23768 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \
23769 UINT32_C(0x9)
23770 /* Any tunneled traffic */
23771 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL \
23772 UINT32_C(0xff)
23773 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_LAST \
23774 HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL
23775 uint8_t unused_0;
23776 uint16_t unused_1;
7c673cae 23777 /*
9f95a23c
TL
23778 * This value indicates the source MAC address in
23779 * the Ethernet header.
7c673cae 23780 */
9f95a23c
TL
23781 uint8_t src_macaddr[6];
23782 uint8_t unused_2[2];
7c673cae 23783 /*
9f95a23c
TL
23784 * This value indicates the destination MAC address in
23785 * the Ethernet header.
7c673cae 23786 */
9f95a23c 23787 uint8_t dst_macaddr[6];
7c673cae 23788 /*
9f95a23c
TL
23789 * This value indicates the VLAN ID of the outer VLAN tag
23790 * in the Ethernet header.
7c673cae 23791 */
9f95a23c 23792 uint16_t ovlan_vid;
7c673cae 23793 /*
9f95a23c
TL
23794 * This value indicates the VLAN ID of the inner VLAN tag
23795 * in the Ethernet header.
7c673cae 23796 */
9f95a23c 23797 uint16_t ivlan_vid;
7c673cae 23798 /*
9f95a23c
TL
23799 * This value indicates the VLAN ID of the outer VLAN tag
23800 * in the tunnel Ethernet header.
7c673cae 23801 */
9f95a23c 23802 uint16_t t_ovlan_vid;
7c673cae 23803 /*
9f95a23c
TL
23804 * This value indicates the VLAN ID of the inner VLAN tag
23805 * in the tunnel Ethernet header.
7c673cae 23806 */
9f95a23c
TL
23807 uint16_t t_ivlan_vid;
23808 /* This value indicates the ethertype in the Ethernet header. */
23809 uint16_t ethertype;
7c673cae 23810 /*
9f95a23c
TL
23811 * This value indicates the type of IP address.
23812 * 4 - IPv4
23813 * 6 - IPv6
23814 * All others are invalid.
7c673cae 23815 */
9f95a23c
TL
23816 uint8_t ip_addr_type;
23817 /* invalid */
23818 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_UNKNOWN \
23819 UINT32_C(0x0)
23820 /* IPv4 */
23821 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV4 \
23822 UINT32_C(0x4)
23823 /* IPv6 */
23824 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV6 \
23825 UINT32_C(0x6)
23826 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_LAST \
23827 HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_ADDR_TYPE_IPV6
23828 /*
23829 * The value of protocol filed in IP header.
23830 * Applies to UDP and TCP traffic.
23831 * 6 - TCP
23832 * 17 - UDP
23833 */
23834 uint8_t ip_protocol;
23835 /* invalid */
23836 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_PROTOCOL_UNKNOWN \
23837 UINT32_C(0x0)
23838 /* TCP */
23839 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_PROTOCOL_TCP \
23840 UINT32_C(0x6)
23841 /* UDP */
23842 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_PROTOCOL_UDP \
23843 UINT32_C(0x11)
23844 #define HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_PROTOCOL_LAST \
23845 HWRM_CFA_DECAP_FILTER_ALLOC_INPUT_IP_PROTOCOL_UDP
23846 uint16_t unused_3;
23847 uint32_t unused_4;
7c673cae 23848 /*
9f95a23c
TL
23849 * The value of source IP address to be used in filtering.
23850 * For IPv4, first four bytes represent the IP address.
7c673cae 23851 */
9f95a23c 23852 uint32_t src_ipaddr[4];
7c673cae 23853 /*
9f95a23c
TL
23854 * The value of destination IP address to be used in filtering.
23855 * For IPv4, first four bytes represent the IP address.
7c673cae 23856 */
9f95a23c 23857 uint32_t dst_ipaddr[4];
7c673cae 23858 /*
9f95a23c
TL
23859 * The value of source port to be used in filtering.
23860 * Applies to UDP and TCP traffic.
7c673cae 23861 */
9f95a23c 23862 uint16_t src_port;
7c673cae 23863 /*
9f95a23c
TL
23864 * The value of destination port to be used in filtering.
23865 * Applies to UDP and TCP traffic.
7c673cae 23866 */
9f95a23c 23867 uint16_t dst_port;
7c673cae 23868 /*
9f95a23c
TL
23869 * If set, this value shall represent the
23870 * Logical VNIC ID of the destination VNIC for the RX
23871 * path.
7c673cae 23872 */
9f95a23c 23873 uint16_t dst_id;
7c673cae 23874 /*
9f95a23c
TL
23875 * If set, this value shall represent the L2 context that matches the L2
23876 * information of the decap filter.
7c673cae 23877 */
9f95a23c
TL
23878 uint16_t l2_ctxt_ref_id;
23879} __attribute__((packed));
23880
23881/* hwrm_cfa_decap_filter_alloc_output (size:128b/16B) */
23882struct hwrm_cfa_decap_filter_alloc_output {
23883 /* The specific error status for the command. */
23884 uint16_t error_code;
23885 /* The HWRM command request type. */
23886 uint16_t req_type;
23887 /* The sequence ID from the original command. */
23888 uint16_t seq_id;
23889 /* The length of the response data in number of bytes. */
23890 uint16_t resp_len;
23891 /* This value is an opaque id into CFA data structures. */
23892 uint32_t decap_filter_id;
23893 uint8_t unused_0[3];
23894 /*
23895 * This field is used in Output records to indicate that the output
23896 * is completely written to RAM. This field should be read as '1'
23897 * to indicate that the output has been completely written.
23898 * When writing a command completion or response to an internal processor,
23899 * the order of writes has to be such that this field is written last.
23900 */
23901 uint8_t valid;
23902} __attribute__((packed));
23903
23904/******************************
23905 * hwrm_cfa_decap_filter_free *
23906 ******************************/
23907
23908
23909/* hwrm_cfa_decap_filter_free_input (size:192b/24B) */
23910struct hwrm_cfa_decap_filter_free_input {
23911 /* The HWRM command request type. */
23912 uint16_t req_type;
7c673cae 23913 /*
9f95a23c
TL
23914 * The completion ring to send the completion event on. This should
23915 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 23916 */
9f95a23c 23917 uint16_t cmpl_ring;
7c673cae 23918 /*
9f95a23c
TL
23919 * The sequence ID is used by the driver for tracking multiple
23920 * commands. This ID is treated as opaque data by the firmware and
23921 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 23922 */
9f95a23c 23923 uint16_t seq_id;
7c673cae 23924 /*
9f95a23c
TL
23925 * The target ID of the command:
23926 * * 0x0-0xFFF8 - The function ID
23927 * * 0xFFF8-0xFFFE - Reserved for internal processors
23928 * * 0xFFFF - HWRM
7c673cae 23929 */
9f95a23c 23930 uint16_t target_id;
7c673cae 23931 /*
9f95a23c
TL
23932 * A physical address pointer pointing to a host buffer that the
23933 * command's response data will be written. This can be either a host
23934 * physical address (HPA) or a guest physical address (GPA) and must
23935 * point to a physically contiguous block of memory.
7c673cae 23936 */
9f95a23c
TL
23937 uint64_t resp_addr;
23938 /* This value is an opaque id into CFA data structures. */
23939 uint32_t decap_filter_id;
23940 uint8_t unused_0[4];
7c673cae
FG
23941} __attribute__((packed));
23942
9f95a23c
TL
23943/* hwrm_cfa_decap_filter_free_output (size:128b/16B) */
23944struct hwrm_cfa_decap_filter_free_output {
23945 /* The specific error status for the command. */
23946 uint16_t error_code;
23947 /* The HWRM command request type. */
23948 uint16_t req_type;
23949 /* The sequence ID from the original command. */
23950 uint16_t seq_id;
23951 /* The length of the response data in number of bytes. */
23952 uint16_t resp_len;
23953 uint8_t unused_0[7];
23954 /*
23955 * This field is used in Output records to indicate that the output
23956 * is completely written to RAM. This field should be read as '1'
23957 * to indicate that the output has been completely written.
23958 * When writing a command completion or response to an internal processor,
23959 * the order of writes has to be such that this field is written last.
23960 */
23961 uint8_t valid;
23962} __attribute__((packed));
23963
23964/***********************
23965 * hwrm_cfa_flow_alloc *
23966 ***********************/
23967
23968
23969/* hwrm_cfa_flow_alloc_input (size:1024b/128B) */
23970struct hwrm_cfa_flow_alloc_input {
23971 /* The HWRM command request type. */
23972 uint16_t req_type;
7c673cae 23973 /*
9f95a23c
TL
23974 * The completion ring to send the completion event on. This should
23975 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 23976 */
9f95a23c 23977 uint16_t cmpl_ring;
7c673cae 23978 /*
9f95a23c
TL
23979 * The sequence ID is used by the driver for tracking multiple
23980 * commands. This ID is treated as opaque data by the firmware and
23981 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 23982 */
9f95a23c 23983 uint16_t seq_id;
7c673cae 23984 /*
9f95a23c
TL
23985 * The target ID of the command:
23986 * * 0x0-0xFFF8 - The function ID
23987 * * 0xFFF8-0xFFFE - Reserved for internal processors
23988 * * 0xFFFF - HWRM
7c673cae 23989 */
9f95a23c 23990 uint16_t target_id;
7c673cae 23991 /*
9f95a23c
TL
23992 * A physical address pointer pointing to a host buffer that the
23993 * command's response data will be written. This can be either a host
23994 * physical address (HPA) or a guest physical address (GPA) and must
23995 * point to a physically contiguous block of memory.
7c673cae 23996 */
9f95a23c
TL
23997 uint64_t resp_addr;
23998 uint16_t flags;
23999 /* tunnel is 1 b */
24000 #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_TUNNEL \
24001 UINT32_C(0x1)
24002 /* num_vlan is 2 b */
24003 #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_NUM_VLAN_MASK \
24004 UINT32_C(0x6)
24005 #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_NUM_VLAN_SFT 1
24006 /* no tags */
24007 #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_NUM_VLAN_NONE \
24008 (UINT32_C(0x0) << 1)
24009 /* 1 tag */
24010 #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_NUM_VLAN_ONE \
24011 (UINT32_C(0x1) << 1)
24012 /* 2 tags */
24013 #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_NUM_VLAN_TWO \
24014 (UINT32_C(0x2) << 1)
24015 #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_NUM_VLAN_LAST \
24016 HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_NUM_VLAN_TWO
24017 /* Enumeration denoting the Flow Type. */
24018 #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_FLOWTYPE_MASK \
24019 UINT32_C(0x38)
24020 #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_FLOWTYPE_SFT 3
24021 /* L2 flow */
24022 #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_FLOWTYPE_L2 \
24023 (UINT32_C(0x0) << 3)
24024 /* IPV4 flow */
24025 #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_FLOWTYPE_IPV4 \
24026 (UINT32_C(0x1) << 3)
24027 /* IPV6 flow */
24028 #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_FLOWTYPE_IPV6 \
24029 (UINT32_C(0x2) << 3)
24030 #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_FLOWTYPE_LAST \
24031 HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_FLOWTYPE_IPV6
24032 /*
24033 * when set to 1, indicates TX flow offload for function specified in src_fid and
24034 * the dst_fid should be set to invalid value. To indicate a VM to VM flow, both
24035 * of the path_tx and path_rx flags need to be set. For virtio vSwitch offload
24036 * case, the src_fid and dst_fid is set to the same fid value. For the SRIOV
24037 * vSwitch offload case, the src_fid and dst_fid must be set to the same VF FID
24038 * belong to the children VFs of the same PF to indicate VM to VM flow.
24039 */
24040 #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_PATH_TX \
24041 UINT32_C(0x40)
7c673cae 24042 /*
9f95a23c
TL
24043 * when set to 1, indicates RX flow offload for function specified in dst_fid and
24044 * the src_fid should be set to invalid value.
7c673cae 24045 */
9f95a23c
TL
24046 #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_PATH_RX \
24047 UINT32_C(0x80)
7c673cae 24048 /*
9f95a23c
TL
24049 * Set to 1 to indicate matching of VXLAN VNI from the custom vxlan header is
24050 * required and the VXLAN VNI value is stored in the first 24 bits of the dmac field.
24051 * This flag is only valid when the flow direction is RX.
7c673cae 24052 */
9f95a23c
TL
24053 #define HWRM_CFA_FLOW_ALLOC_INPUT_FLAGS_MATCH_VXLAN_IP_VNI \
24054 UINT32_C(0x100)
7c673cae 24055 /*
9f95a23c
TL
24056 * Tx Flow: vf fid.
24057 * Rx Flow: pf fid.
7c673cae 24058 */
9f95a23c
TL
24059 uint16_t src_fid;
24060 /* Tunnel handle valid when tunnel flag is set. */
24061 uint32_t tunnel_handle;
24062 uint16_t action_flags;
7c673cae 24063 /*
9f95a23c
TL
24064 * Setting of this flag indicates drop action. If this flag is not set,
24065 * then it should be considered accept action.
7c673cae 24066 */
9f95a23c
TL
24067 #define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_FWD \
24068 UINT32_C(0x1)
24069 /* recycle is 1 b */
24070 #define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_RECYCLE \
24071 UINT32_C(0x2)
7c673cae 24072 /*
9f95a23c
TL
24073 * Setting of this flag indicates drop action. If this flag is not set,
24074 * then it should be considered accept action.
7c673cae 24075 */
9f95a23c
TL
24076 #define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_DROP \
24077 UINT32_C(0x4)
24078 /* meter is 1 b */
24079 #define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_METER \
24080 UINT32_C(0x8)
24081 /* tunnel is 1 b */
24082 #define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_TUNNEL \
24083 UINT32_C(0x10)
24084 /* nat_src is 1 b */
24085 #define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_NAT_SRC \
24086 UINT32_C(0x20)
24087 /* nat_dest is 1 b */
24088 #define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_NAT_DEST \
24089 UINT32_C(0x40)
24090 /* nat_ipv4_address is 1 b */
24091 #define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_NAT_IPV4_ADDRESS \
24092 UINT32_C(0x80)
24093 /* l2_header_rewrite is 1 b */
24094 #define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_L2_HEADER_REWRITE \
24095 UINT32_C(0x100)
24096 /* ttl_decrement is 1 b */
24097 #define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_TTL_DECREMENT \
24098 UINT32_C(0x200)
7c673cae 24099 /*
9f95a23c
TL
24100 * If set to 1 and flow direction is TX, it indicates decap of L2 header
24101 * and encap of tunnel header. If set to 1 and flow direction is RX, it
24102 * indicates decap of tunnel header and encap L2 header. The type of tunnel
24103 * is specified in the tunnel_type field.
7c673cae 24104 */
9f95a23c
TL
24105 #define HWRM_CFA_FLOW_ALLOC_INPUT_ACTION_FLAGS_TUNNEL_IP \
24106 UINT32_C(0x400)
24107 /*
24108 * Tx Flow: pf or vf fid.
24109 * Rx Flow: vf fid.
24110 */
24111 uint16_t dst_fid;
24112 /* VLAN tpid, valid when push_vlan flag is set. */
24113 uint16_t l2_rewrite_vlan_tpid;
24114 /* VLAN tci, valid when push_vlan flag is set. */
24115 uint16_t l2_rewrite_vlan_tci;
24116 /* Meter id, valid when meter flag is set. */
24117 uint16_t act_meter_id;
24118 /* Flow with the same l2 context tcam key. */
24119 uint16_t ref_flow_handle;
24120 /* This value sets the match value for the ethertype. */
24121 uint16_t ethertype;
24122 /* valid when num tags is 1 or 2. */
24123 uint16_t outer_vlan_tci;
24124 /* This value sets the match value for the Destination MAC address. */
24125 uint16_t dmac[3];
24126 /* valid when num tags is 2. */
24127 uint16_t inner_vlan_tci;
24128 /* This value sets the match value for the Source MAC address. */
24129 uint16_t smac[3];
24130 /* The bit length of destination IP address mask. */
24131 uint8_t ip_dst_mask_len;
24132 /* The bit length of source IP address mask. */
24133 uint8_t ip_src_mask_len;
24134 /* The value of destination IPv4/IPv6 address. */
24135 uint32_t ip_dst[4];
24136 /* The source IPv4/IPv6 address. */
24137 uint32_t ip_src[4];
24138 /*
24139 * The value of source port.
24140 * Applies to UDP and TCP traffic.
24141 */
24142 uint16_t l4_src_port;
24143 /*
24144 * The value of source port mask.
24145 * Applies to UDP and TCP traffic.
24146 */
24147 uint16_t l4_src_port_mask;
24148 /*
24149 * The value of destination port.
24150 * Applies to UDP and TCP traffic.
24151 */
24152 uint16_t l4_dst_port;
24153 /*
24154 * The value of destination port mask.
24155 * Applies to UDP and TCP traffic.
24156 */
24157 uint16_t l4_dst_port_mask;
24158 /*
24159 * NAT IPv4/6 address based on address type flag.
24160 * 0 values are ignored.
24161 */
24162 uint32_t nat_ip_address[4];
24163 /* L2 header re-write Destination MAC address. */
24164 uint16_t l2_rewrite_dmac[3];
24165 /*
24166 * The NAT source/destination port based on direction flag.
24167 * Applies to UDP and TCP traffic.
24168 * 0 values are ignored.
24169 */
24170 uint16_t nat_port;
24171 /* L2 header re-write Source MAC address. */
24172 uint16_t l2_rewrite_smac[3];
24173 /* The value of ip protocol. */
24174 uint8_t ip_proto;
24175 /* Tunnel Type. */
24176 uint8_t tunnel_type;
24177 /* Non-tunnel */
24178 #define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_NONTUNNEL UINT32_C(0x0)
24179 /* Virtual eXtensible Local Area Network (VXLAN) */
24180 #define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_VXLAN UINT32_C(0x1)
24181 /* Network Virtualization Generic Routing Encapsulation (NVGRE) */
24182 #define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_NVGRE UINT32_C(0x2)
24183 /* Generic Routing Encapsulation (GRE) inside Ethernet payload */
24184 #define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_L2GRE UINT32_C(0x3)
24185 /* IP in IP */
24186 #define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_IPIP UINT32_C(0x4)
24187 /* Generic Network Virtualization Encapsulation (Geneve) */
24188 #define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_GENEVE UINT32_C(0x5)
24189 /* Multi-Protocol Lable Switching (MPLS) */
24190 #define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_MPLS UINT32_C(0x6)
24191 /* Stateless Transport Tunnel (STT) */
24192 #define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_STT UINT32_C(0x7)
24193 /* Generic Routing Encapsulation (GRE) inside IP datagram payload */
24194 #define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_IPGRE UINT32_C(0x8)
24195 /* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
24196 #define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 UINT32_C(0x9)
24197 /* Any tunneled traffic */
24198 #define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL UINT32_C(0xff)
24199 #define HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_LAST \
24200 HWRM_CFA_FLOW_ALLOC_INPUT_TUNNEL_TYPE_ANYTUNNEL
24201} __attribute__((packed));
24202
24203/* hwrm_cfa_flow_alloc_output (size:256b/32B) */
24204struct hwrm_cfa_flow_alloc_output {
24205 /* The specific error status for the command. */
24206 uint16_t error_code;
24207 /* The HWRM command request type. */
24208 uint16_t req_type;
24209 /* The sequence ID from the original command. */
24210 uint16_t seq_id;
24211 /* The length of the response data in number of bytes. */
24212 uint16_t resp_len;
24213 /* Flow record index. */
24214 uint16_t flow_handle;
24215 uint8_t unused_0[2];
24216 /*
24217 * This is the ID of the flow associated with this
24218 * filter.
24219 * This value shall be used to match and associate the
24220 * flow identifier returned in completion records.
24221 * A value of 0xFFFFFFFF shall indicate no flow id.
24222 */
24223 uint32_t flow_id;
24224 /* This value identifies a set of CFA data structures used for a flow. */
24225 uint64_t ext_flow_handle;
24226 uint8_t unused_1[7];
24227 /*
24228 * This field is used in Output records to indicate that the output
24229 * is completely written to RAM. This field should be read as '1'
24230 * to indicate that the output has been completely written.
24231 * When writing a command completion or response to an internal processor,
24232 * the order of writes has to be such that this field is written last.
24233 */
24234 uint8_t valid;
7c673cae
FG
24235} __attribute__((packed));
24236
9f95a23c
TL
24237/**********************
24238 * hwrm_cfa_flow_free *
24239 **********************/
24240
24241
24242/* hwrm_cfa_flow_free_input (size:256b/32B) */
24243struct hwrm_cfa_flow_free_input {
24244 /* The HWRM command request type. */
24245 uint16_t req_type;
7c673cae 24246 /*
9f95a23c
TL
24247 * The completion ring to send the completion event on. This should
24248 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 24249 */
9f95a23c 24250 uint16_t cmpl_ring;
7c673cae 24251 /*
9f95a23c
TL
24252 * The sequence ID is used by the driver for tracking multiple
24253 * commands. This ID is treated as opaque data by the firmware and
24254 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 24255 */
9f95a23c 24256 uint16_t seq_id;
7c673cae 24257 /*
9f95a23c
TL
24258 * The target ID of the command:
24259 * * 0x0-0xFFF8 - The function ID
24260 * * 0xFFF8-0xFFFE - Reserved for internal processors
24261 * * 0xFFFF - HWRM
7c673cae 24262 */
9f95a23c 24263 uint16_t target_id;
7c673cae 24264 /*
9f95a23c
TL
24265 * A physical address pointer pointing to a host buffer that the
24266 * command's response data will be written. This can be either a host
24267 * physical address (HPA) or a guest physical address (GPA) and must
24268 * point to a physically contiguous block of memory.
7c673cae 24269 */
9f95a23c
TL
24270 uint64_t resp_addr;
24271 /* Flow record index. */
24272 uint16_t flow_handle;
24273 uint8_t unused_0[6];
24274 /* This value identifies a set of CFA data structures used for a flow. */
24275 uint64_t ext_flow_handle;
7c673cae
FG
24276} __attribute__((packed));
24277
9f95a23c
TL
24278/* hwrm_cfa_flow_free_output (size:256b/32B) */
24279struct hwrm_cfa_flow_free_output {
24280 /* The specific error status for the command. */
24281 uint16_t error_code;
24282 /* The HWRM command request type. */
24283 uint16_t req_type;
24284 /* The sequence ID from the original command. */
24285 uint16_t seq_id;
24286 /* The length of the response data in number of bytes. */
24287 uint16_t resp_len;
24288 /* packet is 64 b */
24289 uint64_t packet;
24290 /* byte is 64 b */
24291 uint64_t byte;
24292 uint8_t unused_0[7];
24293 /*
24294 * This field is used in Output records to indicate that the output
24295 * is completely written to RAM. This field should be read as '1'
24296 * to indicate that the output has been completely written.
24297 * When writing a command completion or response to an internal processor,
24298 * the order of writes has to be such that this field is written last.
24299 */
24300 uint8_t valid;
24301} __attribute__((packed));
24302
24303/***********************
24304 * hwrm_cfa_flow_flush *
24305 ***********************/
24306
24307
24308/* hwrm_cfa_flow_flush_input (size:192b/24B) */
24309struct hwrm_cfa_flow_flush_input {
24310 /* The HWRM command request type. */
24311 uint16_t req_type;
7c673cae 24312 /*
9f95a23c
TL
24313 * The completion ring to send the completion event on. This should
24314 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 24315 */
9f95a23c 24316 uint16_t cmpl_ring;
7c673cae 24317 /*
9f95a23c
TL
24318 * The sequence ID is used by the driver for tracking multiple
24319 * commands. This ID is treated as opaque data by the firmware and
24320 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 24321 */
9f95a23c 24322 uint16_t seq_id;
7c673cae 24323 /*
9f95a23c
TL
24324 * The target ID of the command:
24325 * * 0x0-0xFFF8 - The function ID
24326 * * 0xFFF8-0xFFFE - Reserved for internal processors
24327 * * 0xFFFF - HWRM
7c673cae 24328 */
9f95a23c 24329 uint16_t target_id;
7c673cae 24330 /*
9f95a23c
TL
24331 * A physical address pointer pointing to a host buffer that the
24332 * command's response data will be written. This can be either a host
24333 * physical address (HPA) or a guest physical address (GPA) and must
24334 * point to a physically contiguous block of memory.
7c673cae 24335 */
9f95a23c
TL
24336 uint64_t resp_addr;
24337 uint32_t flags;
24338 uint8_t unused_0[4];
24339} __attribute__((packed));
24340
24341/* hwrm_cfa_flow_flush_output (size:128b/16B) */
24342struct hwrm_cfa_flow_flush_output {
24343 /* The specific error status for the command. */
24344 uint16_t error_code;
24345 /* The HWRM command request type. */
24346 uint16_t req_type;
24347 /* The sequence ID from the original command. */
24348 uint16_t seq_id;
24349 /* The length of the response data in number of bytes. */
24350 uint16_t resp_len;
24351 uint8_t unused_0[7];
24352 /*
24353 * This field is used in Output records to indicate that the output
24354 * is completely written to RAM. This field should be read as '1'
24355 * to indicate that the output has been completely written.
24356 * When writing a command completion or response to an internal processor,
24357 * the order of writes has to be such that this field is written last.
24358 */
24359 uint8_t valid;
24360} __attribute__((packed));
24361
24362/***********************
24363 * hwrm_cfa_flow_stats *
24364 ***********************/
24365
24366
24367/* hwrm_cfa_flow_stats_input (size:640b/80B) */
24368struct hwrm_cfa_flow_stats_input {
24369 /* The HWRM command request type. */
24370 uint16_t req_type;
24371 /*
24372 * The completion ring to send the completion event on. This should
24373 * be the NQ ID returned from the `nq_alloc` HWRM command.
24374 */
24375 uint16_t cmpl_ring;
24376 /*
24377 * The sequence ID is used by the driver for tracking multiple
24378 * commands. This ID is treated as opaque data by the firmware and
24379 * the value is returned in the `hwrm_resp_hdr` upon completion.
24380 */
24381 uint16_t seq_id;
24382 /*
24383 * The target ID of the command:
24384 * * 0x0-0xFFF8 - The function ID
24385 * * 0xFFF8-0xFFFE - Reserved for internal processors
24386 * * 0xFFFF - HWRM
24387 */
24388 uint16_t target_id;
24389 /*
24390 * A physical address pointer pointing to a host buffer that the
24391 * command's response data will be written. This can be either a host
24392 * physical address (HPA) or a guest physical address (GPA) and must
24393 * point to a physically contiguous block of memory.
24394 */
24395 uint64_t resp_addr;
24396 /* Flow handle. */
24397 uint16_t num_flows;
24398 /* Flow handle. */
24399 uint16_t flow_handle_0;
24400 /* Flow handle. */
24401 uint16_t flow_handle_1;
24402 /* Flow handle. */
24403 uint16_t flow_handle_2;
24404 /* Flow handle. */
24405 uint16_t flow_handle_3;
24406 /* Flow handle. */
24407 uint16_t flow_handle_4;
24408 /* Flow handle. */
24409 uint16_t flow_handle_5;
24410 /* Flow handle. */
24411 uint16_t flow_handle_6;
24412 /* Flow handle. */
24413 uint16_t flow_handle_7;
24414 /* Flow handle. */
24415 uint16_t flow_handle_8;
24416 /* Flow handle. */
24417 uint16_t flow_handle_9;
24418 uint8_t unused_0[2];
24419 /* Flow ID of a flow. */
24420 uint32_t flow_id_0;
24421 /* Flow ID of a flow. */
24422 uint32_t flow_id_1;
24423 /* Flow ID of a flow. */
24424 uint32_t flow_id_2;
24425 /* Flow ID of a flow. */
24426 uint32_t flow_id_3;
24427 /* Flow ID of a flow. */
24428 uint32_t flow_id_4;
24429 /* Flow ID of a flow. */
24430 uint32_t flow_id_5;
24431 /* Flow ID of a flow. */
24432 uint32_t flow_id_6;
24433 /* Flow ID of a flow. */
24434 uint32_t flow_id_7;
24435 /* Flow ID of a flow. */
24436 uint32_t flow_id_8;
24437 /* Flow ID of a flow. */
24438 uint32_t flow_id_9;
24439} __attribute__((packed));
24440
24441/* hwrm_cfa_flow_stats_output (size:1408b/176B) */
24442struct hwrm_cfa_flow_stats_output {
24443 /* The specific error status for the command. */
24444 uint16_t error_code;
24445 /* The HWRM command request type. */
24446 uint16_t req_type;
24447 /* The sequence ID from the original command. */
24448 uint16_t seq_id;
24449 /* The length of the response data in number of bytes. */
24450 uint16_t resp_len;
24451 /* packet_0 is 64 b */
24452 uint64_t packet_0;
24453 /* packet_1 is 64 b */
24454 uint64_t packet_1;
24455 /* packet_2 is 64 b */
24456 uint64_t packet_2;
24457 /* packet_3 is 64 b */
24458 uint64_t packet_3;
24459 /* packet_4 is 64 b */
24460 uint64_t packet_4;
24461 /* packet_5 is 64 b */
24462 uint64_t packet_5;
24463 /* packet_6 is 64 b */
24464 uint64_t packet_6;
24465 /* packet_7 is 64 b */
24466 uint64_t packet_7;
24467 /* packet_8 is 64 b */
24468 uint64_t packet_8;
24469 /* packet_9 is 64 b */
24470 uint64_t packet_9;
24471 /* byte_0 is 64 b */
24472 uint64_t byte_0;
24473 /* byte_1 is 64 b */
24474 uint64_t byte_1;
24475 /* byte_2 is 64 b */
24476 uint64_t byte_2;
24477 /* byte_3 is 64 b */
24478 uint64_t byte_3;
24479 /* byte_4 is 64 b */
24480 uint64_t byte_4;
24481 /* byte_5 is 64 b */
24482 uint64_t byte_5;
24483 /* byte_6 is 64 b */
24484 uint64_t byte_6;
24485 /* byte_7 is 64 b */
24486 uint64_t byte_7;
24487 /* byte_8 is 64 b */
24488 uint64_t byte_8;
24489 /* byte_9 is 64 b */
24490 uint64_t byte_9;
24491 uint8_t unused_0[7];
24492 /*
24493 * This field is used in Output records to indicate that the output
24494 * is completely written to RAM. This field should be read as '1'
24495 * to indicate that the output has been completely written.
24496 * When writing a command completion or response to an internal processor,
24497 * the order of writes has to be such that this field is written last.
24498 */
24499 uint8_t valid;
24500} __attribute__((packed));
24501
24502/**********************
24503 * hwrm_cfa_pair_info *
24504 **********************/
24505
24506
24507/* hwrm_cfa_pair_info_input (size:448b/56B) */
24508struct hwrm_cfa_pair_info_input {
24509 /* The HWRM command request type. */
24510 uint16_t req_type;
24511 /*
24512 * The completion ring to send the completion event on. This should
24513 * be the NQ ID returned from the `nq_alloc` HWRM command.
24514 */
24515 uint16_t cmpl_ring;
24516 /*
24517 * The sequence ID is used by the driver for tracking multiple
24518 * commands. This ID is treated as opaque data by the firmware and
24519 * the value is returned in the `hwrm_resp_hdr` upon completion.
24520 */
24521 uint16_t seq_id;
24522 /*
24523 * The target ID of the command:
24524 * * 0x0-0xFFF8 - The function ID
24525 * * 0xFFF8-0xFFFE - Reserved for internal processors
24526 * * 0xFFFF - HWRM
24527 */
24528 uint16_t target_id;
24529 /*
24530 * A physical address pointer pointing to a host buffer that the
24531 * command's response data will be written. This can be either a host
24532 * physical address (HPA) or a guest physical address (GPA) and must
24533 * point to a physically contiguous block of memory.
24534 */
24535 uint64_t resp_addr;
24536 uint32_t flags;
24537 /* If this flag is set, lookup by name else lookup by index. */
24538 #define HWRM_CFA_PAIR_INFO_INPUT_FLAGS_LOOKUP_TYPE UINT32_C(0x1)
24539 /* If this flag is set, lookup by PF id and VF id. */
24540 #define HWRM_CFA_PAIR_INFO_INPUT_FLAGS_LOOKUP_REPRE UINT32_C(0x2)
24541 /* Pair table index. */
24542 uint16_t pair_index;
24543 /* Pair pf index. */
24544 uint8_t pair_pfid;
24545 /* Pair vf index. */
24546 uint8_t pair_vfid;
24547 /* Pair name (32 byte string). */
24548 char pair_name[32];
24549} __attribute__((packed));
24550
24551/* hwrm_cfa_pair_info_output (size:576b/72B) */
24552struct hwrm_cfa_pair_info_output {
24553 /* The specific error status for the command. */
24554 uint16_t error_code;
24555 /* The HWRM command request type. */
24556 uint16_t req_type;
24557 /* The sequence ID from the original command. */
24558 uint16_t seq_id;
24559 /* The length of the response data in number of bytes. */
24560 uint16_t resp_len;
24561 /* Pair table index. */
24562 uint16_t next_pair_index;
24563 /* Pair member a's fid. */
24564 uint16_t a_fid;
24565 /* Logical host number. */
24566 uint8_t host_a_index;
24567 /* Logical PF number. */
24568 uint8_t pf_a_index;
24569 /* Pair member a's Linux logical VF number. */
24570 uint16_t vf_a_index;
24571 /* Rx CFA code. */
24572 uint16_t rx_cfa_code_a;
24573 /* Tx CFA action. */
24574 uint16_t tx_cfa_action_a;
24575 /* Pair member b's fid. */
24576 uint16_t b_fid;
24577 /* Logical host number. */
24578 uint8_t host_b_index;
24579 /* Logical PF number. */
24580 uint8_t pf_b_index;
24581 /* Pair member a's Linux logical VF number. */
24582 uint16_t vf_b_index;
24583 /* Rx CFA code. */
24584 uint16_t rx_cfa_code_b;
24585 /* Tx CFA action. */
24586 uint16_t tx_cfa_action_b;
24587 /* Pair mode (0-vf2fn, 1-rep2fn, 2-rep2rep, 3-proxy, 4-pfpair). */
24588 uint8_t pair_mode;
24589 /* Pair between VF on local host with PF or VF on specified host. */
24590 #define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_MODE_VF2FN UINT32_C(0x0)
24591 /* Pair between REP on local host with PF or VF on specified host. */
24592 #define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_MODE_REP2FN UINT32_C(0x1)
24593 /* Pair between REP on local host with REP on specified host. */
24594 #define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_MODE_REP2REP UINT32_C(0x2)
24595 /* Pair for the proxy interface. */
24596 #define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_MODE_PROXY UINT32_C(0x3)
24597 /* Pair for the PF interface. */
24598 #define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_MODE_PFPAIR UINT32_C(0x4)
24599 #define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_MODE_LAST \
24600 HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_MODE_PFPAIR
24601 /* Pair state. */
24602 uint8_t pair_state;
24603 /* Pair has been allocated */
24604 #define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_STATE_ALLOCATED UINT32_C(0x1)
24605 /* Both pair members are active */
24606 #define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_STATE_ACTIVE UINT32_C(0x2)
24607 #define HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_STATE_LAST \
24608 HWRM_CFA_PAIR_INFO_OUTPUT_PAIR_STATE_ACTIVE
24609 /* Pair name (32 byte string). */
24610 char pair_name[32];
24611 uint8_t unused_0[7];
24612 /*
24613 * This field is used in Output records to indicate that the output
24614 * is completely written to RAM. This field should be read as '1'
24615 * to indicate that the output has been completely written.
24616 * When writing a command completion or response to an internal processor,
24617 * the order of writes has to be such that this field is written last.
24618 */
24619 uint8_t valid;
24620} __attribute__((packed));
24621
24622/***************************************
24623 * hwrm_cfa_redirect_query_tunnel_type *
24624 ***************************************/
24625
24626
24627/* hwrm_cfa_redirect_query_tunnel_type_input (size:192b/24B) */
24628struct hwrm_cfa_redirect_query_tunnel_type_input {
24629 /* The HWRM command request type. */
24630 uint16_t req_type;
7c673cae 24631 /*
9f95a23c
TL
24632 * The completion ring to send the completion event on. This should
24633 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 24634 */
9f95a23c 24635 uint16_t cmpl_ring;
7c673cae 24636 /*
9f95a23c
TL
24637 * The sequence ID is used by the driver for tracking multiple
24638 * commands. This ID is treated as opaque data by the firmware and
24639 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 24640 */
9f95a23c 24641 uint16_t seq_id;
7c673cae 24642 /*
9f95a23c
TL
24643 * The target ID of the command:
24644 * * 0x0-0xFFF8 - The function ID
24645 * * 0xFFF8-0xFFFE - Reserved for internal processors
24646 * * 0xFFFF - HWRM
7c673cae 24647 */
9f95a23c 24648 uint16_t target_id;
7c673cae 24649 /*
9f95a23c
TL
24650 * A physical address pointer pointing to a host buffer that the
24651 * command's response data will be written. This can be either a host
24652 * physical address (HPA) or a guest physical address (GPA) and must
24653 * point to a physically contiguous block of memory.
7c673cae 24654 */
9f95a23c
TL
24655 uint64_t resp_addr;
24656 /* The source function id. */
24657 uint16_t src_fid;
24658 uint8_t unused_0[6];
24659} __attribute__((packed));
24660
24661/* hwrm_cfa_redirect_query_tunnel_type_output (size:128b/16B) */
24662struct hwrm_cfa_redirect_query_tunnel_type_output {
24663 /* The specific error status for the command. */
24664 uint16_t error_code;
24665 /* The HWRM command request type. */
24666 uint16_t req_type;
24667 /* The sequence ID from the original command. */
24668 uint16_t seq_id;
24669 /* The length of the response data in number of bytes. */
24670 uint16_t resp_len;
24671 /* Tunnel Mask. */
24672 uint32_t tunnel_mask;
24673 /* Non-tunnel */
24674 #define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_NONTUNNEL \
24675 UINT32_C(0x1)
24676 /* Virtual eXtensible Local Area Network (VXLAN) */
24677 #define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_VXLAN \
24678 UINT32_C(0x2)
24679 /* Network Virtualization Generic Routing Encapsulation (NVGRE) */
24680 #define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_NVGRE \
24681 UINT32_C(0x4)
24682 /* Generic Routing Encapsulation (GRE) inside Ethernet payload */
24683 #define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_L2GRE \
24684 UINT32_C(0x8)
24685 /* IP in IP */
24686 #define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_IPIP \
24687 UINT32_C(0x10)
24688 /* Generic Network Virtualization Encapsulation (Geneve) */
24689 #define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_GENEVE \
24690 UINT32_C(0x20)
24691 /* Multi-Protocol Lable Switching (MPLS) */
24692 #define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_MPLS \
24693 UINT32_C(0x40)
24694 /* Stateless Transport Tunnel (STT) */
24695 #define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_STT \
24696 UINT32_C(0x80)
24697 /* Generic Routing Encapsulation (GRE) inside IP datagram payload */
24698 #define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_IPGRE \
24699 UINT32_C(0x100)
24700 /* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
24701 #define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_VXLAN_V4 \
24702 UINT32_C(0x200)
24703 /* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */
24704 #define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_IPGRE_V1 \
24705 UINT32_C(0x400)
24706 /* Any tunneled traffic */
24707 #define HWRM_CFA_REDIRECT_QUERY_TUNNEL_TYPE_OUTPUT_TUNNEL_MASK_ANYTUNNEL \
24708 UINT32_C(0x800)
24709 uint8_t unused_0[3];
7c673cae 24710 /*
9f95a23c
TL
24711 * This field is used in Output records to indicate that the output
24712 * is completely written to RAM. This field should be read as '1'
24713 * to indicate that the output has been completely written.
24714 * When writing a command completion or response to an internal processor,
24715 * the order of writes has to be such that this field is written last.
7c673cae 24716 */
9f95a23c
TL
24717 uint8_t valid;
24718} __attribute__((packed));
24719
24720/******************************
24721 * hwrm_tunnel_dst_port_query *
24722 ******************************/
24723
24724
24725/* hwrm_tunnel_dst_port_query_input (size:192b/24B) */
24726struct hwrm_tunnel_dst_port_query_input {
24727 /* The HWRM command request type. */
24728 uint16_t req_type;
7c673cae 24729 /*
9f95a23c
TL
24730 * The completion ring to send the completion event on. This should
24731 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 24732 */
9f95a23c 24733 uint16_t cmpl_ring;
7c673cae 24734 /*
9f95a23c
TL
24735 * The sequence ID is used by the driver for tracking multiple
24736 * commands. This ID is treated as opaque data by the firmware and
24737 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 24738 */
9f95a23c 24739 uint16_t seq_id;
7c673cae 24740 /*
9f95a23c
TL
24741 * The target ID of the command:
24742 * * 0x0-0xFFF8 - The function ID
24743 * * 0xFFF8-0xFFFE - Reserved for internal processors
24744 * * 0xFFFF - HWRM
7c673cae 24745 */
9f95a23c 24746 uint16_t target_id;
7c673cae 24747 /*
9f95a23c
TL
24748 * A physical address pointer pointing to a host buffer that the
24749 * command's response data will be written. This can be either a host
24750 * physical address (HPA) or a guest physical address (GPA) and must
24751 * point to a physically contiguous block of memory.
7c673cae 24752 */
9f95a23c
TL
24753 uint64_t resp_addr;
24754 /* Tunnel Type. */
24755 uint8_t tunnel_type;
24756 /* Virtual eXtensible Local Area Network (VXLAN) */
24757 #define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_VXLAN \
24758 UINT32_C(0x1)
24759 /* Generic Network Virtualization Encapsulation (Geneve) */
24760 #define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_GENEVE \
24761 UINT32_C(0x5)
24762 /* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
24763 #define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_VXLAN_V4 \
24764 UINT32_C(0x9)
24765 /* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */
24766 #define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_IPGRE_V1 \
24767 UINT32_C(0xa)
24768 #define HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_LAST \
24769 HWRM_TUNNEL_DST_PORT_QUERY_INPUT_TUNNEL_TYPE_IPGRE_V1
24770 uint8_t unused_0[7];
24771} __attribute__((packed));
24772
24773/* hwrm_tunnel_dst_port_query_output (size:128b/16B) */
24774struct hwrm_tunnel_dst_port_query_output {
24775 /* The specific error status for the command. */
24776 uint16_t error_code;
24777 /* The HWRM command request type. */
24778 uint16_t req_type;
24779 /* The sequence ID from the original command. */
24780 uint16_t seq_id;
24781 /* The length of the response data in number of bytes. */
24782 uint16_t resp_len;
24783 /*
24784 * This field represents the identifier of L4 destination port
24785 * used for the given tunnel type. This field is valid for
24786 * specific tunnel types that use layer 4 (e.g. UDP)
24787 * transports for tunneling.
24788 */
24789 uint16_t tunnel_dst_port_id;
24790 /*
24791 * This field represents the value of L4 destination port
24792 * identified by tunnel_dst_port_id. This field is valid for
24793 * specific tunnel types that use layer 4 (e.g. UDP)
24794 * transports for tunneling.
24795 * This field is in network byte order.
24796 *
24797 * A value of 0 means that the destination port is not
24798 * configured.
7c673cae 24799 */
9f95a23c
TL
24800 uint16_t tunnel_dst_port_val;
24801 uint8_t unused_0[3];
7c673cae 24802 /*
9f95a23c
TL
24803 * This field is used in Output records to indicate that the output
24804 * is completely written to RAM. This field should be read as '1'
24805 * to indicate that the output has been completely written.
24806 * When writing a command completion or response to an internal processor,
24807 * the order of writes has to be such that this field is written last.
7c673cae 24808 */
9f95a23c
TL
24809 uint8_t valid;
24810} __attribute__((packed));
24811
24812/******************************
24813 * hwrm_tunnel_dst_port_alloc *
24814 ******************************/
24815
24816
24817/* hwrm_tunnel_dst_port_alloc_input (size:192b/24B) */
24818struct hwrm_tunnel_dst_port_alloc_input {
24819 /* The HWRM command request type. */
24820 uint16_t req_type;
7c673cae 24821 /*
9f95a23c
TL
24822 * The completion ring to send the completion event on. This should
24823 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 24824 */
9f95a23c 24825 uint16_t cmpl_ring;
7c673cae 24826 /*
9f95a23c
TL
24827 * The sequence ID is used by the driver for tracking multiple
24828 * commands. This ID is treated as opaque data by the firmware and
24829 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 24830 */
9f95a23c 24831 uint16_t seq_id;
7c673cae 24832 /*
9f95a23c
TL
24833 * The target ID of the command:
24834 * * 0x0-0xFFF8 - The function ID
24835 * * 0xFFF8-0xFFFE - Reserved for internal processors
24836 * * 0xFFFF - HWRM
7c673cae 24837 */
9f95a23c 24838 uint16_t target_id;
7c673cae 24839 /*
9f95a23c
TL
24840 * A physical address pointer pointing to a host buffer that the
24841 * command's response data will be written. This can be either a host
24842 * physical address (HPA) or a guest physical address (GPA) and must
24843 * point to a physically contiguous block of memory.
7c673cae 24844 */
9f95a23c
TL
24845 uint64_t resp_addr;
24846 /* Tunnel Type. */
24847 uint8_t tunnel_type;
24848 /* Virtual eXtensible Local Area Network (VXLAN) */
24849 #define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_VXLAN \
24850 UINT32_C(0x1)
24851 /* Generic Network Virtualization Encapsulation (Geneve) */
24852 #define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_GENEVE \
24853 UINT32_C(0x5)
24854 /* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
24855 #define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_VXLAN_V4 \
24856 UINT32_C(0x9)
24857 /* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */
24858 #define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_IPGRE_V1 \
24859 UINT32_C(0xa)
24860 #define HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_LAST \
24861 HWRM_TUNNEL_DST_PORT_ALLOC_INPUT_TUNNEL_TYPE_IPGRE_V1
24862 uint8_t unused_0;
24863 /*
24864 * This field represents the value of L4 destination port used
24865 * for the given tunnel type. This field is valid for
24866 * specific tunnel types that use layer 4 (e.g. UDP)
24867 * transports for tunneling.
24868 *
24869 * This field is in network byte order.
24870 *
24871 * A value of 0 shall fail the command.
24872 */
24873 uint16_t tunnel_dst_port_val;
24874 uint8_t unused_1[4];
7c673cae
FG
24875} __attribute__((packed));
24876
9f95a23c
TL
24877/* hwrm_tunnel_dst_port_alloc_output (size:128b/16B) */
24878struct hwrm_tunnel_dst_port_alloc_output {
24879 /* The specific error status for the command. */
24880 uint16_t error_code;
24881 /* The HWRM command request type. */
24882 uint16_t req_type;
24883 /* The sequence ID from the original command. */
24884 uint16_t seq_id;
24885 /* The length of the response data in number of bytes. */
24886 uint16_t resp_len;
24887 /*
24888 * Identifier of a tunnel L4 destination port value. Only applies to tunnel
24889 * types that has l4 destination port parameters.
24890 */
24891 uint16_t tunnel_dst_port_id;
24892 uint8_t unused_0[5];
24893 /*
24894 * This field is used in Output records to indicate that the output
24895 * is completely written to RAM. This field should be read as '1'
24896 * to indicate that the output has been completely written.
24897 * When writing a command completion or response to an internal processor,
24898 * the order of writes has to be such that this field is written last.
24899 */
24900 uint8_t valid;
24901} __attribute__((packed));
24902
24903/*****************************
24904 * hwrm_tunnel_dst_port_free *
24905 *****************************/
24906
24907
24908/* hwrm_tunnel_dst_port_free_input (size:192b/24B) */
24909struct hwrm_tunnel_dst_port_free_input {
24910 /* The HWRM command request type. */
24911 uint16_t req_type;
7c673cae 24912 /*
9f95a23c
TL
24913 * The completion ring to send the completion event on. This should
24914 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 24915 */
9f95a23c 24916 uint16_t cmpl_ring;
7c673cae 24917 /*
9f95a23c
TL
24918 * The sequence ID is used by the driver for tracking multiple
24919 * commands. This ID is treated as opaque data by the firmware and
24920 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 24921 */
9f95a23c 24922 uint16_t seq_id;
7c673cae 24923 /*
9f95a23c
TL
24924 * The target ID of the command:
24925 * * 0x0-0xFFF8 - The function ID
24926 * * 0xFFF8-0xFFFE - Reserved for internal processors
24927 * * 0xFFFF - HWRM
7c673cae 24928 */
9f95a23c 24929 uint16_t target_id;
7c673cae 24930 /*
9f95a23c
TL
24931 * A physical address pointer pointing to a host buffer that the
24932 * command's response data will be written. This can be either a host
24933 * physical address (HPA) or a guest physical address (GPA) and must
24934 * point to a physically contiguous block of memory.
7c673cae 24935 */
9f95a23c
TL
24936 uint64_t resp_addr;
24937 /* Tunnel Type. */
24938 uint8_t tunnel_type;
24939 /* Virtual eXtensible Local Area Network (VXLAN) */
24940 #define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_VXLAN \
24941 UINT32_C(0x1)
24942 /* Generic Network Virtualization Encapsulation (Geneve) */
24943 #define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_GENEVE \
24944 UINT32_C(0x5)
24945 /* IPV4 over virtual eXtensible Local Area Network (IPV4oVXLAN) */
24946 #define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_VXLAN_V4 \
24947 UINT32_C(0x9)
24948 /* Enhance Generic Routing Encapsulation (GRE version 1) inside IP datagram payload */
24949 #define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_IPGRE_V1 \
24950 UINT32_C(0xa)
24951 #define HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_LAST \
24952 HWRM_TUNNEL_DST_PORT_FREE_INPUT_TUNNEL_TYPE_IPGRE_V1
24953 uint8_t unused_0;
24954 /*
24955 * Identifier of a tunnel L4 destination port value. Only applies to tunnel
24956 * types that has l4 destination port parameters.
24957 */
24958 uint16_t tunnel_dst_port_id;
24959 uint8_t unused_1[4];
7c673cae
FG
24960} __attribute__((packed));
24961
9f95a23c
TL
24962/* hwrm_tunnel_dst_port_free_output (size:128b/16B) */
24963struct hwrm_tunnel_dst_port_free_output {
24964 /* The specific error status for the command. */
24965 uint16_t error_code;
24966 /* The HWRM command request type. */
24967 uint16_t req_type;
24968 /* The sequence ID from the original command. */
24969 uint16_t seq_id;
24970 /* The length of the response data in number of bytes. */
24971 uint16_t resp_len;
24972 uint8_t unused_1[7];
24973 /*
24974 * This field is used in Output records to indicate that the output
24975 * is completely written to RAM. This field should be read as '1'
24976 * to indicate that the output has been completely written.
24977 * When writing a command completion or response to an internal processor,
24978 * the order of writes has to be such that this field is written last.
24979 */
24980 uint8_t valid;
24981} __attribute__((packed));
24982
24983/* Periodic statistics context DMA to host. */
24984/* ctx_hw_stats (size:1280b/160B) */
24985struct ctx_hw_stats {
24986 /* Number of received unicast packets */
24987 uint64_t rx_ucast_pkts;
24988 /* Number of received multicast packets */
24989 uint64_t rx_mcast_pkts;
24990 /* Number of received broadcast packets */
24991 uint64_t rx_bcast_pkts;
24992 /* Number of discarded packets on received path */
24993 uint64_t rx_discard_pkts;
24994 /* Number of dropped packets on received path */
24995 uint64_t rx_drop_pkts;
24996 /* Number of received bytes for unicast traffic */
24997 uint64_t rx_ucast_bytes;
24998 /* Number of received bytes for multicast traffic */
24999 uint64_t rx_mcast_bytes;
25000 /* Number of received bytes for broadcast traffic */
25001 uint64_t rx_bcast_bytes;
25002 /* Number of transmitted unicast packets */
25003 uint64_t tx_ucast_pkts;
25004 /* Number of transmitted multicast packets */
25005 uint64_t tx_mcast_pkts;
25006 /* Number of transmitted broadcast packets */
25007 uint64_t tx_bcast_pkts;
25008 /* Number of discarded packets on transmit path */
25009 uint64_t tx_discard_pkts;
25010 /* Number of dropped packets on transmit path */
25011 uint64_t tx_drop_pkts;
25012 /* Number of transmitted bytes for unicast traffic */
25013 uint64_t tx_ucast_bytes;
25014 /* Number of transmitted bytes for multicast traffic */
25015 uint64_t tx_mcast_bytes;
25016 /* Number of transmitted bytes for broadcast traffic */
25017 uint64_t tx_bcast_bytes;
25018 /* Number of TPA packets */
25019 uint64_t tpa_pkts;
25020 /* Number of TPA bytes */
25021 uint64_t tpa_bytes;
25022 /* Number of TPA events */
25023 uint64_t tpa_events;
25024 /* Number of TPA aborts */
25025 uint64_t tpa_aborts;
25026} __attribute__((packed));
25027
25028/***********************
25029 * hwrm_stat_ctx_alloc *
25030 ***********************/
25031
25032
25033/* hwrm_stat_ctx_alloc_input (size:256b/32B) */
25034struct hwrm_stat_ctx_alloc_input {
25035 /* The HWRM command request type. */
25036 uint16_t req_type;
7c673cae 25037 /*
9f95a23c
TL
25038 * The completion ring to send the completion event on. This should
25039 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 25040 */
9f95a23c 25041 uint16_t cmpl_ring;
7c673cae 25042 /*
9f95a23c
TL
25043 * The sequence ID is used by the driver for tracking multiple
25044 * commands. This ID is treated as opaque data by the firmware and
25045 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 25046 */
9f95a23c 25047 uint16_t seq_id;
7c673cae 25048 /*
9f95a23c
TL
25049 * The target ID of the command:
25050 * * 0x0-0xFFF8 - The function ID
25051 * * 0xFFF8-0xFFFE - Reserved for internal processors
25052 * * 0xFFFF - HWRM
7c673cae 25053 */
9f95a23c 25054 uint16_t target_id;
7c673cae 25055 /*
9f95a23c
TL
25056 * A physical address pointer pointing to a host buffer that the
25057 * command's response data will be written. This can be either a host
25058 * physical address (HPA) or a guest physical address (GPA) and must
25059 * point to a physically contiguous block of memory.
7c673cae 25060 */
9f95a23c
TL
25061 uint64_t resp_addr;
25062 /* This is the address for statistic block. */
25063 uint64_t stats_dma_addr;
7c673cae 25064 /*
9f95a23c
TL
25065 * The statistic block update period in ms.
25066 * e.g. 250ms, 500ms, 750ms, 1000ms.
25067 * If update_period_ms is 0, then the stats update
25068 * shall be never done and the DMA address shall not be used.
25069 * In this case, the stat block can only be read by
25070 * hwrm_stat_ctx_query command.
7c673cae 25071 */
9f95a23c 25072 uint32_t update_period_ms;
7c673cae 25073 /*
9f95a23c
TL
25074 * This field is used to specify statistics context specific
25075 * configuration flags.
7c673cae 25076 */
9f95a23c 25077 uint8_t stat_ctx_flags;
7c673cae 25078 /*
9f95a23c
TL
25079 * When this bit is set to '1', the statistics context shall be
25080 * allocated for RoCE traffic only. In this case, traffic other
25081 * than offloaded RoCE traffic shall not be included in this
25082 * statistic context.
25083 * When this bit is set to '0', the statistics context shall be
25084 * used for the network traffic other than offloaded RoCE traffic.
7c673cae 25085 */
9f95a23c
TL
25086 #define HWRM_STAT_CTX_ALLOC_INPUT_STAT_CTX_FLAGS_ROCE UINT32_C(0x1)
25087 uint8_t unused_0[3];
7c673cae
FG
25088} __attribute__((packed));
25089
9f95a23c
TL
25090/* hwrm_stat_ctx_alloc_output (size:128b/16B) */
25091struct hwrm_stat_ctx_alloc_output {
25092 /* The specific error status for the command. */
25093 uint16_t error_code;
25094 /* The HWRM command request type. */
25095 uint16_t req_type;
25096 /* The sequence ID from the original command. */
25097 uint16_t seq_id;
25098 /* The length of the response data in number of bytes. */
25099 uint16_t resp_len;
25100 /* This is the statistics context ID value. */
25101 uint32_t stat_ctx_id;
25102 uint8_t unused_0[3];
7c673cae 25103 /*
9f95a23c
TL
25104 * This field is used in Output records to indicate that the output
25105 * is completely written to RAM. This field should be read as '1'
25106 * to indicate that the output has been completely written.
25107 * When writing a command completion or response to an internal processor,
25108 * the order of writes has to be such that this field is written last.
7c673cae 25109 */
9f95a23c
TL
25110 uint8_t valid;
25111} __attribute__((packed));
25112
25113/**********************
25114 * hwrm_stat_ctx_free *
25115 **********************/
25116
25117
25118/* hwrm_stat_ctx_free_input (size:192b/24B) */
25119struct hwrm_stat_ctx_free_input {
25120 /* The HWRM command request type. */
25121 uint16_t req_type;
7c673cae 25122 /*
9f95a23c
TL
25123 * The completion ring to send the completion event on. This should
25124 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 25125 */
9f95a23c 25126 uint16_t cmpl_ring;
7c673cae 25127 /*
9f95a23c
TL
25128 * The sequence ID is used by the driver for tracking multiple
25129 * commands. This ID is treated as opaque data by the firmware and
25130 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 25131 */
9f95a23c 25132 uint16_t seq_id;
7c673cae 25133 /*
9f95a23c
TL
25134 * The target ID of the command:
25135 * * 0x0-0xFFF8 - The function ID
25136 * * 0xFFF8-0xFFFE - Reserved for internal processors
25137 * * 0xFFFF - HWRM
7c673cae 25138 */
9f95a23c 25139 uint16_t target_id;
7c673cae 25140 /*
9f95a23c
TL
25141 * A physical address pointer pointing to a host buffer that the
25142 * command's response data will be written. This can be either a host
25143 * physical address (HPA) or a guest physical address (GPA) and must
25144 * point to a physically contiguous block of memory.
7c673cae 25145 */
9f95a23c
TL
25146 uint64_t resp_addr;
25147 /* ID of the statistics context that is being queried. */
25148 uint32_t stat_ctx_id;
25149 uint8_t unused_0[4];
25150} __attribute__((packed));
25151
25152/* hwrm_stat_ctx_free_output (size:128b/16B) */
25153struct hwrm_stat_ctx_free_output {
25154 /* The specific error status for the command. */
25155 uint16_t error_code;
25156 /* The HWRM command request type. */
25157 uint16_t req_type;
25158 /* The sequence ID from the original command. */
25159 uint16_t seq_id;
25160 /* The length of the response data in number of bytes. */
25161 uint16_t resp_len;
25162 /* This is the statistics context ID value. */
25163 uint32_t stat_ctx_id;
25164 uint8_t unused_0[3];
7c673cae 25165 /*
9f95a23c
TL
25166 * This field is used in Output records to indicate that the output
25167 * is completely written to RAM. This field should be read as '1'
25168 * to indicate that the output has been completely written.
25169 * When writing a command completion or response to an internal processor,
25170 * the order of writes has to be such that this field is written last.
7c673cae 25171 */
9f95a23c 25172 uint8_t valid;
7c673cae
FG
25173} __attribute__((packed));
25174
9f95a23c
TL
25175/***********************
25176 * hwrm_stat_ctx_query *
25177 ***********************/
25178
25179
25180/* hwrm_stat_ctx_query_input (size:192b/24B) */
25181struct hwrm_stat_ctx_query_input {
25182 /* The HWRM command request type. */
25183 uint16_t req_type;
7c673cae 25184 /*
9f95a23c
TL
25185 * The completion ring to send the completion event on. This should
25186 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 25187 */
9f95a23c 25188 uint16_t cmpl_ring;
7c673cae 25189 /*
9f95a23c
TL
25190 * The sequence ID is used by the driver for tracking multiple
25191 * commands. This ID is treated as opaque data by the firmware and
25192 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 25193 */
9f95a23c 25194 uint16_t seq_id;
7c673cae 25195 /*
9f95a23c
TL
25196 * The target ID of the command:
25197 * * 0x0-0xFFF8 - The function ID
25198 * * 0xFFF8-0xFFFE - Reserved for internal processors
25199 * * 0xFFFF - HWRM
7c673cae 25200 */
9f95a23c 25201 uint16_t target_id;
7c673cae 25202 /*
9f95a23c
TL
25203 * A physical address pointer pointing to a host buffer that the
25204 * command's response data will be written. This can be either a host
25205 * physical address (HPA) or a guest physical address (GPA) and must
25206 * point to a physically contiguous block of memory.
7c673cae 25207 */
9f95a23c
TL
25208 uint64_t resp_addr;
25209 /* ID of the statistics context that is being queried. */
25210 uint32_t stat_ctx_id;
25211 uint8_t unused_0[4];
7c673cae
FG
25212} __attribute__((packed));
25213
9f95a23c
TL
25214/* hwrm_stat_ctx_query_output (size:1408b/176B) */
25215struct hwrm_stat_ctx_query_output {
25216 /* The specific error status for the command. */
25217 uint16_t error_code;
25218 /* The HWRM command request type. */
25219 uint16_t req_type;
25220 /* The sequence ID from the original command. */
25221 uint16_t seq_id;
25222 /* The length of the response data in number of bytes. */
25223 uint16_t resp_len;
25224 /* Number of transmitted unicast packets */
25225 uint64_t tx_ucast_pkts;
25226 /* Number of transmitted multicast packets */
25227 uint64_t tx_mcast_pkts;
25228 /* Number of transmitted broadcast packets */
25229 uint64_t tx_bcast_pkts;
25230 /* Number of transmitted packets with error */
25231 uint64_t tx_err_pkts;
25232 /* Number of dropped packets on transmit path */
25233 uint64_t tx_drop_pkts;
25234 /* Number of transmitted bytes for unicast traffic */
25235 uint64_t tx_ucast_bytes;
25236 /* Number of transmitted bytes for multicast traffic */
25237 uint64_t tx_mcast_bytes;
25238 /* Number of transmitted bytes for broadcast traffic */
25239 uint64_t tx_bcast_bytes;
25240 /* Number of received unicast packets */
25241 uint64_t rx_ucast_pkts;
25242 /* Number of received multicast packets */
25243 uint64_t rx_mcast_pkts;
25244 /* Number of received broadcast packets */
25245 uint64_t rx_bcast_pkts;
25246 /* Number of received packets with error */
25247 uint64_t rx_err_pkts;
25248 /* Number of dropped packets on received path */
25249 uint64_t rx_drop_pkts;
25250 /* Number of received bytes for unicast traffic */
25251 uint64_t rx_ucast_bytes;
25252 /* Number of received bytes for multicast traffic */
25253 uint64_t rx_mcast_bytes;
25254 /* Number of received bytes for broadcast traffic */
25255 uint64_t rx_bcast_bytes;
25256 /* Number of aggregated unicast packets */
25257 uint64_t rx_agg_pkts;
25258 /* Number of aggregated unicast bytes */
25259 uint64_t rx_agg_bytes;
25260 /* Number of aggregation events */
25261 uint64_t rx_agg_events;
25262 /* Number of aborted aggregations */
25263 uint64_t rx_agg_aborts;
25264 uint8_t unused_0[7];
25265 /*
25266 * This field is used in Output records to indicate that the output
25267 * is completely written to RAM. This field should be read as '1'
25268 * to indicate that the output has been completely written.
25269 * When writing a command completion or response to an internal processor,
25270 * the order of writes has to be such that this field is written last.
25271 */
25272 uint8_t valid;
25273} __attribute__((packed));
25274
25275/***************************
25276 * hwrm_stat_ctx_clr_stats *
25277 ***************************/
25278
25279
25280/* hwrm_stat_ctx_clr_stats_input (size:192b/24B) */
25281struct hwrm_stat_ctx_clr_stats_input {
25282 /* The HWRM command request type. */
25283 uint16_t req_type;
7c673cae 25284 /*
9f95a23c
TL
25285 * The completion ring to send the completion event on. This should
25286 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 25287 */
9f95a23c 25288 uint16_t cmpl_ring;
7c673cae 25289 /*
9f95a23c
TL
25290 * The sequence ID is used by the driver for tracking multiple
25291 * commands. This ID is treated as opaque data by the firmware and
25292 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 25293 */
9f95a23c 25294 uint16_t seq_id;
7c673cae 25295 /*
9f95a23c
TL
25296 * The target ID of the command:
25297 * * 0x0-0xFFF8 - The function ID
25298 * * 0xFFF8-0xFFFE - Reserved for internal processors
25299 * * 0xFFFF - HWRM
7c673cae 25300 */
9f95a23c 25301 uint16_t target_id;
7c673cae 25302 /*
9f95a23c
TL
25303 * A physical address pointer pointing to a host buffer that the
25304 * command's response data will be written. This can be either a host
25305 * physical address (HPA) or a guest physical address (GPA) and must
25306 * point to a physically contiguous block of memory.
7c673cae 25307 */
9f95a23c
TL
25308 uint64_t resp_addr;
25309 /* ID of the statistics context that is being queried. */
25310 uint32_t stat_ctx_id;
25311 uint8_t unused_0[4];
7c673cae
FG
25312} __attribute__((packed));
25313
9f95a23c
TL
25314/* hwrm_stat_ctx_clr_stats_output (size:128b/16B) */
25315struct hwrm_stat_ctx_clr_stats_output {
25316 /* The specific error status for the command. */
25317 uint16_t error_code;
25318 /* The HWRM command request type. */
25319 uint16_t req_type;
25320 /* The sequence ID from the original command. */
25321 uint16_t seq_id;
25322 /* The length of the response data in number of bytes. */
25323 uint16_t resp_len;
25324 uint8_t unused_0[7];
25325 /*
25326 * This field is used in Output records to indicate that the output
25327 * is completely written to RAM. This field should be read as '1'
25328 * to indicate that the output has been completely written.
25329 * When writing a command completion or response to an internal processor,
25330 * the order of writes has to be such that this field is written last.
25331 */
25332 uint8_t valid;
25333} __attribute__((packed));
25334
25335/********************
25336 * hwrm_pcie_qstats *
25337 ********************/
25338
25339
25340/* hwrm_pcie_qstats_input (size:256b/32B) */
25341struct hwrm_pcie_qstats_input {
25342 /* The HWRM command request type. */
25343 uint16_t req_type;
7c673cae 25344 /*
9f95a23c
TL
25345 * The completion ring to send the completion event on. This should
25346 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 25347 */
9f95a23c 25348 uint16_t cmpl_ring;
7c673cae 25349 /*
9f95a23c
TL
25350 * The sequence ID is used by the driver for tracking multiple
25351 * commands. This ID is treated as opaque data by the firmware and
25352 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 25353 */
9f95a23c 25354 uint16_t seq_id;
7c673cae 25355 /*
9f95a23c
TL
25356 * The target ID of the command:
25357 * * 0x0-0xFFF8 - The function ID
25358 * * 0xFFF8-0xFFFE - Reserved for internal processors
25359 * * 0xFFFF - HWRM
7c673cae 25360 */
9f95a23c
TL
25361 uint16_t target_id;
25362 /*
25363 * A physical address pointer pointing to a host buffer that the
25364 * command's response data will be written. This can be either a host
25365 * physical address (HPA) or a guest physical address (GPA) and must
25366 * point to a physically contiguous block of memory.
25367 */
25368 uint64_t resp_addr;
25369 /*
25370 * The size of PCIe statistics block in bytes.
25371 * Firmware will DMA the PCIe statistics to
25372 * the host with this field size in the response.
25373 */
25374 uint16_t pcie_stat_size;
25375 uint8_t unused_0[6];
25376 /*
25377 * This is the host address where
25378 * PCIe statistics will be stored
25379 */
25380 uint64_t pcie_stat_host_addr;
7c673cae
FG
25381} __attribute__((packed));
25382
9f95a23c
TL
25383/* hwrm_pcie_qstats_output (size:128b/16B) */
25384struct hwrm_pcie_qstats_output {
25385 /* The specific error status for the command. */
25386 uint16_t error_code;
25387 /* The HWRM command request type. */
25388 uint16_t req_type;
25389 /* The sequence ID from the original command. */
25390 uint16_t seq_id;
25391 /* The length of the response data in number of bytes. */
25392 uint16_t resp_len;
25393 /* The size of PCIe statistics block in bytes. */
25394 uint16_t pcie_stat_size;
25395 uint8_t unused_0[5];
25396 /*
25397 * This field is used in Output records to indicate that the output
25398 * is completely written to RAM. This field should be read as '1'
25399 * to indicate that the output has been completely written.
25400 * When writing a command completion or response to an internal processor,
25401 * the order of writes has to be such that this field is written last.
25402 */
25403 uint8_t valid;
25404} __attribute__((packed));
25405
25406/* PCIe Statistics Formats */
25407/* pcie_ctx_hw_stats (size:768b/96B) */
25408struct pcie_ctx_hw_stats {
25409 /* Number of physical layer receiver errors */
25410 uint64_t pcie_pl_signal_integrity;
25411 /* Number of DLLP CRC errors detected by Data Link Layer */
25412 uint64_t pcie_dl_signal_integrity;
25413 /*
25414 * Number of TLP LCRC and sequence number errors detected
25415 * by Data Link Layer
25416 */
25417 uint64_t pcie_tl_signal_integrity;
25418 /* Number of times LTSSM entered Recovery state */
25419 uint64_t pcie_link_integrity;
25420 /* Number of TLP bytes that have been trasmitted */
25421 uint64_t pcie_tx_traffic_rate;
25422 /* Number of TLP bytes that have been received */
25423 uint64_t pcie_rx_traffic_rate;
25424 /* Number of DLLP bytes that have been trasmitted */
25425 uint64_t pcie_tx_dllp_statistics;
25426 /* Number of DLLP bytes that have been received */
25427 uint64_t pcie_rx_dllp_statistics;
25428 /*
25429 * Number of times spent in each phase of gen3
25430 * equalization
25431 */
25432 uint64_t pcie_equalization_time;
25433 /* Records the last 16 transitions of the LTSSM */
25434 uint32_t pcie_ltssm_histogram[4];
25435 /*
25436 * Record the last 8 reasons on why LTSSM transitioned
25437 * to Recovery
25438 */
25439 uint64_t pcie_recovery_histogram;
25440} __attribute__((packed));
25441
25442/**********************
25443 * hwrm_exec_fwd_resp *
25444 **********************/
25445
25446
25447/* hwrm_exec_fwd_resp_input (size:1024b/128B) */
25448struct hwrm_exec_fwd_resp_input {
25449 /* The HWRM command request type. */
25450 uint16_t req_type;
7c673cae 25451 /*
9f95a23c
TL
25452 * The completion ring to send the completion event on. This should
25453 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 25454 */
9f95a23c 25455 uint16_t cmpl_ring;
7c673cae 25456 /*
9f95a23c
TL
25457 * The sequence ID is used by the driver for tracking multiple
25458 * commands. This ID is treated as opaque data by the firmware and
25459 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 25460 */
9f95a23c 25461 uint16_t seq_id;
7c673cae 25462 /*
9f95a23c
TL
25463 * The target ID of the command:
25464 * * 0x0-0xFFF8 - The function ID
25465 * * 0xFFF8-0xFFFE - Reserved for internal processors
25466 * * 0xFFFF - HWRM
7c673cae 25467 */
9f95a23c 25468 uint16_t target_id;
7c673cae 25469 /*
9f95a23c
TL
25470 * A physical address pointer pointing to a host buffer that the
25471 * command's response data will be written. This can be either a host
25472 * physical address (HPA) or a guest physical address (GPA) and must
25473 * point to a physically contiguous block of memory.
7c673cae 25474 */
9f95a23c 25475 uint64_t resp_addr;
7c673cae 25476 /*
9f95a23c
TL
25477 * This is an encapsulated request. This request should
25478 * be executed by the HWRM and the response should be
25479 * provided in the response buffer inside the encapsulated
25480 * request.
7c673cae 25481 */
9f95a23c 25482 uint32_t encap_request[26];
7c673cae 25483 /*
9f95a23c
TL
25484 * This value indicates the target id of the response to
25485 * the encapsulated request.
25486 * 0x0 - 0xFFF8 - Used for function ids
25487 * 0xFFF8 - 0xFFFE - Reserved for internal processors
25488 * 0xFFFF - HWRM
7c673cae 25489 */
9f95a23c
TL
25490 uint16_t encap_resp_target_id;
25491 uint8_t unused_0[6];
25492} __attribute__((packed));
25493
25494/* hwrm_exec_fwd_resp_output (size:128b/16B) */
25495struct hwrm_exec_fwd_resp_output {
25496 /* The specific error status for the command. */
25497 uint16_t error_code;
25498 /* The HWRM command request type. */
25499 uint16_t req_type;
25500 /* The sequence ID from the original command. */
25501 uint16_t seq_id;
25502 /* The length of the response data in number of bytes. */
25503 uint16_t resp_len;
25504 uint8_t unused_0[7];
25505 /*
25506 * This field is used in Output records to indicate that the output
25507 * is completely written to RAM. This field should be read as '1'
25508 * to indicate that the output has been completely written.
25509 * When writing a command completion or response to an internal processor,
25510 * the order of writes has to be such that this field is written last.
25511 */
25512 uint8_t valid;
25513} __attribute__((packed));
25514
25515/************************
25516 * hwrm_reject_fwd_resp *
25517 ************************/
25518
25519
25520/* hwrm_reject_fwd_resp_input (size:1024b/128B) */
25521struct hwrm_reject_fwd_resp_input {
25522 /* The HWRM command request type. */
25523 uint16_t req_type;
7c673cae 25524 /*
9f95a23c
TL
25525 * The completion ring to send the completion event on. This should
25526 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 25527 */
9f95a23c 25528 uint16_t cmpl_ring;
7c673cae 25529 /*
9f95a23c
TL
25530 * The sequence ID is used by the driver for tracking multiple
25531 * commands. This ID is treated as opaque data by the firmware and
25532 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 25533 */
9f95a23c 25534 uint16_t seq_id;
7c673cae 25535 /*
9f95a23c
TL
25536 * The target ID of the command:
25537 * * 0x0-0xFFF8 - The function ID
25538 * * 0xFFF8-0xFFFE - Reserved for internal processors
25539 * * 0xFFFF - HWRM
7c673cae 25540 */
9f95a23c 25541 uint16_t target_id;
7c673cae 25542 /*
9f95a23c
TL
25543 * A physical address pointer pointing to a host buffer that the
25544 * command's response data will be written. This can be either a host
25545 * physical address (HPA) or a guest physical address (GPA) and must
25546 * point to a physically contiguous block of memory.
7c673cae 25547 */
9f95a23c 25548 uint64_t resp_addr;
7c673cae 25549 /*
9f95a23c
TL
25550 * This is an encapsulated request. This request should
25551 * be rejected by the HWRM and the error response should be
25552 * provided in the response buffer inside the encapsulated
25553 * request.
7c673cae 25554 */
9f95a23c 25555 uint32_t encap_request[26];
7c673cae 25556 /*
9f95a23c
TL
25557 * This value indicates the target id of the response to
25558 * the encapsulated request.
25559 * 0x0 - 0xFFF8 - Used for function ids
25560 * 0xFFF8 - 0xFFFE - Reserved for internal processors
25561 * 0xFFFF - HWRM
7c673cae 25562 */
9f95a23c
TL
25563 uint16_t encap_resp_target_id;
25564 uint8_t unused_0[6];
25565} __attribute__((packed));
25566
25567/* hwrm_reject_fwd_resp_output (size:128b/16B) */
25568struct hwrm_reject_fwd_resp_output {
25569 /* The specific error status for the command. */
25570 uint16_t error_code;
25571 /* The HWRM command request type. */
25572 uint16_t req_type;
25573 /* The sequence ID from the original command. */
25574 uint16_t seq_id;
25575 /* The length of the response data in number of bytes. */
25576 uint16_t resp_len;
25577 uint8_t unused_0[7];
25578 /*
25579 * This field is used in Output records to indicate that the output
25580 * is completely written to RAM. This field should be read as '1'
25581 * to indicate that the output has been completely written.
25582 * When writing a command completion or response to an internal processor,
25583 * the order of writes has to be such that this field is written last.
25584 */
25585 uint8_t valid;
25586} __attribute__((packed));
25587
25588/*****************
25589 * hwrm_fwd_resp *
25590 *****************/
25591
25592
25593/* hwrm_fwd_resp_input (size:1024b/128B) */
25594struct hwrm_fwd_resp_input {
25595 /* The HWRM command request type. */
25596 uint16_t req_type;
25597 /*
25598 * The completion ring to send the completion event on. This should
25599 * be the NQ ID returned from the `nq_alloc` HWRM command.
25600 */
25601 uint16_t cmpl_ring;
25602 /*
25603 * The sequence ID is used by the driver for tracking multiple
25604 * commands. This ID is treated as opaque data by the firmware and
25605 * the value is returned in the `hwrm_resp_hdr` upon completion.
25606 */
25607 uint16_t seq_id;
25608 /*
25609 * The target ID of the command:
25610 * * 0x0-0xFFF8 - The function ID
25611 * * 0xFFF8-0xFFFE - Reserved for internal processors
25612 * * 0xFFFF - HWRM
25613 */
25614 uint16_t target_id;
25615 /*
25616 * A physical address pointer pointing to a host buffer that the
25617 * command's response data will be written. This can be either a host
25618 * physical address (HPA) or a guest physical address (GPA) and must
25619 * point to a physically contiguous block of memory.
25620 */
25621 uint64_t resp_addr;
25622 /*
25623 * This value indicates the target id of the encapsulated
25624 * response.
25625 * 0x0 - 0xFFF8 - Used for function ids
25626 * 0xFFF8 - 0xFFFE - Reserved for internal processors
25627 * 0xFFFF - HWRM
25628 */
25629 uint16_t encap_resp_target_id;
25630 /*
25631 * This value indicates the completion ring the encapsulated
25632 * response will be optionally completed on. If the value is
25633 * -1, then no CR completion shall be generated for the
25634 * encapsulated response. Any other value must be a
25635 * valid CR ring_id value. If a valid encap_resp_cmpl_ring
25636 * is provided, then a CR completion shall be generated for
25637 * the encapsulated response.
25638 */
25639 uint16_t encap_resp_cmpl_ring;
25640 /* This field indicates the length of encapsulated response. */
25641 uint16_t encap_resp_len;
25642 uint8_t unused_0;
25643 uint8_t unused_1;
25644 /*
25645 * This is the host address where the encapsulated response
25646 * will be written.
25647 * This area must be 16B aligned and must be cleared to zero
25648 * before the original request is made.
25649 */
25650 uint64_t encap_resp_addr;
25651 /* This is an encapsulated response. */
25652 uint32_t encap_resp[24];
25653} __attribute__((packed));
25654
25655/* hwrm_fwd_resp_output (size:128b/16B) */
25656struct hwrm_fwd_resp_output {
25657 /* The specific error status for the command. */
25658 uint16_t error_code;
25659 /* The HWRM command request type. */
25660 uint16_t req_type;
25661 /* The sequence ID from the original command. */
25662 uint16_t seq_id;
25663 /* The length of the response data in number of bytes. */
25664 uint16_t resp_len;
25665 uint8_t unused_0[7];
25666 /*
25667 * This field is used in Output records to indicate that the output
25668 * is completely written to RAM. This field should be read as '1'
25669 * to indicate that the output has been completely written.
25670 * When writing a command completion or response to an internal processor,
25671 * the order of writes has to be such that this field is written last.
25672 */
25673 uint8_t valid;
25674} __attribute__((packed));
25675
25676/*****************************
25677 * hwrm_fwd_async_event_cmpl *
25678 *****************************/
25679
25680
25681/* hwrm_fwd_async_event_cmpl_input (size:320b/40B) */
25682struct hwrm_fwd_async_event_cmpl_input {
25683 /* The HWRM command request type. */
25684 uint16_t req_type;
7c673cae 25685 /*
9f95a23c
TL
25686 * The completion ring to send the completion event on. This should
25687 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 25688 */
9f95a23c 25689 uint16_t cmpl_ring;
7c673cae 25690 /*
9f95a23c
TL
25691 * The sequence ID is used by the driver for tracking multiple
25692 * commands. This ID is treated as opaque data by the firmware and
25693 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 25694 */
9f95a23c 25695 uint16_t seq_id;
7c673cae 25696 /*
9f95a23c
TL
25697 * The target ID of the command:
25698 * * 0x0-0xFFF8 - The function ID
25699 * * 0xFFF8-0xFFFE - Reserved for internal processors
25700 * * 0xFFFF - HWRM
7c673cae 25701 */
9f95a23c 25702 uint16_t target_id;
7c673cae 25703 /*
9f95a23c
TL
25704 * A physical address pointer pointing to a host buffer that the
25705 * command's response data will be written. This can be either a host
25706 * physical address (HPA) or a guest physical address (GPA) and must
25707 * point to a physically contiguous block of memory.
7c673cae 25708 */
9f95a23c 25709 uint64_t resp_addr;
7c673cae 25710 /*
9f95a23c
TL
25711 * This value indicates the target id of the encapsulated
25712 * asynchronous event.
25713 * 0x0 - 0xFFF8 - Used for function ids
25714 * 0xFFF8 - 0xFFFE - Reserved for internal processors
25715 * 0xFFFF - Broadcast to all children VFs (only applicable when
25716 * a PF is the requester)
7c673cae 25717 */
9f95a23c
TL
25718 uint16_t encap_async_event_target_id;
25719 uint8_t unused_0[6];
25720 /* This is an encapsulated asynchronous event completion. */
25721 uint32_t encap_async_event_cmpl[4];
25722} __attribute__((packed));
25723
25724/* hwrm_fwd_async_event_cmpl_output (size:128b/16B) */
25725struct hwrm_fwd_async_event_cmpl_output {
25726 /* The specific error status for the command. */
25727 uint16_t error_code;
25728 /* The HWRM command request type. */
25729 uint16_t req_type;
25730 /* The sequence ID from the original command. */
25731 uint16_t seq_id;
25732 /* The length of the response data in number of bytes. */
25733 uint16_t resp_len;
25734 uint8_t unused_0[7];
25735 /*
25736 * This field is used in Output records to indicate that the output
25737 * is completely written to RAM. This field should be read as '1'
25738 * to indicate that the output has been completely written.
25739 * When writing a command completion or response to an internal processor,
25740 * the order of writes has to be such that this field is written last.
25741 */
25742 uint8_t valid;
25743} __attribute__((packed));
25744
25745/**************************
25746 * hwrm_nvm_raw_write_blk *
25747 **************************/
25748
25749
25750/* hwrm_nvm_raw_write_blk_input (size:256b/32B) */
25751struct hwrm_nvm_raw_write_blk_input {
25752 /* The HWRM command request type. */
25753 uint16_t req_type;
7c673cae 25754 /*
9f95a23c
TL
25755 * The completion ring to send the completion event on. This should
25756 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 25757 */
9f95a23c 25758 uint16_t cmpl_ring;
7c673cae 25759 /*
9f95a23c
TL
25760 * The sequence ID is used by the driver for tracking multiple
25761 * commands. This ID is treated as opaque data by the firmware and
25762 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 25763 */
9f95a23c 25764 uint16_t seq_id;
7c673cae 25765 /*
9f95a23c
TL
25766 * The target ID of the command:
25767 * * 0x0-0xFFF8 - The function ID
25768 * * 0xFFF8-0xFFFE - Reserved for internal processors
25769 * * 0xFFFF - HWRM
7c673cae 25770 */
9f95a23c 25771 uint16_t target_id;
7c673cae 25772 /*
9f95a23c
TL
25773 * A physical address pointer pointing to a host buffer that the
25774 * command's response data will be written. This can be either a host
25775 * physical address (HPA) or a guest physical address (GPA) and must
25776 * point to a physically contiguous block of memory.
7c673cae 25777 */
9f95a23c 25778 uint64_t resp_addr;
7c673cae 25779 /*
9f95a23c
TL
25780 * 64-bit Host Source Address.
25781 * This is the loation of the source data to be written.
7c673cae 25782 */
9f95a23c 25783 uint64_t host_src_addr;
7c673cae 25784 /*
9f95a23c
TL
25785 * 32-bit Destination Address.
25786 * This is the NVRAM byte-offset where the source data will be written to.
7c673cae 25787 */
9f95a23c
TL
25788 uint32_t dest_addr;
25789 /* Length of data to be written, in bytes. */
25790 uint32_t len;
25791} __attribute__((packed));
25792
25793/* hwrm_nvm_raw_write_blk_output (size:128b/16B) */
25794struct hwrm_nvm_raw_write_blk_output {
25795 /* The specific error status for the command. */
25796 uint16_t error_code;
25797 /* The HWRM command request type. */
25798 uint16_t req_type;
25799 /* The sequence ID from the original command. */
25800 uint16_t seq_id;
25801 /* The length of the response data in number of bytes. */
25802 uint16_t resp_len;
25803 uint8_t unused_0[7];
25804 /*
25805 * This field is used in Output records to indicate that the output
25806 * is completely written to RAM. This field should be read as '1'
25807 * to indicate that the output has been completely written.
25808 * When writing a command completion or response to an internal processor,
25809 * the order of writes has to be such that this field is written last.
25810 */
25811 uint8_t valid;
25812} __attribute__((packed));
25813
25814/*****************
25815 * hwrm_nvm_read *
25816 *****************/
25817
25818
25819/* hwrm_nvm_read_input (size:320b/40B) */
25820struct hwrm_nvm_read_input {
25821 /* The HWRM command request type. */
25822 uint16_t req_type;
7c673cae 25823 /*
9f95a23c
TL
25824 * The completion ring to send the completion event on. This should
25825 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 25826 */
9f95a23c 25827 uint16_t cmpl_ring;
7c673cae 25828 /*
9f95a23c
TL
25829 * The sequence ID is used by the driver for tracking multiple
25830 * commands. This ID is treated as opaque data by the firmware and
25831 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 25832 */
9f95a23c 25833 uint16_t seq_id;
7c673cae 25834 /*
9f95a23c
TL
25835 * The target ID of the command:
25836 * * 0x0-0xFFF8 - The function ID
25837 * * 0xFFF8-0xFFFE - Reserved for internal processors
25838 * * 0xFFFF - HWRM
7c673cae 25839 */
9f95a23c 25840 uint16_t target_id;
7c673cae 25841 /*
9f95a23c
TL
25842 * A physical address pointer pointing to a host buffer that the
25843 * command's response data will be written. This can be either a host
25844 * physical address (HPA) or a guest physical address (GPA) and must
25845 * point to a physically contiguous block of memory.
7c673cae 25846 */
9f95a23c 25847 uint64_t resp_addr;
7c673cae 25848 /*
9f95a23c
TL
25849 * 64-bit Host Destination Address.
25850 * This is the host address where the data will be written to.
7c673cae 25851 */
9f95a23c
TL
25852 uint64_t host_dest_addr;
25853 /* The 0-based index of the directory entry. */
25854 uint16_t dir_idx;
25855 uint8_t unused_0[2];
25856 /* The NVRAM byte-offset to read from. */
25857 uint32_t offset;
25858 /* The length of the data to be read, in bytes. */
25859 uint32_t len;
25860 uint8_t unused_1[4];
7c673cae
FG
25861} __attribute__((packed));
25862
9f95a23c
TL
25863/* hwrm_nvm_read_output (size:128b/16B) */
25864struct hwrm_nvm_read_output {
25865 /* The specific error status for the command. */
25866 uint16_t error_code;
25867 /* The HWRM command request type. */
25868 uint16_t req_type;
25869 /* The sequence ID from the original command. */
25870 uint16_t seq_id;
25871 /* The length of the response data in number of bytes. */
25872 uint16_t resp_len;
25873 uint8_t unused_0[7];
25874 /*
25875 * This field is used in Output records to indicate that the output
25876 * is completely written to RAM. This field should be read as '1'
25877 * to indicate that the output has been completely written.
25878 * When writing a command completion or response to an internal processor,
25879 * the order of writes has to be such that this field is written last.
25880 */
25881 uint8_t valid;
25882} __attribute__((packed));
25883
25884/*********************
25885 * hwrm_nvm_raw_dump *
25886 *********************/
25887
25888
25889/* hwrm_nvm_raw_dump_input (size:256b/32B) */
25890struct hwrm_nvm_raw_dump_input {
25891 /* The HWRM command request type. */
25892 uint16_t req_type;
7c673cae 25893 /*
9f95a23c
TL
25894 * The completion ring to send the completion event on. This should
25895 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 25896 */
9f95a23c 25897 uint16_t cmpl_ring;
7c673cae 25898 /*
9f95a23c
TL
25899 * The sequence ID is used by the driver for tracking multiple
25900 * commands. This ID is treated as opaque data by the firmware and
25901 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 25902 */
9f95a23c 25903 uint16_t seq_id;
7c673cae 25904 /*
9f95a23c
TL
25905 * The target ID of the command:
25906 * * 0x0-0xFFF8 - The function ID
25907 * * 0xFFF8-0xFFFE - Reserved for internal processors
25908 * * 0xFFFF - HWRM
7c673cae 25909 */
9f95a23c 25910 uint16_t target_id;
7c673cae 25911 /*
9f95a23c
TL
25912 * A physical address pointer pointing to a host buffer that the
25913 * command's response data will be written. This can be either a host
25914 * physical address (HPA) or a guest physical address (GPA) and must
25915 * point to a physically contiguous block of memory.
7c673cae 25916 */
9f95a23c 25917 uint64_t resp_addr;
7c673cae 25918 /*
9f95a23c
TL
25919 * 64-bit Host Destination Address.
25920 * This is the host address where the data will be written to.
7c673cae 25921 */
9f95a23c
TL
25922 uint64_t host_dest_addr;
25923 /* 32-bit NVRAM byte-offset to read from. */
25924 uint32_t offset;
25925 /* Total length of NVRAM contents to be read, in bytes. */
25926 uint32_t len;
7c673cae
FG
25927} __attribute__((packed));
25928
9f95a23c
TL
25929/* hwrm_nvm_raw_dump_output (size:128b/16B) */
25930struct hwrm_nvm_raw_dump_output {
25931 /* The specific error status for the command. */
25932 uint16_t error_code;
25933 /* The HWRM command request type. */
25934 uint16_t req_type;
25935 /* The sequence ID from the original command. */
25936 uint16_t seq_id;
25937 /* The length of the response data in number of bytes. */
25938 uint16_t resp_len;
25939 uint8_t unused_0[7];
25940 /*
25941 * This field is used in Output records to indicate that the output
25942 * is completely written to RAM. This field should be read as '1'
25943 * to indicate that the output has been completely written.
25944 * When writing a command completion or response to an internal processor,
25945 * the order of writes has to be such that this field is written last.
25946 */
25947 uint8_t valid;
25948} __attribute__((packed));
25949
25950/****************************
25951 * hwrm_nvm_get_dir_entries *
25952 ****************************/
25953
25954
25955/* hwrm_nvm_get_dir_entries_input (size:192b/24B) */
25956struct hwrm_nvm_get_dir_entries_input {
25957 /* The HWRM command request type. */
25958 uint16_t req_type;
7c673cae 25959 /*
9f95a23c
TL
25960 * The completion ring to send the completion event on. This should
25961 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 25962 */
9f95a23c 25963 uint16_t cmpl_ring;
7c673cae 25964 /*
9f95a23c
TL
25965 * The sequence ID is used by the driver for tracking multiple
25966 * commands. This ID is treated as opaque data by the firmware and
25967 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 25968 */
9f95a23c 25969 uint16_t seq_id;
7c673cae 25970 /*
9f95a23c
TL
25971 * The target ID of the command:
25972 * * 0x0-0xFFF8 - The function ID
25973 * * 0xFFF8-0xFFFE - Reserved for internal processors
25974 * * 0xFFFF - HWRM
7c673cae 25975 */
9f95a23c 25976 uint16_t target_id;
7c673cae 25977 /*
9f95a23c
TL
25978 * A physical address pointer pointing to a host buffer that the
25979 * command's response data will be written. This can be either a host
25980 * physical address (HPA) or a guest physical address (GPA) and must
25981 * point to a physically contiguous block of memory.
7c673cae 25982 */
9f95a23c 25983 uint64_t resp_addr;
7c673cae 25984 /*
9f95a23c
TL
25985 * 64-bit Host Destination Address.
25986 * This is the host address where the directory will be written.
7c673cae 25987 */
9f95a23c 25988 uint64_t host_dest_addr;
7c673cae
FG
25989} __attribute__((packed));
25990
9f95a23c
TL
25991/* hwrm_nvm_get_dir_entries_output (size:128b/16B) */
25992struct hwrm_nvm_get_dir_entries_output {
25993 /* The specific error status for the command. */
25994 uint16_t error_code;
25995 /* The HWRM command request type. */
25996 uint16_t req_type;
25997 /* The sequence ID from the original command. */
25998 uint16_t seq_id;
25999 /* The length of the response data in number of bytes. */
26000 uint16_t resp_len;
26001 uint8_t unused_0[7];
26002 /*
26003 * This field is used in Output records to indicate that the output
26004 * is completely written to RAM. This field should be read as '1'
26005 * to indicate that the output has been completely written.
26006 * When writing a command completion or response to an internal processor,
26007 * the order of writes has to be such that this field is written last.
26008 */
26009 uint8_t valid;
26010} __attribute__((packed));
26011
26012/*************************
26013 * hwrm_nvm_get_dir_info *
26014 *************************/
26015
26016
26017/* hwrm_nvm_get_dir_info_input (size:128b/16B) */
26018struct hwrm_nvm_get_dir_info_input {
26019 /* The HWRM command request type. */
26020 uint16_t req_type;
7c673cae 26021 /*
9f95a23c
TL
26022 * The completion ring to send the completion event on. This should
26023 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 26024 */
9f95a23c 26025 uint16_t cmpl_ring;
7c673cae 26026 /*
9f95a23c
TL
26027 * The sequence ID is used by the driver for tracking multiple
26028 * commands. This ID is treated as opaque data by the firmware and
26029 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 26030 */
9f95a23c 26031 uint16_t seq_id;
7c673cae 26032 /*
9f95a23c
TL
26033 * The target ID of the command:
26034 * * 0x0-0xFFF8 - The function ID
26035 * * 0xFFF8-0xFFFE - Reserved for internal processors
26036 * * 0xFFFF - HWRM
7c673cae 26037 */
9f95a23c
TL
26038 uint16_t target_id;
26039 /*
26040 * A physical address pointer pointing to a host buffer that the
26041 * command's response data will be written. This can be either a host
26042 * physical address (HPA) or a guest physical address (GPA) and must
26043 * point to a physically contiguous block of memory.
26044 */
26045 uint64_t resp_addr;
7c673cae
FG
26046} __attribute__((packed));
26047
9f95a23c
TL
26048/* hwrm_nvm_get_dir_info_output (size:192b/24B) */
26049struct hwrm_nvm_get_dir_info_output {
26050 /* The specific error status for the command. */
26051 uint16_t error_code;
26052 /* The HWRM command request type. */
26053 uint16_t req_type;
26054 /* The sequence ID from the original command. */
26055 uint16_t seq_id;
26056 /* The length of the response data in number of bytes. */
26057 uint16_t resp_len;
26058 /* Number of directory entries in the directory. */
26059 uint32_t entries;
26060 /* Size of each directory entry, in bytes. */
26061 uint32_t entry_length;
26062 uint8_t unused_0[7];
26063 /*
26064 * This field is used in Output records to indicate that the output
26065 * is completely written to RAM. This field should be read as '1'
26066 * to indicate that the output has been completely written.
26067 * When writing a command completion or response to an internal processor,
26068 * the order of writes has to be such that this field is written last.
26069 */
26070 uint8_t valid;
26071} __attribute__((packed));
26072
26073/******************
26074 * hwrm_nvm_write *
26075 ******************/
26076
26077
26078/* hwrm_nvm_write_input (size:384b/48B) */
26079struct hwrm_nvm_write_input {
26080 /* The HWRM command request type. */
26081 uint16_t req_type;
7c673cae 26082 /*
9f95a23c
TL
26083 * The completion ring to send the completion event on. This should
26084 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 26085 */
9f95a23c 26086 uint16_t cmpl_ring;
7c673cae 26087 /*
9f95a23c
TL
26088 * The sequence ID is used by the driver for tracking multiple
26089 * commands. This ID is treated as opaque data by the firmware and
26090 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 26091 */
9f95a23c 26092 uint16_t seq_id;
7c673cae 26093 /*
9f95a23c
TL
26094 * The target ID of the command:
26095 * * 0x0-0xFFF8 - The function ID
26096 * * 0xFFF8-0xFFFE - Reserved for internal processors
26097 * * 0xFFFF - HWRM
7c673cae 26098 */
9f95a23c 26099 uint16_t target_id;
7c673cae 26100 /*
9f95a23c
TL
26101 * A physical address pointer pointing to a host buffer that the
26102 * command's response data will be written. This can be either a host
26103 * physical address (HPA) or a guest physical address (GPA) and must
26104 * point to a physically contiguous block of memory.
7c673cae 26105 */
9f95a23c 26106 uint64_t resp_addr;
7c673cae 26107 /*
9f95a23c
TL
26108 * 64-bit Host Source Address.
26109 * This is where the source data is.
7c673cae 26110 */
9f95a23c
TL
26111 uint64_t host_src_addr;
26112 /* The Directory Entry Type (valid values are defined in the bnxnvm_directory_type enum defined in the file bnxnvm_defs.h). */
26113 uint16_t dir_type;
7c673cae 26114 /*
9f95a23c
TL
26115 * Directory ordinal.
26116 * The 0-based instance of the combined Directory Entry Type and Extension.
7c673cae 26117 */
9f95a23c
TL
26118 uint16_t dir_ordinal;
26119 /* The Directory Entry Extension flags (see BNX_DIR_EXT_* in the file bnxnvm_defs.h). */
26120 uint16_t dir_ext;
26121 /* Directory Entry Attribute flags (see BNX_DIR_ATTR_* in the file bnxnvm_defs.h). */
26122 uint16_t dir_attr;
7c673cae 26123 /*
9f95a23c
TL
26124 * Length of data to write, in bytes. May be less than or equal to the allocated size for the directory entry.
26125 * The data length stored in the directory entry will be updated to reflect this value once the write is complete.
7c673cae 26126 */
9f95a23c
TL
26127 uint32_t dir_data_length;
26128 /* Option. */
26129 uint16_t option;
26130 uint16_t flags;
7c673cae 26131 /*
9f95a23c
TL
26132 * When this bit is '1', the original active image
26133 * will not be removed. TBD: what purpose is this?
7c673cae 26134 */
9f95a23c
TL
26135 #define HWRM_NVM_WRITE_INPUT_FLAGS_KEEP_ORIG_ACTIVE_IMG \
26136 UINT32_C(0x1)
7c673cae 26137 /*
9f95a23c
TL
26138 * The requested length of the allocated NVM for the item, in bytes. This value may be greater than or equal to the specified data length (dir_data_length).
26139 * If this value is less than the specified data length, it will be ignored.
26140 * The response will contain the actual allocated item length, which may be greater than the requested item length.
26141 * The purpose for allocating more than the required number of bytes for an item's data is to pre-allocate extra storage (padding) to accomodate
26142 * the potential future growth of an item (e.g. upgraded firmware with a size increase, log growth, expanded configuration data).
7c673cae 26143 */
9f95a23c
TL
26144 uint32_t dir_item_length;
26145 uint32_t unused_0;
7c673cae
FG
26146} __attribute__((packed));
26147
9f95a23c
TL
26148/* hwrm_nvm_write_output (size:128b/16B) */
26149struct hwrm_nvm_write_output {
26150 /* The specific error status for the command. */
26151 uint16_t error_code;
26152 /* The HWRM command request type. */
26153 uint16_t req_type;
26154 /* The sequence ID from the original command. */
26155 uint16_t seq_id;
26156 /* The length of the response data in number of bytes. */
26157 uint16_t resp_len;
26158 /*
26159 * Length of the allocated NVM for the item, in bytes. The value may be greater than or equal to the specified data length or the requested item length.
26160 * The actual item length used when creating a new directory entry will be a multiple of an NVM block size.
26161 */
26162 uint32_t dir_item_length;
26163 /* The directory index of the created or modified item. */
26164 uint16_t dir_idx;
26165 uint8_t unused_0;
26166 /*
26167 * This field is used in Output records to indicate that the output
26168 * is completely written to RAM. This field should be read as '1'
26169 * to indicate that the output has been completely written.
26170 * When writing a command completion or response to an internal processor,
26171 * the order of writes has to be such that this field is written last.
26172 */
26173 uint8_t valid;
26174} __attribute__((packed));
26175
26176/* hwrm_nvm_write_cmd_err (size:64b/8B) */
26177struct hwrm_nvm_write_cmd_err {
26178 /*
26179 * command specific error codes that goes to
26180 * the cmd_err field in Common HWRM Error Response.
26181 */
26182 uint8_t code;
26183 /* Unknown error */
26184 #define HWRM_NVM_WRITE_CMD_ERR_CODE_UNKNOWN UINT32_C(0x0)
26185 /* Unable to complete operation due to fragmentation */
26186 #define HWRM_NVM_WRITE_CMD_ERR_CODE_FRAG_ERR UINT32_C(0x1)
26187 /* nvm is completely full. */
26188 #define HWRM_NVM_WRITE_CMD_ERR_CODE_NO_SPACE UINT32_C(0x2)
26189 #define HWRM_NVM_WRITE_CMD_ERR_CODE_LAST \
26190 HWRM_NVM_WRITE_CMD_ERR_CODE_NO_SPACE
26191 uint8_t unused_0[7];
26192} __attribute__((packed));
26193
26194/*******************
26195 * hwrm_nvm_modify *
26196 *******************/
26197
26198
26199/* hwrm_nvm_modify_input (size:320b/40B) */
26200struct hwrm_nvm_modify_input {
26201 /* The HWRM command request type. */
26202 uint16_t req_type;
7c673cae 26203 /*
9f95a23c
TL
26204 * The completion ring to send the completion event on. This should
26205 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 26206 */
9f95a23c 26207 uint16_t cmpl_ring;
7c673cae 26208 /*
9f95a23c
TL
26209 * The sequence ID is used by the driver for tracking multiple
26210 * commands. This ID is treated as opaque data by the firmware and
26211 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 26212 */
9f95a23c 26213 uint16_t seq_id;
7c673cae 26214 /*
9f95a23c
TL
26215 * The target ID of the command:
26216 * * 0x0-0xFFF8 - The function ID
26217 * * 0xFFF8-0xFFFE - Reserved for internal processors
26218 * * 0xFFFF - HWRM
7c673cae 26219 */
9f95a23c 26220 uint16_t target_id;
7c673cae 26221 /*
9f95a23c
TL
26222 * A physical address pointer pointing to a host buffer that the
26223 * command's response data will be written. This can be either a host
26224 * physical address (HPA) or a guest physical address (GPA) and must
26225 * point to a physically contiguous block of memory.
7c673cae 26226 */
9f95a23c 26227 uint64_t resp_addr;
7c673cae 26228 /*
9f95a23c
TL
26229 * 64-bit Host Source Address.
26230 * This is where the modified data is.
7c673cae 26231 */
9f95a23c
TL
26232 uint64_t host_src_addr;
26233 /* 16-bit directory entry index. */
26234 uint16_t dir_idx;
26235 uint8_t unused_0[2];
26236 /* 32-bit NVRAM byte-offset to modify content from. */
26237 uint32_t offset;
7c673cae 26238 /*
9f95a23c
TL
26239 * Length of data to be modified, in bytes. The length shall
26240 * be non-zero.
7c673cae 26241 */
9f95a23c
TL
26242 uint32_t len;
26243 uint8_t unused_1[4];
26244} __attribute__((packed));
26245
26246/* hwrm_nvm_modify_output (size:128b/16B) */
26247struct hwrm_nvm_modify_output {
26248 /* The specific error status for the command. */
26249 uint16_t error_code;
26250 /* The HWRM command request type. */
26251 uint16_t req_type;
26252 /* The sequence ID from the original command. */
26253 uint16_t seq_id;
26254 /* The length of the response data in number of bytes. */
26255 uint16_t resp_len;
26256 uint8_t unused_0[7];
26257 /*
26258 * This field is used in Output records to indicate that the output
26259 * is completely written to RAM. This field should be read as '1'
26260 * to indicate that the output has been completely written.
26261 * When writing a command completion or response to an internal processor,
26262 * the order of writes has to be such that this field is written last.
26263 */
26264 uint8_t valid;
26265} __attribute__((packed));
26266
26267/***************************
26268 * hwrm_nvm_find_dir_entry *
26269 ***************************/
26270
26271
26272/* hwrm_nvm_find_dir_entry_input (size:256b/32B) */
26273struct hwrm_nvm_find_dir_entry_input {
26274 /* The HWRM command request type. */
26275 uint16_t req_type;
7c673cae 26276 /*
9f95a23c
TL
26277 * The completion ring to send the completion event on. This should
26278 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 26279 */
9f95a23c 26280 uint16_t cmpl_ring;
7c673cae 26281 /*
9f95a23c
TL
26282 * The sequence ID is used by the driver for tracking multiple
26283 * commands. This ID is treated as opaque data by the firmware and
26284 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 26285 */
9f95a23c 26286 uint16_t seq_id;
7c673cae 26287 /*
9f95a23c
TL
26288 * The target ID of the command:
26289 * * 0x0-0xFFF8 - The function ID
26290 * * 0xFFF8-0xFFFE - Reserved for internal processors
26291 * * 0xFFFF - HWRM
7c673cae 26292 */
9f95a23c 26293 uint16_t target_id;
7c673cae 26294 /*
9f95a23c
TL
26295 * A physical address pointer pointing to a host buffer that the
26296 * command's response data will be written. This can be either a host
26297 * physical address (HPA) or a guest physical address (GPA) and must
26298 * point to a physically contiguous block of memory.
7c673cae 26299 */
9f95a23c
TL
26300 uint64_t resp_addr;
26301 uint32_t enables;
7c673cae 26302 /*
9f95a23c
TL
26303 * This bit must be '1' for the dir_idx_valid field to be
26304 * configured.
7c673cae 26305 */
9f95a23c
TL
26306 #define HWRM_NVM_FIND_DIR_ENTRY_INPUT_ENABLES_DIR_IDX_VALID \
26307 UINT32_C(0x1)
26308 /* Directory Entry Index */
26309 uint16_t dir_idx;
26310 /* Directory Entry (Image) Type */
26311 uint16_t dir_type;
26312 /*
26313 * Directory ordinal.
26314 * The instance of this Directory Type
26315 */
26316 uint16_t dir_ordinal;
26317 /* The Directory Entry Extension flags. */
26318 uint16_t dir_ext;
26319 /* This value indicates the search option using dir_ordinal. */
26320 uint8_t opt_ordinal;
26321 /* This value indicates the search option using dir_ordinal. */
26322 #define HWRM_NVM_FIND_DIR_ENTRY_INPUT_OPT_ORDINAL_MASK UINT32_C(0x3)
26323 #define HWRM_NVM_FIND_DIR_ENTRY_INPUT_OPT_ORDINAL_SFT 0
26324 /* Equal to specified ordinal value. */
26325 #define HWRM_NVM_FIND_DIR_ENTRY_INPUT_OPT_ORDINAL_EQ UINT32_C(0x0)
26326 /* Greater than or equal to specified ordinal value */
26327 #define HWRM_NVM_FIND_DIR_ENTRY_INPUT_OPT_ORDINAL_GE UINT32_C(0x1)
26328 /* Greater than specified ordinal value */
26329 #define HWRM_NVM_FIND_DIR_ENTRY_INPUT_OPT_ORDINAL_GT UINT32_C(0x2)
26330 #define HWRM_NVM_FIND_DIR_ENTRY_INPUT_OPT_ORDINAL_LAST \
26331 HWRM_NVM_FIND_DIR_ENTRY_INPUT_OPT_ORDINAL_GT
26332 uint8_t unused_0[3];
26333} __attribute__((packed));
26334
26335/* hwrm_nvm_find_dir_entry_output (size:256b/32B) */
26336struct hwrm_nvm_find_dir_entry_output {
26337 /* The specific error status for the command. */
26338 uint16_t error_code;
26339 /* The HWRM command request type. */
26340 uint16_t req_type;
26341 /* The sequence ID from the original command. */
26342 uint16_t seq_id;
26343 /* The length of the response data in number of bytes. */
26344 uint16_t resp_len;
26345 /* Allocated NVRAM for this directory entry, in bytes. */
26346 uint32_t dir_item_length;
26347 /* Size of the stored data for this directory entry, in bytes. */
26348 uint32_t dir_data_length;
26349 /*
26350 * Firmware version.
26351 * Only valid if the directory entry is for embedded firmware stored in APE_BIN Format.
26352 */
26353 uint32_t fw_ver;
26354 /* Directory ordinal. */
26355 uint16_t dir_ordinal;
26356 /* Directory Entry Index */
26357 uint16_t dir_idx;
26358 uint8_t unused_0[7];
26359 /*
26360 * This field is used in Output records to indicate that the output
26361 * is completely written to RAM. This field should be read as '1'
26362 * to indicate that the output has been completely written.
26363 * When writing a command completion or response to an internal processor,
26364 * the order of writes has to be such that this field is written last.
26365 */
26366 uint8_t valid;
26367} __attribute__((packed));
26368
26369/****************************
26370 * hwrm_nvm_erase_dir_entry *
26371 ****************************/
26372
26373
26374/* hwrm_nvm_erase_dir_entry_input (size:192b/24B) */
26375struct hwrm_nvm_erase_dir_entry_input {
26376 /* The HWRM command request type. */
26377 uint16_t req_type;
7c673cae 26378 /*
9f95a23c
TL
26379 * The completion ring to send the completion event on. This should
26380 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 26381 */
9f95a23c 26382 uint16_t cmpl_ring;
7c673cae 26383 /*
9f95a23c
TL
26384 * The sequence ID is used by the driver for tracking multiple
26385 * commands. This ID is treated as opaque data by the firmware and
26386 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 26387 */
9f95a23c 26388 uint16_t seq_id;
7c673cae 26389 /*
9f95a23c
TL
26390 * The target ID of the command:
26391 * * 0x0-0xFFF8 - The function ID
26392 * * 0xFFF8-0xFFFE - Reserved for internal processors
26393 * * 0xFFFF - HWRM
7c673cae 26394 */
9f95a23c 26395 uint16_t target_id;
7c673cae 26396 /*
9f95a23c
TL
26397 * A physical address pointer pointing to a host buffer that the
26398 * command's response data will be written. This can be either a host
26399 * physical address (HPA) or a guest physical address (GPA) and must
26400 * point to a physically contiguous block of memory.
7c673cae 26401 */
9f95a23c
TL
26402 uint64_t resp_addr;
26403 /* Directory Entry Index */
26404 uint16_t dir_idx;
26405 uint8_t unused_0[6];
7c673cae
FG
26406} __attribute__((packed));
26407
9f95a23c
TL
26408/* hwrm_nvm_erase_dir_entry_output (size:128b/16B) */
26409struct hwrm_nvm_erase_dir_entry_output {
26410 /* The specific error status for the command. */
26411 uint16_t error_code;
26412 /* The HWRM command request type. */
26413 uint16_t req_type;
26414 /* The sequence ID from the original command. */
26415 uint16_t seq_id;
26416 /* The length of the response data in number of bytes. */
26417 uint16_t resp_len;
26418 uint8_t unused_0[7];
26419 /*
26420 * This field is used in Output records to indicate that the output
26421 * is completely written to RAM. This field should be read as '1'
26422 * to indicate that the output has been completely written.
26423 * When writing a command completion or response to an internal processor,
26424 * the order of writes has to be such that this field is written last.
26425 */
26426 uint8_t valid;
26427} __attribute__((packed));
26428
26429/*************************
26430 * hwrm_nvm_get_dev_info *
26431 *************************/
26432
26433
26434/* hwrm_nvm_get_dev_info_input (size:128b/16B) */
26435struct hwrm_nvm_get_dev_info_input {
26436 /* The HWRM command request type. */
26437 uint16_t req_type;
7c673cae 26438 /*
9f95a23c
TL
26439 * The completion ring to send the completion event on. This should
26440 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 26441 */
9f95a23c 26442 uint16_t cmpl_ring;
7c673cae 26443 /*
9f95a23c
TL
26444 * The sequence ID is used by the driver for tracking multiple
26445 * commands. This ID is treated as opaque data by the firmware and
26446 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 26447 */
9f95a23c 26448 uint16_t seq_id;
7c673cae 26449 /*
9f95a23c
TL
26450 * The target ID of the command:
26451 * * 0x0-0xFFF8 - The function ID
26452 * * 0xFFF8-0xFFFE - Reserved for internal processors
26453 * * 0xFFFF - HWRM
7c673cae 26454 */
9f95a23c 26455 uint16_t target_id;
7c673cae 26456 /*
9f95a23c
TL
26457 * A physical address pointer pointing to a host buffer that the
26458 * command's response data will be written. This can be either a host
26459 * physical address (HPA) or a guest physical address (GPA) and must
26460 * point to a physically contiguous block of memory.
7c673cae 26461 */
9f95a23c
TL
26462 uint64_t resp_addr;
26463} __attribute__((packed));
26464
26465/* hwrm_nvm_get_dev_info_output (size:256b/32B) */
26466struct hwrm_nvm_get_dev_info_output {
26467 /* The specific error status for the command. */
26468 uint16_t error_code;
26469 /* The HWRM command request type. */
26470 uint16_t req_type;
26471 /* The sequence ID from the original command. */
26472 uint16_t seq_id;
26473 /* The length of the response data in number of bytes. */
26474 uint16_t resp_len;
26475 /* Manufacturer ID. */
26476 uint16_t manufacturer_id;
26477 /* Device ID. */
26478 uint16_t device_id;
26479 /* Sector size of the NVRAM device. */
26480 uint32_t sector_size;
26481 /* Total size, in bytes of the NVRAM device. */
26482 uint32_t nvram_size;
26483 uint32_t reserved_size;
26484 /* Available size that can be used, in bytes. Available size is the NVRAM size take away the used size and reserved size. */
26485 uint32_t available_size;
26486 uint8_t unused_0[3];
26487 /*
26488 * This field is used in Output records to indicate that the output
26489 * is completely written to RAM. This field should be read as '1'
26490 * to indicate that the output has been completely written.
26491 * When writing a command completion or response to an internal processor,
26492 * the order of writes has to be such that this field is written last.
26493 */
26494 uint8_t valid;
26495} __attribute__((packed));
26496
26497/**************************
26498 * hwrm_nvm_mod_dir_entry *
26499 **************************/
26500
26501
26502/* hwrm_nvm_mod_dir_entry_input (size:256b/32B) */
26503struct hwrm_nvm_mod_dir_entry_input {
26504 /* The HWRM command request type. */
26505 uint16_t req_type;
7c673cae 26506 /*
9f95a23c
TL
26507 * The completion ring to send the completion event on. This should
26508 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 26509 */
9f95a23c 26510 uint16_t cmpl_ring;
7c673cae 26511 /*
9f95a23c
TL
26512 * The sequence ID is used by the driver for tracking multiple
26513 * commands. This ID is treated as opaque data by the firmware and
26514 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 26515 */
9f95a23c 26516 uint16_t seq_id;
7c673cae 26517 /*
9f95a23c
TL
26518 * The target ID of the command:
26519 * * 0x0-0xFFF8 - The function ID
26520 * * 0xFFF8-0xFFFE - Reserved for internal processors
26521 * * 0xFFFF - HWRM
7c673cae 26522 */
9f95a23c 26523 uint16_t target_id;
7c673cae 26524 /*
9f95a23c
TL
26525 * A physical address pointer pointing to a host buffer that the
26526 * command's response data will be written. This can be either a host
26527 * physical address (HPA) or a guest physical address (GPA) and must
26528 * point to a physically contiguous block of memory.
7c673cae 26529 */
9f95a23c
TL
26530 uint64_t resp_addr;
26531 uint32_t enables;
7c673cae 26532 /*
9f95a23c
TL
26533 * This bit must be '1' for the checksum field to be
26534 * configured.
7c673cae 26535 */
9f95a23c
TL
26536 #define HWRM_NVM_MOD_DIR_ENTRY_INPUT_ENABLES_CHECKSUM UINT32_C(0x1)
26537 /* Directory Entry Index */
26538 uint16_t dir_idx;
7c673cae 26539 /*
9f95a23c
TL
26540 * Directory ordinal.
26541 * The (0-based) instance of this Directory Type.
7c673cae 26542 */
9f95a23c
TL
26543 uint16_t dir_ordinal;
26544 /* The Directory Entry Extension flags (see BNX_DIR_EXT_* for extension flag definitions). */
26545 uint16_t dir_ext;
26546 /* Directory Entry Attribute flags (see BNX_DIR_ATTR_* for attribute flag definitions). */
26547 uint16_t dir_attr;
7c673cae 26548 /*
9f95a23c
TL
26549 * If valid, then this field updates the checksum
26550 * value of the content in the directory entry.
7c673cae 26551 */
9f95a23c 26552 uint32_t checksum;
7c673cae
FG
26553} __attribute__((packed));
26554
9f95a23c
TL
26555/* hwrm_nvm_mod_dir_entry_output (size:128b/16B) */
26556struct hwrm_nvm_mod_dir_entry_output {
26557 /* The specific error status for the command. */
26558 uint16_t error_code;
26559 /* The HWRM command request type. */
26560 uint16_t req_type;
26561 /* The sequence ID from the original command. */
26562 uint16_t seq_id;
26563 /* The length of the response data in number of bytes. */
26564 uint16_t resp_len;
26565 uint8_t unused_0[7];
26566 /*
26567 * This field is used in Output records to indicate that the output
26568 * is completely written to RAM. This field should be read as '1'
26569 * to indicate that the output has been completely written.
26570 * When writing a command completion or response to an internal processor,
26571 * the order of writes has to be such that this field is written last.
26572 */
26573 uint8_t valid;
26574} __attribute__((packed));
26575
26576/**************************
26577 * hwrm_nvm_verify_update *
26578 **************************/
26579
26580
26581/* hwrm_nvm_verify_update_input (size:192b/24B) */
26582struct hwrm_nvm_verify_update_input {
26583 /* The HWRM command request type. */
26584 uint16_t req_type;
7c673cae 26585 /*
9f95a23c
TL
26586 * The completion ring to send the completion event on. This should
26587 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 26588 */
9f95a23c 26589 uint16_t cmpl_ring;
7c673cae 26590 /*
9f95a23c
TL
26591 * The sequence ID is used by the driver for tracking multiple
26592 * commands. This ID is treated as opaque data by the firmware and
26593 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 26594 */
9f95a23c 26595 uint16_t seq_id;
7c673cae 26596 /*
9f95a23c
TL
26597 * The target ID of the command:
26598 * * 0x0-0xFFF8 - The function ID
26599 * * 0xFFF8-0xFFFE - Reserved for internal processors
26600 * * 0xFFFF - HWRM
7c673cae 26601 */
9f95a23c 26602 uint16_t target_id;
7c673cae 26603 /*
9f95a23c
TL
26604 * A physical address pointer pointing to a host buffer that the
26605 * command's response data will be written. This can be either a host
26606 * physical address (HPA) or a guest physical address (GPA) and must
26607 * point to a physically contiguous block of memory.
7c673cae 26608 */
9f95a23c
TL
26609 uint64_t resp_addr;
26610 /* Directory Entry Type, to be verified. */
26611 uint16_t dir_type;
26612 /*
26613 * Directory ordinal.
26614 * The instance of the Directory Type to be verified.
26615 */
26616 uint16_t dir_ordinal;
26617 /*
26618 * The Directory Entry Extension flags.
26619 * The "UPDATE" extension flag must be set in this value.
26620 * A corresponding directory entry with the same type and ordinal values but *without*
26621 * the "UPDATE" extension flag must also exist. The other flags of the extension must
26622 * be identical between the active and update entries.
26623 */
26624 uint16_t dir_ext;
26625 uint8_t unused_0[2];
7c673cae
FG
26626} __attribute__((packed));
26627
9f95a23c
TL
26628/* hwrm_nvm_verify_update_output (size:128b/16B) */
26629struct hwrm_nvm_verify_update_output {
26630 /* The specific error status for the command. */
26631 uint16_t error_code;
26632 /* The HWRM command request type. */
26633 uint16_t req_type;
26634 /* The sequence ID from the original command. */
26635 uint16_t seq_id;
26636 /* The length of the response data in number of bytes. */
26637 uint16_t resp_len;
26638 uint8_t unused_0[7];
26639 /*
26640 * This field is used in Output records to indicate that the output
26641 * is completely written to RAM. This field should be read as '1'
26642 * to indicate that the output has been completely written.
26643 * When writing a command completion or response to an internal processor,
26644 * the order of writes has to be such that this field is written last.
26645 */
26646 uint8_t valid;
26647} __attribute__((packed));
26648
26649/***************************
26650 * hwrm_nvm_install_update *
26651 ***************************/
26652
26653
26654/* hwrm_nvm_install_update_input (size:192b/24B) */
26655struct hwrm_nvm_install_update_input {
26656 /* The HWRM command request type. */
26657 uint16_t req_type;
7c673cae 26658 /*
9f95a23c
TL
26659 * The completion ring to send the completion event on. This should
26660 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 26661 */
9f95a23c 26662 uint16_t cmpl_ring;
7c673cae 26663 /*
9f95a23c
TL
26664 * The sequence ID is used by the driver for tracking multiple
26665 * commands. This ID is treated as opaque data by the firmware and
26666 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 26667 */
9f95a23c 26668 uint16_t seq_id;
7c673cae 26669 /*
9f95a23c
TL
26670 * The target ID of the command:
26671 * * 0x0-0xFFF8 - The function ID
26672 * * 0xFFF8-0xFFFE - Reserved for internal processors
26673 * * 0xFFFF - HWRM
7c673cae 26674 */
9f95a23c 26675 uint16_t target_id;
7c673cae 26676 /*
9f95a23c
TL
26677 * A physical address pointer pointing to a host buffer that the
26678 * command's response data will be written. This can be either a host
26679 * physical address (HPA) or a guest physical address (GPA) and must
26680 * point to a physically contiguous block of memory.
7c673cae 26681 */
9f95a23c 26682 uint64_t resp_addr;
7c673cae 26683 /*
9f95a23c
TL
26684 * Installation type. If the value 3 through 0xffff is used,
26685 * only packaged items with that type value will be installed and
26686 * conditional installation directives for those packaged items
26687 * will be over-ridden (i.e. 'create' or 'replace' will be treated
26688 * as 'install').
7c673cae 26689 */
9f95a23c 26690 uint32_t install_type;
7c673cae 26691 /*
9f95a23c
TL
26692 * Perform a normal package installation. Conditional installation
26693 * directives (e.g. 'create' and 'replace') of packaged items
26694 * will be followed.
7c673cae 26695 */
9f95a23c 26696 #define HWRM_NVM_INSTALL_UPDATE_INPUT_INSTALL_TYPE_NORMAL UINT32_C(0x0)
7c673cae 26697 /*
9f95a23c
TL
26698 * Install all packaged items regardless of installation directive
26699 * (i.e. treat all packaged items as though they have an installation
26700 * directive of 'install').
7c673cae 26701 */
9f95a23c
TL
26702 #define HWRM_NVM_INSTALL_UPDATE_INPUT_INSTALL_TYPE_ALL \
26703 UINT32_C(0xffffffff)
26704 #define HWRM_NVM_INSTALL_UPDATE_INPUT_INSTALL_TYPE_LAST \
26705 HWRM_NVM_INSTALL_UPDATE_INPUT_INSTALL_TYPE_ALL
26706 uint16_t flags;
26707 /* If set to 1, then securely erase all unused locations in persistent storage. */
26708 #define HWRM_NVM_INSTALL_UPDATE_INPUT_FLAGS_ERASE_UNUSED_SPACE \
26709 UINT32_C(0x1)
26710 /*
26711 * If set to 1, then unspecifed images, images not in the package file, will be safely deleted.
26712 * When combined with erase_unused_space then unspecified images will be securely erased.
26713 */
26714 #define HWRM_NVM_INSTALL_UPDATE_INPUT_FLAGS_REMOVE_UNUSED_PKG \
26715 UINT32_C(0x2)
26716 /*
26717 * If set to 1, FW will defragment the NVM if defragmentation is required for the update.
26718 * Allow additional time for this command to complete if this bit is set to 1.
26719 */
26720 #define HWRM_NVM_INSTALL_UPDATE_INPUT_FLAGS_ALLOWED_TO_DEFRAG \
26721 UINT32_C(0x4)
26722 uint8_t unused_0[2];
7c673cae
FG
26723} __attribute__((packed));
26724
9f95a23c
TL
26725/* hwrm_nvm_install_update_output (size:192b/24B) */
26726struct hwrm_nvm_install_update_output {
26727 /* The specific error status for the command. */
26728 uint16_t error_code;
26729 /* The HWRM command request type. */
26730 uint16_t req_type;
26731 /* The sequence ID from the original command. */
26732 uint16_t seq_id;
26733 /* The length of the response data in number of bytes. */
26734 uint16_t resp_len;
26735 /*
26736 * Bit-mask of successfully installed items.
26737 * Bit-0 corresponding to the first packaged item, Bit-1 for the second item, etc.
26738 * A value of 0 indicates that no items were successfully installed.
26739 */
26740 uint64_t installed_items;
26741 /* result is 8 b */
26742 uint8_t result;
26743 /* There was no problem with the package installation. */
26744 #define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_SUCCESS UINT32_C(0x0)
26745 #define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_LAST \
26746 HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESULT_SUCCESS
26747 /* problem_item is 8 b */
26748 uint8_t problem_item;
26749 /* There was no problem with any packaged items. */
26750 #define HWRM_NVM_INSTALL_UPDATE_OUTPUT_PROBLEM_ITEM_NONE \
26751 UINT32_C(0x0)
26752 /* There was a problem with the NVM package itself. */
26753 #define HWRM_NVM_INSTALL_UPDATE_OUTPUT_PROBLEM_ITEM_PACKAGE \
26754 UINT32_C(0xff)
26755 #define HWRM_NVM_INSTALL_UPDATE_OUTPUT_PROBLEM_ITEM_LAST \
26756 HWRM_NVM_INSTALL_UPDATE_OUTPUT_PROBLEM_ITEM_PACKAGE
26757 /* reset_required is 8 b */
26758 uint8_t reset_required;
7c673cae 26759 /*
9f95a23c
TL
26760 * No reset is required for installed/updated firmware or
26761 * microcode to take effect.
7c673cae 26762 */
9f95a23c
TL
26763 #define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESET_REQUIRED_NONE \
26764 UINT32_C(0x0)
7c673cae 26765 /*
9f95a23c
TL
26766 * A PCIe reset (e.g. system reboot) is
26767 * required for newly installed/updated firmware or
26768 * microcode to take effect.
7c673cae 26769 */
9f95a23c
TL
26770 #define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESET_REQUIRED_PCI \
26771 UINT32_C(0x1)
26772 /*
26773 * A controller power reset (e.g. system power-cycle) is
26774 * required for newly installed/updated firmware or
26775 * microcode to take effect. Some newly installed/updated
26776 * firmware or microcode may still take effect upon the
26777 * next PCIe reset.
26778 */
26779 #define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESET_REQUIRED_POWER \
26780 UINT32_C(0x2)
26781 #define HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESET_REQUIRED_LAST \
26782 HWRM_NVM_INSTALL_UPDATE_OUTPUT_RESET_REQUIRED_POWER
26783 uint8_t unused_0[4];
7c673cae 26784 /*
9f95a23c
TL
26785 * This field is used in Output records to indicate that the output
26786 * is completely written to RAM. This field should be read as '1'
26787 * to indicate that the output has been completely written.
26788 * When writing a command completion or response to an internal processor,
26789 * the order of writes has to be such that this field is written last.
7c673cae 26790 */
9f95a23c 26791 uint8_t valid;
7c673cae
FG
26792} __attribute__((packed));
26793
9f95a23c
TL
26794/* hwrm_nvm_install_update_cmd_err (size:64b/8B) */
26795struct hwrm_nvm_install_update_cmd_err {
26796 /*
26797 * command specific error codes that goes to
26798 * the cmd_err field in Common HWRM Error Response.
26799 */
26800 uint8_t code;
26801 /* Unknown error */
26802 #define HWRM_NVM_INSTALL_UPDATE_CMD_ERR_CODE_UNKNOWN UINT32_C(0x0)
26803 /* Unable to complete operation due to fragmentation */
26804 #define HWRM_NVM_INSTALL_UPDATE_CMD_ERR_CODE_FRAG_ERR UINT32_C(0x1)
26805 /* nvm is completely full. */
26806 #define HWRM_NVM_INSTALL_UPDATE_CMD_ERR_CODE_NO_SPACE UINT32_C(0x2)
26807 #define HWRM_NVM_INSTALL_UPDATE_CMD_ERR_CODE_LAST \
26808 HWRM_NVM_INSTALL_UPDATE_CMD_ERR_CODE_NO_SPACE
26809 uint8_t unused_0[7];
26810} __attribute__((packed));
26811
26812/******************
26813 * hwrm_nvm_flush *
26814 ******************/
26815
26816
26817/* hwrm_nvm_flush_input (size:128b/16B) */
26818struct hwrm_nvm_flush_input {
26819 /* The HWRM command request type. */
26820 uint16_t req_type;
7c673cae 26821 /*
9f95a23c
TL
26822 * The completion ring to send the completion event on. This should
26823 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 26824 */
9f95a23c 26825 uint16_t cmpl_ring;
7c673cae 26826 /*
9f95a23c
TL
26827 * The sequence ID is used by the driver for tracking multiple
26828 * commands. This ID is treated as opaque data by the firmware and
26829 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 26830 */
9f95a23c 26831 uint16_t seq_id;
7c673cae 26832 /*
9f95a23c
TL
26833 * The target ID of the command:
26834 * * 0x0-0xFFF8 - The function ID
26835 * * 0xFFF8-0xFFFE - Reserved for internal processors
26836 * * 0xFFFF - HWRM
7c673cae 26837 */
9f95a23c 26838 uint16_t target_id;
7c673cae 26839 /*
9f95a23c
TL
26840 * A physical address pointer pointing to a host buffer that the
26841 * command's response data will be written. This can be either a host
26842 * physical address (HPA) or a guest physical address (GPA) and must
26843 * point to a physically contiguous block of memory.
7c673cae 26844 */
9f95a23c
TL
26845 uint64_t resp_addr;
26846} __attribute__((packed));
26847
26848/* hwrm_nvm_flush_output (size:128b/16B) */
26849struct hwrm_nvm_flush_output {
26850 /* The specific error status for the command. */
26851 uint16_t error_code;
26852 /* The HWRM command request type. */
26853 uint16_t req_type;
26854 /* The sequence ID from the original command. */
26855 uint16_t seq_id;
26856 /* The length of the response data in number of bytes. */
26857 uint16_t resp_len;
26858 uint8_t unused_0[7];
26859 /*
26860 * This field is used in Output records to indicate that the output
26861 * is completely written to RAM. This field should be read as '1'
26862 * to indicate that the output has been completely written.
26863 * When writing a command completion or response to an internal processor,
26864 * the order of writes has to be such that this field is written last.
26865 */
26866 uint8_t valid;
26867} __attribute__((packed));
26868
26869/* hwrm_nvm_flush_cmd_err (size:64b/8B) */
26870struct hwrm_nvm_flush_cmd_err {
26871 /*
26872 * command specific error codes that goes to
26873 * the cmd_err field in Common HWRM Error Response.
26874 */
26875 uint8_t code;
26876 /* Unknown error */
26877 #define HWRM_NVM_FLUSH_CMD_ERR_CODE_UNKNOWN UINT32_C(0x0)
26878 /* flush could not be performed */
26879 #define HWRM_NVM_FLUSH_CMD_ERR_CODE_FAIL UINT32_C(0x1)
26880 #define HWRM_NVM_FLUSH_CMD_ERR_CODE_LAST \
26881 HWRM_NVM_FLUSH_CMD_ERR_CODE_FAIL
26882 uint8_t unused_0[7];
26883} __attribute__((packed));
26884
26885/*************************
26886 * hwrm_nvm_get_variable *
26887 *************************/
26888
26889
26890/* hwrm_nvm_get_variable_input (size:320b/40B) */
26891struct hwrm_nvm_get_variable_input {
26892 /* The HWRM command request type. */
26893 uint16_t req_type;
26894 /*
26895 * The completion ring to send the completion event on. This should
26896 * be the NQ ID returned from the `nq_alloc` HWRM command.
26897 */
26898 uint16_t cmpl_ring;
26899 /*
26900 * The sequence ID is used by the driver for tracking multiple
26901 * commands. This ID is treated as opaque data by the firmware and
26902 * the value is returned in the `hwrm_resp_hdr` upon completion.
26903 */
26904 uint16_t seq_id;
26905 /*
26906 * The target ID of the command:
26907 * * 0x0-0xFFF8 - The function ID
26908 * * 0xFFF8-0xFFFE - Reserved for internal processors
26909 * * 0xFFFF - HWRM
26910 */
26911 uint16_t target_id;
26912 /*
26913 * A physical address pointer pointing to a host buffer that the
26914 * command's response data will be written. This can be either a host
26915 * physical address (HPA) or a guest physical address (GPA) and must
26916 * point to a physically contiguous block of memory.
26917 */
26918 uint64_t resp_addr;
26919 /*
26920 * This is the host address where
26921 * nvm variable will be stored
26922 */
26923 uint64_t dest_data_addr;
26924 /* size of data in bits */
26925 uint16_t data_len;
26926 /* nvm cfg option number */
26927 uint16_t option_num;
26928 /* reserved. */
26929 #define HWRM_NVM_GET_VARIABLE_INPUT_OPTION_NUM_RSVD_0 UINT32_C(0x0)
26930 /* reserved. */
26931 #define HWRM_NVM_GET_VARIABLE_INPUT_OPTION_NUM_RSVD_FFFF \
26932 UINT32_C(0xffff)
26933 #define HWRM_NVM_GET_VARIABLE_INPUT_OPTION_NUM_LAST \
26934 HWRM_NVM_GET_VARIABLE_INPUT_OPTION_NUM_RSVD_FFFF
26935 /*
26936 * Number of dimensions for this nvm configuration variable.
26937 * This value indicates how many of the indexN values to use.
26938 * A value of 0 means that none of the indexN values are valid.
26939 * A value of 1 requires at index0 is valued, a value of 2
26940 * requires that index0 and index1 are valid, and so forth
26941 */
26942 uint16_t dimensions;
26943 /* index for the 1st dimensions */
26944 uint16_t index_0;
26945 /* index for the 2nd dimensions */
26946 uint16_t index_1;
26947 /* index for the 3rd dimensions */
26948 uint16_t index_2;
26949 /* index for the 4th dimensions */
26950 uint16_t index_3;
26951 uint8_t flags;
26952 /*
26953 * When this bit is set to 1, the factory default value will be returned,
26954 * 0 returns the operational value.
26955 */
26956 #define HWRM_NVM_GET_VARIABLE_INPUT_FLAGS_FACTORY_DFLT \
26957 UINT32_C(0x1)
26958 uint8_t unused_0;
26959} __attribute__((packed));
26960
26961/* hwrm_nvm_get_variable_output (size:128b/16B) */
26962struct hwrm_nvm_get_variable_output {
26963 /* The specific error status for the command. */
26964 uint16_t error_code;
26965 /* The HWRM command request type. */
26966 uint16_t req_type;
26967 /* The sequence ID from the original command. */
26968 uint16_t seq_id;
26969 /* The length of the response data in number of bytes. */
26970 uint16_t resp_len;
26971 /* size of data of the actual variable retrieved in bits */
26972 uint16_t data_len;
26973 /*
26974 * option_num is the option number for the data retrieved. It is possible in the
26975 * future that the option number returned would be different than requested. This
26976 * condition could occur if an option is deprecated and a new option id is defined
26977 * with similar characteristics, but has a slightly different definition. This
26978 * also makes it convenient for the caller to identify the variable result with
26979 * the option id from the response.
26980 */
26981 uint16_t option_num;
26982 /* reserved. */
26983 #define HWRM_NVM_GET_VARIABLE_OUTPUT_OPTION_NUM_RSVD_0 UINT32_C(0x0)
26984 /* reserved. */
26985 #define HWRM_NVM_GET_VARIABLE_OUTPUT_OPTION_NUM_RSVD_FFFF \
26986 UINT32_C(0xffff)
26987 #define HWRM_NVM_GET_VARIABLE_OUTPUT_OPTION_NUM_LAST \
26988 HWRM_NVM_GET_VARIABLE_OUTPUT_OPTION_NUM_RSVD_FFFF
26989 uint8_t unused_0[3];
26990 /*
26991 * This field is used in Output records to indicate that the output
26992 * is completely written to RAM. This field should be read as '1'
26993 * to indicate that the output has been completely written.
26994 * When writing a command completion or response to an internal processor,
26995 * the order of writes has to be such that this field is written last.
26996 */
26997 uint8_t valid;
26998} __attribute__((packed));
26999
27000/* hwrm_nvm_get_variable_cmd_err (size:64b/8B) */
27001struct hwrm_nvm_get_variable_cmd_err {
27002 /*
27003 * command specific error codes that goes to
27004 * the cmd_err field in Common HWRM Error Response.
27005 */
27006 uint8_t code;
27007 /* Unknown error */
27008 #define HWRM_NVM_GET_VARIABLE_CMD_ERR_CODE_UNKNOWN UINT32_C(0x0)
27009 /* variable does not exist */
27010 #define HWRM_NVM_GET_VARIABLE_CMD_ERR_CODE_VAR_NOT_EXIST UINT32_C(0x1)
27011 /* configuration is corrupted and the variable cannot be saved */
27012 #define HWRM_NVM_GET_VARIABLE_CMD_ERR_CODE_CORRUPT_VAR UINT32_C(0x2)
27013 /* length specified is too small */
27014 #define HWRM_NVM_GET_VARIABLE_CMD_ERR_CODE_LEN_TOO_SHORT UINT32_C(0x3)
27015 #define HWRM_NVM_GET_VARIABLE_CMD_ERR_CODE_LAST \
27016 HWRM_NVM_GET_VARIABLE_CMD_ERR_CODE_LEN_TOO_SHORT
27017 uint8_t unused_0[7];
27018} __attribute__((packed));
27019
27020/*************************
27021 * hwrm_nvm_set_variable *
27022 *************************/
27023
27024
27025/* hwrm_nvm_set_variable_input (size:320b/40B) */
27026struct hwrm_nvm_set_variable_input {
27027 /* The HWRM command request type. */
27028 uint16_t req_type;
27029 /*
27030 * The completion ring to send the completion event on. This should
27031 * be the NQ ID returned from the `nq_alloc` HWRM command.
27032 */
27033 uint16_t cmpl_ring;
27034 /*
27035 * The sequence ID is used by the driver for tracking multiple
27036 * commands. This ID is treated as opaque data by the firmware and
27037 * the value is returned in the `hwrm_resp_hdr` upon completion.
27038 */
27039 uint16_t seq_id;
27040 /*
27041 * The target ID of the command:
27042 * * 0x0-0xFFF8 - The function ID
27043 * * 0xFFF8-0xFFFE - Reserved for internal processors
27044 * * 0xFFFF - HWRM
27045 */
27046 uint16_t target_id;
27047 /*
27048 * A physical address pointer pointing to a host buffer that the
27049 * command's response data will be written. This can be either a host
27050 * physical address (HPA) or a guest physical address (GPA) and must
27051 * point to a physically contiguous block of memory.
27052 */
27053 uint64_t resp_addr;
27054 /*
27055 * This is the host address where
27056 * nvm variable will be copied from
27057 */
27058 uint64_t src_data_addr;
27059 /* size of data in bits */
27060 uint16_t data_len;
27061 /* nvm cfg option number */
27062 uint16_t option_num;
27063 /* reserved. */
27064 #define HWRM_NVM_SET_VARIABLE_INPUT_OPTION_NUM_RSVD_0 UINT32_C(0x0)
27065 /* reserved. */
27066 #define HWRM_NVM_SET_VARIABLE_INPUT_OPTION_NUM_RSVD_FFFF \
27067 UINT32_C(0xffff)
27068 #define HWRM_NVM_SET_VARIABLE_INPUT_OPTION_NUM_LAST \
27069 HWRM_NVM_SET_VARIABLE_INPUT_OPTION_NUM_RSVD_FFFF
27070 /*
27071 * Number of dimensions for this nvm configuration variable.
27072 * This value indicates how many of the indexN values to use.
27073 * A value of 0 means that none of the indexN values are valid.
27074 * A value of 1 requires at index0 is valued, a value of 2
27075 * requires that index0 and index1 are valid, and so forth
27076 */
27077 uint16_t dimensions;
27078 /* index for the 1st dimensions */
27079 uint16_t index_0;
27080 /* index for the 2nd dimensions */
27081 uint16_t index_1;
27082 /* index for the 3rd dimensions */
27083 uint16_t index_2;
27084 /* index for the 4th dimensions */
27085 uint16_t index_3;
27086 uint8_t flags;
27087 /* When this bit is 1, flush internal cache after this write operation (see hwrm_nvm_flush command.) */
27088 #define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_FORCE_FLUSH \
27089 UINT32_C(0x1)
27090 /* encryption method */
27091 #define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_ENCRYPT_MODE_MASK \
27092 UINT32_C(0xe)
27093 #define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_ENCRYPT_MODE_SFT 1
27094 /* No encryption. */
27095 #define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_ENCRYPT_MODE_NONE \
27096 (UINT32_C(0x0) << 1)
27097 /* one-way encryption. */
27098 #define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_ENCRYPT_MODE_HMAC_SHA1 \
27099 (UINT32_C(0x1) << 1)
27100 /* symmetric AES256 encryption. */
27101 #define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_ENCRYPT_MODE_AES256 \
27102 (UINT32_C(0x2) << 1)
27103 /* SHA1 digest appended to plaintext contents, for authentication */
27104 #define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_ENCRYPT_MODE_HMAC_SHA1_AUTH \
27105 (UINT32_C(0x3) << 1)
27106 #define HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_ENCRYPT_MODE_LAST \
27107 HWRM_NVM_SET_VARIABLE_INPUT_FLAGS_ENCRYPT_MODE_HMAC_SHA1_AUTH
27108 uint8_t unused_0;
27109} __attribute__((packed));
27110
27111/* hwrm_nvm_set_variable_output (size:128b/16B) */
27112struct hwrm_nvm_set_variable_output {
27113 /* The specific error status for the command. */
27114 uint16_t error_code;
27115 /* The HWRM command request type. */
27116 uint16_t req_type;
27117 /* The sequence ID from the original command. */
27118 uint16_t seq_id;
27119 /* The length of the response data in number of bytes. */
27120 uint16_t resp_len;
27121 uint8_t unused_0[7];
27122 /*
27123 * This field is used in Output records to indicate that the output
27124 * is completely written to RAM. This field should be read as '1'
27125 * to indicate that the output has been completely written.
27126 * When writing a command completion or response to an internal processor,
27127 * the order of writes has to be such that this field is written last.
27128 */
27129 uint8_t valid;
27130} __attribute__((packed));
27131
27132/* hwrm_nvm_set_variable_cmd_err (size:64b/8B) */
27133struct hwrm_nvm_set_variable_cmd_err {
27134 /*
27135 * command specific error codes that goes to
27136 * the cmd_err field in Common HWRM Error Response.
27137 */
27138 uint8_t code;
27139 /* Unknown error */
27140 #define HWRM_NVM_SET_VARIABLE_CMD_ERR_CODE_UNKNOWN UINT32_C(0x0)
27141 /* variable does not exist */
27142 #define HWRM_NVM_SET_VARIABLE_CMD_ERR_CODE_VAR_NOT_EXIST UINT32_C(0x1)
27143 /* configuration is corrupted and the variable cannot be saved */
27144 #define HWRM_NVM_SET_VARIABLE_CMD_ERR_CODE_CORRUPT_VAR UINT32_C(0x2)
27145 #define HWRM_NVM_SET_VARIABLE_CMD_ERR_CODE_LAST \
27146 HWRM_NVM_SET_VARIABLE_CMD_ERR_CODE_CORRUPT_VAR
27147 uint8_t unused_0[7];
27148} __attribute__((packed));
27149
27150/****************************
27151 * hwrm_nvm_validate_option *
27152 ****************************/
27153
27154
27155/* hwrm_nvm_validate_option_input (size:320b/40B) */
27156struct hwrm_nvm_validate_option_input {
27157 /* The HWRM command request type. */
27158 uint16_t req_type;
7c673cae 27159 /*
9f95a23c
TL
27160 * The completion ring to send the completion event on. This should
27161 * be the NQ ID returned from the `nq_alloc` HWRM command.
7c673cae 27162 */
9f95a23c 27163 uint16_t cmpl_ring;
7c673cae 27164 /*
9f95a23c
TL
27165 * The sequence ID is used by the driver for tracking multiple
27166 * commands. This ID is treated as opaque data by the firmware and
27167 * the value is returned in the `hwrm_resp_hdr` upon completion.
7c673cae 27168 */
9f95a23c 27169 uint16_t seq_id;
7c673cae 27170 /*
9f95a23c
TL
27171 * The target ID of the command:
27172 * * 0x0-0xFFF8 - The function ID
27173 * * 0xFFF8-0xFFFE - Reserved for internal processors
27174 * * 0xFFFF - HWRM
7c673cae 27175 */
9f95a23c 27176 uint16_t target_id;
7c673cae 27177 /*
9f95a23c
TL
27178 * A physical address pointer pointing to a host buffer that the
27179 * command's response data will be written. This can be either a host
27180 * physical address (HPA) or a guest physical address (GPA) and must
27181 * point to a physically contiguous block of memory.
7c673cae 27182 */
9f95a23c 27183 uint64_t resp_addr;
7c673cae 27184 /*
9f95a23c
TL
27185 * This is the host address where
27186 * nvm variable will be copied from
7c673cae 27187 */
9f95a23c
TL
27188 uint64_t src_data_addr;
27189 /* size of data in bits */
27190 uint16_t data_len;
27191 /* nvm cfg option number */
27192 uint16_t option_num;
27193 /* reserved. */
27194 #define HWRM_NVM_VALIDATE_OPTION_INPUT_OPTION_NUM_RSVD_0 \
27195 UINT32_C(0x0)
27196 /* reserved. */
27197 #define HWRM_NVM_VALIDATE_OPTION_INPUT_OPTION_NUM_RSVD_FFFF \
27198 UINT32_C(0xffff)
27199 #define HWRM_NVM_VALIDATE_OPTION_INPUT_OPTION_NUM_LAST \
27200 HWRM_NVM_VALIDATE_OPTION_INPUT_OPTION_NUM_RSVD_FFFF
27201 /*
27202 * Number of dimensions for this nvm configuration variable.
27203 * This value indicates how many of the indexN values to use.
27204 * A value of 0 means that none of the indexN values are valid.
27205 * A value of 1 requires at index0 is valued, a value of 2
27206 * requires that index0 and index1 are valid, and so forth
27207 */
27208 uint16_t dimensions;
27209 /* index for the 1st dimensions */
27210 uint16_t index_0;
27211 /* index for the 2nd dimensions */
27212 uint16_t index_1;
27213 /* index for the 3rd dimensions */
27214 uint16_t index_2;
27215 /* index for the 4th dimensions */
27216 uint16_t index_3;
27217 uint8_t unused_0[2];
27218} __attribute__((packed));
27219
27220/* hwrm_nvm_validate_option_output (size:128b/16B) */
27221struct hwrm_nvm_validate_option_output {
27222 /* The specific error status for the command. */
27223 uint16_t error_code;
27224 /* The HWRM command request type. */
27225 uint16_t req_type;
27226 /* The sequence ID from the original command. */
27227 uint16_t seq_id;
27228 /* The length of the response data in number of bytes. */
27229 uint16_t resp_len;
27230 uint8_t result;
27231 /* indicates that the value provided for the option is not matching with the saved data. */
27232 #define HWRM_NVM_VALIDATE_OPTION_OUTPUT_RESULT_NOT_MATCH UINT32_C(0x0)
27233 /* indicates that the value provided for the option is matching the saved data. */
27234 #define HWRM_NVM_VALIDATE_OPTION_OUTPUT_RESULT_MATCH UINT32_C(0x1)
27235 #define HWRM_NVM_VALIDATE_OPTION_OUTPUT_RESULT_LAST \
27236 HWRM_NVM_VALIDATE_OPTION_OUTPUT_RESULT_MATCH
27237 uint8_t unused_0[6];
27238 /*
27239 * This field is used in Output records to indicate that the output
27240 * is completely written to RAM. This field should be read as '1'
27241 * to indicate that the output has been completely written.
27242 * When writing a command completion or response to an internal processor,
27243 * the order of writes has to be such that this field is written last.
27244 */
27245 uint8_t valid;
27246} __attribute__((packed));
27247
27248/* hwrm_nvm_validate_option_cmd_err (size:64b/8B) */
27249struct hwrm_nvm_validate_option_cmd_err {
27250 /*
27251 * command specific error codes that goes to
27252 * the cmd_err field in Common HWRM Error Response.
27253 */
27254 uint8_t code;
27255 /* Unknown error */
27256 #define HWRM_NVM_VALIDATE_OPTION_CMD_ERR_CODE_UNKNOWN UINT32_C(0x0)
27257 #define HWRM_NVM_VALIDATE_OPTION_CMD_ERR_CODE_LAST \
27258 HWRM_NVM_VALIDATE_OPTION_CMD_ERR_CODE_UNKNOWN
27259 uint8_t unused_0[7];
7c673cae
FG
27260} __attribute__((packed));
27261
9f95a23c 27262#endif /* _HSI_STRUCT_DEF_DPDK_H_ */