diff options
Diffstat (limited to 'drivers/net/usb/pegasus.c')
-rw-r--r-- | drivers/net/usb/pegasus.c | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/drivers/net/usb/pegasus.c b/drivers/net/usb/pegasus.c index 166880c113d6..a8228d87c8cf 100644 --- a/drivers/net/usb/pegasus.c +++ b/drivers/net/usb/pegasus.c | |||
@@ -93,6 +93,7 @@ module_param (msg_level, int, 0); | |||
93 | MODULE_PARM_DESC (msg_level, "Override default message level"); | 93 | MODULE_PARM_DESC (msg_level, "Override default message level"); |
94 | 94 | ||
95 | MODULE_DEVICE_TABLE(usb, pegasus_ids); | 95 | MODULE_DEVICE_TABLE(usb, pegasus_ids); |
96 | static const struct net_device_ops pegasus_netdev_ops; | ||
96 | 97 | ||
97 | static int update_eth_regs_async(pegasus_t *); | 98 | static int update_eth_regs_async(pegasus_t *); |
98 | /* Aargh!!! I _really_ hate such tweaks */ | 99 | /* Aargh!!! I _really_ hate such tweaks */ |
@@ -150,8 +151,8 @@ static int get_registers(pegasus_t * pegasus, __u16 indx, __u16 size, | |||
150 | pegasus->dr.bRequestType = PEGASUS_REQT_READ; | 151 | pegasus->dr.bRequestType = PEGASUS_REQT_READ; |
151 | pegasus->dr.bRequest = PEGASUS_REQ_GET_REGS; | 152 | pegasus->dr.bRequest = PEGASUS_REQ_GET_REGS; |
152 | pegasus->dr.wValue = cpu_to_le16(0); | 153 | pegasus->dr.wValue = cpu_to_le16(0); |
153 | pegasus->dr.wIndex = cpu_to_le16p(&indx); | 154 | pegasus->dr.wIndex = cpu_to_le16(indx); |
154 | pegasus->dr.wLength = cpu_to_le16p(&size); | 155 | pegasus->dr.wLength = cpu_to_le16(size); |
155 | pegasus->ctrl_urb->transfer_buffer_length = size; | 156 | pegasus->ctrl_urb->transfer_buffer_length = size; |
156 | 157 | ||
157 | usb_fill_control_urb(pegasus->ctrl_urb, pegasus->usb, | 158 | usb_fill_control_urb(pegasus->ctrl_urb, pegasus->usb, |
@@ -208,8 +209,8 @@ static int set_registers(pegasus_t * pegasus, __u16 indx, __u16 size, | |||
208 | pegasus->dr.bRequestType = PEGASUS_REQT_WRITE; | 209 | pegasus->dr.bRequestType = PEGASUS_REQT_WRITE; |
209 | pegasus->dr.bRequest = PEGASUS_REQ_SET_REGS; | 210 | pegasus->dr.bRequest = PEGASUS_REQ_SET_REGS; |
210 | pegasus->dr.wValue = cpu_to_le16(0); | 211 | pegasus->dr.wValue = cpu_to_le16(0); |
211 | pegasus->dr.wIndex = cpu_to_le16p(&indx); | 212 | pegasus->dr.wIndex = cpu_to_le16(indx); |
212 | pegasus->dr.wLength = cpu_to_le16p(&size); | 213 | pegasus->dr.wLength = cpu_to_le16(size); |
213 | pegasus->ctrl_urb->transfer_buffer_length = size; | 214 | pegasus->ctrl_urb->transfer_buffer_length = size; |
214 | 215 | ||
215 | usb_fill_control_urb(pegasus->ctrl_urb, pegasus->usb, | 216 | usb_fill_control_urb(pegasus->ctrl_urb, pegasus->usb, |
@@ -261,7 +262,7 @@ static int set_register(pegasus_t * pegasus, __u16 indx, __u8 data) | |||
261 | pegasus->dr.bRequestType = PEGASUS_REQT_WRITE; | 262 | pegasus->dr.bRequestType = PEGASUS_REQT_WRITE; |
262 | pegasus->dr.bRequest = PEGASUS_REQ_SET_REG; | 263 | pegasus->dr.bRequest = PEGASUS_REQ_SET_REG; |
263 | pegasus->dr.wValue = cpu_to_le16(data); | 264 | pegasus->dr.wValue = cpu_to_le16(data); |
264 | pegasus->dr.wIndex = cpu_to_le16p(&indx); | 265 | pegasus->dr.wIndex = cpu_to_le16(indx); |
265 | pegasus->dr.wLength = cpu_to_le16(1); | 266 | pegasus->dr.wLength = cpu_to_le16(1); |
266 | pegasus->ctrl_urb->transfer_buffer_length = 1; | 267 | pegasus->ctrl_urb->transfer_buffer_length = 1; |
267 | 268 | ||
@@ -476,7 +477,7 @@ static inline void get_node_id(pegasus_t * pegasus, __u8 * id) | |||
476 | 477 | ||
477 | for (i = 0; i < 3; i++) { | 478 | for (i = 0; i < 3; i++) { |
478 | read_eprom_word(pegasus, i, &w16); | 479 | read_eprom_word(pegasus, i, &w16); |
479 | ((__le16 *) id)[i] = cpu_to_le16p(&w16); | 480 | ((__le16 *) id)[i] = cpu_to_le16(w16); |
480 | } | 481 | } |
481 | } | 482 | } |
482 | 483 | ||
@@ -1360,14 +1361,10 @@ static int pegasus_probe(struct usb_interface *intf, | |||
1360 | pegasus->intf = intf; | 1361 | pegasus->intf = intf; |
1361 | pegasus->usb = dev; | 1362 | pegasus->usb = dev; |
1362 | pegasus->net = net; | 1363 | pegasus->net = net; |
1363 | net->open = pegasus_open; | 1364 | |
1364 | net->stop = pegasus_close; | 1365 | |
1365 | net->watchdog_timeo = PEGASUS_TX_TIMEOUT; | 1366 | net->watchdog_timeo = PEGASUS_TX_TIMEOUT; |
1366 | net->tx_timeout = pegasus_tx_timeout; | 1367 | net->netdev_ops = &pegasus_netdev_ops; |
1367 | net->do_ioctl = pegasus_ioctl; | ||
1368 | net->hard_start_xmit = pegasus_start_xmit; | ||
1369 | net->set_multicast_list = pegasus_set_multicast; | ||
1370 | net->get_stats = pegasus_netdev_stats; | ||
1371 | SET_ETHTOOL_OPS(net, &ops); | 1368 | SET_ETHTOOL_OPS(net, &ops); |
1372 | pegasus->mii.dev = net; | 1369 | pegasus->mii.dev = net; |
1373 | pegasus->mii.mdio_read = mdio_read; | 1370 | pegasus->mii.mdio_read = mdio_read; |
@@ -1482,6 +1479,16 @@ static int pegasus_resume (struct usb_interface *intf) | |||
1482 | return 0; | 1479 | return 0; |
1483 | } | 1480 | } |
1484 | 1481 | ||
1482 | static const struct net_device_ops pegasus_netdev_ops = { | ||
1483 | .ndo_open = pegasus_open, | ||
1484 | .ndo_stop = pegasus_close, | ||
1485 | .ndo_do_ioctl = pegasus_ioctl, | ||
1486 | .ndo_start_xmit = pegasus_start_xmit, | ||
1487 | .ndo_set_multicast_list = pegasus_set_multicast, | ||
1488 | .ndo_get_stats = pegasus_netdev_stats, | ||
1489 | .ndo_tx_timeout = pegasus_tx_timeout, | ||
1490 | }; | ||
1491 | |||
1485 | static struct usb_driver pegasus_driver = { | 1492 | static struct usb_driver pegasus_driver = { |
1486 | .name = driver_name, | 1493 | .name = driver_name, |
1487 | .probe = pegasus_probe, | 1494 | .probe = pegasus_probe, |