summaryrefslogtreecommitdiffstats
path: root/sys/dev/ips/ips_pci.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/ips/ips_pci.c')
-rw-r--r--sys/dev/ips/ips_pci.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/sys/dev/ips/ips_pci.c b/sys/dev/ips/ips_pci.c
index 9e77cd0..1981e28 100644
--- a/sys/dev/ips/ips_pci.c
+++ b/sys/dev/ips/ips_pci.c
@@ -32,6 +32,7 @@ __FBSDID("$FreeBSD$");
#include <dev/ips/ips.h>
static int ips_pci_free(ips_softc_t *sc);
+static void ips_intrhook(void *arg);
static int ips_pci_probe(device_t dev)
{
@@ -132,15 +133,30 @@ static int ips_pci_attach(device_t dev)
printf("IPS can't alloc dma tag\n");
goto error;
}
- if(ips_adapter_init(sc))
+ sc->ips_ich.ich_func = ips_intrhook;
+ sc->ips_ich.ich_arg = sc;
+ if (config_intrhook_establish(&sc->ips_ich) != 0) {
+ printf("IPS can't establish configuration hook\n");
goto error;
- sc->configured = 1;
+ }
return 0;
error:
ips_pci_free(sc);
return (ENXIO);
}
+static void
+ips_intrhook(void *arg)
+{
+ struct ips_softc *sc = (struct ips_softc *)arg;
+
+ config_intrhook_disestablish(&sc->ips_ich);
+ if (ips_adapter_init(sc))
+ ips_pci_free(sc);
+ else
+ sc->configured = 1;
+}
+
static int ips_pci_free(ips_softc_t *sc)
{
if(sc->adapter_dmatag)
OpenPOWER on IntegriCloud