21#define INTELXL_BAR_SIZE 0x200000
27#define INTELXL_ALIGN 256
37#define INTELXL_ADMIN_CMD 0x080000
40#define INTELXL_ADMIN_EVT 0x080080
43#define INTELXL_ADMIN_BAL 0x000
46#define INTELXL_ADMIN_BAH 0x100
49#define INTELXL_ADMIN_LEN 0x200
50#define INTELXL_ADMIN_LEN_LEN(x) ( (x) << 0 )
51#define INTELXL_ADMIN_LEN_ENABLE 0x80000000UL
54#define INTELXL_ADMIN_HEAD 0x300
57#define INTELXL_ADMIN_TAIL 0x400
88#define INTELXL_ADMIN_VERSION 0x0001
111#define INTELXL_ADMIN_DRIVER 0x0002
136#define INTELXL_ADMIN_SHUTDOWN 0x0003
147#define INTELXL_ADMIN_SHUTDOWN_UNLOADING 0x01
150#define INTELXL_ADMIN_MAC_READ 0x0107
161#define INTELXL_ADMIN_MAC_READ_VALID_LAN 0x10
176#define INTELXL_ADMIN_MAC_WRITE 0x0108
193#define INTELXL_ADMIN_CLEAR_PXE 0x0110
204#define INTELXL_ADMIN_CLEAR_PXE_MAGIC 0x02
207#define INTELXL_ADMIN_SWITCH 0x0200
232#define INTELXL_ADMIN_SWITCH_TYPE_VSI 19
257#define INTELXL_ADMIN_VSI 0x0212
284#define INTELXL_ADMIN_PROMISC 0x0254
299#define INTELXL_ADMIN_PROMISC_FL_UNICAST 0x0001
302#define INTELXL_ADMIN_PROMISC_FL_MULTICAST 0x0002
305#define INTELXL_ADMIN_PROMISC_FL_BROADCAST 0x0004
308#define INTELXL_ADMIN_PROMISC_FL_VLAN 0x0010
311#define INTELXL_ADMIN_MAC_CONFIG 0x0603
324#define INTELXL_ADMIN_MAC_CONFIG_FL_CRC 0x04
327#define INTELXL_ADMIN_AUTONEG 0x0605
338#define INTELXL_ADMIN_AUTONEG_FL_RESTART 0x02
341#define INTELXL_ADMIN_AUTONEG_FL_ENABLE 0x04
344#define INTELXL_ADMIN_LINK 0x0607
363#define INTELXL_ADMIN_LINK_NOTIFY 0x03
366#define INTELXL_ADMIN_LINK_UP 0x01
399#define INTELXL_ADMIN_BUFFER_SIZE 0x1000
434#define INTELXL_ADMIN_FL_DD 0x0001
437#define INTELXL_ADMIN_FL_CMP 0x0002
440#define INTELXL_ADMIN_FL_ERR 0x0004
443#define INTELXL_ADMIN_FL_RD 0x0400
446#define INTELXL_ADMIN_FL_BUF 0x1000
449#define INTELXL_ADMIN_EEXIST 13
484#define INTELXL_ADMIN_NUM_DESC 4
487#define INTELXL_ADMIN_MAX_WAIT_MS 100
490#define INTELXL_ADMIN_API_MAJOR 1
500#define INTELXL_PFCM_LANCTXDATA(x) ( 0x10c100 + ( 0x80 * (x) ) )
503#define INTELXL_PFCM_LANCTXCTL 0x10c300
504#define INTELXL_PFCM_LANCTXCTL_QUEUE_NUM(x) \
506#define INTELXL_PFCM_LANCTXCTL_SUB_LINE(x) \
508#define INTELXL_PFCM_LANCTXCTL_TYPE(x) \
510#define INTELXL_PFCM_LANCTXCTL_TYPE_RX \
511 INTELXL_PFCM_LANCTXCTL_TYPE ( 0x0 )
512#define INTELXL_PFCM_LANCTXCTL_TYPE_TX \
513 INTELXL_PFCM_LANCTXCTL_TYPE ( 0x1 )
514#define INTELXL_PFCM_LANCTXCTL_OP_CODE(x) \
516#define INTELXL_PFCM_LANCTXCTL_OP_CODE_READ \
517 INTELXL_PFCM_LANCTXCTL_OP_CODE ( 0x0 )
518#define INTELXL_PFCM_LANCTXCTL_OP_CODE_WRITE \
519 INTELXL_PFCM_LANCTXCTL_OP_CODE ( 0x1 )
522#define INTELXL_PFCM_LANCTXSTAT 0x10c380
523#define INTELXL_PFCM_LANCTXSTAT_DONE 0x00000001UL
552#define INTELXL_CTX_TX_FL_NEW 0x4000
555#define INTELXL_CTX_TX_BASE( base ) ( (base) >> 7 )
558#define INTELXL_CTX_TX_COUNT( count ) ( (count) << 1 )
561#define INTELXL_CTX_TX_QSET( qset) ( (qset) << 4 )
584#define INTELXL_CTX_RX_BASE_COUNT( base, count ) \
585 ( ( (base) >> 7 ) | ( ( ( uint64_t ) (count) ) << 57 ) )
588#define INTELXL_CTX_RX_LEN( len ) ( (len) >> 1 )
591#define INTELXL_CTX_RX_FL_DSIZE 0x10
594#define INTELXL_CTX_RX_FL_CRCSTRIP 0x20
597#define INTELXL_CTX_RX_MFS( mfs ) ( (mfs) >> 2 )
600#define INTELXL_CTX_MAX_WAIT_MS 100
603#define INTELXL_QUEUE_ENABLE_DELAY_US 20
606#define INTELXL_QUEUE_PRE_DISABLE_DELAY_US 400
609#define INTELXL_QUEUE_DISABLE_MAX_WAIT_MS 1000
619#define INTELXL_QTX_HEAD(x) ( 0x0e4000 + ( 0x4 * (x) ) )
622#define INTELXL_GLLAN_TXPRE_QDIS(x) ( 0x0e6500 + ( 0x4 * ( (x) / 0x80 ) ) )
623#define INTELXL_GLLAN_TXPRE_QDIS_QINDX(x) \
625#define INTELXL_GLLAN_TXPRE_QDIS_SET_QDIS \
627#define INTELXL_GLLAN_TXPRE_QDIS_CLEAR_QDIS \
631#define INTELXL_QTX(x) ( 0x100000 + ( 0x4 * (x) ) )
634#define INTELXL_QRX(x) ( 0x120000 + ( 0x4 * (x) ) )
637#define INTELXL_QXX_ENA 0x0000
638#define INTELXL_QXX_ENA_REQ 0x00000001UL
639#define INTELXL_QXX_ENA_STAT 0x00000004UL
642#define INTELXL_QXX_CTL 0x4000
643#define INTELXL_QXX_CTL_PFVF_Q(x) ( (x) << 0 )
644#define INTELXL_QXX_CTL_PFVF_Q_PF \
645 INTELXL_QXX_CTL_PFVF_Q ( 0x2 )
646#define INTELXL_QXX_CTL_PFVF_PF_INDX(x) ( (x) << 2 )
649#define INTELXL_QXX_TAIL 0x8000
662#define INTELXL_TX_DATA_DTYP 0x0
665#define INTELXL_TX_DATA_EOP 0x10
668#define INTELXL_TX_DATA_RS 0x20
678#define INTELXL_TX_DATA_JFDI 0x40
681#define INTELXL_TX_DATA_LEN( len ) ( (len) << 2 )
694#define INTELXL_TX_WB_FL_DD 0x01
731#define INTELXL_RX_WB_FL_DD 0x00000001UL
734#define INTELXL_RX_WB_FL_VLAN 0x00000004UL
737#define INTELXL_RX_WB_FL_RXE 0x00080000UL
740#define INTELXL_RX_WB_LEN(len) ( ( (len) >> 6 ) & 0x3fff )
804#define INTELXL_TX_NUM_DESC 64
807#define INTELXL_TX_FILL ( INTELXL_TX_NUM_DESC - 1 )
813#define INTELXL_RX_NUM_DESC 64
819#define INTELXL_RX_FILL 16
822#define INTELXL_MAX_PKT_LEN ( 9728 - 4 )
832#define INTELXL_PFINT_DYN_CTL0 0x038480
833#define INTELXL_INT_DYN_CTL_INTENA 0x00000001UL
834#define INTELXL_INT_DYN_CTL_CLEARPBA 0x00000002UL
835#define INTELXL_INT_DYN_CTL_INTENA_MASK 0x80000000UL
838#define INTELXL_PFINT_LNKLST0 0x038500
839#define INTELXL_PFINT_LNKLST0_FIRSTQ_INDX(x) \
841#define INTELXL_PFINT_LNKLST0_FIRSTQ_INDX_NONE \
842 INTELXL_PFINT_LNKLST0_FIRSTQ_INDX ( 0x7ff )
843#define INTELXL_PFINT_LNKLST0_FIRSTQ_TYPE(x) \
845#define INTELXL_PFINT_LNKLST0_FIRSTQ_TYPE_RX \
846 INTELXL_PFINT_LNKLST0_FIRSTQ_TYPE ( 0x0 )
847#define INTELXL_PFINT_LNKLST0_FIRSTQ_TYPE_TX \
848 INTELXL_PFINT_LNKLST0_FIRSTQ_TYPE ( 0x1 )
851#define INTELXL_PFINT_ICR0_ENA 0x038800
852#define INTELXL_PFINT_ICR0_ENA_ADMINQ 0x40000000UL
855#define INTELXL_QINT_RQCTL(x) ( 0x03a000 + ( 0x4 * (x) ) )
856#define INTELXL_QINT_RQCTL_NEXTQ_INDX(x) ( (x) << 16 )
857#define INTELXL_QINT_RQCTL_NEXTQ_INDX_NONE \
858 INTELXL_QINT_RQCTL_NEXTQ_INDX ( 0x7ff )
859#define INTELXL_QINT_RQCTL_NEXTQ_TYPE(x) ( (x) << 27 )
860#define INTELXL_QINT_RQCTL_NEXTQ_TYPE_RX \
861 INTELXL_QINT_RQCTL_NEXTQ_TYPE ( 0x0 )
862#define INTELXL_QINT_RQCTL_NEXTQ_TYPE_TX \
863 INTELXL_QINT_RQCTL_NEXTQ_TYPE ( 0x1 )
864#define INTELXL_QINT_RQCTL_CAUSE_ENA 0x40000000UL
867#define INTELXL_QINT_TQCTL(x) ( 0x03c000 + ( 0x4 * (x) ) )
868#define INTELXL_QINT_TQCTL_NEXTQ_INDX(x) ( (x) << 16 )
869#define INTELXL_QINT_TQCTL_NEXTQ_INDX_NONE \
870 INTELXL_QINT_TQCTL_NEXTQ_INDX ( 0x7ff )
871#define INTELXL_QINT_TQCTL_NEXTQ_TYPE(x) ( (x) << 27 )
872#define INTELXL_QINT_TQCTL_NEXTQ_TYPE_RX \
873 INTELXL_QINT_TQCTL_NEXTQ_TYPE ( 0x0 )
874#define INTELXL_QINT_TQCTL_NEXTQ_TYPE_TX \
875 INTELXL_QINT_TQCTL_NEXTQ_TYPE ( 0x1 )
876#define INTELXL_QINT_TQCTL_CAUSE_ENA 0x40000000UL
879#define INTELXL_PFFUNC_RID 0x09c000
880#define INTELXL_PFFUNC_RID_FUNC_NUM(x) \
881 ( ( (x) >> 0 ) & 0x7 )
884#define INTELXL_PFLAN_QALLOC 0x1c0400
885#define INTELXL_PFLAN_QALLOC_FIRSTQ(x) \
886 ( ( (x) >> 0 ) & 0x7ff )
887#define INTELXL_PFLAN_QALLOC_LASTQ(x) \
888 ( ( (x) >> 16 ) & 0x7ff )
891#define INTELXL_PFGEN_PORTNUM 0x1c0480
892#define INTELXL_PFGEN_PORTNUM_PORT_NUM(x) \
893 ( ( (x) >> 0 ) & 0x3 )
896#define INTELXL_MSIX_VECTOR 0
unsigned long long uint64_t
uint32_t vector
MSI-X vector.
uint64_t address
Base address.
struct ena_llq_option desc
Descriptor counts.
static struct net_device * netdev
static unsigned int count
Number of entries.
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
#define FILE_SECBOOT(_status)
Declare a file's UEFI Secure Boot permission status.
int intelxl_msix_enable(struct intelxl_nic *intelxl, struct pci_device *pci, unsigned int vector)
Enable MSI-X dummy interrupt.
void intelxl_destroy_ring(struct intelxl_nic *intelxl, struct intelxl_ring *ring)
Destroy descriptor ring.
int intelxl_admin_clear_pxe(struct intelxl_nic *intelxl)
Clear PXE mode.
int intelxl_admin_command(struct intelxl_nic *intelxl)
Issue admin queue command.
void intelxl_close_admin(struct intelxl_nic *intelxl)
Close admin queues.
int intelxl_alloc_ring(struct intelxl_nic *intelxl, struct intelxl_ring *ring)
Allocate descriptor ring.
void intelxl_reopen_admin(struct intelxl_nic *intelxl)
Reopen admin queues (after virtual function reset)
void intelxl_free_ring(struct intelxl_nic *intelxl, struct intelxl_ring *ring)
int intelxl_admin_mac_config(struct intelxl_nic *intelxl)
Set MAC configuration.
void intelxl_msix_disable(struct intelxl_nic *intelxl, struct pci_device *pci, unsigned int vector)
Disable MSI-X dummy interrupt.
int intelxl_open_admin(struct intelxl_nic *intelxl)
Open admin queues.
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.
#define INTELXL_RX_NUM_DESC
Number of receive descriptors.
union intelxl_admin_buffer * intelxl_admin_command_buffer(struct intelxl_nic *intelxl)
Get next admin command queue data buffer.
struct intelxl_admin_descriptor * intelxl_admin_command_descriptor(struct intelxl_nic *intelxl)
Get next admin command queue descriptor.
void intelxl_empty_rx(struct intelxl_nic *intelxl)
Discard unused receive I/O buffers.
void intelxl_poll_admin(struct net_device *netdev)
Poll admin event queue.
static void intelxl_init_admin(struct intelxl_admin *admin, unsigned int base, const struct intelxl_admin_offsets *regs)
Initialise admin queue.
int intelxl_transmit(struct net_device *netdev, struct io_buffer *iobuf)
Transmit packet.
void intelxl_poll(struct net_device *netdev)
Poll for completed and received packets.
int intelxl_create_ring(struct intelxl_nic *intelxl, struct intelxl_ring *ring)
Create descriptor ring.
#define INTELXL_ADMIN_BUFFER_SIZE
Maximum size of a data buffer.
Admin queue Restart Autonegotiation command parameters.
uint8_t reserved[15]
Reserved.
Admin queue data buffer command parameters.
uint8_t reserved[8]
Reserved.
uint32_t high
Buffer address high.
uint32_t low
Buffer address low.
Admin queue Clear PXE Mode command parameters.
uint8_t reserved[15]
Reserved.
uint8_t magic
Magic value.
uint32_t cookie
Opaque cookie.
uint16_t ret
Return value.
uint8_t reserved[4]
Reserved.
union intelxl_admin_params params
Parameters.
Admin queue Driver Version data buffer.
char name[32]
Driver name.
Admin queue Driver Version command parameters.
uint8_t major
Driver version.
uint8_t build
Build version.
uint64_t address
Data buffer address.
uint8_t minor
Minor version.
uint8_t sub
Sub-build version.
uint8_t reserved[4]
Reserved.
Admin queue Get Link Status command parameters.
uint8_t notify
Link status notification.
uint8_t reserved_a
Reserved.
uint8_t reserved_b[11]
Reserved.
uint8_t status
Link status.
Admin queue Set MAC Configuration command parameters.
uint8_t reserved[13]
Reserved.
uint16_t mfs
Maximum frame size.
Admin queue Manage MAC Address Read data buffer.
uint8_t reserved[ETH_ALEN]
Reserved.
uint8_t pf[ETH_ALEN]
Physical function MAC address.
uint8_t port[ETH_ALEN]
Port MAC address.
uint8_t wol[ETH_ALEN]
Physical function wake-on-LAN MAC address.
Admin queue Manage MAC Address Read command parameters.
uint8_t reserved[15]
Reserved.
uint8_t valid
Valid addresses.
Admin queue Manage MAC Address Write command parameters.
uint8_t reserved_a[1]
Reserved.
uint16_t high
MAC address first 16 bits, byte-swapped.
uint8_t reserved_b[8]
Reserved.
uint32_t low
MAC address last 32 bits, byte-swapped.
Admin queue register offsets.
unsigned int head
Head Register offset.
unsigned int len
Length Register offset.
unsigned int tail
Tail Register offset.
unsigned int bal
Base Address Low Register offset.
unsigned int bah
Base Address High Register offset.
Admin queue Set VSI Promiscuous Modes command parameters.
uint16_t vsi
VSI switching element ID.
uint16_t valid
Valid flags.
uint8_t reserved[10]
Reserved.
Admin queue Shutdown command parameters.
uint8_t unloading
Driver unloading.
uint8_t reserved[15]
Reserved.
Admin queue Get Switch Configuration data buffer.
uint16_t total
Total number of switching elements.
struct intelxl_admin_switch_config cfg
Switch configuration.
uint8_t reserved_a[12]
Reserved.
uint16_t count
Number of switching elements reported.
Switching element configuration.
uint16_t downlink
Downlink switching element ID.
uint8_t reserved_c[2]
Reserved.
uint8_t connection
Connection type.
uint8_t reserved_b[3]
Reserved.
uint16_t seid
Switching element ID.
uint8_t revision
Revision.
uint16_t uplink
Uplink switching element ID.
uint16_t info
Element specific information.
uint8_t type
Switching element type.
Admin queue Get Switch Configuration command parameters.
uint8_t reserved[6]
Reserved.
uint16_t next
Starting switching element identifier.
uint64_t address
Data buffer address.
Admin queue Get Version command parameters.
struct intelxl_admin_version api
API version.
struct intelxl_admin_version firmware
Firmware version.
uint32_t build
Firmware build ID.
Admin queue version number.
uint16_t major
Major version number.
uint16_t minor
Minor version number.
Admin queue Get VSI Parameters data buffer.
uint8_t reserved_a[30]
Reserved.
uint8_t reserved_b[34]
Reserved.
uint16_t qset[8]
Queue set handles for each traffic class.
uint16_t queue[16]
Queue numbers.
uint8_t reserved_c[16]
Reserved.
Admin queue Get VSI Parameters command parameters.
uint8_t reserved[6]
Reserved.
uint64_t address
Data buffer address.
uint16_t vsi
VSI switching element ID.
unsigned int base
Register block base.
const struct intelxl_admin_offsets * regs
Register offsets.
union intelxl_admin_buffer * buf
Data buffers.
struct intelxl_admin_descriptor * desc
Descriptors.
struct dma_mapping map
DMA mapping.
unsigned int index
Queue index.
uint16_t head
Head pointer.
uint16_t mfs
Maximum frame size.
uint64_t base_count
Base address and queue count.
uint8_t reserved_b[7]
Reserved.
uint16_t len
Data buffer length.
uint8_t reserved_a[2]
Reserved.
uint8_t reserved_c[8]
Reserved.
uint8_t reserved_a[8]
Reserved.
uint16_t count
Queue count.
uint16_t head
Head pointer.
uint8_t reserved_b[100]
Reserved.
uint64_t base
Base address.
uint8_t reserved_c[4]
Reserved.
An Intel 40 Gigabit network card.
struct intelxl_admin event
Admin event queue.
size_t mfs
Maximum frame size.
struct dma_device * dma
DMA device.
struct pci_msix msix
MSI-X interrupt.
unsigned int port
Port number.
unsigned int vopcode
Current VF opcode.
unsigned int pf
Physical function number.
uint32_t teid
Transmit element ID.
unsigned int vsi
Virtual Station Interface switching element ID.
struct intelxl_admin command
Admin command queue.
struct io_buffer * rx_iobuf[INTELXL_RX_NUM_DESC]
Receive I/O buffers.
unsigned int intr
Interrupt control register.
unsigned int queue
Queue number.
struct intelxl_ring tx
Transmit descriptor ring.
unsigned int qset
Queue set handle.
struct intelxl_ring rx
Receive descriptor ring.
uint32_t caps
Device capabilities.
unsigned int exp
PCI Express capability offset.
void(* handle)(struct net_device *netdev, struct intelxl_admin_descriptor *evt, union intelxl_admin_buffer *buf)
Handle admin event.
unsigned int base
Absolute queue number base.
unsigned int cons
Consumer index.
union intelxl_rx_descriptor * rx
Receive descriptors.
size_t len
Length (in bytes)
union intelxl_tx_descriptor * tx
Transmit descriptors.
unsigned int prod
Producer index.
unsigned int reg
Register block.
struct dma_mapping map
Descriptor ring DMA mapping.
unsigned int tail
Tail register.
int(* context)(struct intelxl_nic *intelxl, physaddr_t address)
Program queue context.
uint8_t reserved[20]
Reserved.
uint64_t address
Buffer address.
Receive writeback descriptor.
uint8_t reserved_c[16]
Reserved.
uint8_t reserved_a[2]
Reserved.
uint8_t reserved_b[4]
Reserved.
Transmit data descriptor.
uint64_t address
Buffer address.
Transmit writeback descriptor.
uint8_t reserved_a[8]
Reserved.
uint8_t reserved_b[7]
Reserved.
struct intelxl_admin_driver_buffer driver
Driver Version data buffer.
uint8_t pad[INTELXL_ADMIN_BUFFER_SIZE]
Maximum buffer size.
struct intelxl_admin_vsi_buffer vsi
Get VSI Parameters data buffer.
struct intelxl_admin_mac_read_buffer mac_read
Manage MAC Address Read data buffer.
struct intelxl_admin_switch_buffer sw
Get Switch Configuration data buffer.
Admin queue command parameters.
struct intelxl_admin_autoneg_params autoneg
Restart Autonegotiation command parameters.
struct intelxl_admin_switch_params sw
Get Switch Configuration command parameters.
struct intelxl_admin_link_params link
Get Link Status command parameters.
struct intelxl_admin_mac_read_params mac_read
Manage MAC Address Read command parameters.
struct intelxl_admin_vsi_params vsi
Get VSI Parameters command parameters.
struct intelxl_admin_clear_pxe_params pxe
Clear PXE Mode command parameters.
struct intelxl_admin_mac_write_params mac_write
Manage MAC Address Write command parameters.
struct intelxl_admin_version_params version
Get Version command parameters.
struct intelxl_admin_shutdown_params shutdown
Shutdown command parameters.
struct intelxl_admin_buffer_params buffer
Additional data buffer command parameters.
struct intelxl_admin_promisc_params promisc
Set VSI Promiscuous Modes command parameters.
struct intelxl_admin_mac_config_params mac_config
Set MAC Configuration command parameters.
struct intelxl_admin_driver_params driver
Driver Version command parameters.
struct intelxl_rx_writeback_descriptor wb
Receive writeback descriptor.
struct intelxl_rx_data_descriptor data
Receive data descriptor.
struct intelxl_tx_data_descriptor data
Transmit data descriptor.
struct intelxl_tx_writeback_descriptor wb
Transmit writeback descriptor.