47 { .name =
"smsc95xx.in" };
51 { .name =
"smsc95xx.out" };
79 DBGC ( smscusb,
"SMSC95XX %p could not find system "
80 "information\n", smscusb );
89 DBGC ( smscusb,
"SMSC95XX %p could not read manufacturer "
97 DBGC ( smscusb,
"SMSC95XX %p could not read product name\n",
110 DBGC ( smscusb,
"SMSC95XX %p could not find OEM strings\n",
118 DBGC ( smscusb,
"SMSC95XX %p could not read OEM string\n",
127 DBGC ( smscusb,
"SMSC95XX %p invalid MAC address \"%s\"\n",
132 DBGC ( smscusb,
"SMSC95XX %p using VM3 MAC %s\n",
162 DBGC ( smscusb,
"SMSC95XX %p using random MAC %s\n",
191 &
rx,
sizeof (
rx ) ) ) != 0 ) {
192 DBGC ( smscusb,
"SMSC95XX %p could not get RX statistics: "
199 &
tx,
sizeof (
tx ) ) ) != 0 ) {
200 DBGC ( smscusb,
"SMSC95XX %p could not get TX statistics: "
206 DBGC ( smscusb,
"SMSC95XX %p RX good %d bad %d crc %d und %d aln %d "
212 DBGC ( smscusb,
"SMSC95XX %p TX good %d bad %d pau %d sgl %d mul %d "
213 "exc %d lat %d und %d def %d car %d\n", smscusb,
253 DBGC ( smscusb,
"SMSC95XX %p failed to reset\n", smscusb );
262 led_gpio_cfg ) ) != 0 ) {
263 DBGC ( smscusb,
"SMSC95XX %p could not configure LEDs: %s\n",
303 DBGC ( smscusb,
"SMSC95XX %p bulk IN failed: %s\n",
310 DBGC ( smscusb,
"SMSC95XX %p underlength bulk IN\n",
326 DBGC ( smscusb,
"SMSC95XX %p receive error (%08x):\n",
408 DBGC ( smscusb,
"SMSC95XX %p could not open: %s\n",
422 goto err_bulk_in_dly;
442 goto err_set_address;
532 DBGC2 ( smscusb,
"SMSC95XX %p RX FIFO overflowed\n",
540 DBGC ( smscusb,
"SMSC95XX %p unexpected interrupt %#08x\n",
589 memset ( smscusb, 0,
sizeof ( *smscusb ) );
597 DBGC ( smscusb,
"SMSC95XX %p on %s\n", smscusb, func->
name );
601 DBGC ( smscusb,
"SMSC95XX %p could not describe: %s\n",
647 USB_ROM ( 0x0424, 0x9500,
"smsc9500",
"SMSC LAN9500", 0 ),
648 USB_ROM ( 0x0424, 0x9505,
"smsc9505",
"SMSC LAN9505", 0 ),
649 USB_ROM ( 0x0424, 0x9e00,
"smsc9500a",
"SMSC LAN9500A", 0 ),
650 USB_ROM ( 0x0424, 0x9e01,
"smsc9505a",
"SMSC LAN9505A", 0 ),
651 USB_ROM ( 0x0424, 0xec00,
"smsc9514",
"SMSC LAN9512/9514", 0 ),
652 USB_ROM ( 0x0424, 0x9900,
"smsc9500-s",
"SMSC LAN9500-S", 0 ),
653 USB_ROM ( 0x0424, 0x9901,
"smsc9505-s",
"SMSC LAN9505-S", 0 ),
654 USB_ROM ( 0x0424, 0x9902,
"smsc9500a-s",
"SMSC LAN9500A-S", 0 ),
655 USB_ROM ( 0x0424, 0x9903,
"smsc9505a-s",
"SMSC LAN9505A-S", 0 ),
656 USB_ROM ( 0x0424, 0x9904,
"smsc9514-s",
"SMSC LAN9512/9514-S", 0 ),
657 USB_ROM ( 0x0424, 0x9905,
"smsc9500a-h",
"SMSC LAN9500A-H", 0 ),
658 USB_ROM ( 0x0424, 0x9906,
"smsc9505a-h",
"SMSC LAN9505A-H", 0 ),
659 USB_ROM ( 0x0424, 0x9907,
"smsc9500-2",
"SMSC LAN9500-2", 0 ),
660 USB_ROM ( 0x0424, 0x9908,
"smsc9500a-2",
"SMSC LAN9500A-2", 0 ),
661 USB_ROM ( 0x0424, 0x9909,
"smsc9514-2",
"SMSC LAN9512/9514-2", 0 ),
662 USB_ROM ( 0x0424, 0x9530,
"smsc9530",
"SMSC LAN9530", 0 ),
663 USB_ROM ( 0x0424, 0x9730,
"smsc9730",
"SMSC LAN9730", 0 ),
664 USB_ROM ( 0x0424, 0x9e08,
"smsc89530",
"SMSC LAN89530", 0 ),
#define NULL
NULL pointer (VOID *)
struct arbelprm_rc_send_wqe rc
struct ena_llq_option header
Header locations.
uint8_t mac[ETH_ALEN]
MAC address.
uint8_t system[ETH_ALEN]
System identifier.
struct net_device * alloc_etherdev(size_t priv_size)
Allocate Ethernet device.
const char * eth_ntoa(const void *ll_addr)
Transcribe Ethernet address.
void eth_random_addr(void *hw_addr)
Generate random Ethernet address.
static struct net_device * netdev
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
#define ENOENT
No such file or directory.
#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.
uint8_t product
Product string.
#define SMBIOS_TYPE_SYSTEM_INFORMATION
SMBIOS system information structure type.
uint8_t manufacturer
Manufacturer string.
#define SMBIOS_TYPE_OEM_STRINGS
SMBIOS OEM strings structure type.
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)
#define iob_unput(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.
const char * smbios_string(const struct smbios_header *structure, unsigned int index)
Get indexed string within SMBIOS structure.
const struct smbios_header * smbios_structure(unsigned int type, unsigned int instance)
Find specific structure type within SMBIOS.
static int smsc95xx_transmit(struct net_device *netdev, struct io_buffer *iobuf)
Transmit packet.
static void smsc95xx_remove(struct usb_function *func)
Remove device.
static int smsc95xx_probe(struct usb_function *func, struct usb_configuration_descriptor *config)
Probe device.
static struct usb_endpoint_driver_operations smsc95xx_in_operations
Bulk IN endpoint operations.
static void smsc95xx_poll(struct net_device *netdev)
Poll for completed and received packets.
static struct usb_device_id smsc95xx_ids[]
SMSC95xx device IDs.
static struct net_device_operations smsc95xx_operations
SMSC95xx network device operations.
static int smsc95xx_fetch_mac(struct smscusb_device *smscusb)
Fetch MAC address.
static int smsc95xx_out_transmit(struct smscusb_device *smscusb, struct io_buffer *iobuf)
Transmit packet.
static void smsc95xx_close(struct net_device *netdev)
Close network device.
static int smsc95xx_dump_statistics(struct smscusb_device *smscusb)
Dump statistics (for debugging)
static int smsc95xx_reset(struct smscusb_device *smscusb)
Reset device.
static void smsc95xx_in_complete(struct usb_endpoint *ep, struct io_buffer *iobuf, int rc)
Complete bulk IN transfer.
static int smsc95xx_open(struct net_device *netdev)
Open network device.
static int smsc95xx_vm3_fetch_mac(struct smscusb_device *smscusb)
Construct MAC address for Honeywell VM3.
SMSC LAN95xx USB Ethernet driver.
#define SMSC95XX_HW_CFG_BIR
Bulk IN use NAK.
#define SMSC95XX_MAC_CR_MCPAS
All multicast.
#define SMSC95XX_TX_FIRST
First segment.
#define SMSC95XX_HW_CFG
Hardware configuration register.
#define SMSC95XX_HW_CFG_LRST
Soft lite reset.
#define SMSC95XX_MII_BASE
MII register base.
#define SMSC95XX_MII_PHY_INTR_SOURCE
PHY interrupt source MII register.
#define SMSC95XX_BULK_IN_DLY_SET(ticks)
Delay / 16.7ns.
#define SMSC95XX_INT_STS_RXDF_INT
RX FIFO overflow.
#define SMSC95XX_RESET_DELAY_US
Reset delay (in microseconds)
#define SMSC95XX_RX_LATE
Late collision.
#define SMSC95XX_LED_GPIO_CFG_GPCTL2_NSPD_LED
Link speed LED.
#define SMSC95XX_MAC_CR_PASSBAD
Pass bad frames.
#define SMSC95XX_TX_LEN(len)
Buffer size.
#define SMSC95XX_LED_GPIO_CFG
LED GPIO configuration register.
#define SMSC95XX_RX_STATISTICS
Receive statistics.
#define SMSC95XX_ADDR_BASE
MAC address register base.
#define SMSC95XX_TX_LAST
Last segment.
#define SMSC95XX_TX_CFG
Transmit configuration register.
#define SMSC95XX_MAC_CR
MAC control register.
#define SMSC95XX_INT_EP_CTL_PHY_EN
PHY interrupt.
#define SMSC95XX_MAC_CR_RXEN
RX enabled.
#define SMSC95XX_INT_EP_CTL
Interrupt endpoint control register.
#define SMSC95XX_MAC_CR_FDPX
Full duplex.
#define SMSC95XX_INT_STS_PHY_INT
PHY interrupt.
#define SMSC95XX_MAC_CR_TXEN
TX enabled.
#define SMSC95XX_TX_CFG_ON
TX enable.
#define SMSC95XX_RX_CRC
CRC error.
#define SMSC95XX_PHY_INTR_ANEG_DONE
PHY interrupt: auto-negotiation complete.
#define SMSC95XX_INT_STS
Interrupt status register.
#define SMSC95XX_RX_RUNT
Runt frame.
#define SMSC95XX_MAC_CR_PRMS
Promiscuous.
#define SMSC95XX_MII_PHY_INTR_MASK
PHY interrupt mask MII register.
#define SMSC95XX_LED_GPIO_CFG_GPCTL0_NFDX_LED
Full-duplex LED.
#define SMSC95XX_E2P_BASE
EEPROM register base.
#define SMSC95XX_TX_STATISTICS
Transmit statistics.
#define SMSC95XX_VM3_OEM_STRING_MAC
Honeywell VM3 MAC address OEM string index.
#define SMSC95XX_BULK_IN_DLY
Bulk IN delay register.
#define SMSC95XX_LED_GPIO_CFG_GPCTL1_NLNKA_LED
Activity LED.
#define SMSC95XX_IN_MAX_FILL
Bulk IN maximum fill level.
#define SMSC95XX_IN_MTU
Bulk IN buffer size.
#define SMSC95XX_MAC_CR_RXALL
Receive all.
#define SMSC95XX_PHY_INTR_LINK_DOWN
PHY interrupt: link down.
#define SMSC95XX_INT_EP_CTL_RXDF_EN
RX FIFO overflow.
int smscusb_eeprom_fetch_mac(struct smscusb_device *smscusb, unsigned int e2p_base)
Fetch MAC address from EEPROM.
int smscusb_fdt_fetch_mac(struct smscusb_device *smscusb)
Fetch MAC address from device tree.
int smscusb_set_address(struct smscusb_device *smscusb, unsigned int addr_base)
Set receive address.
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.
int strcmp(const char *first, const char *second)
Compare strings.
void * data
Start of data.
Network device operations.
A data structure for storing profiling information.
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 udelay(unsigned long usecs)
Delay for a fixed number of microseconds.
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.
u8 tx[WPA_TKIP_MIC_KEY_LEN]
MIC key for packets to the AP.
u8 rx[WPA_TKIP_MIC_KEY_LEN]
MIC key for packets from the AP.