grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 5/6] grub-core/bus/usb/usbhub: Add new private fields for xHCI co


From: Patrick Rudolph
Subject: [PATCH 5/6] grub-core/bus/usb/usbhub: Add new private fields for xHCI controller
Date: Wed, 2 Dec 2020 11:29:26 +0100

Store the root port number, the route, consisting out of the port ID
in each nibble, and a pointer to driver private data.

Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>
---
 grub-core/bus/usb/usbhub.c | 14 ++++++++++----
 include/grub/usb.h         |  5 +++++
 2 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/grub-core/bus/usb/usbhub.c b/grub-core/bus/usb/usbhub.c
index df1913aee..63bee1d1a 100644
--- a/grub-core/bus/usb/usbhub.c
+++ b/grub-core/bus/usb/usbhub.c
@@ -49,7 +49,9 @@ static grub_usb_controller_dev_t grub_usb_list;
 static grub_usb_device_t
 grub_usb_hub_add_dev (grub_usb_controller_t controller,
                       grub_usb_speed_t speed,
-                      int split_hubport, int split_hubaddr)
+                      int split_hubport, int split_hubaddr,
+                      int root_portno,
+                      grub_uint32_t route)
 {
   grub_usb_device_t dev;
   int i;
@@ -65,6 +67,8 @@ grub_usb_hub_add_dev (grub_usb_controller_t controller,
   dev->speed = speed;
   dev->split_hubport = split_hubport;
   dev->split_hubaddr = split_hubaddr;
+  dev->root_port = root_portno;
+  dev->route = route;
 
   if (controller->dev->attach_dev) {
     err = controller->dev->attach_dev (controller, dev);
@@ -245,7 +249,7 @@ attach_root_port (struct grub_usb_hub *hub, int portno,
      and full/low speed device connected to OHCI/UHCI needs not
      transaction translation - e.g. hubport and hubaddr should be
      always none (zero) for any device connected to any root hub. */
-  dev = grub_usb_hub_add_dev (hub->controller, speed, 0, 0);
+  dev = grub_usb_hub_add_dev (hub->controller, speed, 0, 0, portno, 0);
   hub->controller->dev->pending_reset = 0;
   npending--;
   if (! dev)
@@ -673,10 +677,12 @@ poll_nonroot_hub (grub_usb_device_t dev)
                    split_hubport = dev->split_hubport;
                    split_hubaddr = dev->split_hubaddr;
                  }
-               
+
+
              /* Add the device and assign a device address to it.  */
              next_dev = grub_usb_hub_add_dev (&dev->controller, speed,
-                                              split_hubport, split_hubaddr);
+                                              split_hubport, split_hubaddr, 
dev->root_port,
+                                              dev->route << 4 | (i & 0xf));
              if (dev->controller.dev->pending_reset)
                {
                  dev->controller.dev->pending_reset = 0;
diff --git a/include/grub/usb.h b/include/grub/usb.h
index 5c5fb5ec4..5a3325b7d 100644
--- a/include/grub/usb.h
+++ b/include/grub/usb.h
@@ -233,6 +233,11 @@ struct grub_usb_device
   int split_hubport;
 
   int split_hubaddr;
+
+  /* xHCI specific information */
+  int root_port;
+  grub_uint32_t route;
+  void *xhci_priv;
 };
 
 
-- 
2.26.2




reply via email to

[Prev in Thread] Current Thread [Next in Thread]