21 #include <linux/module.h>
23 #include <linux/netdevice.h>
25 #include <linux/ethtool.h>
27 #include <linux/mii.h>
50 #define CMD_PACKET_SIZE 64
52 #define CMD_TIMEOUT 15000
53 #define CMD_REPLY_RETRY 5
55 #define CX82310_MTU 1514
65 u8 *wdata,
int wlen,
u8 *rdata,
int rlen)
83 dev_err(&dev->
udev->dev,
"send command %#x: error %d\n",
96 "reply receive error %d\n", ret);
102 if (actual_len == 0) {
103 dev_err(&dev->
udev->dev,
"no reply to command %#x\n",
110 "got reply to command %#x, expected: %#x\n",
116 dev_err(&dev->
udev->dev,
"command %#x failed: %#x\n",
130 #define partial_len data[0]
131 #define partial_rem data[1]
132 #define partial_data data[2]
138 struct usb_device *
udev = dev->
udev;
141 if (
usb_string(udev, udev->descriptor.iProduct, buf,
sizeof(buf)) > 0
142 &&
strcmp(buf,
"USB NET CARD")) {
143 dev_info(&udev->dev,
"ignoring: probably an ADSL modem\n");
155 dev->
net->hard_header_len = 0;
162 if (!dev->partial_data)
168 dev_err(&udev->dev,
"unable to enable ethernet mode: %d\n",
177 dev_err(&udev->dev,
"unable to read MAC address: %d\n", ret);
188 kfree((
void *)dev->partial_data);
194 kfree((
void *)dev->partial_data);
214 if (dev->partial_rem) {
215 len = dev->partial_len + dev->partial_rem;
225 skb_pull(skb, (dev->partial_rem + 1) & ~1);
226 dev->partial_rem = 0;
232 while (skb->
len > 1) {
234 len = skb->
data[0] | (skb->
data[1] << 8);
238 if (len == skb->
len || len + 1 == skb->
len) {
244 dev_err(&dev->
udev->dev,
"RX packet too long: %d B\n",
250 if (len > skb->
len) {
251 dev->partial_len = skb->
len;
252 dev->partial_rem = len - skb->
len;
280 if (skb_headroom(skb) < 2) {
290 skb->
data[1] = len >> 8;
297 .description =
"Conexant CX82310 USB ethernet",
299 .bind = cx82310_bind,
300 .unbind = cx82310_unbind,
301 .rx_fixup = cx82310_rx_fixup,
302 .tx_fixup = cx82310_tx_fixup,
307 USB_DEVICE_AND_INTERFACE_INFO(0x0572, 0xcb01, 0xff, 0, 0),
308 .driver_info = (
unsigned long) &cx82310_info
314 static struct usb_driver cx82310_driver = {
315 .name =
"cx82310_eth",
316 .id_table = products,
321 .disable_hub_initiated_lpm = 1,