1 /* 2 * 3 * Most of this source has been derived from the Linux USB 4 * project: 5 * (C) Copyright Linus Torvalds 1999 6 * (C) Copyright Johannes Erdfelt 1999-2001 7 * (C) Copyright Andreas Gal 1999 8 * (C) Copyright Gregory P. Smith 1999 9 * (C) Copyright Deti Fliegl 1999 (new USB architecture) 10 * (C) Copyright Randy Dunlap 2000 11 * (C) Copyright David Brownell 2000 (kernel hotplug, usb_device_id) 12 * (C) Copyright Yggdrasil Computing, Inc. 2000 13 * (usb_device_id matching changes by Adam J. Richter) 14 * 15 * Adapted for U-Boot: 16 * (C) Copyright 2001 Denis Peter, MPL AG Switzerland 17 * 18 * See file CREDITS for list of people who contributed to this 19 * project. 20 * 21 * This program is free software; you can redistribute it and/or 22 * modify it under the terms of the GNU General Public License as 23 * published by the Free Software Foundation; either version 2 of 24 * the License, or (at your option) any later version. 25 * 26 * This program is distributed in the hope that it will be useful, 27 * but WITHOUT ANY WARRANTY; without even the implied warranty of 28 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 29 * GNU General Public License for more details. 30 * 31 * You should have received a copy of the GNU General Public License 32 * along with this program; if not, write to the Free Software 33 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 34 * MA 02111-1307 USA 35 * 36 */ 37 38 /* 39 * How it works: 40 * 41 * Since this is a bootloader, the devices will not be automatic 42 * (re)configured on hotplug, but after a restart of the USB the 43 * device should work. 44 * 45 * For each transfer (except "Interrupt") we wait for completion. 46 */ 47 #include <common.h> 48 #include <command.h> 49 #include <asm/processor.h> 50 #include <linux/ctype.h> 51 #include <asm/byteorder.h> 52 #include <asm/unaligned.h> 53 54 #include <usb.h> 55 #ifdef CONFIG_4xx 56 #include <asm/4xx_pci.h> 57 #endif 58 59 #ifdef DEBUG 60 #define USB_DEBUG 1 61 #define USB_HUB_DEBUG 1 62 #else 63 #define USB_DEBUG 0 64 #define USB_HUB_DEBUG 0 65 #endif 66 67 #define USB_PRINTF(fmt, args...) debug_cond(USB_DEBUG, fmt, ##args) 68 #define USB_HUB_PRINTF(fmt, args...) debug_cond(USB_HUB_DEBUG, fmt, ##args) 69 70 #define USB_BUFSIZ 512 71 72 static struct usb_device usb_dev[USB_MAX_DEVICE]; 73 static int dev_index; 74 static int running; 75 static int asynch_allowed; 76 static struct devrequest setup_packet; 77 78 char usb_started; /* flag for the started/stopped USB status */ 79 80 /********************************************************************** 81 * some forward declerations... 82 */ 83 void usb_scan_devices(void); 84 85 int usb_hub_probe(struct usb_device *dev, int ifnum); 86 void usb_hub_reset(void); 87 static int hub_port_reset(struct usb_device *dev, int port, 88 unsigned short *portstat); 89 90 /*********************************************************************** 91 * wait_ms 92 */ 93 94 inline void wait_ms(unsigned long ms) 95 { 96 while (ms-- > 0) 97 udelay(1000); 98 } 99 100 /*************************************************************************** 101 * Init USB Device 102 */ 103 104 int usb_init(void) 105 { 106 int result; 107 108 running = 0; 109 dev_index = 0; 110 asynch_allowed = 1; 111 usb_hub_reset(); 112 /* init low_level USB */ 113 printf("USB: "); 114 result = usb_lowlevel_init(); 115 /* if lowlevel init is OK, scan the bus for devices 116 * i.e. search HUBs and configure them */ 117 if (result == 0) { 118 printf("scanning bus for devices... "); 119 running = 1; 120 usb_scan_devices(); 121 usb_started = 1; 122 return 0; 123 } else { 124 printf("Error, couldn't init Lowlevel part\n"); 125 usb_started = 0; 126 return -1; 127 } 128 } 129 130 /****************************************************************************** 131 * Stop USB this stops the LowLevel Part and deregisters USB devices. 132 */ 133 int usb_stop(void) 134 { 135 int res = 0; 136 137 if (usb_started) { 138 asynch_allowed = 1; 139 usb_started = 0; 140 usb_hub_reset(); 141 res = usb_lowlevel_stop(); 142 } 143 return res; 144 } 145 146 /* 147 * disables the asynch behaviour of the control message. This is used for data 148 * transfers that uses the exclusiv access to the control and bulk messages. 149 * Returns the old value so it can be restored later. 150 */ 151 int usb_disable_asynch(int disable) 152 { 153 int old_value = asynch_allowed; 154 155 asynch_allowed = !disable; 156 return old_value; 157 } 158 159 160 /*------------------------------------------------------------------- 161 * Message wrappers. 162 * 163 */ 164 165 /* 166 * submits an Interrupt Message 167 */ 168 int usb_submit_int_msg(struct usb_device *dev, unsigned long pipe, 169 void *buffer, int transfer_len, int interval) 170 { 171 return submit_int_msg(dev, pipe, buffer, transfer_len, interval); 172 } 173 174 /* 175 * submits a control message and waits for comletion (at least timeout * 1ms) 176 * If timeout is 0, we don't wait for completion (used as example to set and 177 * clear keyboards LEDs). For data transfers, (storage transfers) we don't 178 * allow control messages with 0 timeout, by previousely resetting the flag 179 * asynch_allowed (usb_disable_asynch(1)). 180 * returns the transfered length if OK or -1 if error. The transfered length 181 * and the current status are stored in the dev->act_len and dev->status. 182 */ 183 int usb_control_msg(struct usb_device *dev, unsigned int pipe, 184 unsigned char request, unsigned char requesttype, 185 unsigned short value, unsigned short index, 186 void *data, unsigned short size, int timeout) 187 { 188 if ((timeout == 0) && (!asynch_allowed)) { 189 /* request for a asynch control pipe is not allowed */ 190 return -1; 191 } 192 193 /* set setup command */ 194 setup_packet.requesttype = requesttype; 195 setup_packet.request = request; 196 setup_packet.value = cpu_to_le16(value); 197 setup_packet.index = cpu_to_le16(index); 198 setup_packet.length = cpu_to_le16(size); 199 USB_PRINTF("usb_control_msg: request: 0x%X, requesttype: 0x%X, " \ 200 "value 0x%X index 0x%X length 0x%X\n", 201 request, requesttype, value, index, size); 202 dev->status = USB_ST_NOT_PROC; /*not yet processed */ 203 204 submit_control_msg(dev, pipe, data, size, &setup_packet); 205 if (timeout == 0) 206 return (int)size; 207 208 /* 209 * Wait for status to update until timeout expires, USB driver 210 * interrupt handler may set the status when the USB operation has 211 * been completed. 212 */ 213 while (timeout--) { 214 if (!((volatile unsigned long)dev->status & USB_ST_NOT_PROC)) 215 break; 216 wait_ms(1); 217 } 218 if (dev->status) 219 return -1; 220 221 return dev->act_len; 222 223 } 224 225 /*------------------------------------------------------------------- 226 * submits bulk message, and waits for completion. returns 0 if Ok or 227 * -1 if Error. 228 * synchronous behavior 229 */ 230 int usb_bulk_msg(struct usb_device *dev, unsigned int pipe, 231 void *data, int len, int *actual_length, int timeout) 232 { 233 if (len < 0) 234 return -1; 235 dev->status = USB_ST_NOT_PROC; /*not yet processed */ 236 submit_bulk_msg(dev, pipe, data, len); 237 while (timeout--) { 238 if (!((volatile unsigned long)dev->status & USB_ST_NOT_PROC)) 239 break; 240 wait_ms(1); 241 } 242 *actual_length = dev->act_len; 243 if (dev->status == 0) 244 return 0; 245 else 246 return -1; 247 } 248 249 250 /*------------------------------------------------------------------- 251 * Max Packet stuff 252 */ 253 254 /* 255 * returns the max packet size, depending on the pipe direction and 256 * the configurations values 257 */ 258 int usb_maxpacket(struct usb_device *dev, unsigned long pipe) 259 { 260 /* direction is out -> use emaxpacket out */ 261 if ((pipe & USB_DIR_IN) == 0) 262 return dev->epmaxpacketout[((pipe>>15) & 0xf)]; 263 else 264 return dev->epmaxpacketin[((pipe>>15) & 0xf)]; 265 } 266 267 /* 268 * The routine usb_set_maxpacket_ep() is extracted from the loop of routine 269 * usb_set_maxpacket(), because the optimizer of GCC 4.x chokes on this routine 270 * when it is inlined in 1 single routine. What happens is that the register r3 271 * is used as loop-count 'i', but gets overwritten later on. 272 * This is clearly a compiler bug, but it is easier to workaround it here than 273 * to update the compiler (Occurs with at least several GCC 4.{1,2},x 274 * CodeSourcery compilers like e.g. 2007q3, 2008q1, 2008q3 lite editions on ARM) 275 * 276 * NOTE: Similar behaviour was observed with GCC4.6 on ARMv5. 277 */ 278 static void __attribute__((noinline)) 279 usb_set_maxpacket_ep(struct usb_device *dev, int if_idx, int ep_idx) 280 { 281 int b; 282 struct usb_endpoint_descriptor *ep; 283 u16 ep_wMaxPacketSize; 284 285 ep = &dev->config.if_desc[if_idx].ep_desc[ep_idx]; 286 287 b = ep->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK; 288 ep_wMaxPacketSize = get_unaligned(&ep->wMaxPacketSize); 289 290 if ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == 291 USB_ENDPOINT_XFER_CONTROL) { 292 /* Control => bidirectional */ 293 dev->epmaxpacketout[b] = ep_wMaxPacketSize; 294 dev->epmaxpacketin[b] = ep_wMaxPacketSize; 295 USB_PRINTF("##Control EP epmaxpacketout/in[%d] = %d\n", 296 b, dev->epmaxpacketin[b]); 297 } else { 298 if ((ep->bEndpointAddress & 0x80) == 0) { 299 /* OUT Endpoint */ 300 if (ep_wMaxPacketSize > dev->epmaxpacketout[b]) { 301 dev->epmaxpacketout[b] = ep_wMaxPacketSize; 302 USB_PRINTF("##EP epmaxpacketout[%d] = %d\n", 303 b, dev->epmaxpacketout[b]); 304 } 305 } else { 306 /* IN Endpoint */ 307 if (ep_wMaxPacketSize > dev->epmaxpacketin[b]) { 308 dev->epmaxpacketin[b] = ep_wMaxPacketSize; 309 USB_PRINTF("##EP epmaxpacketin[%d] = %d\n", 310 b, dev->epmaxpacketin[b]); 311 } 312 } /* if out */ 313 } /* if control */ 314 } 315 316 /* 317 * set the max packed value of all endpoints in the given configuration 318 */ 319 int usb_set_maxpacket(struct usb_device *dev) 320 { 321 int i, ii; 322 323 for (i = 0; i < dev->config.desc.bNumInterfaces; i++) 324 for (ii = 0; ii < dev->config.if_desc[i].desc.bNumEndpoints; ii++) 325 usb_set_maxpacket_ep(dev, i, ii); 326 327 return 0; 328 } 329 330 /******************************************************************************* 331 * Parse the config, located in buffer, and fills the dev->config structure. 332 * Note that all little/big endian swapping are done automatically. 333 */ 334 int usb_parse_config(struct usb_device *dev, unsigned char *buffer, int cfgno) 335 { 336 struct usb_descriptor_header *head; 337 int index, ifno, epno, curr_if_num; 338 int i; 339 u16 ep_wMaxPacketSize; 340 341 ifno = -1; 342 epno = -1; 343 curr_if_num = -1; 344 345 dev->configno = cfgno; 346 head = (struct usb_descriptor_header *) &buffer[0]; 347 if (head->bDescriptorType != USB_DT_CONFIG) { 348 printf(" ERROR: NOT USB_CONFIG_DESC %x\n", 349 head->bDescriptorType); 350 return -1; 351 } 352 memcpy(&dev->config, buffer, buffer[0]); 353 le16_to_cpus(&(dev->config.desc.wTotalLength)); 354 dev->config.no_of_if = 0; 355 356 index = dev->config.desc.bLength; 357 /* Ok the first entry must be a configuration entry, 358 * now process the others */ 359 head = (struct usb_descriptor_header *) &buffer[index]; 360 while (index + 1 < dev->config.desc.wTotalLength) { 361 switch (head->bDescriptorType) { 362 case USB_DT_INTERFACE: 363 if (((struct usb_interface_descriptor *) \ 364 &buffer[index])->bInterfaceNumber != curr_if_num) { 365 /* this is a new interface, copy new desc */ 366 ifno = dev->config.no_of_if; 367 dev->config.no_of_if++; 368 memcpy(&dev->config.if_desc[ifno], 369 &buffer[index], buffer[index]); 370 dev->config.if_desc[ifno].no_of_ep = 0; 371 dev->config.if_desc[ifno].num_altsetting = 1; 372 curr_if_num = 373 dev->config.if_desc[ifno].desc.bInterfaceNumber; 374 } else { 375 /* found alternate setting for the interface */ 376 dev->config.if_desc[ifno].num_altsetting++; 377 } 378 break; 379 case USB_DT_ENDPOINT: 380 epno = dev->config.if_desc[ifno].no_of_ep; 381 /* found an endpoint */ 382 dev->config.if_desc[ifno].no_of_ep++; 383 memcpy(&dev->config.if_desc[ifno].ep_desc[epno], 384 &buffer[index], buffer[index]); 385 ep_wMaxPacketSize = get_unaligned(&dev->config.\ 386 if_desc[ifno].\ 387 ep_desc[epno].\ 388 wMaxPacketSize); 389 put_unaligned(le16_to_cpu(ep_wMaxPacketSize), 390 &dev->config.\ 391 if_desc[ifno].\ 392 ep_desc[epno].\ 393 wMaxPacketSize); 394 USB_PRINTF("if %d, ep %d\n", ifno, epno); 395 break; 396 default: 397 if (head->bLength == 0) 398 return 1; 399 400 USB_PRINTF("unknown Description Type : %x\n", 401 head->bDescriptorType); 402 403 { 404 #ifdef USB_DEBUG 405 unsigned char *ch = (unsigned char *)head; 406 #endif 407 for (i = 0; i < head->bLength; i++) 408 USB_PRINTF("%02X ", *ch++); 409 USB_PRINTF("\n\n\n"); 410 } 411 break; 412 } 413 index += head->bLength; 414 head = (struct usb_descriptor_header *)&buffer[index]; 415 } 416 return 1; 417 } 418 419 /*********************************************************************** 420 * Clears an endpoint 421 * endp: endpoint number in bits 0-3; 422 * direction flag in bit 7 (1 = IN, 0 = OUT) 423 */ 424 int usb_clear_halt(struct usb_device *dev, int pipe) 425 { 426 int result; 427 int endp = usb_pipeendpoint(pipe)|(usb_pipein(pipe)<<7); 428 429 result = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), 430 USB_REQ_CLEAR_FEATURE, USB_RECIP_ENDPOINT, 0, 431 endp, NULL, 0, USB_CNTL_TIMEOUT * 3); 432 433 /* don't clear if failed */ 434 if (result < 0) 435 return result; 436 437 /* 438 * NOTE: we do not get status and verify reset was successful 439 * as some devices are reported to lock up upon this check.. 440 */ 441 442 usb_endpoint_running(dev, usb_pipeendpoint(pipe), usb_pipeout(pipe)); 443 444 /* toggle is reset on clear */ 445 usb_settoggle(dev, usb_pipeendpoint(pipe), usb_pipeout(pipe), 0); 446 return 0; 447 } 448 449 450 /********************************************************************** 451 * get_descriptor type 452 */ 453 int usb_get_descriptor(struct usb_device *dev, unsigned char type, 454 unsigned char index, void *buf, int size) 455 { 456 int res; 457 res = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), 458 USB_REQ_GET_DESCRIPTOR, USB_DIR_IN, 459 (type << 8) + index, 0, 460 buf, size, USB_CNTL_TIMEOUT); 461 return res; 462 } 463 464 /********************************************************************** 465 * gets configuration cfgno and store it in the buffer 466 */ 467 int usb_get_configuration_no(struct usb_device *dev, 468 unsigned char *buffer, int cfgno) 469 { 470 int result; 471 unsigned int tmp; 472 struct usb_configuration_descriptor *config; 473 474 config = (struct usb_configuration_descriptor *)&buffer[0]; 475 result = usb_get_descriptor(dev, USB_DT_CONFIG, cfgno, buffer, 9); 476 if (result < 9) { 477 if (result < 0) 478 printf("unable to get descriptor, error %lX\n", 479 dev->status); 480 else 481 printf("config descriptor too short " \ 482 "(expected %i, got %i)\n", 9, result); 483 return -1; 484 } 485 tmp = le16_to_cpu(config->wTotalLength); 486 487 if (tmp > USB_BUFSIZ) { 488 USB_PRINTF("usb_get_configuration_no: failed to get " \ 489 "descriptor - too long: %d\n", tmp); 490 return -1; 491 } 492 493 result = usb_get_descriptor(dev, USB_DT_CONFIG, cfgno, buffer, tmp); 494 USB_PRINTF("get_conf_no %d Result %d, wLength %d\n", 495 cfgno, result, tmp); 496 return result; 497 } 498 499 /******************************************************************** 500 * set address of a device to the value in dev->devnum. 501 * This can only be done by addressing the device via the default address (0) 502 */ 503 int usb_set_address(struct usb_device *dev) 504 { 505 int res; 506 507 USB_PRINTF("set address %d\n", dev->devnum); 508 res = usb_control_msg(dev, usb_snddefctrl(dev), 509 USB_REQ_SET_ADDRESS, 0, 510 (dev->devnum), 0, 511 NULL, 0, USB_CNTL_TIMEOUT); 512 return res; 513 } 514 515 /******************************************************************** 516 * set interface number to interface 517 */ 518 int usb_set_interface(struct usb_device *dev, int interface, int alternate) 519 { 520 struct usb_interface *if_face = NULL; 521 int ret, i; 522 523 for (i = 0; i < dev->config.desc.bNumInterfaces; i++) { 524 if (dev->config.if_desc[i].desc.bInterfaceNumber == interface) { 525 if_face = &dev->config.if_desc[i]; 526 break; 527 } 528 } 529 if (!if_face) { 530 printf("selecting invalid interface %d", interface); 531 return -1; 532 } 533 /* 534 * We should return now for devices with only one alternate setting. 535 * According to 9.4.10 of the Universal Serial Bus Specification 536 * Revision 2.0 such devices can return with a STALL. This results in 537 * some USB sticks timeouting during initialization and then being 538 * unusable in U-Boot. 539 */ 540 if (if_face->num_altsetting == 1) 541 return 0; 542 543 ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), 544 USB_REQ_SET_INTERFACE, USB_RECIP_INTERFACE, 545 alternate, interface, NULL, 0, 546 USB_CNTL_TIMEOUT * 5); 547 if (ret < 0) 548 return ret; 549 550 return 0; 551 } 552 553 /******************************************************************** 554 * set configuration number to configuration 555 */ 556 int usb_set_configuration(struct usb_device *dev, int configuration) 557 { 558 int res; 559 USB_PRINTF("set configuration %d\n", configuration); 560 /* set setup command */ 561 res = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), 562 USB_REQ_SET_CONFIGURATION, 0, 563 configuration, 0, 564 NULL, 0, USB_CNTL_TIMEOUT); 565 if (res == 0) { 566 dev->toggle[0] = 0; 567 dev->toggle[1] = 0; 568 return 0; 569 } else 570 return -1; 571 } 572 573 /******************************************************************** 574 * set protocol to protocol 575 */ 576 int usb_set_protocol(struct usb_device *dev, int ifnum, int protocol) 577 { 578 return usb_control_msg(dev, usb_sndctrlpipe(dev, 0), 579 USB_REQ_SET_PROTOCOL, USB_TYPE_CLASS | USB_RECIP_INTERFACE, 580 protocol, ifnum, NULL, 0, USB_CNTL_TIMEOUT); 581 } 582 583 /******************************************************************** 584 * set idle 585 */ 586 int usb_set_idle(struct usb_device *dev, int ifnum, int duration, int report_id) 587 { 588 return usb_control_msg(dev, usb_sndctrlpipe(dev, 0), 589 USB_REQ_SET_IDLE, USB_TYPE_CLASS | USB_RECIP_INTERFACE, 590 (duration << 8) | report_id, ifnum, NULL, 0, USB_CNTL_TIMEOUT); 591 } 592 593 /******************************************************************** 594 * get report 595 */ 596 int usb_get_report(struct usb_device *dev, int ifnum, unsigned char type, 597 unsigned char id, void *buf, int size) 598 { 599 return usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), 600 USB_REQ_GET_REPORT, 601 USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE, 602 (type << 8) + id, ifnum, buf, size, USB_CNTL_TIMEOUT); 603 } 604 605 /******************************************************************** 606 * get class descriptor 607 */ 608 int usb_get_class_descriptor(struct usb_device *dev, int ifnum, 609 unsigned char type, unsigned char id, void *buf, int size) 610 { 611 return usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), 612 USB_REQ_GET_DESCRIPTOR, USB_RECIP_INTERFACE | USB_DIR_IN, 613 (type << 8) + id, ifnum, buf, size, USB_CNTL_TIMEOUT); 614 } 615 616 /******************************************************************** 617 * get string index in buffer 618 */ 619 int usb_get_string(struct usb_device *dev, unsigned short langid, 620 unsigned char index, void *buf, int size) 621 { 622 int i; 623 int result; 624 625 for (i = 0; i < 3; ++i) { 626 /* some devices are flaky */ 627 result = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), 628 USB_REQ_GET_DESCRIPTOR, USB_DIR_IN, 629 (USB_DT_STRING << 8) + index, langid, buf, size, 630 USB_CNTL_TIMEOUT); 631 632 if (result > 0) 633 break; 634 } 635 636 return result; 637 } 638 639 640 static void usb_try_string_workarounds(unsigned char *buf, int *length) 641 { 642 int newlength, oldlength = *length; 643 644 for (newlength = 2; newlength + 1 < oldlength; newlength += 2) 645 if (!isprint(buf[newlength]) || buf[newlength + 1]) 646 break; 647 648 if (newlength > 2) { 649 buf[0] = newlength; 650 *length = newlength; 651 } 652 } 653 654 655 static int usb_string_sub(struct usb_device *dev, unsigned int langid, 656 unsigned int index, unsigned char *buf) 657 { 658 int rc; 659 660 /* Try to read the string descriptor by asking for the maximum 661 * possible number of bytes */ 662 rc = usb_get_string(dev, langid, index, buf, 255); 663 664 /* If that failed try to read the descriptor length, then 665 * ask for just that many bytes */ 666 if (rc < 2) { 667 rc = usb_get_string(dev, langid, index, buf, 2); 668 if (rc == 2) 669 rc = usb_get_string(dev, langid, index, buf, buf[0]); 670 } 671 672 if (rc >= 2) { 673 if (!buf[0] && !buf[1]) 674 usb_try_string_workarounds(buf, &rc); 675 676 /* There might be extra junk at the end of the descriptor */ 677 if (buf[0] < rc) 678 rc = buf[0]; 679 680 rc = rc - (rc & 1); /* force a multiple of two */ 681 } 682 683 if (rc < 2) 684 rc = -1; 685 686 return rc; 687 } 688 689 690 /******************************************************************** 691 * usb_string: 692 * Get string index and translate it to ascii. 693 * returns string length (> 0) or error (< 0) 694 */ 695 int usb_string(struct usb_device *dev, int index, char *buf, size_t size) 696 { 697 unsigned char mybuf[USB_BUFSIZ]; 698 unsigned char *tbuf; 699 int err; 700 unsigned int u, idx; 701 702 if (size <= 0 || !buf || !index) 703 return -1; 704 buf[0] = 0; 705 tbuf = &mybuf[0]; 706 707 /* get langid for strings if it's not yet known */ 708 if (!dev->have_langid) { 709 err = usb_string_sub(dev, 0, 0, tbuf); 710 if (err < 0) { 711 USB_PRINTF("error getting string descriptor 0 " \ 712 "(error=%lx)\n", dev->status); 713 return -1; 714 } else if (tbuf[0] < 4) { 715 USB_PRINTF("string descriptor 0 too short\n"); 716 return -1; 717 } else { 718 dev->have_langid = -1; 719 dev->string_langid = tbuf[2] | (tbuf[3] << 8); 720 /* always use the first langid listed */ 721 USB_PRINTF("USB device number %d default " \ 722 "language ID 0x%x\n", 723 dev->devnum, dev->string_langid); 724 } 725 } 726 727 err = usb_string_sub(dev, dev->string_langid, index, tbuf); 728 if (err < 0) 729 return err; 730 731 size--; /* leave room for trailing NULL char in output buffer */ 732 for (idx = 0, u = 2; u < err; u += 2) { 733 if (idx >= size) 734 break; 735 if (tbuf[u+1]) /* high byte */ 736 buf[idx++] = '?'; /* non-ASCII character */ 737 else 738 buf[idx++] = tbuf[u]; 739 } 740 buf[idx] = 0; 741 err = idx; 742 return err; 743 } 744 745 746 /******************************************************************** 747 * USB device handling: 748 * the USB device are static allocated [USB_MAX_DEVICE]. 749 */ 750 751 752 /* returns a pointer to the device with the index [index]. 753 * if the device is not assigned (dev->devnum==-1) returns NULL 754 */ 755 struct usb_device *usb_get_dev_index(int index) 756 { 757 if (usb_dev[index].devnum == -1) 758 return NULL; 759 else 760 return &usb_dev[index]; 761 } 762 763 764 /* returns a pointer of a new device structure or NULL, if 765 * no device struct is available 766 */ 767 struct usb_device *usb_alloc_new_device(void) 768 { 769 int i; 770 USB_PRINTF("New Device %d\n", dev_index); 771 if (dev_index == USB_MAX_DEVICE) { 772 printf("ERROR, too many USB Devices, max=%d\n", USB_MAX_DEVICE); 773 return NULL; 774 } 775 /* default Address is 0, real addresses start with 1 */ 776 usb_dev[dev_index].devnum = dev_index + 1; 777 usb_dev[dev_index].maxchild = 0; 778 for (i = 0; i < USB_MAXCHILDREN; i++) 779 usb_dev[dev_index].children[i] = NULL; 780 usb_dev[dev_index].parent = NULL; 781 dev_index++; 782 return &usb_dev[dev_index - 1]; 783 } 784 785 786 /* 787 * By the time we get here, the device has gotten a new device ID 788 * and is in the default state. We need to identify the thing and 789 * get the ball rolling.. 790 * 791 * Returns 0 for success, != 0 for error. 792 */ 793 int usb_new_device(struct usb_device *dev) 794 { 795 int addr, err; 796 int tmp; 797 unsigned char tmpbuf[USB_BUFSIZ]; 798 799 /* We still haven't set the Address yet */ 800 addr = dev->devnum; 801 dev->devnum = 0; 802 803 #ifdef CONFIG_LEGACY_USB_INIT_SEQ 804 /* this is the old and known way of initializing devices, it is 805 * different than what Windows and Linux are doing. Windows and Linux 806 * both retrieve 64 bytes while reading the device descriptor 807 * Several USB stick devices report ERR: CTL_TIMEOUT, caused by an 808 * invalid header while reading 8 bytes as device descriptor. */ 809 dev->descriptor.bMaxPacketSize0 = 8; /* Start off at 8 bytes */ 810 dev->maxpacketsize = PACKET_SIZE_8; 811 dev->epmaxpacketin[0] = 8; 812 dev->epmaxpacketout[0] = 8; 813 814 err = usb_get_descriptor(dev, USB_DT_DEVICE, 0, &dev->descriptor, 8); 815 if (err < 8) { 816 printf("\n USB device not responding, " \ 817 "giving up (status=%lX)\n", dev->status); 818 return 1; 819 } 820 #else 821 /* This is a Windows scheme of initialization sequence, with double 822 * reset of the device (Linux uses the same sequence) 823 * Some equipment is said to work only with such init sequence; this 824 * patch is based on the work by Alan Stern: 825 * http://sourceforge.net/mailarchive/forum.php? 826 * thread_id=5729457&forum_id=5398 827 */ 828 struct usb_device_descriptor *desc; 829 int port = -1; 830 struct usb_device *parent = dev->parent; 831 unsigned short portstatus; 832 833 /* send 64-byte GET-DEVICE-DESCRIPTOR request. Since the descriptor is 834 * only 18 bytes long, this will terminate with a short packet. But if 835 * the maxpacket size is 8 or 16 the device may be waiting to transmit 836 * some more, or keeps on retransmitting the 8 byte header. */ 837 838 desc = (struct usb_device_descriptor *)tmpbuf; 839 dev->descriptor.bMaxPacketSize0 = 64; /* Start off at 64 bytes */ 840 /* Default to 64 byte max packet size */ 841 dev->maxpacketsize = PACKET_SIZE_64; 842 dev->epmaxpacketin[0] = 64; 843 dev->epmaxpacketout[0] = 64; 844 845 err = usb_get_descriptor(dev, USB_DT_DEVICE, 0, desc, 64); 846 if (err < 0) { 847 USB_PRINTF("usb_new_device: usb_get_descriptor() failed\n"); 848 return 1; 849 } 850 851 dev->descriptor.bMaxPacketSize0 = desc->bMaxPacketSize0; 852 853 /* find the port number we're at */ 854 if (parent) { 855 int j; 856 857 for (j = 0; j < parent->maxchild; j++) { 858 if (parent->children[j] == dev) { 859 port = j; 860 break; 861 } 862 } 863 if (port < 0) { 864 printf("usb_new_device:cannot locate device's port.\n"); 865 return 1; 866 } 867 868 /* reset the port for the second time */ 869 err = hub_port_reset(dev->parent, port, &portstatus); 870 if (err < 0) { 871 printf("\n Couldn't reset port %i\n", port); 872 return 1; 873 } 874 } 875 #endif 876 877 dev->epmaxpacketin[0] = dev->descriptor.bMaxPacketSize0; 878 dev->epmaxpacketout[0] = dev->descriptor.bMaxPacketSize0; 879 switch (dev->descriptor.bMaxPacketSize0) { 880 case 8: 881 dev->maxpacketsize = PACKET_SIZE_8; 882 break; 883 case 16: 884 dev->maxpacketsize = PACKET_SIZE_16; 885 break; 886 case 32: 887 dev->maxpacketsize = PACKET_SIZE_32; 888 break; 889 case 64: 890 dev->maxpacketsize = PACKET_SIZE_64; 891 break; 892 } 893 dev->devnum = addr; 894 895 err = usb_set_address(dev); /* set address */ 896 897 if (err < 0) { 898 printf("\n USB device not accepting new address " \ 899 "(error=%lX)\n", dev->status); 900 return 1; 901 } 902 903 wait_ms(10); /* Let the SET_ADDRESS settle */ 904 905 tmp = sizeof(dev->descriptor); 906 907 err = usb_get_descriptor(dev, USB_DT_DEVICE, 0, 908 &dev->descriptor, sizeof(dev->descriptor)); 909 if (err < tmp) { 910 if (err < 0) 911 printf("unable to get device descriptor (error=%d)\n", 912 err); 913 else 914 printf("USB device descriptor short read " \ 915 "(expected %i, got %i)\n", tmp, err); 916 return 1; 917 } 918 /* correct le values */ 919 le16_to_cpus(&dev->descriptor.bcdUSB); 920 le16_to_cpus(&dev->descriptor.idVendor); 921 le16_to_cpus(&dev->descriptor.idProduct); 922 le16_to_cpus(&dev->descriptor.bcdDevice); 923 /* only support for one config for now */ 924 usb_get_configuration_no(dev, &tmpbuf[0], 0); 925 usb_parse_config(dev, &tmpbuf[0], 0); 926 usb_set_maxpacket(dev); 927 /* we set the default configuration here */ 928 if (usb_set_configuration(dev, dev->config.desc.bConfigurationValue)) { 929 printf("failed to set default configuration " \ 930 "len %d, status %lX\n", dev->act_len, dev->status); 931 return -1; 932 } 933 USB_PRINTF("new device strings: Mfr=%d, Product=%d, SerialNumber=%d\n", 934 dev->descriptor.iManufacturer, dev->descriptor.iProduct, 935 dev->descriptor.iSerialNumber); 936 memset(dev->mf, 0, sizeof(dev->mf)); 937 memset(dev->prod, 0, sizeof(dev->prod)); 938 memset(dev->serial, 0, sizeof(dev->serial)); 939 if (dev->descriptor.iManufacturer) 940 usb_string(dev, dev->descriptor.iManufacturer, 941 dev->mf, sizeof(dev->mf)); 942 if (dev->descriptor.iProduct) 943 usb_string(dev, dev->descriptor.iProduct, 944 dev->prod, sizeof(dev->prod)); 945 if (dev->descriptor.iSerialNumber) 946 usb_string(dev, dev->descriptor.iSerialNumber, 947 dev->serial, sizeof(dev->serial)); 948 USB_PRINTF("Manufacturer %s\n", dev->mf); 949 USB_PRINTF("Product %s\n", dev->prod); 950 USB_PRINTF("SerialNumber %s\n", dev->serial); 951 /* now prode if the device is a hub */ 952 usb_hub_probe(dev, 0); 953 return 0; 954 } 955 956 /* build device Tree */ 957 void usb_scan_devices(void) 958 { 959 int i; 960 struct usb_device *dev; 961 962 /* first make all devices unknown */ 963 for (i = 0; i < USB_MAX_DEVICE; i++) { 964 memset(&usb_dev[i], 0, sizeof(struct usb_device)); 965 usb_dev[i].devnum = -1; 966 } 967 dev_index = 0; 968 /* device 0 is always present (root hub, so let it analyze) */ 969 dev = usb_alloc_new_device(); 970 if (usb_new_device(dev)) 971 printf("No USB Device found\n"); 972 else 973 printf("%d USB Device(s) found\n", dev_index); 974 /* insert "driver" if possible */ 975 #ifdef CONFIG_USB_KEYBOARD 976 drv_usb_kbd_init(); 977 #endif 978 USB_PRINTF("scan end\n"); 979 } 980 981 982 /**************************************************************************** 983 * HUB "Driver" 984 * Probes device for being a hub and configurate it 985 */ 986 987 static struct usb_hub_device hub_dev[USB_MAX_HUB]; 988 static int usb_hub_index; 989 990 991 int usb_get_hub_descriptor(struct usb_device *dev, void *data, int size) 992 { 993 return usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), 994 USB_REQ_GET_DESCRIPTOR, USB_DIR_IN | USB_RT_HUB, 995 USB_DT_HUB << 8, 0, data, size, USB_CNTL_TIMEOUT); 996 } 997 998 int usb_clear_hub_feature(struct usb_device *dev, int feature) 999 { 1000 return usb_control_msg(dev, usb_sndctrlpipe(dev, 0), 1001 USB_REQ_CLEAR_FEATURE, USB_RT_HUB, feature, 1002 0, NULL, 0, USB_CNTL_TIMEOUT); 1003 } 1004 1005 int usb_clear_port_feature(struct usb_device *dev, int port, int feature) 1006 { 1007 return usb_control_msg(dev, usb_sndctrlpipe(dev, 0), 1008 USB_REQ_CLEAR_FEATURE, USB_RT_PORT, feature, 1009 port, NULL, 0, USB_CNTL_TIMEOUT); 1010 } 1011 1012 int usb_set_port_feature(struct usb_device *dev, int port, int feature) 1013 { 1014 return usb_control_msg(dev, usb_sndctrlpipe(dev, 0), 1015 USB_REQ_SET_FEATURE, USB_RT_PORT, feature, 1016 port, NULL, 0, USB_CNTL_TIMEOUT); 1017 } 1018 1019 int usb_get_hub_status(struct usb_device *dev, void *data) 1020 { 1021 return usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), 1022 USB_REQ_GET_STATUS, USB_DIR_IN | USB_RT_HUB, 0, 0, 1023 data, sizeof(struct usb_hub_status), USB_CNTL_TIMEOUT); 1024 } 1025 1026 int usb_get_port_status(struct usb_device *dev, int port, void *data) 1027 { 1028 return usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), 1029 USB_REQ_GET_STATUS, USB_DIR_IN | USB_RT_PORT, 0, port, 1030 data, sizeof(struct usb_hub_status), USB_CNTL_TIMEOUT); 1031 } 1032 1033 1034 static void usb_hub_power_on(struct usb_hub_device *hub) 1035 { 1036 int i; 1037 struct usb_device *dev; 1038 1039 dev = hub->pusb_dev; 1040 /* Enable power to the ports */ 1041 USB_HUB_PRINTF("enabling power on all ports\n"); 1042 for (i = 0; i < dev->maxchild; i++) { 1043 usb_set_port_feature(dev, i + 1, USB_PORT_FEAT_POWER); 1044 USB_HUB_PRINTF("port %d returns %lX\n", i + 1, dev->status); 1045 wait_ms(hub->desc.bPwrOn2PwrGood * 2); 1046 } 1047 } 1048 1049 void usb_hub_reset(void) 1050 { 1051 usb_hub_index = 0; 1052 } 1053 1054 struct usb_hub_device *usb_hub_allocate(void) 1055 { 1056 if (usb_hub_index < USB_MAX_HUB) 1057 return &hub_dev[usb_hub_index++]; 1058 1059 printf("ERROR: USB_MAX_HUB (%d) reached\n", USB_MAX_HUB); 1060 return NULL; 1061 } 1062 1063 #define MAX_TRIES 5 1064 1065 static inline char *portspeed(int portstatus) 1066 { 1067 if (portstatus & (1 << USB_PORT_FEAT_HIGHSPEED)) 1068 return "480 Mb/s"; 1069 else if (portstatus & (1 << USB_PORT_FEAT_LOWSPEED)) 1070 return "1.5 Mb/s"; 1071 else 1072 return "12 Mb/s"; 1073 } 1074 1075 static int hub_port_reset(struct usb_device *dev, int port, 1076 unsigned short *portstat) 1077 { 1078 int tries; 1079 struct usb_port_status portsts; 1080 unsigned short portstatus, portchange; 1081 1082 USB_HUB_PRINTF("hub_port_reset: resetting port %d...\n", port); 1083 for (tries = 0; tries < MAX_TRIES; tries++) { 1084 1085 usb_set_port_feature(dev, port + 1, USB_PORT_FEAT_RESET); 1086 wait_ms(200); 1087 1088 if (usb_get_port_status(dev, port + 1, &portsts) < 0) { 1089 USB_HUB_PRINTF("get_port_status failed status %lX\n", 1090 dev->status); 1091 return -1; 1092 } 1093 portstatus = le16_to_cpu(portsts.wPortStatus); 1094 portchange = le16_to_cpu(portsts.wPortChange); 1095 1096 USB_HUB_PRINTF("portstatus %x, change %x, %s\n", 1097 portstatus, portchange, 1098 portspeed(portstatus)); 1099 1100 USB_HUB_PRINTF("STAT_C_CONNECTION = %d STAT_CONNECTION = %d" \ 1101 " USB_PORT_STAT_ENABLE %d\n", 1102 (portchange & USB_PORT_STAT_C_CONNECTION) ? 1 : 0, 1103 (portstatus & USB_PORT_STAT_CONNECTION) ? 1 : 0, 1104 (portstatus & USB_PORT_STAT_ENABLE) ? 1 : 0); 1105 1106 if ((portchange & USB_PORT_STAT_C_CONNECTION) || 1107 !(portstatus & USB_PORT_STAT_CONNECTION)) 1108 return -1; 1109 1110 if (portstatus & USB_PORT_STAT_ENABLE) 1111 break; 1112 1113 wait_ms(200); 1114 } 1115 1116 if (tries == MAX_TRIES) { 1117 USB_HUB_PRINTF("Cannot enable port %i after %i retries, " \ 1118 "disabling port.\n", port + 1, MAX_TRIES); 1119 USB_HUB_PRINTF("Maybe the USB cable is bad?\n"); 1120 return -1; 1121 } 1122 1123 usb_clear_port_feature(dev, port + 1, USB_PORT_FEAT_C_RESET); 1124 *portstat = portstatus; 1125 return 0; 1126 } 1127 1128 1129 void usb_hub_port_connect_change(struct usb_device *dev, int port) 1130 { 1131 struct usb_device *usb; 1132 struct usb_port_status portsts; 1133 unsigned short portstatus; 1134 1135 /* Check status */ 1136 if (usb_get_port_status(dev, port + 1, &portsts) < 0) { 1137 USB_HUB_PRINTF("get_port_status failed\n"); 1138 return; 1139 } 1140 1141 portstatus = le16_to_cpu(portsts.wPortStatus); 1142 USB_HUB_PRINTF("portstatus %x, change %x, %s\n", 1143 portstatus, 1144 le16_to_cpu(portsts.wPortChange), 1145 portspeed(portstatus)); 1146 1147 /* Clear the connection change status */ 1148 usb_clear_port_feature(dev, port + 1, USB_PORT_FEAT_C_CONNECTION); 1149 1150 /* Disconnect any existing devices under this port */ 1151 if (((!(portstatus & USB_PORT_STAT_CONNECTION)) && 1152 (!(portstatus & USB_PORT_STAT_ENABLE))) || (dev->children[port])) { 1153 USB_HUB_PRINTF("usb_disconnect(&hub->children[port]);\n"); 1154 /* Return now if nothing is connected */ 1155 if (!(portstatus & USB_PORT_STAT_CONNECTION)) 1156 return; 1157 } 1158 wait_ms(200); 1159 1160 /* Reset the port */ 1161 if (hub_port_reset(dev, port, &portstatus) < 0) { 1162 printf("cannot reset port %i!?\n", port + 1); 1163 return; 1164 } 1165 1166 wait_ms(200); 1167 1168 /* Allocate a new device struct for it */ 1169 usb = usb_alloc_new_device(); 1170 1171 if (portstatus & USB_PORT_STAT_HIGH_SPEED) 1172 usb->speed = USB_SPEED_HIGH; 1173 else if (portstatus & USB_PORT_STAT_LOW_SPEED) 1174 usb->speed = USB_SPEED_LOW; 1175 else 1176 usb->speed = USB_SPEED_FULL; 1177 1178 dev->children[port] = usb; 1179 usb->parent = dev; 1180 usb->portnr = port + 1; 1181 /* Run it through the hoops (find a driver, etc) */ 1182 if (usb_new_device(usb)) { 1183 /* Woops, disable the port */ 1184 USB_HUB_PRINTF("hub: disabling port %d\n", port + 1); 1185 usb_clear_port_feature(dev, port + 1, USB_PORT_FEAT_ENABLE); 1186 } 1187 } 1188 1189 1190 int usb_hub_configure(struct usb_device *dev) 1191 { 1192 int i; 1193 unsigned char buffer[USB_BUFSIZ], *bitmap; 1194 struct usb_hub_descriptor *descriptor; 1195 struct usb_hub_device *hub; 1196 #ifdef USB_HUB_DEBUG 1197 struct usb_hub_status *hubsts; 1198 #endif 1199 1200 /* "allocate" Hub device */ 1201 hub = usb_hub_allocate(); 1202 if (hub == NULL) 1203 return -1; 1204 hub->pusb_dev = dev; 1205 /* Get the the hub descriptor */ 1206 if (usb_get_hub_descriptor(dev, buffer, 4) < 0) { 1207 USB_HUB_PRINTF("usb_hub_configure: failed to get hub " \ 1208 "descriptor, giving up %lX\n", dev->status); 1209 return -1; 1210 } 1211 descriptor = (struct usb_hub_descriptor *)buffer; 1212 1213 /* silence compiler warning if USB_BUFSIZ is > 256 [= sizeof(char)] */ 1214 i = descriptor->bLength; 1215 if (i > USB_BUFSIZ) { 1216 USB_HUB_PRINTF("usb_hub_configure: failed to get hub " \ 1217 "descriptor - too long: %d\n", 1218 descriptor->bLength); 1219 return -1; 1220 } 1221 1222 if (usb_get_hub_descriptor(dev, buffer, descriptor->bLength) < 0) { 1223 USB_HUB_PRINTF("usb_hub_configure: failed to get hub " \ 1224 "descriptor 2nd giving up %lX\n", dev->status); 1225 return -1; 1226 } 1227 memcpy((unsigned char *)&hub->desc, buffer, descriptor->bLength); 1228 /* adjust 16bit values */ 1229 hub->desc.wHubCharacteristics = 1230 le16_to_cpu(descriptor->wHubCharacteristics); 1231 /* set the bitmap */ 1232 bitmap = (unsigned char *)&hub->desc.DeviceRemovable[0]; 1233 /* devices not removable by default */ 1234 memset(bitmap, 0xff, (USB_MAXCHILDREN+1+7)/8); 1235 bitmap = (unsigned char *)&hub->desc.PortPowerCtrlMask[0]; 1236 memset(bitmap, 0xff, (USB_MAXCHILDREN+1+7)/8); /* PowerMask = 1B */ 1237 1238 for (i = 0; i < ((hub->desc.bNbrPorts + 1 + 7)/8); i++) 1239 hub->desc.DeviceRemovable[i] = descriptor->DeviceRemovable[i]; 1240 1241 for (i = 0; i < ((hub->desc.bNbrPorts + 1 + 7)/8); i++) 1242 hub->desc.PortPowerCtrlMask[i] = descriptor->PortPowerCtrlMask[i]; 1243 1244 dev->maxchild = descriptor->bNbrPorts; 1245 USB_HUB_PRINTF("%d ports detected\n", dev->maxchild); 1246 1247 switch (hub->desc.wHubCharacteristics & HUB_CHAR_LPSM) { 1248 case 0x00: 1249 USB_HUB_PRINTF("ganged power switching\n"); 1250 break; 1251 case 0x01: 1252 USB_HUB_PRINTF("individual port power switching\n"); 1253 break; 1254 case 0x02: 1255 case 0x03: 1256 USB_HUB_PRINTF("unknown reserved power switching mode\n"); 1257 break; 1258 } 1259 1260 if (hub->desc.wHubCharacteristics & HUB_CHAR_COMPOUND) 1261 USB_HUB_PRINTF("part of a compound device\n"); 1262 else 1263 USB_HUB_PRINTF("standalone hub\n"); 1264 1265 switch (hub->desc.wHubCharacteristics & HUB_CHAR_OCPM) { 1266 case 0x00: 1267 USB_HUB_PRINTF("global over-current protection\n"); 1268 break; 1269 case 0x08: 1270 USB_HUB_PRINTF("individual port over-current protection\n"); 1271 break; 1272 case 0x10: 1273 case 0x18: 1274 USB_HUB_PRINTF("no over-current protection\n"); 1275 break; 1276 } 1277 1278 USB_HUB_PRINTF("power on to power good time: %dms\n", 1279 descriptor->bPwrOn2PwrGood * 2); 1280 USB_HUB_PRINTF("hub controller current requirement: %dmA\n", 1281 descriptor->bHubContrCurrent); 1282 1283 for (i = 0; i < dev->maxchild; i++) 1284 USB_HUB_PRINTF("port %d is%s removable\n", i + 1, 1285 hub->desc.DeviceRemovable[(i + 1) / 8] & \ 1286 (1 << ((i + 1) % 8)) ? " not" : ""); 1287 1288 if (sizeof(struct usb_hub_status) > USB_BUFSIZ) { 1289 USB_HUB_PRINTF("usb_hub_configure: failed to get Status - " \ 1290 "too long: %d\n", descriptor->bLength); 1291 return -1; 1292 } 1293 1294 if (usb_get_hub_status(dev, buffer) < 0) { 1295 USB_HUB_PRINTF("usb_hub_configure: failed to get Status %lX\n", 1296 dev->status); 1297 return -1; 1298 } 1299 1300 #ifdef USB_HUB_DEBUG 1301 hubsts = (struct usb_hub_status *)buffer; 1302 #endif 1303 USB_HUB_PRINTF("get_hub_status returned status %X, change %X\n", 1304 le16_to_cpu(hubsts->wHubStatus), 1305 le16_to_cpu(hubsts->wHubChange)); 1306 USB_HUB_PRINTF("local power source is %s\n", 1307 (le16_to_cpu(hubsts->wHubStatus) & HUB_STATUS_LOCAL_POWER) ? \ 1308 "lost (inactive)" : "good"); 1309 USB_HUB_PRINTF("%sover-current condition exists\n", 1310 (le16_to_cpu(hubsts->wHubStatus) & HUB_STATUS_OVERCURRENT) ? \ 1311 "" : "no "); 1312 usb_hub_power_on(hub); 1313 1314 for (i = 0; i < dev->maxchild; i++) { 1315 struct usb_port_status portsts; 1316 unsigned short portstatus, portchange; 1317 1318 if (usb_get_port_status(dev, i + 1, &portsts) < 0) { 1319 USB_HUB_PRINTF("get_port_status failed\n"); 1320 continue; 1321 } 1322 1323 portstatus = le16_to_cpu(portsts.wPortStatus); 1324 portchange = le16_to_cpu(portsts.wPortChange); 1325 USB_HUB_PRINTF("Port %d Status %X Change %X\n", 1326 i + 1, portstatus, portchange); 1327 1328 if (portchange & USB_PORT_STAT_C_CONNECTION) { 1329 USB_HUB_PRINTF("port %d connection change\n", i + 1); 1330 usb_hub_port_connect_change(dev, i); 1331 } 1332 if (portchange & USB_PORT_STAT_C_ENABLE) { 1333 USB_HUB_PRINTF("port %d enable change, status %x\n", 1334 i + 1, portstatus); 1335 usb_clear_port_feature(dev, i + 1, 1336 USB_PORT_FEAT_C_ENABLE); 1337 1338 /* EM interference sometimes causes bad shielded USB 1339 * devices to be shutdown by the hub, this hack enables 1340 * them again. Works at least with mouse driver */ 1341 if (!(portstatus & USB_PORT_STAT_ENABLE) && 1342 (portstatus & USB_PORT_STAT_CONNECTION) && 1343 ((dev->children[i]))) { 1344 USB_HUB_PRINTF("already running port %i " \ 1345 "disabled by hub (EMI?), " \ 1346 "re-enabling...\n", i + 1); 1347 usb_hub_port_connect_change(dev, i); 1348 } 1349 } 1350 if (portstatus & USB_PORT_STAT_SUSPEND) { 1351 USB_HUB_PRINTF("port %d suspend change\n", i + 1); 1352 usb_clear_port_feature(dev, i + 1, 1353 USB_PORT_FEAT_SUSPEND); 1354 } 1355 1356 if (portchange & USB_PORT_STAT_C_OVERCURRENT) { 1357 USB_HUB_PRINTF("port %d over-current change\n", i + 1); 1358 usb_clear_port_feature(dev, i + 1, 1359 USB_PORT_FEAT_C_OVER_CURRENT); 1360 usb_hub_power_on(hub); 1361 } 1362 1363 if (portchange & USB_PORT_STAT_C_RESET) { 1364 USB_HUB_PRINTF("port %d reset change\n", i + 1); 1365 usb_clear_port_feature(dev, i + 1, 1366 USB_PORT_FEAT_C_RESET); 1367 } 1368 } /* end for i all ports */ 1369 1370 return 0; 1371 } 1372 1373 int usb_hub_probe(struct usb_device *dev, int ifnum) 1374 { 1375 struct usb_interface *iface; 1376 struct usb_endpoint_descriptor *ep; 1377 int ret; 1378 1379 iface = &dev->config.if_desc[ifnum]; 1380 /* Is it a hub? */ 1381 if (iface->desc.bInterfaceClass != USB_CLASS_HUB) 1382 return 0; 1383 /* Some hubs have a subclass of 1, which AFAICT according to the */ 1384 /* specs is not defined, but it works */ 1385 if ((iface->desc.bInterfaceSubClass != 0) && 1386 (iface->desc.bInterfaceSubClass != 1)) 1387 return 0; 1388 /* Multiple endpoints? What kind of mutant ninja-hub is this? */ 1389 if (iface->desc.bNumEndpoints != 1) 1390 return 0; 1391 ep = &iface->ep_desc[0]; 1392 /* Output endpoint? Curiousier and curiousier.. */ 1393 if (!(ep->bEndpointAddress & USB_DIR_IN)) 1394 return 0; 1395 /* If it's not an interrupt endpoint, we'd better punt! */ 1396 if ((ep->bmAttributes & 3) != 3) 1397 return 0; 1398 /* We found a hub */ 1399 USB_HUB_PRINTF("USB hub found\n"); 1400 ret = usb_hub_configure(dev); 1401 return ret; 1402 } 1403 1404 /* EOF */ 1405