23#define SMSCUSB_REGISTER_WRITE \
24 ( USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE | \
25 USB_REQUEST_TYPE ( 0xa0 ) )
28#define SMSCUSB_REGISTER_READ \
29 ( USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE | \
30 USB_REQUEST_TYPE ( 0xa1 ) )
33#define SMSCUSB_GET_STATISTICS \
34 ( USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE | \
35 USB_REQUEST_TYPE ( 0xa2 ) )
38#define SMSCUSB_E2P_CMD 0x000
39#define SMSCUSB_E2P_CMD_EPC_BSY 0x80000000UL
40#define SMSCUSB_E2P_CMD_EPC_CMD_READ 0x00000000UL
41#define SMSCUSB_E2P_CMD_EPC_ADDR(addr) ( (addr) << 0 )
44#define SMSCUSB_E2P_DATA 0x004
45#define SMSCUSB_E2P_DATA_GET(e2p_data) \
46 ( ( (e2p_data) >> 0 ) & 0xff )
49#define SMSCUSB_EEPROM_MAC 0x01
52#define SMSCUSB_EEPROM_MAX_WAIT_MS 100
55#define SMSCUSB_OTP_POWER 0x000
56#define SMSCUSB_OTP_POWER_DOWN 0x00000001UL
59#define SMSCUSB_OTP_ADDRH 0x004
62#define SMSCUSB_OTP_ADDRL 0x008
65#define SMSCUSB_OTP_DATA 0x018
66#define SMSCUSB_OTP_DATA_GET(otp_data) \
67 ( ( (otp_data) >> 0 ) & 0xff )
70#define SMSCUSB_OTP_CMD 0x020
71#define SMSCUSB_OTP_CMD_READ 0x00000001UL
74#define SMSCUSB_OTP_GO 0x028
75#define SMSCUSB_OTP_GO_GO 0x00000001UL
78#define SMSCUSB_OTP_STATUS 0x030
79#define SMSCUSB_OTP_STATUS_BUSY 0x00000001UL
82#define SMSCUSB_OTP_MAX_WAIT_MS 100
85#define SMSCUSB_OTP_1_SIG 0xf3
88#define SMSCUSB_OTP_1_MAC 0x001
91#define SMSCUSB_OTP_2_SIG 0xf7
94#define SMSCUSB_OTP_2_MAC 0x101
97#define SMSCUSB_MII_ACCESS 0x000
98#define SMSCUSB_MII_ACCESS_PHY_ADDRESS 0x00000800UL
99#define SMSCUSB_MII_ACCESS_MIIRINDA(addr) ( (addr) << 6 )
100#define SMSCUSB_MII_ACCESS_MIIWNR 0x00000002UL
101#define SMSCUSB_MII_ACCESS_MIIBZY 0x00000001UL
104#define SMSCUSB_MII_DATA 0x004
105#define SMSCUSB_MII_DATA_SET(data) ( (data) << 0 )
106#define SMSCUSB_MII_DATA_GET(mii_data) \
107 ( ( (mii_data) >> 0 ) & 0xffff )
110#define SMSCUSB_MII_MAX_WAIT_MS 100
126#define SMSCUSB_RX_ADDRH 0x000
129#define SMSCUSB_RX_ADDRL 0x004
132#define SMSCUSB_ADDR_FILTH(n) ( 0x000 + ( 8 * (n) ) )
133#define SMSCUSB_ADDR_FILTH_VALID 0x80000000UL
136#define SMSCUSB_ADDR_FILTL(n) ( 0x004 + ( 8 * (n) ) )
230 DBGC ( smscusb,
"SMSCUSB %p could not get statistics set %d: "
242#define SMSCUSB_INTR_MAX_FILL 2
279 unsigned int phy_source ) {
288 unsigned int e2p_base );
290 unsigned int otp_base );
294 unsigned int phy_mask,
unsigned int intrs );
296 unsigned int addr_base );
298 unsigned int filt_base );
struct arbelprm_rc_send_wqe rc
pseudo_bit_t value[0x00020]
uint32_t addr
Buffer address.
uint8_t data[48]
Additional event data.
uint64_t address
Base address.
static struct net_device * netdev
#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.
#define cpu_to_le32(value)
#define le32_to_cpus(ptr)
Universal Serial Bus (USB)
static void usb_refill_init(struct usb_endpoint *ep, size_t reserve, size_t len, unsigned int max)
Initialise USB endpoint refill.
Media Independent Interface.
static void mdio_init(struct mii_interface *mdio, struct mii_operations *op)
Initialise MII interface.
static void mii_init(struct mii_device *mii, struct mii_interface *mdio, unsigned int address)
Initialise MII device.
Network device management.
struct usb_endpoint_driver_operations smscusb_out_operations
Bulk OUT endpoint operations.
struct usb_endpoint_driver_operations smscusb_intr_operations
Interrupt endpoint operations.
int smscusb_raw_readl(struct smscusb_device *smscusb, unsigned int address, uint32_t *value)
Read register (without byte-swapping)
struct mii_operations smscusb_mii_operations
MII operations.
int smscusb_raw_writel(struct smscusb_device *smscusb, unsigned int address, uint32_t value)
Write register (without byte-swapping)
int smscusb_eeprom_fetch_mac(struct smscusb_device *smscusb, unsigned int e2p_base)
Fetch MAC address from EEPROM.
static int smscusb_get_statistics(struct smscusb_device *smscusb, unsigned int index, void *data, size_t len)
Get statistics.
#define SMSCUSB_GET_STATISTICS
Get statistics command.
int smscusb_otp_fetch_mac(struct smscusb_device *smscusb, unsigned int otp_base)
Fetch MAC address from OTP.
static void smscusb_mii_init(struct smscusb_device *smscusb, unsigned int mii_base, unsigned int phy_source)
Initialise SMSC USB device MII interface.
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_set_filter(struct smscusb_device *smscusb, unsigned int filt_base)
Set receive filter.
int smscusb_raw_readl(struct smscusb_device *smscusb, unsigned int address, uint32_t *value)
Read register (without byte-swapping)
int smscusb_mii_open(struct smscusb_device *smscusb, unsigned int phy_mask, unsigned int intrs)
Enable PHY interrupts and update link status.
static int smscusb_readl(struct smscusb_device *smscusb, unsigned int address, uint32_t *value)
Read register.
int smscusb_raw_writel(struct smscusb_device *smscusb, unsigned int address, uint32_t value)
Write register (without byte-swapping)
int smscusb_mii_check_link(struct smscusb_device *smscusb)
Check link status.
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 SMSCUSB_INTR_MAX_FILL
Interrupt maximum fill level.
char * strerror(int errno)
Retrieve string representation of error number.
MII interface operations.
struct usb_device * usb
USB device.
struct net_device * netdev
Network device.
struct mii_device mii
MII device.
uint16_t mii_base
MII register base.
struct usb_bus * bus
USB bus.
uint32_t int_sts
Interrupt status.
uint16_t phy_source
PHY interrupt source register.
struct mii_interface mdio
MII interface.
struct usbnet_device usbnet
USB network device.
uint32_t int_sts
Current value of INT_STS register.
struct usb_port * port
USB port.
USB endpoint driver operations.
struct usb_device * usb
USB device.
struct usb_bus * bus
USB bus.
struct usb_hub * hub
USB hub.
struct usb_endpoint intr
Interrupt endpoint.
uint8_t raw[ETH_ALEN]
Raw MAC address.
uint32_t h
MAC receive address high register.
uint32_t l
MAC receive address low register.
int usb_control(struct usb_device *usb, unsigned int request, unsigned int value, unsigned int index, void *data, size_t len)
Issue USB control transaction.
static void usbnet_init(struct usbnet_device *usbnet, struct usb_function *func, struct usb_endpoint_driver_operations *intr, struct usb_endpoint_driver_operations *in, struct usb_endpoint_driver_operations *out)
Initialise USB network device.