189214fe9SHaiyue Wang /* SPDX-License-Identifier: BSD-3-Clause 2*7815caa6SQi Zhang * Copyright(c) 2001-2021 Intel Corporation 389214fe9SHaiyue Wang */ 489214fe9SHaiyue Wang 589214fe9SHaiyue Wang #ifndef _IAVF_ADMINQ_CMD_H_ 689214fe9SHaiyue Wang #define _IAVF_ADMINQ_CMD_H_ 789214fe9SHaiyue Wang 889214fe9SHaiyue Wang /* This header file defines the iavf Admin Queue commands and is shared between 989214fe9SHaiyue Wang * iavf Firmware and Software. 1089214fe9SHaiyue Wang * 1189214fe9SHaiyue Wang * This file needs to comply with the Linux Kernel coding style. 1289214fe9SHaiyue Wang */ 1389214fe9SHaiyue Wang 1489214fe9SHaiyue Wang #define IAVF_FW_API_VERSION_MAJOR 0x0001 1589214fe9SHaiyue Wang #define IAVF_FW_API_VERSION_MINOR_X722 0x0006 1689214fe9SHaiyue Wang #define IAVF_FW_API_VERSION_MINOR_X710 0x0007 1789214fe9SHaiyue Wang 1889214fe9SHaiyue Wang #define IAVF_FW_MINOR_VERSION(_h) ((_h)->mac.type == IAVF_MAC_XL710 ? \ 1989214fe9SHaiyue Wang IAVF_FW_API_VERSION_MINOR_X710 : \ 2089214fe9SHaiyue Wang IAVF_FW_API_VERSION_MINOR_X722) 2189214fe9SHaiyue Wang 2289214fe9SHaiyue Wang /* API version 1.7 implements additional link and PHY-specific APIs */ 2389214fe9SHaiyue Wang #define IAVF_MINOR_VER_GET_LINK_INFO_XL710 0x0007 2489214fe9SHaiyue Wang /* API version 1.6 for X722 devices adds ability to stop FW LLDP agent */ 2589214fe9SHaiyue Wang #define IAVF_MINOR_VER_FW_LLDP_STOPPABLE_X722 0x0006 2689214fe9SHaiyue Wang 2789214fe9SHaiyue Wang struct iavf_aq_desc { 2889214fe9SHaiyue Wang __le16 flags; 2989214fe9SHaiyue Wang __le16 opcode; 3089214fe9SHaiyue Wang __le16 datalen; 3189214fe9SHaiyue Wang __le16 retval; 3289214fe9SHaiyue Wang __le32 cookie_high; 3389214fe9SHaiyue Wang __le32 cookie_low; 3489214fe9SHaiyue Wang union { 3589214fe9SHaiyue Wang struct { 3689214fe9SHaiyue Wang __le32 param0; 3789214fe9SHaiyue Wang __le32 param1; 3889214fe9SHaiyue Wang __le32 param2; 3989214fe9SHaiyue Wang __le32 param3; 4089214fe9SHaiyue Wang } internal; 4189214fe9SHaiyue Wang struct { 4289214fe9SHaiyue Wang __le32 param0; 4389214fe9SHaiyue Wang __le32 param1; 4489214fe9SHaiyue Wang __le32 addr_high; 4589214fe9SHaiyue Wang __le32 addr_low; 4689214fe9SHaiyue Wang } external; 4789214fe9SHaiyue Wang u8 raw[16]; 4889214fe9SHaiyue Wang } params; 4989214fe9SHaiyue Wang }; 5089214fe9SHaiyue Wang 5189214fe9SHaiyue Wang /* Flags sub-structure 5289214fe9SHaiyue Wang * |0 |1 |2 |3 |4 |5 |6 |7 |8 |9 |10 |11 |12 |13 |14 |15 | 5389214fe9SHaiyue Wang * |DD |CMP|ERR|VFE| * * RESERVED * * |LB |RD |VFC|BUF|SI |EI |FE | 5489214fe9SHaiyue Wang */ 5589214fe9SHaiyue Wang 5689214fe9SHaiyue Wang /* command flags and offsets*/ 5789214fe9SHaiyue Wang #define IAVF_AQ_FLAG_DD_SHIFT 0 5889214fe9SHaiyue Wang #define IAVF_AQ_FLAG_CMP_SHIFT 1 5989214fe9SHaiyue Wang #define IAVF_AQ_FLAG_ERR_SHIFT 2 6089214fe9SHaiyue Wang #define IAVF_AQ_FLAG_VFE_SHIFT 3 6189214fe9SHaiyue Wang #define IAVF_AQ_FLAG_LB_SHIFT 9 6289214fe9SHaiyue Wang #define IAVF_AQ_FLAG_RD_SHIFT 10 6389214fe9SHaiyue Wang #define IAVF_AQ_FLAG_VFC_SHIFT 11 6489214fe9SHaiyue Wang #define IAVF_AQ_FLAG_BUF_SHIFT 12 6589214fe9SHaiyue Wang #define IAVF_AQ_FLAG_SI_SHIFT 13 6689214fe9SHaiyue Wang #define IAVF_AQ_FLAG_EI_SHIFT 14 6789214fe9SHaiyue Wang #define IAVF_AQ_FLAG_FE_SHIFT 15 6889214fe9SHaiyue Wang 6989214fe9SHaiyue Wang #define IAVF_AQ_FLAG_DD (1 << IAVF_AQ_FLAG_DD_SHIFT) /* 0x1 */ 7089214fe9SHaiyue Wang #define IAVF_AQ_FLAG_CMP (1 << IAVF_AQ_FLAG_CMP_SHIFT) /* 0x2 */ 7189214fe9SHaiyue Wang #define IAVF_AQ_FLAG_ERR (1 << IAVF_AQ_FLAG_ERR_SHIFT) /* 0x4 */ 7289214fe9SHaiyue Wang #define IAVF_AQ_FLAG_VFE (1 << IAVF_AQ_FLAG_VFE_SHIFT) /* 0x8 */ 7389214fe9SHaiyue Wang #define IAVF_AQ_FLAG_LB (1 << IAVF_AQ_FLAG_LB_SHIFT) /* 0x200 */ 7489214fe9SHaiyue Wang #define IAVF_AQ_FLAG_RD (1 << IAVF_AQ_FLAG_RD_SHIFT) /* 0x400 */ 7589214fe9SHaiyue Wang #define IAVF_AQ_FLAG_VFC (1 << IAVF_AQ_FLAG_VFC_SHIFT) /* 0x800 */ 7689214fe9SHaiyue Wang #define IAVF_AQ_FLAG_BUF (1 << IAVF_AQ_FLAG_BUF_SHIFT) /* 0x1000 */ 7789214fe9SHaiyue Wang #define IAVF_AQ_FLAG_SI (1 << IAVF_AQ_FLAG_SI_SHIFT) /* 0x2000 */ 7889214fe9SHaiyue Wang #define IAVF_AQ_FLAG_EI (1 << IAVF_AQ_FLAG_EI_SHIFT) /* 0x4000 */ 7989214fe9SHaiyue Wang #define IAVF_AQ_FLAG_FE (1 << IAVF_AQ_FLAG_FE_SHIFT) /* 0x8000 */ 8089214fe9SHaiyue Wang 8189214fe9SHaiyue Wang /* error codes */ 8289214fe9SHaiyue Wang enum iavf_admin_queue_err { 8389214fe9SHaiyue Wang IAVF_AQ_RC_OK = 0, /* success */ 8489214fe9SHaiyue Wang IAVF_AQ_RC_EPERM = 1, /* Operation not permitted */ 8589214fe9SHaiyue Wang IAVF_AQ_RC_ENOENT = 2, /* No such element */ 8689214fe9SHaiyue Wang IAVF_AQ_RC_ESRCH = 3, /* Bad opcode */ 8789214fe9SHaiyue Wang IAVF_AQ_RC_EINTR = 4, /* operation interrupted */ 8889214fe9SHaiyue Wang IAVF_AQ_RC_EIO = 5, /* I/O error */ 8989214fe9SHaiyue Wang IAVF_AQ_RC_ENXIO = 6, /* No such resource */ 9089214fe9SHaiyue Wang IAVF_AQ_RC_E2BIG = 7, /* Arg too long */ 9189214fe9SHaiyue Wang IAVF_AQ_RC_EAGAIN = 8, /* Try again */ 9289214fe9SHaiyue Wang IAVF_AQ_RC_ENOMEM = 9, /* Out of memory */ 9389214fe9SHaiyue Wang IAVF_AQ_RC_EACCES = 10, /* Permission denied */ 9489214fe9SHaiyue Wang IAVF_AQ_RC_EFAULT = 11, /* Bad address */ 9589214fe9SHaiyue Wang IAVF_AQ_RC_EBUSY = 12, /* Device or resource busy */ 9689214fe9SHaiyue Wang IAVF_AQ_RC_EEXIST = 13, /* object already exists */ 9789214fe9SHaiyue Wang IAVF_AQ_RC_EINVAL = 14, /* Invalid argument */ 9889214fe9SHaiyue Wang IAVF_AQ_RC_ENOTTY = 15, /* Not a typewriter */ 9989214fe9SHaiyue Wang IAVF_AQ_RC_ENOSPC = 16, /* No space left or alloc failure */ 10089214fe9SHaiyue Wang IAVF_AQ_RC_ENOSYS = 17, /* Function not implemented */ 10189214fe9SHaiyue Wang IAVF_AQ_RC_ERANGE = 18, /* Parameter out of range */ 10289214fe9SHaiyue Wang IAVF_AQ_RC_EFLUSHED = 19, /* Cmd flushed due to prev cmd error */ 10389214fe9SHaiyue Wang IAVF_AQ_RC_BAD_ADDR = 20, /* Descriptor contains a bad pointer */ 10489214fe9SHaiyue Wang IAVF_AQ_RC_EMODE = 21, /* Op not allowed in current dev mode */ 10589214fe9SHaiyue Wang IAVF_AQ_RC_EFBIG = 22, /* File too large */ 10689214fe9SHaiyue Wang }; 10789214fe9SHaiyue Wang 10889214fe9SHaiyue Wang /* Admin Queue command opcodes */ 10989214fe9SHaiyue Wang enum iavf_admin_queue_opc { 11089214fe9SHaiyue Wang /* aq commands */ 11189214fe9SHaiyue Wang iavf_aqc_opc_get_version = 0x0001, 11289214fe9SHaiyue Wang iavf_aqc_opc_driver_version = 0x0002, 11389214fe9SHaiyue Wang iavf_aqc_opc_queue_shutdown = 0x0003, 11489214fe9SHaiyue Wang iavf_aqc_opc_set_pf_context = 0x0004, 11589214fe9SHaiyue Wang 11689214fe9SHaiyue Wang /* resource ownership */ 11789214fe9SHaiyue Wang iavf_aqc_opc_request_resource = 0x0008, 11889214fe9SHaiyue Wang iavf_aqc_opc_release_resource = 0x0009, 11989214fe9SHaiyue Wang 12089214fe9SHaiyue Wang iavf_aqc_opc_list_func_capabilities = 0x000A, 12189214fe9SHaiyue Wang iavf_aqc_opc_list_dev_capabilities = 0x000B, 12289214fe9SHaiyue Wang 12389214fe9SHaiyue Wang /* Proxy commands */ 12489214fe9SHaiyue Wang iavf_aqc_opc_set_proxy_config = 0x0104, 12589214fe9SHaiyue Wang iavf_aqc_opc_set_ns_proxy_table_entry = 0x0105, 12689214fe9SHaiyue Wang 12789214fe9SHaiyue Wang /* LAA */ 12889214fe9SHaiyue Wang iavf_aqc_opc_mac_address_read = 0x0107, 12989214fe9SHaiyue Wang iavf_aqc_opc_mac_address_write = 0x0108, 13089214fe9SHaiyue Wang 13189214fe9SHaiyue Wang /* PXE */ 13289214fe9SHaiyue Wang iavf_aqc_opc_clear_pxe_mode = 0x0110, 13389214fe9SHaiyue Wang 13489214fe9SHaiyue Wang /* WoL commands */ 13589214fe9SHaiyue Wang iavf_aqc_opc_set_wol_filter = 0x0120, 13689214fe9SHaiyue Wang iavf_aqc_opc_get_wake_reason = 0x0121, 13789214fe9SHaiyue Wang iavf_aqc_opc_clear_all_wol_filters = 0x025E, 13889214fe9SHaiyue Wang 13989214fe9SHaiyue Wang /* internal switch commands */ 14089214fe9SHaiyue Wang iavf_aqc_opc_get_switch_config = 0x0200, 14189214fe9SHaiyue Wang iavf_aqc_opc_add_statistics = 0x0201, 14289214fe9SHaiyue Wang iavf_aqc_opc_remove_statistics = 0x0202, 14389214fe9SHaiyue Wang iavf_aqc_opc_set_port_parameters = 0x0203, 14489214fe9SHaiyue Wang iavf_aqc_opc_get_switch_resource_alloc = 0x0204, 14589214fe9SHaiyue Wang iavf_aqc_opc_set_switch_config = 0x0205, 14689214fe9SHaiyue Wang iavf_aqc_opc_rx_ctl_reg_read = 0x0206, 14789214fe9SHaiyue Wang iavf_aqc_opc_rx_ctl_reg_write = 0x0207, 14889214fe9SHaiyue Wang 14989214fe9SHaiyue Wang iavf_aqc_opc_add_vsi = 0x0210, 15089214fe9SHaiyue Wang iavf_aqc_opc_update_vsi_parameters = 0x0211, 15189214fe9SHaiyue Wang iavf_aqc_opc_get_vsi_parameters = 0x0212, 15289214fe9SHaiyue Wang 15389214fe9SHaiyue Wang iavf_aqc_opc_add_pv = 0x0220, 15489214fe9SHaiyue Wang iavf_aqc_opc_update_pv_parameters = 0x0221, 15589214fe9SHaiyue Wang iavf_aqc_opc_get_pv_parameters = 0x0222, 15689214fe9SHaiyue Wang 15789214fe9SHaiyue Wang iavf_aqc_opc_add_veb = 0x0230, 15889214fe9SHaiyue Wang iavf_aqc_opc_update_veb_parameters = 0x0231, 15989214fe9SHaiyue Wang iavf_aqc_opc_get_veb_parameters = 0x0232, 16089214fe9SHaiyue Wang 16189214fe9SHaiyue Wang iavf_aqc_opc_delete_element = 0x0243, 16289214fe9SHaiyue Wang 16389214fe9SHaiyue Wang iavf_aqc_opc_add_macvlan = 0x0250, 16489214fe9SHaiyue Wang iavf_aqc_opc_remove_macvlan = 0x0251, 16589214fe9SHaiyue Wang iavf_aqc_opc_add_vlan = 0x0252, 16689214fe9SHaiyue Wang iavf_aqc_opc_remove_vlan = 0x0253, 16789214fe9SHaiyue Wang iavf_aqc_opc_set_vsi_promiscuous_modes = 0x0254, 16889214fe9SHaiyue Wang iavf_aqc_opc_add_tag = 0x0255, 16989214fe9SHaiyue Wang iavf_aqc_opc_remove_tag = 0x0256, 17089214fe9SHaiyue Wang iavf_aqc_opc_add_multicast_etag = 0x0257, 17189214fe9SHaiyue Wang iavf_aqc_opc_remove_multicast_etag = 0x0258, 17289214fe9SHaiyue Wang iavf_aqc_opc_update_tag = 0x0259, 17389214fe9SHaiyue Wang iavf_aqc_opc_add_control_packet_filter = 0x025A, 17489214fe9SHaiyue Wang iavf_aqc_opc_remove_control_packet_filter = 0x025B, 17589214fe9SHaiyue Wang iavf_aqc_opc_add_cloud_filters = 0x025C, 17689214fe9SHaiyue Wang iavf_aqc_opc_remove_cloud_filters = 0x025D, 17789214fe9SHaiyue Wang iavf_aqc_opc_clear_wol_switch_filters = 0x025E, 17889214fe9SHaiyue Wang iavf_aqc_opc_replace_cloud_filters = 0x025F, 17989214fe9SHaiyue Wang 18089214fe9SHaiyue Wang iavf_aqc_opc_add_mirror_rule = 0x0260, 18189214fe9SHaiyue Wang iavf_aqc_opc_delete_mirror_rule = 0x0261, 18289214fe9SHaiyue Wang 18389214fe9SHaiyue Wang /* Dynamic Device Personalization */ 18489214fe9SHaiyue Wang iavf_aqc_opc_write_personalization_profile = 0x0270, 18589214fe9SHaiyue Wang iavf_aqc_opc_get_personalization_profile_list = 0x0271, 18689214fe9SHaiyue Wang 18789214fe9SHaiyue Wang /* DCB commands */ 18889214fe9SHaiyue Wang iavf_aqc_opc_dcb_ignore_pfc = 0x0301, 18989214fe9SHaiyue Wang iavf_aqc_opc_dcb_updated = 0x0302, 19089214fe9SHaiyue Wang iavf_aqc_opc_set_dcb_parameters = 0x0303, 19189214fe9SHaiyue Wang 19289214fe9SHaiyue Wang /* TX scheduler */ 19389214fe9SHaiyue Wang iavf_aqc_opc_configure_vsi_bw_limit = 0x0400, 19489214fe9SHaiyue Wang iavf_aqc_opc_configure_vsi_ets_sla_bw_limit = 0x0406, 19589214fe9SHaiyue Wang iavf_aqc_opc_configure_vsi_tc_bw = 0x0407, 19689214fe9SHaiyue Wang iavf_aqc_opc_query_vsi_bw_config = 0x0408, 19789214fe9SHaiyue Wang iavf_aqc_opc_query_vsi_ets_sla_config = 0x040A, 19889214fe9SHaiyue Wang iavf_aqc_opc_configure_switching_comp_bw_limit = 0x0410, 19989214fe9SHaiyue Wang 20089214fe9SHaiyue Wang iavf_aqc_opc_enable_switching_comp_ets = 0x0413, 20189214fe9SHaiyue Wang iavf_aqc_opc_modify_switching_comp_ets = 0x0414, 20289214fe9SHaiyue Wang iavf_aqc_opc_disable_switching_comp_ets = 0x0415, 20389214fe9SHaiyue Wang iavf_aqc_opc_configure_switching_comp_ets_bw_limit = 0x0416, 20489214fe9SHaiyue Wang iavf_aqc_opc_configure_switching_comp_bw_config = 0x0417, 20589214fe9SHaiyue Wang iavf_aqc_opc_query_switching_comp_ets_config = 0x0418, 20689214fe9SHaiyue Wang iavf_aqc_opc_query_port_ets_config = 0x0419, 20789214fe9SHaiyue Wang iavf_aqc_opc_query_switching_comp_bw_config = 0x041A, 20889214fe9SHaiyue Wang iavf_aqc_opc_suspend_port_tx = 0x041B, 20989214fe9SHaiyue Wang iavf_aqc_opc_resume_port_tx = 0x041C, 21089214fe9SHaiyue Wang iavf_aqc_opc_configure_partition_bw = 0x041D, 21189214fe9SHaiyue Wang /* hmc */ 21289214fe9SHaiyue Wang iavf_aqc_opc_query_hmc_resource_profile = 0x0500, 21389214fe9SHaiyue Wang iavf_aqc_opc_set_hmc_resource_profile = 0x0501, 21489214fe9SHaiyue Wang 21589214fe9SHaiyue Wang /* phy commands*/ 21689214fe9SHaiyue Wang 21789214fe9SHaiyue Wang /* phy commands*/ 21889214fe9SHaiyue Wang iavf_aqc_opc_get_phy_abilities = 0x0600, 21989214fe9SHaiyue Wang iavf_aqc_opc_set_phy_config = 0x0601, 22089214fe9SHaiyue Wang iavf_aqc_opc_set_mac_config = 0x0603, 22189214fe9SHaiyue Wang iavf_aqc_opc_set_link_restart_an = 0x0605, 22289214fe9SHaiyue Wang iavf_aqc_opc_get_link_status = 0x0607, 22389214fe9SHaiyue Wang iavf_aqc_opc_set_phy_int_mask = 0x0613, 22489214fe9SHaiyue Wang iavf_aqc_opc_get_local_advt_reg = 0x0614, 22589214fe9SHaiyue Wang iavf_aqc_opc_set_local_advt_reg = 0x0615, 22689214fe9SHaiyue Wang iavf_aqc_opc_get_partner_advt = 0x0616, 22789214fe9SHaiyue Wang iavf_aqc_opc_set_lb_modes = 0x0618, 22889214fe9SHaiyue Wang iavf_aqc_opc_get_phy_wol_caps = 0x0621, 22989214fe9SHaiyue Wang iavf_aqc_opc_set_phy_debug = 0x0622, 23089214fe9SHaiyue Wang iavf_aqc_opc_upload_ext_phy_fm = 0x0625, 23189214fe9SHaiyue Wang iavf_aqc_opc_run_phy_activity = 0x0626, 23289214fe9SHaiyue Wang iavf_aqc_opc_set_phy_register = 0x0628, 23389214fe9SHaiyue Wang iavf_aqc_opc_get_phy_register = 0x0629, 23489214fe9SHaiyue Wang 23589214fe9SHaiyue Wang /* NVM commands */ 23689214fe9SHaiyue Wang iavf_aqc_opc_nvm_read = 0x0701, 23789214fe9SHaiyue Wang iavf_aqc_opc_nvm_erase = 0x0702, 23889214fe9SHaiyue Wang iavf_aqc_opc_nvm_update = 0x0703, 23989214fe9SHaiyue Wang iavf_aqc_opc_nvm_config_read = 0x0704, 24089214fe9SHaiyue Wang iavf_aqc_opc_nvm_config_write = 0x0705, 24189214fe9SHaiyue Wang iavf_aqc_opc_nvm_progress = 0x0706, 24289214fe9SHaiyue Wang iavf_aqc_opc_oem_post_update = 0x0720, 24389214fe9SHaiyue Wang iavf_aqc_opc_thermal_sensor = 0x0721, 24489214fe9SHaiyue Wang 24589214fe9SHaiyue Wang /* virtualization commands */ 24689214fe9SHaiyue Wang iavf_aqc_opc_send_msg_to_pf = 0x0801, 24789214fe9SHaiyue Wang iavf_aqc_opc_send_msg_to_vf = 0x0802, 24889214fe9SHaiyue Wang iavf_aqc_opc_send_msg_to_peer = 0x0803, 24989214fe9SHaiyue Wang 25089214fe9SHaiyue Wang /* alternate structure */ 25189214fe9SHaiyue Wang iavf_aqc_opc_alternate_write = 0x0900, 25289214fe9SHaiyue Wang iavf_aqc_opc_alternate_write_indirect = 0x0901, 25389214fe9SHaiyue Wang iavf_aqc_opc_alternate_read = 0x0902, 25489214fe9SHaiyue Wang iavf_aqc_opc_alternate_read_indirect = 0x0903, 25589214fe9SHaiyue Wang iavf_aqc_opc_alternate_write_done = 0x0904, 25689214fe9SHaiyue Wang iavf_aqc_opc_alternate_set_mode = 0x0905, 25789214fe9SHaiyue Wang iavf_aqc_opc_alternate_clear_port = 0x0906, 25889214fe9SHaiyue Wang 25989214fe9SHaiyue Wang /* LLDP commands */ 26089214fe9SHaiyue Wang iavf_aqc_opc_lldp_get_mib = 0x0A00, 26189214fe9SHaiyue Wang iavf_aqc_opc_lldp_update_mib = 0x0A01, 26289214fe9SHaiyue Wang iavf_aqc_opc_lldp_add_tlv = 0x0A02, 26389214fe9SHaiyue Wang iavf_aqc_opc_lldp_update_tlv = 0x0A03, 26489214fe9SHaiyue Wang iavf_aqc_opc_lldp_delete_tlv = 0x0A04, 26589214fe9SHaiyue Wang iavf_aqc_opc_lldp_stop = 0x0A05, 26689214fe9SHaiyue Wang iavf_aqc_opc_lldp_start = 0x0A06, 26789214fe9SHaiyue Wang iavf_aqc_opc_get_cee_dcb_cfg = 0x0A07, 26889214fe9SHaiyue Wang iavf_aqc_opc_lldp_set_local_mib = 0x0A08, 26989214fe9SHaiyue Wang iavf_aqc_opc_lldp_stop_start_spec_agent = 0x0A09, 27089214fe9SHaiyue Wang 27189214fe9SHaiyue Wang /* Tunnel commands */ 27289214fe9SHaiyue Wang iavf_aqc_opc_add_udp_tunnel = 0x0B00, 27389214fe9SHaiyue Wang iavf_aqc_opc_del_udp_tunnel = 0x0B01, 27489214fe9SHaiyue Wang iavf_aqc_opc_set_rss_key = 0x0B02, 27589214fe9SHaiyue Wang iavf_aqc_opc_set_rss_lut = 0x0B03, 27689214fe9SHaiyue Wang iavf_aqc_opc_get_rss_key = 0x0B04, 27789214fe9SHaiyue Wang iavf_aqc_opc_get_rss_lut = 0x0B05, 27889214fe9SHaiyue Wang 27989214fe9SHaiyue Wang /* Async Events */ 28089214fe9SHaiyue Wang iavf_aqc_opc_event_lan_overflow = 0x1001, 28189214fe9SHaiyue Wang 28289214fe9SHaiyue Wang /* OEM commands */ 28389214fe9SHaiyue Wang iavf_aqc_opc_oem_parameter_change = 0xFE00, 28489214fe9SHaiyue Wang iavf_aqc_opc_oem_device_status_change = 0xFE01, 28589214fe9SHaiyue Wang iavf_aqc_opc_oem_ocsd_initialize = 0xFE02, 28689214fe9SHaiyue Wang iavf_aqc_opc_oem_ocbb_initialize = 0xFE03, 28789214fe9SHaiyue Wang 28889214fe9SHaiyue Wang /* debug commands */ 28989214fe9SHaiyue Wang iavf_aqc_opc_debug_read_reg = 0xFF03, 29089214fe9SHaiyue Wang iavf_aqc_opc_debug_write_reg = 0xFF04, 29189214fe9SHaiyue Wang iavf_aqc_opc_debug_modify_reg = 0xFF07, 29289214fe9SHaiyue Wang iavf_aqc_opc_debug_dump_internals = 0xFF08, 29389214fe9SHaiyue Wang }; 29489214fe9SHaiyue Wang 29589214fe9SHaiyue Wang /* command structures and indirect data structures */ 29689214fe9SHaiyue Wang 29789214fe9SHaiyue Wang /* Structure naming conventions: 29889214fe9SHaiyue Wang * - no suffix for direct command descriptor structures 29989214fe9SHaiyue Wang * - _data for indirect sent data 30089214fe9SHaiyue Wang * - _resp for indirect return data (data which is both will use _data) 30189214fe9SHaiyue Wang * - _completion for direct return data 30289214fe9SHaiyue Wang * - _element_ for repeated elements (may also be _data or _resp) 30389214fe9SHaiyue Wang * 30489214fe9SHaiyue Wang * Command structures are expected to overlay the params.raw member of the basic 30589214fe9SHaiyue Wang * descriptor, and as such cannot exceed 16 bytes in length. 30689214fe9SHaiyue Wang */ 30789214fe9SHaiyue Wang 30889214fe9SHaiyue Wang /* This macro is used to generate a compilation error if a structure 30989214fe9SHaiyue Wang * is not exactly the correct length. It gives a divide by zero error if the 31089214fe9SHaiyue Wang * structure is not of the correct size, otherwise it creates an enum that is 31189214fe9SHaiyue Wang * never used. 31289214fe9SHaiyue Wang */ 31389214fe9SHaiyue Wang #define IAVF_CHECK_STRUCT_LEN(n, X) enum iavf_static_assert_enum_##X \ 31489214fe9SHaiyue Wang { iavf_static_assert_##X = (n)/((sizeof(struct X) == (n)) ? 1 : 0) } 31589214fe9SHaiyue Wang 31689214fe9SHaiyue Wang /* This macro is used extensively to ensure that command structures are 16 31789214fe9SHaiyue Wang * bytes in length as they have to map to the raw array of that size. 31889214fe9SHaiyue Wang */ 31989214fe9SHaiyue Wang #define IAVF_CHECK_CMD_LENGTH(X) IAVF_CHECK_STRUCT_LEN(16, X) 32089214fe9SHaiyue Wang 32189214fe9SHaiyue Wang /* Queue Shutdown (direct 0x0003) */ 32289214fe9SHaiyue Wang struct iavf_aqc_queue_shutdown { 32389214fe9SHaiyue Wang __le32 driver_unloading; 32489214fe9SHaiyue Wang #define IAVF_AQ_DRIVER_UNLOADING 0x1 32589214fe9SHaiyue Wang u8 reserved[12]; 32689214fe9SHaiyue Wang }; 32789214fe9SHaiyue Wang 32889214fe9SHaiyue Wang IAVF_CHECK_CMD_LENGTH(iavf_aqc_queue_shutdown); 32989214fe9SHaiyue Wang 33089214fe9SHaiyue Wang #define IAVF_AQC_WOL_PRESERVE_STATUS 0x200 33189214fe9SHaiyue Wang #define IAVF_AQC_MC_MAG_EN 0x0100 33289214fe9SHaiyue Wang #define IAVF_AQC_WOL_PRESERVE_ON_PFR 0x0200 33389214fe9SHaiyue Wang 33489214fe9SHaiyue Wang struct iavf_aqc_vsi_properties_data { 33589214fe9SHaiyue Wang /* first 96 byte are written by SW */ 33689214fe9SHaiyue Wang __le16 valid_sections; 33789214fe9SHaiyue Wang #define IAVF_AQ_VSI_PROP_SWITCH_VALID 0x0001 33889214fe9SHaiyue Wang #define IAVF_AQ_VSI_PROP_SECURITY_VALID 0x0002 33989214fe9SHaiyue Wang #define IAVF_AQ_VSI_PROP_VLAN_VALID 0x0004 34089214fe9SHaiyue Wang #define IAVF_AQ_VSI_PROP_CAS_PV_VALID 0x0008 34189214fe9SHaiyue Wang #define IAVF_AQ_VSI_PROP_INGRESS_UP_VALID 0x0010 34289214fe9SHaiyue Wang #define IAVF_AQ_VSI_PROP_EGRESS_UP_VALID 0x0020 34389214fe9SHaiyue Wang #define IAVF_AQ_VSI_PROP_QUEUE_MAP_VALID 0x0040 34489214fe9SHaiyue Wang #define IAVF_AQ_VSI_PROP_QUEUE_OPT_VALID 0x0080 34589214fe9SHaiyue Wang #define IAVF_AQ_VSI_PROP_OUTER_UP_VALID 0x0100 34689214fe9SHaiyue Wang #define IAVF_AQ_VSI_PROP_SCHED_VALID 0x0200 34789214fe9SHaiyue Wang /* switch section */ 34889214fe9SHaiyue Wang __le16 switch_id; /* 12bit id combined with flags below */ 34989214fe9SHaiyue Wang #define IAVF_AQ_VSI_SW_ID_SHIFT 0x0000 35089214fe9SHaiyue Wang #define IAVF_AQ_VSI_SW_ID_MASK (0xFFF << IAVF_AQ_VSI_SW_ID_SHIFT) 35189214fe9SHaiyue Wang #define IAVF_AQ_VSI_SW_ID_FLAG_NOT_STAG 0x1000 35289214fe9SHaiyue Wang #define IAVF_AQ_VSI_SW_ID_FLAG_ALLOW_LB 0x2000 35389214fe9SHaiyue Wang #define IAVF_AQ_VSI_SW_ID_FLAG_LOCAL_LB 0x4000 35489214fe9SHaiyue Wang u8 sw_reserved[2]; 35589214fe9SHaiyue Wang /* security section */ 35689214fe9SHaiyue Wang u8 sec_flags; 35789214fe9SHaiyue Wang #define IAVF_AQ_VSI_SEC_FLAG_ALLOW_DEST_OVRD 0x01 35889214fe9SHaiyue Wang #define IAVF_AQ_VSI_SEC_FLAG_ENABLE_VLAN_CHK 0x02 35989214fe9SHaiyue Wang #define IAVF_AQ_VSI_SEC_FLAG_ENABLE_MAC_CHK 0x04 36089214fe9SHaiyue Wang u8 sec_reserved; 36189214fe9SHaiyue Wang /* VLAN section */ 36289214fe9SHaiyue Wang __le16 pvid; /* VLANS include priority bits */ 36389214fe9SHaiyue Wang __le16 fcoe_pvid; 36489214fe9SHaiyue Wang u8 port_vlan_flags; 36589214fe9SHaiyue Wang #define IAVF_AQ_VSI_PVLAN_MODE_SHIFT 0x00 36689214fe9SHaiyue Wang #define IAVF_AQ_VSI_PVLAN_MODE_MASK (0x03 << \ 36789214fe9SHaiyue Wang IAVF_AQ_VSI_PVLAN_MODE_SHIFT) 36889214fe9SHaiyue Wang #define IAVF_AQ_VSI_PVLAN_MODE_TAGGED 0x01 36989214fe9SHaiyue Wang #define IAVF_AQ_VSI_PVLAN_MODE_UNTAGGED 0x02 37089214fe9SHaiyue Wang #define IAVF_AQ_VSI_PVLAN_MODE_ALL 0x03 37189214fe9SHaiyue Wang #define IAVF_AQ_VSI_PVLAN_INSERT_PVID 0x04 37289214fe9SHaiyue Wang #define IAVF_AQ_VSI_PVLAN_EMOD_SHIFT 0x03 37389214fe9SHaiyue Wang #define IAVF_AQ_VSI_PVLAN_EMOD_MASK (0x3 << \ 37489214fe9SHaiyue Wang IAVF_AQ_VSI_PVLAN_EMOD_SHIFT) 37589214fe9SHaiyue Wang #define IAVF_AQ_VSI_PVLAN_EMOD_STR_BOTH 0x0 37689214fe9SHaiyue Wang #define IAVF_AQ_VSI_PVLAN_EMOD_STR_UP 0x08 37789214fe9SHaiyue Wang #define IAVF_AQ_VSI_PVLAN_EMOD_STR 0x10 37889214fe9SHaiyue Wang #define IAVF_AQ_VSI_PVLAN_EMOD_NOTHING 0x18 37989214fe9SHaiyue Wang u8 pvlan_reserved[3]; 38089214fe9SHaiyue Wang /* ingress egress up sections */ 38189214fe9SHaiyue Wang __le32 ingress_table; /* bitmap, 3 bits per up */ 38289214fe9SHaiyue Wang #define IAVF_AQ_VSI_UP_TABLE_UP0_SHIFT 0 38389214fe9SHaiyue Wang #define IAVF_AQ_VSI_UP_TABLE_UP0_MASK (0x7 << \ 38489214fe9SHaiyue Wang IAVF_AQ_VSI_UP_TABLE_UP0_SHIFT) 38589214fe9SHaiyue Wang #define IAVF_AQ_VSI_UP_TABLE_UP1_SHIFT 3 38689214fe9SHaiyue Wang #define IAVF_AQ_VSI_UP_TABLE_UP1_MASK (0x7 << \ 38789214fe9SHaiyue Wang IAVF_AQ_VSI_UP_TABLE_UP1_SHIFT) 38889214fe9SHaiyue Wang #define IAVF_AQ_VSI_UP_TABLE_UP2_SHIFT 6 38989214fe9SHaiyue Wang #define IAVF_AQ_VSI_UP_TABLE_UP2_MASK (0x7 << \ 39089214fe9SHaiyue Wang IAVF_AQ_VSI_UP_TABLE_UP2_SHIFT) 39189214fe9SHaiyue Wang #define IAVF_AQ_VSI_UP_TABLE_UP3_SHIFT 9 39289214fe9SHaiyue Wang #define IAVF_AQ_VSI_UP_TABLE_UP3_MASK (0x7 << \ 39389214fe9SHaiyue Wang IAVF_AQ_VSI_UP_TABLE_UP3_SHIFT) 39489214fe9SHaiyue Wang #define IAVF_AQ_VSI_UP_TABLE_UP4_SHIFT 12 39589214fe9SHaiyue Wang #define IAVF_AQ_VSI_UP_TABLE_UP4_MASK (0x7 << \ 39689214fe9SHaiyue Wang IAVF_AQ_VSI_UP_TABLE_UP4_SHIFT) 39789214fe9SHaiyue Wang #define IAVF_AQ_VSI_UP_TABLE_UP5_SHIFT 15 39889214fe9SHaiyue Wang #define IAVF_AQ_VSI_UP_TABLE_UP5_MASK (0x7 << \ 39989214fe9SHaiyue Wang IAVF_AQ_VSI_UP_TABLE_UP5_SHIFT) 40089214fe9SHaiyue Wang #define IAVF_AQ_VSI_UP_TABLE_UP6_SHIFT 18 40189214fe9SHaiyue Wang #define IAVF_AQ_VSI_UP_TABLE_UP6_MASK (0x7 << \ 40289214fe9SHaiyue Wang IAVF_AQ_VSI_UP_TABLE_UP6_SHIFT) 40389214fe9SHaiyue Wang #define IAVF_AQ_VSI_UP_TABLE_UP7_SHIFT 21 40489214fe9SHaiyue Wang #define IAVF_AQ_VSI_UP_TABLE_UP7_MASK (0x7 << \ 40589214fe9SHaiyue Wang IAVF_AQ_VSI_UP_TABLE_UP7_SHIFT) 40689214fe9SHaiyue Wang __le32 egress_table; /* same defines as for ingress table */ 40789214fe9SHaiyue Wang /* cascaded PV section */ 40889214fe9SHaiyue Wang __le16 cas_pv_tag; 40989214fe9SHaiyue Wang u8 cas_pv_flags; 41089214fe9SHaiyue Wang #define IAVF_AQ_VSI_CAS_PV_TAGX_SHIFT 0x00 41189214fe9SHaiyue Wang #define IAVF_AQ_VSI_CAS_PV_TAGX_MASK (0x03 << \ 41289214fe9SHaiyue Wang IAVF_AQ_VSI_CAS_PV_TAGX_SHIFT) 41389214fe9SHaiyue Wang #define IAVF_AQ_VSI_CAS_PV_TAGX_LEAVE 0x00 41489214fe9SHaiyue Wang #define IAVF_AQ_VSI_CAS_PV_TAGX_REMOVE 0x01 41589214fe9SHaiyue Wang #define IAVF_AQ_VSI_CAS_PV_TAGX_COPY 0x02 41689214fe9SHaiyue Wang #define IAVF_AQ_VSI_CAS_PV_INSERT_TAG 0x10 41789214fe9SHaiyue Wang #define IAVF_AQ_VSI_CAS_PV_ETAG_PRUNE 0x20 41889214fe9SHaiyue Wang #define IAVF_AQ_VSI_CAS_PV_ACCEPT_HOST_TAG 0x40 41989214fe9SHaiyue Wang u8 cas_pv_reserved; 42089214fe9SHaiyue Wang /* queue mapping section */ 42189214fe9SHaiyue Wang __le16 mapping_flags; 42289214fe9SHaiyue Wang #define IAVF_AQ_VSI_QUE_MAP_CONTIG 0x0 42389214fe9SHaiyue Wang #define IAVF_AQ_VSI_QUE_MAP_NONCONTIG 0x1 42489214fe9SHaiyue Wang __le16 queue_mapping[16]; 42589214fe9SHaiyue Wang #define IAVF_AQ_VSI_QUEUE_SHIFT 0x0 42689214fe9SHaiyue Wang #define IAVF_AQ_VSI_QUEUE_MASK (0x7FF << IAVF_AQ_VSI_QUEUE_SHIFT) 42789214fe9SHaiyue Wang __le16 tc_mapping[8]; 42889214fe9SHaiyue Wang #define IAVF_AQ_VSI_TC_QUE_OFFSET_SHIFT 0 42989214fe9SHaiyue Wang #define IAVF_AQ_VSI_TC_QUE_OFFSET_MASK (0x1FF << \ 43089214fe9SHaiyue Wang IAVF_AQ_VSI_TC_QUE_OFFSET_SHIFT) 43189214fe9SHaiyue Wang #define IAVF_AQ_VSI_TC_QUE_NUMBER_SHIFT 9 43289214fe9SHaiyue Wang #define IAVF_AQ_VSI_TC_QUE_NUMBER_MASK (0x7 << \ 43389214fe9SHaiyue Wang IAVF_AQ_VSI_TC_QUE_NUMBER_SHIFT) 43489214fe9SHaiyue Wang /* queueing option section */ 43589214fe9SHaiyue Wang u8 queueing_opt_flags; 43689214fe9SHaiyue Wang #define IAVF_AQ_VSI_QUE_OPT_MULTICAST_UDP_ENA 0x04 43789214fe9SHaiyue Wang #define IAVF_AQ_VSI_QUE_OPT_UNICAST_UDP_ENA 0x08 43889214fe9SHaiyue Wang #define IAVF_AQ_VSI_QUE_OPT_TCP_ENA 0x10 43989214fe9SHaiyue Wang #define IAVF_AQ_VSI_QUE_OPT_FCOE_ENA 0x20 44089214fe9SHaiyue Wang #define IAVF_AQ_VSI_QUE_OPT_RSS_LUT_PF 0x00 44189214fe9SHaiyue Wang #define IAVF_AQ_VSI_QUE_OPT_RSS_LUT_VSI 0x40 44289214fe9SHaiyue Wang u8 queueing_opt_reserved[3]; 44389214fe9SHaiyue Wang /* scheduler section */ 44489214fe9SHaiyue Wang u8 up_enable_bits; 44589214fe9SHaiyue Wang u8 sched_reserved; 44689214fe9SHaiyue Wang /* outer up section */ 44789214fe9SHaiyue Wang __le32 outer_up_table; /* same structure and defines as ingress tbl */ 44889214fe9SHaiyue Wang u8 cmd_reserved[8]; 44989214fe9SHaiyue Wang /* last 32 bytes are written by FW */ 45089214fe9SHaiyue Wang __le16 qs_handle[8]; 45189214fe9SHaiyue Wang #define IAVF_AQ_VSI_QS_HANDLE_INVALID 0xFFFF 45289214fe9SHaiyue Wang __le16 stat_counter_idx; 45389214fe9SHaiyue Wang __le16 sched_id; 45489214fe9SHaiyue Wang u8 resp_reserved[12]; 45589214fe9SHaiyue Wang }; 45689214fe9SHaiyue Wang 45789214fe9SHaiyue Wang IAVF_CHECK_STRUCT_LEN(128, iavf_aqc_vsi_properties_data); 45889214fe9SHaiyue Wang 45989214fe9SHaiyue Wang /* Get VEB Parameters (direct 0x0232) 46089214fe9SHaiyue Wang * uses iavf_aqc_switch_seid for the descriptor 46189214fe9SHaiyue Wang */ 46289214fe9SHaiyue Wang struct iavf_aqc_get_veb_parameters_completion { 46389214fe9SHaiyue Wang __le16 seid; 46489214fe9SHaiyue Wang __le16 switch_id; 46589214fe9SHaiyue Wang __le16 veb_flags; /* only the first/last flags from 0x0230 is valid */ 46689214fe9SHaiyue Wang __le16 statistic_index; 46789214fe9SHaiyue Wang __le16 vebs_used; 46889214fe9SHaiyue Wang __le16 vebs_free; 46989214fe9SHaiyue Wang u8 reserved[4]; 47089214fe9SHaiyue Wang }; 47189214fe9SHaiyue Wang 47289214fe9SHaiyue Wang IAVF_CHECK_CMD_LENGTH(iavf_aqc_get_veb_parameters_completion); 47389214fe9SHaiyue Wang 47489214fe9SHaiyue Wang #define IAVF_LINK_SPEED_2_5GB_SHIFT 0x0 47589214fe9SHaiyue Wang #define IAVF_LINK_SPEED_100MB_SHIFT 0x1 47689214fe9SHaiyue Wang #define IAVF_LINK_SPEED_1000MB_SHIFT 0x2 47789214fe9SHaiyue Wang #define IAVF_LINK_SPEED_10GB_SHIFT 0x3 47889214fe9SHaiyue Wang #define IAVF_LINK_SPEED_40GB_SHIFT 0x4 47989214fe9SHaiyue Wang #define IAVF_LINK_SPEED_20GB_SHIFT 0x5 48089214fe9SHaiyue Wang #define IAVF_LINK_SPEED_25GB_SHIFT 0x6 48189214fe9SHaiyue Wang #define IAVF_LINK_SPEED_5GB_SHIFT 0x7 48289214fe9SHaiyue Wang 48389214fe9SHaiyue Wang enum iavf_aq_link_speed { 48489214fe9SHaiyue Wang IAVF_LINK_SPEED_UNKNOWN = 0, 48589214fe9SHaiyue Wang IAVF_LINK_SPEED_100MB = (1 << IAVF_LINK_SPEED_100MB_SHIFT), 48689214fe9SHaiyue Wang IAVF_LINK_SPEED_1GB = (1 << IAVF_LINK_SPEED_1000MB_SHIFT), 48789214fe9SHaiyue Wang IAVF_LINK_SPEED_2_5GB = (1 << IAVF_LINK_SPEED_2_5GB_SHIFT), 48889214fe9SHaiyue Wang IAVF_LINK_SPEED_5GB = (1 << IAVF_LINK_SPEED_5GB_SHIFT), 48989214fe9SHaiyue Wang IAVF_LINK_SPEED_10GB = (1 << IAVF_LINK_SPEED_10GB_SHIFT), 49089214fe9SHaiyue Wang IAVF_LINK_SPEED_40GB = (1 << IAVF_LINK_SPEED_40GB_SHIFT), 49189214fe9SHaiyue Wang IAVF_LINK_SPEED_20GB = (1 << IAVF_LINK_SPEED_20GB_SHIFT), 49289214fe9SHaiyue Wang IAVF_LINK_SPEED_25GB = (1 << IAVF_LINK_SPEED_25GB_SHIFT), 49389214fe9SHaiyue Wang }; 49489214fe9SHaiyue Wang 49589214fe9SHaiyue Wang #define IAVF_AQ_LINK_UP_FUNCTION 0x01 49689214fe9SHaiyue Wang 49789214fe9SHaiyue Wang /* Send to PF command (indirect 0x0801) id is only used by PF 49889214fe9SHaiyue Wang * Send to VF command (indirect 0x0802) id is only used by PF 49989214fe9SHaiyue Wang * Send to Peer PF command (indirect 0x0803) 50089214fe9SHaiyue Wang */ 50189214fe9SHaiyue Wang struct iavf_aqc_pf_vf_message { 50289214fe9SHaiyue Wang __le32 id; 50389214fe9SHaiyue Wang u8 reserved[4]; 50489214fe9SHaiyue Wang __le32 addr_high; 50589214fe9SHaiyue Wang __le32 addr_low; 50689214fe9SHaiyue Wang }; 50789214fe9SHaiyue Wang 50889214fe9SHaiyue Wang IAVF_CHECK_CMD_LENGTH(iavf_aqc_pf_vf_message); 50989214fe9SHaiyue Wang 51089214fe9SHaiyue Wang /* Get CEE DCBX Oper Config (0x0A07) 51189214fe9SHaiyue Wang * uses the generic descriptor struct 51289214fe9SHaiyue Wang * returns below as indirect response 51389214fe9SHaiyue Wang */ 51489214fe9SHaiyue Wang 51589214fe9SHaiyue Wang #define IAVF_AQC_CEE_APP_FCOE_SHIFT 0x0 51689214fe9SHaiyue Wang #define IAVF_AQC_CEE_APP_FCOE_MASK (0x7 << IAVF_AQC_CEE_APP_FCOE_SHIFT) 51789214fe9SHaiyue Wang #define IAVF_AQC_CEE_APP_ISCSI_SHIFT 0x3 51889214fe9SHaiyue Wang #define IAVF_AQC_CEE_APP_ISCSI_MASK (0x7 << IAVF_AQC_CEE_APP_ISCSI_SHIFT) 51989214fe9SHaiyue Wang #define IAVF_AQC_CEE_APP_FIP_SHIFT 0x8 52089214fe9SHaiyue Wang #define IAVF_AQC_CEE_APP_FIP_MASK (0x7 << IAVF_AQC_CEE_APP_FIP_SHIFT) 52189214fe9SHaiyue Wang 52289214fe9SHaiyue Wang #define IAVF_AQC_CEE_PG_STATUS_SHIFT 0x0 52389214fe9SHaiyue Wang #define IAVF_AQC_CEE_PG_STATUS_MASK (0x7 << IAVF_AQC_CEE_PG_STATUS_SHIFT) 52489214fe9SHaiyue Wang #define IAVF_AQC_CEE_PFC_STATUS_SHIFT 0x3 52589214fe9SHaiyue Wang #define IAVF_AQC_CEE_PFC_STATUS_MASK (0x7 << IAVF_AQC_CEE_PFC_STATUS_SHIFT) 52689214fe9SHaiyue Wang #define IAVF_AQC_CEE_APP_STATUS_SHIFT 0x8 52789214fe9SHaiyue Wang #define IAVF_AQC_CEE_APP_STATUS_MASK (0x7 << IAVF_AQC_CEE_APP_STATUS_SHIFT) 52889214fe9SHaiyue Wang #define IAVF_AQC_CEE_FCOE_STATUS_SHIFT 0x8 52989214fe9SHaiyue Wang #define IAVF_AQC_CEE_FCOE_STATUS_MASK (0x7 << IAVF_AQC_CEE_FCOE_STATUS_SHIFT) 53089214fe9SHaiyue Wang #define IAVF_AQC_CEE_ISCSI_STATUS_SHIFT 0xB 53189214fe9SHaiyue Wang #define IAVF_AQC_CEE_ISCSI_STATUS_MASK (0x7 << IAVF_AQC_CEE_ISCSI_STATUS_SHIFT) 53289214fe9SHaiyue Wang #define IAVF_AQC_CEE_FIP_STATUS_SHIFT 0x10 53389214fe9SHaiyue Wang #define IAVF_AQC_CEE_FIP_STATUS_MASK (0x7 << IAVF_AQC_CEE_FIP_STATUS_SHIFT) 53489214fe9SHaiyue Wang 53589214fe9SHaiyue Wang /* struct iavf_aqc_get_cee_dcb_cfg_v1_resp was originally defined with 53689214fe9SHaiyue Wang * word boundary layout issues, which the Linux compilers silently deal 53789214fe9SHaiyue Wang * with by adding padding, making the actual struct larger than designed. 53889214fe9SHaiyue Wang * However, the FW compiler for the NIC is less lenient and complains 53989214fe9SHaiyue Wang * about the struct. Hence, the struct defined here has an extra byte in 54089214fe9SHaiyue Wang * fields reserved3 and reserved4 to directly acknowledge that padding, 54189214fe9SHaiyue Wang * and the new length is used in the length check macro. 54289214fe9SHaiyue Wang */ 54389214fe9SHaiyue Wang struct iavf_aqc_get_cee_dcb_cfg_v1_resp { 54489214fe9SHaiyue Wang u8 reserved1; 54589214fe9SHaiyue Wang u8 oper_num_tc; 54689214fe9SHaiyue Wang u8 oper_prio_tc[4]; 54789214fe9SHaiyue Wang u8 reserved2; 54889214fe9SHaiyue Wang u8 oper_tc_bw[8]; 54989214fe9SHaiyue Wang u8 oper_pfc_en; 55089214fe9SHaiyue Wang u8 reserved3[2]; 55189214fe9SHaiyue Wang __le16 oper_app_prio; 55289214fe9SHaiyue Wang u8 reserved4[2]; 55389214fe9SHaiyue Wang __le16 tlv_status; 55489214fe9SHaiyue Wang }; 55589214fe9SHaiyue Wang 55689214fe9SHaiyue Wang IAVF_CHECK_STRUCT_LEN(0x18, iavf_aqc_get_cee_dcb_cfg_v1_resp); 55789214fe9SHaiyue Wang 55889214fe9SHaiyue Wang struct iavf_aqc_get_cee_dcb_cfg_resp { 55989214fe9SHaiyue Wang u8 oper_num_tc; 56089214fe9SHaiyue Wang u8 oper_prio_tc[4]; 56189214fe9SHaiyue Wang u8 oper_tc_bw[8]; 56289214fe9SHaiyue Wang u8 oper_pfc_en; 56389214fe9SHaiyue Wang __le16 oper_app_prio; 56489214fe9SHaiyue Wang __le32 tlv_status; 56589214fe9SHaiyue Wang u8 reserved[12]; 56689214fe9SHaiyue Wang }; 56789214fe9SHaiyue Wang 56889214fe9SHaiyue Wang IAVF_CHECK_STRUCT_LEN(0x20, iavf_aqc_get_cee_dcb_cfg_resp); 56989214fe9SHaiyue Wang 57089214fe9SHaiyue Wang /* Set Local LLDP MIB (indirect 0x0A08) 57189214fe9SHaiyue Wang * Used to replace the local MIB of a given LLDP agent. e.g. DCBx 57289214fe9SHaiyue Wang */ 57389214fe9SHaiyue Wang struct iavf_aqc_lldp_set_local_mib { 57489214fe9SHaiyue Wang #define SET_LOCAL_MIB_AC_TYPE_DCBX_SHIFT 0 57589214fe9SHaiyue Wang #define SET_LOCAL_MIB_AC_TYPE_DCBX_MASK (1 << \ 57689214fe9SHaiyue Wang SET_LOCAL_MIB_AC_TYPE_DCBX_SHIFT) 57789214fe9SHaiyue Wang #define SET_LOCAL_MIB_AC_TYPE_LOCAL_MIB 0x0 57889214fe9SHaiyue Wang #define SET_LOCAL_MIB_AC_TYPE_NON_WILLING_APPS_SHIFT (1) 57989214fe9SHaiyue Wang #define SET_LOCAL_MIB_AC_TYPE_NON_WILLING_APPS_MASK (1 << \ 58089214fe9SHaiyue Wang SET_LOCAL_MIB_AC_TYPE_NON_WILLING_APPS_SHIFT) 58189214fe9SHaiyue Wang #define SET_LOCAL_MIB_AC_TYPE_NON_WILLING_APPS 0x1 58289214fe9SHaiyue Wang u8 type; 58389214fe9SHaiyue Wang u8 reserved0; 58489214fe9SHaiyue Wang __le16 length; 58589214fe9SHaiyue Wang u8 reserved1[4]; 58689214fe9SHaiyue Wang __le32 address_high; 58789214fe9SHaiyue Wang __le32 address_low; 58889214fe9SHaiyue Wang }; 58989214fe9SHaiyue Wang 59089214fe9SHaiyue Wang IAVF_CHECK_CMD_LENGTH(iavf_aqc_lldp_set_local_mib); 59189214fe9SHaiyue Wang 59289214fe9SHaiyue Wang struct iavf_aqc_lldp_set_local_mib_resp { 59389214fe9SHaiyue Wang #define SET_LOCAL_MIB_RESP_EVENT_TRIGGERED_MASK 0x01 59489214fe9SHaiyue Wang u8 status; 59589214fe9SHaiyue Wang u8 reserved[15]; 59689214fe9SHaiyue Wang }; 59789214fe9SHaiyue Wang 59889214fe9SHaiyue Wang IAVF_CHECK_STRUCT_LEN(0x10, iavf_aqc_lldp_set_local_mib_resp); 59989214fe9SHaiyue Wang 60089214fe9SHaiyue Wang /* Stop/Start LLDP Agent (direct 0x0A09) 60189214fe9SHaiyue Wang * Used for stopping/starting specific LLDP agent. e.g. DCBx 60289214fe9SHaiyue Wang */ 60389214fe9SHaiyue Wang struct iavf_aqc_lldp_stop_start_specific_agent { 60489214fe9SHaiyue Wang #define IAVF_AQC_START_SPECIFIC_AGENT_SHIFT 0 60589214fe9SHaiyue Wang #define IAVF_AQC_START_SPECIFIC_AGENT_MASK \ 60689214fe9SHaiyue Wang (1 << IAVF_AQC_START_SPECIFIC_AGENT_SHIFT) 60789214fe9SHaiyue Wang u8 command; 60889214fe9SHaiyue Wang u8 reserved[15]; 60989214fe9SHaiyue Wang }; 61089214fe9SHaiyue Wang 61189214fe9SHaiyue Wang IAVF_CHECK_CMD_LENGTH(iavf_aqc_lldp_stop_start_specific_agent); 61289214fe9SHaiyue Wang 61389214fe9SHaiyue Wang struct iavf_aqc_get_set_rss_key { 61489214fe9SHaiyue Wang #define IAVF_AQC_SET_RSS_KEY_VSI_VALID (0x1 << 15) 61589214fe9SHaiyue Wang #define IAVF_AQC_SET_RSS_KEY_VSI_ID_SHIFT 0 61689214fe9SHaiyue Wang #define IAVF_AQC_SET_RSS_KEY_VSI_ID_MASK (0x3FF << \ 61789214fe9SHaiyue Wang IAVF_AQC_SET_RSS_KEY_VSI_ID_SHIFT) 61889214fe9SHaiyue Wang __le16 vsi_id; 61989214fe9SHaiyue Wang u8 reserved[6]; 62089214fe9SHaiyue Wang __le32 addr_high; 62189214fe9SHaiyue Wang __le32 addr_low; 62289214fe9SHaiyue Wang }; 62389214fe9SHaiyue Wang 62489214fe9SHaiyue Wang IAVF_CHECK_CMD_LENGTH(iavf_aqc_get_set_rss_key); 62589214fe9SHaiyue Wang 62689214fe9SHaiyue Wang struct iavf_aqc_get_set_rss_key_data { 62789214fe9SHaiyue Wang u8 standard_rss_key[0x28]; 62889214fe9SHaiyue Wang u8 extended_hash_key[0xc]; 62989214fe9SHaiyue Wang }; 63089214fe9SHaiyue Wang 63189214fe9SHaiyue Wang IAVF_CHECK_STRUCT_LEN(0x34, iavf_aqc_get_set_rss_key_data); 63289214fe9SHaiyue Wang 63389214fe9SHaiyue Wang struct iavf_aqc_get_set_rss_lut { 63489214fe9SHaiyue Wang #define IAVF_AQC_SET_RSS_LUT_VSI_VALID (0x1 << 15) 63589214fe9SHaiyue Wang #define IAVF_AQC_SET_RSS_LUT_VSI_ID_SHIFT 0 63689214fe9SHaiyue Wang #define IAVF_AQC_SET_RSS_LUT_VSI_ID_MASK (0x3FF << \ 63789214fe9SHaiyue Wang IAVF_AQC_SET_RSS_LUT_VSI_ID_SHIFT) 63889214fe9SHaiyue Wang __le16 vsi_id; 63989214fe9SHaiyue Wang #define IAVF_AQC_SET_RSS_LUT_TABLE_TYPE_SHIFT 0 64089214fe9SHaiyue Wang #define IAVF_AQC_SET_RSS_LUT_TABLE_TYPE_MASK (0x1 << \ 64189214fe9SHaiyue Wang IAVF_AQC_SET_RSS_LUT_TABLE_TYPE_SHIFT) 64289214fe9SHaiyue Wang 64389214fe9SHaiyue Wang #define IAVF_AQC_SET_RSS_LUT_TABLE_TYPE_VSI 0 64489214fe9SHaiyue Wang #define IAVF_AQC_SET_RSS_LUT_TABLE_TYPE_PF 1 64589214fe9SHaiyue Wang __le16 flags; 64689214fe9SHaiyue Wang u8 reserved[4]; 64789214fe9SHaiyue Wang __le32 addr_high; 64889214fe9SHaiyue Wang __le32 addr_low; 64989214fe9SHaiyue Wang }; 65089214fe9SHaiyue Wang 65189214fe9SHaiyue Wang IAVF_CHECK_CMD_LENGTH(iavf_aqc_get_set_rss_lut); 65289214fe9SHaiyue Wang #endif /* _IAVF_ADMINQ_CMD_H_ */ 653