if_iavfvar.h revision 1.1 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