svn commit: r301543 - in head/sys: kern sys
Svatopluk Kraus
skra at FreeBSD.org
Tue Jun 7 09:03:28 UTC 2016
Author: skra
Date: Tue Jun 7 09:03:27 2016
New Revision: 301543
URL: https://svnweb.freebsd.org/changeset/base/301543
Log:
Remove temporary solution for storing interrupt mapping data as
it's not needed after r301451 and follow-ups r301453, r301539.
This makes INTRNG clean of all additions related to various buses.
Modified:
head/sys/kern/subr_intr.c
head/sys/sys/intr.h
Modified: head/sys/kern/subr_intr.c
==============================================================================
--- head/sys/kern/subr_intr.c Tue Jun 7 07:48:36 2016 (r301542)
+++ head/sys/kern/subr_intr.c Tue Jun 7 09:03:27 2016 (r301543)
@@ -35,10 +35,8 @@ __FBSDID("$FreeBSD$");
* - to complete things for removable PICs
*/
-#include "opt_acpi.h"
#include "opt_ddb.h"
#include "opt_hwpmc_hooks.h"
-#include "opt_platform.h"
#include <sys/param.h>
#include <sys/systm.h>
@@ -123,37 +121,6 @@ static struct mtx isrc_table_lock;
static struct intr_irqsrc *irq_sources[NIRQ];
u_int irq_next_free;
-/*
- * XXX - All stuff around struct intr_dev_data is considered as temporary
- * until better place for storing struct intr_map_data will be find.
- *
- * For now, there are two global interrupt numbers spaces:
- * <0, NIRQ) ... interrupts without config data
- * managed in irq_sources[]
- * IRQ_DDATA_BASE + <0, 2 * NIRQ) ... interrupts with config data
- * managed in intr_ddata_tab[]
- *
- * Read intr_ddata_lookup() to see how these spaces are worked with.
- * Note that each interrupt number from second space duplicates some number
- * from first space at this moment. An interrupt number from first space can
- * be duplicated even multiple times in second space.
- */
-struct intr_dev_data {
- device_t idd_dev;
- intptr_t idd_xref;
- u_int idd_irq;
- struct intr_map_data * idd_data;
- struct intr_irqsrc * idd_isrc;
-};
-
-static struct intr_dev_data *intr_ddata_tab[2 * NIRQ];
-#if 0
-static u_int intr_ddata_first_unused;
-#endif
-
-#define IRQ_DDATA_BASE 10000
-CTASSERT(IRQ_DDATA_BASE > nitems(irq_sources));
-
#ifdef SMP
static boolean_t irq_assign_cpu = FALSE;
#endif
@@ -536,94 +503,6 @@ intr_isrc_init_on_cpu(struct intr_irqsrc
}
#endif
-#if 0
-static struct intr_dev_data *
-intr_ddata_alloc(u_int extsize)
-{
- struct intr_dev_data *ddata;
- size_t size;
-
- size = sizeof(*ddata);
- ddata = malloc(size + extsize, M_INTRNG, M_WAITOK | M_ZERO);
-
- mtx_lock(&isrc_table_lock);
- if (intr_ddata_first_unused >= nitems(intr_ddata_tab)) {
- mtx_unlock(&isrc_table_lock);
- free(ddata, M_INTRNG);
- return (NULL);
- }
- intr_ddata_tab[intr_ddata_first_unused] = ddata;
- ddata->idd_irq = IRQ_DDATA_BASE + intr_ddata_first_unused++;
- mtx_unlock(&isrc_table_lock);
-
- ddata->idd_data = (struct intr_map_data *)((uintptr_t)ddata + size);
- return (ddata);
-}
-#endif
-
-static struct intr_irqsrc *
-intr_ddata_lookup(u_int irq, struct intr_map_data **datap)
-{
- int error;
- struct intr_irqsrc *isrc;
- struct intr_dev_data *ddata;
-
- isrc = isrc_lookup(irq);
- if (isrc != NULL) {
- if (datap != NULL)
- *datap = NULL;
- return (isrc);
- }
-
- if (irq < IRQ_DDATA_BASE)
- return (NULL);
-
- irq -= IRQ_DDATA_BASE;
- if (irq >= nitems(intr_ddata_tab))
- return (NULL);
-
- ddata = intr_ddata_tab[irq];
- if (ddata->idd_isrc == NULL) {
- error = intr_map_irq(ddata->idd_dev, ddata->idd_xref,
- ddata->idd_data, &irq);
- if (error != 0)
- return (NULL);
- ddata->idd_isrc = isrc_lookup(irq);
- }
- if (datap != NULL)
- *datap = ddata->idd_data;
- return (ddata->idd_isrc);
-}
-
-#ifdef DEV_ACPI
-/*
- * Map interrupt source according to ACPI info into framework. If such mapping
- * does not exist, create it. Return unique interrupt number (resource handle)
- * associated with mapped interrupt source.
- */
-u_int
-intr_acpi_map_irq(device_t dev, u_int irq, enum intr_polarity pol,
- enum intr_trigger trig)
-{
- struct intr_map_data_acpi *daa;
- struct intr_dev_data *ddata;
-
- ddata = intr_ddata_alloc(sizeof(struct intr_map_data_acpi));
- if (ddata == NULL)
- return (INTR_IRQ_INVALID); /* no space left */
-
- ddata->idd_dev = dev;
- ddata->idd_data->type = INTR_MAP_DATA_ACPI;
-
- daa = (struct intr_map_data_acpi *)ddata->idd_data;
- daa->irq = irq;
- daa->pol = pol;
- daa->trig = trig;
-
- return (ddata->idd_irq);
-}
-#endif
-
#ifdef INTR_SOLO
/*
* Setup filter into interrupt source.
@@ -1054,14 +933,11 @@ intr_alloc_irq(device_t dev, struct reso
KASSERT(rman_get_start(res) == rman_get_end(res),
("%s: more interrupts in resource", __func__));
- data = rman_get_virtual(res);
- if (data == NULL)
- isrc = intr_ddata_lookup(rman_get_start(res), &data);
- else
- isrc = isrc_lookup(rman_get_start(res));
+ isrc = isrc_lookup(rman_get_start(res));
if (isrc == NULL)
return (EINVAL);
+ data = rman_get_virtual(res);
return (PIC_ALLOC_INTR(isrc->isrc_dev, isrc, res, data));
}
@@ -1074,14 +950,11 @@ intr_release_irq(device_t dev, struct re
KASSERT(rman_get_start(res) == rman_get_end(res),
("%s: more interrupts in resource", __func__));
- data = rman_get_virtual(res);
- if (data == NULL)
- isrc = intr_ddata_lookup(rman_get_start(res), &data);
- else
- isrc = isrc_lookup(rman_get_start(res));
+ isrc = isrc_lookup(rman_get_start(res));
if (isrc == NULL)
return (EINVAL);
+ data = rman_get_virtual(res);
return (PIC_RELEASE_INTR(isrc->isrc_dev, isrc, res, data));
}
@@ -1097,14 +970,11 @@ intr_setup_irq(device_t dev, struct reso
KASSERT(rman_get_start(res) == rman_get_end(res),
("%s: more interrupts in resource", __func__));
- data = rman_get_virtual(res);
- if (data == NULL)
- isrc = intr_ddata_lookup(rman_get_start(res), &data);
- else
- isrc = isrc_lookup(rman_get_start(res));
+ isrc = isrc_lookup(rman_get_start(res));
if (isrc == NULL)
return (EINVAL);
+ data = rman_get_virtual(res);
name = device_get_nameunit(dev);
#ifdef INTR_SOLO
@@ -1161,14 +1031,12 @@ intr_teardown_irq(device_t dev, struct r
KASSERT(rman_get_start(res) == rman_get_end(res),
("%s: more interrupts in resource", __func__));
- data = rman_get_virtual(res);
- if (data == NULL)
- isrc = intr_ddata_lookup(rman_get_start(res), &data);
- else
- isrc = isrc_lookup(rman_get_start(res));
+ isrc = isrc_lookup(rman_get_start(res));
if (isrc == NULL || isrc->isrc_handlers == 0)
return (EINVAL);
+ data = rman_get_virtual(res);
+
#ifdef INTR_SOLO
if (isrc->isrc_filter != NULL) {
if (isrc != cookie)
@@ -1211,7 +1079,7 @@ intr_describe_irq(device_t dev, struct r
KASSERT(rman_get_start(res) == rman_get_end(res),
("%s: more interrupts in resource", __func__));
- isrc = intr_ddata_lookup(rman_get_start(res), NULL);
+ isrc = isrc_lookup(rman_get_start(res));
if (isrc == NULL || isrc->isrc_handlers == 0)
return (EINVAL);
#ifdef INTR_SOLO
@@ -1243,7 +1111,7 @@ intr_bind_irq(device_t dev, struct resou
KASSERT(rman_get_start(res) == rman_get_end(res),
("%s: more interrupts in resource", __func__));
- isrc = intr_ddata_lookup(rman_get_start(res), NULL);
+ isrc = isrc_lookup(rman_get_start(res));
if (isrc == NULL || isrc->isrc_handlers == 0)
return (EINVAL);
#ifdef INTR_SOLO
Modified: head/sys/sys/intr.h
==============================================================================
--- head/sys/sys/intr.h Tue Jun 7 07:48:36 2016 (r301542)
+++ head/sys/sys/intr.h Tue Jun 7 09:03:27 2016 (r301543)
@@ -34,15 +34,6 @@
#define INTR_IRQ_INVALID 0xFFFFFFFF
-#ifdef DEV_ACPI
-struct intr_map_data_acpi {
- struct intr_map_data hdr;
- u_int irq;
- enum intr_polarity pol;
- enum intr_trigger trig;
-};
-#endif
-
#ifdef notyet
#define INTR_SOLO INTR_MD1
typedef int intr_irq_filter_t(void *arg, struct trapframe *tf);
@@ -117,11 +108,6 @@ int intr_map_msi(device_t, device_t, int
int intr_alloc_msix(device_t, device_t, intptr_t, int *);
int intr_release_msix(device_t, device_t, intptr_t, int);
-#ifdef DEV_ACPI
-u_int intr_acpi_map_irq(device_t, u_int, enum intr_polarity,
- enum intr_trigger);
-#endif
-
#ifdef SMP
int intr_bind_irq(device_t, struct resource *, int);
More information about the svn-src-head
mailing list