45 { .name =
"smsc75xx.in" };
49 { .name =
"smsc75xx.out" };
74 sizeof ( stats ) ) ) != 0 ) {
75 DBGC ( smscusb,
"SMSC75XX %p could not get statistics: "
81 DBGC ( smscusb,
"SMSC75XX %p RXE fcs %d aln %d frg %d jab %d und %d "
89 DBGC ( smscusb,
"SMSC75XX %p RXB ucast %d bcast %d mcast %d\n",
93 DBGC ( smscusb,
"SMSC75XX %p RXF ucast %d bcast %d mcast %d pause "
98 DBGC ( smscusb,
"SMSC75XX %p TXE fcs %d def %d car %d cnt %d sgl %d "
99 "mul %d exc %d lat %d\n", smscusb,
108 DBGC ( smscusb,
"SMSC75XX %p TXB ucast %d bcast %d mcast %d\n",
112 DBGC ( smscusb,
"SMSC75XX %p TXF ucast %d bcast %d mcast %d pause "
158 DBGC ( smscusb,
"SMSC75XX %p timed out waiting for reset\n",
195 DBGC ( smscusb,
"SMSC75XX %p bulk IN failed: %s\n",
202 DBGC ( smscusb,
"SMSC75XX %p underlength bulk IN\n",
215 DBGC ( smscusb,
"SMSC75XX %p receive error (%08x):\n",
297 DBGC ( smscusb,
"SMSC75XX %p could not open: %s\n",
311 goto err_bulk_in_dly;
346 goto err_set_address;
445 DBGC2 ( smscusb,
"SMSC75XX %p RX FIFO overflowed\n", smscusb );
452 DBGC ( smscusb,
"SMSC75XX %p unexpected interrupt %#08x\n",
501 memset ( smscusb, 0,
sizeof ( *smscusb ) );
507 DBGC ( smscusb,
"SMSC75XX %p on %s\n", smscusb, func->
name );
511 DBGC ( smscusb,
"SMSC75XX %p could not describe: %s\n",
558 USB_ROM ( 0x0424, 0x7500,
"smsc7500",
"SMSC LAN7500", 0 ),
559 USB_ROM ( 0x0424, 0x7505,
"smsc7505",
"SMSC LAN7505", 0 ),
#define NULL
NULL pointer (VOID *)
struct arbelprm_rc_send_wqe rc
struct ena_llq_option header
Header locations.
struct net_device * alloc_etherdev(size_t priv_size)
Allocate Ethernet device.
static struct net_device * netdev
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
#define EINVAL
Invalid argument.
#define ETIMEDOUT
Connection timed out.
#define ENOMEM
Not enough space.
#define EIO
Input/output error.
#define ENOBUFS
No buffer space available.
#define ENOTTY
Inappropriate I/O control operation.
#define FILE_SECBOOT(_status)
Declare a file's UEFI Secure Boot permission status.
#define le32_to_cpu(value)
#define cpu_to_le32(value)
#define __profiler
Declare a profiler.
static void profile_stop(struct profiler *profiler)
Stop profiling.
static void profile_start(struct profiler *profiler)
Start profiling.
Universal Serial Bus (USB)
#define __usb_driver
Declare a USB driver.
static void usb_refill_init(struct usb_endpoint *ep, size_t reserve, size_t len, unsigned int max)
Initialise USB endpoint refill.
#define USB_CLASS_ID(base, subclass, protocol)
Construct USB class ID.
static void usb_poll(struct usb_bus *bus)
Poll USB bus.
#define USB_ROM(_vendor, _product, _name, _description, _data)
static void usb_func_set_drvdata(struct usb_function *func, void *priv)
Set USB function driver private data.
@ USB_SCORE_NORMAL
Normal driver.
static void * usb_func_get_drvdata(struct usb_function *func)
Get USB function driver private data.
void * memset(void *dest, int character, size_t len) __nonnull
void free_iob(struct io_buffer *iobuf)
Free I/O buffer.
int iob_ensure_headroom(struct io_buffer *iobuf, size_t len)
Ensure I/O buffer has sufficient headroom.
#define iob_push(iobuf, len)
#define iob_disown(iobuf)
Disown an I/O buffer.
static size_t iob_len(struct io_buffer *iobuf)
Calculate length of data in an I/O buffer.
#define iob_pull(iobuf, len)
void netdev_rx(struct net_device *netdev, struct io_buffer *iobuf)
Add packet to receive queue.
void unregister_netdev(struct net_device *netdev)
Unregister network device.
void netdev_rx_err(struct net_device *netdev, struct io_buffer *iobuf, int rc)
Discard received packet.
int register_netdev(struct net_device *netdev)
Register network device.
static void netdev_init(struct net_device *netdev, struct net_device_operations *op)
Initialise a network device.
static void netdev_nullify(struct net_device *netdev)
Stop using a network device.
static void netdev_put(struct net_device *netdev)
Drop reference to network device.
static void smsc75xx_remove(struct usb_function *func)
Remove device.
void smsc75xx_poll(struct net_device *netdev)
Poll for completed and received packets.
static void smsc75xx_close(struct net_device *netdev)
Close network device.
static int smsc75xx_probe(struct usb_function *func, struct usb_configuration_descriptor *config)
Probe device.
static void smsc75xx_in_complete(struct usb_endpoint *ep, struct io_buffer *iobuf, int rc)
Complete bulk IN transfer.
static struct usb_device_id smsc75xx_ids[]
SMSC75xx device IDs.
struct usb_endpoint_driver_operations smsc75xx_in_operations
Bulk IN endpoint operations.
int smsc75xx_dump_statistics(struct smscusb_device *smscusb)
Dump statistics (for debugging)
static struct net_device_operations smsc75xx_operations
SMSC75xx network device operations.
static int smsc75xx_reset(struct smscusb_device *smscusb)
Reset device.
static int smsc75xx_open(struct net_device *netdev)
Open network device.
int smsc75xx_transmit(struct net_device *netdev, struct io_buffer *iobuf)
Transmit packet.
static int smsc75xx_out_transmit(struct smscusb_device *smscusb, struct io_buffer *iobuf)
Transmit packet.
SMSC LAN75xx USB Ethernet driver.
#define SMSC75XX_MII_PHY_INTR_SOURCE
PHY interrupt source MII register.
#define SMSC75XX_HW_CFG
Hardware configuration register.
#define SMSC75XX_MAC_RX_EN
RX enable.
#define SMSC75XX_RFE_CTL_AM
Accept multicast.
#define SMSC75XX_MII_BASE
MII register base.
#define SMSC75XX_PHY_INTR_ANEG_DONE
PHY interrupt: auto-negotiation complete.
#define SMSC75XX_RX_RED
Receive error detected.
#define SMSC75XX_MAC_RX_MAX_SIZE_DEFAULT
#define SMSC75XX_FCT_RX_CTL_BAD
Store bad frames.
#define SMSC75XX_RFE_CTL_AB
Accept broadcast.
#define SMSC75XX_RESET_MAX_WAIT_MS
Maximum time to wait for reset (in milliseconds)
#define SMSC75XX_INT_STS_PHY_INT
PHY interrupt.
#define SMSC75XX_IN_MAX_FILL
Bulk IN maximum fill level.
#define SMSC75XX_INT_STS_RDFO_INT
RX FIFO overflow.
#define SMSC75XX_RFE_CTL_AU
Accept unicast.
#define SMSC75XX_FCT_TX_CTL
FIFO controller TX FIFO control register.
#define SMSC75XX_MII_PHY_INTR_MASK
PHY interrupt mask MII register.
#define SMSC75XX_ADDR_FILT_BASE
MAC address perfect filter register base.
#define SMSC75XX_IN_MTU
Bulk IN buffer size.
#define SMSC75XX_MAC_TX_EN
TX enable.
#define SMSC75XX_HW_CFG_LRST
Soft lite reset.
#define SMSC75XX_MAC_TX
MAC transmit register.
#define SMSC75XX_TX_FCS
Insert frame checksum and pad.
#define SMSC75XX_FCT_RX_CTL
FIFO controller RX FIFO control register.
#define SMSC75XX_INT_EP_CTL_PHY_EN
PHY interrupt.
#define SMSC75XX_RX_ADDR_BASE
MAC receive address register base.
#define SMSC75XX_RFE_CTL
Receive filtering engine control register.
#define SMSC75XX_HW_CFG_BIR
Bulk IN use NAK.
#define SMSC75XX_PHY_INTR_LINK_DOWN
PHY interrupt: link down.
#define SMSC75XX_MAC_RX_FCS
FCS stripping.
#define SMSC75XX_FCT_RX_CTL_EN
FCT RX enable.
#define SMSC75XX_INT_STS
Interrupt status register.
#define SMSC75XX_E2P_BASE
EEPROM register base.
#define SMSC75XX_INT_EP_CTL_RDFO_EN
RX FIFO overflow.
#define SMSC75XX_INT_EP_CTL
Interrupt endpoint control register.
#define SMSC75XX_FCT_TX_CTL_EN
FCT TX enable.
#define SMSC75XX_MAC_RX
MAC receive register.
#define SMSC75XX_BULK_IN_DLY_SET(ticks)
Delay / 16.7ns.
#define SMSC75XX_BULK_IN_DLY
Bulk IN delay register.
int smscusb_eeprom_fetch_mac(struct smscusb_device *smscusb, unsigned int e2p_base)
Fetch MAC address from EEPROM.
int smscusb_set_address(struct smscusb_device *smscusb, unsigned int addr_base)
Set receive address.
int smscusb_set_filter(struct smscusb_device *smscusb, unsigned int filt_base)
Set receive filter.
int smscusb_mii_open(struct smscusb_device *smscusb, unsigned int phy_mask, unsigned int intrs)
Enable PHY interrupts and update link status.
int smscusb_mii_check_link(struct smscusb_device *smscusb)
Check link status.
static int smscusb_get_statistics(struct smscusb_device *smscusb, unsigned int index, void *data, size_t len)
Get statistics.
static void smscusb_mii_init(struct smscusb_device *smscusb, unsigned int mii_base, unsigned int phy_source)
Initialise SMSC USB device MII interface.
static int smscusb_readl(struct smscusb_device *smscusb, unsigned int address, uint32_t *value)
Read register.
static int smscusb_writel(struct smscusb_device *smscusb, unsigned int address, uint32_t value)
Write register.
static void smscusb_init(struct smscusb_device *smscusb, struct net_device *netdev, struct usb_function *func, struct usb_endpoint_driver_operations *in)
Initialise SMSC USB device.
#define container_of(ptr, type, field)
Get containing structure.
char * strerror(int errno)
Retrieve string representation of error number.
void * data
Start of data.
Network device operations.
A data structure for storing profiling information.
uint32_t unicast
Unicast byte count.
uint32_t broadcast
Broadcast byte count.
uint32_t multicast
Multicast byte count.
uint32_t pause
Pause frames.
uint32_t broadcast
Broadcast frames.
uint32_t multicast
Multicast frames.
uint32_t unicast
Unicast frames.
uint32_t dropped
Dropped frame errors.
uint32_t undersize
Undersize frame errors.
uint32_t jabber
Jabber errors.
uint32_t fragment
Fragment errors.
uint32_t oversize
Oversize frame errors.
uint32_t alignment
Alignment errors.
struct smsc75xx_byte_statistics byte
Byte count statistics.
struct smsc75xx_frame_statistics frame
Frame count statistics.
struct smsc75xx_rx_error_statistics err
Error statistics.
struct smsc75xx_tx_statistics tx
Transmit statistics.
struct smsc75xx_rx_statistics rx
Receive statistics.
uint32_t count
Bad byte count.
uint32_t multiple
Multiple collisions.
uint32_t deferral
Excess deferral errors.
uint32_t late
Late collisions.
uint32_t carrier
Carrier errors.
uint32_t single
Single collisions.
uint32_t excessive
Excession collisions.
struct smsc75xx_tx_error_statistics err
Error statistics.
struct smsc75xx_byte_statistics byte
Byte count statistics.
struct smsc75xx_frame_statistics frame
Frame count statistics.
struct net_device * netdev
Network device.
struct usb_bus * bus
USB bus.
uint32_t int_sts
Interrupt status.
struct usbnet_device usbnet
USB network device.
A USB configuration descriptor.
USB endpoint driver operations.
int open
Endpoint is open.
struct device dev
Generic device.
struct usb_endpoint out
Bulk OUT endpoint.
struct usb_endpoint in
Bulk IN endpoint.
void mdelay(unsigned long msecs)
Delay for a fixed number of milliseconds.
int usb_stream(struct usb_endpoint *ep, struct io_buffer *iobuf, int terminate)
Enqueue USB stream transfer.
int usbnet_refill(struct usbnet_device *usbnet)
Refill USB network device bulk IN and interrupt endpoints.
int usbnet_open(struct usbnet_device *usbnet)
Open USB network device.
void usbnet_close(struct usbnet_device *usbnet)
Close USB network device.
int usbnet_describe(struct usbnet_device *usbnet, struct usb_configuration_descriptor *config)
Describe USB network device interfaces.