/* $NetBSD: if_iavfvar.h,v 1.1 2020/09/08 10:05:47 yamaguchi Exp $ */ /* * Copyright (c) 2020 Internet Initiative Japan, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #ifndef _DEV_PCI_IF_IAVFVAR_H_ #define _DEV_PCI_IF_IAVFVAR_H_ /* aq commands */ #define IAVF_AQ_OP_SEND_TO_PF 0x0801 #define IAVF_AQ_OP_MSG_FROM_PF 0x0802 #define IAVF_AQ_OP_SHUTDOWN 0x0803 /* virt channel messages */ #define IAVF_VC_OP_VERSION 1 #define IAVF_VC_OP_RESET_VF 2 #define IAVF_VC_OP_GET_VF_RESOURCES 3 #define IAVF_VC_OP_CONFIG_TX_QUEUE 4 #define IAVF_VC_OP_CONFIG_RX_QUEUE 5 #define IAVF_VC_OP_CONFIG_VSI_QUEUES 6 #define IAVF_VC_OP_CONFIG_IRQ_MAP 7 #define IAVF_VC_OP_ENABLE_QUEUES 8 #define IAVF_VC_OP_DISABLE_QUEUES 9 #define IAVF_VC_OP_ADD_ETH_ADDR 10 #define IAVF_VC_OP_DEL_ETH_ADDR 11 #define IAVF_VC_OP_ADD_VLAN 12 #define IAVF_VC_OP_DEL_VLAN 13 #define IAVF_VC_OP_CONFIG_PROMISC 14 #define IAVF_VC_OP_GET_STATS 15 #define IAVF_VC_OP_EVENT 17 #define IAVF_VC_OP_CONFIG_RSS_KEY 23 #define IAVF_VC_OP_CONFIG_RSS_LUT 24 #define IAVF_VC_OP_GET_RSS_HENA_CAPS 25 #define IAVF_VC_OP_SET_RSS_HENA 26 #define IAVF_VC_OP_ENABLE_VLAN_STRIP 27 #define IAVF_VC_OP_DISABLE_VLAN_STRIP 28 #define IAVF_VC_OP_REQUEST_QUEUES 29 /* virt channel response codes */ #define IAVF_VC_RC_SUCCESS 0 #define IAVF_VC_RC_ERR_PARAM -5 #define IAVF_VC_RC_ERR_OPCODE -38 #define IAVF_VC_RC_ERR_CQP_COMPL -39 #define IAVF_VC_RC_ERR_VF_ID -40 #define IAVF_VC_RC_ERR_NOT_SUP -64 /* virt channel events */ #define IAVF_VC_EVENT_LINK_CHANGE 1 #define IAVF_VC_EVENT_RESET_IMPENDING 2 #define IAVF_VC_EVENT_PF_DRIVER_CLOSE 3 /* virt channel offloads */ #define IAVF_VC_OFFLOAD_L2 0x00000001 #define IAVF_VC_OFFLOAD_IWARP 0x00000002 #define IAVF_VC_OFFLOAD_RSVD 0x00000004 #define IAVF_VC_OFFLOAD_RSS_AQ 0x00000008 #define IAVF_VC_OFFLOAD_RSS_REG 0x00000010 #define IAVF_VC_OFFLOAD_WB_ON_ITR 0x00000020 #define IAVF_VC_OFFLOAD_REQ_QUEUES 0x00000040 #define IAVF_VC_OFFLOAD_VLAN 0x00010000 #define IAVF_VC_OFFLOAD_RX_POLLING 0x00020000 #define IAVF_VC_OFFLOAD_RSS_PCTYPE_V2 0x00040000 #define IAVF_VC_OFFLOAD_RSS_PF 0x00080000 #define IAVF_VC_OFFLOAD_ENCAP 0x00100000 #define IAVF_VC_OFFLOAD_ENCAP_CSUM 0x00200000 #define IAVF_VC_OFFLOAD_RX_ENCAP_CSUM 0x00400000 #define IAVF_VC_OFFLOAD_FMT "\020" \ "\027RENCAP" "\026ENCAPC" "\025ENCAP" \ "\024RSSPF" "\023RSSV2" "\022RPOLL" \ "\021VLAN" "\007REQQ" "\006WB" \ "\005RSSREG" "\004RSSAQ" "\003RSVD" \ "\002IWARP" "\001L2" struct iavf_aq_vc { uint32_t iaq_vc_opcode; uint32_t iaq_vc_retval; } __packed; struct iavf_vc_version_info { uint32_t major; uint32_t minor; } __packed; struct iavf_vc_vsi_resource { uint16_t vsi_id; uint16_t num_queue_pairs; uint32_t vsi_type; uint16_t qset_handle; uint8_t default_mac[ETHER_ADDR_LEN]; } __packed; struct iavf_vc_vf_resource { uint16_t num_vsis; uint16_t num_qp; uint16_t max_vectors; uint16_t max_mtu; uint32_t offload_flags; uint32_t rss_key_size; uint32_t rss_lut_size; struct iavf_vc_vsi_resource vsi_res[1]; } __packed; struct iavf_vc_vector_map { uint16_t vsi_id; uint16_t vector_id; uint16_t rxq_map; uint16_t txq_map; uint16_t rxitr_idx; uint16_t txitr_idx; } __packed; struct iavf_vc_irq_map_info { uint16_t num_vectors; struct iavf_vc_vector_map vecmap[1]; } __packed; struct iavf_vc_txq_info { uint16_t vsi_id; uint16_t queue_id; uint16_t ring_len; uint16_t headwb_ena; /* deprecated */ uint64_t dma_ring_addr; uint64_t dma_headwb_addr; /* deprecated */ } __packed; struct iavf_vc_rxq_info { uint16_t vsi_id; uint16_t queue_id; uint32_t ring_len; uint16_t hdr_size; uint16_t splithdr_ena; uint32_t databuf_size; uint32_t max_pkt_size; uint32_t pad1; uint64_t dma_ring_addr; uint32_t rx_split_pos; uint32_t pad2; } __packed; struct iavf_vc_queue_pair_info { struct iavf_vc_txq_info txq; struct iavf_vc_rxq_info rxq; } __packed; struct iavf_vc_queue_config_info { uint16_t vsi_id; uint16_t num_queue_pairs; uint32_t pad; struct iavf_vc_queue_pair_info qpair[1]; } __packed; struct iavf_vc_queue_select { uint16_t vsi_id; uint16_t pad; uint32_t rx_queues; uint32_t tx_queues; } __packed; struct iavf_vc_promisc_info { uint16_t vsi_id; uint16_t flags; #define IAVF_FLAG_VF_UNICAST_PROMISC 0x0001 #define IAVF_FLAG_VF_MULTICAST_PROMISC 0x0002 } __packed; struct iavf_vc_eth_addr { uint8_t addr[ETHER_ADDR_LEN]; uint8_t pad[2]; } __packed; struct iavf_vc_eth_addr_list { uint16_t vsi_id; uint16_t num_elements; struct iavf_vc_eth_addr list[1]; } __packed; struct iavf_vc_pf_event { uint32_t event; uint32_t link_speed; uint8_t link_status; uint8_t pad[3]; uint32_t severity; } __packed; struct iavf_vc_vlan_filter { uint16_t vsi_id; uint16_t num_vlan_id; uint16_t vlan_id[1]; } __packed; struct iavf_vc_rss_key { uint16_t vsi_id; uint16_t key_len; uint8_t key[1]; uint8_t pad[1]; } __packed; struct iavf_vc_rss_lut { uint16_t vsi_id; uint16_t lut_entries; uint8_t lut[1]; uint8_t pad[1]; }__packed; #define IAVF_RSS_VSI_LUT_ENTRY_MASK 0x3F struct iavf_vc_res_request { uint16_t num_queue_pairs; } __packed; #define I40E_MAX_VF_QUEUES 16 #endif