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