Add an acpi_OverrideInterruptLevel() method that OSPM can use to override

the InterruptLevel used for the SCI.
This commit is contained in:
jhb 2003-11-11 18:12:12 +00:00
parent db726f026b
commit d07df715eb
2 changed files with 19 additions and 0 deletions

View File

@ -46,6 +46,8 @@ ACPI_MODULE_NAME("INTERRUPT")
static void InterruptWrapper(void *arg);
static OSD_HANDLER InterruptHandler;
static UINT32 InterruptOverride = 0;
/*
* XXX this does not correctly free resources in the case of partically successful
* attachment.
@ -81,6 +83,12 @@ AcpiOsInstallInterruptHandler(UINT32 InterruptNumber, OSD_HANDLER ServiceRoutine
return_ACPI_STATUS(AE_ALREADY_EXISTS);
}
sc->acpi_irq_rid = 0;
if (InterruptOverride != 0) {
device_printf(sc->acpi_dev,
"Overriding SCI Interrupt from IRQ %u to IRQ %u\n",
InterruptNumber, InterruptOverride);
InterruptNumber = InterruptOverride;
}
bus_set_resource(sc->acpi_dev, SYS_RES_IRQ, 0, InterruptNumber, 1);
if ((sc->acpi_irq = bus_alloc_resource(sc->acpi_dev, SYS_RES_IRQ, &sc->acpi_irq_rid, 0, ~0, 1,
RF_SHAREABLE | RF_ACTIVE)) == NULL) {
@ -123,6 +131,16 @@ AcpiOsRemoveInterruptHandler (UINT32 InterruptNumber, OSD_HANDLER ServiceRoutine
return_ACPI_STATUS(AE_OK);
}
ACPI_STATUS
acpi_OverrideInterruptLevel(UINT32 InterruptNumber)
{
if (InterruptOverride != 0)
return_ACPI_STATUS(AE_ALREADY_EXISTS);
InterruptOverride = InterruptNumber;
return_ACPI_STATUS(AE_OK);
}
/*
* Interrupt handler wrapper.
*/

View File

@ -184,6 +184,7 @@ extern ACPI_STATUS acpi_FindIndexedResource(ACPI_BUFFER *buf, int index,
ACPI_RESOURCE **resp);
extern ACPI_STATUS acpi_AppendBufferResource(ACPI_BUFFER *buf,
ACPI_RESOURCE *res);
extern ACPI_STATUS acpi_OverrideInterruptLevel(UINT32 InterruptNumber);
extern ACPI_STATUS acpi_SetIntrModel(int model);
extern ACPI_STATUS acpi_SetSleepState(struct acpi_softc *sc, int state);
extern ACPI_STATUS acpi_Enable(struct acpi_softc *sc);