net/ice/base: add AN masks to get PHY capabilities
[dpdk.git] / drivers / net / ice / base / ice_adminq_cmd.h
index 3003efd..9375d61 100644 (file)
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2001-2018
+ * Copyright(c) 2001-2019
  */
 
 #ifndef _ICE_ADMINQ_CMD_H_
@@ -9,12 +9,10 @@
  * descriptor format. It is shared between Firmware and Software.
  */
 
-
 #define ICE_MAX_VSI                    768
 #define ICE_AQC_TOPO_MAX_LEVEL_NUM     0x9
 #define ICE_AQ_SET_MAC_FRAME_SIZE_MAX  9728
 
-
 struct ice_aqc_generic {
        __le32 param0;
        __le32 param1;
@@ -22,7 +20,6 @@ struct ice_aqc_generic {
        __le32 addr_low;
 };
 
-
 /* Get version (direct 0x0001) */
 struct ice_aqc_get_ver {
        __le32 rom_ver;
@@ -37,18 +34,24 @@ struct ice_aqc_get_ver {
        u8 api_patch;
 };
 
-
+/* Send driver version (indirect 0x0002) */
+struct ice_aqc_driver_ver {
+       u8 major_ver;
+       u8 minor_ver;
+       u8 build_ver;
+       u8 subbuild_ver;
+       u8 reserved[4];
+       __le32 addr_high;
+       __le32 addr_low;
+};
 
 /* Queue Shutdown (direct 0x0003) */
 struct ice_aqc_q_shutdown {
-       __le32 driver_unloading;
+       u8 driver_unloading;
 #define ICE_AQC_DRIVER_UNLOADING       BIT(0)
-       u8 reserved[12];
+       u8 reserved[15];
 };
 
-
-
-
 /* Request resource ownership (direct 0x0008)
  * Release resource ownership (direct 0x0009)
  */
@@ -71,7 +74,7 @@ struct ice_aqc_req_res {
 #define ICE_AQ_RES_NVM_WRITE_DFLT_TIMEOUT_MS   180000
 #define ICE_AQ_RES_CHNG_LOCK_DFLT_TIMEOUT_MS   1000
 #define ICE_AQ_RES_GLBL_LOCK_DFLT_TIMEOUT_MS   3000
-       /* For SDP: pin id of the SDP */
+       /* For SDP: pin ID of the SDP */
        __le32 res_number;
        /* Status is only used for ICE_AQC_RES_ID_GLBL_LOCK */
        __le16 status;
@@ -81,7 +84,6 @@ struct ice_aqc_req_res {
        u8 reserved[2];
 };
 
-
 /* Get function capabilities (indirect 0x000A)
  * Get device capabilities (indirect 0x000B)
  */
@@ -94,16 +96,18 @@ struct ice_aqc_list_caps {
        __le32 addr_low;
 };
 
-
 /* Device/Function buffer entry, repeated per reported capability */
 struct ice_aqc_list_caps_elem {
        __le16 cap;
 #define ICE_AQC_CAPS_VALID_FUNCTIONS                   0x0005
+#define ICE_AQC_MAX_VALID_FUNCTIONS                    0x8
 #define ICE_AQC_CAPS_VSI                               0x0017
+#define ICE_AQC_CAPS_DCB                               0x0018
 #define ICE_AQC_CAPS_RSS                               0x0040
 #define ICE_AQC_CAPS_RXQS                              0x0041
 #define ICE_AQC_CAPS_TXQS                              0x0042
 #define ICE_AQC_CAPS_MSIX                              0x0043
+#define ICE_AQC_CAPS_FD                                        0x0045
 #define ICE_AQC_CAPS_MAX_MTU                           0x0047
 
        u8 major_ver;
@@ -118,7 +122,6 @@ struct ice_aqc_list_caps_elem {
        __le64 rsvd2;
 };
 
-
 /* Manage MAC address, read command - indirect (0x0107)
  * This struct is also used for the response
  */
@@ -128,18 +131,17 @@ struct ice_aqc_manage_mac_read {
 #define ICE_AQC_MAN_MAC_SAN_ADDR_VALID         BIT(5)
 #define ICE_AQC_MAN_MAC_PORT_ADDR_VALID                BIT(6)
 #define ICE_AQC_MAN_MAC_WOL_ADDR_VALID         BIT(7)
+#define ICE_AQC_MAN_MAC_MC_MAG_EN              BIT(8)
+#define ICE_AQC_MAN_MAC_WOL_PRESERVE_ON_PFR    BIT(9)
 #define ICE_AQC_MAN_MAC_READ_S                 4
 #define ICE_AQC_MAN_MAC_READ_M                 (0xF << ICE_AQC_MAN_MAC_READ_S)
-       u8 lport_num;
-       u8 lport_num_valid;
-#define ICE_AQC_MAN_MAC_PORT_NUM_IS_VALID      BIT(0)
+       u8 rsvd[2];
        u8 num_addr; /* Used in response */
-       u8 reserved[3];
+       u8 rsvd1[3];
        __le32 addr_high;
        __le32 addr_low;
 };
 
-
 /* Response buffer format for manage MAC read command */
 struct ice_aqc_manage_mac_read_resp {
        u8 lport_num;
@@ -149,10 +151,9 @@ struct ice_aqc_manage_mac_read_resp {
        u8 mac_addr[ETH_ALEN];
 };
 
-
 /* Manage MAC address, write command - direct (0x0108) */
 struct ice_aqc_manage_mac_write {
-       u8 port_num;
+       u8 rsvd;
        u8 flags;
 #define ICE_AQC_MAN_MAC_WR_MC_MAG_EN           BIT(0)
 #define ICE_AQC_MAN_MAC_WR_WOL_LAA_PFR_KEEP    BIT(1)
@@ -168,7 +169,6 @@ struct ice_aqc_manage_mac_write {
        __le32 addr_low;
 };
 
-
 /* Clear PXE Command and response (direct 0x0110) */
 struct ice_aqc_clear_pxe {
        u8 rx_cnt;
@@ -176,6 +176,12 @@ struct ice_aqc_clear_pxe {
        u8 reserved[15];
 };
 
+/* Configure No-Drop Policy Command (direct 0x0112) */
+struct ice_aqc_config_no_drop_policy {
+       u8 opts;
+#define ICE_AQC_FORCE_NO_DROP                  BIT(0)
+       u8 rsvd[15];
+};
 
 /* Get switch configuration (0x0200) */
 struct ice_aqc_get_sw_cfg {
@@ -194,7 +200,6 @@ struct ice_aqc_get_sw_cfg {
        __le32 addr_low;
 };
 
-
 /* Each entry in the response buffer is of the following type: */
 struct ice_aqc_get_sw_cfg_resp_elem {
        /* VSI/Port Number */
@@ -221,7 +226,6 @@ struct ice_aqc_get_sw_cfg_resp_elem {
 #define ICE_AQC_GET_SW_CONF_RESP_IS_VF         BIT(15)
 };
 
-
 /* The response buffer is as follows. Note that the length of the
  * elements array varies with the length of the command response.
  */
@@ -229,8 +233,6 @@ struct ice_aqc_get_sw_cfg_resp {
        struct ice_aqc_get_sw_cfg_resp_elem elements[1];
 };
 
-
-
 /* These resource type defines are used for all switch resource
  * commands where a resource type is required, such as:
  * Get Resource Allocation command (indirect 0x0204)
@@ -274,7 +276,34 @@ struct ice_aqc_get_sw_cfg_resp {
 
 #define ICE_AQC_RES_TYPE_FLAG_DEDICATED                        0x00
 
+#define ICE_AQC_RES_TYPE_S     0
+#define ICE_AQC_RES_TYPE_M     (0x07F << ICE_AQC_RES_TYPE_S)
 
+/* Get Resource Allocation command (indirect 0x0204) */
+struct ice_aqc_get_res_alloc {
+       __le16 resp_elem_num; /* Used in response, reserved in command */
+       u8 reserved[6];
+       __le32 addr_high;
+       __le32 addr_low;
+};
+
+/* Get Resource Allocation Response Buffer per response */
+struct ice_aqc_get_res_resp_elem {
+       __le16 res_type; /* Types defined above cmd 0x0204 */
+       __le16 total_capacity; /* Resources available to all PF's */
+       __le16 total_function; /* Resources allocated for a PF */
+       __le16 total_shared; /* Resources allocated as shared */
+       __le16 total_free; /* Resources un-allocated/not reserved by any PF */
+};
+
+/* Buffer for Get Resource command */
+struct ice_aqc_get_res_resp {
+       /* Number of resource entries to be calculated using
+        * datalen/sizeof(struct ice_aqc_cmd_resp)).
+        * Value of 'datalen' gets updated as part of response.
+        */
+       struct ice_aqc_get_res_resp_elem elem[1];
+};
 
 /* Allocate Resources command (indirect 0x0208)
  * Free Resources command (indirect 0x0209)
@@ -286,7 +315,6 @@ struct ice_aqc_alloc_free_res_cmd {
        __le32 addr_low;
 };
 
-
 /* Resource descriptor */
 struct ice_aqc_res_elem {
        union {
@@ -295,7 +323,6 @@ struct ice_aqc_res_elem {
        } e;
 };
 
-
 /* Buffer for Allocate/Free Resources commands */
 struct ice_aqc_alloc_free_res_elem {
        __le16 res_type; /* Types defined above cmd 0x0204 */
@@ -306,8 +333,28 @@ struct ice_aqc_alloc_free_res_elem {
        struct ice_aqc_res_elem elem[1];
 };
 
+/* Get Allocated Resource Descriptors Command (indirect 0x020A) */
+struct ice_aqc_get_allocd_res_desc {
+       union {
+               struct {
+                       __le16 res; /* Types defined above cmd 0x0204 */
+                       __le16 first_desc;
+                       __le32 reserved;
+               } cmd;
+               struct {
+                       __le16 res;
+                       __le16 next_desc;
+                       __le16 num_desc;
+                       __le16 reserved;
+               } resp;
+       } ops;
+       __le32 addr_high;
+       __le32 addr_low;
+};
 
-
+struct ice_aqc_get_allocd_res_desc_resp {
+       struct ice_aqc_res_elem elem[1];
+};
 
 /* Add VSI (indirect 0x0210)
  * Update VSI (indirect 0x0211)
@@ -334,7 +381,6 @@ struct ice_aqc_add_get_update_free_vsi {
        __le32 addr_low;
 };
 
-
 /* Response descriptor for:
  * Add VSI (indirect 0x0210)
  * Update VSI (indirect 0x0211)
@@ -349,7 +395,18 @@ struct ice_aqc_add_update_free_vsi_resp {
        __le32 addr_low;
 };
 
-
+struct ice_aqc_get_vsi_resp {
+       __le16 vsi_num;
+       u8 vf_id;
+       /* The vsi_flags field uses the ICE_AQ_VSI_TYPE_* defines for values.
+        * These are found above in struct ice_aqc_add_get_update_free_vsi.
+        */
+       u8 vsi_flags;
+       __le16 vsi_used;
+       __le16 vsi_free;
+       __le32 addr_high;
+       __le32 addr_low;
+};
 
 struct ice_aqc_vsi_props {
        __le16 valid_sections;
@@ -398,8 +455,8 @@ struct ice_aqc_vsi_props {
 #define ICE_AQ_VSI_VLAN_MODE_TAGGED    0x2
 #define ICE_AQ_VSI_VLAN_MODE_ALL       0x3
 #define ICE_AQ_VSI_PVLAN_INSERT_PVID   BIT(2)
-#define ICE_AQ_VSI_VLAN_EMOD_S 3
-#define ICE_AQ_VSI_VLAN_EMOD_M (0x3 << ICE_AQ_VSI_VLAN_EMOD_S)
+#define ICE_AQ_VSI_VLAN_EMOD_S         3
+#define ICE_AQ_VSI_VLAN_EMOD_M         (0x3 << ICE_AQ_VSI_VLAN_EMOD_S)
 #define ICE_AQ_VSI_VLAN_EMOD_STR_BOTH  (0x0 << ICE_AQ_VSI_VLAN_EMOD_S)
 #define ICE_AQ_VSI_VLAN_EMOD_STR_UP    (0x1 << ICE_AQ_VSI_VLAN_EMOD_S)
 #define ICE_AQ_VSI_VLAN_EMOD_STR       (0x2 << ICE_AQ_VSI_VLAN_EMOD_S)
@@ -505,10 +562,179 @@ struct ice_aqc_vsi_props {
        u8 reserved[24];
 };
 
+/* Add/update mirror rule - direct (0x0260) */
+#define ICE_AQC_RULE_ID_VALID_S                7
+#define ICE_AQC_RULE_ID_VALID_M                (0x1 << ICE_AQC_RULE_ID_VALID_S)
+#define ICE_AQC_RULE_ID_S              0
+#define ICE_AQC_RULE_ID_M              (0x3F << ICE_AQC_RULE_ID_S)
 
+/* Following defines to be used while processing caller specified mirror list
+ * of VSI indexes.
+ */
+/* Action: Byte.bit (1.7)
+ *     0 = Remove VSI from mirror rule
+ *     1 = Add VSI to mirror rule
+ */
+#define ICE_AQC_RULE_ACT_S     15
+#define ICE_AQC_RULE_ACT_M     (0x1 << ICE_AQC_RULE_ACT_S)
+/* Action: 1.2:0.0 = Mirrored VSI */
+#define ICE_AQC_RULE_MIRRORED_VSI_S    0
+#define ICE_AQC_RULE_MIRRORED_VSI_M    (0x7FF << ICE_AQC_RULE_MIRRORED_VSI_S)
+
+/* This is to be used by add/update mirror rule Admin Queue command.
+ * In case of add mirror rule - if rule ID is specified as
+ * INVAL_MIRROR_RULE_ID, new rule ID is allocated from shared pool.
+ * If specified rule_id is valid, then it is used. If specified rule_id
+ * is in use then new mirroring rule is added.
+ */
+#define ICE_INVAL_MIRROR_RULE_ID       0xFFFF
+
+struct ice_aqc_add_update_mir_rule {
+       __le16 rule_id;
+
+       __le16 rule_type;
+#define ICE_AQC_RULE_TYPE_S            0
+#define ICE_AQC_RULE_TYPE_M            (0x7 << ICE_AQC_RULE_TYPE_S)
+       /* VPORT ingress/egress */
+#define ICE_AQC_RULE_TYPE_VPORT_INGRESS        0x1
+#define ICE_AQC_RULE_TYPE_VPORT_EGRESS 0x2
+       /* Physical port ingress mirroring.
+        * All traffic received by this port
+        */
+#define ICE_AQC_RULE_TYPE_PPORT_INGRESS        0x6
+       /* Physical port egress mirroring. All traffic sent by this port */
+#define ICE_AQC_RULE_TYPE_PPORT_EGRESS 0x7
+
+       /* Number of mirrored entries.
+        * The values are in the command buffer
+        */
+       __le16 num_entries;
+
+       /* Destination VSI */
+       __le16 dest;
+       __le32 addr_high;
+       __le32 addr_low;
+};
+
+/* Delete mirror rule - direct(0x0261) */
+struct ice_aqc_delete_mir_rule {
+       __le16 rule_id;
+       __le16 rsvd;
+
+       /* Byte.bit: 20.0 = Keep allocation. If set VSI stays part of
+        * the PF allocated resources, otherwise it is returned to the
+        * shared pool
+        */
+#define ICE_AQC_FLAG_KEEP_ALLOCD_S     0
+#define ICE_AQC_FLAG_KEEP_ALLOCD_M     (0x1 << ICE_AQC_FLAG_KEEP_ALLOCD_S)
+       __le16 flags;
+
+       u8 reserved[10];
+};
+
+/* Set/Get storm config - (direct 0x0280, 0x0281) */
+/* This structure holds get storm configuration response and same structure
+ * is used to perform set_storm_cfg
+ */
+struct ice_aqc_storm_cfg {
+       __le32 bcast_thresh_size;
+       __le32 mcast_thresh_size;
+       /* Bit 18:0 - Traffic upper threshold size
+        * Bit 31:19 - Reserved
+        */
+#define ICE_AQ_THRESHOLD_S     0
+#define ICE_AQ_THRESHOLD_M     (0x7FFFF << ICE_AQ_THRESHOLD_S)
+
+       __le32 storm_ctrl_ctrl;
+       /* Bit 0: MDIPW - Drop Multicast packets in previous window
+        * Bit 1: MDICW - Drop multicast packets in current window
+        * Bit 2: BDIPW - Drop broadcast packets in previous window
+        * Bit 3: BDICW - Drop broadcast packets in current window
+        */
+#define ICE_AQ_STORM_CTRL_MDIPW_DROP_MULTICAST BIT(0)
+#define ICE_AQ_STORM_CTRL_MDICW_DROP_MULTICAST BIT(1)
+#define ICE_AQ_STORM_CTRL_BDIPW_DROP_MULTICAST BIT(2)
+#define ICE_AQ_STORM_CTRL_BDICW_DROP_MULTICAST BIT(3)
+       /* Bit 7:5 : Reserved */
+       /* Bit 27:8 : Interval - BSC/MSC Time-interval specification: The
+        * interval size for applying ingress broadcast or multicast storm
+        * control.
+        */
+#define ICE_AQ_STORM_BSC_MSC_TIME_INTERVAL_S   8
+#define ICE_AQ_STORM_BSC_MSC_TIME_INTERVAL_M   \
+                       (0xFFFFF << ICE_AQ_STORM_BSC_MSC_TIME_INTERVAL_S)
+       __le32 reserved;
+};
 
 #define ICE_MAX_NUM_RECIPES 64
 
+/* Add/Get Recipe (indirect 0x0290/0x0292)*/
+struct ice_aqc_add_get_recipe {
+       __le16 num_sub_recipes; /* Input in Add cmd, Output in Get cmd */
+       __le16 return_index;    /* Input, used for Get cmd only */
+       u8 reserved[4];
+       __le32 addr_high;
+       __le32 addr_low;
+};
+
+struct ice_aqc_recipe_content {
+       u8 rid;
+#define ICE_AQ_RECIPE_ID_S             0
+#define ICE_AQ_RECIPE_ID_M             (0x3F << ICE_AQ_RECIPE_ID_S)
+#define ICE_AQ_RECIPE_ID_IS_ROOT       BIT(7)
+#define ICE_AQ_SW_ID_LKUP_IDX          0
+       u8 lkup_indx[5];
+#define ICE_AQ_RECIPE_LKUP_DATA_S      0
+#define ICE_AQ_RECIPE_LKUP_DATA_M      (0x3F << ICE_AQ_RECIPE_LKUP_DATA_S)
+#define ICE_AQ_RECIPE_LKUP_IGNORE      BIT(7)
+#define ICE_AQ_SW_ID_LKUP_MASK         0x00FF
+       __le16 mask[5];
+       u8 result_indx;
+#define ICE_AQ_RECIPE_RESULT_DATA_S    0
+#define ICE_AQ_RECIPE_RESULT_DATA_M    (0x3F << ICE_AQ_RECIPE_RESULT_DATA_S)
+#define ICE_AQ_RECIPE_RESULT_EN                BIT(7)
+       u8 rsvd0[3];
+       u8 act_ctrl_join_priority;
+       u8 act_ctrl_fwd_priority;
+#define ICE_AQ_RECIPE_FWD_PRIORITY_S   0
+#define ICE_AQ_RECIPE_FWD_PRIORITY_M   (0xF << ICE_AQ_RECIPE_FWD_PRIORITY_S)
+       u8 act_ctrl;
+#define ICE_AQ_RECIPE_ACT_NEED_PASS_L2 BIT(0)
+#define ICE_AQ_RECIPE_ACT_ALLOW_PASS_L2        BIT(1)
+#define ICE_AQ_RECIPE_ACT_INV_ACT      BIT(2)
+#define ICE_AQ_RECIPE_ACT_PRUNE_INDX_S 4
+#define ICE_AQ_RECIPE_ACT_PRUNE_INDX_M (0x3 << ICE_AQ_RECIPE_ACT_PRUNE_INDX_S)
+       u8 rsvd1;
+       __le32 dflt_act;
+#define ICE_AQ_RECIPE_DFLT_ACT_S       0
+#define ICE_AQ_RECIPE_DFLT_ACT_M       (0x7FFFF << ICE_AQ_RECIPE_DFLT_ACT_S)
+#define ICE_AQ_RECIPE_DFLT_ACT_VALID   BIT(31)
+};
+
+struct ice_aqc_recipe_data_elem {
+       u8 recipe_indx;
+       u8 resp_bits;
+#define ICE_AQ_RECIPE_WAS_UPDATED      BIT(0)
+       u8 rsvd0[2];
+       u8 recipe_bitmap[8];
+       u8 rsvd1[4];
+       struct ice_aqc_recipe_content content;
+       u8 rsvd2[20];
+};
+
+/* This struct contains a number of entries as per the
+ * num_sub_recipes in the command
+ */
+struct ice_aqc_add_get_recipe_data {
+       struct ice_aqc_recipe_data_elem recipe[1];
+};
+
+/* Set/Get Recipes to Profile Association (direct 0x0291/0x0293) */
+struct ice_aqc_recipe_to_profile {
+       __le16 profile_id;
+       u8 rsvd[6];
+       ice_declare_bitmap(recipe_assoc, ICE_MAX_NUM_RECIPES);
+};
 
 /* Add/Update/Remove/Get switch rules (indirect 0x02A0, 0x02A1, 0x02A2, 0x02A3)
  */
@@ -524,7 +750,6 @@ struct ice_aqc_sw_rules {
        __le32 addr_low;
 };
 
-
 #pragma pack(1)
 /* Add/Update/Get/Remove lookup Rx/Tx command/response entry
  * This structures describes the lookup rules and associated actions. "index"
@@ -612,7 +837,6 @@ struct ice_sw_rule_lkup_rx_tx {
 };
 #pragma pack()
 
-
 /* Add/Update/Remove large action command/response entry
  * "index" is returned as part of a response to a successful Add command, and
  * can be used to identify the action for Update/Get/Remove commands.
@@ -673,7 +897,6 @@ struct ice_sw_rule_lg_act {
 #define ICE_LG_ACT_STAT_COUNT_M                (0x7F << ICE_LG_ACT_STAT_COUNT_S)
 };
 
-
 /* Add/Update/Remove VSI list command/response entry
  * "index" is returned as part of a response to a successful Add command, and
  * can be used to identify the VSI list for Update/Get/Remove commands.
@@ -684,7 +907,6 @@ struct ice_sw_rule_vsi_list {
        __le16 vsi[1]; /* Array of number_vsi VSI numbers */
 };
 
-
 #pragma pack(1)
 /* Query VSI list command/response entry */
 struct ice_sw_rule_vsi_list_query {
@@ -693,7 +915,6 @@ struct ice_sw_rule_vsi_list_query {
 };
 #pragma pack()
 
-
 #pragma pack(1)
 /* Add switch rule response:
  * Content of return buffer is same as the input buffer. The status field and
@@ -719,7 +940,39 @@ struct ice_aqc_sw_rules_elem {
 
 #pragma pack()
 
+/* PFC Ignore (direct 0x0301)
+ * The command and response use the same descriptor structure
+ */
+struct ice_aqc_pfc_ignore {
+       u8      tc_bitmap;
+       u8      cmd_flags; /* unused in response */
+#define ICE_AQC_PFC_IGNORE_SET         BIT(7)
+#define ICE_AQC_PFC_IGNORE_CLEAR       0
+       u8      reserved[14];
+};
 
+/* Set PFC Mode (direct 0x0303)
+ * Query PFC Mode (direct 0x0302)
+ */
+struct ice_aqc_set_query_pfc_mode {
+       u8      pfc_mode;
+/* For Set Command response, reserved in all other cases */
+#define ICE_AQC_PFC_NOT_CONFIGURED     0
+/* For Query Command response, reserved in all other cases */
+#define ICE_AQC_DCB_DIS                0
+#define ICE_AQC_PFC_VLAN_BASED_PFC     1
+#define ICE_AQC_PFC_DSCP_BASED_PFC     2
+       u8      rsvd[15];
+};
+
+/* Set DCB Parameters (direct 0x0306) */
+struct ice_aqc_set_dcb_params {
+       u8 cmd_flags; /* unused in response */
+#define ICE_AQC_LINK_UP_DCB_CFG    BIT(0)
+       u8 valid_flags; /* unused in response */
+#define ICE_AQC_LINK_UP_DCB_CFG_VALID    BIT(0)
+       u8 rsvd[14];
+};
 
 /* Get Default Topology (indirect 0x0400) */
 struct ice_aqc_get_topo {
@@ -731,7 +984,6 @@ struct ice_aqc_get_topo {
        __le32 addr_low;
 };
 
-
 /* Update TSE (indirect 0x0403)
  * Get TSE (indirect 0x0404)
  * Add TSE (indirect 0x0401)
@@ -748,7 +1000,6 @@ struct ice_aqc_sched_elem_cmd {
        __le32 addr_low;
 };
 
-
 /* This is the buffer for:
  * Suspend Nodes (indirect 0x0409)
  * Resume Nodes (indirect 0x040A)
@@ -757,7 +1008,6 @@ struct ice_aqc_suspend_resume_elem {
        __le32 teid[1];
 };
 
-
 struct ice_aqc_txsched_move_grp_info_hdr {
        __le32 src_parent_teid;
        __le32 dest_parent_teid;
@@ -765,19 +1015,16 @@ struct ice_aqc_txsched_move_grp_info_hdr {
        __le16 reserved;
 };
 
-
 struct ice_aqc_move_elem {
        struct ice_aqc_txsched_move_grp_info_hdr hdr;
        __le32 teid[1];
 };
 
-
 struct ice_aqc_elem_info_bw {
        __le16 bw_profile_idx;
        __le16 bw_alloc;
 };
 
-
 struct ice_aqc_txsched_elem {
        u8 elem_type; /* Special field, reserved for some aq calls */
 #define ICE_AQC_ELEM_TYPE_UNDEFINED            0x0
@@ -809,51 +1056,67 @@ struct ice_aqc_txsched_elem {
        __le16 reserved2;
 };
 
-
 struct ice_aqc_txsched_elem_data {
        __le32 parent_teid;
        __le32 node_teid;
        struct ice_aqc_txsched_elem data;
 };
 
-
 struct ice_aqc_txsched_topo_grp_info_hdr {
        __le32 parent_teid;
        __le16 num_elems;
        __le16 reserved2;
 };
 
-
 struct ice_aqc_add_elem {
        struct ice_aqc_txsched_topo_grp_info_hdr hdr;
        struct ice_aqc_txsched_elem_data generic[1];
 };
 
-
 struct ice_aqc_conf_elem {
        struct ice_aqc_txsched_elem_data generic[1];
 };
 
-
 struct ice_aqc_get_elem {
        struct ice_aqc_txsched_elem_data generic[1];
 };
 
-
 struct ice_aqc_get_topo_elem {
        struct ice_aqc_txsched_topo_grp_info_hdr hdr;
        struct ice_aqc_txsched_elem_data
                generic[ICE_AQC_TOPO_MAX_LEVEL_NUM];
 };
 
-
 struct ice_aqc_delete_elem {
        struct ice_aqc_txsched_topo_grp_info_hdr hdr;
        __le32 teid[1];
 };
 
+/* Query Port ETS (indirect 0x040E)
+ *
+ * This indirect command is used to query port TC node configuration.
+ */
+struct ice_aqc_query_port_ets {
+       __le32 port_teid;
+       __le32 reserved;
+       __le32 addr_high;
+       __le32 addr_low;
+};
 
-
+struct ice_aqc_port_ets_elem {
+       u8 tc_valid_bits;
+       u8 reserved[3];
+       /* 3 bits for UP per TC 0-7, 4th byte reserved */
+       __le32 up2tc;
+       u8 tc_bw_share[8];
+       __le32 port_eir_prof_id;
+       __le32 port_cir_prof_id;
+       /* 3 bits per Node priority to TC 0-7, 4th byte reserved */
+       __le32 tc_node_prio;
+#define ICE_TC_NODE_PRIO_S     0x4
+       u8 reserved1[4];
+       __le32 tc_node_teid[8]; /* Used for response, reserved in command */
+};
 
 /* Rate limiting profile for
  * Add RL profile (indirect 0x0410)
@@ -870,7 +1133,6 @@ struct ice_aqc_rl_profile {
        __le32 addr_low;
 };
 
-
 struct ice_aqc_rl_profile_elem {
        u8 level;
        u8 flags;
@@ -890,13 +1152,10 @@ struct ice_aqc_rl_profile_elem {
        __le16 rl_encode;
 };
 
-
 struct ice_aqc_rl_profile_generic_elem {
        struct ice_aqc_rl_profile_elem generic[1];
 };
 
-
-
 /* Configure L2 Node CGD (indirect 0x0414)
  * This indirect command allows configuring a congestion domain for given L2
  * node TEIDs in the scheduler topology.
@@ -908,19 +1167,16 @@ struct ice_aqc_cfg_l2_node_cgd {
        __le32 addr_low;
 };
 
-
 struct ice_aqc_cfg_l2_node_cgd_elem {
        __le32 node_teid;
        u8 cgd;
        u8 reserved[3];
 };
 
-
 struct ice_aqc_cfg_l2_node_cgd_data {
        struct ice_aqc_cfg_l2_node_cgd_elem elem[1];
 };
 
-
 /* Query Scheduler Resource Allocation (indirect 0x0412)
  * This indirect command retrieves the scheduler resources allocated by
  * EMP Firmware to the given PF.
@@ -931,7 +1187,6 @@ struct ice_aqc_query_txsched_res {
        __le32 addr_low;
 };
 
-
 struct ice_aqc_generic_sched_props {
        __le16 phys_levels;
        __le16 logical_levels;
@@ -943,7 +1198,6 @@ struct ice_aqc_generic_sched_props {
        u8 rsvd1[22];
 };
 
-
 struct ice_aqc_layer_props {
        u8 logical_layer;
        u8 chunk_size;
@@ -957,13 +1211,11 @@ struct ice_aqc_layer_props {
        u8 rsvd1[14];
 };
 
-
 struct ice_aqc_query_txsched_res_resp {
        struct ice_aqc_generic_sched_props sched_props;
        struct ice_aqc_layer_props layer_props[ICE_AQC_TOPO_MAX_LEVEL_NUM];
 };
 
-
 /* Query Node to Root Topology (indirect 0x0413)
  * This command uses ice_aqc_get_elem as its data buffer.
  */
@@ -974,7 +1226,6 @@ struct ice_aqc_query_node_to_root {
        __le32 addr_low;
 };
 
-
 /* Get PHY capabilities (indirect 0x0600) */
 struct ice_aqc_get_phy_caps {
        u8 lport_num;
@@ -997,7 +1248,6 @@ struct ice_aqc_get_phy_caps {
        __le32 addr_low;
 };
 
-
 /* This is #define of PHY type (Extended):
  * The first set of defines is for phy_type_low.
  */
@@ -1087,8 +1337,11 @@ struct ice_aqc_get_phy_caps_data {
 #define ICE_AQC_PHY_EN_LESM                            BIT(6)
 #define ICE_AQC_PHY_EN_AUTO_FEC                                BIT(7)
 #define ICE_AQC_PHY_CAPS_MASK                          MAKEMASK(0xff, 0)
-       u8 low_power_ctrl;
+       u8 low_power_ctrl_an;
 #define ICE_AQC_PHY_EN_D3COLD_LOW_POWER_AUTONEG                BIT(0)
+#define ICE_AQC_PHY_AN_EN_CLAUSE28                     BIT(1)
+#define ICE_AQC_PHY_AN_EN_CLAUSE73                     BIT(2)
+#define ICE_AQC_PHY_AN_EN_CLAUSE37                     BIT(3)
        __le16 eee_cap;
 #define ICE_AQC_PHY_EEE_EN_100BASE_TX                  BIT(0)
 #define ICE_AQC_PHY_EEE_EN_1000BASE_T                  BIT(1)
@@ -1113,6 +1366,8 @@ struct ice_aqc_get_phy_caps_data {
 #define ICE_AQC_PHY_FEC_25G_RS_CLAUSE91_EN             BIT(6)
 #define ICE_AQC_PHY_FEC_25G_KR_CLAUSE74_EN             BIT(7)
 #define ICE_AQC_PHY_FEC_MASK                           MAKEMASK(0xdf, 0)
+       u8 module_compliance_enforcement;
+#define ICE_AQC_MOD_ENFORCE_STRICT_MODE                        BIT(0)
        u8 extended_compliance_code;
 #define ICE_MODULE_TYPE_TOTAL_BYTE                     3
        u8 module_type[ICE_MODULE_TYPE_TOTAL_BYTE];
@@ -1127,17 +1382,17 @@ struct ice_aqc_get_phy_caps_data {
 #define ICE_AQC_MOD_TYPE_BYTE2_SFP_PLUS                        0xA0
 #define ICE_AQC_MOD_TYPE_BYTE2_QSFP_PLUS               0x86
        u8 qualified_module_count;
+       u8 rsvd2[7];    /* Bytes 47:41 reserved */
 #define ICE_AQC_QUAL_MOD_COUNT_MAX                     16
        struct {
                u8 v_oui[3];
                u8 rsvd3;
                u8 v_part[16];
                __le32 v_rev;
-               __le64 rsvd8;
+               __le64 rsvd4;
        } qual_modules[ICE_AQC_QUAL_MOD_COUNT_MAX];
 };
 
-
 /* Set PHY capabilities (direct 0x0601)
  * NOTE: This command must be followed by setup link and restart auto-neg
  */
@@ -1148,27 +1403,44 @@ struct ice_aqc_set_phy_cfg {
        __le32 addr_low;
 };
 
-
 /* Set PHY config command data structure */
 struct ice_aqc_set_phy_cfg_data {
        __le64 phy_type_low; /* Use values from ICE_PHY_TYPE_LOW_* */
        __le64 phy_type_high; /* Use values from ICE_PHY_TYPE_HIGH_* */
        u8 caps;
-#define ICE_AQ_PHY_ENA_TX_PAUSE_ABILITY                BIT(0)
-#define ICE_AQ_PHY_ENA_RX_PAUSE_ABILITY                BIT(1)
+#define ICE_AQ_PHY_ENA_VALID_MASK      MAKEMASK(0xef, 0)
+#define ICE_AQ_PHY_ENA_TX_PAUSE_ABILITY        BIT(0)
+#define ICE_AQ_PHY_ENA_RX_PAUSE_ABILITY        BIT(1)
 #define ICE_AQ_PHY_ENA_LOW_POWER       BIT(2)
 #define ICE_AQ_PHY_ENA_LINK            BIT(3)
 #define ICE_AQ_PHY_ENA_AUTO_LINK_UPDT  BIT(5)
 #define ICE_AQ_PHY_ENA_LESM            BIT(6)
 #define ICE_AQ_PHY_ENA_AUTO_FEC                BIT(7)
-       u8 low_power_ctrl;
+       u8 low_power_ctrl_an;
        __le16 eee_cap; /* Value from ice_aqc_get_phy_caps */
        __le16 eeer_value;
        u8 link_fec_opt; /* Use defines from ice_aqc_get_phy_caps */
-       u8 rsvd1;
+       u8 module_compliance_enforcement;
 };
 
-
+/* Set MAC Config command data structure (direct 0x0603) */
+struct ice_aqc_set_mac_cfg {
+       __le16 max_frame_size;
+       u8 params;
+#define ICE_AQ_SET_MAC_PACE_S          3
+#define ICE_AQ_SET_MAC_PACE_M          (0xF << ICE_AQ_SET_MAC_PACE_S)
+#define ICE_AQ_SET_MAC_PACE_TYPE_M     BIT(7)
+#define ICE_AQ_SET_MAC_PACE_TYPE_RATE  0
+#define ICE_AQ_SET_MAC_PACE_TYPE_FIXED ICE_AQ_SET_MAC_PACE_TYPE_M
+       u8 tx_tmr_priority;
+       __le16 tx_tmr_value;
+       __le16 fc_refresh_threshold;
+       u8 drop_opts;
+#define ICE_AQ_SET_MAC_AUTO_DROP_MASK          BIT(0)
+#define ICE_AQ_SET_MAC_AUTO_DROP_NONE          0
+#define ICE_AQ_SET_MAC_AUTO_DROP_BLOCKING_PKTS BIT(0)
+       u8 reserved[7];
+};
 
 /* Restart AN command data structure (direct 0x0605)
  * Also used for response, with only the lport_num field present.
@@ -1182,7 +1454,6 @@ struct ice_aqc_restart_an {
        u8 reserved2[13];
 };
 
-
 /* Get link status (indirect 0x0607), also used for Link Status Event */
 struct ice_aqc_get_link_status {
        u8 lport_num;
@@ -1199,14 +1470,18 @@ struct ice_aqc_get_link_status {
        __le32 addr_low;
 };
 
-
 /* Get link status response data structure, also used for Link Status Event */
 struct ice_aqc_get_link_status_data {
        u8 topo_media_conflict;
 #define ICE_AQ_LINK_TOPO_CONFLICT      BIT(0)
 #define ICE_AQ_LINK_MEDIA_CONFLICT     BIT(1)
 #define ICE_AQ_LINK_TOPO_CORRUPT       BIT(2)
-       u8 reserved1;
+#define ICE_AQ_LINK_TOPO_UNREACH_PRT   BIT(4)
+#define ICE_AQ_LINK_TOPO_UNDRUTIL_PRT  BIT(5)
+#define ICE_AQ_LINK_TOPO_UNDRUTIL_MEDIA        BIT(6)
+#define ICE_AQ_LINK_TOPO_UNSUPP_MEDIA  BIT(7)
+       u8 link_cfg_err;
+#define ICE_AQ_LINK_CFG_ERR            BIT(0)
        u8 link_info;
 #define ICE_AQ_LINK_UP                 BIT(0)  /* Link Status */
 #define ICE_AQ_LINK_FAULT              BIT(1)
@@ -1228,13 +1503,18 @@ struct ice_aqc_get_link_status_data {
        u8 ext_info;
 #define ICE_AQ_LINK_PHY_TEMP_ALARM     BIT(0)
 #define ICE_AQ_LINK_EXCESSIVE_ERRORS   BIT(1)  /* Excessive Link Errors */
-       /* Port TX Suspended */
+       /* Port Tx Suspended */
 #define ICE_AQ_LINK_TX_S               2
 #define ICE_AQ_LINK_TX_M               (0x03 << ICE_AQ_LINK_TX_S)
 #define ICE_AQ_LINK_TX_ACTIVE          0
 #define ICE_AQ_LINK_TX_DRAINED         1
 #define ICE_AQ_LINK_TX_FLUSHED         3
-       u8 reserved2;
+       u8 lb_status;
+#define ICE_AQ_LINK_LB_PHY_LCL         BIT(0)
+#define ICE_AQ_LINK_LB_PHY_RMT         BIT(1)
+#define ICE_AQ_LINK_LB_MAC_LCL         BIT(2)
+#define ICE_AQ_LINK_LB_PHY_IDX_S       3
+#define ICE_AQ_LINK_LB_PHY_IDX_M       (0x7 << ICE_AQ_LB_PHY_IDX_S)
        __le16 max_frame_size;
        u8 cfg;
 #define ICE_AQ_LINK_25G_KR_FEC_EN      BIT(0)
@@ -1257,6 +1537,7 @@ struct ice_aqc_get_link_status_data {
 #define ICE_AQ_LINK_PWR_QSFP_CLASS_3   2
 #define ICE_AQ_LINK_PWR_QSFP_CLASS_4   3
        __le16 link_speed;
+#define ICE_AQ_LINK_SPEED_M            0x7FF
 #define ICE_AQ_LINK_SPEED_10MB         BIT(0)
 #define ICE_AQ_LINK_SPEED_100MB                BIT(1)
 #define ICE_AQ_LINK_SPEED_1000MB       BIT(2)
@@ -1274,7 +1555,6 @@ struct ice_aqc_get_link_status_data {
        __le64 phy_type_high; /* Use values from ICE_PHY_TYPE_HIGH_* */
 };
 
-
 /* Set event mask command (direct 0x0613) */
 struct ice_aqc_set_event_mask {
        u8      lport_num;
@@ -1289,11 +1569,11 @@ struct ice_aqc_set_event_mask {
 #define ICE_AQ_LINK_EVENT_AN_COMPLETED         BIT(7)
 #define ICE_AQ_LINK_EVENT_MODULE_QUAL_FAIL     BIT(8)
 #define ICE_AQ_LINK_EVENT_PORT_TX_SUSPENDED    BIT(9)
+#define ICE_AQ_LINK_EVENT_TOPO_CONFLICT                BIT(10)
+#define ICE_AQ_LINK_EVENT_MEDIA_CONFLICT       BIT(11)
        u8      reserved1[6];
 };
 
-
-
 /* Set MAC Loopback command (direct 0x0620) */
 struct ice_aqc_set_mac_lb {
        u8 lb_mode;
@@ -1302,9 +1582,56 @@ struct ice_aqc_set_mac_lb {
        u8 reserved[15];
 };
 
-
-
-
+struct ice_aqc_link_topo_addr {
+       u8 lport_num;
+       u8 lport_num_valid;
+#define ICE_AQC_LINK_TOPO_PORT_NUM_VALID       BIT(0)
+       u8 node_type_ctx;
+#define ICE_AQC_LINK_TOPO_NODE_TYPE_S          0
+#define ICE_AQC_LINK_TOPO_NODE_TYPE_M  (0xF << ICE_AQC_LINK_TOPO_NODE_TYPE_S)
+#define ICE_AQC_LINK_TOPO_NODE_TYPE_PHY                0
+#define ICE_AQC_LINK_TOPO_NODE_TYPE_GPIO_CTRL  1
+#define ICE_AQC_LINK_TOPO_NODE_TYPE_MUX_CTRL   2
+#define ICE_AQC_LINK_TOPO_NODE_TYPE_LED_CTRL   3
+#define ICE_AQC_LINK_TOPO_NODE_TYPE_LED                4
+#define ICE_AQC_LINK_TOPO_NODE_TYPE_THERMAL    5
+#define ICE_AQC_LINK_TOPO_NODE_TYPE_CAGE       6
+#define ICE_AQC_LINK_TOPO_NODE_TYPE_MEZZ       7
+#define ICE_AQC_LINK_TOPO_NODE_TYPE_ID_EEPROM  8
+#define ICE_AQC_LINK_TOPO_NODE_CTX_S           4
+#define ICE_AQC_LINK_TOPO_NODE_CTX_M           \
+                               (0xF << ICE_AQC_LINK_TOPO_NODE_CTX_S)
+#define ICE_AQC_LINK_TOPO_NODE_CTX_GLOBAL      0
+#define ICE_AQC_LINK_TOPO_NODE_CTX_BOARD       1
+#define ICE_AQC_LINK_TOPO_NODE_CTX_PORT                2
+#define ICE_AQC_LINK_TOPO_NODE_CTX_NODE                3
+#define ICE_AQC_LINK_TOPO_NODE_CTX_PROVIDED    4
+#define ICE_AQC_LINK_TOPO_NODE_CTX_OVERRIDE    5
+       u8 index;
+       __le16 handle;
+#define ICE_AQC_LINK_TOPO_HANDLE_S     0
+#define ICE_AQC_LINK_TOPO_HANDLE_M     (0x3FF << ICE_AQC_LINK_TOPO_HANDLE_S)
+/* Used to decode the handle field */
+#define ICE_AQC_LINK_TOPO_HANDLE_BRD_TYPE_M    BIT(9)
+#define ICE_AQC_LINK_TOPO_HANDLE_BRD_TYPE_LOM  BIT(9)
+#define ICE_AQC_LINK_TOPO_HANDLE_BRD_TYPE_MEZZ 0
+#define ICE_AQC_LINK_TOPO_HANDLE_NODE_S                0
+/* In case of a Mezzanine type */
+#define ICE_AQC_LINK_TOPO_HANDLE_MEZZ_NODE_M   \
+                               (0x3F << ICE_AQC_LINK_TOPO_HANDLE_NODE_S)
+#define ICE_AQC_LINK_TOPO_HANDLE_MEZZ_S        6
+#define ICE_AQC_LINK_TOPO_HANDLE_MEZZ_M        (0x7 << ICE_AQC_LINK_TOPO_HANDLE_MEZZ_S)
+/* In case of a LOM type */
+#define ICE_AQC_LINK_TOPO_HANDLE_LOM_NODE_M    \
+                               (0x1FF << ICE_AQC_LINK_TOPO_HANDLE_NODE_S)
+};
+
+/* Get Link Topology Handle (direct, 0x06E0) */
+struct ice_aqc_get_link_topo {
+       struct ice_aqc_link_topo_addr addr;
+       u8 node_part_num;
+       u8 rsvd[9];
+};
 
 /* Set Port Identification LED (direct, 0x06E9) */
 struct ice_aqc_set_port_id_led {
@@ -1317,24 +1644,56 @@ struct ice_aqc_set_port_id_led {
        u8 rsvd[13];
 };
 
-
+/* Read/Write SFF EEPROM command (indirect 0x06EE) */
+struct ice_aqc_sff_eeprom {
+       u8 lport_num;
+       u8 lport_num_valid;
+#define ICE_AQC_SFF_PORT_NUM_VALID     BIT(0)
+       __le16 i2c_bus_addr;
+#define ICE_AQC_SFF_I2CBUS_7BIT_M      0x7F
+#define ICE_AQC_SFF_I2CBUS_10BIT_M     0x3FF
+#define ICE_AQC_SFF_I2CBUS_TYPE_M      BIT(10)
+#define ICE_AQC_SFF_I2CBUS_TYPE_7BIT   0
+#define ICE_AQC_SFF_I2CBUS_TYPE_10BIT  ICE_AQC_SFF_I2CBUS_TYPE_M
+#define ICE_AQC_SFF_SET_EEPROM_PAGE_S  11
+#define ICE_AQC_SFF_SET_EEPROM_PAGE_M  (0x3 << ICE_AQC_SFF_SET_EEPROM_PAGE_S)
+#define ICE_AQC_SFF_NO_PAGE_CHANGE     0
+#define ICE_AQC_SFF_SET_23_ON_MISMATCH 1
+#define ICE_AQC_SFF_SET_22_ON_MISMATCH 2
+#define ICE_AQC_SFF_IS_WRITE           BIT(15)
+       __le16 i2c_mem_addr;
+       __le16 eeprom_page;
+#define  ICE_AQC_SFF_EEPROM_BANK_S 0
+#define  ICE_AQC_SFF_EEPROM_BANK_M (0xFF << ICE_AQC_SFF_EEPROM_BANK_S)
+#define  ICE_AQC_SFF_EEPROM_PAGE_S 8
+#define  ICE_AQC_SFF_EEPROM_PAGE_M (0xFF << ICE_AQC_SFF_EEPROM_PAGE_S)
+       __le32 addr_high;
+       __le32 addr_low;
+};
 
 /* NVM Read command (indirect 0x0701)
  * NVM Erase commands (direct 0x0702)
- * NVM Update commands (indirect 0x0703)
+ * NVM Write commands (indirect 0x0703)
+ * NVM Write Activate commands (direct 0x0707)
+ * NVM Shadow RAM Dump commands (direct 0x0707)
  */
 struct ice_aqc_nvm {
        __le16 offset_low;
        u8 offset_high;
        u8 cmd_flags;
 #define ICE_AQC_NVM_LAST_CMD           BIT(0)
-#define ICE_AQC_NVM_PCIR_REQ           BIT(0)  /* Used by NVM Update reply */
-#define ICE_AQC_NVM_PRESERVATION_S     1
+#define ICE_AQC_NVM_PCIR_REQ           BIT(0)  /* Used by NVM Write reply */
+#define ICE_AQC_NVM_PRESERVATION_S     1 /* Used by NVM Write Activate only */
 #define ICE_AQC_NVM_PRESERVATION_M     (3 << ICE_AQC_NVM_PRESERVATION_S)
 #define ICE_AQC_NVM_NO_PRESERVATION    (0 << ICE_AQC_NVM_PRESERVATION_S)
 #define ICE_AQC_NVM_PRESERVE_ALL       BIT(1)
 #define ICE_AQC_NVM_FACTORY_DEFAULT    (2 << ICE_AQC_NVM_PRESERVATION_S)
 #define ICE_AQC_NVM_PRESERVE_SELECTED  (3 << ICE_AQC_NVM_PRESERVATION_S)
+#define ICE_AQC_NVM_ACTIV_SEL_NVM      BIT(3) /* Write Activate/SR Dump only */
+#define ICE_AQC_NVM_ACTIV_SEL_OROM     BIT(4)
+#define ICE_AQC_NVM_ACTIV_SEL_NETLIST  BIT(5)
+#define ICE_AQC_NVM_SPECIAL_UPDATE     BIT(6)
+#define ICE_AQC_NVM_ACTIV_SEL_MASK     MAKEMASK(0x7, 3)
 #define ICE_AQC_NVM_FLASH_ONLY         BIT(7)
        __le16 module_typeid;
        __le16 length;
@@ -1343,6 +1702,53 @@ struct ice_aqc_nvm {
        __le32 addr_low;
 };
 
+/* NVM Module_Type ID, needed offset and read_len for struct ice_aqc_nvm. */
+#define ICE_AQC_NVM_SECTOR_UNIT                        4096 /* In Bytes */
+#define ICE_AQC_NVM_WORD_UNIT                  2 /* In Bytes */
+
+#define ICE_AQC_NVM_START_POINT                        0
+#define ICE_AQC_NVM_EMP_SR_PTR_OFFSET          0x90
+#define ICE_AQC_NVM_EMP_SR_PTR_RD_LEN          2 /* In Bytes */
+#define ICE_AQC_NVM_EMP_SR_PTR_M               MAKEMASK(0x7FFF, 0)
+#define ICE_AQC_NVM_EMP_SR_PTR_TYPE_S          15
+#define ICE_AQC_NVM_EMP_SR_PTR_TYPE_M          BIT(15)
+#define ICE_AQC_NVM_EMP_SR_PTR_TYPE_SECTOR     1
+
+#define ICE_AQC_NVM_LLDP_CFG_PTR_OFFSET                0x46
+#define ICE_AQC_NVM_LLDP_CFG_HEADER_LEN                2 /* In Bytes */
+#define ICE_AQC_NVM_LLDP_CFG_PTR_RD_LEN                2 /* In Bytes */
+
+#define ICE_AQC_NVM_LLDP_PRESERVED_MOD_ID      0x129
+#define ICE_AQC_NVM_CUR_LLDP_PERSIST_RD_OFFSET 2 /* In Bytes */
+#define ICE_AQC_NVM_LLDP_STATUS_M              MAKEMASK(0xF, 0)
+#define ICE_AQC_NVM_LLDP_STATUS_M_LEN          4 /* In Bits */
+#define ICE_AQC_NVM_LLDP_STATUS_RD_LEN         4 /* In Bytes */
+
+/* The result of netlist NVM read comes in a TLV format. The actual data
+ * (netlist header) starts from word offset 1 (byte 2). The FW strips
+ * out the type field from the TLV header so all the netlist fields
+ * should adjust their offset value by 1 word (2 bytes) in order to map
+ * their correct location.
+ */
+#define ICE_AQC_NVM_LINK_TOPO_NETLIST_MOD_ID           0x11B
+#define ICE_AQC_NVM_LINK_TOPO_NETLIST_LEN_OFFSET       1
+#define ICE_AQC_NVM_LINK_TOPO_NETLIST_LEN              2 /* In bytes */
+#define ICE_AQC_NVM_NETLIST_NODE_COUNT_OFFSET          2
+#define ICE_AQC_NVM_NETLIST_NODE_COUNT_LEN             2 /* In bytes */
+#define ICE_AQC_NVM_NETLIST_ID_BLK_START_OFFSET                5
+#define ICE_AQC_NVM_NETLIST_ID_BLK_LEN                 0x30 /* In words */
+
+/* netlist ID block field offsets (word offsets) */
+#define ICE_AQC_NVM_NETLIST_ID_BLK_MAJOR_VER_LOW       2
+#define ICE_AQC_NVM_NETLIST_ID_BLK_MAJOR_VER_HIGH      3
+#define ICE_AQC_NVM_NETLIST_ID_BLK_MINOR_VER_LOW       4
+#define ICE_AQC_NVM_NETLIST_ID_BLK_MINOR_VER_HIGH      5
+#define ICE_AQC_NVM_NETLIST_ID_BLK_TYPE_LOW            6
+#define ICE_AQC_NVM_NETLIST_ID_BLK_TYPE_HIGH           7
+#define ICE_AQC_NVM_NETLIST_ID_BLK_REV_LOW             8
+#define ICE_AQC_NVM_NETLIST_ID_BLK_REV_HIGH            9
+#define ICE_AQC_NVM_NETLIST_ID_BLK_SHA_HASH            0xA
+#define ICE_AQC_NVM_NETLIST_ID_BLK_CUST_VER            0x2F
 
 /* Used for 0x0704 as well as for 0x0705 commands */
 struct ice_aqc_nvm_cfg {
@@ -1358,14 +1764,12 @@ struct ice_aqc_nvm_cfg {
        __le32 addr_low;
 };
 
-
 struct ice_aqc_nvm_cfg_data {
        __le16 field_id;
        __le16 field_options;
        __le16 field_value;
 };
 
-
 /* NVM Checksum Command (direct, 0x0706) */
 struct ice_aqc_nvm_checksum {
        u8 flags;
@@ -1377,9 +1781,156 @@ struct ice_aqc_nvm_checksum {
        u8 rsvd2[12];
 };
 
+/* Get LLDP MIB (indirect 0x0A00)
+ * Note: This is also used by the LLDP MIB Change Event (0x0A01)
+ * as the format is the same.
+ */
+struct ice_aqc_lldp_get_mib {
+       u8 type;
+#define ICE_AQ_LLDP_MIB_TYPE_S                 0
+#define ICE_AQ_LLDP_MIB_TYPE_M                 (0x3 << ICE_AQ_LLDP_MIB_TYPE_S)
+#define ICE_AQ_LLDP_MIB_LOCAL                  0
+#define ICE_AQ_LLDP_MIB_REMOTE                 1
+#define ICE_AQ_LLDP_MIB_LOCAL_AND_REMOTE       2
+#define ICE_AQ_LLDP_BRID_TYPE_S                        2
+#define ICE_AQ_LLDP_BRID_TYPE_M                        (0x3 << ICE_AQ_LLDP_BRID_TYPE_S)
+#define ICE_AQ_LLDP_BRID_TYPE_NEAREST_BRID     0
+#define ICE_AQ_LLDP_BRID_TYPE_NON_TPMR         1
+/* Tx pause flags in the 0xA01 event use ICE_AQ_LLDP_TX_* */
+#define ICE_AQ_LLDP_TX_S                       0x4
+#define ICE_AQ_LLDP_TX_M                       (0x03 << ICE_AQ_LLDP_TX_S)
+#define ICE_AQ_LLDP_TX_ACTIVE                  0
+#define ICE_AQ_LLDP_TX_SUSPENDED               1
+#define ICE_AQ_LLDP_TX_FLUSHED                 3
+/* The following bytes are reserved for the Get LLDP MIB command (0x0A00)
+ * and in the LLDP MIB Change Event (0x0A01). They are valid for the
+ * Get LLDP MIB (0x0A00) response only.
+ */
+       u8 reserved1;
+       __le16 local_len;
+       __le16 remote_len;
+       u8 reserved2[2];
+       __le32 addr_high;
+       __le32 addr_low;
+};
+
+/* Configure LLDP MIB Change Event (direct 0x0A01) */
+/* For MIB Change Event use ice_aqc_lldp_get_mib structure above */
+struct ice_aqc_lldp_set_mib_change {
+       u8 command;
+#define ICE_AQ_LLDP_MIB_UPDATE_ENABLE          0x0
+#define ICE_AQ_LLDP_MIB_UPDATE_DIS             0x1
+       u8 reserved[15];
+};
+
+/* Add LLDP TLV (indirect 0x0A02)
+ * Delete LLDP TLV (indirect 0x0A04)
+ */
+struct ice_aqc_lldp_add_delete_tlv {
+       u8 type; /* only nearest bridge and non-TPMR from 0x0A00 */
+       u8 reserved1[1];
+       __le16 len;
+       u8 reserved2[4];
+       __le32 addr_high;
+       __le32 addr_low;
+};
+
+/* Update LLDP TLV (indirect 0x0A03) */
+struct ice_aqc_lldp_update_tlv {
+       u8 type; /* only nearest bridge and non-TPMR from 0x0A00 */
+       u8 reserved;
+       __le16 old_len;
+       __le16 new_offset;
+       __le16 new_len;
+       __le32 addr_high;
+       __le32 addr_low;
+};
 
+/* Stop LLDP (direct 0x0A05) */
+struct ice_aqc_lldp_stop {
+       u8 command;
+#define ICE_AQ_LLDP_AGENT_STATE_MASK   BIT(0)
+#define ICE_AQ_LLDP_AGENT_STOP         0x0
+#define ICE_AQ_LLDP_AGENT_SHUTDOWN     ICE_AQ_LLDP_AGENT_STATE_MASK
+#define ICE_AQ_LLDP_AGENT_PERSIST_DIS  BIT(1)
+       u8 reserved[15];
+};
 
+/* Start LLDP (direct 0x0A06) */
+struct ice_aqc_lldp_start {
+       u8 command;
+#define ICE_AQ_LLDP_AGENT_START                BIT(0)
+#define ICE_AQ_LLDP_AGENT_PERSIST_ENA  BIT(1)
+       u8 reserved[15];
+};
 
+/* Get CEE DCBX Oper Config (0x0A07)
+ * The command uses the generic descriptor struct and
+ * returns the struct below as an indirect response.
+ */
+struct ice_aqc_get_cee_dcb_cfg_resp {
+       u8 oper_num_tc;
+       u8 oper_prio_tc[4];
+       u8 oper_tc_bw[8];
+       u8 oper_pfc_en;
+       __le16 oper_app_prio;
+#define ICE_AQC_CEE_APP_FCOE_S         0
+#define ICE_AQC_CEE_APP_FCOE_M         (0x7 << ICE_AQC_CEE_APP_FCOE_S)
+#define ICE_AQC_CEE_APP_ISCSI_S                3
+#define ICE_AQC_CEE_APP_ISCSI_M                (0x7 << ICE_AQC_CEE_APP_ISCSI_S)
+#define ICE_AQC_CEE_APP_FIP_S          8
+#define ICE_AQC_CEE_APP_FIP_M          (0x7 << ICE_AQC_CEE_APP_FIP_S)
+       __le32 tlv_status;
+#define ICE_AQC_CEE_PG_STATUS_S                0
+#define ICE_AQC_CEE_PG_STATUS_M                (0x7 << ICE_AQC_CEE_PG_STATUS_S)
+#define ICE_AQC_CEE_PFC_STATUS_S       3
+#define ICE_AQC_CEE_PFC_STATUS_M       (0x7 << ICE_AQC_CEE_PFC_STATUS_S)
+#define ICE_AQC_CEE_FCOE_STATUS_S      8
+#define ICE_AQC_CEE_FCOE_STATUS_M      (0x7 << ICE_AQC_CEE_FCOE_STATUS_S)
+#define ICE_AQC_CEE_ISCSI_STATUS_S     11
+#define ICE_AQC_CEE_ISCSI_STATUS_M     (0x7 << ICE_AQC_CEE_ISCSI_STATUS_S)
+#define ICE_AQC_CEE_FIP_STATUS_S       16
+#define ICE_AQC_CEE_FIP_STATUS_M       (0x7 << ICE_AQC_CEE_FIP_STATUS_S)
+       u8 reserved[12];
+};
+
+/* Set Local LLDP MIB (indirect 0x0A08)
+ * Used to replace the local MIB of a given LLDP agent. e.g. DCBX
+ */
+struct ice_aqc_lldp_set_local_mib {
+       u8 type;
+#define SET_LOCAL_MIB_TYPE_DCBX_M              BIT(0)
+#define SET_LOCAL_MIB_TYPE_LOCAL_MIB           0
+#define SET_LOCAL_MIB_TYPE_CEE_M               BIT(1)
+#define SET_LOCAL_MIB_TYPE_CEE_WILLING         0
+#define SET_LOCAL_MIB_TYPE_CEE_NON_WILLING     SET_LOCAL_MIB_TYPE_CEE_M
+       u8 reserved0;
+       __le16 length;
+       u8 reserved1[4];
+       __le32 addr_high;
+       __le32 addr_low;
+};
+
+struct ice_aqc_lldp_set_local_mib_resp {
+       u8 status;
+#define SET_LOCAL_MIB_RESP_EVENT_M             BIT(0)
+#define SET_LOCAL_MIB_RESP_MIB_CHANGE_SILENT   0
+#define SET_LOCAL_MIB_RESP_MIB_CHANGE_EVENT    SET_LOCAL_MIB_RESP_EVENT_M
+       u8 reserved[15];
+};
+
+/* Stop/Start LLDP Agent (direct 0x0A09)
+ * Used for stopping/starting specific LLDP agent. e.g. DCBX.
+ * The same structure is used for the response, with the command field
+ * being used as the status field.
+ */
+struct ice_aqc_lldp_stop_start_specific_agent {
+       u8 command;
+#define ICE_AQC_START_STOP_AGENT_M             BIT(0)
+#define ICE_AQC_START_STOP_AGENT_STOP_DCBX     0
+#define ICE_AQC_START_STOP_AGENT_START_DCBX    ICE_AQC_START_STOP_AGENT_M
+       u8 reserved[15];
+};
 
 /* Get/Set RSS key (indirect 0x0B04/0x0B02) */
 struct ice_aqc_get_set_rss_key {
@@ -1392,16 +1943,27 @@ struct ice_aqc_get_set_rss_key {
        __le32 addr_low;
 };
 
-
 #define ICE_AQC_GET_SET_RSS_KEY_DATA_RSS_KEY_SIZE      0x28
 #define ICE_AQC_GET_SET_RSS_KEY_DATA_HASH_KEY_SIZE     0xC
+#define ICE_GET_SET_RSS_KEY_EXTEND_KEY_SIZE \
+                               (ICE_AQC_GET_SET_RSS_KEY_DATA_RSS_KEY_SIZE + \
+                                ICE_AQC_GET_SET_RSS_KEY_DATA_HASH_KEY_SIZE)
 
+/**
+ * struct ice_aqc_get_set_rss_keys - Get/Set RSS hash key command buffer
+ * @standard_rss_key: 40 most significant bytes of hash key
+ * @extended_hash_key: 12 least significant bytes of hash key
+ *
+ * Set/Get 40 byte hash key using standard_rss_key field, and set
+ * extended_hash_key field to zero. Set/Get 52 byte hash key using
+ * standard_rss_key field for 40 most significant bytes and the
+ * extended_hash_key field for the 12 least significant bytes of hash key.
+ */
 struct ice_aqc_get_set_rss_keys {
        u8 standard_rss_key[ICE_AQC_GET_SET_RSS_KEY_DATA_RSS_KEY_SIZE];
        u8 extended_hash_key[ICE_AQC_GET_SET_RSS_KEY_DATA_HASH_KEY_SIZE];
 };
 
-
 /* Get/Set RSS LUT (indirect 0x0B05/0x0B03) */
 struct ice_aqc_get_set_rss_lut {
 #define ICE_AQC_GSET_RSS_LUT_VSI_VALID BIT(15)
@@ -1437,11 +1999,17 @@ struct ice_aqc_get_set_rss_lut {
        __le32 addr_low;
 };
 
+/* Clear FD Table Command (direct, 0x0B06) */
+struct ice_aqc_clear_fd_table {
+       u8 clear_type;
+#define CL_FD_VM_VF_TYPE_VSI_IDX       1
+#define CL_FD_VM_VF_TYPE_PF_IDX                2
+       u8 rsvd;
+       __le16 vsi_index;
+       u8 reserved[12];
+};
 
-
-
-
-/* Add TX LAN Queues (indirect 0x0C30) */
+/* Add Tx LAN Queues (indirect 0x0C30) */
 struct ice_aqc_add_txqs {
        u8 num_qgrps;
        u8 reserved[3];
@@ -1450,8 +2018,7 @@ struct ice_aqc_add_txqs {
        __le32 addr_low;
 };
 
-
-/* This is the descriptor of each queue entry for the Add TX LAN Queues
+/* This is the descriptor of each queue entry for the Add Tx LAN Queues
  * command (0x0C30). Only used within struct ice_aqc_add_tx_qgrp.
  */
 struct ice_aqc_add_txqs_perq {
@@ -1463,8 +2030,7 @@ struct ice_aqc_add_txqs_perq {
        struct ice_aqc_txsched_elem info;
 };
 
-
-/* The format of the command buffer for Add TX LAN Queues (0x0C30)
+/* The format of the command buffer for Add Tx LAN Queues (0x0C30)
  * is an array of the following structs. Please note that the length of
  * each struct ice_aqc_add_tx_qgrp is variable due
  * to the variable number of queues in each group!
@@ -1476,8 +2042,7 @@ struct ice_aqc_add_tx_qgrp {
        struct ice_aqc_add_txqs_perq txqs[1];
 };
 
-
-/* Disable TX LAN Queues (indirect 0x0C31) */
+/* Disable Tx LAN Queues (indirect 0x0C31) */
 struct ice_aqc_dis_txqs {
        u8 cmd_type;
 #define ICE_AQC_Q_DIS_CMD_S            0
@@ -1499,8 +2064,7 @@ struct ice_aqc_dis_txqs {
        __le32 addr_low;
 };
 
-
-/* The buffer for Disable TX LAN Queues (indirect 0x0C31)
+/* The buffer for Disable Tx LAN Queues (indirect 0x0C31)
  * contains the following structures, arrayed one after the
  * other.
  * Note: Since the q_id is 16 bits wide, if the
@@ -1522,21 +2086,18 @@ struct ice_aqc_dis_txq_item {
                        (1 << ICE_AQC_Q_DIS_BUF_ELEM_TYPE_S)
 };
 
-
 struct ice_aqc_dis_txq {
        struct ice_aqc_dis_txq_item qgrps[1];
 };
 
-
-/* TX LAN Queues Cleanup Event (0x0C31) */
+/* Tx LAN Queues Cleanup Event (0x0C31) */
 struct ice_aqc_txqs_cleanup {
        __le16 caller_opc;
        __le16 cmd_tag;
        u8 reserved[12];
 };
 
-
-/* Move / Reconfigure TX Queues (indirect 0x0C32) */
+/* Move / Reconfigure Tx Queues (indirect 0x0C32) */
 struct ice_aqc_move_txqs {
        u8 cmd_type;
 #define ICE_AQC_Q_CMD_TYPE_S           0
@@ -1556,8 +2117,7 @@ struct ice_aqc_move_txqs {
        __le32 addr_low;
 };
 
-
-/* This is the descriptor of each queue entry for the move TX LAN Queues
+/* This is the descriptor of each queue entry for the move Tx LAN Queues
  * command (0x0C32).
  */
 struct ice_aqc_move_txqs_elem {
@@ -1567,107 +2127,83 @@ struct ice_aqc_move_txqs_elem {
        __le32 q_teid;
 };
 
-
 struct ice_aqc_move_txqs_data {
        __le32 src_teid;
        __le32 dest_teid;
        struct ice_aqc_move_txqs_elem txqs[1];
 };
 
-
-
-
-
-
-/* Lan Queue Overflow Event (direct, 0x1001) */
-struct ice_aqc_event_lan_overflow {
-       __le32 prtdcb_ruptq;
-       __le32 qtx_ctl;
-       u8 reserved[8];
+/* Download Package (indirect 0x0C40) */
+/* Also used for Update Package (indirect 0x0C42) */
+struct ice_aqc_download_pkg {
+       u8 flags;
+#define ICE_AQC_DOWNLOAD_PKG_LAST_BUF  0x01
+       u8 reserved[3];
+       __le32 reserved1;
+       __le32 addr_high;
+       __le32 addr_low;
 };
 
-
-
-/* Configure Firmware Logging Command (indirect 0xFF09)
- * Logging Information Read Response (indirect 0xFF10)
- * Note: The 0xFF10 command has no input parameters.
- */
-struct ice_aqc_fw_logging {
-       u8 log_ctrl;
-#define ICE_AQC_FW_LOG_AQ_EN           BIT(0)
-#define ICE_AQC_FW_LOG_UART_EN         BIT(1)
-       u8 rsvd0;
-       u8 log_ctrl_valid; /* Not used by 0xFF10 Response */
-#define ICE_AQC_FW_LOG_AQ_VALID                BIT(0)
-#define ICE_AQC_FW_LOG_UART_VALID      BIT(1)
-       u8 rsvd1[5];
+struct ice_aqc_download_pkg_resp {
+       __le32 error_offset;
+       __le32 error_info;
        __le32 addr_high;
        __le32 addr_low;
 };
 
+/* Get Package Info List (indirect 0x0C43) */
+struct ice_aqc_get_pkg_info_list {
+       __le32 reserved1;
+       __le32 reserved2;
+       __le32 addr_high;
+       __le32 addr_low;
+};
 
-enum ice_aqc_fw_logging_mod {
-       ICE_AQC_FW_LOG_ID_GENERAL = 0,
-       ICE_AQC_FW_LOG_ID_CTRL,
-       ICE_AQC_FW_LOG_ID_LINK,
-       ICE_AQC_FW_LOG_ID_LINK_TOPO,
-       ICE_AQC_FW_LOG_ID_DNL,
-       ICE_AQC_FW_LOG_ID_I2C,
-       ICE_AQC_FW_LOG_ID_SDP,
-       ICE_AQC_FW_LOG_ID_MDIO,
-       ICE_AQC_FW_LOG_ID_ADMINQ,
-       ICE_AQC_FW_LOG_ID_HDMA,
-       ICE_AQC_FW_LOG_ID_LLDP,
-       ICE_AQC_FW_LOG_ID_DCBX,
-       ICE_AQC_FW_LOG_ID_DCB,
-       ICE_AQC_FW_LOG_ID_NETPROXY,
-       ICE_AQC_FW_LOG_ID_NVM,
-       ICE_AQC_FW_LOG_ID_AUTH,
-       ICE_AQC_FW_LOG_ID_VPD,
-       ICE_AQC_FW_LOG_ID_IOSF,
-       ICE_AQC_FW_LOG_ID_PARSER,
-       ICE_AQC_FW_LOG_ID_SW,
-       ICE_AQC_FW_LOG_ID_SCHEDULER,
-       ICE_AQC_FW_LOG_ID_TXQ,
-       ICE_AQC_FW_LOG_ID_RSVD,
-       ICE_AQC_FW_LOG_ID_POST,
-       ICE_AQC_FW_LOG_ID_WATCHDOG,
-       ICE_AQC_FW_LOG_ID_TASK_DISPATCH,
-       ICE_AQC_FW_LOG_ID_MNG,
-       ICE_AQC_FW_LOG_ID_MAX,
-};
-
-/* This is the buffer for both of the logging commands.
- * The entry array size depends on the datalen parameter in the descriptor.
- * There will be a total of datalen / 2 entries.
- */
-struct ice_aqc_fw_logging_data {
-       __le16 entry[1];
-#define ICE_AQC_FW_LOG_ID_S            0
-#define ICE_AQC_FW_LOG_ID_M            (0xFFF << ICE_AQC_FW_LOG_ID_S)
+/* Version format for packages */
+struct ice_pkg_ver {
+       u8 major;
+       u8 minor;
+       u8 update;
+       u8 draft;
+};
 
-#define ICE_AQC_FW_LOG_CONF_SUCCESS    0       /* Used by response */
-#define ICE_AQC_FW_LOG_CONF_BAD_INDX   BIT(12) /* Used by response */
+#define ICE_PKG_NAME_SIZE      32
 
-#define ICE_AQC_FW_LOG_EN_S            12
-#define ICE_AQC_FW_LOG_EN_M            (0xF << ICE_AQC_FW_LOG_EN_S)
-#define ICE_AQC_FW_LOG_INFO_EN         BIT(12) /* Used by command */
-#define ICE_AQC_FW_LOG_INIT_EN         BIT(13) /* Used by command */
-#define ICE_AQC_FW_LOG_FLOW_EN         BIT(14) /* Used by command */
-#define ICE_AQC_FW_LOG_ERR_EN          BIT(15) /* Used by command */
+struct ice_aqc_get_pkg_info {
+       struct ice_pkg_ver ver;
+       char name[ICE_PKG_NAME_SIZE];
+       u8 is_in_nvm;
+       u8 is_active;
+       u8 is_active_at_boot;
+       u8 is_modified;
 };
 
+/* Get Package Info List response buffer format (0x0C43) */
+struct ice_aqc_get_pkg_info_resp {
+       __le32 count;
+       struct ice_aqc_get_pkg_info pkg_info[1];
+};
 
-/* Get/Clear FW Log (indirect 0xFF11) */
-struct ice_aqc_get_clear_fw_log {
-       u8 flags;
-#define ICE_AQC_FW_LOG_CLEAR           BIT(0)
-#define ICE_AQC_FW_LOG_MORE_DATA_AVAIL BIT(1)
-       u8 rsvd1[7];
+/* Driver Shared Parameters (direct, 0x0C90) */
+struct ice_aqc_driver_shared_params {
+       u8 set_or_get_op;
+#define ICE_AQC_DRIVER_PARAM_OP_MASK           BIT(0)
+#define ICE_AQC_DRIVER_PARAM_SET               0
+#define ICE_AQC_DRIVER_PARAM_GET               1
+       u8 param_indx;
+#define ICE_AQC_DRIVER_PARAM_MAX_IDX           15
+       u8 rsvd[2];
+       __le32 param_val;
        __le32 addr_high;
        __le32 addr_low;
 };
 
+/* Lan Queue Overflow Event (direct, 0x1001) */
+struct ice_aqc_event_lan_overflow {
+       __le32 prtdcb_ruptq;
+       __le32 qtx_ctl;
+       u8 reserved[8];
+};
 
 /**
  * struct ice_aq_desc - Admin Queue (AQ) descriptor
@@ -1697,45 +2233,72 @@ struct ice_aq_desc {
                u8 raw[16];
                struct ice_aqc_generic generic;
                struct ice_aqc_get_ver get_ver;
+               struct ice_aqc_driver_ver driver_ver;
                struct ice_aqc_q_shutdown q_shutdown;
                struct ice_aqc_req_res res_owner;
                struct ice_aqc_manage_mac_read mac_read;
                struct ice_aqc_manage_mac_write mac_write;
                struct ice_aqc_clear_pxe clear_pxe;
+               struct ice_aqc_config_no_drop_policy no_drop;
+               struct ice_aqc_add_update_mir_rule add_update_rule;
+               struct ice_aqc_delete_mir_rule del_rule;
                struct ice_aqc_list_caps get_cap;
                struct ice_aqc_get_phy_caps get_phy;
                struct ice_aqc_set_phy_cfg set_phy;
                struct ice_aqc_restart_an restart_an;
+               struct ice_aqc_sff_eeprom read_write_sff_param;
                struct ice_aqc_set_port_id_led set_port_id_led;
                struct ice_aqc_get_sw_cfg get_sw_conf;
                struct ice_aqc_sw_rules sw_rules;
+               struct ice_aqc_storm_cfg storm_conf;
+               struct ice_aqc_add_get_recipe add_get_recipe;
+               struct ice_aqc_recipe_to_profile recipe_to_profile;
                struct ice_aqc_get_topo get_topo;
                struct ice_aqc_sched_elem_cmd sched_elem_cmd;
                struct ice_aqc_query_txsched_res query_sched_res;
                struct ice_aqc_query_node_to_root query_node_to_root;
                struct ice_aqc_cfg_l2_node_cgd cfg_l2_node_cgd;
+               struct ice_aqc_query_port_ets port_ets;
                struct ice_aqc_rl_profile rl_profile;
-
                struct ice_aqc_nvm nvm;
                struct ice_aqc_nvm_cfg nvm_cfg;
                struct ice_aqc_nvm_checksum nvm_checksum;
+               struct ice_aqc_pfc_ignore pfc_ignore;
+               struct ice_aqc_set_query_pfc_mode set_query_pfc_mode;
+               struct ice_aqc_set_dcb_params set_dcb_params;
+               struct ice_aqc_lldp_get_mib lldp_get_mib;
+               struct ice_aqc_lldp_set_mib_change lldp_set_event;
+               struct ice_aqc_lldp_add_delete_tlv lldp_add_delete_tlv;
+               struct ice_aqc_lldp_update_tlv lldp_update_tlv;
+               struct ice_aqc_lldp_stop lldp_stop;
+               struct ice_aqc_lldp_start lldp_start;
+               struct ice_aqc_lldp_set_local_mib lldp_set_mib;
+               struct ice_aqc_lldp_stop_start_specific_agent lldp_agent_ctrl;
                struct ice_aqc_get_set_rss_lut get_set_rss_lut;
                struct ice_aqc_get_set_rss_key get_set_rss_key;
+               struct ice_aqc_clear_fd_table clear_fd_table;
                struct ice_aqc_add_txqs add_txqs;
                struct ice_aqc_dis_txqs dis_txqs;
+               struct ice_aqc_move_txqs move_txqs;
                struct ice_aqc_txqs_cleanup txqs_cleanup;
                struct ice_aqc_add_get_update_free_vsi vsi_cmd;
                struct ice_aqc_add_update_free_vsi_resp add_update_free_vsi_res;
-               struct ice_aqc_fw_logging fw_logging;
-               struct ice_aqc_get_clear_fw_log get_clear_fw_log;
+               struct ice_aqc_get_vsi_resp get_vsi_resp;
+               struct ice_aqc_download_pkg download_pkg;
+               struct ice_aqc_get_pkg_info_list get_pkg_info_list;
+               struct ice_aqc_driver_shared_params drv_shared_params;
                struct ice_aqc_set_mac_lb set_mac_lb;
                struct ice_aqc_alloc_free_res_cmd sw_res_ctrl;
+               struct ice_aqc_get_res_alloc get_res;
+               struct ice_aqc_get_allocd_res_desc get_res_desc;
+               struct ice_aqc_set_mac_cfg set_mac_cfg;
                struct ice_aqc_set_event_mask set_event_mask;
                struct ice_aqc_get_link_status get_link_status;
+               struct ice_aqc_event_lan_overflow lan_overflow;
+               struct ice_aqc_get_link_topo get_link_topo;
        } params;
 };
 
-
 /* FW defined boundary for a large buffer, 4k >= Large buffer > 512 bytes */
 #define ICE_AQ_LG_BUF  512
 
@@ -1800,6 +2363,7 @@ enum ice_aq_err {
        ICE_AQ_RC_ESVN          = 26, /* SVN number prohibits this package */
        ICE_AQ_RC_EBADMAN       = 27, /* Manifest hash mismatch */
        ICE_AQ_RC_EBADBUF       = 28, /* Buffer hash mismatches manifest */
+       ICE_AQ_RC_EACCES_BMCU   = 29, /* BMC Update in progress */
 };
 
 /* Admin Queue command opcodes */
@@ -1825,6 +2389,8 @@ enum ice_adminq_opc {
        /* PXE */
        ice_aqc_opc_clear_pxe_mode                      = 0x0110,
 
+       ice_aqc_opc_config_no_drop_policy               = 0x0112,
+
        /* internal switch commands */
        ice_aqc_opc_get_sw_cfg                          = 0x0200,
 
@@ -1840,7 +2406,19 @@ enum ice_adminq_opc {
        ice_aqc_opc_get_vsi_params                      = 0x0212,
        ice_aqc_opc_free_vsi                            = 0x0213,
 
+       /* Mirroring rules - add/update, delete */
+       ice_aqc_opc_add_update_mir_rule                 = 0x0260,
+       ice_aqc_opc_del_mir_rule                        = 0x0261,
 
+       /* storm configuration */
+       ice_aqc_opc_set_storm_cfg                       = 0x0280,
+       ice_aqc_opc_get_storm_cfg                       = 0x0281,
+
+       /* recipe commands */
+       ice_aqc_opc_add_recipe                          = 0x0290,
+       ice_aqc_opc_recipe_to_profile                   = 0x0291,
+       ice_aqc_opc_get_recipe                          = 0x0292,
+       ice_aqc_opc_get_recipe_to_profile               = 0x0293,
 
        /* switch rules population commands */
        ice_aqc_opc_add_sw_rules                        = 0x02A0,
@@ -1849,6 +2427,11 @@ enum ice_adminq_opc {
        ice_aqc_opc_get_sw_rules                        = 0x02A3,
        ice_aqc_opc_clear_pf_cfg                        = 0x02A4,
 
+       /* DCB commands */
+       ice_aqc_opc_pfc_ignore                          = 0x0301,
+       ice_aqc_opc_query_pfc_mode                      = 0x0302,
+       ice_aqc_opc_set_pfc_mode                        = 0x0303,
+       ice_aqc_opc_set_dcb_params                      = 0x0306,
 
        /* transmit scheduler commands */
        ice_aqc_opc_get_dflt_topo                       = 0x0400,
@@ -1858,8 +2441,7 @@ enum ice_adminq_opc {
        ice_aqc_opc_move_sched_elems                    = 0x0408,
        ice_aqc_opc_suspend_sched_elems                 = 0x0409,
        ice_aqc_opc_resume_sched_elems                  = 0x040A,
-       ice_aqc_opc_suspend_sched_traffic               = 0x040B,
-       ice_aqc_opc_resume_sched_traffic                = 0x040C,
+       ice_aqc_opc_query_port_ets                      = 0x040E,
        ice_aqc_opc_delete_sched_elems                  = 0x040F,
        ice_aqc_opc_add_rl_profiles                     = 0x0410,
        ice_aqc_opc_query_rl_profiles                   = 0x0411,
@@ -1876,43 +2458,61 @@ enum ice_adminq_opc {
        ice_aqc_opc_get_link_status                     = 0x0607,
        ice_aqc_opc_set_event_mask                      = 0x0613,
        ice_aqc_opc_set_mac_lb                          = 0x0620,
+       ice_aqc_opc_get_link_topo                       = 0x06E0,
        ice_aqc_opc_set_port_id_led                     = 0x06E9,
        ice_aqc_opc_get_port_options                    = 0x06EA,
        ice_aqc_opc_set_port_option                     = 0x06EB,
        ice_aqc_opc_set_gpio                            = 0x06EC,
        ice_aqc_opc_get_gpio                            = 0x06ED,
+       ice_aqc_opc_sff_eeprom                          = 0x06EE,
 
        /* NVM commands */
        ice_aqc_opc_nvm_read                            = 0x0701,
        ice_aqc_opc_nvm_erase                           = 0x0702,
-       ice_aqc_opc_nvm_update                          = 0x0703,
+       ice_aqc_opc_nvm_write                           = 0x0703,
        ice_aqc_opc_nvm_cfg_read                        = 0x0704,
        ice_aqc_opc_nvm_cfg_write                       = 0x0705,
        ice_aqc_opc_nvm_checksum                        = 0x0706,
-
+       ice_aqc_opc_nvm_write_activate                  = 0x0707,
+       ice_aqc_opc_nvm_sr_dump                         = 0x0707,
+       ice_aqc_opc_nvm_save_factory_settings           = 0x0708,
+       ice_aqc_opc_nvm_update_empr                     = 0x0709,
+
+       /* LLDP commands */
+       ice_aqc_opc_lldp_get_mib                        = 0x0A00,
+       ice_aqc_opc_lldp_set_mib_change                 = 0x0A01,
+       ice_aqc_opc_lldp_add_tlv                        = 0x0A02,
+       ice_aqc_opc_lldp_update_tlv                     = 0x0A03,
+       ice_aqc_opc_lldp_delete_tlv                     = 0x0A04,
+       ice_aqc_opc_lldp_stop                           = 0x0A05,
+       ice_aqc_opc_lldp_start                          = 0x0A06,
+       ice_aqc_opc_get_cee_dcb_cfg                     = 0x0A07,
+       ice_aqc_opc_lldp_set_local_mib                  = 0x0A08,
+       ice_aqc_opc_lldp_stop_start_specific_agent      = 0x0A09,
 
        /* RSS commands */
        ice_aqc_opc_set_rss_key                         = 0x0B02,
        ice_aqc_opc_set_rss_lut                         = 0x0B03,
        ice_aqc_opc_get_rss_key                         = 0x0B04,
        ice_aqc_opc_get_rss_lut                         = 0x0B05,
+       ice_aqc_opc_clear_fd_table                      = 0x0B06,
 
-       /* TX queue handling commands/events */
+       /* Tx queue handling commands/events */
        ice_aqc_opc_add_txqs                            = 0x0C30,
        ice_aqc_opc_dis_txqs                            = 0x0C31,
        ice_aqc_opc_txqs_cleanup                        = 0x0C31,
        ice_aqc_opc_move_recfg_txqs                     = 0x0C32,
 
+       /* package commands */
+       ice_aqc_opc_download_pkg                        = 0x0C40,
+       ice_aqc_opc_upload_section                      = 0x0C41,
+       ice_aqc_opc_update_pkg                          = 0x0C42,
+       ice_aqc_opc_get_pkg_info_list                   = 0x0C43,
 
-
+       ice_aqc_opc_driver_shared_params                = 0x0C90,
 
        /* Standalone Commands/Events */
        ice_aqc_opc_event_lan_overflow                  = 0x1001,
-
-       /* debug commands */
-       ice_aqc_opc_fw_logging                          = 0xFF09,
-       ice_aqc_opc_fw_logging_info                     = 0xFF10,
-       ice_aqc_opc_get_clear_fw_log                    = 0xFF11
 };
 
 #endif /* _ICE_ADMINQ_CMD_H_ */