Module Name:    src
Committed By:   matt
Date:           Thu Nov 14 01:36:00 UTC 2013

Modified Files:
        src/sys/arch/mips/rmi [matt-nb5-mips64]: rmixl_gpio_pci.c

Log Message:
Deal with new interrupt structure.


To generate a diff of this commit:
cvs rdiff -u -r1.1.2.7 -r1.1.2.8 src/sys/arch/mips/rmi/rmixl_gpio_pci.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/mips/rmi/rmixl_gpio_pci.c
diff -u src/sys/arch/mips/rmi/rmixl_gpio_pci.c:1.1.2.7 src/sys/arch/mips/rmi/rmixl_gpio_pci.c:1.1.2.8
--- src/sys/arch/mips/rmi/rmixl_gpio_pci.c:1.1.2.7	Sat Dec 15 03:05:56 2012
+++ src/sys/arch/mips/rmi/rmixl_gpio_pci.c	Thu Nov 14 01:36:00 2013
@@ -29,7 +29,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(1, "$NetBSD: rmixl_gpio_pci.c,v 1.1.2.7 2012/12/15 03:05:56 matt Exp $");
+__KERNEL_RCSID(1, "$NetBSD: rmixl_gpio_pci.c,v 1.1.2.8 2013/11/14 01:36:00 matt Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -93,11 +93,9 @@ static int (* const xlgpio_intrs[])(void
 };
 
 struct xlgpio_intrpin {
-	int (*gip_func)(void *);
-	void *gip_arg;
+	struct rmixl_intrhand_common gip_ihc;
 	uint8_t gip_ipl;
 	uint8_t gip_ist;
-	bool gip_mpsafe;
 	char gip_pin_name[sizeof("pin XX")];
 };
 
@@ -142,7 +140,10 @@ static struct xlgpio_softc xlgpio_sc = {
 		[0 ... 2*PINGROUP-1] = {
 			.gip_ipl = IPL_NONE,
 			.gip_ist = IST_NONE,
-			.gip_func = xlgpio_stray_intr,
+			.gip_ihc = {
+				.ihc_func = xlgpio_stray_intr,
+				.ihc_disestablish = gpio_intr_disestablish,
+			},
 		},
 	},
 	.sc_groups = {
@@ -260,7 +261,7 @@ xlgpio_pci_attach(device_t parent, devic
 		snprintf(gip->gip_pin_name, sizeof(gip->gip_pin_name),
 		    "pin %zu", pin);
 
-		KASSERT(gip->gip_func == xlgpio_stray_intr);
+		KASSERT(gip->gip_ihc.ihc_func == xlgpio_stray_intr);
 	}
 
 	/*
@@ -367,8 +368,8 @@ xlgpio_group_intr(struct xlgpio_softc *s
 		struct xlgpio_intrpin * const gip = &gg->gg_pins[pin];
 
 		KASSERT(gip->gip_ipl == ipl);
-		const int nrv = rmixl_intr_deliver(gip->gip_func, gip->gip_arg,
-		     gip->gip_mpsafe, &evs[pin], ipl);
+		const int nrv = rmixl_intr_deliver(&gip->gip_ihc, 
+		     &evs[pin], ipl);
 		if (nrv)
 			rv = nrv;
 		sts &= PIN_MASK(pin);
@@ -469,16 +470,18 @@ gpio_intr_establish(size_t pin, int ipl,
 		return NULL;
 
 	KASSERT((*inten_p & mask) == 0);
-	KASSERT(gip->gip_func != xlgpio_stray_intr);
+	KASSERT(gip->gip_ihc.ihc_func != xlgpio_stray_intr);
 	KASSERT(gip->gip_ipl == IPL_NONE);
 	KASSERT(gip->gip_ist == IST_NONE);
 
 	mutex_enter(sc->sc_intr_lock);
 
 	gip->gip_ipl = ipl;
-	gip->gip_func = func;
-	gip->gip_arg = arg;
-	gip->gip_mpsafe = mpsafe;
+	gip->gip_ihc.ihc_func = func;
+	gip->gip_ihc.ihc_arg = arg;
+#ifdef MULTIPROCESSOR
+	gip->gip_ihc.ihc_mpsafe = mpsafe;
+#endif
 
 	if (ist == IST_EDGE) {
 		atomic_or_32(&gg->gg_inttype, mask);
@@ -519,7 +522,7 @@ gpio_intr_disestablish(void *v)
 
 	KASSERT(&sc->sc_pins[pin] == gip);
 	KASSERT(pin < __arraycount(sc->sc_pins));
-	KASSERT(gip->gip_func != xlgpio_stray_intr);
+	KASSERT(gip->gip_ihc.ihc_func != xlgpio_stray_intr);
 
 	*inten_p &= ~mask;
 	xlgpio_write_4(sc, gg->gg_r_inten[gip->gip_ipl - IPL_VM], *inten_p);

Reply via email to