Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F135626510
D35386.id106628.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
D35386.id106628.diff
View Options
Index: sys/x86/include/intr_machdep.h
===================================================================
--- sys/x86/include/intr_machdep.h
+++ sys/x86/include/intr_machdep.h
@@ -140,15 +140,15 @@
#ifdef SMP
void intr_add_cpu(u_int cpu);
#endif
-int intr_add_handler(const char *name, int vector, driver_filter_t filter,
- driver_intr_t handler, void *arg, enum intr_type flags, void **cookiep,
- int domain);
+int intr_add_handler(const char *name, struct intsrc *isrc,
+ driver_filter_t filter, driver_intr_t handler, void *arg,
+ enum intr_type flags, void **cookiep, int domain);
#ifdef SMP
-int intr_bind(u_int vector, u_char cpu);
+int intr_bind(struct intsrc *isrc, u_char cpu);
#endif
-int intr_config_intr(int vector, enum intr_trigger trig,
+int intr_config_intr(struct intsrc *isrc, enum intr_trigger trig,
enum intr_polarity pol);
-int intr_describe(u_int vector, void *ih, const char *descr);
+int intr_describe(struct intsrc *isrc, void *ih, const char *descr);
void intr_execute_handlers(struct intsrc *isrc, struct trapframe *frame);
u_int intr_next_cpu(int domain);
struct intsrc *intr_lookup_source(int vector);
Index: sys/x86/x86/intr_machdep.c
===================================================================
--- sys/x86/x86/intr_machdep.c
+++ sys/x86/x86/intr_machdep.c
@@ -258,16 +258,12 @@
}
int
-intr_add_handler(const char *name, int vector, driver_filter_t filter,
+intr_add_handler(const char *name, struct intsrc *isrc, driver_filter_t filter,
driver_intr_t handler, void *arg, enum intr_type flags, void **cookiep,
int domain)
{
- struct intsrc *isrc;
int error;
- isrc = intr_lookup_source(vector);
- if (isrc == NULL)
- return (EINVAL);
error = intr_event_add_handler(isrc->is_event, name, filter, handler,
arg, intr_priority(flags), flags, cookiep);
if (error == 0) {
@@ -306,13 +302,10 @@
}
int
-intr_config_intr(int vector, enum intr_trigger trig, enum intr_polarity pol)
+intr_config_intr(struct intsrc *isrc, enum intr_trigger trig,
+ enum intr_polarity pol)
{
- struct intsrc *isrc;
- isrc = intr_lookup_source(vector);
- if (isrc == NULL)
- return (EINVAL);
return (isrc->is_pic->pic_config_intr(isrc, trig, pol));
}
@@ -524,14 +517,10 @@
/* Add a description to an active interrupt handler. */
int
-intr_describe(u_int vector, void *ih, const char *descr)
+intr_describe(struct intsrc *isrc, void *ih, const char *descr)
{
- struct intsrc *isrc;
int error;
- isrc = intr_lookup_source(vector);
- if (isrc == NULL)
- return (EINVAL);
error = intr_event_describe_handler(isrc->is_event, ih, descr);
if (error)
return (error);
@@ -632,13 +621,9 @@
/* Attempt to bind the specified IRQ to the specified CPU. */
int
-intr_bind(u_int vector, u_char cpu)
+intr_bind(struct intsrc *isrc, u_char cpu)
{
- struct intsrc *isrc;
- isrc = intr_lookup_source(vector);
- if (isrc == NULL)
- return (EINVAL);
return (intr_event_bind(isrc->is_event, cpu));
}
Index: sys/x86/x86/nexus.c
===================================================================
--- sys/x86/x86/nexus.c
+++ sys/x86/x86/nexus.c
@@ -577,6 +577,7 @@
void *arg, void **cookiep)
{
int error, domain;
+ struct intsrc *isrc;
/* somebody tried to setup an irq that failed to allocate! */
if (irq == NULL)
@@ -595,8 +596,11 @@
if (bus_get_domain(child, &domain) != 0)
domain = 0;
- error = intr_add_handler(device_get_nameunit(child),
- rman_get_start(irq), filter, ihand, arg, flags, cookiep, domain);
+ isrc = intr_lookup_source(rman_get_start(irq));
+ if (isrc == NULL)
+ return (EINVAL);
+ error = intr_add_handler(device_get_nameunit(child), isrc,
+ filter, ihand, arg, flags, cookiep, domain);
if (error == 0)
rman_set_irq_cookie(irq, *cookiep);
@@ -630,7 +634,12 @@
static int
nexus_bind_intr(device_t dev, device_t child, struct resource *irq, int cpu)
{
- return (intr_bind(rman_get_start(irq), cpu));
+ struct intsrc *isrc;
+
+ isrc = intr_lookup_source(rman_get_start(irq));
+ if (isrc == NULL)
+ return (EINVAL);
+ return (intr_bind(isrc, cpu));
}
#endif
@@ -638,15 +647,24 @@
nexus_config_intr(device_t dev, int irq, enum intr_trigger trig,
enum intr_polarity pol)
{
- return (intr_config_intr(irq, trig, pol));
+ struct intsrc *isrc;
+
+ isrc = intr_lookup_source(irq);
+ if (isrc == NULL)
+ return (EINVAL);
+ return (intr_config_intr(isrc, trig, pol));
}
static int
nexus_describe_intr(device_t dev, device_t child, struct resource *irq,
void *cookie, const char *descr)
{
+ struct intsrc *isrc;
- return (intr_describe(rman_get_start(irq), cookie, descr));
+ isrc = intr_lookup_source(rman_get_start(irq));
+ if (isrc == NULL)
+ return (EINVAL);
+ return (intr_describe(isrc, cookie, descr));
}
static struct resource_list *
Index: sys/x86/xen/xen_intr.c
===================================================================
--- sys/x86/xen/xen_intr.c
+++ sys/x86/xen/xen_intr.c
@@ -1204,7 +1204,7 @@
va_start(ap, fmt);
vsnprintf(descr, sizeof(descr), fmt, ap);
va_end(ap);
- return (intr_describe(isrc->xi_vector, isrc->xi_cookie, descr));
+ return (intr_describe(&isrc->xi_intsrc, isrc->xi_cookie, descr));
}
void
@@ -1271,7 +1271,7 @@
if (isrc == NULL || isrc->xi_cookie != NULL)
return (EINVAL);
- error = intr_add_handler(name, isrc->xi_vector,filter, handler, arg,
+ error = intr_add_handler(name, &isrc->xi_intsrc, filter, handler, arg,
flags|INTR_EXCL, &isrc->xi_cookie, 0);
if (error != 0)
printf("%s: %s: add handler failed: %d\n", name, __func__,
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Nov 12, 10:10 AM (10 h, 59 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25205491
Default Alt Text
D35386.id106628.diff (5 KB)
Attached To
Mode
D35386: intr/x86: replace use of vector in interface with intsrc
Attached
Detach File
Event Timeline
Log In to Comment