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