diff --git a/repos/dde_linux/run/usb_hid.run b/repos/dde_linux/run/usb_hid.run index fea02ab98..7b5b8c5c6 100644 --- a/repos/dde_linux/run/usb_hid.run +++ b/repos/dde_linux/run/usb_hid.run @@ -139,7 +139,7 @@ append config { - + diff --git a/repos/dde_linux/src/drivers/usb_host/dummies.c b/repos/dde_linux/src/drivers/usb_host/dummies.c index 8c448b3cb..a15795c73 100644 --- a/repos/dde_linux/src/drivers/usb_host/dummies.c +++ b/repos/dde_linux/src/drivers/usb_host/dummies.c @@ -931,11 +931,6 @@ void *idr_get_next(struct idr *idp, int *nextid) return NULL; } -void idr_remove(struct idr *idp, int id) -{ - TRACE_AND_STOP; -} - unsigned int jiffies_to_usecs(const unsigned long j) { TRACE_AND_STOP; @@ -985,7 +980,7 @@ void pci_clear_mwi(struct pci_dev *dev) void pci_free_irq_vectors(struct pci_dev *dev) { - TRACE_AND_STOP; + TRACE; } int pci_reset_function_locked(struct pci_dev *dev) diff --git a/repos/dde_linux/src/drivers/usb_host/lx_emul.cc b/repos/dde_linux/src/drivers/usb_host/lx_emul.cc index 91cc60049..29be18912 100644 --- a/repos/dde_linux/src/drivers/usb_host/lx_emul.cc +++ b/repos/dde_linux/src/drivers/usb_host/lx_emul.cc @@ -784,6 +784,12 @@ int idr_alloc(struct idr *idp, void *ptr, int start, int end, gfp_t gfp_mask) } +void idr_remove(struct idr *idp, int id) +{ + if (id > 0) id_allocator.free(id); +} + + int object_is_on_stack(const void *obj) { Genode::Thread::Stack_info info = Genode::Thread::mystack(); diff --git a/repos/dde_linux/src/drivers/usb_host/spec/x86/platform.cc b/repos/dde_linux/src/drivers/usb_host/spec/x86/platform.cc index 60117c7dd..95504f5fa 100644 --- a/repos/dde_linux/src/drivers/usb_host/spec/x86/platform.cc +++ b/repos/dde_linux/src/drivers/usb_host/spec/x86/platform.cc @@ -16,6 +16,7 @@ #include #include #include +#include #include #include @@ -180,6 +181,11 @@ int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, { for (Lx::Pci_dev *pci_dev = Lx::pci_dev_registry()->first(); pci_dev; pci_dev = pci_dev->next()) if (pci_dev->irq == irq) { + { + Genode::Irq_session_client is(pci_dev->client().irq(0)); + if ((is.info().type != Genode::Irq_session::Info::MSI) + && !flags) return 1; + } Lx::Irq::irq().request_irq(pci_dev->client(), handler, dev); return 0; } diff --git a/repos/dde_linux/src/drivers/usb_host/spec/x86/target.inc b/repos/dde_linux/src/drivers/usb_host/spec/x86/target.inc index cfb6962aa..730ff404f 100644 --- a/repos/dde_linux/src/drivers/usb_host/spec/x86/target.inc +++ b/repos/dde_linux/src/drivers/usb_host/spec/x86/target.inc @@ -20,5 +20,7 @@ SRC_CC += spec/x86/platform.cc CC_OPT += -DCONFIG_PCI=1 CC_OPT += -DCONFIG_USB_PCI=1 -CC_OPT += -DCONFIG_USB_EHCI_PCI=1 +CC_OPT += -DCONFIG_USB_EHCI_HCD=1 +CC_OPT += -DCONFIG_USB_OHCI_HCD=1 +CC_OPT += -DCONFIG_USB_UHCI_HCD=1 CC_OPT += -DCONFIG_USB_XHCI_HCD=1