diff options
author | hselasky <hselasky@FreeBSD.org> | 2018-02-25 10:15:52 +0000 |
---|---|---|
committer | hselasky <hselasky@FreeBSD.org> | 2018-02-25 10:15:52 +0000 |
commit | 7e32a4a5b06a53e8c7f60a7a74ad95c77be3cfe6 (patch) | |
tree | c0fedc51f06cfed9c2604c11f7ad5c7c5e16f11d | |
parent | fb5781987c0f951fabcb92ba190d03030fc7df77 (diff) | |
download | FreeBSD-src-7e32a4a5b06a53e8c7f60a7a74ad95c77be3cfe6.zip FreeBSD-src-7e32a4a5b06a53e8c7f60a7a74ad95c77be3cfe6.tar.gz |
MFC r329372:
Implement enable_irq() and disable_irq() in the LinuxKPI.
Submitted by: Johannes Lundberg <johalun0@gmail.com>
Sponsored by: Mellanox Technologies
-rw-r--r-- | sys/compat/linuxkpi/common/include/linux/interrupt.h | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/sys/compat/linuxkpi/common/include/linux/interrupt.h b/sys/compat/linuxkpi/common/include/linux/interrupt.h index 6f7b96d..e9bae51 100644 --- a/sys/compat/linuxkpi/common/include/linux/interrupt.h +++ b/sys/compat/linuxkpi/common/include/linux/interrupt.h @@ -112,6 +112,38 @@ request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, } static inline int +enable_irq(unsigned int irq) +{ + struct irq_ent *irqe; + struct device *dev; + + dev = linux_pci_find_irq_dev(irq); + if (dev == NULL) + return -EINVAL; + irqe = linux_irq_ent(dev, irq); + if (irqe == NULL) + return -EINVAL; + return -bus_setup_intr(dev->bsddev, irqe->res, INTR_TYPE_NET | INTR_MPSAFE, + NULL, linux_irq_handler, irqe, &irqe->tag); +} + +static inline void +disable_irq(unsigned int irq) +{ + struct irq_ent *irqe; + struct device *dev; + + dev = linux_pci_find_irq_dev(irq); + if (dev == NULL) + return; + irqe = linux_irq_ent(dev, irq); + if (irqe == NULL) + return; + bus_teardown_intr(dev->bsddev, irqe->res, irqe->tag); + irqe->tag = NULL; +} + +static inline int bind_irq_to_cpu(unsigned int irq, int cpu_id) { struct irq_ent *irqe; |