1 1.1 yamaguch /* $NetBSD: if_iavfvar.h,v 1.1 2020/09/08 10:05:47 yamaguchi Exp $ */ 2 1.1 yamaguch 3 1.1 yamaguch /* 4 1.1 yamaguch * Copyright (c) 2020 Internet Initiative Japan, Inc. 5 1.1 yamaguch * All rights reserved. 6 1.1 yamaguch * 7 1.1 yamaguch * Redistribution and use in source and binary forms, with or without 8 1.1 yamaguch * modification, are permitted provided that the following conditions 9 1.1 yamaguch * are met: 10 1.1 yamaguch * 1. Redistributions of source code must retain the above copyright 11 1.1 yamaguch * notice, this list of conditions and the following disclaimer. 12 1.1 yamaguch * 2. Redistributions in binary form must reproduce the above copyright 13 1.1 yamaguch * notice, this list of conditions and the following disclaimer in the 14 1.1 yamaguch * documentation and/or other materials provided with the distribution. 15 1.1 yamaguch * 16 1.1 yamaguch * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 17 1.1 yamaguch * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 18 1.1 yamaguch * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 19 1.1 yamaguch * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 20 1.1 yamaguch * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 1.1 yamaguch * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 1.1 yamaguch * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 1.1 yamaguch * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 1.1 yamaguch * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 1.1 yamaguch * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 1.1 yamaguch * POSSIBILITY OF SUCH DAMAGE. 27 1.1 yamaguch */ 28 1.1 yamaguch 29 1.1 yamaguch #ifndef _DEV_PCI_IF_IAVFVAR_H_ 30 1.1 yamaguch #define _DEV_PCI_IF_IAVFVAR_H_ 31 1.1 yamaguch 32 1.1 yamaguch /* aq commands */ 33 1.1 yamaguch #define IAVF_AQ_OP_SEND_TO_PF 0x0801 34 1.1 yamaguch #define IAVF_AQ_OP_MSG_FROM_PF 0x0802 35 1.1 yamaguch #define IAVF_AQ_OP_SHUTDOWN 0x0803 36 1.1 yamaguch 37 1.1 yamaguch /* virt channel messages */ 38 1.1 yamaguch #define IAVF_VC_OP_VERSION 1 39 1.1 yamaguch #define IAVF_VC_OP_RESET_VF 2 40 1.1 yamaguch #define IAVF_VC_OP_GET_VF_RESOURCES 3 41 1.1 yamaguch #define IAVF_VC_OP_CONFIG_TX_QUEUE 4 42 1.1 yamaguch #define IAVF_VC_OP_CONFIG_RX_QUEUE 5 43 1.1 yamaguch #define IAVF_VC_OP_CONFIG_VSI_QUEUES 6 44 1.1 yamaguch #define IAVF_VC_OP_CONFIG_IRQ_MAP 7 45 1.1 yamaguch #define IAVF_VC_OP_ENABLE_QUEUES 8 46 1.1 yamaguch #define IAVF_VC_OP_DISABLE_QUEUES 9 47 1.1 yamaguch #define IAVF_VC_OP_ADD_ETH_ADDR 10 48 1.1 yamaguch #define IAVF_VC_OP_DEL_ETH_ADDR 11 49 1.1 yamaguch #define IAVF_VC_OP_ADD_VLAN 12 50 1.1 yamaguch #define IAVF_VC_OP_DEL_VLAN 13 51 1.1 yamaguch #define IAVF_VC_OP_CONFIG_PROMISC 14 52 1.1 yamaguch #define IAVF_VC_OP_GET_STATS 15 53 1.1 yamaguch #define IAVF_VC_OP_EVENT 17 54 1.1 yamaguch #define IAVF_VC_OP_CONFIG_RSS_KEY 23 55 1.1 yamaguch #define IAVF_VC_OP_CONFIG_RSS_LUT 24 56 1.1 yamaguch #define IAVF_VC_OP_GET_RSS_HENA_CAPS 25 57 1.1 yamaguch #define IAVF_VC_OP_SET_RSS_HENA 26 58 1.1 yamaguch #define IAVF_VC_OP_ENABLE_VLAN_STRIP 27 59 1.1 yamaguch #define IAVF_VC_OP_DISABLE_VLAN_STRIP 28 60 1.1 yamaguch #define IAVF_VC_OP_REQUEST_QUEUES 29 61 1.1 yamaguch 62 1.1 yamaguch /* virt channel response codes */ 63 1.1 yamaguch #define IAVF_VC_RC_SUCCESS 0 64 1.1 yamaguch #define IAVF_VC_RC_ERR_PARAM -5 65 1.1 yamaguch #define IAVF_VC_RC_ERR_OPCODE -38 66 1.1 yamaguch #define IAVF_VC_RC_ERR_CQP_COMPL -39 67 1.1 yamaguch #define IAVF_VC_RC_ERR_VF_ID -40 68 1.1 yamaguch #define IAVF_VC_RC_ERR_NOT_SUP -64 69 1.1 yamaguch 70 1.1 yamaguch /* virt channel events */ 71 1.1 yamaguch #define IAVF_VC_EVENT_LINK_CHANGE 1 72 1.1 yamaguch #define IAVF_VC_EVENT_RESET_IMPENDING 2 73 1.1 yamaguch #define IAVF_VC_EVENT_PF_DRIVER_CLOSE 3 74 1.1 yamaguch 75 1.1 yamaguch /* virt channel offloads */ 76 1.1 yamaguch #define IAVF_VC_OFFLOAD_L2 0x00000001 77 1.1 yamaguch #define IAVF_VC_OFFLOAD_IWARP 0x00000002 78 1.1 yamaguch #define IAVF_VC_OFFLOAD_RSVD 0x00000004 79 1.1 yamaguch #define IAVF_VC_OFFLOAD_RSS_AQ 0x00000008 80 1.1 yamaguch #define IAVF_VC_OFFLOAD_RSS_REG 0x00000010 81 1.1 yamaguch #define IAVF_VC_OFFLOAD_WB_ON_ITR 0x00000020 82 1.1 yamaguch #define IAVF_VC_OFFLOAD_REQ_QUEUES 0x00000040 83 1.1 yamaguch #define IAVF_VC_OFFLOAD_VLAN 0x00010000 84 1.1 yamaguch #define IAVF_VC_OFFLOAD_RX_POLLING 0x00020000 85 1.1 yamaguch #define IAVF_VC_OFFLOAD_RSS_PCTYPE_V2 0x00040000 86 1.1 yamaguch #define IAVF_VC_OFFLOAD_RSS_PF 0x00080000 87 1.1 yamaguch #define IAVF_VC_OFFLOAD_ENCAP 0x00100000 88 1.1 yamaguch #define IAVF_VC_OFFLOAD_ENCAP_CSUM 0x00200000 89 1.1 yamaguch #define IAVF_VC_OFFLOAD_RX_ENCAP_CSUM 0x00400000 90 1.1 yamaguch 91 1.1 yamaguch #define IAVF_VC_OFFLOAD_FMT "\020" \ 92 1.1 yamaguch "\027RENCAP" "\026ENCAPC" "\025ENCAP" \ 93 1.1 yamaguch "\024RSSPF" "\023RSSV2" "\022RPOLL" \ 94 1.1 yamaguch "\021VLAN" "\007REQQ" "\006WB" \ 95 1.1 yamaguch "\005RSSREG" "\004RSSAQ" "\003RSVD" \ 96 1.1 yamaguch "\002IWARP" "\001L2" 97 1.1 yamaguch 98 1.1 yamaguch struct iavf_aq_vc { 99 1.1 yamaguch uint32_t iaq_vc_opcode; 100 1.1 yamaguch uint32_t iaq_vc_retval; 101 1.1 yamaguch } __packed; 102 1.1 yamaguch 103 1.1 yamaguch struct iavf_vc_version_info { 104 1.1 yamaguch uint32_t major; 105 1.1 yamaguch uint32_t minor; 106 1.1 yamaguch } __packed; 107 1.1 yamaguch 108 1.1 yamaguch struct iavf_vc_vsi_resource { 109 1.1 yamaguch uint16_t vsi_id; 110 1.1 yamaguch uint16_t num_queue_pairs; 111 1.1 yamaguch uint32_t vsi_type; 112 1.1 yamaguch uint16_t qset_handle; 113 1.1 yamaguch uint8_t default_mac[ETHER_ADDR_LEN]; 114 1.1 yamaguch } __packed; 115 1.1 yamaguch 116 1.1 yamaguch struct iavf_vc_vf_resource { 117 1.1 yamaguch uint16_t num_vsis; 118 1.1 yamaguch uint16_t num_qp; 119 1.1 yamaguch uint16_t max_vectors; 120 1.1 yamaguch uint16_t max_mtu; 121 1.1 yamaguch uint32_t offload_flags; 122 1.1 yamaguch uint32_t rss_key_size; 123 1.1 yamaguch uint32_t rss_lut_size; 124 1.1 yamaguch struct iavf_vc_vsi_resource 125 1.1 yamaguch vsi_res[1]; 126 1.1 yamaguch } __packed; 127 1.1 yamaguch 128 1.1 yamaguch struct iavf_vc_vector_map { 129 1.1 yamaguch uint16_t vsi_id; 130 1.1 yamaguch uint16_t vector_id; 131 1.1 yamaguch uint16_t rxq_map; 132 1.1 yamaguch uint16_t txq_map; 133 1.1 yamaguch uint16_t rxitr_idx; 134 1.1 yamaguch uint16_t txitr_idx; 135 1.1 yamaguch } __packed; 136 1.1 yamaguch 137 1.1 yamaguch struct iavf_vc_irq_map_info { 138 1.1 yamaguch uint16_t num_vectors; 139 1.1 yamaguch struct iavf_vc_vector_map vecmap[1]; 140 1.1 yamaguch } __packed; 141 1.1 yamaguch 142 1.1 yamaguch struct iavf_vc_txq_info { 143 1.1 yamaguch uint16_t vsi_id; 144 1.1 yamaguch uint16_t queue_id; 145 1.1 yamaguch uint16_t ring_len; 146 1.1 yamaguch uint16_t headwb_ena; /* deprecated */ 147 1.1 yamaguch uint64_t dma_ring_addr; 148 1.1 yamaguch uint64_t dma_headwb_addr; /* deprecated */ 149 1.1 yamaguch } __packed; 150 1.1 yamaguch 151 1.1 yamaguch struct iavf_vc_rxq_info { 152 1.1 yamaguch uint16_t vsi_id; 153 1.1 yamaguch uint16_t queue_id; 154 1.1 yamaguch uint32_t ring_len; 155 1.1 yamaguch uint16_t hdr_size; 156 1.1 yamaguch uint16_t splithdr_ena; 157 1.1 yamaguch uint32_t databuf_size; 158 1.1 yamaguch uint32_t max_pkt_size; 159 1.1 yamaguch uint32_t pad1; 160 1.1 yamaguch uint64_t dma_ring_addr; 161 1.1 yamaguch uint32_t rx_split_pos; 162 1.1 yamaguch uint32_t pad2; 163 1.1 yamaguch } __packed; 164 1.1 yamaguch 165 1.1 yamaguch struct iavf_vc_queue_pair_info { 166 1.1 yamaguch struct iavf_vc_txq_info txq; 167 1.1 yamaguch struct iavf_vc_rxq_info rxq; 168 1.1 yamaguch } __packed; 169 1.1 yamaguch 170 1.1 yamaguch struct iavf_vc_queue_config_info { 171 1.1 yamaguch uint16_t vsi_id; 172 1.1 yamaguch uint16_t num_queue_pairs; 173 1.1 yamaguch uint32_t pad; 174 1.1 yamaguch struct iavf_vc_queue_pair_info qpair[1]; 175 1.1 yamaguch } __packed; 176 1.1 yamaguch 177 1.1 yamaguch struct iavf_vc_queue_select { 178 1.1 yamaguch uint16_t vsi_id; 179 1.1 yamaguch uint16_t pad; 180 1.1 yamaguch uint32_t rx_queues; 181 1.1 yamaguch uint32_t tx_queues; 182 1.1 yamaguch } __packed; 183 1.1 yamaguch 184 1.1 yamaguch struct iavf_vc_promisc_info { 185 1.1 yamaguch uint16_t vsi_id; 186 1.1 yamaguch uint16_t flags; 187 1.1 yamaguch #define IAVF_FLAG_VF_UNICAST_PROMISC 0x0001 188 1.1 yamaguch #define IAVF_FLAG_VF_MULTICAST_PROMISC 0x0002 189 1.1 yamaguch } __packed; 190 1.1 yamaguch 191 1.1 yamaguch struct iavf_vc_eth_addr { 192 1.1 yamaguch uint8_t addr[ETHER_ADDR_LEN]; 193 1.1 yamaguch uint8_t pad[2]; 194 1.1 yamaguch } __packed; 195 1.1 yamaguch 196 1.1 yamaguch struct iavf_vc_eth_addr_list { 197 1.1 yamaguch uint16_t vsi_id; 198 1.1 yamaguch uint16_t num_elements; 199 1.1 yamaguch struct iavf_vc_eth_addr list[1]; 200 1.1 yamaguch } __packed; 201 1.1 yamaguch 202 1.1 yamaguch struct iavf_vc_pf_event { 203 1.1 yamaguch uint32_t event; 204 1.1 yamaguch uint32_t link_speed; 205 1.1 yamaguch uint8_t link_status; 206 1.1 yamaguch uint8_t pad[3]; 207 1.1 yamaguch uint32_t severity; 208 1.1 yamaguch } __packed; 209 1.1 yamaguch 210 1.1 yamaguch struct iavf_vc_vlan_filter { 211 1.1 yamaguch uint16_t vsi_id; 212 1.1 yamaguch uint16_t num_vlan_id; 213 1.1 yamaguch uint16_t vlan_id[1]; 214 1.1 yamaguch } __packed; 215 1.1 yamaguch 216 1.1 yamaguch struct iavf_vc_rss_key { 217 1.1 yamaguch uint16_t vsi_id; 218 1.1 yamaguch uint16_t key_len; 219 1.1 yamaguch uint8_t key[1]; 220 1.1 yamaguch uint8_t pad[1]; 221 1.1 yamaguch } __packed; 222 1.1 yamaguch 223 1.1 yamaguch struct iavf_vc_rss_lut { 224 1.1 yamaguch uint16_t vsi_id; 225 1.1 yamaguch uint16_t lut_entries; 226 1.1 yamaguch uint8_t lut[1]; 227 1.1 yamaguch uint8_t pad[1]; 228 1.1 yamaguch }__packed; 229 1.1 yamaguch 230 1.1 yamaguch #define IAVF_RSS_VSI_LUT_ENTRY_MASK 0x3F 231 1.1 yamaguch 232 1.1 yamaguch struct iavf_vc_res_request { 233 1.1 yamaguch uint16_t num_queue_pairs; 234 1.1 yamaguch } __packed; 235 1.1 yamaguch 236 1.1 yamaguch #define I40E_MAX_VF_QUEUES 16 237 1.1 yamaguch 238 1.1 yamaguch #endif 239