/*******************************************************************************
 *
 * Intel Ethernet Controller XL710 Family Linux Virtual Function Driver
 * Copyright(c) 2013 Intel Corporation.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms and conditions of the GNU General Public License,
 * version 2, as published by the Free Software Foundation.
 *
 * This program is distributed in the hope it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 *
 * The full GNU General Public License is included in this distribution in
 * the file called "COPYING".
 *
 * Contact Information:
 * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
 * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
 *
 ******************************************************************************/

#ifndef _I40E_ADMINQ_CMD_H_
#define _I40E_ADMINQ_CMD_H_

/* This header file defines the i40e Admin Queue commands and is shared between
 * i40e Firmware and Software.
 *
 * This file needs to comply with the Linux Kernel coding style.
 */

#define I40E_FW_API_VERSION_MAJOR  0x0001
#define I40E_FW_API_VERSION_MINOR  0x0001
#define I40E_FW_API_VERSION_A0_MINOR  0x0000

struct i40e_aq_desc {
	__le16 flags;
	__le16 opcode;
	__le16 datalen;
	__le16 retval;
	__le32 cookie_high;
	__le32 cookie_low;
	union {
		struct {
			__le32 param0;
			__le32 param1;
			__le32 param2;
			__le32 param3;
		} internal;
		struct {
			__le32 param0;
			__le32 param1;
			__le32 addr_high;
			__le32 addr_low;
		} external;
		u8 raw[16];
	} params;
};

/* Flags sub-structure
 * |0  |1  |2  |3  |4  |5  |6  |7  |8  |9  |10 |11 |12 |13 |14 |15 |
 * |DD |CMP|ERR|VFE| * *  RESERVED * * |LB |RD |VFC|BUF|SI |EI |FE |
 */

/* command flags and offsets*/
#define I40E_AQ_FLAG_DD_SHIFT  0
#define I40E_AQ_FLAG_CMP_SHIFT 1
#define I40E_AQ_FLAG_ERR_SHIFT 2
#define I40E_AQ_FLAG_VFE_SHIFT 3
#define I40E_AQ_FLAG_LB_SHIFT  9
#define I40E_AQ_FLAG_RD_SHIFT  10
#define I40E_AQ_FLAG_VFC_SHIFT 11
#define I40E_AQ_FLAG_BUF_SHIFT 12
#define I40E_AQ_FLAG_SI_SHIFT  13
#define I40E_AQ_FLAG_EI_SHIFT  14
#define I40E_AQ_FLAG_FE_SHIFT  15

#define I40E_AQ_FLAG_DD  (1 << I40E_AQ_FLAG_DD_SHIFT)  /* 0x1    */
#define I40E_AQ_FLAG_CMP (1 << I40E_AQ_FLAG_CMP_SHIFT) /* 0x2    */
#define I40E_AQ_FLAG_ERR (1 << I40E_AQ_FLAG_ERR_SHIFT) /* 0x4    */
#define I40E_AQ_FLAG_VFE (1 << I40E_AQ_FLAG_VFE_SHIFT) /* 0x8    */
#define I40E_AQ_FLAG_LB  (1 << I40E_AQ_FLAG_LB_SHIFT)  /* 0x200  */
#define I40E_AQ_FLAG_RD  (1 << I40E_AQ_FLAG_RD_SHIFT)  /* 0x400  */
#define I40E_AQ_FLAG_VFC (1 << I40E_AQ_FLAG_VFC_SHIFT) /* 0x800  */
#define I40E_AQ_FLAG_BUF (1 << I40E_AQ_FLAG_BUF_SHIFT) /* 0x1000 */
#define I40E_AQ_FLAG_SI  (1 << I40E_AQ_FLAG_SI_SHIFT)  /* 0x2000 */
#define I40E_AQ_FLAG_EI  (1 << I40E_AQ_FLAG_EI_SHIFT)  /* 0x4000 */
#define I40E_AQ_FLAG_FE  (1 << I40E_AQ_FLAG_FE_SHIFT)  /* 0x8000 */

/* error codes */
enum i40e_admin_queue_err {
	I40E_AQ_RC_OK       = 0,    /* success */
	I40E_AQ_RC_EPERM    = 1,    /* Operation not permitted */
	I40E_AQ_RC_ENOENT   = 2,    /* No such element */
	I40E_AQ_RC_ESRCH    = 3,    /* Bad opcode */
	I40E_AQ_RC_EINTR    = 4,    /* operation interrupted */
	I40E_AQ_RC_EIO      = 5,    /* I/O error */
	I40E_AQ_RC_ENXIO    = 6,    /* No such resource */
	I40E_AQ_RC_E2BIG    = 7,    /* Arg too long */
	I40E_AQ_RC_EAGAIN   = 8,    /* Try again */
	I40E_AQ_RC_ENOMEM   = 9,    /* Out of memory */
	I40E_AQ_RC_EACCES   = 10,   /* Permission denied */
	I40E_AQ_RC_EFAULT   = 11,   /* Bad address */
	I40E_AQ_RC_EBUSY    = 12,   /* Device or resource busy */
	I40E_AQ_RC_EEXIST   = 13,   /* object already exists */
	I40E_AQ_RC_EINVAL   = 14,   /* Invalid argument */
	I40E_AQ_RC_ENOTTY   = 15,   /* Not a typewriter */
	I40E_AQ_RC_ENOSPC   = 16,   /* No space left or alloc failure */
	I40E_AQ_RC_ENOSYS   = 17,   /* Function not implemented */
	I40E_AQ_RC_ERANGE   = 18,   /* Parameter out of range */
	I40E_AQ_RC_EFLUSHED = 19,   /* Cmd flushed because of prev cmd error */
	I40E_AQ_RC_BAD_ADDR = 20,   /* Descriptor contains a bad pointer */
	I40E_AQ_RC_EMODE    = 21,   /* Op not allowed in current dev mode */
	I40E_AQ_RC_EFBIG    = 22,   /* File too large */
};

/* Admin Queue command opcodes */
enum i40e_admin_queue_opc {
	/* aq commands */
	i40e_aqc_opc_get_version      = 0x0001,
	i40e_aqc_opc_driver_version   = 0x0002,
	i40e_aqc_opc_queue_shutdown   = 0x0003,

	/* resource ownership */
	i40e_aqc_opc_request_resource = 0x0008,
	i40e_aqc_opc_release_resource = 0x0009,

	i40e_aqc_opc_list_func_capabilities = 0x000A,
	i40e_aqc_opc_list_dev_capabilities  = 0x000B,

	i40e_aqc_opc_set_cppm_configuration = 0x0103,
	i40e_aqc_opc_set_arp_proxy_entry    = 0x0104,
	i40e_aqc_opc_set_ns_proxy_entry     = 0x0105,

	/* LAA */
	i40e_aqc_opc_mng_laa                = 0x0106,   /* AQ obsolete */
	i40e_aqc_opc_mac_address_read       = 0x0107,
	i40e_aqc_opc_mac_address_write      = 0x0108,

	/* PXE */
	i40e_aqc_opc_clear_pxe_mode         = 0x0110,

	/* internal switch commands */
	i40e_aqc_opc_get_switch_config         = 0x0200,
	i40e_aqc_opc_add_statistics            = 0x0201,
	i40e_aqc_opc_remove_statistics         = 0x0202,
	i40e_aqc_opc_set_port_parameters       = 0x0203,
	i40e_aqc_opc_get_switch_resource_alloc = 0x0204,

	i40e_aqc_opc_add_vsi                = 0x0210,
	i40e_aqc_opc_update_vsi_parameters  = 0x0211,
	i40e_aqc_opc_get_vsi_parameters     = 0x0212,

	i40e_aqc_opc_add_pv                = 0x0220,
	i40e_aqc_opc_update_pv_parameters  = 0x0221,
	i40e_aqc_opc_get_pv_parameters     = 0x0222,

	i40e_aqc_opc_add_veb               = 0x0230,
	i40e_aqc_opc_update_veb_parameters = 0x0231,
	i40e_aqc_opc_get_veb_parameters    = 0x0232,

	i40e_aqc_opc_delete_element  = 0x0243,

	i40e_aqc_opc_add_macvlan                  = 0x0250,
	i40e_aqc_opc_remove_macvlan               = 0x0251,
	i40e_aqc_opc_add_vlan                     = 0x0252,
	i40e_aqc_opc_remove_vlan                  = 0x0253,
	i40e_aqc_opc_set_vsi_promiscuous_modes    = 0x0254,
	i40e_aqc_opc_add_tag                      = 0x0255,
	i40e_aqc_opc_remove_tag                   = 0x0256,
	i40e_aqc_opc_add_multicast_etag           = 0x0257,
	i40e_aqc_opc_remove_multicast_etag        = 0x0258,
	i40e_aqc_opc_update_tag                   = 0x0259,
	i40e_aqc_opc_add_control_packet_filter    = 0x025A,
	i40e_aqc_opc_remove_control_packet_filter = 0x025B,
	i40e_aqc_opc_add_cloud_filters            = 0x025C,
	i40e_aqc_opc_remove_cloud_filters         = 0x025D,

	i40e_aqc_opc_add_mirror_rule    = 0x0260,
	i40e_aqc_opc_delete_mirror_rule = 0x0261,

	i40e_aqc_opc_set_storm_control_config = 0x0280,
	i40e_aqc_opc_get_storm_control_config = 0x0281,

	/* DCB commands */
	i40e_aqc_opc_dcb_ignore_pfc = 0x0301,
	i40e_aqc_opc_dcb_updated    = 0x0302,

	/* TX scheduler */
	i40e_aqc_opc_configure_vsi_bw_limit            = 0x0400,
	i40e_aqc_opc_configure_vsi_ets_sla_bw_limit    = 0x0406,
	i40e_aqc_opc_configure_vsi_tc_bw               = 0x0407,
	i40e_aqc_opc_query_vsi_bw_config               = 0x0408,
	i40e_aqc_opc_query_vsi_ets_sla_config          = 0x040A,
	i40e_aqc_opc_configure_switching_comp_bw_limit = 0x0410,

	i40e_aqc_opc_enable_switching_comp_ets             = 0x0413,
	i40e_aqc_opc_modify_switching_comp_ets             = 0x0414,
	i40e_aqc_opc_disable_switching_comp_ets            = 0x0415,
	i40e_aqc_opc_configure_switching_comp_ets_bw_limit = 0x0416,
	i40e_aqc_opc_configure_switching_comp_bw_config    = 0x0417,
	i40e_aqc_opc_query_switching_comp_ets_config       = 0x0418,
	i40e_aqc_opc_query_port_ets_config                 = 0x0419,
	i40e_aqc_opc_query_switching_comp_bw_config        = 0x041A,
	i40e_aqc_opc_suspend_port_tx                       = 0x041B,
	i40e_aqc_opc_resume_port_tx                        = 0x041C,

	/* hmc */
	i40e_aqc_opc_query_hmc_resource_profile = 0x0500,
	i40e_aqc_opc_set_hmc_resource_profile   = 0x0501,

	/* phy commands*/
	i40e_aqc_opc_get_phy_abilities   = 0x0600,
	i40e_aqc_opc_set_phy_config      = 0x0601,
	i40e_aqc_opc_set_mac_config      = 0x0603,
	i40e_aqc_opc_set_link_restart_an = 0x0605,
	i40e_aqc_opc_get_link_status     = 0x0607,
	i40e_aqc_opc_set_phy_int_mask    = 0x0613,
	i40e_aqc_opc_get_local_advt_reg  = 0x0614,
	i40e_aqc_opc_set_local_advt_reg  = 0x0615,
	i40e_aqc_opc_get_partner_advt    = 0x0616,
	i40e_aqc_opc_set_lb_modes        = 0x0618,
	i40e_aqc_opc_get_phy_wol_caps    = 0x0621,
	i40e_aqc_opc_set_phy_reset       = 0x0622,
	i40e_aqc_opc_upload_ext_phy_fm   = 0x0625,

	/* NVM commands */
	i40e_aqc_opc_nvm_read   = 0x0701,
	i40e_aqc_opc_nvm_erase  = 0x0702,
	i40e_aqc_opc_nvm_update = 0x0703,

	/* virtualization commands */
	i40e_aqc_opc_send_msg_to_pf   = 0x0801,
	i40e_aqc_opc_send_msg_to_vf   = 0x0802,
	i40e_aqc_opc_send_msg_to_peer = 0x0803,

	/* alternate structure */
	i40e_aqc_opc_alternate_write          = 0x0900,
	i40e_aqc_opc_alternate_write_indirect = 0x0901,
	i40e_aqc_opc_alternate_read           = 0x0902,
	i40e_aqc_opc_alternate_read_indirect  = 0x0903,
	i40e_aqc_opc_alternate_write_done     = 0x0904,
	i40e_aqc_opc_alternate_set_mode       = 0x0905,
	i40e_aqc_opc_alternate_clear_port     = 0x0906,

	/* LLDP commands */
	i40e_aqc_opc_lldp_get_mib    = 0x0A00,
	i40e_aqc_opc_lldp_update_mib = 0x0A01,
	i40e_aqc_opc_lldp_add_tlv    = 0x0A02,
	i40e_aqc_opc_lldp_update_tlv = 0x0A03,
	i40e_aqc_opc_lldp_delete_tlv = 0x0A04,
	i40e_aqc_opc_lldp_stop       = 0x0A05,
	i40e_aqc_opc_lldp_start      = 0x0A06,

	/* Tunnel commands */
	i40e_aqc_opc_add_udp_tunnel       = 0x0B00,
	i40e_aqc_opc_del_udp_tunnel       = 0x0B01,
	i40e_aqc_opc_tunnel_key_structure = 0x0B10,

	/* Async Events */
	i40e_aqc_opc_event_lan_overflow = 0x1001,

	/* OEM commands */
	i40e_aqc_opc_oem_parameter_change     = 0xFE00,
	i40e_aqc_opc_oem_device_status_change = 0xFE01,

	/* debug commands */
	i40e_aqc_opc_debug_get_deviceid     = 0xFF00,
	i40e_aqc_opc_debug_set_mode         = 0xFF01,
	i40e_aqc_opc_debug_read_reg         = 0xFF03,
	i40e_aqc_opc_debug_write_reg        = 0xFF04,
	i40e_aqc_opc_debug_read_reg_sg      = 0xFF05,
	i40e_aqc_opc_debug_write_reg_sg     = 0xFF06,
	i40e_aqc_opc_debug_modify_reg       = 0xFF07,
	i40e_aqc_opc_debug_dump_internals   = 0xFF08,
	i40e_aqc_opc_debug_modify_internals = 0xFF09,
};

/* command structures and indirect data structures */

/* Structure naming conventions:
 * - no suffix for direct command descriptor structures
 * - _data for indirect sent data
 * - _resp for indirect return data (data which is both will use _data)
 * - _completion for direct return data
 * - _element_ for repeated elements (may also be _data or _resp)
 *
 * Command structures are expected to overlay the params.raw member of the basic
 * descriptor, and as such cannot exceed 16 bytes in length.
 */

/* This macro is used to generate a compilation error if a structure
 * is not exactly the correct length. It gives a divide by zero error if the
 * structure is not of the correct size, otherwise it creates an enum that is
 * never used.
 */
#define I40E_CHECK_STRUCT_LEN(n, X) enum i40e_static_assert_enum_##X \
	{ i40e_static_assert_##X = (n)/((sizeof(struct X) == (n)) ? 1 : 0) }

/* This macro is used extensively to ensure that command structures are 16
 * bytes in length as they have to map to the raw array of that size.
 */
#define I40E_CHECK_CMD_LENGTH(X) I40E_CHECK_STRUCT_LEN(16, X)

/* internal (0x00XX) commands */

/* Get version (direct 0x0001) */
struct i40e_aqc_get_version {
	__le32 rom_ver;
	__le32 fw_build;
	__le16 fw_major;
	__le16 fw_minor;
	__le16 api_major;
	__le16 api_minor;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_get_version);

/* Send driver version (indirect 0x0002) */
struct i40e_aqc_driver_version {
	u8     driver_major_ver;
	u8     driver_minor_ver;
	u8     driver_build_ver;
	u8     driver_subbuild_ver;
	u8     reserved[4];
	__le32 address_high;
	__le32 address_low;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_driver_version);

/* Queue Shutdown (direct 0x0003) */
struct i40e_aqc_queue_shutdown {
	__le32     driver_unloading;
#define I40E_AQ_DRIVER_UNLOADING    0x1
	u8     reserved[12];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_queue_shutdown);

/* Request resource ownership (direct 0x0008)
 * Release resource ownership (direct 0x0009)
 */
#define I40E_AQ_RESOURCE_NVM               1
#define I40E_AQ_RESOURCE_SDP               2
#define I40E_AQ_RESOURCE_ACCESS_READ       1
#define I40E_AQ_RESOURCE_ACCESS_WRITE      2
#define I40E_AQ_RESOURCE_NVM_READ_TIMEOUT  3000
#define I40E_AQ_RESOURCE_NVM_WRITE_TIMEOUT 180000

struct i40e_aqc_request_resource {
	__le16 resource_id;
	__le16 access_type;
	__le32 timeout;
	__le32 resource_number;
	u8     reserved[4];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_request_resource);

/* Get function capabilities (indirect 0x000A)
 * Get device capabilities (indirect 0x000B)
 */
struct i40e_aqc_list_capabilites {
	u8 command_flags;
#define I40E_AQ_LIST_CAP_PF_INDEX_EN     1
	u8 pf_index;
	u8 reserved[2];
	__le32 count;
	__le32 addr_high;
	__le32 addr_low;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_list_capabilites);

struct i40e_aqc_list_capabilities_element_resp {
	__le16 id;
	u8     major_rev;
	u8     minor_rev;
	__le32 number;
	__le32 logical_id;
	__le32 phys_id;
	u8     reserved[16];
};

/* list of caps */

#define I40E_AQ_CAP_ID_SWITCH_MODE      0x0001
#define I40E_AQ_CAP_ID_MNG_MODE         0x0002
#define I40E_AQ_CAP_ID_NPAR_ACTIVE      0x0003
#define I40E_AQ_CAP_ID_OS2BMC_CAP       0x0004
#define I40E_AQ_CAP_ID_FUNCTIONS_VALID  0x0005
#define I40E_AQ_CAP_ID_ALTERNATE_RAM    0x0006
#define I40E_AQ_CAP_ID_SRIOV            0x0012
#define I40E_AQ_CAP_ID_VF               0x0013
#define I40E_AQ_CAP_ID_VMDQ             0x0014
#define I40E_AQ_CAP_ID_8021QBG          0x0015
#define I40E_AQ_CAP_ID_8021QBR          0x0016
#define I40E_AQ_CAP_ID_VSI              0x0017
#define I40E_AQ_CAP_ID_DCB              0x0018
#define I40E_AQ_CAP_ID_FCOE             0x0021
#define I40E_AQ_CAP_ID_RSS              0x0040
#define I40E_AQ_CAP_ID_RXQ              0x0041
#define I40E_AQ_CAP_ID_TXQ              0x0042
#define I40E_AQ_CAP_ID_MSIX             0x0043
#define I40E_AQ_CAP_ID_VF_MSIX          0x0044
#define I40E_AQ_CAP_ID_FLOW_DIRECTOR    0x0045
#define I40E_AQ_CAP_ID_1588             0x0046
#define I40E_AQ_CAP_ID_IWARP            0x0051
#define I40E_AQ_CAP_ID_LED              0x0061
#define I40E_AQ_CAP_ID_SDP              0x0062
#define I40E_AQ_CAP_ID_MDIO             0x0063
#define I40E_AQ_CAP_ID_FLEX10           0x00F1
#define I40E_AQ_CAP_ID_CEM              0x00F2

/* Set CPPM Configuration (direct 0x0103) */
struct i40e_aqc_cppm_configuration {
	__le16 command_flags;
#define I40E_AQ_CPPM_EN_LTRC    0x0800
#define I40E_AQ_CPPM_EN_DMCTH   0x1000
#define I40E_AQ_CPPM_EN_DMCTLX  0x2000
#define I40E_AQ_CPPM_EN_HPTC    0x4000
#define I40E_AQ_CPPM_EN_DMARC   0x8000
	__le16 ttlx;
	__le32 dmacr;
	__le16 dmcth;
	u8     hptc;
	u8     reserved;
	__le32 pfltrc;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_cppm_configuration);

/* Set ARP Proxy command / response (indirect 0x0104) */
struct i40e_aqc_arp_proxy_data {
	__le16 command_flags;
#define I40E_AQ_ARP_INIT_IPV4           0x0008
#define I40E_AQ_ARP_UNSUP_CTL           0x0010
#define I40E_AQ_ARP_ENA                 0x0020
#define I40E_AQ_ARP_ADD_IPV4            0x0040
#define I40E_AQ_ARP_DEL_IPV4            0x0080
	__le16 table_id;
	__le32 pfpm_proxyfc;
	__le32 ip_addr;
	u8     mac_addr[6];
};

/* Set NS Proxy Table Entry Command (indirect 0x0105) */
struct i40e_aqc_ns_proxy_data {
	__le16 table_idx_mac_addr_0;
	__le16 table_idx_mac_addr_1;
	__le16 table_idx_ipv6_0;
	__le16 table_idx_ipv6_1;
	__le16 control;
#define I40E_AQ_NS_PROXY_ADD_0             0x0100
#define I40E_AQ_NS_PROXY_DEL_0             0x0200
#define I40E_AQ_NS_PROXY_ADD_1             0x0400
#define I40E_AQ_NS_PROXY_DEL_1             0x0800
#define I40E_AQ_NS_PROXY_ADD_IPV6_0        0x1000
#define I40E_AQ_NS_PROXY_DEL_IPV6_0        0x2000
#define I40E_AQ_NS_PROXY_ADD_IPV6_1        0x4000
#define I40E_AQ_NS_PROXY_DEL_IPV6_1        0x8000
#define I40E_AQ_NS_PROXY_COMMAND_SEQ       0x0001
#define I40E_AQ_NS_PROXY_INIT_IPV6_TBL     0x0002
#define I40E_AQ_NS_PROXY_INIT_MAC_TBL      0x0004
	u8     mac_addr_0[6];
	u8     mac_addr_1[6];
	u8     local_mac_addr[6];
	u8     ipv6_addr_0[16]; /* Warning! spec specifies BE byte order */
	u8     ipv6_addr_1[16];
};

/* Manage LAA Command (0x0106) - obsolete */
struct i40e_aqc_mng_laa {
	__le16	command_flags;
#define I40E_AQ_LAA_FLAG_WR   0x8000
	u8     reserved[2];
	__le32 sal;
	__le16 sah;
	u8     reserved2[6];
};

/* Manage MAC Address Read Command (indirect 0x0107) */
struct i40e_aqc_mac_address_read {
	__le16	command_flags;
#define I40E_AQC_LAN_ADDR_VALID   0x10
#define I40E_AQC_SAN_ADDR_VALID   0x20
#define I40E_AQC_PORT_ADDR_VALID  0x40
#define I40E_AQC_WOL_ADDR_VALID   0x80
#define I40E_AQC_ADDR_VALID_MASK  0xf0
	u8     reserved[6];
	__le32 addr_high;
	__le32 addr_low;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_mac_address_read);

struct i40e_aqc_mac_address_read_data {
	u8 pf_lan_mac[6];
	u8 pf_san_mac[6];
	u8 port_mac[6];
	u8 pf_wol_mac[6];
};

I40E_CHECK_STRUCT_LEN(24, i40e_aqc_mac_address_read_data);

/* Manage MAC Address Write Command (0x0108) */
struct i40e_aqc_mac_address_write {
	__le16 command_flags;
#define I40E_AQC_WRITE_TYPE_LAA_ONLY    0x0000
#define I40E_AQC_WRITE_TYPE_LAA_WOL     0x4000
#define I40E_AQC_WRITE_TYPE_PORT        0x8000
#define I40E_AQC_WRITE_TYPE_MASK        0xc000
	__le16 mac_sah;
	__le32 mac_sal;
	u8     reserved[8];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_mac_address_write);

/* PXE commands (0x011x) */

/* Clear PXE Command and response  (direct 0x0110) */
struct i40e_aqc_clear_pxe {
	u8	rx_cnt;
	u8	reserved[15];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_clear_pxe);

/* Switch configuration commands (0x02xx) */

/* Used by many indirect commands that only pass an seid and a buffer in the
 * command
 */
struct i40e_aqc_switch_seid {
	__le16 seid;
	u8     reserved[6];
	__le32 addr_high;
	__le32 addr_low;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_switch_seid);

/* Get Switch Configuration command (indirect 0x0200)
 * uses i40e_aqc_switch_seid for the descriptor
 */
struct i40e_aqc_get_switch_config_header_resp {
	__le16 num_reported;
	__le16 num_total;
	u8     reserved[12];
};

struct i40e_aqc_switch_config_element_resp {
	u8     element_type;
#define I40E_AQ_SW_ELEM_TYPE_MAC        1
#define I40E_AQ_SW_ELEM_TYPE_PF         2
#define I40E_AQ_SW_ELEM_TYPE_VF         3
#define I40E_AQ_SW_ELEM_TYPE_EMP        4
#define I40E_AQ_SW_ELEM_TYPE_BMC        5
#define I40E_AQ_SW_ELEM_TYPE_PV         16
#define I40E_AQ_SW_ELEM_TYPE_VEB        17
#define I40E_AQ_SW_ELEM_TYPE_PA         18
#define I40E_AQ_SW_ELEM_TYPE_VSI        19
	u8     revision;
#define I40E_AQ_SW_ELEM_REV_1           1
	__le16 seid;
	__le16 uplink_seid;
	__le16 downlink_seid;
	u8     reserved[3];
	u8     connection_type;
#define I40E_AQ_CONN_TYPE_REGULAR       0x1
#define I40E_AQ_CONN_TYPE_DEFAULT       0x2
#define I40E_AQ_CONN_TYPE_CASCADED      0x3
	__le16 scheduler_id;
	__le16 element_info;
};

/* Get Switch Configuration (indirect 0x0200)
 *    an array of elements are returned in the response buffer
 *    the first in the array is the header, remainder are elements
 */
struct i40e_aqc_get_switch_config_resp {
	struct i40e_aqc_get_switch_config_header_resp header;
	struct i40e_aqc_switch_config_element_resp    element[1];
};

/* Add Statistics (direct 0x0201)
 * Remove Statistics (direct 0x0202)
 */
struct i40e_aqc_add_remove_statistics {
	__le16 seid;
	__le16 vlan;
	__le16 stat_index;
	u8     reserved[10];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_add_remove_statistics);

/* Set Port Parameters command (direct 0x0203) */
struct i40e_aqc_set_port_parameters {
	__le16 command_flags;
#define I40E_AQ_SET_P_PARAMS_SAVE_BAD_PACKETS   1
#define I40E_AQ_SET_P_PARAMS_PAD_SHORT_PACKETS  2 /* must set! */
#define I40E_AQ_SET_P_PARAMS_DOUBLE_VLAN_ENA    4
	__le16 bad_frame_vsi;
	__le16 default_seid;        /* reserved for command */
	u8     reserved[10];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_set_port_parameters);

/* Get Switch Resource Allocation (indirect 0x0204) */
struct i40e_aqc_get_switch_resource_alloc {
	u8     num_entries;         /* reserved for command */
	u8     reserved[7];
	__le32 addr_high;
	__le32 addr_low;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_get_switch_resource_alloc);

/* expect an array of these structs in the response buffer */
struct i40e_aqc_switch_resource_alloc_element_resp {
	u8     resource_type;
#define I40E_AQ_RESOURCE_TYPE_VEB                 0x0
#define I40E_AQ_RESOURCE_TYPE_VSI                 0x1
#define I40E_AQ_RESOURCE_TYPE_MACADDR             0x2
#define I40E_AQ_RESOURCE_TYPE_STAG                0x3
#define I40E_AQ_RESOURCE_TYPE_ETAG                0x4
#define I40E_AQ_RESOURCE_TYPE_MULTICAST_HASH      0x5
#define I40E_AQ_RESOURCE_TYPE_UNICAST_HASH        0x6
#define I40E_AQ_RESOURCE_TYPE_VLAN                0x7
#define I40E_AQ_RESOURCE_TYPE_VSI_LIST_ENTRY      0x8
#define I40E_AQ_RESOURCE_TYPE_ETAG_LIST_ENTRY     0x9
#define I40E_AQ_RESOURCE_TYPE_VLAN_STAT_POOL      0xA
#define I40E_AQ_RESOURCE_TYPE_MIRROR_RULE         0xB
#define I40E_AQ_RESOURCE_TYPE_QUEUE_SETS          0xC
#define I40E_AQ_RESOURCE_TYPE_VLAN_FILTERS        0xD
#define I40E_AQ_RESOURCE_TYPE_INNER_MAC_FILTERS   0xF
#define I40E_AQ_RESOURCE_TYPE_IP_FILTERS          0x10
#define I40E_AQ_RESOURCE_TYPE_GRE_VN_KEYS         0x11
#define I40E_AQ_RESOURCE_TYPE_VN2_KEYS            0x12
#define I40E_AQ_RESOURCE_TYPE_TUNNEL_PORTS        0x13
	u8     reserved1;
	__le16 guaranteed;
	__le16 total;
	__le16 used;
	__le16 total_unalloced;
	u8     reserved2[6];
};

/* Add VSI (indirect 0x0210)
 *    this indirect command uses struct i40e_aqc_vsi_properties_data
 *    as the indirect buffer (128 bytes)
 *
 * Update VSI (indirect 0x211)
 *     uses the same data structure as Add VSI
 *
 * Get VSI (indirect 0x0212)
 *     uses the same completion and data structure as Add VSI
 */
struct i40e_aqc_add_get_update_vsi {
	__le16 uplink_seid;
	u8     connection_type;
#define I40E_AQ_VSI_CONN_TYPE_NORMAL            0x1
#define I40E_AQ_VSI_CONN_TYPE_DEFAULT           0x2
#define I40E_AQ_VSI_CONN_TYPE_CASCADED          0x3
	u8     reserved1;
	u8     vf_id;
	u8     reserved2;
	__le16 vsi_flags;
#define I40E_AQ_VSI_TYPE_SHIFT          0x0
#define I40E_AQ_VSI_TYPE_MASK           (0x3 << I40E_AQ_VSI_TYPE_SHIFT)
#define I40E_AQ_VSI_TYPE_VF             0x0
#define I40E_AQ_VSI_TYPE_VMDQ2          0x1
#define I40E_AQ_VSI_TYPE_PF             0x2
#define I40E_AQ_VSI_TYPE_EMP_MNG        0x3
#define I40E_AQ_VSI_FLAG_CASCADED_PV    0x4
#define I40E_AQ_VSI_FLAG_CLOUD_VSI      0x8
	__le32 addr_high;
	__le32 addr_low;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_add_get_update_vsi);

struct i40e_aqc_add_get_update_vsi_completion {
	__le16 seid;
	__le16 vsi_number;
	__le16 vsi_used;
	__le16 vsi_free;
	__le32 addr_high;
	__le32 addr_low;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_add_get_update_vsi_completion);

struct i40e_aqc_vsi_properties_data {
	/* first 96 byte are written by SW */
	__le16 valid_sections;
#define I40E_AQ_VSI_PROP_SWITCH_VALID       0x0001
#define I40E_AQ_VSI_PROP_SECURITY_VALID     0x0002
#define I40E_AQ_VSI_PROP_VLAN_VALID         0x0004
#define I40E_AQ_VSI_PROP_CAS_PV_VALID       0x0008
#define I40E_AQ_VSI_PROP_INGRESS_UP_VALID   0x0010
#define I40E_AQ_VSI_PROP_EGRESS_UP_VALID    0x0020
#define I40E_AQ_VSI_PROP_QUEUE_MAP_VALID    0x0040
#define I40E_AQ_VSI_PROP_QUEUE_OPT_VALID    0x0080
#define I40E_AQ_VSI_PROP_OUTER_UP_VALID     0x0100
#define I40E_AQ_VSI_PROP_SCHED_VALID        0x0200
	/* switch section */
	__le16 switch_id; /* 12bit id combined with flags below */
#define I40E_AQ_VSI_SW_ID_SHIFT             0x0000
#define I40E_AQ_VSI_SW_ID_MASK              (0xFFF << I40E_AQ_VSI_SW_ID_SHIFT)
#define I40E_AQ_VSI_SW_ID_FLAG_NOT_STAG     0x1000
#define I40E_AQ_VSI_SW_ID_FLAG_ALLOW_LB     0x2000
#define I40E_AQ_VSI_SW_ID_FLAG_LOCAL_LB     0x4000
	u8     sw_reserved[2];
	/* security section */
	u8     sec_flags;
#define I40E_AQ_VSI_SEC_FLAG_ALLOW_DEST_OVRD    0x01
#define I40E_AQ_VSI_SEC_FLAG_ENABLE_VLAN_CHK    0x02
#define I40E_AQ_VSI_SEC_FLAG_ENABLE_MAC_CHK     0x04
	u8     sec_reserved;
	/* VLAN section */
	__le16 pvid; /* VLANS include priority bits */
	__le16 fcoe_pvid;
	u8     port_vlan_flags;
#define I40E_AQ_VSI_PVLAN_MODE_SHIFT        0x00
#define I40E_AQ_VSI_PVLAN_MODE_MASK         (0x03 << \
						I40E_AQ_VSI_PVLAN_MODE_SHIFT)
#define I40E_AQ_VSI_PVLAN_MODE_TAGGED       0x01
#define I40E_AQ_VSI_PVLAN_MODE_UNTAGGED     0x02
#define I40E_AQ_VSI_PVLAN_MODE_ALL          0x03
#define I40E_AQ_VSI_PVLAN_INSERT_PVID       0x04
#define I40E_AQ_VSI_PVLAN_EMOD_SHIFT        0x03
#define I40E_AQ_VSI_PVLAN_EMOD_MASK         (0x3 << \
					I40E_AQ_VSI_PVLAN_EMOD_SHIFT)
#define I40E_AQ_VSI_PVLAN_EMOD_STR_BOTH     0x0
#define I40E_AQ_VSI_PVLAN_EMOD_STR_UP       0x08
#define I40E_AQ_VSI_PVLAN_EMOD_STR          0x10
#define I40E_AQ_VSI_PVLAN_EMOD_NOTHING      0x18
	u8     pvlan_reserved[3];
	/* ingress egress up sections */
	__le32 ingress_table; /* bitmap, 3 bits per up */
#define I40E_AQ_VSI_UP_TABLE_UP0_SHIFT      0
#define I40E_AQ_VSI_UP_TABLE_UP0_MASK       (0x7 << \
					I40E_AQ_VSI_UP_TABLE_UP0_SHIFT)
#define I40E_AQ_VSI_UP_TABLE_UP1_SHIFT      3
#define I40E_AQ_VSI_UP_TABLE_UP1_MASK       (0x7 << \
					I40E_AQ_VSI_UP_TABLE_UP1_SHIFT)
#define I40E_AQ_VSI_UP_TABLE_UP2_SHIFT      6
#define I40E_AQ_VSI_UP_TABLE_UP2_MASK       (0x7 << \
					I40E_AQ_VSI_UP_TABLE_UP2_SHIFT)
#define I40E_AQ_VSI_UP_TABLE_UP3_SHIFT      9
#define I40E_AQ_VSI_UP_TABLE_UP3_MASK       (0x7 << \
					I40E_AQ_VSI_UP_TABLE_UP3_SHIFT)
#define I40E_AQ_VSI_UP_TABLE_UP4_SHIFT      12
#define I40E_AQ_VSI_UP_TABLE_UP4_MASK       (0x7 << \
					I40E_AQ_VSI_UP_TABLE_UP4_SHIFT)
#define I40E_AQ_VSI_UP_TABLE_UP5_SHIFT      15
#define I40E_AQ_VSI_UP_TABLE_UP5_MASK       (0x7 << \
					I40E_AQ_VSI_UP_TABLE_UP5_SHIFT)
#define I40E_AQ_VSI_UP_TABLE_UP6_SHIFT      18
#define I40E_AQ_VSI_UP_TABLE_UP6_MASK       (0x7 << \
					I40E_AQ_VSI_UP_TABLE_UP6_SHIFT)
#define I40E_AQ_VSI_UP_TABLE_UP7_SHIFT      21
#define I40E_AQ_VSI_UP_TABLE_UP7_MASK       (0x7 << \
					I40E_AQ_VSI_UP_TABLE_UP7_SHIFT)
	__le32 egress_table;   /* same defines as for ingress table */
	/* cascaded PV section */
	__le16 cas_pv_tag;
	u8     cas_pv_flags;
#define I40E_AQ_VSI_CAS_PV_TAGX_SHIFT      0x00
#define I40E_AQ_VSI_CAS_PV_TAGX_MASK       (0x03 << \
						I40E_AQ_VSI_CAS_PV_TAGX_SHIFT)
#define I40E_AQ_VSI_CAS_PV_TAGX_LEAVE      0x00
#define I40E_AQ_VSI_CAS_PV_TAGX_REMOVE     0x01
#define I40E_AQ_VSI_CAS_PV_TAGX_COPY       0x02
#define I40E_AQ_VSI_CAS_PV_INSERT_TAG      0x10
#define I40E_AQ_VSI_CAS_PV_ETAG_PRUNE      0x20
#define I40E_AQ_VSI_CAS_PV_ACCEPT_HOST_TAG 0x40
	u8     cas_pv_reserved;
	/* queue mapping section */
	__le16 mapping_flags;
#define I40E_AQ_VSI_QUE_MAP_CONTIG          0x0
#define I40E_AQ_VSI_QUE_MAP_NONCONTIG       0x1
	__le16 queue_mapping[16];
#define I40E_AQ_VSI_QUEUE_SHIFT             0x0
#define I40E_AQ_VSI_QUEUE_MASK              (0x7FF << I40E_AQ_VSI_QUEUE_SHIFT)
	__le16 tc_mapping[8];
#define I40E_AQ_VSI_TC_QUE_OFFSET_SHIFT     0
#define I40E_AQ_VSI_TC_QUE_OFFSET_MASK      (0x1FF << \
						I40E_AQ_VSI_TC_QUE_OFFSET_SHIFT)
#define I40E_AQ_VSI_TC_QUE_NUMBER_SHIFT     9
#define I40E_AQ_VSI_TC_QUE_NUMBER_MASK      (0x7 << \
						I40E_AQ_VSI_TC_QUE_NUMBER_SHIFT)
	/* queueing option section */
	u8     queueing_opt_flags;
#define I40E_AQ_VSI_QUE_OPT_TCP_ENA         0x10
#define I40E_AQ_VSI_QUE_OPT_FCOE_ENA        0x20
	u8     queueing_opt_reserved[3];
	/* scheduler section */
	u8     up_enable_bits;
	u8     sched_reserved;
	/* outer up section */
	__le32 outer_up_table; /* same structure and defines as ingress table */
	u8     cmd_reserved[8];
	/* last 32 bytes are written by FW */
	__le16 qs_handle[8];
#define I40E_AQ_VSI_QS_HANDLE_INVALID	0xFFFF
	__le16 stat_counter_idx;
	__le16 sched_id;
	u8     resp_reserved[12];
};

I40E_CHECK_STRUCT_LEN(128, i40e_aqc_vsi_properties_data);

/* Add Port Virtualizer (direct 0x0220)
 * also used for update PV (direct 0x0221) but only flags are used
 * (IS_CTRL_PORT only works on add PV)
 */
struct i40e_aqc_add_update_pv {
	__le16 command_flags;
#define I40E_AQC_PV_FLAG_PV_TYPE                0x1
#define I40E_AQC_PV_FLAG_FWD_UNKNOWN_STAG_EN    0x2
#define I40E_AQC_PV_FLAG_FWD_UNKNOWN_ETAG_EN    0x4
#define I40E_AQC_PV_FLAG_IS_CTRL_PORT           0x8
	__le16 uplink_seid;
	__le16 connected_seid;
	u8     reserved[10];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_add_update_pv);

struct i40e_aqc_add_update_pv_completion {
	/* reserved for update; for add also encodes error if rc == ENOSPC */
	__le16 pv_seid;
#define I40E_AQC_PV_ERR_FLAG_NO_PV               0x1
#define I40E_AQC_PV_ERR_FLAG_NO_SCHED            0x2
#define I40E_AQC_PV_ERR_FLAG_NO_COUNTER          0x4
#define I40E_AQC_PV_ERR_FLAG_NO_ENTRY            0x8
	u8     reserved[14];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_add_update_pv_completion);

/* Get PV Params (direct 0x0222)
 * uses i40e_aqc_switch_seid for the descriptor
 */

struct i40e_aqc_get_pv_params_completion {
	__le16 seid;
	__le16 default_stag;
	__le16 pv_flags; /* same flags as add_pv */
#define I40E_AQC_GET_PV_PV_TYPE            0x1
#define I40E_AQC_GET_PV_FRWD_UNKNOWN_STAG  0x2
#define I40E_AQC_GET_PV_FRWD_UNKNOWN_ETAG  0x4
	u8     reserved[8];
	__le16 default_port_seid;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_get_pv_params_completion);

/* Add VEB (direct 0x0230) */
struct i40e_aqc_add_veb {
	__le16 uplink_seid;
	__le16 downlink_seid;
	__le16 veb_flags;
#define I40E_AQC_ADD_VEB_FLOATING           0x1
#define I40E_AQC_ADD_VEB_PORT_TYPE_SHIFT    1
#define I40E_AQC_ADD_VEB_PORT_TYPE_MASK     (0x3 << \
					I40E_AQC_ADD_VEB_PORT_TYPE_SHIFT)
#define I40E_AQC_ADD_VEB_PORT_TYPE_DEFAULT  0x2
#define I40E_AQC_ADD_VEB_PORT_TYPE_DATA     0x4
#define I40E_AQC_ADD_VEB_ENABLE_L2_FILTER   0x8
	u8     enable_tcs;
	u8     reserved[9];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_add_veb);

struct i40e_aqc_add_veb_completion {
	u8     reserved[6];
	__le16 switch_seid;
	/* also encodes error if rc == ENOSPC; codes are the same as add_pv */
	__le16 veb_seid;
#define I40E_AQC_VEB_ERR_FLAG_NO_VEB              0x1
#define I40E_AQC_VEB_ERR_FLAG_NO_SCHED            0x2
#define I40E_AQC_VEB_ERR_FLAG_NO_COUNTER          0x4
#define I40E_AQC_VEB_ERR_FLAG_NO_ENTRY            0x8
	__le16 statistic_index;
	__le16 vebs_used;
	__le16 vebs_free;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_add_veb_completion);

/* Get VEB Parameters (direct 0x0232)
 * uses i40e_aqc_switch_seid for the descriptor
 */
struct i40e_aqc_get_veb_parameters_completion {
	__le16 seid;
	__le16 switch_id;
	__le16 veb_flags; /* only the first/last flags from 0x0230 is valid */
	__le16 statistic_index;
	__le16 vebs_used;
	__le16 vebs_free;
	u8     reserved[4];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_get_veb_parameters_completion);

/* Delete Element (direct 0x0243)
 * uses the generic i40e_aqc_switch_seid
 */

/* Add MAC-VLAN (indirect 0x0250) */

/* used for the command for most vlan commands */
struct i40e_aqc_macvlan {
	__le16 num_addresses;
	__le16 seid[3];
#define I40E_AQC_MACVLAN_CMD_SEID_NUM_SHIFT  0
#define I40E_AQC_MACVLAN_CMD_SEID_NUM_MASK   (0x3FF << \
					I40E_AQC_MACVLAN_CMD_SEID_NUM_SHIFT)
#define I40E_AQC_MACVLAN_CMD_SEID_VALID      0x8000
	__le32 addr_high;
	__le32 addr_low;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_macvlan);

/* indirect data for command and response */
struct i40e_aqc_add_macvlan_element_data {
	u8     mac_addr[6];
	__le16 vlan_tag;
	__le16 flags;
#define I40E_AQC_MACVLAN_ADD_PERFECT_MATCH     0x0001
#define I40E_AQC_MACVLAN_ADD_HASH_MATCH        0x0002
#define I40E_AQC_MACVLAN_ADD_IGNORE_VLAN       0x0004
#define I40E_AQC_MACVLAN_ADD_TO_QUEUE          0x0008
	__le16 queue_number;
#define I40E_AQC_MACVLAN_CMD_QUEUE_SHIFT  0
#define I40E_AQC_MACVLAN_CMD_QUEUE_MASK   (0x7FF << \
					I40E_AQC_MACVLAN_CMD_SEID_NUM_SHIFT)
	/* response section */
	u8     match_method;
#define I40E_AQC_MM_PERFECT_MATCH             0x01
#define I40E_AQC_MM_HASH_MATCH                0x02
#define I40E_AQC_MM_ERR_NO_RES                0xFF
	u8     reserved1[3];
};

struct i40e_aqc_add_remove_macvlan_completion {
	__le16 perfect_mac_used;
	__le16 perfect_mac_free;
	__le16 unicast_hash_free;
	__le16 multicast_hash_free;
	__le32 addr_high;
	__le32 addr_low;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_add_remove_macvlan_completion);

/* Remove MAC-VLAN (indirect 0x0251)
 * uses i40e_aqc_macvlan for the descriptor
 * data points to an array of num_addresses of elements
 */

struct i40e_aqc_remove_macvlan_element_data {
	u8     mac_addr[6];
	__le16 vlan_tag;
	u8     flags;
#define I40E_AQC_MACVLAN_DEL_PERFECT_MATCH      0x01
#define I40E_AQC_MACVLAN_DEL_HASH_MATCH         0x02
#define I40E_AQC_MACVLAN_DEL_IGNORE_VLAN        0x08
#define I40E_AQC_MACVLAN_DEL_ALL_VSIS           0x10
	u8     reserved[3];
	/* reply section */
	u8     error_code;
#define I40E_AQC_REMOVE_MACVLAN_SUCCESS         0x0
#define I40E_AQC_REMOVE_MACVLAN_FAIL            0xFF
	u8     reply_reserved[3];
};

/* Add VLAN (indirect 0x0252)
 * Remove VLAN (indirect 0x0253)
 * use the generic i40e_aqc_macvlan for the command
 */
struct i40e_aqc_add_remove_vlan_element_data {
	__le16 vlan_tag;
	u8     vlan_flags;
/* flags for add VLAN */
#define I40E_AQC_ADD_VLAN_LOCAL             0x1
#define I40E_AQC_ADD_PVLAN_TYPE_SHIFT       1
#define I40E_AQC_ADD_PVLAN_TYPE_MASK        (0x3 << \
						I40E_AQC_ADD_PVLAN_TYPE_SHIFT)
#define I40E_AQC_ADD_PVLAN_TYPE_REGULAR     0x0
#define I40E_AQC_ADD_PVLAN_TYPE_PRIMARY     0x2
#define I40E_AQC_ADD_PVLAN_TYPE_SECONDARY   0x4
#define I40E_AQC_VLAN_PTYPE_SHIFT           3
#define I40E_AQC_VLAN_PTYPE_MASK            (0x3 << I40E_AQC_VLAN_PTYPE_SHIFT)
#define I40E_AQC_VLAN_PTYPE_REGULAR_VSI     0x0
#define I40E_AQC_VLAN_PTYPE_PROMISC_VSI     0x8
#define I40E_AQC_VLAN_PTYPE_COMMUNITY_VSI   0x10
#define I40E_AQC_VLAN_PTYPE_ISOLATED_VSI    0x18
/* flags for remove VLAN */
#define I40E_AQC_REMOVE_VLAN_ALL            0x1
	u8     reserved;
	u8     result;
/* flags for add VLAN */
#define I40E_AQC_ADD_VLAN_SUCCESS       0x0
#define I40E_AQC_ADD_VLAN_FAIL_REQUEST  0xFE
#define I40E_AQC_ADD_VLAN_FAIL_RESOURCE 0xFF
/* flags for remove VLAN */
#define I40E_AQC_REMOVE_VLAN_SUCCESS    0x0
#define I40E_AQC_REMOVE_VLAN_FAIL       0xFF
	u8     reserved1[3];
};

struct i40e_aqc_add_remove_vlan_completion {
	u8     reserved[4];
	__le16 vlans_used;
	__le16 vlans_free;
	__le32 addr_high;
	__le32 addr_low;
};

/* Set VSI Promiscuous Modes (direct 0x0254) */
struct i40e_aqc_set_vsi_promiscuous_modes {
	__le16 promiscuous_flags;
	__le16 valid_flags;
/* flags used for both fields above */
#define I40E_AQC_SET_VSI_PROMISC_UNICAST     0x01
#define I40E_AQC_SET_VSI_PROMISC_MULTICAST   0x02
#define I40E_AQC_SET_VSI_PROMISC_BROADCAST   0x04
#define I40E_AQC_SET_VSI_DEFAULT             0x08
#define I40E_AQC_SET_VSI_PROMISC_VLAN        0x10
	__le16 seid;
#define I40E_AQC_VSI_PROM_CMD_SEID_MASK      0x3FF
	u8     reserved[10];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_set_vsi_promiscuous_modes);

/* Add S/E-tag command (direct 0x0255)
 * Uses generic i40e_aqc_add_remove_tag_completion for completion
 */
struct i40e_aqc_add_tag {
	__le16 flags;
#define I40E_AQC_ADD_TAG_FLAG_TO_QUEUE     0x0001
	__le16 seid;
#define I40E_AQC_ADD_TAG_CMD_SEID_NUM_SHIFT  0
#define I40E_AQC_ADD_TAG_CMD_SEID_NUM_MASK   (0x3FF << \
					I40E_AQC_ADD_TAG_CMD_SEID_NUM_SHIFT)
	__le16 tag;
	__le16 queue_number;
	u8     reserved[8];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_add_tag);

struct i40e_aqc_add_remove_tag_completion {
	u8     reserved[12];
	__le16 tags_used;
	__le16 tags_free;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_add_remove_tag_completion);

/* Remove S/E-tag command (direct 0x0256)
 * Uses generic i40e_aqc_add_remove_tag_completion for completion
 */
struct i40e_aqc_remove_tag {
	__le16 seid;
#define I40E_AQC_REMOVE_TAG_CMD_SEID_NUM_SHIFT  0
#define I40E_AQC_REMOVE_TAG_CMD_SEID_NUM_MASK   (0x3FF << \
					I40E_AQC_REMOVE_TAG_CMD_SEID_NUM_SHIFT)
	__le16 tag;
	u8     reserved[12];
};

/* Add multicast E-Tag (direct 0x0257)
 * del multicast E-Tag (direct 0x0258) only uses pv_seid and etag fields
 * and no external data
 */
struct i40e_aqc_add_remove_mcast_etag {
	__le16 pv_seid;
	__le16 etag;
	u8     num_unicast_etags;
	u8     reserved[3];
	__le32 addr_high;          /* address of array of 2-byte s-tags */
	__le32 addr_low;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_add_remove_mcast_etag);

struct i40e_aqc_add_remove_mcast_etag_completion {
	u8     reserved[4];
	__le16 mcast_etags_used;
	__le16 mcast_etags_free;
	__le32 addr_high;
	__le32 addr_low;

};

I40E_CHECK_CMD_LENGTH(i40e_aqc_add_remove_mcast_etag_completion);

/* Update S/E-Tag (direct 0x0259) */
struct i40e_aqc_update_tag {
	__le16 seid;
#define I40E_AQC_UPDATE_TAG_CMD_SEID_NUM_SHIFT  0
#define I40E_AQC_UPDATE_TAG_CMD_SEID_NUM_MASK   (0x3FF << \
					I40E_AQC_UPDATE_TAG_CMD_SEID_NUM_SHIFT)
	__le16 old_tag;
	__le16 new_tag;
	u8     reserved[10];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_update_tag);

struct i40e_aqc_update_tag_completion {
	u8     reserved[12];
	__le16 tags_used;
	__le16 tags_free;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_update_tag_completion);

/* Add Control Packet filter (direct 0x025A)
 * Remove Control Packet filter (direct 0x025B)
 * uses the i40e_aqc_add_oveb_cloud,
 * and the generic direct completion structure
 */
struct i40e_aqc_add_remove_control_packet_filter {
	u8     mac[6];
	__le16 etype;
	__le16 flags;
#define I40E_AQC_ADD_CONTROL_PACKET_FLAGS_IGNORE_MAC    0x0001
#define I40E_AQC_ADD_CONTROL_PACKET_FLAGS_DROP          0x0002
#define I40E_AQC_ADD_CONTROL_PACKET_FLAGS_TO_QUEUE      0x0004
#define I40E_AQC_ADD_CONTROL_PACKET_FLAGS_TX            0x0008
#define I40E_AQC_ADD_CONTROL_PACKET_FLAGS_RX            0x0000
	__le16 seid;
#define I40E_AQC_ADD_CONTROL_PACKET_CMD_SEID_NUM_SHIFT  0
#define I40E_AQC_ADD_CONTROL_PACKET_CMD_SEID_NUM_MASK   (0x3FF << \
				I40E_AQC_ADD_CONTROL_PACKET_CMD_SEID_NUM_SHIFT)
	__le16 queue;
	u8     reserved[2];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_add_remove_control_packet_filter);

struct i40e_aqc_add_remove_control_packet_filter_completion {
	__le16 mac_etype_used;
	__le16 etype_used;
	__le16 mac_etype_free;
	__le16 etype_free;
	u8     reserved[8];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_add_remove_control_packet_filter_completion);

/* Add Cloud filters (indirect 0x025C)
 * Remove Cloud filters (indirect 0x025D)
 * uses the i40e_aqc_add_remove_cloud_filters,
 * and the generic indirect completion structure
 */
struct i40e_aqc_add_remove_cloud_filters {
	u8     num_filters;
	u8     reserved;
	__le16 seid;
#define I40E_AQC_ADD_CLOUD_CMD_SEID_NUM_SHIFT  0
#define I40E_AQC_ADD_CLOUD_CMD_SEID_NUM_MASK   (0x3FF << \
					I40E_AQC_ADD_CLOUD_CMD_SEID_NUM_SHIFT)
	u8     reserved2[4];
	__le32 addr_high;
	__le32 addr_low;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_add_remove_cloud_filters);

struct i40e_aqc_add_remove_cloud_filters_element_data {
	u8     outer_mac[6];
	u8     inner_mac[6];
	__le16 inner_vlan;
	union {
		struct {
			u8 reserved[12];
			u8 data[4];
		} v4;
		struct {
			u8 data[16];
		} v6;
	} ipaddr;
	__le16 flags;
#define I40E_AQC_ADD_CLOUD_FILTER_SHIFT                 0
#define I40E_AQC_ADD_CLOUD_FILTER_MASK                  (0x3F << \
					I40E_AQC_ADD_CLOUD_FILTER_SHIFT)
#define I40E_AQC_ADD_CLOUD_FILTER_OIP_GRE               0x0002
#define I40E_AQC_ADD_CLOUD_FILTER_IMAC_IVLAN_GRE        0x0004
#define I40E_AQC_ADD_CLOUD_FILTER_IMAC_IVLAN_VNL        0x0007
/* 0x0000 reserved */
#define I40E_AQC_ADD_CLOUD_FILTER_OIP                   0x0001
/* 0x0002 reserved */
#define I40E_AQC_ADD_CLOUD_FILTER_IMAC_IVLAN            0x0003
#define I40E_AQC_ADD_CLOUD_FILTER_IMAC_IVLAN_TEN_ID     0x0004
/* 0x0005 reserved */
#define I40E_AQC_ADD_CLOUD_FILTER_IMAC_TEN_ID           0x0006
/* 0x0007 reserved */
/* 0x0008 reserved */
#define I40E_AQC_ADD_CLOUD_FILTER_OMAC                  0x0009
#define I40E_AQC_ADD_CLOUD_FILTER_IMAC                  0x000A
#define I40E_AQC_ADD_CLOUD_FILTER_OMAC_TEN_ID_IMAC      0x000B
#define I40E_AQC_ADD_CLOUD_FILTER_IIP                   0x000C

#define I40E_AQC_ADD_CLOUD_FLAGS_TO_QUEUE               0x0080
#define I40E_AQC_ADD_CLOUD_VNK_SHIFT                    6
#define I40E_AQC_ADD_CLOUD_VNK_MASK                     0x00C0
#define I40E_AQC_ADD_CLOUD_FLAGS_IPV4                   0
#define I40E_AQC_ADD_CLOUD_FLAGS_IPV6                   0x0100

#define I40E_AQC_ADD_CLOUD_TNL_TYPE_SHIFT               9
#define I40E_AQC_ADD_CLOUD_TNL_TYPE_MASK                0x1E00
#define I40E_AQC_ADD_CLOUD_TNL_TYPE_XVLAN               0
#define I40E_AQC_ADD_CLOUD_TNL_TYPE_NVGRE_OMAC          1
#define I40E_AQC_ADD_CLOUD_TNL_TYPE_NGE                 2
#define I40E_AQC_ADD_CLOUD_TNL_TYPE_IP                  3

	__le32 tenant_id;
	u8     reserved[4];
	__le16 queue_number;
#define I40E_AQC_ADD_CLOUD_QUEUE_SHIFT                  0
#define I40E_AQC_ADD_CLOUD_QUEUE_MASK                   (0x3F << \
					I40E_AQC_ADD_CLOUD_QUEUE_SHIFT)
	u8     reserved2[14];
	/* response section */
	u8     allocation_result;
#define I40E_AQC_ADD_CLOUD_FILTER_SUCCESS         0x0
#define I40E_AQC_ADD_CLOUD_FILTER_FAIL            0xFF
	u8     response_reserved[7];
};

struct i40e_aqc_remove_cloud_filters_completion {
	__le16 perfect_ovlan_used;
	__le16 perfect_ovlan_free;
	__le16 vlan_used;
	__le16 vlan_free;
	__le32 addr_high;
	__le32 addr_low;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_remove_cloud_filters_completion);

/* Add Mirror Rule (indirect or direct 0x0260)
 * Delete Mirror Rule (indirect or direct 0x0261)
 * note: some rule types (4,5) do not use an external buffer.
 *       take care to set the flags correctly.
 */
struct i40e_aqc_add_delete_mirror_rule {
	__le16 seid;
	__le16 rule_type;
#define I40E_AQC_MIRROR_RULE_TYPE_SHIFT            0
#define I40E_AQC_MIRROR_RULE_TYPE_MASK             (0x7 << \
						I40E_AQC_MIRROR_RULE_TYPE_SHIFT)
#define I40E_AQC_MIRROR_RULE_TYPE_VPORT_INGRESS    1
#define I40E_AQC_MIRROR_RULE_TYPE_VPORT_EGRESS     2
#define I40E_AQC_MIRROR_RULE_TYPE_VLAN             3
#define I40E_AQC_MIRROR_RULE_TYPE_ALL_INGRESS      4
#define I40E_AQC_MIRROR_RULE_TYPE_ALL_EGRESS       5
	__le16 num_entries;
	__le16 destination;  /* VSI for add, rule id for delete */
	__le32 addr_high;    /* address of array of 2-byte VSI or VLAN ids */
	__le32 addr_low;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_add_delete_mirror_rule);

struct i40e_aqc_add_delete_mirror_rule_completion {
	u8     reserved[2];
	__le16 rule_id;  /* only used on add */
	__le16 mirror_rules_used;
	__le16 mirror_rules_free;
	__le32 addr_high;
	__le32 addr_low;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_add_delete_mirror_rule_completion);

/* Set Storm Control Configuration (direct 0x0280)
 * Get Storm Control Configuration (direct 0x0281)
 *    the command and response use the same descriptor structure
 */
struct i40e_aqc_set_get_storm_control_config {
	__le32 broadcast_threshold;
	__le32 multicast_threshold;
	__le32 control_flags;
#define I40E_AQC_STORM_CONTROL_MDIPW            0x01
#define I40E_AQC_STORM_CONTROL_MDICW            0x02
#define I40E_AQC_STORM_CONTROL_BDIPW            0x04
#define I40E_AQC_STORM_CONTROL_BDICW            0x08
#define I40E_AQC_STORM_CONTROL_BIDU             0x10
#define I40E_AQC_STORM_CONTROL_INTERVAL_SHIFT   8
#define I40E_AQC_STORM_CONTROL_INTERVAL_MASK    (0x3FF << \
					I40E_AQC_STORM_CONTROL_INTERVAL_SHIFT)
	u8     reserved[4];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_set_get_storm_control_config);

/* DCB 0x03xx*/

/* PFC Ignore (direct 0x0301)
 *    the command and response use the same descriptor structure
 */
struct i40e_aqc_pfc_ignore {
	u8     tc_bitmap;
	u8     command_flags; /* unused on response */
#define I40E_AQC_PFC_IGNORE_SET    0x80
#define I40E_AQC_PFC_IGNORE_CLEAR  0x0
	u8     reserved[14];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_pfc_ignore);

/* DCB Update (direct 0x0302) uses the i40e_aq_desc structure
 * with no parameters
 */

/* TX scheduler 0x04xx */

/* Almost all the indirect commands use
 * this generic struct to pass the SEID in param0
 */
struct i40e_aqc_tx_sched_ind {
	__le16 vsi_seid;
	u8     reserved[6];
	__le32 addr_high;
	__le32 addr_low;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_tx_sched_ind);

/* Several commands respond with a set of queue set handles */
struct i40e_aqc_qs_handles_resp {
	__le16 qs_handles[8];
};

/* Configure VSI BW limits (direct 0x0400) */
struct i40e_aqc_configure_vsi_bw_limit {
	__le16 vsi_seid;
	u8     reserved[2];
	__le16 credit;
	u8     reserved1[2];
	u8     max_credit; /* 0-3, limit = 2^max */
	u8     reserved2[7];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_configure_vsi_bw_limit);

/* Configure VSI Bandwidth Limit per Traffic Type (indirect 0x0406)
 *    responds with i40e_aqc_qs_handles_resp
 */
struct i40e_aqc_configure_vsi_ets_sla_bw_data {
	u8     tc_valid_bits;
	u8     reserved[15];
	__le16 tc_bw_credits[8]; /* FW writesback QS handles here */

	/* 4 bits per tc 0-7, 4th bit is reserved, limit = 2^max */
	__le16 tc_bw_max[2];
	u8     reserved1[28];
};

/* Configure VSI Bandwidth Allocation per Traffic Type (indirect 0x0407)
 *    responds with i40e_aqc_qs_handles_resp
 */
struct i40e_aqc_configure_vsi_tc_bw_data {
	u8     tc_valid_bits;
	u8     reserved[3];
	u8     tc_bw_credits[8];
	u8     reserved1[4];
	__le16 qs_handles[8];
};

/* Query vsi bw configuration (indirect 0x0408) */
struct i40e_aqc_query_vsi_bw_config_resp {
	u8     tc_valid_bits;
	u8     tc_suspended_bits;
	u8     reserved[14];
	__le16 qs_handles[8];
	u8     reserved1[4];
	__le16 port_bw_limit;
	u8     reserved2[2];
	u8     max_bw; /* 0-3, limit = 2^max */
	u8     reserved3[23];
};

/* Query VSI Bandwidth Allocation per Traffic Type (indirect 0x040A) */
struct i40e_aqc_query_vsi_ets_sla_config_resp {
	u8     tc_valid_bits;
	u8     reserved[3];
	u8     share_credits[8];
	__le16 credits[8];

	/* 4 bits per tc 0-7, 4th bit is reserved, limit = 2^max */
	__le16 tc_bw_max[2];
};

/* Configure Switching Component Bandwidth Limit (direct 0x0410) */
struct i40e_aqc_configure_switching_comp_bw_limit {
	__le16 seid;
	u8     reserved[2];
	__le16 credit;
	u8     reserved1[2];
	u8     max_bw; /* 0-3, limit = 2^max */
	u8     reserved2[7];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_configure_switching_comp_bw_limit);

/* Enable  Physical Port ETS (indirect 0x0413)
 * Modify  Physical Port ETS (indirect 0x0414)
 * Disable Physical Port ETS (indirect 0x0415)
 */
struct i40e_aqc_configure_switching_comp_ets_data {
	u8     reserved[4];
	u8     tc_valid_bits;
	u8     reserved1;
	u8     tc_strict_priority_flags;
	u8     reserved2[17];
	u8     tc_bw_share_credits[8];
	u8     reserved3[96];
};

/* Configure Switching Component Bandwidth Limits per Tc (indirect 0x0416) */
struct i40e_aqc_configure_switching_comp_ets_bw_limit_data {
	u8     tc_valid_bits;
	u8     reserved[15];
	__le16 tc_bw_credit[8];

	/* 4 bits per tc 0-7, 4th bit is reserved, limit = 2^max */
	__le16 tc_bw_max[2];
	u8     reserved1[28];
};

/* Configure Switching Component Bandwidth Allocation per Tc
 * (indirect 0x0417)
 */
struct i40e_aqc_configure_switching_comp_bw_config_data {
	u8     tc_valid_bits;
	u8     reserved[2];
	u8     absolute_credits; /* bool */
	u8     tc_bw_share_credits[8];
	u8     reserved1[20];
};

/* Query Switching Component Configuration (indirect 0x0418) */
struct i40e_aqc_query_switching_comp_ets_config_resp {
	u8     tc_valid_bits;
	u8     reserved[35];
	__le16 port_bw_limit;
	u8     reserved1[2];
	u8     tc_bw_max; /* 0-3, limit = 2^max */
	u8     reserved2[23];
};

/* Query PhysicalPort ETS Configuration (indirect 0x0419) */
struct i40e_aqc_query_port_ets_config_resp {
	u8     reserved[4];
	u8     tc_valid_bits;
	u8     reserved1;
	u8     tc_strict_priority_bits;
	u8     reserved2;
	u8     tc_bw_share_credits[8];
	__le16 tc_bw_limits[8];

	/* 4 bits per tc 0-7, 4th bit reserved, limit = 2^max */
	__le16 tc_bw_max[2];
	u8     reserved3[32];
};

/* Query Switching Component Bandwidth Allocation per Traffic Type
 * (indirect 0x041A)
 */
struct i40e_aqc_query_switching_comp_bw_config_resp {
	u8     tc_valid_bits;
	u8     reserved[2];
	u8     absolute_credits_enable; /* bool */
	u8     tc_bw_share_credits[8];
	__le16 tc_bw_limits[8];

	/* 4 bits per tc 0-7, 4th bit is reserved, limit = 2^max */
	__le16 tc_bw_max[2];
};

/* Suspend/resume port TX traffic
 * (direct 0x041B and 0x041C) uses the generic SEID struct
 */

/* Get and set the active HMC resource profile and status.
 * (direct 0x0500) and (direct 0x0501)
 */
struct i40e_aq_get_set_hmc_resource_profile {
	u8     pm_profile;
	u8     pe_vf_enabled;
	u8     reserved[14];
};

I40E_CHECK_CMD_LENGTH(i40e_aq_get_set_hmc_resource_profile);

enum i40e_aq_hmc_profile {
	/* I40E_HMC_PROFILE_NO_CHANGE    = 0, reserved */
	I40E_HMC_PROFILE_DEFAULT     = 1,
	I40E_HMC_PROFILE_FAVOR_VF    = 2,
	I40E_HMC_PROFILE_EQUAL       = 3,
};

#define I40E_AQ_GET_HMC_RESOURCE_PROFILE_PM_MASK       0xF
#define I40E_AQ_GET_HMC_RESOURCE_PROFILE_COUNT_MASK    0x3F

/* Get PHY Abilities (indirect 0x0600) uses the generic indirect struct */

/* set in param0 for get phy abilities to report qualified modules */
#define I40E_AQ_PHY_REPORT_QUALIFIED_MODULES  0x0001
#define I40E_AQ_PHY_REPORT_INITIAL_VALUES     0x0002

enum i40e_aq_phy_type {
	I40E_PHY_TYPE_SGMII			= 0x0,
	I40E_PHY_TYPE_1000BASE_KX		= 0x1,
	I40E_PHY_TYPE_10GBASE_KX4		= 0x2,
	I40E_PHY_TYPE_10GBASE_KR		= 0x3,
	I40E_PHY_TYPE_40GBASE_KR4		= 0x4,
	I40E_PHY_TYPE_XAUI			= 0x5,
	I40E_PHY_TYPE_XFI			= 0x6,
	I40E_PHY_TYPE_SFI			= 0x7,
	I40E_PHY_TYPE_XLAUI			= 0x8,
	I40E_PHY_TYPE_XLPPI			= 0x9,
	I40E_PHY_TYPE_40GBASE_CR4_CU		= 0xA,
	I40E_PHY_TYPE_10GBASE_CR1_CU		= 0xB,
	I40E_PHY_TYPE_100BASE_TX		= 0x11,
	I40E_PHY_TYPE_1000BASE_T		= 0x12,
	I40E_PHY_TYPE_10GBASE_T			= 0x13,
	I40E_PHY_TYPE_10GBASE_SR		= 0x14,
	I40E_PHY_TYPE_10GBASE_LR		= 0x15,
	I40E_PHY_TYPE_10GBASE_SFPP_CU		= 0x16,
	I40E_PHY_TYPE_10GBASE_CR1		= 0x17,
	I40E_PHY_TYPE_40GBASE_CR4		= 0x18,
	I40E_PHY_TYPE_40GBASE_SR4		= 0x19,
	I40E_PHY_TYPE_40GBASE_LR4		= 0x1A,
	I40E_PHY_TYPE_20GBASE_KR2		= 0x1B,
	I40E_PHY_TYPE_MAX
};

#define I40E_LINK_SPEED_100MB_SHIFT	0x1
#define I40E_LINK_SPEED_1000MB_SHIFT	0x2
#define I40E_LINK_SPEED_10GB_SHIFT	0x3
#define I40E_LINK_SPEED_40GB_SHIFT	0x4
#define I40E_LINK_SPEED_20GB_SHIFT	0x5

enum i40e_aq_link_speed {
	I40E_LINK_SPEED_UNKNOWN	= 0,
	I40E_LINK_SPEED_100MB	= (1 << I40E_LINK_SPEED_100MB_SHIFT),
	I40E_LINK_SPEED_1GB	= (1 << I40E_LINK_SPEED_1000MB_SHIFT),
	I40E_LINK_SPEED_10GB	= (1 << I40E_LINK_SPEED_10GB_SHIFT),
	I40E_LINK_SPEED_40GB	= (1 << I40E_LINK_SPEED_40GB_SHIFT),
	I40E_LINK_SPEED_20GB	= (1 << I40E_LINK_SPEED_20GB_SHIFT)
};

struct i40e_aqc_module_desc {
	u8 oui[3];
	u8 reserved1;
	u8 part_number[16];
	u8 revision[4];
	u8 reserved2[8];
};

struct i40e_aq_get_phy_abilities_resp {
	__le32 phy_type;       /* bitmap using the above enum for offsets */
	u8     link_speed;     /* bitmap using the above enum bit patterns */
	u8     abilities;
#define I40E_AQ_PHY_FLAG_PAUSE_TX         0x01
#define I40E_AQ_PHY_FLAG_PAUSE_RX         0x02
#define I40E_AQ_PHY_FLAG_LOW_POWER        0x04
#define I40E_AQ_PHY_FLAG_AN_SHIFT         3
#define I40E_AQ_PHY_FLAG_AN_MASK          (0x3 << I40E_AQ_PHY_FLAG_AN_SHIFT)
#define I40E_AQ_PHY_FLAG_AN_OFF           0x00 /* link forced on */
#define I40E_AQ_PHY_FLAG_AN_OFF_LINK_DOWN 0x01
#define I40E_AQ_PHY_FLAG_AN_ON            0x02
#define I40E_AQ_PHY_FLAG_MODULE_QUAL      0x20
	__le16 eee_capability;
#define I40E_AQ_EEE_100BASE_TX       0x0002
#define I40E_AQ_EEE_1000BASE_T       0x0004
#define I40E_AQ_EEE_10GBASE_T        0x0008
#define I40E_AQ_EEE_1000BASE_KX      0x0010
#define I40E_AQ_EEE_10GBASE_KX4      0x0020
#define I40E_AQ_EEE_10GBASE_KR       0x0040
	__le32 eeer_val;
	u8     d3_lpan;
#define I40E_AQ_SET_PHY_D3_LPAN_ENA  0x01
	u8     reserved[3];
	u8     phy_id[4];
	u8     module_type[3];
	u8     qualified_module_count;
#define I40E_AQ_PHY_MAX_QMS          16
	struct i40e_aqc_module_desc  qualified_module[I40E_AQ_PHY_MAX_QMS];
};

/* Set PHY Config (direct 0x0601) */
struct i40e_aq_set_phy_config { /* same bits as above in all */
	__le32 phy_type;
	u8     link_speed;
	u8     abilities;
/* bits 0-2 use the values from get_phy_abilities_resp */
#define I40E_AQ_PHY_ENABLE_LINK		0x08
#define I40E_AQ_PHY_ENABLE_AN		0x10
#define I40E_AQ_PHY_ENABLE_ATOMIC_LINK	0x20
	__le16 eee_capability;
	__le32 eeer;
	u8     low_power_ctrl;
	u8     reserved[3];
};

I40E_CHECK_CMD_LENGTH(i40e_aq_set_phy_config);

/* Set MAC Config command data structure (direct 0x0603) */
struct i40e_aq_set_mac_config {
	__le16 max_frame_size;
	u8     params;
#define I40E_AQ_SET_MAC_CONFIG_CRC_EN           0x04
#define I40E_AQ_SET_MAC_CONFIG_PACING_MASK      0x78
#define I40E_AQ_SET_MAC_CONFIG_PACING_SHIFT     3
#define I40E_AQ_SET_MAC_CONFIG_PACING_NONE      0x0
#define I40E_AQ_SET_MAC_CONFIG_PACING_1B_13TX   0xF
#define I40E_AQ_SET_MAC_CONFIG_PACING_1DW_9TX   0x9
#define I40E_AQ_SET_MAC_CONFIG_PACING_1DW_4TX   0x8
#define I40E_AQ_SET_MAC_CONFIG_PACING_3DW_7TX   0x7
#define I40E_AQ_SET_MAC_CONFIG_PACING_2DW_3TX   0x6
#define I40E_AQ_SET_MAC_CONFIG_PACING_1DW_1TX   0x5
#define I40E_AQ_SET_MAC_CONFIG_PACING_3DW_2TX   0x4
#define I40E_AQ_SET_MAC_CONFIG_PACING_7DW_3TX   0x3
#define I40E_AQ_SET_MAC_CONFIG_PACING_4DW_1TX   0x2
#define I40E_AQ_SET_MAC_CONFIG_PACING_9DW_1TX   0x1
	u8     tx_timer_priority; /* bitmap */
	__le16 tx_timer_value;
	__le16 fc_refresh_threshold;
	u8     reserved[8];
};

I40E_CHECK_CMD_LENGTH(i40e_aq_set_mac_config);

/* Restart Auto-Negotiation (direct 0x605) */
struct i40e_aqc_set_link_restart_an {
	u8     command;
#define I40E_AQ_PHY_RESTART_AN  0x02
#define I40E_AQ_PHY_LINK_ENABLE 0x04
	u8     reserved[15];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_set_link_restart_an);

/* Get Link Status cmd & response data structure (direct 0x0607) */
struct i40e_aqc_get_link_status {
	__le16 command_flags; /* only field set on command */
#define I40E_AQ_LSE_MASK             0x3
#define I40E_AQ_LSE_NOP              0x0
#define I40E_AQ_LSE_DISABLE          0x2
#define I40E_AQ_LSE_ENABLE           0x3
/* only response uses this flag */
#define I40E_AQ_LSE_IS_ENABLED       0x1
	u8     phy_type;    /* i40e_aq_phy_type   */
	u8     link_speed;  /* i40e_aq_link_speed */
	u8     link_info;
#define I40E_AQ_LINK_UP              0x01
#define I40E_AQ_LINK_FAULT           0x02
#define I40E_AQ_LINK_FAULT_TX        0x04
#define I40E_AQ_LINK_FAULT_RX        0x08
#define I40E_AQ_LINK_FAULT_REMOTE    0x10
#define I40E_AQ_MEDIA_AVAILABLE      0x40
#define I40E_AQ_SIGNAL_DETECT        0x80
	u8     an_info;
#define I40E_AQ_AN_COMPLETED         0x01
#define I40E_AQ_LP_AN_ABILITY        0x02
#define I40E_AQ_PD_FAULT             0x04
#define I40E_AQ_FEC_EN               0x08
#define I40E_AQ_PHY_LOW_POWER        0x10
#define I40E_AQ_LINK_PAUSE_TX        0x20
#define I40E_AQ_LINK_PAUSE_RX        0x40
#define I40E_AQ_QUALIFIED_MODULE     0x80
	u8     ext_info;
#define I40E_AQ_LINK_PHY_TEMP_ALARM  0x01
#define I40E_AQ_LINK_XCESSIVE_ERRORS 0x02
#define I40E_AQ_LINK_TX_SHIFT        0x02
#define I40E_AQ_LINK_TX_MASK         (0x03 << I40E_AQ_LINK_TX_SHIFT)
#define I40E_AQ_LINK_TX_ACTIVE       0x00
#define I40E_AQ_LINK_TX_DRAINED      0x01
#define I40E_AQ_LINK_TX_FLUSHED      0x03
	u8     loopback;         /* use defines from i40e_aqc_set_lb_mode */
	__le16 max_frame_size;
	u8     config;
#define I40E_AQ_CONFIG_CRC_ENA       0x04
#define I40E_AQ_CONFIG_PACING_MASK   0x78
	u8     reserved[5];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_get_link_status);

/* Set event mask command (direct 0x613) */
struct i40e_aqc_set_phy_int_mask {
	u8     reserved[8];
	__le16 event_mask;
#define I40E_AQ_EVENT_LINK_UPDOWN       0x0002
#define I40E_AQ_EVENT_MEDIA_NA          0x0004
#define I40E_AQ_EVENT_LINK_FAULT        0x0008
#define I40E_AQ_EVENT_PHY_TEMP_ALARM    0x0010
#define I40E_AQ_EVENT_EXCESSIVE_ERRORS  0x0020
#define I40E_AQ_EVENT_SIGNAL_DETECT     0x0040
#define I40E_AQ_EVENT_AN_COMPLETED      0x0080
#define I40E_AQ_EVENT_MODULE_QUAL_FAIL  0x0100
#define I40E_AQ_EVENT_PORT_TX_SUSPENDED 0x0200
	u8     reserved1[6];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_set_phy_int_mask);

/* Get Local AN advt register (direct 0x0614)
 * Set Local AN advt register (direct 0x0615)
 * Get Link Partner AN advt register (direct 0x0616)
 */
struct i40e_aqc_an_advt_reg {
	__le32 local_an_reg0;
	__le16 local_an_reg1;
	u8     reserved[10];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_an_advt_reg);

/* Set Loopback mode (0x0618) */
struct i40e_aqc_set_lb_mode {
	__le16 lb_mode;
#define I40E_AQ_LB_PHY_LOCAL   0x01
#define I40E_AQ_LB_PHY_REMOTE  0x02
#define I40E_AQ_LB_MAC_LOCAL   0x04
	u8     reserved[14];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_set_lb_mode);

/* Set PHY Reset command (0x0622) */
struct i40e_aqc_set_phy_reset {
	u8     reset_flags;
#define I40E_AQ_PHY_RESET_REQUEST  0x02
	u8     reserved[15];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_set_phy_reset);

enum i40e_aq_phy_reg_type {
	I40E_AQC_PHY_REG_INTERNAL         = 0x1,
	I40E_AQC_PHY_REG_EXERNAL_BASET    = 0x2,
	I40E_AQC_PHY_REG_EXERNAL_MODULE   = 0x3
};

/* NVM Read command (indirect 0x0701)
 * NVM Erase commands (direct 0x0702)
 * NVM Update commands (indirect 0x0703)
 */
struct i40e_aqc_nvm_update {
	u8     command_flags;
#define I40E_AQ_NVM_LAST_CMD    0x01
#define I40E_AQ_NVM_FLASH_ONLY  0x80
	u8     module_pointer;
	__le16 length;
	__le32 offset;
	__le32 addr_high;
	__le32 addr_low;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_nvm_update);

/* Send to PF command (indirect 0x0801) id is only used by PF
 * Send to VF command (indirect 0x0802) id is only used by PF
 * Send to Peer PF command (indirect 0x0803)
 */
struct i40e_aqc_pf_vf_message {
	__le32 id;
	u8     reserved[4];
	__le32 addr_high;
	__le32 addr_low;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_pf_vf_message);

/* Alternate structure */

/* Direct write (direct 0x0900)
 * Direct read (direct 0x0902)
 */
struct i40e_aqc_alternate_write {
	__le32 address0;
	__le32 data0;
	__le32 address1;
	__le32 data1;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_alternate_write);

/* Indirect write (indirect 0x0901)
 * Indirect read (indirect 0x0903)
 */

struct i40e_aqc_alternate_ind_write {
	__le32 address;
	__le32 length;
	__le32 addr_high;
	__le32 addr_low;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_alternate_ind_write);

/* Done alternate write (direct 0x0904)
 * uses i40e_aq_desc
 */
struct i40e_aqc_alternate_write_done {
	__le16 cmd_flags;
#define I40E_AQ_ALTERNATE_MODE_BIOS_MASK	1
#define I40E_AQ_ALTERNATE_MODE_BIOS_LEGACY	0
#define I40E_AQ_ALTERNATE_MODE_BIOS_UEFI	1
#define I40E_AQ_ALTERNATE_RESET_NEEDED		2
	u8     reserved[14];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_alternate_write_done);

/* Set OEM mode (direct 0x0905) */
struct i40e_aqc_alternate_set_mode {
	__le32 mode;
#define I40E_AQ_ALTERNATE_MODE_NONE	0
#define I40E_AQ_ALTERNATE_MODE_OEM	1
	u8     reserved[12];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_alternate_set_mode);

/* Clear port Alternate RAM (direct 0x0906) uses i40e_aq_desc */

/* async events 0x10xx */

/* Lan Queue Overflow Event (direct, 0x1001) */
struct i40e_aqc_lan_overflow {
	__le32 prtdcb_rupto;
	__le32 otx_ctl;
	u8     reserved[8];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_lan_overflow);

/* Get LLDP MIB (indirect 0x0A00) */
struct i40e_aqc_lldp_get_mib {
	u8     type;
	u8     reserved1;
#define I40E_AQ_LLDP_MIB_TYPE_MASK                      0x3
#define I40E_AQ_LLDP_MIB_LOCAL                          0x0
#define I40E_AQ_LLDP_MIB_REMOTE                         0x1
#define I40E_AQ_LLDP_MIB_LOCAL_AND_REMOTE               0x2
#define I40E_AQ_LLDP_BRIDGE_TYPE_MASK                   0xC
#define I40E_AQ_LLDP_BRIDGE_TYPE_SHIFT                  0x2
#define I40E_AQ_LLDP_BRIDGE_TYPE_NEAREST_BRIDGE         0x0
#define I40E_AQ_LLDP_BRIDGE_TYPE_NON_TPMR               0x1
#define I40E_AQ_LLDP_TX_SHIFT              0x4
#define I40E_AQ_LLDP_TX_MASK               (0x03 << I40E_AQ_LLDP_TX_SHIFT)
/* TX pause flags use I40E_AQ_LINK_TX_* above */
	__le16 local_len;
	__le16 remote_len;
	u8     reserved2[2];
	__le32 addr_high;
	__le32 addr_low;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_lldp_get_mib);

/* Configure LLDP MIB Change Event (direct 0x0A01)
 * also used for the event (with type in the command field)
 */
struct i40e_aqc_lldp_update_mib {
	u8     command;
#define I40E_AQ_LLDP_MIB_UPDATE_ENABLE          0x0
#define I40E_AQ_LLDP_MIB_UPDATE_DISABLE         0x1
	u8     reserved[7];
	__le32 addr_high;
	__le32 addr_low;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_lldp_update_mib);

/* Add LLDP TLV (indirect 0x0A02)
 * Delete LLDP TLV (indirect 0x0A04)
 */
struct i40e_aqc_lldp_add_tlv {
	u8     type; /* only nearest bridge and non-TPMR from 0x0A00 */
	u8     reserved1[1];
	__le16 len;
	u8     reserved2[4];
	__le32 addr_high;
	__le32 addr_low;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_lldp_add_tlv);

/* Update LLDP TLV (indirect 0x0A03) */
struct i40e_aqc_lldp_update_tlv {
	u8     type; /* only nearest bridge and non-TPMR from 0x0A00 */
	u8     reserved;
	__le16 old_len;
	__le16 new_offset;
	__le16 new_len;
	__le32 addr_high;
	__le32 addr_low;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_lldp_update_tlv);

/* Stop LLDP (direct 0x0A05) */
struct i40e_aqc_lldp_stop {
	u8     command;
#define I40E_AQ_LLDP_AGENT_STOP                 0x0
#define I40E_AQ_LLDP_AGENT_SHUTDOWN             0x1
	u8     reserved[15];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_lldp_stop);

/* Start LLDP (direct 0x0A06) */

struct i40e_aqc_lldp_start {
	u8     command;
#define I40E_AQ_LLDP_AGENT_START                0x1
	u8     reserved[15];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_lldp_start);

/* Apply MIB changes (0x0A07)
 * uses the generic struc as it contains no data
 */

/* Add Udp Tunnel command and completion (direct 0x0B00) */
struct i40e_aqc_add_udp_tunnel {
	__le16 udp_port;
	u8     header_len; /* in DWords, 1 to 15 */
	u8     protocol_type;
#define I40E_AQC_TUNNEL_TYPE_TEREDO	0x0
#define I40E_AQC_TUNNEL_TYPE_VXLAN	0x2
#define I40E_AQC_TUNNEL_TYPE_NGE	0x3
	u8     variable_udp_length;
#define I40E_AQC_TUNNEL_FIXED_UDP_LENGTH	0x0
#define I40E_AQC_TUNNEL_VARIABLE_UDP_LENGTH	0x1
	u8		udp_key_index;
#define I40E_AQC_TUNNEL_KEY_INDEX_VXLAN			0x0
#define I40E_AQC_TUNNEL_KEY_INDEX_NGE			0x1
#define I40E_AQC_TUNNEL_KEY_INDEX_PROPRIETARY_UDP	0x2
	u8		reserved[10];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_add_udp_tunnel);

struct i40e_aqc_add_udp_tunnel_completion {
	__le16 udp_port;
	u8	filter_entry_index;
	u8	multiple_pfs;
#define I40E_AQC_SINGLE_PF				0x0
#define I40E_AQC_MULTIPLE_PFS			0x1
	u8	total_filters;
	u8	reserved[11];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_add_udp_tunnel_completion);

/* remove UDP Tunnel command (0x0B01) */
struct i40e_aqc_remove_udp_tunnel {
	u8     reserved[2];
	u8     index; /* 0 to 15 */
	u8     pf_filters;
	u8     total_filters;
	u8     reserved2[11];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_remove_udp_tunnel);

struct i40e_aqc_del_udp_tunnel_completion {
	__le16 udp_port;
	u8     index; /* 0 to 15 */
	u8     multiple_pfs;
	u8     total_filters_used;
	u8     reserved;
	u8     tunnels_free;
	u8     reserved1[9];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_del_udp_tunnel_completion);

/* tunnel key structure 0x0B10 */

struct i40e_aqc_tunnel_key_structure_A0 {
	__le16     key1_off;
	__le16     key1_len;
	__le16     key2_off;
	__le16     key2_len;
	__le16     flags;
#define I40E_AQC_TUNNEL_KEY_STRUCT_OVERRIDE 0x01
/* response flags */
#define I40E_AQC_TUNNEL_KEY_STRUCT_SUCCESS    0x01
#define I40E_AQC_TUNNEL_KEY_STRUCT_MODIFIED   0x02
#define I40E_AQC_TUNNEL_KEY_STRUCT_OVERRIDDEN 0x03
	u8         resreved[6];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_tunnel_key_structure_A0);

struct i40e_aqc_tunnel_key_structure {
	u8	key1_off;
	u8	key2_off;
	u8	key1_len;  /* 0 to 15 */
	u8	key2_len;  /* 0 to 15 */
	u8	flags;
#define I40E_AQC_TUNNEL_KEY_STRUCT_OVERRIDE 0x01
/* response flags */
#define I40E_AQC_TUNNEL_KEY_STRUCT_SUCCESS    0x01
#define I40E_AQC_TUNNEL_KEY_STRUCT_MODIFIED   0x02
#define I40E_AQC_TUNNEL_KEY_STRUCT_OVERRIDDEN 0x03
	u8	network_key_index;
#define I40E_AQC_NETWORK_KEY_INDEX_VXLAN		0x0
#define I40E_AQC_NETWORK_KEY_INDEX_NGE			0x1
#define I40E_AQC_NETWORK_KEY_INDEX_FLEX_MAC_IN_UDP	0x2
#define I40E_AQC_NETWORK_KEY_INDEX_GRE			0x3
	u8	reserved[10];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_tunnel_key_structure);

/* OEM mode commands (direct 0xFE0x) */
struct i40e_aqc_oem_param_change {
	__le32 param_type;
#define I40E_AQ_OEM_PARAM_TYPE_PF_CTL   0
#define I40E_AQ_OEM_PARAM_TYPE_BW_CTL   1
#define I40E_AQ_OEM_PARAM_MAC           2
	__le32 param_value1;
	u8     param_value2[8];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_oem_param_change);

struct i40e_aqc_oem_state_change {
	__le32 state;
#define I40E_AQ_OEM_STATE_LINK_DOWN  0x0
#define I40E_AQ_OEM_STATE_LINK_UP    0x1
	u8     reserved[12];
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_oem_state_change);

/* debug commands */

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

/* set test more (0xFF01, internal) */

struct i40e_acq_set_test_mode {
	u8     mode;
#define I40E_AQ_TEST_PARTIAL    0
#define I40E_AQ_TEST_FULL       1
#define I40E_AQ_TEST_NVM        2
	u8     reserved[3];
	u8     command;
#define I40E_AQ_TEST_OPEN        0
#define I40E_AQ_TEST_CLOSE       1
#define I40E_AQ_TEST_INC         2
	u8     reserved2[3];
	__le32 address_high;
	__le32 address_low;
};

I40E_CHECK_CMD_LENGTH(i40e_acq_set_test_mode);

/* Debug Read Register command (0xFF03)
 * Debug Write Register command (0xFF04)
 */
struct i40e_aqc_debug_reg_read_write {
	__le32 reserved;
	__le32 address;
	__le32 value_high;
	__le32 value_low;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_debug_reg_read_write);

/* Scatter/gather Reg Read  (indirect 0xFF05)
 * Scatter/gather Reg Write (indirect 0xFF06)
 */

/* i40e_aq_desc is used for the command */
struct i40e_aqc_debug_reg_sg_element_data {
	__le32 address;
	__le32 value;
};

/* Debug Modify register (direct 0xFF07) */
struct i40e_aqc_debug_modify_reg {
	__le32 address;
	__le32 value;
	__le32 clear_mask;
	__le32 set_mask;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_debug_modify_reg);

/* dump internal data (0xFF08, indirect) */

#define I40E_AQ_CLUSTER_ID_AUX		0
#define I40E_AQ_CLUSTER_ID_SWITCH_FLU	1
#define I40E_AQ_CLUSTER_ID_TXSCHED	2
#define I40E_AQ_CLUSTER_ID_HMC		3
#define I40E_AQ_CLUSTER_ID_MAC0		4
#define I40E_AQ_CLUSTER_ID_MAC1		5
#define I40E_AQ_CLUSTER_ID_MAC2		6
#define I40E_AQ_CLUSTER_ID_MAC3		7
#define I40E_AQ_CLUSTER_ID_DCB		8
#define I40E_AQ_CLUSTER_ID_EMP_MEM	9
#define I40E_AQ_CLUSTER_ID_PKT_BUF	10
#define I40E_AQ_CLUSTER_ID_ALTRAM	11

struct i40e_aqc_debug_dump_internals {
	u8     cluster_id;
	u8     table_id;
	__le16 data_size;
	__le32 idx;
	__le32 address_high;
	__le32 address_low;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_debug_dump_internals);

struct i40e_aqc_debug_modify_internals {
	u8     cluster_id;
	u8     cluster_specific_params[7];
	__le32 address_high;
	__le32 address_low;
};

I40E_CHECK_CMD_LENGTH(i40e_aqc_debug_modify_internals);

#endif
