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#ifndef _VMXNET3_DEFS_H_
28#define _VMXNET3_DEFS_H_
29
30#include "upt1_defs.h"
31
32
33
34enum {
35 VMXNET3_REG_VRRS = 0x0,
36 VMXNET3_REG_UVRS = 0x8,
37 VMXNET3_REG_DSAL = 0x10,
38 VMXNET3_REG_DSAH = 0x18,
39 VMXNET3_REG_CMD = 0x20,
40 VMXNET3_REG_MACL = 0x28,
41 VMXNET3_REG_MACH = 0x30,
42 VMXNET3_REG_ICR = 0x38,
43 VMXNET3_REG_ECR = 0x40
44};
45
46
47enum {
48 VMXNET3_REG_IMR = 0x0,
49 VMXNET3_REG_TXPROD = 0x600,
50 VMXNET3_REG_RXPROD = 0x800,
51 VMXNET3_REG_RXPROD2 = 0xA00
52};
53
54#define VMXNET3_PT_REG_SIZE 4096
55#define VMXNET3_VD_REG_SIZE 4096
56
57#define VMXNET3_REG_ALIGN 8
58#define VMXNET3_REG_ALIGN_MASK 0x7
59
60
61#define VMXNET3_IO_TYPE_PT 0
62#define VMXNET3_IO_TYPE_VD 1
63#define VMXNET3_IO_ADDR(type, reg) (((type) << 24) | ((reg) & 0xFFFFFF))
64#define VMXNET3_IO_TYPE(addr) ((addr) >> 24)
65#define VMXNET3_IO_REG(addr) ((addr) & 0xFFFFFF)
66
67enum {
68 VMXNET3_CMD_FIRST_SET = 0xCAFE0000,
69 VMXNET3_CMD_ACTIVATE_DEV = VMXNET3_CMD_FIRST_SET,
70 VMXNET3_CMD_QUIESCE_DEV,
71 VMXNET3_CMD_RESET_DEV,
72 VMXNET3_CMD_UPDATE_RX_MODE,
73 VMXNET3_CMD_UPDATE_MAC_FILTERS,
74 VMXNET3_CMD_UPDATE_VLAN_FILTERS,
75 VMXNET3_CMD_UPDATE_RSSIDT,
76 VMXNET3_CMD_UPDATE_IML,
77 VMXNET3_CMD_UPDATE_PMCFG,
78 VMXNET3_CMD_UPDATE_FEATURE,
79 VMXNET3_CMD_RESERVED1,
80 VMXNET3_CMD_LOAD_PLUGIN,
81 VMXNET3_CMD_RESERVED2,
82 VMXNET3_CMD_RESERVED3,
83 VMXNET3_CMD_SET_COALESCE,
84 VMXNET3_CMD_REGISTER_MEMREGS,
85 VMXNET3_CMD_SET_RSS_FIELDS,
86
87 VMXNET3_CMD_FIRST_GET = 0xF00D0000,
88 VMXNET3_CMD_GET_QUEUE_STATUS = VMXNET3_CMD_FIRST_GET,
89 VMXNET3_CMD_GET_STATS,
90 VMXNET3_CMD_GET_LINK,
91 VMXNET3_CMD_GET_PERM_MAC_LO,
92 VMXNET3_CMD_GET_PERM_MAC_HI,
93 VMXNET3_CMD_GET_DID_LO,
94 VMXNET3_CMD_GET_DID_HI,
95 VMXNET3_CMD_GET_DEV_EXTRA_INFO,
96 VMXNET3_CMD_GET_CONF_INTR,
97 VMXNET3_CMD_GET_RESERVED1,
98 VMXNET3_CMD_GET_TXDATA_DESC_SIZE,
99 VMXNET3_CMD_GET_COALESCE,
100 VMXNET3_CMD_GET_RSS_FIELDS,
101 VMXNET3_CMD_GET_RESERVED2,
102 VMXNET3_CMD_GET_RESERVED3,
103 VMXNET3_CMD_GET_MAX_QUEUES_CONF,
104};
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124struct Vmxnet3_TxDesc {
125 __le64 addr;
126
127#ifdef __BIG_ENDIAN_BITFIELD
128 u32 msscof:14;
129 u32 ext1:1;
130 u32 dtype:1;
131 u32 oco:1;
132 u32 gen:1;
133 u32 len:14;
134#else
135 u32 len:14;
136 u32 gen:1;
137 u32 oco:1;
138 u32 dtype:1;
139 u32 ext1:1;
140 u32 msscof:14;
141#endif
142
143#ifdef __BIG_ENDIAN_BITFIELD
144 u32 tci:16;
145 u32 ti:1;
146 u32 ext2:1;
147 u32 cq:1;
148 u32 eop:1;
149 u32 om:2;
150 u32 hlen:10;
151#else
152 u32 hlen:10;
153 u32 om:2;
154 u32 eop:1;
155 u32 cq:1;
156 u32 ext2:1;
157 u32 ti:1;
158 u32 tci:16;
159#endif
160};
161
162
163#define VMXNET3_OM_NONE 0
164#define VMXNET3_OM_ENCAP 1
165#define VMXNET3_OM_CSUM 2
166#define VMXNET3_OM_TSO 3
167
168
169#define VMXNET3_TXD_EOP_SHIFT 12
170#define VMXNET3_TXD_CQ_SHIFT 13
171#define VMXNET3_TXD_GEN_SHIFT 14
172#define VMXNET3_TXD_EOP_DWORD_SHIFT 3
173#define VMXNET3_TXD_GEN_DWORD_SHIFT 2
174
175#define VMXNET3_TXD_CQ (1 << VMXNET3_TXD_CQ_SHIFT)
176#define VMXNET3_TXD_EOP (1 << VMXNET3_TXD_EOP_SHIFT)
177#define VMXNET3_TXD_GEN (1 << VMXNET3_TXD_GEN_SHIFT)
178
179#define VMXNET3_HDR_COPY_SIZE 128
180
181
182struct Vmxnet3_TxDataDesc {
183 u8 data[VMXNET3_HDR_COPY_SIZE];
184};
185
186typedef u8 Vmxnet3_RxDataDesc;
187
188#define VMXNET3_TCD_GEN_SHIFT 31
189#define VMXNET3_TCD_GEN_SIZE 1
190#define VMXNET3_TCD_TXIDX_SHIFT 0
191#define VMXNET3_TCD_TXIDX_SIZE 12
192#define VMXNET3_TCD_GEN_DWORD_SHIFT 3
193
194struct Vmxnet3_TxCompDesc {
195 u32 txdIdx:12;
196 u32 ext1:20;
197
198 __le32 ext2;
199 __le32 ext3;
200
201 u32 rsvd:24;
202 u32 type:7;
203 u32 gen:1;
204};
205
206struct Vmxnet3_RxDesc {
207 __le64 addr;
208
209#ifdef __BIG_ENDIAN_BITFIELD
210 u32 gen:1;
211 u32 rsvd:15;
212 u32 dtype:1;
213 u32 btype:1;
214 u32 len:14;
215#else
216 u32 len:14;
217 u32 btype:1;
218 u32 dtype:1;
219 u32 rsvd:15;
220 u32 gen:1;
221#endif
222 u32 ext1;
223};
224
225
226#define VMXNET3_RXD_BTYPE_HEAD 0
227#define VMXNET3_RXD_BTYPE_BODY 1
228
229
230#define VMXNET3_RXD_BTYPE_SHIFT 14
231#define VMXNET3_RXD_GEN_SHIFT 31
232
233#define VMXNET3_RCD_HDR_INNER_SHIFT 13
234
235struct Vmxnet3_RxCompDesc {
236#ifdef __BIG_ENDIAN_BITFIELD
237 u32 ext2:1;
238 u32 cnc:1;
239 u32 rssType:4;
240 u32 rqID:10;
241 u32 sop:1;
242 u32 eop:1;
243 u32 ext1:2;
244 u32 rxdIdx:12;
245#else
246 u32 rxdIdx:12;
247 u32 ext1:2;
248 u32 eop:1;
249 u32 sop:1;
250 u32 rqID:10;
251 u32 rssType:4;
252 u32 cnc:1;
253 u32 ext2:1;
254#endif
255
256 __le32 rssHash;
257
258#ifdef __BIG_ENDIAN_BITFIELD
259 u32 tci:16;
260 u32 ts:1;
261 u32 err:1;
262 u32 len:14;
263#else
264 u32 len:14;
265 u32 err:1;
266 u32 ts:1;
267 u32 tci:16;
268#endif
269
270
271#ifdef __BIG_ENDIAN_BITFIELD
272 u32 gen:1;
273 u32 type:7;
274 u32 fcs:1;
275 u32 frg:1;
276 u32 v4:1;
277 u32 v6:1;
278 u32 ipc:1;
279 u32 tcp:1;
280 u32 udp:1;
281 u32 tuc:1;
282 u32 csum:16;
283#else
284 u32 csum:16;
285 u32 tuc:1;
286 u32 udp:1;
287 u32 tcp:1;
288 u32 ipc:1;
289 u32 v6:1;
290 u32 v4:1;
291 u32 frg:1;
292 u32 fcs:1;
293 u32 type:7;
294 u32 gen:1;
295#endif
296};
297
298struct Vmxnet3_RxCompDescExt {
299 __le32 dword1;
300 u8 segCnt;
301 u8 dupAckCnt;
302 __le16 tsDelta;
303 __le32 dword2;
304#ifdef __BIG_ENDIAN_BITFIELD
305 u32 gen:1;
306 u32 type:7;
307 u32 fcs:1;
308 u32 frg:1;
309 u32 v4:1;
310 u32 v6:1;
311 u32 ipc:1;
312 u32 tcp:1;
313 u32 udp:1;
314 u32 tuc:1;
315 u32 mss:16;
316#else
317 u32 mss:16;
318 u32 tuc:1;
319 u32 udp:1;
320 u32 tcp:1;
321 u32 ipc:1;
322 u32 v6:1;
323 u32 v4:1;
324 u32 frg:1;
325 u32 fcs:1;
326 u32 type:7;
327 u32 gen:1;
328#endif
329};
330
331
332
333#define VMXNET3_RCD_TUC_SHIFT 16
334#define VMXNET3_RCD_IPC_SHIFT 19
335
336
337#define VMXNET3_RCD_TYPE_SHIFT 56
338#define VMXNET3_RCD_GEN_SHIFT 63
339
340
341#define VMXNET3_RCD_CSUM_OK (1 << VMXNET3_RCD_TUC_SHIFT | \
342 1 << VMXNET3_RCD_IPC_SHIFT)
343#define VMXNET3_TXD_GEN_SIZE 1
344#define VMXNET3_TXD_EOP_SIZE 1
345
346
347#define VMXNET3_RCD_RSS_TYPE_NONE 0
348#define VMXNET3_RCD_RSS_TYPE_IPV4 1
349#define VMXNET3_RCD_RSS_TYPE_TCPIPV4 2
350#define VMXNET3_RCD_RSS_TYPE_IPV6 3
351#define VMXNET3_RCD_RSS_TYPE_TCPIPV6 4
352#define VMXNET3_RCD_RSS_TYPE_UDPIPV4 5
353#define VMXNET3_RCD_RSS_TYPE_UDPIPV6 6
354#define VMXNET3_RCD_RSS_TYPE_ESPIPV4 7
355#define VMXNET3_RCD_RSS_TYPE_ESPIPV6 8
356
357
358
359union Vmxnet3_GenericDesc {
360 __le64 qword[2];
361 __le32 dword[4];
362 __le16 word[8];
363 struct Vmxnet3_TxDesc txd;
364 struct Vmxnet3_RxDesc rxd;
365 struct Vmxnet3_TxCompDesc tcd;
366 struct Vmxnet3_RxCompDesc rcd;
367 struct Vmxnet3_RxCompDescExt rcdExt;
368};
369
370#define VMXNET3_INIT_GEN 1
371
372
373#define VMXNET3_MAX_TX_BUF_SIZE (1 << 14)
374
375
376#define VMXNET3_TXD_NEEDED(size) (((size) + VMXNET3_MAX_TX_BUF_SIZE - 1) / \
377 VMXNET3_MAX_TX_BUF_SIZE)
378
379
380#define VMXNET3_MAX_TXD_PER_PKT 16
381
382
383#define VMXNET3_MAX_RX_BUF_SIZE ((1 << 14) - 1)
384
385#define VMXNET3_MIN_T0_BUF_SIZE 128
386#define VMXNET3_MAX_CSUM_OFFSET 1024
387
388
389#define VMXNET3_RING_BA_ALIGN 512
390#define VMXNET3_RING_BA_MASK (VMXNET3_RING_BA_ALIGN - 1)
391
392
393#define VMXNET3_RING_SIZE_ALIGN 32
394#define VMXNET3_RING_SIZE_MASK (VMXNET3_RING_SIZE_ALIGN - 1)
395
396
397#define VMXNET3_TXDATA_DESC_SIZE_ALIGN 64
398#define VMXNET3_TXDATA_DESC_SIZE_MASK (VMXNET3_TXDATA_DESC_SIZE_ALIGN - 1)
399
400
401#define VMXNET3_RXDATA_DESC_SIZE_ALIGN 64
402#define VMXNET3_RXDATA_DESC_SIZE_MASK (VMXNET3_RXDATA_DESC_SIZE_ALIGN - 1)
403
404
405#define VMXNET3_TX_RING_MAX_SIZE 4096
406#define VMXNET3_TC_RING_MAX_SIZE 4096
407#define VMXNET3_RX_RING_MAX_SIZE 4096
408#define VMXNET3_RX_RING2_MAX_SIZE 4096
409#define VMXNET3_RC_RING_MAX_SIZE 8192
410
411#define VMXNET3_TXDATA_DESC_MIN_SIZE 128
412#define VMXNET3_TXDATA_DESC_MAX_SIZE 2048
413
414#define VMXNET3_RXDATA_DESC_MAX_SIZE 2048
415
416
417
418enum {
419 VMXNET3_ERR_NOEOP = 0x80000000,
420 VMXNET3_ERR_TXD_REUSE = 0x80000001,
421 VMXNET3_ERR_BIG_PKT = 0x80000002,
422 VMXNET3_ERR_DESC_NOT_SPT = 0x80000003,
423 VMXNET3_ERR_SMALL_BUF = 0x80000004,
424 VMXNET3_ERR_STRESS = 0x80000005,
425 VMXNET3_ERR_SWITCH = 0x80000006,
426 VMXNET3_ERR_TXD_INVALID = 0x80000007,
427};
428
429
430#define VMXNET3_CDTYPE_TXCOMP 0
431#define VMXNET3_CDTYPE_RXCOMP 3
432#define VMXNET3_CDTYPE_RXCOMP_LRO 4
433
434enum {
435 VMXNET3_GOS_BITS_UNK = 0,
436 VMXNET3_GOS_BITS_32 = 1,
437 VMXNET3_GOS_BITS_64 = 2,
438};
439
440#define VMXNET3_GOS_TYPE_LINUX 1
441
442
443struct Vmxnet3_GOSInfo {
444#ifdef __BIG_ENDIAN_BITFIELD
445 u32 gosMisc:10;
446 u32 gosVer:16;
447 u32 gosType:4;
448 u32 gosBits:2;
449#else
450 u32 gosBits:2;
451 u32 gosType:4;
452 u32 gosVer:16;
453 u32 gosMisc:10;
454#endif
455};
456
457struct Vmxnet3_DriverInfo {
458 __le32 version;
459 struct Vmxnet3_GOSInfo gos;
460 __le32 vmxnet3RevSpt;
461 __le32 uptVerSpt;
462};
463
464
465#define VMXNET3_REV1_MAGIC 3133079265u
466
467
468
469
470
471
472
473#define VMXNET3_QUEUE_DESC_ALIGN 128
474
475
476struct Vmxnet3_MiscConf {
477 struct Vmxnet3_DriverInfo driverInfo;
478 __le64 uptFeatures;
479 __le64 ddPA;
480 __le64 queueDescPA;
481 __le32 ddLen;
482 __le32 queueDescLen;
483 __le32 mtu;
484 __le16 maxNumRxSG;
485 u8 numTxQueues;
486 u8 numRxQueues;
487 __le32 reserved[4];
488};
489
490
491struct Vmxnet3_TxQueueConf {
492 __le64 txRingBasePA;
493 __le64 dataRingBasePA;
494 __le64 compRingBasePA;
495 __le64 ddPA;
496 __le64 reserved;
497 __le32 txRingSize;
498 __le32 dataRingSize;
499 __le32 compRingSize;
500 __le32 ddLen;
501 u8 intrIdx;
502 u8 _pad1[1];
503 __le16 txDataRingDescSize;
504 u8 _pad2[4];
505};
506
507
508struct Vmxnet3_RxQueueConf {
509 __le64 rxRingBasePA[2];
510 __le64 compRingBasePA;
511 __le64 ddPA;
512 __le64 rxDataRingBasePA;
513 __le32 rxRingSize[2];
514 __le32 compRingSize;
515 __le32 ddLen;
516 u8 intrIdx;
517 u8 _pad1[1];
518 __le16 rxDataRingDescSize;
519 u8 _pad2[4];
520};
521
522
523enum vmxnet3_intr_mask_mode {
524 VMXNET3_IMM_AUTO = 0,
525 VMXNET3_IMM_ACTIVE = 1,
526 VMXNET3_IMM_LAZY = 2
527};
528
529enum vmxnet3_intr_type {
530 VMXNET3_IT_AUTO = 0,
531 VMXNET3_IT_INTX = 1,
532 VMXNET3_IT_MSI = 2,
533 VMXNET3_IT_MSIX = 3
534};
535
536#define VMXNET3_MAX_TX_QUEUES 8
537#define VMXNET3_MAX_RX_QUEUES 16
538
539#define VMXNET3_MAX_INTRS 25
540
541
542#define VMXNET3_EXT_MAX_TX_QUEUES 32
543#define VMXNET3_EXT_MAX_RX_QUEUES 32
544
545#define VMXNET3_EXT_MAX_INTRS 65
546#define VMXNET3_FIRST_SET_INTRS 64
547
548
549#define VMXNET3_IC_DISABLE_ALL 0x1
550
551
552struct Vmxnet3_IntrConf {
553 bool autoMask;
554 u8 numIntrs;
555 u8 eventIntrIdx;
556 u8 modLevels[VMXNET3_MAX_INTRS];
557
558 __le32 intrCtrl;
559 __le32 reserved[2];
560};
561
562struct Vmxnet3_IntrConfExt {
563 u8 autoMask;
564 u8 numIntrs;
565 u8 eventIntrIdx;
566 u8 reserved;
567 __le32 intrCtrl;
568 __le32 reserved1;
569 u8 modLevels[VMXNET3_EXT_MAX_INTRS];
570
571
572 u8 reserved2[3];
573};
574
575
576#define VMXNET3_VFT_SIZE (4096 / (sizeof(u32) * 8))
577
578
579struct Vmxnet3_QueueStatus {
580 bool stopped;
581 u8 _pad[3];
582 __le32 error;
583};
584
585
586struct Vmxnet3_TxQueueCtrl {
587 __le32 txNumDeferred;
588 __le32 txThreshold;
589 __le64 reserved;
590};
591
592
593struct Vmxnet3_RxQueueCtrl {
594 bool updateRxProd;
595 u8 _pad[7];
596 __le64 reserved;
597};
598
599enum {
600 VMXNET3_RXM_UCAST = 0x01,
601 VMXNET3_RXM_MCAST = 0x02,
602 VMXNET3_RXM_BCAST = 0x04,
603 VMXNET3_RXM_ALL_MULTI = 0x08,
604 VMXNET3_RXM_PROMISC = 0x10
605};
606
607struct Vmxnet3_RxFilterConf {
608 __le32 rxMode;
609 __le16 mfTableLen;
610 __le16 _pad1;
611 __le64 mfTablePA;
612 __le32 vfTable[VMXNET3_VFT_SIZE];
613};
614
615
616#define VMXNET3_PM_MAX_FILTERS 6
617#define VMXNET3_PM_MAX_PATTERN_SIZE 128
618#define VMXNET3_PM_MAX_MASK_SIZE (VMXNET3_PM_MAX_PATTERN_SIZE / 8)
619
620#define VMXNET3_PM_WAKEUP_MAGIC cpu_to_le16(0x01)
621#define VMXNET3_PM_WAKEUP_FILTER cpu_to_le16(0x02)
622
623
624
625struct Vmxnet3_PM_PktFilter {
626 u8 maskSize;
627 u8 patternSize;
628 u8 mask[VMXNET3_PM_MAX_MASK_SIZE];
629 u8 pattern[VMXNET3_PM_MAX_PATTERN_SIZE];
630 u8 pad[6];
631};
632
633
634struct Vmxnet3_PMConf {
635 __le16 wakeUpEvents;
636 u8 numFilters;
637 u8 pad[5];
638 struct Vmxnet3_PM_PktFilter filters[VMXNET3_PM_MAX_FILTERS];
639};
640
641
642struct Vmxnet3_VariableLenConfDesc {
643 __le32 confVer;
644 __le32 confLen;
645 __le64 confPA;
646};
647
648
649struct Vmxnet3_TxQueueDesc {
650 struct Vmxnet3_TxQueueCtrl ctrl;
651 struct Vmxnet3_TxQueueConf conf;
652
653
654 struct Vmxnet3_QueueStatus status;
655 struct UPT1_TxStats stats;
656 u8 _pad[88];
657};
658
659
660struct Vmxnet3_RxQueueDesc {
661 struct Vmxnet3_RxQueueCtrl ctrl;
662 struct Vmxnet3_RxQueueConf conf;
663
664 struct Vmxnet3_QueueStatus status;
665 struct UPT1_RxStats stats;
666 u8 __pad[88];
667};
668
669struct Vmxnet3_SetPolling {
670 u8 enablePolling;
671};
672
673#define VMXNET3_COAL_STATIC_MAX_DEPTH 128
674#define VMXNET3_COAL_RBC_MIN_RATE 100
675#define VMXNET3_COAL_RBC_MAX_RATE 100000
676
677enum Vmxnet3_CoalesceMode {
678 VMXNET3_COALESCE_DISABLED = 0,
679 VMXNET3_COALESCE_ADAPT = 1,
680 VMXNET3_COALESCE_STATIC = 2,
681 VMXNET3_COALESCE_RBC = 3
682};
683
684struct Vmxnet3_CoalesceRbc {
685 u32 rbc_rate;
686};
687
688struct Vmxnet3_CoalesceStatic {
689 u32 tx_depth;
690 u32 tx_comp_depth;
691 u32 rx_depth;
692};
693
694struct Vmxnet3_CoalesceScheme {
695 enum Vmxnet3_CoalesceMode coalMode;
696 union {
697 struct Vmxnet3_CoalesceRbc coalRbc;
698 struct Vmxnet3_CoalesceStatic coalStatic;
699 } coalPara;
700};
701
702struct Vmxnet3_MemoryRegion {
703 __le64 startPA;
704 __le32 length;
705 __le16 txQueueBits;
706 __le16 rxQueueBits;
707};
708
709#define MAX_MEMORY_REGION_PER_QUEUE 16
710#define MAX_MEMORY_REGION_PER_DEVICE 256
711
712struct Vmxnet3_MemRegs {
713 __le16 numRegs;
714 __le16 pad[3];
715 struct Vmxnet3_MemoryRegion memRegs[1];
716};
717
718enum Vmxnet3_RSSField {
719 VMXNET3_RSS_FIELDS_TCPIP4 = 0x0001,
720 VMXNET3_RSS_FIELDS_TCPIP6 = 0x0002,
721 VMXNET3_RSS_FIELDS_UDPIP4 = 0x0004,
722 VMXNET3_RSS_FIELDS_UDPIP6 = 0x0008,
723 VMXNET3_RSS_FIELDS_ESPIP4 = 0x0010,
724 VMXNET3_RSS_FIELDS_ESPIP6 = 0x0020,
725};
726
727
728
729
730union Vmxnet3_CmdInfo {
731 struct Vmxnet3_VariableLenConfDesc varConf;
732 struct Vmxnet3_SetPolling setPolling;
733 enum Vmxnet3_RSSField setRssFields;
734 __le64 data[2];
735};
736
737struct Vmxnet3_DSDevRead {
738
739 struct Vmxnet3_MiscConf misc;
740 struct Vmxnet3_IntrConf intrConf;
741 struct Vmxnet3_RxFilterConf rxFilterConf;
742 struct Vmxnet3_VariableLenConfDesc rssConfDesc;
743 struct Vmxnet3_VariableLenConfDesc pmConfDesc;
744 struct Vmxnet3_VariableLenConfDesc pluginConfDesc;
745};
746
747struct Vmxnet3_DSDevReadExt {
748
749 struct Vmxnet3_IntrConfExt intrConfExt;
750};
751
752
753struct Vmxnet3_DriverShared {
754 __le32 magic;
755
756 __le32 size;
757 struct Vmxnet3_DSDevRead devRead;
758 __le32 ecr;
759 __le32 reserved;
760 union {
761 __le32 reserved1[4];
762 union Vmxnet3_CmdInfo cmdInfo;
763
764
765
766 } cu;
767 struct Vmxnet3_DSDevReadExt devReadExt;
768};
769
770
771#define VMXNET3_ECR_RQERR (1 << 0)
772#define VMXNET3_ECR_TQERR (1 << 1)
773#define VMXNET3_ECR_LINK (1 << 2)
774#define VMXNET3_ECR_DIC (1 << 3)
775#define VMXNET3_ECR_DEBUG (1 << 4)
776
777
778#define VMXNET3_FLIP_RING_GEN(gen) ((gen) = (gen) ^ 0x1)
779
780
781#define VMXNET3_INC_RING_IDX_ONLY(idx, ring_size) \
782 do {\
783 (idx)++;\
784 if (unlikely((idx) == (ring_size))) {\
785 (idx) = 0;\
786 } \
787 } while (0)
788
789#define VMXNET3_SET_VFTABLE_ENTRY(vfTable, vid) \
790 (vfTable[vid >> 5] |= (1 << (vid & 31)))
791#define VMXNET3_CLEAR_VFTABLE_ENTRY(vfTable, vid) \
792 (vfTable[vid >> 5] &= ~(1 << (vid & 31)))
793
794#define VMXNET3_VFTABLE_ENTRY_IS_SET(vfTable, vid) \
795 ((vfTable[vid >> 5] & (1 << (vid & 31))) != 0)
796
797#define VMXNET3_MAX_MTU 9000
798#define VMXNET3_V6_MAX_MTU 9190
799#define VMXNET3_MIN_MTU 60
800
801#define VMXNET3_LINK_UP (10000 << 16 | 1)
802#define VMXNET3_LINK_DOWN 0
803
804#endif
805