10 #include <linux/signal.h>
11 #include <linux/slab.h>
12 #include <linux/module.h>
13 #include <linux/netdevice.h>
15 #include <linux/mii.h>
16 #include <linux/ethtool.h>
18 #include <asm/uaccess.h>
21 #define DRIVER_VERSION "v0.6.2 (2004/08/27)"
23 #define DRIVER_DESC "rtl8150 based usb-ethernet driver"
45 #define CSCR_LINK_STATUS (1 << 3)
47 #define IDR_EEPROM 0x1202
50 #define PHY_WRITE 0x20
53 #define MII_TIMEOUT 10
56 #define RTL8150_REQT_READ 0xc0
57 #define RTL8150_REQT_WRITE 0x40
58 #define RTL8150_REQ_GET_REGS 0x05
59 #define RTL8150_REQ_SET_REGS 0x05
63 #define TSR_ECOL (1<<5)
64 #define TSR_LCOL (1<<4)
65 #define TSR_LOSS_CRS (1<<3)
66 #define TSR_JBR (1<<2)
67 #define TSR_ERRORS (TSR_ECOL | TSR_LCOL | TSR_LOSS_CRS | TSR_JBR)
69 #define RSR_CRC (1<<2)
70 #define RSR_FAE (1<<1)
71 #define RSR_ERRORS (RSR_CRC | RSR_FAE)
74 #define MSR_DUPLEX (1<<4)
75 #define MSR_SPEED (1<<3)
76 #define MSR_LINK (1<<2)
82 #define INT_WAKSR 0x03
83 #define INT_TXOK_CNT 0x04
84 #define INT_RXLOST_CNT 0x05
85 #define INT_CRERR_CNT 0x06
86 #define INT_COL_CNT 0x07
89 #define RTL8150_MTU 1540
90 #define RTL8150_TX_TIMEOUT (HZ)
91 #define RX_SKB_POOL_SIZE 4
94 #define RTL8150_HW_CRC 0
96 #define RTL8150_UNPLUG 2
100 #define VENDOR_ID_REALTEK 0x0bda
101 #define VENDOR_ID_MELCO 0x0411
102 #define VENDOR_ID_MICRONET 0x3980
103 #define VENDOR_ID_LONGSHINE 0x07b8
104 #define VENDOR_ID_OQO 0x1557
105 #define VENDOR_ID_ZYXEL 0x0586
107 #define PRODUCT_ID_RTL8150 0x8150
108 #define PRODUCT_ID_LUAKTX 0x0012
109 #define PRODUCT_ID_LCS8138TX 0x401a
110 #define PRODUCT_ID_SP128AR 0x0003
111 #define PRODUCT_ID_PRESTIGE 0x401a
157 indx, 0, data, size, 500);
160 static int set_registers(
rtl8150_t * dev,
u16 indx,
u16 size,
void *data)
164 indx, 0, data, size, 500);
167 static void ctrl_callback(
struct urb *
urb)
180 if (printk_ratelimit())
181 dev_warn(&urb->dev->dev,
"ctrl urb status %d\n", status);
201 usb_sndctrlpipe(dev->
udev, 0), (
char *) &dev->
dr,
202 &dev->
rx_creg, size, ctrl_callback, dev);
207 "control request submission failed: %d\n", ret);
220 data[1] = data[2] = 0;
224 set_registers(dev,
PHYADD,
sizeof(data), data);
225 set_registers(dev,
PHYCNT, 1, &tmp);
227 get_registers(dev,
PHYCNT, 1, data);
231 get_registers(dev,
PHYDAT, 2, data);
232 *reg = data[0] | (data[1] << 8);
244 data[1] = reg & 0xff;
245 data[2] = (reg >> 8) & 0xff;
249 set_registers(dev,
PHYADD,
sizeof(data), data);
250 set_registers(dev,
PHYCNT, 1, &tmp);
252 get_registers(dev,
PHYCNT, 1, data);
253 }
while ((data[0] & PHY_GO) && (i++ <
MII_TIMEOUT));
261 static inline void set_ethernet_addr(
rtl8150_t * dev)
265 get_registers(dev,
IDR,
sizeof(node_id), node_id);
266 memcpy(dev->
netdev->dev_addr, node_id,
sizeof(node_id));
274 if (netif_running(netdev))
286 get_registers(dev,
CR, 1, &cr);
289 set_registers(dev,
CR, 1, &cr);
292 for (i = 0; i * 2 < netdev->
addr_len; i++) {
298 set_registers(dev,
CR, 1, &cr);
304 static int rtl8150_reset(
rtl8150_t * dev)
309 set_registers(dev,
CR, 1, &data);
311 get_registers(dev,
CR, 1, &data);
312 }
while ((data & 0x10) && --i);
314 return (i > 0) ? 1 : 0;
317 static int alloc_all_urbs(
rtl8150_t * dev)
344 static void free_all_urbs(
rtl8150_t * dev)
352 static void unlink_all_urbs(
rtl8150_t * dev)
375 static void read_bulk_callback(
struct urb *urb)
382 int status = urb->status;
391 if (!netif_device_present(netdev))
400 if (printk_ratelimit())
401 dev_warn(&urb->dev->dev,
"may be reset is needed?..\n");
404 if (printk_ratelimit())
405 dev_warn(&urb->dev->dev,
"Rx status %d\n", status);
412 if (urb->actual_length < 4)
415 res = urb->actual_length;
422 netdev->
stats.rx_packets++;
433 usb_fill_bulk_urb(dev->
rx_urb, dev->
udev, usb_rcvbulkpipe(dev->
udev, 1),
447 tasklet_schedule(&dev->
tl);
450 static void write_bulk_callback(
struct urb *urb)
453 int status = urb->status;
459 if (!netif_device_present(dev->
netdev))
462 dev_info(&urb->dev->dev,
"%s: Tx status %d\n",
463 dev->
netdev->name, status);
465 netif_wake_queue(dev->
netdev);
468 static void intr_callback(
struct urb *urb)
472 int status = urb->status;
487 dev_info(&urb->dev->dev,
"%s: intr status %d\n",
488 dev->
netdev->name, status);
492 d = urb->transfer_buffer;
494 dev->
netdev->stats.tx_errors++;
496 dev->
netdev->stats.tx_aborted_errors++;
498 dev->
netdev->stats.tx_window_errors++;
500 dev->
netdev->stats.tx_carrier_errors++;
504 if (netif_carrier_ok(dev->
netdev)) {
509 if (!netif_carrier_ok(dev->
netdev)) {
521 "can't resubmit intr, %s-%s/input0, status %d\n",
522 dev->
udev->bus->bus_name, dev->
udev->devpath, res);
531 if (netif_running(dev->
netdev)) {
543 if (netif_running(dev->
netdev)) {
545 dev->
rx_urb->actual_length = 0;
546 read_bulk_callback(dev->
rx_urb);
561 static void fill_skb_pool(
rtl8150_t *dev)
578 static void free_skb_pool(
rtl8150_t *dev)
587 static void rx_fixup(
unsigned long data)
605 usb_fill_bulk_urb(dev->
rx_urb, dev->
udev, usb_rcvbulkpipe(dev->
udev, 1),
620 tasklet_schedule(&dev->
tl);
623 static int enable_net_traffic(
rtl8150_t * dev)
627 if (!rtl8150_reset(dev)) {
637 set_registers(dev,
RCR, 1, &rcr);
638 set_registers(dev,
TCR, 1, &tcr);
639 set_registers(dev,
CR, 1, &cr);
640 get_registers(dev,
MSR, 1, &msr);
645 static void disable_net_traffic(
rtl8150_t * dev)
649 get_registers(dev,
CR, 1, &cr);
651 set_registers(dev,
CR, 1, &cr);
654 static void rtl8150_tx_timeout(
struct net_device *netdev)
659 netdev->
stats.tx_errors++;
662 static void rtl8150_set_multicast(
struct net_device *netdev)
665 netif_stop_queue(netdev);
678 async_set_registers(dev,
RCR, 2);
679 netif_wake_queue(netdev);
688 netif_stop_queue(netdev);
689 count = (skb->
len < 60) ? 60 : skb->
len;
690 count = (count & 0x3f) ? count : count + 1;
692 usb_fill_bulk_urb(dev->
tx_urb, dev->
udev, usb_sndbulkpipe(dev->
udev, 2),
693 skb->
data, count, write_bulk_callback, dev);
700 netdev->
stats.tx_errors++;
701 netif_start_queue(netdev);
704 netdev->
stats.tx_packets++;
713 static void set_carrier(
struct net_device *netdev)
718 get_registers(dev,
CSCR, 2, &tmp);
725 static int rtl8150_open(
struct net_device *netdev)
731 dev->
rx_skb = pull_skb(dev);
737 usb_fill_bulk_urb(dev->
rx_urb, dev->
udev, usb_rcvbulkpipe(dev->
udev, 1),
742 dev_warn(&netdev->
dev,
"rx_urb submit failed: %d\n", res);
751 dev_warn(&netdev->
dev,
"intr_urb submit failed: %d\n", res);
755 enable_net_traffic(dev);
757 netif_start_queue(netdev);
762 static int rtl8150_close(
struct net_device *netdev)
767 netif_stop_queue(netdev);
769 disable_net_traffic(dev);
770 unlink_all_urbs(dev);
798 get_registers(dev,
BMCR, 2, &bmcr);
799 get_registers(dev,
ANLP, 2, &lpa);
803 ethtool_cmd_speed_set(ecmd, speed);
822 .get_drvinfo = rtl8150_get_drvinfo,
823 .get_settings = rtl8150_get_settings,
837 read_mii_word(dev, dev->
phy, (data[1] & 0x1f), &data[3]);
842 write_mii_word(dev, dev->
phy, (data[1] & 0x1f), data[2]);
852 .ndo_open = rtl8150_open,
853 .ndo_stop = rtl8150_close,
854 .ndo_do_ioctl = rtl8150_ioctl,
855 .ndo_start_xmit = rtl8150_start_xmit,
856 .ndo_tx_timeout = rtl8150_tx_timeout,
857 .ndo_set_rx_mode = rtl8150_set_multicast,
858 .ndo_set_mac_address = rtl8150_set_mac_address,
867 struct usb_device *
udev = interface_to_usbdev(intf);
871 netdev = alloc_etherdev(
sizeof(
rtl8150_t));
875 dev = netdev_priv(netdev);
893 if (!alloc_all_urbs(dev)) {
894 dev_err(&intf->dev,
"out of memory\n");
897 if (!rtl8150_reset(dev)) {
898 dev_err(&intf->dev,
"couldn't reset the device\n");
902 set_ethernet_addr(dev);
904 usb_set_intfdata(intf, dev);
907 dev_err(&intf->dev,
"couldn't register the device\n");
911 dev_info(&intf->dev,
"%s: rtl8150 is detected\n", netdev->
name);
916 usb_set_intfdata(intf,
NULL);
930 usb_set_intfdata(intf,
NULL);
935 unlink_all_urbs(dev);
939 dev_kfree_skb(dev->
rx_skb);
945 static struct usb_driver rtl8150_driver = {
947 .probe = rtl8150_probe,
948 .disconnect = rtl8150_disconnect,
949 .id_table = rtl8150_table,
950 .suspend = rtl8150_suspend,
951 .resume = rtl8150_resume,
952 .disable_hub_initiated_lpm = 1,