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.
This commit is contained in:
parent
c3a381391e
commit
707fd866b9
@ -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 *isrc, u_int cpu)
|
||||
}
|
||||
#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 resource *res)
|
||||
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 resource *res)
|
||||
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 resource *res, driver_filter_t filt,
|
||||
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 resource *res, void *cookie)
|
||||
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 resource *res, void *cookie,
|
||||
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 resource *res, int cpu)
|
||||
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
|
||||
|
@ -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, intptr_t, int, uint64_t *, uint32_t *);
|
||||
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);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user