1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
|
/* $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
|