xref: /netbsd-src/sys/dev/pci/if_iavfvar.h (revision f474b47c5660a7fcaf5650206dbf24e615f4876f)
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