aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/usb/int51x1.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/usb/int51x1.c')
-rw-r--r--drivers/net/usb/int51x1.c52
1 files changed, 3 insertions, 49 deletions
diff --git a/drivers/net/usb/int51x1.c b/drivers/net/usb/int51x1.c
index 8de641713d5f..ace9e74ffbdd 100644
--- a/drivers/net/usb/int51x1.c
+++ b/drivers/net/usb/int51x1.c
@@ -116,23 +116,8 @@ static struct sk_buff *int51x1_tx_fixup(struct usbnet *dev,
116 return skb; 116 return skb;
117} 117}
118 118
119static void int51x1_async_cmd_callback(struct urb *urb)
120{
121 struct usb_ctrlrequest *req = (struct usb_ctrlrequest *)urb->context;
122 int status = urb->status;
123
124 if (status < 0)
125 dev_warn(&urb->dev->dev, "async callback failed with %d\n", status);
126
127 kfree(req);
128 usb_free_urb(urb);
129}
130
131static void int51x1_set_multicast(struct net_device *netdev) 119static void int51x1_set_multicast(struct net_device *netdev)
132{ 120{
133 struct usb_ctrlrequest *req;
134 int status;
135 struct urb *urb;
136 struct usbnet *dev = netdev_priv(netdev); 121 struct usbnet *dev = netdev_priv(netdev);
137 u16 filter = PACKET_TYPE_DIRECTED | PACKET_TYPE_BROADCAST; 122 u16 filter = PACKET_TYPE_DIRECTED | PACKET_TYPE_BROADCAST;
138 123
@@ -149,40 +134,9 @@ static void int51x1_set_multicast(struct net_device *netdev)
149 netdev_dbg(dev->net, "receive own packets only\n"); 134 netdev_dbg(dev->net, "receive own packets only\n");
150 } 135 }
151 136
152 urb = usb_alloc_urb(0, GFP_ATOMIC); 137 usbnet_write_cmd_async(dev, SET_ETHERNET_PACKET_FILTER,
153 if (!urb) { 138 USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
154 netdev_warn(dev->net, "Error allocating URB\n"); 139 filter, 0, NULL, 0);
155 return;
156 }
157
158 req = kmalloc(sizeof(*req), GFP_ATOMIC);
159 if (!req) {
160 netdev_warn(dev->net, "Error allocating control msg\n");
161 goto out;
162 }
163
164 req->bRequestType = USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE;
165 req->bRequest = SET_ETHERNET_PACKET_FILTER;
166 req->wValue = cpu_to_le16(filter);
167 req->wIndex = 0;
168 req->wLength = 0;
169
170 usb_fill_control_urb(urb, dev->udev, usb_sndctrlpipe(dev->udev, 0),
171 (void *)req, NULL, 0,
172 int51x1_async_cmd_callback,
173 (void *)req);
174
175 status = usb_submit_urb(urb, GFP_ATOMIC);
176 if (status < 0) {
177 netdev_warn(dev->net, "Error submitting control msg, sts=%d\n",
178 status);
179 goto out1;
180 }
181 return;
182out1:
183 kfree(req);
184out:
185 usb_free_urb(urb);
186} 140}
187 141
188static const struct net_device_ops int51x1_netdev_ops = { 142static const struct net_device_ops int51x1_netdev_ops = {