summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2014-12-22 16:56:04 +0100
committercinap_lenrek <cinap_lenrek@felloff.net>2014-12-22 16:56:04 +0100
commit3ab80c9fe0fe4cfe91c0b6004db986f2e72bf5e6 (patch)
treef7f8fbbf694687f54a629dcc46158b55a30f239a
parentc404fd9d6f46f90e4420d0b268215ef719e25796 (diff)
downloadplan9front-3ab80c9fe0fe4cfe91c0b6004db986f2e72bf5e6.tar.xz
pc, pc64, xen: change return type of intrdisable() to void
intrdisable() will always be able to unregister the interrupt now, so there is no reason to have it return an error value. all drivers except uart8250 already assumed it to never fail and theres no need to maintain that complexity.
-rw-r--r--sys/src/9/pc/fns.h2
-rw-r--r--sys/src/9/pc/trap.c3
-rw-r--r--sys/src/9/pc/uarti8250.c4
-rw-r--r--sys/src/9/pc64/fns.h2
-rw-r--r--sys/src/9/pc64/trap.c3
-rw-r--r--sys/src/9/xen/fns.h2
-rw-r--r--sys/src/9/xen/trap.c35
7 files changed, 20 insertions, 31 deletions
diff --git a/sys/src/9/pc/fns.h b/sys/src/9/pc/fns.h
index 77eebd2fc..553695b56 100644
--- a/sys/src/9/pc/fns.h
+++ b/sys/src/9/pc/fns.h
@@ -83,7 +83,7 @@ ushort ins(int);
void inss(int, void*, int);
ulong inl(int);
void insl(int, void*, int);
-int intrdisable(int, void (*)(Ureg *, void *), void*, int, char*);
+void intrdisable(int, void (*)(Ureg *, void *), void*, int, char*);
void intrenable(int, void (*)(Ureg*, void*), void*, int, char*);
void introff(void);
void intron(void);
diff --git a/sys/src/9/pc/trap.c b/sys/src/9/pc/trap.c
index 1eef90ea9..04d4b46da 100644
--- a/sys/src/9/pc/trap.c
+++ b/sys/src/9/pc/trap.c
@@ -76,7 +76,7 @@ intrenable(int irq, void (*f)(Ureg*, void*), void* a, int tbdf, char *name)
iunlock(&vctllock);
}
-int
+void
intrdisable(int irq, void (*f)(Ureg *, void *), void *a, int tbdf, char *name)
{
Vctl **pv, *v;
@@ -116,7 +116,6 @@ intrdisable(int irq, void (*f)(Ureg *, void *), void *a, int tbdf, char *name)
break;
}
iunlock(&vctllock);
- return 0;
}
static long
diff --git a/sys/src/9/pc/uarti8250.c b/sys/src/9/pc/uarti8250.c
index 845e4401a..de5156d2c 100644
--- a/sys/src/9/pc/uarti8250.c
+++ b/sys/src/9/pc/uarti8250.c
@@ -542,8 +542,8 @@ i8250disable(Uart* uart)
csr8w(ctlr, Ier, ctlr->sticky[Ier]);
if(ctlr->iena != 0){
- if(intrdisable(ctlr->irq, i8250interrupt, uart, ctlr->tbdf, uart->name) == 0)
- ctlr->iena = 0;
+ ctlr->iena = 0;
+ intrdisable(ctlr->irq, i8250interrupt, uart, ctlr->tbdf, uart->name);
}
}
diff --git a/sys/src/9/pc64/fns.h b/sys/src/9/pc64/fns.h
index 0af15138f..46922f53d 100644
--- a/sys/src/9/pc64/fns.h
+++ b/sys/src/9/pc64/fns.h
@@ -74,7 +74,7 @@ ushort ins(int);
void inss(int, void*, int);
ulong inl(int);
void insl(int, void*, int);
-int intrdisable(int, void (*)(Ureg *, void *), void*, int, char*);
+void intrdisable(int, void (*)(Ureg *, void *), void*, int, char*);
void intrenable(int, void (*)(Ureg*, void*), void*, int, char*);
void introff(void);
void intron(void);
diff --git a/sys/src/9/pc64/trap.c b/sys/src/9/pc64/trap.c
index 7c411f47e..2b8de4b7c 100644
--- a/sys/src/9/pc64/trap.c
+++ b/sys/src/9/pc64/trap.c
@@ -76,7 +76,7 @@ intrenable(int irq, void (*f)(Ureg*, void*), void* a, int tbdf, char *name)
iunlock(&vctllock);
}
-int
+void
intrdisable(int irq, void (*f)(Ureg *, void *), void *a, int tbdf, char *name)
{
Vctl **pv, *v;
@@ -116,7 +116,6 @@ intrdisable(int irq, void (*f)(Ureg *, void *), void *a, int tbdf, char *name)
break;
}
iunlock(&vctllock);
- return 0;
}
static long
diff --git a/sys/src/9/xen/fns.h b/sys/src/9/xen/fns.h
index 71e64ac4c..5b39cfddb 100644
--- a/sys/src/9/xen/fns.h
+++ b/sys/src/9/xen/fns.h
@@ -54,7 +54,7 @@ ushort ins(int);
void inss(int, void*, int);
ulong inl(int);
void insl(int, void*, int);
-int intrdisable(int, void (*)(Ureg *, void *), void*, int, char*);
+void intrdisable(int, void (*)(Ureg *, void *), void*, int, char*);
void intrenable(int, void (*)(Ureg*, void*), void*, int, char*);
int ioalloc(int, int, int, char*);
void ioinit(void);
diff --git a/sys/src/9/xen/trap.c b/sys/src/9/xen/trap.c
index 9d572577b..a81182a8b 100644
--- a/sys/src/9/xen/trap.c
+++ b/sys/src/9/xen/trap.c
@@ -90,36 +90,27 @@ intrenable(int irq, void (*f)(Ureg*, void*), void* a, int tbdf, char *name)
iunlock(&vctllock);
}
-int
+void
intrdisable(int irq, void (*f)(Ureg *, void *), void *a, int tbdf, char *name)
{
Vctl **pv, *v;
int vno;
- /*
- * For now, none of this will work with the APIC code,
- * there is no mapping between irq and vector as the IRQ
- * is pretty meaningless.
- */
- if(arch->intrvecno == nil)
- return -1;
vno = arch->intrvecno(irq);
ilock(&vctllock);
- pv = &vctl[vno];
- while (*pv &&
- ((*pv)->irq != irq || (*pv)->tbdf != tbdf || (*pv)->f != f || (*pv)->a != a ||
- strcmp((*pv)->name, name)))
- pv = &((*pv)->next);
- assert(*pv);
-
- v = *pv;
- *pv = (*pv)->next; /* Link out the entry */
-
- if(vctl[vno] == nil && arch->intrdisable != nil)
- arch->intrdisable(irq);
+ for(pv = &vctl[vno]; (v = *pv) != nil; pv = &v->next){
+ if(v->isintr && v->irq == irq
+ && v->tbdf == tbdf && v->f == f && v->a == a
+ && strcmp(v->name, name) == 0){
+ *pv = v->next;
+ xfree(v);
+
+ if(vctl[vno] == nil && arch->intrdisable != nil)
+ arch->intrdisable(irq);
+ break;
+ }
+ }
iunlock(&vctllock);
- xfree(v);
- return 0;
}
static long