diff options
Diffstat (limited to 'config/grub/xhci_nvme/patches/0017-grub-core-bus-usb-Add-function-pointer-for-attach-de.patch')
| -rw-r--r-- | config/grub/xhci_nvme/patches/0017-grub-core-bus-usb-Add-function-pointer-for-attach-de.patch | 121 | 
1 files changed, 121 insertions, 0 deletions
| diff --git a/config/grub/xhci_nvme/patches/0017-grub-core-bus-usb-Add-function-pointer-for-attach-de.patch b/config/grub/xhci_nvme/patches/0017-grub-core-bus-usb-Add-function-pointer-for-attach-de.patch new file mode 100644 index 00000000..e4798a8d --- /dev/null +++ b/config/grub/xhci_nvme/patches/0017-grub-core-bus-usb-Add-function-pointer-for-attach-de.patch @@ -0,0 +1,121 @@ +From ea5081844c3112b582f52360cfb14ef95b56f5e1 Mon Sep 17 00:00:00 2001 +From: Patrick Rudolph <patrick.rudolph@9elements.com> +Date: Sun, 15 Nov 2020 19:51:42 +0100 +Subject: [PATCH 17/26] grub-core/bus/usb: Add function pointer for + attach/detach events + +The xHCI code needs to be called for attaching or detaching a device. +Introduce two functions pointers and call it from the USB hub code. + +Will be used in future commits, currently this doesn't change any functionality. + +Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com> +--- + grub-core/bus/usb/ehci.c   |  2 ++ + grub-core/bus/usb/ohci.c   |  2 ++ + grub-core/bus/usb/uhci.c   |  2 ++ + grub-core/bus/usb/usbhub.c | 19 +++++++++++++++++++ + include/grub/usb.h         |  4 ++++ + 5 files changed, 29 insertions(+) + +diff --git a/grub-core/bus/usb/ehci.c b/grub-core/bus/usb/ehci.c +index 2db07c7c0..1ee056015 100644 +--- a/grub-core/bus/usb/ehci.c ++++ b/grub-core/bus/usb/ehci.c +@@ -1812,6 +1812,8 @@ static struct grub_usb_controller_dev usb_controller = { +   .hubports = grub_ehci_hubports, +   .portstatus = grub_ehci_portstatus, +   .detect_dev = grub_ehci_detect_dev, ++  .attach_dev = NULL, ++  .detach_dev = NULL, +   /* estimated max. count of TDs for one bulk transfer */ +   .max_bulk_tds = GRUB_EHCI_N_TD * 3 / 4 + }; +diff --git a/grub-core/bus/usb/ohci.c b/grub-core/bus/usb/ohci.c +index 5363a61f6..7a3f3e154 100644 +--- a/grub-core/bus/usb/ohci.c ++++ b/grub-core/bus/usb/ohci.c +@@ -1440,6 +1440,8 @@ static struct grub_usb_controller_dev usb_controller = +   .hubports = grub_ohci_hubports, +   .portstatus = grub_ohci_portstatus, +   .detect_dev = grub_ohci_detect_dev, ++  .attach_dev = NULL, ++  .detach_dev = NULL, +   /* estimated max. count of TDs for one bulk transfer */ +   .max_bulk_tds = GRUB_OHCI_TDS * 3 / 4 + }; +diff --git a/grub-core/bus/usb/uhci.c b/grub-core/bus/usb/uhci.c +index 0fdea4c1e..03c4605b2 100644 +--- a/grub-core/bus/usb/uhci.c ++++ b/grub-core/bus/usb/uhci.c +@@ -845,6 +845,8 @@ static struct grub_usb_controller_dev usb_controller = +   .hubports = grub_uhci_hubports, +   .portstatus = grub_uhci_portstatus, +   .detect_dev = grub_uhci_detect_dev, ++  .attach_dev = NULL, ++  .detach_dev = NULL, +   /* estimated max. count of TDs for one bulk transfer */ +   .max_bulk_tds = N_TD * 3 / 4 + }; +diff --git a/grub-core/bus/usb/usbhub.c b/grub-core/bus/usb/usbhub.c +index 2ae29cba1..8e963e84b 100644 +--- a/grub-core/bus/usb/usbhub.c ++++ b/grub-core/bus/usb/usbhub.c +@@ -66,6 +66,15 @@ grub_usb_hub_add_dev (grub_usb_controller_t controller, +   dev->split_hubport = split_hubport; +   dev->split_hubaddr = split_hubaddr; +  ++  if (controller->dev->attach_dev) { ++    err = controller->dev->attach_dev (controller, dev); ++    if (err) ++      { ++	grub_free (dev); ++	return NULL; ++      } ++  } ++ +   err = grub_usb_device_initialize (dev); +   if (err) +     { +@@ -405,6 +414,8 @@ static void + detach_device (grub_usb_device_t dev) + { +   unsigned i; ++  grub_usb_err_t err; ++ +   int k; +   if (!dev) +     return; +@@ -425,6 +436,14 @@ detach_device (grub_usb_device_t dev) + 	  if (inter && inter->detach_hook) + 	    inter->detach_hook (dev, i, k); + 	} ++  if (dev->controller.dev->detach_dev) { ++    err = dev->controller.dev->detach_dev (&dev->controller, dev); ++    if (err) ++      { ++	// XXX ++      } ++  } ++ +   grub_usb_devs[dev->addr] = 0; + } +  +diff --git a/include/grub/usb.h b/include/grub/usb.h +index ea6ee8c2c..4dd179db2 100644 +--- a/include/grub/usb.h ++++ b/include/grub/usb.h +@@ -126,6 +126,10 @@ struct grub_usb_controller_dev +  +   grub_usb_speed_t (*detect_dev) (grub_usb_controller_t dev, int port, int *changed); +  ++  grub_usb_err_t (*attach_dev) (grub_usb_controller_t ctrl, grub_usb_device_t dev); ++ ++  grub_usb_err_t (*detach_dev) (grub_usb_controller_t ctrl, grub_usb_device_t dev); ++ +   /* Per controller flag - port reset pending, don't do another reset */ +   grub_uint64_t pending_reset; +  +--  +2.39.5 + | 
