Miscellaneous modifications are added as follows for future use.
- Admin queue command opcodes
- struct i40e_aqc_arp_proxy_data
- struct i40e_aq_set_phy_config
- struct i40e_aqc_nvm_config_data_immediate_field
- struct i40e_aqc_oem_param_change
- struct i40e_aqc_opc_oem_ocsd_initialize
- struct i40e_aqc_opc_oem_ocbb_initialize
In addition, sturcture and command length check at compile time
are added for each admin queue opcodes in order to report any
potential issues as early as possible.

Signed-off-by: Helin Zhang <helin.zhang at intel.com>
---
 lib/librte_pmd_i40e/i40e/i40e_adminq_cmd.h | 89 +++++++++++++++++++++++++++---
 1 file changed, 80 insertions(+), 9 deletions(-)

diff --git a/lib/librte_pmd_i40e/i40e/i40e_adminq_cmd.h 
b/lib/librte_pmd_i40e/i40e/i40e_adminq_cmd.h
index ac410a5..6fd99b7 100644
--- a/lib/librte_pmd_i40e/i40e/i40e_adminq_cmd.h
+++ b/lib/librte_pmd_i40e/i40e/i40e_adminq_cmd.h
@@ -277,6 +277,8 @@ enum i40e_admin_queue_opc {
        /* OEM commands */
        i40e_aqc_opc_oem_parameter_change       = 0xFE00,
        i40e_aqc_opc_oem_device_status_change   = 0xFE01,
+       i40e_aqc_opc_oem_ocsd_initialize        = 0xFE02,
+       i40e_aqc_opc_oem_ocbb_initialize        = 0xFE03,

        /* debug commands */
        i40e_aqc_opc_debug_get_deviceid         = 0xFF00,
@@ -285,7 +287,6 @@ enum i40e_admin_queue_opc {
        i40e_aqc_opc_debug_write_reg            = 0xFF04,
        i40e_aqc_opc_debug_modify_reg           = 0xFF07,
        i40e_aqc_opc_debug_dump_internals       = 0xFF08,
-       i40e_aqc_opc_debug_modify_internals     = 0xFF09,
 };

 /* command structures and indirect data structures */
@@ -419,6 +420,7 @@ struct i40e_aqc_list_capabilities_element_resp {
 #define I40E_AQ_CAP_ID_VSI             0x0017
 #define I40E_AQ_CAP_ID_DCB             0x0018
 #define I40E_AQ_CAP_ID_FCOE            0x0021
+#define I40E_AQ_CAP_ID_ISCSI           0x0022
 #define I40E_AQ_CAP_ID_RSS             0x0040
 #define I40E_AQ_CAP_ID_RXQ             0x0041
 #define I40E_AQ_CAP_ID_TXQ             0x0042
@@ -463,8 +465,11 @@ struct i40e_aqc_arp_proxy_data {
        __le32  pfpm_proxyfc;
        __le32  ip_addr;
        u8      mac_addr[6];
+       u8      reserved[2];
 };

+I40E_CHECK_STRUCT_LEN(0x14, i40e_aqc_arp_proxy_data);
+
 /* Set NS Proxy Table Entry Command (indirect 0x0105) */
 struct i40e_aqc_ns_proxy_data {
        __le16  table_idx_mac_addr_0;
@@ -490,6 +495,8 @@ struct i40e_aqc_ns_proxy_data {
        u8      ipv6_addr_1[16];
 };

+I40E_CHECK_STRUCT_LEN(0x3c, i40e_aqc_ns_proxy_data);
+
 /* Manage LAA Command (0x0106) - obsolete */
 struct i40e_aqc_mng_laa {
        __le16  command_flags;
@@ -500,6 +507,8 @@ struct i40e_aqc_mng_laa {
        u8      reserved2[6];
 };

+I40E_CHECK_CMD_LENGTH(i40e_aqc_mng_laa);
+
 /* Manage MAC Address Read Command (indirect 0x0107) */
 struct i40e_aqc_mac_address_read {
        __le16  command_flags;
@@ -571,6 +580,8 @@ struct i40e_aqc_get_switch_config_header_resp {
        u8      reserved[12];
 };

+I40E_CHECK_CMD_LENGTH(i40e_aqc_get_switch_config_header_resp);
+
 struct i40e_aqc_switch_config_element_resp {
        u8      element_type;
 #define I40E_AQ_SW_ELEM_TYPE_MAC       1
@@ -596,6 +607,8 @@ struct i40e_aqc_switch_config_element_resp {
        __le16  element_info;
 };

+I40E_CHECK_STRUCT_LEN(0x10, i40e_aqc_switch_config_element_resp);
+
 /* Get Switch Configuration (indirect 0x0200)
  *    an array of elements are returned in the response buffer
  *    the first in the array is the header, remainder are elements
@@ -605,6 +618,8 @@ struct i40e_aqc_get_switch_config_resp {
        struct i40e_aqc_switch_config_element_resp      element[1];
 };

+I40E_CHECK_STRUCT_LEN(0x20, i40e_aqc_get_switch_config_resp);
+
 /* Add Statistics (direct 0x0201)
  * Remove Statistics (direct 0x0202)
  */
@@ -670,6 +685,8 @@ struct i40e_aqc_switch_resource_alloc_element_resp {
        u8      reserved2[6];
 };

+I40E_CHECK_STRUCT_LEN(0x10, i40e_aqc_switch_resource_alloc_element_resp);
+
 /* Add VSI (indirect 0x0210)
  *    this indirect command uses struct i40e_aqc_vsi_properties_data
  *    as the indirect buffer (128 bytes)
@@ -1101,6 +1118,8 @@ struct i40e_aqc_remove_tag {
        u8      reserved[12];
 };

+I40E_CHECK_CMD_LENGTH(i40e_aqc_remove_tag);
+
 /* Add multicast E-Tag (direct 0x0257)
  * del multicast E-Tag (direct 0x0258) only uses pv_seid and etag fields
  * and no external data
@@ -1216,7 +1235,7 @@ struct i40e_aqc_add_remove_cloud_filters_element_data {
        } ipaddr;
        __le16  flags;
 #define I40E_AQC_ADD_CLOUD_FILTER_SHIFT                        0
-#define I40E_AQC_ADD_CLOUD_FILTER_MASK                 (0x3F << \
+#define I40E_AQC_ADD_CLOUD_FILTER_MASK (0x3F << \
                                        I40E_AQC_ADD_CLOUD_FILTER_SHIFT)
 /* 0x0000 reserved */
 #define I40E_AQC_ADD_CLOUD_FILTER_OIP                  0x0001
@@ -1249,7 +1268,7 @@ struct i40e_aqc_add_remove_cloud_filters_element_data {
        u8      reserved[4];
        __le16  queue_number;
 #define I40E_AQC_ADD_CLOUD_QUEUE_SHIFT         0
-#define I40E_AQC_ADD_CLOUD_QUEUE_MASK          (0x3F << \
+#define I40E_AQC_ADD_CLOUD_QUEUE_MASK          (0x7FF << \
                                                 I40E_AQC_ADD_CLOUD_QUEUE_SHIFT)
        u8      reserved2[14];
        /* response section */
@@ -1368,6 +1387,8 @@ struct i40e_aqc_configure_vsi_ets_sla_bw_data {
        u8      reserved1[28];
 };

+I40E_CHECK_STRUCT_LEN(0x40, i40e_aqc_configure_vsi_ets_sla_bw_data);
+
 /* Configure VSI Bandwidth Allocation per Traffic Type (indirect 0x0407)
  *    responds with i40e_aqc_qs_handles_resp
  */
@@ -1379,6 +1400,8 @@ struct i40e_aqc_configure_vsi_tc_bw_data {
        __le16  qs_handles[8];
 };

+I40E_CHECK_STRUCT_LEN(0x20, i40e_aqc_configure_vsi_tc_bw_data);
+
 /* Query vsi bw configuration (indirect 0x0408) */
 struct i40e_aqc_query_vsi_bw_config_resp {
        u8      tc_valid_bits;
@@ -1392,6 +1415,8 @@ struct i40e_aqc_query_vsi_bw_config_resp {
        u8      reserved3[23];
 };

+I40E_CHECK_STRUCT_LEN(0x40, i40e_aqc_query_vsi_bw_config_resp);
+
 /* Query VSI Bandwidth Allocation per Traffic Type (indirect 0x040A) */
 struct i40e_aqc_query_vsi_ets_sla_config_resp {
        u8      tc_valid_bits;
@@ -1403,6 +1428,8 @@ struct i40e_aqc_query_vsi_ets_sla_config_resp {
        __le16  tc_bw_max[2];
 };

+I40E_CHECK_STRUCT_LEN(0x20, i40e_aqc_query_vsi_ets_sla_config_resp);
+
 /* Configure Switching Component Bandwidth Limit (direct 0x0410) */
 struct i40e_aqc_configure_switching_comp_bw_limit {
        __le16  seid;
@@ -1430,6 +1457,8 @@ struct i40e_aqc_configure_switching_comp_ets_data {
        u8      reserved2[96];
 };

+I40E_CHECK_STRUCT_LEN(0x80, i40e_aqc_configure_switching_comp_ets_data);
+
 /* Configure Switching Component Bandwidth Limits per Tc (indirect 0x0416) */
 struct i40e_aqc_configure_switching_comp_ets_bw_limit_data {
        u8      tc_valid_bits;
@@ -1441,6 +1470,8 @@ struct 
i40e_aqc_configure_switching_comp_ets_bw_limit_data {
        u8      reserved1[28];
 };

+I40E_CHECK_STRUCT_LEN(0x40, 
i40e_aqc_configure_switching_comp_ets_bw_limit_data);
+
 /* Configure Switching Component Bandwidth Allocation per Tc
  * (indirect 0x0417)
  */
@@ -1452,6 +1483,8 @@ struct i40e_aqc_configure_switching_comp_bw_config_data {
        u8      reserved1[20];
 };

+I40E_CHECK_STRUCT_LEN(0x20, i40e_aqc_configure_switching_comp_bw_config_data);
+
 /* Query Switching Component Configuration (indirect 0x0418) */
 struct i40e_aqc_query_switching_comp_ets_config_resp {
        u8      tc_valid_bits;
@@ -1462,6 +1495,8 @@ struct i40e_aqc_query_switching_comp_ets_config_resp {
        u8      reserved2[23];
 };

+I40E_CHECK_STRUCT_LEN(0x40, i40e_aqc_query_switching_comp_ets_config_resp);
+
 /* Query PhysicalPort ETS Configuration (indirect 0x0419) */
 struct i40e_aqc_query_port_ets_config_resp {
        u8      reserved[4];
@@ -1477,6 +1512,8 @@ struct i40e_aqc_query_port_ets_config_resp {
        u8      reserved3[32];
 };

+I40E_CHECK_STRUCT_LEN(0x44, i40e_aqc_query_port_ets_config_resp);
+
 /* Query Switching Component Bandwidth Allocation per Traffic Type
  * (indirect 0x041A)
  */
@@ -1491,6 +1528,8 @@ struct i40e_aqc_query_switching_comp_bw_config_resp {
        __le16  tc_bw_max[2];
 };

+I40E_CHECK_STRUCT_LEN(0x20, i40e_aqc_query_switching_comp_bw_config_resp);
+
 /* Suspend/resume port TX traffic
  * (direct 0x041B and 0x041C) uses the generic SEID struct
  */
@@ -1504,6 +1543,8 @@ struct i40e_aqc_configure_partition_bw_data {
        u8      max_bw[16];      /* bandwidth limit */
 };

+I40E_CHECK_STRUCT_LEN(0x22, i40e_aqc_configure_partition_bw_data);
+
 /* Get and set the active HMC resource profile and status.
  * (direct 0x0500) and (direct 0x0501)
  */
@@ -1586,6 +1627,8 @@ struct i40e_aqc_module_desc {
        u8 reserved2[8];
 };

+I40E_CHECK_STRUCT_LEN(0x20, i40e_aqc_module_desc);
+
 struct i40e_aq_get_phy_abilities_resp {
        __le32  phy_type;       /* bitmap using the above enum for offsets */
        u8      link_speed;     /* bitmap using the above enum bit patterns */
@@ -1614,6 +1657,8 @@ struct i40e_aq_get_phy_abilities_resp {
        struct i40e_aqc_module_desc     qualified_module[I40E_AQ_PHY_MAX_QMS];
 };

+I40E_CHECK_STRUCT_LEN(0x218, i40e_aq_get_phy_abilities_resp);
+
 /* Set PHY Config (direct 0x0601) */
 struct i40e_aq_set_phy_config { /* same bits as above in all */
        __le32  phy_type;
@@ -1801,7 +1846,7 @@ struct i40e_aqc_nvm_config_read {
 #define I40E_AQ_ANVM_READ_SINGLE_FEATURE               0
 #define I40E_AQ_ANVM_READ_MULTIPLE_FEATURES            1
        __le16  element_count;
-       __le16  element_id; /* Feature/field ID */
+       __le16  element_id;     /* Feature/field ID */
        __le16  element_id_msw; /* MSWord of field ID */
        __le32  address_high;
        __le32  address_low;
@@ -1834,14 +1879,17 @@ struct i40e_aqc_nvm_config_data_feature {
        __le16 feature_selection;
 };

+I40E_CHECK_STRUCT_LEN(0x6, i40e_aqc_nvm_config_data_feature);
+
 struct i40e_aqc_nvm_config_data_immediate_field {
-#define ANVM_FEATURE_OR_IMMEDIATE_MASK 0x2
-       __le16 field_id;
-       __le16 instance_id;
+       __le32 field_id;
+       __le32 field_value;
        __le16 field_options;
-       __le16 field_value;
+       __le16 reserved;
 };

+I40E_CHECK_STRUCT_LEN(0xc, i40e_aqc_nvm_config_data_immediate_field);
+
 /* Send to PF command (indirect 0x0801) id is only used by PF
  * Send to VF command (indirect 0x0802) id is only used by PF
  * Send to Peer PF command (indirect 0x0803)
@@ -2150,7 +2198,8 @@ struct i40e_aqc_oem_param_change {
 #define I40E_AQ_OEM_PARAM_TYPE_BW_CTL  1
 #define I40E_AQ_OEM_PARAM_MAC          2
        __le32  param_value1;
-       u8      param_value2[8];
+       __le16  param_value2;
+       u8      reserved[6];
 };

 I40E_CHECK_CMD_LENGTH(i40e_aqc_oem_param_change);
@@ -2164,6 +2213,28 @@ struct i40e_aqc_oem_state_change {

 I40E_CHECK_CMD_LENGTH(i40e_aqc_oem_state_change);

+/* Initialize OCSD (0xFE02, direct) */
+struct i40e_aqc_opc_oem_ocsd_initialize {
+       u8 type_status;
+       u8 reserved1[3];
+       __le32 ocsd_memory_block_addr_high;
+       __le32 ocsd_memory_block_addr_low;
+       __le32 requested_update_interval;
+};
+
+I40E_CHECK_CMD_LENGTH(i40e_aqc_opc_oem_ocsd_initialize);
+
+/* Initialize OCBB  (0xFE03, direct) */
+struct i40e_aqc_opc_oem_ocbb_initialize {
+       u8 type_status;
+       u8 reserved1[3];
+       __le32 ocbb_memory_block_addr_high;
+       __le32 ocbb_memory_block_addr_low;
+       u8 reserved2[4];
+};
+
+I40E_CHECK_CMD_LENGTH(i40e_aqc_opc_oem_ocbb_initialize);
+
 /* debug commands */

 /* get device id (0xFF00) uses the generic structure */
-- 
1.8.1.4

Reply via email to