Lines Matching +full:irq +full:- +full:device
1 /*-
5 * Copyright (c) 2013-2015 Mellanox Technologies, Ltd.
30 #include <linux/device.h>
41 struct device *dev;
47 unsigned int irq; member
51 lkpi_irq_rid(struct device *dev, unsigned int irq) in lkpi_irq_rid() argument
53 /* check for MSI- or MSIX- interrupt */ in lkpi_irq_rid()
54 if (irq >= dev->irq_start && irq < dev->irq_end) in lkpi_irq_rid()
55 return (irq - dev->irq_start + 1); in lkpi_irq_rid()
61 lkpi_irq_ent(struct device *dev, unsigned int irq) in lkpi_irq_ent() argument
65 list_for_each_entry(irqe, &dev->irqents, links) in lkpi_irq_ent()
66 if (irqe->irq == irq) in lkpi_irq_ent()
81 if (irqe->handler(irqe->irq, irqe->arg) == IRQ_WAKE_THREAD && in lkpi_irq_handler()
82 irqe->thread_handler != NULL) { in lkpi_irq_handler()
84 irqe->thread_handler(irqe->irq, irqe->arg); in lkpi_irq_handler()
90 lkpi_irq_release(struct device *dev, struct irq_ent *irqe) in lkpi_irq_release()
92 if (irqe->tag != NULL) in lkpi_irq_release()
93 bus_teardown_intr(dev->bsddev, irqe->res, irqe->tag); in lkpi_irq_release()
94 if (irqe->res != NULL) in lkpi_irq_release()
95 bus_release_resource(dev->bsddev, SYS_RES_IRQ, in lkpi_irq_release()
96 rman_get_rid(irqe->res), irqe->res); in lkpi_irq_release()
97 list_del(&irqe->links); in lkpi_irq_release()
101 lkpi_devm_irq_release(struct device *dev, void *p) in lkpi_devm_irq_release()
113 lkpi_request_irq(struct device *xdev, unsigned int irq, in lkpi_request_irq() argument
119 struct device *dev; in lkpi_request_irq()
124 dev = lkpi_pci_find_irq_dev(irq); in lkpi_request_irq()
126 return -ENXIO; in lkpi_request_irq()
128 return -ENXIO; in lkpi_request_irq()
129 rid = lkpi_irq_rid(dev, irq); in lkpi_request_irq()
133 res = bus_alloc_resource_any(dev->bsddev, SYS_RES_IRQ, &rid, resflags); in lkpi_request_irq()
135 return (-ENXIO); in lkpi_request_irq()
141 irqe->dev = dev; in lkpi_request_irq()
142 irqe->res = res; in lkpi_request_irq()
143 irqe->arg = arg; in lkpi_request_irq()
144 irqe->handler = handler; in lkpi_request_irq()
145 irqe->thread_handler = thread_handler; in lkpi_request_irq()
146 irqe->irq = irq; in lkpi_request_irq()
148 error = bus_setup_intr(dev->bsddev, res, INTR_TYPE_NET | INTR_MPSAFE, in lkpi_request_irq()
149 NULL, lkpi_irq_handler, irqe, &irqe->tag); in lkpi_request_irq()
152 list_add(&irqe->links, &dev->irqents); in lkpi_request_irq()
159 bus_release_resource(dev->bsddev, SYS_RES_IRQ, rid, irqe->res); in lkpi_request_irq()
164 return (-error); in lkpi_request_irq()
168 lkpi_enable_irq(unsigned int irq) in lkpi_enable_irq() argument
171 struct device *dev; in lkpi_enable_irq()
173 dev = lkpi_pci_find_irq_dev(irq); in lkpi_enable_irq()
175 return -EINVAL; in lkpi_enable_irq()
176 irqe = lkpi_irq_ent(dev, irq); in lkpi_enable_irq()
177 if (irqe == NULL || irqe->tag != NULL) in lkpi_enable_irq()
178 return -EINVAL; in lkpi_enable_irq()
179 return -bus_setup_intr(dev->bsddev, irqe->res, INTR_TYPE_NET | INTR_MPSAFE, in lkpi_enable_irq()
180 NULL, lkpi_irq_handler, irqe, &irqe->tag); in lkpi_enable_irq()
184 lkpi_disable_irq(unsigned int irq) in lkpi_disable_irq() argument
187 struct device *dev; in lkpi_disable_irq()
189 dev = lkpi_pci_find_irq_dev(irq); in lkpi_disable_irq()
192 irqe = lkpi_irq_ent(dev, irq); in lkpi_disable_irq()
195 if (irqe->tag != NULL) in lkpi_disable_irq()
196 bus_teardown_intr(dev->bsddev, irqe->res, irqe->tag); in lkpi_disable_irq()
197 irqe->tag = NULL; in lkpi_disable_irq()
201 lkpi_bind_irq_to_cpu(unsigned int irq, int cpu_id) in lkpi_bind_irq_to_cpu() argument
204 struct device *dev; in lkpi_bind_irq_to_cpu()
206 dev = lkpi_pci_find_irq_dev(irq); in lkpi_bind_irq_to_cpu()
208 return (-ENOENT); in lkpi_bind_irq_to_cpu()
210 irqe = lkpi_irq_ent(dev, irq); in lkpi_bind_irq_to_cpu()
212 return (-ENOENT); in lkpi_bind_irq_to_cpu()
214 return (-bus_bind_intr(dev->bsddev, irqe->res, cpu_id)); in lkpi_bind_irq_to_cpu()
218 lkpi_free_irq(unsigned int irq, void *device __unused) in lkpi_free_irq() argument
221 struct device *dev; in lkpi_free_irq()
223 dev = lkpi_pci_find_irq_dev(irq); in lkpi_free_irq()
226 irqe = lkpi_irq_ent(dev, irq); in lkpi_free_irq()
234 lkpi_devm_free_irq(struct device *xdev, unsigned int irq, void *p __unused) in lkpi_devm_free_irq() argument
236 struct device *dev; in lkpi_devm_free_irq()
239 dev = lkpi_pci_find_irq_dev(irq); in lkpi_devm_free_irq()
244 irqe = lkpi_irq_ent(dev, irq); in lkpi_devm_free_irq()