70 DBGC ( intel,
"INTEL %p has autoloaded MAC address %s at " 101 DBGC ( intel,
"INTEL %p has no MAC address to use\n", intel );
127 DBGC ( intel,
"INTEL %p reset (ctrl %08x)\n", intel,
ctrl );
149 DBGC ( intel,
"INTEL %p link status is %08x\n", intel, links );
396 memset ( intel, 0,
sizeof ( *intel ) );
408 if ( ! intel->
regs ) {
428 goto err_register_netdev;
471 PCI_ROM ( 0x8086, 0x10f7,
"82599-kx4",
"82599 (KX/KX4)", 0 ),
472 PCI_ROM ( 0x8086, 0x10f8,
"82599-combo-backplane",
"82599 (combined backplane; KR/KX4/KX)", 0 ),
473 PCI_ROM ( 0x8086, 0x10f9,
"82599-cx4",
"82599 (CX4)", 0 ),
474 PCI_ROM ( 0x8086, 0x10fb,
"82599-sfp",
"82599 (SFI/SFP+)", 0 ),
475 PCI_ROM ( 0x8086, 0x10fc,
"82599-xaui",
"82599 (XAUI/BX4)", 0 ),
476 PCI_ROM ( 0x8086, 0x151c,
"82599-tn",
"82599 (TN)", 0 ),
477 PCI_ROM ( 0x8086, 0x1528,
"x540t",
"X540-AT2/X540-BT2", 0 ),
478 PCI_ROM ( 0x8086, 0x154d,
"82599-sfp-sf2",
"82599 (SFI/SFP+)", 0 ),
479 PCI_ROM ( 0x8086, 0x1557,
"82599en-sfp",
"82599 (Single Port SFI Only)", 0 ),
480 PCI_ROM ( 0x8086, 0x1560,
"x540t1",
"X540-AT2/X540-BT2 (with single port NVM)", 0 ),
481 PCI_ROM ( 0x8086, 0x1563,
"x550t2",
"X550-T2", 0 ),
482 PCI_ROM ( 0x8086, 0x15ab,
"x552",
"X552", 0 ),
483 PCI_ROM ( 0x8086, 0x15c8,
"x553t",
"X553/X557-AT", 0 ),
484 PCI_ROM ( 0x8086, 0x15ce,
"x553-sfp",
"X553 (SFP+)", 0 ),
485 PCI_ROM ( 0x8086, 0x15e4,
"x553a",
"X553", 0 ),
486 PCI_ROM ( 0x8086, 0x15e5,
"x553",
"X553", 0 ),
#define PCI_FUNC(busdevfn)
#define INTELX_RDRXCTL
Receive DMA Control Register.
unsigned long membase
Memory base.
static int intelx_reset(struct intel_nic *intel)
Reset hardware.
#define INTELX_IVAR_TX0_VALID
TX queue 0 valid.
struct arbelprm_rc_send_wqe rc
#define INTELX_RD
Receive Descriptor register block.
#define INTELX_EIRQ_LSC
Link status change.
static int intelx_try_fetch_mac(struct intel_nic *intel, unsigned int ral0, uint8_t *hw_addr)
Try to fetch initial MAC address.
struct dma_device dma
DMA device.
#define INTEL_NUM_RX_DESC
Number of receive descriptors.
void netdev_rx_err(struct net_device *netdev, struct io_buffer *iobuf, int rc)
Discard received packet.
#define INTELX_IVAR
Interrupt Vector Allocation Register.
void intel_poll_rx(struct net_device *netdev)
Poll for received packets.
#define INTELX_FCTRL_BAM
Broadcast accept mode.
#define le32_to_cpu(value)
int(* open)(struct net_device *netdev)
Open network device.
#define INTELX_SRRCTL_BSIZE_MASK
#define INTELX_SRRCTL_BSIZE_DEFAULT
#define INTELX_IVAR_TX0_DEFAULT
#define INTELX_MAXFRS
Maximum Frame Size Register.
#define INTELX_RAH0_AV
Address valid.
#define INTEL_NUM_TX_DESC
Number of transmit descriptors.
struct pci_device_id * ids
PCI ID table.
void intel_poll_tx(struct net_device *netdev)
Poll for completed packets.
#define INTELX_RXCTRL
Receive Control Register.
uint32_t readl(volatile uint32_t *io_addr)
Read 32-bit dword from memory-mapped device.
struct intel_ring rx
Receive descriptor ring.
#define INTELX_EIRQ_RXO
Receive overrun.
int intel_create_ring(struct intel_nic *intel, struct intel_ring *ring)
Create descriptor ring.
void intel_empty_rx(struct intel_nic *intel)
Discard unused receive I/O buffers.
static int intelx_open(struct net_device *netdev)
Open network device.
#define ENOENT
No such file or directory.
static __always_inline void dma_set_mask_64bit(struct dma_device *dma)
Set 64-bit addressable space mask.
Intel 10 Gigabit Ethernet network card driver.
static struct pci_device_id intelx_nics[]
PCI device IDs.
void intel_describe_tx(struct intel_descriptor *tx, physaddr_t addr, size_t len)
Populate transmit descriptor.
struct dma_device * dma
DMA device.
#define INTELX_CTRL
Device Control Register.
void netdev_link_down(struct net_device *netdev)
Mark network device as having link down.
uint8_t mac[ETH_ALEN]
MAC address.
#define INTEL_BAR_SIZE
Intel BAR size.
#define INTELX_HLREG0
MAC Core Control 0 Register.
void adjust_pci_device(struct pci_device *pci)
Enable PCI device.
static void intel_init_ring(struct intel_ring *ring, unsigned int count, unsigned int reg, void(*describe)(struct intel_descriptor *desc, physaddr_t addr, size_t len))
Initialise descriptor ring.
static void intelx_check_link(struct net_device *netdev)
Check link state.
struct device dev
Generic device.
#define INTELX_EIRQ_RX0
RX0 (via IVAR)
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
void intel_refill_rx(struct intel_nic *intel)
Refill receive descriptor ring.
static void intelx_close(struct net_device *netdev)
Close network device.
#define INTELX_RXCTRL_RXEN
Receive enable.
#define INTELX_RESET_DELAY_MS
Time to delay for device reset, in milliseconds.
unsigned int port
Port number (for multi-port devices)
static void netdev_init(struct net_device *netdev, struct net_device_operations *op)
Initialise a network device.
static int intelx_probe(struct pci_device *pci)
Probe PCI device.
#define INTELX_RAH0
Receive Address High.
static void pci_set_drvdata(struct pci_device *pci, void *priv)
Set PCI driver-private data.
#define ENOMEM
Not enough space.
#define INTELX_DMATXCTL
Transmit DMA Control Register.
void * memcpy(void *dest, const void *src, size_t len) __nonnull
#define INTELX_FCTRL_MPE
Multicast promiscuous.
static void netdev_put(struct net_device *netdev)
Drop reference to network device.
#define INTELX_IVAR_RX0_VALID
RX queue 0 valid.
#define INTELX_EIMC
Interrupt Mask Clear Register.
void * priv
Driver private data.
void intel_describe_rx(struct intel_descriptor *rx, physaddr_t addr, size_t len __unused)
Populate receive descriptor.
#define INTELX_FCTRL
Receive Filter Control Register.
static void netdev_link_up(struct net_device *netdev)
Mark network device as having link up.
void writel(uint32_t data, volatile uint32_t *io_addr)
Write 32-bit dword to memory-mapped device.
#define INTELX_IVAR_RX0_DEFAULT
static struct net_device * netdev
#define INTELX_HLREG0_JUMBOEN
Jumbo frame enable.
void unregister_netdev(struct net_device *netdev)
Unregister network device.
#define cpu_to_le32(value)
static int intelx_fetch_mac(struct intel_nic *intel, uint8_t *hw_addr)
Fetch initial MAC address.
#define INTELX_DCA_RXCTRL_MUST_BE_ZERO
Must be zero.
#define INTELX_EIMS
Interrupt Mask Set/Read Register.
int register_netdev(struct net_device *netdev)
Register network device.
const char * eth_ntoa(const void *ll_addr)
Transcribe Ethernet address.
#define ENODEV
No such device.
static void netdev_nullify(struct net_device *netdev)
Stop using a network device.
static struct net_device_operations intelx_operations
Network device operations.
#define INTELX_FCTRL_UPE
Unicast promiscuous mode.
#define INTELX_DCA_RXCTRL
RX DCA Control Register.
A PCI device ID list entry.
#define INTELX_CTRL_LRST
Link reset.
static int is_valid_ether_addr(const void *addr)
Check if Ethernet address is valid.
static struct xen_remove_from_physmap * remove
static void intelx_poll(struct net_device *netdev)
Poll for completed and received packets.
Network device operations.
struct device * dev
Underlying hardware device.
Network device management.
static void * pci_get_drvdata(struct pci_device *pci)
Get PCI driver-private data.
struct dma_device * dma
DMA device.
void mdelay(unsigned long msecs)
Delay for a fixed number of milliseconds.
uint32_t busdevfn
Segment, bus, device, and function (bus:dev.fn) number.
#define INTELX_CTRL_RST
Device reset.
#define INTELX_MAXFRS_MFS_MASK
#define ENOBUFS
No buffer space available.
#define INTELX_SRRCTL
Split Receive Control Register.
int(* probe)(struct pci_device *pci)
Probe device.
int intel_transmit(struct net_device *netdev, struct io_buffer *iobuf)
Transmit packet.
void intel_destroy_ring(struct intel_nic *intel, struct intel_ring *ring)
Destroy descriptor ring.
struct net_device * alloc_etherdev(size_t priv_size)
Allocate Ethernet device.
void iounmap(volatile const void *io_addr)
Unmap I/O address.
#define INTELX_RDRXCTL_SECRC
Strip CRC.
static void intelx_irq(struct net_device *netdev, int enable)
Enable or disable interrupts.
#define INTELX_DMATXCTL_TE
Transmit enable.
#define INTELX_LINKS
Link Status Register.
#define INTELX_RAL0
Receive Address Low.
struct intel_ring tx
Transmit descriptor ring.
uint8_t ll_addr[MAX_LL_ADDR_LEN]
Link-layer address.
#define INTELX_EIRQ_TX0
RX0 (via IVAR)
void * pci_ioremap(struct pci_device *pci, unsigned long bus_addr, size_t len)
Map PCI bus address as an I/O address.
#define INTELX_EICR
Extended Interrupt Cause Read Register.
#define INTELX_TD
Transmit Descriptor register block.
static void intelx_remove(struct pci_device *pci)
Remove PCI device.
uint8_t hw_addr[MAX_HW_ADDR_LEN]
Hardware address.
#define NULL
NULL pointer (VOID *)
#define PCI_ROM(_vendor, _device, _name, _description, _data)
#define INTELX_LINKS_UP
Link up.
#define INTELX_MAXFRS_MFS_DEFAULT
struct pci_driver intelx_driver __pci_driver
PCI driver.
void * memset(void *dest, int character, size_t len) __nonnull