git: 25f38d09907f - main - if_bnxt: Update Firmware Header to Latest Version 1.10.2.136
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 07 Mar 2024 19:27:11 UTC
The branch main has been updated by ssaxena:
URL: https://cgit.FreeBSD.org/src/commit/?id=25f38d09907fdfcc473fdc53c17b7c2d8c7c09a1
commit 25f38d09907fdfcc473fdc53c17b7c2d8c7c09a1
Author: Chandrakanth Patil <chandrakanth.patil@broadcom.com>
AuthorDate: 2024-03-06 13:17:50 +0000
Commit: Sumit Saxena <ssaxena@FreeBSD.org>
CommitDate: 2024-03-07 19:16:39 +0000
if_bnxt: Update Firmware Header to Latest Version 1.10.2.136
Update Firmware Header to Latest Version 1.10.2.136.
Reviewed by: imp
Approved by: imp
Differential revision: https://reviews.freebsd.org/D42955
---
sys/dev/bnxt/hsi_struct_def.h | 93714 +++++++++++++++++++++++-----------------
1 file changed, 53950 insertions(+), 39764 deletions(-)
diff --git a/sys/dev/bnxt/hsi_struct_def.h b/sys/dev/bnxt/hsi_struct_def.h
index 576e1e9a7ed8..d2097ca1ca33 100644
--- a/sys/dev/bnxt/hsi_struct_def.h
+++ b/sys/dev/bnxt/hsi_struct_def.h
@@ -28,8 +28,10 @@
*/
#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
/*
- * Copyright(c) 2001-2021, Broadcom. All rights reserved. The
+ * Copyright(c) 2001-2023, Broadcom. All rights reserved. The
* term Broadcom refers to Broadcom Inc. and/or its subsidiaries.
* Proprietary and Confidential Information.
*
@@ -40,8 +42,8 @@
* DO NOT MODIFY!!! This file is automatically generated.
*/
-#ifndef _HSI_STRUCT_DEF_EXTERNAL_H_
-#define _HSI_STRUCT_DEF_EXTERNAL_H_
+#ifndef _HSI_STRUCT_DEF_H_
+#define _HSI_STRUCT_DEF_H_
/* This is the HWRM command header. */
/* hwrm_cmd_hdr (size:128b/16B) */
@@ -433,6 +435,10 @@ typedef struct hwrm_short_input {
((x) == 0xd7 ? "HWRM_PORT_SFP_SIDEBAND_QCFG": \
((x) == 0xd8 ? "HWRM_FW_STATE_UNQUIESCE": \
((x) == 0xd9 ? "HWRM_PORT_DSC_DUMP": \
+ ((x) == 0xda ? "HWRM_PORT_EP_TX_QCFG": \
+ ((x) == 0xdb ? "HWRM_PORT_EP_TX_CFG": \
+ ((x) == 0xdc ? "HWRM_PORT_CFG": \
+ ((x) == 0xdd ? "HWRM_PORT_QCFG": \
((x) == 0xe0 ? "HWRM_TEMP_MONITOR_QUERY": \
((x) == 0xe1 ? "HWRM_REG_POWER_QUERY": \
((x) == 0xe2 ? "HWRM_CORE_FREQUENCY_QUERY": \
@@ -450,7 +456,7 @@ typedef struct hwrm_short_input {
((x) == 0xfa ? "HWRM_CFA_METER_INSTANCE_CFG": \
((x) == 0xfd ? "HWRM_CFA_VFR_ALLOC": \
((x) == 0xfe ? "HWRM_CFA_VFR_FREE": \
- "Unknown decode" )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) : \
+ "Unknown decode" )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) : \
(((x) < 0x180) ? \
((x) == 0x100 ? "HWRM_CFA_VF_PAIR_ALLOC": \
((x) == 0x101 ? "HWRM_CFA_VF_PAIR_FREE": \
@@ -492,6 +498,8 @@ typedef struct hwrm_short_input {
((x) == 0x125 ? "HWRM_CFA_TFLIB": \
((x) == 0x126 ? "HWRM_CFA_LAG_GROUP_MEMBER_RGTR": \
((x) == 0x127 ? "HWRM_CFA_LAG_GROUP_MEMBER_UNRGTR": \
+ ((x) == 0x128 ? "HWRM_CFA_TLS_FILTER_ALLOC": \
+ ((x) == 0x129 ? "HWRM_CFA_TLS_FILTER_FREE": \
((x) == 0x12e ? "HWRM_ENGINE_CKV_STATUS": \
((x) == 0x12f ? "HWRM_ENGINE_CKV_CKEK_ADD": \
((x) == 0x130 ? "HWRM_ENGINE_CKV_CKEK_DELETE": \
@@ -531,7 +539,7 @@ typedef struct hwrm_short_input {
((x) == 0x163 ? "HWRM_ENGINE_NQ_FREE": \
((x) == 0x164 ? "HWRM_ENGINE_ON_DIE_RQE_CREDITS": \
((x) == 0x165 ? "HWRM_ENGINE_FUNC_QCFG": \
- "Unknown decode" ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) : \
+ "Unknown decode" ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) : \
(((x) < 0x200) ? \
((x) == 0x190 ? "HWRM_FUNC_RESOURCE_QCAPS": \
((x) == 0x191 ? "HWRM_FUNC_VF_RESOURCE_CFG": \
@@ -549,7 +557,20 @@ typedef struct hwrm_short_input {
((x) == 0x19d ? "HWRM_FUNC_PTP_PIN_CFG": \
((x) == 0x19e ? "HWRM_FUNC_PTP_CFG": \
((x) == 0x19f ? "HWRM_FUNC_PTP_TS_QUERY": \
- "Unknown decode" )))))))))))))))) : \
+ ((x) == 0x1a0 ? "HWRM_FUNC_PTP_EXT_CFG": \
+ ((x) == 0x1a1 ? "HWRM_FUNC_PTP_EXT_QCFG": \
+ ((x) == 0x1a2 ? "HWRM_FUNC_KEY_CTX_ALLOC": \
+ ((x) == 0x1a3 ? "HWRM_FUNC_BACKING_STORE_CFG_V2": \
+ ((x) == 0x1a4 ? "HWRM_FUNC_BACKING_STORE_QCFG_V2": \
+ ((x) == 0x1a5 ? "HWRM_FUNC_DBR_PACING_CFG": \
+ ((x) == 0x1a6 ? "HWRM_FUNC_DBR_PACING_QCFG": \
+ ((x) == 0x1a7 ? "HWRM_FUNC_DBR_PACING_BROADCAST_EVENT": \
+ ((x) == 0x1a8 ? "HWRM_FUNC_BACKING_STORE_QCAPS_V2": \
+ ((x) == 0x1a9 ? "HWRM_FUNC_DBR_PACING_NQLIST_QUERY": \
+ ((x) == 0x1aa ? "HWRM_FUNC_DBR_RECOVERY_COMPLETED": \
+ ((x) == 0x1ab ? "HWRM_FUNC_SYNCE_CFG": \
+ ((x) == 0x1ac ? "HWRM_FUNC_SYNCE_QCFG": \
+ "Unknown decode" ))))))))))))))))))))))))))))) : \
(((x) < 0x280) ? \
((x) == 0x200 ? "HWRM_SELFTEST_QLIST": \
((x) == 0x201 ? "HWRM_SELFTEST_EXEC": \
@@ -568,7 +589,15 @@ typedef struct hwrm_short_input {
((x) == 0x20e ? "HWRM_MFG_PARAM_SEEPROM_SYNC": \
((x) == 0x20f ? "HWRM_MFG_PARAM_SEEPROM_READ": \
((x) == 0x210 ? "HWRM_MFG_PARAM_SEEPROM_HEALTH": \
- "Unknown decode" ))))))))))))))))) : \
+ ((x) == 0x211 ? "HWRM_MFG_PRVSN_EXPORT_CSR": \
+ ((x) == 0x212 ? "HWRM_MFG_PRVSN_IMPORT_CERT": \
+ ((x) == 0x213 ? "HWRM_MFG_PRVSN_GET_STATE": \
+ ((x) == 0x214 ? "HWRM_MFG_GET_NVM_MEASUREMENT": \
+ ((x) == 0x215 ? "HWRM_MFG_PSOC_QSTATUS": \
+ ((x) == 0x216 ? "HWRM_MFG_SELFTEST_QLIST": \
+ ((x) == 0x217 ? "HWRM_MFG_SELFTEST_EXEC": \
+ ((x) == 0x218 ? "HWRM_STAT_GENERIC_QSTATS": \
+ "Unknown decode" ))))))))))))))))))))))))) : \
(((x) < 0x300) ? \
((x) == 0x2bc ? "HWRM_TF": \
((x) == 0x2bd ? "HWRM_TF_VERSION_GET": \
@@ -583,6 +612,8 @@ typedef struct hwrm_short_input {
((x) == 0x2ce ? "HWRM_TF_SESSION_RESC_FREE": \
((x) == 0x2cf ? "HWRM_TF_SESSION_RESC_FLUSH": \
((x) == 0x2d0 ? "HWRM_TF_SESSION_RESC_INFO": \
+ ((x) == 0x2d1 ? "HWRM_TF_SESSION_HOTUP_STATE_SET": \
+ ((x) == 0x2d2 ? "HWRM_TF_SESSION_HOTUP_STATE_GET": \
((x) == 0x2da ? "HWRM_TF_TBL_TYPE_GET": \
((x) == 0x2db ? "HWRM_TF_TBL_TYPE_SET": \
((x) == 0x2dc ? "HWRM_TF_TBL_TYPE_BULK_GET": \
@@ -606,7 +637,33 @@ typedef struct hwrm_short_input {
((x) == 0x2fd ? "HWRM_TF_GLOBAL_CFG_GET": \
((x) == 0x2fe ? "HWRM_TF_IF_TBL_SET": \
((x) == 0x2ff ? "HWRM_TF_IF_TBL_GET": \
- "Unknown decode" )))))))))))))))))))))))))))))))))))) : \
+ "Unknown decode" )))))))))))))))))))))))))))))))))))))) : \
+ (((x) < 0x400) ? \
+ ((x) == 0x380 ? "HWRM_TFC_TBL_SCOPE_QCAPS": \
+ ((x) == 0x381 ? "HWRM_TFC_TBL_SCOPE_ID_ALLOC": \
+ ((x) == 0x382 ? "HWRM_TFC_TBL_SCOPE_CONFIG": \
+ ((x) == 0x383 ? "HWRM_TFC_TBL_SCOPE_DECONFIG": \
+ ((x) == 0x384 ? "HWRM_TFC_TBL_SCOPE_FID_ADD": \
+ ((x) == 0x385 ? "HWRM_TFC_TBL_SCOPE_FID_REM": \
+ ((x) == 0x386 ? "HWRM_TFC_TBL_SCOPE_POOL_ALLOC": \
+ ((x) == 0x387 ? "HWRM_TFC_TBL_SCOPE_POOL_FREE": \
+ ((x) == 0x388 ? "HWRM_TFC_SESSION_ID_ALLOC": \
+ ((x) == 0x389 ? "HWRM_TFC_SESSION_FID_ADD": \
+ ((x) == 0x38a ? "HWRM_TFC_SESSION_FID_REM": \
+ ((x) == 0x38b ? "HWRM_TFC_IDENT_ALLOC": \
+ ((x) == 0x38c ? "HWRM_TFC_IDENT_FREE": \
+ ((x) == 0x38d ? "HWRM_TFC_IDX_TBL_ALLOC": \
+ ((x) == 0x38e ? "HWRM_TFC_IDX_TBL_ALLOC_SET": \
+ ((x) == 0x38f ? "HWRM_TFC_IDX_TBL_SET": \
+ ((x) == 0x390 ? "HWRM_TFC_IDX_TBL_GET": \
+ ((x) == 0x391 ? "HWRM_TFC_IDX_TBL_FREE": \
+ ((x) == 0x392 ? "HWRM_TFC_GLOBAL_ID_ALLOC": \
+ ((x) == 0x393 ? "HWRM_TFC_TCAM_SET": \
+ ((x) == 0x394 ? "HWRM_TFC_TCAM_GET": \
+ ((x) == 0x395 ? "HWRM_TFC_TCAM_ALLOC": \
+ ((x) == 0x396 ? "HWRM_TFC_TCAM_ALLOC_SET": \
+ ((x) == 0x397 ? "HWRM_TFC_TCAM_FREE": \
+ "Unknown decode" )))))))))))))))))))))))) : \
(((x) < 0x480) ? \
((x) == 0x400 ? "HWRM_SV": \
"Unknown decode" ) : \
@@ -641,6 +698,7 @@ typedef struct hwrm_short_input {
((x) == 0xff2b ? "HWRM_DBG_USEQ_RESP_HDR": \
"Unknown decode" )))))))))))))))))))))))))))) : \
(((x) <= 0xffff) ? \
+ ((x) == 0xffec ? "HWRM_NVM_DEFRAG": \
((x) == 0xffed ? "HWRM_NVM_REQ_ARBITRATION": \
((x) == 0xffee ? "HWRM_NVM_FACTORY_DEFAULTS": \
((x) == 0xffef ? "HWRM_NVM_VALIDATE_OPTION": \
@@ -660,8 +718,8 @@ typedef struct hwrm_short_input {
((x) == 0xfffd ? "HWRM_NVM_READ": \
((x) == 0xfffe ? "HWRM_NVM_WRITE": \
((x) == 0xffff ? "HWRM_NVM_RAW_WRITE_BLK": \
- "Unknown decode" ))))))))))))))))))) : \
- "Unknown decode" )))))))))
+ "Unknown decode" )))))))))))))))))))) : \
+ "Unknown decode" ))))))))))
/*
@@ -864,6 +922,10 @@ typedef struct cmd_nums {
#define HWRM_FW_STATE_UNQUIESCE UINT32_C(0xd8)
/* Tells the fw to collect dsc dump on a given port and lane. */
#define HWRM_PORT_DSC_DUMP UINT32_C(0xd9)
+ #define HWRM_PORT_EP_TX_QCFG UINT32_C(0xda)
+ #define HWRM_PORT_EP_TX_CFG UINT32_C(0xdb)
+ #define HWRM_PORT_CFG UINT32_C(0xdc)
+ #define HWRM_PORT_QCFG UINT32_C(0xdd)
#define HWRM_TEMP_MONITOR_QUERY UINT32_C(0xe0)
#define HWRM_REG_POWER_QUERY UINT32_C(0xe1)
#define HWRM_CORE_FREQUENCY_QUERY UINT32_C(0xe2)
@@ -902,9 +964,7 @@ typedef struct cmd_nums {
#define HWRM_CFA_FLOW_FREE UINT32_C(0x104)
/* Experimental */
#define HWRM_CFA_FLOW_FLUSH UINT32_C(0x105)
- /* Experimental */
#define HWRM_CFA_FLOW_STATS UINT32_C(0x106)
- /* Experimental */
#define HWRM_CFA_FLOW_INFO UINT32_C(0x107)
/* Experimental */
#define HWRM_CFA_DECAP_FILTER_ALLOC UINT32_C(0x108)
@@ -965,6 +1025,10 @@ typedef struct cmd_nums {
#define HWRM_CFA_LAG_GROUP_MEMBER_RGTR UINT32_C(0x126)
/* Experimental */
#define HWRM_CFA_LAG_GROUP_MEMBER_UNRGTR UINT32_C(0x127)
+ /* Experimental */
+ #define HWRM_CFA_TLS_FILTER_ALLOC UINT32_C(0x128)
+ /* Experimental */
+ #define HWRM_CFA_TLS_FILTER_FREE UINT32_C(0x129)
/* Engine CKV - Get the current allocation status of keys provisioned in the key vault. */
#define HWRM_ENGINE_CKV_STATUS UINT32_C(0x12e)
/* Engine CKV - Add a new CKEK used to encrypt keys. */
@@ -1075,6 +1139,38 @@ typedef struct cmd_nums {
#define HWRM_FUNC_PTP_CFG UINT32_C(0x19e)
/* PTP - Queries for PHC timestamps. */
#define HWRM_FUNC_PTP_TS_QUERY UINT32_C(0x19f)
+ /* PTP - Extended PTP configuration. */
+ #define HWRM_FUNC_PTP_EXT_CFG UINT32_C(0x1a0)
+ /* PTP - Query extended PTP configuration. */
+ #define HWRM_FUNC_PTP_EXT_QCFG UINT32_C(0x1a1)
+ /* The command is used to allocate KTLS or QUIC key contexts. */
+ #define HWRM_FUNC_KEY_CTX_ALLOC UINT32_C(0x1a2)
+ /* The is the new API to configure backing stores. */
+ #define HWRM_FUNC_BACKING_STORE_CFG_V2 UINT32_C(0x1a3)
+ /* The is the new API to query backing store configurations. */
+ #define HWRM_FUNC_BACKING_STORE_QCFG_V2 UINT32_C(0x1a4)
+ /* To support doorbell pacing configuration. */
+ #define HWRM_FUNC_DBR_PACING_CFG UINT32_C(0x1a5)
+ /* To query doorbell pacing configuration. */
+ #define HWRM_FUNC_DBR_PACING_QCFG UINT32_C(0x1a6)
+ /*
+ * To broadcast the doorbell event to the drivers to
+ * initiate pacing of doorbells.
+ */
+ #define HWRM_FUNC_DBR_PACING_BROADCAST_EVENT UINT32_C(0x1a7)
+ /* The is the new API to query backing store capabilities. */
+ #define HWRM_FUNC_BACKING_STORE_QCAPS_V2 UINT32_C(0x1a8)
+ /* To query doorbell pacing NQ id list configuration. */
+ #define HWRM_FUNC_DBR_PACING_NQLIST_QUERY UINT32_C(0x1a9)
+ /*
+ * To notify the firmware that recovery cycle has been
+ * completed by host function drivers.
+ */
+ #define HWRM_FUNC_DBR_RECOVERY_COMPLETED UINT32_C(0x1aa)
+ /* Configures SyncE configurations. */
+ #define HWRM_FUNC_SYNCE_CFG UINT32_C(0x1ab)
+ /* Queries SyncE configurations. */
+ #define HWRM_FUNC_SYNCE_QCFG UINT32_C(0x1ac)
/* Experimental */
#define HWRM_SELFTEST_QLIST UINT32_C(0x200)
/* Experimental */
@@ -1112,6 +1208,40 @@ typedef struct cmd_nums {
#define HWRM_MFG_PARAM_SEEPROM_READ UINT32_C(0x20f)
/* Tells the fw to get the health of seeprom data */
#define HWRM_MFG_PARAM_SEEPROM_HEALTH UINT32_C(0x210)
+ /*
+ * The command is used for certificate provisioning to export a
+ * Certificate Signing Request (CSR) from the device.
+ */
+ #define HWRM_MFG_PRVSN_EXPORT_CSR UINT32_C(0x211)
+ /*
+ * The command is used for certificate provisioning to import a
+ * CA-signed certificate chain to the device.
+ */
+ #define HWRM_MFG_PRVSN_IMPORT_CERT UINT32_C(0x212)
+ /*
+ * The command is used for certificate provisioning to query the
+ * provisioned state.
+ */
+ #define HWRM_MFG_PRVSN_GET_STATE UINT32_C(0x213)
+ /*
+ * The command is used to get the hash of the NVM configuration that is
+ * calculated during firmware boot.
+ */
+ #define HWRM_MFG_GET_NVM_MEASUREMENT UINT32_C(0x214)
+ /* Retrieves the PSOC status and provisioning information. */
+ #define HWRM_MFG_PSOC_QSTATUS UINT32_C(0x215)
+ /*
+ * This command allows manufacturing tool to determine which selftests
+ * are available to be run.
+ */
+ #define HWRM_MFG_SELFTEST_QLIST UINT32_C(0x216)
+ /*
+ * This command allows manufacturing tool to request which selftests
+ * to run.
+ */
+ #define HWRM_MFG_SELFTEST_EXEC UINT32_C(0x217)
+ /* Queries the generic stats */
+ #define HWRM_STAT_GENERIC_QSTATS UINT32_C(0x218)
/* Experimental */
#define HWRM_TF UINT32_C(0x2bc)
/* Experimental */
@@ -1139,6 +1269,10 @@ typedef struct cmd_nums {
/* Experimental */
#define HWRM_TF_SESSION_RESC_INFO UINT32_C(0x2d0)
/* Experimental */
+ #define HWRM_TF_SESSION_HOTUP_STATE_SET UINT32_C(0x2d1)
+ /* Experimental */
+ #define HWRM_TF_SESSION_HOTUP_STATE_GET UINT32_C(0x2d2)
+ /* Experimental */
#define HWRM_TF_TBL_TYPE_GET UINT32_C(0x2da)
/* Experimental */
#define HWRM_TF_TBL_TYPE_SET UINT32_C(0x2db)
@@ -1184,6 +1318,54 @@ typedef struct cmd_nums {
#define HWRM_TF_IF_TBL_SET UINT32_C(0x2fe)
/* Experimental */
#define HWRM_TF_IF_TBL_GET UINT32_C(0x2ff)
+ /* TruFlow command to check firmware table scope capabilities. */
+ #define HWRM_TFC_TBL_SCOPE_QCAPS UINT32_C(0x380)
+ /* TruFlow command to allocate a table scope ID and create the pools. */
+ #define HWRM_TFC_TBL_SCOPE_ID_ALLOC UINT32_C(0x381)
+ /* TruFlow command to configure the table scope memory. */
+ #define HWRM_TFC_TBL_SCOPE_CONFIG UINT32_C(0x382)
+ /* TruFlow command to deconfigure a table scope memory. */
+ #define HWRM_TFC_TBL_SCOPE_DECONFIG UINT32_C(0x383)
+ /* TruFlow command to add a FID to a table scope. */
+ #define HWRM_TFC_TBL_SCOPE_FID_ADD UINT32_C(0x384)
+ /* TruFlow command to remove a FID from a table scope. */
+ #define HWRM_TFC_TBL_SCOPE_FID_REM UINT32_C(0x385)
+ /* TruFlow command to allocate a table scope pool. */
+ #define HWRM_TFC_TBL_SCOPE_POOL_ALLOC UINT32_C(0x386)
+ /* TruFlow command to free a table scope pool. */
+ #define HWRM_TFC_TBL_SCOPE_POOL_FREE UINT32_C(0x387)
+ /* Experimental */
+ #define HWRM_TFC_SESSION_ID_ALLOC UINT32_C(0x388)
+ /* Experimental */
+ #define HWRM_TFC_SESSION_FID_ADD UINT32_C(0x389)
+ /* Experimental */
+ #define HWRM_TFC_SESSION_FID_REM UINT32_C(0x38a)
+ /* Experimental */
+ #define HWRM_TFC_IDENT_ALLOC UINT32_C(0x38b)
+ /* Experimental */
+ #define HWRM_TFC_IDENT_FREE UINT32_C(0x38c)
+ /* TruFlow command to allocate an index table entry */
+ #define HWRM_TFC_IDX_TBL_ALLOC UINT32_C(0x38d)
+ /* TruFlow command to allocate and set an index table entry */
+ #define HWRM_TFC_IDX_TBL_ALLOC_SET UINT32_C(0x38e)
+ /* TruFlow command to set an index table entry */
+ #define HWRM_TFC_IDX_TBL_SET UINT32_C(0x38f)
+ /* TruFlow command to get an index table entry */
+ #define HWRM_TFC_IDX_TBL_GET UINT32_C(0x390)
+ /* TruFlow command to free an index table entry */
+ #define HWRM_TFC_IDX_TBL_FREE UINT32_C(0x391)
+ /* TruFlow command to allocate resources for a global id. */
+ #define HWRM_TFC_GLOBAL_ID_ALLOC UINT32_C(0x392)
+ /* TruFlow command to set TCAM entry. */
+ #define HWRM_TFC_TCAM_SET UINT32_C(0x393)
+ /* TruFlow command to get TCAM entry. */
+ #define HWRM_TFC_TCAM_GET UINT32_C(0x394)
+ /* TruFlow command to allocate a TCAM entry. */
+ #define HWRM_TFC_TCAM_ALLOC UINT32_C(0x395)
+ /* TruFlow command allocate and set TCAM entry. */
+ #define HWRM_TFC_TCAM_ALLOC_SET UINT32_C(0x396)
+ /* TruFlow command to free a TCAM entry. */
+ #define HWRM_TFC_TCAM_FREE UINT32_C(0x397)
/* Experimental */
#define HWRM_SV UINT32_C(0x400)
/* Experimental */
@@ -1241,6 +1423,7 @@ typedef struct cmd_nums {
#define HWRM_DBG_USEQ_DELIVERY_REQ UINT32_C(0xff2a)
/* Experimental */
#define HWRM_DBG_USEQ_RESP_HDR UINT32_C(0xff2b)
+ #define HWRM_NVM_DEFRAG UINT32_C(0xffec)
#define HWRM_NVM_REQ_ARBITRATION UINT32_C(0xffed)
/* Experimental */
#define HWRM_NVM_FACTORY_DEFAULTS UINT32_C(0xffee)
@@ -1360,6 +1543,13 @@ typedef struct ret_codes {
* by the host is not allowed due to a secure lock violation.
*/
#define HWRM_ERR_CODE_RESOURCE_LOCKED UINT32_C(0x11)
+ /*
+ * This error code is reported by Firmware when an operation requested
+ * by a VF cannot be forwarded to the parent PF as required, either
+ * because the PF is down or otherwise doesn't have an appropriate
+ * async completion ring or associated forwarding buffers configured.
+ */
+ #define HWRM_ERR_CODE_PF_UNAVAILABLE UINT32_C(0x12)
/*
* This value indicates that the HWRM response is in TLV format and
* should be interpreted as one or more TLVs starting with the
@@ -1396,7 +1586,8 @@ typedef struct ret_codes {
((x) == 0xf ? "HWRM_ERROR": \
((x) == 0x10 ? "BUSY": \
((x) == 0x11 ? "RESOURCE_LOCKED": \
- "Unknown decode" )))))))))))))))))) : \
+ ((x) == 0x12 ? "PF_UNAVAILABLE": \
+ "Unknown decode" ))))))))))))))))))) : \
(((x) < 0x8080) ? \
((x) == 0x8000 ? "TLV_ENCAPSULATED_RESPONSE": \
"Unknown decode" ) : \
@@ -1479,8 +1670,8 @@ typedef struct hwrm_err_output {
#define HWRM_VERSION_MINOR 10
#define HWRM_VERSION_UPDATE 2
/* non-zero means beta version */
-#define HWRM_VERSION_RSVD 34
-#define HWRM_VERSION_STR "1.10.2.34"
+#define HWRM_VERSION_RSVD 136
+#define HWRM_VERSION_STR "1.10.2.136"
/****************
* hwrm_ver_get *
@@ -1728,6 +1919,7 @@ typedef struct hwrm_ver_get_output {
* If set to 1, firmware is capable to support flow aging.
* If set to 0, firmware is not capable to support flow aging.
* By default, this flag should be 0 for older version of core firmware.
+ * (deprecated)
*/
#define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_FLOW_AGING_SUPPORTED UINT32_C(0x200)
/*
@@ -1735,6 +1927,7 @@ typedef struct hwrm_ver_get_output {
* Meter drop counters and EEM counters.
* If set to 0, firmware is not capable to support advanced flow counters.
* By default, this flag should be 0 for older version of core firmware.
+ * (deprecated)
*/
#define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_ADV_FLOW_COUNTERS_SUPPORTED UINT32_C(0x400)
/*
@@ -1743,6 +1936,7 @@ typedef struct hwrm_ver_get_output {
* If set to 0, firmware is not capable to support the use of the
* CFA EEM feature.
* By default, this flag should be 0 for older version of core firmware.
+ * (deprecated)
*/
#define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_CFA_EEM_SUPPORTED UINT32_C(0x800)
/*
@@ -1767,6 +1961,11 @@ typedef struct hwrm_ver_get_output {
* core firmware.
*/
#define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_CFA_TRUFLOW_SUPPORTED UINT32_C(0x4000)
+ /*
+ * If set to 1, then firmware supports secure boot.
+ * If set to 0, then firmware doesn't support secure boot.
+ */
+ #define HWRM_VER_GET_OUTPUT_DEV_CAPS_CFG_SECURE_BOOT_CAPABLE UINT32_C(0x8000)
/*
* This field represents the major version of RoCE firmware.
* A change in major version represents a major release.
@@ -1858,7 +2057,7 @@ typedef struct hwrm_ver_get_output {
* backing store not been available.
* For Example, PCIe hot-plug:
* Hot plug timing is system dependent. It generally takes up to
- * 600 miliseconds for firmware to clear DEV_NOT_RDY flag.
+ * 600 milliseconds for firmware to clear DEV_NOT_RDY flag.
* If set to 0, device is ready to accept all HWRM commands.
*/
#define HWRM_VER_GET_OUTPUT_FLAGS_DEV_NOT_RDY UINT32_C(0x1)
@@ -2019,7 +2218,18 @@ typedef struct hwrm_ver_get_output {
* used with the short cmd request format.
*/
uint16_t max_ext_req_len;
- uint8_t unused_1[5];
+ /*
+ * This field returns the maximum request timeout value in seconds.
+ * For backward compatibility, a value of zero should be interpreted
+ * as the default value of 40 seconds. Drivers should always honor the
+ * maximum timeout, but are permitted to warn if a longer duration than
+ * this default is advertised. Values larger than 40 seconds should
+ * only be used as a stopgap measure to address a device limitation or
+ * for the purposes of test and debugging. The long term goal is for
+ * firmware to significantly reduce this value in the passage of time.
+ */
+ uint16_t max_req_timeout;
+ uint8_t unused_1[3];
/*
* This field is used in Output records to indicate that the output
* is completely written to RAM. This field should be read as '1'
@@ -2341,7 +2551,7 @@ typedef struct cfa_bds_event_collect_cmd_data_msg {
uint64_t host_address;
} cfa_bds_event_collect_cmd_data_msg_t, *pcfa_bds_event_collect_cmd_data_msg_t;
-/* ce_bds_add_data_msg (size:512b/64B) */
+/* ce_bds_add_data_msg (size:576b/72B) */
typedef struct ce_bds_add_data_msg {
uint32_t version_algorithm_kid_opcode;
@@ -2377,9 +2587,8 @@ typedef struct ce_bds_add_data_msg {
/*
* Version number of TLS connection. HW will provide registers that
* converts the 4b encoded version number to 16b of actual version
- * number in the TLS Header. * Initialized --> By mid-path command *
- * Updated --> Never though another mid-path command will result in an
- * update.
+ * number in the TLS Header. This field is initialized/updated by
+ * this "KTLS crypto add" mid-path command.
*/
#define CE_BDS_ADD_DATA_MSG_VERSION_MASK UINT32_C(0xf0000000)
#define CE_BDS_ADD_DATA_MSG_VERSION_SFT 28
@@ -2388,18 +2597,15 @@ typedef struct ce_bds_add_data_msg {
/* TLS1.3 Version */
#define CE_BDS_ADD_DATA_MSG__TLS1_3 (UINT32_C(0x1) << 28)
#define CE_BDS_ADD_DATA_MSG__LAST CE_BDS_ADD_DATA_MSG__TLS1_3
- /*
- * Command Type in the TLS header. HW will provide registers that
- * converts the 3b encoded command type to 8b of actual command type in
- * the TLS Header. * Initialized --> By mid-path command * Updated -->
- * Never though another mid-path command will result in an update
- */
- uint8_t cmd_type;
- #define CE_BDS_ADD_DATA_MSG_CMD_TYPE_MASK UINT32_C(0x7)
- #define CE_BDS_ADD_DATA_MSG_CMD_TYPE_SFT 0
- /* Application */
- #define CE_BDS_ADD_DATA_MSG_CMD_TYPE_APP UINT32_C(0x0)
- #define CE_BDS_ADD_DATA_MSG_CMD_TYPE_LAST CE_BDS_ADD_DATA_MSG_CMD_TYPE_APP
+ uint8_t ctx_kind;
+ /* This field selects the context kind for the request. */
+ #define CE_BDS_ADD_DATA_MSG_CTX_KIND_MASK UINT32_C(0x1f)
+ #define CE_BDS_ADD_DATA_MSG_CTX_KIND_SFT 0
+ /* Crypto key transmit context */
+ #define CE_BDS_ADD_DATA_MSG_CTX_KIND_CK_TX UINT32_C(0x11)
+ /* Crypto key receive context */
+ #define CE_BDS_ADD_DATA_MSG_CTX_KIND_CK_RX UINT32_C(0x12)
+ #define CE_BDS_ADD_DATA_MSG_CTX_KIND_LAST CE_BDS_ADD_DATA_MSG_CTX_KIND_CK_RX
uint8_t unused0[3];
/*
* Salt is part of the nonce that is used as the Initial Vector (IV) in
@@ -2411,8 +2617,8 @@ typedef struct ce_bds_add_data_msg {
* is zero padded to 12B and then xor'ed with the 4B of salt to generate
* the 12B of IV. This value is initialized by this mid-path command.
*/
- uint32_t salt;
- uint32_t unused1;
+ uint8_t salt[4];
+ uint8_t unused1[4];
/*
* This field keeps track of the TCP sequence number that is expected as
* the first byte in the next TCP packet. This field is calculated by HW
@@ -2445,19 +2651,24 @@ typedef struct ce_bds_add_data_msg {
* exchanged during the hand-shake protocol by the client-server and
* provided to HW through this mid-path BD.
*/
- uint32_t session_key[8];
+ uint8_t session_key[32];
+ /*
+ * Additional IV that is exchanged as part of sessions setup between
+ * the two end points. This field is used for TLS1.3 only.
+ */
+ uint8_t addl_iv[8];
} ce_bds_add_data_msg_t, *pce_bds_add_data_msg_t;
-/* ce_bds_delete_data_msg (size:64b/8B) */
+/* ce_bds_delete_data_msg (size:32b/4B) */
typedef struct ce_bds_delete_data_msg {
- uint32_t kid_opcode;
+ uint32_t kid_opcode_ctx_kind;
/*
* This value selects the operation for the mid-path command for the
* crypto blocks.
*/
- #define CE_BDS_DELETE_DATA_MSG_OPCODE_MASK UINT32_C(0xf)
- #define CE_BDS_DELETE_DATA_MSG_OPCODE_SFT 0
+ #define CE_BDS_DELETE_DATA_MSG_OPCODE_MASK UINT32_C(0xf)
+ #define CE_BDS_DELETE_DATA_MSG_OPCODE_SFT 0
/*
* This is the delete command. Using this opcode, the host Driver
* can remove a key context from the CFCK. If context is deleted
@@ -2467,15 +2678,26 @@ typedef struct ce_bds_delete_data_msg {
* receive packets, no crypto operation will be performed,
* payload will be unmodified.
*/
- #define CE_BDS_DELETE_DATA_MSG_OPCODE_DELETE UINT32_C(0x2)
- #define CE_BDS_DELETE_DATA_MSG_OPCODE_LAST CE_BDS_DELETE_DATA_MSG_OPCODE_DELETE
+ #define CE_BDS_DELETE_DATA_MSG_OPCODE_DELETE UINT32_C(0x2)
+ #define CE_BDS_DELETE_DATA_MSG_OPCODE_LAST CE_BDS_DELETE_DATA_MSG_OPCODE_DELETE
/*
* This field is the Crypto Context ID. The KID is used to store
* information used by the associated kTLS offloaded connection.
*/
#define CE_BDS_DELETE_DATA_MSG_KID_MASK UINT32_C(0xfffff0)
#define CE_BDS_DELETE_DATA_MSG_KID_SFT 4
- uint32_t unused0;
+ /* This field selects the context kind for the request. */
+ #define CE_BDS_DELETE_DATA_MSG_CTX_KIND_MASK UINT32_C(0x1f000000)
+ #define CE_BDS_DELETE_DATA_MSG_CTX_KIND_SFT 24
+ /* Crypto Key Transmit Context. */
+ #define CE_BDS_DELETE_DATA_MSG_CTX_KIND_CK_TX (UINT32_C(0x11) << 24)
+ /* Crypto Key Receive Context. */
+ #define CE_BDS_DELETE_DATA_MSG_CTX_KIND_CK_RX (UINT32_C(0x12) << 24)
+ /* QUIC Key Transmit Context. */
+ #define CE_BDS_DELETE_DATA_MSG_CTX_KIND_QUIC_TX (UINT32_C(0x14) << 24)
+ /* QUIC Key Receive Context. */
+ #define CE_BDS_DELETE_DATA_MSG_CTX_KIND_QUIC_RX (UINT32_C(0x15) << 24)
+ #define CE_BDS_DELETE_DATA_MSG_CTX_KIND_LAST CE_BDS_DELETE_DATA_MSG_CTX_KIND_QUIC_RX
} ce_bds_delete_data_msg_t, *pce_bds_delete_data_msg_t;
/* ce_bds_resync_resp_ack_msg (size:128b/16B) */
@@ -2596,6 +2818,18 @@ typedef struct crypto_presync_bd_cmd {
* associated with the presync BD.
*/
#define CRYPTO_PRESYNC_BD_CMD_FLAGS_UPDATE_IN_ORDER_VAR UINT32_C(0x1)
+ /*
+ * When packet with an authentication TAG is lost in the network,
+ * During retransmission Device driver will post the entire record for
+ * the hardware to recalculate the TAG. Hardware is set to retransmit
+ * only portions of the record, it does so by looking at the Header
+ * TCP Sequence Number and Start TCP Sequence Number. However, there
+ * is a case where the header packet gets dropped in the stack for ex
+ * BPF packet filter and it is impossible for the Hardware to
+ * determine if this is a case of full replay for only the TAG
+ * generation.
+ */
+ #define CRYPTO_PRESYNC_BD_CMD_FLAGS_FULL_REPLAY_RETRAN UINT32_C(0x2)
uint8_t unused0;
uint16_t unused1;
/*
@@ -2631,7 +2865,7 @@ typedef struct crypto_presync_bd_cmd {
uint32_t end_tcp_seq_num;
/*
* For TLS1.2, an explicit nonce is used as part of the IV (concatenated
- * with the SALT). For retans packets, this field is extracted from the
+ * with the SALT). For retrans packets, this field is extracted from the
* TLS record, field right after the TLS Header and stored in the
* context. This field needs to be stored in context as TCP segmentation
* could have split the field into multiple TCP packets. This value is
@@ -2639,7 +2873,7 @@ typedef struct crypto_presync_bd_cmd {
* the first TLS header. When subsequent TLS Headers are detected, the
* value is extracted from packet.
*/
- uint64_t explicit_nonce;
+ uint8_t explicit_nonce[8];
/*
* This is sequence number for the TLS record in a particular session. In
* TLS1.2, record sequence number is part of the Associated Data (AD) in
@@ -2654,6 +2888,93 @@ typedef struct crypto_presync_bd_cmd {
uint64_t record_seq_num;
} crypto_presync_bd_cmd_t, *pcrypto_presync_bd_cmd_t;
+/* ce_bds_quic_add_data_msg (size:832b/104B) */
+
+typedef struct ce_bds_quic_add_data_msg {
+ uint32_t ver_algo_kid_opcode;
+ /*
+ * This value selects the operation for the mid-path command for the
+ * crypto blocks.
+ */
+ #define CE_BDS_QUIC_ADD_DATA_MSG_OPCODE_MASK UINT32_C(0xf)
+ #define CE_BDS_QUIC_ADD_DATA_MSG_OPCODE_SFT 0
+ /*
+ * This is the add command. Using this opcode, Host Driver can add
+ * information required for QUIC processing. The information is
+ * updated in the CFCK context.
+ */
+ #define CE_BDS_QUIC_ADD_DATA_MSG_OPCODE_ADD UINT32_C(0x1)
+ #define CE_BDS_QUIC_ADD_DATA_MSG_OPCODE_LAST CE_BDS_QUIC_ADD_DATA_MSG_OPCODE_ADD
+ /*
+ * This field is the Crypto Context ID. The KID is used to store
+ * information used by the associated QUIC offloaded connection.
+ */
+ #define CE_BDS_QUIC_ADD_DATA_MSG_KID_MASK UINT32_C(0xfffff0)
+ #define CE_BDS_QUIC_ADD_DATA_MSG_KID_SFT 4
+ /* Algorithm used for encryption and decryption. */
+ #define CE_BDS_QUIC_ADD_DATA_MSG_ALGORITHM_MASK UINT32_C(0xf000000)
+ #define CE_BDS_QUIC_ADD_DATA_MSG_ALGORITHM_SFT 24
+ /* AES_GCM_128 Algorithm. */
+ #define CE_BDS_QUIC_ADD_DATA_MSG_ALGORITHM_AES_GCM_128 (UINT32_C(0x1) << 24)
+ /* AES_GCM_256 Algorithm. */
+ #define CE_BDS_QUIC_ADD_DATA_MSG_ALGORITHM_AES_GCM_256 (UINT32_C(0x2) << 24)
+ /* Chacha20 Algorithm. */
+ #define CE_BDS_QUIC_ADD_DATA_MSG_ALGORITHM_CHACHA20 (UINT32_C(0x3) << 24)
+ #define CE_BDS_QUIC_ADD_DATA_MSG_ALGORITHM_LAST CE_BDS_QUIC_ADD_DATA_MSG_ALGORITHM_CHACHA20
+ /* Version number of QUIC connection. */
+ #define CE_BDS_QUIC_ADD_DATA_MSG_VERSION_MASK UINT32_C(0xf0000000)
+ #define CE_BDS_QUIC_ADD_DATA_MSG_VERSION_SFT 28
+ /* TLS1.2 Version */
+ #define CE_BDS_QUIC_ADD_DATA_MSG__TLS1_2 (UINT32_C(0x0) << 28)
+ /* TLS1.3 Version */
+ #define CE_BDS_QUIC_ADD_DATA_MSG__TLS1_3 (UINT32_C(0x1) << 28)
+ /* DTLS1.2 Version */
+ #define CE_BDS_QUIC_ADD_DATA_MSG__DTLS1_2 (UINT32_C(0x2) << 28)
+ /* DTLS1.2 for RoCE Version */
+ #define CE_BDS_QUIC_ADD_DATA_MSG__DTLS1_2_ROCE (UINT32_C(0x3) << 28)
+ /* QUIC Version */
+ #define CE_BDS_QUIC_ADD_DATA_MSG__QUIC (UINT32_C(0x4) << 28)
+ #define CE_BDS_QUIC_ADD_DATA_MSG__LAST CE_BDS_QUIC_ADD_DATA_MSG__QUIC
+ uint32_t ctx_kind_dcid_width_key_phase;
+ /* Key phase. */
+ #define CE_BDS_QUIC_ADD_DATA_MSG_KEY_PHASE UINT32_C(0x1)
+ /* Destination connection ID width. */
+ #define CE_BDS_QUIC_ADD_DATA_MSG_DCID_WIDTH_MASK UINT32_C(0x3e)
+ #define CE_BDS_QUIC_ADD_DATA_MSG_DCID_WIDTH_SFT 1
+ /* This field selects the context kind for the request. */
+ #define CE_BDS_QUIC_ADD_DATA_MSG_CTX_KIND_MASK UINT32_C(0x7c0)
+ #define CE_BDS_QUIC_ADD_DATA_MSG_CTX_KIND_SFT 6
+ /* QUIC key transmit context */
+ #define CE_BDS_QUIC_ADD_DATA_MSG_CTX_KIND_QUIC_TX (UINT32_C(0x14) << 6)
+ /* QUIC key receive context */
+ #define CE_BDS_QUIC_ADD_DATA_MSG_CTX_KIND_QUIC_RX (UINT32_C(0x15) << 6)
+ #define CE_BDS_QUIC_ADD_DATA_MSG_CTX_KIND_LAST CE_BDS_QUIC_ADD_DATA_MSG_CTX_KIND_QUIC_RX
+ uint64_t unused_0;
+ /*
+ * Least-significant 64 bits (of 96) of additional IV that is
+ * exchanged as part of sessions setup between the two end
+ * points for QUIC operations.
+ */
+ uint64_t quic_iv_lo;
+ /*
+ * Most-significant 32 bits (of 96) of additional IV that is
+ * exchanged as part of sessions setup between the two end
+ * points for QUIC operations.
+ */
+ uint32_t quic_iv_hi;
+ uint32_t unused_1;
+ /*
+ * Key used for encrypting or decrypting records. The Key is exchanged
+ * as part of sessions setup between the two end points through this
+ * mid-path BD.
+ */
+ uint32_t session_key[8];
+ /* Header protection key. */
+ uint32_t hp_key[8];
+ /* Packet number associated with the QUIC connection. */
+ uint64_t pkt_number;
+} ce_bds_quic_add_data_msg_t, *pce_bds_quic_add_data_msg_t;
+
/* bd_base (size:64b/8B) */
typedef struct bd_base {
@@ -2696,6 +3017,12 @@ typedef struct bd_base {
* sync command through the fast path and destined for TCE.
*/
#define BD_BASE_TYPE_TX_BD_PRESYNC_CMD UINT32_C(0x9)
+ /*
+ * Indicates a timed transmit BD. This is a 16b BD that is inserted
+ * into a packet BD chain immediately after the first BD. It is used
+ * to control the flow in a timed transmit operation.
+ */
+ #define BD_BASE_TYPE_TX_BD_TIMEDTX UINT32_C(0xa)
/*
* Indicates that this BD is 32B long and is used for
* normal L2 packet transmission.
@@ -2979,10 +3306,22 @@ typedef struct tx_bd_long_hi {
*/
#define TX_BD_LONG_LFLAGS_NOCRC UINT32_C(0x4)
/*
- * If set to 1, the device will record the time at which the packet
- * was actually transmitted at the TX MAC for 2-step time sync.
+ * This bit, in conjunction with the stamp_1step bit, controls whether
+ * a TX packet timestamp is collected and the type of timestamp that
+ * is collected.
*
* This bit must be valid on the first BD of a packet.
+ *
+ * Enumerations of the concatenation { stamp, stamp_1step } are
+ * as follows:
+ *
+ * - 2'b00: ts_none - no timestamp
+ * - 2'b01: ts_ptp_1step - 1-step PTP
+ * - 2'b10: ts_2cmpl - 2-step PTP timestamp or PA timestamp
+ * - 2'b11: ts_rsvd - reserved, same behavior as ts_none
+ * For the ts_2cmpl enumeration, an additional completion is returned.
+ * This additional completion may carry a 2-step PTP timestamp or a PA
+ * timestamp, depending on parsing of the transmitted packet.
*/
#define TX_BD_LONG_LFLAGS_STAMP UINT32_C(0x8)
/*
@@ -2991,15 +3330,15 @@ typedef struct tx_bd_long_hi {
* of the packet associated with this descriptor.
*
* For outer UDP checksum, global outer UDP checksum TE_NIC register
- * needs to be enabled. If the global outer UDP checksum TE_NIC register
- * bit is set, outer UDP checksum will be calculated for the following
- * cases:
- * 1. Packets with tcp_udp_chksum flag set to offload checksum for inner
- * packet AND the inner packet is TCP/UDP. If the inner packet is ICMP for
- * example (non-TCP/UDP), even if the tcp_udp_chksum is set, the outer UDP
- * checksum will not be calculated.
- * 2. Packets with lso flag set which implies inner TCP checksum calculation
- * as part of LSO operation.
+ * needs to be enabled. If the global outer UDP checksum TE_NIC
+ * register bit is set, outer UDP checksum will be calculated for
+ * the following cases:
+ * 1. Packets with tcp_udp_chksum flag set to offload checksum for
+ * inner packet AND the inner packet is TCP/UDP. If the inner packet
+ * is ICMP for example (non-TCP/UDP), even if the tcp_udp_chksum is
+ * set, the outer UDP checksum will not be calculated.
+ * 2. Packets with lso flag set which implies inner TCP checksum
+ * calculation as part of LSO operation.
*/
#define TX_BD_LONG_LFLAGS_T_IP_CHKSUM UINT32_C(0x10)
/*
@@ -3050,6 +3389,11 @@ typedef struct tx_bd_long_hi {
* If set to '1', then the timestamp from the BD is used. If cleared
* to 0, then TWE provides the timestamp.
*/
+ /*
+ * The BD timestamp feature cannot be enabled concurrently with
+ * cryptography (KTLS), thus lflags.bd_ts_en and lflags.crypto_en
+ * shall never both be set in a BD.
+ */
#define TX_BD_LONG_LFLAGS_BD_TS_EN UINT32_C(0x400)
/*
* If set to '1', this operation will cause a trace capture in each
@@ -3057,26 +3401,32 @@ typedef struct tx_bd_long_hi {
*/
#define TX_BD_LONG_LFLAGS_DEBUG_TRACE UINT32_C(0x800)
/*
- * If set to '1', the device will record the time at which the packet
- * was actually transmitted at the TX MAC for 1-step time sync. This
- * bit must be valid on the first BD of a packet.
+ * This bit, in conjunction with the stamp bit, controls whether a
+ * TX packet timestamp is collected and the type of timestamp that
+ * is collected.
+ *
+ * See the stamp field for a description of the valid combinations of
+ * stamp and stamp_1step.
+ *
+ * This bit must be valid on the first BD of a packet.
*/
#define TX_BD_LONG_LFLAGS_STAMP_1STEP UINT32_C(0x1000)
/*
* If set to '1', the controller replaces the Outer-tunnel IP checksum
* field with hardware calculated IP checksum for the IP header of the
* packet associated with this descriptor. For outer UDP checksum, it
- * will be the following behavior for all cases independent of settings
- * of inner LSO and checksum offload BD flags. If outer UDP checksum
- * is 0, then do not update it. If outer UDP checksum is non zero, then
- * the hardware should compute and update it.
+ * will be the following behavior for all cases independent of
+ * settings of inner LSO and checksum offload BD flags.
+ * If outer UDP checksum is 0, then do not update it.
+ * If outer UDP checksum is non zero, then the hardware should
+ * compute and update it.
*/
#define TX_BD_LONG_LFLAGS_OT_IP_CHKSUM UINT32_C(0x2000)
/*
- * If set to zero when LSO is '1', then the IPID of the Outer-tunnel IP
- * header will not be modified during LSO operations. If set to one
- * when LSO is '1', then the IPID of the Outer-tunnel IP header will be
- * incremented for each subsequent segment of an LSO operation. The
+ * If set to zero when LSO is '1', then the IPID of the Outer-tunnel
+ * IP header will not be modified during LSO operations. If set to one
+ * when LSO is '1', then the IPID of the Outer-tunnel IP header will
+ * be incremented for each subsequent segment of an LSO operation. The
* flag is ignored if the LSO packet is a normal (non-tunneled) TCP
* packet.
*/
@@ -3085,6 +3435,11 @@ typedef struct tx_bd_long_hi {
* If set to '1', When set to 1, KTLS encryption will be enabled for
* the packet.
*/
+ /*
+ * The BD timestamp feature cannot be enabled concurrently with
+ * cryptography (KTLS), thus lflags.bd_ts_en and lflags.crypto_en
+ * shall never both be set in a BD.
+ */
#define TX_BD_LONG_LFLAGS_CRYPTO_EN UINT32_C(0x8000)
uint16_t kid_or_ts_low_hdr_size;
/*
@@ -3100,8 +3455,13 @@ typedef struct tx_bd_long_hi {
#define TX_BD_LONG_HDR_SIZE_SFT 0
/*
* If lflags.bd_ts_en is 1, this is the lower 7 bits of the 24-bit
- * timestamp. If lflags.crypto_en is 1, this is the lower 7 bits of the
- * 20-bit KID.
+ * timestamp. If lflags.crypto_en is 1, this is the lower 7 bits of
+ * the 20-bit KID.
+ */
+ /*
+ * The KID value of all-ones is reserved for non-KTLS packets, which
+ * only implies that this value must not be used when filling this
+ * field for crypto packets.
*/
#define TX_BD_LONG_KID_OR_TS_LOW_MASK UINT32_C(0xfe00)
#define TX_BD_LONG_KID_OR_TS_LOW_SFT 9
@@ -3120,6 +3480,11 @@ typedef struct tx_bd_long_hi {
* timestamp. If lflags.crypto_en is 1, the least significant 13 bits
* of this field contain the upper 13 bits of the 20-bit KID.
*/
+ /*
+ * The KID value of all-ones is reserved for non-KTLS packets, which
+ * only implies that this value must not be used when filling this
+ * field for crypto packets.
+ */
#define TX_BD_LONG_KID_OR_TS_HIGH_MASK UINT32_C(0xffff8000)
#define TX_BD_LONG_KID_OR_TS_HIGH_SFT 15
/*
@@ -3197,11 +3562,11 @@ typedef struct tx_bd_long_hi {
} tx_bd_long_hi_t, *ptx_bd_long_hi_t;
/*
- * This structure is used to inform the NIC of packet data that needs to be
- * transmitted with additional processing that requires extra data such as
- * VLAN insertion plus attached inline data. This BD type may be used to
- * improve latency for small packets needing the additional extended features
- * supported by long BDs.
+ * This structure is used to inform the NIC of packet data that needs to
+ * be transmitted with additional processing that requires extra data
+ * such as VLAN insertion plus attached inline data.
+ * This BD type may be used to improve latency for small packets needing
+ * the additional extended features supported by long BDs.
*/
/* tx_bd_long_inline (size:256b/32B) */
@@ -3266,16 +3631,21 @@ typedef struct tx_bd_long_inline {
*
* This field must be valid on all BDs of a packet.
*/
+ /*
+ * A fatal error will be generated if the value of this field
+ * does not correspond with the value of flags.bd_cnt. For example, if
+ * this field carries a value of 20, then bd_cnt must equal 4.
+ */
uint16_t len;
/*
* The opaque data field is passed through to the completion and can be
- * used for any data that the driver wants to associate with the transmit
- * BD. This field must be valid on the first BD of a packet. If
- * completion coalescing is enabled on the TX ring, it is suggested that
- * the driver populate the opaque field to indicate the specific TX ring
- * with which the completion is associated, then utilize the opaque and
- * sq_cons_idx fields in the coalesced completion record to determine
- * the specific packets that are to be completed on that ring.
+ * used for any data that the driver wants to associate with the
+ * transmit BD. This field must be valid on the first BD of a packet.
+ * If completion coalescing is enabled on the TX ring, it is suggested
+ * that the driver populate the opaque field to indicate the specific
+ * TX ring with which the completion is associated, then utilize the
+ * opaque and sq_cons_idx fields in the coalesced completion record to
+ * determine the specific packets that are to be completed on that ring.
*
* This field must be valid on the first BD of a packet.
*/
@@ -3347,6 +3717,11 @@ typedef struct tx_bd_long_inline {
* If set to '1', then the timestamp from the BD is used. If cleared
* to 0, then TWE provides the timestamp.
*/
+ /*
+ * The BD timestamp feature cannot be enabled concurrently with
+ * cryptography (KTLS), thus lflags.bd_ts_en and lflags.crypto_en
+ * shall never both be set in a BD.
+ */
#define TX_BD_LONG_INLINE_LFLAGS_BD_TS_EN UINT32_C(0x400)
/*
* If set to '1', this operation will cause a trace capture in each
@@ -3382,6 +3757,11 @@ typedef struct tx_bd_long_inline {
* If set to '1', When set to 1, KTLS encryption will be enabled for
* the packet.
*/
+ /*
+ * The BD timestamp feature cannot be enabled concurrently with
+ * cryptography (KTLS), thus lflags.bd_ts_en and lflags.crypto_en
+ * shall never both be set in a BD.
+ */
#define TX_BD_LONG_INLINE_LFLAGS_CRYPTO_EN UINT32_C(0x8000)
uint8_t unused2;
uint8_t kid_or_ts_low;
@@ -3391,6 +3771,11 @@ typedef struct tx_bd_long_inline {
* timestamp. If lflags.crypto_en is 1, this is the lower 7 bits of
* the 20-bit KID.
*/
+ /*
+ * The KID value of all-ones is reserved for non-KTLS packets, which
+ * only implies that this value must not be used when filling this
+ * field for crypto packets.
+ */
#define TX_BD_LONG_INLINE_KID_OR_TS_LOW_MASK UINT32_C(0xfe)
#define TX_BD_LONG_INLINE_KID_OR_TS_LOW_SFT 1
uint32_t kid_or_ts_high;
@@ -3401,6 +3786,11 @@ typedef struct tx_bd_long_inline {
* timestamp. If lflags.crypto_en is 1, the least significant 13 bits
* of this field contain the upper 13 bits of the 20-bit KID.
*/
+ /*
+ * The KID value of all-ones is reserved for non-KTLS packets, which
+ * only implies that this value must not be used when filling this
+ * field for crypto packets.
+ */
#define TX_BD_LONG_INLINE_KID_OR_TS_HIGH_MASK UINT32_C(0xffff8000)
#define TX_BD_LONG_INLINE_KID_OR_TS_HIGH_SFT 15
/*
@@ -3525,6 +3915,11 @@ typedef struct tx_bd_mp_cmd {
* This value defines the length of command field in bytes. The maximum
* value shall be 496.
*/
+ /*
+ * Note that a fatal error will be generated if the value of this field
+ * does not correspond with the value of flags.bd_cnt. For example, if
+ * this field carries a value of 20, then bd_cnt must equal 3.
*** 106642 LINES SKIPPED ***