aboutsummaryrefslogtreecommitdiff
path: root/payloads/libpayload/drivers/usb/uhci_rh.c
diff options
context:
space:
mode:
authorPatrick Georgi <patrick.georgi@coresystems.de>2008-10-16 19:20:51 +0000
committerPatrick Georgi <patrick.georgi@coresystems.de>2008-10-16 19:20:51 +0000
commit4727c0744615d7b49c843197433937721ce9acd1 (patch)
tree72d31d16bb06950a574b11759d61e620c3be9f46 /payloads/libpayload/drivers/usb/uhci_rh.c
parentb1b071fe17dd472192de201e463ce3d5811a2957 (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.c22
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);
}
}