X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=cmd%2Fusb.c;h=992d41408191c8fa20445a378ba80148850f8fde;hb=19d1f1a2f3ccfbf85125150f7876ce22714b38bd;hp=c7b642c40af969885d0d782bcf010740e613f16f;hpb=2e192b245ed36a63bab0ef576999a95e23f60ecd;p=platform%2Fkernel%2Fu-boot.git diff --git a/cmd/usb.c b/cmd/usb.c index c7b642c..992d414 100644 --- a/cmd/usb.c +++ b/cmd/usb.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -149,6 +150,8 @@ static void usb_display_string(struct usb_device *dev, int index) static void usb_display_desc(struct usb_device *dev) { + uint packet_size = dev->descriptor.bMaxPacketSize0; + if (dev->descriptor.bDescriptorType == USB_DT_DEVICE) { printf("%d: %s, USB Revision %x.%x\n", dev->devnum, usb_get_class_desc(dev->config.if_desc[0].desc.bInterfaceClass), @@ -170,9 +173,10 @@ static void usb_display_desc(struct usb_device *dev) usb_get_class_desc( dev->config.if_desc[0].desc.bInterfaceClass)); } + if (dev->descriptor.bcdUSB >= cpu_to_le16(0x0300)) + packet_size = 1 << packet_size; printf(" - PacketSize: %d Configurations: %d\n", - dev->descriptor.bMaxPacketSize0, - dev->descriptor.bNumConfigurations); + packet_size, dev->descriptor.bNumConfigurations); printf(" - Vendor: 0x%04x Product 0x%04x Version %d.%d\n", dev->descriptor.idVendor, dev->descriptor.idProduct, (dev->descriptor.bcdDevice>>8) & 0xff, @@ -437,23 +441,35 @@ static void usb_show_subtree(struct usb_device *dev) usb_show_tree_graph(dev, &preamble[0]); } -void usb_show_tree(void) -{ #ifdef CONFIG_DM_USB +typedef void (*usb_dev_func_t)(struct usb_device *udev); + +static void usb_for_each_root_dev(usb_dev_func_t func) +{ struct udevice *bus; - for (uclass_first_device(UCLASS_USB, &bus); + for (uclass_find_first_device(UCLASS_USB, &bus); bus; - uclass_next_device(&bus)) { + uclass_find_next_device(&bus)) { struct usb_device *udev; struct udevice *dev; + if (!device_active(bus)) + continue; + device_find_first_child(bus, &dev); if (dev && device_active(dev)) { udev = dev_get_parent_priv(dev); - usb_show_subtree(udev); + func(udev); } } +} +#endif + +void usb_show_tree(void) +{ +#ifdef CONFIG_DM_USB + usb_for_each_root_dev(usb_show_subtree); #else struct usb_device *udev; int i; @@ -541,7 +557,7 @@ static int do_usbboot(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) static int do_usb_stop_keyboard(int force) { -#ifdef CONFIG_USB_KEYBOARD +#if !defined CONFIG_DM_USB && defined CONFIG_USB_KEYBOARD if (usb_kbd_deregister(force) != 0) { printf("USB not stopped: usbkbd still using USB\n"); return 1; @@ -558,11 +574,11 @@ static void do_usb_start(void) return; /* Driver model will probe the devices as they are found */ -#ifndef CONFIG_DM_USB # ifdef CONFIG_USB_STORAGE /* try to recognize storage devices immediately */ usb_stor_curr_dev = usb_stor_scan(1); # endif +#ifndef CONFIG_DM_USB # ifdef CONFIG_USB_KEYBOARD drv_usb_kbd_init(); # endif @@ -580,39 +596,20 @@ static void do_usb_start(void) } #ifdef CONFIG_DM_USB -static void show_info(struct udevice *dev) +static void usb_show_info(struct usb_device *udev) { struct udevice *child; - struct usb_device *udev; - udev = dev_get_parent_priv(dev); usb_display_desc(udev); usb_display_config(udev); - for (device_find_first_child(dev, &child); + for (device_find_first_child(udev->dev, &child); child; device_find_next_child(&child)) { - if (device_active(child)) - show_info(child); - } -} - -static int usb_device_info(void) -{ - struct udevice *bus; - - for (uclass_first_device(UCLASS_USB, &bus); - bus; - uclass_next_device(&bus)) { - struct udevice *hub; - - device_find_first_child(bus, &hub); - if (device_get_uclass_id(hub) == UCLASS_USB_HUB && - device_active(hub)) { - show_info(hub); + if (device_active(child)) { + udev = dev_get_parent_priv(child); + usb_show_info(udev); } } - - return 0; } #endif @@ -625,7 +622,7 @@ static int do_usb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) int i; extern char usb_started; #ifdef CONFIG_USB_STORAGE - block_dev_desc_t *stor_dev; + struct blk_desc *stor_dev; #endif if (argc < 2) @@ -668,7 +665,7 @@ static int do_usb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) if (strncmp(argv[1], "inf", 3) == 0) { if (argc == 2) { #ifdef CONFIG_DM_USB - usb_device_info(); + usb_for_each_root_dev(usb_show_info); #else int d; for (d = 0; d < USB_MAX_DEVICE; d++) { @@ -719,7 +716,8 @@ static int do_usb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) int devno, ok = 0; if (argc == 2) { for (devno = 0; ; ++devno) { - stor_dev = usb_stor_get_dev(devno); + stor_dev = blk_get_devnum_by_type(IF_TYPE_USB, + devno); if (stor_dev == NULL) break; if (stor_dev->type != DEV_TYPE_UNKNOWN) { @@ -727,17 +725,17 @@ static int do_usb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) if (devno) printf("\n"); debug("print_part of %x\n", devno); - print_part(stor_dev); + part_print(stor_dev); } } } else { devno = simple_strtoul(argv[2], NULL, 16); - stor_dev = usb_stor_get_dev(devno); + stor_dev = blk_get_devnum_by_type(IF_TYPE_USB, devno); if (stor_dev != NULL && stor_dev->type != DEV_TYPE_UNKNOWN) { ok++; debug("print_part of %x\n", devno); - print_part(stor_dev); + part_print(stor_dev); } } if (!ok) { @@ -758,9 +756,9 @@ static int do_usb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) unsigned long n; printf("\nUSB read: device %d block # %ld, count %ld" " ... ", usb_stor_curr_dev, blk, cnt); - stor_dev = usb_stor_get_dev(usb_stor_curr_dev); - n = stor_dev->block_read(stor_dev, blk, cnt, - (ulong *)addr); + stor_dev = blk_get_devnum_by_type(IF_TYPE_USB, + usb_stor_curr_dev); + n = blk_dread(stor_dev, blk, cnt, (ulong *)addr); printf("%ld blocks read: %s\n", n, (n == cnt) ? "OK" : "ERROR"); if (n == cnt) @@ -780,9 +778,9 @@ static int do_usb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) unsigned long n; printf("\nUSB write: device %d block # %ld, count %ld" " ... ", usb_stor_curr_dev, blk, cnt); - stor_dev = usb_stor_get_dev(usb_stor_curr_dev); - n = stor_dev->block_write(stor_dev, blk, cnt, - (ulong *)addr); + stor_dev = blk_get_devnum_by_type(IF_TYPE_USB, + usb_stor_curr_dev); + n = blk_dwrite(stor_dev, blk, cnt, (ulong *)addr); printf("%ld blocks write: %s\n", n, (n == cnt) ? "OK" : "ERROR"); if (n == cnt) @@ -794,8 +792,9 @@ static int do_usb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) if (argc == 3) { int dev = (int)simple_strtoul(argv[2], NULL, 10); printf("\nUSB device %d: ", dev); - stor_dev = usb_stor_get_dev(dev); - if (stor_dev == NULL) { + stor_dev = blk_get_devnum_by_type(IF_TYPE_USB, dev); + if ((stor_dev == NULL) || + (stor_dev->if_type == IF_TYPE_UNKNOWN)) { printf("unknown device\n"); return 1; } @@ -808,7 +807,8 @@ static int do_usb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) return 0; } else { printf("\nUSB device %d: ", usb_stor_curr_dev); - stor_dev = usb_stor_get_dev(usb_stor_curr_dev); + stor_dev = blk_get_devnum_by_type(IF_TYPE_USB, + usb_stor_curr_dev); dev_print(stor_dev); if (stor_dev->type == DEV_TYPE_UNKNOWN) return 1;