iPXE
intelxl.h
Go to the documentation of this file.
1#ifndef _INTELX_H
2#define _INTELX_H
3
4/** @file
5 *
6 * Intel 40 Gigabit Ethernet network card driver
7 *
8 */
9
10FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
11FILE_SECBOOT ( PERMITTED );
12
13#include <stdint.h>
14#include <ipxe/if_ether.h>
15#include <ipxe/pcimsix.h>
16#include <ipxe/dma.h>
17
18struct intelxl_nic;
19
20/** BAR size */
21#define INTELXL_BAR_SIZE 0x200000
22
23/** Alignment
24 *
25 * No data structure requires greater than 256 byte alignment.
26 */
27#define INTELXL_ALIGN 256
28
29/******************************************************************************
30 *
31 * Admin queue
32 *
33 ******************************************************************************
34 */
35
36/** PF Admin Command Queue register block */
37#define INTELXL_ADMIN_CMD 0x080000
38
39/** PF Admin Event Queue register block */
40#define INTELXL_ADMIN_EVT 0x080080
41
42/** Admin Queue Base Address Low Register (offset) */
43#define INTELXL_ADMIN_BAL 0x000
44
45/** Admin Queue Base Address High Register (offset) */
46#define INTELXL_ADMIN_BAH 0x100
47
48/** Admin Queue Length Register (offset) */
49#define INTELXL_ADMIN_LEN 0x200
50#define INTELXL_ADMIN_LEN_LEN(x) ( (x) << 0 ) /**< Queue length */
51#define INTELXL_ADMIN_LEN_ENABLE 0x80000000UL /**< Queue enable */
52
53/** Admin Queue Head Register (offset) */
54#define INTELXL_ADMIN_HEAD 0x300
55
56/** Admin Queue Tail Register (offset) */
57#define INTELXL_ADMIN_TAIL 0x400
58
59/** Admin queue register offsets
60 *
61 * The physical and virtual function register maps have no discernible
62 * relationship.
63 */
65 /** Base Address Low Register offset */
66 unsigned int bal;
67 /** Base Address High Register offset */
68 unsigned int bah;
69 /** Length Register offset */
70 unsigned int len;
71 /** Head Register offset */
72 unsigned int head;
73 /** Tail Register offset */
74 unsigned int tail;
75};
76
77/** Admin queue data buffer command parameters */
79 /** Reserved */
81 /** Buffer address high */
83 /** Buffer address low */
85} __attribute__ (( packed ));
86
87/** Admin queue Get Version command */
88#define INTELXL_ADMIN_VERSION 0x0001
89
90/** Admin queue version number */
92 /** Major version number */
94 /** Minor version number */
96} __attribute__ (( packed ));
97
98/** Admin queue Get Version command parameters */
100 /** ROM version */
102 /** Firmware build ID */
104 /** Firmware version */
106 /** API version */
108} __attribute__ (( packed ));
109
110/** Admin queue Driver Version command */
111#define INTELXL_ADMIN_DRIVER 0x0002
112
113/** Admin queue Driver Version command parameters */
115 /** Driver version */
117 /** Minor version */
119 /** Build version */
121 /** Sub-build version */
123 /** Reserved */
125 /** Data buffer address */
127} __attribute__ (( packed ));
128
129/** Admin queue Driver Version data buffer */
131 /** Driver name */
132 char name[32];
133} __attribute__ (( packed ));
134
135/** Admin queue Shutdown command */
136#define INTELXL_ADMIN_SHUTDOWN 0x0003
137
138/** Admin queue Shutdown command parameters */
140 /** Driver unloading */
142 /** Reserved */
144} __attribute__ (( packed ));
145
146/** Driver is unloading */
147#define INTELXL_ADMIN_SHUTDOWN_UNLOADING 0x01
148
149/** Admin queue Manage MAC Address Read command */
150#define INTELXL_ADMIN_MAC_READ 0x0107
151
152/** Admin queue Manage MAC Address Read command parameters */
154 /** Valid addresses */
156 /** Reserved */
158} __attribute__ (( packed ));
159
160/** LAN MAC address is valid */
161#define INTELXL_ADMIN_MAC_READ_VALID_LAN 0x10
162
163/** Admin queue Manage MAC Address Read data buffer */
165 /** Physical function MAC address */
167 /** Reserved */
169 /** Port MAC address */
171 /** Physical function wake-on-LAN MAC address */
173} __attribute__ (( packed ));
174
175/** Admin queue Manage MAC Address Write command */
176#define INTELXL_ADMIN_MAC_WRITE 0x0108
177
178/** Admin queue Manage MAC Address Write command parameters */
180 /** Reserved */
182 /** Write type */
184 /** MAC address first 16 bits, byte-swapped */
186 /** MAC address last 32 bits, byte-swapped */
188 /** Reserved */
190} __attribute__ (( packed ));
191
192/** Admin queue Clear PXE Mode command */
193#define INTELXL_ADMIN_CLEAR_PXE 0x0110
194
195/** Admin queue Clear PXE Mode command parameters */
197 /** Magic value */
199 /** Reserved */
201} __attribute__ (( packed ));
202
203/** Clear PXE Mode magic value */
204#define INTELXL_ADMIN_CLEAR_PXE_MAGIC 0x02
205
206/** Admin queue Get Switch Configuration command */
207#define INTELXL_ADMIN_SWITCH 0x0200
208
209/** Switching element configuration */
211 /** Switching element type */
213 /** Revision */
215 /** Switching element ID */
217 /** Uplink switching element ID */
219 /** Downlink switching element ID */
221 /** Reserved */
223 /** Connection type */
225 /** Reserved */
227 /** Element specific information */
229} __attribute__ (( packed ));
230
231/** Virtual Station Inferface element type */
232#define INTELXL_ADMIN_SWITCH_TYPE_VSI 19
233
234/** Admin queue Get Switch Configuration command parameters */
236 /** Starting switching element identifier */
238 /** Reserved */
240 /** Data buffer address */
242} __attribute__ (( packed ));
243
244/** Admin queue Get Switch Configuration data buffer */
246 /** Number of switching elements reported */
248 /** Total number of switching elements */
250 /** Reserved */
252 /** Switch configuration */
254} __attribute__ (( packed ));
255
256/** Admin queue Get VSI Parameters command */
257#define INTELXL_ADMIN_VSI 0x0212
258
259/** Admin queue Get VSI Parameters command parameters */
261 /** VSI switching element ID */
263 /** Reserved */
265 /** Data buffer address */
267} __attribute__ (( packed ));
268
269/** Admin queue Get VSI Parameters data buffer */
271 /** Reserved */
273 /** Queue numbers */
275 /** Reserved */
277 /** Queue set handles for each traffic class */
279 /** Reserved */
281} __attribute__ (( packed ));
282
283/** Admin queue Set VSI Promiscuous Modes command */
284#define INTELXL_ADMIN_PROMISC 0x0254
285
286/** Admin queue Set VSI Promiscuous Modes command parameters */
288 /** Flags */
290 /** Valid flags */
292 /** VSI switching element ID */
294 /** Reserved */
296} __attribute__ (( packed ));
297
298/** Promiscuous unicast mode */
299#define INTELXL_ADMIN_PROMISC_FL_UNICAST 0x0001
300
301/** Promiscuous multicast mode */
302#define INTELXL_ADMIN_PROMISC_FL_MULTICAST 0x0002
303
304/** Promiscuous broadcast mode */
305#define INTELXL_ADMIN_PROMISC_FL_BROADCAST 0x0004
306
307/** Promiscuous VLAN mode */
308#define INTELXL_ADMIN_PROMISC_FL_VLAN 0x0010
309
310/** Admin queue Set MAC Configuration command */
311#define INTELXL_ADMIN_MAC_CONFIG 0x0603
312
313/** Admin queue Set MAC Configuration command parameters */
315 /** Maximum frame size */
317 /** Flags */
319 /** Reserved */
321} __attribute__ (( packed ));
322
323/** Append CRC on transmit */
324#define INTELXL_ADMIN_MAC_CONFIG_FL_CRC 0x04
325
326/** Admin queue Restart Autonegotiation command */
327#define INTELXL_ADMIN_AUTONEG 0x0605
328
329/** Admin queue Restart Autonegotiation command parameters */
331 /** Flags */
333 /** Reserved */
335} __attribute__ (( packed ));
336
337/** Restart autonegotiation */
338#define INTELXL_ADMIN_AUTONEG_FL_RESTART 0x02
339
340/** Enable link */
341#define INTELXL_ADMIN_AUTONEG_FL_ENABLE 0x04
342
343/** Admin queue Get Link Status command */
344#define INTELXL_ADMIN_LINK 0x0607
345
346/** Admin queue Get Link Status command parameters */
348 /** Link status notification */
350 /** Reserved */
352 /** PHY type */
354 /** Link speed */
356 /** Link status */
358 /** Reserved */
360} __attribute__ (( packed ));
361
362/** Notify driver of link status changes */
363#define INTELXL_ADMIN_LINK_NOTIFY 0x03
364
365/** Link is up */
366#define INTELXL_ADMIN_LINK_UP 0x01
367
368/** Admin queue command parameters */
370 /** Additional data buffer command parameters */
372 /** Get Version command parameters */
374 /** Driver Version command parameters */
376 /** Shutdown command parameters */
378 /** Manage MAC Address Read command parameters */
380 /** Manage MAC Address Write command parameters */
382 /** Clear PXE Mode command parameters */
384 /** Get Switch Configuration command parameters */
386 /** Get VSI Parameters command parameters */
388 /** Set VSI Promiscuous Modes command parameters */
390 /** Set MAC Configuration command parameters */
392 /** Restart Autonegotiation command parameters */
394 /** Get Link Status command parameters */
396} __attribute__ (( packed ));
397
398/** Maximum size of a data buffer */
399#define INTELXL_ADMIN_BUFFER_SIZE 0x1000
400
401/** Admin queue data buffer */
403 /** Driver Version data buffer */
405 /** Manage MAC Address Read data buffer */
407 /** Get Switch Configuration data buffer */
409 /** Get VSI Parameters data buffer */
411 /** Maximum buffer size */
413} __attribute__ (( packed ));
414
415/** Admin queue descriptor */
417 /** Flags */
419 /** Opcode */
421 /** Data length */
423 /** Return value */
425 /** Opaque cookie */
427 /** Reserved */
429 /** Parameters */
431} __attribute__ (( packed ));
432
433/** Admin descriptor done */
434#define INTELXL_ADMIN_FL_DD 0x0001
435
436/** Admin descriptor contains a completion */
437#define INTELXL_ADMIN_FL_CMP 0x0002
438
439/** Admin descriptor completed in error */
440#define INTELXL_ADMIN_FL_ERR 0x0004
441
442/** Admin descriptor uses data buffer for command parameters */
443#define INTELXL_ADMIN_FL_RD 0x0400
444
445/** Admin descriptor uses data buffer */
446#define INTELXL_ADMIN_FL_BUF 0x1000
447
448/** Error: attempt to create something that already exists */
449#define INTELXL_ADMIN_EEXIST 13
450
451/** Admin queue */
453 /** Descriptors */
455 /** Data buffers */
457 /** DMA mapping */
459 /** Queue index */
460 unsigned int index;
461
462 /** Register block base */
463 unsigned int base;
464 /** Register offsets */
466};
467
468/**
469 * Initialise admin queue
470 *
471 * @v admin Admin queue
472 * @v base Register block base
473 * @v regs Register offsets
474 */
475static inline __attribute__ (( always_inline )) void
476intelxl_init_admin ( struct intelxl_admin *admin, unsigned int base,
477 const struct intelxl_admin_offsets *regs ) {
478
479 admin->base = base;
480 admin->regs = regs;
481}
482
483/** Number of admin queue descriptors */
484#define INTELXL_ADMIN_NUM_DESC 4
485
486/** Maximum time to wait for an admin request to complete */
487#define INTELXL_ADMIN_MAX_WAIT_MS 100
488
489/** Admin queue API major version */
490#define INTELXL_ADMIN_API_MAJOR 1
491
492/******************************************************************************
493 *
494 * Transmit and receive queue context
495 *
496 ******************************************************************************
497 */
498
499/** CMLAN Context Data Register */
500#define INTELXL_PFCM_LANCTXDATA(x) ( 0x10c100 + ( 0x80 * (x) ) )
501
502/** CMLAN Context Control Register */
503#define INTELXL_PFCM_LANCTXCTL 0x10c300
504#define INTELXL_PFCM_LANCTXCTL_QUEUE_NUM(x) \
505 ( (x) << 0 ) /**< Queue number */
506#define INTELXL_PFCM_LANCTXCTL_SUB_LINE(x) \
507 ( (x) << 12 ) /**< Sub-line */
508#define INTELXL_PFCM_LANCTXCTL_TYPE(x) \
509 ( (x) << 15 ) /**< Queue type */
510#define INTELXL_PFCM_LANCTXCTL_TYPE_RX \
511 INTELXL_PFCM_LANCTXCTL_TYPE ( 0x0 ) /**< RX queue type */
512#define INTELXL_PFCM_LANCTXCTL_TYPE_TX \
513 INTELXL_PFCM_LANCTXCTL_TYPE ( 0x1 ) /**< TX queue type */
514#define INTELXL_PFCM_LANCTXCTL_OP_CODE(x) \
515 ( (x) << 17 ) /**< Op code */
516#define INTELXL_PFCM_LANCTXCTL_OP_CODE_READ \
517 INTELXL_PFCM_LANCTXCTL_OP_CODE ( 0x0 ) /**< Read context */
518#define INTELXL_PFCM_LANCTXCTL_OP_CODE_WRITE \
519 INTELXL_PFCM_LANCTXCTL_OP_CODE ( 0x1 ) /**< Write context */
520
521/** CMLAN Context Status Register */
522#define INTELXL_PFCM_LANCTXSTAT 0x10c380
523#define INTELXL_PFCM_LANCTXSTAT_DONE 0x00000001UL /**< Complete */
524
525/** Queue context line */
527 /** Raw data */
529} __attribute__ (( packed ));
530
531/** Transmit queue context */
533 /** Head pointer */
535 /** Flags */
537 /** Base address */
539 /** Reserved */
541 /** Queue count */
543 /** Reserved */
545 /** Queue set */
547 /** Reserved */
549} __attribute__ (( packed ));
550
551/** New transmit queue context */
552#define INTELXL_CTX_TX_FL_NEW 0x4000
553
554/** Transmit queue base address */
555#define INTELXL_CTX_TX_BASE( base ) ( (base) >> 7 )
556
557/** Transmit queue count */
558#define INTELXL_CTX_TX_COUNT( count ) ( (count) << 1 )
559
560/** Transmit queue set */
561#define INTELXL_CTX_TX_QSET( qset) ( (qset) << 4 )
562
563/** Receive queue context */
565 /** Head pointer */
567 /** Reserved */
569 /** Base address and queue count */
571 /** Data buffer length */
573 /** Flags */
575 /** Reserved */
577 /** Maximum frame size */
579 /** Reserved */
581} __attribute__ (( packed ));
582
583/** Receive queue base address and queue count */
584#define INTELXL_CTX_RX_BASE_COUNT( base, count ) \
585 ( ( (base) >> 7 ) | ( ( ( uint64_t ) (count) ) << 57 ) )
586
587/** Receive queue data buffer length */
588#define INTELXL_CTX_RX_LEN( len ) ( (len) >> 1 )
589
590/** Use 32-byte receive descriptors */
591#define INTELXL_CTX_RX_FL_DSIZE 0x10
592
593/** Strip CRC from received packets */
594#define INTELXL_CTX_RX_FL_CRCSTRIP 0x20
595
596/** Receive queue maximum frame size */
597#define INTELXL_CTX_RX_MFS( mfs ) ( (mfs) >> 2 )
598
599/** Maximum time to wait for a context operation to complete */
600#define INTELXL_CTX_MAX_WAIT_MS 100
601
602/** Time to wait for a queue to become enabled */
603#define INTELXL_QUEUE_ENABLE_DELAY_US 20
604
605/** Time to wait for a transmit queue to become pre-disabled */
606#define INTELXL_QUEUE_PRE_DISABLE_DELAY_US 400
607
608/** Maximum time to wait for a queue to become disabled */
609#define INTELXL_QUEUE_DISABLE_MAX_WAIT_MS 1000
610
611/******************************************************************************
612 *
613 * Transmit and receive descriptors
614 *
615 ******************************************************************************
616 */
617
618/** Global Transmit Queue Head register */
619#define INTELXL_QTX_HEAD(x) ( 0x0e4000 + ( 0x4 * (x) ) )
620
621/** Global Transmit Pre Queue Disable register */
622#define INTELXL_GLLAN_TXPRE_QDIS(x) ( 0x0e6500 + ( 0x4 * ( (x) / 0x80 ) ) )
623#define INTELXL_GLLAN_TXPRE_QDIS_QINDX(x) \
624 ( (x) << 0 ) /**< Queue index */
625#define INTELXL_GLLAN_TXPRE_QDIS_SET_QDIS \
626 0x40000000UL /**< Set disable */
627#define INTELXL_GLLAN_TXPRE_QDIS_CLEAR_QDIS \
628 0x80000000UL /**< Clear disable */
629
630/** Global Transmit Queue register block */
631#define INTELXL_QTX(x) ( 0x100000 + ( 0x4 * (x) ) )
632
633/** Global Receive Queue register block */
634#define INTELXL_QRX(x) ( 0x120000 + ( 0x4 * (x) ) )
635
636/** Queue Enable Register (offset) */
637#define INTELXL_QXX_ENA 0x0000
638#define INTELXL_QXX_ENA_REQ 0x00000001UL /**< Enable request */
639#define INTELXL_QXX_ENA_STAT 0x00000004UL /**< Enabled status */
640
641/** Queue Control Register (offset) */
642#define INTELXL_QXX_CTL 0x4000
643#define INTELXL_QXX_CTL_PFVF_Q(x) ( (x) << 0 ) /**< PF/VF queue */
644#define INTELXL_QXX_CTL_PFVF_Q_PF \
645 INTELXL_QXX_CTL_PFVF_Q ( 0x2 ) /**< PF queue */
646#define INTELXL_QXX_CTL_PFVF_PF_INDX(x) ( (x) << 2 ) /**< PF index */
647
648/** Queue Tail Pointer Register (offset) */
649#define INTELXL_QXX_TAIL 0x8000
650
651/** Transmit data descriptor */
653 /** Buffer address */
655 /** Flags */
657 /** Length */
659} __attribute__ (( packed ));
660
661/** Transmit data descriptor type */
662#define INTELXL_TX_DATA_DTYP 0x0
663
664/** Transmit data descriptor end of packet */
665#define INTELXL_TX_DATA_EOP 0x10
666
667/** Transmit data descriptor report status */
668#define INTELXL_TX_DATA_RS 0x20
669
670/** Transmit data descriptor pretty please
671 *
672 * This bit is completely missing from older versions of the XL710
673 * datasheet. Later versions describe it innocuously as "reserved,
674 * must be 1". Without this bit, everything will appear to work (up
675 * to and including the port "transmit good octets" counter), but no
676 * packet will actually be sent.
677 */
678#define INTELXL_TX_DATA_JFDI 0x40
679
680/** Transmit data descriptor length */
681#define INTELXL_TX_DATA_LEN( len ) ( (len) << 2 )
682
683/** Transmit writeback descriptor */
685 /** Reserved */
687 /** Flags */
689 /** Reserved */
691} __attribute__ (( packed ));
692
693/** Transmit writeback descriptor complete */
694#define INTELXL_TX_WB_FL_DD 0x01
695
696/** Transmit descriptor */
698 /** Transmit data descriptor */
700 /** Transmit writeback descriptor */
702};
703
704/** Receive data descriptor */
706 /** Buffer address */
708 /** Flags */
710 /** Reserved */
712} __attribute__ (( packed ));
713
714/** Receive writeback descriptor */
716 /** Reserved */
718 /** VLAN tag */
720 /** Reserved */
722 /** Flags */
724 /** Length */
726 /** Reserved */
728} __attribute__ (( packed ));
729
730/** Receive writeback descriptor complete */
731#define INTELXL_RX_WB_FL_DD 0x00000001UL
732
733/** Receive writeback descriptor VLAN tag present */
734#define INTELXL_RX_WB_FL_VLAN 0x00000004UL
735
736/** Receive writeback descriptor error */
737#define INTELXL_RX_WB_FL_RXE 0x00080000UL
738
739/** Receive writeback descriptor length */
740#define INTELXL_RX_WB_LEN(len) ( ( (len) >> 6 ) & 0x3fff )
741
742/** Packet descriptor */
744 /** Receive data descriptor */
746 /** Receive writeback descriptor */
748};
749
750/** Descriptor ring */
752 /** Descriptors */
753 union {
754 /** Transmit descriptors */
756 /** Receive descriptors */
758 /** Raw data */
759 void *raw;
761 /** Descriptor ring DMA mapping */
763 /** Producer index */
764 unsigned int prod;
765 /** Consumer index */
766 unsigned int cons;
767
768 /** Register block */
769 unsigned int reg;
770 /** Tail register */
771 unsigned int tail;
772 /** Length (in bytes) */
773 size_t len;
774 /** Program queue context
775 *
776 * @v intelxl Intel device
777 * @v address Descriptor ring base address
778 */
779 int ( * context ) ( struct intelxl_nic *intelxl, physaddr_t address );
780};
781
782/**
783 * Initialise descriptor ring
784 *
785 * @v ring Descriptor ring
786 * @v count Number of descriptors
787 * @v len Length of a single descriptor
788 * @v context Method to program queue context
789 */
790static inline __attribute__ (( always_inline)) void
791intelxl_init_ring ( struct intelxl_ring *ring, unsigned int count, size_t len,
792 int ( * context ) ( struct intelxl_nic *intelxl,
793 physaddr_t address ) ) {
794
795 ring->len = ( count * len );
796 ring->context = context;
797}
798
799/** Number of transmit descriptors
800 *
801 * Chosen to exceed the receive ring fill level, in order to avoid
802 * running out of transmit descriptors when sending TCP ACKs.
803 */
804#define INTELXL_TX_NUM_DESC 64
805
806/** Transmit descriptor ring maximum fill level */
807#define INTELXL_TX_FILL ( INTELXL_TX_NUM_DESC - 1 )
808
809/** Number of receive descriptors
810 *
811 * Must be a multiple of 32 and greater than or equal to 64.
812 */
813#define INTELXL_RX_NUM_DESC 64
814
815/** Receive descriptor ring fill level
816 *
817 * Must be a multiple of 8 and greater than 8.
818 */
819#define INTELXL_RX_FILL 16
820
821/** Maximum packet length (excluding CRC) */
822#define INTELXL_MAX_PKT_LEN ( 9728 - 4 /* CRC */ )
823
824/******************************************************************************
825 *
826 * Top level
827 *
828 ******************************************************************************
829 */
830
831/** PF Interrupt Zero Dynamic Control Register */
832#define INTELXL_PFINT_DYN_CTL0 0x038480
833#define INTELXL_INT_DYN_CTL_INTENA 0x00000001UL /**< Enable */
834#define INTELXL_INT_DYN_CTL_CLEARPBA 0x00000002UL /**< Acknowledge */
835#define INTELXL_INT_DYN_CTL_INTENA_MASK 0x80000000UL /**< Ignore enable */
836
837/** PF Interrupt Zero Linked List Register */
838#define INTELXL_PFINT_LNKLST0 0x038500
839#define INTELXL_PFINT_LNKLST0_FIRSTQ_INDX(x) \
840 ( (x) << 0 ) /**< Queue index */
841#define INTELXL_PFINT_LNKLST0_FIRSTQ_INDX_NONE \
842 INTELXL_PFINT_LNKLST0_FIRSTQ_INDX ( 0x7ff ) /**< End of list */
843#define INTELXL_PFINT_LNKLST0_FIRSTQ_TYPE(x) \
844 ( (x) << 11 ) /**< Queue type */
845#define INTELXL_PFINT_LNKLST0_FIRSTQ_TYPE_RX \
846 INTELXL_PFINT_LNKLST0_FIRSTQ_TYPE ( 0x0 ) /**< Receive queue */
847#define INTELXL_PFINT_LNKLST0_FIRSTQ_TYPE_TX \
848 INTELXL_PFINT_LNKLST0_FIRSTQ_TYPE ( 0x1 ) /**< Transmit queue */
849
850/** PF Interrupt Zero Cause Enablement Register */
851#define INTELXL_PFINT_ICR0_ENA 0x038800
852#define INTELXL_PFINT_ICR0_ENA_ADMINQ 0x40000000UL /**< Admin event */
853
854/** Receive Queue Interrupt Cause Control Register */
855#define INTELXL_QINT_RQCTL(x) ( 0x03a000 + ( 0x4 * (x) ) )
856#define INTELXL_QINT_RQCTL_NEXTQ_INDX(x) ( (x) << 16 ) /**< Queue index */
857#define INTELXL_QINT_RQCTL_NEXTQ_INDX_NONE \
858 INTELXL_QINT_RQCTL_NEXTQ_INDX ( 0x7ff ) /**< End of list */
859#define INTELXL_QINT_RQCTL_NEXTQ_TYPE(x) ( (x) << 27 ) /**< Queue type */
860#define INTELXL_QINT_RQCTL_NEXTQ_TYPE_RX \
861 INTELXL_QINT_RQCTL_NEXTQ_TYPE ( 0x0 ) /**< Receive queue */
862#define INTELXL_QINT_RQCTL_NEXTQ_TYPE_TX \
863 INTELXL_QINT_RQCTL_NEXTQ_TYPE ( 0x1 ) /**< Transmit queue */
864#define INTELXL_QINT_RQCTL_CAUSE_ENA 0x40000000UL /**< Enable */
865
866/** Transmit Queue Interrupt Cause Control Register */
867#define INTELXL_QINT_TQCTL(x) ( 0x03c000 + ( 0x4 * (x) ) )
868#define INTELXL_QINT_TQCTL_NEXTQ_INDX(x) ( (x) << 16 ) /**< Queue index */
869#define INTELXL_QINT_TQCTL_NEXTQ_INDX_NONE \
870 INTELXL_QINT_TQCTL_NEXTQ_INDX ( 0x7ff ) /**< End of list */
871#define INTELXL_QINT_TQCTL_NEXTQ_TYPE(x) ( (x) << 27 ) /**< Queue type */
872#define INTELXL_QINT_TQCTL_NEXTQ_TYPE_RX \
873 INTELXL_QINT_TQCTL_NEXTQ_TYPE ( 0x0 ) /**< Receive queue */
874#define INTELXL_QINT_TQCTL_NEXTQ_TYPE_TX \
875 INTELXL_QINT_TQCTL_NEXTQ_TYPE ( 0x1 ) /**< Transmit queue */
876#define INTELXL_QINT_TQCTL_CAUSE_ENA 0x40000000UL /**< Enable */
877
878/** Function Requester ID Information Register */
879#define INTELXL_PFFUNC_RID 0x09c000
880#define INTELXL_PFFUNC_RID_FUNC_NUM(x) \
881 ( ( (x) >> 0 ) & 0x7 ) /**< Function number */
882
883/** PF Queue Allocation Register */
884#define INTELXL_PFLAN_QALLOC 0x1c0400
885#define INTELXL_PFLAN_QALLOC_FIRSTQ(x) \
886 ( ( (x) >> 0 ) & 0x7ff ) /**< First queue */
887#define INTELXL_PFLAN_QALLOC_LASTQ(x) \
888 ( ( (x) >> 16 ) & 0x7ff ) /**< Last queue */
889
890/** PF LAN Port Number Register */
891#define INTELXL_PFGEN_PORTNUM 0x1c0480
892#define INTELXL_PFGEN_PORTNUM_PORT_NUM(x) \
893 ( ( (x) >> 0 ) & 0x3 ) /**< Port number */
894
895/** MSI-X interrupt vector */
896#define INTELXL_MSIX_VECTOR 0
897
898/** An Intel 40 Gigabit network card */
900 /** Registers */
901 void *regs;
902 /** DMA device */
904 /** Maximum frame size */
905 size_t mfs;
906
907 /** Physical function number */
908 unsigned int pf;
909 /** Absolute queue number base */
910 unsigned int base;
911 /** Port number */
912 unsigned int port;
913 /** Queue number */
914 unsigned int queue;
915 /** Virtual Station Interface switching element ID */
916 unsigned int vsi;
917 /** Queue set handle */
918 unsigned int qset;
919 /** Transmit element ID */
921 /** Device capabilities */
923 /** Interrupt control register */
924 unsigned int intr;
925 /** PCI Express capability offset */
926 unsigned int exp;
927 /** MSI-X interrupt */
929
930 /** Admin command queue */
932 /** Admin event queue */
934
935 /** Current VF opcode */
936 unsigned int vopcode;
937
938 /** Transmit descriptor ring */
940 /** Receive descriptor ring */
942 /** Receive I/O buffers */
944
945 /**
946 * Handle admin event
947 *
948 * @v netdev Network device
949 * @v evt Event descriptor
950 * @v buf Data buffer
951 */
952 void ( * handle ) ( struct net_device *netdev,
953 struct intelxl_admin_descriptor *evt,
954 union intelxl_admin_buffer *buf );
955};
956
958
959extern int intelxl_msix_enable ( struct intelxl_nic *intelxl,
960 struct pci_device *pci,
961 unsigned int vector );
962extern void intelxl_msix_disable ( struct intelxl_nic *intelxl,
963 struct pci_device *pci,
964 unsigned int vector );
965extern struct intelxl_admin_descriptor *
967extern union intelxl_admin_buffer *
968intelxl_admin_command_buffer ( struct intelxl_nic *intelxl );
969extern int intelxl_admin_command ( struct intelxl_nic *intelxl );
970extern int intelxl_admin_clear_pxe ( struct intelxl_nic *intelxl );
971extern int intelxl_admin_mac_config ( struct intelxl_nic *intelxl );
972extern void intelxl_poll_admin ( struct net_device *netdev );
973extern int intelxl_open_admin ( struct intelxl_nic *intelxl );
974extern void intelxl_reopen_admin ( struct intelxl_nic *intelxl );
975extern void intelxl_close_admin ( struct intelxl_nic *intelxl );
976extern int intelxl_alloc_ring ( struct intelxl_nic *intelxl,
977 struct intelxl_ring *ring );
978extern void intelxl_free_ring ( struct intelxl_nic *intelxl,
979 struct intelxl_ring *ring );
980extern int intelxl_create_ring ( struct intelxl_nic *intelxl,
981 struct intelxl_ring *ring );
982extern void intelxl_destroy_ring ( struct intelxl_nic *intelxl,
983 struct intelxl_ring *ring );
984extern void intelxl_empty_rx ( struct intelxl_nic *intelxl );
985extern int intelxl_transmit ( struct net_device *netdev,
986 struct io_buffer *iobuf );
987extern void intelxl_poll ( struct net_device *netdev );
988
989#endif /* _INTELXL_H */
unsigned short uint16_t
Definition stdint.h:11
unsigned int uint32_t
Definition stdint.h:12
unsigned long physaddr_t
Definition stdint.h:20
unsigned long long uint64_t
Definition stdint.h:13
unsigned char uint8_t
Definition stdint.h:10
ring len
Length.
Definition dwmac.h:226
uint32_t vector
MSI-X vector.
Definition ena.h:9
uint64_t address
Base address.
Definition ena.h:13
struct ena_llq_option desc
Descriptor counts.
Definition ena.h:9
static struct net_device * netdev
Definition gdbudp.c:53
static unsigned int count
Number of entries.
Definition dwmac.h:220
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
Definition compiler.h:896
#define FILE_SECBOOT(_status)
Declare a file's UEFI Secure Boot permission status.
Definition compiler.h:926
#define ETH_ALEN
Definition if_ether.h:9
#define __attribute__(x)
Definition compiler.h:10
int intelxl_msix_enable(struct intelxl_nic *intelxl, struct pci_device *pci, unsigned int vector)
Enable MSI-X dummy interrupt.
Definition intelxl.c:63
void intelxl_destroy_ring(struct intelxl_nic *intelxl, struct intelxl_ring *ring)
Destroy descriptor ring.
Definition intelxl.c:1300
int intelxl_admin_clear_pxe(struct intelxl_nic *intelxl)
Clear PXE mode.
Definition intelxl.c:561
int intelxl_admin_command(struct intelxl_nic *intelxl)
Issue admin queue command.
Definition intelxl.c:278
void intelxl_close_admin(struct intelxl_nic *intelxl)
Close admin queues.
Definition intelxl.c:929
int intelxl_alloc_ring(struct intelxl_nic *intelxl, struct intelxl_ring *ring)
Allocate descriptor ring.
Definition intelxl.c:957
void intelxl_reopen_admin(struct intelxl_nic *intelxl)
Reopen admin queues (after virtual function reset)
Definition intelxl.c:907
void intelxl_free_ring(struct intelxl_nic *intelxl, struct intelxl_ring *ring)
int intelxl_admin_mac_config(struct intelxl_nic *intelxl)
Set MAC configuration.
Definition intelxl.c:712
void intelxl_msix_disable(struct intelxl_nic *intelxl, struct pci_device *pci, unsigned int vector)
Disable MSI-X dummy interrupt.
Definition intelxl.c:91
int intelxl_open_admin(struct intelxl_nic *intelxl)
Open admin queues.
Definition intelxl.c:877
static void intelxl_init_ring(struct intelxl_ring *ring, unsigned int count, size_t len, int(*context)(struct intelxl_nic *intelxl, physaddr_t address))
Initialise descriptor ring.
Definition intelxl.h:791
#define INTELXL_RX_NUM_DESC
Number of receive descriptors.
Definition intelxl.h:813
union intelxl_admin_buffer * intelxl_admin_command_buffer(struct intelxl_nic *intelxl)
Get next admin command queue data buffer.
Definition intelxl.c:239
struct intelxl_admin_descriptor * intelxl_admin_command_descriptor(struct intelxl_nic *intelxl)
Get next admin command queue descriptor.
Definition intelxl.c:222
void intelxl_empty_rx(struct intelxl_nic *intelxl)
Discard unused receive I/O buffers.
Definition intelxl.c:1367
void intelxl_poll_admin(struct net_device *netdev)
Poll admin event queue.
Definition intelxl.c:836
static void intelxl_init_admin(struct intelxl_admin *admin, unsigned int base, const struct intelxl_admin_offsets *regs)
Initialise admin queue.
Definition intelxl.h:476
int intelxl_transmit(struct net_device *netdev, struct io_buffer *iobuf)
Transmit packet.
Definition intelxl.c:1493
void intelxl_poll(struct net_device *netdev)
Poll for completed and received packets.
Definition intelxl.c:1613
int intelxl_create_ring(struct intelxl_nic *intelxl, struct intelxl_ring *ring)
Create descriptor ring.
Definition intelxl.c:1266
#define INTELXL_ADMIN_BUFFER_SIZE
Maximum size of a data buffer.
Definition intelxl.h:399
DMA mappings.
uint32_t base
Base.
Definition librm.h:3
PCI MSI-X interrupts.
struct i386_regs regs
Definition registers.h:1
A DMA-capable device.
Definition dma.h:48
A DMA mapping.
Definition dma.h:33
Admin queue Restart Autonegotiation command parameters.
Definition intelxl.h:330
uint8_t reserved[15]
Reserved.
Definition intelxl.h:334
Admin queue data buffer command parameters.
Definition intelxl.h:78
uint8_t reserved[8]
Reserved.
Definition intelxl.h:80
uint32_t high
Buffer address high.
Definition intelxl.h:82
uint32_t low
Buffer address low.
Definition intelxl.h:84
Admin queue Clear PXE Mode command parameters.
Definition intelxl.h:196
uint8_t reserved[15]
Reserved.
Definition intelxl.h:200
uint8_t magic
Magic value.
Definition intelxl.h:198
Admin queue descriptor.
Definition intelxl.h:416
uint32_t cookie
Opaque cookie.
Definition intelxl.h:426
uint16_t opcode
Opcode.
Definition intelxl.h:420
uint16_t flags
Flags.
Definition intelxl.h:418
uint16_t ret
Return value.
Definition intelxl.h:424
uint8_t reserved[4]
Reserved.
Definition intelxl.h:428
union intelxl_admin_params params
Parameters.
Definition intelxl.h:430
uint16_t len
Data length.
Definition intelxl.h:422
Admin queue Driver Version data buffer.
Definition intelxl.h:130
char name[32]
Driver name.
Definition intelxl.h:132
Admin queue Driver Version command parameters.
Definition intelxl.h:114
uint8_t major
Driver version.
Definition intelxl.h:116
uint8_t build
Build version.
Definition intelxl.h:120
uint64_t address
Data buffer address.
Definition intelxl.h:126
uint8_t minor
Minor version.
Definition intelxl.h:118
uint8_t sub
Sub-build version.
Definition intelxl.h:122
uint8_t reserved[4]
Reserved.
Definition intelxl.h:124
Admin queue Set MAC Configuration command parameters.
Definition intelxl.h:314
uint8_t reserved[13]
Reserved.
Definition intelxl.h:320
uint16_t mfs
Maximum frame size.
Definition intelxl.h:316
Admin queue Manage MAC Address Read data buffer.
Definition intelxl.h:164
uint8_t reserved[ETH_ALEN]
Reserved.
Definition intelxl.h:168
uint8_t pf[ETH_ALEN]
Physical function MAC address.
Definition intelxl.h:166
uint8_t port[ETH_ALEN]
Port MAC address.
Definition intelxl.h:170
uint8_t wol[ETH_ALEN]
Physical function wake-on-LAN MAC address.
Definition intelxl.h:172
Admin queue Manage MAC Address Read command parameters.
Definition intelxl.h:153
uint8_t reserved[15]
Reserved.
Definition intelxl.h:157
uint8_t valid
Valid addresses.
Definition intelxl.h:155
Admin queue Manage MAC Address Write command parameters.
Definition intelxl.h:179
uint8_t reserved_a[1]
Reserved.
Definition intelxl.h:181
uint16_t high
MAC address first 16 bits, byte-swapped.
Definition intelxl.h:185
uint8_t reserved_b[8]
Reserved.
Definition intelxl.h:189
uint32_t low
MAC address last 32 bits, byte-swapped.
Definition intelxl.h:187
uint8_t type
Write type.
Definition intelxl.h:183
Admin queue register offsets.
Definition intelxl.h:64
unsigned int head
Head Register offset.
Definition intelxl.h:72
unsigned int len
Length Register offset.
Definition intelxl.h:70
unsigned int tail
Tail Register offset.
Definition intelxl.h:74
unsigned int bal
Base Address Low Register offset.
Definition intelxl.h:66
unsigned int bah
Base Address High Register offset.
Definition intelxl.h:68
Admin queue Set VSI Promiscuous Modes command parameters.
Definition intelxl.h:287
uint16_t vsi
VSI switching element ID.
Definition intelxl.h:293
uint16_t valid
Valid flags.
Definition intelxl.h:291
uint8_t reserved[10]
Reserved.
Definition intelxl.h:295
Admin queue Shutdown command parameters.
Definition intelxl.h:139
uint8_t unloading
Driver unloading.
Definition intelxl.h:141
uint8_t reserved[15]
Reserved.
Definition intelxl.h:143
Admin queue Get Switch Configuration data buffer.
Definition intelxl.h:245
uint16_t total
Total number of switching elements.
Definition intelxl.h:249
struct intelxl_admin_switch_config cfg
Switch configuration.
Definition intelxl.h:253
uint8_t reserved_a[12]
Reserved.
Definition intelxl.h:251
uint16_t count
Number of switching elements reported.
Definition intelxl.h:247
Switching element configuration.
Definition intelxl.h:210
uint16_t downlink
Downlink switching element ID.
Definition intelxl.h:220
uint8_t reserved_c[2]
Reserved.
Definition intelxl.h:226
uint8_t connection
Connection type.
Definition intelxl.h:224
uint8_t reserved_b[3]
Reserved.
Definition intelxl.h:222
uint16_t seid
Switching element ID.
Definition intelxl.h:216
uint8_t revision
Revision.
Definition intelxl.h:214
uint16_t uplink
Uplink switching element ID.
Definition intelxl.h:218
uint16_t info
Element specific information.
Definition intelxl.h:228
uint8_t type
Switching element type.
Definition intelxl.h:212
Admin queue Get Switch Configuration command parameters.
Definition intelxl.h:235
uint8_t reserved[6]
Reserved.
Definition intelxl.h:239
uint16_t next
Starting switching element identifier.
Definition intelxl.h:237
uint64_t address
Data buffer address.
Definition intelxl.h:241
Admin queue Get Version command parameters.
Definition intelxl.h:99
struct intelxl_admin_version api
API version.
Definition intelxl.h:107
uint32_t rom
ROM version.
Definition intelxl.h:101
struct intelxl_admin_version firmware
Firmware version.
Definition intelxl.h:105
uint32_t build
Firmware build ID.
Definition intelxl.h:103
Admin queue version number.
Definition intelxl.h:91
uint16_t major
Major version number.
Definition intelxl.h:93
uint16_t minor
Minor version number.
Definition intelxl.h:95
Admin queue Get VSI Parameters data buffer.
Definition intelxl.h:270
uint8_t reserved_a[30]
Reserved.
Definition intelxl.h:272
uint8_t reserved_b[34]
Reserved.
Definition intelxl.h:276
uint16_t qset[8]
Queue set handles for each traffic class.
Definition intelxl.h:278
uint16_t queue[16]
Queue numbers.
Definition intelxl.h:274
uint8_t reserved_c[16]
Reserved.
Definition intelxl.h:280
Admin queue Get VSI Parameters command parameters.
Definition intelxl.h:260
uint8_t reserved[6]
Reserved.
Definition intelxl.h:264
uint64_t address
Data buffer address.
Definition intelxl.h:266
uint16_t vsi
VSI switching element ID.
Definition intelxl.h:262
Admin queue.
Definition intelxl.h:452
unsigned int base
Register block base.
Definition intelxl.h:463
const struct intelxl_admin_offsets * regs
Register offsets.
Definition intelxl.h:465
union intelxl_admin_buffer * buf
Data buffers.
Definition intelxl.h:456
struct intelxl_admin_descriptor * desc
Descriptors.
Definition intelxl.h:454
struct dma_mapping map
DMA mapping.
Definition intelxl.h:458
unsigned int index
Queue index.
Definition intelxl.h:460
Queue context line.
Definition intelxl.h:526
uint32_t raw[4]
Raw data.
Definition intelxl.h:528
Receive queue context.
Definition intelxl.h:564
uint16_t head
Head pointer.
Definition intelxl.h:566
uint16_t mfs
Maximum frame size.
Definition intelxl.h:578
uint64_t base_count
Base address and queue count.
Definition intelxl.h:570
uint8_t reserved_b[7]
Reserved.
Definition intelxl.h:576
uint16_t len
Data buffer length.
Definition intelxl.h:572
uint8_t flags
Flags.
Definition intelxl.h:574
uint8_t reserved_a[2]
Reserved.
Definition intelxl.h:568
uint8_t reserved_c[8]
Reserved.
Definition intelxl.h:580
Transmit queue context.
Definition intelxl.h:532
uint8_t reserved_a[8]
Reserved.
Definition intelxl.h:540
uint16_t count
Queue count.
Definition intelxl.h:542
uint16_t head
Head pointer.
Definition intelxl.h:534
uint16_t flags
Flags.
Definition intelxl.h:536
uint8_t reserved_b[100]
Reserved.
Definition intelxl.h:544
uint16_t qset
Queue set.
Definition intelxl.h:546
uint64_t base
Base address.
Definition intelxl.h:538
uint8_t reserved_c[4]
Reserved.
Definition intelxl.h:548
An Intel 40 Gigabit network card.
Definition intelxl.h:899
struct intelxl_admin event
Admin event queue.
Definition intelxl.h:933
size_t mfs
Maximum frame size.
Definition intelxl.h:905
struct dma_device * dma
DMA device.
Definition intelxl.h:903
struct pci_msix msix
MSI-X interrupt.
Definition intelxl.h:928
unsigned int port
Port number.
Definition intelxl.h:912
unsigned int vopcode
Current VF opcode.
Definition intelxl.h:936
unsigned int pf
Physical function number.
Definition intelxl.h:908
uint32_t teid
Transmit element ID.
Definition intelxl.h:920
unsigned int vsi
Virtual Station Interface switching element ID.
Definition intelxl.h:916
struct intelxl_admin command
Admin command queue.
Definition intelxl.h:931
struct io_buffer * rx_iobuf[INTELXL_RX_NUM_DESC]
Receive I/O buffers.
Definition intelxl.h:943
unsigned int intr
Interrupt control register.
Definition intelxl.h:924
unsigned int queue
Queue number.
Definition intelxl.h:914
struct intelxl_ring tx
Transmit descriptor ring.
Definition intelxl.h:939
unsigned int qset
Queue set handle.
Definition intelxl.h:918
struct intelxl_ring rx
Receive descriptor ring.
Definition intelxl.h:941
uint32_t caps
Device capabilities.
Definition intelxl.h:922
unsigned int exp
PCI Express capability offset.
Definition intelxl.h:926
void(* handle)(struct net_device *netdev, struct intelxl_admin_descriptor *evt, union intelxl_admin_buffer *buf)
Handle admin event.
Definition intelxl.h:952
unsigned int base
Absolute queue number base.
Definition intelxl.h:910
void * regs
Registers.
Definition intelxl.h:901
Descriptor ring.
Definition intelxl.h:751
unsigned int cons
Consumer index.
Definition intelxl.h:766
union intelxl_rx_descriptor * rx
Receive descriptors.
Definition intelxl.h:757
size_t len
Length (in bytes)
Definition intelxl.h:773
void * raw
Raw data.
Definition intelxl.h:759
union intelxl_tx_descriptor * tx
Transmit descriptors.
Definition intelxl.h:755
unsigned int prod
Producer index.
Definition intelxl.h:764
unsigned int reg
Register block.
Definition intelxl.h:769
struct dma_mapping map
Descriptor ring DMA mapping.
Definition intelxl.h:762
unsigned int tail
Tail register.
Definition intelxl.h:771
int(* context)(struct intelxl_nic *intelxl, physaddr_t address)
Program queue context.
Definition intelxl.h:779
Receive data descriptor.
Definition intelxl.h:705
uint32_t flags
Flags.
Definition intelxl.h:709
uint8_t reserved[20]
Reserved.
Definition intelxl.h:711
uint64_t address
Buffer address.
Definition intelxl.h:707
Receive writeback descriptor.
Definition intelxl.h:715
uint8_t reserved_c[16]
Reserved.
Definition intelxl.h:727
uint8_t reserved_a[2]
Reserved.
Definition intelxl.h:717
uint8_t reserved_b[4]
Reserved.
Definition intelxl.h:721
Transmit data descriptor.
Definition intelxl.h:652
uint32_t flags
Flags.
Definition intelxl.h:656
uint32_t len
Length.
Definition intelxl.h:658
uint64_t address
Buffer address.
Definition intelxl.h:654
Transmit writeback descriptor.
Definition intelxl.h:684
uint8_t reserved_a[8]
Reserved.
Definition intelxl.h:686
uint8_t reserved_b[7]
Reserved.
Definition intelxl.h:690
A persistent I/O buffer.
Definition iobuf.h:38
A network device.
Definition netdevice.h:353
A PCI device.
Definition pci.h:211
PCI MSI-X capability.
Definition pcimsix.h:35
Admin queue data buffer.
Definition intelxl.h:402
struct intelxl_admin_driver_buffer driver
Driver Version data buffer.
Definition intelxl.h:404
uint8_t pad[INTELXL_ADMIN_BUFFER_SIZE]
Maximum buffer size.
Definition intelxl.h:412
struct intelxl_admin_vsi_buffer vsi
Get VSI Parameters data buffer.
Definition intelxl.h:410
struct intelxl_admin_mac_read_buffer mac_read
Manage MAC Address Read data buffer.
Definition intelxl.h:406
struct intelxl_admin_switch_buffer sw
Get Switch Configuration data buffer.
Definition intelxl.h:408
Admin queue command parameters.
Definition intelxl.h:369
struct intelxl_admin_autoneg_params autoneg
Restart Autonegotiation command parameters.
Definition intelxl.h:393
struct intelxl_admin_switch_params sw
Get Switch Configuration command parameters.
Definition intelxl.h:385
struct intelxl_admin_link_params link
Get Link Status command parameters.
Definition intelxl.h:395
struct intelxl_admin_mac_read_params mac_read
Manage MAC Address Read command parameters.
Definition intelxl.h:379
struct intelxl_admin_vsi_params vsi
Get VSI Parameters command parameters.
Definition intelxl.h:387
struct intelxl_admin_clear_pxe_params pxe
Clear PXE Mode command parameters.
Definition intelxl.h:383
struct intelxl_admin_mac_write_params mac_write
Manage MAC Address Write command parameters.
Definition intelxl.h:381
struct intelxl_admin_version_params version
Get Version command parameters.
Definition intelxl.h:373
struct intelxl_admin_shutdown_params shutdown
Shutdown command parameters.
Definition intelxl.h:377
struct intelxl_admin_buffer_params buffer
Additional data buffer command parameters.
Definition intelxl.h:371
struct intelxl_admin_promisc_params promisc
Set VSI Promiscuous Modes command parameters.
Definition intelxl.h:389
struct intelxl_admin_mac_config_params mac_config
Set MAC Configuration command parameters.
Definition intelxl.h:391
struct intelxl_admin_driver_params driver
Driver Version command parameters.
Definition intelxl.h:375
Packet descriptor.
Definition intelxl.h:743
struct intelxl_rx_writeback_descriptor wb
Receive writeback descriptor.
Definition intelxl.h:747
struct intelxl_rx_data_descriptor data
Receive data descriptor.
Definition intelxl.h:745
Transmit descriptor.
Definition intelxl.h:697
struct intelxl_tx_data_descriptor data
Transmit data descriptor.
Definition intelxl.h:699
struct intelxl_tx_writeback_descriptor wb
Transmit writeback descriptor.
Definition intelxl.h:701