171d10453SEric Joyner /* SPDX-License-Identifier: BSD-3-Clause */ 2015f8cc5SEric Joyner /* Copyright (c) 2024, Intel Corporation 371d10453SEric Joyner * All rights reserved. 471d10453SEric Joyner * 571d10453SEric Joyner * Redistribution and use in source and binary forms, with or without 671d10453SEric Joyner * modification, are permitted provided that the following conditions are met: 771d10453SEric Joyner * 871d10453SEric Joyner * 1. Redistributions of source code must retain the above copyright notice, 971d10453SEric Joyner * this list of conditions and the following disclaimer. 1071d10453SEric Joyner * 1171d10453SEric Joyner * 2. Redistributions in binary form must reproduce the above copyright 1271d10453SEric Joyner * notice, this list of conditions and the following disclaimer in the 1371d10453SEric Joyner * documentation and/or other materials provided with the distribution. 1471d10453SEric Joyner * 1571d10453SEric Joyner * 3. Neither the name of the Intel Corporation nor the names of its 1671d10453SEric Joyner * contributors may be used to endorse or promote products derived from 1771d10453SEric Joyner * this software without specific prior written permission. 1871d10453SEric Joyner * 1971d10453SEric Joyner * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 2071d10453SEric Joyner * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2171d10453SEric Joyner * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2271d10453SEric Joyner * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 2371d10453SEric Joyner * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2471d10453SEric Joyner * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2571d10453SEric Joyner * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2671d10453SEric Joyner * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2771d10453SEric Joyner * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2871d10453SEric Joyner * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 2971d10453SEric Joyner * POSSIBILITY OF SUCH DAMAGE. 3071d10453SEric Joyner */ 3171d10453SEric Joyner 3271d10453SEric Joyner #ifndef _ICE_ADMINQ_CMD_H_ 3371d10453SEric Joyner #define _ICE_ADMINQ_CMD_H_ 3471d10453SEric Joyner 3571d10453SEric Joyner /* This header file defines the Admin Queue commands, error codes and 3671d10453SEric Joyner * descriptor format. It is shared between Firmware and Software. 3771d10453SEric Joyner */ 3871d10453SEric Joyner 398923de59SPiotr Kubaj #include "ice_osdep.h" 408923de59SPiotr Kubaj #include "ice_defs.h" 418923de59SPiotr Kubaj #include "ice_bitops.h" 428923de59SPiotr Kubaj 4371d10453SEric Joyner #define ICE_MAX_VSI 768 4471d10453SEric Joyner #define ICE_AQC_TOPO_MAX_LEVEL_NUM 0x9 4571d10453SEric Joyner #define ICE_AQ_SET_MAC_FRAME_SIZE_MAX 9728 4671d10453SEric Joyner 478923de59SPiotr Kubaj enum ice_aq_res_access_type { 488923de59SPiotr Kubaj ICE_RES_READ = 1, 498923de59SPiotr Kubaj ICE_RES_WRITE 508923de59SPiotr Kubaj }; 518923de59SPiotr Kubaj 5271d10453SEric Joyner struct ice_aqc_generic { 5371d10453SEric Joyner __le32 param0; 5471d10453SEric Joyner __le32 param1; 5571d10453SEric Joyner __le32 addr_high; 5671d10453SEric Joyner __le32 addr_low; 5771d10453SEric Joyner }; 5871d10453SEric Joyner 5971d10453SEric Joyner /* Get version (direct 0x0001) */ 6071d10453SEric Joyner struct ice_aqc_get_ver { 6171d10453SEric Joyner __le32 rom_ver; 6271d10453SEric Joyner __le32 fw_build; 6371d10453SEric Joyner u8 fw_branch; 6471d10453SEric Joyner u8 fw_major; 6571d10453SEric Joyner u8 fw_minor; 6671d10453SEric Joyner u8 fw_patch; 6771d10453SEric Joyner u8 api_branch; 6871d10453SEric Joyner u8 api_major; 6971d10453SEric Joyner u8 api_minor; 7071d10453SEric Joyner u8 api_patch; 7171d10453SEric Joyner }; 7271d10453SEric Joyner 7371d10453SEric Joyner /* Send driver version (indirect 0x0002) */ 7471d10453SEric Joyner struct ice_aqc_driver_ver { 7571d10453SEric Joyner u8 major_ver; 7671d10453SEric Joyner u8 minor_ver; 7771d10453SEric Joyner u8 build_ver; 7871d10453SEric Joyner u8 subbuild_ver; 7971d10453SEric Joyner u8 reserved[4]; 8071d10453SEric Joyner __le32 addr_high; 8171d10453SEric Joyner __le32 addr_low; 8271d10453SEric Joyner }; 8371d10453SEric Joyner 8471d10453SEric Joyner /* Queue Shutdown (direct 0x0003) */ 8571d10453SEric Joyner struct ice_aqc_q_shutdown { 8671d10453SEric Joyner u8 driver_unloading; 8771d10453SEric Joyner #define ICE_AQC_DRIVER_UNLOADING BIT(0) 8871d10453SEric Joyner u8 reserved[15]; 8971d10453SEric Joyner }; 9071d10453SEric Joyner 9171d10453SEric Joyner /* Get Expanded Error Code (0x0005, direct) */ 9271d10453SEric Joyner struct ice_aqc_get_exp_err { 9371d10453SEric Joyner __le32 reason; 9471d10453SEric Joyner #define ICE_AQC_EXPANDED_ERROR_NOT_PROVIDED 0xFFFFFFFF 9571d10453SEric Joyner __le32 identifier; 9671d10453SEric Joyner u8 rsvd[8]; 9771d10453SEric Joyner }; 9871d10453SEric Joyner 9971d10453SEric Joyner /* Request resource ownership (direct 0x0008) 10071d10453SEric Joyner * Release resource ownership (direct 0x0009) 10171d10453SEric Joyner */ 10271d10453SEric Joyner struct ice_aqc_req_res { 10371d10453SEric Joyner __le16 res_id; 10471d10453SEric Joyner #define ICE_AQC_RES_ID_NVM 1 10571d10453SEric Joyner #define ICE_AQC_RES_ID_SDP 2 10671d10453SEric Joyner #define ICE_AQC_RES_ID_CHNG_LOCK 3 10771d10453SEric Joyner #define ICE_AQC_RES_ID_GLBL_LOCK 4 10871d10453SEric Joyner __le16 access_type; 10971d10453SEric Joyner #define ICE_AQC_RES_ACCESS_READ 1 11071d10453SEric Joyner #define ICE_AQC_RES_ACCESS_WRITE 2 11171d10453SEric Joyner 11271d10453SEric Joyner /* Upon successful completion, FW writes this value and driver is 11371d10453SEric Joyner * expected to release resource before timeout. This value is provided 11471d10453SEric Joyner * in milliseconds. 11571d10453SEric Joyner */ 11671d10453SEric Joyner __le32 timeout; 11771d10453SEric Joyner #define ICE_AQ_RES_NVM_READ_DFLT_TIMEOUT_MS 3000 11871d10453SEric Joyner #define ICE_AQ_RES_NVM_WRITE_DFLT_TIMEOUT_MS 180000 11971d10453SEric Joyner #define ICE_AQ_RES_CHNG_LOCK_DFLT_TIMEOUT_MS 1000 12071d10453SEric Joyner #define ICE_AQ_RES_GLBL_LOCK_DFLT_TIMEOUT_MS 3000 12171d10453SEric Joyner /* For SDP: pin ID of the SDP */ 12271d10453SEric Joyner __le32 res_number; 12371d10453SEric Joyner /* Status is only used for ICE_AQC_RES_ID_GLBL_LOCK */ 12471d10453SEric Joyner __le16 status; 12571d10453SEric Joyner #define ICE_AQ_RES_GLBL_SUCCESS 0 12671d10453SEric Joyner #define ICE_AQ_RES_GLBL_IN_PROG 1 12771d10453SEric Joyner #define ICE_AQ_RES_GLBL_DONE 2 12871d10453SEric Joyner u8 reserved[2]; 12971d10453SEric Joyner }; 13071d10453SEric Joyner 13171d10453SEric Joyner /* Get function capabilities (indirect 0x000A) 13271d10453SEric Joyner * Get device capabilities (indirect 0x000B) 13371d10453SEric Joyner */ 13471d10453SEric Joyner struct ice_aqc_list_caps { 13571d10453SEric Joyner u8 cmd_flags; 13671d10453SEric Joyner u8 pf_index; 13771d10453SEric Joyner u8 reserved[2]; 13871d10453SEric Joyner __le32 count; 13971d10453SEric Joyner __le32 addr_high; 14071d10453SEric Joyner __le32 addr_low; 14171d10453SEric Joyner }; 14271d10453SEric Joyner 14371d10453SEric Joyner /* Device/Function buffer entry, repeated per reported capability */ 14471d10453SEric Joyner struct ice_aqc_list_caps_elem { 14571d10453SEric Joyner __le16 cap; 14671d10453SEric Joyner #define ICE_AQC_CAPS_SWITCHING_MODE 0x0001 14771d10453SEric Joyner #define ICE_AQC_CAPS_MANAGEABILITY_MODE 0x0002 14871d10453SEric Joyner #define ICE_AQC_CAPS_OS2BMC 0x0004 14971d10453SEric Joyner #define ICE_AQC_CAPS_VALID_FUNCTIONS 0x0005 15071d10453SEric Joyner #define ICE_AQC_MAX_VALID_FUNCTIONS 0x8 15171d10453SEric Joyner #define ICE_AQC_CAPS_ALTERNATE_RAM 0x0006 15271d10453SEric Joyner #define ICE_AQC_CAPS_WOL_PROXY 0x0008 15371d10453SEric Joyner #define ICE_AQC_CAPS_SRIOV 0x0012 15471d10453SEric Joyner #define ICE_AQC_CAPS_VF 0x0013 1559e54973fSEric Joyner #define ICE_AQC_CAPS_VMDQ 0x0014 15671d10453SEric Joyner #define ICE_AQC_CAPS_802_1QBG 0x0015 15771d10453SEric Joyner #define ICE_AQC_CAPS_802_1BR 0x0016 15871d10453SEric Joyner #define ICE_AQC_CAPS_VSI 0x0017 15971d10453SEric Joyner #define ICE_AQC_CAPS_DCB 0x0018 16071d10453SEric Joyner #define ICE_AQC_CAPS_RSVD 0x0021 16171d10453SEric Joyner #define ICE_AQC_CAPS_ISCSI 0x0022 16271d10453SEric Joyner #define ICE_AQC_CAPS_RSS 0x0040 16371d10453SEric Joyner #define ICE_AQC_CAPS_RXQS 0x0041 16471d10453SEric Joyner #define ICE_AQC_CAPS_TXQS 0x0042 16571d10453SEric Joyner #define ICE_AQC_CAPS_MSIX 0x0043 16671d10453SEric Joyner #define ICE_AQC_CAPS_MAX_MTU 0x0047 16771d10453SEric Joyner #define ICE_AQC_CAPS_CEM 0x00F2 16871d10453SEric Joyner #define ICE_AQC_CAPS_IWARP 0x0051 16971d10453SEric Joyner #define ICE_AQC_CAPS_LED 0x0061 17071d10453SEric Joyner #define ICE_AQC_CAPS_SDP 0x0062 17171d10453SEric Joyner #define ICE_AQC_CAPS_WR_CSR_PROT 0x0064 1729c30461dSEric Joyner #define ICE_AQC_CAPS_SENSOR_READING 0x0067 17371d10453SEric Joyner #define ICE_AQC_CAPS_LOGI_TO_PHYSI_PORT_MAP 0x0073 17471d10453SEric Joyner #define ICE_AQC_CAPS_SKU 0x0074 17571d10453SEric Joyner #define ICE_AQC_CAPS_PORT_MAP 0x0075 176d08b8680SEric Joyner #define ICE_AQC_CAPS_PCIE_RESET_AVOIDANCE 0x0076 1779cf1841cSEric Joyner #define ICE_AQC_CAPS_POST_UPDATE_RESET_RESTRICT 0x0077 17871d10453SEric Joyner #define ICE_AQC_CAPS_NVM_MGMT 0x0080 17956429daeSEric Joyner #define ICE_AQC_CAPS_EXT_TOPO_DEV_IMG0 0x0081 18056429daeSEric Joyner #define ICE_AQC_CAPS_EXT_TOPO_DEV_IMG1 0x0082 18156429daeSEric Joyner #define ICE_AQC_CAPS_EXT_TOPO_DEV_IMG2 0x0083 18256429daeSEric Joyner #define ICE_AQC_CAPS_EXT_TOPO_DEV_IMG3 0x0084 1838923de59SPiotr Kubaj #define ICE_AQC_CAPS_TX_SCHED_TOPO_COMP_MODE 0x0085 1848923de59SPiotr Kubaj #define ICE_AQC_CAPS_NAC_TOPOLOGY 0x0087 1859c30461dSEric Joyner #define ICE_AQC_CAPS_DYN_FLATTENING 0x008A 1869c30461dSEric Joyner #define ICE_AQC_CAPS_OROM_RECOVERY_UPDATE 0x0090 1878923de59SPiotr Kubaj #define ICE_AQC_CAPS_ROCEV2_LAG 0x0092 1889e54973fSEric Joyner #define ICE_AQC_BIT_ROCEV2_LAG 0x01 1899e54973fSEric Joyner #define ICE_AQC_BIT_SRIOV_LAG 0x02 190*f2635e84SEric Joyner #define ICE_AQC_CAPS_NEXT_CLUSTER_ID 0x0096 19171d10453SEric Joyner u8 major_ver; 19271d10453SEric Joyner u8 minor_ver; 19371d10453SEric Joyner /* Number of resources described by this capability */ 19471d10453SEric Joyner __le32 number; 19571d10453SEric Joyner /* Only meaningful for some types of resources */ 19671d10453SEric Joyner __le32 logical_id; 19771d10453SEric Joyner /* Only meaningful for some types of resources */ 19871d10453SEric Joyner __le32 phys_id; 19971d10453SEric Joyner __le64 rsvd1; 20071d10453SEric Joyner __le64 rsvd2; 20171d10453SEric Joyner }; 20271d10453SEric Joyner 20371d10453SEric Joyner /* Manage MAC address, read command - indirect (0x0107) 20471d10453SEric Joyner * This struct is also used for the response 20571d10453SEric Joyner */ 20671d10453SEric Joyner struct ice_aqc_manage_mac_read { 20771d10453SEric Joyner __le16 flags; /* Zeroed by device driver */ 20871d10453SEric Joyner #define ICE_AQC_MAN_MAC_LAN_ADDR_VALID BIT(4) 20971d10453SEric Joyner #define ICE_AQC_MAN_MAC_SAN_ADDR_VALID BIT(5) 21071d10453SEric Joyner #define ICE_AQC_MAN_MAC_PORT_ADDR_VALID BIT(6) 21171d10453SEric Joyner #define ICE_AQC_MAN_MAC_WOL_ADDR_VALID BIT(7) 21271d10453SEric Joyner #define ICE_AQC_MAN_MAC_MC_MAG_EN BIT(8) 21371d10453SEric Joyner #define ICE_AQC_MAN_MAC_WOL_PRESERVE_ON_PFR BIT(9) 21471d10453SEric Joyner #define ICE_AQC_MAN_MAC_READ_S 4 21571d10453SEric Joyner #define ICE_AQC_MAN_MAC_READ_M (0xF << ICE_AQC_MAN_MAC_READ_S) 21671d10453SEric Joyner u8 rsvd[2]; 21771d10453SEric Joyner u8 num_addr; /* Used in response */ 21871d10453SEric Joyner u8 rsvd1[3]; 21971d10453SEric Joyner __le32 addr_high; 22071d10453SEric Joyner __le32 addr_low; 22171d10453SEric Joyner }; 22271d10453SEric Joyner 22371d10453SEric Joyner /* Response buffer format for manage MAC read command */ 22471d10453SEric Joyner struct ice_aqc_manage_mac_read_resp { 22571d10453SEric Joyner u8 lport_num; 22671d10453SEric Joyner u8 addr_type; 22771d10453SEric Joyner #define ICE_AQC_MAN_MAC_ADDR_TYPE_LAN 0 22871d10453SEric Joyner #define ICE_AQC_MAN_MAC_ADDR_TYPE_WOL 1 22971d10453SEric Joyner u8 mac_addr[ETH_ALEN]; 23071d10453SEric Joyner }; 23171d10453SEric Joyner 23271d10453SEric Joyner /* Manage MAC address, write command - direct (0x0108) */ 23371d10453SEric Joyner struct ice_aqc_manage_mac_write { 23471d10453SEric Joyner u8 rsvd; 23571d10453SEric Joyner u8 flags; 23671d10453SEric Joyner #define ICE_AQC_MAN_MAC_WR_MC_MAG_EN BIT(0) 23771d10453SEric Joyner #define ICE_AQC_MAN_MAC_WR_WOL_LAA_PFR_KEEP BIT(1) 23871d10453SEric Joyner #define ICE_AQC_MAN_MAC_WR_S 6 23971d10453SEric Joyner #define ICE_AQC_MAN_MAC_WR_M MAKEMASK(3, ICE_AQC_MAN_MAC_WR_S) 24071d10453SEric Joyner #define ICE_AQC_MAN_MAC_UPDATE_LAA 0 24171d10453SEric Joyner #define ICE_AQC_MAN_MAC_UPDATE_LAA_WOL BIT(ICE_AQC_MAN_MAC_WR_S) 24271d10453SEric Joyner /* byte stream in network order */ 24371d10453SEric Joyner u8 mac_addr[ETH_ALEN]; 24471d10453SEric Joyner __le32 addr_high; 24571d10453SEric Joyner __le32 addr_low; 24671d10453SEric Joyner }; 24771d10453SEric Joyner 24871d10453SEric Joyner /* Clear PXE Command and response (direct 0x0110) */ 24971d10453SEric Joyner struct ice_aqc_clear_pxe { 25071d10453SEric Joyner u8 rx_cnt; 25171d10453SEric Joyner #define ICE_AQC_CLEAR_PXE_RX_CNT 0x2 25271d10453SEric Joyner u8 reserved[15]; 25371d10453SEric Joyner }; 25471d10453SEric Joyner 25571d10453SEric Joyner /* Configure No-Drop Policy Command (direct 0x0112) */ 25671d10453SEric Joyner struct ice_aqc_config_no_drop_policy { 25771d10453SEric Joyner u8 opts; 25871d10453SEric Joyner #define ICE_AQC_FORCE_NO_DROP BIT(0) 25971d10453SEric Joyner u8 rsvd[15]; 26071d10453SEric Joyner }; 26171d10453SEric Joyner 26271d10453SEric Joyner /* Get switch configuration (0x0200) */ 26371d10453SEric Joyner struct ice_aqc_get_sw_cfg { 26471d10453SEric Joyner /* Reserved for command and copy of request flags for response */ 26571d10453SEric Joyner __le16 flags; 26671d10453SEric Joyner /* First desc in case of command and next_elem in case of response 26771d10453SEric Joyner * In case of response, if it is not zero, means all the configuration 26871d10453SEric Joyner * was not returned and new command shall be sent with this value in 26971d10453SEric Joyner * the 'first desc' field 27071d10453SEric Joyner */ 27171d10453SEric Joyner __le16 element; 27271d10453SEric Joyner /* Reserved for command, only used for response */ 27371d10453SEric Joyner __le16 num_elems; 27471d10453SEric Joyner __le16 rsvd; 27571d10453SEric Joyner __le32 addr_high; 27671d10453SEric Joyner __le32 addr_low; 27771d10453SEric Joyner }; 27871d10453SEric Joyner 27971d10453SEric Joyner /* Each entry in the response buffer is of the following type: */ 28071d10453SEric Joyner struct ice_aqc_get_sw_cfg_resp_elem { 28171d10453SEric Joyner /* VSI/Port Number */ 28271d10453SEric Joyner __le16 vsi_port_num; 28371d10453SEric Joyner #define ICE_AQC_GET_SW_CONF_RESP_VSI_PORT_NUM_S 0 28471d10453SEric Joyner #define ICE_AQC_GET_SW_CONF_RESP_VSI_PORT_NUM_M \ 28571d10453SEric Joyner (0x3FF << ICE_AQC_GET_SW_CONF_RESP_VSI_PORT_NUM_S) 28671d10453SEric Joyner #define ICE_AQC_GET_SW_CONF_RESP_TYPE_S 14 28771d10453SEric Joyner #define ICE_AQC_GET_SW_CONF_RESP_TYPE_M (0x3 << ICE_AQC_GET_SW_CONF_RESP_TYPE_S) 28871d10453SEric Joyner #define ICE_AQC_GET_SW_CONF_RESP_PHYS_PORT 0 28971d10453SEric Joyner #define ICE_AQC_GET_SW_CONF_RESP_VIRT_PORT 1 29071d10453SEric Joyner #define ICE_AQC_GET_SW_CONF_RESP_VSI 2 29171d10453SEric Joyner 29271d10453SEric Joyner /* SWID VSI/Port belongs to */ 29371d10453SEric Joyner __le16 swid; 29471d10453SEric Joyner 29571d10453SEric Joyner /* Bit 14..0 : PF/VF number VSI belongs to 29671d10453SEric Joyner * Bit 15 : VF indication bit 29771d10453SEric Joyner */ 29871d10453SEric Joyner __le16 pf_vf_num; 29971d10453SEric Joyner #define ICE_AQC_GET_SW_CONF_RESP_FUNC_NUM_S 0 30071d10453SEric Joyner #define ICE_AQC_GET_SW_CONF_RESP_FUNC_NUM_M \ 30171d10453SEric Joyner (0x7FFF << ICE_AQC_GET_SW_CONF_RESP_FUNC_NUM_S) 30271d10453SEric Joyner #define ICE_AQC_GET_SW_CONF_RESP_IS_VF BIT(15) 30371d10453SEric Joyner }; 30471d10453SEric Joyner 30571d10453SEric Joyner /* Set Port parameters, (direct, 0x0203) */ 30671d10453SEric Joyner struct ice_aqc_set_port_params { 30771d10453SEric Joyner __le16 cmd_flags; 30871d10453SEric Joyner #define ICE_AQC_SET_P_PARAMS_SAVE_BAD_PACKETS BIT(0) 30971d10453SEric Joyner #define ICE_AQC_SET_P_PARAMS_PAD_SHORT_PACKETS BIT(1) 31071d10453SEric Joyner #define ICE_AQC_SET_P_PARAMS_DOUBLE_VLAN_ENA BIT(2) 31171d10453SEric Joyner __le16 bad_frame_vsi; 31271d10453SEric Joyner #define ICE_AQC_SET_P_PARAMS_VSI_S 0 31371d10453SEric Joyner #define ICE_AQC_SET_P_PARAMS_VSI_M (0x3FF << ICE_AQC_SET_P_PARAMS_VSI_S) 31471d10453SEric Joyner #define ICE_AQC_SET_P_PARAMS_VSI_VALID BIT(15) 31571d10453SEric Joyner __le16 swid; 31671d10453SEric Joyner #define ICE_AQC_SET_P_PARAMS_SWID_S 0 31771d10453SEric Joyner #define ICE_AQC_SET_P_PARAMS_SWID_M (0xFF << ICE_AQC_SET_P_PARAMS_SWID_S) 31871d10453SEric Joyner #define ICE_AQC_SET_P_PARAMS_LOGI_PORT_ID_S 8 31971d10453SEric Joyner #define ICE_AQC_SET_P_PARAMS_LOGI_PORT_ID_M \ 32071d10453SEric Joyner (0x3F << ICE_AQC_SET_P_PARAMS_LOGI_PORT_ID_S) 32171d10453SEric Joyner #define ICE_AQC_SET_P_PARAMS_IS_LOGI_PORT BIT(14) 32271d10453SEric Joyner #define ICE_AQC_SET_P_PARAMS_SWID_VALID BIT(15) 323*f2635e84SEric Joyner u8 lb_mode; 324*f2635e84SEric Joyner #define ICE_AQC_SET_P_PARAMS_LOOPBACK_MODE_VALID BIT(2) 325*f2635e84SEric Joyner #define ICE_AQC_SET_P_PARAMS_LOOPBACK_MODE_NORMAL 0x00 326*f2635e84SEric Joyner #define ICE_AQC_SET_P_PARAMS_LOOPBACK_MODE_NO 0x01 327*f2635e84SEric Joyner #define ICE_AQC_SET_P_PARAMS_LOOPBACK_MODE_HIGH 0x02 328*f2635e84SEric Joyner u8 reserved[9]; 32971d10453SEric Joyner }; 33071d10453SEric Joyner 33171d10453SEric Joyner /* These resource type defines are used for all switch resource 33271d10453SEric Joyner * commands where a resource type is required, such as: 33371d10453SEric Joyner * Get Resource Allocation command (indirect 0x0204) 33471d10453SEric Joyner * Allocate Resources command (indirect 0x0208) 33571d10453SEric Joyner * Free Resources command (indirect 0x0209) 33671d10453SEric Joyner * Get Allocated Resource Descriptors Command (indirect 0x020A) 33771d10453SEric Joyner */ 33871d10453SEric Joyner #define ICE_AQC_RES_TYPE_VEB_COUNTER 0x00 33971d10453SEric Joyner #define ICE_AQC_RES_TYPE_VLAN_COUNTER 0x01 34071d10453SEric Joyner #define ICE_AQC_RES_TYPE_MIRROR_RULE 0x02 34171d10453SEric Joyner #define ICE_AQC_RES_TYPE_VSI_LIST_REP 0x03 34271d10453SEric Joyner #define ICE_AQC_RES_TYPE_VSI_LIST_PRUNE 0x04 34371d10453SEric Joyner #define ICE_AQC_RES_TYPE_RECIPE 0x05 34471d10453SEric Joyner #define ICE_AQC_RES_TYPE_PROFILE 0x06 34571d10453SEric Joyner #define ICE_AQC_RES_TYPE_SWID 0x07 34671d10453SEric Joyner #define ICE_AQC_RES_TYPE_VSI 0x08 34771d10453SEric Joyner #define ICE_AQC_RES_TYPE_FLU 0x09 34871d10453SEric Joyner #define ICE_AQC_RES_TYPE_WIDE_TABLE_1 0x0A 34971d10453SEric Joyner #define ICE_AQC_RES_TYPE_WIDE_TABLE_2 0x0B 35071d10453SEric Joyner #define ICE_AQC_RES_TYPE_WIDE_TABLE_4 0x0C 35171d10453SEric Joyner #define ICE_AQC_RES_TYPE_GLOBAL_RSS_HASH 0x20 35271d10453SEric Joyner #define ICE_AQC_RES_TYPE_FDIR_COUNTER_BLOCK 0x21 35371d10453SEric Joyner #define ICE_AQC_RES_TYPE_FDIR_GUARANTEED_ENTRIES 0x22 35471d10453SEric Joyner #define ICE_AQC_RES_TYPE_FDIR_SHARED_ENTRIES 0x23 35571d10453SEric Joyner #define ICE_AQC_RES_TYPE_FLEX_DESC_PROG 0x30 35671d10453SEric Joyner #define ICE_AQC_RES_TYPE_SWITCH_PROF_BLDR_PROFID 0x48 35771d10453SEric Joyner #define ICE_AQC_RES_TYPE_SWITCH_PROF_BLDR_TCAM 0x49 35871d10453SEric Joyner #define ICE_AQC_RES_TYPE_ACL_PROF_BLDR_PROFID 0x50 35971d10453SEric Joyner #define ICE_AQC_RES_TYPE_ACL_PROF_BLDR_TCAM 0x51 36071d10453SEric Joyner #define ICE_AQC_RES_TYPE_HASH_PROF_BLDR_PROFID 0x60 36171d10453SEric Joyner #define ICE_AQC_RES_TYPE_HASH_PROF_BLDR_TCAM 0x61 36271d10453SEric Joyner /* Resource types 0x62-67 are reserved for Hash profile builder */ 36371d10453SEric Joyner #define ICE_AQC_RES_TYPE_QHASH_PROF_BLDR_PROFID 0x68 36471d10453SEric Joyner #define ICE_AQC_RES_TYPE_QHASH_PROF_BLDR_TCAM 0x69 36571d10453SEric Joyner 36671d10453SEric Joyner #define ICE_AQC_RES_TYPE_FLAG_SHARED BIT(7) 36771d10453SEric Joyner #define ICE_AQC_RES_TYPE_FLAG_SCAN_BOTTOM BIT(12) 36871d10453SEric Joyner #define ICE_AQC_RES_TYPE_FLAG_IGNORE_INDEX BIT(13) 3699e54973fSEric Joyner #define ICE_AQC_RES_TYPE_FLAG_SUBSCRIBE_SHARED BIT(14) 3709e54973fSEric Joyner #define ICE_AQC_RES_TYPE_FLAG_SUBSCRIBE_CTL BIT(15) 37171d10453SEric Joyner 37271d10453SEric Joyner #define ICE_AQC_RES_TYPE_FLAG_DEDICATED 0x00 37371d10453SEric Joyner 37471d10453SEric Joyner #define ICE_AQC_RES_TYPE_S 0 37571d10453SEric Joyner #define ICE_AQC_RES_TYPE_M (0x07F << ICE_AQC_RES_TYPE_S) 37671d10453SEric Joyner 37771d10453SEric Joyner /* Get Resource Allocation command (indirect 0x0204) */ 37871d10453SEric Joyner struct ice_aqc_get_res_alloc { 37971d10453SEric Joyner __le16 resp_elem_num; /* Used in response, reserved in command */ 38071d10453SEric Joyner u8 reserved[6]; 38171d10453SEric Joyner __le32 addr_high; 38271d10453SEric Joyner __le32 addr_low; 38371d10453SEric Joyner }; 38471d10453SEric Joyner 38571d10453SEric Joyner /* Get Resource Allocation Response Buffer per response */ 38671d10453SEric Joyner struct ice_aqc_get_res_resp_elem { 38771d10453SEric Joyner __le16 res_type; /* Types defined above cmd 0x0204 */ 38871d10453SEric Joyner __le16 total_capacity; /* Resources available to all PF's */ 38971d10453SEric Joyner __le16 total_function; /* Resources allocated for a PF */ 39071d10453SEric Joyner __le16 total_shared; /* Resources allocated as shared */ 39171d10453SEric Joyner __le16 total_free; /* Resources un-allocated/not reserved by any PF */ 39271d10453SEric Joyner }; 39371d10453SEric Joyner 39471d10453SEric Joyner /* Allocate Resources command (indirect 0x0208) 39571d10453SEric Joyner * Free Resources command (indirect 0x0209) 39671d10453SEric Joyner */ 39771d10453SEric Joyner struct ice_aqc_alloc_free_res_cmd { 39871d10453SEric Joyner __le16 num_entries; /* Number of Resource entries */ 39971d10453SEric Joyner u8 reserved[6]; 40071d10453SEric Joyner __le32 addr_high; 40171d10453SEric Joyner __le32 addr_low; 40271d10453SEric Joyner }; 40371d10453SEric Joyner 40471d10453SEric Joyner /* Resource descriptor */ 40571d10453SEric Joyner struct ice_aqc_res_elem { 40671d10453SEric Joyner union { 40771d10453SEric Joyner __le16 sw_resp; 40871d10453SEric Joyner __le16 flu_resp; 40971d10453SEric Joyner } e; 41071d10453SEric Joyner }; 41171d10453SEric Joyner 41271d10453SEric Joyner /* Buffer for Allocate/Free Resources commands */ 41371d10453SEric Joyner struct ice_aqc_alloc_free_res_elem { 41471d10453SEric Joyner __le16 res_type; /* Types defined above cmd 0x0204 */ 41571d10453SEric Joyner #define ICE_AQC_RES_TYPE_VSI_PRUNE_LIST_S 8 41671d10453SEric Joyner #define ICE_AQC_RES_TYPE_VSI_PRUNE_LIST_M \ 41771d10453SEric Joyner (0xF << ICE_AQC_RES_TYPE_VSI_PRUNE_LIST_S) 41871d10453SEric Joyner __le16 num_elems; 4197d7af7f8SEric Joyner struct ice_aqc_res_elem elem[STRUCT_HACK_VAR_LEN]; 42071d10453SEric Joyner }; 42171d10453SEric Joyner 42271d10453SEric Joyner /* Get Allocated Resource Descriptors Command (indirect 0x020A) */ 42371d10453SEric Joyner struct ice_aqc_get_allocd_res_desc { 42471d10453SEric Joyner union { 42571d10453SEric Joyner struct { 42671d10453SEric Joyner __le16 res; /* Types defined above cmd 0x0204 */ 42771d10453SEric Joyner __le16 first_desc; 42871d10453SEric Joyner __le32 reserved; 42971d10453SEric Joyner } cmd; 43071d10453SEric Joyner struct { 43171d10453SEric Joyner __le16 res; 43271d10453SEric Joyner __le16 next_desc; 43371d10453SEric Joyner __le16 num_desc; 43471d10453SEric Joyner __le16 reserved; 43571d10453SEric Joyner } resp; 43671d10453SEric Joyner } ops; 43771d10453SEric Joyner __le32 addr_high; 43871d10453SEric Joyner __le32 addr_low; 43971d10453SEric Joyner }; 44071d10453SEric Joyner 4419cf1841cSEric Joyner /* Request buffer for Set VLAN Mode AQ command (indirect 0x020C) */ 4429cf1841cSEric Joyner struct ice_aqc_set_vlan_mode { 4439cf1841cSEric Joyner u8 reserved; 4449cf1841cSEric Joyner u8 l2tag_prio_tagging; 4459cf1841cSEric Joyner #define ICE_AQ_VLAN_PRIO_TAG_S 0 4469cf1841cSEric Joyner #define ICE_AQ_VLAN_PRIO_TAG_M (0x7 << ICE_AQ_VLAN_PRIO_TAG_S) 4479cf1841cSEric Joyner #define ICE_AQ_VLAN_PRIO_TAG_NOT_SUPPORTED 0x0 4489cf1841cSEric Joyner #define ICE_AQ_VLAN_PRIO_TAG_STAG 0x1 4499cf1841cSEric Joyner #define ICE_AQ_VLAN_PRIO_TAG_OUTER_CTAG 0x2 4509cf1841cSEric Joyner #define ICE_AQ_VLAN_PRIO_TAG_OUTER_VLAN 0x3 4519cf1841cSEric Joyner #define ICE_AQ_VLAN_PRIO_TAG_INNER_CTAG 0x4 4529cf1841cSEric Joyner #define ICE_AQ_VLAN_PRIO_TAG_MAX 0x4 4539cf1841cSEric Joyner #define ICE_AQ_VLAN_PRIO_TAG_ERROR 0x7 4549cf1841cSEric Joyner u8 l2tag_reserved[64]; 4559cf1841cSEric Joyner u8 rdma_packet; 4569cf1841cSEric Joyner #define ICE_AQ_VLAN_RDMA_TAG_S 0 4579cf1841cSEric Joyner #define ICE_AQ_VLAN_RDMA_TAG_M (0x3F << ICE_AQ_VLAN_RDMA_TAG_S) 4589cf1841cSEric Joyner #define ICE_AQ_SVM_VLAN_RDMA_PKT_FLAG_SETTING 0x10 4599cf1841cSEric Joyner #define ICE_AQ_DVM_VLAN_RDMA_PKT_FLAG_SETTING 0x1A 4609cf1841cSEric Joyner u8 rdma_reserved[2]; 4619cf1841cSEric Joyner u8 mng_vlan_prot_id; 4629cf1841cSEric Joyner #define ICE_AQ_VLAN_MNG_PROTOCOL_ID_OUTER 0x10 4639cf1841cSEric Joyner #define ICE_AQ_VLAN_MNG_PROTOCOL_ID_INNER 0x11 4649cf1841cSEric Joyner u8 prot_id_reserved[30]; 4659cf1841cSEric Joyner }; 4669cf1841cSEric Joyner 4679cf1841cSEric Joyner /* Response buffer for Get VLAN Mode AQ command (indirect 0x020D) */ 4689cf1841cSEric Joyner struct ice_aqc_get_vlan_mode { 4699cf1841cSEric Joyner u8 vlan_mode; 4709cf1841cSEric Joyner #define ICE_AQ_VLAN_MODE_DVM_ENA BIT(0) 4719cf1841cSEric Joyner u8 l2tag_prio_tagging; 4729cf1841cSEric Joyner u8 reserved[98]; 4739cf1841cSEric Joyner }; 4749cf1841cSEric Joyner 47571d10453SEric Joyner /* Add VSI (indirect 0x0210) 47671d10453SEric Joyner * Update VSI (indirect 0x0211) 47771d10453SEric Joyner * Get VSI (indirect 0x0212) 47871d10453SEric Joyner * Free VSI (indirect 0x0213) 47971d10453SEric Joyner */ 48071d10453SEric Joyner struct ice_aqc_add_get_update_free_vsi { 48171d10453SEric Joyner __le16 vsi_num; 48271d10453SEric Joyner #define ICE_AQ_VSI_NUM_S 0 48371d10453SEric Joyner #define ICE_AQ_VSI_NUM_M (0x03FF << ICE_AQ_VSI_NUM_S) 48471d10453SEric Joyner #define ICE_AQ_VSI_IS_VALID BIT(15) 48571d10453SEric Joyner __le16 cmd_flags; 48671d10453SEric Joyner #define ICE_AQ_VSI_KEEP_ALLOC 0x1 48771d10453SEric Joyner u8 vf_id; 48871d10453SEric Joyner u8 reserved; 48971d10453SEric Joyner __le16 vsi_flags; 49071d10453SEric Joyner #define ICE_AQ_VSI_TYPE_S 0 49171d10453SEric Joyner #define ICE_AQ_VSI_TYPE_M (0x3 << ICE_AQ_VSI_TYPE_S) 49271d10453SEric Joyner #define ICE_AQ_VSI_TYPE_VF 0x0 49371d10453SEric Joyner #define ICE_AQ_VSI_TYPE_VMDQ2 0x1 49471d10453SEric Joyner #define ICE_AQ_VSI_TYPE_PF 0x2 49571d10453SEric Joyner #define ICE_AQ_VSI_TYPE_EMP_MNG 0x3 49671d10453SEric Joyner __le32 addr_high; 49771d10453SEric Joyner __le32 addr_low; 49871d10453SEric Joyner }; 49971d10453SEric Joyner 50071d10453SEric Joyner /* Response descriptor for: 50171d10453SEric Joyner * Add VSI (indirect 0x0210) 50271d10453SEric Joyner * Update VSI (indirect 0x0211) 50371d10453SEric Joyner * Free VSI (indirect 0x0213) 50471d10453SEric Joyner */ 50571d10453SEric Joyner struct ice_aqc_add_update_free_vsi_resp { 50671d10453SEric Joyner __le16 vsi_num; 50771d10453SEric Joyner __le16 ext_status; 50871d10453SEric Joyner __le16 vsi_used; 50971d10453SEric Joyner __le16 vsi_free; 51071d10453SEric Joyner __le32 addr_high; 51171d10453SEric Joyner __le32 addr_low; 51271d10453SEric Joyner }; 51371d10453SEric Joyner 51471d10453SEric Joyner struct ice_aqc_get_vsi_resp { 51571d10453SEric Joyner __le16 vsi_num; 51671d10453SEric Joyner u8 vf_id; 51771d10453SEric Joyner /* The vsi_flags field uses the ICE_AQ_VSI_TYPE_* defines for values. 51871d10453SEric Joyner * These are found above in struct ice_aqc_add_get_update_free_vsi. 51971d10453SEric Joyner */ 52071d10453SEric Joyner u8 vsi_flags; 52171d10453SEric Joyner __le16 vsi_used; 52271d10453SEric Joyner __le16 vsi_free; 52371d10453SEric Joyner __le32 addr_high; 52471d10453SEric Joyner __le32 addr_low; 52571d10453SEric Joyner }; 52671d10453SEric Joyner 52771d10453SEric Joyner struct ice_aqc_vsi_props { 52871d10453SEric Joyner __le16 valid_sections; 52971d10453SEric Joyner #define ICE_AQ_VSI_PROP_SW_VALID BIT(0) 53071d10453SEric Joyner #define ICE_AQ_VSI_PROP_SECURITY_VALID BIT(1) 53171d10453SEric Joyner #define ICE_AQ_VSI_PROP_VLAN_VALID BIT(2) 53271d10453SEric Joyner #define ICE_AQ_VSI_PROP_OUTER_TAG_VALID BIT(3) 53371d10453SEric Joyner #define ICE_AQ_VSI_PROP_INGRESS_UP_VALID BIT(4) 53471d10453SEric Joyner #define ICE_AQ_VSI_PROP_EGRESS_UP_VALID BIT(5) 53571d10453SEric Joyner #define ICE_AQ_VSI_PROP_RXQ_MAP_VALID BIT(6) 53671d10453SEric Joyner #define ICE_AQ_VSI_PROP_Q_OPT_VALID BIT(7) 53771d10453SEric Joyner #define ICE_AQ_VSI_PROP_OUTER_UP_VALID BIT(8) 53871d10453SEric Joyner #define ICE_AQ_VSI_PROP_FLOW_DIR_VALID BIT(11) 53971d10453SEric Joyner #define ICE_AQ_VSI_PROP_PASID_VALID BIT(12) 54071d10453SEric Joyner /* switch section */ 54171d10453SEric Joyner u8 sw_id; 54271d10453SEric Joyner u8 sw_flags; 54371d10453SEric Joyner #define ICE_AQ_VSI_SW_FLAG_ALLOW_LB BIT(5) 54471d10453SEric Joyner #define ICE_AQ_VSI_SW_FLAG_LOCAL_LB BIT(6) 54571d10453SEric Joyner #define ICE_AQ_VSI_SW_FLAG_SRC_PRUNE BIT(7) 54671d10453SEric Joyner u8 sw_flags2; 54771d10453SEric Joyner #define ICE_AQ_VSI_SW_FLAG_RX_PRUNE_EN_S 0 5489cf1841cSEric Joyner #define ICE_AQ_VSI_SW_FLAG_RX_PRUNE_EN_M (0xF << ICE_AQ_VSI_SW_FLAG_RX_PRUNE_EN_S) 54971d10453SEric Joyner #define ICE_AQ_VSI_SW_FLAG_RX_VLAN_PRUNE_ENA BIT(0) 5508923de59SPiotr Kubaj #define ICE_AQ_VSI_SW_FLAG_RX_PASS_PRUNE_ENA BIT(3) 55171d10453SEric Joyner #define ICE_AQ_VSI_SW_FLAG_LAN_ENA BIT(4) 55271d10453SEric Joyner u8 veb_stat_id; 55371d10453SEric Joyner #define ICE_AQ_VSI_SW_VEB_STAT_ID_S 0 55471d10453SEric Joyner #define ICE_AQ_VSI_SW_VEB_STAT_ID_M (0x1F << ICE_AQ_VSI_SW_VEB_STAT_ID_S) 55571d10453SEric Joyner #define ICE_AQ_VSI_SW_VEB_STAT_ID_VALID BIT(5) 55671d10453SEric Joyner /* security section */ 55771d10453SEric Joyner u8 sec_flags; 55871d10453SEric Joyner #define ICE_AQ_VSI_SEC_FLAG_ALLOW_DEST_OVRD BIT(0) 55971d10453SEric Joyner #define ICE_AQ_VSI_SEC_FLAG_ENA_MAC_ANTI_SPOOF BIT(2) 56071d10453SEric Joyner #define ICE_AQ_VSI_SEC_TX_PRUNE_ENA_S 4 56171d10453SEric Joyner #define ICE_AQ_VSI_SEC_TX_PRUNE_ENA_M (0xF << ICE_AQ_VSI_SEC_TX_PRUNE_ENA_S) 56271d10453SEric Joyner #define ICE_AQ_VSI_SEC_TX_VLAN_PRUNE_ENA BIT(0) 56371d10453SEric Joyner u8 sec_reserved; 56471d10453SEric Joyner /* VLAN section */ 5659cf1841cSEric Joyner __le16 port_based_inner_vlan; /* VLANS include priority bits */ 5669cf1841cSEric Joyner u8 inner_vlan_reserved[2]; 5679cf1841cSEric Joyner u8 inner_vlan_flags; 5689cf1841cSEric Joyner #define ICE_AQ_VSI_INNER_VLAN_TX_MODE_S 0 5699cf1841cSEric Joyner #define ICE_AQ_VSI_INNER_VLAN_TX_MODE_M (0x3 << ICE_AQ_VSI_INNER_VLAN_TX_MODE_S) 5709cf1841cSEric Joyner #define ICE_AQ_VSI_INNER_VLAN_TX_MODE_ACCEPTUNTAGGED 0x1 5719cf1841cSEric Joyner #define ICE_AQ_VSI_INNER_VLAN_TX_MODE_ACCEPTTAGGED 0x2 5729cf1841cSEric Joyner #define ICE_AQ_VSI_INNER_VLAN_TX_MODE_ALL 0x3 5739cf1841cSEric Joyner #define ICE_AQ_VSI_INNER_VLAN_INSERT_PVID BIT(2) 5749cf1841cSEric Joyner #define ICE_AQ_VSI_INNER_VLAN_EMODE_S 3 5759cf1841cSEric Joyner #define ICE_AQ_VSI_INNER_VLAN_EMODE_M (0x3 << ICE_AQ_VSI_INNER_VLAN_EMODE_S) 5769cf1841cSEric Joyner #define ICE_AQ_VSI_INNER_VLAN_EMODE_STR_BOTH (0x0 << ICE_AQ_VSI_INNER_VLAN_EMODE_S) 5779cf1841cSEric Joyner #define ICE_AQ_VSI_INNER_VLAN_EMODE_STR_UP (0x1 << ICE_AQ_VSI_INNER_VLAN_EMODE_S) 5789cf1841cSEric Joyner #define ICE_AQ_VSI_INNER_VLAN_EMODE_STR (0x2 << ICE_AQ_VSI_INNER_VLAN_EMODE_S) 5799cf1841cSEric Joyner #define ICE_AQ_VSI_INNER_VLAN_EMODE_NOTHING (0x3 << ICE_AQ_VSI_INNER_VLAN_EMODE_S) 5809cf1841cSEric Joyner #define ICE_AQ_VSI_INNER_VLAN_BLOCK_TX_DESC BIT(5) 5819cf1841cSEric Joyner u8 inner_vlan_reserved2[3]; 58271d10453SEric Joyner /* ingress egress up sections */ 58371d10453SEric Joyner __le32 ingress_table; /* bitmap, 3 bits per up */ 58471d10453SEric Joyner #define ICE_AQ_VSI_UP_TABLE_UP0_S 0 58571d10453SEric Joyner #define ICE_AQ_VSI_UP_TABLE_UP0_M (0x7 << ICE_AQ_VSI_UP_TABLE_UP0_S) 58671d10453SEric Joyner #define ICE_AQ_VSI_UP_TABLE_UP1_S 3 58771d10453SEric Joyner #define ICE_AQ_VSI_UP_TABLE_UP1_M (0x7 << ICE_AQ_VSI_UP_TABLE_UP1_S) 58871d10453SEric Joyner #define ICE_AQ_VSI_UP_TABLE_UP2_S 6 58971d10453SEric Joyner #define ICE_AQ_VSI_UP_TABLE_UP2_M (0x7 << ICE_AQ_VSI_UP_TABLE_UP2_S) 59071d10453SEric Joyner #define ICE_AQ_VSI_UP_TABLE_UP3_S 9 59171d10453SEric Joyner #define ICE_AQ_VSI_UP_TABLE_UP3_M (0x7 << ICE_AQ_VSI_UP_TABLE_UP3_S) 59271d10453SEric Joyner #define ICE_AQ_VSI_UP_TABLE_UP4_S 12 59371d10453SEric Joyner #define ICE_AQ_VSI_UP_TABLE_UP4_M (0x7 << ICE_AQ_VSI_UP_TABLE_UP4_S) 59471d10453SEric Joyner #define ICE_AQ_VSI_UP_TABLE_UP5_S 15 59571d10453SEric Joyner #define ICE_AQ_VSI_UP_TABLE_UP5_M (0x7 << ICE_AQ_VSI_UP_TABLE_UP5_S) 59671d10453SEric Joyner #define ICE_AQ_VSI_UP_TABLE_UP6_S 18 59771d10453SEric Joyner #define ICE_AQ_VSI_UP_TABLE_UP6_M (0x7 << ICE_AQ_VSI_UP_TABLE_UP6_S) 59871d10453SEric Joyner #define ICE_AQ_VSI_UP_TABLE_UP7_S 21 59971d10453SEric Joyner #define ICE_AQ_VSI_UP_TABLE_UP7_M (0x7 << ICE_AQ_VSI_UP_TABLE_UP7_S) 60071d10453SEric Joyner __le32 egress_table; /* same defines as for ingress table */ 60171d10453SEric Joyner /* outer tags section */ 6029cf1841cSEric Joyner __le16 port_based_outer_vlan; 6039cf1841cSEric Joyner u8 outer_vlan_flags; 6049cf1841cSEric Joyner #define ICE_AQ_VSI_OUTER_VLAN_EMODE_S 0 6059cf1841cSEric Joyner #define ICE_AQ_VSI_OUTER_VLAN_EMODE_M (0x3 << ICE_AQ_VSI_OUTER_VLAN_EMODE_S) 6069cf1841cSEric Joyner #define ICE_AQ_VSI_OUTER_VLAN_EMODE_SHOW_BOTH 0x0 6079cf1841cSEric Joyner #define ICE_AQ_VSI_OUTER_VLAN_EMODE_SHOW_UP 0x1 6089cf1841cSEric Joyner #define ICE_AQ_VSI_OUTER_VLAN_EMODE_SHOW 0x2 6099cf1841cSEric Joyner #define ICE_AQ_VSI_OUTER_VLAN_EMODE_NOTHING 0x3 61071d10453SEric Joyner #define ICE_AQ_VSI_OUTER_TAG_TYPE_S 2 61171d10453SEric Joyner #define ICE_AQ_VSI_OUTER_TAG_TYPE_M (0x3 << ICE_AQ_VSI_OUTER_TAG_TYPE_S) 61271d10453SEric Joyner #define ICE_AQ_VSI_OUTER_TAG_NONE 0x0 61371d10453SEric Joyner #define ICE_AQ_VSI_OUTER_TAG_STAG 0x1 61471d10453SEric Joyner #define ICE_AQ_VSI_OUTER_TAG_VLAN_8100 0x2 61571d10453SEric Joyner #define ICE_AQ_VSI_OUTER_TAG_VLAN_9100 0x3 6169cf1841cSEric Joyner #define ICE_AQ_VSI_OUTER_VLAN_PORT_BASED_INSERT BIT(4) 6179cf1841cSEric Joyner #define ICE_AQ_VSI_OUTER_VLAN_TX_MODE_S 5 6189cf1841cSEric Joyner #define ICE_AQ_VSI_OUTER_VLAN_TX_MODE_M (0x3 << ICE_AQ_VSI_OUTER_VLAN_TX_MODE_S) 6199cf1841cSEric Joyner #define ICE_AQ_VSI_OUTER_VLAN_TX_MODE_ACCEPTUNTAGGED 0x1 6209cf1841cSEric Joyner #define ICE_AQ_VSI_OUTER_VLAN_TX_MODE_ACCEPTTAGGED 0x2 6219cf1841cSEric Joyner #define ICE_AQ_VSI_OUTER_VLAN_TX_MODE_ALL 0x3 6229cf1841cSEric Joyner #define ICE_AQ_VSI_OUTER_VLAN_BLOCK_TX_DESC BIT(7) 6239cf1841cSEric Joyner u8 outer_vlan_reserved; 62471d10453SEric Joyner /* queue mapping section */ 62571d10453SEric Joyner __le16 mapping_flags; 62671d10453SEric Joyner #define ICE_AQ_VSI_Q_MAP_CONTIG 0x0 62771d10453SEric Joyner #define ICE_AQ_VSI_Q_MAP_NONCONTIG BIT(0) 62871d10453SEric Joyner __le16 q_mapping[16]; 62971d10453SEric Joyner #define ICE_AQ_VSI_Q_S 0 63071d10453SEric Joyner #define ICE_AQ_VSI_Q_M (0x7FF << ICE_AQ_VSI_Q_S) 63171d10453SEric Joyner __le16 tc_mapping[8]; 63271d10453SEric Joyner #define ICE_AQ_VSI_TC_Q_OFFSET_S 0 63371d10453SEric Joyner #define ICE_AQ_VSI_TC_Q_OFFSET_M (0x7FF << ICE_AQ_VSI_TC_Q_OFFSET_S) 63471d10453SEric Joyner #define ICE_AQ_VSI_TC_Q_NUM_S 11 63571d10453SEric Joyner #define ICE_AQ_VSI_TC_Q_NUM_M (0xF << ICE_AQ_VSI_TC_Q_NUM_S) 63671d10453SEric Joyner /* queueing option section */ 63771d10453SEric Joyner u8 q_opt_rss; 63871d10453SEric Joyner #define ICE_AQ_VSI_Q_OPT_RSS_LUT_S 0 63971d10453SEric Joyner #define ICE_AQ_VSI_Q_OPT_RSS_LUT_M (0x3 << ICE_AQ_VSI_Q_OPT_RSS_LUT_S) 64071d10453SEric Joyner #define ICE_AQ_VSI_Q_OPT_RSS_LUT_VSI 0x0 64171d10453SEric Joyner #define ICE_AQ_VSI_Q_OPT_RSS_LUT_PF 0x2 64271d10453SEric Joyner #define ICE_AQ_VSI_Q_OPT_RSS_LUT_GBL 0x3 64371d10453SEric Joyner #define ICE_AQ_VSI_Q_OPT_RSS_GBL_LUT_S 2 64471d10453SEric Joyner #define ICE_AQ_VSI_Q_OPT_RSS_GBL_LUT_M (0xF << ICE_AQ_VSI_Q_OPT_RSS_GBL_LUT_S) 64571d10453SEric Joyner #define ICE_AQ_VSI_Q_OPT_RSS_HASH_S 6 64671d10453SEric Joyner #define ICE_AQ_VSI_Q_OPT_RSS_HASH_M (0x3 << ICE_AQ_VSI_Q_OPT_RSS_HASH_S) 64771d10453SEric Joyner #define ICE_AQ_VSI_Q_OPT_RSS_TPLZ (0x0 << ICE_AQ_VSI_Q_OPT_RSS_HASH_S) 64871d10453SEric Joyner #define ICE_AQ_VSI_Q_OPT_RSS_SYM_TPLZ (0x1 << ICE_AQ_VSI_Q_OPT_RSS_HASH_S) 64971d10453SEric Joyner #define ICE_AQ_VSI_Q_OPT_RSS_XOR (0x2 << ICE_AQ_VSI_Q_OPT_RSS_HASH_S) 65071d10453SEric Joyner #define ICE_AQ_VSI_Q_OPT_RSS_JHASH (0x3 << ICE_AQ_VSI_Q_OPT_RSS_HASH_S) 65171d10453SEric Joyner u8 q_opt_tc; 65271d10453SEric Joyner #define ICE_AQ_VSI_Q_OPT_TC_OVR_S 0 65371d10453SEric Joyner #define ICE_AQ_VSI_Q_OPT_TC_OVR_M (0x1F << ICE_AQ_VSI_Q_OPT_TC_OVR_S) 65471d10453SEric Joyner #define ICE_AQ_VSI_Q_OPT_PROF_TC_OVR BIT(7) 65571d10453SEric Joyner u8 q_opt_flags; 65671d10453SEric Joyner #define ICE_AQ_VSI_Q_OPT_PE_FLTR_EN BIT(0) 65771d10453SEric Joyner u8 q_opt_reserved[3]; 65871d10453SEric Joyner /* outer up section */ 65971d10453SEric Joyner __le32 outer_up_table; /* same structure and defines as ingress tbl */ 66071d10453SEric Joyner /* section 10 */ 66171d10453SEric Joyner __le16 sect_10_reserved; 66271d10453SEric Joyner /* flow director section */ 66371d10453SEric Joyner __le16 fd_options; 66471d10453SEric Joyner #define ICE_AQ_VSI_FD_ENABLE BIT(0) 66571d10453SEric Joyner #define ICE_AQ_VSI_FD_TX_AUTO_ENABLE BIT(1) 66671d10453SEric Joyner #define ICE_AQ_VSI_FD_PROG_ENABLE BIT(3) 66771d10453SEric Joyner __le16 max_fd_fltr_dedicated; 66871d10453SEric Joyner __le16 max_fd_fltr_shared; 66971d10453SEric Joyner __le16 fd_def_q; 67071d10453SEric Joyner #define ICE_AQ_VSI_FD_DEF_Q_S 0 67171d10453SEric Joyner #define ICE_AQ_VSI_FD_DEF_Q_M (0x7FF << ICE_AQ_VSI_FD_DEF_Q_S) 67271d10453SEric Joyner #define ICE_AQ_VSI_FD_DEF_GRP_S 12 67371d10453SEric Joyner #define ICE_AQ_VSI_FD_DEF_GRP_M (0x7 << ICE_AQ_VSI_FD_DEF_GRP_S) 67471d10453SEric Joyner __le16 fd_report_opt; 67571d10453SEric Joyner #define ICE_AQ_VSI_FD_REPORT_Q_S 0 67671d10453SEric Joyner #define ICE_AQ_VSI_FD_REPORT_Q_M (0x7FF << ICE_AQ_VSI_FD_REPORT_Q_S) 67771d10453SEric Joyner #define ICE_AQ_VSI_FD_DEF_PRIORITY_S 12 67871d10453SEric Joyner #define ICE_AQ_VSI_FD_DEF_PRIORITY_M (0x7 << ICE_AQ_VSI_FD_DEF_PRIORITY_S) 67971d10453SEric Joyner #define ICE_AQ_VSI_FD_DEF_DROP BIT(15) 68071d10453SEric Joyner /* PASID section */ 68171d10453SEric Joyner __le32 pasid_id; 68271d10453SEric Joyner #define ICE_AQ_VSI_PASID_ID_S 0 68371d10453SEric Joyner #define ICE_AQ_VSI_PASID_ID_M (0xFFFFF << ICE_AQ_VSI_PASID_ID_S) 68471d10453SEric Joyner #define ICE_AQ_VSI_PASID_ID_VALID BIT(31) 68571d10453SEric Joyner u8 reserved[24]; 68671d10453SEric Joyner }; 68771d10453SEric Joyner 68871d10453SEric Joyner /* Add/update mirror rule - direct (0x0260) */ 68971d10453SEric Joyner #define ICE_AQC_RULE_ID_VALID_S 7 69071d10453SEric Joyner #define ICE_AQC_RULE_ID_VALID_M (0x1 << ICE_AQC_RULE_ID_VALID_S) 69171d10453SEric Joyner #define ICE_AQC_RULE_ID_S 0 69271d10453SEric Joyner #define ICE_AQC_RULE_ID_M (0x3F << ICE_AQC_RULE_ID_S) 69371d10453SEric Joyner 69471d10453SEric Joyner /* Following defines to be used while processing caller specified mirror list 69571d10453SEric Joyner * of VSI indexes. 69671d10453SEric Joyner */ 69771d10453SEric Joyner /* Action: Byte.bit (1.7) 69871d10453SEric Joyner * 0 = Remove VSI from mirror rule 69971d10453SEric Joyner * 1 = Add VSI to mirror rule 70071d10453SEric Joyner */ 70171d10453SEric Joyner #define ICE_AQC_RULE_ACT_S 15 70271d10453SEric Joyner #define ICE_AQC_RULE_ACT_M (0x1 << ICE_AQC_RULE_ACT_S) 70371d10453SEric Joyner /* Action: 1.2:0.0 = Mirrored VSI */ 70471d10453SEric Joyner #define ICE_AQC_RULE_MIRRORED_VSI_S 0 70571d10453SEric Joyner #define ICE_AQC_RULE_MIRRORED_VSI_M (0x7FF << ICE_AQC_RULE_MIRRORED_VSI_S) 70671d10453SEric Joyner 70771d10453SEric Joyner /* This is to be used by add/update mirror rule Admin Queue command. 70871d10453SEric Joyner * In case of add mirror rule - if rule ID is specified as 70971d10453SEric Joyner * INVAL_MIRROR_RULE_ID, new rule ID is allocated from shared pool. 71071d10453SEric Joyner * If specified rule_id is valid, then it is used. If specified rule_id 71171d10453SEric Joyner * is in use then new mirroring rule is added. 71271d10453SEric Joyner */ 71371d10453SEric Joyner #define ICE_INVAL_MIRROR_RULE_ID 0xFFFF 71471d10453SEric Joyner 71571d10453SEric Joyner struct ice_aqc_add_update_mir_rule { 71671d10453SEric Joyner __le16 rule_id; 71771d10453SEric Joyner 71871d10453SEric Joyner __le16 rule_type; 71971d10453SEric Joyner #define ICE_AQC_RULE_TYPE_S 0 72071d10453SEric Joyner #define ICE_AQC_RULE_TYPE_M (0x7 << ICE_AQC_RULE_TYPE_S) 72171d10453SEric Joyner /* VPORT ingress/egress */ 72271d10453SEric Joyner #define ICE_AQC_RULE_TYPE_VPORT_INGRESS 0x1 72371d10453SEric Joyner #define ICE_AQC_RULE_TYPE_VPORT_EGRESS 0x2 72471d10453SEric Joyner /* Physical port ingress mirroring. 72571d10453SEric Joyner * All traffic received by this port 72671d10453SEric Joyner */ 72771d10453SEric Joyner #define ICE_AQC_RULE_TYPE_PPORT_INGRESS 0x6 72871d10453SEric Joyner /* Physical port egress mirroring. All traffic sent by this port */ 72971d10453SEric Joyner #define ICE_AQC_RULE_TYPE_PPORT_EGRESS 0x7 73071d10453SEric Joyner 73171d10453SEric Joyner /* Number of mirrored entries. 73271d10453SEric Joyner * The values are in the command buffer 73371d10453SEric Joyner */ 73471d10453SEric Joyner __le16 num_entries; 73571d10453SEric Joyner 73671d10453SEric Joyner /* Destination VSI */ 73771d10453SEric Joyner __le16 dest; 73871d10453SEric Joyner __le32 addr_high; 73971d10453SEric Joyner __le32 addr_low; 74071d10453SEric Joyner }; 74171d10453SEric Joyner 74271d10453SEric Joyner /* Delete mirror rule - direct(0x0261) */ 74371d10453SEric Joyner struct ice_aqc_delete_mir_rule { 74471d10453SEric Joyner __le16 rule_id; 74571d10453SEric Joyner __le16 rsvd; 74671d10453SEric Joyner 74771d10453SEric Joyner /* Byte.bit: 20.0 = Keep allocation. If set VSI stays part of 74871d10453SEric Joyner * the PF allocated resources, otherwise it is returned to the 74971d10453SEric Joyner * shared pool 75071d10453SEric Joyner */ 75171d10453SEric Joyner #define ICE_AQC_FLAG_KEEP_ALLOCD_S 0 75271d10453SEric Joyner #define ICE_AQC_FLAG_KEEP_ALLOCD_M (0x1 << ICE_AQC_FLAG_KEEP_ALLOCD_S) 75371d10453SEric Joyner __le16 flags; 75471d10453SEric Joyner 75571d10453SEric Joyner u8 reserved[10]; 75671d10453SEric Joyner }; 75771d10453SEric Joyner 75871d10453SEric Joyner /* Set/Get storm config - (direct 0x0280, 0x0281) */ 75971d10453SEric Joyner /* This structure holds get storm configuration response and same structure 76071d10453SEric Joyner * is used to perform set_storm_cfg 76171d10453SEric Joyner */ 76271d10453SEric Joyner struct ice_aqc_storm_cfg { 76371d10453SEric Joyner __le32 bcast_thresh_size; 76471d10453SEric Joyner __le32 mcast_thresh_size; 76571d10453SEric Joyner /* Bit 18:0 - Traffic upper threshold size 76671d10453SEric Joyner * Bit 31:19 - Reserved 76771d10453SEric Joyner */ 76871d10453SEric Joyner #define ICE_AQ_THRESHOLD_S 0 76971d10453SEric Joyner #define ICE_AQ_THRESHOLD_M (0x7FFFF << ICE_AQ_THRESHOLD_S) 77071d10453SEric Joyner 77171d10453SEric Joyner __le32 storm_ctrl_ctrl; 77271d10453SEric Joyner /* Bit 0: MDIPW - Drop Multicast packets in previous window 77371d10453SEric Joyner * Bit 1: MDICW - Drop multicast packets in current window 77471d10453SEric Joyner * Bit 2: BDIPW - Drop broadcast packets in previous window 77571d10453SEric Joyner * Bit 3: BDICW - Drop broadcast packets in current window 77671d10453SEric Joyner */ 77771d10453SEric Joyner #define ICE_AQ_STORM_CTRL_MDIPW_DROP_MULTICAST BIT(0) 77871d10453SEric Joyner #define ICE_AQ_STORM_CTRL_MDICW_DROP_MULTICAST BIT(1) 77971d10453SEric Joyner #define ICE_AQ_STORM_CTRL_BDIPW_DROP_MULTICAST BIT(2) 78071d10453SEric Joyner #define ICE_AQ_STORM_CTRL_BDICW_DROP_MULTICAST BIT(3) 78171d10453SEric Joyner /* Bit 7:5 : Reserved */ 78271d10453SEric Joyner /* Bit 27:8 : Interval - BSC/MSC Time-interval specification: The 78371d10453SEric Joyner * interval size for applying ingress broadcast or multicast storm 78471d10453SEric Joyner * control. 78571d10453SEric Joyner */ 78671d10453SEric Joyner #define ICE_AQ_STORM_BSC_MSC_TIME_INTERVAL_S 8 78771d10453SEric Joyner #define ICE_AQ_STORM_BSC_MSC_TIME_INTERVAL_M \ 78871d10453SEric Joyner (0xFFFFF << ICE_AQ_STORM_BSC_MSC_TIME_INTERVAL_S) 78971d10453SEric Joyner __le32 reserved; 79071d10453SEric Joyner }; 79171d10453SEric Joyner 79271d10453SEric Joyner #define ICE_MAX_NUM_RECIPES 64 79371d10453SEric Joyner 79471d10453SEric Joyner /* Add/Update/Remove/Get switch rules (indirect 0x02A0, 0x02A1, 0x02A2, 0x02A3) 79571d10453SEric Joyner */ 79671d10453SEric Joyner struct ice_aqc_sw_rules { 79771d10453SEric Joyner /* ops: add switch rules, referring the number of rules. 79871d10453SEric Joyner * ops: update switch rules, referring the number of filters 79971d10453SEric Joyner * ops: remove switch rules, referring the entry index. 80071d10453SEric Joyner * ops: get switch rules, referring to the number of filters. 80171d10453SEric Joyner */ 80271d10453SEric Joyner __le16 num_rules_fltr_entry_index; 80371d10453SEric Joyner u8 reserved[6]; 80471d10453SEric Joyner __le32 addr_high; 80571d10453SEric Joyner __le32 addr_low; 80671d10453SEric Joyner }; 80771d10453SEric Joyner 8089c30461dSEric Joyner /* Add switch rule response: 8099c30461dSEric Joyner * Content of return buffer is same as the input buffer. The status field and 8109c30461dSEric Joyner * LUT index are updated as part of the response 8119c30461dSEric Joyner */ 8129c30461dSEric Joyner struct ice_aqc_sw_rules_elem_hdr { 8139c30461dSEric Joyner __le16 type; /* Switch rule type, one of T_... */ 8149c30461dSEric Joyner #define ICE_AQC_SW_RULES_T_LKUP_RX 0x0 8159c30461dSEric Joyner #define ICE_AQC_SW_RULES_T_LKUP_TX 0x1 8169c30461dSEric Joyner #define ICE_AQC_SW_RULES_T_LG_ACT 0x2 8179c30461dSEric Joyner #define ICE_AQC_SW_RULES_T_VSI_LIST_SET 0x3 8189c30461dSEric Joyner #define ICE_AQC_SW_RULES_T_VSI_LIST_CLEAR 0x4 8199c30461dSEric Joyner #define ICE_AQC_SW_RULES_T_PRUNE_LIST_SET 0x5 8209c30461dSEric Joyner #define ICE_AQC_SW_RULES_T_PRUNE_LIST_CLEAR 0x6 8219c30461dSEric Joyner __le16 status; 8229c30461dSEric Joyner }; 8239c30461dSEric Joyner 82471d10453SEric Joyner /* Add/Update/Get/Remove lookup Rx/Tx command/response entry 82571d10453SEric Joyner * This structures describes the lookup rules and associated actions. "index" 82671d10453SEric Joyner * is returned as part of a response to a successful Add command, and can be 82771d10453SEric Joyner * used to identify the rule for Update/Get/Remove commands. 82871d10453SEric Joyner */ 82971d10453SEric Joyner struct ice_sw_rule_lkup_rx_tx { 8309c30461dSEric Joyner struct ice_aqc_sw_rules_elem_hdr hdr; 8319c30461dSEric Joyner 83271d10453SEric Joyner __le16 recipe_id; 83371d10453SEric Joyner #define ICE_SW_RECIPE_LOGICAL_PORT_FWD 10 83471d10453SEric Joyner /* Source port for LOOKUP_RX and source VSI in case of LOOKUP_TX */ 83571d10453SEric Joyner __le16 src; 83671d10453SEric Joyner __le32 act; 83771d10453SEric Joyner 83871d10453SEric Joyner /* Bit 0:1 - Action type */ 83971d10453SEric Joyner #define ICE_SINGLE_ACT_TYPE_S 0x00 84071d10453SEric Joyner #define ICE_SINGLE_ACT_TYPE_M (0x3 << ICE_SINGLE_ACT_TYPE_S) 84171d10453SEric Joyner 84271d10453SEric Joyner /* Bit 2 - Loop back enable 84371d10453SEric Joyner * Bit 3 - LAN enable 84471d10453SEric Joyner */ 84571d10453SEric Joyner #define ICE_SINGLE_ACT_LB_ENABLE BIT(2) 84671d10453SEric Joyner #define ICE_SINGLE_ACT_LAN_ENABLE BIT(3) 84771d10453SEric Joyner 84871d10453SEric Joyner /* Action type = 0 - Forward to VSI or VSI list */ 84971d10453SEric Joyner #define ICE_SINGLE_ACT_VSI_FORWARDING 0x0 85071d10453SEric Joyner 85171d10453SEric Joyner #define ICE_SINGLE_ACT_VSI_ID_S 4 85271d10453SEric Joyner #define ICE_SINGLE_ACT_VSI_ID_M (0x3FF << ICE_SINGLE_ACT_VSI_ID_S) 85371d10453SEric Joyner #define ICE_SINGLE_ACT_VSI_LIST_ID_S 4 85471d10453SEric Joyner #define ICE_SINGLE_ACT_VSI_LIST_ID_M (0x3FF << ICE_SINGLE_ACT_VSI_LIST_ID_S) 85571d10453SEric Joyner /* This bit needs to be set if action is forward to VSI list */ 85671d10453SEric Joyner #define ICE_SINGLE_ACT_VSI_LIST BIT(14) 85771d10453SEric Joyner #define ICE_SINGLE_ACT_VALID_BIT BIT(17) 85871d10453SEric Joyner #define ICE_SINGLE_ACT_DROP BIT(18) 85971d10453SEric Joyner 86071d10453SEric Joyner /* Action type = 1 - Forward to Queue of Queue group */ 86171d10453SEric Joyner #define ICE_SINGLE_ACT_TO_Q 0x1 86271d10453SEric Joyner #define ICE_SINGLE_ACT_Q_INDEX_S 4 86371d10453SEric Joyner #define ICE_SINGLE_ACT_Q_INDEX_M (0x7FF << ICE_SINGLE_ACT_Q_INDEX_S) 86471d10453SEric Joyner #define ICE_SINGLE_ACT_Q_REGION_S 15 86571d10453SEric Joyner #define ICE_SINGLE_ACT_Q_REGION_M (0x7 << ICE_SINGLE_ACT_Q_REGION_S) 86671d10453SEric Joyner #define ICE_SINGLE_ACT_Q_PRIORITY BIT(18) 86771d10453SEric Joyner 86871d10453SEric Joyner /* Action type = 2 - Prune */ 86971d10453SEric Joyner #define ICE_SINGLE_ACT_PRUNE 0x2 87071d10453SEric Joyner #define ICE_SINGLE_ACT_EGRESS BIT(15) 87171d10453SEric Joyner #define ICE_SINGLE_ACT_INGRESS BIT(16) 87271d10453SEric Joyner #define ICE_SINGLE_ACT_PRUNET BIT(17) 87371d10453SEric Joyner /* Bit 18 should be set to 0 for this action */ 87471d10453SEric Joyner 87571d10453SEric Joyner /* Action type = 2 - Pointer */ 87671d10453SEric Joyner #define ICE_SINGLE_ACT_PTR 0x2 87771d10453SEric Joyner #define ICE_SINGLE_ACT_PTR_VAL_S 4 87871d10453SEric Joyner #define ICE_SINGLE_ACT_PTR_VAL_M (0x1FFF << ICE_SINGLE_ACT_PTR_VAL_S) 8798923de59SPiotr Kubaj /* Bit 17 should be set if pointed action includes a FWD cmd */ 8808923de59SPiotr Kubaj #define ICE_SINGLE_ACT_PTR_HAS_FWD BIT(17) 88171d10453SEric Joyner /* Bit 18 should be set to 1 */ 88271d10453SEric Joyner #define ICE_SINGLE_ACT_PTR_BIT BIT(18) 88371d10453SEric Joyner 88471d10453SEric Joyner /* Action type = 3 - Other actions. Last two bits 88571d10453SEric Joyner * are other action identifier 88671d10453SEric Joyner */ 88771d10453SEric Joyner #define ICE_SINGLE_ACT_OTHER_ACTS 0x3 88871d10453SEric Joyner #define ICE_SINGLE_OTHER_ACT_IDENTIFIER_S 17 88971d10453SEric Joyner #define ICE_SINGLE_OTHER_ACT_IDENTIFIER_M \ 89071d10453SEric Joyner (0x3 << ICE_SINGLE_OTHER_ACT_IDENTIFIER_S) 89171d10453SEric Joyner 89271d10453SEric Joyner /* Bit 17:18 - Defines other actions */ 89371d10453SEric Joyner /* Other action = 0 - Mirror VSI */ 89471d10453SEric Joyner #define ICE_SINGLE_OTHER_ACT_MIRROR 0 89571d10453SEric Joyner #define ICE_SINGLE_ACT_MIRROR_VSI_ID_S 4 89671d10453SEric Joyner #define ICE_SINGLE_ACT_MIRROR_VSI_ID_M \ 89771d10453SEric Joyner (0x3FF << ICE_SINGLE_ACT_MIRROR_VSI_ID_S) 89871d10453SEric Joyner 89971d10453SEric Joyner /* Other action = 3 - Set Stat count */ 90071d10453SEric Joyner #define ICE_SINGLE_OTHER_ACT_STAT_COUNT 3 90171d10453SEric Joyner #define ICE_SINGLE_ACT_STAT_COUNT_INDEX_S 4 90271d10453SEric Joyner #define ICE_SINGLE_ACT_STAT_COUNT_INDEX_M \ 90371d10453SEric Joyner (0x7F << ICE_SINGLE_ACT_STAT_COUNT_INDEX_S) 90471d10453SEric Joyner 90571d10453SEric Joyner __le16 index; /* The index of the rule in the lookup table */ 90671d10453SEric Joyner /* Length and values of the header to be matched per recipe or 90771d10453SEric Joyner * lookup-type 90871d10453SEric Joyner */ 90971d10453SEric Joyner __le16 hdr_len; 9109c30461dSEric Joyner u8 hdr_data[STRUCT_HACK_VAR_LEN]; 91171d10453SEric Joyner }; 91271d10453SEric Joyner 9139c30461dSEric Joyner #pragma pack(1) 91471d10453SEric Joyner /* Add/Update/Remove large action command/response entry 91571d10453SEric Joyner * "index" is returned as part of a response to a successful Add command, and 91671d10453SEric Joyner * can be used to identify the action for Update/Get/Remove commands. 91771d10453SEric Joyner */ 91871d10453SEric Joyner struct ice_sw_rule_lg_act { 9199c30461dSEric Joyner struct ice_aqc_sw_rules_elem_hdr hdr; 9209c30461dSEric Joyner 92171d10453SEric Joyner __le16 index; /* Index in large action table */ 92271d10453SEric Joyner __le16 size; 92371d10453SEric Joyner /* Max number of large actions */ 92471d10453SEric Joyner #define ICE_MAX_LG_ACT 4 92571d10453SEric Joyner /* Bit 0:1 - Action type */ 92671d10453SEric Joyner #define ICE_LG_ACT_TYPE_S 0 92771d10453SEric Joyner #define ICE_LG_ACT_TYPE_M (0x7 << ICE_LG_ACT_TYPE_S) 92871d10453SEric Joyner 92971d10453SEric Joyner /* Action type = 0 - Forward to VSI or VSI list */ 93071d10453SEric Joyner #define ICE_LG_ACT_VSI_FORWARDING 0 93171d10453SEric Joyner #define ICE_LG_ACT_VSI_ID_S 3 93271d10453SEric Joyner #define ICE_LG_ACT_VSI_ID_M (0x3FF << ICE_LG_ACT_VSI_ID_S) 93371d10453SEric Joyner #define ICE_LG_ACT_VSI_LIST_ID_S 3 93471d10453SEric Joyner #define ICE_LG_ACT_VSI_LIST_ID_M (0x3FF << ICE_LG_ACT_VSI_LIST_ID_S) 93571d10453SEric Joyner /* This bit needs to be set if action is forward to VSI list */ 93671d10453SEric Joyner #define ICE_LG_ACT_VSI_LIST BIT(13) 93771d10453SEric Joyner 93871d10453SEric Joyner #define ICE_LG_ACT_VALID_BIT BIT(16) 93971d10453SEric Joyner 94071d10453SEric Joyner /* Action type = 1 - Forward to Queue of Queue group */ 94171d10453SEric Joyner #define ICE_LG_ACT_TO_Q 0x1 94271d10453SEric Joyner #define ICE_LG_ACT_Q_INDEX_S 3 94371d10453SEric Joyner #define ICE_LG_ACT_Q_INDEX_M (0x7FF << ICE_LG_ACT_Q_INDEX_S) 94471d10453SEric Joyner #define ICE_LG_ACT_Q_REGION_S 14 94571d10453SEric Joyner #define ICE_LG_ACT_Q_REGION_M (0x7 << ICE_LG_ACT_Q_REGION_S) 94671d10453SEric Joyner #define ICE_LG_ACT_Q_PRIORITY_SET BIT(17) 94771d10453SEric Joyner 94871d10453SEric Joyner /* Action type = 2 - Prune */ 94971d10453SEric Joyner #define ICE_LG_ACT_PRUNE 0x2 95071d10453SEric Joyner #define ICE_LG_ACT_EGRESS BIT(14) 95171d10453SEric Joyner #define ICE_LG_ACT_INGRESS BIT(15) 95271d10453SEric Joyner #define ICE_LG_ACT_PRUNET BIT(16) 95371d10453SEric Joyner 95471d10453SEric Joyner /* Action type = 3 - Mirror VSI */ 95571d10453SEric Joyner #define ICE_LG_OTHER_ACT_MIRROR 0x3 95671d10453SEric Joyner #define ICE_LG_ACT_MIRROR_VSI_ID_S 3 95771d10453SEric Joyner #define ICE_LG_ACT_MIRROR_VSI_ID_M (0x3FF << ICE_LG_ACT_MIRROR_VSI_ID_S) 95871d10453SEric Joyner 95971d10453SEric Joyner /* Action type = 5 - Generic Value */ 96071d10453SEric Joyner #define ICE_LG_ACT_GENERIC 0x5 96171d10453SEric Joyner #define ICE_LG_ACT_GENERIC_VALUE_S 3 96271d10453SEric Joyner #define ICE_LG_ACT_GENERIC_VALUE_M (0xFFFF << ICE_LG_ACT_GENERIC_VALUE_S) 96371d10453SEric Joyner #define ICE_LG_ACT_GENERIC_OFFSET_S 19 96471d10453SEric Joyner #define ICE_LG_ACT_GENERIC_OFFSET_M (0x7 << ICE_LG_ACT_GENERIC_OFFSET_S) 96571d10453SEric Joyner #define ICE_LG_ACT_GENERIC_PRIORITY_S 22 96671d10453SEric Joyner #define ICE_LG_ACT_GENERIC_PRIORITY_M (0x7 << ICE_LG_ACT_GENERIC_PRIORITY_S) 96771d10453SEric Joyner #define ICE_LG_ACT_GENERIC_OFF_RX_DESC_PROF_IDX 7 96871d10453SEric Joyner 96971d10453SEric Joyner /* Action = 7 - Set Stat count */ 97071d10453SEric Joyner #define ICE_LG_ACT_STAT_COUNT 0x7 97171d10453SEric Joyner #define ICE_LG_ACT_STAT_COUNT_S 3 97271d10453SEric Joyner #define ICE_LG_ACT_STAT_COUNT_M (0x7F << ICE_LG_ACT_STAT_COUNT_S) 9737d7af7f8SEric Joyner __le32 act[STRUCT_HACK_VAR_LEN]; /* array of size for actions */ 97471d10453SEric Joyner }; 9759c30461dSEric Joyner #pragma pack() 97671d10453SEric Joyner 9779c30461dSEric Joyner #pragma pack(1) 97871d10453SEric Joyner /* Add/Update/Remove VSI list command/response entry 97971d10453SEric Joyner * "index" is returned as part of a response to a successful Add command, and 98071d10453SEric Joyner * can be used to identify the VSI list for Update/Get/Remove commands. 98171d10453SEric Joyner */ 98271d10453SEric Joyner struct ice_sw_rule_vsi_list { 9839c30461dSEric Joyner struct ice_aqc_sw_rules_elem_hdr hdr; 9849c30461dSEric Joyner 98571d10453SEric Joyner __le16 index; /* Index of VSI/Prune list */ 98671d10453SEric Joyner __le16 number_vsi; 9877d7af7f8SEric Joyner __le16 vsi[STRUCT_HACK_VAR_LEN]; /* Array of number_vsi VSI numbers */ 98871d10453SEric Joyner }; 9899c30461dSEric Joyner #pragma pack() 99071d10453SEric Joyner 99171d10453SEric Joyner #pragma pack(1) 99271d10453SEric Joyner /* Query VSI list command/response entry */ 99371d10453SEric Joyner struct ice_sw_rule_vsi_list_query { 99471d10453SEric Joyner __le16 index; 9959c30461dSEric Joyner u8 vsi_list[DIVIDE_AND_ROUND_UP(ICE_MAX_VSI, BITS_PER_BYTE)]; 99671d10453SEric Joyner }; 99771d10453SEric Joyner #pragma pack() 99871d10453SEric Joyner 99971d10453SEric Joyner /* PFC Ignore (direct 0x0301) 100071d10453SEric Joyner * The command and response use the same descriptor structure 100171d10453SEric Joyner */ 100271d10453SEric Joyner struct ice_aqc_pfc_ignore { 100371d10453SEric Joyner u8 tc_bitmap; 100471d10453SEric Joyner u8 cmd_flags; /* unused in response */ 100571d10453SEric Joyner #define ICE_AQC_PFC_IGNORE_SET BIT(7) 100671d10453SEric Joyner #define ICE_AQC_PFC_IGNORE_CLEAR 0 100771d10453SEric Joyner u8 reserved[14]; 100871d10453SEric Joyner }; 100971d10453SEric Joyner 10109c30461dSEric Joyner /* Query PFC Mode (direct 0x0302) 10119c30461dSEric Joyner * Set PFC Mode (direct 0x0303) 101271d10453SEric Joyner */ 101371d10453SEric Joyner struct ice_aqc_set_query_pfc_mode { 101471d10453SEric Joyner u8 pfc_mode; 101571d10453SEric Joyner /* For Set Command response, reserved in all other cases */ 101671d10453SEric Joyner #define ICE_AQC_PFC_NOT_CONFIGURED 0 101771d10453SEric Joyner /* For Query Command response, reserved in all other cases */ 101871d10453SEric Joyner #define ICE_AQC_DCB_DIS 0 101971d10453SEric Joyner #define ICE_AQC_PFC_VLAN_BASED_PFC 1 102071d10453SEric Joyner #define ICE_AQC_PFC_DSCP_BASED_PFC 2 102171d10453SEric Joyner u8 rsvd[15]; 102271d10453SEric Joyner }; 102371d10453SEric Joyner 102471d10453SEric Joyner /* Set DCB Parameters (direct 0x0306) */ 102571d10453SEric Joyner struct ice_aqc_set_dcb_params { 102671d10453SEric Joyner u8 cmd_flags; /* unused in response */ 102771d10453SEric Joyner #define ICE_AQC_LINK_UP_DCB_CFG BIT(0) 10287d7af7f8SEric Joyner #define ICE_AQC_PERSIST_DCB_CFG BIT(1) 102971d10453SEric Joyner u8 valid_flags; /* unused in response */ 103071d10453SEric Joyner #define ICE_AQC_LINK_UP_DCB_CFG_VALID BIT(0) 10317d7af7f8SEric Joyner #define ICE_AQC_PERSIST_DCB_CFG_VALID BIT(1) 103271d10453SEric Joyner u8 rsvd[14]; 103371d10453SEric Joyner }; 103471d10453SEric Joyner 103571d10453SEric Joyner /* Get Default Topology (indirect 0x0400) */ 103671d10453SEric Joyner struct ice_aqc_get_topo { 103771d10453SEric Joyner u8 port_num; 103871d10453SEric Joyner u8 num_branches; 103971d10453SEric Joyner __le16 reserved1; 104071d10453SEric Joyner __le32 reserved2; 104171d10453SEric Joyner __le32 addr_high; 104271d10453SEric Joyner __le32 addr_low; 104371d10453SEric Joyner }; 104471d10453SEric Joyner 10458923de59SPiotr Kubaj /* Get/Set Tx Topology (indirect 0x0418/0x0417) */ 10468923de59SPiotr Kubaj struct ice_aqc_get_set_tx_topo { 10478923de59SPiotr Kubaj u8 set_flags; 10488923de59SPiotr Kubaj #define ICE_AQC_TX_TOPO_FLAGS_CORRER BIT(0) 10498923de59SPiotr Kubaj #define ICE_AQC_TX_TOPO_FLAGS_SRC_RAM BIT(1) 10508923de59SPiotr Kubaj #define ICE_AQC_TX_TOPO_FLAGS_SET_PSM BIT(2) 10518923de59SPiotr Kubaj #define ICE_AQC_TX_TOPO_FLAGS_LOAD_NEW BIT(4) 10528923de59SPiotr Kubaj #define ICE_AQC_TX_TOPO_FLAGS_ISSUED BIT(5) 10538923de59SPiotr Kubaj u8 get_flags; 10548923de59SPiotr Kubaj #define ICE_AQC_TX_TOPO_GET_NO_UPDATE 0 10558923de59SPiotr Kubaj #define ICE_AQC_TX_TOPO_GET_PSM 1 10568923de59SPiotr Kubaj #define ICE_AQC_TX_TOPO_GET_RAM 2 10578923de59SPiotr Kubaj __le16 reserved1; 10588923de59SPiotr Kubaj __le32 reserved2; 10598923de59SPiotr Kubaj __le32 addr_high; 10608923de59SPiotr Kubaj __le32 addr_low; 10618923de59SPiotr Kubaj }; 10628923de59SPiotr Kubaj 106371d10453SEric Joyner /* Update TSE (indirect 0x0403) 106471d10453SEric Joyner * Get TSE (indirect 0x0404) 106571d10453SEric Joyner * Add TSE (indirect 0x0401) 106671d10453SEric Joyner * Delete TSE (indirect 0x040F) 106771d10453SEric Joyner * Move TSE (indirect 0x0408) 106871d10453SEric Joyner * Suspend Nodes (indirect 0x0409) 106971d10453SEric Joyner * Resume Nodes (indirect 0x040A) 107071d10453SEric Joyner */ 107171d10453SEric Joyner struct ice_aqc_sched_elem_cmd { 107271d10453SEric Joyner __le16 num_elem_req; /* Used by commands */ 107371d10453SEric Joyner __le16 num_elem_resp; /* Used by responses */ 107471d10453SEric Joyner __le32 reserved; 107571d10453SEric Joyner __le32 addr_high; 107671d10453SEric Joyner __le32 addr_low; 107771d10453SEric Joyner }; 107871d10453SEric Joyner 107971d10453SEric Joyner struct ice_aqc_txsched_move_grp_info_hdr { 108071d10453SEric Joyner __le32 src_parent_teid; 108171d10453SEric Joyner __le32 dest_parent_teid; 108271d10453SEric Joyner __le16 num_elems; 10839cf1841cSEric Joyner u8 flags; 10849cf1841cSEric Joyner u8 reserved; 108571d10453SEric Joyner }; 108671d10453SEric Joyner 108771d10453SEric Joyner struct ice_aqc_move_elem { 108871d10453SEric Joyner struct ice_aqc_txsched_move_grp_info_hdr hdr; 10897d7af7f8SEric Joyner __le32 teid[STRUCT_HACK_VAR_LEN]; 109071d10453SEric Joyner }; 109171d10453SEric Joyner 109271d10453SEric Joyner struct ice_aqc_elem_info_bw { 109371d10453SEric Joyner __le16 bw_profile_idx; 109471d10453SEric Joyner __le16 bw_alloc; 109571d10453SEric Joyner }; 109671d10453SEric Joyner 109771d10453SEric Joyner struct ice_aqc_txsched_elem { 109871d10453SEric Joyner u8 elem_type; /* Special field, reserved for some aq calls */ 109971d10453SEric Joyner #define ICE_AQC_ELEM_TYPE_UNDEFINED 0x0 110071d10453SEric Joyner #define ICE_AQC_ELEM_TYPE_ROOT_PORT 0x1 110171d10453SEric Joyner #define ICE_AQC_ELEM_TYPE_TC 0x2 110271d10453SEric Joyner #define ICE_AQC_ELEM_TYPE_SE_GENERIC 0x3 110371d10453SEric Joyner #define ICE_AQC_ELEM_TYPE_ENTRY_POINT 0x4 110471d10453SEric Joyner #define ICE_AQC_ELEM_TYPE_LEAF 0x5 110571d10453SEric Joyner #define ICE_AQC_ELEM_TYPE_SE_PADDED 0x6 110671d10453SEric Joyner u8 valid_sections; 110771d10453SEric Joyner #define ICE_AQC_ELEM_VALID_GENERIC BIT(0) 110871d10453SEric Joyner #define ICE_AQC_ELEM_VALID_CIR BIT(1) 110971d10453SEric Joyner #define ICE_AQC_ELEM_VALID_EIR BIT(2) 111071d10453SEric Joyner #define ICE_AQC_ELEM_VALID_SHARED BIT(3) 111171d10453SEric Joyner u8 generic; 111271d10453SEric Joyner #define ICE_AQC_ELEM_GENERIC_MODE_M 0x1 111371d10453SEric Joyner #define ICE_AQC_ELEM_GENERIC_PRIO_S 0x1 111471d10453SEric Joyner #define ICE_AQC_ELEM_GENERIC_PRIO_M (0x7 << ICE_AQC_ELEM_GENERIC_PRIO_S) 111571d10453SEric Joyner #define ICE_AQC_ELEM_GENERIC_SP_S 0x4 111671d10453SEric Joyner #define ICE_AQC_ELEM_GENERIC_SP_M (0x1 << ICE_AQC_ELEM_GENERIC_SP_S) 111771d10453SEric Joyner #define ICE_AQC_ELEM_GENERIC_ADJUST_VAL_S 0x5 111871d10453SEric Joyner #define ICE_AQC_ELEM_GENERIC_ADJUST_VAL_M \ 111971d10453SEric Joyner (0x3 << ICE_AQC_ELEM_GENERIC_ADJUST_VAL_S) 112071d10453SEric Joyner u8 flags; /* Special field, reserved for some aq calls */ 112171d10453SEric Joyner #define ICE_AQC_ELEM_FLAG_SUSPEND_M 0x1 112271d10453SEric Joyner struct ice_aqc_elem_info_bw cir_bw; 112371d10453SEric Joyner struct ice_aqc_elem_info_bw eir_bw; 112471d10453SEric Joyner __le16 srl_id; 112571d10453SEric Joyner __le16 reserved2; 112671d10453SEric Joyner }; 112771d10453SEric Joyner 112871d10453SEric Joyner struct ice_aqc_txsched_elem_data { 112971d10453SEric Joyner __le32 parent_teid; 113071d10453SEric Joyner __le32 node_teid; 113171d10453SEric Joyner struct ice_aqc_txsched_elem data; 113271d10453SEric Joyner }; 113371d10453SEric Joyner 113471d10453SEric Joyner struct ice_aqc_txsched_topo_grp_info_hdr { 113571d10453SEric Joyner __le32 parent_teid; 113671d10453SEric Joyner __le16 num_elems; 113771d10453SEric Joyner __le16 reserved2; 113871d10453SEric Joyner }; 113971d10453SEric Joyner 114071d10453SEric Joyner struct ice_aqc_add_elem { 114171d10453SEric Joyner struct ice_aqc_txsched_topo_grp_info_hdr hdr; 11427d7af7f8SEric Joyner struct ice_aqc_txsched_elem_data generic[STRUCT_HACK_VAR_LEN]; 114371d10453SEric Joyner }; 114471d10453SEric Joyner 114571d10453SEric Joyner struct ice_aqc_get_topo_elem { 114671d10453SEric Joyner struct ice_aqc_txsched_topo_grp_info_hdr hdr; 114771d10453SEric Joyner struct ice_aqc_txsched_elem_data 114871d10453SEric Joyner generic[ICE_AQC_TOPO_MAX_LEVEL_NUM]; 114971d10453SEric Joyner }; 115071d10453SEric Joyner 115171d10453SEric Joyner struct ice_aqc_delete_elem { 115271d10453SEric Joyner struct ice_aqc_txsched_topo_grp_info_hdr hdr; 11537d7af7f8SEric Joyner __le32 teid[STRUCT_HACK_VAR_LEN]; 115471d10453SEric Joyner }; 115571d10453SEric Joyner 115671d10453SEric Joyner /* Query Port ETS (indirect 0x040E) 115771d10453SEric Joyner * 115871d10453SEric Joyner * This indirect command is used to query port TC node configuration. 115971d10453SEric Joyner */ 116071d10453SEric Joyner struct ice_aqc_query_port_ets { 116171d10453SEric Joyner __le32 port_teid; 116271d10453SEric Joyner __le32 reserved; 116371d10453SEric Joyner __le32 addr_high; 116471d10453SEric Joyner __le32 addr_low; 116571d10453SEric Joyner }; 116671d10453SEric Joyner 116771d10453SEric Joyner struct ice_aqc_port_ets_elem { 116871d10453SEric Joyner u8 tc_valid_bits; 116971d10453SEric Joyner u8 reserved[3]; 117071d10453SEric Joyner /* 3 bits for UP per TC 0-7, 4th byte reserved */ 117171d10453SEric Joyner __le32 up2tc; 117271d10453SEric Joyner u8 tc_bw_share[8]; 117371d10453SEric Joyner __le32 port_eir_prof_id; 117471d10453SEric Joyner __le32 port_cir_prof_id; 117571d10453SEric Joyner /* 3 bits per Node priority to TC 0-7, 4th byte reserved */ 117671d10453SEric Joyner __le32 tc_node_prio; 117771d10453SEric Joyner #define ICE_TC_NODE_PRIO_S 0x4 117871d10453SEric Joyner u8 reserved1[4]; 117971d10453SEric Joyner __le32 tc_node_teid[8]; /* Used for response, reserved in command */ 118071d10453SEric Joyner }; 118171d10453SEric Joyner 118271d10453SEric Joyner /* Rate limiting profile for 118371d10453SEric Joyner * Add RL profile (indirect 0x0410) 118471d10453SEric Joyner * Query RL profile (indirect 0x0411) 118571d10453SEric Joyner * Remove RL profile (indirect 0x0415) 118671d10453SEric Joyner * These indirect commands acts on single or multiple 118771d10453SEric Joyner * RL profiles with specified data. 118871d10453SEric Joyner */ 118971d10453SEric Joyner struct ice_aqc_rl_profile { 119071d10453SEric Joyner __le16 num_profiles; 119171d10453SEric Joyner __le16 num_processed; /* Only for response. Reserved in Command. */ 119271d10453SEric Joyner u8 reserved[4]; 119371d10453SEric Joyner __le32 addr_high; 119471d10453SEric Joyner __le32 addr_low; 119571d10453SEric Joyner }; 119671d10453SEric Joyner 119771d10453SEric Joyner struct ice_aqc_rl_profile_elem { 119871d10453SEric Joyner u8 level; 119971d10453SEric Joyner u8 flags; 120071d10453SEric Joyner #define ICE_AQC_RL_PROFILE_TYPE_S 0x0 120171d10453SEric Joyner #define ICE_AQC_RL_PROFILE_TYPE_M (0x3 << ICE_AQC_RL_PROFILE_TYPE_S) 120271d10453SEric Joyner #define ICE_AQC_RL_PROFILE_TYPE_CIR 0 120371d10453SEric Joyner #define ICE_AQC_RL_PROFILE_TYPE_EIR 1 120471d10453SEric Joyner #define ICE_AQC_RL_PROFILE_TYPE_SRL 2 120571d10453SEric Joyner /* The following flag is used for Query RL Profile Data */ 120671d10453SEric Joyner #define ICE_AQC_RL_PROFILE_INVAL_S 0x7 120771d10453SEric Joyner #define ICE_AQC_RL_PROFILE_INVAL_M (0x1 << ICE_AQC_RL_PROFILE_INVAL_S) 120871d10453SEric Joyner 120971d10453SEric Joyner __le16 profile_id; 121071d10453SEric Joyner __le16 max_burst_size; 121171d10453SEric Joyner __le16 rl_multiply; 121271d10453SEric Joyner __le16 wake_up_calc; 121371d10453SEric Joyner __le16 rl_encode; 121471d10453SEric Joyner }; 121571d10453SEric Joyner 12168923de59SPiotr Kubaj /* Config Node Attributes (indirect 0x0419) 12178923de59SPiotr Kubaj * Query Node Attributes (indirect 0x041A) 12188923de59SPiotr Kubaj */ 12198923de59SPiotr Kubaj struct ice_aqc_node_attr { 12208923de59SPiotr Kubaj __le16 num_entries; /* Number of attributes structures in the buffer */ 12218923de59SPiotr Kubaj u8 reserved[6]; 12228923de59SPiotr Kubaj __le32 addr_high; 12238923de59SPiotr Kubaj __le32 addr_low; 12248923de59SPiotr Kubaj }; 12258923de59SPiotr Kubaj 12268923de59SPiotr Kubaj struct ice_aqc_node_attr_elem { 12278923de59SPiotr Kubaj __le32 node_teid; 12288923de59SPiotr Kubaj __le16 max_children; 12298923de59SPiotr Kubaj __le16 children_level; 12308923de59SPiotr Kubaj }; 12318923de59SPiotr Kubaj 123271d10453SEric Joyner /* Configure L2 Node CGD (indirect 0x0414) 123371d10453SEric Joyner * This indirect command allows configuring a congestion domain for given L2 123471d10453SEric Joyner * node TEIDs in the scheduler topology. 123571d10453SEric Joyner */ 123671d10453SEric Joyner struct ice_aqc_cfg_l2_node_cgd { 123771d10453SEric Joyner __le16 num_l2_nodes; 123871d10453SEric Joyner u8 reserved[6]; 123971d10453SEric Joyner __le32 addr_high; 124071d10453SEric Joyner __le32 addr_low; 124171d10453SEric Joyner }; 124271d10453SEric Joyner 124371d10453SEric Joyner struct ice_aqc_cfg_l2_node_cgd_elem { 124471d10453SEric Joyner __le32 node_teid; 124571d10453SEric Joyner u8 cgd; 124671d10453SEric Joyner u8 reserved[3]; 124771d10453SEric Joyner }; 124871d10453SEric Joyner 124971d10453SEric Joyner /* Query Scheduler Resource Allocation (indirect 0x0412) 125071d10453SEric Joyner * This indirect command retrieves the scheduler resources allocated by 125171d10453SEric Joyner * EMP Firmware to the given PF. 125271d10453SEric Joyner */ 125371d10453SEric Joyner struct ice_aqc_query_txsched_res { 125471d10453SEric Joyner u8 reserved[8]; 125571d10453SEric Joyner __le32 addr_high; 125671d10453SEric Joyner __le32 addr_low; 125771d10453SEric Joyner }; 125871d10453SEric Joyner 125971d10453SEric Joyner struct ice_aqc_generic_sched_props { 126071d10453SEric Joyner __le16 phys_levels; 126171d10453SEric Joyner __le16 logical_levels; 126271d10453SEric Joyner u8 flattening_bitmap; 126371d10453SEric Joyner u8 max_device_cgds; 126471d10453SEric Joyner u8 max_pf_cgds; 126571d10453SEric Joyner u8 rsvd0; 126671d10453SEric Joyner __le16 rdma_qsets; 126771d10453SEric Joyner u8 rsvd1[22]; 126871d10453SEric Joyner }; 126971d10453SEric Joyner 127071d10453SEric Joyner struct ice_aqc_layer_props { 127171d10453SEric Joyner u8 logical_layer; 127271d10453SEric Joyner u8 chunk_size; 127371d10453SEric Joyner __le16 max_device_nodes; 127471d10453SEric Joyner __le16 max_pf_nodes; 127571d10453SEric Joyner u8 rsvd0[4]; 127671d10453SEric Joyner __le16 max_sibl_grp_sz; 127771d10453SEric Joyner __le16 max_cir_rl_profiles; 127871d10453SEric Joyner __le16 max_eir_rl_profiles; 127971d10453SEric Joyner __le16 max_srl_profiles; 128071d10453SEric Joyner u8 rsvd1[14]; 128171d10453SEric Joyner }; 128271d10453SEric Joyner 128371d10453SEric Joyner struct ice_aqc_query_txsched_res_resp { 128471d10453SEric Joyner struct ice_aqc_generic_sched_props sched_props; 128571d10453SEric Joyner struct ice_aqc_layer_props layer_props[ICE_AQC_TOPO_MAX_LEVEL_NUM]; 128671d10453SEric Joyner }; 128771d10453SEric Joyner 128871d10453SEric Joyner /* Query Node to Root Topology (indirect 0x0413) 128971d10453SEric Joyner * This command uses ice_aqc_get_elem as its data buffer. 129071d10453SEric Joyner */ 129171d10453SEric Joyner struct ice_aqc_query_node_to_root { 129271d10453SEric Joyner __le32 teid; 129371d10453SEric Joyner __le32 num_nodes; /* Response only */ 129471d10453SEric Joyner __le32 addr_high; 129571d10453SEric Joyner __le32 addr_low; 129671d10453SEric Joyner }; 129771d10453SEric Joyner 129871d10453SEric Joyner /* Get PHY capabilities (indirect 0x0600) */ 129971d10453SEric Joyner struct ice_aqc_get_phy_caps { 130071d10453SEric Joyner u8 lport_num; 130171d10453SEric Joyner u8 reserved; 130271d10453SEric Joyner __le16 param0; 130371d10453SEric Joyner /* 18.0 - Report qualified modules */ 130471d10453SEric Joyner #define ICE_AQC_GET_PHY_RQM BIT(0) 13059cf1841cSEric Joyner /* 18.1 - 18.3 : Report mode 130656429daeSEric Joyner * 000b - Report topology capabilities, without media 130756429daeSEric Joyner * 001b - Report topology capabilities, with media 130856429daeSEric Joyner * 010b - Report Active configuration 130956429daeSEric Joyner * 011b - Report PHY Type and FEC mode capabilities 131056429daeSEric Joyner * 100b - Report Default capabilities 131171d10453SEric Joyner */ 131271d10453SEric Joyner #define ICE_AQC_REPORT_MODE_S 1 13139cf1841cSEric Joyner #define ICE_AQC_REPORT_MODE_M (7 << ICE_AQC_REPORT_MODE_S) 13149cf1841cSEric Joyner #define ICE_AQC_REPORT_TOPO_CAP_NO_MEDIA 0 13159cf1841cSEric Joyner #define ICE_AQC_REPORT_TOPO_CAP_MEDIA BIT(1) 13169cf1841cSEric Joyner #define ICE_AQC_REPORT_ACTIVE_CFG BIT(2) 13179cf1841cSEric Joyner #define ICE_AQC_REPORT_DFLT_CFG BIT(3) 131871d10453SEric Joyner __le32 reserved1; 131971d10453SEric Joyner __le32 addr_high; 132071d10453SEric Joyner __le32 addr_low; 132171d10453SEric Joyner }; 132271d10453SEric Joyner 132371d10453SEric Joyner /* This is #define of PHY type (Extended): 132471d10453SEric Joyner * The first set of defines is for phy_type_low. 132571d10453SEric Joyner */ 132671d10453SEric Joyner #define ICE_PHY_TYPE_LOW_100BASE_TX BIT_ULL(0) 132771d10453SEric Joyner #define ICE_PHY_TYPE_LOW_100M_SGMII BIT_ULL(1) 132871d10453SEric Joyner #define ICE_PHY_TYPE_LOW_1000BASE_T BIT_ULL(2) 132971d10453SEric Joyner #define ICE_PHY_TYPE_LOW_1000BASE_SX BIT_ULL(3) 133071d10453SEric Joyner #define ICE_PHY_TYPE_LOW_1000BASE_LX BIT_ULL(4) 133171d10453SEric Joyner #define ICE_PHY_TYPE_LOW_1000BASE_KX BIT_ULL(5) 133271d10453SEric Joyner #define ICE_PHY_TYPE_LOW_1G_SGMII BIT_ULL(6) 133371d10453SEric Joyner #define ICE_PHY_TYPE_LOW_2500BASE_T BIT_ULL(7) 133471d10453SEric Joyner #define ICE_PHY_TYPE_LOW_2500BASE_X BIT_ULL(8) 133571d10453SEric Joyner #define ICE_PHY_TYPE_LOW_2500BASE_KX BIT_ULL(9) 133671d10453SEric Joyner #define ICE_PHY_TYPE_LOW_5GBASE_T BIT_ULL(10) 133771d10453SEric Joyner #define ICE_PHY_TYPE_LOW_5GBASE_KR BIT_ULL(11) 133871d10453SEric Joyner #define ICE_PHY_TYPE_LOW_10GBASE_T BIT_ULL(12) 133971d10453SEric Joyner #define ICE_PHY_TYPE_LOW_10G_SFI_DA BIT_ULL(13) 134071d10453SEric Joyner #define ICE_PHY_TYPE_LOW_10GBASE_SR BIT_ULL(14) 134171d10453SEric Joyner #define ICE_PHY_TYPE_LOW_10GBASE_LR BIT_ULL(15) 134271d10453SEric Joyner #define ICE_PHY_TYPE_LOW_10GBASE_KR_CR1 BIT_ULL(16) 134371d10453SEric Joyner #define ICE_PHY_TYPE_LOW_10G_SFI_AOC_ACC BIT_ULL(17) 134471d10453SEric Joyner #define ICE_PHY_TYPE_LOW_10G_SFI_C2C BIT_ULL(18) 134571d10453SEric Joyner #define ICE_PHY_TYPE_LOW_25GBASE_T BIT_ULL(19) 134671d10453SEric Joyner #define ICE_PHY_TYPE_LOW_25GBASE_CR BIT_ULL(20) 134771d10453SEric Joyner #define ICE_PHY_TYPE_LOW_25GBASE_CR_S BIT_ULL(21) 134871d10453SEric Joyner #define ICE_PHY_TYPE_LOW_25GBASE_CR1 BIT_ULL(22) 134971d10453SEric Joyner #define ICE_PHY_TYPE_LOW_25GBASE_SR BIT_ULL(23) 135071d10453SEric Joyner #define ICE_PHY_TYPE_LOW_25GBASE_LR BIT_ULL(24) 135171d10453SEric Joyner #define ICE_PHY_TYPE_LOW_25GBASE_KR BIT_ULL(25) 135271d10453SEric Joyner #define ICE_PHY_TYPE_LOW_25GBASE_KR_S BIT_ULL(26) 135371d10453SEric Joyner #define ICE_PHY_TYPE_LOW_25GBASE_KR1 BIT_ULL(27) 135471d10453SEric Joyner #define ICE_PHY_TYPE_LOW_25G_AUI_AOC_ACC BIT_ULL(28) 135571d10453SEric Joyner #define ICE_PHY_TYPE_LOW_25G_AUI_C2C BIT_ULL(29) 135671d10453SEric Joyner #define ICE_PHY_TYPE_LOW_40GBASE_CR4 BIT_ULL(30) 135771d10453SEric Joyner #define ICE_PHY_TYPE_LOW_40GBASE_SR4 BIT_ULL(31) 135871d10453SEric Joyner #define ICE_PHY_TYPE_LOW_40GBASE_LR4 BIT_ULL(32) 135971d10453SEric Joyner #define ICE_PHY_TYPE_LOW_40GBASE_KR4 BIT_ULL(33) 136071d10453SEric Joyner #define ICE_PHY_TYPE_LOW_40G_XLAUI_AOC_ACC BIT_ULL(34) 136171d10453SEric Joyner #define ICE_PHY_TYPE_LOW_40G_XLAUI BIT_ULL(35) 136271d10453SEric Joyner #define ICE_PHY_TYPE_LOW_50GBASE_CR2 BIT_ULL(36) 136371d10453SEric Joyner #define ICE_PHY_TYPE_LOW_50GBASE_SR2 BIT_ULL(37) 136471d10453SEric Joyner #define ICE_PHY_TYPE_LOW_50GBASE_LR2 BIT_ULL(38) 136571d10453SEric Joyner #define ICE_PHY_TYPE_LOW_50GBASE_KR2 BIT_ULL(39) 136671d10453SEric Joyner #define ICE_PHY_TYPE_LOW_50G_LAUI2_AOC_ACC BIT_ULL(40) 136771d10453SEric Joyner #define ICE_PHY_TYPE_LOW_50G_LAUI2 BIT_ULL(41) 136871d10453SEric Joyner #define ICE_PHY_TYPE_LOW_50G_AUI2_AOC_ACC BIT_ULL(42) 136971d10453SEric Joyner #define ICE_PHY_TYPE_LOW_50G_AUI2 BIT_ULL(43) 137071d10453SEric Joyner #define ICE_PHY_TYPE_LOW_50GBASE_CP BIT_ULL(44) 137171d10453SEric Joyner #define ICE_PHY_TYPE_LOW_50GBASE_SR BIT_ULL(45) 137271d10453SEric Joyner #define ICE_PHY_TYPE_LOW_50GBASE_FR BIT_ULL(46) 137371d10453SEric Joyner #define ICE_PHY_TYPE_LOW_50GBASE_LR BIT_ULL(47) 137471d10453SEric Joyner #define ICE_PHY_TYPE_LOW_50GBASE_KR_PAM4 BIT_ULL(48) 137571d10453SEric Joyner #define ICE_PHY_TYPE_LOW_50G_AUI1_AOC_ACC BIT_ULL(49) 137671d10453SEric Joyner #define ICE_PHY_TYPE_LOW_50G_AUI1 BIT_ULL(50) 137771d10453SEric Joyner #define ICE_PHY_TYPE_LOW_100GBASE_CR4 BIT_ULL(51) 137871d10453SEric Joyner #define ICE_PHY_TYPE_LOW_100GBASE_SR4 BIT_ULL(52) 137971d10453SEric Joyner #define ICE_PHY_TYPE_LOW_100GBASE_LR4 BIT_ULL(53) 138071d10453SEric Joyner #define ICE_PHY_TYPE_LOW_100GBASE_KR4 BIT_ULL(54) 138171d10453SEric Joyner #define ICE_PHY_TYPE_LOW_100G_CAUI4_AOC_ACC BIT_ULL(55) 138271d10453SEric Joyner #define ICE_PHY_TYPE_LOW_100G_CAUI4 BIT_ULL(56) 138371d10453SEric Joyner #define ICE_PHY_TYPE_LOW_100G_AUI4_AOC_ACC BIT_ULL(57) 138471d10453SEric Joyner #define ICE_PHY_TYPE_LOW_100G_AUI4 BIT_ULL(58) 138571d10453SEric Joyner #define ICE_PHY_TYPE_LOW_100GBASE_CR_PAM4 BIT_ULL(59) 138671d10453SEric Joyner #define ICE_PHY_TYPE_LOW_100GBASE_KR_PAM4 BIT_ULL(60) 138771d10453SEric Joyner #define ICE_PHY_TYPE_LOW_100GBASE_CP2 BIT_ULL(61) 138871d10453SEric Joyner #define ICE_PHY_TYPE_LOW_100GBASE_SR2 BIT_ULL(62) 138971d10453SEric Joyner #define ICE_PHY_TYPE_LOW_100GBASE_DR BIT_ULL(63) 139071d10453SEric Joyner #define ICE_PHY_TYPE_LOW_MAX_INDEX 63 139171d10453SEric Joyner /* The second set of defines is for phy_type_high. */ 139271d10453SEric Joyner #define ICE_PHY_TYPE_HIGH_100GBASE_KR2_PAM4 BIT_ULL(0) 139371d10453SEric Joyner #define ICE_PHY_TYPE_HIGH_100G_CAUI2_AOC_ACC BIT_ULL(1) 139471d10453SEric Joyner #define ICE_PHY_TYPE_HIGH_100G_CAUI2 BIT_ULL(2) 139571d10453SEric Joyner #define ICE_PHY_TYPE_HIGH_100G_AUI2_AOC_ACC BIT_ULL(3) 139671d10453SEric Joyner #define ICE_PHY_TYPE_HIGH_100G_AUI2 BIT_ULL(4) 1397*f2635e84SEric Joyner #define ICE_PHY_TYPE_HIGH_200G_CR4_PAM4 BIT_ULL(5) 1398*f2635e84SEric Joyner #define ICE_PHY_TYPE_HIGH_200G_SR4 BIT_ULL(6) 1399*f2635e84SEric Joyner #define ICE_PHY_TYPE_HIGH_200G_FR4 BIT_ULL(7) 1400*f2635e84SEric Joyner #define ICE_PHY_TYPE_HIGH_200G_LR4 BIT_ULL(8) 1401*f2635e84SEric Joyner #define ICE_PHY_TYPE_HIGH_200G_DR4 BIT_ULL(9) 1402*f2635e84SEric Joyner #define ICE_PHY_TYPE_HIGH_200G_KR4_PAM4 BIT_ULL(10) 1403*f2635e84SEric Joyner #define ICE_PHY_TYPE_HIGH_200G_AUI4_AOC_ACC BIT_ULL(11) 1404*f2635e84SEric Joyner #define ICE_PHY_TYPE_HIGH_200G_AUI4 BIT_ULL(12) 1405*f2635e84SEric Joyner #define ICE_PHY_TYPE_HIGH_200G_AUI8_AOC_ACC BIT_ULL(13) 1406*f2635e84SEric Joyner #define ICE_PHY_TYPE_HIGH_200G_AUI8 BIT_ULL(14) 1407*f2635e84SEric Joyner #define ICE_PHY_TYPE_HIGH_400GBASE_FR8 BIT_ULL(15) 1408*f2635e84SEric Joyner #define ICE_PHY_TYPE_HIGH_MAX_INDEX 15 140971d10453SEric Joyner 141071d10453SEric Joyner struct ice_aqc_get_phy_caps_data { 141171d10453SEric Joyner __le64 phy_type_low; /* Use values from ICE_PHY_TYPE_LOW_* */ 141271d10453SEric Joyner __le64 phy_type_high; /* Use values from ICE_PHY_TYPE_HIGH_* */ 141371d10453SEric Joyner u8 caps; 141471d10453SEric Joyner #define ICE_AQC_PHY_EN_TX_LINK_PAUSE BIT(0) 141571d10453SEric Joyner #define ICE_AQC_PHY_EN_RX_LINK_PAUSE BIT(1) 141671d10453SEric Joyner #define ICE_AQC_PHY_LOW_POWER_MODE BIT(2) 141771d10453SEric Joyner #define ICE_AQC_PHY_EN_LINK BIT(3) 141871d10453SEric Joyner #define ICE_AQC_PHY_AN_MODE BIT(4) 141971d10453SEric Joyner #define ICE_AQC_PHY_EN_MOD_QUAL BIT(5) 142071d10453SEric Joyner #define ICE_AQC_PHY_EN_LESM BIT(6) 142171d10453SEric Joyner #define ICE_AQC_PHY_EN_AUTO_FEC BIT(7) 142271d10453SEric Joyner #define ICE_AQC_PHY_CAPS_MASK MAKEMASK(0xff, 0) 142371d10453SEric Joyner u8 low_power_ctrl_an; 142471d10453SEric Joyner #define ICE_AQC_PHY_EN_D3COLD_LOW_POWER_AUTONEG BIT(0) 142571d10453SEric Joyner #define ICE_AQC_PHY_AN_EN_CLAUSE28 BIT(1) 142671d10453SEric Joyner #define ICE_AQC_PHY_AN_EN_CLAUSE73 BIT(2) 142771d10453SEric Joyner #define ICE_AQC_PHY_AN_EN_CLAUSE37 BIT(3) 142871d10453SEric Joyner __le16 eee_cap; 142971d10453SEric Joyner #define ICE_AQC_PHY_EEE_EN_100BASE_TX BIT(0) 143071d10453SEric Joyner #define ICE_AQC_PHY_EEE_EN_1000BASE_T BIT(1) 143171d10453SEric Joyner #define ICE_AQC_PHY_EEE_EN_10GBASE_T BIT(2) 143271d10453SEric Joyner #define ICE_AQC_PHY_EEE_EN_1000BASE_KX BIT(3) 143371d10453SEric Joyner #define ICE_AQC_PHY_EEE_EN_10GBASE_KR BIT(4) 143471d10453SEric Joyner #define ICE_AQC_PHY_EEE_EN_25GBASE_KR BIT(5) 143571d10453SEric Joyner #define ICE_AQC_PHY_EEE_EN_40GBASE_KR4 BIT(6) 143671d10453SEric Joyner #define ICE_AQC_PHY_EEE_EN_50GBASE_KR2 BIT(7) 143771d10453SEric Joyner #define ICE_AQC_PHY_EEE_EN_50GBASE_KR_PAM4 BIT(8) 143871d10453SEric Joyner #define ICE_AQC_PHY_EEE_EN_100GBASE_KR4 BIT(9) 143971d10453SEric Joyner #define ICE_AQC_PHY_EEE_EN_100GBASE_KR2_PAM4 BIT(10) 144071d10453SEric Joyner __le16 eeer_value; 144171d10453SEric Joyner u8 phy_id_oui[4]; /* PHY/Module ID connected on the port */ 144271d10453SEric Joyner u8 phy_fw_ver[8]; 144371d10453SEric Joyner u8 link_fec_options; 144471d10453SEric Joyner #define ICE_AQC_PHY_FEC_10G_KR_40G_KR4_EN BIT(0) 144571d10453SEric Joyner #define ICE_AQC_PHY_FEC_10G_KR_40G_KR4_REQ BIT(1) 144671d10453SEric Joyner #define ICE_AQC_PHY_FEC_25G_RS_528_REQ BIT(2) 144771d10453SEric Joyner #define ICE_AQC_PHY_FEC_25G_KR_REQ BIT(3) 144871d10453SEric Joyner #define ICE_AQC_PHY_FEC_25G_RS_544_REQ BIT(4) 14498923de59SPiotr Kubaj #define ICE_AQC_PHY_FEC_DIS BIT(5) 145071d10453SEric Joyner #define ICE_AQC_PHY_FEC_25G_RS_CLAUSE91_EN BIT(6) 145171d10453SEric Joyner #define ICE_AQC_PHY_FEC_25G_KR_CLAUSE74_EN BIT(7) 145271d10453SEric Joyner #define ICE_AQC_PHY_FEC_MASK MAKEMASK(0xdf, 0) 145371d10453SEric Joyner u8 module_compliance_enforcement; 145471d10453SEric Joyner #define ICE_AQC_MOD_ENFORCE_STRICT_MODE BIT(0) 145571d10453SEric Joyner u8 extended_compliance_code; 145671d10453SEric Joyner #define ICE_MODULE_TYPE_TOTAL_BYTE 3 145771d10453SEric Joyner u8 module_type[ICE_MODULE_TYPE_TOTAL_BYTE]; 145871d10453SEric Joyner #define ICE_AQC_MOD_TYPE_BYTE0_SFP_PLUS 0xA0 145971d10453SEric Joyner #define ICE_AQC_MOD_TYPE_BYTE0_QSFP_PLUS 0x80 14607d7af7f8SEric Joyner #define ICE_AQC_MOD_TYPE_IDENT 1 146171d10453SEric Joyner #define ICE_AQC_MOD_TYPE_BYTE1_SFP_PLUS_CU_PASSIVE BIT(0) 146271d10453SEric Joyner #define ICE_AQC_MOD_TYPE_BYTE1_SFP_PLUS_CU_ACTIVE BIT(1) 146371d10453SEric Joyner #define ICE_AQC_MOD_TYPE_BYTE1_10G_BASE_SR BIT(4) 146471d10453SEric Joyner #define ICE_AQC_MOD_TYPE_BYTE1_10G_BASE_LR BIT(5) 146571d10453SEric Joyner #define ICE_AQC_MOD_TYPE_BYTE1_10G_BASE_LRM BIT(6) 146671d10453SEric Joyner #define ICE_AQC_MOD_TYPE_BYTE1_10G_BASE_ER BIT(7) 146771d10453SEric Joyner #define ICE_AQC_MOD_TYPE_BYTE2_SFP_PLUS 0xA0 146871d10453SEric Joyner #define ICE_AQC_MOD_TYPE_BYTE2_QSFP_PLUS 0x86 146971d10453SEric Joyner u8 qualified_module_count; 147071d10453SEric Joyner u8 rsvd2[7]; /* Bytes 47:41 reserved */ 147171d10453SEric Joyner #define ICE_AQC_QUAL_MOD_COUNT_MAX 16 147271d10453SEric Joyner struct { 147371d10453SEric Joyner u8 v_oui[3]; 147471d10453SEric Joyner u8 rsvd3; 147571d10453SEric Joyner u8 v_part[16]; 147671d10453SEric Joyner __le32 v_rev; 147771d10453SEric Joyner __le64 rsvd4; 147871d10453SEric Joyner } qual_modules[ICE_AQC_QUAL_MOD_COUNT_MAX]; 147971d10453SEric Joyner }; 148071d10453SEric Joyner 148171d10453SEric Joyner /* Set PHY capabilities (direct 0x0601) 148271d10453SEric Joyner * NOTE: This command must be followed by setup link and restart auto-neg 148371d10453SEric Joyner */ 148471d10453SEric Joyner struct ice_aqc_set_phy_cfg { 148571d10453SEric Joyner u8 lport_num; 148671d10453SEric Joyner u8 reserved[7]; 148771d10453SEric Joyner __le32 addr_high; 148871d10453SEric Joyner __le32 addr_low; 148971d10453SEric Joyner }; 149071d10453SEric Joyner 149171d10453SEric Joyner /* Set PHY config command data structure */ 149271d10453SEric Joyner struct ice_aqc_set_phy_cfg_data { 149371d10453SEric Joyner __le64 phy_type_low; /* Use values from ICE_PHY_TYPE_LOW_* */ 149471d10453SEric Joyner __le64 phy_type_high; /* Use values from ICE_PHY_TYPE_HIGH_* */ 149571d10453SEric Joyner u8 caps; 149671d10453SEric Joyner #define ICE_AQ_PHY_ENA_VALID_MASK MAKEMASK(0xef, 0) 149771d10453SEric Joyner #define ICE_AQ_PHY_ENA_TX_PAUSE_ABILITY BIT(0) 149871d10453SEric Joyner #define ICE_AQ_PHY_ENA_RX_PAUSE_ABILITY BIT(1) 149971d10453SEric Joyner #define ICE_AQ_PHY_ENA_LOW_POWER BIT(2) 150071d10453SEric Joyner #define ICE_AQ_PHY_ENA_LINK BIT(3) 150171d10453SEric Joyner #define ICE_AQ_PHY_ENA_AUTO_LINK_UPDT BIT(5) 150271d10453SEric Joyner #define ICE_AQ_PHY_ENA_LESM BIT(6) 150371d10453SEric Joyner #define ICE_AQ_PHY_ENA_AUTO_FEC BIT(7) 150471d10453SEric Joyner u8 low_power_ctrl_an; 150571d10453SEric Joyner __le16 eee_cap; /* Value from ice_aqc_get_phy_caps */ 150671d10453SEric Joyner __le16 eeer_value; 150771d10453SEric Joyner u8 link_fec_opt; /* Use defines from ice_aqc_get_phy_caps */ 150871d10453SEric Joyner u8 module_compliance_enforcement; 150971d10453SEric Joyner }; 151071d10453SEric Joyner 151171d10453SEric Joyner /* Set MAC Config command data structure (direct 0x0603) */ 151271d10453SEric Joyner struct ice_aqc_set_mac_cfg { 151371d10453SEric Joyner __le16 max_frame_size; 151471d10453SEric Joyner u8 params; 151571d10453SEric Joyner #define ICE_AQ_SET_MAC_PACE_S 3 151671d10453SEric Joyner #define ICE_AQ_SET_MAC_PACE_M (0xF << ICE_AQ_SET_MAC_PACE_S) 151771d10453SEric Joyner #define ICE_AQ_SET_MAC_PACE_TYPE_M BIT(7) 151871d10453SEric Joyner #define ICE_AQ_SET_MAC_PACE_TYPE_RATE 0 151971d10453SEric Joyner #define ICE_AQ_SET_MAC_PACE_TYPE_FIXED ICE_AQ_SET_MAC_PACE_TYPE_M 152071d10453SEric Joyner u8 tx_tmr_priority; 152171d10453SEric Joyner __le16 tx_tmr_value; 152271d10453SEric Joyner __le16 fc_refresh_threshold; 152371d10453SEric Joyner u8 drop_opts; 152471d10453SEric Joyner #define ICE_AQ_SET_MAC_AUTO_DROP_MASK BIT(0) 152571d10453SEric Joyner #define ICE_AQ_SET_MAC_AUTO_DROP_NONE 0 152671d10453SEric Joyner #define ICE_AQ_SET_MAC_AUTO_DROP_BLOCKING_PKTS BIT(0) 152771d10453SEric Joyner u8 reserved[7]; 152871d10453SEric Joyner }; 152971d10453SEric Joyner 153071d10453SEric Joyner /* Restart AN command data structure (direct 0x0605) 153171d10453SEric Joyner * Also used for response, with only the lport_num field present. 153271d10453SEric Joyner */ 153371d10453SEric Joyner struct ice_aqc_restart_an { 153471d10453SEric Joyner u8 lport_num; 153571d10453SEric Joyner u8 reserved; 153671d10453SEric Joyner u8 cmd_flags; 153771d10453SEric Joyner #define ICE_AQC_RESTART_AN_LINK_RESTART BIT(1) 153871d10453SEric Joyner #define ICE_AQC_RESTART_AN_LINK_ENABLE BIT(2) 153971d10453SEric Joyner u8 reserved2[13]; 154071d10453SEric Joyner }; 154171d10453SEric Joyner 154271d10453SEric Joyner /* Get link status (indirect 0x0607), also used for Link Status Event */ 154371d10453SEric Joyner struct ice_aqc_get_link_status { 154471d10453SEric Joyner u8 lport_num; 154571d10453SEric Joyner u8 reserved; 154671d10453SEric Joyner __le16 cmd_flags; 154771d10453SEric Joyner #define ICE_AQ_LSE_M 0x3 154871d10453SEric Joyner #define ICE_AQ_LSE_NOP 0x0 154971d10453SEric Joyner #define ICE_AQ_LSE_DIS 0x2 155071d10453SEric Joyner #define ICE_AQ_LSE_ENA 0x3 155171d10453SEric Joyner /* only response uses this flag */ 155271d10453SEric Joyner #define ICE_AQ_LSE_IS_ENABLED 0x1 155371d10453SEric Joyner __le32 reserved2; 155471d10453SEric Joyner __le32 addr_high; 155571d10453SEric Joyner __le32 addr_low; 155671d10453SEric Joyner }; 155771d10453SEric Joyner 15588923de59SPiotr Kubaj enum ice_get_link_status_data_version { 15598923de59SPiotr Kubaj ICE_GET_LINK_STATUS_DATA_V1 = 1, 1560*f2635e84SEric Joyner ICE_GET_LINK_STATUS_DATA_V2 = 2, 15618923de59SPiotr Kubaj }; 15628923de59SPiotr Kubaj 15638923de59SPiotr Kubaj #define ICE_GET_LINK_STATUS_DATALEN_V1 32 1564*f2635e84SEric Joyner #define ICE_GET_LINK_STATUS_DATALEN_V2 56 15658923de59SPiotr Kubaj 156671d10453SEric Joyner /* Get link status response data structure, also used for Link Status Event */ 1567*f2635e84SEric Joyner #pragma pack(1) 156871d10453SEric Joyner struct ice_aqc_get_link_status_data { 156971d10453SEric Joyner u8 topo_media_conflict; 157071d10453SEric Joyner #define ICE_AQ_LINK_TOPO_CONFLICT BIT(0) 157171d10453SEric Joyner #define ICE_AQ_LINK_MEDIA_CONFLICT BIT(1) 157271d10453SEric Joyner #define ICE_AQ_LINK_TOPO_CORRUPT BIT(2) 157371d10453SEric Joyner #define ICE_AQ_LINK_TOPO_UNREACH_PRT BIT(4) 157471d10453SEric Joyner #define ICE_AQ_LINK_TOPO_UNDRUTIL_PRT BIT(5) 157571d10453SEric Joyner #define ICE_AQ_LINK_TOPO_UNDRUTIL_MEDIA BIT(6) 157671d10453SEric Joyner #define ICE_AQ_LINK_TOPO_UNSUPP_MEDIA BIT(7) 157771d10453SEric Joyner u8 link_cfg_err; 157871d10453SEric Joyner #define ICE_AQ_LINK_CFG_ERR BIT(0) 15797d7af7f8SEric Joyner #define ICE_AQ_LINK_ACT_PORT_OPT_INVAL BIT(2) 15807d7af7f8SEric Joyner #define ICE_AQ_LINK_FEAT_ID_OR_CONFIG_ID_INVAL BIT(3) 15817d7af7f8SEric Joyner #define ICE_AQ_LINK_TOPO_CRITICAL_SDP_ERR BIT(4) 1582d08b8680SEric Joyner #define ICE_AQ_LINK_MODULE_POWER_UNSUPPORTED BIT(5) 15839cf1841cSEric Joyner #define ICE_AQ_LINK_EXTERNAL_PHY_LOAD_FAILURE BIT(6) 15849cf1841cSEric Joyner #define ICE_AQ_LINK_INVAL_MAX_POWER_LIMIT BIT(7) 158571d10453SEric Joyner u8 link_info; 158671d10453SEric Joyner #define ICE_AQ_LINK_UP BIT(0) /* Link Status */ 158771d10453SEric Joyner #define ICE_AQ_LINK_FAULT BIT(1) 158871d10453SEric Joyner #define ICE_AQ_LINK_FAULT_TX BIT(2) 158971d10453SEric Joyner #define ICE_AQ_LINK_FAULT_RX BIT(3) 159071d10453SEric Joyner #define ICE_AQ_LINK_FAULT_REMOTE BIT(4) 159171d10453SEric Joyner #define ICE_AQ_LINK_UP_PORT BIT(5) /* External Port Link Status */ 159271d10453SEric Joyner #define ICE_AQ_MEDIA_AVAILABLE BIT(6) 159371d10453SEric Joyner #define ICE_AQ_SIGNAL_DETECT BIT(7) 159471d10453SEric Joyner u8 an_info; 159571d10453SEric Joyner #define ICE_AQ_AN_COMPLETED BIT(0) 159671d10453SEric Joyner #define ICE_AQ_LP_AN_ABILITY BIT(1) 159771d10453SEric Joyner #define ICE_AQ_PD_FAULT BIT(2) /* Parallel Detection Fault */ 159871d10453SEric Joyner #define ICE_AQ_FEC_EN BIT(3) 159971d10453SEric Joyner #define ICE_AQ_PHY_LOW_POWER BIT(4) /* Low Power State */ 160071d10453SEric Joyner #define ICE_AQ_LINK_PAUSE_TX BIT(5) 160171d10453SEric Joyner #define ICE_AQ_LINK_PAUSE_RX BIT(6) 160271d10453SEric Joyner #define ICE_AQ_QUALIFIED_MODULE BIT(7) 160371d10453SEric Joyner u8 ext_info; 160471d10453SEric Joyner #define ICE_AQ_LINK_PHY_TEMP_ALARM BIT(0) 160571d10453SEric Joyner #define ICE_AQ_LINK_EXCESSIVE_ERRORS BIT(1) /* Excessive Link Errors */ 160671d10453SEric Joyner /* Port Tx Suspended */ 160771d10453SEric Joyner #define ICE_AQ_LINK_TX_S 2 160871d10453SEric Joyner #define ICE_AQ_LINK_TX_M (0x03 << ICE_AQ_LINK_TX_S) 160971d10453SEric Joyner #define ICE_AQ_LINK_TX_ACTIVE 0 161071d10453SEric Joyner #define ICE_AQ_LINK_TX_DRAINED 1 161171d10453SEric Joyner #define ICE_AQ_LINK_TX_FLUSHED 3 161271d10453SEric Joyner u8 lb_status; 161371d10453SEric Joyner #define ICE_AQ_LINK_LB_PHY_LCL BIT(0) 161471d10453SEric Joyner #define ICE_AQ_LINK_LB_PHY_RMT BIT(1) 161571d10453SEric Joyner #define ICE_AQ_LINK_LB_MAC_LCL BIT(2) 161671d10453SEric Joyner #define ICE_AQ_LINK_LB_PHY_IDX_S 3 161771d10453SEric Joyner #define ICE_AQ_LINK_LB_PHY_IDX_M (0x7 << ICE_AQ_LB_PHY_IDX_S) 161871d10453SEric Joyner __le16 max_frame_size; 161971d10453SEric Joyner u8 cfg; 162071d10453SEric Joyner #define ICE_AQ_LINK_25G_KR_FEC_EN BIT(0) 162171d10453SEric Joyner #define ICE_AQ_LINK_25G_RS_528_FEC_EN BIT(1) 162271d10453SEric Joyner #define ICE_AQ_LINK_25G_RS_544_FEC_EN BIT(2) 162371d10453SEric Joyner #define ICE_AQ_FEC_MASK MAKEMASK(0x7, 0) 162471d10453SEric Joyner /* Pacing Config */ 162571d10453SEric Joyner #define ICE_AQ_CFG_PACING_S 3 162671d10453SEric Joyner #define ICE_AQ_CFG_PACING_M (0xF << ICE_AQ_CFG_PACING_S) 162771d10453SEric Joyner #define ICE_AQ_CFG_PACING_TYPE_M BIT(7) 162871d10453SEric Joyner #define ICE_AQ_CFG_PACING_TYPE_AVG 0 162971d10453SEric Joyner #define ICE_AQ_CFG_PACING_TYPE_FIXED ICE_AQ_CFG_PACING_TYPE_M 163071d10453SEric Joyner /* External Device Power Ability */ 163171d10453SEric Joyner u8 power_desc; 1632d08b8680SEric Joyner #define ICE_AQ_PWR_CLASS_M 0x3F 163371d10453SEric Joyner #define ICE_AQ_LINK_PWR_BASET_LOW_HIGH 0 163471d10453SEric Joyner #define ICE_AQ_LINK_PWR_BASET_HIGH 1 163571d10453SEric Joyner #define ICE_AQ_LINK_PWR_QSFP_CLASS_1 0 163671d10453SEric Joyner #define ICE_AQ_LINK_PWR_QSFP_CLASS_2 1 163771d10453SEric Joyner #define ICE_AQ_LINK_PWR_QSFP_CLASS_3 2 163871d10453SEric Joyner #define ICE_AQ_LINK_PWR_QSFP_CLASS_4 3 163971d10453SEric Joyner __le16 link_speed; 1640*f2635e84SEric Joyner #define ICE_AQ_LINK_SPEED_M 0xFFF 164171d10453SEric Joyner #define ICE_AQ_LINK_SPEED_10MB BIT(0) 164271d10453SEric Joyner #define ICE_AQ_LINK_SPEED_100MB BIT(1) 164371d10453SEric Joyner #define ICE_AQ_LINK_SPEED_1000MB BIT(2) 164471d10453SEric Joyner #define ICE_AQ_LINK_SPEED_2500MB BIT(3) 164571d10453SEric Joyner #define ICE_AQ_LINK_SPEED_5GB BIT(4) 164671d10453SEric Joyner #define ICE_AQ_LINK_SPEED_10GB BIT(5) 164771d10453SEric Joyner #define ICE_AQ_LINK_SPEED_20GB BIT(6) 164871d10453SEric Joyner #define ICE_AQ_LINK_SPEED_25GB BIT(7) 164971d10453SEric Joyner #define ICE_AQ_LINK_SPEED_40GB BIT(8) 165071d10453SEric Joyner #define ICE_AQ_LINK_SPEED_50GB BIT(9) 165171d10453SEric Joyner #define ICE_AQ_LINK_SPEED_100GB BIT(10) 1652*f2635e84SEric Joyner #define ICE_AQ_LINK_SPEED_200GB BIT(11) 165371d10453SEric Joyner #define ICE_AQ_LINK_SPEED_UNKNOWN BIT(15) 1654*f2635e84SEric Joyner __le16 reserved3; /* Aligns next field to 8-byte boundary */ 1655*f2635e84SEric Joyner u8 ext_fec_status; 1656*f2635e84SEric Joyner #define ICE_AQ_LINK_RS_272_FEC_EN BIT(0) /* RS 272 FEC enabled */ 1657*f2635e84SEric Joyner u8 reserved4; 165871d10453SEric Joyner __le64 phy_type_low; /* Use values from ICE_PHY_TYPE_LOW_* */ 165971d10453SEric Joyner __le64 phy_type_high; /* Use values from ICE_PHY_TYPE_HIGH_* */ 1660*f2635e84SEric Joyner /* Get link status version 2 link partner data */ 1661*f2635e84SEric Joyner __le64 lp_phy_type_low; /* Use values from ICE_PHY_TYPE_LOW_* */ 1662*f2635e84SEric Joyner __le64 lp_phy_type_high; /* Use values from ICE_PHY_TYPE_HIGH_* */ 1663*f2635e84SEric Joyner u8 lp_fec_adv; 1664*f2635e84SEric Joyner #define ICE_AQ_LINK_LP_10G_KR_FEC_CAP BIT(0) 1665*f2635e84SEric Joyner #define ICE_AQ_LINK_LP_25G_KR_FEC_CAP BIT(1) 1666*f2635e84SEric Joyner #define ICE_AQ_LINK_LP_RS_528_FEC_CAP BIT(2) 1667*f2635e84SEric Joyner #define ICE_AQ_LINK_LP_50G_KR_272_FEC_CAP BIT(3) 1668*f2635e84SEric Joyner #define ICE_AQ_LINK_LP_100G_KR_272_FEC_CAP BIT(4) 1669*f2635e84SEric Joyner #define ICE_AQ_LINK_LP_200G_KR_272_FEC_CAP BIT(5) 1670*f2635e84SEric Joyner u8 lp_fec_req; 1671*f2635e84SEric Joyner #define ICE_AQ_LINK_LP_10G_KR_FEC_REQ BIT(0) 1672*f2635e84SEric Joyner #define ICE_AQ_LINK_LP_25G_KR_FEC_REQ BIT(1) 1673*f2635e84SEric Joyner #define ICE_AQ_LINK_LP_RS_528_FEC_REQ BIT(2) 1674*f2635e84SEric Joyner #define ICE_AQ_LINK_LP_KR_272_FEC_REQ BIT(3) 1675*f2635e84SEric Joyner u8 lp_flowcontrol; 1676*f2635e84SEric Joyner #define ICE_AQ_LINK_LP_PAUSE_ADV BIT(0) 1677*f2635e84SEric Joyner #define ICE_AQ_LINK_LP_ASM_DIR_ADV BIT(1) 1678*f2635e84SEric Joyner u8 reserved[5]; 167971d10453SEric Joyner }; 168071d10453SEric Joyner 1681*f2635e84SEric Joyner #pragma pack() 1682*f2635e84SEric Joyner 168371d10453SEric Joyner /* Set event mask command (direct 0x0613) */ 168471d10453SEric Joyner struct ice_aqc_set_event_mask { 168571d10453SEric Joyner u8 lport_num; 168671d10453SEric Joyner u8 reserved[7]; 168771d10453SEric Joyner __le16 event_mask; 168871d10453SEric Joyner #define ICE_AQ_LINK_EVENT_UPDOWN BIT(1) 168971d10453SEric Joyner #define ICE_AQ_LINK_EVENT_MEDIA_NA BIT(2) 169071d10453SEric Joyner #define ICE_AQ_LINK_EVENT_LINK_FAULT BIT(3) 169171d10453SEric Joyner #define ICE_AQ_LINK_EVENT_PHY_TEMP_ALARM BIT(4) 169271d10453SEric Joyner #define ICE_AQ_LINK_EVENT_EXCESSIVE_ERRORS BIT(5) 169371d10453SEric Joyner #define ICE_AQ_LINK_EVENT_SIGNAL_DETECT BIT(6) 169471d10453SEric Joyner #define ICE_AQ_LINK_EVENT_AN_COMPLETED BIT(7) 169571d10453SEric Joyner #define ICE_AQ_LINK_EVENT_MODULE_QUAL_FAIL BIT(8) 169671d10453SEric Joyner #define ICE_AQ_LINK_EVENT_PORT_TX_SUSPENDED BIT(9) 169771d10453SEric Joyner #define ICE_AQ_LINK_EVENT_TOPO_CONFLICT BIT(10) 169871d10453SEric Joyner #define ICE_AQ_LINK_EVENT_MEDIA_CONFLICT BIT(11) 169956429daeSEric Joyner #define ICE_AQ_LINK_EVENT_PHY_FW_LOAD_FAIL BIT(12) 170071d10453SEric Joyner u8 reserved1[6]; 170171d10453SEric Joyner }; 170271d10453SEric Joyner 170371d10453SEric Joyner /* Set PHY Loopback command (direct 0x0619) */ 170471d10453SEric Joyner struct ice_aqc_set_phy_lb { 170571d10453SEric Joyner u8 lport_num; 170671d10453SEric Joyner u8 lport_num_valid; 170771d10453SEric Joyner #define ICE_AQ_PHY_LB_PORT_NUM_VALID BIT(0) 170871d10453SEric Joyner u8 phy_index; 170971d10453SEric Joyner u8 lb_mode; 171071d10453SEric Joyner #define ICE_AQ_PHY_LB_EN BIT(0) 171171d10453SEric Joyner #define ICE_AQ_PHY_LB_TYPE_M BIT(1) 171271d10453SEric Joyner #define ICE_AQ_PHY_LB_TYPE_LOCAL 0 171371d10453SEric Joyner #define ICE_AQ_PHY_LB_TYPE_REMOTE ICE_AQ_PHY_LB_TYPE_M 171471d10453SEric Joyner #define ICE_AQ_PHY_LB_LEVEL_M BIT(2) 171571d10453SEric Joyner #define ICE_AQ_PHY_LB_LEVEL_PMD 0 171671d10453SEric Joyner #define ICE_AQ_PHY_LB_LEVEL_PCS ICE_AQ_PHY_LB_LEVEL_M 171771d10453SEric Joyner u8 reserved2[12]; 171871d10453SEric Joyner }; 171971d10453SEric Joyner 172071d10453SEric Joyner /* Set MAC Loopback command (direct 0x0620) */ 172171d10453SEric Joyner struct ice_aqc_set_mac_lb { 172271d10453SEric Joyner u8 lb_mode; 172371d10453SEric Joyner #define ICE_AQ_MAC_LB_EN BIT(0) 172471d10453SEric Joyner #define ICE_AQ_MAC_LB_OSC_CLK BIT(1) 172571d10453SEric Joyner u8 reserved[15]; 172671d10453SEric Joyner }; 172771d10453SEric Joyner 17289c30461dSEric Joyner /* Get sensor reading (direct 0x0632) */ 17299c30461dSEric Joyner struct ice_aqc_get_sensor_reading { 17309c30461dSEric Joyner u8 sensor; 17319c30461dSEric Joyner #define ICE_AQC_INT_TEMP_SENSOR 0x0 17329c30461dSEric Joyner u8 format; 17339c30461dSEric Joyner #define ICE_AQC_INT_TEMP_FORMAT 0x0 17349c30461dSEric Joyner u8 reserved[6]; 17359c30461dSEric Joyner __le32 addr_high; 17369c30461dSEric Joyner __le32 addr_low; 17379c30461dSEric Joyner }; 17389c30461dSEric Joyner 17399c30461dSEric Joyner /* Get sensor reading response (direct 0x0632) */ 17409c30461dSEric Joyner struct ice_aqc_get_sensor_reading_resp { 17419c30461dSEric Joyner union { 17429c30461dSEric Joyner u8 raw[8]; 17439c30461dSEric Joyner /* Output data for sensor 0x00, format 0x00 */ 17449c30461dSEric Joyner struct { 17459c30461dSEric Joyner s8 temp; 17469c30461dSEric Joyner u8 temp_warning_threshold; 17479c30461dSEric Joyner u8 temp_critical_threshold; 17489c30461dSEric Joyner u8 temp_fatal_threshold; 17499c30461dSEric Joyner u8 reserved[4]; 17509c30461dSEric Joyner } s0f0; 17519c30461dSEric Joyner } data; 17529c30461dSEric Joyner }; 17539c30461dSEric Joyner 17547d7af7f8SEric Joyner /* DNL Get Status command (indirect 0x0680) 175571d10453SEric Joyner * Structure used for the response, the command uses the generic 175671d10453SEric Joyner * ice_aqc_generic struct to pass a buffer address to the FW. 175771d10453SEric Joyner */ 175871d10453SEric Joyner struct ice_aqc_dnl_get_status { 175971d10453SEric Joyner u8 ctx; 176071d10453SEric Joyner u8 status; 176171d10453SEric Joyner #define ICE_AQ_DNL_STATUS_IDLE 0x0 176271d10453SEric Joyner #define ICE_AQ_DNL_STATUS_RESERVED 0x1 176371d10453SEric Joyner #define ICE_AQ_DNL_STATUS_STOPPED 0x2 176471d10453SEric Joyner #define ICE_AQ_DNL_STATUS_FATAL 0x3 /* Fatal DNL engine error */ 176571d10453SEric Joyner #define ICE_AQ_DNL_SRC_S 3 176671d10453SEric Joyner #define ICE_AQ_DNL_SRC_M (0x3 << ICE_AQ_DNL_SRC_S) 176771d10453SEric Joyner #define ICE_AQ_DNL_SRC_NVM (0x0 << ICE_AQ_DNL_SRC_S) 176871d10453SEric Joyner #define ICE_AQ_DNL_SRC_NVM_SCRATCH (0x1 << ICE_AQ_DNL_SRC_S) 176971d10453SEric Joyner u8 stack_ptr; 177071d10453SEric Joyner #define ICE_AQ_DNL_ST_PTR_S 0x0 177171d10453SEric Joyner #define ICE_AQ_DNL_ST_PTR_M (0x7 << ICE_AQ_DNL_ST_PTR_S) 177271d10453SEric Joyner u8 engine_flags; 177371d10453SEric Joyner #define ICE_AQ_DNL_FLAGS_ERROR BIT(2) 177471d10453SEric Joyner #define ICE_AQ_DNL_FLAGS_NEGATIVE BIT(3) 177571d10453SEric Joyner #define ICE_AQ_DNL_FLAGS_OVERFLOW BIT(4) 177671d10453SEric Joyner #define ICE_AQ_DNL_FLAGS_ZERO BIT(5) 177771d10453SEric Joyner #define ICE_AQ_DNL_FLAGS_CARRY BIT(6) 177871d10453SEric Joyner #define ICE_AQ_DNL_FLAGS_JUMP BIT(7) 177971d10453SEric Joyner __le16 pc; 178071d10453SEric Joyner __le16 activity_id; 178171d10453SEric Joyner __le32 addr_high; 178271d10453SEric Joyner __le32 addr_low; 178371d10453SEric Joyner }; 178471d10453SEric Joyner 178571d10453SEric Joyner struct ice_aqc_dnl_get_status_data { 178671d10453SEric Joyner __le16 activity_err_code; 178771d10453SEric Joyner __le16 act_err_code; 178871d10453SEric Joyner #define ICE_AQ_DNL_ACT_ERR_SUCCESS 0x0000 /* no error */ 178971d10453SEric Joyner #define ICE_AQ_DNL_ACT_ERR_PARSE 0x8001 /* NVM parse error */ 179071d10453SEric Joyner #define ICE_AQ_DNL_ACT_ERR_UNSUPPORTED 0x8002 /* unsupported action */ 179171d10453SEric Joyner #define ICE_AQ_DNL_ACT_ERR_NOT_FOUND 0x8003 /* activity not found */ 179271d10453SEric Joyner #define ICE_AQ_DNL_ACT_ERR_BAD_JUMP 0x8004 /* an illegal jump */ 179371d10453SEric Joyner #define ICE_AQ_DNL_ACT_ERR_PSTO_OVER 0x8005 /* persistent store overflow */ 179471d10453SEric Joyner #define ICE_AQ_DNL_ACT_ERR_ST_OVERFLOW 0x8006 /* stack overflow */ 179571d10453SEric Joyner #define ICE_AQ_DNL_ACT_ERR_TIMEOUT 0x8007 /* activity timeout */ 179671d10453SEric Joyner #define ICE_AQ_DNL_ACT_ERR_BREAK 0x0008 /* stopped at breakpoint */ 179771d10453SEric Joyner #define ICE_AQ_DNL_ACT_ERR_INVAL_ARG 0x0101 /* invalid action argument */ 179871d10453SEric Joyner __le32 execution_time; /* in nanoseconds */ 179971d10453SEric Joyner __le16 lib_ver; 180071d10453SEric Joyner u8 psto_local_sz; 180171d10453SEric Joyner u8 psto_global_sz; 180271d10453SEric Joyner u8 stack_sz; 180371d10453SEric Joyner #define ICE_AQ_DNL_STACK_SZ_S 0 180471d10453SEric Joyner #define ICE_AQ_DNL_STACK_SZ_M (0xF << ICE_AQ_DNL_STACK_SZ_S) 180571d10453SEric Joyner u8 port_count; 180671d10453SEric Joyner #define ICE_AQ_DNL_PORT_CNT_S 0 180771d10453SEric Joyner #define ICE_AQ_DNL_PORT_CNT_M (0x1F << ICE_AQ_DNL_PORT_CNT_S) 180871d10453SEric Joyner __le16 act_cache_cntr; 180971d10453SEric Joyner u32 i2c_clk_cntr; 181071d10453SEric Joyner u32 mdio_clk_cntr; 181171d10453SEric Joyner u32 sb_iosf_clk_cntr; 181271d10453SEric Joyner }; 181371d10453SEric Joyner 18147d7af7f8SEric Joyner /* DNL run command (direct 0x0681) */ 181571d10453SEric Joyner struct ice_aqc_dnl_run_command { 181671d10453SEric Joyner u8 reserved0; 181771d10453SEric Joyner u8 command; 181871d10453SEric Joyner #define ICE_AQ_DNL_CMD_S 0 181971d10453SEric Joyner #define ICE_AQ_DNL_CMD_M (0x7 << ICE_AQ_DNL_CMD_S) 182071d10453SEric Joyner #define ICE_AQ_DNL_CMD_RESET 0x0 182171d10453SEric Joyner #define ICE_AQ_DNL_CMD_RUN 0x1 182271d10453SEric Joyner #define ICE_AQ_DNL_CMD_STEP 0x3 182371d10453SEric Joyner #define ICE_AQ_DNL_CMD_ABORT 0x4 182471d10453SEric Joyner #define ICE_AQ_DNL_CMD_SET_PC 0x7 182571d10453SEric Joyner #define ICE_AQ_DNL_CMD_SRC_S 3 182671d10453SEric Joyner #define ICE_AQ_DNL_CMD_SRC_M (0x3 << ICE_AQ_DNL_CMD_SRC_S) 182771d10453SEric Joyner #define ICE_AQ_DNL_CMD_SRC_DNL 0x0 182871d10453SEric Joyner #define ICE_AQ_DNL_CMD_SRC_SCRATCH 0x1 182971d10453SEric Joyner __le16 new_pc; 183071d10453SEric Joyner u8 reserved1[12]; 183171d10453SEric Joyner }; 183271d10453SEric Joyner 18337d7af7f8SEric Joyner /* DNL call command (indirect 0x0682) 183471d10453SEric Joyner * Struct is used for both command and response 183571d10453SEric Joyner */ 183671d10453SEric Joyner struct ice_aqc_dnl_call_command { 183771d10453SEric Joyner u8 ctx; /* Used in command, reserved in response */ 183871d10453SEric Joyner u8 reserved; 183971d10453SEric Joyner __le16 activity_id; 1840*f2635e84SEric Joyner #define ICE_AQC_ACT_ID_DNL 0x1129 184171d10453SEric Joyner __le32 reserved1; 184271d10453SEric Joyner __le32 addr_high; 184371d10453SEric Joyner __le32 addr_low; 184471d10453SEric Joyner }; 184571d10453SEric Joyner 1846*f2635e84SEric Joyner struct ice_aqc_dnl_equa_param { 1847*f2635e84SEric Joyner __le16 data_in; 1848*f2635e84SEric Joyner #define ICE_AQC_RX_EQU_SHIFT 8 1849*f2635e84SEric Joyner #define ICE_AQC_RX_EQU_PRE2 (0x10 << ICE_AQC_RX_EQU_SHIFT) 1850*f2635e84SEric Joyner #define ICE_AQC_RX_EQU_PRE1 (0x11 << ICE_AQC_RX_EQU_SHIFT) 1851*f2635e84SEric Joyner #define ICE_AQC_RX_EQU_POST1 (0x12 << ICE_AQC_RX_EQU_SHIFT) 1852*f2635e84SEric Joyner #define ICE_AQC_RX_EQU_BFLF (0x13 << ICE_AQC_RX_EQU_SHIFT) 1853*f2635e84SEric Joyner #define ICE_AQC_RX_EQU_BFHF (0x14 << ICE_AQC_RX_EQU_SHIFT) 1854*f2635e84SEric Joyner #define ICE_AQC_RX_EQU_DRATE (0x15 << ICE_AQC_RX_EQU_SHIFT) 1855*f2635e84SEric Joyner #define ICE_AQC_TX_EQU_PRE1 0x0 1856*f2635e84SEric Joyner #define ICE_AQC_TX_EQU_PRE3 0x3 1857*f2635e84SEric Joyner #define ICE_AQC_TX_EQU_ATTEN 0x4 1858*f2635e84SEric Joyner #define ICE_AQC_TX_EQU_POST1 0x8 1859*f2635e84SEric Joyner #define ICE_AQC_TX_EQU_PRE2 0xC 1860*f2635e84SEric Joyner __le16 op_code_serdes_sel; 1861*f2635e84SEric Joyner #define ICE_AQC_OP_CODE_SHIFT 4 1862*f2635e84SEric Joyner #define ICE_AQC_OP_CODE_RX_EQU (0x9 << ICE_AQC_OP_CODE_SHIFT) 1863*f2635e84SEric Joyner #define ICE_AQC_OP_CODE_TX_EQU (0x10 << ICE_AQC_OP_CODE_SHIFT) 1864*f2635e84SEric Joyner __le32 reserved[3]; 1865*f2635e84SEric Joyner }; 1866*f2635e84SEric Joyner 1867*f2635e84SEric Joyner struct ice_aqc_dnl_equa_resp { 1868*f2635e84SEric Joyner /* Equalization value can be -ve */ 1869*f2635e84SEric Joyner int val; 1870*f2635e84SEric Joyner __le32 reserved[3]; 1871*f2635e84SEric Joyner }; 1872*f2635e84SEric Joyner 18737d7af7f8SEric Joyner /* DNL call command/response buffer (indirect 0x0682) */ 187471d10453SEric Joyner struct ice_aqc_dnl_call { 1875*f2635e84SEric Joyner union { 1876*f2635e84SEric Joyner struct ice_aqc_dnl_equa_param txrx_equa_reqs; 187771d10453SEric Joyner __le32 stores[4]; 1878*f2635e84SEric Joyner struct ice_aqc_dnl_equa_resp txrx_equa_resp; 1879*f2635e84SEric Joyner } sto; 188071d10453SEric Joyner }; 188171d10453SEric Joyner 188271d10453SEric Joyner /* Used for both commands: 18837d7af7f8SEric Joyner * DNL read sto command (indirect 0x0683) 18847d7af7f8SEric Joyner * DNL write sto command (indirect 0x0684) 188571d10453SEric Joyner */ 188671d10453SEric Joyner struct ice_aqc_dnl_read_write_command { 188771d10453SEric Joyner u8 ctx; 188871d10453SEric Joyner u8 sto_sel; /* STORE select */ 188971d10453SEric Joyner #define ICE_AQC_DNL_STORE_SELECT_STORE 0x0 189071d10453SEric Joyner #define ICE_AQC_DNL_STORE_SELECT_PSTO 0x1 189171d10453SEric Joyner #define ICE_AQC_DNL_STORE_SELECT_STACK 0x2 189271d10453SEric Joyner __le16 offset; 189371d10453SEric Joyner __le32 data; /* Used for write sto only */ 189471d10453SEric Joyner __le32 addr_high; /* Used for read sto only */ 189571d10453SEric Joyner __le32 addr_low; /* Used for read sto only */ 189671d10453SEric Joyner }; 189771d10453SEric Joyner 189871d10453SEric Joyner /* Used for both command responses: 18997d7af7f8SEric Joyner * DNL read sto response (indirect 0x0683) 19007d7af7f8SEric Joyner * DNL write sto response (indirect 0x0684) 190171d10453SEric Joyner */ 190271d10453SEric Joyner struct ice_aqc_dnl_read_write_response { 190371d10453SEric Joyner u8 reserved; 190471d10453SEric Joyner u8 status; /* Reserved for read command */ 190571d10453SEric Joyner __le16 size; /* Reserved for write command */ 190671d10453SEric Joyner __le32 data; /* Reserved for write command */ 190771d10453SEric Joyner __le32 addr_high; /* Reserved for write command */ 190871d10453SEric Joyner __le32 addr_low; /* Reserved for write command */ 190971d10453SEric Joyner }; 191071d10453SEric Joyner 19117d7af7f8SEric Joyner /* DNL set breakpoints command (indirect 0x0686) */ 191271d10453SEric Joyner struct ice_aqc_dnl_set_breakpoints_command { 191371d10453SEric Joyner __le32 reserved[2]; 191471d10453SEric Joyner __le32 addr_high; 191571d10453SEric Joyner __le32 addr_low; 191671d10453SEric Joyner }; 191771d10453SEric Joyner 19187d7af7f8SEric Joyner /* DNL set breakpoints data buffer structure (indirect 0x0686) */ 191971d10453SEric Joyner struct ice_aqc_dnl_set_breakpoints { 192071d10453SEric Joyner u8 ctx; 192171d10453SEric Joyner u8 ena; /* 0- disabled, 1- enabled */ 192271d10453SEric Joyner __le16 offset; 192371d10453SEric Joyner __le16 activity_id; 192471d10453SEric Joyner }; 192571d10453SEric Joyner 19267d7af7f8SEric Joyner /* DNL read log data command(indirect 0x0687) */ 192771d10453SEric Joyner struct ice_aqc_dnl_read_log_command { 192871d10453SEric Joyner __le16 reserved0; 192971d10453SEric Joyner __le16 offset; 193071d10453SEric Joyner __le32 reserved1; 193171d10453SEric Joyner __le32 addr_high; 193271d10453SEric Joyner __le32 addr_low; 193371d10453SEric Joyner 193471d10453SEric Joyner }; 193571d10453SEric Joyner 19367d7af7f8SEric Joyner /* DNL read log data response(indirect 0x0687) */ 193771d10453SEric Joyner struct ice_aqc_dnl_read_log_response { 193871d10453SEric Joyner __le16 reserved; 193971d10453SEric Joyner __le16 size; 194071d10453SEric Joyner __le32 data; 194171d10453SEric Joyner __le32 addr_high; 194271d10453SEric Joyner __le32 addr_low; 194371d10453SEric Joyner 194471d10453SEric Joyner }; 194571d10453SEric Joyner 194656429daeSEric Joyner struct ice_aqc_link_topo_params { 194771d10453SEric Joyner u8 lport_num; 194871d10453SEric Joyner u8 lport_num_valid; 194971d10453SEric Joyner #define ICE_AQC_LINK_TOPO_PORT_NUM_VALID BIT(0) 195071d10453SEric Joyner u8 node_type_ctx; 195171d10453SEric Joyner #define ICE_AQC_LINK_TOPO_NODE_TYPE_S 0 195271d10453SEric Joyner #define ICE_AQC_LINK_TOPO_NODE_TYPE_M (0xF << ICE_AQC_LINK_TOPO_NODE_TYPE_S) 195371d10453SEric Joyner #define ICE_AQC_LINK_TOPO_NODE_TYPE_PHY 0 195471d10453SEric Joyner #define ICE_AQC_LINK_TOPO_NODE_TYPE_GPIO_CTRL 1 195571d10453SEric Joyner #define ICE_AQC_LINK_TOPO_NODE_TYPE_MUX_CTRL 2 195671d10453SEric Joyner #define ICE_AQC_LINK_TOPO_NODE_TYPE_LED_CTRL 3 195771d10453SEric Joyner #define ICE_AQC_LINK_TOPO_NODE_TYPE_LED 4 195871d10453SEric Joyner #define ICE_AQC_LINK_TOPO_NODE_TYPE_THERMAL 5 195971d10453SEric Joyner #define ICE_AQC_LINK_TOPO_NODE_TYPE_CAGE 6 196071d10453SEric Joyner #define ICE_AQC_LINK_TOPO_NODE_TYPE_MEZZ 7 196171d10453SEric Joyner #define ICE_AQC_LINK_TOPO_NODE_TYPE_ID_EEPROM 8 196271d10453SEric Joyner #define ICE_AQC_LINK_TOPO_NODE_CTX_S 4 196371d10453SEric Joyner #define ICE_AQC_LINK_TOPO_NODE_CTX_M \ 196471d10453SEric Joyner (0xF << ICE_AQC_LINK_TOPO_NODE_CTX_S) 196571d10453SEric Joyner #define ICE_AQC_LINK_TOPO_NODE_CTX_GLOBAL 0 196671d10453SEric Joyner #define ICE_AQC_LINK_TOPO_NODE_CTX_BOARD 1 196771d10453SEric Joyner #define ICE_AQC_LINK_TOPO_NODE_CTX_PORT 2 196871d10453SEric Joyner #define ICE_AQC_LINK_TOPO_NODE_CTX_NODE 3 196971d10453SEric Joyner #define ICE_AQC_LINK_TOPO_NODE_CTX_PROVIDED 4 197071d10453SEric Joyner #define ICE_AQC_LINK_TOPO_NODE_CTX_OVERRIDE 5 197171d10453SEric Joyner u8 index; 197256429daeSEric Joyner }; 197356429daeSEric Joyner 197456429daeSEric Joyner struct ice_aqc_link_topo_addr { 197556429daeSEric Joyner struct ice_aqc_link_topo_params topo_params; 197671d10453SEric Joyner __le16 handle; 197771d10453SEric Joyner #define ICE_AQC_LINK_TOPO_HANDLE_S 0 197871d10453SEric Joyner #define ICE_AQC_LINK_TOPO_HANDLE_M (0x3FF << ICE_AQC_LINK_TOPO_HANDLE_S) 197971d10453SEric Joyner /* Used to decode the handle field */ 198071d10453SEric Joyner #define ICE_AQC_LINK_TOPO_HANDLE_BRD_TYPE_M BIT(9) 1981*f2635e84SEric Joyner #define ICE_AQC_LINK_TOPO_HANDLE_BRD_TYPE_LOM 0 1982*f2635e84SEric Joyner #define ICE_AQC_LINK_TOPO_HANDLE_BRD_TYPE_MEZZ BIT(9) 198371d10453SEric Joyner #define ICE_AQC_LINK_TOPO_HANDLE_NODE_S 0 198471d10453SEric Joyner /* In case of a Mezzanine type */ 198571d10453SEric Joyner #define ICE_AQC_LINK_TOPO_HANDLE_MEZZ_NODE_M \ 198671d10453SEric Joyner (0x3F << ICE_AQC_LINK_TOPO_HANDLE_NODE_S) 198771d10453SEric Joyner #define ICE_AQC_LINK_TOPO_HANDLE_MEZZ_S 6 198871d10453SEric Joyner #define ICE_AQC_LINK_TOPO_HANDLE_MEZZ_M (0x7 << ICE_AQC_LINK_TOPO_HANDLE_MEZZ_S) 198971d10453SEric Joyner /* In case of a LOM type */ 199071d10453SEric Joyner #define ICE_AQC_LINK_TOPO_HANDLE_LOM_NODE_M \ 199171d10453SEric Joyner (0x1FF << ICE_AQC_LINK_TOPO_HANDLE_NODE_S) 199271d10453SEric Joyner }; 199371d10453SEric Joyner 199471d10453SEric Joyner /* Get Link Topology Handle (direct, 0x06E0) */ 199571d10453SEric Joyner struct ice_aqc_get_link_topo { 199671d10453SEric Joyner struct ice_aqc_link_topo_addr addr; 199771d10453SEric Joyner u8 node_part_num; 1998*f2635e84SEric Joyner #define ICE_AQC_GET_LINK_TOPO_NODE_NR_PCA9575 0x21 199971d10453SEric Joyner u8 rsvd[9]; 200071d10453SEric Joyner }; 200171d10453SEric Joyner 200271d10453SEric Joyner /* Read/Write I2C (direct, 0x06E2/0x06E3) */ 200371d10453SEric Joyner struct ice_aqc_i2c { 200471d10453SEric Joyner struct ice_aqc_link_topo_addr topo_addr; 200571d10453SEric Joyner __le16 i2c_addr; 200671d10453SEric Joyner u8 i2c_params; 200771d10453SEric Joyner #define ICE_AQC_I2C_DATA_SIZE_S 0 200871d10453SEric Joyner #define ICE_AQC_I2C_DATA_SIZE_M (0xF << ICE_AQC_I2C_DATA_SIZE_S) 200971d10453SEric Joyner #define ICE_AQC_I2C_ADDR_TYPE_M BIT(4) 201071d10453SEric Joyner #define ICE_AQC_I2C_ADDR_TYPE_7BIT 0 201171d10453SEric Joyner #define ICE_AQC_I2C_ADDR_TYPE_10BIT ICE_AQC_I2C_ADDR_TYPE_M 201271d10453SEric Joyner #define ICE_AQC_I2C_DATA_OFFSET_S 5 201371d10453SEric Joyner #define ICE_AQC_I2C_DATA_OFFSET_M (0x3 << ICE_AQC_I2C_DATA_OFFSET_S) 201471d10453SEric Joyner #define ICE_AQC_I2C_USE_REPEATED_START BIT(7) 201571d10453SEric Joyner u8 rsvd; 201671d10453SEric Joyner __le16 i2c_bus_addr; 201771d10453SEric Joyner #define ICE_AQC_I2C_ADDR_7BIT_MASK 0x7F 201871d10453SEric Joyner #define ICE_AQC_I2C_ADDR_10BIT_MASK 0x3FF 201971d10453SEric Joyner u8 i2c_data[4]; /* Used only by write command, reserved in read. */ 202071d10453SEric Joyner }; 202171d10453SEric Joyner 202271d10453SEric Joyner /* Read I2C Response (direct, 0x06E2) */ 202371d10453SEric Joyner struct ice_aqc_read_i2c_resp { 202471d10453SEric Joyner u8 i2c_data[16]; 202571d10453SEric Joyner }; 202671d10453SEric Joyner 202771d10453SEric Joyner /* Read/Write MDIO (direct, 0x06E4/0x06E5) */ 202871d10453SEric Joyner struct ice_aqc_mdio { 202971d10453SEric Joyner struct ice_aqc_link_topo_addr topo_addr; 203071d10453SEric Joyner u8 mdio_device_addr; 203171d10453SEric Joyner #define ICE_AQC_MDIO_DEV_S 0 203271d10453SEric Joyner #define ICE_AQC_MDIO_DEV_M (0x1F << ICE_AQC_MDIO_DEV_S) 203371d10453SEric Joyner #define ICE_AQC_MDIO_CLAUSE_22 BIT(5) 203471d10453SEric Joyner #define ICE_AQC_MDIO_CLAUSE_45 BIT(6) 2035d08b8680SEric Joyner u8 mdio_bus_address; 2036d08b8680SEric Joyner #define ICE_AQC_MDIO_BUS_ADDR_S 0 2037d08b8680SEric Joyner #define ICE_AQC_MDIO_BUS_ADDR_M (0x1F << ICE_AQC_MDIO_BUS_ADDR_S) 203871d10453SEric Joyner __le16 offset; 203971d10453SEric Joyner __le16 data; /* Input in write cmd, output in read cmd. */ 204071d10453SEric Joyner u8 rsvd1[4]; 204171d10453SEric Joyner }; 204271d10453SEric Joyner 204371d10453SEric Joyner /* Set/Get GPIO By Function (direct, 0x06E6/0x06E7) */ 204471d10453SEric Joyner struct ice_aqc_gpio_by_func { 204571d10453SEric Joyner struct ice_aqc_link_topo_addr topo_addr; 204671d10453SEric Joyner u8 io_func_num; 204771d10453SEric Joyner #define ICE_AQC_GPIO_FUNC_S 0 204871d10453SEric Joyner #define ICE_AQC_GPIO_FUNC_M (0x1F << ICE_AQC_GPIO_IO_FUNC_NUM_S) 204971d10453SEric Joyner u8 io_value; /* Input in write cmd, output in read cmd. */ 205071d10453SEric Joyner #define ICE_AQC_GPIO_ON BIT(0) 205171d10453SEric Joyner #define ICE_AQC_GPIO_OFF 0 205271d10453SEric Joyner u8 rsvd[8]; 205371d10453SEric Joyner }; 205471d10453SEric Joyner 205571d10453SEric Joyner /* Set LED (direct, 0x06E8) */ 205671d10453SEric Joyner struct ice_aqc_set_led { 205771d10453SEric Joyner struct ice_aqc_link_topo_addr topo_addr; 205871d10453SEric Joyner u8 color_and_blink; 205971d10453SEric Joyner #define ICE_AQC_LED_COLOR_S 0 206071d10453SEric Joyner #define ICE_AQC_LED_COLOR_M (0x7 << ICE_AQC_LED_COLOR_S) 206171d10453SEric Joyner #define ICE_AQC_LED_COLOR_SKIP 0 206271d10453SEric Joyner #define ICE_AQC_LED_COLOR_RED 1 206371d10453SEric Joyner #define ICE_AQC_LED_COLOR_ORANGE 2 206471d10453SEric Joyner #define ICE_AQC_LED_COLOR_YELLOW 3 206571d10453SEric Joyner #define ICE_AQC_LED_COLOR_GREEN 4 206671d10453SEric Joyner #define ICE_AQC_LED_COLOR_BLUE 5 206771d10453SEric Joyner #define ICE_AQC_LED_COLOR_PURPLE 6 206871d10453SEric Joyner #define ICE_AQC_LED_BLINK_S 3 206971d10453SEric Joyner #define ICE_AQC_LED_BLINK_M (0x7 << ICE_AQC_LED_BLINK_S) 207071d10453SEric Joyner #define ICE_AQC_LED_BLINK_NONE 0 207171d10453SEric Joyner #define ICE_AQC_LED_BLINK_SLOW 1 207271d10453SEric Joyner #define ICE_AQC_LED_BLINK_SLOW_MAC 2 207371d10453SEric Joyner #define ICE_AQC_LED_BLINK_SLOW_FLTR 3 207471d10453SEric Joyner #define ICE_AQC_LED_BLINK_FAST 5 207571d10453SEric Joyner #define ICE_AQC_LED_BLINK_FAST_MAC 6 207671d10453SEric Joyner #define ICE_AQC_LED_BLINK_FAST_FLTR 7 207771d10453SEric Joyner u8 rsvd[9]; 207871d10453SEric Joyner }; 207971d10453SEric Joyner 208071d10453SEric Joyner /* Set Port Identification LED (direct, 0x06E9) */ 208171d10453SEric Joyner struct ice_aqc_set_port_id_led { 208271d10453SEric Joyner u8 lport_num; 208371d10453SEric Joyner u8 lport_num_valid; 208471d10453SEric Joyner #define ICE_AQC_PORT_ID_PORT_NUM_VALID BIT(0) 208571d10453SEric Joyner u8 ident_mode; 208671d10453SEric Joyner #define ICE_AQC_PORT_IDENT_LED_BLINK BIT(0) 208771d10453SEric Joyner #define ICE_AQC_PORT_IDENT_LED_ORIG 0 208871d10453SEric Joyner u8 rsvd[13]; 208971d10453SEric Joyner }; 209071d10453SEric Joyner 209171d10453SEric Joyner /* Get Port Options (indirect, 0x06EA) */ 209271d10453SEric Joyner struct ice_aqc_get_port_options { 209371d10453SEric Joyner u8 lport_num; 209471d10453SEric Joyner u8 lport_num_valid; 209571d10453SEric Joyner #define ICE_AQC_PORT_OPT_PORT_NUM_VALID BIT(0) 209671d10453SEric Joyner u8 port_options_count; 209771d10453SEric Joyner #define ICE_AQC_PORT_OPT_COUNT_S 0 209871d10453SEric Joyner #define ICE_AQC_PORT_OPT_COUNT_M (0xF << ICE_AQC_PORT_OPT_COUNT_S) 20999dc2f6e2SEric Joyner #define ICE_AQC_PORT_OPT_MAX 16 210071d10453SEric Joyner u8 innermost_phy_index; 210171d10453SEric Joyner u8 port_options; 210271d10453SEric Joyner #define ICE_AQC_PORT_OPT_ACTIVE_S 0 210371d10453SEric Joyner #define ICE_AQC_PORT_OPT_ACTIVE_M (0xF << ICE_AQC_PORT_OPT_ACTIVE_S) 210471d10453SEric Joyner #define ICE_AQC_PORT_OPT_FORCED BIT(6) 210571d10453SEric Joyner #define ICE_AQC_PORT_OPT_VALID BIT(7) 21069cf1841cSEric Joyner u8 pending_port_option_status; 21079cf1841cSEric Joyner #define ICE_AQC_PENDING_PORT_OPT_IDX_S 0 21089cf1841cSEric Joyner #define ICE_AQC_PENDING_PORT_OPT_IDX_M (0xF << ICE_AQC_PENDING_PORT_OPT_IDX_S) 21099cf1841cSEric Joyner #define ICE_AQC_PENDING_PORT_OPT_VALID BIT(7) 21109cf1841cSEric Joyner u8 rsvd[2]; 211171d10453SEric Joyner __le32 addr_high; 211271d10453SEric Joyner __le32 addr_low; 211371d10453SEric Joyner }; 211471d10453SEric Joyner 211571d10453SEric Joyner struct ice_aqc_get_port_options_elem { 211671d10453SEric Joyner u8 pmd; 21177d7af7f8SEric Joyner #define ICE_AQC_PORT_INV_PORT_OPT 4 211871d10453SEric Joyner #define ICE_AQC_PORT_OPT_PMD_COUNT_S 0 211971d10453SEric Joyner #define ICE_AQC_PORT_OPT_PMD_COUNT_M (0xF << ICE_AQC_PORT_OPT_PMD_COUNT_S) 212071d10453SEric Joyner #define ICE_AQC_PORT_OPT_PMD_WIDTH_S 4 212171d10453SEric Joyner #define ICE_AQC_PORT_OPT_PMD_WIDTH_M (0xF << ICE_AQC_PORT_OPT_PMD_WIDTH_S) 212271d10453SEric Joyner u8 max_lane_speed; 212371d10453SEric Joyner #define ICE_AQC_PORT_OPT_MAX_LANE_S 0 212471d10453SEric Joyner #define ICE_AQC_PORT_OPT_MAX_LANE_M (0xF << ICE_AQC_PORT_OPT_MAX_LANE_S) 212571d10453SEric Joyner #define ICE_AQC_PORT_OPT_MAX_LANE_100M 0 212671d10453SEric Joyner #define ICE_AQC_PORT_OPT_MAX_LANE_1G 1 212771d10453SEric Joyner #define ICE_AQC_PORT_OPT_MAX_LANE_2500M 2 212871d10453SEric Joyner #define ICE_AQC_PORT_OPT_MAX_LANE_5G 3 212971d10453SEric Joyner #define ICE_AQC_PORT_OPT_MAX_LANE_10G 4 213071d10453SEric Joyner #define ICE_AQC_PORT_OPT_MAX_LANE_25G 5 213171d10453SEric Joyner #define ICE_AQC_PORT_OPT_MAX_LANE_50G 6 213271d10453SEric Joyner #define ICE_AQC_PORT_OPT_MAX_LANE_100G 7 2133*f2635e84SEric Joyner #define ICE_AQC_PORT_OPT_MAX_LANE_200G 8 213471d10453SEric Joyner u8 global_scid[2]; 213571d10453SEric Joyner u8 phy_scid[2]; 21369cf1841cSEric Joyner u8 pf2port_cid[2]; 213771d10453SEric Joyner }; 213871d10453SEric Joyner 213971d10453SEric Joyner /* Set Port Option (direct, 0x06EB) */ 214071d10453SEric Joyner struct ice_aqc_set_port_option { 214171d10453SEric Joyner u8 lport_num; 214271d10453SEric Joyner u8 lport_num_valid; 214371d10453SEric Joyner #define ICE_AQC_SET_PORT_OPT_PORT_NUM_VALID BIT(0) 214471d10453SEric Joyner u8 selected_port_option; 214571d10453SEric Joyner u8 rsvd[13]; 214671d10453SEric Joyner }; 214771d10453SEric Joyner 214871d10453SEric Joyner /* Set/Get GPIO (direct, 0x06EC/0x06ED) */ 214971d10453SEric Joyner struct ice_aqc_gpio { 215071d10453SEric Joyner __le16 gpio_ctrl_handle; 215171d10453SEric Joyner #define ICE_AQC_GPIO_HANDLE_S 0 215271d10453SEric Joyner #define ICE_AQC_GPIO_HANDLE_M (0x3FF << ICE_AQC_GPIO_HANDLE_S) 215371d10453SEric Joyner u8 gpio_num; 215471d10453SEric Joyner u8 gpio_val; 215571d10453SEric Joyner u8 rsvd[12]; 215671d10453SEric Joyner }; 215771d10453SEric Joyner 215871d10453SEric Joyner /* Read/Write SFF EEPROM command (indirect 0x06EE) */ 215971d10453SEric Joyner struct ice_aqc_sff_eeprom { 216071d10453SEric Joyner u8 lport_num; 216171d10453SEric Joyner u8 lport_num_valid; 216271d10453SEric Joyner #define ICE_AQC_SFF_PORT_NUM_VALID BIT(0) 216371d10453SEric Joyner __le16 i2c_bus_addr; 216471d10453SEric Joyner #define ICE_AQC_SFF_I2CBUS_7BIT_M 0x7F 216571d10453SEric Joyner #define ICE_AQC_SFF_I2CBUS_10BIT_M 0x3FF 216671d10453SEric Joyner #define ICE_AQC_SFF_I2CBUS_TYPE_M BIT(10) 216771d10453SEric Joyner #define ICE_AQC_SFF_I2CBUS_TYPE_7BIT 0 216871d10453SEric Joyner #define ICE_AQC_SFF_I2CBUS_TYPE_10BIT ICE_AQC_SFF_I2CBUS_TYPE_M 216971d10453SEric Joyner #define ICE_AQC_SFF_SET_EEPROM_PAGE_S 11 217071d10453SEric Joyner #define ICE_AQC_SFF_SET_EEPROM_PAGE_M (0x3 << ICE_AQC_SFF_SET_EEPROM_PAGE_S) 217171d10453SEric Joyner #define ICE_AQC_SFF_NO_PAGE_CHANGE 0 217271d10453SEric Joyner #define ICE_AQC_SFF_SET_23_ON_MISMATCH 1 217371d10453SEric Joyner #define ICE_AQC_SFF_SET_22_ON_MISMATCH 2 217471d10453SEric Joyner #define ICE_AQC_SFF_IS_WRITE BIT(15) 217571d10453SEric Joyner __le16 i2c_mem_addr; 217671d10453SEric Joyner __le16 eeprom_page; 217771d10453SEric Joyner #define ICE_AQC_SFF_EEPROM_BANK_S 0 217871d10453SEric Joyner #define ICE_AQC_SFF_EEPROM_BANK_M (0xFF << ICE_AQC_SFF_EEPROM_BANK_S) 217971d10453SEric Joyner #define ICE_AQC_SFF_EEPROM_PAGE_S 8 218071d10453SEric Joyner #define ICE_AQC_SFF_EEPROM_PAGE_M (0xFF << ICE_AQC_SFF_EEPROM_PAGE_S) 218171d10453SEric Joyner __le32 addr_high; 218271d10453SEric Joyner __le32 addr_low; 218371d10453SEric Joyner }; 218471d10453SEric Joyner 2185d08b8680SEric Joyner /* SW Set GPIO command (indirect 0x6EF) 2186d08b8680SEric Joyner * SW Get GPIO command (indirect 0x6F0) 2187d08b8680SEric Joyner */ 2188d08b8680SEric Joyner struct ice_aqc_sw_gpio { 2189d08b8680SEric Joyner __le16 gpio_ctrl_handle; 2190d08b8680SEric Joyner #define ICE_AQC_SW_GPIO_CONTROLLER_HANDLE_S 0 2191d08b8680SEric Joyner #define ICE_AQC_SW_GPIO_CONTROLLER_HANDLE_M (0x3FF << ICE_AQC_SW_GPIO_CONTROLLER_HANDLE_S) 2192d08b8680SEric Joyner u8 gpio_num; 2193d08b8680SEric Joyner #define ICE_AQC_SW_GPIO_NUMBER_S 0 2194d08b8680SEric Joyner #define ICE_AQC_SW_GPIO_NUMBER_M (0x1F << ICE_AQC_SW_GPIO_NUMBER_S) 2195d08b8680SEric Joyner u8 gpio_params; 2196d08b8680SEric Joyner #define ICE_AQC_SW_GPIO_PARAMS_DIRECTION BIT(1) 2197d08b8680SEric Joyner #define ICE_AQC_SW_GPIO_PARAMS_VALUE BIT(0) 2198d08b8680SEric Joyner u8 rsvd[12]; 2199d08b8680SEric Joyner }; 2200d08b8680SEric Joyner 220156429daeSEric Joyner /* Program Topology Device NVM (direct, 0x06F2) */ 220256429daeSEric Joyner struct ice_aqc_prog_topo_dev_nvm { 220356429daeSEric Joyner struct ice_aqc_link_topo_params topo_params; 22049cf1841cSEric Joyner u8 rsvd[12]; 22059cf1841cSEric Joyner }; 22069cf1841cSEric Joyner 220756429daeSEric Joyner /* Read Topology Device NVM (direct, 0x06F3) */ 220856429daeSEric Joyner struct ice_aqc_read_topo_dev_nvm { 220956429daeSEric Joyner struct ice_aqc_link_topo_params topo_params; 22109cf1841cSEric Joyner __le32 start_address; 221156429daeSEric Joyner #define ICE_AQC_READ_TOPO_DEV_NVM_DATA_READ_SIZE 8 221256429daeSEric Joyner u8 data_read[ICE_AQC_READ_TOPO_DEV_NVM_DATA_READ_SIZE]; 22139cf1841cSEric Joyner }; 22149cf1841cSEric Joyner 221571d10453SEric Joyner /* NVM Read command (indirect 0x0701) 221671d10453SEric Joyner * NVM Erase commands (direct 0x0702) 221771d10453SEric Joyner * NVM Write commands (indirect 0x0703) 221871d10453SEric Joyner * NVM Write Activate commands (direct 0x0707) 221971d10453SEric Joyner * NVM Shadow RAM Dump commands (direct 0x0707) 222071d10453SEric Joyner */ 222171d10453SEric Joyner struct ice_aqc_nvm { 222271d10453SEric Joyner #define ICE_AQC_NVM_MAX_OFFSET 0xFFFFFF 222371d10453SEric Joyner __le16 offset_low; 222471d10453SEric Joyner u8 offset_high; /* For Write Activate offset_high is used as flags2 */ 222571d10453SEric Joyner u8 cmd_flags; 222671d10453SEric Joyner #define ICE_AQC_NVM_LAST_CMD BIT(0) 222771d10453SEric Joyner #define ICE_AQC_NVM_PCIR_REQ BIT(0) /* Used by NVM Write reply */ 222871d10453SEric Joyner #define ICE_AQC_NVM_PRESERVATION_S 1 /* Used by NVM Write Activate only */ 222971d10453SEric Joyner #define ICE_AQC_NVM_PRESERVATION_M (3 << ICE_AQC_NVM_PRESERVATION_S) 223071d10453SEric Joyner #define ICE_AQC_NVM_NO_PRESERVATION (0 << ICE_AQC_NVM_PRESERVATION_S) 223171d10453SEric Joyner #define ICE_AQC_NVM_PRESERVE_ALL BIT(1) 223271d10453SEric Joyner #define ICE_AQC_NVM_FACTORY_DEFAULT (2 << ICE_AQC_NVM_PRESERVATION_S) 223371d10453SEric Joyner #define ICE_AQC_NVM_PRESERVE_SELECTED (3 << ICE_AQC_NVM_PRESERVATION_S) 223471d10453SEric Joyner #define ICE_AQC_NVM_ACTIV_SEL_NVM BIT(3) /* Write Activate/SR Dump only */ 223571d10453SEric Joyner #define ICE_AQC_NVM_ACTIV_SEL_OROM BIT(4) 223671d10453SEric Joyner #define ICE_AQC_NVM_ACTIV_SEL_NETLIST BIT(5) 223771d10453SEric Joyner #define ICE_AQC_NVM_SPECIAL_UPDATE BIT(6) 223871d10453SEric Joyner #define ICE_AQC_NVM_REVERT_LAST_ACTIV BIT(6) /* Write Activate only */ 223971d10453SEric Joyner #define ICE_AQC_NVM_ACTIV_SEL_MASK MAKEMASK(0x7, 3) 224071d10453SEric Joyner #define ICE_AQC_NVM_FLASH_ONLY BIT(7) 224156429daeSEric Joyner #define ICE_AQC_NVM_RESET_LVL_M MAKEMASK(0x3, 0) /* Write reply only */ 224256429daeSEric Joyner #define ICE_AQC_NVM_POR_FLAG 0 2243d08b8680SEric Joyner #define ICE_AQC_NVM_PERST_FLAG 1 2244d08b8680SEric Joyner #define ICE_AQC_NVM_EMPR_FLAG 2 224556429daeSEric Joyner #define ICE_AQC_NVM_EMPR_ENA BIT(0) /* Write Activate reply only */ 22468923de59SPiotr Kubaj /* For Write Activate, several flags are sent as part of a separate 22478923de59SPiotr Kubaj * flags2 field using a separate byte. For simplicity of the software 22488923de59SPiotr Kubaj * interface, we pass the flags as a 16 bit value so these flags are 22498923de59SPiotr Kubaj * all offset by 8 bits 22508923de59SPiotr Kubaj */ 22518923de59SPiotr Kubaj #define ICE_AQC_NVM_ACTIV_REQ_EMPR BIT(8) /* NVM Write Activate only */ 225271d10453SEric Joyner __le16 module_typeid; 225371d10453SEric Joyner __le16 length; 225471d10453SEric Joyner #define ICE_AQC_NVM_ERASE_LEN 0xFFFF 225571d10453SEric Joyner __le32 addr_high; 225671d10453SEric Joyner __le32 addr_low; 225771d10453SEric Joyner }; 225871d10453SEric Joyner 225971d10453SEric Joyner /* NVM Module_Type ID, needed offset and read_len for struct ice_aqc_nvm. */ 226071d10453SEric Joyner #define ICE_AQC_NVM_SECTOR_UNIT 4096 /* In Bytes */ 226171d10453SEric Joyner #define ICE_AQC_NVM_WORD_UNIT 2 /* In Bytes */ 226271d10453SEric Joyner 226371d10453SEric Joyner #define ICE_AQC_NVM_START_POINT 0 226471d10453SEric Joyner #define ICE_AQC_NVM_EMP_SR_PTR_OFFSET 0x90 226571d10453SEric Joyner #define ICE_AQC_NVM_EMP_SR_PTR_RD_LEN 2 /* In Bytes */ 226671d10453SEric Joyner #define ICE_AQC_NVM_EMP_SR_PTR_M MAKEMASK(0x7FFF, 0) 226771d10453SEric Joyner #define ICE_AQC_NVM_EMP_SR_PTR_TYPE_S 15 226871d10453SEric Joyner #define ICE_AQC_NVM_EMP_SR_PTR_TYPE_M BIT(15) 226971d10453SEric Joyner #define ICE_AQC_NVM_EMP_SR_PTR_TYPE_SECTOR 1 227071d10453SEric Joyner 227171d10453SEric Joyner #define ICE_AQC_NVM_LLDP_CFG_PTR_OFFSET 0x46 227271d10453SEric Joyner #define ICE_AQC_NVM_LLDP_CFG_HEADER_LEN 2 /* In Bytes */ 227371d10453SEric Joyner #define ICE_AQC_NVM_LLDP_CFG_PTR_RD_LEN 2 /* In Bytes */ 227471d10453SEric Joyner 227571d10453SEric Joyner #define ICE_AQC_NVM_LLDP_PRESERVED_MOD_ID 0x129 227671d10453SEric Joyner #define ICE_AQC_NVM_CUR_LLDP_PERSIST_RD_OFFSET 2 /* In Bytes */ 227771d10453SEric Joyner #define ICE_AQC_NVM_LLDP_STATUS_M MAKEMASK(0xF, 0) 227871d10453SEric Joyner #define ICE_AQC_NVM_LLDP_STATUS_M_LEN 4 /* In Bits */ 227971d10453SEric Joyner #define ICE_AQC_NVM_LLDP_STATUS_RD_LEN 4 /* In Bytes */ 228071d10453SEric Joyner 2281*f2635e84SEric Joyner #define ICE_AQC_NVM_SDP_CFG_PTR_OFFSET 0xD8 2282*f2635e84SEric Joyner #define ICE_AQC_NVM_SDP_CFG_PTR_RD_LEN 2 /* In Bytes */ 2283*f2635e84SEric Joyner #define ICE_AQC_NVM_SDP_CFG_PTR_M MAKEMASK(0x7FFF, 0) 2284*f2635e84SEric Joyner #define ICE_AQC_NVM_SDP_CFG_PTR_TYPE_M BIT(15) 2285*f2635e84SEric Joyner #define ICE_AQC_NVM_SDP_CFG_HEADER_LEN 2 /* In Bytes */ 2286*f2635e84SEric Joyner #define ICE_AQC_NVM_SDP_CFG_SEC_LEN_LEN 2 /* In Bytes */ 2287*f2635e84SEric Joyner #define ICE_AQC_NVM_SDP_CFG_DATA_LEN 14 /* In Bytes */ 2288*f2635e84SEric Joyner #define ICE_AQC_NVM_SDP_CFG_MAX_SECTION_SIZE 7 2289*f2635e84SEric Joyner #define ICE_AQC_NVM_SDP_CFG_PIN_SIZE 10 2290*f2635e84SEric Joyner #define ICE_AQC_NVM_SDP_CFG_PIN_OFFSET 6 2291*f2635e84SEric Joyner #define ICE_AQC_NVM_SDP_CFG_PIN_MASK MAKEMASK(0x3FF, \ 2292*f2635e84SEric Joyner ICE_AQC_NVM_SDP_CFG_PIN_OFFSET) 2293*f2635e84SEric Joyner #define ICE_AQC_NVM_SDP_CFG_CHAN_OFFSET 4 2294*f2635e84SEric Joyner #define ICE_AQC_NVM_SDP_CFG_CHAN_MASK MAKEMASK(0x3, \ 2295*f2635e84SEric Joyner ICE_AQC_NVM_SDP_CFG_CHAN_OFFSET) 2296*f2635e84SEric Joyner #define ICE_AQC_NVM_SDP_CFG_DIR_OFFSET 3 2297*f2635e84SEric Joyner #define ICE_AQC_NVM_SDP_CFG_DIR_MASK MAKEMASK(0x1, \ 2298*f2635e84SEric Joyner ICE_AQC_NVM_SDP_CFG_DIR_OFFSET) 2299*f2635e84SEric Joyner #define ICE_AQC_NVM_SDP_CFG_SDP_NUM_OFFSET 0 2300*f2635e84SEric Joyner #define ICE_AQC_NVM_SDP_CFG_SDP_NUM_MASK MAKEMASK(0x7, \ 2301*f2635e84SEric Joyner ICE_AQC_NVM_SDP_CFG_SDP_NUM_OFFSET) 2302*f2635e84SEric Joyner #define ICE_AQC_NVM_SDP_CFG_NA_PIN_MASK MAKEMASK(0x1, 15) 2303*f2635e84SEric Joyner 2304d08b8680SEric Joyner #define ICE_AQC_NVM_MINSREV_MOD_ID 0x130 23058923de59SPiotr Kubaj #define ICE_AQC_NVM_TX_TOPO_MOD_ID 0x14B 23069e54973fSEric Joyner #define ICE_AQC_NVM_CMPO_MOD_ID 0x153 23079e54973fSEric Joyner 23089e54973fSEric Joyner /* Cage Max Power override NVM module */ 23099e54973fSEric Joyner struct ice_aqc_nvm_cmpo { 23109e54973fSEric Joyner __le16 length; 23119e54973fSEric Joyner #define ICE_AQC_NVM_CMPO_ENABLE BIT(8) 23129e54973fSEric Joyner __le16 cages_cfg[8]; 23139e54973fSEric Joyner }; 231471d10453SEric Joyner 2315d08b8680SEric Joyner /* Used for reading and writing MinSRev using 0x0701 and 0x0703. Note that the 2316d08b8680SEric Joyner * type field is excluded from the section when reading and writing from 2317d08b8680SEric Joyner * a module using the module_typeid field with these AQ commands. 2318d08b8680SEric Joyner */ 2319d08b8680SEric Joyner struct ice_aqc_nvm_minsrev { 2320d08b8680SEric Joyner __le16 length; 2321d08b8680SEric Joyner __le16 validity; 2322d08b8680SEric Joyner #define ICE_AQC_NVM_MINSREV_NVM_VALID BIT(0) 2323d08b8680SEric Joyner #define ICE_AQC_NVM_MINSREV_OROM_VALID BIT(1) 2324d08b8680SEric Joyner __le16 nvm_minsrev_l; 2325d08b8680SEric Joyner __le16 nvm_minsrev_h; 2326d08b8680SEric Joyner __le16 orom_minsrev_l; 2327d08b8680SEric Joyner __le16 orom_minsrev_h; 2328d08b8680SEric Joyner }; 232971d10453SEric Joyner 23308923de59SPiotr Kubaj struct ice_aqc_nvm_tx_topo_user_sel { 23318923de59SPiotr Kubaj __le16 length; 23328923de59SPiotr Kubaj u8 data; 23338923de59SPiotr Kubaj #define ICE_AQC_NVM_TX_TOPO_USER_SEL BIT(4) 23348923de59SPiotr Kubaj u8 reserved; 23358923de59SPiotr Kubaj }; 23368923de59SPiotr Kubaj 233771d10453SEric Joyner /* Used for 0x0704 as well as for 0x0705 commands */ 233871d10453SEric Joyner struct ice_aqc_nvm_cfg { 233971d10453SEric Joyner u8 cmd_flags; 234071d10453SEric Joyner #define ICE_AQC_ANVM_MULTIPLE_ELEMS BIT(0) 234171d10453SEric Joyner #define ICE_AQC_ANVM_IMMEDIATE_FIELD BIT(1) 234271d10453SEric Joyner #define ICE_AQC_ANVM_NEW_CFG BIT(2) 234371d10453SEric Joyner u8 reserved; 234471d10453SEric Joyner __le16 count; 234571d10453SEric Joyner __le16 id; 234671d10453SEric Joyner u8 reserved1[2]; 234771d10453SEric Joyner __le32 addr_high; 234871d10453SEric Joyner __le32 addr_low; 234971d10453SEric Joyner }; 235071d10453SEric Joyner 235171d10453SEric Joyner struct ice_aqc_nvm_cfg_data { 235271d10453SEric Joyner __le16 field_id; 235371d10453SEric Joyner __le16 field_options; 235471d10453SEric Joyner __le16 field_value; 235571d10453SEric Joyner }; 235671d10453SEric Joyner 235771d10453SEric Joyner /* NVM Checksum Command (direct, 0x0706) */ 235871d10453SEric Joyner struct ice_aqc_nvm_checksum { 235971d10453SEric Joyner u8 flags; 236071d10453SEric Joyner #define ICE_AQC_NVM_CHECKSUM_VERIFY BIT(0) 236171d10453SEric Joyner #define ICE_AQC_NVM_CHECKSUM_RECALC BIT(1) 236271d10453SEric Joyner u8 rsvd; 236371d10453SEric Joyner __le16 checksum; /* Used only by response */ 236471d10453SEric Joyner #define ICE_AQC_NVM_CHECKSUM_CORRECT 0xBABA 236571d10453SEric Joyner u8 rsvd2[12]; 236671d10453SEric Joyner }; 236771d10453SEric Joyner 2368*f2635e84SEric Joyner /* Used for NVM Sanitization command - 0x070C */ 2369*f2635e84SEric Joyner struct ice_aqc_nvm_sanitization { 2370*f2635e84SEric Joyner u8 cmd_flags; 2371*f2635e84SEric Joyner #define ICE_AQ_NVM_SANITIZE_REQ_READ 0 2372*f2635e84SEric Joyner #define ICE_AQ_NVM_SANITIZE_REQ_OPERATE BIT(0) 2373*f2635e84SEric Joyner 2374*f2635e84SEric Joyner #define ICE_AQ_NVM_SANITIZE_READ_SUBJECT_NVM_BITS 0 2375*f2635e84SEric Joyner #define ICE_AQ_NVM_SANITIZE_READ_SUBJECT_NVM_STATE BIT(1) 2376*f2635e84SEric Joyner #define ICE_AQ_NVM_SANITIZE_OPERATE_SUBJECT_CLEAR 0 2377*f2635e84SEric Joyner u8 values; 2378*f2635e84SEric Joyner #define ICE_AQ_NVM_SANITIZE_NVM_BITS_HOST_CLEAN_SUPPORT BIT(0) 2379*f2635e84SEric Joyner #define ICE_AQ_NVM_SANITIZE_NVM_BITS_BMC_CLEAN_SUPPORT BIT(2) 2380*f2635e84SEric Joyner #define ICE_AQ_NVM_SANITIZE_NVM_STATE_HOST_CLEAN_DONE BIT(0) 2381*f2635e84SEric Joyner #define ICE_AQ_NVM_SANITIZE_NVM_STATE_HOST_CLEAN_SUCCESS BIT(1) 2382*f2635e84SEric Joyner #define ICE_AQ_NVM_SANITIZE_NVM_STATE_BMC_CLEAN_DONE BIT(2) 2383*f2635e84SEric Joyner #define ICE_AQ_NVM_SANITIZE_NVM_STATE_BMC_CLEAN_SUCCESS BIT(3) 2384*f2635e84SEric Joyner #define ICE_AQ_NVM_SANITIZE_OPERATE_HOST_CLEAN_DONE BIT(0) 2385*f2635e84SEric Joyner #define ICE_AQ_NVM_SANITIZE_OPERATE_HOST_CLEAN_SUCCESS BIT(1) 2386*f2635e84SEric Joyner #define ICE_AQ_NVM_SANITIZE_OPERATE_BMC_CLEAN_DONE BIT(2) 2387*f2635e84SEric Joyner #define ICE_AQ_NVM_SANITIZE_OPERATE_BMC_CLEAN_SUCCESS BIT(3) 2388*f2635e84SEric Joyner u8 reserved[14]; 2389*f2635e84SEric Joyner }; 2390*f2635e84SEric Joyner 2391d08b8680SEric Joyner /* 239271d10453SEric Joyner * Send to PF command (indirect 0x0801) ID is only used by PF 239371d10453SEric Joyner * 239471d10453SEric Joyner * Send to VF command (indirect 0x0802) ID is only used by PF 239571d10453SEric Joyner * 239671d10453SEric Joyner */ 239771d10453SEric Joyner struct ice_aqc_pf_vf_msg { 239871d10453SEric Joyner __le32 id; 239971d10453SEric Joyner u32 reserved; 240071d10453SEric Joyner __le32 addr_high; 240171d10453SEric Joyner __le32 addr_low; 240271d10453SEric Joyner }; 240371d10453SEric Joyner 240471d10453SEric Joyner /* Write/Read Alternate - Direct (direct 0x0900/0x0902) */ 240571d10453SEric Joyner struct ice_aqc_read_write_alt_direct { 240671d10453SEric Joyner __le32 dword0_addr; 240771d10453SEric Joyner __le32 dword0_value; 240871d10453SEric Joyner __le32 dword1_addr; 240971d10453SEric Joyner __le32 dword1_value; 241071d10453SEric Joyner }; 241171d10453SEric Joyner 241271d10453SEric Joyner /* Write/Read Alternate - Indirect (indirect 0x0901/0x0903) */ 241371d10453SEric Joyner struct ice_aqc_read_write_alt_indirect { 241471d10453SEric Joyner __le32 base_dword_addr; 241571d10453SEric Joyner __le32 num_dwords; 241671d10453SEric Joyner __le32 addr_high; 241771d10453SEric Joyner __le32 addr_low; 241871d10453SEric Joyner }; 241971d10453SEric Joyner 242071d10453SEric Joyner /* Done Alternate Write (direct 0x0904) */ 242171d10453SEric Joyner struct ice_aqc_done_alt_write { 242271d10453SEric Joyner u8 flags; 242371d10453SEric Joyner #define ICE_AQC_CMD_UEFI_BIOS_MODE BIT(0) 242471d10453SEric Joyner #define ICE_AQC_RESP_RESET_NEEDED BIT(1) 242571d10453SEric Joyner u8 reserved[15]; 242671d10453SEric Joyner }; 242771d10453SEric Joyner 242871d10453SEric Joyner /* Clear Port Alternate Write (direct 0x0906) */ 242971d10453SEric Joyner struct ice_aqc_clear_port_alt_write { 243071d10453SEric Joyner u8 reserved[16]; 243171d10453SEric Joyner }; 243271d10453SEric Joyner 243371d10453SEric Joyner /* Get LLDP MIB (indirect 0x0A00) 243471d10453SEric Joyner * Note: This is also used by the LLDP MIB Change Event (0x0A01) 243571d10453SEric Joyner * as the format is the same. 243671d10453SEric Joyner */ 243771d10453SEric Joyner struct ice_aqc_lldp_get_mib { 243871d10453SEric Joyner u8 type; 243971d10453SEric Joyner #define ICE_AQ_LLDP_MIB_TYPE_S 0 244071d10453SEric Joyner #define ICE_AQ_LLDP_MIB_TYPE_M (0x3 << ICE_AQ_LLDP_MIB_TYPE_S) 244171d10453SEric Joyner #define ICE_AQ_LLDP_MIB_LOCAL 0 244271d10453SEric Joyner #define ICE_AQ_LLDP_MIB_REMOTE 1 244371d10453SEric Joyner #define ICE_AQ_LLDP_MIB_LOCAL_AND_REMOTE 2 244471d10453SEric Joyner #define ICE_AQ_LLDP_BRID_TYPE_S 2 244571d10453SEric Joyner #define ICE_AQ_LLDP_BRID_TYPE_M (0x3 << ICE_AQ_LLDP_BRID_TYPE_S) 244671d10453SEric Joyner #define ICE_AQ_LLDP_BRID_TYPE_NEAREST_BRID 0 244771d10453SEric Joyner #define ICE_AQ_LLDP_BRID_TYPE_NON_TPMR 1 244871d10453SEric Joyner /* Tx pause flags in the 0xA01 event use ICE_AQ_LLDP_TX_* */ 244971d10453SEric Joyner #define ICE_AQ_LLDP_TX_S 0x4 245071d10453SEric Joyner #define ICE_AQ_LLDP_TX_M (0x03 << ICE_AQ_LLDP_TX_S) 245171d10453SEric Joyner #define ICE_AQ_LLDP_TX_ACTIVE 0 245271d10453SEric Joyner #define ICE_AQ_LLDP_TX_SUSPENDED 1 245371d10453SEric Joyner #define ICE_AQ_LLDP_TX_FLUSHED 3 24548923de59SPiotr Kubaj /* DCBX mode */ 24558923de59SPiotr Kubaj #define ICE_AQ_LLDP_DCBX_S 6 24568923de59SPiotr Kubaj #define ICE_AQ_LLDP_DCBX_M (0x3 << ICE_AQ_LLDP_DCBX_S) 24578923de59SPiotr Kubaj #define ICE_AQ_LLDP_DCBX_NA 0 24588923de59SPiotr Kubaj #define ICE_AQ_LLDP_DCBX_CEE 1 24598923de59SPiotr Kubaj #define ICE_AQ_LLDP_DCBX_IEEE 2 246071d10453SEric Joyner /* The following bytes are reserved for the Get LLDP MIB command (0x0A00) 246171d10453SEric Joyner * and in the LLDP MIB Change Event (0x0A01). They are valid for the 246271d10453SEric Joyner * Get LLDP MIB (0x0A00) response only. 246371d10453SEric Joyner */ 24648923de59SPiotr Kubaj u8 state; 24658923de59SPiotr Kubaj #define ICE_AQ_LLDP_MIB_CHANGE_STATE_S 0 24668923de59SPiotr Kubaj #define ICE_AQ_LLDP_MIB_CHANGE_STATE_M \ 24678923de59SPiotr Kubaj (0x1 << ICE_AQ_LLDP_MIB_CHANGE_STATE_S) 24688923de59SPiotr Kubaj #define ICE_AQ_LLDP_MIB_CHANGE_EXECUTED 0 24698923de59SPiotr Kubaj #define ICE_AQ_LLDP_MIB_CHANGE_PENDING 1 247071d10453SEric Joyner __le16 local_len; 247171d10453SEric Joyner __le16 remote_len; 24728923de59SPiotr Kubaj u8 reserved[2]; 247371d10453SEric Joyner __le32 addr_high; 247471d10453SEric Joyner __le32 addr_low; 247571d10453SEric Joyner }; 247671d10453SEric Joyner 247771d10453SEric Joyner /* Configure LLDP MIB Change Event (direct 0x0A01) */ 247871d10453SEric Joyner /* For MIB Change Event use ice_aqc_lldp_get_mib structure above */ 247971d10453SEric Joyner struct ice_aqc_lldp_set_mib_change { 248071d10453SEric Joyner u8 command; 248171d10453SEric Joyner #define ICE_AQ_LLDP_MIB_UPDATE_ENABLE 0x0 248271d10453SEric Joyner #define ICE_AQ_LLDP_MIB_UPDATE_DIS 0x1 24838923de59SPiotr Kubaj #define ICE_AQ_LLDP_MIB_PENDING_S 1 24848923de59SPiotr Kubaj #define ICE_AQ_LLDP_MIB_PENDING_M \ 24858923de59SPiotr Kubaj (0x1 << ICE_AQ_LLDP_MIB_PENDING_S) 24868923de59SPiotr Kubaj #define ICE_AQ_LLDP_MIB_PENDING_DISABLE 0 24878923de59SPiotr Kubaj #define ICE_AQ_LLDP_MIB_PENDING_ENABLE 1 248871d10453SEric Joyner u8 reserved[15]; 248971d10453SEric Joyner }; 249071d10453SEric Joyner 249171d10453SEric Joyner /* Add LLDP TLV (indirect 0x0A02) 249271d10453SEric Joyner * Delete LLDP TLV (indirect 0x0A04) 249371d10453SEric Joyner */ 249471d10453SEric Joyner struct ice_aqc_lldp_add_delete_tlv { 249571d10453SEric Joyner u8 type; /* only nearest bridge and non-TPMR from 0x0A00 */ 249671d10453SEric Joyner u8 reserved1[1]; 249771d10453SEric Joyner __le16 len; 249871d10453SEric Joyner u8 reserved2[4]; 249971d10453SEric Joyner __le32 addr_high; 250071d10453SEric Joyner __le32 addr_low; 250171d10453SEric Joyner }; 250271d10453SEric Joyner 250371d10453SEric Joyner /* Update LLDP TLV (indirect 0x0A03) */ 250471d10453SEric Joyner struct ice_aqc_lldp_update_tlv { 250571d10453SEric Joyner u8 type; /* only nearest bridge and non-TPMR from 0x0A00 */ 250671d10453SEric Joyner u8 reserved; 250771d10453SEric Joyner __le16 old_len; 250871d10453SEric Joyner __le16 new_offset; 250971d10453SEric Joyner __le16 new_len; 251071d10453SEric Joyner __le32 addr_high; 251171d10453SEric Joyner __le32 addr_low; 251271d10453SEric Joyner }; 251371d10453SEric Joyner 251471d10453SEric Joyner /* Stop LLDP (direct 0x0A05) */ 251571d10453SEric Joyner struct ice_aqc_lldp_stop { 251671d10453SEric Joyner u8 command; 251771d10453SEric Joyner #define ICE_AQ_LLDP_AGENT_STATE_MASK BIT(0) 251871d10453SEric Joyner #define ICE_AQ_LLDP_AGENT_STOP 0x0 251971d10453SEric Joyner #define ICE_AQ_LLDP_AGENT_SHUTDOWN ICE_AQ_LLDP_AGENT_STATE_MASK 252071d10453SEric Joyner #define ICE_AQ_LLDP_AGENT_PERSIST_DIS BIT(1) 252171d10453SEric Joyner u8 reserved[15]; 252271d10453SEric Joyner }; 252371d10453SEric Joyner 252471d10453SEric Joyner /* Start LLDP (direct 0x0A06) */ 252571d10453SEric Joyner struct ice_aqc_lldp_start { 252671d10453SEric Joyner u8 command; 252771d10453SEric Joyner #define ICE_AQ_LLDP_AGENT_START BIT(0) 252871d10453SEric Joyner #define ICE_AQ_LLDP_AGENT_PERSIST_ENA BIT(1) 252971d10453SEric Joyner u8 reserved[15]; 253071d10453SEric Joyner }; 253171d10453SEric Joyner 253271d10453SEric Joyner /* Get CEE DCBX Oper Config (0x0A07) 253371d10453SEric Joyner * The command uses the generic descriptor struct and 253471d10453SEric Joyner * returns the struct below as an indirect response. 253571d10453SEric Joyner */ 253671d10453SEric Joyner struct ice_aqc_get_cee_dcb_cfg_resp { 253771d10453SEric Joyner u8 oper_num_tc; 253871d10453SEric Joyner u8 oper_prio_tc[4]; 253971d10453SEric Joyner u8 oper_tc_bw[8]; 254071d10453SEric Joyner u8 oper_pfc_en; 254171d10453SEric Joyner __le16 oper_app_prio; 254271d10453SEric Joyner #define ICE_AQC_CEE_APP_FCOE_S 0 254371d10453SEric Joyner #define ICE_AQC_CEE_APP_FCOE_M (0x7 << ICE_AQC_CEE_APP_FCOE_S) 254471d10453SEric Joyner #define ICE_AQC_CEE_APP_ISCSI_S 3 254571d10453SEric Joyner #define ICE_AQC_CEE_APP_ISCSI_M (0x7 << ICE_AQC_CEE_APP_ISCSI_S) 254671d10453SEric Joyner #define ICE_AQC_CEE_APP_FIP_S 8 254771d10453SEric Joyner #define ICE_AQC_CEE_APP_FIP_M (0x7 << ICE_AQC_CEE_APP_FIP_S) 254871d10453SEric Joyner __le32 tlv_status; 254971d10453SEric Joyner #define ICE_AQC_CEE_PG_STATUS_S 0 255071d10453SEric Joyner #define ICE_AQC_CEE_PG_STATUS_M (0x7 << ICE_AQC_CEE_PG_STATUS_S) 255171d10453SEric Joyner #define ICE_AQC_CEE_PFC_STATUS_S 3 255271d10453SEric Joyner #define ICE_AQC_CEE_PFC_STATUS_M (0x7 << ICE_AQC_CEE_PFC_STATUS_S) 255371d10453SEric Joyner #define ICE_AQC_CEE_FCOE_STATUS_S 8 255471d10453SEric Joyner #define ICE_AQC_CEE_FCOE_STATUS_M (0x7 << ICE_AQC_CEE_FCOE_STATUS_S) 255571d10453SEric Joyner #define ICE_AQC_CEE_ISCSI_STATUS_S 11 255671d10453SEric Joyner #define ICE_AQC_CEE_ISCSI_STATUS_M (0x7 << ICE_AQC_CEE_ISCSI_STATUS_S) 255771d10453SEric Joyner #define ICE_AQC_CEE_FIP_STATUS_S 16 255871d10453SEric Joyner #define ICE_AQC_CEE_FIP_STATUS_M (0x7 << ICE_AQC_CEE_FIP_STATUS_S) 255971d10453SEric Joyner u8 reserved[12]; 256071d10453SEric Joyner }; 256171d10453SEric Joyner 256271d10453SEric Joyner /* Set Local LLDP MIB (indirect 0x0A08) 256371d10453SEric Joyner * Used to replace the local MIB of a given LLDP agent. e.g. DCBX 256471d10453SEric Joyner */ 256571d10453SEric Joyner struct ice_aqc_lldp_set_local_mib { 256671d10453SEric Joyner u8 type; 256771d10453SEric Joyner #define SET_LOCAL_MIB_TYPE_DCBX_M BIT(0) 256871d10453SEric Joyner #define SET_LOCAL_MIB_TYPE_LOCAL_MIB 0 256971d10453SEric Joyner #define SET_LOCAL_MIB_TYPE_CEE_M BIT(1) 257071d10453SEric Joyner #define SET_LOCAL_MIB_TYPE_CEE_WILLING 0 257171d10453SEric Joyner #define SET_LOCAL_MIB_TYPE_CEE_NON_WILLING SET_LOCAL_MIB_TYPE_CEE_M 257271d10453SEric Joyner u8 reserved0; 257371d10453SEric Joyner __le16 length; 257471d10453SEric Joyner u8 reserved1[4]; 257571d10453SEric Joyner __le32 addr_high; 257671d10453SEric Joyner __le32 addr_low; 257771d10453SEric Joyner }; 257871d10453SEric Joyner 257971d10453SEric Joyner struct ice_aqc_lldp_set_local_mib_resp { 258071d10453SEric Joyner u8 status; 258171d10453SEric Joyner #define SET_LOCAL_MIB_RESP_EVENT_M BIT(0) 258271d10453SEric Joyner #define SET_LOCAL_MIB_RESP_MIB_CHANGE_SILENT 0 258371d10453SEric Joyner #define SET_LOCAL_MIB_RESP_MIB_CHANGE_EVENT SET_LOCAL_MIB_RESP_EVENT_M 258471d10453SEric Joyner u8 reserved[15]; 258571d10453SEric Joyner }; 258671d10453SEric Joyner 258771d10453SEric Joyner /* Stop/Start LLDP Agent (direct 0x0A09) 258871d10453SEric Joyner * Used for stopping/starting specific LLDP agent. e.g. DCBX. 258971d10453SEric Joyner * The same structure is used for the response, with the command field 259071d10453SEric Joyner * being used as the status field. 259171d10453SEric Joyner */ 259271d10453SEric Joyner struct ice_aqc_lldp_stop_start_specific_agent { 259371d10453SEric Joyner u8 command; 259471d10453SEric Joyner #define ICE_AQC_START_STOP_AGENT_M BIT(0) 259571d10453SEric Joyner #define ICE_AQC_START_STOP_AGENT_STOP_DCBX 0 259671d10453SEric Joyner #define ICE_AQC_START_STOP_AGENT_START_DCBX ICE_AQC_START_STOP_AGENT_M 259771d10453SEric Joyner u8 reserved[15]; 259871d10453SEric Joyner }; 259971d10453SEric Joyner 26007d7af7f8SEric Joyner /* LLDP Filter Control (direct 0x0A0A) */ 26017d7af7f8SEric Joyner struct ice_aqc_lldp_filter_ctrl { 26027d7af7f8SEric Joyner u8 cmd_flags; 26037d7af7f8SEric Joyner #define ICE_AQC_LLDP_FILTER_ACTION_M MAKEMASK(3, 0) 26047d7af7f8SEric Joyner #define ICE_AQC_LLDP_FILTER_ACTION_ADD 0x0 26057d7af7f8SEric Joyner #define ICE_AQC_LLDP_FILTER_ACTION_DELETE 0x1 26067d7af7f8SEric Joyner #define ICE_AQC_LLDP_FILTER_ACTION_UPDATE 0x2 26077d7af7f8SEric Joyner u8 reserved1; 26087d7af7f8SEric Joyner __le16 vsi_num; 26097d7af7f8SEric Joyner u8 reserved2[12]; 26107d7af7f8SEric Joyner }; 26117d7af7f8SEric Joyner 261271d10453SEric Joyner /* Get/Set RSS key (indirect 0x0B04/0x0B02) */ 261371d10453SEric Joyner struct ice_aqc_get_set_rss_key { 261471d10453SEric Joyner #define ICE_AQC_GSET_RSS_KEY_VSI_VALID BIT(15) 261571d10453SEric Joyner #define ICE_AQC_GSET_RSS_KEY_VSI_ID_S 0 261671d10453SEric Joyner #define ICE_AQC_GSET_RSS_KEY_VSI_ID_M (0x3FF << ICE_AQC_GSET_RSS_KEY_VSI_ID_S) 261771d10453SEric Joyner __le16 vsi_id; 261871d10453SEric Joyner u8 reserved[6]; 261971d10453SEric Joyner __le32 addr_high; 262071d10453SEric Joyner __le32 addr_low; 262171d10453SEric Joyner }; 262271d10453SEric Joyner 262371d10453SEric Joyner #define ICE_AQC_GET_SET_RSS_KEY_DATA_RSS_KEY_SIZE 0x28 262471d10453SEric Joyner #define ICE_AQC_GET_SET_RSS_KEY_DATA_HASH_KEY_SIZE 0xC 262571d10453SEric Joyner #define ICE_GET_SET_RSS_KEY_EXTEND_KEY_SIZE \ 262671d10453SEric Joyner (ICE_AQC_GET_SET_RSS_KEY_DATA_RSS_KEY_SIZE + \ 262771d10453SEric Joyner ICE_AQC_GET_SET_RSS_KEY_DATA_HASH_KEY_SIZE) 262871d10453SEric Joyner 262971d10453SEric Joyner /** 263071d10453SEric Joyner * struct ice_aqc_get_set_rss_keys - Get/Set RSS hash key command buffer 263171d10453SEric Joyner * @standard_rss_key: 40 most significant bytes of hash key 263271d10453SEric Joyner * @extended_hash_key: 12 least significant bytes of hash key 263371d10453SEric Joyner * 263471d10453SEric Joyner * Set/Get 40 byte hash key using standard_rss_key field, and set 263571d10453SEric Joyner * extended_hash_key field to zero. Set/Get 52 byte hash key using 263671d10453SEric Joyner * standard_rss_key field for 40 most significant bytes and the 263771d10453SEric Joyner * extended_hash_key field for the 12 least significant bytes of hash key. 263871d10453SEric Joyner */ 263971d10453SEric Joyner struct ice_aqc_get_set_rss_keys { 264071d10453SEric Joyner u8 standard_rss_key[ICE_AQC_GET_SET_RSS_KEY_DATA_RSS_KEY_SIZE]; 264171d10453SEric Joyner u8 extended_hash_key[ICE_AQC_GET_SET_RSS_KEY_DATA_HASH_KEY_SIZE]; 264271d10453SEric Joyner }; 264371d10453SEric Joyner 26449c30461dSEric Joyner enum ice_lut_type { 26459c30461dSEric Joyner ICE_LUT_VSI = 0, 26469c30461dSEric Joyner ICE_LUT_PF = 1, 26479c30461dSEric Joyner ICE_LUT_GLOBAL = 2, 26489e54973fSEric Joyner ICE_LUT_TYPE_MASK = 3, 26499e54973fSEric Joyner ICE_LUT_PF_SMALL = 5, /* yields ICE_LUT_PF when &= ICE_LUT_TYPE_MASK */ 26509c30461dSEric Joyner }; 26519c30461dSEric Joyner 26529c30461dSEric Joyner enum ice_lut_size { 26539c30461dSEric Joyner ICE_LUT_VSI_SIZE = 64, 26549e54973fSEric Joyner ICE_LUT_PF_SMALL_SIZE = 128, 26559c30461dSEric Joyner ICE_LUT_GLOBAL_SIZE = 512, 26569c30461dSEric Joyner ICE_LUT_PF_SIZE = 2048, 26579c30461dSEric Joyner }; 26589c30461dSEric Joyner 265971d10453SEric Joyner /* Get/Set RSS LUT (indirect 0x0B05/0x0B03) */ 266071d10453SEric Joyner struct ice_aqc_get_set_rss_lut { 266171d10453SEric Joyner #define ICE_AQC_GSET_RSS_LUT_VSI_VALID BIT(15) 266271d10453SEric Joyner #define ICE_AQC_GSET_RSS_LUT_VSI_ID_S 0 26637d7af7f8SEric Joyner #define ICE_AQC_GSET_RSS_LUT_VSI_ID_M (0x3FF << ICE_AQC_GSET_RSS_LUT_VSI_ID_S) 266471d10453SEric Joyner __le16 vsi_id; 266571d10453SEric Joyner #define ICE_AQC_GSET_RSS_LUT_TABLE_TYPE_S 0 266671d10453SEric Joyner #define ICE_AQC_GSET_RSS_LUT_TABLE_TYPE_M \ 26679c30461dSEric Joyner (ICE_LUT_TYPE_MASK << ICE_AQC_GSET_RSS_LUT_TABLE_TYPE_S) 266871d10453SEric Joyner 266971d10453SEric Joyner #define ICE_AQC_GSET_RSS_LUT_TABLE_SIZE_S 2 267071d10453SEric Joyner #define ICE_AQC_GSET_RSS_LUT_TABLE_SIZE_M \ 26719c30461dSEric Joyner (ICE_LUT_TYPE_MASK << ICE_AQC_GSET_RSS_LUT_TABLE_SIZE_S) 267271d10453SEric Joyner 267371d10453SEric Joyner #define ICE_AQC_GSET_RSS_LUT_TABLE_SIZE_512_FLAG 1 267471d10453SEric Joyner #define ICE_AQC_GSET_RSS_LUT_TABLE_SIZE_2K_FLAG 2 267571d10453SEric Joyner 267671d10453SEric Joyner #define ICE_AQC_GSET_RSS_LUT_GLOBAL_IDX_S 4 267771d10453SEric Joyner #define ICE_AQC_GSET_RSS_LUT_GLOBAL_IDX_M \ 267871d10453SEric Joyner (0xF << ICE_AQC_GSET_RSS_LUT_GLOBAL_IDX_S) 267971d10453SEric Joyner 268071d10453SEric Joyner __le16 flags; 268171d10453SEric Joyner __le32 reserved; 268271d10453SEric Joyner __le32 addr_high; 268371d10453SEric Joyner __le32 addr_low; 268471d10453SEric Joyner }; 268571d10453SEric Joyner 2686*f2635e84SEric Joyner /* Sideband Control Interface Commands */ 2687*f2635e84SEric Joyner /* Neighbor Device Request (indirect 0x0C00); also used for the response. */ 2688*f2635e84SEric Joyner struct ice_aqc_neigh_dev_req { 2689*f2635e84SEric Joyner __le16 sb_data_len; 2690*f2635e84SEric Joyner u8 reserved[6]; 2691*f2635e84SEric Joyner __le32 addr_high; 2692*f2635e84SEric Joyner __le32 addr_low; 2693*f2635e84SEric Joyner }; 2694*f2635e84SEric Joyner 269571d10453SEric Joyner /* Add Tx LAN Queues (indirect 0x0C30) */ 269671d10453SEric Joyner struct ice_aqc_add_txqs { 269771d10453SEric Joyner u8 num_qgrps; 269871d10453SEric Joyner u8 reserved[3]; 269971d10453SEric Joyner __le32 reserved1; 270071d10453SEric Joyner __le32 addr_high; 270171d10453SEric Joyner __le32 addr_low; 270271d10453SEric Joyner }; 270371d10453SEric Joyner 270471d10453SEric Joyner /* This is the descriptor of each queue entry for the Add Tx LAN Queues 270571d10453SEric Joyner * command (0x0C30). Only used within struct ice_aqc_add_tx_qgrp. 270671d10453SEric Joyner */ 270771d10453SEric Joyner struct ice_aqc_add_txqs_perq { 270871d10453SEric Joyner __le16 txq_id; 270971d10453SEric Joyner u8 rsvd[2]; 271071d10453SEric Joyner __le32 q_teid; 271171d10453SEric Joyner u8 txq_ctx[22]; 271271d10453SEric Joyner u8 rsvd2[2]; 271371d10453SEric Joyner struct ice_aqc_txsched_elem info; 271471d10453SEric Joyner }; 271571d10453SEric Joyner 271671d10453SEric Joyner /* The format of the command buffer for Add Tx LAN Queues (0x0C30) 271771d10453SEric Joyner * is an array of the following structs. Please note that the length of 271871d10453SEric Joyner * each struct ice_aqc_add_tx_qgrp is variable due 271971d10453SEric Joyner * to the variable number of queues in each group! 272071d10453SEric Joyner */ 272171d10453SEric Joyner struct ice_aqc_add_tx_qgrp { 272271d10453SEric Joyner __le32 parent_teid; 272371d10453SEric Joyner u8 num_txqs; 272471d10453SEric Joyner u8 rsvd[3]; 27257d7af7f8SEric Joyner struct ice_aqc_add_txqs_perq txqs[STRUCT_HACK_VAR_LEN]; 272671d10453SEric Joyner }; 272771d10453SEric Joyner 272871d10453SEric Joyner /* Disable Tx LAN Queues (indirect 0x0C31) */ 272971d10453SEric Joyner struct ice_aqc_dis_txqs { 273071d10453SEric Joyner u8 cmd_type; 273171d10453SEric Joyner #define ICE_AQC_Q_DIS_CMD_S 0 273271d10453SEric Joyner #define ICE_AQC_Q_DIS_CMD_M (0x3 << ICE_AQC_Q_DIS_CMD_S) 273371d10453SEric Joyner #define ICE_AQC_Q_DIS_CMD_NO_FUNC_RESET (0 << ICE_AQC_Q_DIS_CMD_S) 273471d10453SEric Joyner #define ICE_AQC_Q_DIS_CMD_VM_RESET BIT(ICE_AQC_Q_DIS_CMD_S) 273571d10453SEric Joyner #define ICE_AQC_Q_DIS_CMD_VF_RESET (2 << ICE_AQC_Q_DIS_CMD_S) 273671d10453SEric Joyner #define ICE_AQC_Q_DIS_CMD_PF_RESET (3 << ICE_AQC_Q_DIS_CMD_S) 273771d10453SEric Joyner #define ICE_AQC_Q_DIS_CMD_SUBSEQ_CALL BIT(2) 273871d10453SEric Joyner #define ICE_AQC_Q_DIS_CMD_FLUSH_PIPE BIT(3) 273971d10453SEric Joyner u8 num_entries; 274071d10453SEric Joyner __le16 vmvf_and_timeout; 274171d10453SEric Joyner #define ICE_AQC_Q_DIS_VMVF_NUM_S 0 274271d10453SEric Joyner #define ICE_AQC_Q_DIS_VMVF_NUM_M (0x3FF << ICE_AQC_Q_DIS_VMVF_NUM_S) 274371d10453SEric Joyner #define ICE_AQC_Q_DIS_TIMEOUT_S 10 274471d10453SEric Joyner #define ICE_AQC_Q_DIS_TIMEOUT_M (0x3F << ICE_AQC_Q_DIS_TIMEOUT_S) 274571d10453SEric Joyner __le32 blocked_cgds; 274671d10453SEric Joyner __le32 addr_high; 274771d10453SEric Joyner __le32 addr_low; 274871d10453SEric Joyner }; 274971d10453SEric Joyner 275071d10453SEric Joyner /* The buffer for Disable Tx LAN Queues (indirect 0x0C31) 275171d10453SEric Joyner * contains the following structures, arrayed one after the 275271d10453SEric Joyner * other. 275371d10453SEric Joyner * Note: Since the q_id is 16 bits wide, if the 275471d10453SEric Joyner * number of queues is even, then 2 bytes of alignment MUST be 275571d10453SEric Joyner * added before the start of the next group, to allow correct 275671d10453SEric Joyner * alignment of the parent_teid field. 275771d10453SEric Joyner */ 27587d7af7f8SEric Joyner #pragma pack(1) 275971d10453SEric Joyner struct ice_aqc_dis_txq_item { 276071d10453SEric Joyner __le32 parent_teid; 276171d10453SEric Joyner u8 num_qs; 276271d10453SEric Joyner u8 rsvd; 276371d10453SEric Joyner /* The length of the q_id array varies according to num_qs */ 276471d10453SEric Joyner #define ICE_AQC_Q_DIS_BUF_ELEM_TYPE_S 15 276571d10453SEric Joyner #define ICE_AQC_Q_DIS_BUF_ELEM_TYPE_LAN_Q \ 276671d10453SEric Joyner (0 << ICE_AQC_Q_DIS_BUF_ELEM_TYPE_S) 276771d10453SEric Joyner #define ICE_AQC_Q_DIS_BUF_ELEM_TYPE_RDMA_QSET \ 276871d10453SEric Joyner (1 << ICE_AQC_Q_DIS_BUF_ELEM_TYPE_S) 27697d7af7f8SEric Joyner __le16 q_id[STRUCT_HACK_VAR_LEN]; 277071d10453SEric Joyner }; 27717d7af7f8SEric Joyner #pragma pack() 277271d10453SEric Joyner 277371d10453SEric Joyner /* Tx LAN Queues Cleanup Event (0x0C31) */ 277471d10453SEric Joyner struct ice_aqc_txqs_cleanup { 277571d10453SEric Joyner __le16 caller_opc; 277671d10453SEric Joyner __le16 cmd_tag; 277771d10453SEric Joyner u8 reserved[12]; 277871d10453SEric Joyner }; 277971d10453SEric Joyner 278071d10453SEric Joyner /* Move / Reconfigure Tx Queues (indirect 0x0C32) */ 278171d10453SEric Joyner struct ice_aqc_move_txqs { 278271d10453SEric Joyner u8 cmd_type; 278371d10453SEric Joyner #define ICE_AQC_Q_CMD_TYPE_S 0 278471d10453SEric Joyner #define ICE_AQC_Q_CMD_TYPE_M (0x3 << ICE_AQC_Q_CMD_TYPE_S) 278571d10453SEric Joyner #define ICE_AQC_Q_CMD_TYPE_MOVE 1 278671d10453SEric Joyner #define ICE_AQC_Q_CMD_TYPE_TC_CHANGE 2 278771d10453SEric Joyner #define ICE_AQC_Q_CMD_TYPE_MOVE_AND_TC 3 278871d10453SEric Joyner #define ICE_AQC_Q_CMD_SUBSEQ_CALL BIT(2) 278971d10453SEric Joyner #define ICE_AQC_Q_CMD_FLUSH_PIPE BIT(3) 279071d10453SEric Joyner u8 num_qs; 279171d10453SEric Joyner u8 rsvd; 279271d10453SEric Joyner u8 timeout; 279371d10453SEric Joyner #define ICE_AQC_Q_CMD_TIMEOUT_S 2 279471d10453SEric Joyner #define ICE_AQC_Q_CMD_TIMEOUT_M (0x3F << ICE_AQC_Q_CMD_TIMEOUT_S) 279571d10453SEric Joyner __le32 blocked_cgds; 279671d10453SEric Joyner __le32 addr_high; 279771d10453SEric Joyner __le32 addr_low; 279871d10453SEric Joyner }; 279971d10453SEric Joyner 280071d10453SEric Joyner /* Per-queue data buffer for the Move Tx LAN Queues command/response */ 280171d10453SEric Joyner struct ice_aqc_move_txqs_elem { 280271d10453SEric Joyner __le16 txq_id; 280371d10453SEric Joyner u8 q_cgd; 280471d10453SEric Joyner u8 rsvd; 280571d10453SEric Joyner __le32 q_teid; 280671d10453SEric Joyner }; 280771d10453SEric Joyner 280871d10453SEric Joyner /* Indirect data buffer for the Move Tx LAN Queues command/response */ 280971d10453SEric Joyner struct ice_aqc_move_txqs_data { 281071d10453SEric Joyner __le32 src_teid; 281171d10453SEric Joyner __le32 dest_teid; 28127d7af7f8SEric Joyner struct ice_aqc_move_txqs_elem txqs[STRUCT_HACK_VAR_LEN]; 281371d10453SEric Joyner }; 281471d10453SEric Joyner 28158a13362dSEric Joyner /* Add Tx RDMA Queue Set (indirect 0x0C33) */ 28168a13362dSEric Joyner struct ice_aqc_add_rdma_qset { 28178a13362dSEric Joyner u8 num_qset_grps; 28188a13362dSEric Joyner u8 reserved[7]; 28198a13362dSEric Joyner __le32 addr_high; 28208a13362dSEric Joyner __le32 addr_low; 28218a13362dSEric Joyner }; 28228a13362dSEric Joyner 28238a13362dSEric Joyner /* This is the descriptor of each qset entry for the Add Tx RDMA Queue Set 28248a13362dSEric Joyner * command (0x0C33). Only used within struct ice_aqc_add_rdma_qset. 28258a13362dSEric Joyner */ 28268a13362dSEric Joyner struct ice_aqc_add_tx_rdma_qset_entry { 28278a13362dSEric Joyner __le16 tx_qset_id; 28288a13362dSEric Joyner u8 rsvd[2]; 28298a13362dSEric Joyner __le32 qset_teid; 28308a13362dSEric Joyner struct ice_aqc_txsched_elem info; 28318a13362dSEric Joyner }; 28328a13362dSEric Joyner 28338a13362dSEric Joyner /* The format of the command buffer for Add Tx RDMA Queue Set(0x0C33) 28348a13362dSEric Joyner * is an array of the following structs. Please note that the length of 28358a13362dSEric Joyner * each struct ice_aqc_add_rdma_qset is variable due to the variable 28368a13362dSEric Joyner * number of queues in each group! 28378a13362dSEric Joyner */ 28388a13362dSEric Joyner struct ice_aqc_add_rdma_qset_data { 28398a13362dSEric Joyner __le32 parent_teid; 28408a13362dSEric Joyner __le16 num_qsets; 28418a13362dSEric Joyner u8 rsvd[2]; 28428a13362dSEric Joyner struct ice_aqc_add_tx_rdma_qset_entry rdma_qsets[STRUCT_HACK_VAR_LEN]; 28438a13362dSEric Joyner }; 28448a13362dSEric Joyner 28458a13362dSEric Joyner /* Move RDMA Queue Set (indirect 0x0C34) */ 28468a13362dSEric Joyner struct ice_aqc_move_rdma_qset_cmd { 28478a13362dSEric Joyner u8 num_rdma_qset; /* Used by commands and response */ 28488923de59SPiotr Kubaj #define ICE_AQC_PF_MODE_SAME_PF 0x0 28498923de59SPiotr Kubaj #define ICE_AQC_PF_MODE_GIVE_OWNERSHIP 0x1 28508923de59SPiotr Kubaj #define ICE_AQC_PF_MODE_KEEP_OWNERSHIP 0x2 28518a13362dSEric Joyner u8 flags; 28528a13362dSEric Joyner u8 reserved[6]; 28538a13362dSEric Joyner __le32 addr_high; 28548a13362dSEric Joyner __le32 addr_low; 28558a13362dSEric Joyner }; 28568a13362dSEric Joyner 28578a13362dSEric Joyner /* Buffer */ 28588a13362dSEric Joyner struct ice_aqc_move_rdma_qset_buffer_desc { 28598a13362dSEric Joyner __le16 tx_qset_id; 28608a13362dSEric Joyner __le16 qset_teid; 28618a13362dSEric Joyner }; 28628a13362dSEric Joyner 28638a13362dSEric Joyner struct ice_aqc_move_rdma_qset_buffer { 28648a13362dSEric Joyner __le32 src_parent_teid; 28658a13362dSEric Joyner __le32 dest_parent_teid; 28668a13362dSEric Joyner struct ice_aqc_move_rdma_qset_buffer_desc descs[STRUCT_HACK_VAR_LEN]; 28678a13362dSEric Joyner }; 28688a13362dSEric Joyner 286971d10453SEric Joyner /* Download Package (indirect 0x0C40) */ 28709c30461dSEric Joyner /* Also used for Update Package (indirect 0x0C41 and 0x0C42) */ 287171d10453SEric Joyner struct ice_aqc_download_pkg { 287271d10453SEric Joyner u8 flags; 287371d10453SEric Joyner #define ICE_AQC_DOWNLOAD_PKG_LAST_BUF 0x01 287471d10453SEric Joyner u8 reserved[3]; 287571d10453SEric Joyner __le32 reserved1; 287671d10453SEric Joyner __le32 addr_high; 287771d10453SEric Joyner __le32 addr_low; 287871d10453SEric Joyner }; 287971d10453SEric Joyner 288071d10453SEric Joyner struct ice_aqc_download_pkg_resp { 288171d10453SEric Joyner __le32 error_offset; 288271d10453SEric Joyner __le32 error_info; 288371d10453SEric Joyner __le32 addr_high; 288471d10453SEric Joyner __le32 addr_low; 288571d10453SEric Joyner }; 288671d10453SEric Joyner 288771d10453SEric Joyner /* Get Package Info List (indirect 0x0C43) */ 288871d10453SEric Joyner struct ice_aqc_get_pkg_info_list { 288971d10453SEric Joyner __le32 reserved1; 289071d10453SEric Joyner __le32 reserved2; 289171d10453SEric Joyner __le32 addr_high; 289271d10453SEric Joyner __le32 addr_low; 289371d10453SEric Joyner }; 289471d10453SEric Joyner 289571d10453SEric Joyner /* Version format for packages */ 289671d10453SEric Joyner struct ice_pkg_ver { 289771d10453SEric Joyner u8 major; 289871d10453SEric Joyner u8 minor; 289971d10453SEric Joyner u8 update; 290071d10453SEric Joyner u8 draft; 290171d10453SEric Joyner }; 290271d10453SEric Joyner 290371d10453SEric Joyner #define ICE_PKG_NAME_SIZE 32 2904d08b8680SEric Joyner #define ICE_SEG_ID_SIZE 28 290571d10453SEric Joyner #define ICE_SEG_NAME_SIZE 28 290671d10453SEric Joyner 290771d10453SEric Joyner struct ice_aqc_get_pkg_info { 290871d10453SEric Joyner struct ice_pkg_ver ver; 290971d10453SEric Joyner char name[ICE_SEG_NAME_SIZE]; 291071d10453SEric Joyner __le32 track_id; 291171d10453SEric Joyner u8 is_in_nvm; 291271d10453SEric Joyner u8 is_active; 291371d10453SEric Joyner u8 is_active_at_boot; 291471d10453SEric Joyner u8 is_modified; 291571d10453SEric Joyner }; 291671d10453SEric Joyner 291771d10453SEric Joyner /* Get Package Info List response buffer format (0x0C43) */ 291871d10453SEric Joyner struct ice_aqc_get_pkg_info_resp { 291971d10453SEric Joyner __le32 count; 29207d7af7f8SEric Joyner struct ice_aqc_get_pkg_info pkg_info[STRUCT_HACK_VAR_LEN]; 292171d10453SEric Joyner }; 292271d10453SEric Joyner 292371d10453SEric Joyner /* Driver Shared Parameters (direct, 0x0C90) */ 292471d10453SEric Joyner struct ice_aqc_driver_shared_params { 292571d10453SEric Joyner u8 set_or_get_op; 292671d10453SEric Joyner #define ICE_AQC_DRIVER_PARAM_OP_MASK BIT(0) 29278923de59SPiotr Kubaj #define ICE_AQC_DRIVER_PARAM_SET ((u8)0) 29288923de59SPiotr Kubaj #define ICE_AQC_DRIVER_PARAM_GET ((u8)1) 292971d10453SEric Joyner u8 param_indx; 293071d10453SEric Joyner #define ICE_AQC_DRIVER_PARAM_MAX_IDX 15 293171d10453SEric Joyner u8 rsvd[2]; 293271d10453SEric Joyner __le32 param_val; 293371d10453SEric Joyner __le32 addr_high; 293471d10453SEric Joyner __le32 addr_low; 293571d10453SEric Joyner }; 293671d10453SEric Joyner 293771d10453SEric Joyner /* Lan Queue Overflow Event (direct, 0x1001) */ 293871d10453SEric Joyner struct ice_aqc_event_lan_overflow { 293971d10453SEric Joyner __le32 prtdcb_ruptq; 294071d10453SEric Joyner __le32 qtx_ctl; 294171d10453SEric Joyner u8 reserved[8]; 294271d10453SEric Joyner }; 294371d10453SEric Joyner 294456429daeSEric Joyner /* Debug Dump Internal Data (indirect 0xFF08) */ 294556429daeSEric Joyner struct ice_aqc_debug_dump_internals { 29469e54973fSEric Joyner __le16 cluster_id; /* Expresses next cluster ID in response */ 2947*f2635e84SEric Joyner #define ICE_AQC_DBG_DUMP_CLUSTER_ID_SW_E810 0 2948*f2635e84SEric Joyner #define ICE_AQC_DBG_DUMP_CLUSTER_ID_ACL_E810 1 2949*f2635e84SEric Joyner #define ICE_AQC_DBG_DUMP_CLUSTER_ID_TXSCHED_E810 2 2950*f2635e84SEric Joyner #define ICE_AQC_DBG_DUMP_CLUSTER_ID_PROFILES_E810 3 295156429daeSEric Joyner /* EMP_DRAM only dumpable in device debug mode */ 2952*f2635e84SEric Joyner #define ICE_AQC_DBG_DUMP_CLUSTER_ID_EMP_DRAM_E810 4 2953*f2635e84SEric Joyner #define ICE_AQC_DBG_DUMP_CLUSTER_ID_LINK_E810 5 295456429daeSEric Joyner /* AUX_REGS only dumpable in device debug mode */ 2955*f2635e84SEric Joyner #define ICE_AQC_DBG_DUMP_CLUSTER_ID_AUX_REGS_E810 6 2956*f2635e84SEric Joyner #define ICE_AQC_DBG_DUMP_CLUSTER_ID_DCB_E810 7 2957*f2635e84SEric Joyner #define ICE_AQC_DBG_DUMP_CLUSTER_ID_L2P_E810 8 2958*f2635e84SEric Joyner #define ICE_AQC_DBG_DUMP_CLUSTER_ID_QUEUE_MNG_E810 9 2959*f2635e84SEric Joyner #define ICE_AQC_DBG_DUMP_CLUSTER_ID_FULL_CSR_SPACE_E810 21 2960*f2635e84SEric Joyner #define ICE_AQC_DBG_DUMP_CLUSTER_ID_MNG_TRANSACTIONS_E810 22 2961*f2635e84SEric Joyner 2962*f2635e84SEric Joyner /* Start cluster to discover first available cluster */ 2963*f2635e84SEric Joyner #define ICE_AQC_DBG_DUMP_CLUSTER_ID_START_ALL 0 2964*f2635e84SEric Joyner #define ICE_AQC_DBG_DUMP_CLUSTER_ID_SW_E830 100 2965*f2635e84SEric Joyner #define ICE_AQC_DBG_DUMP_CLUSTER_ID_ACL_E830 101 2966*f2635e84SEric Joyner #define ICE_AQC_DBG_DUMP_CLUSTER_ID_TXSCHED_E830 102 2967*f2635e84SEric Joyner #define ICE_AQC_DBG_DUMP_CLUSTER_ID_PROFILES_E830 103 2968*f2635e84SEric Joyner /* EMP_DRAM only dumpable in device debug mode */ 2969*f2635e84SEric Joyner #define ICE_AQC_DBG_DUMP_CLUSTER_ID_LINK_E830 105 2970*f2635e84SEric Joyner #define ICE_AQC_DBG_DUMP_CLUSTER_ID_DCB_E830 107 2971*f2635e84SEric Joyner #define ICE_AQC_DBG_DUMP_CLUSTER_ID_L2P_E830 108 2972*f2635e84SEric Joyner #define ICE_AQC_DBG_DUMP_CLUSTER_ID_QUEUE_MNG_E830 109 2973*f2635e84SEric Joyner #define ICE_AQC_DBG_DUMP_CLUSTER_ID_FULL_CSR_SPACE_E830 121 297456429daeSEric Joyner __le16 table_id; /* Used only for non-memory clusters */ 297556429daeSEric Joyner __le32 idx; /* In table entries for tables, in bytes for memory */ 297656429daeSEric Joyner __le32 addr_high; 297756429daeSEric Joyner __le32 addr_low; 297856429daeSEric Joyner }; 297956429daeSEric Joyner 298056429daeSEric Joyner enum ice_aqc_fw_logging_mod { 298156429daeSEric Joyner ICE_AQC_FW_LOG_ID_GENERAL = 0, 298256429daeSEric Joyner ICE_AQC_FW_LOG_ID_CTRL, 298356429daeSEric Joyner ICE_AQC_FW_LOG_ID_LINK, 298456429daeSEric Joyner ICE_AQC_FW_LOG_ID_LINK_TOPO, 298556429daeSEric Joyner ICE_AQC_FW_LOG_ID_DNL, 298656429daeSEric Joyner ICE_AQC_FW_LOG_ID_I2C, 298756429daeSEric Joyner ICE_AQC_FW_LOG_ID_SDP, 298856429daeSEric Joyner ICE_AQC_FW_LOG_ID_MDIO, 298956429daeSEric Joyner ICE_AQC_FW_LOG_ID_ADMINQ, 299056429daeSEric Joyner ICE_AQC_FW_LOG_ID_HDMA, 299156429daeSEric Joyner ICE_AQC_FW_LOG_ID_LLDP, 299256429daeSEric Joyner ICE_AQC_FW_LOG_ID_DCBX, 299356429daeSEric Joyner ICE_AQC_FW_LOG_ID_DCB, 299456429daeSEric Joyner ICE_AQC_FW_LOG_ID_XLR, 299556429daeSEric Joyner ICE_AQC_FW_LOG_ID_NVM, 299656429daeSEric Joyner ICE_AQC_FW_LOG_ID_AUTH, 299756429daeSEric Joyner ICE_AQC_FW_LOG_ID_VPD, 299856429daeSEric Joyner ICE_AQC_FW_LOG_ID_IOSF, 299956429daeSEric Joyner ICE_AQC_FW_LOG_ID_PARSER, 300056429daeSEric Joyner ICE_AQC_FW_LOG_ID_SW, 300156429daeSEric Joyner ICE_AQC_FW_LOG_ID_SCHEDULER, 300256429daeSEric Joyner ICE_AQC_FW_LOG_ID_TXQ, 300356429daeSEric Joyner ICE_AQC_FW_LOG_ID_RSVD, 300456429daeSEric Joyner ICE_AQC_FW_LOG_ID_POST, 300556429daeSEric Joyner ICE_AQC_FW_LOG_ID_WATCHDOG, 300656429daeSEric Joyner ICE_AQC_FW_LOG_ID_TASK_DISPATCH, 300756429daeSEric Joyner ICE_AQC_FW_LOG_ID_MNG, 300856429daeSEric Joyner ICE_AQC_FW_LOG_ID_SYNCE, 300956429daeSEric Joyner ICE_AQC_FW_LOG_ID_HEALTH, 301056429daeSEric Joyner ICE_AQC_FW_LOG_ID_TSDRV, 301156429daeSEric Joyner ICE_AQC_FW_LOG_ID_PFREG, 301256429daeSEric Joyner ICE_AQC_FW_LOG_ID_MDLVER, 301356429daeSEric Joyner ICE_AQC_FW_LOG_ID_MAX, 301456429daeSEric Joyner }; 301556429daeSEric Joyner 30167d7af7f8SEric Joyner /* Set Health Status (direct 0xFF20) */ 30177d7af7f8SEric Joyner struct ice_aqc_set_health_status_config { 30187d7af7f8SEric Joyner u8 event_source; 30197d7af7f8SEric Joyner #define ICE_AQC_HEALTH_STATUS_SET_PF_SPECIFIC_MASK BIT(0) 30207d7af7f8SEric Joyner #define ICE_AQC_HEALTH_STATUS_SET_ALL_PF_MASK BIT(1) 30217d7af7f8SEric Joyner #define ICE_AQC_HEALTH_STATUS_SET_GLOBAL_MASK BIT(2) 30227d7af7f8SEric Joyner u8 reserved[15]; 30237d7af7f8SEric Joyner }; 30247d7af7f8SEric Joyner 3025d08b8680SEric Joyner #define ICE_AQC_HEALTH_STATUS_ERR_UNKNOWN_MOD_STRICT 0x101 3026d08b8680SEric Joyner #define ICE_AQC_HEALTH_STATUS_ERR_MOD_TYPE 0x102 3027d08b8680SEric Joyner #define ICE_AQC_HEALTH_STATUS_ERR_MOD_QUAL 0x103 3028d08b8680SEric Joyner #define ICE_AQC_HEALTH_STATUS_ERR_MOD_COMM 0x104 3029d08b8680SEric Joyner #define ICE_AQC_HEALTH_STATUS_ERR_MOD_CONFLICT 0x105 3030d08b8680SEric Joyner #define ICE_AQC_HEALTH_STATUS_ERR_MOD_NOT_PRESENT 0x106 3031d08b8680SEric Joyner #define ICE_AQC_HEALTH_STATUS_INFO_MOD_UNDERUTILIZED 0x107 3032d08b8680SEric Joyner #define ICE_AQC_HEALTH_STATUS_ERR_UNKNOWN_MOD_LENIENT 0x108 30338923de59SPiotr Kubaj #define ICE_AQC_HEALTH_STATUS_ERR_MOD_DIAGNOSTIC_FEATURE 0x109 3034d08b8680SEric Joyner #define ICE_AQC_HEALTH_STATUS_ERR_INVALID_LINK_CFG 0x10B 3035d08b8680SEric Joyner #define ICE_AQC_HEALTH_STATUS_ERR_PORT_ACCESS 0x10C 3036d08b8680SEric Joyner #define ICE_AQC_HEALTH_STATUS_ERR_PORT_UNREACHABLE 0x10D 3037d08b8680SEric Joyner #define ICE_AQC_HEALTH_STATUS_INFO_PORT_SPEED_MOD_LIMITED 0x10F 3038d08b8680SEric Joyner #define ICE_AQC_HEALTH_STATUS_ERR_PARALLEL_FAULT 0x110 3039d08b8680SEric Joyner #define ICE_AQC_HEALTH_STATUS_INFO_PORT_SPEED_PHY_LIMITED 0x111 3040d08b8680SEric Joyner #define ICE_AQC_HEALTH_STATUS_ERR_NETLIST_TOPO 0x112 3041d08b8680SEric Joyner #define ICE_AQC_HEALTH_STATUS_ERR_NETLIST 0x113 3042d08b8680SEric Joyner #define ICE_AQC_HEALTH_STATUS_ERR_TOPO_CONFLICT 0x114 3043d08b8680SEric Joyner #define ICE_AQC_HEALTH_STATUS_ERR_LINK_HW_ACCESS 0x115 3044d08b8680SEric Joyner #define ICE_AQC_HEALTH_STATUS_ERR_LINK_RUNTIME 0x116 3045d08b8680SEric Joyner #define ICE_AQC_HEALTH_STATUS_ERR_DNL_INIT 0x117 304656429daeSEric Joyner #define ICE_AQC_HEALTH_STATUS_ERR_PHY_NVM_PROG 0x120 304756429daeSEric Joyner #define ICE_AQC_HEALTH_STATUS_ERR_PHY_FW_LOAD 0x121 3048d08b8680SEric Joyner #define ICE_AQC_HEALTH_STATUS_INFO_RECOVERY 0x500 3049d08b8680SEric Joyner #define ICE_AQC_HEALTH_STATUS_ERR_FLASH_ACCESS 0x501 3050d08b8680SEric Joyner #define ICE_AQC_HEALTH_STATUS_ERR_NVM_AUTH 0x502 3051d08b8680SEric Joyner #define ICE_AQC_HEALTH_STATUS_ERR_OROM_AUTH 0x503 3052d08b8680SEric Joyner #define ICE_AQC_HEALTH_STATUS_ERR_DDP_AUTH 0x504 3053d08b8680SEric Joyner #define ICE_AQC_HEALTH_STATUS_ERR_NVM_COMPAT 0x505 3054d08b8680SEric Joyner #define ICE_AQC_HEALTH_STATUS_ERR_OROM_COMPAT 0x506 30558923de59SPiotr Kubaj #define ICE_AQC_HEALTH_STATUS_ERR_NVM_SEC_VIOLATION 0x507 30568923de59SPiotr Kubaj #define ICE_AQC_HEALTH_STATUS_ERR_OROM_SEC_VIOLATION 0x508 3057d08b8680SEric Joyner #define ICE_AQC_HEALTH_STATUS_ERR_DCB_MIB 0x509 30588923de59SPiotr Kubaj #define ICE_AQC_HEALTH_STATUS_ERR_MNG_TIMEOUT 0x50A 30598923de59SPiotr Kubaj #define ICE_AQC_HEALTH_STATUS_ERR_BMC_RESET 0x50B 30608923de59SPiotr Kubaj #define ICE_AQC_HEALTH_STATUS_ERR_LAST_MNG_FAIL 0x50C 30618923de59SPiotr Kubaj #define ICE_AQC_HEALTH_STATUS_ERR_RESOURCE_ALLOC_FAIL 0x50D 30628923de59SPiotr Kubaj #define ICE_AQC_HEALTH_STATUS_ERR_FW_LOOP 0x1000 30638923de59SPiotr Kubaj #define ICE_AQC_HEALTH_STATUS_ERR_FW_PFR_FAIL 0x1001 30648923de59SPiotr Kubaj #define ICE_AQC_HEALTH_STATUS_ERR_LAST_FAIL_AQ 0x1002 3065d08b8680SEric Joyner 30667d7af7f8SEric Joyner /* Get Health Status codes (indirect 0xFF21) */ 30677d7af7f8SEric Joyner struct ice_aqc_get_supported_health_status_codes { 30687d7af7f8SEric Joyner __le16 health_code_count; 30697d7af7f8SEric Joyner u8 reserved[6]; 30707d7af7f8SEric Joyner __le32 addr_high; 30717d7af7f8SEric Joyner __le32 addr_low; 30727d7af7f8SEric Joyner }; 30737d7af7f8SEric Joyner 30747d7af7f8SEric Joyner /* Get Health Status (indirect 0xFF22) */ 30757d7af7f8SEric Joyner struct ice_aqc_get_health_status { 30767d7af7f8SEric Joyner __le16 health_status_count; 30777d7af7f8SEric Joyner u8 reserved[6]; 30787d7af7f8SEric Joyner __le32 addr_high; 30797d7af7f8SEric Joyner __le32 addr_low; 30807d7af7f8SEric Joyner }; 30817d7af7f8SEric Joyner 30827d7af7f8SEric Joyner /* Get Health Status event buffer entry, (0xFF22) 30837d7af7f8SEric Joyner * repeated per reported health status 30847d7af7f8SEric Joyner */ 30857d7af7f8SEric Joyner struct ice_aqc_health_status_elem { 30867d7af7f8SEric Joyner __le16 health_status_code; 30877d7af7f8SEric Joyner __le16 event_source; 30887d7af7f8SEric Joyner #define ICE_AQC_HEALTH_STATUS_PF (0x1) 30897d7af7f8SEric Joyner #define ICE_AQC_HEALTH_STATUS_PORT (0x2) 30907d7af7f8SEric Joyner #define ICE_AQC_HEALTH_STATUS_GLOBAL (0x3) 30917d7af7f8SEric Joyner __le32 internal_data1; 30927d7af7f8SEric Joyner #define ICE_AQC_HEALTH_STATUS_UNDEFINED_DATA (0xDEADBEEF) 30937d7af7f8SEric Joyner __le32 internal_data2; 30947d7af7f8SEric Joyner }; 30957d7af7f8SEric Joyner 30967d7af7f8SEric Joyner /* Clear Health Status (direct 0xFF23) */ 30977d7af7f8SEric Joyner struct ice_aqc_clear_health_status { 30987d7af7f8SEric Joyner __le32 reserved[4]; 30997d7af7f8SEric Joyner }; 31007d7af7f8SEric Joyner 31019cf1841cSEric Joyner /* Set FW Logging configuration (indirect 0xFF30) 31029cf1841cSEric Joyner * Register for FW Logging (indirect 0xFF31) 31039cf1841cSEric Joyner * Query FW Logging (indirect 0xFF32) 31049cf1841cSEric Joyner * FW Log Event (indirect 0xFF33) 31059cf1841cSEric Joyner * Get FW Log (indirect 0xFF34) 31069cf1841cSEric Joyner * Clear FW Log (indirect 0xFF35) 31079cf1841cSEric Joyner */ 31089cf1841cSEric Joyner struct ice_aqc_fw_log { 31099cf1841cSEric Joyner u8 cmd_flags; 31109cf1841cSEric Joyner #define ICE_AQC_FW_LOG_CONF_UART_EN BIT(0) 31119cf1841cSEric Joyner #define ICE_AQC_FW_LOG_CONF_AQ_EN BIT(1) 311256429daeSEric Joyner #define ICE_AQC_FW_LOG_QUERY_REGISTERED BIT(2) 31139cf1841cSEric Joyner #define ICE_AQC_FW_LOG_CONF_SET_VALID BIT(3) 31149cf1841cSEric Joyner #define ICE_AQC_FW_LOG_AQ_REGISTER BIT(0) 31159cf1841cSEric Joyner #define ICE_AQC_FW_LOG_AQ_QUERY BIT(2) 31169cf1841cSEric Joyner #define ICE_AQC_FW_LOG_PERSISTENT BIT(0) 31179cf1841cSEric Joyner u8 rsp_flag; 31189cf1841cSEric Joyner #define ICE_AQC_FW_LOG_MORE_DATA BIT(1) 31199cf1841cSEric Joyner __le16 fw_rt_msb; 31209cf1841cSEric Joyner union { 31219cf1841cSEric Joyner struct { 31229cf1841cSEric Joyner __le32 fw_rt_lsb; 31239cf1841cSEric Joyner } sync; 31249cf1841cSEric Joyner struct { 31259cf1841cSEric Joyner __le16 log_resolution; 31269cf1841cSEric Joyner #define ICE_AQC_FW_LOG_MIN_RESOLUTION (1) 31279cf1841cSEric Joyner #define ICE_AQC_FW_LOG_MAX_RESOLUTION (128) 31289cf1841cSEric Joyner __le16 mdl_cnt; 31299cf1841cSEric Joyner } cfg; 31309cf1841cSEric Joyner } ops; 31319cf1841cSEric Joyner __le32 addr_high; 31329cf1841cSEric Joyner __le32 addr_low; 31339cf1841cSEric Joyner }; 31349cf1841cSEric Joyner 31359cf1841cSEric Joyner /* Response Buffer for: 31369cf1841cSEric Joyner * Set Firmware Logging Configuration (0xFF30) 31379cf1841cSEric Joyner * Query FW Logging (0xFF32) 31389cf1841cSEric Joyner */ 31399cf1841cSEric Joyner struct ice_aqc_fw_log_cfg_resp { 31409cf1841cSEric Joyner __le16 module_identifier; 31419cf1841cSEric Joyner u8 log_level; 31429cf1841cSEric Joyner u8 rsvd0; 31439cf1841cSEric Joyner }; 31449cf1841cSEric Joyner 314571d10453SEric Joyner /** 314671d10453SEric Joyner * struct ice_aq_desc - Admin Queue (AQ) descriptor 314771d10453SEric Joyner * @flags: ICE_AQ_FLAG_* flags 314871d10453SEric Joyner * @opcode: AQ command opcode 314971d10453SEric Joyner * @datalen: length in bytes of indirect/external data buffer 315071d10453SEric Joyner * @retval: return value from firmware 3151d08b8680SEric Joyner * @cookie_high: opaque data high-half 3152d08b8680SEric Joyner * @cookie_low: opaque data low-half 315371d10453SEric Joyner * @params: command-specific parameters 315471d10453SEric Joyner * 315571d10453SEric Joyner * Descriptor format for commands the driver posts on the Admin Transmit Queue 315671d10453SEric Joyner * (ATQ). The firmware writes back onto the command descriptor and returns 315771d10453SEric Joyner * the result of the command. Asynchronous events that are not an immediate 315871d10453SEric Joyner * result of the command are written to the Admin Receive Queue (ARQ) using 315971d10453SEric Joyner * the same descriptor format. Descriptors are in little-endian notation with 316071d10453SEric Joyner * 32-bit words. 316171d10453SEric Joyner */ 316271d10453SEric Joyner struct ice_aq_desc { 316371d10453SEric Joyner __le16 flags; 316471d10453SEric Joyner __le16 opcode; 316571d10453SEric Joyner __le16 datalen; 316671d10453SEric Joyner __le16 retval; 316771d10453SEric Joyner __le32 cookie_high; 316871d10453SEric Joyner __le32 cookie_low; 316971d10453SEric Joyner union { 317071d10453SEric Joyner u8 raw[16]; 317171d10453SEric Joyner struct ice_aqc_generic generic; 317271d10453SEric Joyner struct ice_aqc_get_ver get_ver; 317371d10453SEric Joyner struct ice_aqc_driver_ver driver_ver; 317471d10453SEric Joyner struct ice_aqc_q_shutdown q_shutdown; 317571d10453SEric Joyner struct ice_aqc_get_exp_err exp_err; 317671d10453SEric Joyner struct ice_aqc_req_res res_owner; 317771d10453SEric Joyner struct ice_aqc_manage_mac_read mac_read; 317871d10453SEric Joyner struct ice_aqc_manage_mac_write mac_write; 317971d10453SEric Joyner struct ice_aqc_clear_pxe clear_pxe; 318071d10453SEric Joyner struct ice_aqc_config_no_drop_policy no_drop; 318171d10453SEric Joyner struct ice_aqc_add_update_mir_rule add_update_rule; 318271d10453SEric Joyner struct ice_aqc_delete_mir_rule del_rule; 318371d10453SEric Joyner struct ice_aqc_list_caps get_cap; 318471d10453SEric Joyner struct ice_aqc_get_phy_caps get_phy; 318571d10453SEric Joyner struct ice_aqc_set_phy_cfg set_phy; 318671d10453SEric Joyner struct ice_aqc_restart_an restart_an; 31879c30461dSEric Joyner struct ice_aqc_get_sensor_reading get_sensor_reading; 31889c30461dSEric Joyner struct ice_aqc_get_sensor_reading_resp get_sensor_reading_resp; 318971d10453SEric Joyner struct ice_aqc_dnl_get_status get_status; 319071d10453SEric Joyner struct ice_aqc_dnl_run_command dnl_run; 319171d10453SEric Joyner struct ice_aqc_dnl_call_command dnl_call; 319271d10453SEric Joyner struct ice_aqc_dnl_read_write_command dnl_read_write; 319371d10453SEric Joyner struct ice_aqc_dnl_read_write_response dnl_read_write_resp; 319471d10453SEric Joyner struct ice_aqc_dnl_set_breakpoints_command dnl_set_brk; 319571d10453SEric Joyner struct ice_aqc_dnl_read_log_command dnl_read_log; 319671d10453SEric Joyner struct ice_aqc_dnl_read_log_response dnl_read_log_resp; 319771d10453SEric Joyner struct ice_aqc_i2c read_write_i2c; 31989cf1841cSEric Joyner struct ice_aqc_read_i2c_resp read_i2c_resp; 319971d10453SEric Joyner struct ice_aqc_mdio read_write_mdio; 320071d10453SEric Joyner struct ice_aqc_gpio_by_func read_write_gpio_by_func; 320171d10453SEric Joyner struct ice_aqc_gpio read_write_gpio; 320256429daeSEric Joyner struct ice_aqc_sw_gpio sw_read_write_gpio; 320371d10453SEric Joyner struct ice_aqc_set_led set_led; 32049cf1841cSEric Joyner struct ice_aqc_mdio read_mdio; 32059cf1841cSEric Joyner struct ice_aqc_mdio write_mdio; 320671d10453SEric Joyner struct ice_aqc_sff_eeprom read_write_sff_param; 320771d10453SEric Joyner struct ice_aqc_set_port_id_led set_port_id_led; 320871d10453SEric Joyner struct ice_aqc_get_port_options get_port_options; 320971d10453SEric Joyner struct ice_aqc_set_port_option set_port_option; 321071d10453SEric Joyner struct ice_aqc_get_sw_cfg get_sw_conf; 321171d10453SEric Joyner struct ice_aqc_set_port_params set_port_params; 321271d10453SEric Joyner struct ice_aqc_sw_rules sw_rules; 321371d10453SEric Joyner struct ice_aqc_storm_cfg storm_conf; 321471d10453SEric Joyner struct ice_aqc_get_topo get_topo; 321571d10453SEric Joyner struct ice_aqc_sched_elem_cmd sched_elem_cmd; 321671d10453SEric Joyner struct ice_aqc_query_txsched_res query_sched_res; 321771d10453SEric Joyner struct ice_aqc_query_node_to_root query_node_to_root; 321871d10453SEric Joyner struct ice_aqc_cfg_l2_node_cgd cfg_l2_node_cgd; 321971d10453SEric Joyner struct ice_aqc_query_port_ets port_ets; 322071d10453SEric Joyner struct ice_aqc_rl_profile rl_profile; 32218923de59SPiotr Kubaj struct ice_aqc_node_attr node_attr; 322271d10453SEric Joyner struct ice_aqc_nvm nvm; 322371d10453SEric Joyner struct ice_aqc_nvm_cfg nvm_cfg; 322471d10453SEric Joyner struct ice_aqc_nvm_checksum nvm_checksum; 3225*f2635e84SEric Joyner struct ice_aqc_nvm_sanitization sanitization; 322671d10453SEric Joyner struct ice_aqc_pf_vf_msg virt; 322771d10453SEric Joyner struct ice_aqc_read_write_alt_direct read_write_alt_direct; 322871d10453SEric Joyner struct ice_aqc_read_write_alt_indirect read_write_alt_indirect; 322971d10453SEric Joyner struct ice_aqc_done_alt_write done_alt_write; 323071d10453SEric Joyner struct ice_aqc_clear_port_alt_write clear_port_alt_write; 323171d10453SEric Joyner struct ice_aqc_pfc_ignore pfc_ignore; 323271d10453SEric Joyner struct ice_aqc_set_query_pfc_mode set_query_pfc_mode; 323371d10453SEric Joyner struct ice_aqc_set_dcb_params set_dcb_params; 323471d10453SEric Joyner struct ice_aqc_lldp_get_mib lldp_get_mib; 323571d10453SEric Joyner struct ice_aqc_lldp_set_mib_change lldp_set_event; 323671d10453SEric Joyner struct ice_aqc_lldp_add_delete_tlv lldp_add_delete_tlv; 323771d10453SEric Joyner struct ice_aqc_lldp_update_tlv lldp_update_tlv; 323871d10453SEric Joyner struct ice_aqc_lldp_stop lldp_stop; 323971d10453SEric Joyner struct ice_aqc_lldp_start lldp_start; 324071d10453SEric Joyner struct ice_aqc_lldp_set_local_mib lldp_set_mib; 324171d10453SEric Joyner struct ice_aqc_lldp_stop_start_specific_agent lldp_agent_ctrl; 32427d7af7f8SEric Joyner struct ice_aqc_lldp_filter_ctrl lldp_filter_ctrl; 324371d10453SEric Joyner struct ice_aqc_get_set_rss_lut get_set_rss_lut; 324471d10453SEric Joyner struct ice_aqc_get_set_rss_key get_set_rss_key; 3245*f2635e84SEric Joyner struct ice_aqc_neigh_dev_req neigh_dev; 324671d10453SEric Joyner struct ice_aqc_add_txqs add_txqs; 324771d10453SEric Joyner struct ice_aqc_dis_txqs dis_txqs; 324871d10453SEric Joyner struct ice_aqc_move_txqs move_txqs; 32498a13362dSEric Joyner struct ice_aqc_add_rdma_qset add_rdma_qset; 32508923de59SPiotr Kubaj struct ice_aqc_move_rdma_qset_cmd move_rdma_qset; 325171d10453SEric Joyner struct ice_aqc_txqs_cleanup txqs_cleanup; 325271d10453SEric Joyner struct ice_aqc_add_get_update_free_vsi vsi_cmd; 325371d10453SEric Joyner struct ice_aqc_add_update_free_vsi_resp add_update_free_vsi_res; 325471d10453SEric Joyner struct ice_aqc_get_vsi_resp get_vsi_resp; 325571d10453SEric Joyner struct ice_aqc_download_pkg download_pkg; 325671d10453SEric Joyner struct ice_aqc_get_pkg_info_list get_pkg_info_list; 325771d10453SEric Joyner struct ice_aqc_driver_shared_params drv_shared_params; 325856429daeSEric Joyner struct ice_aqc_fw_log fw_log; 325956429daeSEric Joyner struct ice_aqc_debug_dump_internals debug_dump; 326071d10453SEric Joyner struct ice_aqc_set_mac_lb set_mac_lb; 326171d10453SEric Joyner struct ice_aqc_alloc_free_res_cmd sw_res_ctrl; 326271d10453SEric Joyner struct ice_aqc_get_res_alloc get_res; 326371d10453SEric Joyner struct ice_aqc_get_allocd_res_desc get_res_desc; 326471d10453SEric Joyner struct ice_aqc_set_mac_cfg set_mac_cfg; 326571d10453SEric Joyner struct ice_aqc_set_event_mask set_event_mask; 326671d10453SEric Joyner struct ice_aqc_get_link_status get_link_status; 326771d10453SEric Joyner struct ice_aqc_event_lan_overflow lan_overflow; 326871d10453SEric Joyner struct ice_aqc_get_link_topo get_link_topo; 32697d7af7f8SEric Joyner struct ice_aqc_set_health_status_config 32707d7af7f8SEric Joyner set_health_status_config; 32717d7af7f8SEric Joyner struct ice_aqc_get_supported_health_status_codes 32727d7af7f8SEric Joyner get_supported_health_status_codes; 32737d7af7f8SEric Joyner struct ice_aqc_get_health_status get_health_status; 32747d7af7f8SEric Joyner struct ice_aqc_clear_health_status clear_health_status; 327556429daeSEric Joyner struct ice_aqc_prog_topo_dev_nvm prog_topo_dev_nvm; 327656429daeSEric Joyner struct ice_aqc_read_topo_dev_nvm read_topo_dev_nvm; 32778923de59SPiotr Kubaj struct ice_aqc_get_set_tx_topo get_set_tx_topo; 327871d10453SEric Joyner } params; 327971d10453SEric Joyner }; 328071d10453SEric Joyner 328171d10453SEric Joyner /* FW defined boundary for a large buffer, 4k >= Large buffer > 512 bytes */ 328271d10453SEric Joyner #define ICE_AQ_LG_BUF 512 328371d10453SEric Joyner 328471d10453SEric Joyner /* Flags sub-structure 328571d10453SEric Joyner * |0 |1 |2 |3 |4 |5 |6 |7 |8 |9 |10 |11 |12 |13 |14 |15 | 328671d10453SEric Joyner * |DD |CMP|ERR|VFE| * * RESERVED * * |LB |RD |VFC|BUF|SI |EI |FE | 328771d10453SEric Joyner */ 328871d10453SEric Joyner 328971d10453SEric Joyner /* command flags and offsets */ 329071d10453SEric Joyner #define ICE_AQ_FLAG_DD_S 0 329171d10453SEric Joyner #define ICE_AQ_FLAG_CMP_S 1 329271d10453SEric Joyner #define ICE_AQ_FLAG_ERR_S 2 329371d10453SEric Joyner #define ICE_AQ_FLAG_VFE_S 3 329471d10453SEric Joyner #define ICE_AQ_FLAG_LB_S 9 329571d10453SEric Joyner #define ICE_AQ_FLAG_RD_S 10 329671d10453SEric Joyner #define ICE_AQ_FLAG_VFC_S 11 329771d10453SEric Joyner #define ICE_AQ_FLAG_BUF_S 12 329871d10453SEric Joyner #define ICE_AQ_FLAG_SI_S 13 329971d10453SEric Joyner #define ICE_AQ_FLAG_EI_S 14 330071d10453SEric Joyner #define ICE_AQ_FLAG_FE_S 15 330171d10453SEric Joyner 330271d10453SEric Joyner #define ICE_AQ_FLAG_DD BIT(ICE_AQ_FLAG_DD_S) /* 0x1 */ 330371d10453SEric Joyner #define ICE_AQ_FLAG_CMP BIT(ICE_AQ_FLAG_CMP_S) /* 0x2 */ 330471d10453SEric Joyner #define ICE_AQ_FLAG_ERR BIT(ICE_AQ_FLAG_ERR_S) /* 0x4 */ 330571d10453SEric Joyner #define ICE_AQ_FLAG_VFE BIT(ICE_AQ_FLAG_VFE_S) /* 0x8 */ 330671d10453SEric Joyner #define ICE_AQ_FLAG_LB BIT(ICE_AQ_FLAG_LB_S) /* 0x200 */ 330771d10453SEric Joyner #define ICE_AQ_FLAG_RD BIT(ICE_AQ_FLAG_RD_S) /* 0x400 */ 330871d10453SEric Joyner #define ICE_AQ_FLAG_VFC BIT(ICE_AQ_FLAG_VFC_S) /* 0x800 */ 330971d10453SEric Joyner #define ICE_AQ_FLAG_BUF BIT(ICE_AQ_FLAG_BUF_S) /* 0x1000 */ 331071d10453SEric Joyner #define ICE_AQ_FLAG_SI BIT(ICE_AQ_FLAG_SI_S) /* 0x2000 */ 331171d10453SEric Joyner #define ICE_AQ_FLAG_EI BIT(ICE_AQ_FLAG_EI_S) /* 0x4000 */ 331271d10453SEric Joyner #define ICE_AQ_FLAG_FE BIT(ICE_AQ_FLAG_FE_S) /* 0x8000 */ 331371d10453SEric Joyner 331471d10453SEric Joyner /* error codes */ 331571d10453SEric Joyner enum ice_aq_err { 331671d10453SEric Joyner ICE_AQ_RC_OK = 0, /* Success */ 331771d10453SEric Joyner ICE_AQ_RC_EPERM = 1, /* Operation not permitted */ 331871d10453SEric Joyner ICE_AQ_RC_ENOENT = 2, /* No such element */ 331971d10453SEric Joyner ICE_AQ_RC_ESRCH = 3, /* Bad opcode */ 332071d10453SEric Joyner ICE_AQ_RC_EINTR = 4, /* Operation interrupted */ 332171d10453SEric Joyner ICE_AQ_RC_EIO = 5, /* I/O error */ 332271d10453SEric Joyner ICE_AQ_RC_ENXIO = 6, /* No such resource */ 332371d10453SEric Joyner ICE_AQ_RC_E2BIG = 7, /* Arg too long */ 332471d10453SEric Joyner ICE_AQ_RC_EAGAIN = 8, /* Try again */ 332571d10453SEric Joyner ICE_AQ_RC_ENOMEM = 9, /* Out of memory */ 332671d10453SEric Joyner ICE_AQ_RC_EACCES = 10, /* Permission denied */ 332771d10453SEric Joyner ICE_AQ_RC_EFAULT = 11, /* Bad address */ 332871d10453SEric Joyner ICE_AQ_RC_EBUSY = 12, /* Device or resource busy */ 332971d10453SEric Joyner ICE_AQ_RC_EEXIST = 13, /* Object already exists */ 333071d10453SEric Joyner ICE_AQ_RC_EINVAL = 14, /* Invalid argument */ 333171d10453SEric Joyner ICE_AQ_RC_ENOTTY = 15, /* Not a typewriter */ 333271d10453SEric Joyner ICE_AQ_RC_ENOSPC = 16, /* No space left or allocation failure */ 333371d10453SEric Joyner ICE_AQ_RC_ENOSYS = 17, /* Function not implemented */ 333471d10453SEric Joyner ICE_AQ_RC_ERANGE = 18, /* Parameter out of range */ 333571d10453SEric Joyner ICE_AQ_RC_EFLUSHED = 19, /* Cmd flushed due to prev cmd error */ 333671d10453SEric Joyner ICE_AQ_RC_BAD_ADDR = 20, /* Descriptor contains a bad pointer */ 333771d10453SEric Joyner ICE_AQ_RC_EMODE = 21, /* Op not allowed in current dev mode */ 333871d10453SEric Joyner ICE_AQ_RC_EFBIG = 22, /* File too big */ 333971d10453SEric Joyner ICE_AQ_RC_ESBCOMP = 23, /* SB-IOSF completion unsuccessful */ 334071d10453SEric Joyner ICE_AQ_RC_ENOSEC = 24, /* Missing security manifest */ 334171d10453SEric Joyner ICE_AQ_RC_EBADSIG = 25, /* Bad RSA signature */ 334271d10453SEric Joyner ICE_AQ_RC_ESVN = 26, /* SVN number prohibits this package */ 334371d10453SEric Joyner ICE_AQ_RC_EBADMAN = 27, /* Manifest hash mismatch */ 334471d10453SEric Joyner ICE_AQ_RC_EBADBUF = 28, /* Buffer hash mismatches manifest */ 334571d10453SEric Joyner ICE_AQ_RC_EACCES_BMCU = 29, /* BMC Update in progress */ 334671d10453SEric Joyner }; 334771d10453SEric Joyner 334871d10453SEric Joyner /* Admin Queue command opcodes */ 334971d10453SEric Joyner enum ice_adminq_opc { 335071d10453SEric Joyner /* AQ commands */ 335171d10453SEric Joyner ice_aqc_opc_get_ver = 0x0001, 335271d10453SEric Joyner ice_aqc_opc_driver_ver = 0x0002, 335371d10453SEric Joyner ice_aqc_opc_q_shutdown = 0x0003, 335471d10453SEric Joyner ice_aqc_opc_get_exp_err = 0x0005, 335571d10453SEric Joyner 335671d10453SEric Joyner /* resource ownership */ 335771d10453SEric Joyner ice_aqc_opc_req_res = 0x0008, 335871d10453SEric Joyner ice_aqc_opc_release_res = 0x0009, 335971d10453SEric Joyner 336071d10453SEric Joyner /* device/function capabilities */ 336171d10453SEric Joyner ice_aqc_opc_list_func_caps = 0x000A, 336271d10453SEric Joyner ice_aqc_opc_list_dev_caps = 0x000B, 336371d10453SEric Joyner 336471d10453SEric Joyner /* manage MAC address */ 336571d10453SEric Joyner ice_aqc_opc_manage_mac_read = 0x0107, 336671d10453SEric Joyner ice_aqc_opc_manage_mac_write = 0x0108, 336771d10453SEric Joyner 336871d10453SEric Joyner /* PXE */ 336971d10453SEric Joyner ice_aqc_opc_clear_pxe_mode = 0x0110, 337071d10453SEric Joyner 337171d10453SEric Joyner ice_aqc_opc_config_no_drop_policy = 0x0112, 337271d10453SEric Joyner 337371d10453SEric Joyner /* internal switch commands */ 337471d10453SEric Joyner ice_aqc_opc_get_sw_cfg = 0x0200, 337571d10453SEric Joyner ice_aqc_opc_set_port_params = 0x0203, 337671d10453SEric Joyner 337771d10453SEric Joyner /* Alloc/Free/Get Resources */ 337871d10453SEric Joyner ice_aqc_opc_get_res_alloc = 0x0204, 337971d10453SEric Joyner ice_aqc_opc_alloc_res = 0x0208, 338071d10453SEric Joyner ice_aqc_opc_free_res = 0x0209, 338171d10453SEric Joyner ice_aqc_opc_get_allocd_res_desc = 0x020A, 33829cf1841cSEric Joyner ice_aqc_opc_set_vlan_mode_parameters = 0x020C, 33839cf1841cSEric Joyner ice_aqc_opc_get_vlan_mode_parameters = 0x020D, 338471d10453SEric Joyner 338571d10453SEric Joyner /* VSI commands */ 338671d10453SEric Joyner ice_aqc_opc_add_vsi = 0x0210, 338771d10453SEric Joyner ice_aqc_opc_update_vsi = 0x0211, 338871d10453SEric Joyner ice_aqc_opc_get_vsi_params = 0x0212, 338971d10453SEric Joyner ice_aqc_opc_free_vsi = 0x0213, 339071d10453SEric Joyner 339171d10453SEric Joyner /* Mirroring rules - add/update, delete */ 339271d10453SEric Joyner ice_aqc_opc_add_update_mir_rule = 0x0260, 339371d10453SEric Joyner ice_aqc_opc_del_mir_rule = 0x0261, 339471d10453SEric Joyner 339571d10453SEric Joyner /* storm configuration */ 339671d10453SEric Joyner ice_aqc_opc_set_storm_cfg = 0x0280, 339771d10453SEric Joyner ice_aqc_opc_get_storm_cfg = 0x0281, 339871d10453SEric Joyner 339971d10453SEric Joyner /* switch rules population commands */ 340071d10453SEric Joyner ice_aqc_opc_add_sw_rules = 0x02A0, 340171d10453SEric Joyner ice_aqc_opc_update_sw_rules = 0x02A1, 340271d10453SEric Joyner ice_aqc_opc_remove_sw_rules = 0x02A2, 340371d10453SEric Joyner ice_aqc_opc_get_sw_rules = 0x02A3, 340471d10453SEric Joyner ice_aqc_opc_clear_pf_cfg = 0x02A4, 340571d10453SEric Joyner 340671d10453SEric Joyner /* DCB commands */ 340771d10453SEric Joyner ice_aqc_opc_pfc_ignore = 0x0301, 340871d10453SEric Joyner ice_aqc_opc_query_pfc_mode = 0x0302, 340971d10453SEric Joyner ice_aqc_opc_set_pfc_mode = 0x0303, 341071d10453SEric Joyner ice_aqc_opc_set_dcb_params = 0x0306, 341171d10453SEric Joyner 341271d10453SEric Joyner /* transmit scheduler commands */ 341371d10453SEric Joyner ice_aqc_opc_get_dflt_topo = 0x0400, 341471d10453SEric Joyner ice_aqc_opc_add_sched_elems = 0x0401, 341571d10453SEric Joyner ice_aqc_opc_cfg_sched_elems = 0x0403, 341671d10453SEric Joyner ice_aqc_opc_get_sched_elems = 0x0404, 341771d10453SEric Joyner ice_aqc_opc_move_sched_elems = 0x0408, 341871d10453SEric Joyner ice_aqc_opc_suspend_sched_elems = 0x0409, 341971d10453SEric Joyner ice_aqc_opc_resume_sched_elems = 0x040A, 342071d10453SEric Joyner ice_aqc_opc_query_port_ets = 0x040E, 342171d10453SEric Joyner ice_aqc_opc_delete_sched_elems = 0x040F, 342271d10453SEric Joyner ice_aqc_opc_add_rl_profiles = 0x0410, 342371d10453SEric Joyner ice_aqc_opc_query_rl_profiles = 0x0411, 342471d10453SEric Joyner ice_aqc_opc_query_sched_res = 0x0412, 342571d10453SEric Joyner ice_aqc_opc_query_node_to_root = 0x0413, 342671d10453SEric Joyner ice_aqc_opc_cfg_l2_node_cgd = 0x0414, 342771d10453SEric Joyner ice_aqc_opc_remove_rl_profiles = 0x0415, 34288923de59SPiotr Kubaj ice_aqc_opc_set_tx_topo = 0x0417, 34298923de59SPiotr Kubaj ice_aqc_opc_get_tx_topo = 0x0418, 34308923de59SPiotr Kubaj ice_aqc_opc_cfg_node_attr = 0x0419, 34318923de59SPiotr Kubaj ice_aqc_opc_query_node_attr = 0x041A, 343271d10453SEric Joyner 343371d10453SEric Joyner /* PHY commands */ 343471d10453SEric Joyner ice_aqc_opc_get_phy_caps = 0x0600, 343571d10453SEric Joyner ice_aqc_opc_set_phy_cfg = 0x0601, 343671d10453SEric Joyner ice_aqc_opc_set_mac_cfg = 0x0603, 343771d10453SEric Joyner ice_aqc_opc_restart_an = 0x0605, 343871d10453SEric Joyner ice_aqc_opc_get_link_status = 0x0607, 343971d10453SEric Joyner ice_aqc_opc_set_event_mask = 0x0613, 344071d10453SEric Joyner ice_aqc_opc_set_mac_lb = 0x0620, 34419c30461dSEric Joyner ice_aqc_opc_get_sensor_reading = 0x0632, 344271d10453SEric Joyner ice_aqc_opc_dnl_get_status = 0x0680, 344371d10453SEric Joyner ice_aqc_opc_dnl_run = 0x0681, 344471d10453SEric Joyner ice_aqc_opc_dnl_call = 0x0682, 344571d10453SEric Joyner ice_aqc_opc_dnl_read_sto = 0x0683, 344671d10453SEric Joyner ice_aqc_opc_dnl_write_sto = 0x0684, 344771d10453SEric Joyner ice_aqc_opc_dnl_set_breakpoints = 0x0686, 344871d10453SEric Joyner ice_aqc_opc_dnl_read_log = 0x0687, 344971d10453SEric Joyner ice_aqc_opc_get_link_topo = 0x06E0, 345071d10453SEric Joyner ice_aqc_opc_read_i2c = 0x06E2, 345171d10453SEric Joyner ice_aqc_opc_write_i2c = 0x06E3, 345271d10453SEric Joyner ice_aqc_opc_read_mdio = 0x06E4, 345371d10453SEric Joyner ice_aqc_opc_write_mdio = 0x06E5, 345471d10453SEric Joyner ice_aqc_opc_set_gpio_by_func = 0x06E6, 345571d10453SEric Joyner ice_aqc_opc_get_gpio_by_func = 0x06E7, 345671d10453SEric Joyner ice_aqc_opc_set_led = 0x06E8, 345771d10453SEric Joyner ice_aqc_opc_set_port_id_led = 0x06E9, 345871d10453SEric Joyner ice_aqc_opc_get_port_options = 0x06EA, 345971d10453SEric Joyner ice_aqc_opc_set_port_option = 0x06EB, 346071d10453SEric Joyner ice_aqc_opc_set_gpio = 0x06EC, 346171d10453SEric Joyner ice_aqc_opc_get_gpio = 0x06ED, 346271d10453SEric Joyner ice_aqc_opc_sff_eeprom = 0x06EE, 3463d08b8680SEric Joyner ice_aqc_opc_sw_set_gpio = 0x06EF, 3464d08b8680SEric Joyner ice_aqc_opc_sw_get_gpio = 0x06F0, 346556429daeSEric Joyner ice_aqc_opc_prog_topo_dev_nvm = 0x06F2, 346656429daeSEric Joyner ice_aqc_opc_read_topo_dev_nvm = 0x06F3, 346771d10453SEric Joyner 346871d10453SEric Joyner /* NVM commands */ 346971d10453SEric Joyner ice_aqc_opc_nvm_read = 0x0701, 347071d10453SEric Joyner ice_aqc_opc_nvm_erase = 0x0702, 347171d10453SEric Joyner ice_aqc_opc_nvm_write = 0x0703, 347271d10453SEric Joyner ice_aqc_opc_nvm_cfg_read = 0x0704, 347371d10453SEric Joyner ice_aqc_opc_nvm_cfg_write = 0x0705, 347471d10453SEric Joyner ice_aqc_opc_nvm_checksum = 0x0706, 347571d10453SEric Joyner ice_aqc_opc_nvm_write_activate = 0x0707, 347671d10453SEric Joyner ice_aqc_opc_nvm_sr_dump = 0x0707, 347771d10453SEric Joyner ice_aqc_opc_nvm_save_factory_settings = 0x0708, 347871d10453SEric Joyner ice_aqc_opc_nvm_update_empr = 0x0709, 34797d7af7f8SEric Joyner ice_aqc_opc_nvm_pkg_data = 0x070A, 34807d7af7f8SEric Joyner ice_aqc_opc_nvm_pass_component_tbl = 0x070B, 3481*f2635e84SEric Joyner ice_aqc_opc_nvm_sanitization = 0x070C, 348271d10453SEric Joyner 348371d10453SEric Joyner /* PF/VF mailbox commands */ 348471d10453SEric Joyner ice_mbx_opc_send_msg_to_pf = 0x0801, 348571d10453SEric Joyner ice_mbx_opc_send_msg_to_vf = 0x0802, 348671d10453SEric Joyner /* Alternate Structure Commands */ 348771d10453SEric Joyner ice_aqc_opc_write_alt_direct = 0x0900, 348871d10453SEric Joyner ice_aqc_opc_write_alt_indirect = 0x0901, 348971d10453SEric Joyner ice_aqc_opc_read_alt_direct = 0x0902, 349071d10453SEric Joyner ice_aqc_opc_read_alt_indirect = 0x0903, 349171d10453SEric Joyner ice_aqc_opc_done_alt_write = 0x0904, 349271d10453SEric Joyner ice_aqc_opc_clear_port_alt_write = 0x0906, 349371d10453SEric Joyner /* LLDP commands */ 349471d10453SEric Joyner ice_aqc_opc_lldp_get_mib = 0x0A00, 349571d10453SEric Joyner ice_aqc_opc_lldp_set_mib_change = 0x0A01, 349671d10453SEric Joyner ice_aqc_opc_lldp_add_tlv = 0x0A02, 349771d10453SEric Joyner ice_aqc_opc_lldp_update_tlv = 0x0A03, 349871d10453SEric Joyner ice_aqc_opc_lldp_delete_tlv = 0x0A04, 349971d10453SEric Joyner ice_aqc_opc_lldp_stop = 0x0A05, 350071d10453SEric Joyner ice_aqc_opc_lldp_start = 0x0A06, 350171d10453SEric Joyner ice_aqc_opc_get_cee_dcb_cfg = 0x0A07, 350271d10453SEric Joyner ice_aqc_opc_lldp_set_local_mib = 0x0A08, 350371d10453SEric Joyner ice_aqc_opc_lldp_stop_start_specific_agent = 0x0A09, 35047d7af7f8SEric Joyner ice_aqc_opc_lldp_filter_ctrl = 0x0A0A, 35058923de59SPiotr Kubaj ice_execute_pending_lldp_mib = 0x0A0B, 350671d10453SEric Joyner 350771d10453SEric Joyner /* RSS commands */ 350871d10453SEric Joyner ice_aqc_opc_set_rss_key = 0x0B02, 350971d10453SEric Joyner ice_aqc_opc_set_rss_lut = 0x0B03, 351071d10453SEric Joyner ice_aqc_opc_get_rss_key = 0x0B04, 351171d10453SEric Joyner ice_aqc_opc_get_rss_lut = 0x0B05, 3512*f2635e84SEric Joyner /* Sideband Control Interface commands */ 3513*f2635e84SEric Joyner ice_aqc_opc_neighbour_device_request = 0x0C00, 351471d10453SEric Joyner 351571d10453SEric Joyner /* Tx queue handling commands/events */ 351671d10453SEric Joyner ice_aqc_opc_add_txqs = 0x0C30, 351771d10453SEric Joyner ice_aqc_opc_dis_txqs = 0x0C31, 351871d10453SEric Joyner ice_aqc_opc_txqs_cleanup = 0x0C31, 351971d10453SEric Joyner ice_aqc_opc_move_recfg_txqs = 0x0C32, 35208a13362dSEric Joyner ice_aqc_opc_add_rdma_qset = 0x0C33, 35218a13362dSEric Joyner ice_aqc_opc_move_rdma_qset = 0x0C34, 352271d10453SEric Joyner 352371d10453SEric Joyner /* package commands */ 352471d10453SEric Joyner ice_aqc_opc_download_pkg = 0x0C40, 352571d10453SEric Joyner ice_aqc_opc_upload_section = 0x0C41, 352671d10453SEric Joyner ice_aqc_opc_update_pkg = 0x0C42, 352771d10453SEric Joyner ice_aqc_opc_get_pkg_info_list = 0x0C43, 352871d10453SEric Joyner 352971d10453SEric Joyner ice_aqc_opc_driver_shared_params = 0x0C90, 353071d10453SEric Joyner 353171d10453SEric Joyner /* Standalone Commands/Events */ 353271d10453SEric Joyner ice_aqc_opc_event_lan_overflow = 0x1001, 35337d7af7f8SEric Joyner 353456429daeSEric Joyner /* debug commands */ 353556429daeSEric Joyner ice_aqc_opc_debug_dump_internals = 0xFF08, 353656429daeSEric Joyner 35377d7af7f8SEric Joyner /* SystemDiagnostic commands */ 35387d7af7f8SEric Joyner ice_aqc_opc_set_health_status_config = 0xFF20, 35397d7af7f8SEric Joyner ice_aqc_opc_get_supported_health_status_codes = 0xFF21, 35407d7af7f8SEric Joyner ice_aqc_opc_get_health_status = 0xFF22, 35419cf1841cSEric Joyner ice_aqc_opc_clear_health_status = 0xFF23, 35429cf1841cSEric Joyner 35439cf1841cSEric Joyner /* FW Logging Commands */ 35449cf1841cSEric Joyner ice_aqc_opc_fw_logs_config = 0xFF30, 35459cf1841cSEric Joyner ice_aqc_opc_fw_logs_register = 0xFF31, 35469cf1841cSEric Joyner ice_aqc_opc_fw_logs_query = 0xFF32, 35479cf1841cSEric Joyner ice_aqc_opc_fw_logs_event = 0xFF33, 35489cf1841cSEric Joyner ice_aqc_opc_fw_logs_get = 0xFF34, 35499cf1841cSEric Joyner ice_aqc_opc_fw_logs_clear = 0xFF35 355071d10453SEric Joyner }; 355171d10453SEric Joyner 355271d10453SEric Joyner #endif /* _ICE_ADMINQ_CMD_H_ */ 3553