diff options
author | Patrick Georgi <patrick.georgi@coresystems.de> | 2008-10-16 19:20:51 +0000 |
---|---|---|
committer | Patrick Georgi <patrick.georgi@coresystems.de> | 2008-10-16 19:20:51 +0000 |
commit | 4727c0744615d7b49c843197433937721ce9acd1 (patch) | |
tree | 72d31d16bb06950a574b11759d61e620c3be9f46 /payloads/libpayload/drivers/usb/uhci_rh.c | |
parent | b1b071fe17dd472192de201e463ce3d5811a2957 (diff) |
- reduced memory requirements a lot (from >100kb/controller to
560bytes/controller)
- no need for the client of libpayload to implement
usbdisk_{create,remove}, just because USB was compiled in.
- usb hub support compiles, and works for some trivial cases (no device
detach, trivial power management)
- usb keyboard support works in qemu, though there are reports that it
doesn't work on real hardware yet.
- usb keyboard is integrated in both libc-getchar() and curses, if
CONFIG_USB_HID is enabled
Signed-off-by: Patrick Georgi <patrick.georgi@coresystems.de>
Acked-by: Jordan Crouse <jordan.crouse@amd.com>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3662 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
Diffstat (limited to 'payloads/libpayload/drivers/usb/uhci_rh.c')
-rw-r--r-- | payloads/libpayload/drivers/usb/uhci_rh.c | 22 |
1 files changed, 4 insertions, 18 deletions
diff --git a/payloads/libpayload/drivers/usb/uhci_rh.c b/payloads/libpayload/drivers/usb/uhci_rh.c index e703e53f21..cc3c600289 100644 --- a/payloads/libpayload/drivers/usb/uhci_rh.c +++ b/payloads/libpayload/drivers/usb/uhci_rh.c @@ -88,17 +88,13 @@ uhci_rh_scanport (usbdev_t *dev, int port) } else return; int devno = RH_INST (dev)->port[offset]; - if (devno != -1) { - dev->controller->devices[devno].destroy (&dev->controller-> - devices[devno]); - init_device_entry (dev->controller, devno); + if ((dev->controller->devices[devno] != 0) && (devno != -1)) { + usb_detach_device(dev->controller, devno); RH_INST (dev)->port[offset] = -1; } uhci_reg_mask16 (dev->controller, portsc, ~0, (1 << 3) | (1 << 2)); // clear port state change, enable port if ((uhci_reg_read16 (dev->controller, portsc) & 1) != 0) { - int newdev; - usbdev_t *newdev_t; // device attached uhci_rh_disable_port (dev, port); @@ -106,18 +102,8 @@ uhci_rh_scanport (usbdev_t *dev, int port) int lowspeed = (uhci_reg_read16 (dev->controller, portsc) >> 8) & 1; - printf ("%sspeed device\n", (lowspeed == 1) ? "low" : "full"); - - newdev = set_address (dev->controller, lowspeed); - if (newdev == -1) - return; - newdev_t = &dev->controller->devices[newdev]; - RH_INST (dev)->port[offset] = newdev; - newdev_t->address = newdev; - newdev_t->hub = dev->address; - newdev_t->port = portsc; - // determine responsible driver - newdev_t->init (newdev_t); + + RH_INST (dev)->port[offset] = usb_attach_device(dev->controller, dev->address, portsc, lowspeed); } } |