1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#ifndef _VNIC_DEVCMD_H_
21#define _VNIC_DEVCMD_H_
22
23#define _CMD_NBITS 14
24#define _CMD_VTYPEBITS 10
25#define _CMD_FLAGSBITS 6
26#define _CMD_DIRBITS 2
27
28#define _CMD_NMASK ((1 << _CMD_NBITS)-1)
29#define _CMD_VTYPEMASK ((1 << _CMD_VTYPEBITS)-1)
30#define _CMD_FLAGSMASK ((1 << _CMD_FLAGSBITS)-1)
31#define _CMD_DIRMASK ((1 << _CMD_DIRBITS)-1)
32
33#define _CMD_NSHIFT 0
34#define _CMD_VTYPESHIFT (_CMD_NSHIFT+_CMD_NBITS)
35#define _CMD_FLAGSSHIFT (_CMD_VTYPESHIFT+_CMD_VTYPEBITS)
36#define _CMD_DIRSHIFT (_CMD_FLAGSSHIFT+_CMD_FLAGSBITS)
37
38
39
40
41#define _CMD_DIR_NONE 0U
42#define _CMD_DIR_WRITE 1U
43#define _CMD_DIR_READ 2U
44#define _CMD_DIR_RW (_CMD_DIR_WRITE | _CMD_DIR_READ)
45
46
47
48
49#define _CMD_FLAGS_NONE 0U
50#define _CMD_FLAGS_NOWAIT 1U
51
52
53
54
55#define _CMD_VTYPE_NONE 0U
56#define _CMD_VTYPE_ENET 1U
57#define _CMD_VTYPE_FC 2U
58#define _CMD_VTYPE_SCSI 4U
59#define _CMD_VTYPE_ALL (_CMD_VTYPE_ENET | _CMD_VTYPE_FC | _CMD_VTYPE_SCSI)
60
61
62
63
64#define _CMDCF(dir, flags, vtype, nr) \
65 (((dir) << _CMD_DIRSHIFT) | \
66 ((flags) << _CMD_FLAGSSHIFT) | \
67 ((vtype) << _CMD_VTYPESHIFT) | \
68 ((nr) << _CMD_NSHIFT))
69#define _CMDC(dir, vtype, nr) _CMDCF(dir, 0, vtype, nr)
70#define _CMDCNW(dir, vtype, nr) _CMDCF(dir, _CMD_FLAGS_NOWAIT, vtype, nr)
71
72
73
74
75#define _CMD_DIR(cmd) (((cmd) >> _CMD_DIRSHIFT) & _CMD_DIRMASK)
76#define _CMD_FLAGS(cmd) (((cmd) >> _CMD_FLAGSSHIFT) & _CMD_FLAGSMASK)
77#define _CMD_VTYPE(cmd) (((cmd) >> _CMD_VTYPESHIFT) & _CMD_VTYPEMASK)
78#define _CMD_N(cmd) (((cmd) >> _CMD_NSHIFT) & _CMD_NMASK)
79
80enum vnic_devcmd_cmd {
81 CMD_NONE = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_NONE, 0),
82
83
84
85
86
87
88
89
90
91
92 CMD_MCPU_FW_INFO_OLD = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 1),
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110 CMD_MCPU_FW_INFO = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 1),
111
112
113
114
115 CMD_DEV_SPEC = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 2),
116
117
118 CMD_STATS_CLEAR = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 3),
119
120
121
122 CMD_STATS_DUMP = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 4),
123
124
125 CMD_PACKET_FILTER = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 7),
126
127
128 CMD_PACKET_FILTER_ALL = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 7),
129
130
131 CMD_HANG_NOTIFY = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 8),
132
133
134 CMD_GET_MAC_ADDR = _CMDC(_CMD_DIR_READ,
135 _CMD_VTYPE_ENET | _CMD_VTYPE_FC, 9),
136
137
138 CMD_ADDR_ADD = _CMDCNW(_CMD_DIR_WRITE,
139 _CMD_VTYPE_ENET | _CMD_VTYPE_FC, 12),
140
141
142 CMD_ADDR_DEL = _CMDCNW(_CMD_DIR_WRITE,
143 _CMD_VTYPE_ENET | _CMD_VTYPE_FC, 13),
144
145
146 CMD_VLAN_ADD = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 14),
147
148
149 CMD_VLAN_DEL = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 15),
150
151
152 CMD_NIC_CFG = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 16),
153
154
155 CMD_RSS_KEY = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 17),
156
157
158 CMD_RSS_CPU = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 18),
159
160
161 CMD_SOFT_RESET = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 19),
162
163
164
165 CMD_SOFT_RESET_STATUS = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 20),
166
167
168
169
170
171
172
173
174
175 CMD_NOTIFY = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 21),
176
177
178
179 CMD_UNDI = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 22),
180
181
182 CMD_OPEN = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 23),
183
184
185
186 CMD_OPEN_STATUS = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 24),
187
188
189 CMD_CLOSE = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 25),
190
191
192
193 CMD_INIT_v1 = _CMDCNW(_CMD_DIR_READ, _CMD_VTYPE_ALL, 26),
194
195
196
197
198 CMD_INIT_PROV_INFO = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 27),
199
200
201 CMD_ENABLE = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 28),
202
203
204 CMD_ENABLE_WAIT = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 28),
205
206
207 CMD_DISABLE = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 29),
208
209
210
211
212 CMD_STATS_DUMP_ALL = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 30),
213
214
215
216
217 CMD_INIT_STATUS = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 31),
218
219
220
221 CMD_INT13 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_FC, 32),
222
223
224 CMD_LOGICAL_UPLINK = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 33),
225
226
227 CMD_DEINIT = _CMDCNW(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 34),
228
229
230 CMD_INIT = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 35),
231
232
233
234
235 CMD_CAPABILITY = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 36),
236
237
238
239
240 CMD_PERBI = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_FC, 37),
241
242
243
244
245 CMD_IAR = _CMDCNW(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 38),
246
247
248 CMD_HANG_RESET = _CMDC(_CMD_DIR_NONE, _CMD_VTYPE_ALL, 39),
249
250
251
252 CMD_HANG_RESET_STATUS = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 40),
253
254
255
256
257
258 CMD_IG_VLAN_REWRITE_MODE = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ENET, 41),
259
260
261
262
263
264
265
266 CMD_PROXY_BY_BDF = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 42),
267
268
269
270
271
272 CMD_PROXY_BY_INDEX = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 43),
273
274
275
276
277
278
279
280
281
282 CMD_CONFIG_INFO_GET = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 44),
283
284
285
286
287 CMD_INT13_ALL = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ALL, 45),
288
289
290
291
292
293
294
295 CMD_SET_DEFAULT_VLAN = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 46),
296
297
298
299
300
301
302
303 CMD_INIT_PROV_INFO2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 47),
304
305
306
307
308
309 CMD_ENABLE2 = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 48),
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334 CMD_STATUS = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ALL, 49),
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353 CMD_INTR_COAL_CONVERT = _CMDC(_CMD_DIR_READ, _CMD_VTYPE_ALL, 50),
354
355
356
357
358
359
360 CMD_SET_MAC_ADDR = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 55),
361
362
363
364
365
366 CMD_PROV_INFO_UPDATE = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 56),
367
368
369
370
371
372
373 CMD_ADD_FILTER = _CMDC(_CMD_DIR_RW, _CMD_VTYPE_ENET, 58),
374
375
376
377
378 CMD_DEL_FILTER = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 59),
379
380
381
382
383
384 CMD_QP_ENABLE = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 60),
385
386
387
388
389
390 CMD_QP_DISABLE = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 61),
391
392
393
394
395
396
397 CMD_QP_STATS_DUMP = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 62),
398
399
400
401
402 CMD_QP_STATS_CLEAR = _CMDC(_CMD_DIR_WRITE, _CMD_VTYPE_ENET, 63),
403};
404
405
406#define CMD_ENABLE2_STANDBY 0x0
407#define CMD_ENABLE2_ACTIVE 0x1
408
409
410#define CMD_OPENF_OPROM 0x1
411
412
413#define CMD_INITF_DEFAULT_MAC 0x1
414
415
416#define CMD_PFILTER_DIRECTED 0x01
417#define CMD_PFILTER_MULTICAST 0x02
418#define CMD_PFILTER_BROADCAST 0x04
419#define CMD_PFILTER_PROMISCUOUS 0x08
420#define CMD_PFILTER_ALL_MULTICAST 0x10
421
422
423#define CMD_QP_RQWQ 0x0
424
425
426#define IG_VLAN_REWRITE_MODE_DEFAULT_TRUNK 0
427#define IG_VLAN_REWRITE_MODE_UNTAG_DEFAULT_VLAN 1
428#define IG_VLAN_REWRITE_MODE_PRIORITY_TAG_DEFAULT_VLAN 2
429#define IG_VLAN_REWRITE_MODE_PASS_THRU 3
430
431enum vnic_devcmd_status {
432 STAT_NONE = 0,
433 STAT_BUSY = 1 << 0,
434 STAT_ERROR = 1 << 1,
435};
436
437enum vnic_devcmd_error {
438 ERR_SUCCESS = 0,
439 ERR_EINVAL = 1,
440 ERR_EFAULT = 2,
441 ERR_EPERM = 3,
442 ERR_EBUSY = 4,
443 ERR_ECMDUNKNOWN = 5,
444 ERR_EBADSTATE = 6,
445 ERR_ENOMEM = 7,
446 ERR_ETIMEDOUT = 8,
447 ERR_ELINKDOWN = 9,
448 ERR_EMAXRES = 10,
449 ERR_ENOTSUPPORTED = 11,
450 ERR_EINPROGRESS = 12,
451 ERR_MAX
452};
453
454
455
456
457
458
459
460struct vnic_devcmd_fw_info {
461 char fw_version[32];
462 char fw_build[32];
463 char hw_version[32];
464 char hw_serial_number[32];
465 u16 asic_type;
466 u16 asic_rev;
467};
468
469struct vnic_devcmd_notify {
470 u32 csum;
471
472 u32 link_state;
473 u32 port_speed;
474 u32 mtu;
475 u32 msglvl;
476 u32 uif;
477 u32 status;
478 u32 error;
479 u32 link_down_cnt;
480 u32 perbi_rebuild_cnt;
481};
482#define VNIC_STF_FATAL_ERR 0x0001
483#define VNIC_STF_STD_PAUSE 0x0002
484#define VNIC_STF_PFC_PAUSE 0x0004
485
486#define VNIC_STF_ALL (VNIC_STF_FATAL_ERR |\
487 VNIC_STF_STD_PAUSE |\
488 VNIC_STF_PFC_PAUSE |\
489 0)
490
491struct vnic_devcmd_provinfo {
492 u8 oui[3];
493 u8 type;
494 u8 data[0];
495};
496
497
498
499
500#define FILTER_FIELD_VALID(fld) (1 << (fld - 1))
501
502#define FILTER_FIELDS_USNIC ( \
503 FILTER_FIELD_VALID(1) | \
504 FILTER_FIELD_VALID(2) | \
505 FILTER_FIELD_VALID(3) | \
506 FILTER_FIELD_VALID(4))
507
508#define FILTER_FIELDS_IPV4_5TUPLE ( \
509 FILTER_FIELD_VALID(1) | \
510 FILTER_FIELD_VALID(2) | \
511 FILTER_FIELD_VALID(3) | \
512 FILTER_FIELD_VALID(4) | \
513 FILTER_FIELD_VALID(5))
514
515#define FILTER_FIELDS_MAC_VLAN ( \
516 FILTER_FIELD_VALID(1) | \
517 FILTER_FIELD_VALID(2))
518
519#define FILTER_FIELD_USNIC_VLAN FILTER_FIELD_VALID(1)
520#define FILTER_FIELD_USNIC_ETHTYPE FILTER_FIELD_VALID(2)
521#define FILTER_FIELD_USNIC_PROTO FILTER_FIELD_VALID(3)
522#define FILTER_FIELD_USNIC_ID FILTER_FIELD_VALID(4)
523
524struct filter_usnic_id {
525 u32 flags;
526 u16 vlan;
527 u16 ethtype;
528 u8 proto_version;
529 u32 usnic_id;
530} __packed;
531
532#define FILTER_FIELD_5TUP_PROTO FILTER_FIELD_VALID(1)
533#define FILTER_FIELD_5TUP_SRC_AD FILTER_FIELD_VALID(2)
534#define FILTER_FIELD_5TUP_DST_AD FILTER_FIELD_VALID(3)
535#define FILTER_FIELD_5TUP_SRC_PT FILTER_FIELD_VALID(4)
536#define FILTER_FIELD_5TUP_DST_PT FILTER_FIELD_VALID(5)
537
538
539enum protocol_e {
540 PROTO_UDP = 0,
541 PROTO_TCP = 1,
542};
543
544struct filter_ipv4_5tuple {
545 u32 flags;
546 u32 protocol;
547 u32 src_addr;
548 u32 dst_addr;
549 u16 src_port;
550 u16 dst_port;
551} __packed;
552
553#define FILTER_FIELD_VMQ_VLAN FILTER_FIELD_VALID(1)
554#define FILTER_FIELD_VMQ_MAC FILTER_FIELD_VALID(2)
555
556struct filter_mac_vlan {
557 u32 flags;
558 u16 vlan;
559 u8 mac_addr[6];
560} __packed;
561
562
563enum {
564 FILTER_ACTION_RQ_STEERING = 0,
565 FILTER_ACTION_MAX
566};
567
568struct filter_action {
569 u32 type;
570 union {
571 u32 rq_idx;
572 } u;
573} __packed;
574
575
576enum filter_type {
577 FILTER_USNIC_ID = 0,
578 FILTER_IPV4_5TUPLE = 1,
579 FILTER_MAC_VLAN = 2,
580 FILTER_MAX
581};
582
583struct filter {
584 u32 type;
585 union {
586 struct filter_usnic_id usnic;
587 struct filter_ipv4_5tuple ipv4;
588 struct filter_mac_vlan mac_vlan;
589 } u;
590} __packed;
591
592enum {
593 CLSF_TLV_FILTER = 0,
594 CLSF_TLV_ACTION = 1,
595};
596
597
598#define FILTER_MAX_BUF_SIZE 100
599
600struct filter_tlv {
601 u_int32_t type;
602 u_int32_t length;
603 u_int32_t val[0];
604};
605
606enum {
607 CLSF_ADD = 0,
608 CLSF_DEL = 1,
609};
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625#define VNIC_DEVCMD_NARGS 15
626struct vnic_devcmd {
627 u32 status;
628 u32 cmd;
629 u64 args[VNIC_DEVCMD_NARGS];
630};
631
632#endif
633