aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/core/message.c398
1 files changed, 204 insertions, 194 deletions
diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
index 58b8e1c6b9a6..fefb92296e8f 100644
--- a/drivers/usb/core/message.c
+++ b/drivers/usb/core/message.c
@@ -39,7 +39,7 @@ static void usb_api_blocking_completion(struct urb *urb)
39 * own interruptible routines. 39 * own interruptible routines.
40 */ 40 */
41static int usb_start_wait_urb(struct urb *urb, int timeout, int *actual_length) 41static int usb_start_wait_urb(struct urb *urb, int timeout, int *actual_length)
42{ 42{
43 struct api_context ctx; 43 struct api_context ctx;
44 unsigned long expire; 44 unsigned long expire;
45 int retval; 45 int retval;
@@ -74,9 +74,9 @@ out:
74} 74}
75 75
76/*-------------------------------------------------------------------*/ 76/*-------------------------------------------------------------------*/
77// returns status (negative) or length (positive) 77/* returns status (negative) or length (positive) */
78static int usb_internal_control_msg(struct usb_device *usb_dev, 78static int usb_internal_control_msg(struct usb_device *usb_dev,
79 unsigned int pipe, 79 unsigned int pipe,
80 struct usb_ctrlrequest *cmd, 80 struct usb_ctrlrequest *cmd,
81 void *data, int len, int timeout) 81 void *data, int len, int timeout)
82{ 82{
@@ -87,7 +87,7 @@ static int usb_internal_control_msg(struct usb_device *usb_dev,
87 urb = usb_alloc_urb(0, GFP_NOIO); 87 urb = usb_alloc_urb(0, GFP_NOIO);
88 if (!urb) 88 if (!urb)
89 return -ENOMEM; 89 return -ENOMEM;
90 90
91 usb_fill_control_urb(urb, usb_dev, pipe, (unsigned char *)cmd, data, 91 usb_fill_control_urb(urb, usb_dev, pipe, (unsigned char *)cmd, data,
92 len, usb_api_blocking_completion, NULL); 92 len, usb_api_blocking_completion, NULL);
93 93
@@ -99,47 +99,51 @@ static int usb_internal_control_msg(struct usb_device *usb_dev,
99} 99}
100 100
101/** 101/**
102 * usb_control_msg - Builds a control urb, sends it off and waits for completion 102 * usb_control_msg - Builds a control urb, sends it off and waits for completion
103 * @dev: pointer to the usb device to send the message to 103 * @dev: pointer to the usb device to send the message to
104 * @pipe: endpoint "pipe" to send the message to 104 * @pipe: endpoint "pipe" to send the message to
105 * @request: USB message request value 105 * @request: USB message request value
106 * @requesttype: USB message request type value 106 * @requesttype: USB message request type value
107 * @value: USB message value 107 * @value: USB message value
108 * @index: USB message index value 108 * @index: USB message index value
109 * @data: pointer to the data to send 109 * @data: pointer to the data to send
110 * @size: length in bytes of the data to send 110 * @size: length in bytes of the data to send
111 * @timeout: time in msecs to wait for the message to complete before 111 * @timeout: time in msecs to wait for the message to complete before timing
112 * timing out (if 0 the wait is forever) 112 * out (if 0 the wait is forever)
113 * Context: !in_interrupt () 113 *
114 * 114 * Context: !in_interrupt ()
115 * This function sends a simple control message to a specified endpoint 115 *
116 * and waits for the message to complete, or timeout. 116 * This function sends a simple control message to a specified endpoint and
117 * 117 * waits for the message to complete, or timeout.
118 * If successful, it returns the number of bytes transferred, otherwise a negative error number. 118 *
119 * 119 * If successful, it returns the number of bytes transferred, otherwise a
120 * Don't use this function from within an interrupt context, like a 120 * negative error number.
121 * bottom half handler. If you need an asynchronous message, or need to send 121 *
122 * a message from within interrupt context, use usb_submit_urb() 122 * Don't use this function from within an interrupt context, like a bottom half
123 * If a thread in your driver uses this call, make sure your disconnect() 123 * handler. If you need an asynchronous message, or need to send a message
124 * method can wait for it to complete. Since you don't have a handle on 124 * from within interrupt context, use usb_submit_urb().
125 * the URB used, you can't cancel the request. 125 * If a thread in your driver uses this call, make sure your disconnect()
126 * method can wait for it to complete. Since you don't have a handle on the
127 * URB used, you can't cancel the request.
126 */ 128 */
127int usb_control_msg(struct usb_device *dev, unsigned int pipe, __u8 request, __u8 requesttype, 129int usb_control_msg(struct usb_device *dev, unsigned int pipe, __u8 request,
128 __u16 value, __u16 index, void *data, __u16 size, int timeout) 130 __u8 requesttype, __u16 value, __u16 index, void *data,
131 __u16 size, int timeout)
129{ 132{
130 struct usb_ctrlrequest *dr = kmalloc(sizeof(struct usb_ctrlrequest), GFP_NOIO); 133 struct usb_ctrlrequest *dr;
131 int ret; 134 int ret;
132 135
136 dr = kmalloc(sizeof(struct usb_ctrlrequest), GFP_NOIO);
133 if (!dr) 137 if (!dr)
134 return -ENOMEM; 138 return -ENOMEM;
135 139
136 dr->bRequestType= requesttype; 140 dr->bRequestType = requesttype;
137 dr->bRequest = request; 141 dr->bRequest = request;
138 dr->wValue = cpu_to_le16p(&value); 142 dr->wValue = cpu_to_le16p(&value);
139 dr->wIndex = cpu_to_le16p(&index); 143 dr->wIndex = cpu_to_le16p(&index);
140 dr->wLength = cpu_to_le16p(&size); 144 dr->wLength = cpu_to_le16p(&size);
141 145
142 //dbg("usb_control_msg"); 146 /* dbg("usb_control_msg"); */
143 147
144 ret = usb_internal_control_msg(dev, pipe, dr, data, size, timeout); 148 ret = usb_internal_control_msg(dev, pipe, dr, data, size, timeout);
145 149
@@ -155,9 +159,11 @@ EXPORT_SYMBOL_GPL(usb_control_msg);
155 * @pipe: endpoint "pipe" to send the message to 159 * @pipe: endpoint "pipe" to send the message to
156 * @data: pointer to the data to send 160 * @data: pointer to the data to send
157 * @len: length in bytes of the data to send 161 * @len: length in bytes of the data to send
158 * @actual_length: pointer to a location to put the actual length transferred in bytes 162 * @actual_length: pointer to a location to put the actual length transferred
163 * in bytes
159 * @timeout: time in msecs to wait for the message to complete before 164 * @timeout: time in msecs to wait for the message to complete before
160 * timing out (if 0 the wait is forever) 165 * timing out (if 0 the wait is forever)
166 *
161 * Context: !in_interrupt () 167 * Context: !in_interrupt ()
162 * 168 *
163 * This function sends a simple interrupt message to a specified endpoint and 169 * This function sends a simple interrupt message to a specified endpoint and
@@ -181,38 +187,38 @@ int usb_interrupt_msg(struct usb_device *usb_dev, unsigned int pipe,
181EXPORT_SYMBOL_GPL(usb_interrupt_msg); 187EXPORT_SYMBOL_GPL(usb_interrupt_msg);
182 188
183/** 189/**
184 * usb_bulk_msg - Builds a bulk urb, sends it off and waits for completion 190 * usb_bulk_msg - Builds a bulk urb, sends it off and waits for completion
185 * @usb_dev: pointer to the usb device to send the message to 191 * @usb_dev: pointer to the usb device to send the message to
186 * @pipe: endpoint "pipe" to send the message to 192 * @pipe: endpoint "pipe" to send the message to
187 * @data: pointer to the data to send 193 * @data: pointer to the data to send
188 * @len: length in bytes of the data to send 194 * @len: length in bytes of the data to send
189 * @actual_length: pointer to a location to put the actual length transferred in bytes 195 * @actual_length: pointer to a location to put the actual length transferred
190 * @timeout: time in msecs to wait for the message to complete before 196 * in bytes
191 * timing out (if 0 the wait is forever) 197 * @timeout: time in msecs to wait for the message to complete before
192 * Context: !in_interrupt () 198 * timing out (if 0 the wait is forever)
193 * 199 *
194 * This function sends a simple bulk message to a specified endpoint 200 * Context: !in_interrupt ()
195 * and waits for the message to complete, or timeout. 201 *
196 * 202 * This function sends a simple bulk message to a specified endpoint
197 * If successful, it returns 0, otherwise a negative error number. 203 * and waits for the message to complete, or timeout.
198 * The number of actual bytes transferred will be stored in the 204 *
199 * actual_length paramater. 205 * If successful, it returns 0, otherwise a negative error number. The number
200 * 206 * of actual bytes transferred will be stored in the actual_length paramater.
201 * Don't use this function from within an interrupt context, like a 207 *
202 * bottom half handler. If you need an asynchronous message, or need to 208 * Don't use this function from within an interrupt context, like a bottom half
203 * send a message from within interrupt context, use usb_submit_urb() 209 * handler. If you need an asynchronous message, or need to send a message
204 * If a thread in your driver uses this call, make sure your disconnect() 210 * from within interrupt context, use usb_submit_urb() If a thread in your
205 * method can wait for it to complete. Since you don't have a handle on 211 * driver uses this call, make sure your disconnect() method can wait for it to
206 * the URB used, you can't cancel the request. 212 * complete. Since you don't have a handle on the URB used, you can't cancel
207 * 213 * the request.
208 * Because there is no usb_interrupt_msg() and no USBDEVFS_INTERRUPT 214 *
209 * ioctl, users are forced to abuse this routine by using it to submit 215 * Because there is no usb_interrupt_msg() and no USBDEVFS_INTERRUPT ioctl,
210 * URBs for interrupt endpoints. We will take the liberty of creating 216 * users are forced to abuse this routine by using it to submit URBs for
211 * an interrupt URB (with the default interval) if the target is an 217 * interrupt endpoints. We will take the liberty of creating an interrupt URB
212 * interrupt endpoint. 218 * (with the default interval) if the target is an interrupt endpoint.
213 */ 219 */
214int usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe, 220int usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe,
215 void *data, int len, int *actual_length, int timeout) 221 void *data, int len, int *actual_length, int timeout)
216{ 222{
217 struct urb *urb; 223 struct urb *urb;
218 struct usb_host_endpoint *ep; 224 struct usb_host_endpoint *ep;
@@ -242,26 +248,26 @@ EXPORT_SYMBOL_GPL(usb_bulk_msg);
242 248
243/*-------------------------------------------------------------------*/ 249/*-------------------------------------------------------------------*/
244 250
245static void sg_clean (struct usb_sg_request *io) 251static void sg_clean(struct usb_sg_request *io)
246{ 252{
247 if (io->urbs) { 253 if (io->urbs) {
248 while (io->entries--) 254 while (io->entries--)
249 usb_free_urb (io->urbs [io->entries]); 255 usb_free_urb(io->urbs [io->entries]);
250 kfree (io->urbs); 256 kfree(io->urbs);
251 io->urbs = NULL; 257 io->urbs = NULL;
252 } 258 }
253 if (io->dev->dev.dma_mask != NULL) 259 if (io->dev->dev.dma_mask != NULL)
254 usb_buffer_unmap_sg (io->dev, usb_pipein(io->pipe), 260 usb_buffer_unmap_sg(io->dev, usb_pipein(io->pipe),
255 io->sg, io->nents); 261 io->sg, io->nents);
256 io->dev = NULL; 262 io->dev = NULL;
257} 263}
258 264
259static void sg_complete (struct urb *urb) 265static void sg_complete(struct urb *urb)
260{ 266{
261 struct usb_sg_request *io = urb->context; 267 struct usb_sg_request *io = urb->context;
262 int status = urb->status; 268 int status = urb->status;
263 269
264 spin_lock (&io->lock); 270 spin_lock(&io->lock);
265 271
266 /* In 2.5 we require hcds' endpoint queues not to progress after fault 272 /* In 2.5 we require hcds' endpoint queues not to progress after fault
267 * reports, until the completion callback (this!) returns. That lets 273 * reports, until the completion callback (this!) returns. That lets
@@ -277,13 +283,13 @@ static void sg_complete (struct urb *urb)
277 && (io->status != -ECONNRESET 283 && (io->status != -ECONNRESET
278 || status != -ECONNRESET) 284 || status != -ECONNRESET)
279 && urb->actual_length) { 285 && urb->actual_length) {
280 dev_err (io->dev->bus->controller, 286 dev_err(io->dev->bus->controller,
281 "dev %s ep%d%s scatterlist error %d/%d\n", 287 "dev %s ep%d%s scatterlist error %d/%d\n",
282 io->dev->devpath, 288 io->dev->devpath,
283 usb_endpoint_num(&urb->ep->desc), 289 usb_endpoint_num(&urb->ep->desc),
284 usb_urb_dir_in(urb) ? "in" : "out", 290 usb_urb_dir_in(urb) ? "in" : "out",
285 status, io->status); 291 status, io->status);
286 // BUG (); 292 /* BUG (); */
287 } 293 }
288 294
289 if (io->status == 0 && status && status != -ECONNRESET) { 295 if (io->status == 0 && status && status != -ECONNRESET) {
@@ -295,22 +301,22 @@ static void sg_complete (struct urb *urb)
295 * unlink pending urbs so they won't rx/tx bad data. 301 * unlink pending urbs so they won't rx/tx bad data.
296 * careful: unlink can sometimes be synchronous... 302 * careful: unlink can sometimes be synchronous...
297 */ 303 */
298 spin_unlock (&io->lock); 304 spin_unlock(&io->lock);
299 for (i = 0, found = 0; i < io->entries; i++) { 305 for (i = 0, found = 0; i < io->entries; i++) {
300 if (!io->urbs [i] || !io->urbs [i]->dev) 306 if (!io->urbs [i] || !io->urbs [i]->dev)
301 continue; 307 continue;
302 if (found) { 308 if (found) {
303 retval = usb_unlink_urb (io->urbs [i]); 309 retval = usb_unlink_urb(io->urbs [i]);
304 if (retval != -EINPROGRESS && 310 if (retval != -EINPROGRESS &&
305 retval != -ENODEV && 311 retval != -ENODEV &&
306 retval != -EBUSY) 312 retval != -EBUSY)
307 dev_err (&io->dev->dev, 313 dev_err(&io->dev->dev,
308 "%s, unlink --> %d\n", 314 "%s, unlink --> %d\n",
309 __FUNCTION__, retval); 315 __FUNCTION__, retval);
310 } else if (urb == io->urbs [i]) 316 } else if (urb == io->urbs [i])
311 found = 1; 317 found = 1;
312 } 318 }
313 spin_lock (&io->lock); 319 spin_lock(&io->lock);
314 } 320 }
315 urb->dev = NULL; 321 urb->dev = NULL;
316 322
@@ -318,9 +324,9 @@ static void sg_complete (struct urb *urb)
318 io->bytes += urb->actual_length; 324 io->bytes += urb->actual_length;
319 io->count--; 325 io->count--;
320 if (!io->count) 326 if (!io->count)
321 complete (&io->complete); 327 complete(&io->complete);
322 328
323 spin_unlock (&io->lock); 329 spin_unlock(&io->lock);
324} 330}
325 331
326 332
@@ -349,28 +355,21 @@ static void sg_complete (struct urb *urb)
349 * The request may be canceled with usb_sg_cancel(), either before or after 355 * The request may be canceled with usb_sg_cancel(), either before or after
350 * usb_sg_wait() is called. 356 * usb_sg_wait() is called.
351 */ 357 */
352int usb_sg_init ( 358int usb_sg_init(struct usb_sg_request *io, struct usb_device *dev,
353 struct usb_sg_request *io, 359 unsigned pipe, unsigned period, struct scatterlist *sg,
354 struct usb_device *dev, 360 int nents, size_t length, gfp_t mem_flags)
355 unsigned pipe,
356 unsigned period,
357 struct scatterlist *sg,
358 int nents,
359 size_t length,
360 gfp_t mem_flags
361)
362{ 361{
363 int i; 362 int i;
364 int urb_flags; 363 int urb_flags;
365 int dma; 364 int dma;
366 365
367 if (!io || !dev || !sg 366 if (!io || !dev || !sg
368 || usb_pipecontrol (pipe) 367 || usb_pipecontrol(pipe)
369 || usb_pipeisoc (pipe) 368 || usb_pipeisoc(pipe)
370 || nents <= 0) 369 || nents <= 0)
371 return -EINVAL; 370 return -EINVAL;
372 371
373 spin_lock_init (&io->lock); 372 spin_lock_init(&io->lock);
374 io->dev = dev; 373 io->dev = dev;
375 io->pipe = pipe; 374 io->pipe = pipe;
376 io->sg = sg; 375 io->sg = sg;
@@ -382,7 +381,7 @@ int usb_sg_init (
382 dma = (dev->dev.dma_mask != NULL); 381 dma = (dev->dev.dma_mask != NULL);
383 if (dma) 382 if (dma)
384 io->entries = usb_buffer_map_sg(dev, usb_pipein(pipe), 383 io->entries = usb_buffer_map_sg(dev, usb_pipein(pipe),
385 sg, nents); 384 sg, nents);
386 else 385 else
387 io->entries = nents; 386 io->entries = nents;
388 387
@@ -391,30 +390,30 @@ int usb_sg_init (
391 return io->entries; 390 return io->entries;
392 391
393 io->count = io->entries; 392 io->count = io->entries;
394 io->urbs = kmalloc (io->entries * sizeof *io->urbs, mem_flags); 393 io->urbs = kmalloc(io->entries * sizeof *io->urbs, mem_flags);
395 if (!io->urbs) 394 if (!io->urbs)
396 goto nomem; 395 goto nomem;
397 396
398 urb_flags = URB_NO_TRANSFER_DMA_MAP | URB_NO_INTERRUPT; 397 urb_flags = URB_NO_TRANSFER_DMA_MAP | URB_NO_INTERRUPT;
399 if (usb_pipein (pipe)) 398 if (usb_pipein(pipe))
400 urb_flags |= URB_SHORT_NOT_OK; 399 urb_flags |= URB_SHORT_NOT_OK;
401 400
402 for (i = 0; i < io->entries; i++) { 401 for (i = 0; i < io->entries; i++) {
403 unsigned len; 402 unsigned len;
404 403
405 io->urbs [i] = usb_alloc_urb (0, mem_flags); 404 io->urbs[i] = usb_alloc_urb(0, mem_flags);
406 if (!io->urbs [i]) { 405 if (!io->urbs[i]) {
407 io->entries = i; 406 io->entries = i;
408 goto nomem; 407 goto nomem;
409 } 408 }
410 409
411 io->urbs [i]->dev = NULL; 410 io->urbs[i]->dev = NULL;
412 io->urbs [i]->pipe = pipe; 411 io->urbs[i]->pipe = pipe;
413 io->urbs [i]->interval = period; 412 io->urbs[i]->interval = period;
414 io->urbs [i]->transfer_flags = urb_flags; 413 io->urbs[i]->transfer_flags = urb_flags;
415 414
416 io->urbs [i]->complete = sg_complete; 415 io->urbs[i]->complete = sg_complete;
417 io->urbs [i]->context = io; 416 io->urbs[i]->context = io;
418 417
419 /* 418 /*
420 * Some systems need to revert to PIO when DMA is temporarily 419 * Some systems need to revert to PIO when DMA is temporarily
@@ -433,8 +432,8 @@ int usb_sg_init (
433 * to prevent stale pointers and to help spot bugs. 432 * to prevent stale pointers and to help spot bugs.
434 */ 433 */
435 if (dma) { 434 if (dma) {
436 io->urbs [i]->transfer_dma = sg_dma_address (sg + i); 435 io->urbs[i]->transfer_dma = sg_dma_address(sg + i);
437 len = sg_dma_len (sg + i); 436 len = sg_dma_len(sg + i);
438#if defined(CONFIG_HIGHMEM) || defined(CONFIG_GART_IOMMU) 437#if defined(CONFIG_HIGHMEM) || defined(CONFIG_GART_IOMMU)
439 io->urbs[i]->transfer_buffer = NULL; 438 io->urbs[i]->transfer_buffer = NULL;
440#else 439#else
@@ -442,28 +441,28 @@ int usb_sg_init (
442#endif 441#endif
443 } else { 442 } else {
444 /* hc may use _only_ transfer_buffer */ 443 /* hc may use _only_ transfer_buffer */
445 io->urbs [i]->transfer_buffer = sg_virt(&sg[i]); 444 io->urbs[i]->transfer_buffer = sg_virt(&sg[i]);
446 len = sg [i].length; 445 len = sg[i].length;
447 } 446 }
448 447
449 if (length) { 448 if (length) {
450 len = min_t (unsigned, len, length); 449 len = min_t(unsigned, len, length);
451 length -= len; 450 length -= len;
452 if (length == 0) 451 if (length == 0)
453 io->entries = i + 1; 452 io->entries = i + 1;
454 } 453 }
455 io->urbs [i]->transfer_buffer_length = len; 454 io->urbs[i]->transfer_buffer_length = len;
456 } 455 }
457 io->urbs [--i]->transfer_flags &= ~URB_NO_INTERRUPT; 456 io->urbs[--i]->transfer_flags &= ~URB_NO_INTERRUPT;
458 457
459 /* transaction state */ 458 /* transaction state */
460 io->status = 0; 459 io->status = 0;
461 io->bytes = 0; 460 io->bytes = 0;
462 init_completion (&io->complete); 461 init_completion(&io->complete);
463 return 0; 462 return 0;
464 463
465nomem: 464nomem:
466 sg_clean (io); 465 sg_clean(io);
467 return -ENOMEM; 466 return -ENOMEM;
468} 467}
469EXPORT_SYMBOL_GPL(usb_sg_init); 468EXPORT_SYMBOL_GPL(usb_sg_init);
@@ -507,31 +506,32 @@ EXPORT_SYMBOL_GPL(usb_sg_init);
507 * speed interrupt endpoints, which allow at most one packet per millisecond, 506 * speed interrupt endpoints, which allow at most one packet per millisecond,
508 * of at most 8 or 64 bytes (respectively). 507 * of at most 8 or 64 bytes (respectively).
509 */ 508 */
510void usb_sg_wait (struct usb_sg_request *io) 509void usb_sg_wait(struct usb_sg_request *io)
511{ 510{
512 int i, entries = io->entries; 511 int i;
512 int entries = io->entries;
513 513
514 /* queue the urbs. */ 514 /* queue the urbs. */
515 spin_lock_irq (&io->lock); 515 spin_lock_irq(&io->lock);
516 i = 0; 516 i = 0;
517 while (i < entries && !io->status) { 517 while (i < entries && !io->status) {
518 int retval; 518 int retval;
519 519
520 io->urbs [i]->dev = io->dev; 520 io->urbs[i]->dev = io->dev;
521 retval = usb_submit_urb (io->urbs [i], GFP_ATOMIC); 521 retval = usb_submit_urb(io->urbs [i], GFP_ATOMIC);
522 522
523 /* after we submit, let completions or cancelations fire; 523 /* after we submit, let completions or cancelations fire;
524 * we handshake using io->status. 524 * we handshake using io->status.
525 */ 525 */
526 spin_unlock_irq (&io->lock); 526 spin_unlock_irq(&io->lock);
527 switch (retval) { 527 switch (retval) {
528 /* maybe we retrying will recover */ 528 /* maybe we retrying will recover */
529 case -ENXIO: // hc didn't queue this one 529 case -ENXIO: /* hc didn't queue this one */
530 case -EAGAIN: 530 case -EAGAIN:
531 case -ENOMEM: 531 case -ENOMEM:
532 io->urbs[i]->dev = NULL; 532 io->urbs[i]->dev = NULL;
533 retval = 0; 533 retval = 0;
534 yield (); 534 yield();
535 break; 535 break;
536 536
537 /* no error? continue immediately. 537 /* no error? continue immediately.
@@ -542,33 +542,33 @@ void usb_sg_wait (struct usb_sg_request *io)
542 */ 542 */
543 case 0: 543 case 0:
544 ++i; 544 ++i;
545 cpu_relax (); 545 cpu_relax();
546 break; 546 break;
547 547
548 /* fail any uncompleted urbs */ 548 /* fail any uncompleted urbs */
549 default: 549 default:
550 io->urbs [i]->dev = NULL; 550 io->urbs[i]->dev = NULL;
551 io->urbs [i]->status = retval; 551 io->urbs[i]->status = retval;
552 dev_dbg (&io->dev->dev, "%s, submit --> %d\n", 552 dev_dbg(&io->dev->dev, "%s, submit --> %d\n",
553 __FUNCTION__, retval); 553 __FUNCTION__, retval);
554 usb_sg_cancel (io); 554 usb_sg_cancel(io);
555 } 555 }
556 spin_lock_irq (&io->lock); 556 spin_lock_irq(&io->lock);
557 if (retval && (io->status == 0 || io->status == -ECONNRESET)) 557 if (retval && (io->status == 0 || io->status == -ECONNRESET))
558 io->status = retval; 558 io->status = retval;
559 } 559 }
560 io->count -= entries - i; 560 io->count -= entries - i;
561 if (io->count == 0) 561 if (io->count == 0)
562 complete (&io->complete); 562 complete(&io->complete);
563 spin_unlock_irq (&io->lock); 563 spin_unlock_irq(&io->lock);
564 564
565 /* OK, yes, this could be packaged as non-blocking. 565 /* OK, yes, this could be packaged as non-blocking.
566 * So could the submit loop above ... but it's easier to 566 * So could the submit loop above ... but it's easier to
567 * solve neither problem than to solve both! 567 * solve neither problem than to solve both!
568 */ 568 */
569 wait_for_completion (&io->complete); 569 wait_for_completion(&io->complete);
570 570
571 sg_clean (io); 571 sg_clean(io);
572} 572}
573EXPORT_SYMBOL_GPL(usb_sg_wait); 573EXPORT_SYMBOL_GPL(usb_sg_wait);
574 574
@@ -580,31 +580,31 @@ EXPORT_SYMBOL_GPL(usb_sg_wait);
580 * It can also prevents one initialized by usb_sg_init() from starting, 580 * It can also prevents one initialized by usb_sg_init() from starting,
581 * so that call just frees resources allocated to the request. 581 * so that call just frees resources allocated to the request.
582 */ 582 */
583void usb_sg_cancel (struct usb_sg_request *io) 583void usb_sg_cancel(struct usb_sg_request *io)
584{ 584{
585 unsigned long flags; 585 unsigned long flags;
586 586
587 spin_lock_irqsave (&io->lock, flags); 587 spin_lock_irqsave(&io->lock, flags);
588 588
589 /* shut everything down, if it didn't already */ 589 /* shut everything down, if it didn't already */
590 if (!io->status) { 590 if (!io->status) {
591 int i; 591 int i;
592 592
593 io->status = -ECONNRESET; 593 io->status = -ECONNRESET;
594 spin_unlock (&io->lock); 594 spin_unlock(&io->lock);
595 for (i = 0; i < io->entries; i++) { 595 for (i = 0; i < io->entries; i++) {
596 int retval; 596 int retval;
597 597
598 if (!io->urbs [i]->dev) 598 if (!io->urbs [i]->dev)
599 continue; 599 continue;
600 retval = usb_unlink_urb (io->urbs [i]); 600 retval = usb_unlink_urb(io->urbs [i]);
601 if (retval != -EINPROGRESS && retval != -EBUSY) 601 if (retval != -EINPROGRESS && retval != -EBUSY)
602 dev_warn (&io->dev->dev, "%s, unlink --> %d\n", 602 dev_warn(&io->dev->dev, "%s, unlink --> %d\n",
603 __FUNCTION__, retval); 603 __FUNCTION__, retval);
604 } 604 }
605 spin_lock (&io->lock); 605 spin_lock(&io->lock);
606 } 606 }
607 spin_unlock_irqrestore (&io->lock, flags); 607 spin_unlock_irqrestore(&io->lock, flags);
608} 608}
609EXPORT_SYMBOL_GPL(usb_sg_cancel); 609EXPORT_SYMBOL_GPL(usb_sg_cancel);
610 610
@@ -632,12 +632,13 @@ EXPORT_SYMBOL_GPL(usb_sg_cancel);
632 * Returns the number of bytes received on success, or else the status code 632 * Returns the number of bytes received on success, or else the status code
633 * returned by the underlying usb_control_msg() call. 633 * returned by the underlying usb_control_msg() call.
634 */ 634 */
635int usb_get_descriptor(struct usb_device *dev, unsigned char type, unsigned char index, void *buf, int size) 635int usb_get_descriptor(struct usb_device *dev, unsigned char type,
636 unsigned char index, void *buf, int size)
636{ 637{
637 int i; 638 int i;
638 int result; 639 int result;
639 640
640 memset(buf,0,size); // Make sure we parse really received data 641 memset(buf, 0, size); /* Make sure we parse really received data */
641 642
642 for (i = 0; i < 3; ++i) { 643 for (i = 0; i < 3; ++i) {
643 /* retry on length 0 or error; some devices are flakey */ 644 /* retry on length 0 or error; some devices are flakey */
@@ -712,7 +713,7 @@ static void usb_try_string_workarounds(unsigned char *buf, int *length)
712} 713}
713 714
714static int usb_string_sub(struct usb_device *dev, unsigned int langid, 715static int usb_string_sub(struct usb_device *dev, unsigned int langid,
715 unsigned int index, unsigned char *buf) 716 unsigned int index, unsigned char *buf)
716{ 717{
717 int rc; 718 int rc;
718 719
@@ -755,7 +756,7 @@ static int usb_string_sub(struct usb_device *dev, unsigned int langid,
755 * @buf: where to put the string 756 * @buf: where to put the string
756 * @size: how big is "buf"? 757 * @size: how big is "buf"?
757 * Context: !in_interrupt () 758 * Context: !in_interrupt ()
758 * 759 *
759 * This converts the UTF-16LE encoded strings returned by devices, from 760 * This converts the UTF-16LE encoded strings returned by devices, from
760 * usb_get_string_descriptor(), to null-terminated ISO-8859-1 encoded ones 761 * usb_get_string_descriptor(), to null-terminated ISO-8859-1 encoded ones
761 * that are more usable in most kernel contexts. Note that all characters 762 * that are more usable in most kernel contexts. Note that all characters
@@ -791,23 +792,23 @@ int usb_string(struct usb_device *dev, int index, char *buf, size_t size)
791 if (!dev->have_langid) { 792 if (!dev->have_langid) {
792 err = usb_string_sub(dev, 0, 0, tbuf); 793 err = usb_string_sub(dev, 0, 0, tbuf);
793 if (err < 0) { 794 if (err < 0) {
794 dev_err (&dev->dev, 795 dev_err(&dev->dev,
795 "string descriptor 0 read error: %d\n", 796 "string descriptor 0 read error: %d\n",
796 err); 797 err);
797 goto errout; 798 goto errout;
798 } else if (err < 4) { 799 } else if (err < 4) {
799 dev_err (&dev->dev, "string descriptor 0 too short\n"); 800 dev_err(&dev->dev, "string descriptor 0 too short\n");
800 err = -EINVAL; 801 err = -EINVAL;
801 goto errout; 802 goto errout;
802 } else { 803 } else {
803 dev->have_langid = 1; 804 dev->have_langid = 1;
804 dev->string_langid = tbuf[2] | (tbuf[3]<< 8); 805 dev->string_langid = tbuf[2] | (tbuf[3] << 8);
805 /* always use the first langid listed */ 806 /* always use the first langid listed */
806 dev_dbg (&dev->dev, "default language 0x%04x\n", 807 dev_dbg(&dev->dev, "default language 0x%04x\n",
807 dev->string_langid); 808 dev->string_langid);
808 } 809 }
809 } 810 }
810 811
811 err = usb_string_sub(dev, dev->string_langid, index, tbuf); 812 err = usb_string_sub(dev, dev->string_langid, index, tbuf);
812 if (err < 0) 813 if (err < 0)
813 goto errout; 814 goto errout;
@@ -825,7 +826,9 @@ int usb_string(struct usb_device *dev, int index, char *buf, size_t size)
825 err = idx; 826 err = idx;
826 827
827 if (tbuf[1] != USB_DT_STRING) 828 if (tbuf[1] != USB_DT_STRING)
828 dev_dbg(&dev->dev, "wrong descriptor type %02x for string %d (\"%s\")\n", tbuf[1], index, buf); 829 dev_dbg(&dev->dev,
830 "wrong descriptor type %02x for string %d (\"%s\")\n",
831 tbuf[1], index, buf);
829 832
830 errout: 833 errout:
831 kfree(tbuf); 834 kfree(tbuf);
@@ -847,9 +850,15 @@ char *usb_cache_string(struct usb_device *udev, int index)
847 char *smallbuf = NULL; 850 char *smallbuf = NULL;
848 int len; 851 int len;
849 852
850 if (index > 0 && (buf = kmalloc(256, GFP_KERNEL)) != NULL) { 853 if (index <= 0)
851 if ((len = usb_string(udev, index, buf, 256)) > 0) { 854 return NULL;
852 if ((smallbuf = kmalloc(++len, GFP_KERNEL)) == NULL) 855
856 buf = kmalloc(256, GFP_KERNEL);
857 if (buf) {
858 len = usb_string(udev, index, buf, 256);
859 if (len > 0) {
860 smallbuf = kmalloc(++len, GFP_KERNEL);
861 if (!smallbuf)
853 return buf; 862 return buf;
854 memcpy(smallbuf, buf, len); 863 memcpy(smallbuf, buf, len);
855 } 864 }
@@ -888,7 +897,7 @@ int usb_get_device_descriptor(struct usb_device *dev, unsigned int size)
888 return -ENOMEM; 897 return -ENOMEM;
889 898
890 ret = usb_get_descriptor(dev, USB_DT_DEVICE, 0, desc, size); 899 ret = usb_get_descriptor(dev, USB_DT_DEVICE, 0, desc, size);
891 if (ret >= 0) 900 if (ret >= 0)
892 memcpy(&dev->descriptor, desc, size); 901 memcpy(&dev->descriptor, desc, size);
893 kfree(desc); 902 kfree(desc);
894 return ret; 903 return ret;
@@ -961,8 +970,8 @@ int usb_clear_halt(struct usb_device *dev, int pipe)
961{ 970{
962 int result; 971 int result;
963 int endp = usb_pipeendpoint(pipe); 972 int endp = usb_pipeendpoint(pipe);
964 973
965 if (usb_pipein (pipe)) 974 if (usb_pipein(pipe))
966 endp |= USB_DIR_IN; 975 endp |= USB_DIR_IN;
967 976
968 /* we don't care if it wasn't halted first. in fact some devices 977 /* we don't care if it wasn't halted first. in fact some devices
@@ -1045,7 +1054,7 @@ void usb_disable_interface(struct usb_device *dev, struct usb_interface *intf)
1045 } 1054 }
1046} 1055}
1047 1056
1048/* 1057/**
1049 * usb_disable_device - Disable all the endpoints for a USB device 1058 * usb_disable_device - Disable all the endpoints for a USB device
1050 * @dev: the device whose endpoints are being disabled 1059 * @dev: the device whose endpoints are being disabled
1051 * @skip_ep0: 0 to disable endpoint 0, 1 to skip it. 1060 * @skip_ep0: 0 to disable endpoint 0, 1 to skip it.
@@ -1060,7 +1069,7 @@ void usb_disable_device(struct usb_device *dev, int skip_ep0)
1060 int i; 1069 int i;
1061 1070
1062 dev_dbg(&dev->dev, "%s nuking %s URBs\n", __FUNCTION__, 1071 dev_dbg(&dev->dev, "%s nuking %s URBs\n", __FUNCTION__,
1063 skip_ep0 ? "non-ep0" : "all"); 1072 skip_ep0 ? "non-ep0" : "all");
1064 for (i = skip_ep0; i < 16; ++i) { 1073 for (i = skip_ep0; i < 16; ++i) {
1065 usb_disable_endpoint(dev, i); 1074 usb_disable_endpoint(dev, i);
1066 usb_disable_endpoint(dev, i + USB_DIR_IN); 1075 usb_disable_endpoint(dev, i + USB_DIR_IN);
@@ -1078,17 +1087,17 @@ void usb_disable_device(struct usb_device *dev, int skip_ep0)
1078 interface = dev->actconfig->interface[i]; 1087 interface = dev->actconfig->interface[i];
1079 if (!device_is_registered(&interface->dev)) 1088 if (!device_is_registered(&interface->dev))
1080 continue; 1089 continue;
1081 dev_dbg (&dev->dev, "unregistering interface %s\n", 1090 dev_dbg(&dev->dev, "unregistering interface %s\n",
1082 interface->dev.bus_id); 1091 interface->dev.bus_id);
1083 usb_remove_sysfs_intf_files(interface); 1092 usb_remove_sysfs_intf_files(interface);
1084 device_del (&interface->dev); 1093 device_del(&interface->dev);
1085 } 1094 }
1086 1095
1087 /* Now that the interfaces are unbound, nobody should 1096 /* Now that the interfaces are unbound, nobody should
1088 * try to access them. 1097 * try to access them.
1089 */ 1098 */
1090 for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) { 1099 for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) {
1091 put_device (&dev->actconfig->interface[i]->dev); 1100 put_device(&dev->actconfig->interface[i]->dev);
1092 dev->actconfig->interface[i] = NULL; 1101 dev->actconfig->interface[i] = NULL;
1093 } 1102 }
1094 dev->actconfig = NULL; 1103 dev->actconfig = NULL;
@@ -1097,8 +1106,7 @@ void usb_disable_device(struct usb_device *dev, int skip_ep0)
1097 } 1106 }
1098} 1107}
1099 1108
1100 1109/**
1101/*
1102 * usb_enable_endpoint - Enable an endpoint for USB communications 1110 * usb_enable_endpoint - Enable an endpoint for USB communications
1103 * @dev: the device whose interface is being enabled 1111 * @dev: the device whose interface is being enabled
1104 * @ep: the endpoint 1112 * @ep: the endpoint
@@ -1123,7 +1131,7 @@ void usb_enable_endpoint(struct usb_device *dev, struct usb_host_endpoint *ep)
1123 ep->enabled = 1; 1131 ep->enabled = 1;
1124} 1132}
1125 1133
1126/* 1134/**
1127 * usb_enable_interface - Enable all the endpoints for an interface 1135 * usb_enable_interface - Enable all the endpoints for an interface
1128 * @dev: the device whose interface is being enabled 1136 * @dev: the device whose interface is being enabled
1129 * @intf: pointer to the interface descriptor 1137 * @intf: pointer to the interface descriptor
@@ -1179,6 +1187,8 @@ int usb_set_interface(struct usb_device *dev, int interface, int alternate)
1179 struct usb_host_interface *alt; 1187 struct usb_host_interface *alt;
1180 int ret; 1188 int ret;
1181 int manual = 0; 1189 int manual = 0;
1190 unsigned int epaddr;
1191 unsigned int pipe;
1182 1192
1183 if (dev->state == USB_STATE_SUSPENDED) 1193 if (dev->state == USB_STATE_SUSPENDED)
1184 return -EHOSTUNREACH; 1194 return -EHOSTUNREACH;
@@ -1233,11 +1243,11 @@ int usb_set_interface(struct usb_device *dev, int interface, int alternate)
1233 int i; 1243 int i;
1234 1244
1235 for (i = 0; i < alt->desc.bNumEndpoints; i++) { 1245 for (i = 0; i < alt->desc.bNumEndpoints; i++) {
1236 unsigned int epaddr = 1246 epaddr = alt->endpoint[i].desc.bEndpointAddress;
1237 alt->endpoint[i].desc.bEndpointAddress; 1247 pipe = __create_pipe(dev,
1238 unsigned int pipe = 1248 USB_ENDPOINT_NUMBER_MASK & epaddr) |
1239 __create_pipe(dev, USB_ENDPOINT_NUMBER_MASK & epaddr) 1249 (usb_endpoint_out(epaddr) ?
1240 | (usb_endpoint_out(epaddr) ? USB_DIR_OUT : USB_DIR_IN); 1250 USB_DIR_OUT : USB_DIR_IN);
1241 1251
1242 usb_clear_halt(dev, pipe); 1252 usb_clear_halt(dev, pipe);
1243 } 1253 }
@@ -1366,7 +1376,8 @@ static int usb_if_uevent(struct device *dev, struct kobj_uevent_env *env)
1366 return -ENOMEM; 1376 return -ENOMEM;
1367 1377
1368 if (add_uevent_var(env, 1378 if (add_uevent_var(env,
1369 "MODALIAS=usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02Xic%02Xisc%02Xip%02X", 1379 "MODALIAS=usb:"
1380 "v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02Xic%02Xisc%02Xip%02X",
1370 le16_to_cpu(usb_dev->descriptor.idVendor), 1381 le16_to_cpu(usb_dev->descriptor.idVendor),
1371 le16_to_cpu(usb_dev->descriptor.idProduct), 1382 le16_to_cpu(usb_dev->descriptor.idProduct),
1372 le16_to_cpu(usb_dev->descriptor.bcdDevice), 1383 le16_to_cpu(usb_dev->descriptor.bcdDevice),
@@ -1396,8 +1407,8 @@ struct device_type usb_if_device_type = {
1396}; 1407};
1397 1408
1398static struct usb_interface_assoc_descriptor *find_iad(struct usb_device *dev, 1409static struct usb_interface_assoc_descriptor *find_iad(struct usb_device *dev,
1399 struct usb_host_config *config, 1410 struct usb_host_config *config,
1400 u8 inum) 1411 u8 inum)
1401{ 1412{
1402 struct usb_interface_assoc_descriptor *retval = NULL; 1413 struct usb_interface_assoc_descriptor *retval = NULL;
1403 struct usb_interface_assoc_descriptor *intf_assoc; 1414 struct usb_interface_assoc_descriptor *intf_assoc;
@@ -1424,7 +1435,6 @@ static struct usb_interface_assoc_descriptor *find_iad(struct usb_device *dev,
1424 return retval; 1435 return retval;
1425} 1436}
1426 1437
1427
1428/* 1438/*
1429 * usb_set_configuration - Makes a particular device setting be current 1439 * usb_set_configuration - Makes a particular device setting be current
1430 * @dev: the device whose configuration is being updated 1440 * @dev: the device whose configuration is being updated
@@ -1542,12 +1552,12 @@ free_interfaces:
1542 * getting rid of old interfaces means unbinding their drivers. 1552 * getting rid of old interfaces means unbinding their drivers.
1543 */ 1553 */
1544 if (dev->state != USB_STATE_ADDRESS) 1554 if (dev->state != USB_STATE_ADDRESS)
1545 usb_disable_device (dev, 1); // Skip ep0 1555 usb_disable_device(dev, 1); /* Skip ep0 */
1546
1547 if ((ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
1548 USB_REQ_SET_CONFIGURATION, 0, configuration, 0,
1549 NULL, 0, USB_CTRL_SET_TIMEOUT)) < 0) {
1550 1556
1557 ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
1558 USB_REQ_SET_CONFIGURATION, 0, configuration, 0,
1559 NULL, 0, USB_CTRL_SET_TIMEOUT);
1560 if (ret < 0) {
1551 /* All the old state is gone, so what else can we do? 1561 /* All the old state is gone, so what else can we do?
1552 * The device is probably useless now anyway. 1562 * The device is probably useless now anyway.
1553 */ 1563 */
@@ -1594,11 +1604,11 @@ free_interfaces:
1594 intf->dev.bus = &usb_bus_type; 1604 intf->dev.bus = &usb_bus_type;
1595 intf->dev.type = &usb_if_device_type; 1605 intf->dev.type = &usb_if_device_type;
1596 intf->dev.dma_mask = dev->dev.dma_mask; 1606 intf->dev.dma_mask = dev->dev.dma_mask;
1597 device_initialize (&intf->dev); 1607 device_initialize(&intf->dev);
1598 mark_quiesced(intf); 1608 mark_quiesced(intf);
1599 sprintf (&intf->dev.bus_id[0], "%d-%s:%d.%d", 1609 sprintf(&intf->dev.bus_id[0], "%d-%s:%d.%d",
1600 dev->bus->busnum, dev->devpath, 1610 dev->bus->busnum, dev->devpath,
1601 configuration, alt->desc.bInterfaceNumber); 1611 configuration, alt->desc.bInterfaceNumber);
1602 } 1612 }
1603 kfree(new_interfaces); 1613 kfree(new_interfaces);
1604 1614
@@ -1614,11 +1624,11 @@ free_interfaces:
1614 for (i = 0; i < nintf; ++i) { 1624 for (i = 0; i < nintf; ++i) {
1615 struct usb_interface *intf = cp->interface[i]; 1625 struct usb_interface *intf = cp->interface[i];
1616 1626
1617 dev_dbg (&dev->dev, 1627 dev_dbg(&dev->dev,
1618 "adding %s (config #%d, interface %d)\n", 1628 "adding %s (config #%d, interface %d)\n",
1619 intf->dev.bus_id, configuration, 1629 intf->dev.bus_id, configuration,
1620 intf->cur_altsetting->desc.bInterfaceNumber); 1630 intf->cur_altsetting->desc.bInterfaceNumber);
1621 ret = device_add (&intf->dev); 1631 ret = device_add(&intf->dev);
1622 if (ret != 0) { 1632 if (ret != 0) {
1623 dev_err(&dev->dev, "device_add(%s) --> %d\n", 1633 dev_err(&dev->dev, "device_add(%s) --> %d\n",
1624 intf->dev.bus_id, ret); 1634 intf->dev.bus_id, ret);