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 
10 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
11 FILE_SECBOOT ( PERMITTED );
12 
13 #include <stdint.h>
14 #include <ipxe/if_ether.h>
15 #include <ipxe/pcimsix.h>
16 #include <ipxe/dma.h>
17 
18 struct 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 */
458  struct dma_mapping map;
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  */
475 static inline __attribute__ (( always_inline )) void
476 intelxl_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 */
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 */
528  uint32_t raw[4];
529 } __attribute__ (( packed ));
531 /** Transmit queue context */
533  /** Head pointer */
534  uint16_t head;
535  /** Flags */
537  /** Base address */
539  /** Reserved */
541  /** Queue count */
543  /** Reserved */
545  /** Queue set */
547  /** Reserved */
549 } __attribute__ (( packed ));
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 )
557 /** Transmit queue count */
558 #define INTELXL_CTX_TX_COUNT( count ) ( (count) << 1 )
560 /** Transmit queue set */
561 #define INTELXL_CTX_TX_QSET( qset) ( (qset) << 4 )
563 /** Receive queue context */
564 struct intelxl_context_rx {
565  /** Head pointer */
566  uint16_t head;
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 ));
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
593 /** Strip CRC from received packets */
594 #define INTELXL_CTX_RX_FL_CRCSTRIP 0x20
596 /** Receive queue maximum frame size */
597 #define INTELXL_CTX_RX_MFS( mfs ) ( (mfs) >> 2 )
599 /** Maximum time to wait for a context operation to complete */
600 #define INTELXL_CTX_MAX_WAIT_MS 100
602 /** Time to wait for a queue to become enabled */
603 #define INTELXL_QUEUE_ENABLE_DELAY_US 20
605 /** Time to wait for a transmit queue to become pre-disabled */
606 #define INTELXL_QUEUE_PRE_DISABLE_DELAY_US 400
608 /** Maximum time to wait for a queue to become disabled */
609 #define INTELXL_QUEUE_DISABLE_MAX_WAIT_MS 1000
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) ) )
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 */
648 /** Queue Tail Pointer Register (offset) */
649 #define INTELXL_QXX_TAIL 0x8000
650 
651 /** Transmit data descriptor */
653  /** Buffer address */
655  /** Flags */
656  uint32_t flags;
657  /** Length */
658  uint32_t len;
659 } __attribute__ (( packed ));
660 
661 /** Transmit data descriptor type */
662 #define INTELXL_TX_DATA_DTYP 0x0
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 */
688  uint8_t flags;
689  /** Reserved */
690  uint8_t reserved_b[7];
691 } __attribute__ (( packed ));
692 
693 /** Transmit writeback descriptor complete */
694 #define INTELXL_TX_WB_FL_DD 0x01
696 /** Transmit descriptor */
697 union intelxl_tx_descriptor {
698  /** Transmit data descriptor */
700  /** Transmit writeback descriptor */
702 };
703 
704 /** Receive data descriptor */
706  /** Buffer address */
708  /** Flags */
709  uint32_t flags;
710  /** Reserved */
711  uint8_t reserved[20];
712 } __attribute__ (( packed ));
713 
714 /** Receive writeback descriptor */
716  /** Reserved */
717  uint8_t reserved_a[2];
718  /** VLAN tag */
719  uint16_t vlan;
720  /** Reserved */
721  uint8_t reserved_b[4];
722  /** Flags */
723  uint32_t flags;
724  /** Length */
725  uint32_t len;
726  /** Reserved */
727  uint8_t reserved_c[16];
728 } __attribute__ (( packed ));
729 
730 /** Receive writeback descriptor complete */
731 #define INTELXL_RX_WB_FL_DD 0x00000001UL
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 */
743 union intelxl_rx_descriptor {
744  /** Receive data descriptor */
746  /** Receive writeback descriptor */
748 };
749 
750 /** Descriptor ring */
751 struct intelxl_ring {
752  /** Descriptors */
753  union {
754  /** Transmit descriptors */
755  union intelxl_tx_descriptor *tx;
756  /** Receive descriptors */
757  union intelxl_rx_descriptor *rx;
758  /** Raw data */
759  void *raw;
760  } desc;
761  /** Descriptor ring DMA mapping */
762  struct dma_mapping map;
763  /** Producer index */
764  unsigned int prod;
765  /** Consumer index */
766  unsigned int cons;
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  */
790 static inline __attribute__ (( always_inline)) void
791 intelxl_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 */
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 */
899 struct intelxl_nic {
900  /** Registers */
901  void *regs;
902  /** DMA device */
903  struct dma_device *dma;
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 */
920  uint32_t teid;
921  /** Device capabilities */
922  uint32_t caps;
923  /** Interrupt control register */
924  unsigned int intr;
925  /** PCI Express capability offset */
926  unsigned int exp;
927  /** MSI-X interrupt */
928  struct pci_msix msix;
930  /** Admin command queue */
932  /** Admin event queue */
934 
935  /** Current VF opcode */
936  unsigned int vopcode;
938  /** Transmit descriptor ring */
939  struct intelxl_ring tx;
940  /** Receive descriptor ring */
941  struct intelxl_ring rx;
942  /** Receive I/O buffers */
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 
957 extern const struct intelxl_admin_offsets intelxl_admin_offsets;
958 
959 extern int intelxl_msix_enable ( struct intelxl_nic *intelxl,
960  struct pci_device *pci,
961  unsigned int vector );
962 extern void intelxl_msix_disable ( struct intelxl_nic *intelxl,
963  struct pci_device *pci,
964  unsigned int vector );
965 extern struct intelxl_admin_descriptor *
967 extern union intelxl_admin_buffer *
968 intelxl_admin_command_buffer ( struct intelxl_nic *intelxl );
969 extern int intelxl_admin_command ( struct intelxl_nic *intelxl );
970 extern int intelxl_admin_clear_pxe ( struct intelxl_nic *intelxl );
971 extern int intelxl_admin_mac_config ( struct intelxl_nic *intelxl );
972 extern void intelxl_poll_admin ( struct net_device *netdev );
973 extern int intelxl_open_admin ( struct intelxl_nic *intelxl );
974 extern void intelxl_reopen_admin ( struct intelxl_nic *intelxl );
975 extern void intelxl_close_admin ( struct intelxl_nic *intelxl );
976 extern int intelxl_alloc_ring ( struct intelxl_nic *intelxl,
977  struct intelxl_ring *ring );
978 extern void intelxl_free_ring ( struct intelxl_nic *intelxl,
979  struct intelxl_ring *ring );
980 extern int intelxl_create_ring ( struct intelxl_nic *intelxl,
981  struct intelxl_ring *ring );
982 extern void intelxl_destroy_ring ( struct intelxl_nic *intelxl,
983  struct intelxl_ring *ring );
984 extern void intelxl_empty_rx ( struct intelxl_nic *intelxl );
985 extern int intelxl_transmit ( struct net_device *netdev,
986  struct io_buffer *iobuf );
987 extern void intelxl_poll ( struct net_device *netdev );
988 
989 #endif /* _INTELXL_H */
uint8_t reserved_a[2]
Reserved.
Definition: intelxl.h:722
Receive queue context.
Definition: intelxl.h:568
uint8_t reserved_b[8]
Reserved.
Definition: intelxl.h:189
uint16_t len
Data buffer length.
Definition: intelxl.h:576
void * regs
Registers.
Definition: intelxl.h:912
#define __attribute__(x)
Definition: compiler.h:10
uint16_t info
Element specific information.
Definition: intelxl.h:228
uint32_t base
Base.
Definition: librm.h:138
uint16_t head
Head pointer.
Definition: intelxl.h:570
size_t len
Length (in bytes)
Definition: intelxl.h:778
struct dma_device * dma
DMA device.
Definition: intelxl.h:914
uint32_t flags
Flags.
Definition: intelxl.h:714
struct intelxl_admin_mac_config_params mac_config
Set MAC Configuration command parameters.
Definition: intelxl.h:391
unsigned short uint16_t
Definition: stdint.h:11
int intelxl_open_admin(struct intelxl_nic *intelxl)
Open admin queues.
Definition: intelxl.c:877
uint8_t reserved[13]
Reserved.
Definition: intelxl.h:320
Admin queue data buffer command parameters.
Definition: intelxl.h:78
uint64_t address
Data buffer address.
Definition: intelxl.h:126
uint32_t raw[4]
Raw data.
Definition: intelxl.h:532
void intelxl_free_ring(struct intelxl_nic *intelxl, struct intelxl_ring *ring)
Admin queue Get Switch Configuration data buffer.
Definition: intelxl.h:245
int intelxl_admin_command(struct intelxl_nic *intelxl)
Issue admin queue command.
Definition: intelxl.c:278
uint8_t pad[INTELXL_ADMIN_BUFFER_SIZE]
Maximum buffer size.
Definition: intelxl.h:412
int(* context)(struct intelxl_nic *intelxl, physaddr_t address)
Program queue context.
Definition: intelxl.h:784
uint16_t head
Head pointer.
Definition: intelxl.h:538
uint8_t reserved[4]
Reserved.
Definition: intelxl.h:428
uint16_t mfs
Maximum frame size.
Definition: intelxl.h:582
void(* handle)(struct net_device *netdev, struct intelxl_admin_descriptor *evt, union intelxl_admin_buffer *buf)
Handle admin event.
Definition: intelxl.h:963
struct intelxl_admin_mac_read_params mac_read
Manage MAC Address Read command parameters.
Definition: intelxl.h:379
uint32_t vector
MSI-X vector.
Definition: ena.h:20
uint16_t queue[16]
Queue numbers.
Definition: intelxl.h:274
A command-line command.
Definition: command.h:10
union intelxl_admin_buffer * buf
Data buffers.
Definition: intelxl.h:456
uint16_t qset[8]
Queue set handles for each traffic class.
Definition: intelxl.h:278
struct intelxl_admin_vsi_buffer vsi
Get VSI Parameters data buffer.
Definition: intelxl.h:410
Admin queue register offsets.
Definition: intelxl.h:64
Admin queue Restart Autonegotiation command parameters.
Definition: intelxl.h:330
uint16_t vlan
VLAN tag.
Definition: intelxl.h:724
uint64_t address
Base address.
Definition: ena.h:24
uint8_t type
Switching element type.
Definition: intelxl.h:212
uint16_t opcode
Opcode.
Definition: intelxl.h:420
Queue context line.
Definition: intelxl.h:530
Admin queue.
Definition: intelxl.h:452
Admin queue Driver Version data buffer.
Definition: intelxl.h:130
Admin queue Get VSI Parameters command parameters.
Definition: intelxl.h:260
unsigned int qset
Queue set handle.
Definition: intelxl.h:929
uint16_t count
Number of switching elements reported.
Definition: intelxl.h:247
unsigned int prod
Producer index.
Definition: intelxl.h:769
void intelxl_msix_disable(struct intelxl_nic *intelxl, struct pci_device *pci, unsigned int vector)
Disable MSI-X dummy interrupt.
Definition: intelxl.c:91
Admin queue Shutdown command parameters.
Definition: intelxl.h:139
char name[32]
Driver name.
Definition: intelxl.h:132
uint16_t flags
Flags.
Definition: intelxl.h:418
unsigned long long uint64_t
Definition: stdint.h:13
struct intelxl_admin_driver_buffer driver
Driver Version data buffer.
Definition: intelxl.h:404
PCI MSI-X interrupts.
struct intelxl_admin_descriptor * intelxl_admin_command_descriptor(struct intelxl_nic *intelxl)
Get next admin command queue descriptor.
Definition: intelxl.c:222
unsigned int len
Length Register offset.
Definition: intelxl.h:70
DMA mappings.
struct intelxl_rx_writeback_descriptor wb
Receive writeback descriptor.
Definition: intelxl.h:752
unsigned int bal
Base Address Low Register offset.
Definition: intelxl.h:66
union intelxl_admin_buffer * intelxl_admin_command_buffer(struct intelxl_nic *intelxl)
Get next admin command queue data buffer.
Definition: intelxl.c:239
uint16_t ret
Return value.
Definition: intelxl.h:424
size_t mfs
Maximum frame size.
Definition: intelxl.h:916
struct intelxl_admin_switch_buffer sw
Get Switch Configuration data buffer.
Definition: intelxl.h:408
Admin queue Set MAC Configuration command parameters.
Definition: intelxl.h:314
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
unsigned int base
Register block base.
Definition: intelxl.h:463
union intelxl_tx_descriptor * tx
Transmit descriptors.
Definition: intelxl.h:760
void intelxl_destroy_ring(struct intelxl_nic *intelxl, struct intelxl_ring *ring)
Destroy descriptor ring.
Definition: intelxl.c:1300
struct intelxl_admin_version api
API version.
Definition: intelxl.h:107
uint8_t reserved_a[12]
Reserved.
Definition: intelxl.h:251
uint8_t reserved[10]
Reserved.
Definition: intelxl.h:295
unsigned int queue
Queue number.
Definition: intelxl.h:925
Admin queue Clear PXE Mode command parameters.
Definition: intelxl.h:196
unsigned int exp
PCI Express capability offset.
Definition: intelxl.h:937
uint16_t flags
Flags.
Definition: intelxl.h:540
uint8_t revision
Revision.
Definition: intelxl.h:214
uint8_t reserved[4]
Reserved.
Definition: intelxl.h:124
uint32_t cookie
Opaque cookie.
Definition: intelxl.h:426
#define INTELXL_ADMIN_BUFFER_SIZE
Maximum size of a data buffer.
Definition: intelxl.h:399
uint64_t address
Data buffer address.
Definition: intelxl.h:241
uint8_t type
Write type.
Definition: intelxl.h:183
uint8_t reserved[15]
Reserved.
Definition: intelxl.h:157
Admin queue command parameters.
Definition: intelxl.h:369
int intelxl_create_ring(struct intelxl_nic *intelxl, struct intelxl_ring *ring)
Create descriptor ring.
Definition: intelxl.c:1266
unsigned int cons
Consumer index.
Definition: intelxl.h:771
uint64_t address
Buffer address.
Definition: intelxl.h:712
struct intelxl_admin_mac_write_params mac_write
Manage MAC Address Write command parameters.
Definition: intelxl.h:381
int intelxl_alloc_ring(struct intelxl_nic *intelxl, struct intelxl_ring *ring)
Allocate descriptor ring.
Definition: intelxl.c:957
uint8_t pf[ETH_ALEN]
Physical function MAC address.
Definition: intelxl.h:166
uint16_t len
Data length.
Definition: intelxl.h:422
struct intelxl_ring rx
Receive descriptor ring.
Definition: intelxl.h:952
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
uint8_t reserved_a[1]
Reserved.
Definition: intelxl.h:181
uint8_t reserved_a[2]
Reserved.
Definition: intelxl.h:572
unsigned int index
Queue index.
Definition: intelxl.h:460
uint8_t reserved_b[3]
Reserved.
Definition: intelxl.h:222
Transmit writeback descriptor.
Definition: intelxl.h:689
struct io_buffer * rx_iobuf[INTELXL_RX_NUM_DESC]
Receive I/O buffers.
Definition: intelxl.h:954
uint8_t magic
Magic value.
Definition: intelxl.h:198
uint32_t flags
Flags.
Definition: intelxl.h:661
uint8_t sub
Sub-build version.
Definition: intelxl.h:122
Admin queue version number.
Definition: intelxl.h:91
unsigned int vsi
Virtual Station Interface switching element ID.
Definition: intelxl.h:927
struct intelxl_tx_data_descriptor data
Transmit data descriptor.
Definition: intelxl.h:704
uint16_t high
MAC address first 16 bits, byte-swapped.
Definition: intelxl.h:185
uint8_t wol[ETH_ALEN]
Physical function wake-on-LAN MAC address.
Definition: intelxl.h:172
uint16_t count
Queue count.
Definition: intelxl.h:546
PCI MSI-X capability.
Definition: pcimsix.h:35
ring len
Length.
Definition: dwmac.h:231
void intelxl_poll_admin(struct net_device *netdev)
Poll admin event queue.
Definition: intelxl.c:836
Admin queue Manage MAC Address Read data buffer.
Definition: intelxl.h:164
void * raw
Raw data.
Definition: intelxl.h:764
uint16_t flags
Flags.
Definition: intelxl.h:289
static struct net_device * netdev
Definition: gdbudp.c:52
uint16_t minor
Minor version number.
Definition: intelxl.h:95
#define INTELXL_RX_NUM_DESC
Number of receive descriptors.
Definition: intelxl.h:818
static unsigned int count
Number of entries.
Definition: dwmac.h:225
struct intelxl_admin_promisc_params promisc
Set VSI Promiscuous Modes command parameters.
Definition: intelxl.h:389
uint8_t flags
Flags.
Definition: intelxl.h:578
uint32_t low
MAC address last 32 bits, byte-swapped.
Definition: intelxl.h:187
union intelxl_ring::@79 desc
Descriptors.
uint8_t reserved_a[8]
Reserved.
Definition: intelxl.h:544
uint16_t downlink
Downlink switching element ID.
Definition: intelxl.h:220
uint8_t reserved[15]
Reserved.
Definition: intelxl.h:200
struct dma_mapping map
DMA mapping.
Definition: intelxl.h:458
uint8_t reserved_b[4]
Reserved.
Definition: intelxl.h:726
unsigned int reg
Register block.
Definition: intelxl.h:774
uint32_t caps
Device capabilities.
Definition: intelxl.h:933
uint8_t reserved_a[8]
Reserved.
Definition: intelxl.h:691
struct intelxl_admin_mac_read_buffer mac_read
Manage MAC Address Read data buffer.
Definition: intelxl.h:406
Receive data descriptor.
Definition: intelxl.h:710
struct intelxl_admin_version_params version
Get Version command parameters.
Definition: intelxl.h:373
uint16_t total
Total number of switching elements.
Definition: intelxl.h:249
void intelxl_empty_rx(struct intelxl_nic *intelxl)
Discard unused receive I/O buffers.
Definition: intelxl.c:1367
Admin queue Driver Version command parameters.
Definition: intelxl.h:114
Admin queue Manage MAC Address Read command parameters.
Definition: intelxl.h:153
union intelxl_rx_descriptor * rx
Receive descriptors.
Definition: intelxl.h:762
void intelxl_poll(struct net_device *netdev)
Poll for completed and received packets.
Definition: intelxl.c:1613
uint8_t minor
Minor version.
Definition: intelxl.h:118
A PCI device.
Definition: pci.h:211
unsigned int intr
Interrupt control register.
Definition: intelxl.h:935
uint32_t build
Firmware build ID.
Definition: intelxl.h:103
struct intelxl_admin_descriptor * desc
Descriptors.
Definition: intelxl.h:454
int intelxl_msix_enable(struct intelxl_nic *intelxl, struct pci_device *pci, unsigned int vector)
Enable MSI-X dummy interrupt.
Definition: intelxl.c:63
A network device.
Definition: netdevice.h:353
uint8_t reserved_b[7]
Reserved.
Definition: intelxl.h:695
uint64_t base_count
Base address and queue count.
Definition: intelxl.h:574
uint64_t base
Base address.
Definition: intelxl.h:542
struct dma_mapping map
Descriptor ring DMA mapping.
Definition: intelxl.h:767
unsigned char uint8_t
Definition: stdint.h:10
unsigned int port
Port number.
Definition: intelxl.h:923
unsigned int head
Head Register offset.
Definition: intelxl.h:72
uint8_t valid
Valid addresses.
Definition: intelxl.h:155
uint8_t reserved[20]
Reserved.
Definition: intelxl.h:716
Admin queue Get Version command parameters.
Definition: intelxl.h:99
Transmit data descriptor.
Definition: intelxl.h:657
uint8_t reserved_c[2]
Reserved.
Definition: intelxl.h:226
An Intel 40 Gigabit network card.
Definition: intelxl.h:910
#define ETH_ALEN
Definition: if_ether.h:9
uint16_t vsi
VSI switching element ID.
Definition: intelxl.h:262
uint8_t reserved_b[100]
Reserved.
Definition: intelxl.h:548
union intelxl_admin_params params
Parameters.
Definition: intelxl.h:430
uint8_t connection
Connection type.
Definition: intelxl.h:224
unsigned int uint32_t
Definition: stdint.h:12
uint32_t len
Length.
Definition: intelxl.h:663
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:796
uint8_t reserved_c[4]
Reserved.
Definition: intelxl.h:552
uint32_t high
Buffer address high.
Definition: intelxl.h:82
struct intelxl_ring tx
Transmit descriptor ring.
Definition: intelxl.h:950
struct i386_regs regs
Definition: registers.h:15
uint64_t address
Buffer address.
Definition: intelxl.h:659
uint16_t major
Major version number.
Definition: intelxl.h:93
uint32_t teid
Transmit element ID.
Definition: intelxl.h:931
struct intelxl_admin_switch_params sw
Get Switch Configuration command parameters.
Definition: intelxl.h:385
uint16_t vsi
VSI switching element ID.
Definition: intelxl.h:293
struct intelxl_admin_link_params link
Get Link Status command parameters.
Definition: intelxl.h:395
Admin queue Set VSI Promiscuous Modes command parameters.
Definition: intelxl.h:287
struct intelxl_admin_shutdown_params shutdown
Shutdown command parameters.
Definition: intelxl.h:377
uint8_t unloading
Driver unloading.
Definition: intelxl.h:141
unsigned long physaddr_t
Definition: stdint.h:20
uint16_t next
Starting switching element identifier.
Definition: intelxl.h:237
unsigned int pf
Physical function number.
Definition: intelxl.h:919
struct intelxl_admin_vsi_params vsi
Get VSI Parameters command parameters.
Definition: intelxl.h:387
Admin queue descriptor.
Definition: intelxl.h:416
uint32_t low
Buffer address low.
Definition: intelxl.h:84
uint16_t uplink
Uplink switching element ID.
Definition: intelxl.h:218
struct intelxl_admin_clear_pxe_params pxe
Clear PXE Mode command parameters.
Definition: intelxl.h:383
unsigned int bah
Base Address High Register offset.
Definition: intelxl.h:68
uint16_t mfs
Maximum frame size.
Definition: intelxl.h:316
uint32_t rom
ROM version.
Definition: intelxl.h:101
void intelxl_close_admin(struct intelxl_nic *intelxl)
Close admin queues.
Definition: intelxl.c:929
struct pci_msix msix
MSI-X interrupt.
Definition: intelxl.h:939
uint8_t reserved_a[30]
Reserved.
Definition: intelxl.h:272
Admin queue Manage MAC Address Write command parameters.
Definition: intelxl.h:179
uint8_t reserved[15]
Reserved.
Definition: intelxl.h:143
uint8_t reserved[ETH_ALEN]
Reserved.
Definition: intelxl.h:168
int intelxl_admin_clear_pxe(struct intelxl_nic *intelxl)
Clear PXE mode.
Definition: intelxl.c:561
void intelxl_reopen_admin(struct intelxl_nic *intelxl)
Reopen admin queues (after virtual function reset)
Definition: intelxl.c:907
uint8_t reserved_c[16]
Reserved.
Definition: intelxl.h:280
Switching element configuration.
Definition: intelxl.h:210
uint8_t reserved_c[16]
Reserved.
Definition: intelxl.h:732
uint8_t reserved_b[34]
Reserved.
Definition: intelxl.h:276
unsigned int base
Absolute queue number base.
Definition: intelxl.h:921
Descriptor ring.
Definition: intelxl.h:756
struct intelxl_admin_switch_config cfg
Switch configuration.
Definition: intelxl.h:253
uint8_t major
Driver version.
Definition: intelxl.h:116
Admin queue Get VSI Parameters data buffer.
Definition: intelxl.h:270
unsigned int tail
Tail register.
Definition: intelxl.h:776
Receive writeback descriptor.
Definition: intelxl.h:720
unsigned int tail
Tail Register offset.
Definition: intelxl.h:74
uint8_t build
Build version.
Definition: intelxl.h:120
struct intelxl_admin_buffer_params buffer
Additional data buffer command parameters.
Definition: intelxl.h:371
uint8_t reserved[6]
Reserved.
Definition: intelxl.h:239
const struct intelxl_admin_offsets * regs
Register offsets.
Definition: intelxl.h:465
struct intelxl_admin_version firmware
Firmware version.
Definition: intelxl.h:105
struct intelxl_admin_driver_params driver
Driver Version command parameters.
Definition: intelxl.h:375
Admin queue Get Switch Configuration command parameters.
Definition: intelxl.h:235
uint16_t valid
Valid flags.
Definition: intelxl.h:291
uint8_t reserved[8]
Reserved.
Definition: intelxl.h:80
uint8_t port[ETH_ALEN]
Port MAC address.
Definition: intelxl.h:170
struct intelxl_tx_writeback_descriptor wb
Transmit writeback descriptor.
Definition: intelxl.h:706
Transmit descriptor.
Definition: intelxl.h:702
uint16_t qset
Queue set.
Definition: intelxl.h:550
Transmit queue context.
Definition: intelxl.h:536
uint16_t seid
Switching element ID.
Definition: intelxl.h:216
A DMA mapping.
Definition: dma.h:33
struct intelxl_admin_autoneg_params autoneg
Restart Autonegotiation command parameters.
Definition: intelxl.h:393
uint8_t reserved[6]
Reserved.
Definition: intelxl.h:264
struct intelxl_admin event
Admin event queue.
Definition: intelxl.h:944
FILE_SECBOOT(PERMITTED)
uint8_t reserved_c[8]
Reserved.
Definition: intelxl.h:584
Packet descriptor.
Definition: intelxl.h:748
Admin queue data buffer.
Definition: intelxl.h:402
int intelxl_transmit(struct net_device *netdev, struct io_buffer *iobuf)
Transmit packet.
Definition: intelxl.c:1493
uint64_t address
Data buffer address.
Definition: intelxl.h:266
unsigned int vopcode
Current VF opcode.
Definition: intelxl.h:947
struct intelxl_rx_data_descriptor data
Receive data descriptor.
Definition: intelxl.h:750
A DMA-capable device.
Definition: dma.h:48
uint8_t reserved_b[7]
Reserved.
Definition: intelxl.h:580
A persistent I/O buffer.
Definition: iobuf.h:38
uint8_t reserved[15]
Reserved.
Definition: intelxl.h:334
int intelxl_admin_mac_config(struct intelxl_nic *intelxl)
Set MAC configuration.
Definition: intelxl.c:712