68 goto err_write_hw_cfg;
106 DBGC ( smscusb,
"LAN78XX %p using random MAC %s\n",
148 DBGC ( smscusb,
"LAN78XX %p timed out waiting for reset\n",
177 goto err_usb_cfg0_read;
181 goto err_usb_cfg0_write;
185 DBGC ( smscusb,
"LAN78XX %p could not open: %s\n",
199 goto err_bulk_in_dly;
241 goto err_set_address;
333 memset ( smscusb, 0,
sizeof ( *smscusb ) );
339 DBGC ( smscusb,
"LAN78XX %p on %s\n", smscusb, func->
name );
343 DBGC ( smscusb,
"LAN78XX %p could not describe: %s\n",
int smscusb_set_address(struct smscusb_device *smscusb, unsigned int addr_base)
Set receive address.
#define SMSC75XX_IN_MAX_FILL
Bulk IN maximum fill level.
struct arbelprm_rc_send_wqe rc
static void * usb_func_get_drvdata(struct usb_function *func)
Get USB function driver private data.
#define LAN78XX_HW_CFG_LED1_EN
LED1 enable.
int(* open)(struct net_device *netdev)
Open network device.
#define LAN78XX_PHY_INTR_ANEG_ERR
PHY interrupt: auto-negotiation failure.
static int lan78xx_probe(struct usb_function *func, struct usb_configuration_descriptor *config)
Probe device.
static int lan78xx_fetch_mac(struct smscusb_device *smscusb)
Fetch MAC address.
#define LAN78XX_PHY_INTR_ENABLE
PHY interrupt: global enable.
#define LAN78XX_MAC_CR_ASD
Auto speed.
#define LAN78XX_ADDR_FILT_BASE
MAC address perfect filter register base.
#define LAN78XX_FCT_RX_CTL_BAD
Store bad frames.
#define LAN78XX_HW_CFG_LED0_EN
LED1 enable.
#define LAN78XX_USB_CFG0
USB configuration register 0.
struct usb_driver lan78xx_driver __usb_driver
LAN78xx driver.
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 LAN78XX_MAC_CR_ADP
Duplex polarity.
int smsc75xx_transmit(struct net_device *netdev, struct io_buffer *iobuf)
Transmit packet.
#define SMSC75XX_IN_MTU
Bulk IN buffer size.
#define LAN78XX_FCT_RX_CTL
FIFO controller RX FIFO control register.
#define LAN78XX_FCT_TX_CTL
FIFO controller TX FIFO control register.
#define LAN78XX_USB_CFG0_BIR
Bulk IN use NAK.
static int smscusb_writel(struct smscusb_device *smscusb, unsigned int address, uint32_t value)
Write register.
#define LAN78XX_MAC_CR
MAC control register.
struct usb_endpoint_driver_operations smsc75xx_in_operations
Bulk IN endpoint operations.
#define LAN78XX_FCT_RX_CTL_EN
FCT RX enable.
#define LAN78XX_INT_EP_CTL
Interrupt endpoint control register.
static void smscusb_mii_init(struct smscusb_device *smscusb, unsigned int mii_base, unsigned int phy_source)
Initialise SMSC USB device MII interface.
#define LAN78XX_MII_BASE
MII register base.
int smscusb_mii_open(struct smscusb_device *smscusb, unsigned int phy_mask, unsigned int intrs)
Enable PHY interrupts and update link status.
#define LAN78XX_MAC_RX_FCS
FCS stripping.
static void lan78xx_remove(struct usb_function *func)
Remove device.
#define LAN78XX_E2P_BASE
EEPROM register base.
static struct usb_device_id lan78xx_ids[]
LAN78xx device IDs.
int smscusb_set_filter(struct smscusb_device *smscusb, unsigned int filt_base)
Set receive filter.
static void netdev_init(struct net_device *netdev, struct net_device_operations *op)
Initialise a network device.
#define LAN78XX_MII_PHY_INTR_MASK
PHY interrupt mask MII register.
uint32_t int_sts
Interrupt status.
#define ENOMEM
Not enough space.
#define LAN78XX_HW_CFG
Hardware configuration register.
static int lan78xx_open(struct net_device *netdev)
Open network device.
struct usbnet_device usbnet
USB network device.
#define LAN78XX_MAC_RX
MAC receive register.
static void netdev_put(struct net_device *netdev)
Drop reference to network device.
#define LAN78XX_MAC_RX_MAX_SIZE_DEFAULT
#define LAN78XX_HW_CFG_LRST
Soft lite reset.
void * priv
Driver private data.
int smsc75xx_dump_statistics(struct smscusb_device *smscusb)
Dump statistics (for debugging)
static void usb_refill_init(struct usb_endpoint *ep, size_t reserve, size_t len, unsigned int max)
Initialise USB endpoint refill.
static struct net_device * netdev
#define LAN78XX_MAC_RX_EN
RX enable.
void smsc75xx_poll(struct net_device *netdev)
Poll for completed and received packets.
static int smscusb_readl(struct smscusb_device *smscusb, unsigned int address, uint32_t *value)
Read register.
static void usb_func_set_drvdata(struct usb_function *func, void *priv)
Set USB function driver private data.
void unregister_netdev(struct net_device *netdev)
Unregister network device.
#define LAN78XX_RFE_CTL_AM
Accept multicast.
int smscusb_eeprom_fetch_mac(struct smscusb_device *smscusb, unsigned int e2p_base)
Fetch MAC address from EEPROM.
char * strerror(int errno)
Retrieve string representation of error number.
int register_netdev(struct net_device *netdev)
Register network device.
const char * eth_ntoa(const void *ll_addr)
Transcribe Ethernet address.
#define LAN78XX_RFE_CTL_AU
Accept unicast.
#define USB_CLASS_ID(base, subclass, protocol)
Construct USB class ID.
#define LAN78XX_FCT_TX_CTL_EN
FCT TX enable.
struct usb_endpoint in
Bulk IN endpoint.
static void netdev_nullify(struct net_device *netdev)
Stop using a network device.
Network device operations.
struct device * dev
Underlying hardware device.
#define LAN78XX_RFE_CTL
Receive filtering engine control register.
static int lan78xx_eeprom_fetch_mac(struct smscusb_device *smscusb)
Fetch MAC address from EEPROM.
void mdelay(unsigned long msecs)
Delay for a fixed number of milliseconds.
A USB configuration descriptor.
int smscusb_otp_fetch_mac(struct smscusb_device *smscusb, unsigned int otp_base)
Fetch MAC address from OTP.
#define LAN78XX_MAC_TX_EN
TX enable.
Microchip LAN78xx USB Ethernet driver.
Universal Serial Bus (USB)
#define LAN78XX_PHY_INTR_LINK
PHY interrupt: link state change.
#define LAN78XX_RFE_CTL_AB
Accept broadcast.
#define LAN78XX_INT_EP_CTL_RDFO_EN
RX FIFO overflow.
struct net_device * alloc_etherdev(size_t priv_size)
Allocate Ethernet device.
#define LAN78XX_BULK_IN_DLY_SET(ticks)
Delay / 16.7ns.
static void lan78xx_close(struct net_device *netdev)
Close network device.
static int lan78xx_reset(struct smscusb_device *smscusb)
Reset device.
#define LAN78XX_OTP_BASE
OTP register base.
int usbnet_describe(struct usbnet_device *usbnet, struct usb_configuration_descriptor *config)
Describe USB network device interfaces.
#define LAN78XX_RX_ADDR_BASE
MAC receive address register base.
static struct net_device_operations lan78xx_operations
LAN78xx network device operations.
struct net_device * netdev
Network device.
#define LAN78XX_PHY_INTR_ANEG_DONE
PHY interrupt: auto-negotiation complete.
void usbnet_close(struct usbnet_device *usbnet)
Close USB network device.
struct device dev
Generic device.
#define LAN78XX_MII_PHY_INTR_SOURCE
PHY interrupt source MII register.
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
uint8_t hw_addr[MAX_HW_ADDR_LEN]
Hardware address.
int smscusb_fdt_fetch_mac(struct smscusb_device *smscusb)
Fetch MAC address from device tree.
#define ETIMEDOUT
Connection timed out.
#define LAN78XX_MAC_TX
MAC transmit register.
#define LAN78XX_RESET_MAX_WAIT_MS
Maximum time to wait for reset (in milliseconds)
void eth_random_addr(void *hw_addr)
Generate random Ethernet address.
#define LAN78XX_INT_EP_CTL_PHY_EN
PHY interrupt.
#define LAN78XX_BULK_IN_DLY
Bulk IN delay register.
#define LAN78XX_MAC_CR_ADD
Auto duplex.
struct usb_device_id * ids
USB ID table.
void * memset(void *dest, int character, size_t len) __nonnull
int usbnet_open(struct usbnet_device *usbnet)
Open USB network device.