[SeaBIOS] [PATCH 05/19] usb: Remove cntl->defaultpipe cache.
Kevin O'Connor
kevin at koconnor.net
Sun Mar 11 03:43:15 CET 2012
Now that all pipes use a free list, there is no need to cache the
controller's default pipe. The regular free list provides the same
capability.
Signed-off-by: Kevin O'Connor <kevin at koconnor.net>
---
src/usb-ehci.c | 1 -
src/usb-ohci.c | 1 -
src/usb-uhci.c | 1 -
src/usb.c | 37 +++++++++++++++++--------------------
src/usb.h | 1 -
5 files changed, 17 insertions(+), 24 deletions(-)
diff --git a/src/usb-ehci.c b/src/usb-ehci.c
index 5717dc6..0678560 100644
--- a/src/usb-ehci.c
+++ b/src/usb-ehci.c
@@ -310,7 +310,6 @@ configure_ehci(void *data)
// Find devices
int count = check_ehci_ports(cntl);
- free_pipe(cntl->usb.defaultpipe);
ehci_free_pipes(cntl);
if (count)
// Success
diff --git a/src/usb-ohci.c b/src/usb-ohci.c
index ac1eb37..d77727e 100644
--- a/src/usb-ohci.c
+++ b/src/usb-ohci.c
@@ -249,7 +249,6 @@ configure_ohci(void *data)
goto err;
int count = check_ohci_ports(cntl);
- free_pipe(cntl->usb.defaultpipe);
ohci_free_pipes(cntl);
if (! count)
goto err;
diff --git a/src/usb-uhci.c b/src/usb-uhci.c
index 4f7fbb4..9d46762 100644
--- a/src/usb-uhci.c
+++ b/src/usb-uhci.c
@@ -220,7 +220,6 @@ configure_uhci(void *data)
// Find devices
int count = check_uhci_ports(cntl);
- free_pipe(cntl->usb.defaultpipe);
uhci_free_pipes(cntl);
if (count)
// Success
diff --git a/src/usb.c b/src/usb.c
index f522e1a..e7ee6bc 100644
--- a/src/usb.c
+++ b/src/usb.c
@@ -246,19 +246,16 @@ usb_set_address(struct usbhub_s *hub, int port, int speed)
if (cntl->maxaddr >= USB_MAXADDR)
return NULL;
- struct usb_pipe *defpipe = cntl->defaultpipe;
- if (!defpipe) {
- // Create a pipe for the default address.
- struct usb_pipe dummy;
- memset(&dummy, 0, sizeof(dummy));
- dummy.cntl = cntl;
- dummy.type = cntl->type;
- dummy.maxpacket = 8;
- dummy.path = (u64)-1;
- cntl->defaultpipe = defpipe = alloc_default_control_pipe(&dummy);
- if (!defpipe)
- return NULL;
- }
+ // Create a pipe for the default address.
+ struct usb_pipe dummy;
+ memset(&dummy, 0, sizeof(dummy));
+ dummy.cntl = cntl;
+ dummy.type = cntl->type;
+ dummy.maxpacket = 8;
+ dummy.path = (u64)-1;
+ struct usb_pipe *defpipe = alloc_default_control_pipe(&dummy);
+ if (!defpipe)
+ return NULL;
defpipe->speed = speed;
if (hub->pipe) {
if (hub->pipe->speed == USB_HIGHSPEED) {
@@ -271,6 +268,9 @@ usb_set_address(struct usbhub_s *hub, int port, int speed)
} else {
defpipe->tt_devaddr = defpipe->tt_port = 0;
}
+ if (hub->pipe)
+ defpipe->path = hub->pipe->path;
+ defpipe->path = (defpipe->path << 8) | port;
msleep(USB_TIME_RSTRCY);
@@ -281,19 +281,16 @@ usb_set_address(struct usbhub_s *hub, int port, int speed)
req.wIndex = 0;
req.wLength = 0;
int ret = send_default_control(defpipe, &req, NULL);
- if (ret)
+ if (ret) {
+ free_pipe(defpipe);
return NULL;
+ }
msleep(USB_TIME_SETADDR_RECOVERY);
cntl->maxaddr++;
defpipe->devaddr = cntl->maxaddr;
- struct usb_pipe *pipe = alloc_default_control_pipe(defpipe);
- defpipe->devaddr = 0;
- if (hub->pipe)
- pipe->path = hub->pipe->path;
- pipe->path = (pipe->path << 8) | port;
- return pipe;
+ return defpipe;
}
// Called for every found device - see if a driver is available for
diff --git a/src/usb.h b/src/usb.h
index cc32eb7..47b25b6 100644
--- a/src/usb.h
+++ b/src/usb.h
@@ -22,7 +22,6 @@ struct usb_pipe {
// Common information for usb controllers.
struct usb_s {
- struct usb_pipe *defaultpipe;
struct usb_pipe *freelist;
struct mutex_s resetlock;
struct pci_device *pci;
--
1.7.6.5
More information about the SeaBIOS
mailing list