iPXE
usb.c
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2014 Michael Brown <mbrown@fensystems.co.uk>.
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License as
6  * published by the Free Software Foundation; either version 2 of the
7  * License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful, but
10  * WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17  * 02110-1301, USA.
18  *
19  * You can also choose to distribute this program under the terms of
20  * the Unmodified Binary Distribution Licence (as given in the file
21  * COPYING.UBDL), provided that you have satisfied its requirements.
22  */
23 
24 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
25 FILE_SECBOOT ( PERMITTED );
26 
27 #include <stdlib.h>
28 #include <stdio.h>
29 #include <string.h>
30 #include <strings.h>
31 #include <unistd.h>
32 #include <errno.h>
33 #include <assert.h>
34 #include <byteswap.h>
35 #include <ipxe/usb.h>
36 #include <ipxe/cdc.h>
37 
38 /** @file
39  *
40  * Universal Serial Bus (USB)
41  *
42  */
43 
44 /** List of USB buses */
46 
47 /** List of changed ports */
49 
50 /** List of halted endpoints */
52 
53 /******************************************************************************
54  *
55  * Utility functions
56  *
57  ******************************************************************************
58  */
59 
60 /**
61  * Get USB speed name (for debugging)
62  *
63  * @v speed Speed
64  * @ret name Speed name
65  */
66 static inline const char * usb_speed_name ( unsigned int speed ) {
67  static const char *exponents[4] = { "", "k", "M", "G" };
68  static char buf[ 10 /* "xxxxxXbps" + NUL */ ];
69  unsigned int mantissa;
70  unsigned int exponent;
71 
72  /* Extract mantissa and exponent */
73  mantissa = USB_SPEED_MANTISSA ( speed );
74  exponent = USB_SPEED_EXPONENT ( speed );
75 
76  /* Name speed */
77  switch ( speed ) {
78  case USB_SPEED_NONE: return "DETACHED";
79  case USB_SPEED_LOW: return "low";
80  case USB_SPEED_FULL: return "full";
81  case USB_SPEED_HIGH: return "high";
82  case USB_SPEED_SUPER: return "super";
83  default:
84  snprintf ( buf, sizeof ( buf ), "%d%sbps",
85  mantissa, exponents[exponent] );
86  return buf;
87  }
88 }
89 
90 /**
91  * Transcribe USB BCD-coded value (for debugging)
92  *
93  * @v bcd BCD-coded value
94  * @ret string Transcribed value
95  */
96 static inline const char * usb_bcd ( uint16_t bcd ) {
97  static char buf[ 6 /* "xx.xx" + NUL */ ];
98  uint8_t high = ( bcd >> 8 );
99  uint8_t low = ( bcd >> 0 );
100 
101  snprintf ( buf, sizeof ( buf ), "%x.%02x", high, low );
102  return buf;
103 }
104 
105 /******************************************************************************
106  *
107  * USB descriptors
108  *
109  ******************************************************************************
110  */
111 
112 /**
113  * Locate USB interface association descriptor
114  *
115  * @v config Configuraton descriptor
116  * @v first First interface number
117  * @ret desc Interface association descriptor, or NULL if not found
118  */
121  *config,
122  unsigned int first ) {
124 
125  /* Find a matching interface association descriptor */
126  for_each_config_descriptor ( desc, config ) {
127  if ( ( desc->header.type ==
129  ( desc->first == first ) )
130  return desc;
131  }
132  return NULL;
133 }
134 
135 /**
136  * Locate USB interface descriptor
137  *
138  * @v config Configuraton descriptor
139  * @v interface Interface number
140  * @v alternate Alternate setting
141  * @ret desc Interface descriptor, or NULL if not found
142  */
145  unsigned int interface, unsigned int alternate ) {
147 
148  /* Find a matching interface descriptor */
149  for_each_config_descriptor ( desc, config ) {
150  if ( ( desc->header.type == USB_INTERFACE_DESCRIPTOR ) &&
151  ( desc->interface == interface ) &&
152  ( desc->alternate == alternate ) )
153  return desc;
154  }
155  return NULL;
156 }
157 
158 /**
159  * Locate USB endpoint descriptor
160  *
161  * @v config Configuration descriptor
162  * @v interface Interface descriptor
163  * @v type Endpoint (internal) type
164  * @v index Endpoint index
165  * @ret desc Descriptor, or NULL if not found
166  */
170  unsigned int type, unsigned int index ) {
172  unsigned int attributes = ( type & USB_ENDPOINT_ATTR_TYPE_MASK );
173  unsigned int direction = ( type & USB_DIR_IN );
174 
175  /* Find a matching endpoint descriptor */
177  if ( ( desc->header.type == USB_ENDPOINT_DESCRIPTOR ) &&
178  ( ( desc->attributes &
180  ( ( desc->endpoint & USB_DIR_IN ) == direction ) &&
181  ( index-- == 0 ) )
182  return desc;
183  }
184  return NULL;
185 }
186 
187 /**
188  * Locate USB endpoint companion descriptor
189  *
190  * @v config Configuration descriptor
191  * @v desc Endpoint descriptor
192  * @ret descx Companion descriptor, or NULL if not found
193  */
196  struct usb_endpoint_descriptor *desc ) {
197  struct usb_endpoint_companion_descriptor *descx;
198 
199  /* Get companion descriptor, if present */
200  descx = container_of ( usb_next_descriptor ( &desc->header ),
202  header );
203  return ( ( usb_is_within_config ( config, &descx->header ) &&
205  ? descx : NULL );
206 }
207 
208 /******************************************************************************
209  *
210  * USB endpoint
211  *
212  ******************************************************************************
213  */
214 
215 /**
216  * Get USB endpoint name (for debugging)
217  *
218  * @v ep USB endpoint
219  * @ret name Endpoint name
220  */
221 const char * usb_endpoint_name ( struct usb_endpoint *ep ) {
222  static char buf[ 9 /* "EPxx OUT" + NUL */ ];
223  unsigned int address = ep->address;
224 
225  snprintf ( buf, sizeof ( buf ), "EP%d%s",
227  ( address ?
228  ( ( address & USB_ENDPOINT_IN ) ? " IN" : " OUT" ) : "" ));
229  return buf;
230 }
231 
232 /**
233  * Describe USB endpoint from device configuration
234  *
235  * @v ep USB endpoint
236  * @v config Configuration descriptor
237  * @v interface Interface descriptor
238  * @v type Endpoint (internal) type
239  * @v index Endpoint index
240  * @ret rc Return status code
241  */
243  struct usb_configuration_descriptor *config,
245  unsigned int type, unsigned int index ) {
246  struct usb_device *usb = ep->usb;
248  struct usb_endpoint_companion_descriptor *descx;
249  unsigned int sizes;
250  unsigned int burst;
251  unsigned int interval;
252  size_t mtu;
253 
254  /* Locate endpoint descriptor */
256  if ( ! desc )
257  return -ENOENT;
258 
259  /* Locate companion descriptor, if any */
260  descx = usb_endpoint_companion_descriptor ( config, desc );
261 
262  /* Calculate MTU and burst size */
263  sizes = le16_to_cpu ( desc->sizes );
264  mtu = USB_ENDPOINT_MTU ( sizes );
265  burst = ( descx ? descx->burst : USB_ENDPOINT_BURST ( sizes ) );
266 
267  /* Calculate interval */
268  if ( ( type & USB_ENDPOINT_ATTR_TYPE_MASK ) ==
270  if ( usb->speed >= USB_SPEED_HIGH ) {
271  /* 2^(desc->interval-1) is a microframe count */
272  interval = ( 1 << ( desc->interval - 1 ) );
273  } else {
274  /* desc->interval is a (whole) frame count */
275  interval = ( desc->interval << 3 );
276  }
277  } else {
278  /* desc->interval is a microframe count */
279  interval = desc->interval;
280  }
281 
282  /* Describe endpoint */
283  usb_endpoint_describe ( ep, desc->endpoint, desc->attributes,
284  mtu, burst, interval );
285  return 0;
286 }
287 
288 /**
289  * Open USB endpoint
290  *
291  * @v ep USB endpoint
292  * @ret rc Return status code
293  */
294 int usb_endpoint_open ( struct usb_endpoint *ep ) {
295  struct usb_device *usb = ep->usb;
296  unsigned int idx = USB_ENDPOINT_IDX ( ep->address );
297  int rc;
298 
299  /* Populate host controller operations */
300  ep->host = &usb->port->hub->bus->op->endpoint;
301 
302  /* Add to endpoint list */
303  if ( usb->ep[idx] != NULL ) {
304  DBGC ( usb, "USB %s %s is already open\n",
305  usb->name, usb_endpoint_name ( ep ) );
306  rc = -EALREADY;
307  goto err_already;
308  }
309  usb->ep[idx] = ep;
310  INIT_LIST_HEAD ( &ep->halted );
311 
312  /* Open endpoint */
313  if ( ( rc = ep->host->open ( ep ) ) != 0 ) {
314  DBGC ( usb, "USB %s %s could not open: %s\n", usb->name,
315  usb_endpoint_name ( ep ), strerror ( rc ) );
316  goto err_open;
317  }
318  ep->open = 1;
319 
320  DBGC2 ( usb, "USB %s %s opened with MTU %zd, burst %d, interval %d\n",
321  usb->name, usb_endpoint_name ( ep ), ep->mtu, ep->burst,
322  ep->interval );
323  return 0;
324 
325  ep->open = 0;
326  ep->host->close ( ep );
327  err_open:
328  usb->ep[idx] = NULL;
329  err_already:
330  if ( ep->max )
331  usb_flush ( ep );
332  return rc;
333 }
334 
335 /**
336  * Clear transaction translator (if applicable)
337  *
338  * @v ep USB endpoint
339  * @ret rc Return status code
340  */
341 static int usb_endpoint_clear_tt ( struct usb_endpoint *ep ) {
342  struct usb_device *usb = ep->usb;
343  struct usb_port *tt;
344  int rc;
345 
346  /* Do nothing if this is a periodic endpoint */
348  return 0;
349 
350  /* Do nothing if this endpoint is not behind a transaction translator */
352  if ( ! tt )
353  return 0;
354 
355  /* Clear transaction translator buffer */
356  if ( ( rc = tt->hub->driver->clear_tt ( tt->hub, tt, ep ) ) != 0 ) {
357  DBGC ( usb, "USB %s %s could not clear transaction translator: "
358  "%s\n", usb->name, usb_endpoint_name ( ep ),
359  strerror ( rc ) );
360  return rc;
361  }
362 
363  return 0;
364 }
365 
366 /**
367  * Clear endpoint halt (if applicable)
368  *
369  * @v ep USB endpoint
370  * @ret rc Return status code
371  */
373  struct usb_device *usb = ep->usb;
374  unsigned int type;
375  int rc;
376 
377  /* Clear transaction translator, if applicable */
378  if ( ( rc = usb_endpoint_clear_tt ( ep ) ) != 0 )
379  return rc;
380 
381  /* Clear endpoint halt (if applicable) */
383  if ( ( type != USB_ENDPOINT_ATTR_CONTROL ) &&
386  ep->address ) ) != 0 ) ) {
387  DBGC ( usb, "USB %s %s could not clear endpoint halt: %s\n",
388  usb->name, usb_endpoint_name ( ep ), strerror ( rc ) );
389  return rc;
390  }
391 
392  return 0;
393 }
394 
395 /**
396  * Close USB endpoint
397  *
398  * @v ep USB endpoint
399  */
401  struct usb_device *usb = ep->usb;
402  unsigned int idx = USB_ENDPOINT_IDX ( ep->address );
403 
404  /* Sanity checks */
405  assert ( usb->ep[idx] == ep );
406 
407  /* Close endpoint */
408  ep->open = 0;
409  ep->host->close ( ep );
410  assert ( ep->fill == 0 );
411 
412  /* Remove from endpoint list */
413  usb->ep[idx] = NULL;
414  list_del ( &ep->halted );
415 
416  /* Discard any recycled buffers, if applicable */
417  if ( ep->max )
418  usb_flush ( ep );
419 
420  /* Clear transaction translator, if applicable */
422 }
423 
424 /**
425  * Reset USB endpoint
426  *
427  * @v ep USB endpoint
428  * @ret rc Return status code
429  */
430 static int usb_endpoint_reset ( struct usb_endpoint *ep ) {
431  struct usb_device *usb = ep->usb;
432  int rc;
433 
434  /* Sanity check */
435  assert ( ! list_empty ( &ep->halted ) );
436 
437  /* Clear device halt, if applicable */
438  if ( ( rc = usb_endpoint_clear_halt ( ep ) ) != 0 )
439  return rc;
440 
441  /* Reset endpoint */
442  if ( ( rc = ep->host->reset ( ep ) ) != 0 ) {
443  DBGC ( usb, "USB %s %s could not reset: %s\n",
444  usb->name, usb_endpoint_name ( ep ), strerror ( rc ) );
445  return rc;
446  }
447 
448  /* Remove from list of halted endpoints */
449  list_del ( &ep->halted );
450  INIT_LIST_HEAD ( &ep->halted );
451 
452  DBGC ( usb, "USB %s %s reset\n",
453  usb->name, usb_endpoint_name ( ep ) );
454  return 0;
455 }
456 
457 /**
458  * Update endpoint MTU
459  *
460  * @v ep USB endpoint
461  * @v mtu New MTU
462  * @ret rc Return status code
463  */
464 static int usb_endpoint_mtu ( struct usb_endpoint *ep, size_t mtu ) {
465  struct usb_device *usb = ep->usb;
466  int rc;
467 
468  /* Update MTU */
469  ep->mtu = mtu;
470  if ( ( rc = ep->host->mtu ( ep ) ) != 0 ) {
471  DBGC ( usb, "USB %s %s could not update MTU: %s\n",
472  usb->name, usb_endpoint_name ( ep ), strerror ( rc ) );
473  return rc;
474  }
475 
476  return 0;
477 }
478 
479 /**
480  * Enqueue USB message transfer
481  *
482  * @v ep USB endpoint
483  * @v request Request
484  * @v value Value parameter
485  * @v index Index parameter
486  * @v iobuf I/O buffer
487  * @ret rc Return status code
488  *
489  * The I/O buffer must have sufficient headroom to contain a setup
490  * packet.
491  */
492 int usb_message ( struct usb_endpoint *ep, unsigned int request,
493  unsigned int value, unsigned int index,
494  struct io_buffer *iobuf ) {
495  struct usb_device *usb = ep->usb;
496  struct usb_port *port = usb->port;
497  struct usb_setup_packet *packet;
498  size_t len = iob_len ( iobuf );
499  int rc;
500 
501  /* Sanity check */
502  assert ( iob_headroom ( iobuf ) >= sizeof ( *packet ) );
503 
504  /* Fail immediately if device has been unplugged */
505  if ( port->disconnected )
506  return -ENODEV;
507 
508  /* Reset endpoint if required */
509  if ( ( ! list_empty ( &ep->halted ) ) &&
510  ( ( rc = usb_endpoint_reset ( ep ) ) != 0 ) )
511  return rc;
512 
513  /* Zero input data buffer (if applicable) */
514  if ( request & USB_DIR_IN )
515  memset ( iobuf->data, 0, len );
516 
517  /* Construct setup packet */
518  packet = iob_push ( iobuf, sizeof ( *packet ) );
519  packet->request = cpu_to_le16 ( request );
520  packet->value = cpu_to_le16 ( value );
521  packet->index = cpu_to_le16 ( index );
522  packet->len = cpu_to_le16 ( len );
523 
524  /* Enqueue message transfer */
525  if ( ( rc = ep->host->message ( ep, iobuf ) ) != 0 ) {
526  DBGC ( usb, "USB %s %s could not enqueue message transfer: "
527  "%s\n", usb->name, usb_endpoint_name ( ep ),
528  strerror ( rc ) );
529  return rc;
530  }
531 
532  /* Increment fill level */
533  ep->fill++;
534 
535  return 0;
536 }
537 
538 /**
539  * Enqueue USB stream transfer
540  *
541  * @v ep USB endpoint
542  * @v iobuf I/O buffer
543  * @v terminate Terminate using a short packet
544  * @ret rc Return status code
545  */
546 int usb_stream ( struct usb_endpoint *ep, struct io_buffer *iobuf,
547  int terminate ) {
548  struct usb_device *usb = ep->usb;
549  struct usb_port *port = usb->port;
550  int zlp;
551  int rc;
552 
553  /* Fail immediately if device has been unplugged */
554  if ( port->disconnected )
555  return -ENODEV;
556 
557  /* Reset endpoint if required */
558  if ( ( ! list_empty ( &ep->halted ) ) &&
559  ( ( rc = usb_endpoint_reset ( ep ) ) != 0 ) )
560  return rc;
561 
562  /* Append a zero-length packet if necessary */
563  zlp = terminate;
564  if ( iob_len ( iobuf ) & ( ep->mtu - 1 ) )
565  zlp = 0;
566 
567  /* Enqueue stream transfer */
568  if ( ( rc = ep->host->stream ( ep, iobuf, zlp ) ) != 0 ) {
569  DBGC ( usb, "USB %s %s could not enqueue stream transfer: %s\n",
570  usb->name, usb_endpoint_name ( ep ), strerror ( rc ) );
571  return rc;
572  }
573 
574  /* Increment fill level */
575  ep->fill++;
576 
577  return 0;
578 }
579 
580 /**
581  * Complete transfer (possibly with error)
582  *
583  * @v ep USB endpoint
584  * @v iobuf I/O buffer
585  * @v rc Completion status code
586  */
587 void usb_complete_err ( struct usb_endpoint *ep, struct io_buffer *iobuf,
588  int rc ) {
589  struct usb_device *usb = ep->usb;
590 
591  /* Decrement fill level */
592  assert ( ep->fill > 0 );
593  ep->fill--;
594 
595  /* Schedule reset, if applicable */
596  if ( ( rc != 0 ) && ep->open ) {
597  DBGC ( usb, "USB %s %s completion failed: %s\n",
598  usb->name, usb_endpoint_name ( ep ), strerror ( rc ) );
599  list_del ( &ep->halted );
601  }
602 
603  /* Report completion */
604  ep->driver->complete ( ep, iobuf, rc );
605 }
606 
607 /******************************************************************************
608  *
609  * Endpoint refilling
610  *
611  ******************************************************************************
612  */
613 
614 /**
615  * Prefill endpoint recycled buffer list
616  *
617  * @v ep USB endpoint
618  * @ret rc Return status code
619  */
620 int usb_prefill ( struct usb_endpoint *ep ) {
621  struct io_buffer *iobuf;
622  size_t reserve = ep->reserve;
623  size_t len = ( ep->len ? ep->len : ep->mtu );
624  unsigned int fill;
625  int rc;
626 
627  /* Sanity checks */
628  assert ( ep->fill == 0 );
629  assert ( ep->max > 0 );
630  assert ( list_empty ( &ep->recycled ) );
631 
632  /* Fill recycled buffer list */
633  for ( fill = 0 ; fill < ep->max ; fill++ ) {
634 
635  /* Allocate I/O buffer */
636  iobuf = alloc_iob ( reserve + len );
637  if ( ! iobuf ) {
638  rc = -ENOMEM;
639  goto err_alloc;
640  }
641  iob_reserve ( iobuf, reserve );
642 
643  /* Add to recycled buffer list */
644  list_add_tail ( &iobuf->list, &ep->recycled );
645  }
646 
647  return 0;
648 
649  err_alloc:
650  usb_flush ( ep );
651  return rc;
652 }
653 
654 /**
655  * Refill endpoint up to specified limit
656  *
657  * @v ep USB endpoint
658  * @v max Fill limit
659  * @ret rc Return status code
660  */
661 int usb_refill_limit ( struct usb_endpoint *ep, unsigned int max ) {
662  struct io_buffer *iobuf;
663  size_t reserve = ep->reserve;
664  size_t len = ( ep->len ? ep->len : ep->mtu );
665  int rc;
666 
667  /* Sanity checks */
668  assert ( ep->open );
669  assert ( ep->max > 0 );
670 
671  /* Refill endpoint */
672  if ( max > ep->max )
673  max = ep->max;
674  while ( ep->fill < max ) {
675 
676  /* Get or allocate buffer */
677  if ( list_empty ( &ep->recycled ) ) {
678  /* Recycled buffer list is empty; allocate new buffer */
679  iobuf = alloc_iob ( reserve + len );
680  if ( ! iobuf )
681  return -ENOMEM;
682  iob_reserve ( iobuf, reserve );
683  } else {
684  /* Get buffer from recycled buffer list */
685  iobuf = list_first_entry ( &ep->recycled,
686  struct io_buffer, list );
687  assert ( iobuf != NULL );
688  list_del ( &iobuf->list );
689  }
690 
691  /* Reset buffer to maximum size */
692  assert ( iob_len ( iobuf ) <= len );
693  iob_put ( iobuf, ( len - iob_len ( iobuf ) ) );
694 
695  /* Enqueue buffer */
696  if ( ( rc = usb_stream ( ep, iobuf, 0 ) ) != 0 ) {
697  list_add ( &iobuf->list, &ep->recycled );
698  return rc;
699  }
700  }
701 
702  return 0;
703 }
704 
705 /**
706  * Refill endpoint
707  *
708  * @v ep USB endpoint
709  * @ret rc Return status code
710  */
711 int usb_refill ( struct usb_endpoint *ep ) {
712  return usb_refill_limit ( ep, ep->max );
713 }
714 
715 /**
716  * Discard endpoint recycled buffer list
717  *
718  * @v ep USB endpoint
719  */
720 void usb_flush ( struct usb_endpoint *ep ) {
721  struct io_buffer *iobuf;
722  struct io_buffer *tmp;
723 
724  /* Sanity checks */
725  assert ( ! ep->open );
726  assert ( ep->max > 0 );
727 
728  /* Free all I/O buffers */
729  list_for_each_entry_safe ( iobuf, tmp, &ep->recycled, list ) {
730  list_del ( &iobuf->list );
731  free_iob ( iobuf );
732  }
733 }
734 
735 /******************************************************************************
736  *
737  * Control endpoint
738  *
739  ******************************************************************************
740  */
741 
742 /** USB control transfer pseudo-header */
744  /** Completion status */
745  int rc;
746 };
747 
748 /**
749  * Complete USB control transfer
750  *
751  * @v ep USB endpoint
752  * @v iobuf I/O buffer
753  * @v rc Completion status code
754  */
755 static void usb_control_complete ( struct usb_endpoint *ep,
756  struct io_buffer *iobuf, int rc ) {
757  struct usb_device *usb = ep->usb;
758  struct usb_control_pseudo_header *pshdr;
759 
760  /* Record completion status in buffer */
761  pshdr = iob_push ( iobuf, sizeof ( *pshdr ) );
762  pshdr->rc = rc;
763 
764  /* Add to list of completed I/O buffers */
765  list_add_tail ( &iobuf->list, &usb->complete );
766 }
767 
768 /** USB control endpoint driver operations */
771 };
772 
773 /**
774  * Issue USB control transaction
775  *
776  * @v usb USB device
777  * @v request Request
778  * @v value Value parameter
779  * @v index Index parameter
780  * @v data Data buffer (if any)
781  * @v len Length of data
782  * @ret rc Return status code
783  */
784 int usb_control ( struct usb_device *usb, unsigned int request,
785  unsigned int value, unsigned int index, void *data,
786  size_t len ) {
787  struct usb_bus *bus = usb->port->hub->bus;
788  struct usb_endpoint *ep = &usb->control;
789  struct io_buffer *iobuf;
790  struct io_buffer *cmplt;
791  union {
792  struct usb_setup_packet setup;
793  struct usb_control_pseudo_header pshdr;
794  } *headroom;
795  struct usb_control_pseudo_header *pshdr;
796  unsigned int i;
797  int rc;
798 
799  /* Allocate I/O buffer */
800  iobuf = alloc_iob ( sizeof ( *headroom ) + len );
801  if ( ! iobuf ) {
802  rc = -ENOMEM;
803  goto err_alloc;
804  }
805  iob_reserve ( iobuf, sizeof ( *headroom ) );
806  iob_put ( iobuf, len );
807  if ( request & USB_DIR_IN ) {
808  memset ( data, 0, len );
809  } else {
810  memcpy ( iobuf->data, data, len );
811  }
812 
813  /* Enqueue message */
814  if ( ( rc = usb_message ( ep, request, value, index, iobuf ) ) != 0 )
815  goto err_message;
816 
817  /* Wait for completion */
818  for ( i = 0 ; i < USB_CONTROL_MAX_WAIT_MS ; i++ ) {
819 
820  /* Poll bus */
821  usb_poll ( bus );
822 
823  /* Check for completion */
824  while ( ( cmplt = list_first_entry ( &usb->complete,
825  struct io_buffer,
826  list ) ) ) {
827 
828  /* Remove from completion list */
829  list_del ( &cmplt->list );
830 
831  /* Extract and strip completion status */
832  pshdr = cmplt->data;
833  iob_pull ( cmplt, sizeof ( *pshdr ) );
834  rc = pshdr->rc;
835 
836  /* Discard stale completions */
837  if ( cmplt != iobuf ) {
838  DBGC ( usb, "USB %s stale control completion: "
839  "%s\n", usb->name, strerror ( rc ) );
840  DBGC_HDA ( usb, 0, cmplt->data,
841  iob_len ( cmplt ) );
842  free_iob ( cmplt );
843  continue;
844  }
845 
846  /* Fail immediately if completion was in error */
847  if ( rc != 0 ) {
848  DBGC ( usb, "USB %s control %04x:%04x:%04x "
849  "failed: %s\n", usb->name, request,
850  value, index, strerror ( rc ) );
851  free_iob ( cmplt );
852  usb_endpoint_reset ( ep );
853  return rc;
854  }
855 
856  /* Copy completion to data buffer, if applicable */
857  assert ( iob_len ( cmplt ) <= len );
858  if ( request & USB_DIR_IN )
859  memcpy ( data, cmplt->data, iob_len ( cmplt ) );
860  free_iob ( cmplt );
861  return 0;
862  }
863 
864  /* Delay */
865  mdelay ( 1 );
866  }
867 
868  DBGC ( usb, "USB %s timed out waiting for control %04x:%04x:%04x\n",
869  usb->name, request, value, index );
870  return -ETIMEDOUT;
871 
872  err_message:
873  free_iob ( iobuf );
874  err_alloc:
875  return rc;
876 }
877 
878 /**
879  * Get default language ID
880  *
881  * @v usb USB device
882  * @ret language Language ID
883  */
884 static unsigned int usb_get_default_language ( struct usb_device *usb ) {
885  struct {
887  uint16_t language[1];
888  } __attribute__ (( packed )) desc;
889  unsigned int language;
890  int rc;
891 
892  /* Get descriptor */
893  if ( ( rc = usb_get_descriptor ( usb, 0, USB_STRING_DESCRIPTOR, 0, 0,
894  &desc.header, sizeof ( desc ) ) ) !=0){
895  DBGC ( usb, "USB %s has no default language: %s\n",
896  usb->name, strerror ( rc ) );
897  return USB_LANG_ENGLISH;
898  }
899 
900  /* Use first language ID */
901  language = le16_to_cpu ( desc.language[0] );
902  DBGC2 ( usb, "USB %s default language %#04x\n", usb->name, language );
903  return language;
904 }
905 
906 /**
907  * Get USB string descriptor
908  *
909  * @v usb USB device
910  * @v index String index
911  * @v language Language ID, or 0 to use default
912  * @v buf Data buffer
913  * @v len Length of buffer
914  * @ret len String length (excluding NUL), or negative error
915  */
916 int usb_get_string_descriptor ( struct usb_device *usb, unsigned int index,
917  unsigned int language, char *buf, size_t len ) {
918  struct {
920  uint16_t character[len];
921  } __attribute__ (( packed )) *desc;
922  unsigned int actual;
923  unsigned int i;
924  int rc;
925 
926  /* Use default language ID, if applicable */
927  if ( ( language == 0 ) && ( index != 0 ) ) {
928  if ( ! usb->language )
929  usb->language = usb_get_default_language ( usb );
930  language = usb->language;
931  }
932 
933  /* Allocate buffer for string */
934  desc = malloc ( sizeof ( *desc ) );
935  if ( ! desc ) {
936  rc = -ENOMEM;
937  goto err_alloc;
938  }
939 
940  /* Get descriptor */
941  if ( ( rc = usb_get_descriptor ( usb, 0, USB_STRING_DESCRIPTOR, index,
942  language, &desc->header,
943  sizeof ( *desc ) ) ) != 0 )
944  goto err_get_descriptor;
945 
946  /* Calculate string length */
947  if ( desc->header.len < sizeof ( desc->header ) ) {
948  rc = -EINVAL;
949  goto err_len;
950  }
951  actual = ( ( desc->header.len - sizeof ( desc->header ) ) /
952  sizeof ( desc->character[0] ) );
953 
954  /* Copy to buffer */
955  memset ( buf, 0, len );
956  for ( i = 0 ; ( ( i < actual ) && ( i < len ) ) ; i++ )
957  buf[i] = le16_to_cpu ( desc->character[i] );
958 
959  /* Free buffer */
960  free ( desc );
961 
962  return actual;
963 
964  err_len:
965  err_get_descriptor:
966  free ( desc );
967  err_alloc:
968  return rc;
969 }
970 
971 /******************************************************************************
972  *
973  * USB device driver
974  *
975  ******************************************************************************
976  */
977 
978 /**
979  * Get USB configuration descriptor
980  *
981  * @v usb USB device
982  * @v index Configuration index
983  * @ret config Configuration descriptor
984  * @ret rc Return status code
985  *
986  * The configuration descriptor is dynamically allocated and must
987  * eventually be freed by the caller.
988  */
989 static int
990 usb_config_descriptor ( struct usb_device *usb, unsigned int index,
991  struct usb_configuration_descriptor **config ) {
992  struct usb_configuration_descriptor partial;
993  size_t len;
994  int rc;
995 
996  /* Read first part of configuration descriptor to get size */
997  if ( ( rc = usb_get_config_descriptor ( usb, index, &partial,
998  sizeof ( partial ) ) ) != 0 ) {
999  DBGC ( usb, "USB %s could not get configuration descriptor %d: "
1000  "%s\n", usb->name, index, strerror ( rc ) );
1001  goto err_get_partial;
1002  }
1003  len = le16_to_cpu ( partial.len );
1004  if ( len < sizeof ( partial ) ) {
1005  DBGC ( usb, "USB %s underlength configuraton descriptor %d\n",
1006  usb->name, index );
1007  rc = -EINVAL;
1008  goto err_partial_len;
1009  }
1010 
1011  /* Allocate buffer for whole configuration descriptor */
1012  *config = malloc ( len );
1013  if ( ! *config ) {
1014  rc = -ENOMEM;
1015  goto err_alloc_config;
1016  }
1017 
1018  /* Read whole configuration descriptor */
1019  if ( ( rc = usb_get_config_descriptor ( usb, index, *config,
1020  len ) ) != 0 ) {
1021  DBGC ( usb, "USB %s could not get configuration descriptor %d: "
1022  "%s\n", usb->name, index, strerror ( rc ) );
1023  goto err_get_config_descriptor;
1024  }
1025  if ( (*config)->len != partial.len ) {
1026  DBGC ( usb, "USB %s bad configuration descriptor %d length\n",
1027  usb->name, index );
1028  rc = -EINVAL;
1029  goto err_config_len;
1030  }
1031 
1032  return 0;
1033 
1034  err_config_len:
1035  err_get_config_descriptor:
1036  free ( *config );
1037  err_alloc_config:
1038  err_partial_len:
1039  err_get_partial:
1040  return rc;
1041 }
1042 
1043 /**
1044  * Describe USB function
1045  *
1046  * @v usb USB device
1047  * @v config Configuration descriptor
1048  * @v first First interface number
1049  * @v interfaces Interface list to fill in
1050  * @v desc Function descriptor to fill in
1051  * @ret rc Return status code
1052  */
1053 static int usb_describe ( struct usb_device *usb,
1055  unsigned int first, uint8_t *interfaces,
1056  struct usb_function_descriptor *desc ) {
1057  struct usb_interface_association_descriptor *association;
1059  struct cdc_union_descriptor *cdc_union;
1060  unsigned int i;
1061 
1062  /* Fill in vendor and product ID */
1063  memset ( desc, 0, sizeof ( *desc ) );
1064  desc->vendor = le16_to_cpu ( usb->device.vendor );
1065  desc->product = le16_to_cpu ( usb->device.product );
1066 
1067  /* First, look for an interface association descriptor */
1068  association = usb_interface_association_descriptor ( config, first );
1069  if ( association ) {
1070 
1071  /* Sanity check */
1072  assert ( association->first == first );
1073  if ( ( first + association->count ) > config->interfaces ) {
1074  DBGC ( usb, "USB %s has invalid association [%d-%d)\n",
1075  usb->name, first, ( first + association->count));
1076  return -ERANGE;
1077  }
1078 
1079  /* Describe function */
1080  memcpy ( &desc->class.class, &association->class,
1081  sizeof ( desc->class.class ) );
1082  desc->count = association->count;
1083  for ( i = 0 ; i < association->count ; i++ )
1084  interfaces[i] = ( first + i );
1085  return 0;
1086  }
1087 
1088  /* Next, look for an interface descriptor */
1089  interface = usb_interface_descriptor ( config, first, 0 );
1090  if ( ! interface ) {
1091  DBGC ( usb, "USB %s has no descriptor for interface %d\n",
1092  usb->name, first );
1093  return -ENOENT;
1094  }
1095 
1096  /* Describe function */
1097  memcpy ( &desc->class.class, &interface->class,
1098  sizeof ( desc->class.class ) );
1099  desc->count = 1;
1100  interfaces[0] = first;
1101 
1102  /* Look for a CDC union descriptor, if applicable */
1103  if ( ( desc->class.class.class == USB_CLASS_CDC ) &&
1104  ( cdc_union = cdc_union_descriptor ( config, interface ) ) ) {
1105 
1106  /* Determine interface count */
1107  desc->count = ( ( cdc_union->header.len -
1108  offsetof ( typeof ( *cdc_union ),
1109  interface[0] ) ) /
1110  sizeof ( cdc_union->interface[0] ) );
1111  if ( desc->count > config->interfaces ) {
1112  DBGC ( usb, "USB %s has invalid union functional "
1113  "descriptor with %d interfaces\n",
1114  usb->name, desc->count );
1115  return -ERANGE;
1116  }
1117 
1118  /* Describe function */
1119  for ( i = 0 ; i < desc->count ; i++ ) {
1120  if ( cdc_union->interface[i] >= config->interfaces ) {
1121  DBGC ( usb, "USB %s has invalid union "
1122  "functional descriptor covering "
1123  "interface %d\n", usb->name,
1124  cdc_union->interface[i] );
1125  return -ERANGE;
1126  }
1127  interfaces[i] = cdc_union->interface[i];
1128  }
1129 
1130  return 0;
1131  }
1132 
1133  return 0;
1134 }
1135 
1136 /**
1137  * Update list of used interface
1138  *
1139  * @v usb USB device
1140  * @v count Number of interfaces
1141  * @v interface List of interfaces
1142  * @v used List of already-used interfaces
1143  * @ret rc Return status code
1144  */
1145 static int usb_used ( struct usb_device *usb, unsigned int count,
1146  uint8_t *interface, uint8_t *used ) {
1147  unsigned int i;
1148 
1149  for ( i = 0 ; i < count ; i++ ) {
1150  if ( used[interface[i]] ) {
1151  DBGC ( usb, "USB %s interface %d already in use\n",
1152  usb->name, interface[i] );
1153  return -EINVAL;
1154  }
1155  used[interface[i]] = 1;
1156  }
1157  return 0;
1158 }
1159 
1160 /**
1161  * Find USB device driver
1162  *
1163  * @v desc Function descriptor
1164  * @ret id USB device ID, or NULL
1165  * @ret driver USB device driver, or NULL
1166  */
1168  struct usb_device_id **id ) {
1169  struct usb_driver *driver;
1170  unsigned int i;
1171 
1172  /* Look for a matching driver */
1173  for_each_table_entry ( driver, USB_DRIVERS ) {
1174  for ( i = 0 ; i < driver->id_count ; i++ ) {
1175 
1176  /* Ignore non-matching driver class */
1177  if ( ( driver->class.class.scalar ^ desc->class.scalar )
1178  & driver->class.mask.scalar )
1179  continue;
1180 
1181  /* Look for a matching ID */
1182  *id = &driver->ids[i];
1183  if ( ( ( (*id)->vendor == desc->vendor ) ||
1184  ( (*id)->vendor == USB_ANY_ID ) ) &&
1185  ( ( (*id)->product == desc->product ) ||
1186  ( (*id)->product == USB_ANY_ID ) ) )
1187  return driver;
1188  }
1189  }
1190 
1191  /* Not found */
1192  *id = NULL;
1193  return NULL;
1194 }
1195 
1196 /**
1197  * Get USB device configuration score
1198  *
1199  * @v usb USB device
1200  * @v config Configuration descriptor
1201  * @ret score Device configuration score, or negative error
1202  */
1203 static int usb_score ( struct usb_device *usb,
1204  struct usb_configuration_descriptor *config ) {
1205  uint8_t used[config->interfaces];
1206  uint8_t interface[config->interfaces];
1208  struct usb_driver *driver;
1209  struct usb_device_id *id;
1210  unsigned int first;
1211  unsigned int score = 0;
1212  int rc;
1213 
1214  /* Identify each function in turn */
1215  memset ( used, 0, sizeof ( used ) );
1216  for ( first = 0 ; first < config->interfaces ; first++ ) {
1217 
1218  /* Skip interfaces already used */
1219  if ( used[first] )
1220  continue;
1221 
1222  /* Describe function */
1223  if ( ( rc = usb_describe ( usb, config, first, interface,
1224  &desc ) ) != 0 )
1225  return rc;
1226 
1227  /* Update used interfaces */
1228  if ( ( rc = usb_used ( usb, desc.count, interface,
1229  used ) ) != 0 )
1230  return rc;
1231 
1232  /* Look for a driver for this function */
1233  driver = usb_find_driver ( &desc, &id );
1234  if ( driver )
1235  score += driver->score;
1236  }
1237 
1238  return score;
1239 }
1240 
1241 /**
1242  * Probe USB device driver
1243  *
1244  * @v func USB function
1245  * @v config Configuration descriptor
1246  * @ret rc Return status code
1247  */
1248 static int usb_probe ( struct usb_function *func,
1249  struct usb_configuration_descriptor *config ) {
1250  struct usb_device *usb = func->usb;
1251  struct usb_driver *driver;
1252  struct usb_device_id *id;
1253  int rc;
1254 
1255  /* Identify driver */
1256  driver = usb_find_driver ( &func->desc, &id );
1257  if ( ! driver ) {
1258  DBGC ( usb, "USB %s %04x:%04x class %d:%d:%d has no driver\n",
1259  func->name, func->desc.vendor, func->desc.product,
1260  func->desc.class.class.class,
1261  func->desc.class.class.subclass,
1262  func->desc.class.class.protocol );
1263  return -ENOENT;
1264  }
1265 
1266  /* Record driver */
1267  func->driver = driver;
1268  func->id = id;
1269  func->dev.driver_name = id->name;
1270 
1271  /* Probe driver */
1272  if ( ( rc = driver->probe ( func, config ) ) != 0 ) {
1273  DBGC ( usb, "USB %s failed to probe driver %s: %s\n",
1274  func->name, id->name, strerror ( rc ) );
1275  return rc;
1276  }
1277 
1278  return 0;
1279 }
1280 
1281 /**
1282  * Remove USB device driver
1283  *
1284  * @v func USB function
1285  */
1286 static void usb_remove ( struct usb_function *func ) {
1287 
1288  /* Remove driver */
1289  func->driver->remove ( func );
1290 }
1291 
1292 /**
1293  * Probe all USB device drivers
1294  *
1295  * @v usb USB device
1296  * @v config Configuration descriptor
1297  */
1298 static void
1300  struct usb_configuration_descriptor *config ) {
1301  struct usb_bus *bus = usb->port->hub->bus;
1302  struct usb_function *func;
1303  uint8_t used[config->interfaces];
1304  unsigned int first;
1305  unsigned int i;
1306  int rc;
1307 
1308  /* Identify each function in turn */
1309  memset ( used, 0, sizeof ( used ) );
1310  for ( first = 0 ; first < config->interfaces ; first++ ) {
1311 
1312  /* Skip interfaces already used */
1313  if ( used[first] )
1314  continue;
1315 
1316  /* Allocate and initialise structure */
1317  func = zalloc ( sizeof ( *func ) +
1318  ( config->interfaces *
1319  sizeof ( func->interface[0] ) ) );
1320  if ( ! func )
1321  goto err_alloc;
1322  func->name = func->dev.name;
1323  func->usb = usb;
1324  func->dev.desc.bus_type = BUS_TYPE_USB;
1325  func->dev.desc.location =
1326  USB_BUSDEV ( bus->address, usb->address );
1327  func->dev.desc.vendor = le16_to_cpu ( usb->device.vendor );
1328  func->dev.desc.device = le16_to_cpu ( usb->device.product );
1329  snprintf ( func->dev.name, sizeof ( func->dev.name ),
1330  "%s-%d.%d", usb->name, config->config, first );
1331  INIT_LIST_HEAD ( &func->dev.children );
1332  func->dev.parent = bus->dev;
1333  list_add_tail ( &func->list, &usb->functions );
1334 
1335  /* Identify function */
1336  if ( ( rc = usb_describe ( usb, config, first, func->interface,
1337  &func->desc ) ) != 0 )
1338  goto err_describe;
1339  assert ( func->desc.count <= config->interfaces );
1340 
1341  /* Mark interfaces as used */
1342  if ( ( rc = usb_used ( usb, func->desc.count, func->interface,
1343  used ) ) != 0 )
1344  goto err_used;
1345 
1346  /* Probe device driver */
1347  if ( ( rc = usb_probe ( func, config ) ) != 0 )
1348  goto err_probe;
1349  DBGC ( usb, "USB %s %04x:%04x class %d:%d:%d interfaces ",
1350  func->name, func->desc.vendor, func->desc.product,
1351  func->desc.class.class.class,
1352  func->desc.class.class.subclass,
1353  func->desc.class.class.protocol );
1354  for ( i = 0 ; i < func->desc.count ; i++ )
1355  DBGC ( usb, "%s%d", ( i ? "," : "" ),
1356  func->interface[i] );
1357  DBGC ( usb, " using driver %s\n", func->dev.driver_name );
1358 
1359  /* Add to device hierarchy */
1360  list_add_tail ( &func->dev.siblings, &bus->dev->children );
1361 
1362  continue;
1363 
1364  list_del ( &func->dev.siblings );
1365  usb_remove ( func );
1366  err_probe:
1367  err_used:
1368  err_describe:
1369  list_del ( &func->list );
1370  free ( func );
1371  err_alloc:
1372  /* Continue registering other functions */
1373  continue;
1374  }
1375 }
1376 
1377 /**
1378  * Remove all device drivers
1379  *
1380  * @v usb USB device
1381  */
1382 static void usb_remove_all ( struct usb_device *usb ) {
1383  struct usb_function *func;
1384  struct usb_function *tmp;
1385 
1386  /* Remove all functions */
1388 
1389  /* Remove device driver */
1390  usb_remove ( func );
1391 
1392  /* Remove from device hierarchy */
1393  assert ( list_empty ( &func->dev.children ) );
1394  list_del ( &func->dev.siblings );
1395 
1396  /* Remove from list of functions */
1397  list_del ( &func->list );
1398 
1399  /* Free function */
1400  free ( func );
1401  }
1402 }
1403 
1404 /**
1405  * Clear USB device configuration
1406  *
1407  * @v usb USB device
1408  */
1409 static void usb_deconfigure ( struct usb_device *usb ) {
1410  unsigned int i;
1411 
1412  /* Remove device drivers */
1413  usb_remove_all ( usb );
1414 
1415  /* Sanity checks */
1416  for ( i = 0 ; i < ( sizeof ( usb->ep ) / sizeof ( usb->ep[0] ) ) ; i++){
1417  if ( i != USB_ENDPOINT_IDX ( USB_EP0_ADDRESS ) )
1418  assert ( usb->ep[i] == NULL );
1419  }
1420 
1421  /* Clear device configuration */
1422  usb_set_configuration ( usb, 0 );
1423 }
1424 
1425 /**
1426  * Choose our preferred USB device configuration
1427  *
1428  * @v usb USB device
1429  * @ret rc Return status code
1430  */
1431 static int usb_autoconfigure ( struct usb_device *usb ) {
1433  unsigned int preferred = 0;
1434  unsigned int index;
1435  int score;
1436  int best = 0;
1437  int rc;
1438 
1439  /* Calculate driver score for each configuration index */
1440  for ( index = 0 ; index < usb->device.configurations ; index++ ) {
1441 
1442  /* Read configuration descriptor */
1443  if ( ( rc = usb_config_descriptor ( usb, index,
1444  &config ) ) != 0 )
1445  goto err_config;
1446 
1447  /* Get score for this configuration */
1448  score = usb_score ( usb, config );
1449  if ( score < 0 ) {
1450  rc = score;
1451  goto err_score;
1452  }
1453  DBGC2 ( usb, "USB %s configuration %d score %d\n",
1454  usb->name, config->config, score );
1455 
1456  /* Record as preferred configuration, if applicable */
1457  if ( score > best ) {
1458  best = score;
1459  preferred = index;
1460  }
1461 
1462  /* Free configuration descriptor */
1463  free ( config );
1464  config = NULL;
1465  }
1466 
1467  /* Read preferred configuration descriptor */
1468  if ( ( rc = usb_config_descriptor ( usb, preferred, &config ) ) != 0 )
1469  goto err_preferred;
1470 
1471  /* Set configuration */
1472  if ( ( rc = usb_set_configuration ( usb, config->config ) ) != 0){
1473  DBGC ( usb, "USB %s could not set configuration %d: %s\n",
1474  usb->name, config->config, strerror ( rc ) );
1475  goto err_set_configuration;
1476  }
1477 
1478  /* Probe USB device drivers */
1479  usb_probe_all ( usb, config );
1480 
1481  /* Free configuration descriptor */
1482  free ( config );
1483 
1484  return 0;
1485 
1486  usb_remove_all ( usb );
1487  usb_set_configuration ( usb, 0 );
1488  err_set_configuration:
1489  free ( config );
1490  err_preferred:
1491  return rc;
1492 
1493  err_score:
1494  free ( config );
1495  err_config:
1496  return rc;
1497 }
1498 
1499 /******************************************************************************
1500  *
1501  * USB device
1502  *
1503  ******************************************************************************
1504  */
1505 
1506 /**
1507  * Allocate USB device
1508  *
1509  * @v port USB port
1510  * @ret usb USB device, or NULL on allocation failure
1511  */
1512 static struct usb_device * alloc_usb ( struct usb_port *port ) {
1513  struct usb_hub *hub = port->hub;
1514  struct usb_bus *bus = hub->bus;
1515  struct usb_device *usb;
1516 
1517  /* Allocate and initialise structure */
1518  usb = zalloc ( sizeof ( *usb ) );
1519  if ( ! usb )
1520  return NULL;
1521  snprintf ( usb->name, sizeof ( usb->name ), "%s%c%d", hub->name,
1522  ( hub->usb ? '.' : '-' ), port->address );
1523  usb->port = port;
1524  INIT_LIST_HEAD ( &usb->functions );
1525  usb->host = &bus->op->device;
1527  INIT_LIST_HEAD ( &usb->complete );
1528 
1529  return usb;
1530 }
1531 
1532 /**
1533  * Register USB device
1534  *
1535  * @v usb USB device
1536  * @ret rc Return status code
1537  */
1538 static int register_usb ( struct usb_device *usb ) {
1539  struct usb_port *port = usb->port;
1540  struct usb_hub *hub = port->hub;
1541  struct usb_bus *bus = hub->bus;
1542  unsigned int protocol;
1543  size_t mtu;
1544  int rc;
1545 
1546  /* Add to port */
1547  if ( port->usb != NULL ) {
1548  DBGC ( hub, "USB hub %s port %d is already registered to %s\n",
1549  hub->name, port->address, port->usb->name );
1550  rc = -EALREADY;
1551  goto err_already;
1552  }
1553  port->usb = usb;
1554 
1555  /* Add to bus device list */
1556  list_add_tail ( &usb->list, &bus->devices );
1557 
1558  /* Enable device */
1559  if ( ( rc = hub->driver->enable ( hub, port ) ) != 0 ) {
1560  DBGC ( hub, "USB hub %s port %d could not enable: %s\n",
1561  hub->name, port->address, strerror ( rc ) );
1562  goto err_enable;
1563  }
1564 
1565  /* Allow recovery interval since port may have been reset */
1567 
1568  /* Get device speed */
1569  if ( ( rc = hub->driver->speed ( hub, port ) ) != 0 ) {
1570  DBGC ( hub, "USB hub %s port %d could not get speed: %s\n",
1571  hub->name, port->address, strerror ( rc ) );
1572  goto err_speed;
1573  }
1574  usb->speed = port->speed;
1575  DBGC2 ( usb, "USB %s attached as %s-speed device\n",
1576  usb->name, usb_speed_name ( usb->speed ) );
1577 
1578  /* Open device */
1579  if ( ( rc = usb->host->open ( usb ) ) != 0 ) {
1580  DBGC ( usb, "USB %s could not open: %s\n",
1581  usb->name, strerror ( rc ) );
1582  goto err_open;
1583  }
1584 
1585  /* Describe control endpoint */
1586  mtu = USB_EP0_DEFAULT_MTU ( usb->speed );
1589  USB_EP0_INTERVAL );
1590 
1591  /* Open control endpoint */
1592  if ( ( rc = usb_endpoint_open ( &usb->control ) ) != 0 )
1593  goto err_open_control;
1594  assert ( usb_endpoint ( usb, USB_EP0_ADDRESS ) == &usb->control );
1595 
1596  /* Assign device address */
1597  if ( ( rc = usb->host->address ( usb ) ) != 0 ) {
1598  DBGC ( usb, "USB %s could not set address: %s\n",
1599  usb->name, strerror ( rc ) );
1600  goto err_address;
1601  }
1602  DBGC2 ( usb, "USB %s assigned address %d\n", usb->name, usb->address );
1603 
1604  /* Allow recovery interval after Set Address command */
1606 
1607  /* Read first part of device descriptor to get EP0 MTU */
1608  if ( ( rc = usb_get_mtu ( usb, &usb->device ) ) != 0 ) {
1609  DBGC ( usb, "USB %s could not get MTU: %s\n",
1610  usb->name, strerror ( rc ) );
1611  goto err_get_mtu;
1612  }
1613 
1614  /* Calculate EP0 MTU */
1615  protocol = le16_to_cpu ( usb->device.protocol );
1616  mtu = ( ( protocol < USB_PROTO_3_0 ) ?
1617  usb->device.mtu : ( 1 << usb->device.mtu ) );
1618  DBGC2 ( usb, "USB %s has control MTU %zd (guessed %zd)\n",
1619  usb->name, mtu, usb->control.mtu );
1620 
1621  /* Update MTU */
1622  if ( ( rc = usb_endpoint_mtu ( &usb->control, mtu ) ) != 0 )
1623  goto err_mtu;
1624 
1625  /* Read whole device descriptor */
1626  if ( ( rc = usb_get_device_descriptor ( usb, &usb->device ) ) != 0 ) {
1627  DBGC ( usb, "USB %s could not get device descriptor: %s\n",
1628  usb->name, strerror ( rc ) );
1629  goto err_get_device_descriptor;
1630  }
1631  DBGC ( usb, "USB %s addr %d %04x:%04x class %d:%d:%d (v%s, %s-speed, "
1632  "MTU %zd)\n", usb->name, usb->address,
1633  le16_to_cpu ( usb->device.vendor ),
1634  le16_to_cpu ( usb->device.product ), usb->device.class.class,
1636  usb_bcd ( le16_to_cpu ( usb->device.protocol ) ),
1637  usb_speed_name ( usb->speed ), usb->control.mtu );
1638 
1639  /* Configure device */
1640  if ( ( rc = usb_autoconfigure ( usb ) ) != 0 )
1641  goto err_autoconfigure;
1642 
1643  return 0;
1644 
1645  usb_deconfigure ( usb );
1646  err_autoconfigure:
1647  err_get_device_descriptor:
1648  err_mtu:
1649  err_get_mtu:
1650  err_address:
1651  usb_endpoint_close ( &usb->control );
1652  err_open_control:
1653  usb->host->close ( usb );
1654  err_open:
1655  err_speed:
1656  /* Leave port enabled on failure, to avoid an endless loop of
1657  * failed device registrations.
1658  */
1659  err_enable:
1660  list_del ( &usb->list );
1661  port->usb = NULL;
1662  err_already:
1663  return rc;
1664 }
1665 
1666 /**
1667  * Unregister USB device
1668  *
1669  * @v usb USB device
1670  */
1671 static void unregister_usb ( struct usb_device *usb ) {
1672  struct usb_port *port = usb->port;
1673  struct usb_hub *hub = port->hub;
1674  struct io_buffer *iobuf;
1675  struct io_buffer *tmp;
1676 
1677  DBGC ( usb, "USB %s addr %d %04x:%04x class %d:%d:%d removed\n",
1678  usb->name, usb->address, le16_to_cpu ( usb->device.vendor ),
1679  le16_to_cpu ( usb->device.product ), usb->device.class.class,
1680  usb->device.class.subclass, usb->device.class.protocol );
1681 
1682  /* Sanity checks */
1683  assert ( port->usb == usb );
1684 
1685  /* Clear device configuration */
1686  usb_deconfigure ( usb );
1687 
1688  /* Close control endpoint */
1689  usb_endpoint_close ( &usb->control );
1690 
1691  /* Discard any stale control completions */
1692  list_for_each_entry_safe ( iobuf, tmp, &usb->complete, list ) {
1693  list_del ( &iobuf->list );
1694  free_iob ( iobuf );
1695  }
1696 
1697  /* Close device */
1698  usb->host->close ( usb );
1699 
1700  /* Disable port */
1701  hub->driver->disable ( hub, port );
1702 
1703  /* Remove from bus device list */
1704  list_del ( &usb->list );
1705 
1706  /* Remove from port */
1707  port->usb = NULL;
1708 }
1709 
1710 /**
1711  * Free USB device
1712  *
1713  * @v usb USB device
1714  */
1715 static void free_usb ( struct usb_device *usb ) {
1716  unsigned int i;
1717 
1718  /* Sanity checks */
1719  for ( i = 0 ; i < ( sizeof ( usb->ep ) / sizeof ( usb->ep[0] ) ) ; i++ )
1720  assert ( usb->ep[i] == NULL );
1721  assert ( list_empty ( &usb->functions ) );
1722  assert ( list_empty ( &usb->complete ) );
1723 
1724  /* Free device */
1725  free ( usb );
1726 }
1727 
1728 /**
1729  * Find USB device by address
1730  *
1731  * @v bus USB bus
1732  * @v address Device address
1733  * @ret usb USB device, or NULL if not found
1734  */
1735 struct usb_device * find_usb ( struct usb_bus *bus, unsigned int address ) {
1736  struct usb_device *usb;
1737 
1738  /* Search for a matching non-zero address */
1739  list_for_each_entry ( usb, &bus->devices, list ) {
1740  if ( address && ( usb->address == address ) )
1741  return usb;
1742  }
1743 
1744  return NULL;
1745 }
1746 
1747 /******************************************************************************
1748  *
1749  * USB device hotplug event handling
1750  *
1751  ******************************************************************************
1752  */
1753 
1754 /**
1755  * Handle newly attached USB device
1756  *
1757  * @v port USB port
1758  * @ret rc Return status code
1759  */
1760 static int usb_attached ( struct usb_port *port ) {
1761  struct usb_device *usb;
1762  int rc;
1763 
1764  /* Mark port as attached */
1765  port->attached = 1;
1766 
1767  /* Sanity checks */
1768  assert ( port->usb == NULL );
1769 
1770  /* Allocate USB device */
1771  usb = alloc_usb ( port );
1772  if ( ! usb ) {
1773  rc = -ENOMEM;
1774  goto err_alloc;
1775  }
1776 
1777  /* Register USB device */
1778  if ( ( rc = register_usb ( usb ) ) != 0 )
1779  goto err_register;
1780 
1781  return 0;
1782 
1783  unregister_usb ( usb );
1784  err_register:
1785  free_usb ( usb );
1786  err_alloc:
1787  return rc;
1788 }
1789 
1790 /**
1791  * Handle newly detached USB device
1792  *
1793  * @v port USB port
1794  */
1795 static void usb_detached ( struct usb_port *port ) {
1796  struct usb_device *usb = port->usb;
1797 
1798  /* Mark port as detached */
1799  port->attached = 0;
1800 
1801  /* Do nothing if we have no USB device */
1802  if ( ! usb )
1803  return;
1804 
1805  /* Unregister USB device */
1806  unregister_usb ( usb );
1807 
1808  /* Free USB device */
1809  free_usb ( usb );
1810 }
1811 
1812 /**
1813  * Handle newly attached or detached USB device
1814  *
1815  * @v port USB port
1816  * @ret rc Return status code
1817  */
1818 static int usb_hotplugged ( struct usb_port *port ) {
1819  struct usb_hub *hub = port->hub;
1820  int rc;
1821 
1822  /* Get current port speed */
1823  if ( ( rc = hub->driver->speed ( hub, port ) ) != 0 ) {
1824  DBGC ( hub, "USB hub %s port %d could not get speed: %s\n",
1825  hub->name, port->address, strerror ( rc ) );
1826  /* Treat as a disconnection */
1827  port->disconnected = 1;
1828  port->speed = USB_SPEED_NONE;
1829  }
1830 
1831  /* Detach device, if applicable */
1832  if ( port->attached && ( port->disconnected || ! port->speed ) )
1833  usb_detached ( port );
1834 
1835  /* Clear any recorded disconnections */
1836  port->disconnected = 0;
1837 
1838  /* Attach device, if applicable */
1839  if ( port->speed && ( ! port->attached ) &&
1840  ( ( rc = usb_attached ( port ) ) != 0 ) )
1841  return rc;
1842 
1843  return 0;
1844 }
1845 
1846 /******************************************************************************
1847  *
1848  * USB process
1849  *
1850  ******************************************************************************
1851  */
1852 
1853 /**
1854  * Report port status change
1855  *
1856  * @v port USB port
1857  */
1858 void usb_port_changed ( struct usb_port *port ) {
1859 
1860  /* Record hub port status change */
1861  list_del ( &port->changed );
1862  list_add_tail ( &port->changed, &usb_changed );
1863 }
1864 
1865 /**
1866  * Handle newly attached or detached USB device
1867  *
1868  */
1869 static void usb_hotplug ( void ) {
1870  struct usb_port *port;
1871 
1872  /* Handle any changed ports, allowing for the fact that the
1873  * port list may change as we perform hotplug actions.
1874  */
1875  while ( ! list_empty ( &usb_changed ) ) {
1876 
1877  /* Get first changed port */
1879  changed );
1880  assert ( port != NULL );
1881 
1882  /* Remove from list of changed ports */
1883  list_del ( &port->changed );
1884  INIT_LIST_HEAD ( &port->changed );
1885 
1886  /* Perform appropriate hotplug action */
1887  usb_hotplugged ( port );
1888  }
1889 }
1890 
1891 /**
1892  * USB process
1893  *
1894  * @v process USB process
1895  */
1896 static void usb_step ( struct process *process __unused ) {
1897  struct usb_bus *bus;
1898  struct usb_endpoint *ep;
1899 
1900  /* Poll all buses */
1901  for_each_usb_bus ( bus )
1902  usb_poll ( bus );
1903 
1904  /* Attempt to reset first halted endpoint in list, if any. We
1905  * do not attempt to process the complete list, since this
1906  * would require extra code to allow for the facts that the
1907  * halted endpoint list may change as we do so, and that
1908  * resetting an endpoint may fail.
1909  */
1910  if ( ( ep = list_first_entry ( &usb_halted, struct usb_endpoint,
1911  halted ) ) != NULL )
1912  usb_endpoint_reset ( ep );
1913 
1914  /* Handle any changed ports */
1915  usb_hotplug();
1916 }
1917 
1918 /** USB process */
1919 PERMANENT_PROCESS ( usb_process, usb_step );
1920 
1921 /******************************************************************************
1922  *
1923  * USB hub
1924  *
1925  ******************************************************************************
1926  */
1927 
1928 /**
1929  * Allocate USB hub
1930  *
1931  * @v bus USB bus
1932  * @v usb Underlying USB device, if any
1933  * @v ports Number of ports
1934  * @v driver Hub driver operations
1935  * @ret hub USB hub, or NULL on allocation failure
1936  */
1937 struct usb_hub * alloc_usb_hub ( struct usb_bus *bus, struct usb_device *usb,
1938  unsigned int ports,
1939  struct usb_hub_driver_operations *driver ) {
1940  struct usb_hub *hub;
1941  struct usb_port *port;
1942  unsigned int i;
1943 
1944  /* Allocate and initialise structure */
1945  hub = zalloc ( sizeof ( *hub ) + ( ports * sizeof ( hub->port[0] ) ) );
1946  if ( ! hub )
1947  return NULL;
1948  hub->name = ( usb ? usb->name : bus->name );
1949  hub->bus = bus;
1950  hub->usb = usb;
1951  if ( usb )
1952  hub->protocol = usb->port->protocol;
1953  hub->ports = ports;
1954  hub->driver = driver;
1955  hub->host = &bus->op->hub;
1956 
1957  /* Initialise port list */
1958  for ( i = 1 ; i <= hub->ports ; i++ ) {
1959  port = usb_port ( hub, i );
1960  port->hub = hub;
1961  port->address = i;
1962  if ( usb )
1963  port->protocol = usb->port->protocol;
1964  INIT_LIST_HEAD ( &port->changed );
1965  }
1966 
1967  return hub;
1968 }
1969 
1970 /**
1971  * Register USB hub
1972  *
1973  * @v hub USB hub
1974  * @ret rc Return status code
1975  */
1976 int register_usb_hub ( struct usb_hub *hub ) {
1977  struct usb_bus *bus = hub->bus;
1978  struct usb_port *port;
1979  unsigned int i;
1980  int rc;
1981 
1982  /* Add to hub list */
1983  list_add_tail ( &hub->list, &bus->hubs );
1984 
1985  /* Open hub (host controller) */
1986  if ( ( rc = hub->host->open ( hub ) ) != 0 ) {
1987  DBGC ( hub, "USB hub %s could not open: %s\n",
1988  hub->name, strerror ( rc ) );
1989  goto err_host_open;
1990  }
1991 
1992  /* Open hub (driver) */
1993  if ( ( rc = hub->driver->open ( hub ) ) != 0 ) {
1994  DBGC ( hub, "USB hub %s could not open: %s\n",
1995  hub->name, strerror ( rc ) );
1996  goto err_driver_open;
1997  }
1998 
1999  /* Delay to allow ports to stabilise */
2001 
2002  /* Mark all ports as changed */
2003  for ( i = 1 ; i <= hub->ports ; i++ ) {
2004  port = usb_port ( hub, i );
2005  usb_port_changed ( port );
2006  }
2007 
2008  /* Some hubs seem to defer reporting device connections until
2009  * their interrupt endpoint is polled for the first time.
2010  * Poll the bus once now in order to pick up any such
2011  * connections.
2012  */
2013  usb_poll ( bus );
2014 
2015  return 0;
2016 
2017  hub->driver->close ( hub );
2018  err_driver_open:
2019  hub->host->close ( hub );
2020  err_host_open:
2021  list_del ( &hub->list );
2022  return rc;
2023 }
2024 
2025 /**
2026  * Unregister USB hub
2027  *
2028  * @v hub USB hub
2029  */
2030 void unregister_usb_hub ( struct usb_hub *hub ) {
2031  struct usb_port *port;
2032  unsigned int i;
2033 
2034  /* Detach all devices */
2035  for ( i = 1 ; i <= hub->ports ; i++ ) {
2036  port = usb_port ( hub, i );
2037  if ( port->attached )
2038  usb_detached ( port );
2039  }
2040 
2041  /* Close hub (driver) */
2042  hub->driver->close ( hub );
2043 
2044  /* Close hub (host controller) */
2045  hub->host->close ( hub );
2046 
2047  /* Cancel any pending port status changes */
2048  for ( i = 1 ; i <= hub->ports ; i++ ) {
2049  port = usb_port ( hub, i );
2050  list_del ( &port->changed );
2051  INIT_LIST_HEAD ( &port->changed );
2052  }
2053 
2054  /* Remove from hub list */
2055  list_del ( &hub->list );
2056 }
2057 
2058 /**
2059  * Free USB hub
2060  *
2061  * @v hub USB hub
2062  */
2063 void free_usb_hub ( struct usb_hub *hub ) {
2064  struct usb_port *port;
2065  unsigned int i;
2066 
2067  /* Sanity checks */
2068  for ( i = 1 ; i <= hub->ports ; i++ ) {
2069  port = usb_port ( hub, i );
2070  assert ( ! port->attached );
2071  assert ( port->usb == NULL );
2072  assert ( list_empty ( &port->changed ) );
2073  }
2074 
2075  /* Free hub */
2076  free ( hub );
2077 }
2078 
2079 /******************************************************************************
2080  *
2081  * USB bus
2082  *
2083  ******************************************************************************
2084  */
2085 
2086 /**
2087  * Allocate USB bus
2088  *
2089  * @v dev Underlying hardware device
2090  * @v ports Number of root hub ports
2091  * @v mtu Largest transfer allowed on the bus
2092  * @v op Host controller operations
2093  * @ret bus USB bus, or NULL on allocation failure
2094  */
2095 struct usb_bus * alloc_usb_bus ( struct device *dev, unsigned int ports,
2096  size_t mtu, struct usb_host_operations *op ) {
2097  struct usb_bus *bus;
2098 
2099  /* Allocate and initialise structure */
2100  bus = zalloc ( sizeof ( *bus ) );
2101  if ( ! bus )
2102  goto err_alloc_bus;
2103  bus->name = dev->name;
2104  bus->dev = dev;
2105  bus->mtu = mtu;
2106  bus->op = op;
2107  INIT_LIST_HEAD ( &bus->devices );
2108  INIT_LIST_HEAD ( &bus->hubs );
2109  bus->host = &bus->op->bus;
2110 
2111  /* Allocate root hub */
2112  bus->hub = alloc_usb_hub ( bus, NULL, ports, &op->root );
2113  if ( ! bus->hub )
2114  goto err_alloc_hub;
2115 
2116  return bus;
2117 
2118  free_usb_hub ( bus->hub );
2119  err_alloc_hub:
2120  free ( bus );
2121  err_alloc_bus:
2122  return NULL;
2123 }
2124 
2125 /**
2126  * Register USB bus
2127  *
2128  * @v bus USB bus
2129  * @ret rc Return status code
2130  */
2131 int register_usb_bus ( struct usb_bus *bus ) {
2132  int rc;
2133 
2134  /* Sanity checks */
2135  assert ( bus->hub != NULL );
2136 
2137  /* Assign the first available bus address */
2138  bus->address = 0;
2139  while ( find_usb_bus ( bus->address ) != NULL )
2140  bus->address++;
2141 
2142  /* Open bus */
2143  if ( ( rc = bus->host->open ( bus ) ) != 0 )
2144  goto err_open;
2145 
2146  /* Add to list of USB buses */
2147  list_add_tail ( &bus->list, &usb_buses );
2148 
2149  /* Register root hub */
2150  if ( ( rc = register_usb_hub ( bus->hub ) ) != 0 )
2151  goto err_register_hub;
2152 
2153  /* Attach any devices already present */
2154  usb_hotplug();
2155 
2156  return 0;
2157 
2158  unregister_usb_hub ( bus->hub );
2159  err_register_hub:
2160  list_del ( &bus->list );
2161  bus->host->close ( bus );
2162  err_open:
2163  return rc;
2164 }
2165 
2166 /**
2167  * Unregister USB bus
2168  *
2169  * @v bus USB bus
2170  */
2171 void unregister_usb_bus ( struct usb_bus *bus ) {
2172 
2173  /* Sanity checks */
2174  assert ( bus->hub != NULL );
2175 
2176  /* Unregister root hub */
2177  unregister_usb_hub ( bus->hub );
2178 
2179  /* Remove from list of USB buses */
2180  list_del ( &bus->list );
2181 
2182  /* Close bus */
2183  bus->host->close ( bus );
2184 
2185  /* Sanity checks */
2186  assert ( list_empty ( &bus->devices ) );
2187  assert ( list_empty ( &bus->hubs ) );
2188 }
2189 
2190 /**
2191  * Free USB bus
2192  *
2193  * @v bus USB bus
2194  */
2195 void free_usb_bus ( struct usb_bus *bus ) {
2196  struct usb_endpoint *ep;
2197  struct usb_port *port;
2198 
2199  /* Sanity checks */
2200  assert ( list_empty ( &bus->devices ) );
2201  assert ( list_empty ( &bus->hubs ) );
2202  list_for_each_entry ( ep, &usb_halted, halted )
2203  assert ( ep->usb->port->hub->bus != bus );
2205  assert ( port->hub->bus != bus );
2206 
2207  /* Free root hub */
2208  free_usb_hub ( bus->hub );
2209 
2210  /* Free bus */
2211  free ( bus );
2212 }
2213 
2214 /**
2215  * Find USB bus by address
2216  *
2217  * @v address Bus address
2218  * @ret bus USB bus, or NULL
2219  */
2220 struct usb_bus * find_usb_bus ( unsigned int address ) {
2221  struct usb_bus *bus;
2222 
2223  for_each_usb_bus ( bus ) {
2224  if ( bus->address == address )
2225  return bus;
2226  }
2227 
2228  return NULL;
2229 }
2230 
2231 /**
2232  * Find USB bus by device location
2233  *
2234  * @v bus_type Bus type
2235  * @v location Bus location
2236  * @ret bus USB bus, or NULL
2237  */
2238 struct usb_bus * find_usb_bus_by_location ( unsigned int bus_type,
2239  unsigned int location ) {
2240  struct usb_bus *bus;
2241 
2242  for_each_usb_bus ( bus ) {
2243  if ( ( bus->dev->desc.bus_type == bus_type ) &&
2244  ( bus->dev->desc.location == location ) )
2245  return bus;
2246  }
2247 
2248  return NULL;
2249 }
2250 
2251 /******************************************************************************
2252  *
2253  * USB device addressing
2254  *
2255  ******************************************************************************
2256  */
2257 
2258 /**
2259  * Allocate device address
2260  *
2261  * @v bus USB bus
2262  * @ret address Device address, or negative error
2263  */
2264 int usb_alloc_address ( struct usb_bus *bus ) {
2265  unsigned int address;
2266 
2267  /* Find first free device address */
2268  address = ffsll ( ~bus->addresses );
2269  if ( ! address )
2270  return -ENOENT;
2271 
2272  /* Mark address as used */
2273  bus->addresses |= ( 1ULL << ( address - 1 ) );
2274 
2275  return address;
2276 }
2277 
2278 /**
2279  * Free device address
2280  *
2281  * @v bus USB bus
2282  * @v address Device address
2283  */
2284 void usb_free_address ( struct usb_bus *bus, unsigned int address ) {
2285 
2286  /* Sanity check */
2287  assert ( address > 0 );
2288  assert ( bus->addresses & ( 1ULL << ( address - 1 ) ) );
2289 
2290  /* Mark address as free */
2291  bus->addresses &= ~( 1ULL << ( address - 1 ) );
2292 }
2293 
2294 /**
2295  * Find next USB device
2296  *
2297  * @v usb USB device to fill in
2298  * @v busdev Starting bus:dev address
2299  * @ret busdev Bus:dev address of next USB device
2300  * @ret rc Return status code
2301  */
2302 int usb_find_next ( struct usb_device **usb, uint16_t *busdev ) {
2303  struct usb_bus *bus;
2304 
2305  do {
2306  /* Find USB bus, if any */
2307  bus = find_usb_bus ( USB_BUS ( *busdev ) );
2308  if ( ! bus ) {
2309  *busdev |= ( USB_BUS ( 1 ) - 1 );
2310  continue;
2311  }
2312 
2313  /* Find USB device, if any */
2314  *usb = find_usb ( bus, USB_DEV ( *busdev ) );
2315  if ( *usb )
2316  return 0;
2317 
2318  } while ( ++(*busdev) );
2319 
2320  return -ENODEV;
2321 }
2322 
2323 /******************************************************************************
2324  *
2325  * USB bus topology
2326  *
2327  ******************************************************************************
2328  */
2329 
2330 /**
2331  * Get USB route string
2332  *
2333  * @v usb USB device
2334  * @ret route USB route string
2335  */
2336 unsigned int usb_route_string ( struct usb_device *usb ) {
2337  struct usb_device *parent;
2338  unsigned int route;
2339 
2340  /* Navigate up to root hub, constructing route string as we go */
2341  for ( route = 0 ; ( parent = usb->port->hub->usb ) ; usb = parent ) {
2342  route <<= 4;
2343  route |= ( ( usb->port->address > 0xf ) ?
2344  0xf : usb->port->address );
2345  }
2346 
2347  return route;
2348 }
2349 
2350 /**
2351  * Get USB root hub port
2352  *
2353  * @v usb USB device
2354  * @ret port Root hub port
2355  */
2357  struct usb_device *parent;
2358 
2359  /* Navigate up to root hub */
2360  while ( ( parent = usb->port->hub->usb ) )
2361  usb = parent;
2362 
2363  return usb->port;
2364 }
2365 
2366 /**
2367  * Get USB transaction translator
2368  *
2369  * @v usb USB device
2370  * @ret port Transaction translator port, or NULL
2371  */
2373  struct usb_device *parent;
2374 
2375  /* Navigate up to root hub. If we find a low-speed or
2376  * full-speed device with a higher-speed parent hub, then that
2377  * device's port is the transaction translator.
2378  */
2379  for ( ; ( parent = usb->port->hub->usb ) ; usb = parent ) {
2380  if ( ( usb->speed <= USB_SPEED_FULL ) &&
2381  ( parent->speed > USB_SPEED_FULL ) )
2382  return usb->port;
2383  }
2384 
2385  return NULL;
2386 }
2387 
2388 /* Drag in objects via register_usb_bus() */
2390 
2391 /* Drag in USB configuration */
2392 REQUIRE_OBJECT ( config_usb );
2393 
2394 /* Drag in hub driver */
2395 REQUIRE_OBJECT ( usbhub );
A process.
Definition: process.h:18
#define iob_pull(iobuf, len)
Definition: iobuf.h:107
A USB driver.
Definition: usb.h:1407
#define __attribute__(x)
Definition: compiler.h:10
#define USB_BUS(busdev)
Extract USB bus address.
Definition: usb.h:67
#define EINVAL
Invalid argument.
Definition: errno.h:429
#define USB_SPEED_EXPONENT(speed)
Extract USB speed exponent.
Definition: usb.h:42
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
unsigned short uint16_t
Definition: stdint.h:11
void(* close)(struct usb_endpoint *ep)
Close endpoint.
Definition: usb.h:455
A USB device ID.
Definition: usb.h:1361
uint32_t low
Low 16 bits of address.
Definition: myson.h:19
static void usb_hotplug(void)
Handle newly attached or detached USB device.
Definition: usb.c:1869
#define iob_put(iobuf, len)
Definition: iobuf.h:125
void(* complete)(struct usb_endpoint *ep, struct io_buffer *iobuf, int rc)
Complete transfer.
Definition: usb.h:496
static void usb_detached(struct usb_port *port)
Handle newly detached USB device.
Definition: usb.c:1795
uint8_t class
Class code.
Definition: usb.h:162
static unsigned int usb_get_default_language(struct usb_device *usb)
Get default language ID.
Definition: usb.c:884
static int usb_set_configuration(struct usb_device *usb, unsigned int index)
Set USB configuration.
Definition: usb.h:1242
static void usb_endpoint_describe(struct usb_endpoint *ep, unsigned int address, unsigned int attributes, size_t mtu, unsigned int burst, unsigned int interval)
Describe USB endpoint.
Definition: usb.h:558
uint8_t len
Length of descriptor.
Definition: usb.h:175
#define max(x, y)
Definition: ath.h:41
uint8_t interface[0]
List of interface numbers.
Definition: usb.h:697
const char * name
Name.
Definition: usb.h:676
A USB hub.
Definition: usb.h:841
struct usb_bus * find_usb_bus(unsigned int address)
Find USB bus by address.
Definition: usb.c:2220
int(* mtu)(struct usb_endpoint *ep)
Update MTU.
Definition: usb.h:468
unsigned int count
Number of interfaces.
Definition: usb.h:665
#define USB_STRING_DESCRIPTOR
A USB string descriptor.
Definition: usb.h:239
uint16_t vendor
Vendor ID.
Definition: usb.h:191
#define list_add(new, head)
Add a new entry to the head of a list.
Definition: list.h:70
A USB interface association descriptor.
Definition: usb.h:329
struct usb_bus * find_usb_bus_by_location(unsigned int bus_type, unsigned int location)
Find USB bus by device location.
Definition: usb.c:2238
struct usb_hub_host_operations * host
Host controller operations.
Definition: usb.h:857
int usb_refill_limit(struct usb_endpoint *ep, unsigned int max)
Refill endpoint up to specified limit.
Definition: usb.c:661
#define USB_EP0_DEFAULT_MTU(speed)
Calculate default MTU based on device speed.
Definition: usb.h:511
void unregister_usb_hub(struct usb_hub *hub)
Unregister USB hub.
Definition: usb.c:2030
uint32_t first
First block in range.
Definition: pccrr.h:15
struct usb_bus * alloc_usb_bus(struct device *dev, unsigned int ports, size_t mtu, struct usb_host_operations *op)
Allocate USB bus.
Definition: usb.c:2095
Error codes.
Low speed (1.5Mbps)
Definition: usb.h:49
struct list_head recycled
Recycled I/O buffer list.
Definition: usb.h:434
#define USB_RESET_RECOVER_DELAY_MS
Reset recovery time.
Definition: usb.h:1335
#define USB_ENDPOINT_ATTR_TYPE_MASK
Endpoint attribute transfer type mask.
Definition: usb.h:281
static int usb_attached(struct usb_port *port)
Handle newly attached USB device.
Definition: usb.c:1760
#define iob_push(iobuf, len)
Definition: iobuf.h:89
struct usb_descriptor_header header
Descriptor header.
Definition: usb.h:316
void free_iob(struct io_buffer *iobuf)
Free I/O buffer.
Definition: iobuf.c:153
uint64_t address
Base address.
Definition: ena.h:24
uint32_t type
Operating system type.
Definition: ena.h:12
union usb_class_descriptor mask
Class mask.
Definition: usb.h:1380
static struct usb_descriptor_header * usb_next_descriptor(struct usb_descriptor_header *desc)
Get next USB descriptor.
Definition: usb.h:358
size_t len
Refill buffer payload length.
Definition: usb.h:438
static const char * usb_bcd(uint16_t bcd)
Transcribe USB BCD-coded value (for debugging)
Definition: usb.c:96
static int usb_get_config_descriptor(struct usb_device *usb, unsigned int index, struct usb_configuration_descriptor *data, size_t len)
Get USB configuration descriptor.
Definition: usb.h:1226
#define DBGC(...)
Definition: compiler.h:505
struct usb_device * find_usb(struct usb_bus *bus, unsigned int address)
Find USB device by address.
Definition: usb.c:1735
uint16_t vendor
Vendor ID.
Definition: usb.h:659
char name[40]
Name.
Definition: device.h:79
#define USB_ENDPOINT_MAX
Maximum endpoint number.
Definition: usb.h:522
struct usb_driver * driver
Driver.
Definition: usb.h:687
long index
Definition: bigint.h:65
#define ENOENT
No such file or directory.
Definition: errno.h:515
Standard Interface Descriptor USB 2.0 spec, Section 9.6.5.
Definition: Usb.h:158
int usb_endpoint_clear_halt(struct usb_endpoint *ep)
Clear endpoint halt (if applicable)
Definition: usb.c:372
int usb_stream(struct usb_endpoint *ep, struct io_buffer *iobuf, int terminate)
Enqueue USB stream transfer.
Definition: usb.c:546
struct usb_device * usb
Currently attached device (if in use)
Definition: usb.h:835
#define USB_SPEED_MANTISSA(speed)
Extract USB speed mantissa.
Definition: usb.h:39
int usb_prefill(struct usb_endpoint *ep)
Prefill endpoint recycled buffer list.
Definition: usb.c:620
int usb_endpoint_open(struct usb_endpoint *ep)
Open USB endpoint.
Definition: usb.c:294
#define for_each_interface_descriptor(desc, config, interface)
Iterate over all configuration descriptors within an interface descriptor.
Definition: usb.h:394
uint8_t interfaces
Number of interfaces.
Definition: usb.h:216
#define for_each_config_descriptor(desc, config)
Iterate over all configuration descriptors.
Definition: usb.h:386
unsigned int protocol
Port protocol.
Definition: usb.h:819
int(* reset)(struct usb_endpoint *ep)
Reset endpoint.
Definition: usb.h:462
uint8_t direction
Direction.
Definition: ena.h:14
#define USB_ENDPOINT_ATTR_PERIODIC
Endpoint periodic type.
Definition: usb.h:284
static int usb_used(struct usb_device *usb, unsigned int count, uint8_t *interface, uint8_t *used)
Update list of used interface.
Definition: usb.c:1145
static void usb_control_complete(struct usb_endpoint *ep, struct io_buffer *iobuf, int rc)
Complete USB control transfer.
Definition: usb.c:755
#define USB_ENDPOINT_COMPANION_DESCRIPTOR
A USB endpoint companion descriptor.
Definition: usb.h:326
static int usb_endpoint_mtu(struct usb_endpoint *ep, size_t mtu)
Update endpoint MTU.
Definition: usb.c:464
#define offsetof(type, field)
Get offset of a field within a structure.
Definition: stddef.h:25
struct list_head changed
List of changed ports.
Definition: usb.h:837
int(* clear_tt)(struct usb_hub *hub, struct usb_port *port, struct usb_endpoint *ep)
Clear transaction translator buffer.
Definition: usb.h:926
Super speed (5Gbps)
Definition: usb.h:55
void usb_endpoint_close(struct usb_endpoint *ep)
Close USB endpoint.
Definition: usb.c:400
int open
Endpoint is open.
Definition: usb.h:419
int usb_endpoint_described(struct usb_endpoint *ep, struct usb_configuration_descriptor *config, struct usb_interface_descriptor *interface, unsigned int type, unsigned int index)
Describe USB endpoint from device configuration.
Definition: usb.c:242
int rc
Completion status.
Definition: usb.c:745
struct io_buffer * alloc_iob(size_t len)
Allocate I/O buffer.
Definition: iobuf.c:131
union usb_class_descriptor class
Class.
Definition: usb.h:663
unsigned int vendor
Vendor ID.
Definition: device.h:32
struct device * parent
Bus device.
Definition: device.h:89
USB hub driver operations.
Definition: usb.h:886
int usb_refill(struct usb_endpoint *ep)
Refill endpoint.
Definition: usb.c:711
int usb_control(struct usb_device *usb, unsigned int request, unsigned int value, unsigned int index, void *data, size_t len)
Issue USB control transaction.
Definition: usb.c:784
static void unregister_usb(struct usb_device *usb)
Unregister USB device.
Definition: usb.c:1671
unsigned int address
Device address, if assigned.
Definition: usb.h:733
static int usb_autoconfigure(struct usb_device *usb)
Choose our preferred USB device configuration.
Definition: usb.c:1431
unsigned int speed
Device speed.
Definition: usb.h:729
int(* probe)(struct usb_function *func, struct usb_configuration_descriptor *config)
Probe device.
Definition: usb.h:1427
void usb_port_changed(struct usb_port *port)
Report port status change.
Definition: usb.c:1858
A doubly-linked list entry (or list head)
Definition: list.h:19
int(* open)(struct usb_hub *hub)
Open hub.
Definition: usb.h:877
#define list_empty(list)
Test whether a list is empty.
Definition: list.h:137
unsigned long tmp
Definition: linux_pci.h:65
#define USB_BUSDEV(bus, dev)
Define a USB bus:device address.
Definition: usb.h:64
union usb_class_descriptor class
Class.
Definition: usb.h:1378
struct usb_device_id * id
Driver device ID.
Definition: usb.h:691
#define list_first_entry(list, type, member)
Get the container of the first entry in a list.
Definition: list.h:334
#define for_each_usb_bus(bus)
Iterate over all USB buses.
Definition: usb.h:1077
#define USB_EP0_ATTRIBUTES
Control endpoint attributes.
Definition: usb.h:504
#define list_del(list)
Delete an entry from a list.
Definition: list.h:120
uint16_t product
Product ID.
Definition: usb.h:661
struct ena_llq_option desc
Descriptor counts.
Definition: ena.h:20
A USB port.
Definition: usb.h:813
uint16_t product
Product ID.
Definition: usb.h:193
#define ENOMEM
Not enough space.
Definition: errno.h:535
A hardware device.
Definition: device.h:77
A USB endpoint.
Definition: usb.h:404
struct usb_device * usb
Underlying USB device, if any.
Definition: usb.h:847
int usb_find_next(struct usb_device **usb, uint16_t *busdev)
Find next USB device.
Definition: usb.c:2302
#define USB_EP0_BURST
Control endpoint maximum burst size.
Definition: usb.h:516
void * memcpy(void *dest, const void *src, size_t len) __nonnull
#define USB_RECIP_ENDPOINT
Request recipient is an endpoint.
Definition: usb.h:119
u8 port
Port number.
Definition: CIB_PRM.h:31
int usb_message(struct usb_endpoint *ep, unsigned int request, unsigned int value, unsigned int index, struct io_buffer *iobuf)
Enqueue USB message transfer.
Definition: usb.c:492
A USB interface descriptor.
Definition: usb.h:245
A USB function descriptor.
Definition: usb.h:657
PERMANENT_PROCESS(usb_process, usb_step)
USB process.
void unregister_usb_bus(struct usb_bus *bus)
Unregister USB bus.
Definition: usb.c:2171
struct usb_port * port
USB port.
Definition: usb.h:727
static void usb_probe_all(struct usb_device *usb, struct usb_configuration_descriptor *config)
Probe all USB device drivers.
Definition: usb.c:1299
Assertions.
struct usb_driver * usb_find_driver(struct usb_function_descriptor *desc, struct usb_device_id **id)
Find USB device driver.
Definition: usb.c:1167
#define ffsll(x)
Find first (i.e.
Definition: strings.h:123
static struct usb_endpoint_driver_operations usb_control_operations
USB control endpoint driver operations.
Definition: usb.c:769
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
struct usb_hub_driver_operations * driver
Driver operations.
Definition: usb.h:859
void(* close)(struct usb_hub *hub)
Close hub.
Definition: usb.h:882
#define container_of(ptr, type, field)
Get containing structure.
Definition: stddef.h:36
USB 3.0.
Definition: usb.h:25
struct device * dev
Underlying hardware device.
Definition: usb.h:970
An object interface.
Definition: interface.h:125
static int usb_clear_feature(struct usb_device *usb, unsigned int type, unsigned int feature, unsigned int index)
Clear feature.
Definition: usb.h:1127
struct usb_class_id class
Class ID.
Definition: usb.h:1413
#define USB_ENDPOINT_BURST(sizes)
USB endpoint maximum burst size.
Definition: usb.h:311
Not connected.
Definition: usb.h:47
uint16_t index
Index parameter.
Definition: usb.h:89
struct ib_cm_path alternate
Alternate path.
Definition: ib_mad.h:43
#define list_for_each_entry(pos, head, member)
Iterate over entries in a list.
Definition: list.h:432
static const char * usb_speed_name(unsigned int speed)
Get USB speed name (for debugging)
Definition: usb.c:66
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
#define DBGC_HDA(...)
Definition: compiler.h:506
struct usb_descriptor_header header
Descriptor header.
Definition: cdc.h:31
#define __unused
Declare a variable or data structure as unused.
Definition: compiler.h:573
Union functional descriptor.
Definition: cdc.h:29
#define list_add_tail(new, head)
Add a new entry to the tail of a list.
Definition: list.h:94
uint8_t configurations
Number of possible configurations.
Definition: usb.h:203
struct list_head halted
List of halted endpoints.
Definition: usb.h:424
ring len
Length.
Definition: dwmac.h:231
struct usb_class class
Device class.
Definition: usb.h:187
unsigned int burst
Maximum burst size.
Definition: usb.h:414
void route(void)
Print routing table.
Definition: route.c:40
int(* enable)(struct usb_hub *hub, struct usb_port *port)
Enable port.
Definition: usb.h:904
static unsigned int count
Number of entries.
Definition: dwmac.h:225
#define USB_CONTROL_MAX_WAIT_MS
Maximum time to wait for a control transaction to complete.
Definition: usb.h:1342
#define USB_DIR_IN
Data transfer is from device to host.
Definition: usb.h:98
REQUIRING_SYMBOL(register_usb_bus)
char name[32]
Name.
Definition: usb.h:725
unsigned int ports
Number of ports.
Definition: usb.h:851
static void usb_step(struct process *process __unused)
USB process.
Definition: usb.c:1896
const char * driver_name
Driver name.
Definition: device.h:81
unsigned int location
Location.
Definition: device.h:30
const char * name
Name.
Definition: usb.h:843
size_t reserve
Refill buffer reserved header length.
Definition: usb.h:436
void(* close)(struct usb_device *usb)
Close device.
Definition: usb.h:768
#define list_for_each_entry_safe(pos, tmp, head, member)
Iterate over entries in a list, safe against deletion of the current entry.
Definition: list.h:459
uint8_t id
Request identifier.
Definition: ena.h:12
A USB device.
Definition: usb.h:723
uint8_t type
Descriptor type.
Definition: usb.h:177
struct usb_interface_descriptor * usb_interface_descriptor(struct usb_configuration_descriptor *config, unsigned int interface, unsigned int alternate)
Locate USB interface descriptor.
Definition: usb.c:144
struct usb_endpoint control
Control endpoint.
Definition: usb.h:748
uint32_t high
High 32 bits of address.
Definition: myson.h:20
static void usb_poll(struct usb_bus *bus)
Poll USB bus.
Definition: usb.h:1072
#define USB_ENDPOINT_IN
Endpoint direction is in.
Definition: usb.h:525
#define USB_ENDPOINT_ATTR_INTERRUPT
Interrupt endpoint transfer type.
Definition: usb.h:293
Standard Interface Association Descriptor USB 3.0 spec, Section 9.6.4.
Definition: Usb.h:143
#define ERANGE
Result too large.
Definition: errno.h:640
char * strerror(int errno)
Retrieve string representation of error number.
Definition: strerror.c:79
static void(* free)(struct refcnt *refcnt))
Definition: refcnt.h:55
void * zalloc(size_t size)
Allocate cleared memory.
Definition: malloc.c:662
struct list_head list
List of devices on this bus.
Definition: usb.h:731
unsigned int score
Driver score.
Definition: usb.h:1419
unsigned int usb_route_string(struct usb_device *usb)
Get USB route string.
Definition: usb.c:2336
static const char * interfaces[2]
Definition: smc9000.c:52
struct list_head siblings
Devices on the same bus.
Definition: device.h:85
static size_t iob_len(struct io_buffer *iobuf)
Calculate length of data in an I/O buffer.
Definition: iobuf.h:160
#define USB_LANG_ENGLISH
Language ID for English.
Definition: usb.h:242
void usb_free_address(struct usb_bus *bus, unsigned int address)
Free device address.
Definition: usb.c:2284
#define for_each_table_entry(pointer, table)
Iterate through all entries within a linker table.
Definition: tables.h:386
#define ENODEV
No such device.
Definition: errno.h:510
static int usb_endpoint_reset(struct usb_endpoint *ep)
Reset USB endpoint.
Definition: usb.c:430
static int usb_get_mtu(struct usb_device *usb, struct usb_device_descriptor *data)
Get first part of USB device descriptor (up to and including MTU)
Definition: usb.h:1194
uint8_t attributes
Attributes.
Definition: usb.h:270
unsigned char uint8_t
Definition: stdint.h:10
void(* close)(struct usb_hub *hub)
Close hub.
Definition: usb.h:897
USB control transfer pseudo-header.
Definition: usb.c:743
struct list_head usb_buses
List of USB buses.
Definition: usb.c:45
unsigned int fill
Buffer fill level.
Definition: usb.h:421
static int usb_score(struct usb_device *usb, struct usb_configuration_descriptor *config)
Get USB device configuration score.
Definition: usb.c:1203
static void usb_remove(struct usb_function *func)
Remove USB device driver.
Definition: usb.c:1286
struct usb_device_descriptor device
Device descriptor.
Definition: usb.h:735
Standard Endpoint Descriptor USB 2.0 spec, Section 9.6.6.
Definition: Usb.h:174
struct usb_device * usb
USB device.
Definition: usb.h:678
static void usb_endpoint_init(struct usb_endpoint *ep, struct usb_device *usb, struct usb_endpoint_driver_operations *driver)
Initialise USB endpoint.
Definition: usb.h:540
#define le16_to_cpu(value)
Definition: byteswap.h:113
uint32_t scalar
Scalar value.
Definition: usb.h:648
struct usb_endpoint_companion_descriptor * usb_endpoint_companion_descriptor(struct usb_configuration_descriptor *config, struct usb_endpoint_descriptor *desc)
Locate USB endpoint companion descriptor.
Definition: usb.c:195
void * malloc(size_t size)
Allocate memory.
Definition: malloc.c:621
A USB setup data packet.
Definition: usb.h:83
#define USB_ENDPOINT_IDX(address)
Construct endpoint index from endpoint address.
Definition: usb.h:528
#define EALREADY
Connection already in progress.
Definition: errno.h:324
const char * usb_endpoint_name(struct usb_endpoint *ep)
Get USB endpoint name (for debugging)
Definition: usb.c:221
struct usb_port * usb_root_hub_port(struct usb_device *usb)
Get USB root hub port.
Definition: usb.c:2356
uint8_t protocol
Protocol code.
Definition: usb.h:166
#define USB_EP0_INTERVAL
Control endpoint interval.
Definition: usb.h:519
static int usb_endpoint_clear_tt(struct usb_endpoint *ep)
Clear transaction translator (if applicable)
Definition: usb.c:341
size_t mtu
Maximum transfer size.
Definition: usb.h:412
uint8_t count
Interface count.
Definition: usb.h:335
#define USB_CLASS_CDC
Class code for communications devices.
Definition: cdc.h:16
uint16_t request
Request.
Definition: usb.h:85
static void free_usb(struct usb_device *usb)
Free USB device.
Definition: usb.c:1715
A USB descriptor header.
Definition: usb.h:173
void free_usb_hub(struct usb_hub *hub)
Free USB hub.
Definition: usb.c:2063
static void usb_remove_all(struct usb_device *usb)
Remove all device drivers.
Definition: usb.c:1382
struct usb_port * usb_transaction_translator(struct usb_device *usb)
Get USB transaction translator.
Definition: usb.c:2372
int(* disable)(struct usb_hub *hub, struct usb_port *port)
Disable port.
Definition: usb.h:911
static int usb_hotplugged(struct usb_port *port)
Handle newly attached or detached USB device.
Definition: usb.c:1818
struct usb_host_operations * op
Host controller operations set.
Definition: usb.h:972
void mdelay(unsigned long msecs)
Delay for a fixed number of milliseconds.
Definition: timer.c:79
static int usb_get_device_descriptor(struct usb_device *usb, struct usb_device_descriptor *data)
Get USB device descriptor.
Definition: usb.h:1210
static void usb_deconfigure(struct usb_device *usb)
Clear USB device configuration.
Definition: usb.c:1409
#define iob_reserve(iobuf, len)
Definition: iobuf.h:72
static uint16_t struct vmbus_xfer_pages_operations * op
Definition: netvsc.h:327
unsigned int max
Maximum fill level.
Definition: usb.h:440
#define INIT_LIST_HEAD(list)
Initialise a list head.
Definition: list.h:46
A USB configuration descriptor.
Definition: usb.h:210
static int register_usb(struct usb_device *usb)
Register USB device.
Definition: usb.c:1538
static int usb_config_descriptor(struct usb_device *usb, unsigned int index, struct usb_configuration_descriptor **config)
Get USB configuration descriptor.
Definition: usb.c:990
unsigned int language
Default language ID (if known)
Definition: usb.h:753
static size_t iob_headroom(struct io_buffer *iobuf)
Calculate available space at start of an I/O buffer.
Definition: iobuf.h:170
static struct list_head usb_halted
List of halted endpoints.
Definition: usb.c:51
uint8_t subclass
Subclass code.
Definition: usb.h:164
struct usb_endpoint_descriptor * usb_endpoint_descriptor(struct usb_configuration_descriptor *config, struct usb_interface_descriptor *interface, unsigned int type, unsigned int index)
Locate USB endpoint descriptor.
Definition: usb.c:168
unsigned int bus_type
Bus type.
Definition: device.h:25
A USB endpoint descriptor.
Definition: usb.h:264
uint8_t first
First interface number.
Definition: usb.h:333
struct list_head list
List of which this buffer is a member.
Definition: iobuf.h:45
uint8_t config
Configuration value.
Definition: usb.h:218
struct list_head complete
Completed control transfers.
Definition: usb.h:750
#define DBGC2(...)
Definition: compiler.h:522
#define USB_ANY_ID
Match-anything ID.
Definition: usb.h:1373
uint16_t protocol
USB specification release number in BCD.
Definition: usb.h:185
Universal Serial Bus (USB)
int register_usb_bus(struct usb_bus *bus)
Register USB bus.
Definition: usb.c:2131
struct list_head list
List of hubs.
Definition: usb.h:854
unsigned int device
Device ID.
Definition: device.h:34
uint8_t mtu
Maximum packet size for endpoint zero.
Definition: usb.h:189
uint32_t mtu
Maximum MTU.
Definition: ena.h:28
A USB endpoint companion descriptor.
Definition: usb.h:314
unsigned int address
Port address.
Definition: usb.h:817
void * data
Start of data.
Definition: iobuf.h:53
struct list_head children
Devices attached to this device.
Definition: device.h:87
struct usb_hub * hub
USB hub.
Definition: usb.h:815
unsigned int id_count
Number of entries in ID table.
Definition: usb.h:1411
#define USB_SET_ADDRESS_RECOVER_DELAY_MS
Set address recovery time.
Definition: usb.h:1349
High speed (480Mbps)
Definition: usb.h:53
void(* remove)(struct usb_function *func)
Remove device.
Definition: usb.h:1434
struct usb_endpoint * ep[32]
Endpoint list.
Definition: usb.h:745
unsigned int interval
Interval (in microframes)
Definition: usb.h:416
struct ena_llq_option header
Header locations.
Definition: ena.h:16
u8 request[0]
List of IEs requested.
Definition: ieee80211.h:16
struct usb_endpoint_host_operations endpoint
Endpoint operations.
Definition: usb.h:1033
FILE_SECBOOT(PERMITTED)
#define cpu_to_le16(value)
Definition: byteswap.h:107
int(* address)(struct usb_device *usb)
Assign device address.
Definition: usb.h:774
uint8_t data[48]
Additional event data.
Definition: ena.h:22
struct device_description desc
Device description.
Definition: device.h:83
USB host controller operations.
Definition: usb.h:1031
#define USB_ENDPOINT_ATTR_CONTROL
Control endpoint transfer type.
Definition: usb.h:287
int register_usb_hub(struct usb_hub *hub)
Register USB hub.
Definition: usb.c:1976
#define USB_PORT_DELAY_MS
Time to wait for ports to stabilise.
Definition: usb.h:1358
struct usb_class class
Association class.
Definition: usb.h:337
USB Communications Device Class (CDC)
struct usb_hub * hub
Root hub.
Definition: usb.h:995
static struct usb_interface_association_descriptor * usb_interface_association_descriptor(struct usb_configuration_descriptor *config, unsigned int first)
Locate USB interface association descriptor.
Definition: usb.c:120
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
REQUIRE_OBJECT(config_usb)
int snprintf(char *buf, size_t size, const char *fmt,...)
Write a formatted string to a buffer.
Definition: vsprintf.c:383
uint16_t len
Total length.
Definition: usb.h:214
uint16_t len
Length of data stage.
Definition: usb.h:91
#define USB_DRIVERS
USB driver table.
Definition: usb.h:1438
struct usb_function_descriptor desc
Function descriptor.
Definition: usb.h:680
struct usb_device * usb
USB device.
Definition: usb.h:406
static struct usb_port * usb_port(struct usb_hub *hub, unsigned int address)
Get USB port.
Definition: usb.h:960
uint16_t protocol
Protocol ID.
Definition: stp.h:19
static int usb_is_within_config(struct usb_configuration_descriptor *config, struct usb_descriptor_header *desc)
Check that descriptor lies within a configuration descriptor.
Definition: usb.h:371
typeof(acpi_finder=acpi_find)
ACPI table finder.
Definition: acpi.c:48
#define USB_ENDPOINT_MTU(sizes)
USB endpoint MTU.
Definition: usb.h:308
struct usb_endpoint_driver_operations * driver
Driver operations.
Definition: usb.h:431
int(* message)(struct usb_endpoint *ep, struct io_buffer *iobuf)
Enqueue message transfer.
Definition: usb.h:475
int(* open)(struct usb_endpoint *ep)
Open endpoint.
Definition: usb.h:450
void usb_flush(struct usb_endpoint *ep)
Discard endpoint recycled buffer list.
Definition: usb.c:720
unsigned int protocol
Hub protocol.
Definition: usb.h:849
struct usb_endpoint_host_operations * host
Host controller operations.
Definition: usb.h:427
static int usb_get_descriptor(struct usb_device *usb, unsigned int type, unsigned int desc, unsigned int index, unsigned int language, struct usb_descriptor_header *data, size_t len)
Get USB descriptor.
Definition: usb.h:1177
struct usb_device_host_operations * host
Host controller operations.
Definition: usb.h:740
static struct list_head usb_changed
List of changed ports.
Definition: usb.c:48
USB endpoint driver operations.
Definition: usb.h:489
#define LIST_HEAD_INIT(list)
Initialise a static list head.
Definition: list.h:31
struct device dev
Generic device.
Definition: usb.h:682
A USB function.
Definition: usb.h:674
uint16_t value
Value parameter.
Definition: usb.h:87
#define BUS_TYPE_USB
USB bus type.
Definition: device.h:71
struct usb_bus * bus
USB bus.
Definition: usb.h:845
struct list_head functions
List of functions.
Definition: usb.h:737
uint16_t burst
Maximum burst size.
Definition: ena.h:28
static struct usb_device * alloc_usb(struct usb_port *port)
Allocate USB device.
Definition: usb.c:1512
#define USB_ENDPOINT_HALT
Endpoint halt feature.
Definition: usb.h:157
#define USB_EP0_ADDRESS
Control endpoint address.
Definition: usb.h:501
int(* speed)(struct usb_hub *hub, struct usb_port *port)
Update port speed.
Definition: usb.h:918
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322
#define ETIMEDOUT
Connection timed out.
Definition: errno.h:670
String functions.
struct list_head list
List of functions within this USB device.
Definition: usb.h:684
int usb_alloc_address(struct usb_bus *bus)
Allocate device address.
Definition: usb.c:2264
A USB bus.
Definition: usb.h:966
unsigned int attributes
Attributes.
Definition: usb.h:410
static int fill
Definition: string.h:209
uint8_t interface
Interface number.
Definition: usb.h:249
static int usb_describe(struct usb_device *usb, struct usb_configuration_descriptor *config, unsigned int first, uint8_t *interfaces, struct usb_function_descriptor *desc)
Describe USB function.
Definition: usb.c:1053
uint8_t bus
Bus.
Definition: edd.h:15
Full speed (12Mbps)
Definition: usb.h:51
uint8_t interface[1]
Interfaces (variable-length)
Definition: cdc.h:35
unsigned int address
Endpoint address.
Definition: usb.h:408
void free_usb_bus(struct usb_bus *bus)
Free USB bus.
Definition: usb.c:2195
uint8_t burst
Maximum burst size.
Definition: usb.h:318
struct usb_class class
Class.
Definition: usb.h:646
void usb_complete_err(struct usb_endpoint *ep, struct io_buffer *iobuf, int rc)
Complete transfer (possibly with error)
Definition: usb.c:587
static int usb_probe(struct usb_function *func, struct usb_configuration_descriptor *config)
Probe USB device driver.
Definition: usb.c:1248
int(* open)(struct usb_hub *hub)
Open hub.
Definition: usb.h:892
struct usb_device_id * ids
USB ID table.
Definition: usb.h:1409
int(* open)(struct usb_device *usb)
Open device.
Definition: usb.h:763
String functions.
int usb_get_string_descriptor(struct usb_device *usb, unsigned int index, unsigned int language, char *buf, size_t len)
Get USB string descriptor.
Definition: usb.c:916
void * memset(void *dest, int character, size_t len) __nonnull
A persistent I/O buffer.
Definition: iobuf.h:38
int(* stream)(struct usb_endpoint *ep, struct io_buffer *iobuf, int zlp)
Enqueue stream transfer.
Definition: usb.h:484
#define USB_DEV(busdev)
Extract USB device address.
Definition: usb.h:70
struct usb_hub * alloc_usb_hub(struct usb_bus *bus, struct usb_device *usb, unsigned int ports, struct usb_hub_driver_operations *driver)
Allocate USB hub.
Definition: usb.c:1937
struct usb_port port[0]
Port list.
Definition: usb.h:867