Add an acpi_OverrideInterruptLevel() method that OSPM can use to override
the InterruptLevel used for the SCI.
This commit is contained in:
parent
db726f026b
commit
d07df715eb
@ -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.
|
||||
*/
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user