34#include <sys/kernel.h>
35#include <sys/malloc.h>
36#include <sys/module.h>
38#include <machine/bus.h>
39#include <machine/resource.h>
42#include <machine/stdarg.h>
44#include <xen/xen-os.h>
45#include <xen/features.h>
46#include <xen/hypervisor.h>
48#include <xen/xen_intr.h>
50#include <dev/pci/pcireg.h>
51#include <dev/pci/pcivar.h>
63 xen_intr_handle_upcall(trap_frame);
64 return (FILTER_HANDLED);
72 error = BUS_SETUP_INTR(device_get_parent(device), device,
73 scp->
res_irq, INTR_MPSAFE|INTR_TYPE_MISC,
87 error = BUS_BIND_INTR(device_get_parent(device), device,
93 xen_hvm_set_callback(device);
106 bus_deactivate_resource(dev, SYS_RES_IRQ,
108 bus_release_resource(dev, SYS_RES_IRQ,
124 scp->
res_irq = bus_alloc_resource_any(dev, SYS_RES_IRQ,
125 &scp->
rid_irq, RF_SHAREABLE|RF_ACTIVE);
127 printf(
"xenpci Could not allocate irq.\n");
146 if (pci_get_devid(dev) != 0x00015853)
149 device_set_desc(dev,
"Xen Platform Device");
150 return (BUS_PROBE_DEFAULT);
164 device_printf(dev,
"xenpci_allocate_resources failed(%d).\n",
174 device_printf(dev,
"xenpci_irq_init failed(%d).\n",
196 device_t parent = device_get_parent(dev);
203 if (BUS_TEARDOWN_INTR(parent, dev,
206 "intr teardown failed.. continuing\n");
220 xen_hvm_set_callback(dev);
struct resource * res_irq
static int xenpci_intr_filter(void *trap_frame)
static device_method_t xenpci_methods[]
static driver_t xenpci_driver
static int xenpci_irq_init(device_t device, struct xenpci_softc *scp)
static devclass_t xenpci_devclass
DRIVER_MODULE(xenpci, pci, xenpci_driver, xenpci_devclass, 0, 0)
static int xenpci_allocate_resources(device_t dev)
static int xenpci_probe(device_t dev)
static int xenpci_attach(device_t dev)
static int xenpci_detach(device_t dev)
static int xenpci_resume(device_t dev)
static int xenpci_deallocate_resources(device_t dev)