xref: /freebsd/sys/dev/ixl/i40e_adminq_cmd.h (revision abf774528d7e497460510b0026db85e30f054142)
161ae650dSJack F Vogel /******************************************************************************
261ae650dSJack F Vogel 
3f4cc2d17SEric Joyner   Copyright (c) 2013-2018, Intel Corporation
461ae650dSJack F Vogel   All rights reserved.
561ae650dSJack F Vogel 
661ae650dSJack F Vogel   Redistribution and use in source and binary forms, with or without
761ae650dSJack F Vogel   modification, are permitted provided that the following conditions are met:
861ae650dSJack F Vogel 
961ae650dSJack F Vogel    1. Redistributions of source code must retain the above copyright notice,
1061ae650dSJack F Vogel       this list of conditions and the following disclaimer.
1161ae650dSJack F Vogel 
1261ae650dSJack F Vogel    2. Redistributions in binary form must reproduce the above copyright
1361ae650dSJack F Vogel       notice, this list of conditions and the following disclaimer in the
1461ae650dSJack F Vogel       documentation and/or other materials provided with the distribution.
1561ae650dSJack F Vogel 
1661ae650dSJack F Vogel    3. Neither the name of the Intel Corporation nor the names of its
1761ae650dSJack F Vogel       contributors may be used to endorse or promote products derived from
1861ae650dSJack F Vogel       this software without specific prior written permission.
1961ae650dSJack F Vogel 
2061ae650dSJack F Vogel   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
2161ae650dSJack F Vogel   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2261ae650dSJack F Vogel   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2361ae650dSJack F Vogel   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
2461ae650dSJack F Vogel   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2561ae650dSJack F Vogel   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2661ae650dSJack F Vogel   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2761ae650dSJack F Vogel   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2861ae650dSJack F Vogel   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2961ae650dSJack F Vogel   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
3061ae650dSJack F Vogel   POSSIBILITY OF SUCH DAMAGE.
3161ae650dSJack F Vogel 
3261ae650dSJack F Vogel ******************************************************************************/
3361ae650dSJack F Vogel /*$FreeBSD$*/
3461ae650dSJack F Vogel 
3561ae650dSJack F Vogel #ifndef _I40E_ADMINQ_CMD_H_
3661ae650dSJack F Vogel #define _I40E_ADMINQ_CMD_H_
3761ae650dSJack F Vogel 
3861ae650dSJack F Vogel /* This header file defines the i40e Admin Queue commands and is shared between
3961ae650dSJack F Vogel  * i40e Firmware and Software.
4061ae650dSJack F Vogel  *
4161ae650dSJack F Vogel  * This file needs to comply with the Linux Kernel coding style.
4261ae650dSJack F Vogel  */
4361ae650dSJack F Vogel 
44ceebc2f3SEric Joyner 
4561ae650dSJack F Vogel #define I40E_FW_API_VERSION_MAJOR	0x0001
46*abf77452SKrzysztof Galazka #define I40E_FW_API_VERSION_MINOR_X722	0x000C
47*abf77452SKrzysztof Galazka #define I40E_FW_API_VERSION_MINOR_X710	0x000E
48ceebc2f3SEric Joyner 
49ceebc2f3SEric Joyner #define I40E_FW_MINOR_VERSION(_h) ((_h)->mac.type == I40E_MAC_XL710 ? \
50ceebc2f3SEric Joyner 					I40E_FW_API_VERSION_MINOR_X710 : \
51ceebc2f3SEric Joyner 					I40E_FW_API_VERSION_MINOR_X722)
52ceebc2f3SEric Joyner 
53ceebc2f3SEric Joyner /* API version 1.7 implements additional link and PHY-specific APIs  */
54ceebc2f3SEric Joyner #define I40E_MINOR_VER_GET_LINK_INFO_XL710 0x0007
55b4a7ce06SEric Joyner /* API version 1.9 for X722 implements additional link and PHY-specific APIs */
56b4a7ce06SEric Joyner #define I40E_MINOR_VER_GET_LINK_INFO_X722 0x0009
57b4a7ce06SEric Joyner /* API version 1.6 for X722 devices adds ability to stop FW LLDP agent */
58b4a7ce06SEric Joyner #define I40E_MINOR_VER_FW_LLDP_STOPPABLE_X722 0x0006
59b4a7ce06SEric Joyner /* API version 1.10 for X722 devices adds ability to request FEC encoding */
60b4a7ce06SEric Joyner #define I40E_MINOR_VER_FW_REQUEST_FEC_X722 0x000A
6161ae650dSJack F Vogel 
6261ae650dSJack F Vogel struct i40e_aq_desc {
6361ae650dSJack F Vogel 	__le16 flags;
6461ae650dSJack F Vogel 	__le16 opcode;
6561ae650dSJack F Vogel 	__le16 datalen;
6661ae650dSJack F Vogel 	__le16 retval;
6761ae650dSJack F Vogel 	__le32 cookie_high;
6861ae650dSJack F Vogel 	__le32 cookie_low;
6961ae650dSJack F Vogel 	union {
7061ae650dSJack F Vogel 		struct {
7161ae650dSJack F Vogel 			__le32 param0;
7261ae650dSJack F Vogel 			__le32 param1;
7361ae650dSJack F Vogel 			__le32 param2;
7461ae650dSJack F Vogel 			__le32 param3;
7561ae650dSJack F Vogel 		} internal;
7661ae650dSJack F Vogel 		struct {
7761ae650dSJack F Vogel 			__le32 param0;
7861ae650dSJack F Vogel 			__le32 param1;
7961ae650dSJack F Vogel 			__le32 addr_high;
8061ae650dSJack F Vogel 			__le32 addr_low;
8161ae650dSJack F Vogel 		} external;
8261ae650dSJack F Vogel 		u8 raw[16];
8361ae650dSJack F Vogel 	} params;
8461ae650dSJack F Vogel };
8561ae650dSJack F Vogel 
8661ae650dSJack F Vogel /* Flags sub-structure
8761ae650dSJack F Vogel  * |0  |1  |2  |3  |4  |5  |6  |7  |8  |9  |10 |11 |12 |13 |14 |15 |
8861ae650dSJack F Vogel  * |DD |CMP|ERR|VFE| * *  RESERVED * * |LB |RD |VFC|BUF|SI |EI |FE |
8961ae650dSJack F Vogel  */
9061ae650dSJack F Vogel 
9161ae650dSJack F Vogel /* command flags and offsets*/
9261ae650dSJack F Vogel #define I40E_AQ_FLAG_DD_SHIFT	0
9361ae650dSJack F Vogel #define I40E_AQ_FLAG_CMP_SHIFT	1
9461ae650dSJack F Vogel #define I40E_AQ_FLAG_ERR_SHIFT	2
9561ae650dSJack F Vogel #define I40E_AQ_FLAG_VFE_SHIFT	3
9661ae650dSJack F Vogel #define I40E_AQ_FLAG_LB_SHIFT	9
9761ae650dSJack F Vogel #define I40E_AQ_FLAG_RD_SHIFT	10
9861ae650dSJack F Vogel #define I40E_AQ_FLAG_VFC_SHIFT	11
9961ae650dSJack F Vogel #define I40E_AQ_FLAG_BUF_SHIFT	12
10061ae650dSJack F Vogel #define I40E_AQ_FLAG_SI_SHIFT	13
10161ae650dSJack F Vogel #define I40E_AQ_FLAG_EI_SHIFT	14
10261ae650dSJack F Vogel #define I40E_AQ_FLAG_FE_SHIFT	15
10361ae650dSJack F Vogel 
10461ae650dSJack F Vogel #define I40E_AQ_FLAG_DD		(1 << I40E_AQ_FLAG_DD_SHIFT)  /* 0x1    */
10561ae650dSJack F Vogel #define I40E_AQ_FLAG_CMP	(1 << I40E_AQ_FLAG_CMP_SHIFT) /* 0x2    */
10661ae650dSJack F Vogel #define I40E_AQ_FLAG_ERR	(1 << I40E_AQ_FLAG_ERR_SHIFT) /* 0x4    */
10761ae650dSJack F Vogel #define I40E_AQ_FLAG_VFE	(1 << I40E_AQ_FLAG_VFE_SHIFT) /* 0x8    */
10861ae650dSJack F Vogel #define I40E_AQ_FLAG_LB		(1 << I40E_AQ_FLAG_LB_SHIFT)  /* 0x200  */
10961ae650dSJack F Vogel #define I40E_AQ_FLAG_RD		(1 << I40E_AQ_FLAG_RD_SHIFT)  /* 0x400  */
11061ae650dSJack F Vogel #define I40E_AQ_FLAG_VFC	(1 << I40E_AQ_FLAG_VFC_SHIFT) /* 0x800  */
11161ae650dSJack F Vogel #define I40E_AQ_FLAG_BUF	(1 << I40E_AQ_FLAG_BUF_SHIFT) /* 0x1000 */
11261ae650dSJack F Vogel #define I40E_AQ_FLAG_SI		(1 << I40E_AQ_FLAG_SI_SHIFT)  /* 0x2000 */
11361ae650dSJack F Vogel #define I40E_AQ_FLAG_EI		(1 << I40E_AQ_FLAG_EI_SHIFT)  /* 0x4000 */
11461ae650dSJack F Vogel #define I40E_AQ_FLAG_FE		(1 << I40E_AQ_FLAG_FE_SHIFT)  /* 0x8000 */
11561ae650dSJack F Vogel 
11661ae650dSJack F Vogel /* error codes */
11761ae650dSJack F Vogel enum i40e_admin_queue_err {
11861ae650dSJack F Vogel 	I40E_AQ_RC_OK		= 0,  /* success */
11961ae650dSJack F Vogel 	I40E_AQ_RC_EPERM	= 1,  /* Operation not permitted */
12061ae650dSJack F Vogel 	I40E_AQ_RC_ENOENT	= 2,  /* No such element */
12161ae650dSJack F Vogel 	I40E_AQ_RC_ESRCH	= 3,  /* Bad opcode */
12261ae650dSJack F Vogel 	I40E_AQ_RC_EINTR	= 4,  /* operation interrupted */
12361ae650dSJack F Vogel 	I40E_AQ_RC_EIO		= 5,  /* I/O error */
12461ae650dSJack F Vogel 	I40E_AQ_RC_ENXIO	= 6,  /* No such resource */
12561ae650dSJack F Vogel 	I40E_AQ_RC_E2BIG	= 7,  /* Arg too long */
12661ae650dSJack F Vogel 	I40E_AQ_RC_EAGAIN	= 8,  /* Try again */
12761ae650dSJack F Vogel 	I40E_AQ_RC_ENOMEM	= 9,  /* Out of memory */
12861ae650dSJack F Vogel 	I40E_AQ_RC_EACCES	= 10, /* Permission denied */
12961ae650dSJack F Vogel 	I40E_AQ_RC_EFAULT	= 11, /* Bad address */
13061ae650dSJack F Vogel 	I40E_AQ_RC_EBUSY	= 12, /* Device or resource busy */
13161ae650dSJack F Vogel 	I40E_AQ_RC_EEXIST	= 13, /* object already exists */
13261ae650dSJack F Vogel 	I40E_AQ_RC_EINVAL	= 14, /* Invalid argument */
13361ae650dSJack F Vogel 	I40E_AQ_RC_ENOTTY	= 15, /* Not a typewriter */
13461ae650dSJack F Vogel 	I40E_AQ_RC_ENOSPC	= 16, /* No space left or alloc failure */
13561ae650dSJack F Vogel 	I40E_AQ_RC_ENOSYS	= 17, /* Function not implemented */
13661ae650dSJack F Vogel 	I40E_AQ_RC_ERANGE	= 18, /* Parameter out of range */
13761ae650dSJack F Vogel 	I40E_AQ_RC_EFLUSHED	= 19, /* Cmd flushed due to prev cmd error */
13861ae650dSJack F Vogel 	I40E_AQ_RC_BAD_ADDR	= 20, /* Descriptor contains a bad pointer */
13961ae650dSJack F Vogel 	I40E_AQ_RC_EMODE	= 21, /* Op not allowed in current dev mode */
14061ae650dSJack F Vogel 	I40E_AQ_RC_EFBIG	= 22, /* File too large */
14161ae650dSJack F Vogel };
14261ae650dSJack F Vogel 
14361ae650dSJack F Vogel /* Admin Queue command opcodes */
14461ae650dSJack F Vogel enum i40e_admin_queue_opc {
14561ae650dSJack F Vogel 	/* aq commands */
14661ae650dSJack F Vogel 	i40e_aqc_opc_get_version	= 0x0001,
14761ae650dSJack F Vogel 	i40e_aqc_opc_driver_version	= 0x0002,
14861ae650dSJack F Vogel 	i40e_aqc_opc_queue_shutdown	= 0x0003,
14961ae650dSJack F Vogel 	i40e_aqc_opc_set_pf_context	= 0x0004,
15061ae650dSJack F Vogel 
15161ae650dSJack F Vogel 	/* resource ownership */
15261ae650dSJack F Vogel 	i40e_aqc_opc_request_resource	= 0x0008,
15361ae650dSJack F Vogel 	i40e_aqc_opc_release_resource	= 0x0009,
15461ae650dSJack F Vogel 
15561ae650dSJack F Vogel 	i40e_aqc_opc_list_func_capabilities	= 0x000A,
15661ae650dSJack F Vogel 	i40e_aqc_opc_list_dev_capabilities	= 0x000B,
15761ae650dSJack F Vogel 
1584294f337SSean Bruno 	/* Proxy commands */
1594294f337SSean Bruno 	i40e_aqc_opc_set_proxy_config		= 0x0104,
1604294f337SSean Bruno 	i40e_aqc_opc_set_ns_proxy_table_entry	= 0x0105,
1614294f337SSean Bruno 
16261ae650dSJack F Vogel 	/* LAA */
16361ae650dSJack F Vogel 	i40e_aqc_opc_mac_address_read	= 0x0107,
16461ae650dSJack F Vogel 	i40e_aqc_opc_mac_address_write	= 0x0108,
16561ae650dSJack F Vogel 
16661ae650dSJack F Vogel 	/* PXE */
16761ae650dSJack F Vogel 	i40e_aqc_opc_clear_pxe_mode	= 0x0110,
16861ae650dSJack F Vogel 
1694294f337SSean Bruno 	/* WoL commands */
1704294f337SSean Bruno 	i40e_aqc_opc_set_wol_filter	= 0x0120,
1714294f337SSean Bruno 	i40e_aqc_opc_get_wake_reason	= 0x0121,
172cb6b8299SEric Joyner 	i40e_aqc_opc_clear_all_wol_filters = 0x025E,
1734294f337SSean Bruno 
17461ae650dSJack F Vogel 	/* internal switch commands */
17561ae650dSJack F Vogel 	i40e_aqc_opc_get_switch_config		= 0x0200,
17661ae650dSJack F Vogel 	i40e_aqc_opc_add_statistics		= 0x0201,
17761ae650dSJack F Vogel 	i40e_aqc_opc_remove_statistics		= 0x0202,
17861ae650dSJack F Vogel 	i40e_aqc_opc_set_port_parameters	= 0x0203,
17961ae650dSJack F Vogel 	i40e_aqc_opc_get_switch_resource_alloc	= 0x0204,
180fdb6f38aSEric Joyner 	i40e_aqc_opc_set_switch_config		= 0x0205,
181d4683565SEric Joyner 	i40e_aqc_opc_rx_ctl_reg_read		= 0x0206,
182d4683565SEric Joyner 	i40e_aqc_opc_rx_ctl_reg_write		= 0x0207,
18361ae650dSJack F Vogel 
18461ae650dSJack F Vogel 	i40e_aqc_opc_add_vsi			= 0x0210,
18561ae650dSJack F Vogel 	i40e_aqc_opc_update_vsi_parameters	= 0x0211,
18661ae650dSJack F Vogel 	i40e_aqc_opc_get_vsi_parameters		= 0x0212,
18761ae650dSJack F Vogel 
18861ae650dSJack F Vogel 	i40e_aqc_opc_add_pv			= 0x0220,
18961ae650dSJack F Vogel 	i40e_aqc_opc_update_pv_parameters	= 0x0221,
19061ae650dSJack F Vogel 	i40e_aqc_opc_get_pv_parameters		= 0x0222,
19161ae650dSJack F Vogel 
19261ae650dSJack F Vogel 	i40e_aqc_opc_add_veb			= 0x0230,
19361ae650dSJack F Vogel 	i40e_aqc_opc_update_veb_parameters	= 0x0231,
19461ae650dSJack F Vogel 	i40e_aqc_opc_get_veb_parameters		= 0x0232,
19561ae650dSJack F Vogel 
19661ae650dSJack F Vogel 	i40e_aqc_opc_delete_element		= 0x0243,
19761ae650dSJack F Vogel 
19861ae650dSJack F Vogel 	i40e_aqc_opc_add_macvlan		= 0x0250,
19961ae650dSJack F Vogel 	i40e_aqc_opc_remove_macvlan		= 0x0251,
20061ae650dSJack F Vogel 	i40e_aqc_opc_add_vlan			= 0x0252,
20161ae650dSJack F Vogel 	i40e_aqc_opc_remove_vlan		= 0x0253,
20261ae650dSJack F Vogel 	i40e_aqc_opc_set_vsi_promiscuous_modes	= 0x0254,
20361ae650dSJack F Vogel 	i40e_aqc_opc_add_tag			= 0x0255,
20461ae650dSJack F Vogel 	i40e_aqc_opc_remove_tag			= 0x0256,
20561ae650dSJack F Vogel 	i40e_aqc_opc_add_multicast_etag		= 0x0257,
20661ae650dSJack F Vogel 	i40e_aqc_opc_remove_multicast_etag	= 0x0258,
20761ae650dSJack F Vogel 	i40e_aqc_opc_update_tag			= 0x0259,
20861ae650dSJack F Vogel 	i40e_aqc_opc_add_control_packet_filter	= 0x025A,
20961ae650dSJack F Vogel 	i40e_aqc_opc_remove_control_packet_filter	= 0x025B,
21061ae650dSJack F Vogel 	i40e_aqc_opc_add_cloud_filters		= 0x025C,
21161ae650dSJack F Vogel 	i40e_aqc_opc_remove_cloud_filters	= 0x025D,
2124294f337SSean Bruno 	i40e_aqc_opc_clear_wol_switch_filters	= 0x025E,
213b4a7ce06SEric Joyner 	i40e_aqc_opc_replace_cloud_filters	= 0x025F,
21461ae650dSJack F Vogel 
21561ae650dSJack F Vogel 	i40e_aqc_opc_add_mirror_rule	= 0x0260,
21661ae650dSJack F Vogel 	i40e_aqc_opc_delete_mirror_rule	= 0x0261,
21761ae650dSJack F Vogel 
21861ae650dSJack F Vogel 	/* DCB commands */
21961ae650dSJack F Vogel 	i40e_aqc_opc_dcb_ignore_pfc	= 0x0301,
22061ae650dSJack F Vogel 	i40e_aqc_opc_dcb_updated	= 0x0302,
221ceebc2f3SEric Joyner 	i40e_aqc_opc_set_dcb_parameters = 0x0303,
22261ae650dSJack F Vogel 
22361ae650dSJack F Vogel 	/* TX scheduler */
22461ae650dSJack F Vogel 	i40e_aqc_opc_configure_vsi_bw_limit		= 0x0400,
22561ae650dSJack F Vogel 	i40e_aqc_opc_configure_vsi_ets_sla_bw_limit	= 0x0406,
22661ae650dSJack F Vogel 	i40e_aqc_opc_configure_vsi_tc_bw		= 0x0407,
22761ae650dSJack F Vogel 	i40e_aqc_opc_query_vsi_bw_config		= 0x0408,
22861ae650dSJack F Vogel 	i40e_aqc_opc_query_vsi_ets_sla_config		= 0x040A,
22961ae650dSJack F Vogel 	i40e_aqc_opc_configure_switching_comp_bw_limit	= 0x0410,
23061ae650dSJack F Vogel 
23161ae650dSJack F Vogel 	i40e_aqc_opc_enable_switching_comp_ets			= 0x0413,
23261ae650dSJack F Vogel 	i40e_aqc_opc_modify_switching_comp_ets			= 0x0414,
23361ae650dSJack F Vogel 	i40e_aqc_opc_disable_switching_comp_ets			= 0x0415,
23461ae650dSJack F Vogel 	i40e_aqc_opc_configure_switching_comp_ets_bw_limit	= 0x0416,
23561ae650dSJack F Vogel 	i40e_aqc_opc_configure_switching_comp_bw_config		= 0x0417,
23661ae650dSJack F Vogel 	i40e_aqc_opc_query_switching_comp_ets_config		= 0x0418,
23761ae650dSJack F Vogel 	i40e_aqc_opc_query_port_ets_config			= 0x0419,
23861ae650dSJack F Vogel 	i40e_aqc_opc_query_switching_comp_bw_config		= 0x041A,
23961ae650dSJack F Vogel 	i40e_aqc_opc_suspend_port_tx				= 0x041B,
24061ae650dSJack F Vogel 	i40e_aqc_opc_resume_port_tx				= 0x041C,
24161ae650dSJack F Vogel 	i40e_aqc_opc_configure_partition_bw			= 0x041D,
24261ae650dSJack F Vogel 	/* hmc */
24361ae650dSJack F Vogel 	i40e_aqc_opc_query_hmc_resource_profile	= 0x0500,
24461ae650dSJack F Vogel 	i40e_aqc_opc_set_hmc_resource_profile	= 0x0501,
24561ae650dSJack F Vogel 
24661ae650dSJack F Vogel 	/* phy commands*/
24761ae650dSJack F Vogel 	i40e_aqc_opc_get_phy_abilities		= 0x0600,
24861ae650dSJack F Vogel 	i40e_aqc_opc_set_phy_config		= 0x0601,
24961ae650dSJack F Vogel 	i40e_aqc_opc_set_mac_config		= 0x0603,
25061ae650dSJack F Vogel 	i40e_aqc_opc_set_link_restart_an	= 0x0605,
25161ae650dSJack F Vogel 	i40e_aqc_opc_get_link_status		= 0x0607,
25261ae650dSJack F Vogel 	i40e_aqc_opc_set_phy_int_mask		= 0x0613,
25361ae650dSJack F Vogel 	i40e_aqc_opc_get_local_advt_reg		= 0x0614,
25461ae650dSJack F Vogel 	i40e_aqc_opc_set_local_advt_reg		= 0x0615,
25561ae650dSJack F Vogel 	i40e_aqc_opc_get_partner_advt		= 0x0616,
25661ae650dSJack F Vogel 	i40e_aqc_opc_set_lb_modes		= 0x0618,
25761ae650dSJack F Vogel 	i40e_aqc_opc_get_phy_wol_caps		= 0x0621,
25861ae650dSJack F Vogel 	i40e_aqc_opc_set_phy_debug		= 0x0622,
25961ae650dSJack F Vogel 	i40e_aqc_opc_upload_ext_phy_fm		= 0x0625,
260fdb6f38aSEric Joyner 	i40e_aqc_opc_run_phy_activity		= 0x0626,
261ceebc2f3SEric Joyner 	i40e_aqc_opc_set_phy_register		= 0x0628,
262ceebc2f3SEric Joyner 	i40e_aqc_opc_get_phy_register		= 0x0629,
26361ae650dSJack F Vogel 
26461ae650dSJack F Vogel 	/* NVM commands */
26561ae650dSJack F Vogel 	i40e_aqc_opc_nvm_read			= 0x0701,
26661ae650dSJack F Vogel 	i40e_aqc_opc_nvm_erase			= 0x0702,
26761ae650dSJack F Vogel 	i40e_aqc_opc_nvm_update			= 0x0703,
26861ae650dSJack F Vogel 	i40e_aqc_opc_nvm_config_read		= 0x0704,
26961ae650dSJack F Vogel 	i40e_aqc_opc_nvm_config_write		= 0x0705,
270*abf77452SKrzysztof Galazka 	i40e_aqc_opc_nvm_update_in_process	= 0x0706,
271*abf77452SKrzysztof Galazka 	i40e_aqc_opc_rollback_revision_update	= 0x0707,
272be771cdaSJack F Vogel 	i40e_aqc_opc_oem_post_update		= 0x0720,
273fdb6f38aSEric Joyner 	i40e_aqc_opc_thermal_sensor		= 0x0721,
27461ae650dSJack F Vogel 
27561ae650dSJack F Vogel 	/* virtualization commands */
27661ae650dSJack F Vogel 	i40e_aqc_opc_send_msg_to_pf		= 0x0801,
27761ae650dSJack F Vogel 	i40e_aqc_opc_send_msg_to_vf		= 0x0802,
27861ae650dSJack F Vogel 	i40e_aqc_opc_send_msg_to_peer		= 0x0803,
27961ae650dSJack F Vogel 
28061ae650dSJack F Vogel 	/* alternate structure */
28161ae650dSJack F Vogel 	i40e_aqc_opc_alternate_write		= 0x0900,
28261ae650dSJack F Vogel 	i40e_aqc_opc_alternate_write_indirect	= 0x0901,
28361ae650dSJack F Vogel 	i40e_aqc_opc_alternate_read		= 0x0902,
28461ae650dSJack F Vogel 	i40e_aqc_opc_alternate_read_indirect	= 0x0903,
28561ae650dSJack F Vogel 	i40e_aqc_opc_alternate_write_done	= 0x0904,
28661ae650dSJack F Vogel 	i40e_aqc_opc_alternate_set_mode		= 0x0905,
28761ae650dSJack F Vogel 	i40e_aqc_opc_alternate_clear_port	= 0x0906,
28861ae650dSJack F Vogel 
28961ae650dSJack F Vogel 	/* LLDP commands */
29061ae650dSJack F Vogel 	i40e_aqc_opc_lldp_get_mib	= 0x0A00,
29161ae650dSJack F Vogel 	i40e_aqc_opc_lldp_update_mib	= 0x0A01,
29261ae650dSJack F Vogel 	i40e_aqc_opc_lldp_add_tlv	= 0x0A02,
29361ae650dSJack F Vogel 	i40e_aqc_opc_lldp_update_tlv	= 0x0A03,
29461ae650dSJack F Vogel 	i40e_aqc_opc_lldp_delete_tlv	= 0x0A04,
29561ae650dSJack F Vogel 	i40e_aqc_opc_lldp_stop		= 0x0A05,
29661ae650dSJack F Vogel 	i40e_aqc_opc_lldp_start		= 0x0A06,
297f247dc25SJack F Vogel 	i40e_aqc_opc_get_cee_dcb_cfg	= 0x0A07,
298f247dc25SJack F Vogel 	i40e_aqc_opc_lldp_set_local_mib	= 0x0A08,
299f247dc25SJack F Vogel 	i40e_aqc_opc_lldp_stop_start_spec_agent	= 0x0A09,
300b4a7ce06SEric Joyner 	i40e_aqc_opc_lldp_restore		= 0x0A0A,
30161ae650dSJack F Vogel 
30261ae650dSJack F Vogel 	/* Tunnel commands */
30361ae650dSJack F Vogel 	i40e_aqc_opc_add_udp_tunnel	= 0x0B00,
30461ae650dSJack F Vogel 	i40e_aqc_opc_del_udp_tunnel	= 0x0B01,
3054294f337SSean Bruno 	i40e_aqc_opc_set_rss_key	= 0x0B02,
3064294f337SSean Bruno 	i40e_aqc_opc_set_rss_lut	= 0x0B03,
3074294f337SSean Bruno 	i40e_aqc_opc_get_rss_key	= 0x0B04,
3084294f337SSean Bruno 	i40e_aqc_opc_get_rss_lut	= 0x0B05,
30961ae650dSJack F Vogel 
31061ae650dSJack F Vogel 	/* Async Events */
31161ae650dSJack F Vogel 	i40e_aqc_opc_event_lan_overflow		= 0x1001,
31261ae650dSJack F Vogel 
31361ae650dSJack F Vogel 	/* OEM commands */
31461ae650dSJack F Vogel 	i40e_aqc_opc_oem_parameter_change	= 0xFE00,
31561ae650dSJack F Vogel 	i40e_aqc_opc_oem_device_status_change	= 0xFE01,
316f247dc25SJack F Vogel 	i40e_aqc_opc_oem_ocsd_initialize	= 0xFE02,
317f247dc25SJack F Vogel 	i40e_aqc_opc_oem_ocbb_initialize	= 0xFE03,
31861ae650dSJack F Vogel 
31961ae650dSJack F Vogel 	/* debug commands */
32061ae650dSJack F Vogel 	i40e_aqc_opc_debug_read_reg		= 0xFF03,
32161ae650dSJack F Vogel 	i40e_aqc_opc_debug_write_reg		= 0xFF04,
32261ae650dSJack F Vogel 	i40e_aqc_opc_debug_modify_reg		= 0xFF07,
32361ae650dSJack F Vogel 	i40e_aqc_opc_debug_dump_internals	= 0xFF08,
32461ae650dSJack F Vogel };
32561ae650dSJack F Vogel 
32661ae650dSJack F Vogel /* command structures and indirect data structures */
32761ae650dSJack F Vogel 
32861ae650dSJack F Vogel /* Structure naming conventions:
32961ae650dSJack F Vogel  * - no suffix for direct command descriptor structures
33061ae650dSJack F Vogel  * - _data for indirect sent data
33161ae650dSJack F Vogel  * - _resp for indirect return data (data which is both will use _data)
33261ae650dSJack F Vogel  * - _completion for direct return data
33361ae650dSJack F Vogel  * - _element_ for repeated elements (may also be _data or _resp)
33461ae650dSJack F Vogel  *
33561ae650dSJack F Vogel  * Command structures are expected to overlay the params.raw member of the basic
33661ae650dSJack F Vogel  * descriptor, and as such cannot exceed 16 bytes in length.
33761ae650dSJack F Vogel  */
33861ae650dSJack F Vogel 
33961ae650dSJack F Vogel /* This macro is used to generate a compilation error if a structure
34061ae650dSJack F Vogel  * is not exactly the correct length. It gives a divide by zero error if the
34161ae650dSJack F Vogel  * structure is not of the correct size, otherwise it creates an enum that is
34261ae650dSJack F Vogel  * never used.
34361ae650dSJack F Vogel  */
34461ae650dSJack F Vogel #define I40E_CHECK_STRUCT_LEN(n, X) enum i40e_static_assert_enum_##X \
34561ae650dSJack F Vogel 	{ i40e_static_assert_##X = (n)/((sizeof(struct X) == (n)) ? 1 : 0) }
34661ae650dSJack F Vogel 
34761ae650dSJack F Vogel /* This macro is used extensively to ensure that command structures are 16
34861ae650dSJack F Vogel  * bytes in length as they have to map to the raw array of that size.
34961ae650dSJack F Vogel  */
35061ae650dSJack F Vogel #define I40E_CHECK_CMD_LENGTH(X)	I40E_CHECK_STRUCT_LEN(16, X)
35161ae650dSJack F Vogel 
35261ae650dSJack F Vogel /* internal (0x00XX) commands */
35361ae650dSJack F Vogel 
35461ae650dSJack F Vogel /* Get version (direct 0x0001) */
35561ae650dSJack F Vogel struct i40e_aqc_get_version {
35661ae650dSJack F Vogel 	__le32 rom_ver;
35761ae650dSJack F Vogel 	__le32 fw_build;
35861ae650dSJack F Vogel 	__le16 fw_major;
35961ae650dSJack F Vogel 	__le16 fw_minor;
36061ae650dSJack F Vogel 	__le16 api_major;
36161ae650dSJack F Vogel 	__le16 api_minor;
36261ae650dSJack F Vogel };
36361ae650dSJack F Vogel 
36461ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_get_version);
36561ae650dSJack F Vogel 
36661ae650dSJack F Vogel /* Send driver version (indirect 0x0002) */
36761ae650dSJack F Vogel struct i40e_aqc_driver_version {
36861ae650dSJack F Vogel 	u8	driver_major_ver;
36961ae650dSJack F Vogel 	u8	driver_minor_ver;
37061ae650dSJack F Vogel 	u8	driver_build_ver;
37161ae650dSJack F Vogel 	u8	driver_subbuild_ver;
37261ae650dSJack F Vogel 	u8	reserved[4];
37361ae650dSJack F Vogel 	__le32	address_high;
37461ae650dSJack F Vogel 	__le32	address_low;
37561ae650dSJack F Vogel };
37661ae650dSJack F Vogel 
37761ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_driver_version);
37861ae650dSJack F Vogel 
37961ae650dSJack F Vogel /* Queue Shutdown (direct 0x0003) */
38061ae650dSJack F Vogel struct i40e_aqc_queue_shutdown {
38161ae650dSJack F Vogel 	__le32	driver_unloading;
38261ae650dSJack F Vogel #define I40E_AQ_DRIVER_UNLOADING	0x1
38361ae650dSJack F Vogel 	u8	reserved[12];
38461ae650dSJack F Vogel };
38561ae650dSJack F Vogel 
38661ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_queue_shutdown);
38761ae650dSJack F Vogel 
38861ae650dSJack F Vogel /* Set PF context (0x0004, direct) */
38961ae650dSJack F Vogel struct i40e_aqc_set_pf_context {
39061ae650dSJack F Vogel 	u8	pf_id;
39161ae650dSJack F Vogel 	u8	reserved[15];
39261ae650dSJack F Vogel };
39361ae650dSJack F Vogel 
39461ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_set_pf_context);
39561ae650dSJack F Vogel 
39661ae650dSJack F Vogel /* Request resource ownership (direct 0x0008)
39761ae650dSJack F Vogel  * Release resource ownership (direct 0x0009)
39861ae650dSJack F Vogel  */
39961ae650dSJack F Vogel #define I40E_AQ_RESOURCE_NVM			1
40061ae650dSJack F Vogel #define I40E_AQ_RESOURCE_SDP			2
40161ae650dSJack F Vogel #define I40E_AQ_RESOURCE_ACCESS_READ		1
40261ae650dSJack F Vogel #define I40E_AQ_RESOURCE_ACCESS_WRITE		2
40361ae650dSJack F Vogel #define I40E_AQ_RESOURCE_NVM_READ_TIMEOUT	3000
40461ae650dSJack F Vogel #define I40E_AQ_RESOURCE_NVM_WRITE_TIMEOUT	180000
40561ae650dSJack F Vogel 
40661ae650dSJack F Vogel struct i40e_aqc_request_resource {
40761ae650dSJack F Vogel 	__le16	resource_id;
40861ae650dSJack F Vogel 	__le16	access_type;
40961ae650dSJack F Vogel 	__le32	timeout;
41061ae650dSJack F Vogel 	__le32	resource_number;
41161ae650dSJack F Vogel 	u8	reserved[4];
41261ae650dSJack F Vogel };
41361ae650dSJack F Vogel 
41461ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_request_resource);
41561ae650dSJack F Vogel 
41661ae650dSJack F Vogel /* Get function capabilities (indirect 0x000A)
41761ae650dSJack F Vogel  * Get device capabilities (indirect 0x000B)
41861ae650dSJack F Vogel  */
41961ae650dSJack F Vogel struct i40e_aqc_list_capabilites {
42061ae650dSJack F Vogel 	u8 command_flags;
42161ae650dSJack F Vogel #define I40E_AQ_LIST_CAP_PF_INDEX_EN	1
42261ae650dSJack F Vogel 	u8 pf_index;
42361ae650dSJack F Vogel 	u8 reserved[2];
42461ae650dSJack F Vogel 	__le32 count;
42561ae650dSJack F Vogel 	__le32 addr_high;
42661ae650dSJack F Vogel 	__le32 addr_low;
42761ae650dSJack F Vogel };
42861ae650dSJack F Vogel 
42961ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_list_capabilites);
43061ae650dSJack F Vogel 
43161ae650dSJack F Vogel struct i40e_aqc_list_capabilities_element_resp {
43261ae650dSJack F Vogel 	__le16	id;
43361ae650dSJack F Vogel 	u8	major_rev;
43461ae650dSJack F Vogel 	u8	minor_rev;
43561ae650dSJack F Vogel 	__le32	number;
43661ae650dSJack F Vogel 	__le32	logical_id;
43761ae650dSJack F Vogel 	__le32	phys_id;
43861ae650dSJack F Vogel 	u8	reserved[16];
43961ae650dSJack F Vogel };
44061ae650dSJack F Vogel 
44161ae650dSJack F Vogel /* list of caps */
44261ae650dSJack F Vogel 
44361ae650dSJack F Vogel #define I40E_AQ_CAP_ID_SWITCH_MODE	0x0001
44461ae650dSJack F Vogel #define I40E_AQ_CAP_ID_MNG_MODE		0x0002
44561ae650dSJack F Vogel #define I40E_AQ_CAP_ID_NPAR_ACTIVE	0x0003
44661ae650dSJack F Vogel #define I40E_AQ_CAP_ID_OS2BMC_CAP	0x0004
44761ae650dSJack F Vogel #define I40E_AQ_CAP_ID_FUNCTIONS_VALID	0x0005
44861ae650dSJack F Vogel #define I40E_AQ_CAP_ID_ALTERNATE_RAM	0x0006
4497f70bec6SEric Joyner #define I40E_AQ_CAP_ID_WOL_AND_PROXY	0x0008
45061ae650dSJack F Vogel #define I40E_AQ_CAP_ID_SRIOV		0x0012
45161ae650dSJack F Vogel #define I40E_AQ_CAP_ID_VF		0x0013
45261ae650dSJack F Vogel #define I40E_AQ_CAP_ID_VMDQ		0x0014
45361ae650dSJack F Vogel #define I40E_AQ_CAP_ID_8021QBG		0x0015
45461ae650dSJack F Vogel #define I40E_AQ_CAP_ID_8021QBR		0x0016
45561ae650dSJack F Vogel #define I40E_AQ_CAP_ID_VSI		0x0017
45661ae650dSJack F Vogel #define I40E_AQ_CAP_ID_DCB		0x0018
45761ae650dSJack F Vogel #define I40E_AQ_CAP_ID_FCOE		0x0021
458f247dc25SJack F Vogel #define I40E_AQ_CAP_ID_ISCSI		0x0022
45961ae650dSJack F Vogel #define I40E_AQ_CAP_ID_RSS		0x0040
46061ae650dSJack F Vogel #define I40E_AQ_CAP_ID_RXQ		0x0041
46161ae650dSJack F Vogel #define I40E_AQ_CAP_ID_TXQ		0x0042
46261ae650dSJack F Vogel #define I40E_AQ_CAP_ID_MSIX		0x0043
46361ae650dSJack F Vogel #define I40E_AQ_CAP_ID_VF_MSIX		0x0044
46461ae650dSJack F Vogel #define I40E_AQ_CAP_ID_FLOW_DIRECTOR	0x0045
46561ae650dSJack F Vogel #define I40E_AQ_CAP_ID_1588		0x0046
46661ae650dSJack F Vogel #define I40E_AQ_CAP_ID_IWARP		0x0051
46761ae650dSJack F Vogel #define I40E_AQ_CAP_ID_LED		0x0061
46861ae650dSJack F Vogel #define I40E_AQ_CAP_ID_SDP		0x0062
46961ae650dSJack F Vogel #define I40E_AQ_CAP_ID_MDIO		0x0063
4707f70bec6SEric Joyner #define I40E_AQ_CAP_ID_WSR_PROT		0x0064
471*abf77452SKrzysztof Galazka #define I40E_AQ_CAP_ID_DIS_UNUSED_PORTS	0x0067
4724294f337SSean Bruno #define I40E_AQ_CAP_ID_NVM_MGMT		0x0080
47361ae650dSJack F Vogel #define I40E_AQ_CAP_ID_FLEX10		0x00F1
47461ae650dSJack F Vogel #define I40E_AQ_CAP_ID_CEM		0x00F2
47561ae650dSJack F Vogel 
47661ae650dSJack F Vogel /* Set CPPM Configuration (direct 0x0103) */
47761ae650dSJack F Vogel struct i40e_aqc_cppm_configuration {
47861ae650dSJack F Vogel 	__le16	command_flags;
47961ae650dSJack F Vogel #define I40E_AQ_CPPM_EN_LTRC	0x0800
48061ae650dSJack F Vogel #define I40E_AQ_CPPM_EN_DMCTH	0x1000
48161ae650dSJack F Vogel #define I40E_AQ_CPPM_EN_DMCTLX	0x2000
48261ae650dSJack F Vogel #define I40E_AQ_CPPM_EN_HPTC	0x4000
48361ae650dSJack F Vogel #define I40E_AQ_CPPM_EN_DMARC	0x8000
48461ae650dSJack F Vogel 	__le16	ttlx;
48561ae650dSJack F Vogel 	__le32	dmacr;
48661ae650dSJack F Vogel 	__le16	dmcth;
48761ae650dSJack F Vogel 	u8	hptc;
48861ae650dSJack F Vogel 	u8	reserved;
48961ae650dSJack F Vogel 	__le32	pfltrc;
49061ae650dSJack F Vogel };
49161ae650dSJack F Vogel 
49261ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_cppm_configuration);
49361ae650dSJack F Vogel 
49461ae650dSJack F Vogel /* Set ARP Proxy command / response (indirect 0x0104) */
49561ae650dSJack F Vogel struct i40e_aqc_arp_proxy_data {
49661ae650dSJack F Vogel 	__le16	command_flags;
4974294f337SSean Bruno #define I40E_AQ_ARP_INIT_IPV4	0x0800
4984294f337SSean Bruno #define I40E_AQ_ARP_UNSUP_CTL	0x1000
4994294f337SSean Bruno #define I40E_AQ_ARP_ENA		0x2000
5004294f337SSean Bruno #define I40E_AQ_ARP_ADD_IPV4	0x4000
5014294f337SSean Bruno #define I40E_AQ_ARP_DEL_IPV4	0x8000
50261ae650dSJack F Vogel 	__le16	table_id;
5034294f337SSean Bruno 	__le32	enabled_offloads;
5044294f337SSean Bruno #define I40E_AQ_ARP_DIRECTED_OFFLOAD_ENABLE	0x00000020
5054294f337SSean Bruno #define I40E_AQ_ARP_OFFLOAD_ENABLE		0x00000800
50661ae650dSJack F Vogel 	__le32	ip_addr;
50761ae650dSJack F Vogel 	u8	mac_addr[6];
508f247dc25SJack F Vogel 	u8	reserved[2];
50961ae650dSJack F Vogel };
51061ae650dSJack F Vogel 
511f247dc25SJack F Vogel I40E_CHECK_STRUCT_LEN(0x14, i40e_aqc_arp_proxy_data);
512f247dc25SJack F Vogel 
51361ae650dSJack F Vogel /* Set NS Proxy Table Entry Command (indirect 0x0105) */
51461ae650dSJack F Vogel struct i40e_aqc_ns_proxy_data {
51561ae650dSJack F Vogel 	__le16	table_idx_mac_addr_0;
51661ae650dSJack F Vogel 	__le16	table_idx_mac_addr_1;
51761ae650dSJack F Vogel 	__le16	table_idx_ipv6_0;
51861ae650dSJack F Vogel 	__le16	table_idx_ipv6_1;
51961ae650dSJack F Vogel 	__le16	control;
5204294f337SSean Bruno #define I40E_AQ_NS_PROXY_ADD_0		0x0001
5214294f337SSean Bruno #define I40E_AQ_NS_PROXY_DEL_0		0x0002
5224294f337SSean Bruno #define I40E_AQ_NS_PROXY_ADD_1		0x0004
5234294f337SSean Bruno #define I40E_AQ_NS_PROXY_DEL_1		0x0008
5244294f337SSean Bruno #define I40E_AQ_NS_PROXY_ADD_IPV6_0	0x0010
5254294f337SSean Bruno #define I40E_AQ_NS_PROXY_DEL_IPV6_0	0x0020
5264294f337SSean Bruno #define I40E_AQ_NS_PROXY_ADD_IPV6_1	0x0040
5274294f337SSean Bruno #define I40E_AQ_NS_PROXY_DEL_IPV6_1	0x0080
5284294f337SSean Bruno #define I40E_AQ_NS_PROXY_COMMAND_SEQ	0x0100
5294294f337SSean Bruno #define I40E_AQ_NS_PROXY_INIT_IPV6_TBL	0x0200
5304294f337SSean Bruno #define I40E_AQ_NS_PROXY_INIT_MAC_TBL	0x0400
5314294f337SSean Bruno #define I40E_AQ_NS_PROXY_OFFLOAD_ENABLE	0x0800
5324294f337SSean Bruno #define I40E_AQ_NS_PROXY_DIRECTED_OFFLOAD_ENABLE	0x1000
53361ae650dSJack F Vogel 	u8	mac_addr_0[6];
53461ae650dSJack F Vogel 	u8	mac_addr_1[6];
53561ae650dSJack F Vogel 	u8	local_mac_addr[6];
53661ae650dSJack F Vogel 	u8	ipv6_addr_0[16]; /* Warning! spec specifies BE byte order */
53761ae650dSJack F Vogel 	u8	ipv6_addr_1[16];
53861ae650dSJack F Vogel };
53961ae650dSJack F Vogel 
540f247dc25SJack F Vogel I40E_CHECK_STRUCT_LEN(0x3c, i40e_aqc_ns_proxy_data);
541f247dc25SJack F Vogel 
54261ae650dSJack F Vogel /* Manage LAA Command (0x0106) - obsolete */
54361ae650dSJack F Vogel struct i40e_aqc_mng_laa {
54461ae650dSJack F Vogel 	__le16	command_flags;
54561ae650dSJack F Vogel #define I40E_AQ_LAA_FLAG_WR	0x8000
54661ae650dSJack F Vogel 	u8	reserved[2];
54761ae650dSJack F Vogel 	__le32	sal;
54861ae650dSJack F Vogel 	__le16	sah;
54961ae650dSJack F Vogel 	u8	reserved2[6];
55061ae650dSJack F Vogel };
55161ae650dSJack F Vogel 
552f247dc25SJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_mng_laa);
553f247dc25SJack F Vogel 
55461ae650dSJack F Vogel /* Manage MAC Address Read Command (indirect 0x0107) */
55561ae650dSJack F Vogel struct i40e_aqc_mac_address_read {
55661ae650dSJack F Vogel 	__le16	command_flags;
55761ae650dSJack F Vogel #define I40E_AQC_LAN_ADDR_VALID		0x10
55861ae650dSJack F Vogel #define I40E_AQC_SAN_ADDR_VALID		0x20
55961ae650dSJack F Vogel #define I40E_AQC_PORT_ADDR_VALID	0x40
56061ae650dSJack F Vogel #define I40E_AQC_WOL_ADDR_VALID		0x80
561be771cdaSJack F Vogel #define I40E_AQC_MC_MAG_EN_VALID	0x100
562cb6b8299SEric Joyner #define I40E_AQC_WOL_PRESERVE_STATUS	0x200
563cb6b8299SEric Joyner #define I40E_AQC_ADDR_VALID_MASK	0x3F0
56461ae650dSJack F Vogel 	u8	reserved[6];
56561ae650dSJack F Vogel 	__le32	addr_high;
56661ae650dSJack F Vogel 	__le32	addr_low;
56761ae650dSJack F Vogel };
56861ae650dSJack F Vogel 
56961ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_mac_address_read);
57061ae650dSJack F Vogel 
57161ae650dSJack F Vogel struct i40e_aqc_mac_address_read_data {
57261ae650dSJack F Vogel 	u8 pf_lan_mac[6];
57361ae650dSJack F Vogel 	u8 pf_san_mac[6];
57461ae650dSJack F Vogel 	u8 port_mac[6];
57561ae650dSJack F Vogel 	u8 pf_wol_mac[6];
57661ae650dSJack F Vogel };
57761ae650dSJack F Vogel 
57861ae650dSJack F Vogel I40E_CHECK_STRUCT_LEN(24, i40e_aqc_mac_address_read_data);
57961ae650dSJack F Vogel 
58061ae650dSJack F Vogel /* Manage MAC Address Write Command (0x0108) */
58161ae650dSJack F Vogel struct i40e_aqc_mac_address_write {
58261ae650dSJack F Vogel 	__le16	command_flags;
5834294f337SSean Bruno #define I40E_AQC_MC_MAG_EN		0x0100
584cb6b8299SEric Joyner #define I40E_AQC_WOL_PRESERVE_ON_PFR	0x0200
58561ae650dSJack F Vogel #define I40E_AQC_WRITE_TYPE_LAA_ONLY	0x0000
58661ae650dSJack F Vogel #define I40E_AQC_WRITE_TYPE_LAA_WOL	0x4000
58761ae650dSJack F Vogel #define I40E_AQC_WRITE_TYPE_PORT	0x8000
588be771cdaSJack F Vogel #define I40E_AQC_WRITE_TYPE_UPDATE_MC_MAG	0xC000
589be771cdaSJack F Vogel #define I40E_AQC_WRITE_TYPE_MASK	0xC000
590be771cdaSJack F Vogel 
59161ae650dSJack F Vogel 	__le16	mac_sah;
59261ae650dSJack F Vogel 	__le32	mac_sal;
59361ae650dSJack F Vogel 	u8	reserved[8];
59461ae650dSJack F Vogel };
59561ae650dSJack F Vogel 
59661ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_mac_address_write);
59761ae650dSJack F Vogel 
59861ae650dSJack F Vogel /* PXE commands (0x011x) */
59961ae650dSJack F Vogel 
60061ae650dSJack F Vogel /* Clear PXE Command and response  (direct 0x0110) */
60161ae650dSJack F Vogel struct i40e_aqc_clear_pxe {
60261ae650dSJack F Vogel 	u8	rx_cnt;
60361ae650dSJack F Vogel 	u8	reserved[15];
60461ae650dSJack F Vogel };
60561ae650dSJack F Vogel 
60661ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_clear_pxe);
60761ae650dSJack F Vogel 
6084294f337SSean Bruno /* Set WoL Filter (0x0120) */
6094294f337SSean Bruno 
6104294f337SSean Bruno struct i40e_aqc_set_wol_filter {
6114294f337SSean Bruno 	__le16 filter_index;
6124294f337SSean Bruno #define I40E_AQC_MAX_NUM_WOL_FILTERS	8
6134294f337SSean Bruno #define I40E_AQC_SET_WOL_FILTER_TYPE_MAGIC_SHIFT	15
6144294f337SSean Bruno #define I40E_AQC_SET_WOL_FILTER_TYPE_MAGIC_MASK	(0x1 << \
6154294f337SSean Bruno 		I40E_AQC_SET_WOL_FILTER_TYPE_MAGIC_SHIFT)
6164294f337SSean Bruno 
6174294f337SSean Bruno #define I40E_AQC_SET_WOL_FILTER_INDEX_SHIFT		0
6184294f337SSean Bruno #define I40E_AQC_SET_WOL_FILTER_INDEX_MASK	(0x7 << \
6194294f337SSean Bruno 		I40E_AQC_SET_WOL_FILTER_INDEX_SHIFT)
6204294f337SSean Bruno 	__le16 cmd_flags;
6214294f337SSean Bruno #define I40E_AQC_SET_WOL_FILTER				0x8000
6224294f337SSean Bruno #define I40E_AQC_SET_WOL_FILTER_NO_TCO_WOL		0x4000
623cb6b8299SEric Joyner #define I40E_AQC_SET_WOL_FILTER_WOL_PRESERVE_ON_PFR	0x2000
6244294f337SSean Bruno #define I40E_AQC_SET_WOL_FILTER_ACTION_CLEAR		0
6254294f337SSean Bruno #define I40E_AQC_SET_WOL_FILTER_ACTION_SET		1
6264294f337SSean Bruno 	__le16 valid_flags;
6274294f337SSean Bruno #define I40E_AQC_SET_WOL_FILTER_ACTION_VALID		0x8000
6284294f337SSean Bruno #define I40E_AQC_SET_WOL_FILTER_NO_TCO_ACTION_VALID	0x4000
6294294f337SSean Bruno 	u8 reserved[2];
6304294f337SSean Bruno 	__le32	address_high;
6314294f337SSean Bruno 	__le32	address_low;
6324294f337SSean Bruno };
6334294f337SSean Bruno 
6344294f337SSean Bruno I40E_CHECK_CMD_LENGTH(i40e_aqc_set_wol_filter);
6354294f337SSean Bruno 
6364294f337SSean Bruno struct i40e_aqc_set_wol_filter_data {
6374294f337SSean Bruno 	u8 filter[128];
6384294f337SSean Bruno 	u8 mask[16];
6394294f337SSean Bruno };
6404294f337SSean Bruno 
6414294f337SSean Bruno I40E_CHECK_STRUCT_LEN(0x90, i40e_aqc_set_wol_filter_data);
6424294f337SSean Bruno 
6434294f337SSean Bruno /* Get Wake Reason (0x0121) */
6444294f337SSean Bruno 
6454294f337SSean Bruno struct i40e_aqc_get_wake_reason_completion {
6464294f337SSean Bruno 	u8 reserved_1[2];
6474294f337SSean Bruno 	__le16 wake_reason;
6484294f337SSean Bruno #define I40E_AQC_GET_WAKE_UP_REASON_WOL_REASON_MATCHED_INDEX_SHIFT	0
6494294f337SSean Bruno #define I40E_AQC_GET_WAKE_UP_REASON_WOL_REASON_MATCHED_INDEX_MASK (0xFF << \
6504294f337SSean Bruno 		I40E_AQC_GET_WAKE_UP_REASON_WOL_REASON_MATCHED_INDEX_SHIFT)
6514294f337SSean Bruno #define I40E_AQC_GET_WAKE_UP_REASON_WOL_REASON_RESERVED_SHIFT	8
6524294f337SSean Bruno #define I40E_AQC_GET_WAKE_UP_REASON_WOL_REASON_RESERVED_MASK	(0xFF << \
6534294f337SSean Bruno 		I40E_AQC_GET_WAKE_UP_REASON_WOL_REASON_RESERVED_SHIFT)
6544294f337SSean Bruno 	u8 reserved_2[12];
6554294f337SSean Bruno };
6564294f337SSean Bruno 
6574294f337SSean Bruno I40E_CHECK_CMD_LENGTH(i40e_aqc_get_wake_reason_completion);
6584294f337SSean Bruno 
65961ae650dSJack F Vogel /* Switch configuration commands (0x02xx) */
66061ae650dSJack F Vogel 
66161ae650dSJack F Vogel /* Used by many indirect commands that only pass an seid and a buffer in the
66261ae650dSJack F Vogel  * command
66361ae650dSJack F Vogel  */
66461ae650dSJack F Vogel struct i40e_aqc_switch_seid {
66561ae650dSJack F Vogel 	__le16	seid;
66661ae650dSJack F Vogel 	u8	reserved[6];
66761ae650dSJack F Vogel 	__le32	addr_high;
66861ae650dSJack F Vogel 	__le32	addr_low;
66961ae650dSJack F Vogel };
67061ae650dSJack F Vogel 
67161ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_switch_seid);
67261ae650dSJack F Vogel 
67361ae650dSJack F Vogel /* Get Switch Configuration command (indirect 0x0200)
67461ae650dSJack F Vogel  * uses i40e_aqc_switch_seid for the descriptor
67561ae650dSJack F Vogel  */
67661ae650dSJack F Vogel struct i40e_aqc_get_switch_config_header_resp {
67761ae650dSJack F Vogel 	__le16	num_reported;
67861ae650dSJack F Vogel 	__le16	num_total;
67961ae650dSJack F Vogel 	u8	reserved[12];
68061ae650dSJack F Vogel };
68161ae650dSJack F Vogel 
682f247dc25SJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_get_switch_config_header_resp);
683f247dc25SJack F Vogel 
68461ae650dSJack F Vogel struct i40e_aqc_switch_config_element_resp {
68561ae650dSJack F Vogel 	u8	element_type;
68661ae650dSJack F Vogel #define I40E_AQ_SW_ELEM_TYPE_MAC	1
68761ae650dSJack F Vogel #define I40E_AQ_SW_ELEM_TYPE_PF		2
68861ae650dSJack F Vogel #define I40E_AQ_SW_ELEM_TYPE_VF		3
68961ae650dSJack F Vogel #define I40E_AQ_SW_ELEM_TYPE_EMP	4
69061ae650dSJack F Vogel #define I40E_AQ_SW_ELEM_TYPE_BMC	5
69161ae650dSJack F Vogel #define I40E_AQ_SW_ELEM_TYPE_PV		16
69261ae650dSJack F Vogel #define I40E_AQ_SW_ELEM_TYPE_VEB	17
69361ae650dSJack F Vogel #define I40E_AQ_SW_ELEM_TYPE_PA		18
69461ae650dSJack F Vogel #define I40E_AQ_SW_ELEM_TYPE_VSI	19
69561ae650dSJack F Vogel 	u8	revision;
69661ae650dSJack F Vogel #define I40E_AQ_SW_ELEM_REV_1		1
69761ae650dSJack F Vogel 	__le16	seid;
69861ae650dSJack F Vogel 	__le16	uplink_seid;
69961ae650dSJack F Vogel 	__le16	downlink_seid;
70061ae650dSJack F Vogel 	u8	reserved[3];
70161ae650dSJack F Vogel 	u8	connection_type;
70261ae650dSJack F Vogel #define I40E_AQ_CONN_TYPE_REGULAR	0x1
70361ae650dSJack F Vogel #define I40E_AQ_CONN_TYPE_DEFAULT	0x2
70461ae650dSJack F Vogel #define I40E_AQ_CONN_TYPE_CASCADED	0x3
70561ae650dSJack F Vogel 	__le16	scheduler_id;
70661ae650dSJack F Vogel 	__le16	element_info;
70761ae650dSJack F Vogel };
70861ae650dSJack F Vogel 
709f247dc25SJack F Vogel I40E_CHECK_STRUCT_LEN(0x10, i40e_aqc_switch_config_element_resp);
710f247dc25SJack F Vogel 
71161ae650dSJack F Vogel /* Get Switch Configuration (indirect 0x0200)
71261ae650dSJack F Vogel  *    an array of elements are returned in the response buffer
71361ae650dSJack F Vogel  *    the first in the array is the header, remainder are elements
71461ae650dSJack F Vogel  */
71561ae650dSJack F Vogel struct i40e_aqc_get_switch_config_resp {
71661ae650dSJack F Vogel 	struct i40e_aqc_get_switch_config_header_resp	header;
71761ae650dSJack F Vogel 	struct i40e_aqc_switch_config_element_resp	element[1];
71861ae650dSJack F Vogel };
71961ae650dSJack F Vogel 
720f247dc25SJack F Vogel I40E_CHECK_STRUCT_LEN(0x20, i40e_aqc_get_switch_config_resp);
721f247dc25SJack F Vogel 
72261ae650dSJack F Vogel /* Add Statistics (direct 0x0201)
72361ae650dSJack F Vogel  * Remove Statistics (direct 0x0202)
72461ae650dSJack F Vogel  */
72561ae650dSJack F Vogel struct i40e_aqc_add_remove_statistics {
72661ae650dSJack F Vogel 	__le16	seid;
72761ae650dSJack F Vogel 	__le16	vlan;
72861ae650dSJack F Vogel 	__le16	stat_index;
72961ae650dSJack F Vogel 	u8	reserved[10];
73061ae650dSJack F Vogel };
73161ae650dSJack F Vogel 
73261ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_add_remove_statistics);
73361ae650dSJack F Vogel 
73461ae650dSJack F Vogel /* Set Port Parameters command (direct 0x0203) */
73561ae650dSJack F Vogel struct i40e_aqc_set_port_parameters {
73661ae650dSJack F Vogel 	__le16	command_flags;
73761ae650dSJack F Vogel #define I40E_AQ_SET_P_PARAMS_SAVE_BAD_PACKETS	1
73861ae650dSJack F Vogel #define I40E_AQ_SET_P_PARAMS_PAD_SHORT_PACKETS	2 /* must set! */
73961ae650dSJack F Vogel #define I40E_AQ_SET_P_PARAMS_DOUBLE_VLAN_ENA	4
74061ae650dSJack F Vogel 	__le16	bad_frame_vsi;
7414294f337SSean Bruno #define I40E_AQ_SET_P_PARAMS_BFRAME_SEID_SHIFT	0x0
7424294f337SSean Bruno #define I40E_AQ_SET_P_PARAMS_BFRAME_SEID_MASK	0x3FF
74361ae650dSJack F Vogel 	__le16	default_seid;        /* reserved for command */
74461ae650dSJack F Vogel 	u8	reserved[10];
74561ae650dSJack F Vogel };
74661ae650dSJack F Vogel 
74761ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_set_port_parameters);
74861ae650dSJack F Vogel 
74961ae650dSJack F Vogel /* Get Switch Resource Allocation (indirect 0x0204) */
75061ae650dSJack F Vogel struct i40e_aqc_get_switch_resource_alloc {
75161ae650dSJack F Vogel 	u8	num_entries;         /* reserved for command */
75261ae650dSJack F Vogel 	u8	reserved[7];
75361ae650dSJack F Vogel 	__le32	addr_high;
75461ae650dSJack F Vogel 	__le32	addr_low;
75561ae650dSJack F Vogel };
75661ae650dSJack F Vogel 
75761ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_get_switch_resource_alloc);
75861ae650dSJack F Vogel 
75961ae650dSJack F Vogel /* expect an array of these structs in the response buffer */
76061ae650dSJack F Vogel struct i40e_aqc_switch_resource_alloc_element_resp {
76161ae650dSJack F Vogel 	u8	resource_type;
76261ae650dSJack F Vogel #define I40E_AQ_RESOURCE_TYPE_VEB		0x0
76361ae650dSJack F Vogel #define I40E_AQ_RESOURCE_TYPE_VSI		0x1
76461ae650dSJack F Vogel #define I40E_AQ_RESOURCE_TYPE_MACADDR		0x2
76561ae650dSJack F Vogel #define I40E_AQ_RESOURCE_TYPE_STAG		0x3
76661ae650dSJack F Vogel #define I40E_AQ_RESOURCE_TYPE_ETAG		0x4
76761ae650dSJack F Vogel #define I40E_AQ_RESOURCE_TYPE_MULTICAST_HASH	0x5
76861ae650dSJack F Vogel #define I40E_AQ_RESOURCE_TYPE_UNICAST_HASH	0x6
76961ae650dSJack F Vogel #define I40E_AQ_RESOURCE_TYPE_VLAN		0x7
77061ae650dSJack F Vogel #define I40E_AQ_RESOURCE_TYPE_VSI_LIST_ENTRY	0x8
77161ae650dSJack F Vogel #define I40E_AQ_RESOURCE_TYPE_ETAG_LIST_ENTRY	0x9
77261ae650dSJack F Vogel #define I40E_AQ_RESOURCE_TYPE_VLAN_STAT_POOL	0xA
77361ae650dSJack F Vogel #define I40E_AQ_RESOURCE_TYPE_MIRROR_RULE	0xB
77461ae650dSJack F Vogel #define I40E_AQ_RESOURCE_TYPE_QUEUE_SETS	0xC
77561ae650dSJack F Vogel #define I40E_AQ_RESOURCE_TYPE_VLAN_FILTERS	0xD
77661ae650dSJack F Vogel #define I40E_AQ_RESOURCE_TYPE_INNER_MAC_FILTERS	0xF
77761ae650dSJack F Vogel #define I40E_AQ_RESOURCE_TYPE_IP_FILTERS	0x10
77861ae650dSJack F Vogel #define I40E_AQ_RESOURCE_TYPE_GRE_VN_KEYS	0x11
77961ae650dSJack F Vogel #define I40E_AQ_RESOURCE_TYPE_VN2_KEYS		0x12
78061ae650dSJack F Vogel #define I40E_AQ_RESOURCE_TYPE_TUNNEL_PORTS	0x13
78161ae650dSJack F Vogel 	u8	reserved1;
78261ae650dSJack F Vogel 	__le16	guaranteed;
78361ae650dSJack F Vogel 	__le16	total;
78461ae650dSJack F Vogel 	__le16	used;
78561ae650dSJack F Vogel 	__le16	total_unalloced;
78661ae650dSJack F Vogel 	u8	reserved2[6];
78761ae650dSJack F Vogel };
78861ae650dSJack F Vogel 
789f247dc25SJack F Vogel I40E_CHECK_STRUCT_LEN(0x10, i40e_aqc_switch_resource_alloc_element_resp);
790f247dc25SJack F Vogel 
791fdb6f38aSEric Joyner /* Set Switch Configuration (direct 0x0205) */
792fdb6f38aSEric Joyner struct i40e_aqc_set_switch_config {
793fdb6f38aSEric Joyner 	__le16	flags;
7944294f337SSean Bruno /* flags used for both fields below */
795fdb6f38aSEric Joyner #define I40E_AQ_SET_SWITCH_CFG_PROMISC		0x0001
796fdb6f38aSEric Joyner #define I40E_AQ_SET_SWITCH_CFG_L2_FILTER	0x0002
797ceebc2f3SEric Joyner #define I40E_AQ_SET_SWITCH_CFG_HW_ATR_EVICT	0x0004
798*abf77452SKrzysztof Galazka #define I40E_AQ_SET_SWITCH_CFG_OUTER_VLAN	0x0008
799fdb6f38aSEric Joyner 	__le16	valid_flags;
800ceebc2f3SEric Joyner 	/* The ethertype in switch_tag is dropped on ingress and used
801ceebc2f3SEric Joyner 	 * internally by the switch. Set this to zero for the default
802ceebc2f3SEric Joyner 	 * of 0x88a8 (802.1ad). Should be zero for firmware API
803ceebc2f3SEric Joyner 	 * versions lower than 1.7.
804ceebc2f3SEric Joyner 	 */
805ceebc2f3SEric Joyner 	__le16	switch_tag;
806ceebc2f3SEric Joyner 	/* The ethertypes in first_tag and second_tag are used to
807ceebc2f3SEric Joyner 	 * match the outer and inner VLAN tags (respectively) when HW
808ceebc2f3SEric Joyner 	 * double VLAN tagging is enabled via the set port parameters
809ceebc2f3SEric Joyner 	 * AQ command. Otherwise these are both ignored. Set them to
810ceebc2f3SEric Joyner 	 * zero for their defaults of 0x8100 (802.1Q). Should be zero
811ceebc2f3SEric Joyner 	 * for firmware API versions lower than 1.7.
812ceebc2f3SEric Joyner 	 */
813ceebc2f3SEric Joyner 	__le16	first_tag;
814ceebc2f3SEric Joyner 	__le16	second_tag;
815ceebc2f3SEric Joyner 	/* Next byte is split into following:
816ceebc2f3SEric Joyner 	 * Bit 7    : 0 : No action, 1: Switch to mode defined by bits 6:0
817ceebc2f3SEric Joyner 	 * Bit 6    : 0 : Destination Port, 1: source port
818ceebc2f3SEric Joyner 	 * Bit 5..4 : L4 type
819ceebc2f3SEric Joyner 	 * 0: rsvd
820ceebc2f3SEric Joyner 	 * 1: TCP
821ceebc2f3SEric Joyner 	 * 2: UDP
822ceebc2f3SEric Joyner 	 * 3: Both TCP and UDP
823ceebc2f3SEric Joyner 	 * Bits 3:0 Mode
824ceebc2f3SEric Joyner 	 * 0: default mode
825ceebc2f3SEric Joyner 	 * 1: L4 port only mode
826ceebc2f3SEric Joyner 	 * 2: non-tunneled mode
827ceebc2f3SEric Joyner 	 * 3: tunneled mode
828ceebc2f3SEric Joyner 	 */
829ceebc2f3SEric Joyner #define I40E_AQ_SET_SWITCH_BIT7_VALID		0x80
830ceebc2f3SEric Joyner 
831ceebc2f3SEric Joyner #define I40E_AQ_SET_SWITCH_L4_SRC_PORT		0x40
832ceebc2f3SEric Joyner 
833ceebc2f3SEric Joyner #define I40E_AQ_SET_SWITCH_L4_TYPE_RSVD		0x00
834ceebc2f3SEric Joyner #define I40E_AQ_SET_SWITCH_L4_TYPE_TCP		0x10
835ceebc2f3SEric Joyner #define I40E_AQ_SET_SWITCH_L4_TYPE_UDP		0x20
836ceebc2f3SEric Joyner #define I40E_AQ_SET_SWITCH_L4_TYPE_BOTH		0x30
837ceebc2f3SEric Joyner 
838ceebc2f3SEric Joyner #define I40E_AQ_SET_SWITCH_MODE_DEFAULT		0x00
839ceebc2f3SEric Joyner #define I40E_AQ_SET_SWITCH_MODE_L4_PORT		0x01
840ceebc2f3SEric Joyner #define I40E_AQ_SET_SWITCH_MODE_NON_TUNNEL	0x02
841ceebc2f3SEric Joyner #define I40E_AQ_SET_SWITCH_MODE_TUNNEL		0x03
842ceebc2f3SEric Joyner 	u8	mode;
843ceebc2f3SEric Joyner 	u8	rsvd5[5];
844fdb6f38aSEric Joyner };
845fdb6f38aSEric Joyner 
846fdb6f38aSEric Joyner I40E_CHECK_CMD_LENGTH(i40e_aqc_set_switch_config);
847fdb6f38aSEric Joyner 
848d4683565SEric Joyner /* Read Receive control registers  (direct 0x0206)
849d4683565SEric Joyner  * Write Receive control registers (direct 0x0207)
850d4683565SEric Joyner  *     used for accessing Rx control registers that can be
851d4683565SEric Joyner  *     slow and need special handling when under high Rx load
852d4683565SEric Joyner  */
853d4683565SEric Joyner struct i40e_aqc_rx_ctl_reg_read_write {
854d4683565SEric Joyner 	__le32 reserved1;
855d4683565SEric Joyner 	__le32 address;
856d4683565SEric Joyner 	__le32 reserved2;
857d4683565SEric Joyner 	__le32 value;
858d4683565SEric Joyner };
859d4683565SEric Joyner 
860d4683565SEric Joyner I40E_CHECK_CMD_LENGTH(i40e_aqc_rx_ctl_reg_read_write);
861d4683565SEric Joyner 
86261ae650dSJack F Vogel /* Add VSI (indirect 0x0210)
86361ae650dSJack F Vogel  *    this indirect command uses struct i40e_aqc_vsi_properties_data
86461ae650dSJack F Vogel  *    as the indirect buffer (128 bytes)
86561ae650dSJack F Vogel  *
86661ae650dSJack F Vogel  * Update VSI (indirect 0x211)
86761ae650dSJack F Vogel  *     uses the same data structure as Add VSI
86861ae650dSJack F Vogel  *
86961ae650dSJack F Vogel  * Get VSI (indirect 0x0212)
87061ae650dSJack F Vogel  *     uses the same completion and data structure as Add VSI
87161ae650dSJack F Vogel  */
87261ae650dSJack F Vogel struct i40e_aqc_add_get_update_vsi {
87361ae650dSJack F Vogel 	__le16	uplink_seid;
87461ae650dSJack F Vogel 	u8	connection_type;
87561ae650dSJack F Vogel #define I40E_AQ_VSI_CONN_TYPE_NORMAL	0x1
87661ae650dSJack F Vogel #define I40E_AQ_VSI_CONN_TYPE_DEFAULT	0x2
87761ae650dSJack F Vogel #define I40E_AQ_VSI_CONN_TYPE_CASCADED	0x3
87861ae650dSJack F Vogel 	u8	reserved1;
87961ae650dSJack F Vogel 	u8	vf_id;
88061ae650dSJack F Vogel 	u8	reserved2;
88161ae650dSJack F Vogel 	__le16	vsi_flags;
88261ae650dSJack F Vogel #define I40E_AQ_VSI_TYPE_SHIFT		0x0
88361ae650dSJack F Vogel #define I40E_AQ_VSI_TYPE_MASK		(0x3 << I40E_AQ_VSI_TYPE_SHIFT)
88461ae650dSJack F Vogel #define I40E_AQ_VSI_TYPE_VF		0x0
88561ae650dSJack F Vogel #define I40E_AQ_VSI_TYPE_VMDQ2		0x1
88661ae650dSJack F Vogel #define I40E_AQ_VSI_TYPE_PF		0x2
88761ae650dSJack F Vogel #define I40E_AQ_VSI_TYPE_EMP_MNG	0x3
88861ae650dSJack F Vogel #define I40E_AQ_VSI_FLAG_CASCADED_PV	0x4
88961ae650dSJack F Vogel 	__le32	addr_high;
89061ae650dSJack F Vogel 	__le32	addr_low;
89161ae650dSJack F Vogel };
89261ae650dSJack F Vogel 
89361ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_add_get_update_vsi);
89461ae650dSJack F Vogel 
89561ae650dSJack F Vogel struct i40e_aqc_add_get_update_vsi_completion {
89661ae650dSJack F Vogel 	__le16 seid;
89761ae650dSJack F Vogel 	__le16 vsi_number;
89861ae650dSJack F Vogel 	__le16 vsi_used;
89961ae650dSJack F Vogel 	__le16 vsi_free;
90061ae650dSJack F Vogel 	__le32 addr_high;
90161ae650dSJack F Vogel 	__le32 addr_low;
90261ae650dSJack F Vogel };
90361ae650dSJack F Vogel 
90461ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_add_get_update_vsi_completion);
90561ae650dSJack F Vogel 
90661ae650dSJack F Vogel struct i40e_aqc_vsi_properties_data {
90761ae650dSJack F Vogel 	/* first 96 byte are written by SW */
90861ae650dSJack F Vogel 	__le16	valid_sections;
90961ae650dSJack F Vogel #define I40E_AQ_VSI_PROP_SWITCH_VALID		0x0001
91061ae650dSJack F Vogel #define I40E_AQ_VSI_PROP_SECURITY_VALID		0x0002
91161ae650dSJack F Vogel #define I40E_AQ_VSI_PROP_VLAN_VALID		0x0004
91261ae650dSJack F Vogel #define I40E_AQ_VSI_PROP_CAS_PV_VALID		0x0008
91361ae650dSJack F Vogel #define I40E_AQ_VSI_PROP_INGRESS_UP_VALID	0x0010
91461ae650dSJack F Vogel #define I40E_AQ_VSI_PROP_EGRESS_UP_VALID	0x0020
91561ae650dSJack F Vogel #define I40E_AQ_VSI_PROP_QUEUE_MAP_VALID	0x0040
91661ae650dSJack F Vogel #define I40E_AQ_VSI_PROP_QUEUE_OPT_VALID	0x0080
91761ae650dSJack F Vogel #define I40E_AQ_VSI_PROP_OUTER_UP_VALID		0x0100
91861ae650dSJack F Vogel #define I40E_AQ_VSI_PROP_SCHED_VALID		0x0200
91961ae650dSJack F Vogel 	/* switch section */
92061ae650dSJack F Vogel 	__le16	switch_id; /* 12bit id combined with flags below */
92161ae650dSJack F Vogel #define I40E_AQ_VSI_SW_ID_SHIFT		0x0000
92261ae650dSJack F Vogel #define I40E_AQ_VSI_SW_ID_MASK		(0xFFF << I40E_AQ_VSI_SW_ID_SHIFT)
92361ae650dSJack F Vogel #define I40E_AQ_VSI_SW_ID_FLAG_NOT_STAG	0x1000
92461ae650dSJack F Vogel #define I40E_AQ_VSI_SW_ID_FLAG_ALLOW_LB	0x2000
92561ae650dSJack F Vogel #define I40E_AQ_VSI_SW_ID_FLAG_LOCAL_LB	0x4000
92661ae650dSJack F Vogel 	u8	sw_reserved[2];
92761ae650dSJack F Vogel 	/* security section */
92861ae650dSJack F Vogel 	u8	sec_flags;
92961ae650dSJack F Vogel #define I40E_AQ_VSI_SEC_FLAG_ALLOW_DEST_OVRD	0x01
93061ae650dSJack F Vogel #define I40E_AQ_VSI_SEC_FLAG_ENABLE_VLAN_CHK	0x02
93161ae650dSJack F Vogel #define I40E_AQ_VSI_SEC_FLAG_ENABLE_MAC_CHK	0x04
93261ae650dSJack F Vogel 	u8	sec_reserved;
93361ae650dSJack F Vogel 	/* VLAN section */
93461ae650dSJack F Vogel 	__le16	pvid; /* VLANS include priority bits */
935*abf77452SKrzysztof Galazka 	__le16	outer_vlan;
93661ae650dSJack F Vogel 	u8	port_vlan_flags;
93761ae650dSJack F Vogel #define I40E_AQ_VSI_PVLAN_MODE_SHIFT	0x00
93861ae650dSJack F Vogel #define I40E_AQ_VSI_PVLAN_MODE_MASK	(0x03 << \
93961ae650dSJack F Vogel 					 I40E_AQ_VSI_PVLAN_MODE_SHIFT)
94061ae650dSJack F Vogel #define I40E_AQ_VSI_PVLAN_MODE_TAGGED	0x01
94161ae650dSJack F Vogel #define I40E_AQ_VSI_PVLAN_MODE_UNTAGGED	0x02
94261ae650dSJack F Vogel #define I40E_AQ_VSI_PVLAN_MODE_ALL	0x03
94361ae650dSJack F Vogel #define I40E_AQ_VSI_PVLAN_INSERT_PVID	0x04
94461ae650dSJack F Vogel #define I40E_AQ_VSI_PVLAN_EMOD_SHIFT	0x03
94561ae650dSJack F Vogel #define I40E_AQ_VSI_PVLAN_EMOD_MASK	(0x3 << \
94661ae650dSJack F Vogel 					 I40E_AQ_VSI_PVLAN_EMOD_SHIFT)
94761ae650dSJack F Vogel #define I40E_AQ_VSI_PVLAN_EMOD_STR_BOTH	0x0
94861ae650dSJack F Vogel #define I40E_AQ_VSI_PVLAN_EMOD_STR_UP	0x08
94961ae650dSJack F Vogel #define I40E_AQ_VSI_PVLAN_EMOD_STR	0x10
95061ae650dSJack F Vogel #define I40E_AQ_VSI_PVLAN_EMOD_NOTHING	0x18
951*abf77452SKrzysztof Galazka 	u8	outer_vlan_flags;
952*abf77452SKrzysztof Galazka #define I40E_AQ_VSI_OVLAN_MODE_SHIFT	0x00
953*abf77452SKrzysztof Galazka #define I40E_AQ_VSI_OVLAN_MODE_MASK	(0x03 << \
954*abf77452SKrzysztof Galazka 					 I40E_AQ_VSI_OVLAN_MODE_SHIFT)
955*abf77452SKrzysztof Galazka #define I40E_AQ_VSI_OVLAN_MODE_UNTAGGED	0x01
956*abf77452SKrzysztof Galazka #define I40E_AQ_VSI_OVLAN_MODE_TAGGED	0x02
957*abf77452SKrzysztof Galazka #define I40E_AQ_VSI_OVLAN_MODE_ALL	0x03
958*abf77452SKrzysztof Galazka #define I40E_AQ_VSI_OVLAN_INSERT_PVID	0x04
959*abf77452SKrzysztof Galazka #define I40E_AQ_VSI_OVLAN_EMOD_SHIFT	0x03
960*abf77452SKrzysztof Galazka #define I40E_AQ_VSI_OVLAN_EMOD_MASK	(0x03 <<\
961*abf77452SKrzysztof Galazka 					 I40E_AQ_VSI_OVLAN_EMOD_SHIFT)
962*abf77452SKrzysztof Galazka #define I40E_AQ_VSI_OVLAN_EMOD_SHOW_ALL	0x00
963*abf77452SKrzysztof Galazka #define I40E_AQ_VSI_OVLAN_EMOD_SHOW_UP	0x01
964*abf77452SKrzysztof Galazka #define I40E_AQ_VSI_OVLAN_EMOD_HIDE_ALL	0x02
965*abf77452SKrzysztof Galazka #define I40E_AQ_VSI_OVLAN_EMOD_NOTHING	0x03
966*abf77452SKrzysztof Galazka #define I40E_AQ_VSI_OVLAN_CTRL_ENA	0x04
967*abf77452SKrzysztof Galazka 
968*abf77452SKrzysztof Galazka 	u8	pvlan_reserved[2];
96961ae650dSJack F Vogel 	/* ingress egress up sections */
97061ae650dSJack F Vogel 	__le32	ingress_table; /* bitmap, 3 bits per up */
97161ae650dSJack F Vogel #define I40E_AQ_VSI_UP_TABLE_UP0_SHIFT	0
97261ae650dSJack F Vogel #define I40E_AQ_VSI_UP_TABLE_UP0_MASK	(0x7 << \
97361ae650dSJack F Vogel 					 I40E_AQ_VSI_UP_TABLE_UP0_SHIFT)
97461ae650dSJack F Vogel #define I40E_AQ_VSI_UP_TABLE_UP1_SHIFT	3
97561ae650dSJack F Vogel #define I40E_AQ_VSI_UP_TABLE_UP1_MASK	(0x7 << \
97661ae650dSJack F Vogel 					 I40E_AQ_VSI_UP_TABLE_UP1_SHIFT)
97761ae650dSJack F Vogel #define I40E_AQ_VSI_UP_TABLE_UP2_SHIFT	6
97861ae650dSJack F Vogel #define I40E_AQ_VSI_UP_TABLE_UP2_MASK	(0x7 << \
97961ae650dSJack F Vogel 					 I40E_AQ_VSI_UP_TABLE_UP2_SHIFT)
98061ae650dSJack F Vogel #define I40E_AQ_VSI_UP_TABLE_UP3_SHIFT	9
98161ae650dSJack F Vogel #define I40E_AQ_VSI_UP_TABLE_UP3_MASK	(0x7 << \
98261ae650dSJack F Vogel 					 I40E_AQ_VSI_UP_TABLE_UP3_SHIFT)
98361ae650dSJack F Vogel #define I40E_AQ_VSI_UP_TABLE_UP4_SHIFT	12
98461ae650dSJack F Vogel #define I40E_AQ_VSI_UP_TABLE_UP4_MASK	(0x7 << \
98561ae650dSJack F Vogel 					 I40E_AQ_VSI_UP_TABLE_UP4_SHIFT)
98661ae650dSJack F Vogel #define I40E_AQ_VSI_UP_TABLE_UP5_SHIFT	15
98761ae650dSJack F Vogel #define I40E_AQ_VSI_UP_TABLE_UP5_MASK	(0x7 << \
98861ae650dSJack F Vogel 					 I40E_AQ_VSI_UP_TABLE_UP5_SHIFT)
98961ae650dSJack F Vogel #define I40E_AQ_VSI_UP_TABLE_UP6_SHIFT	18
99061ae650dSJack F Vogel #define I40E_AQ_VSI_UP_TABLE_UP6_MASK	(0x7 << \
99161ae650dSJack F Vogel 					 I40E_AQ_VSI_UP_TABLE_UP6_SHIFT)
99261ae650dSJack F Vogel #define I40E_AQ_VSI_UP_TABLE_UP7_SHIFT	21
99361ae650dSJack F Vogel #define I40E_AQ_VSI_UP_TABLE_UP7_MASK	(0x7 << \
99461ae650dSJack F Vogel 					 I40E_AQ_VSI_UP_TABLE_UP7_SHIFT)
99561ae650dSJack F Vogel 	__le32	egress_table;   /* same defines as for ingress table */
99661ae650dSJack F Vogel 	/* cascaded PV section */
99761ae650dSJack F Vogel 	__le16	cas_pv_tag;
99861ae650dSJack F Vogel 	u8	cas_pv_flags;
99961ae650dSJack F Vogel #define I40E_AQ_VSI_CAS_PV_TAGX_SHIFT		0x00
100061ae650dSJack F Vogel #define I40E_AQ_VSI_CAS_PV_TAGX_MASK		(0x03 << \
100161ae650dSJack F Vogel 						 I40E_AQ_VSI_CAS_PV_TAGX_SHIFT)
100261ae650dSJack F Vogel #define I40E_AQ_VSI_CAS_PV_TAGX_LEAVE		0x00
100361ae650dSJack F Vogel #define I40E_AQ_VSI_CAS_PV_TAGX_REMOVE		0x01
100461ae650dSJack F Vogel #define I40E_AQ_VSI_CAS_PV_TAGX_COPY		0x02
100561ae650dSJack F Vogel #define I40E_AQ_VSI_CAS_PV_INSERT_TAG		0x10
100661ae650dSJack F Vogel #define I40E_AQ_VSI_CAS_PV_ETAG_PRUNE		0x20
100761ae650dSJack F Vogel #define I40E_AQ_VSI_CAS_PV_ACCEPT_HOST_TAG	0x40
100861ae650dSJack F Vogel 	u8	cas_pv_reserved;
100961ae650dSJack F Vogel 	/* queue mapping section */
101061ae650dSJack F Vogel 	__le16	mapping_flags;
101161ae650dSJack F Vogel #define I40E_AQ_VSI_QUE_MAP_CONTIG	0x0
101261ae650dSJack F Vogel #define I40E_AQ_VSI_QUE_MAP_NONCONTIG	0x1
101361ae650dSJack F Vogel 	__le16	queue_mapping[16];
101461ae650dSJack F Vogel #define I40E_AQ_VSI_QUEUE_SHIFT		0x0
101561ae650dSJack F Vogel #define I40E_AQ_VSI_QUEUE_MASK		(0x7FF << I40E_AQ_VSI_QUEUE_SHIFT)
101661ae650dSJack F Vogel 	__le16	tc_mapping[8];
101761ae650dSJack F Vogel #define I40E_AQ_VSI_TC_QUE_OFFSET_SHIFT	0
101861ae650dSJack F Vogel #define I40E_AQ_VSI_TC_QUE_OFFSET_MASK	(0x1FF << \
101961ae650dSJack F Vogel 					 I40E_AQ_VSI_TC_QUE_OFFSET_SHIFT)
102061ae650dSJack F Vogel #define I40E_AQ_VSI_TC_QUE_NUMBER_SHIFT	9
102161ae650dSJack F Vogel #define I40E_AQ_VSI_TC_QUE_NUMBER_MASK	(0x7 << \
102261ae650dSJack F Vogel 					 I40E_AQ_VSI_TC_QUE_NUMBER_SHIFT)
102361ae650dSJack F Vogel 	/* queueing option section */
102461ae650dSJack F Vogel 	u8	queueing_opt_flags;
10254294f337SSean Bruno #define I40E_AQ_VSI_QUE_OPT_MULTICAST_UDP_ENA	0x04
10264294f337SSean Bruno #define I40E_AQ_VSI_QUE_OPT_UNICAST_UDP_ENA	0x08
102761ae650dSJack F Vogel #define I40E_AQ_VSI_QUE_OPT_TCP_ENA	0x10
102861ae650dSJack F Vogel #define I40E_AQ_VSI_QUE_OPT_FCOE_ENA	0x20
10294294f337SSean Bruno #define I40E_AQ_VSI_QUE_OPT_RSS_LUT_PF	0x00
10304294f337SSean Bruno #define I40E_AQ_VSI_QUE_OPT_RSS_LUT_VSI	0x40
103161ae650dSJack F Vogel 	u8	queueing_opt_reserved[3];
103261ae650dSJack F Vogel 	/* scheduler section */
103361ae650dSJack F Vogel 	u8	up_enable_bits;
103461ae650dSJack F Vogel 	u8	sched_reserved;
103561ae650dSJack F Vogel 	/* outer up section */
1036d4683565SEric Joyner 	__le32	outer_up_table; /* same structure and defines as ingress tbl */
103761ae650dSJack F Vogel 	u8	cmd_reserved[8];
103861ae650dSJack F Vogel 	/* last 32 bytes are written by FW */
103961ae650dSJack F Vogel 	__le16	qs_handle[8];
104061ae650dSJack F Vogel #define I40E_AQ_VSI_QS_HANDLE_INVALID	0xFFFF
104161ae650dSJack F Vogel 	__le16	stat_counter_idx;
104261ae650dSJack F Vogel 	__le16	sched_id;
104361ae650dSJack F Vogel 	u8	resp_reserved[12];
104461ae650dSJack F Vogel };
104561ae650dSJack F Vogel 
104661ae650dSJack F Vogel I40E_CHECK_STRUCT_LEN(128, i40e_aqc_vsi_properties_data);
104761ae650dSJack F Vogel 
104861ae650dSJack F Vogel /* Add Port Virtualizer (direct 0x0220)
104961ae650dSJack F Vogel  * also used for update PV (direct 0x0221) but only flags are used
105061ae650dSJack F Vogel  * (IS_CTRL_PORT only works on add PV)
105161ae650dSJack F Vogel  */
105261ae650dSJack F Vogel struct i40e_aqc_add_update_pv {
105361ae650dSJack F Vogel 	__le16	command_flags;
105461ae650dSJack F Vogel #define I40E_AQC_PV_FLAG_PV_TYPE		0x1
105561ae650dSJack F Vogel #define I40E_AQC_PV_FLAG_FWD_UNKNOWN_STAG_EN	0x2
105661ae650dSJack F Vogel #define I40E_AQC_PV_FLAG_FWD_UNKNOWN_ETAG_EN	0x4
105761ae650dSJack F Vogel #define I40E_AQC_PV_FLAG_IS_CTRL_PORT		0x8
105861ae650dSJack F Vogel 	__le16	uplink_seid;
105961ae650dSJack F Vogel 	__le16	connected_seid;
106061ae650dSJack F Vogel 	u8	reserved[10];
106161ae650dSJack F Vogel };
106261ae650dSJack F Vogel 
106361ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_add_update_pv);
106461ae650dSJack F Vogel 
106561ae650dSJack F Vogel struct i40e_aqc_add_update_pv_completion {
106661ae650dSJack F Vogel 	/* reserved for update; for add also encodes error if rc == ENOSPC */
106761ae650dSJack F Vogel 	__le16	pv_seid;
106861ae650dSJack F Vogel #define I40E_AQC_PV_ERR_FLAG_NO_PV	0x1
106961ae650dSJack F Vogel #define I40E_AQC_PV_ERR_FLAG_NO_SCHED	0x2
107061ae650dSJack F Vogel #define I40E_AQC_PV_ERR_FLAG_NO_COUNTER	0x4
107161ae650dSJack F Vogel #define I40E_AQC_PV_ERR_FLAG_NO_ENTRY	0x8
107261ae650dSJack F Vogel 	u8	reserved[14];
107361ae650dSJack F Vogel };
107461ae650dSJack F Vogel 
107561ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_add_update_pv_completion);
107661ae650dSJack F Vogel 
107761ae650dSJack F Vogel /* Get PV Params (direct 0x0222)
107861ae650dSJack F Vogel  * uses i40e_aqc_switch_seid for the descriptor
107961ae650dSJack F Vogel  */
108061ae650dSJack F Vogel 
108161ae650dSJack F Vogel struct i40e_aqc_get_pv_params_completion {
108261ae650dSJack F Vogel 	__le16	seid;
108361ae650dSJack F Vogel 	__le16	default_stag;
108461ae650dSJack F Vogel 	__le16	pv_flags; /* same flags as add_pv */
108561ae650dSJack F Vogel #define I40E_AQC_GET_PV_PV_TYPE			0x1
108661ae650dSJack F Vogel #define I40E_AQC_GET_PV_FRWD_UNKNOWN_STAG	0x2
108761ae650dSJack F Vogel #define I40E_AQC_GET_PV_FRWD_UNKNOWN_ETAG	0x4
108861ae650dSJack F Vogel 	u8	reserved[8];
108961ae650dSJack F Vogel 	__le16	default_port_seid;
109061ae650dSJack F Vogel };
109161ae650dSJack F Vogel 
109261ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_get_pv_params_completion);
109361ae650dSJack F Vogel 
109461ae650dSJack F Vogel /* Add VEB (direct 0x0230) */
109561ae650dSJack F Vogel struct i40e_aqc_add_veb {
109661ae650dSJack F Vogel 	__le16	uplink_seid;
109761ae650dSJack F Vogel 	__le16	downlink_seid;
109861ae650dSJack F Vogel 	__le16	veb_flags;
109961ae650dSJack F Vogel #define I40E_AQC_ADD_VEB_FLOATING		0x1
110061ae650dSJack F Vogel #define I40E_AQC_ADD_VEB_PORT_TYPE_SHIFT	1
110161ae650dSJack F Vogel #define I40E_AQC_ADD_VEB_PORT_TYPE_MASK		(0x3 << \
110261ae650dSJack F Vogel 					I40E_AQC_ADD_VEB_PORT_TYPE_SHIFT)
110361ae650dSJack F Vogel #define I40E_AQC_ADD_VEB_PORT_TYPE_DEFAULT	0x2
110461ae650dSJack F Vogel #define I40E_AQC_ADD_VEB_PORT_TYPE_DATA		0x4
1105fdb6f38aSEric Joyner #define I40E_AQC_ADD_VEB_ENABLE_L2_FILTER	0x8     /* deprecated */
1106fdb6f38aSEric Joyner #define I40E_AQC_ADD_VEB_ENABLE_DISABLE_STATS	0x10
110761ae650dSJack F Vogel 	u8	enable_tcs;
110861ae650dSJack F Vogel 	u8	reserved[9];
110961ae650dSJack F Vogel };
111061ae650dSJack F Vogel 
111161ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_add_veb);
111261ae650dSJack F Vogel 
111361ae650dSJack F Vogel struct i40e_aqc_add_veb_completion {
111461ae650dSJack F Vogel 	u8	reserved[6];
111561ae650dSJack F Vogel 	__le16	switch_seid;
111661ae650dSJack F Vogel 	/* also encodes error if rc == ENOSPC; codes are the same as add_pv */
111761ae650dSJack F Vogel 	__le16	veb_seid;
111861ae650dSJack F Vogel #define I40E_AQC_VEB_ERR_FLAG_NO_VEB		0x1
111961ae650dSJack F Vogel #define I40E_AQC_VEB_ERR_FLAG_NO_SCHED		0x2
112061ae650dSJack F Vogel #define I40E_AQC_VEB_ERR_FLAG_NO_COUNTER	0x4
112161ae650dSJack F Vogel #define I40E_AQC_VEB_ERR_FLAG_NO_ENTRY		0x8
112261ae650dSJack F Vogel 	__le16	statistic_index;
112361ae650dSJack F Vogel 	__le16	vebs_used;
112461ae650dSJack F Vogel 	__le16	vebs_free;
112561ae650dSJack F Vogel };
112661ae650dSJack F Vogel 
112761ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_add_veb_completion);
112861ae650dSJack F Vogel 
112961ae650dSJack F Vogel /* Get VEB Parameters (direct 0x0232)
113061ae650dSJack F Vogel  * uses i40e_aqc_switch_seid for the descriptor
113161ae650dSJack F Vogel  */
113261ae650dSJack F Vogel struct i40e_aqc_get_veb_parameters_completion {
113361ae650dSJack F Vogel 	__le16	seid;
113461ae650dSJack F Vogel 	__le16	switch_id;
113561ae650dSJack F Vogel 	__le16	veb_flags; /* only the first/last flags from 0x0230 is valid */
113661ae650dSJack F Vogel 	__le16	statistic_index;
113761ae650dSJack F Vogel 	__le16	vebs_used;
113861ae650dSJack F Vogel 	__le16	vebs_free;
113961ae650dSJack F Vogel 	u8	reserved[4];
114061ae650dSJack F Vogel };
114161ae650dSJack F Vogel 
114261ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_get_veb_parameters_completion);
114361ae650dSJack F Vogel 
114461ae650dSJack F Vogel /* Delete Element (direct 0x0243)
114561ae650dSJack F Vogel  * uses the generic i40e_aqc_switch_seid
114661ae650dSJack F Vogel  */
114761ae650dSJack F Vogel 
114861ae650dSJack F Vogel /* Add MAC-VLAN (indirect 0x0250) */
114961ae650dSJack F Vogel 
115061ae650dSJack F Vogel /* used for the command for most vlan commands */
115161ae650dSJack F Vogel struct i40e_aqc_macvlan {
115261ae650dSJack F Vogel 	__le16	num_addresses;
115361ae650dSJack F Vogel 	__le16	seid[3];
115461ae650dSJack F Vogel #define I40E_AQC_MACVLAN_CMD_SEID_NUM_SHIFT	0
115561ae650dSJack F Vogel #define I40E_AQC_MACVLAN_CMD_SEID_NUM_MASK	(0x3FF << \
115661ae650dSJack F Vogel 					I40E_AQC_MACVLAN_CMD_SEID_NUM_SHIFT)
115761ae650dSJack F Vogel #define I40E_AQC_MACVLAN_CMD_SEID_VALID		0x8000
115861ae650dSJack F Vogel 	__le32	addr_high;
115961ae650dSJack F Vogel 	__le32	addr_low;
116061ae650dSJack F Vogel };
116161ae650dSJack F Vogel 
116261ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_macvlan);
116361ae650dSJack F Vogel 
116461ae650dSJack F Vogel /* indirect data for command and response */
116561ae650dSJack F Vogel struct i40e_aqc_add_macvlan_element_data {
116661ae650dSJack F Vogel 	u8	mac_addr[6];
116761ae650dSJack F Vogel 	__le16	vlan_tag;
116861ae650dSJack F Vogel 	__le16	flags;
116961ae650dSJack F Vogel #define I40E_AQC_MACVLAN_ADD_PERFECT_MATCH	0x0001
117061ae650dSJack F Vogel #define I40E_AQC_MACVLAN_ADD_HASH_MATCH		0x0002
117161ae650dSJack F Vogel #define I40E_AQC_MACVLAN_ADD_IGNORE_VLAN	0x0004
117261ae650dSJack F Vogel #define I40E_AQC_MACVLAN_ADD_TO_QUEUE		0x0008
1173fdb6f38aSEric Joyner #define I40E_AQC_MACVLAN_ADD_USE_SHARED_MAC	0x0010
117461ae650dSJack F Vogel 	__le16	queue_number;
117561ae650dSJack F Vogel #define I40E_AQC_MACVLAN_CMD_QUEUE_SHIFT	0
117661ae650dSJack F Vogel #define I40E_AQC_MACVLAN_CMD_QUEUE_MASK		(0x7FF << \
117761ae650dSJack F Vogel 					I40E_AQC_MACVLAN_CMD_SEID_NUM_SHIFT)
117861ae650dSJack F Vogel 	/* response section */
117961ae650dSJack F Vogel 	u8	match_method;
118061ae650dSJack F Vogel #define I40E_AQC_MM_PERFECT_MATCH	0x01
118161ae650dSJack F Vogel #define I40E_AQC_MM_HASH_MATCH		0x02
118261ae650dSJack F Vogel #define I40E_AQC_MM_ERR_NO_RES		0xFF
118361ae650dSJack F Vogel 	u8	reserved1[3];
118461ae650dSJack F Vogel };
118561ae650dSJack F Vogel 
118661ae650dSJack F Vogel struct i40e_aqc_add_remove_macvlan_completion {
118761ae650dSJack F Vogel 	__le16 perfect_mac_used;
118861ae650dSJack F Vogel 	__le16 perfect_mac_free;
118961ae650dSJack F Vogel 	__le16 unicast_hash_free;
119061ae650dSJack F Vogel 	__le16 multicast_hash_free;
119161ae650dSJack F Vogel 	__le32 addr_high;
119261ae650dSJack F Vogel 	__le32 addr_low;
119361ae650dSJack F Vogel };
119461ae650dSJack F Vogel 
119561ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_add_remove_macvlan_completion);
119661ae650dSJack F Vogel 
119761ae650dSJack F Vogel /* Remove MAC-VLAN (indirect 0x0251)
119861ae650dSJack F Vogel  * uses i40e_aqc_macvlan for the descriptor
119961ae650dSJack F Vogel  * data points to an array of num_addresses of elements
120061ae650dSJack F Vogel  */
120161ae650dSJack F Vogel 
120261ae650dSJack F Vogel struct i40e_aqc_remove_macvlan_element_data {
120361ae650dSJack F Vogel 	u8	mac_addr[6];
120461ae650dSJack F Vogel 	__le16	vlan_tag;
120561ae650dSJack F Vogel 	u8	flags;
120661ae650dSJack F Vogel #define I40E_AQC_MACVLAN_DEL_PERFECT_MATCH	0x01
120761ae650dSJack F Vogel #define I40E_AQC_MACVLAN_DEL_HASH_MATCH		0x02
120861ae650dSJack F Vogel #define I40E_AQC_MACVLAN_DEL_IGNORE_VLAN	0x08
120961ae650dSJack F Vogel #define I40E_AQC_MACVLAN_DEL_ALL_VSIS		0x10
121061ae650dSJack F Vogel 	u8	reserved[3];
121161ae650dSJack F Vogel 	/* reply section */
121261ae650dSJack F Vogel 	u8	error_code;
121361ae650dSJack F Vogel #define I40E_AQC_REMOVE_MACVLAN_SUCCESS		0x0
121461ae650dSJack F Vogel #define I40E_AQC_REMOVE_MACVLAN_FAIL		0xFF
121561ae650dSJack F Vogel 	u8	reply_reserved[3];
121661ae650dSJack F Vogel };
121761ae650dSJack F Vogel 
121861ae650dSJack F Vogel /* Add VLAN (indirect 0x0252)
121961ae650dSJack F Vogel  * Remove VLAN (indirect 0x0253)
122061ae650dSJack F Vogel  * use the generic i40e_aqc_macvlan for the command
122161ae650dSJack F Vogel  */
122261ae650dSJack F Vogel struct i40e_aqc_add_remove_vlan_element_data {
122361ae650dSJack F Vogel 	__le16	vlan_tag;
122461ae650dSJack F Vogel 	u8	vlan_flags;
122561ae650dSJack F Vogel /* flags for add VLAN */
122661ae650dSJack F Vogel #define I40E_AQC_ADD_VLAN_LOCAL			0x1
122761ae650dSJack F Vogel #define I40E_AQC_ADD_PVLAN_TYPE_SHIFT		1
122861ae650dSJack F Vogel #define I40E_AQC_ADD_PVLAN_TYPE_MASK	(0x3 << I40E_AQC_ADD_PVLAN_TYPE_SHIFT)
122961ae650dSJack F Vogel #define I40E_AQC_ADD_PVLAN_TYPE_REGULAR		0x0
123061ae650dSJack F Vogel #define I40E_AQC_ADD_PVLAN_TYPE_PRIMARY		0x2
123161ae650dSJack F Vogel #define I40E_AQC_ADD_PVLAN_TYPE_SECONDARY	0x4
123261ae650dSJack F Vogel #define I40E_AQC_VLAN_PTYPE_SHIFT		3
123361ae650dSJack F Vogel #define I40E_AQC_VLAN_PTYPE_MASK	(0x3 << I40E_AQC_VLAN_PTYPE_SHIFT)
123461ae650dSJack F Vogel #define I40E_AQC_VLAN_PTYPE_REGULAR_VSI		0x0
123561ae650dSJack F Vogel #define I40E_AQC_VLAN_PTYPE_PROMISC_VSI		0x8
123661ae650dSJack F Vogel #define I40E_AQC_VLAN_PTYPE_COMMUNITY_VSI	0x10
123761ae650dSJack F Vogel #define I40E_AQC_VLAN_PTYPE_ISOLATED_VSI	0x18
123861ae650dSJack F Vogel /* flags for remove VLAN */
123961ae650dSJack F Vogel #define I40E_AQC_REMOVE_VLAN_ALL	0x1
124061ae650dSJack F Vogel 	u8	reserved;
124161ae650dSJack F Vogel 	u8	result;
124261ae650dSJack F Vogel /* flags for add VLAN */
124361ae650dSJack F Vogel #define I40E_AQC_ADD_VLAN_SUCCESS	0x0
124461ae650dSJack F Vogel #define I40E_AQC_ADD_VLAN_FAIL_REQUEST	0xFE
124561ae650dSJack F Vogel #define I40E_AQC_ADD_VLAN_FAIL_RESOURCE	0xFF
124661ae650dSJack F Vogel /* flags for remove VLAN */
124761ae650dSJack F Vogel #define I40E_AQC_REMOVE_VLAN_SUCCESS	0x0
124861ae650dSJack F Vogel #define I40E_AQC_REMOVE_VLAN_FAIL	0xFF
124961ae650dSJack F Vogel 	u8	reserved1[3];
125061ae650dSJack F Vogel };
125161ae650dSJack F Vogel 
125261ae650dSJack F Vogel struct i40e_aqc_add_remove_vlan_completion {
125361ae650dSJack F Vogel 	u8	reserved[4];
125461ae650dSJack F Vogel 	__le16	vlans_used;
125561ae650dSJack F Vogel 	__le16	vlans_free;
125661ae650dSJack F Vogel 	__le32	addr_high;
125761ae650dSJack F Vogel 	__le32	addr_low;
125861ae650dSJack F Vogel };
125961ae650dSJack F Vogel 
126061ae650dSJack F Vogel /* Set VSI Promiscuous Modes (direct 0x0254) */
126161ae650dSJack F Vogel struct i40e_aqc_set_vsi_promiscuous_modes {
126261ae650dSJack F Vogel 	__le16	promiscuous_flags;
126361ae650dSJack F Vogel 	__le16	valid_flags;
126461ae650dSJack F Vogel /* flags used for both fields above */
126561ae650dSJack F Vogel #define I40E_AQC_SET_VSI_PROMISC_UNICAST	0x01
126661ae650dSJack F Vogel #define I40E_AQC_SET_VSI_PROMISC_MULTICAST	0x02
126761ae650dSJack F Vogel #define I40E_AQC_SET_VSI_PROMISC_BROADCAST	0x04
126861ae650dSJack F Vogel #define I40E_AQC_SET_VSI_DEFAULT		0x08
126961ae650dSJack F Vogel #define I40E_AQC_SET_VSI_PROMISC_VLAN		0x10
1270*abf77452SKrzysztof Galazka #define I40E_AQC_SET_VSI_PROMISC_RX_ONLY	0x8000
127161ae650dSJack F Vogel 	__le16	seid;
127261ae650dSJack F Vogel #define I40E_AQC_VSI_PROM_CMD_SEID_MASK		0x3FF
127361ae650dSJack F Vogel 	__le16	vlan_tag;
1274be771cdaSJack F Vogel #define I40E_AQC_SET_VSI_VLAN_MASK		0x0FFF
127561ae650dSJack F Vogel #define I40E_AQC_SET_VSI_VLAN_VALID		0x8000
127661ae650dSJack F Vogel 	u8	reserved[8];
127761ae650dSJack F Vogel };
127861ae650dSJack F Vogel 
127961ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_set_vsi_promiscuous_modes);
128061ae650dSJack F Vogel 
128161ae650dSJack F Vogel /* Add S/E-tag command (direct 0x0255)
128261ae650dSJack F Vogel  * Uses generic i40e_aqc_add_remove_tag_completion for completion
128361ae650dSJack F Vogel  */
128461ae650dSJack F Vogel struct i40e_aqc_add_tag {
128561ae650dSJack F Vogel 	__le16	flags;
128661ae650dSJack F Vogel #define I40E_AQC_ADD_TAG_FLAG_TO_QUEUE		0x0001
128761ae650dSJack F Vogel 	__le16	seid;
128861ae650dSJack F Vogel #define I40E_AQC_ADD_TAG_CMD_SEID_NUM_SHIFT	0
128961ae650dSJack F Vogel #define I40E_AQC_ADD_TAG_CMD_SEID_NUM_MASK	(0x3FF << \
129061ae650dSJack F Vogel 					I40E_AQC_ADD_TAG_CMD_SEID_NUM_SHIFT)
129161ae650dSJack F Vogel 	__le16	tag;
129261ae650dSJack F Vogel 	__le16	queue_number;
129361ae650dSJack F Vogel 	u8	reserved[8];
129461ae650dSJack F Vogel };
129561ae650dSJack F Vogel 
129661ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_add_tag);
129761ae650dSJack F Vogel 
129861ae650dSJack F Vogel struct i40e_aqc_add_remove_tag_completion {
129961ae650dSJack F Vogel 	u8	reserved[12];
130061ae650dSJack F Vogel 	__le16	tags_used;
130161ae650dSJack F Vogel 	__le16	tags_free;
130261ae650dSJack F Vogel };
130361ae650dSJack F Vogel 
130461ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_add_remove_tag_completion);
130561ae650dSJack F Vogel 
130661ae650dSJack F Vogel /* Remove S/E-tag command (direct 0x0256)
130761ae650dSJack F Vogel  * Uses generic i40e_aqc_add_remove_tag_completion for completion
130861ae650dSJack F Vogel  */
130961ae650dSJack F Vogel struct i40e_aqc_remove_tag {
131061ae650dSJack F Vogel 	__le16	seid;
131161ae650dSJack F Vogel #define I40E_AQC_REMOVE_TAG_CMD_SEID_NUM_SHIFT	0
131261ae650dSJack F Vogel #define I40E_AQC_REMOVE_TAG_CMD_SEID_NUM_MASK	(0x3FF << \
131361ae650dSJack F Vogel 					I40E_AQC_REMOVE_TAG_CMD_SEID_NUM_SHIFT)
131461ae650dSJack F Vogel 	__le16	tag;
131561ae650dSJack F Vogel 	u8	reserved[12];
131661ae650dSJack F Vogel };
131761ae650dSJack F Vogel 
1318f247dc25SJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_remove_tag);
1319f247dc25SJack F Vogel 
132061ae650dSJack F Vogel /* Add multicast E-Tag (direct 0x0257)
132161ae650dSJack F Vogel  * del multicast E-Tag (direct 0x0258) only uses pv_seid and etag fields
132261ae650dSJack F Vogel  * and no external data
132361ae650dSJack F Vogel  */
132461ae650dSJack F Vogel struct i40e_aqc_add_remove_mcast_etag {
132561ae650dSJack F Vogel 	__le16	pv_seid;
132661ae650dSJack F Vogel 	__le16	etag;
132761ae650dSJack F Vogel 	u8	num_unicast_etags;
132861ae650dSJack F Vogel 	u8	reserved[3];
132961ae650dSJack F Vogel 	__le32	addr_high;          /* address of array of 2-byte s-tags */
133061ae650dSJack F Vogel 	__le32	addr_low;
133161ae650dSJack F Vogel };
133261ae650dSJack F Vogel 
133361ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_add_remove_mcast_etag);
133461ae650dSJack F Vogel 
133561ae650dSJack F Vogel struct i40e_aqc_add_remove_mcast_etag_completion {
133661ae650dSJack F Vogel 	u8	reserved[4];
133761ae650dSJack F Vogel 	__le16	mcast_etags_used;
133861ae650dSJack F Vogel 	__le16	mcast_etags_free;
133961ae650dSJack F Vogel 	__le32	addr_high;
134061ae650dSJack F Vogel 	__le32	addr_low;
134161ae650dSJack F Vogel 
134261ae650dSJack F Vogel };
134361ae650dSJack F Vogel 
134461ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_add_remove_mcast_etag_completion);
134561ae650dSJack F Vogel 
134661ae650dSJack F Vogel /* Update S/E-Tag (direct 0x0259) */
134761ae650dSJack F Vogel struct i40e_aqc_update_tag {
134861ae650dSJack F Vogel 	__le16	seid;
134961ae650dSJack F Vogel #define I40E_AQC_UPDATE_TAG_CMD_SEID_NUM_SHIFT	0
135061ae650dSJack F Vogel #define I40E_AQC_UPDATE_TAG_CMD_SEID_NUM_MASK	(0x3FF << \
135161ae650dSJack F Vogel 					I40E_AQC_UPDATE_TAG_CMD_SEID_NUM_SHIFT)
135261ae650dSJack F Vogel 	__le16	old_tag;
135361ae650dSJack F Vogel 	__le16	new_tag;
135461ae650dSJack F Vogel 	u8	reserved[10];
135561ae650dSJack F Vogel };
135661ae650dSJack F Vogel 
135761ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_update_tag);
135861ae650dSJack F Vogel 
135961ae650dSJack F Vogel struct i40e_aqc_update_tag_completion {
136061ae650dSJack F Vogel 	u8	reserved[12];
136161ae650dSJack F Vogel 	__le16	tags_used;
136261ae650dSJack F Vogel 	__le16	tags_free;
136361ae650dSJack F Vogel };
136461ae650dSJack F Vogel 
136561ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_update_tag_completion);
136661ae650dSJack F Vogel 
136761ae650dSJack F Vogel /* Add Control Packet filter (direct 0x025A)
136861ae650dSJack F Vogel  * Remove Control Packet filter (direct 0x025B)
136961ae650dSJack F Vogel  * uses the i40e_aqc_add_oveb_cloud,
137061ae650dSJack F Vogel  * and the generic direct completion structure
137161ae650dSJack F Vogel  */
137261ae650dSJack F Vogel struct i40e_aqc_add_remove_control_packet_filter {
137361ae650dSJack F Vogel 	u8	mac[6];
137461ae650dSJack F Vogel 	__le16	etype;
137561ae650dSJack F Vogel 	__le16	flags;
137661ae650dSJack F Vogel #define I40E_AQC_ADD_CONTROL_PACKET_FLAGS_IGNORE_MAC	0x0001
137761ae650dSJack F Vogel #define I40E_AQC_ADD_CONTROL_PACKET_FLAGS_DROP		0x0002
137861ae650dSJack F Vogel #define I40E_AQC_ADD_CONTROL_PACKET_FLAGS_TO_QUEUE	0x0004
137961ae650dSJack F Vogel #define I40E_AQC_ADD_CONTROL_PACKET_FLAGS_TX		0x0008
138061ae650dSJack F Vogel #define I40E_AQC_ADD_CONTROL_PACKET_FLAGS_RX		0x0000
138161ae650dSJack F Vogel 	__le16	seid;
138261ae650dSJack F Vogel #define I40E_AQC_ADD_CONTROL_PACKET_CMD_SEID_NUM_SHIFT	0
138361ae650dSJack F Vogel #define I40E_AQC_ADD_CONTROL_PACKET_CMD_SEID_NUM_MASK	(0x3FF << \
138461ae650dSJack F Vogel 				I40E_AQC_ADD_CONTROL_PACKET_CMD_SEID_NUM_SHIFT)
138561ae650dSJack F Vogel 	__le16	queue;
138661ae650dSJack F Vogel 	u8	reserved[2];
138761ae650dSJack F Vogel };
138861ae650dSJack F Vogel 
138961ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_add_remove_control_packet_filter);
139061ae650dSJack F Vogel 
139161ae650dSJack F Vogel struct i40e_aqc_add_remove_control_packet_filter_completion {
139261ae650dSJack F Vogel 	__le16	mac_etype_used;
139361ae650dSJack F Vogel 	__le16	etype_used;
139461ae650dSJack F Vogel 	__le16	mac_etype_free;
139561ae650dSJack F Vogel 	__le16	etype_free;
139661ae650dSJack F Vogel 	u8	reserved[8];
139761ae650dSJack F Vogel };
139861ae650dSJack F Vogel 
139961ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_add_remove_control_packet_filter_completion);
140061ae650dSJack F Vogel 
140161ae650dSJack F Vogel /* Add Cloud filters (indirect 0x025C)
140261ae650dSJack F Vogel  * Remove Cloud filters (indirect 0x025D)
140361ae650dSJack F Vogel  * uses the i40e_aqc_add_remove_cloud_filters,
140461ae650dSJack F Vogel  * and the generic indirect completion structure
140561ae650dSJack F Vogel  */
140661ae650dSJack F Vogel struct i40e_aqc_add_remove_cloud_filters {
140761ae650dSJack F Vogel 	u8	num_filters;
140861ae650dSJack F Vogel 	u8	reserved;
140961ae650dSJack F Vogel 	__le16	seid;
141061ae650dSJack F Vogel #define I40E_AQC_ADD_CLOUD_CMD_SEID_NUM_SHIFT	0
141161ae650dSJack F Vogel #define I40E_AQC_ADD_CLOUD_CMD_SEID_NUM_MASK	(0x3FF << \
141261ae650dSJack F Vogel 					I40E_AQC_ADD_CLOUD_CMD_SEID_NUM_SHIFT)
1413b4a7ce06SEric Joyner 	u8	big_buffer_flag;
1414b4a7ce06SEric Joyner #define I40E_AQC_ADD_REM_CLOUD_CMD_BIG_BUFFER	1
1415b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_CMD_BB		1
1416b4a7ce06SEric Joyner 	u8	reserved2[3];
141761ae650dSJack F Vogel 	__le32	addr_high;
141861ae650dSJack F Vogel 	__le32	addr_low;
141961ae650dSJack F Vogel };
142061ae650dSJack F Vogel 
142161ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_add_remove_cloud_filters);
142261ae650dSJack F Vogel 
1423b4a7ce06SEric Joyner struct i40e_aqc_cloud_filters_element_data {
142461ae650dSJack F Vogel 	u8	outer_mac[6];
142561ae650dSJack F Vogel 	u8	inner_mac[6];
142661ae650dSJack F Vogel 	__le16	inner_vlan;
142761ae650dSJack F Vogel 	union {
142861ae650dSJack F Vogel 		struct {
142961ae650dSJack F Vogel 			u8 reserved[12];
143061ae650dSJack F Vogel 			u8 data[4];
143161ae650dSJack F Vogel 		} v4;
143261ae650dSJack F Vogel 		struct {
143361ae650dSJack F Vogel 			u8 data[16];
143461ae650dSJack F Vogel 		} v6;
1435b4a7ce06SEric Joyner 		struct {
1436b4a7ce06SEric Joyner 			__le16 data[8];
1437b4a7ce06SEric Joyner 		} raw_v6;
143861ae650dSJack F Vogel 	} ipaddr;
143961ae650dSJack F Vogel 	__le16	flags;
144061ae650dSJack F Vogel #define I40E_AQC_ADD_CLOUD_FILTER_SHIFT			0
144161ae650dSJack F Vogel #define I40E_AQC_ADD_CLOUD_FILTER_MASK	(0x3F << \
144261ae650dSJack F Vogel 					I40E_AQC_ADD_CLOUD_FILTER_SHIFT)
144361ae650dSJack F Vogel /* 0x0000 reserved */
1444b4a7ce06SEric Joyner /* 0x0001 reserved */
144561ae650dSJack F Vogel /* 0x0002 reserved */
144661ae650dSJack F Vogel #define I40E_AQC_ADD_CLOUD_FILTER_IMAC_IVLAN		0x0003
144761ae650dSJack F Vogel #define I40E_AQC_ADD_CLOUD_FILTER_IMAC_IVLAN_TEN_ID	0x0004
144861ae650dSJack F Vogel /* 0x0005 reserved */
144961ae650dSJack F Vogel #define I40E_AQC_ADD_CLOUD_FILTER_IMAC_TEN_ID		0x0006
145061ae650dSJack F Vogel /* 0x0007 reserved */
145161ae650dSJack F Vogel /* 0x0008 reserved */
145261ae650dSJack F Vogel #define I40E_AQC_ADD_CLOUD_FILTER_OMAC			0x0009
145361ae650dSJack F Vogel #define I40E_AQC_ADD_CLOUD_FILTER_IMAC			0x000A
145461ae650dSJack F Vogel #define I40E_AQC_ADD_CLOUD_FILTER_OMAC_TEN_ID_IMAC	0x000B
145561ae650dSJack F Vogel #define I40E_AQC_ADD_CLOUD_FILTER_IIP			0x000C
1456*abf77452SKrzysztof Galazka #define I40E_AQC_ADD_CLOUD_FILTER_OIP1			0x0010
1457*abf77452SKrzysztof Galazka #define I40E_AQC_ADD_CLOUD_FILTER_OIP2			0x0012
1458b4a7ce06SEric Joyner /* 0x000D reserved */
1459b4a7ce06SEric Joyner /* 0x000E reserved */
1460b4a7ce06SEric Joyner /* 0x000F reserved */
1461b4a7ce06SEric Joyner /* 0x0010 to 0x0017 is for custom filters */
1462b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FILTER_IP_PORT		0x0010 /* Dest IP + L4 Port */
1463b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FILTER_MAC_PORT		0x0011 /* Dest MAC + L4 Port */
1464b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FILTER_MAC_VLAN_PORT		0x0012 /* Dest MAC + VLAN + L4 Port */
146561ae650dSJack F Vogel 
146661ae650dSJack F Vogel #define I40E_AQC_ADD_CLOUD_FLAGS_TO_QUEUE		0x0080
146761ae650dSJack F Vogel #define I40E_AQC_ADD_CLOUD_VNK_SHIFT			6
146861ae650dSJack F Vogel #define I40E_AQC_ADD_CLOUD_VNK_MASK			0x00C0
146961ae650dSJack F Vogel #define I40E_AQC_ADD_CLOUD_FLAGS_IPV4			0
147061ae650dSJack F Vogel #define I40E_AQC_ADD_CLOUD_FLAGS_IPV6			0x0100
147161ae650dSJack F Vogel 
147261ae650dSJack F Vogel #define I40E_AQC_ADD_CLOUD_TNL_TYPE_SHIFT		9
147361ae650dSJack F Vogel #define I40E_AQC_ADD_CLOUD_TNL_TYPE_MASK		0x1E00
1474fdb6f38aSEric Joyner #define I40E_AQC_ADD_CLOUD_TNL_TYPE_VXLAN		0
147561ae650dSJack F Vogel #define I40E_AQC_ADD_CLOUD_TNL_TYPE_NVGRE_OMAC		1
1476fdb6f38aSEric Joyner #define I40E_AQC_ADD_CLOUD_TNL_TYPE_GENEVE		2
147761ae650dSJack F Vogel #define I40E_AQC_ADD_CLOUD_TNL_TYPE_IP			3
1478fdb6f38aSEric Joyner #define I40E_AQC_ADD_CLOUD_TNL_TYPE_RESERVED		4
1479fdb6f38aSEric Joyner #define I40E_AQC_ADD_CLOUD_TNL_TYPE_VXLAN_GPE		5
1480fdb6f38aSEric Joyner 
1481fdb6f38aSEric Joyner #define I40E_AQC_ADD_CLOUD_FLAGS_SHARED_OUTER_MAC	0x2000
1482fdb6f38aSEric Joyner #define I40E_AQC_ADD_CLOUD_FLAGS_SHARED_INNER_MAC	0x4000
1483fdb6f38aSEric Joyner #define I40E_AQC_ADD_CLOUD_FLAGS_SHARED_OUTER_IP	0x8000
148461ae650dSJack F Vogel 
148561ae650dSJack F Vogel 	__le32	tenant_id;
148661ae650dSJack F Vogel 	u8	reserved[4];
148761ae650dSJack F Vogel 	__le16	queue_number;
148861ae650dSJack F Vogel #define I40E_AQC_ADD_CLOUD_QUEUE_SHIFT		0
1489f247dc25SJack F Vogel #define I40E_AQC_ADD_CLOUD_QUEUE_MASK		(0x7FF << \
149061ae650dSJack F Vogel 						 I40E_AQC_ADD_CLOUD_QUEUE_SHIFT)
149161ae650dSJack F Vogel 	u8	reserved2[14];
149261ae650dSJack F Vogel 	/* response section */
149361ae650dSJack F Vogel 	u8	allocation_result;
149461ae650dSJack F Vogel #define I40E_AQC_ADD_CLOUD_FILTER_SUCCESS	0x0
149561ae650dSJack F Vogel #define I40E_AQC_ADD_CLOUD_FILTER_FAIL		0xFF
149661ae650dSJack F Vogel 	u8	response_reserved[7];
149761ae650dSJack F Vogel };
149861ae650dSJack F Vogel 
1499b4a7ce06SEric Joyner /* i40e_aqc_add_rm_cloud_filt_elem_ext is used when
1500b4a7ce06SEric Joyner  * I40E_AQC_ADD_REM_CLOUD_CMD_BIG_BUFFER flag is set.
1501b4a7ce06SEric Joyner  */
1502b4a7ce06SEric Joyner struct i40e_aqc_add_rm_cloud_filt_elem_ext {
1503b4a7ce06SEric Joyner 	struct i40e_aqc_cloud_filters_element_data element;
1504b4a7ce06SEric Joyner 	u16     general_fields[32];
1505b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X10_WORD0	0
1506b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X10_WORD1	1
1507b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X10_WORD2	2
1508b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X11_WORD0	3
1509b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X11_WORD1	4
1510b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X11_WORD2	5
1511b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X12_WORD0	6
1512b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X12_WORD1	7
1513b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X12_WORD2	8
1514b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X13_WORD0	9
1515b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X13_WORD1	10
1516b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X13_WORD2	11
1517b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X14_WORD0	12
1518b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X14_WORD1	13
1519b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X14_WORD2	14
1520b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X16_WORD0	15
1521b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X16_WORD1	16
1522b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X16_WORD2	17
1523b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X16_WORD3	18
1524b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X16_WORD4	19
1525b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X16_WORD5	20
1526b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X16_WORD6	21
1527b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X16_WORD7	22
1528b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X17_WORD0	23
1529b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X17_WORD1	24
1530b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X17_WORD2	25
1531b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X17_WORD3	26
1532b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X17_WORD4	27
1533b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X17_WORD5	28
1534b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X17_WORD6	29
1535b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X17_WORD7	30
1536b4a7ce06SEric Joyner };
1537b4a7ce06SEric Joyner 
1538b4a7ce06SEric Joyner I40E_CHECK_STRUCT_LEN(0x40, i40e_aqc_cloud_filters_element_data);
1539b4a7ce06SEric Joyner 
1540b4a7ce06SEric Joyner /* i40e_aqc_cloud_filters_element_bb is used when
1541b4a7ce06SEric Joyner  * I40E_AQC_CLOUD_CMD_BB flag is set.
1542b4a7ce06SEric Joyner  */
1543b4a7ce06SEric Joyner struct i40e_aqc_cloud_filters_element_bb {
1544b4a7ce06SEric Joyner 	struct i40e_aqc_cloud_filters_element_data element;
1545b4a7ce06SEric Joyner 	u16     general_fields[32];
1546b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X10_WORD0	0
1547b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X10_WORD1	1
1548b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X10_WORD2	2
1549b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X11_WORD0	3
1550b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X11_WORD1	4
1551b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X11_WORD2	5
1552b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X12_WORD0	6
1553b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X12_WORD1	7
1554b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X12_WORD2	8
1555b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X13_WORD0	9
1556b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X13_WORD1	10
1557b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X13_WORD2	11
1558b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X14_WORD0	12
1559b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X14_WORD1	13
1560b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X14_WORD2	14
1561b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X16_WORD0	15
1562b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X16_WORD1	16
1563b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X16_WORD2	17
1564b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X16_WORD3	18
1565b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X16_WORD4	19
1566b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X16_WORD5	20
1567b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X16_WORD6	21
1568b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X16_WORD7	22
1569b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X17_WORD0	23
1570b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X17_WORD1	24
1571b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X17_WORD2	25
1572b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X17_WORD3	26
1573b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X17_WORD4	27
1574b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X17_WORD5	28
1575b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X17_WORD6	29
1576b4a7ce06SEric Joyner #define I40E_AQC_ADD_CLOUD_FV_FLU_0X17_WORD7	30
1577b4a7ce06SEric Joyner };
1578b4a7ce06SEric Joyner 
1579b4a7ce06SEric Joyner I40E_CHECK_STRUCT_LEN(0x80, i40e_aqc_cloud_filters_element_bb);
1580b4a7ce06SEric Joyner 
158161ae650dSJack F Vogel struct i40e_aqc_remove_cloud_filters_completion {
158261ae650dSJack F Vogel 	__le16 perfect_ovlan_used;
158361ae650dSJack F Vogel 	__le16 perfect_ovlan_free;
158461ae650dSJack F Vogel 	__le16 vlan_used;
158561ae650dSJack F Vogel 	__le16 vlan_free;
158661ae650dSJack F Vogel 	__le32 addr_high;
158761ae650dSJack F Vogel 	__le32 addr_low;
158861ae650dSJack F Vogel };
158961ae650dSJack F Vogel 
159061ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_remove_cloud_filters_completion);
159161ae650dSJack F Vogel 
1592b4a7ce06SEric Joyner /* Replace filter Command 0x025F
1593b4a7ce06SEric Joyner  * uses the i40e_aqc_replace_cloud_filters,
1594b4a7ce06SEric Joyner  * and the generic indirect completion structure
1595b4a7ce06SEric Joyner  */
1596b4a7ce06SEric Joyner struct i40e_filter_data {
1597b4a7ce06SEric Joyner 	u8 filter_type;
1598b4a7ce06SEric Joyner 	u8 input[3];
1599b4a7ce06SEric Joyner };
1600b4a7ce06SEric Joyner 
1601b4a7ce06SEric Joyner I40E_CHECK_STRUCT_LEN(4, i40e_filter_data);
1602b4a7ce06SEric Joyner 
1603b4a7ce06SEric Joyner struct i40e_aqc_replace_cloud_filters_cmd {
1604b4a7ce06SEric Joyner 	u8	valid_flags;
1605b4a7ce06SEric Joyner #define I40E_AQC_REPLACE_L1_FILTER		0x0
1606b4a7ce06SEric Joyner #define I40E_AQC_REPLACE_CLOUD_FILTER		0x1
1607b4a7ce06SEric Joyner #define I40E_AQC_GET_CLOUD_FILTERS		0x2
1608b4a7ce06SEric Joyner #define I40E_AQC_MIRROR_CLOUD_FILTER		0x4
1609b4a7ce06SEric Joyner #define I40E_AQC_HIGH_PRIORITY_CLOUD_FILTER	0x8
1610b4a7ce06SEric Joyner 	u8	old_filter_type;
1611b4a7ce06SEric Joyner 	u8	new_filter_type;
1612b4a7ce06SEric Joyner 	u8	tr_bit;
1613b4a7ce06SEric Joyner 	u8	tr_bit2;
1614b4a7ce06SEric Joyner 	u8	reserved[3];
1615b4a7ce06SEric Joyner 	__le32 addr_high;
1616b4a7ce06SEric Joyner 	__le32 addr_low;
1617b4a7ce06SEric Joyner };
1618b4a7ce06SEric Joyner 
1619b4a7ce06SEric Joyner I40E_CHECK_CMD_LENGTH(i40e_aqc_replace_cloud_filters_cmd);
1620b4a7ce06SEric Joyner 
1621b4a7ce06SEric Joyner struct i40e_aqc_replace_cloud_filters_cmd_buf {
1622b4a7ce06SEric Joyner 	u8	data[32];
1623b4a7ce06SEric Joyner /* Filter type INPUT codes*/
1624b4a7ce06SEric Joyner #define I40E_AQC_REPLACE_CLOUD_CMD_INPUT_ENTRIES_MAX	3
1625b4a7ce06SEric Joyner #define I40E_AQC_REPLACE_CLOUD_CMD_INPUT_VALIDATED	(1 << 7UL)
1626b4a7ce06SEric Joyner 
1627b4a7ce06SEric Joyner /* Field Vector offsets */
1628b4a7ce06SEric Joyner #define I40E_AQC_REPLACE_CLOUD_CMD_INPUT_FV_MAC_DA		0
1629b4a7ce06SEric Joyner #define I40E_AQC_REPLACE_CLOUD_CMD_INPUT_FV_STAG_ETH		6
1630b4a7ce06SEric Joyner #define I40E_AQC_REPLACE_CLOUD_CMD_INPUT_FV_STAG		7
1631b4a7ce06SEric Joyner #define I40E_AQC_REPLACE_CLOUD_CMD_INPUT_FV_VLAN		8
1632b4a7ce06SEric Joyner #define I40E_AQC_REPLACE_CLOUD_CMD_INPUT_FV_STAG_OVLAN		9
1633b4a7ce06SEric Joyner #define I40E_AQC_REPLACE_CLOUD_CMD_INPUT_FV_STAG_IVLAN		10
1634b4a7ce06SEric Joyner #define I40E_AQC_REPLACE_CLOUD_CMD_INPUT_FV_TUNNLE_KEY		11
1635b4a7ce06SEric Joyner #define I40E_AQC_REPLACE_CLOUD_CMD_INPUT_FV_IMAC		12
1636b4a7ce06SEric Joyner /* big FLU */
1637b4a7ce06SEric Joyner #define I40E_AQC_REPLACE_CLOUD_CMD_INPUT_FV_IP_DA		14
1638b4a7ce06SEric Joyner /* big FLU */
1639b4a7ce06SEric Joyner #define I40E_AQC_REPLACE_CLOUD_CMD_INPUT_FV_OIP_DA		15
1640b4a7ce06SEric Joyner 
1641b4a7ce06SEric Joyner #define I40E_AQC_REPLACE_CLOUD_CMD_INPUT_FV_INNER_VLAN		37
1642b4a7ce06SEric Joyner 	struct i40e_filter_data	filters[8];
1643b4a7ce06SEric Joyner };
1644b4a7ce06SEric Joyner 
1645b4a7ce06SEric Joyner I40E_CHECK_STRUCT_LEN(0x40, i40e_aqc_replace_cloud_filters_cmd_buf);
1646b4a7ce06SEric Joyner 
164761ae650dSJack F Vogel /* Add Mirror Rule (indirect or direct 0x0260)
164861ae650dSJack F Vogel  * Delete Mirror Rule (indirect or direct 0x0261)
164961ae650dSJack F Vogel  * note: some rule types (4,5) do not use an external buffer.
165061ae650dSJack F Vogel  *       take care to set the flags correctly.
165161ae650dSJack F Vogel  */
165261ae650dSJack F Vogel struct i40e_aqc_add_delete_mirror_rule {
165361ae650dSJack F Vogel 	__le16 seid;
165461ae650dSJack F Vogel 	__le16 rule_type;
165561ae650dSJack F Vogel #define I40E_AQC_MIRROR_RULE_TYPE_SHIFT		0
165661ae650dSJack F Vogel #define I40E_AQC_MIRROR_RULE_TYPE_MASK		(0x7 << \
165761ae650dSJack F Vogel 						I40E_AQC_MIRROR_RULE_TYPE_SHIFT)
165861ae650dSJack F Vogel #define I40E_AQC_MIRROR_RULE_TYPE_VPORT_INGRESS	1
165961ae650dSJack F Vogel #define I40E_AQC_MIRROR_RULE_TYPE_VPORT_EGRESS	2
166061ae650dSJack F Vogel #define I40E_AQC_MIRROR_RULE_TYPE_VLAN		3
166161ae650dSJack F Vogel #define I40E_AQC_MIRROR_RULE_TYPE_ALL_INGRESS	4
166261ae650dSJack F Vogel #define I40E_AQC_MIRROR_RULE_TYPE_ALL_EGRESS	5
166361ae650dSJack F Vogel 	__le16 num_entries;
166461ae650dSJack F Vogel 	__le16 destination;  /* VSI for add, rule id for delete */
166561ae650dSJack F Vogel 	__le32 addr_high;    /* address of array of 2-byte VSI or VLAN ids */
166661ae650dSJack F Vogel 	__le32 addr_low;
166761ae650dSJack F Vogel };
166861ae650dSJack F Vogel 
166961ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_add_delete_mirror_rule);
167061ae650dSJack F Vogel 
167161ae650dSJack F Vogel struct i40e_aqc_add_delete_mirror_rule_completion {
167261ae650dSJack F Vogel 	u8	reserved[2];
167361ae650dSJack F Vogel 	__le16	rule_id;  /* only used on add */
167461ae650dSJack F Vogel 	__le16	mirror_rules_used;
167561ae650dSJack F Vogel 	__le16	mirror_rules_free;
167661ae650dSJack F Vogel 	__le32	addr_high;
167761ae650dSJack F Vogel 	__le32	addr_low;
167861ae650dSJack F Vogel };
167961ae650dSJack F Vogel 
168061ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_add_delete_mirror_rule_completion);
168161ae650dSJack F Vogel 
168261ae650dSJack F Vogel /* DCB 0x03xx*/
168361ae650dSJack F Vogel 
168461ae650dSJack F Vogel /* PFC Ignore (direct 0x0301)
168561ae650dSJack F Vogel  *    the command and response use the same descriptor structure
168661ae650dSJack F Vogel  */
168761ae650dSJack F Vogel struct i40e_aqc_pfc_ignore {
168861ae650dSJack F Vogel 	u8	tc_bitmap;
168961ae650dSJack F Vogel 	u8	command_flags; /* unused on response */
169061ae650dSJack F Vogel #define I40E_AQC_PFC_IGNORE_SET		0x80
169161ae650dSJack F Vogel #define I40E_AQC_PFC_IGNORE_CLEAR	0x0
169261ae650dSJack F Vogel 	u8	reserved[14];
169361ae650dSJack F Vogel };
169461ae650dSJack F Vogel 
169561ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_pfc_ignore);
169661ae650dSJack F Vogel 
169761ae650dSJack F Vogel /* DCB Update (direct 0x0302) uses the i40e_aq_desc structure
169861ae650dSJack F Vogel  * with no parameters
169961ae650dSJack F Vogel  */
170061ae650dSJack F Vogel 
170161ae650dSJack F Vogel /* TX scheduler 0x04xx */
170261ae650dSJack F Vogel 
170361ae650dSJack F Vogel /* Almost all the indirect commands use
170461ae650dSJack F Vogel  * this generic struct to pass the SEID in param0
170561ae650dSJack F Vogel  */
170661ae650dSJack F Vogel struct i40e_aqc_tx_sched_ind {
170761ae650dSJack F Vogel 	__le16	vsi_seid;
170861ae650dSJack F Vogel 	u8	reserved[6];
170961ae650dSJack F Vogel 	__le32	addr_high;
171061ae650dSJack F Vogel 	__le32	addr_low;
171161ae650dSJack F Vogel };
171261ae650dSJack F Vogel 
171361ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_tx_sched_ind);
171461ae650dSJack F Vogel 
171561ae650dSJack F Vogel /* Several commands respond with a set of queue set handles */
171661ae650dSJack F Vogel struct i40e_aqc_qs_handles_resp {
171761ae650dSJack F Vogel 	__le16 qs_handles[8];
171861ae650dSJack F Vogel };
171961ae650dSJack F Vogel 
172061ae650dSJack F Vogel /* Configure VSI BW limits (direct 0x0400) */
172161ae650dSJack F Vogel struct i40e_aqc_configure_vsi_bw_limit {
172261ae650dSJack F Vogel 	__le16	vsi_seid;
172361ae650dSJack F Vogel 	u8	reserved[2];
172461ae650dSJack F Vogel 	__le16	credit;
172561ae650dSJack F Vogel 	u8	reserved1[2];
172661ae650dSJack F Vogel 	u8	max_credit; /* 0-3, limit = 2^max */
172761ae650dSJack F Vogel 	u8	reserved2[7];
172861ae650dSJack F Vogel };
172961ae650dSJack F Vogel 
173061ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_configure_vsi_bw_limit);
173161ae650dSJack F Vogel 
173261ae650dSJack F Vogel /* Configure VSI Bandwidth Limit per Traffic Type (indirect 0x0406)
173361ae650dSJack F Vogel  *    responds with i40e_aqc_qs_handles_resp
173461ae650dSJack F Vogel  */
173561ae650dSJack F Vogel struct i40e_aqc_configure_vsi_ets_sla_bw_data {
173661ae650dSJack F Vogel 	u8	tc_valid_bits;
173761ae650dSJack F Vogel 	u8	reserved[15];
173861ae650dSJack F Vogel 	__le16	tc_bw_credits[8]; /* FW writesback QS handles here */
173961ae650dSJack F Vogel 
174061ae650dSJack F Vogel 	/* 4 bits per tc 0-7, 4th bit is reserved, limit = 2^max */
174161ae650dSJack F Vogel 	__le16	tc_bw_max[2];
174261ae650dSJack F Vogel 	u8	reserved1[28];
174361ae650dSJack F Vogel };
174461ae650dSJack F Vogel 
1745f247dc25SJack F Vogel I40E_CHECK_STRUCT_LEN(0x40, i40e_aqc_configure_vsi_ets_sla_bw_data);
1746f247dc25SJack F Vogel 
174761ae650dSJack F Vogel /* Configure VSI Bandwidth Allocation per Traffic Type (indirect 0x0407)
174861ae650dSJack F Vogel  *    responds with i40e_aqc_qs_handles_resp
174961ae650dSJack F Vogel  */
175061ae650dSJack F Vogel struct i40e_aqc_configure_vsi_tc_bw_data {
175161ae650dSJack F Vogel 	u8	tc_valid_bits;
175261ae650dSJack F Vogel 	u8	reserved[3];
175361ae650dSJack F Vogel 	u8	tc_bw_credits[8];
175461ae650dSJack F Vogel 	u8	reserved1[4];
175561ae650dSJack F Vogel 	__le16	qs_handles[8];
175661ae650dSJack F Vogel };
175761ae650dSJack F Vogel 
1758f247dc25SJack F Vogel I40E_CHECK_STRUCT_LEN(0x20, i40e_aqc_configure_vsi_tc_bw_data);
1759f247dc25SJack F Vogel 
176061ae650dSJack F Vogel /* Query vsi bw configuration (indirect 0x0408) */
176161ae650dSJack F Vogel struct i40e_aqc_query_vsi_bw_config_resp {
176261ae650dSJack F Vogel 	u8	tc_valid_bits;
176361ae650dSJack F Vogel 	u8	tc_suspended_bits;
176461ae650dSJack F Vogel 	u8	reserved[14];
176561ae650dSJack F Vogel 	__le16	qs_handles[8];
176661ae650dSJack F Vogel 	u8	reserved1[4];
176761ae650dSJack F Vogel 	__le16	port_bw_limit;
176861ae650dSJack F Vogel 	u8	reserved2[2];
176961ae650dSJack F Vogel 	u8	max_bw; /* 0-3, limit = 2^max */
177061ae650dSJack F Vogel 	u8	reserved3[23];
177161ae650dSJack F Vogel };
177261ae650dSJack F Vogel 
1773f247dc25SJack F Vogel I40E_CHECK_STRUCT_LEN(0x40, i40e_aqc_query_vsi_bw_config_resp);
1774f247dc25SJack F Vogel 
177561ae650dSJack F Vogel /* Query VSI Bandwidth Allocation per Traffic Type (indirect 0x040A) */
177661ae650dSJack F Vogel struct i40e_aqc_query_vsi_ets_sla_config_resp {
177761ae650dSJack F Vogel 	u8	tc_valid_bits;
177861ae650dSJack F Vogel 	u8	reserved[3];
177961ae650dSJack F Vogel 	u8	share_credits[8];
178061ae650dSJack F Vogel 	__le16	credits[8];
178161ae650dSJack F Vogel 
178261ae650dSJack F Vogel 	/* 4 bits per tc 0-7, 4th bit is reserved, limit = 2^max */
178361ae650dSJack F Vogel 	__le16	tc_bw_max[2];
178461ae650dSJack F Vogel };
178561ae650dSJack F Vogel 
1786f247dc25SJack F Vogel I40E_CHECK_STRUCT_LEN(0x20, i40e_aqc_query_vsi_ets_sla_config_resp);
1787f247dc25SJack F Vogel 
178861ae650dSJack F Vogel /* Configure Switching Component Bandwidth Limit (direct 0x0410) */
178961ae650dSJack F Vogel struct i40e_aqc_configure_switching_comp_bw_limit {
179061ae650dSJack F Vogel 	__le16	seid;
179161ae650dSJack F Vogel 	u8	reserved[2];
179261ae650dSJack F Vogel 	__le16	credit;
179361ae650dSJack F Vogel 	u8	reserved1[2];
179461ae650dSJack F Vogel 	u8	max_bw; /* 0-3, limit = 2^max */
179561ae650dSJack F Vogel 	u8	reserved2[7];
179661ae650dSJack F Vogel };
179761ae650dSJack F Vogel 
179861ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_configure_switching_comp_bw_limit);
179961ae650dSJack F Vogel 
180061ae650dSJack F Vogel /* Enable  Physical Port ETS (indirect 0x0413)
180161ae650dSJack F Vogel  * Modify  Physical Port ETS (indirect 0x0414)
180261ae650dSJack F Vogel  * Disable Physical Port ETS (indirect 0x0415)
180361ae650dSJack F Vogel  */
180461ae650dSJack F Vogel struct i40e_aqc_configure_switching_comp_ets_data {
180561ae650dSJack F Vogel 	u8	reserved[4];
180661ae650dSJack F Vogel 	u8	tc_valid_bits;
180761ae650dSJack F Vogel 	u8	seepage;
180861ae650dSJack F Vogel #define I40E_AQ_ETS_SEEPAGE_EN_MASK	0x1
180961ae650dSJack F Vogel 	u8	tc_strict_priority_flags;
181061ae650dSJack F Vogel 	u8	reserved1[17];
181161ae650dSJack F Vogel 	u8	tc_bw_share_credits[8];
181261ae650dSJack F Vogel 	u8	reserved2[96];
181361ae650dSJack F Vogel };
181461ae650dSJack F Vogel 
1815f247dc25SJack F Vogel I40E_CHECK_STRUCT_LEN(0x80, i40e_aqc_configure_switching_comp_ets_data);
1816f247dc25SJack F Vogel 
181761ae650dSJack F Vogel /* Configure Switching Component Bandwidth Limits per Tc (indirect 0x0416) */
181861ae650dSJack F Vogel struct i40e_aqc_configure_switching_comp_ets_bw_limit_data {
181961ae650dSJack F Vogel 	u8	tc_valid_bits;
182061ae650dSJack F Vogel 	u8	reserved[15];
182161ae650dSJack F Vogel 	__le16	tc_bw_credit[8];
182261ae650dSJack F Vogel 
182361ae650dSJack F Vogel 	/* 4 bits per tc 0-7, 4th bit is reserved, limit = 2^max */
182461ae650dSJack F Vogel 	__le16	tc_bw_max[2];
182561ae650dSJack F Vogel 	u8	reserved1[28];
182661ae650dSJack F Vogel };
182761ae650dSJack F Vogel 
1828d4683565SEric Joyner I40E_CHECK_STRUCT_LEN(0x40,
1829d4683565SEric Joyner 		      i40e_aqc_configure_switching_comp_ets_bw_limit_data);
1830f247dc25SJack F Vogel 
183161ae650dSJack F Vogel /* Configure Switching Component Bandwidth Allocation per Tc
183261ae650dSJack F Vogel  * (indirect 0x0417)
183361ae650dSJack F Vogel  */
183461ae650dSJack F Vogel struct i40e_aqc_configure_switching_comp_bw_config_data {
183561ae650dSJack F Vogel 	u8	tc_valid_bits;
183661ae650dSJack F Vogel 	u8	reserved[2];
183761ae650dSJack F Vogel 	u8	absolute_credits; /* bool */
183861ae650dSJack F Vogel 	u8	tc_bw_share_credits[8];
183961ae650dSJack F Vogel 	u8	reserved1[20];
184061ae650dSJack F Vogel };
184161ae650dSJack F Vogel 
1842f247dc25SJack F Vogel I40E_CHECK_STRUCT_LEN(0x20, i40e_aqc_configure_switching_comp_bw_config_data);
1843f247dc25SJack F Vogel 
184461ae650dSJack F Vogel /* Query Switching Component Configuration (indirect 0x0418) */
184561ae650dSJack F Vogel struct i40e_aqc_query_switching_comp_ets_config_resp {
184661ae650dSJack F Vogel 	u8	tc_valid_bits;
184761ae650dSJack F Vogel 	u8	reserved[35];
184861ae650dSJack F Vogel 	__le16	port_bw_limit;
184961ae650dSJack F Vogel 	u8	reserved1[2];
185061ae650dSJack F Vogel 	u8	tc_bw_max; /* 0-3, limit = 2^max */
185161ae650dSJack F Vogel 	u8	reserved2[23];
185261ae650dSJack F Vogel };
185361ae650dSJack F Vogel 
1854f247dc25SJack F Vogel I40E_CHECK_STRUCT_LEN(0x40, i40e_aqc_query_switching_comp_ets_config_resp);
1855f247dc25SJack F Vogel 
185661ae650dSJack F Vogel /* Query PhysicalPort ETS Configuration (indirect 0x0419) */
185761ae650dSJack F Vogel struct i40e_aqc_query_port_ets_config_resp {
185861ae650dSJack F Vogel 	u8	reserved[4];
185961ae650dSJack F Vogel 	u8	tc_valid_bits;
186061ae650dSJack F Vogel 	u8	reserved1;
186161ae650dSJack F Vogel 	u8	tc_strict_priority_bits;
186261ae650dSJack F Vogel 	u8	reserved2;
186361ae650dSJack F Vogel 	u8	tc_bw_share_credits[8];
186461ae650dSJack F Vogel 	__le16	tc_bw_limits[8];
186561ae650dSJack F Vogel 
186661ae650dSJack F Vogel 	/* 4 bits per tc 0-7, 4th bit reserved, limit = 2^max */
186761ae650dSJack F Vogel 	__le16	tc_bw_max[2];
186861ae650dSJack F Vogel 	u8	reserved3[32];
186961ae650dSJack F Vogel };
187061ae650dSJack F Vogel 
1871f247dc25SJack F Vogel I40E_CHECK_STRUCT_LEN(0x44, i40e_aqc_query_port_ets_config_resp);
1872f247dc25SJack F Vogel 
187361ae650dSJack F Vogel /* Query Switching Component Bandwidth Allocation per Traffic Type
187461ae650dSJack F Vogel  * (indirect 0x041A)
187561ae650dSJack F Vogel  */
187661ae650dSJack F Vogel struct i40e_aqc_query_switching_comp_bw_config_resp {
187761ae650dSJack F Vogel 	u8	tc_valid_bits;
187861ae650dSJack F Vogel 	u8	reserved[2];
187961ae650dSJack F Vogel 	u8	absolute_credits_enable; /* bool */
188061ae650dSJack F Vogel 	u8	tc_bw_share_credits[8];
188161ae650dSJack F Vogel 	__le16	tc_bw_limits[8];
188261ae650dSJack F Vogel 
188361ae650dSJack F Vogel 	/* 4 bits per tc 0-7, 4th bit is reserved, limit = 2^max */
188461ae650dSJack F Vogel 	__le16	tc_bw_max[2];
188561ae650dSJack F Vogel };
188661ae650dSJack F Vogel 
1887f247dc25SJack F Vogel I40E_CHECK_STRUCT_LEN(0x20, i40e_aqc_query_switching_comp_bw_config_resp);
1888f247dc25SJack F Vogel 
188961ae650dSJack F Vogel /* Suspend/resume port TX traffic
189061ae650dSJack F Vogel  * (direct 0x041B and 0x041C) uses the generic SEID struct
189161ae650dSJack F Vogel  */
189261ae650dSJack F Vogel 
189361ae650dSJack F Vogel /* Configure partition BW
189461ae650dSJack F Vogel  * (indirect 0x041D)
189561ae650dSJack F Vogel  */
189661ae650dSJack F Vogel struct i40e_aqc_configure_partition_bw_data {
189761ae650dSJack F Vogel 	__le16	pf_valid_bits;
189861ae650dSJack F Vogel 	u8	min_bw[16];      /* guaranteed bandwidth */
189961ae650dSJack F Vogel 	u8	max_bw[16];      /* bandwidth limit */
190061ae650dSJack F Vogel };
190161ae650dSJack F Vogel 
1902f247dc25SJack F Vogel I40E_CHECK_STRUCT_LEN(0x22, i40e_aqc_configure_partition_bw_data);
1903f247dc25SJack F Vogel 
190461ae650dSJack F Vogel /* Get and set the active HMC resource profile and status.
190561ae650dSJack F Vogel  * (direct 0x0500) and (direct 0x0501)
190661ae650dSJack F Vogel  */
190761ae650dSJack F Vogel struct i40e_aq_get_set_hmc_resource_profile {
190861ae650dSJack F Vogel 	u8	pm_profile;
190961ae650dSJack F Vogel 	u8	pe_vf_enabled;
191061ae650dSJack F Vogel 	u8	reserved[14];
191161ae650dSJack F Vogel };
191261ae650dSJack F Vogel 
191361ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aq_get_set_hmc_resource_profile);
191461ae650dSJack F Vogel 
191561ae650dSJack F Vogel enum i40e_aq_hmc_profile {
191661ae650dSJack F Vogel 	/* I40E_HMC_PROFILE_NO_CHANGE	= 0, reserved */
191761ae650dSJack F Vogel 	I40E_HMC_PROFILE_DEFAULT	= 1,
191861ae650dSJack F Vogel 	I40E_HMC_PROFILE_FAVOR_VF	= 2,
191961ae650dSJack F Vogel 	I40E_HMC_PROFILE_EQUAL		= 3,
192061ae650dSJack F Vogel };
192161ae650dSJack F Vogel 
192261ae650dSJack F Vogel /* Get PHY Abilities (indirect 0x0600) uses the generic indirect struct */
192361ae650dSJack F Vogel 
192461ae650dSJack F Vogel /* set in param0 for get phy abilities to report qualified modules */
192561ae650dSJack F Vogel #define I40E_AQ_PHY_REPORT_QUALIFIED_MODULES	0x0001
192661ae650dSJack F Vogel #define I40E_AQ_PHY_REPORT_INITIAL_VALUES	0x0002
192761ae650dSJack F Vogel 
192861ae650dSJack F Vogel enum i40e_aq_phy_type {
192961ae650dSJack F Vogel 	I40E_PHY_TYPE_SGMII			= 0x0,
193061ae650dSJack F Vogel 	I40E_PHY_TYPE_1000BASE_KX		= 0x1,
193161ae650dSJack F Vogel 	I40E_PHY_TYPE_10GBASE_KX4		= 0x2,
193261ae650dSJack F Vogel 	I40E_PHY_TYPE_10GBASE_KR		= 0x3,
193361ae650dSJack F Vogel 	I40E_PHY_TYPE_40GBASE_KR4		= 0x4,
193461ae650dSJack F Vogel 	I40E_PHY_TYPE_XAUI			= 0x5,
193561ae650dSJack F Vogel 	I40E_PHY_TYPE_XFI			= 0x6,
193661ae650dSJack F Vogel 	I40E_PHY_TYPE_SFI			= 0x7,
193761ae650dSJack F Vogel 	I40E_PHY_TYPE_XLAUI			= 0x8,
193861ae650dSJack F Vogel 	I40E_PHY_TYPE_XLPPI			= 0x9,
193961ae650dSJack F Vogel 	I40E_PHY_TYPE_40GBASE_CR4_CU		= 0xA,
194061ae650dSJack F Vogel 	I40E_PHY_TYPE_10GBASE_CR1_CU		= 0xB,
194161ae650dSJack F Vogel 	I40E_PHY_TYPE_10GBASE_AOC		= 0xC,
194261ae650dSJack F Vogel 	I40E_PHY_TYPE_40GBASE_AOC		= 0xD,
1943ceebc2f3SEric Joyner 	I40E_PHY_TYPE_UNRECOGNIZED		= 0xE,
1944ceebc2f3SEric Joyner 	I40E_PHY_TYPE_UNSUPPORTED		= 0xF,
194561ae650dSJack F Vogel 	I40E_PHY_TYPE_100BASE_TX		= 0x11,
194661ae650dSJack F Vogel 	I40E_PHY_TYPE_1000BASE_T		= 0x12,
194761ae650dSJack F Vogel 	I40E_PHY_TYPE_10GBASE_T			= 0x13,
194861ae650dSJack F Vogel 	I40E_PHY_TYPE_10GBASE_SR		= 0x14,
194961ae650dSJack F Vogel 	I40E_PHY_TYPE_10GBASE_LR		= 0x15,
195061ae650dSJack F Vogel 	I40E_PHY_TYPE_10GBASE_SFPP_CU		= 0x16,
195161ae650dSJack F Vogel 	I40E_PHY_TYPE_10GBASE_CR1		= 0x17,
195261ae650dSJack F Vogel 	I40E_PHY_TYPE_40GBASE_CR4		= 0x18,
195361ae650dSJack F Vogel 	I40E_PHY_TYPE_40GBASE_SR4		= 0x19,
195461ae650dSJack F Vogel 	I40E_PHY_TYPE_40GBASE_LR4		= 0x1A,
195561ae650dSJack F Vogel 	I40E_PHY_TYPE_1000BASE_SX		= 0x1B,
195661ae650dSJack F Vogel 	I40E_PHY_TYPE_1000BASE_LX		= 0x1C,
195761ae650dSJack F Vogel 	I40E_PHY_TYPE_1000BASE_T_OPTICAL	= 0x1D,
195861ae650dSJack F Vogel 	I40E_PHY_TYPE_20GBASE_KR2		= 0x1E,
19594294f337SSean Bruno 	I40E_PHY_TYPE_25GBASE_KR		= 0x1F,
19604294f337SSean Bruno 	I40E_PHY_TYPE_25GBASE_CR		= 0x20,
19614294f337SSean Bruno 	I40E_PHY_TYPE_25GBASE_SR		= 0x21,
19624294f337SSean Bruno 	I40E_PHY_TYPE_25GBASE_LR		= 0x22,
1963ceebc2f3SEric Joyner 	I40E_PHY_TYPE_25GBASE_AOC		= 0x23,
1964ceebc2f3SEric Joyner 	I40E_PHY_TYPE_25GBASE_ACC		= 0x24,
1965*abf77452SKrzysztof Galazka 	I40E_PHY_TYPE_2_5GBASE_T		= 0x26,
1966*abf77452SKrzysztof Galazka 	I40E_PHY_TYPE_5GBASE_T			= 0x27,
1967*abf77452SKrzysztof Galazka 	I40E_PHY_TYPE_2_5GBASE_T_LINK_STATUS	= 0x30,
1968*abf77452SKrzysztof Galazka 	I40E_PHY_TYPE_5GBASE_T_LINK_STATUS	= 0x31,
1969ceebc2f3SEric Joyner 	I40E_PHY_TYPE_MAX,
1970ceebc2f3SEric Joyner 	I40E_PHY_TYPE_NOT_SUPPORTED_HIGH_TEMP	= 0xFD,
1971ceebc2f3SEric Joyner 	I40E_PHY_TYPE_EMPTY			= 0xFE,
1972ceebc2f3SEric Joyner 	I40E_PHY_TYPE_DEFAULT			= 0xFF,
197361ae650dSJack F Vogel };
197461ae650dSJack F Vogel 
1975ceebc2f3SEric Joyner #define I40E_PHY_TYPES_BITMASK (BIT_ULL(I40E_PHY_TYPE_SGMII) | \
1976ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_1000BASE_KX) | \
1977ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_10GBASE_KX4) | \
1978ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_10GBASE_KR) | \
1979ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_40GBASE_KR4) | \
1980ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_XAUI) | \
1981ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_XFI) | \
1982ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_SFI) | \
1983ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_XLAUI) | \
1984ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_XLPPI) | \
1985ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_40GBASE_CR4_CU) | \
1986ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_10GBASE_CR1_CU) | \
1987ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_10GBASE_AOC) | \
1988ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_40GBASE_AOC) | \
1989ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_UNRECOGNIZED) | \
1990ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_UNSUPPORTED) | \
1991ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_100BASE_TX) | \
1992ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_1000BASE_T) | \
1993ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_10GBASE_T) | \
1994ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_10GBASE_SR) | \
1995ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_10GBASE_LR) | \
1996ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_10GBASE_SFPP_CU) | \
1997ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_10GBASE_CR1) | \
1998ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_40GBASE_CR4) | \
1999ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_40GBASE_SR4) | \
2000ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_40GBASE_LR4) | \
2001ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_1000BASE_SX) | \
2002ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_1000BASE_LX) | \
2003ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_1000BASE_T_OPTICAL) | \
2004ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_20GBASE_KR2) | \
2005ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_25GBASE_KR) | \
2006ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_25GBASE_CR) | \
2007ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_25GBASE_SR) | \
2008ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_25GBASE_LR) | \
2009ceebc2f3SEric Joyner 				BIT_ULL(I40E_PHY_TYPE_25GBASE_AOC) | \
20102984a8ddSEric Joyner 				BIT_ULL(I40E_PHY_TYPE_25GBASE_ACC) | \
20112984a8ddSEric Joyner 				BIT_ULL(I40E_PHY_TYPE_2_5GBASE_T) | \
20122984a8ddSEric Joyner 				BIT_ULL(I40E_PHY_TYPE_5GBASE_T))
2013ceebc2f3SEric Joyner 
20142984a8ddSEric Joyner #define I40E_LINK_SPEED_2_5GB_SHIFT	0x0
201561ae650dSJack F Vogel #define I40E_LINK_SPEED_100MB_SHIFT	0x1
201661ae650dSJack F Vogel #define I40E_LINK_SPEED_1000MB_SHIFT	0x2
201761ae650dSJack F Vogel #define I40E_LINK_SPEED_10GB_SHIFT	0x3
201861ae650dSJack F Vogel #define I40E_LINK_SPEED_40GB_SHIFT	0x4
201961ae650dSJack F Vogel #define I40E_LINK_SPEED_20GB_SHIFT	0x5
20204294f337SSean Bruno #define I40E_LINK_SPEED_25GB_SHIFT	0x6
20212984a8ddSEric Joyner #define I40E_LINK_SPEED_5GB_SHIFT	0x7
202261ae650dSJack F Vogel 
202361ae650dSJack F Vogel enum i40e_aq_link_speed {
202461ae650dSJack F Vogel 	I40E_LINK_SPEED_UNKNOWN	= 0,
202561ae650dSJack F Vogel 	I40E_LINK_SPEED_100MB	= (1 << I40E_LINK_SPEED_100MB_SHIFT),
202661ae650dSJack F Vogel 	I40E_LINK_SPEED_1GB	= (1 << I40E_LINK_SPEED_1000MB_SHIFT),
20272984a8ddSEric Joyner 	I40E_LINK_SPEED_2_5GB	= (1 << I40E_LINK_SPEED_2_5GB_SHIFT),
20282984a8ddSEric Joyner 	I40E_LINK_SPEED_5GB	= (1 << I40E_LINK_SPEED_5GB_SHIFT),
202961ae650dSJack F Vogel 	I40E_LINK_SPEED_10GB	= (1 << I40E_LINK_SPEED_10GB_SHIFT),
203061ae650dSJack F Vogel 	I40E_LINK_SPEED_40GB	= (1 << I40E_LINK_SPEED_40GB_SHIFT),
20314294f337SSean Bruno 	I40E_LINK_SPEED_20GB	= (1 << I40E_LINK_SPEED_20GB_SHIFT),
20324294f337SSean Bruno 	I40E_LINK_SPEED_25GB	= (1 << I40E_LINK_SPEED_25GB_SHIFT),
203361ae650dSJack F Vogel };
203461ae650dSJack F Vogel 
203561ae650dSJack F Vogel struct i40e_aqc_module_desc {
203661ae650dSJack F Vogel 	u8 oui[3];
203761ae650dSJack F Vogel 	u8 reserved1;
203861ae650dSJack F Vogel 	u8 part_number[16];
203961ae650dSJack F Vogel 	u8 revision[4];
204061ae650dSJack F Vogel 	u8 reserved2[8];
204161ae650dSJack F Vogel };
204261ae650dSJack F Vogel 
2043f247dc25SJack F Vogel I40E_CHECK_STRUCT_LEN(0x20, i40e_aqc_module_desc);
2044f247dc25SJack F Vogel 
204561ae650dSJack F Vogel struct i40e_aq_get_phy_abilities_resp {
204661ae650dSJack F Vogel 	__le32	phy_type;       /* bitmap using the above enum for offsets */
204761ae650dSJack F Vogel 	u8	link_speed;     /* bitmap using the above enum bit patterns */
204861ae650dSJack F Vogel 	u8	abilities;
204961ae650dSJack F Vogel #define I40E_AQ_PHY_FLAG_PAUSE_TX	0x01
205061ae650dSJack F Vogel #define I40E_AQ_PHY_FLAG_PAUSE_RX	0x02
205161ae650dSJack F Vogel #define I40E_AQ_PHY_FLAG_LOW_POWER	0x04
205261ae650dSJack F Vogel #define I40E_AQ_PHY_LINK_ENABLED	0x08
205361ae650dSJack F Vogel #define I40E_AQ_PHY_AN_ENABLED		0x10
205461ae650dSJack F Vogel #define I40E_AQ_PHY_FLAG_MODULE_QUAL	0x20
2055cb6b8299SEric Joyner #define I40E_AQ_PHY_FEC_ABILITY_KR	0x40
2056cb6b8299SEric Joyner #define I40E_AQ_PHY_FEC_ABILITY_RS	0x80
205761ae650dSJack F Vogel 	__le16	eee_capability;
2058b4a7ce06SEric Joyner #define I40E_AQ_EEE_AUTO		0x0001
205961ae650dSJack F Vogel #define I40E_AQ_EEE_100BASE_TX		0x0002
206061ae650dSJack F Vogel #define I40E_AQ_EEE_1000BASE_T		0x0004
206161ae650dSJack F Vogel #define I40E_AQ_EEE_10GBASE_T		0x0008
206261ae650dSJack F Vogel #define I40E_AQ_EEE_1000BASE_KX		0x0010
206361ae650dSJack F Vogel #define I40E_AQ_EEE_10GBASE_KX4		0x0020
206461ae650dSJack F Vogel #define I40E_AQ_EEE_10GBASE_KR		0x0040
20652984a8ddSEric Joyner #define I40E_AQ_EEE_2_5GBASE_T		0x0100
20662984a8ddSEric Joyner #define I40E_AQ_EEE_5GBASE_T		0x0200
206761ae650dSJack F Vogel 	__le32	eeer_val;
206861ae650dSJack F Vogel 	u8	d3_lpan;
206961ae650dSJack F Vogel #define I40E_AQ_SET_PHY_D3_LPAN_ENA	0x01
20704294f337SSean Bruno 	u8	phy_type_ext;
2071cb6b8299SEric Joyner #define I40E_AQ_PHY_TYPE_EXT_25G_KR	0x01
2072cb6b8299SEric Joyner #define I40E_AQ_PHY_TYPE_EXT_25G_CR	0x02
20734294f337SSean Bruno #define I40E_AQ_PHY_TYPE_EXT_25G_SR	0x04
20744294f337SSean Bruno #define I40E_AQ_PHY_TYPE_EXT_25G_LR	0x08
2075ceebc2f3SEric Joyner #define I40E_AQ_PHY_TYPE_EXT_25G_AOC	0x10
2076ceebc2f3SEric Joyner #define I40E_AQ_PHY_TYPE_EXT_25G_ACC	0x20
20772984a8ddSEric Joyner #define I40E_AQ_PHY_TYPE_EXT_2_5GBASE_T	0x40
20782984a8ddSEric Joyner #define I40E_AQ_PHY_TYPE_EXT_5GBASE_T	0x80
2079cb6b8299SEric Joyner 	u8	fec_cfg_curr_mod_ext_info;
2080cb6b8299SEric Joyner #define I40E_AQ_ENABLE_FEC_KR		0x01
2081cb6b8299SEric Joyner #define I40E_AQ_ENABLE_FEC_RS		0x02
2082cb6b8299SEric Joyner #define I40E_AQ_REQUEST_FEC_KR		0x04
2083cb6b8299SEric Joyner #define I40E_AQ_REQUEST_FEC_RS		0x08
2084cb6b8299SEric Joyner #define I40E_AQ_ENABLE_FEC_AUTO		0x10
2085cb6b8299SEric Joyner #define I40E_AQ_FEC
2086cb6b8299SEric Joyner #define I40E_AQ_MODULE_TYPE_EXT_MASK	0xE0
2087cb6b8299SEric Joyner #define I40E_AQ_MODULE_TYPE_EXT_SHIFT	5
2088cb6b8299SEric Joyner 
20894294f337SSean Bruno 	u8	ext_comp_code;
209061ae650dSJack F Vogel 	u8	phy_id[4];
209161ae650dSJack F Vogel 	u8	module_type[3];
209261ae650dSJack F Vogel 	u8	qualified_module_count;
209361ae650dSJack F Vogel #define I40E_AQ_PHY_MAX_QMS		16
209461ae650dSJack F Vogel 	struct i40e_aqc_module_desc	qualified_module[I40E_AQ_PHY_MAX_QMS];
209561ae650dSJack F Vogel };
209661ae650dSJack F Vogel 
2097f247dc25SJack F Vogel I40E_CHECK_STRUCT_LEN(0x218, i40e_aq_get_phy_abilities_resp);
2098f247dc25SJack F Vogel 
209961ae650dSJack F Vogel /* Set PHY Config (direct 0x0601) */
210061ae650dSJack F Vogel struct i40e_aq_set_phy_config { /* same bits as above in all */
210161ae650dSJack F Vogel 	__le32	phy_type;
210261ae650dSJack F Vogel 	u8	link_speed;
210361ae650dSJack F Vogel 	u8	abilities;
210461ae650dSJack F Vogel /* bits 0-2 use the values from get_phy_abilities_resp */
210561ae650dSJack F Vogel #define I40E_AQ_PHY_ENABLE_LINK		0x08
210661ae650dSJack F Vogel #define I40E_AQ_PHY_ENABLE_AN		0x10
210761ae650dSJack F Vogel #define I40E_AQ_PHY_ENABLE_ATOMIC_LINK	0x20
210861ae650dSJack F Vogel 	__le16	eee_capability;
210961ae650dSJack F Vogel 	__le32	eeer;
211061ae650dSJack F Vogel 	u8	low_power_ctrl;
21114294f337SSean Bruno 	u8	phy_type_ext;
2112cb6b8299SEric Joyner 	u8	fec_config;
2113cb6b8299SEric Joyner #define I40E_AQ_SET_FEC_ABILITY_KR	BIT(0)
2114cb6b8299SEric Joyner #define I40E_AQ_SET_FEC_ABILITY_RS	BIT(1)
2115cb6b8299SEric Joyner #define I40E_AQ_SET_FEC_REQUEST_KR	BIT(2)
2116cb6b8299SEric Joyner #define I40E_AQ_SET_FEC_REQUEST_RS	BIT(3)
2117cb6b8299SEric Joyner #define I40E_AQ_SET_FEC_AUTO		BIT(4)
2118cb6b8299SEric Joyner #define I40E_AQ_PHY_FEC_CONFIG_SHIFT	0x0
2119cb6b8299SEric Joyner #define I40E_AQ_PHY_FEC_CONFIG_MASK	(0x1F << I40E_AQ_PHY_FEC_CONFIG_SHIFT)
2120cb6b8299SEric Joyner 	u8	reserved;
212161ae650dSJack F Vogel };
212261ae650dSJack F Vogel 
212361ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aq_set_phy_config);
212461ae650dSJack F Vogel 
212561ae650dSJack F Vogel /* Set MAC Config command data structure (direct 0x0603) */
212661ae650dSJack F Vogel struct i40e_aq_set_mac_config {
212761ae650dSJack F Vogel 	__le16	max_frame_size;
212861ae650dSJack F Vogel 	u8	params;
212961ae650dSJack F Vogel #define I40E_AQ_SET_MAC_CONFIG_CRC_EN			0x04
213061ae650dSJack F Vogel #define I40E_AQ_SET_MAC_CONFIG_PACING_MASK		0x78
213161ae650dSJack F Vogel #define I40E_AQ_SET_MAC_CONFIG_PACING_SHIFT		3
213261ae650dSJack F Vogel #define I40E_AQ_SET_MAC_CONFIG_PACING_NONE		0x0
213361ae650dSJack F Vogel #define I40E_AQ_SET_MAC_CONFIG_PACING_1B_13TX		0xF
213461ae650dSJack F Vogel #define I40E_AQ_SET_MAC_CONFIG_PACING_1DW_9TX		0x9
213561ae650dSJack F Vogel #define I40E_AQ_SET_MAC_CONFIG_PACING_1DW_4TX		0x8
213661ae650dSJack F Vogel #define I40E_AQ_SET_MAC_CONFIG_PACING_3DW_7TX		0x7
213761ae650dSJack F Vogel #define I40E_AQ_SET_MAC_CONFIG_PACING_2DW_3TX		0x6
213861ae650dSJack F Vogel #define I40E_AQ_SET_MAC_CONFIG_PACING_1DW_1TX		0x5
213961ae650dSJack F Vogel #define I40E_AQ_SET_MAC_CONFIG_PACING_3DW_2TX		0x4
214061ae650dSJack F Vogel #define I40E_AQ_SET_MAC_CONFIG_PACING_7DW_3TX		0x3
214161ae650dSJack F Vogel #define I40E_AQ_SET_MAC_CONFIG_PACING_4DW_1TX		0x2
214261ae650dSJack F Vogel #define I40E_AQ_SET_MAC_CONFIG_PACING_9DW_1TX		0x1
2143b4a7ce06SEric Joyner #define I40E_AQ_SET_MAC_CONFIG_DROP_BLOCKING_PACKET_EN	0x80
214461ae650dSJack F Vogel 	u8	tx_timer_priority; /* bitmap */
214561ae650dSJack F Vogel 	__le16	tx_timer_value;
214661ae650dSJack F Vogel 	__le16	fc_refresh_threshold;
214761ae650dSJack F Vogel 	u8	reserved[8];
214861ae650dSJack F Vogel };
214961ae650dSJack F Vogel 
215061ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aq_set_mac_config);
215161ae650dSJack F Vogel 
215261ae650dSJack F Vogel /* Restart Auto-Negotiation (direct 0x605) */
215361ae650dSJack F Vogel struct i40e_aqc_set_link_restart_an {
215461ae650dSJack F Vogel 	u8	command;
215561ae650dSJack F Vogel #define I40E_AQ_PHY_RESTART_AN	0x02
215661ae650dSJack F Vogel #define I40E_AQ_PHY_LINK_ENABLE	0x04
215761ae650dSJack F Vogel 	u8	reserved[15];
215861ae650dSJack F Vogel };
215961ae650dSJack F Vogel 
216061ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_set_link_restart_an);
216161ae650dSJack F Vogel 
216261ae650dSJack F Vogel /* Get Link Status cmd & response data structure (direct 0x0607) */
216361ae650dSJack F Vogel struct i40e_aqc_get_link_status {
216461ae650dSJack F Vogel 	__le16	command_flags; /* only field set on command */
216561ae650dSJack F Vogel #define I40E_AQ_LSE_MASK		0x3
216661ae650dSJack F Vogel #define I40E_AQ_LSE_NOP			0x0
216761ae650dSJack F Vogel #define I40E_AQ_LSE_DISABLE		0x2
216861ae650dSJack F Vogel #define I40E_AQ_LSE_ENABLE		0x3
216961ae650dSJack F Vogel /* only response uses this flag */
217061ae650dSJack F Vogel #define I40E_AQ_LSE_IS_ENABLED		0x1
217161ae650dSJack F Vogel 	u8	phy_type;    /* i40e_aq_phy_type   */
217261ae650dSJack F Vogel 	u8	link_speed;  /* i40e_aq_link_speed */
217361ae650dSJack F Vogel 	u8	link_info;
2174be771cdaSJack F Vogel #define I40E_AQ_LINK_UP			0x01    /* obsolete */
2175be771cdaSJack F Vogel #define I40E_AQ_LINK_UP_FUNCTION	0x01
217661ae650dSJack F Vogel #define I40E_AQ_LINK_FAULT		0x02
217761ae650dSJack F Vogel #define I40E_AQ_LINK_FAULT_TX		0x04
217861ae650dSJack F Vogel #define I40E_AQ_LINK_FAULT_RX		0x08
217961ae650dSJack F Vogel #define I40E_AQ_LINK_FAULT_REMOTE	0x10
2180be771cdaSJack F Vogel #define I40E_AQ_LINK_UP_PORT		0x20
218161ae650dSJack F Vogel #define I40E_AQ_MEDIA_AVAILABLE		0x40
218261ae650dSJack F Vogel #define I40E_AQ_SIGNAL_DETECT		0x80
218361ae650dSJack F Vogel 	u8	an_info;
218461ae650dSJack F Vogel #define I40E_AQ_AN_COMPLETED		0x01
218561ae650dSJack F Vogel #define I40E_AQ_LP_AN_ABILITY		0x02
218661ae650dSJack F Vogel #define I40E_AQ_PD_FAULT		0x04
218761ae650dSJack F Vogel #define I40E_AQ_FEC_EN			0x08
218861ae650dSJack F Vogel #define I40E_AQ_PHY_LOW_POWER		0x10
218961ae650dSJack F Vogel #define I40E_AQ_LINK_PAUSE_TX		0x20
219061ae650dSJack F Vogel #define I40E_AQ_LINK_PAUSE_RX		0x40
219161ae650dSJack F Vogel #define I40E_AQ_QUALIFIED_MODULE	0x80
219261ae650dSJack F Vogel 	u8	ext_info;
219361ae650dSJack F Vogel #define I40E_AQ_LINK_PHY_TEMP_ALARM	0x01
219461ae650dSJack F Vogel #define I40E_AQ_LINK_XCESSIVE_ERRORS	0x02
219561ae650dSJack F Vogel #define I40E_AQ_LINK_TX_SHIFT		0x02
219661ae650dSJack F Vogel #define I40E_AQ_LINK_TX_MASK		(0x03 << I40E_AQ_LINK_TX_SHIFT)
219761ae650dSJack F Vogel #define I40E_AQ_LINK_TX_ACTIVE		0x00
219861ae650dSJack F Vogel #define I40E_AQ_LINK_TX_DRAINED		0x01
219961ae650dSJack F Vogel #define I40E_AQ_LINK_TX_FLUSHED		0x03
220061ae650dSJack F Vogel #define I40E_AQ_LINK_FORCED_40G		0x10
22014294f337SSean Bruno /* 25G Error Codes */
22024294f337SSean Bruno #define I40E_AQ_25G_NO_ERR		0X00
22034294f337SSean Bruno #define I40E_AQ_25G_NOT_PRESENT		0X01
22044294f337SSean Bruno #define I40E_AQ_25G_NVM_CRC_ERR		0X02
22054294f337SSean Bruno #define I40E_AQ_25G_SBUS_UCODE_ERR	0X03
22064294f337SSean Bruno #define I40E_AQ_25G_SERDES_UCODE_ERR	0X04
22074294f337SSean Bruno #define I40E_AQ_25G_NIMB_UCODE_ERR	0X05
220861ae650dSJack F Vogel 	u8	loopback; /* use defines from i40e_aqc_set_lb_mode */
2209ceebc2f3SEric Joyner /* Since firmware API 1.7 loopback field keeps power class info as well */
2210ceebc2f3SEric Joyner #define I40E_AQ_LOOPBACK_MASK		0x07
2211ceebc2f3SEric Joyner #define I40E_AQ_PWR_CLASS_SHIFT_LB	6
2212ceebc2f3SEric Joyner #define I40E_AQ_PWR_CLASS_MASK_LB	(0x03 << I40E_AQ_PWR_CLASS_SHIFT_LB)
221361ae650dSJack F Vogel 	__le16	max_frame_size;
221461ae650dSJack F Vogel 	u8	config;
2215cb6b8299SEric Joyner #define I40E_AQ_CONFIG_FEC_KR_ENA	0x01
2216cb6b8299SEric Joyner #define I40E_AQ_CONFIG_FEC_RS_ENA	0x02
221761ae650dSJack F Vogel #define I40E_AQ_CONFIG_CRC_ENA		0x04
221861ae650dSJack F Vogel #define I40E_AQ_CONFIG_PACING_MASK	0x78
2219ceebc2f3SEric Joyner 	union {
2220ceebc2f3SEric Joyner 		struct {
22214294f337SSean Bruno 			u8	power_desc;
2222fdb6f38aSEric Joyner #define I40E_AQ_LINK_POWER_CLASS_1	0x00
2223fdb6f38aSEric Joyner #define I40E_AQ_LINK_POWER_CLASS_2	0x01
2224fdb6f38aSEric Joyner #define I40E_AQ_LINK_POWER_CLASS_3	0x02
2225fdb6f38aSEric Joyner #define I40E_AQ_LINK_POWER_CLASS_4	0x03
22264294f337SSean Bruno #define I40E_AQ_PWR_CLASS_MASK		0x03
2227fdb6f38aSEric Joyner 			u8	reserved[4];
222861ae650dSJack F Vogel 		};
2229ceebc2f3SEric Joyner 		struct {
2230ceebc2f3SEric Joyner 			u8	link_type[4];
2231ceebc2f3SEric Joyner 			u8	link_type_ext;
2232ceebc2f3SEric Joyner 		};
2233ceebc2f3SEric Joyner 	};
2234ceebc2f3SEric Joyner };
223561ae650dSJack F Vogel 
223661ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_get_link_status);
223761ae650dSJack F Vogel 
223861ae650dSJack F Vogel /* Set event mask command (direct 0x613) */
223961ae650dSJack F Vogel struct i40e_aqc_set_phy_int_mask {
224061ae650dSJack F Vogel 	u8	reserved[8];
224161ae650dSJack F Vogel 	__le16	event_mask;
224261ae650dSJack F Vogel #define I40E_AQ_EVENT_LINK_UPDOWN	0x0002
224361ae650dSJack F Vogel #define I40E_AQ_EVENT_MEDIA_NA		0x0004
224461ae650dSJack F Vogel #define I40E_AQ_EVENT_LINK_FAULT	0x0008
224561ae650dSJack F Vogel #define I40E_AQ_EVENT_PHY_TEMP_ALARM	0x0010
224661ae650dSJack F Vogel #define I40E_AQ_EVENT_EXCESSIVE_ERRORS	0x0020
224761ae650dSJack F Vogel #define I40E_AQ_EVENT_SIGNAL_DETECT	0x0040
224861ae650dSJack F Vogel #define I40E_AQ_EVENT_AN_COMPLETED	0x0080
224961ae650dSJack F Vogel #define I40E_AQ_EVENT_MODULE_QUAL_FAIL	0x0100
225061ae650dSJack F Vogel #define I40E_AQ_EVENT_PORT_TX_SUSPENDED	0x0200
225161ae650dSJack F Vogel 	u8	reserved1[6];
225261ae650dSJack F Vogel };
225361ae650dSJack F Vogel 
225461ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_set_phy_int_mask);
225561ae650dSJack F Vogel 
225661ae650dSJack F Vogel /* Get Local AN advt register (direct 0x0614)
225761ae650dSJack F Vogel  * Set Local AN advt register (direct 0x0615)
225861ae650dSJack F Vogel  * Get Link Partner AN advt register (direct 0x0616)
225961ae650dSJack F Vogel  */
226061ae650dSJack F Vogel struct i40e_aqc_an_advt_reg {
226161ae650dSJack F Vogel 	__le32	local_an_reg0;
226261ae650dSJack F Vogel 	__le16	local_an_reg1;
226361ae650dSJack F Vogel 	u8	reserved[10];
226461ae650dSJack F Vogel };
226561ae650dSJack F Vogel 
226661ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_an_advt_reg);
226761ae650dSJack F Vogel 
226861ae650dSJack F Vogel /* Set Loopback mode (0x0618) */
226961ae650dSJack F Vogel struct i40e_aqc_set_lb_mode {
2270ceebc2f3SEric Joyner 	u8	lb_level;
2271ceebc2f3SEric Joyner #define I40E_AQ_LB_NONE	0
2272ceebc2f3SEric Joyner #define I40E_AQ_LB_MAC	1
2273ceebc2f3SEric Joyner #define I40E_AQ_LB_SERDES	2
2274ceebc2f3SEric Joyner #define I40E_AQ_LB_PHY_INT	3
2275ceebc2f3SEric Joyner #define I40E_AQ_LB_PHY_EXT	4
2276b4a7ce06SEric Joyner #define I40E_AQ_LB_BASE_T_PCS	5
2277b4a7ce06SEric Joyner #define I40E_AQ_LB_BASE_T_EXT	6
227861ae650dSJack F Vogel #define I40E_AQ_LB_PHY_LOCAL	0x01
227961ae650dSJack F Vogel #define I40E_AQ_LB_PHY_REMOTE	0x02
228061ae650dSJack F Vogel #define I40E_AQ_LB_MAC_LOCAL	0x04
2281ceebc2f3SEric Joyner 	u8	lb_type;
2282ceebc2f3SEric Joyner #define I40E_AQ_LB_LOCAL	0
2283ceebc2f3SEric Joyner #define I40E_AQ_LB_FAR	0x01
2284ceebc2f3SEric Joyner 	u8	speed;
2285ceebc2f3SEric Joyner #define I40E_AQ_LB_SPEED_NONE	0
2286ceebc2f3SEric Joyner #define I40E_AQ_LB_SPEED_1G	1
2287ceebc2f3SEric Joyner #define I40E_AQ_LB_SPEED_10G	2
2288ceebc2f3SEric Joyner #define I40E_AQ_LB_SPEED_40G	3
2289ceebc2f3SEric Joyner #define I40E_AQ_LB_SPEED_20G	4
2290ceebc2f3SEric Joyner 	u8	force_speed;
2291ceebc2f3SEric Joyner 	u8	reserved[12];
229261ae650dSJack F Vogel };
229361ae650dSJack F Vogel 
229461ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_set_lb_mode);
229561ae650dSJack F Vogel 
229661ae650dSJack F Vogel /* Set PHY Debug command (0x0622) */
229761ae650dSJack F Vogel struct i40e_aqc_set_phy_debug {
229861ae650dSJack F Vogel 	u8	command_flags;
229961ae650dSJack F Vogel #define I40E_AQ_PHY_DEBUG_RESET_INTERNAL	0x02
230061ae650dSJack F Vogel #define I40E_AQ_PHY_DEBUG_RESET_EXTERNAL_SHIFT	2
230161ae650dSJack F Vogel #define I40E_AQ_PHY_DEBUG_RESET_EXTERNAL_MASK	(0x03 << \
230261ae650dSJack F Vogel 					I40E_AQ_PHY_DEBUG_RESET_EXTERNAL_SHIFT)
230361ae650dSJack F Vogel #define I40E_AQ_PHY_DEBUG_RESET_EXTERNAL_NONE	0x00
230461ae650dSJack F Vogel #define I40E_AQ_PHY_DEBUG_RESET_EXTERNAL_HARD	0x01
230561ae650dSJack F Vogel #define I40E_AQ_PHY_DEBUG_RESET_EXTERNAL_SOFT	0x02
23064294f337SSean Bruno /* Disable link manageability on a single port */
230761ae650dSJack F Vogel #define I40E_AQ_PHY_DEBUG_DISABLE_LINK_FW	0x10
23084294f337SSean Bruno /* Disable link manageability on all ports needs both bits 4 and 5 */
23094294f337SSean Bruno #define I40E_AQ_PHY_DEBUG_DISABLE_ALL_LINK_FW	0x20
231061ae650dSJack F Vogel 	u8	reserved[15];
231161ae650dSJack F Vogel };
231261ae650dSJack F Vogel 
231361ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_set_phy_debug);
231461ae650dSJack F Vogel 
231561ae650dSJack F Vogel enum i40e_aq_phy_reg_type {
231661ae650dSJack F Vogel 	I40E_AQC_PHY_REG_INTERNAL	= 0x1,
231761ae650dSJack F Vogel 	I40E_AQC_PHY_REG_EXERNAL_BASET	= 0x2,
231861ae650dSJack F Vogel 	I40E_AQC_PHY_REG_EXERNAL_MODULE	= 0x3
231961ae650dSJack F Vogel };
232061ae650dSJack F Vogel 
23212984a8ddSEric Joyner #pragma pack(1)
2322fdb6f38aSEric Joyner /* Run PHY Activity (0x0626) */
2323fdb6f38aSEric Joyner struct i40e_aqc_run_phy_activity {
23242984a8ddSEric Joyner 	u8	cmd_flags;
2325fdb6f38aSEric Joyner 	__le16	activity_id;
23262984a8ddSEric Joyner #define I40E_AQ_RUN_PHY_ACT_ID_USR_DFND			0x10
23272984a8ddSEric Joyner 	u8	reserved;
23282984a8ddSEric Joyner 	union {
23292984a8ddSEric Joyner 		struct {
23302984a8ddSEric Joyner 			__le32  dnl_opcode;
23312984a8ddSEric Joyner #define I40E_AQ_RUN_PHY_ACT_DNL_OPCODE_GET_EEE_STAT_DUR	0x801a
23322984a8ddSEric Joyner #define I40E_AQ_RUN_PHY_ACT_DNL_OPCODE_GET_EEE_STAT	0x801b
23332984a8ddSEric Joyner #define I40E_AQ_RUN_PHY_ACT_DNL_OPCODE_GET_EEE_DUR	0x1801b
2334fdb6f38aSEric Joyner 			__le32  data;
2335fdb6f38aSEric Joyner 			u8	reserved2[4];
23362984a8ddSEric Joyner 		} cmd;
23372984a8ddSEric Joyner 		struct {
23382984a8ddSEric Joyner 			__le32	cmd_status;
23392984a8ddSEric Joyner #define I40E_AQ_RUN_PHY_ACT_CMD_STAT_SUCC		0x4
23402984a8ddSEric Joyner #define I40E_AQ_RUN_PHY_ACT_CMD_STAT_MASK		0xFFFF
23412984a8ddSEric Joyner 			__le32	data0;
23422984a8ddSEric Joyner 			__le32	data1;
23432984a8ddSEric Joyner 		} resp;
23442984a8ddSEric Joyner 	} params;
2345fdb6f38aSEric Joyner };
23462984a8ddSEric Joyner #pragma pack()
2347fdb6f38aSEric Joyner 
2348fdb6f38aSEric Joyner I40E_CHECK_CMD_LENGTH(i40e_aqc_run_phy_activity);
2349fdb6f38aSEric Joyner 
2350ceebc2f3SEric Joyner /* Set PHY Register command (0x0628) */
2351ceebc2f3SEric Joyner /* Get PHY Register command (0x0629) */
2352ceebc2f3SEric Joyner struct i40e_aqc_phy_register_access {
2353ceebc2f3SEric Joyner 	u8	phy_interface;
2354ceebc2f3SEric Joyner #define I40E_AQ_PHY_REG_ACCESS_INTERNAL	0
2355ceebc2f3SEric Joyner #define I40E_AQ_PHY_REG_ACCESS_EXTERNAL	1
2356ceebc2f3SEric Joyner #define I40E_AQ_PHY_REG_ACCESS_EXTERNAL_MODULE	2
2357ceebc2f3SEric Joyner 	u8	dev_addres;
2358b4a7ce06SEric Joyner 	u8	cmd_flags;
2359b4a7ce06SEric Joyner #define I40E_AQ_PHY_REG_ACCESS_DONT_CHANGE_QSFP_PAGE	0x01
2360b4a7ce06SEric Joyner #define I40E_AQ_PHY_REG_ACCESS_SET_MDIO_IF_NUMBER	0x02
2361b4a7ce06SEric Joyner #define I40E_AQ_PHY_REG_ACCESS_MDIO_IF_NUMBER_SHIFT	2
2362b4a7ce06SEric Joyner #define I40E_AQ_PHY_REG_ACCESS_MDIO_IF_NUMBER_MASK	(0x3 << \
2363b4a7ce06SEric Joyner 		I40E_AQ_PHY_REG_ACCESS_MDIO_IF_NUMBER_SHIFT)
2364b4a7ce06SEric Joyner 	u8	reserved1;
2365ceebc2f3SEric Joyner 	__le32	reg_address;
2366ceebc2f3SEric Joyner 	__le32	reg_value;
2367ceebc2f3SEric Joyner 	u8	reserved2[4];
2368ceebc2f3SEric Joyner };
2369ceebc2f3SEric Joyner 
2370ceebc2f3SEric Joyner I40E_CHECK_CMD_LENGTH(i40e_aqc_phy_register_access);
2371ceebc2f3SEric Joyner 
237261ae650dSJack F Vogel /* NVM Read command (indirect 0x0701)
237361ae650dSJack F Vogel  * NVM Erase commands (direct 0x0702)
237461ae650dSJack F Vogel  * NVM Update commands (indirect 0x0703)
237561ae650dSJack F Vogel  */
237661ae650dSJack F Vogel struct i40e_aqc_nvm_update {
237761ae650dSJack F Vogel 	u8	command_flags;
237861ae650dSJack F Vogel #define I40E_AQ_NVM_LAST_CMD			0x01
2379b4a7ce06SEric Joyner #define I40E_AQ_NVM_REARRANGE_TO_FLAT		0x20
2380b4a7ce06SEric Joyner #define I40E_AQ_NVM_REARRANGE_TO_STRUCT		0x40
238161ae650dSJack F Vogel #define I40E_AQ_NVM_FLASH_ONLY			0x80
2382ceebc2f3SEric Joyner #define I40E_AQ_NVM_PRESERVATION_FLAGS_SHIFT	1
2383ceebc2f3SEric Joyner #define I40E_AQ_NVM_PRESERVATION_FLAGS_MASK	0x03
2384ceebc2f3SEric Joyner #define I40E_AQ_NVM_PRESERVATION_FLAGS_SELECTED	0x03
2385ceebc2f3SEric Joyner #define I40E_AQ_NVM_PRESERVATION_FLAGS_ALL	0x01
238661ae650dSJack F Vogel 	u8	module_pointer;
238761ae650dSJack F Vogel 	__le16	length;
238861ae650dSJack F Vogel 	__le32	offset;
238961ae650dSJack F Vogel 	__le32	addr_high;
239061ae650dSJack F Vogel 	__le32	addr_low;
239161ae650dSJack F Vogel };
239261ae650dSJack F Vogel 
239361ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_nvm_update);
239461ae650dSJack F Vogel 
239561ae650dSJack F Vogel /* NVM Config Read (indirect 0x0704) */
239661ae650dSJack F Vogel struct i40e_aqc_nvm_config_read {
239761ae650dSJack F Vogel 	__le16	cmd_flags;
2398f247dc25SJack F Vogel #define I40E_AQ_ANVM_SINGLE_OR_MULTIPLE_FEATURES_MASK	1
2399f247dc25SJack F Vogel #define I40E_AQ_ANVM_READ_SINGLE_FEATURE		0
2400f247dc25SJack F Vogel #define I40E_AQ_ANVM_READ_MULTIPLE_FEATURES		1
240161ae650dSJack F Vogel 	__le16	element_count;
240261ae650dSJack F Vogel 	__le16	element_id;	/* Feature/field ID */
2403f247dc25SJack F Vogel 	__le16	element_id_msw;	/* MSWord of field ID */
240461ae650dSJack F Vogel 	__le32	address_high;
240561ae650dSJack F Vogel 	__le32	address_low;
240661ae650dSJack F Vogel };
240761ae650dSJack F Vogel 
240861ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_nvm_config_read);
240961ae650dSJack F Vogel 
241061ae650dSJack F Vogel /* NVM Config Write (indirect 0x0705) */
241161ae650dSJack F Vogel struct i40e_aqc_nvm_config_write {
241261ae650dSJack F Vogel 	__le16	cmd_flags;
241361ae650dSJack F Vogel 	__le16	element_count;
241461ae650dSJack F Vogel 	u8	reserved[4];
241561ae650dSJack F Vogel 	__le32	address_high;
241661ae650dSJack F Vogel 	__le32	address_low;
241761ae650dSJack F Vogel };
241861ae650dSJack F Vogel 
241961ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_nvm_config_write);
242061ae650dSJack F Vogel 
2421f247dc25SJack F Vogel /* Used for 0x0704 as well as for 0x0705 commands */
2422f247dc25SJack F Vogel #define I40E_AQ_ANVM_FEATURE_OR_IMMEDIATE_SHIFT		1
2423d4683565SEric Joyner #define I40E_AQ_ANVM_FEATURE_OR_IMMEDIATE_MASK \
2424d4683565SEric Joyner 				(1 << I40E_AQ_ANVM_FEATURE_OR_IMMEDIATE_SHIFT)
2425f247dc25SJack F Vogel #define I40E_AQ_ANVM_FEATURE		0
2426f247dc25SJack F Vogel #define I40E_AQ_ANVM_IMMEDIATE_FIELD	(1 << FEATURE_OR_IMMEDIATE_SHIFT)
242761ae650dSJack F Vogel struct i40e_aqc_nvm_config_data_feature {
242861ae650dSJack F Vogel 	__le16 feature_id;
2429f247dc25SJack F Vogel #define I40E_AQ_ANVM_FEATURE_OPTION_OEM_ONLY		0x01
2430f247dc25SJack F Vogel #define I40E_AQ_ANVM_FEATURE_OPTION_DWORD_MAP		0x08
2431f247dc25SJack F Vogel #define I40E_AQ_ANVM_FEATURE_OPTION_POR_CSR		0x10
243261ae650dSJack F Vogel 	__le16 feature_options;
243361ae650dSJack F Vogel 	__le16 feature_selection;
243461ae650dSJack F Vogel };
243561ae650dSJack F Vogel 
2436f247dc25SJack F Vogel I40E_CHECK_STRUCT_LEN(0x6, i40e_aqc_nvm_config_data_feature);
2437f247dc25SJack F Vogel 
2438*abf77452SKrzysztof Galazka /* NVM Update in Process (direct 0x0706) */
2439*abf77452SKrzysztof Galazka struct i40e_aqc_nvm_update_in_process {
2440*abf77452SKrzysztof Galazka 	u8	command;
2441*abf77452SKrzysztof Galazka #define I40E_AQ_UPDATE_FLOW_END			0x0
2442*abf77452SKrzysztof Galazka #define I40E_AQ_UPDATE_FLOW_START		0x1
2443*abf77452SKrzysztof Galazka 	u8	reserved[15];
2444*abf77452SKrzysztof Galazka };
2445*abf77452SKrzysztof Galazka 
2446*abf77452SKrzysztof Galazka I40E_CHECK_CMD_LENGTH(i40e_aqc_nvm_update_in_process);
2447*abf77452SKrzysztof Galazka 
244861ae650dSJack F Vogel struct i40e_aqc_nvm_config_data_immediate_field {
2449f247dc25SJack F Vogel 	__le32 field_id;
2450f247dc25SJack F Vogel 	__le32 field_value;
245161ae650dSJack F Vogel 	__le16 field_options;
2452f247dc25SJack F Vogel 	__le16 reserved;
245361ae650dSJack F Vogel };
245461ae650dSJack F Vogel 
2455f247dc25SJack F Vogel I40E_CHECK_STRUCT_LEN(0xc, i40e_aqc_nvm_config_data_immediate_field);
2456f247dc25SJack F Vogel 
2457*abf77452SKrzysztof Galazka /* Minimal Rollback Revision Update (direct 0x0707) */
2458*abf77452SKrzysztof Galazka struct i40e_aqc_rollback_revision_update {
2459*abf77452SKrzysztof Galazka 	u8	optin_mode; /* bool */
2460*abf77452SKrzysztof Galazka #define I40E_AQ_RREV_OPTIN_MODE			0x01
2461*abf77452SKrzysztof Galazka 	u8	module_selected;
2462*abf77452SKrzysztof Galazka #define I40E_AQ_RREV_MODULE_PCIE_ANALOG			0
2463*abf77452SKrzysztof Galazka #define I40E_AQ_RREV_MODULE_PHY_ANALOG			1
2464*abf77452SKrzysztof Galazka #define I40E_AQ_RREV_MODULE_OPTION_ROM			2
2465*abf77452SKrzysztof Galazka #define I40E_AQ_RREV_MODULE_EMP_IMAGE			3
2466*abf77452SKrzysztof Galazka #define I40E_AQ_RREV_MODULE_PE_IMAGE			4
2467*abf77452SKrzysztof Galazka #define I40E_AQ_RREV_MODULE_PHY_PLL_O_CONFIGURATION	5
2468*abf77452SKrzysztof Galazka #define I40E_AQ_RREV_MODULE_PHY_0_CONFIGURATION		6
2469*abf77452SKrzysztof Galazka #define I40E_AQ_RREV_MODULE_PHY_PLL_1_CONFIGURATION	7
2470*abf77452SKrzysztof Galazka #define I40E_AQ_RREV_MODULE_PHY_1_CONFIGURATION		8
2471*abf77452SKrzysztof Galazka 	u8	reserved1[2];
2472*abf77452SKrzysztof Galazka 	u32	min_rrev;
2473*abf77452SKrzysztof Galazka 	u8	reserved2[8];
2474*abf77452SKrzysztof Galazka };
2475*abf77452SKrzysztof Galazka 
2476*abf77452SKrzysztof Galazka I40E_CHECK_CMD_LENGTH(i40e_aqc_rollback_revision_update);
2477*abf77452SKrzysztof Galazka 
2478be771cdaSJack F Vogel /* OEM Post Update (indirect 0x0720)
2479be771cdaSJack F Vogel  * no command data struct used
2480be771cdaSJack F Vogel  */
2481be771cdaSJack F Vogel struct i40e_aqc_nvm_oem_post_update {
2482be771cdaSJack F Vogel #define I40E_AQ_NVM_OEM_POST_UPDATE_EXTERNAL_DATA	0x01
2483be771cdaSJack F Vogel 	u8 sel_data;
2484be771cdaSJack F Vogel 	u8 reserved[7];
2485be771cdaSJack F Vogel };
2486be771cdaSJack F Vogel 
2487be771cdaSJack F Vogel I40E_CHECK_STRUCT_LEN(0x8, i40e_aqc_nvm_oem_post_update);
2488be771cdaSJack F Vogel 
2489be771cdaSJack F Vogel struct i40e_aqc_nvm_oem_post_update_buffer {
2490be771cdaSJack F Vogel 	u8 str_len;
2491be771cdaSJack F Vogel 	u8 dev_addr;
2492be771cdaSJack F Vogel 	__le16 eeprom_addr;
2493be771cdaSJack F Vogel 	u8 data[36];
2494be771cdaSJack F Vogel };
2495be771cdaSJack F Vogel 
2496be771cdaSJack F Vogel I40E_CHECK_STRUCT_LEN(0x28, i40e_aqc_nvm_oem_post_update_buffer);
2497be771cdaSJack F Vogel 
2498fdb6f38aSEric Joyner /* Thermal Sensor (indirect 0x0721)
2499fdb6f38aSEric Joyner  *     read or set thermal sensor configs and values
2500fdb6f38aSEric Joyner  *     takes a sensor and command specific data buffer, not detailed here
2501fdb6f38aSEric Joyner  */
2502fdb6f38aSEric Joyner struct i40e_aqc_thermal_sensor {
2503fdb6f38aSEric Joyner 	u8 sensor_action;
2504fdb6f38aSEric Joyner #define I40E_AQ_THERMAL_SENSOR_READ_CONFIG	0
2505fdb6f38aSEric Joyner #define I40E_AQ_THERMAL_SENSOR_SET_CONFIG	1
2506fdb6f38aSEric Joyner #define I40E_AQ_THERMAL_SENSOR_READ_TEMP	2
2507fdb6f38aSEric Joyner 	u8 reserved[7];
2508fdb6f38aSEric Joyner 	__le32	addr_high;
2509fdb6f38aSEric Joyner 	__le32	addr_low;
2510fdb6f38aSEric Joyner };
2511fdb6f38aSEric Joyner 
2512fdb6f38aSEric Joyner I40E_CHECK_CMD_LENGTH(i40e_aqc_thermal_sensor);
2513fdb6f38aSEric Joyner 
251461ae650dSJack F Vogel /* Send to PF command (indirect 0x0801) id is only used by PF
251561ae650dSJack F Vogel  * Send to VF command (indirect 0x0802) id is only used by PF
251661ae650dSJack F Vogel  * Send to Peer PF command (indirect 0x0803)
251761ae650dSJack F Vogel  */
251861ae650dSJack F Vogel struct i40e_aqc_pf_vf_message {
251961ae650dSJack F Vogel 	__le32	id;
252061ae650dSJack F Vogel 	u8	reserved[4];
252161ae650dSJack F Vogel 	__le32	addr_high;
252261ae650dSJack F Vogel 	__le32	addr_low;
252361ae650dSJack F Vogel };
252461ae650dSJack F Vogel 
252561ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_pf_vf_message);
252661ae650dSJack F Vogel 
252761ae650dSJack F Vogel /* Alternate structure */
252861ae650dSJack F Vogel 
252961ae650dSJack F Vogel /* Direct write (direct 0x0900)
253061ae650dSJack F Vogel  * Direct read (direct 0x0902)
253161ae650dSJack F Vogel  */
253261ae650dSJack F Vogel struct i40e_aqc_alternate_write {
253361ae650dSJack F Vogel 	__le32 address0;
253461ae650dSJack F Vogel 	__le32 data0;
253561ae650dSJack F Vogel 	__le32 address1;
253661ae650dSJack F Vogel 	__le32 data1;
253761ae650dSJack F Vogel };
253861ae650dSJack F Vogel 
253961ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_alternate_write);
254061ae650dSJack F Vogel 
254161ae650dSJack F Vogel /* Indirect write (indirect 0x0901)
254261ae650dSJack F Vogel  * Indirect read (indirect 0x0903)
254361ae650dSJack F Vogel  */
254461ae650dSJack F Vogel 
254561ae650dSJack F Vogel struct i40e_aqc_alternate_ind_write {
254661ae650dSJack F Vogel 	__le32 address;
254761ae650dSJack F Vogel 	__le32 length;
254861ae650dSJack F Vogel 	__le32 addr_high;
254961ae650dSJack F Vogel 	__le32 addr_low;
255061ae650dSJack F Vogel };
255161ae650dSJack F Vogel 
255261ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_alternate_ind_write);
255361ae650dSJack F Vogel 
255461ae650dSJack F Vogel /* Done alternate write (direct 0x0904)
255561ae650dSJack F Vogel  * uses i40e_aq_desc
255661ae650dSJack F Vogel  */
255761ae650dSJack F Vogel struct i40e_aqc_alternate_write_done {
255861ae650dSJack F Vogel 	__le16	cmd_flags;
255961ae650dSJack F Vogel #define I40E_AQ_ALTERNATE_MODE_BIOS_MASK	1
256061ae650dSJack F Vogel #define I40E_AQ_ALTERNATE_MODE_BIOS_LEGACY	0
256161ae650dSJack F Vogel #define I40E_AQ_ALTERNATE_MODE_BIOS_UEFI	1
256261ae650dSJack F Vogel #define I40E_AQ_ALTERNATE_RESET_NEEDED		2
256361ae650dSJack F Vogel 	u8	reserved[14];
256461ae650dSJack F Vogel };
256561ae650dSJack F Vogel 
256661ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_alternate_write_done);
256761ae650dSJack F Vogel 
256861ae650dSJack F Vogel /* Set OEM mode (direct 0x0905) */
256961ae650dSJack F Vogel struct i40e_aqc_alternate_set_mode {
257061ae650dSJack F Vogel 	__le32	mode;
257161ae650dSJack F Vogel #define I40E_AQ_ALTERNATE_MODE_NONE	0
257261ae650dSJack F Vogel #define I40E_AQ_ALTERNATE_MODE_OEM	1
257361ae650dSJack F Vogel 	u8	reserved[12];
257461ae650dSJack F Vogel };
257561ae650dSJack F Vogel 
257661ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_alternate_set_mode);
257761ae650dSJack F Vogel 
257861ae650dSJack F Vogel /* Clear port Alternate RAM (direct 0x0906) uses i40e_aq_desc */
257961ae650dSJack F Vogel 
258061ae650dSJack F Vogel /* async events 0x10xx */
258161ae650dSJack F Vogel 
258261ae650dSJack F Vogel /* Lan Queue Overflow Event (direct, 0x1001) */
258361ae650dSJack F Vogel struct i40e_aqc_lan_overflow {
258461ae650dSJack F Vogel 	__le32	prtdcb_rupto;
258561ae650dSJack F Vogel 	__le32	otx_ctl;
258661ae650dSJack F Vogel 	u8	reserved[8];
258761ae650dSJack F Vogel };
258861ae650dSJack F Vogel 
258961ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_lan_overflow);
259061ae650dSJack F Vogel 
259161ae650dSJack F Vogel /* Get LLDP MIB (indirect 0x0A00) */
259261ae650dSJack F Vogel struct i40e_aqc_lldp_get_mib {
259361ae650dSJack F Vogel 	u8	type;
259461ae650dSJack F Vogel 	u8	reserved1;
259561ae650dSJack F Vogel #define I40E_AQ_LLDP_MIB_TYPE_MASK		0x3
259661ae650dSJack F Vogel #define I40E_AQ_LLDP_MIB_LOCAL			0x0
259761ae650dSJack F Vogel #define I40E_AQ_LLDP_MIB_REMOTE			0x1
259861ae650dSJack F Vogel #define I40E_AQ_LLDP_MIB_LOCAL_AND_REMOTE	0x2
259961ae650dSJack F Vogel #define I40E_AQ_LLDP_BRIDGE_TYPE_MASK		0xC
260061ae650dSJack F Vogel #define I40E_AQ_LLDP_BRIDGE_TYPE_SHIFT		0x2
260161ae650dSJack F Vogel #define I40E_AQ_LLDP_BRIDGE_TYPE_NEAREST_BRIDGE	0x0
260261ae650dSJack F Vogel #define I40E_AQ_LLDP_BRIDGE_TYPE_NON_TPMR	0x1
260361ae650dSJack F Vogel #define I40E_AQ_LLDP_TX_SHIFT			0x4
260461ae650dSJack F Vogel #define I40E_AQ_LLDP_TX_MASK			(0x03 << I40E_AQ_LLDP_TX_SHIFT)
260561ae650dSJack F Vogel /* TX pause flags use I40E_AQ_LINK_TX_* above */
260661ae650dSJack F Vogel 	__le16	local_len;
260761ae650dSJack F Vogel 	__le16	remote_len;
260861ae650dSJack F Vogel 	u8	reserved2[2];
260961ae650dSJack F Vogel 	__le32	addr_high;
261061ae650dSJack F Vogel 	__le32	addr_low;
261161ae650dSJack F Vogel };
261261ae650dSJack F Vogel 
261361ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_lldp_get_mib);
261461ae650dSJack F Vogel 
261561ae650dSJack F Vogel /* Configure LLDP MIB Change Event (direct 0x0A01)
261661ae650dSJack F Vogel  * also used for the event (with type in the command field)
261761ae650dSJack F Vogel  */
261861ae650dSJack F Vogel struct i40e_aqc_lldp_update_mib {
261961ae650dSJack F Vogel 	u8	command;
262061ae650dSJack F Vogel #define I40E_AQ_LLDP_MIB_UPDATE_ENABLE	0x0
262161ae650dSJack F Vogel #define I40E_AQ_LLDP_MIB_UPDATE_DISABLE	0x1
262261ae650dSJack F Vogel 	u8	reserved[7];
262361ae650dSJack F Vogel 	__le32	addr_high;
262461ae650dSJack F Vogel 	__le32	addr_low;
262561ae650dSJack F Vogel };
262661ae650dSJack F Vogel 
262761ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_lldp_update_mib);
262861ae650dSJack F Vogel 
262961ae650dSJack F Vogel /* Add LLDP TLV (indirect 0x0A02)
263061ae650dSJack F Vogel  * Delete LLDP TLV (indirect 0x0A04)
263161ae650dSJack F Vogel  */
263261ae650dSJack F Vogel struct i40e_aqc_lldp_add_tlv {
263361ae650dSJack F Vogel 	u8	type; /* only nearest bridge and non-TPMR from 0x0A00 */
263461ae650dSJack F Vogel 	u8	reserved1[1];
263561ae650dSJack F Vogel 	__le16	len;
263661ae650dSJack F Vogel 	u8	reserved2[4];
263761ae650dSJack F Vogel 	__le32	addr_high;
263861ae650dSJack F Vogel 	__le32	addr_low;
263961ae650dSJack F Vogel };
264061ae650dSJack F Vogel 
264161ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_lldp_add_tlv);
264261ae650dSJack F Vogel 
264361ae650dSJack F Vogel /* Update LLDP TLV (indirect 0x0A03) */
264461ae650dSJack F Vogel struct i40e_aqc_lldp_update_tlv {
264561ae650dSJack F Vogel 	u8	type; /* only nearest bridge and non-TPMR from 0x0A00 */
264661ae650dSJack F Vogel 	u8	reserved;
264761ae650dSJack F Vogel 	__le16	old_len;
264861ae650dSJack F Vogel 	__le16	new_offset;
264961ae650dSJack F Vogel 	__le16	new_len;
265061ae650dSJack F Vogel 	__le32	addr_high;
265161ae650dSJack F Vogel 	__le32	addr_low;
265261ae650dSJack F Vogel };
265361ae650dSJack F Vogel 
265461ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_lldp_update_tlv);
265561ae650dSJack F Vogel 
265661ae650dSJack F Vogel /* Stop LLDP (direct 0x0A05) */
265761ae650dSJack F Vogel struct i40e_aqc_lldp_stop {
265861ae650dSJack F Vogel 	u8	command;
265961ae650dSJack F Vogel #define I40E_AQ_LLDP_AGENT_STOP			0x0
266061ae650dSJack F Vogel #define I40E_AQ_LLDP_AGENT_SHUTDOWN		0x1
2661b4a7ce06SEric Joyner #define I40E_AQ_LLDP_AGENT_STOP_PERSIST		0x2
266261ae650dSJack F Vogel 	u8	reserved[15];
266361ae650dSJack F Vogel };
266461ae650dSJack F Vogel 
266561ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_lldp_stop);
266661ae650dSJack F Vogel 
266761ae650dSJack F Vogel /* Start LLDP (direct 0x0A06) */
266861ae650dSJack F Vogel struct i40e_aqc_lldp_start {
266961ae650dSJack F Vogel 	u8	command;
267061ae650dSJack F Vogel #define I40E_AQ_LLDP_AGENT_START		0x1
2671b4a7ce06SEric Joyner #define I40E_AQ_LLDP_AGENT_START_PERSIST	0x2
267261ae650dSJack F Vogel 	u8	reserved[15];
267361ae650dSJack F Vogel };
267461ae650dSJack F Vogel 
267561ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_lldp_start);
267661ae650dSJack F Vogel 
2677ceebc2f3SEric Joyner /* Set DCB (direct 0x0303) */
2678ceebc2f3SEric Joyner struct i40e_aqc_set_dcb_parameters {
2679ceebc2f3SEric Joyner 	u8 command;
2680ceebc2f3SEric Joyner #define I40E_AQ_DCB_SET_AGENT	0x1
2681ceebc2f3SEric Joyner #define I40E_DCB_VALID		0x1
2682ceebc2f3SEric Joyner 	u8 valid_flags;
2683ceebc2f3SEric Joyner 	u8 reserved[14];
2684ceebc2f3SEric Joyner };
2685ceebc2f3SEric Joyner 
2686ceebc2f3SEric Joyner I40E_CHECK_CMD_LENGTH(i40e_aqc_set_dcb_parameters);
2687ceebc2f3SEric Joyner 
2688f247dc25SJack F Vogel /* Get CEE DCBX Oper Config (0x0A07)
2689f247dc25SJack F Vogel  * uses the generic descriptor struct
2690f247dc25SJack F Vogel  * returns below as indirect response
269161ae650dSJack F Vogel  */
269261ae650dSJack F Vogel 
2693f247dc25SJack F Vogel #define I40E_AQC_CEE_APP_FCOE_SHIFT	0x0
2694f247dc25SJack F Vogel #define I40E_AQC_CEE_APP_FCOE_MASK	(0x7 << I40E_AQC_CEE_APP_FCOE_SHIFT)
2695f247dc25SJack F Vogel #define I40E_AQC_CEE_APP_ISCSI_SHIFT	0x3
2696f247dc25SJack F Vogel #define I40E_AQC_CEE_APP_ISCSI_MASK	(0x7 << I40E_AQC_CEE_APP_ISCSI_SHIFT)
2697f247dc25SJack F Vogel #define I40E_AQC_CEE_APP_FIP_SHIFT	0x8
2698f247dc25SJack F Vogel #define I40E_AQC_CEE_APP_FIP_MASK	(0x7 << I40E_AQC_CEE_APP_FIP_SHIFT)
2699be771cdaSJack F Vogel 
2700f247dc25SJack F Vogel #define I40E_AQC_CEE_PG_STATUS_SHIFT	0x0
2701f247dc25SJack F Vogel #define I40E_AQC_CEE_PG_STATUS_MASK	(0x7 << I40E_AQC_CEE_PG_STATUS_SHIFT)
2702f247dc25SJack F Vogel #define I40E_AQC_CEE_PFC_STATUS_SHIFT	0x3
2703f247dc25SJack F Vogel #define I40E_AQC_CEE_PFC_STATUS_MASK	(0x7 << I40E_AQC_CEE_PFC_STATUS_SHIFT)
2704f247dc25SJack F Vogel #define I40E_AQC_CEE_APP_STATUS_SHIFT	0x8
2705f247dc25SJack F Vogel #define I40E_AQC_CEE_APP_STATUS_MASK	(0x7 << I40E_AQC_CEE_APP_STATUS_SHIFT)
2706be771cdaSJack F Vogel #define I40E_AQC_CEE_FCOE_STATUS_SHIFT	0x8
2707be771cdaSJack F Vogel #define I40E_AQC_CEE_FCOE_STATUS_MASK	(0x7 << I40E_AQC_CEE_FCOE_STATUS_SHIFT)
2708be771cdaSJack F Vogel #define I40E_AQC_CEE_ISCSI_STATUS_SHIFT	0xB
2709be771cdaSJack F Vogel #define I40E_AQC_CEE_ISCSI_STATUS_MASK	(0x7 << I40E_AQC_CEE_ISCSI_STATUS_SHIFT)
2710be771cdaSJack F Vogel #define I40E_AQC_CEE_FIP_STATUS_SHIFT	0x10
2711be771cdaSJack F Vogel #define I40E_AQC_CEE_FIP_STATUS_MASK	(0x7 << I40E_AQC_CEE_FIP_STATUS_SHIFT)
2712be771cdaSJack F Vogel 
2713be771cdaSJack F Vogel /* struct i40e_aqc_get_cee_dcb_cfg_v1_resp was originally defined with
2714be771cdaSJack F Vogel  * word boundary layout issues, which the Linux compilers silently deal
2715be771cdaSJack F Vogel  * with by adding padding, making the actual struct larger than designed.
2716be771cdaSJack F Vogel  * However, the FW compiler for the NIC is less lenient and complains
2717be771cdaSJack F Vogel  * about the struct.  Hence, the struct defined here has an extra byte in
2718be771cdaSJack F Vogel  * fields reserved3 and reserved4 to directly acknowledge that padding,
2719be771cdaSJack F Vogel  * and the new length is used in the length check macro.
2720be771cdaSJack F Vogel  */
2721f247dc25SJack F Vogel struct i40e_aqc_get_cee_dcb_cfg_v1_resp {
2722f247dc25SJack F Vogel 	u8	reserved1;
2723f247dc25SJack F Vogel 	u8	oper_num_tc;
2724f247dc25SJack F Vogel 	u8	oper_prio_tc[4];
2725f247dc25SJack F Vogel 	u8	reserved2;
2726f247dc25SJack F Vogel 	u8	oper_tc_bw[8];
2727f247dc25SJack F Vogel 	u8	oper_pfc_en;
2728be771cdaSJack F Vogel 	u8	reserved3[2];
2729f247dc25SJack F Vogel 	__le16	oper_app_prio;
2730be771cdaSJack F Vogel 	u8	reserved4[2];
2731f247dc25SJack F Vogel 	__le16	tlv_status;
2732f247dc25SJack F Vogel };
2733f247dc25SJack F Vogel 
2734f247dc25SJack F Vogel I40E_CHECK_STRUCT_LEN(0x18, i40e_aqc_get_cee_dcb_cfg_v1_resp);
2735f247dc25SJack F Vogel 
2736f247dc25SJack F Vogel struct i40e_aqc_get_cee_dcb_cfg_resp {
2737f247dc25SJack F Vogel 	u8	oper_num_tc;
2738f247dc25SJack F Vogel 	u8	oper_prio_tc[4];
2739f247dc25SJack F Vogel 	u8	oper_tc_bw[8];
2740f247dc25SJack F Vogel 	u8	oper_pfc_en;
2741f247dc25SJack F Vogel 	__le16	oper_app_prio;
2742f247dc25SJack F Vogel 	__le32	tlv_status;
2743f247dc25SJack F Vogel 	u8	reserved[12];
2744f247dc25SJack F Vogel };
2745f247dc25SJack F Vogel 
2746f247dc25SJack F Vogel I40E_CHECK_STRUCT_LEN(0x20, i40e_aqc_get_cee_dcb_cfg_resp);
2747f247dc25SJack F Vogel 
2748f247dc25SJack F Vogel /*	Set Local LLDP MIB (indirect 0x0A08)
2749f247dc25SJack F Vogel  *	Used to replace the local MIB of a given LLDP agent. e.g. DCBx
2750f247dc25SJack F Vogel  */
2751f247dc25SJack F Vogel struct i40e_aqc_lldp_set_local_mib {
2752f247dc25SJack F Vogel #define SET_LOCAL_MIB_AC_TYPE_DCBX_SHIFT	0
2753ac83ea83SEric Joyner #define SET_LOCAL_MIB_AC_TYPE_DCBX_MASK	(1 << \
2754ac83ea83SEric Joyner 					SET_LOCAL_MIB_AC_TYPE_DCBX_SHIFT)
2755ac83ea83SEric Joyner #define SET_LOCAL_MIB_AC_TYPE_LOCAL_MIB	0x0
2756ac83ea83SEric Joyner #define SET_LOCAL_MIB_AC_TYPE_NON_WILLING_APPS_SHIFT	(1)
2757ac83ea83SEric Joyner #define SET_LOCAL_MIB_AC_TYPE_NON_WILLING_APPS_MASK	(1 << \
2758ac83ea83SEric Joyner 				SET_LOCAL_MIB_AC_TYPE_NON_WILLING_APPS_SHIFT)
2759ac83ea83SEric Joyner #define SET_LOCAL_MIB_AC_TYPE_NON_WILLING_APPS		0x1
2760f247dc25SJack F Vogel 	u8	type;
2761f247dc25SJack F Vogel 	u8	reserved0;
2762f247dc25SJack F Vogel 	__le16	length;
2763f247dc25SJack F Vogel 	u8	reserved1[4];
2764f247dc25SJack F Vogel 	__le32	address_high;
2765f247dc25SJack F Vogel 	__le32	address_low;
2766f247dc25SJack F Vogel };
2767f247dc25SJack F Vogel 
2768f247dc25SJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_lldp_set_local_mib);
2769f247dc25SJack F Vogel 
2770223d846dSEric Joyner struct i40e_aqc_lldp_set_local_mib_resp {
2771223d846dSEric Joyner #define SET_LOCAL_MIB_RESP_EVENT_TRIGGERED_MASK      0x01
2772223d846dSEric Joyner 	u8  status;
2773223d846dSEric Joyner 	u8  reserved[15];
2774223d846dSEric Joyner };
2775223d846dSEric Joyner 
2776223d846dSEric Joyner I40E_CHECK_STRUCT_LEN(0x10, i40e_aqc_lldp_set_local_mib_resp);
2777223d846dSEric Joyner 
2778f247dc25SJack F Vogel /*	Stop/Start LLDP Agent (direct 0x0A09)
2779f247dc25SJack F Vogel  *	Used for stopping/starting specific LLDP agent. e.g. DCBx
2780f247dc25SJack F Vogel  */
2781f247dc25SJack F Vogel struct i40e_aqc_lldp_stop_start_specific_agent {
2782f247dc25SJack F Vogel #define I40E_AQC_START_SPECIFIC_AGENT_SHIFT	0
2783d4683565SEric Joyner #define I40E_AQC_START_SPECIFIC_AGENT_MASK \
2784d4683565SEric Joyner 				(1 << I40E_AQC_START_SPECIFIC_AGENT_SHIFT)
2785f247dc25SJack F Vogel 	u8	command;
2786f247dc25SJack F Vogel 	u8	reserved[15];
2787f247dc25SJack F Vogel };
2788f247dc25SJack F Vogel 
2789f247dc25SJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_lldp_stop_start_specific_agent);
2790f247dc25SJack F Vogel 
2791b4a7ce06SEric Joyner /* Restore LLDP Agent factory settings (direct 0x0A0A) */
2792b4a7ce06SEric Joyner struct i40e_aqc_lldp_restore {
2793b4a7ce06SEric Joyner 	u8	command;
2794b4a7ce06SEric Joyner #define I40E_AQ_LLDP_AGENT_RESTORE_NOT		0x0
2795b4a7ce06SEric Joyner #define I40E_AQ_LLDP_AGENT_RESTORE		0x1
2796b4a7ce06SEric Joyner 	u8	reserved[15];
2797b4a7ce06SEric Joyner };
2798b4a7ce06SEric Joyner 
2799b4a7ce06SEric Joyner I40E_CHECK_CMD_LENGTH(i40e_aqc_lldp_restore);
2800b4a7ce06SEric Joyner 
280161ae650dSJack F Vogel /* Add Udp Tunnel command and completion (direct 0x0B00) */
280261ae650dSJack F Vogel struct i40e_aqc_add_udp_tunnel {
280361ae650dSJack F Vogel 	__le16	udp_port;
280461ae650dSJack F Vogel 	u8	reserved0[3];
280561ae650dSJack F Vogel 	u8	protocol_type;
280661ae650dSJack F Vogel #define I40E_AQC_TUNNEL_TYPE_VXLAN	0x00
280761ae650dSJack F Vogel #define I40E_AQC_TUNNEL_TYPE_NGE	0x01
280861ae650dSJack F Vogel #define I40E_AQC_TUNNEL_TYPE_TEREDO	0x10
2809fdb6f38aSEric Joyner #define I40E_AQC_TUNNEL_TYPE_VXLAN_GPE	0x11
281061ae650dSJack F Vogel 	u8	reserved1[10];
281161ae650dSJack F Vogel };
281261ae650dSJack F Vogel 
281361ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_add_udp_tunnel);
281461ae650dSJack F Vogel 
281561ae650dSJack F Vogel struct i40e_aqc_add_udp_tunnel_completion {
281661ae650dSJack F Vogel 	__le16	udp_port;
281761ae650dSJack F Vogel 	u8	filter_entry_index;
281861ae650dSJack F Vogel 	u8	multiple_pfs;
281961ae650dSJack F Vogel #define I40E_AQC_SINGLE_PF		0x0
282061ae650dSJack F Vogel #define I40E_AQC_MULTIPLE_PFS		0x1
282161ae650dSJack F Vogel 	u8	total_filters;
282261ae650dSJack F Vogel 	u8	reserved[11];
282361ae650dSJack F Vogel };
282461ae650dSJack F Vogel 
282561ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_add_udp_tunnel_completion);
282661ae650dSJack F Vogel 
282761ae650dSJack F Vogel /* remove UDP Tunnel command (0x0B01) */
282861ae650dSJack F Vogel struct i40e_aqc_remove_udp_tunnel {
282961ae650dSJack F Vogel 	u8	reserved[2];
283061ae650dSJack F Vogel 	u8	index; /* 0 to 15 */
283161ae650dSJack F Vogel 	u8	reserved2[13];
283261ae650dSJack F Vogel };
283361ae650dSJack F Vogel 
283461ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_remove_udp_tunnel);
283561ae650dSJack F Vogel 
283661ae650dSJack F Vogel struct i40e_aqc_del_udp_tunnel_completion {
283761ae650dSJack F Vogel 	__le16	udp_port;
283861ae650dSJack F Vogel 	u8	index; /* 0 to 15 */
283961ae650dSJack F Vogel 	u8	multiple_pfs;
284061ae650dSJack F Vogel 	u8	total_filters_used;
284161ae650dSJack F Vogel 	u8	reserved1[11];
284261ae650dSJack F Vogel };
284361ae650dSJack F Vogel 
284461ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_del_udp_tunnel_completion);
284561ae650dSJack F Vogel 
28464294f337SSean Bruno struct i40e_aqc_get_set_rss_key {
28474294f337SSean Bruno #define I40E_AQC_SET_RSS_KEY_VSI_VALID		(0x1 << 15)
28484294f337SSean Bruno #define I40E_AQC_SET_RSS_KEY_VSI_ID_SHIFT	0
28494294f337SSean Bruno #define I40E_AQC_SET_RSS_KEY_VSI_ID_MASK	(0x3FF << \
28504294f337SSean Bruno 					I40E_AQC_SET_RSS_KEY_VSI_ID_SHIFT)
28514294f337SSean Bruno 	__le16	vsi_id;
28524294f337SSean Bruno 	u8	reserved[6];
28534294f337SSean Bruno 	__le32	addr_high;
28544294f337SSean Bruno 	__le32	addr_low;
28554294f337SSean Bruno };
28564294f337SSean Bruno 
28574294f337SSean Bruno I40E_CHECK_CMD_LENGTH(i40e_aqc_get_set_rss_key);
28584294f337SSean Bruno 
28594294f337SSean Bruno struct i40e_aqc_get_set_rss_key_data {
28604294f337SSean Bruno 	u8 standard_rss_key[0x28];
28614294f337SSean Bruno 	u8 extended_hash_key[0xc];
28624294f337SSean Bruno };
28634294f337SSean Bruno 
28644294f337SSean Bruno I40E_CHECK_STRUCT_LEN(0x34, i40e_aqc_get_set_rss_key_data);
28654294f337SSean Bruno 
28664294f337SSean Bruno struct  i40e_aqc_get_set_rss_lut {
28674294f337SSean Bruno #define I40E_AQC_SET_RSS_LUT_VSI_VALID		(0x1 << 15)
28684294f337SSean Bruno #define I40E_AQC_SET_RSS_LUT_VSI_ID_SHIFT	0
28694294f337SSean Bruno #define I40E_AQC_SET_RSS_LUT_VSI_ID_MASK	(0x3FF << \
28704294f337SSean Bruno 					I40E_AQC_SET_RSS_LUT_VSI_ID_SHIFT)
28714294f337SSean Bruno 	__le16	vsi_id;
28724294f337SSean Bruno #define I40E_AQC_SET_RSS_LUT_TABLE_TYPE_SHIFT	0
28734294f337SSean Bruno #define I40E_AQC_SET_RSS_LUT_TABLE_TYPE_MASK	(0x1 << \
28744294f337SSean Bruno 					I40E_AQC_SET_RSS_LUT_TABLE_TYPE_SHIFT)
28754294f337SSean Bruno 
28764294f337SSean Bruno #define I40E_AQC_SET_RSS_LUT_TABLE_TYPE_VSI	0
28774294f337SSean Bruno #define I40E_AQC_SET_RSS_LUT_TABLE_TYPE_PF	1
28784294f337SSean Bruno 	__le16	flags;
28794294f337SSean Bruno 	u8	reserved[4];
28804294f337SSean Bruno 	__le32	addr_high;
28814294f337SSean Bruno 	__le32	addr_low;
28824294f337SSean Bruno };
28834294f337SSean Bruno 
28844294f337SSean Bruno I40E_CHECK_CMD_LENGTH(i40e_aqc_get_set_rss_lut);
28854294f337SSean Bruno 
288661ae650dSJack F Vogel /* tunnel key structure 0x0B10 */
288761ae650dSJack F Vogel 
288861ae650dSJack F Vogel struct i40e_aqc_tunnel_key_structure {
288961ae650dSJack F Vogel 	u8	key1_off;
289061ae650dSJack F Vogel 	u8	key2_off;
289161ae650dSJack F Vogel 	u8	key1_len;  /* 0 to 15 */
289261ae650dSJack F Vogel 	u8	key2_len;  /* 0 to 15 */
289361ae650dSJack F Vogel 	u8	flags;
289461ae650dSJack F Vogel #define I40E_AQC_TUNNEL_KEY_STRUCT_OVERRIDE	0x01
289561ae650dSJack F Vogel /* response flags */
289661ae650dSJack F Vogel #define I40E_AQC_TUNNEL_KEY_STRUCT_SUCCESS	0x01
289761ae650dSJack F Vogel #define I40E_AQC_TUNNEL_KEY_STRUCT_MODIFIED	0x02
289861ae650dSJack F Vogel #define I40E_AQC_TUNNEL_KEY_STRUCT_OVERRIDDEN	0x03
289961ae650dSJack F Vogel 	u8	network_key_index;
290061ae650dSJack F Vogel #define I40E_AQC_NETWORK_KEY_INDEX_VXLAN		0x0
290161ae650dSJack F Vogel #define I40E_AQC_NETWORK_KEY_INDEX_NGE			0x1
290261ae650dSJack F Vogel #define I40E_AQC_NETWORK_KEY_INDEX_FLEX_MAC_IN_UDP	0x2
290361ae650dSJack F Vogel #define I40E_AQC_NETWORK_KEY_INDEX_GRE			0x3
290461ae650dSJack F Vogel 	u8	reserved[10];
290561ae650dSJack F Vogel };
290661ae650dSJack F Vogel 
290761ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_tunnel_key_structure);
290861ae650dSJack F Vogel 
290961ae650dSJack F Vogel /* OEM mode commands (direct 0xFE0x) */
291061ae650dSJack F Vogel struct i40e_aqc_oem_param_change {
291161ae650dSJack F Vogel 	__le32	param_type;
291261ae650dSJack F Vogel #define I40E_AQ_OEM_PARAM_TYPE_PF_CTL	0
291361ae650dSJack F Vogel #define I40E_AQ_OEM_PARAM_TYPE_BW_CTL	1
291461ae650dSJack F Vogel #define I40E_AQ_OEM_PARAM_MAC		2
291561ae650dSJack F Vogel 	__le32	param_value1;
2916f247dc25SJack F Vogel 	__le16	param_value2;
2917f247dc25SJack F Vogel 	u8	reserved[6];
291861ae650dSJack F Vogel };
291961ae650dSJack F Vogel 
292061ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_oem_param_change);
292161ae650dSJack F Vogel 
292261ae650dSJack F Vogel struct i40e_aqc_oem_state_change {
292361ae650dSJack F Vogel 	__le32	state;
292461ae650dSJack F Vogel #define I40E_AQ_OEM_STATE_LINK_DOWN	0x0
292561ae650dSJack F Vogel #define I40E_AQ_OEM_STATE_LINK_UP	0x1
292661ae650dSJack F Vogel 	u8	reserved[12];
292761ae650dSJack F Vogel };
292861ae650dSJack F Vogel 
292961ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_oem_state_change);
293061ae650dSJack F Vogel 
2931f247dc25SJack F Vogel /* Initialize OCSD (0xFE02, direct) */
2932f247dc25SJack F Vogel struct i40e_aqc_opc_oem_ocsd_initialize {
2933f247dc25SJack F Vogel 	u8 type_status;
2934f247dc25SJack F Vogel 	u8 reserved1[3];
2935f247dc25SJack F Vogel 	__le32 ocsd_memory_block_addr_high;
2936f247dc25SJack F Vogel 	__le32 ocsd_memory_block_addr_low;
2937f247dc25SJack F Vogel 	__le32 requested_update_interval;
2938f247dc25SJack F Vogel };
2939f247dc25SJack F Vogel 
2940f247dc25SJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_opc_oem_ocsd_initialize);
2941f247dc25SJack F Vogel 
2942f247dc25SJack F Vogel /* Initialize OCBB  (0xFE03, direct) */
2943f247dc25SJack F Vogel struct i40e_aqc_opc_oem_ocbb_initialize {
2944f247dc25SJack F Vogel 	u8 type_status;
2945f247dc25SJack F Vogel 	u8 reserved1[3];
2946f247dc25SJack F Vogel 	__le32 ocbb_memory_block_addr_high;
2947f247dc25SJack F Vogel 	__le32 ocbb_memory_block_addr_low;
2948f247dc25SJack F Vogel 	u8 reserved2[4];
2949f247dc25SJack F Vogel };
2950f247dc25SJack F Vogel 
2951f247dc25SJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_opc_oem_ocbb_initialize);
2952f247dc25SJack F Vogel 
295361ae650dSJack F Vogel /* debug commands */
295461ae650dSJack F Vogel 
295561ae650dSJack F Vogel /* get device id (0xFF00) uses the generic structure */
295661ae650dSJack F Vogel 
295761ae650dSJack F Vogel /* set test more (0xFF01, internal) */
295861ae650dSJack F Vogel 
295961ae650dSJack F Vogel struct i40e_acq_set_test_mode {
296061ae650dSJack F Vogel 	u8	mode;
296161ae650dSJack F Vogel #define I40E_AQ_TEST_PARTIAL	0
296261ae650dSJack F Vogel #define I40E_AQ_TEST_FULL	1
296361ae650dSJack F Vogel #define I40E_AQ_TEST_NVM	2
296461ae650dSJack F Vogel 	u8	reserved[3];
296561ae650dSJack F Vogel 	u8	command;
296661ae650dSJack F Vogel #define I40E_AQ_TEST_OPEN	0
296761ae650dSJack F Vogel #define I40E_AQ_TEST_CLOSE	1
296861ae650dSJack F Vogel #define I40E_AQ_TEST_INC	2
296961ae650dSJack F Vogel 	u8	reserved2[3];
297061ae650dSJack F Vogel 	__le32	address_high;
297161ae650dSJack F Vogel 	__le32	address_low;
297261ae650dSJack F Vogel };
297361ae650dSJack F Vogel 
297461ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_acq_set_test_mode);
297561ae650dSJack F Vogel 
297661ae650dSJack F Vogel /* Debug Read Register command (0xFF03)
297761ae650dSJack F Vogel  * Debug Write Register command (0xFF04)
297861ae650dSJack F Vogel  */
297961ae650dSJack F Vogel struct i40e_aqc_debug_reg_read_write {
298061ae650dSJack F Vogel 	__le32 reserved;
298161ae650dSJack F Vogel 	__le32 address;
298261ae650dSJack F Vogel 	__le32 value_high;
298361ae650dSJack F Vogel 	__le32 value_low;
298461ae650dSJack F Vogel };
298561ae650dSJack F Vogel 
298661ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_debug_reg_read_write);
298761ae650dSJack F Vogel 
298861ae650dSJack F Vogel /* Scatter/gather Reg Read  (indirect 0xFF05)
298961ae650dSJack F Vogel  * Scatter/gather Reg Write (indirect 0xFF06)
299061ae650dSJack F Vogel  */
299161ae650dSJack F Vogel 
299261ae650dSJack F Vogel /* i40e_aq_desc is used for the command */
299361ae650dSJack F Vogel struct i40e_aqc_debug_reg_sg_element_data {
299461ae650dSJack F Vogel 	__le32 address;
299561ae650dSJack F Vogel 	__le32 value;
299661ae650dSJack F Vogel };
299761ae650dSJack F Vogel 
299861ae650dSJack F Vogel /* Debug Modify register (direct 0xFF07) */
299961ae650dSJack F Vogel struct i40e_aqc_debug_modify_reg {
300061ae650dSJack F Vogel 	__le32 address;
300161ae650dSJack F Vogel 	__le32 value;
300261ae650dSJack F Vogel 	__le32 clear_mask;
300361ae650dSJack F Vogel 	__le32 set_mask;
300461ae650dSJack F Vogel };
300561ae650dSJack F Vogel 
300661ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_debug_modify_reg);
300761ae650dSJack F Vogel 
300861ae650dSJack F Vogel /* dump internal data (0xFF08, indirect) */
300961ae650dSJack F Vogel 
301061ae650dSJack F Vogel #define I40E_AQ_CLUSTER_ID_AUX		0
301161ae650dSJack F Vogel #define I40E_AQ_CLUSTER_ID_SWITCH_FLU	1
301261ae650dSJack F Vogel #define I40E_AQ_CLUSTER_ID_TXSCHED	2
301361ae650dSJack F Vogel #define I40E_AQ_CLUSTER_ID_HMC		3
301461ae650dSJack F Vogel #define I40E_AQ_CLUSTER_ID_MAC0		4
301561ae650dSJack F Vogel #define I40E_AQ_CLUSTER_ID_MAC1		5
301661ae650dSJack F Vogel #define I40E_AQ_CLUSTER_ID_MAC2		6
301761ae650dSJack F Vogel #define I40E_AQ_CLUSTER_ID_MAC3		7
301861ae650dSJack F Vogel #define I40E_AQ_CLUSTER_ID_DCB		8
301961ae650dSJack F Vogel #define I40E_AQ_CLUSTER_ID_EMP_MEM	9
302061ae650dSJack F Vogel #define I40E_AQ_CLUSTER_ID_PKT_BUF	10
302161ae650dSJack F Vogel #define I40E_AQ_CLUSTER_ID_ALTRAM	11
302261ae650dSJack F Vogel 
302361ae650dSJack F Vogel struct i40e_aqc_debug_dump_internals {
302461ae650dSJack F Vogel 	u8	cluster_id;
302561ae650dSJack F Vogel 	u8	table_id;
302661ae650dSJack F Vogel 	__le16	data_size;
302761ae650dSJack F Vogel 	__le32	idx;
302861ae650dSJack F Vogel 	__le32	address_high;
302961ae650dSJack F Vogel 	__le32	address_low;
303061ae650dSJack F Vogel };
303161ae650dSJack F Vogel 
303261ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_debug_dump_internals);
303361ae650dSJack F Vogel 
303461ae650dSJack F Vogel struct i40e_aqc_debug_modify_internals {
303561ae650dSJack F Vogel 	u8	cluster_id;
303661ae650dSJack F Vogel 	u8	cluster_specific_params[7];
303761ae650dSJack F Vogel 	__le32	address_high;
303861ae650dSJack F Vogel 	__le32	address_low;
303961ae650dSJack F Vogel };
304061ae650dSJack F Vogel 
304161ae650dSJack F Vogel I40E_CHECK_CMD_LENGTH(i40e_aqc_debug_modify_internals);
304261ae650dSJack F Vogel 
3043223d846dSEric Joyner #endif /* _I40E_ADMINQ_CMD_H_ */
3044