mirror of https://github.com/acidanthera/audk.git
ArmPkg/ArmGic: Move RegisterInterruptSource() to the common GicDxe file
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Olivier Martin <olivier.martin@arm.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15624 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
69b5dc9f8e
commit
0458b423b6
|
@ -43,6 +43,48 @@ UINTN mGicNumInterrupts = 0;
|
||||||
|
|
||||||
HARDWARE_INTERRUPT_HANDLER *gRegisteredInterruptHandlers = NULL;
|
HARDWARE_INTERRUPT_HANDLER *gRegisteredInterruptHandlers = NULL;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Register Handler for the specified interrupt source.
|
||||||
|
|
||||||
|
@param This Instance pointer for this protocol
|
||||||
|
@param Source Hardware source of the interrupt
|
||||||
|
@param Handler Callback for interrupt. NULL to unregister
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS Source was updated to support Handler.
|
||||||
|
@retval EFI_DEVICE_ERROR Hardware could not be programmed.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
RegisterInterruptSource (
|
||||||
|
IN EFI_HARDWARE_INTERRUPT_PROTOCOL *This,
|
||||||
|
IN HARDWARE_INTERRUPT_SOURCE Source,
|
||||||
|
IN HARDWARE_INTERRUPT_HANDLER Handler
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (Source > mGicNumInterrupts) {
|
||||||
|
ASSERT(FALSE);
|
||||||
|
return EFI_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((Handler == NULL) && (gRegisteredInterruptHandlers[Source] == NULL)) {
|
||||||
|
return EFI_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((Handler != NULL) && (gRegisteredInterruptHandlers[Source] != NULL)) {
|
||||||
|
return EFI_ALREADY_STARTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
gRegisteredInterruptHandlers[Source] = Handler;
|
||||||
|
|
||||||
|
// If the interrupt handler is unregistered then disable the interrupt
|
||||||
|
if (NULL == Handler){
|
||||||
|
return This->DisableInterruptSource (This, Source);
|
||||||
|
} else {
|
||||||
|
return This->EnableInterruptSource (This, Source);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
InstallAndRegisterInterruptService (
|
InstallAndRegisterInterruptService (
|
||||||
IN EFI_HARDWARE_INTERRUPT_PROTOCOL *InterruptProtocol,
|
IN EFI_HARDWARE_INTERRUPT_PROTOCOL *InterruptProtocol,
|
||||||
|
|
|
@ -37,48 +37,6 @@ Abstract:
|
||||||
|
|
||||||
extern EFI_HARDWARE_INTERRUPT_PROTOCOL gHardwareInterruptProtocol;
|
extern EFI_HARDWARE_INTERRUPT_PROTOCOL gHardwareInterruptProtocol;
|
||||||
|
|
||||||
/**
|
|
||||||
Register Handler for the specified interrupt source.
|
|
||||||
|
|
||||||
@param This Instance pointer for this protocol
|
|
||||||
@param Source Hardware source of the interrupt
|
|
||||||
@param Handler Callback for interrupt. NULL to unregister
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS Source was updated to support Handler.
|
|
||||||
@retval EFI_DEVICE_ERROR Hardware could not be programmed.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
RegisterInterruptSource (
|
|
||||||
IN EFI_HARDWARE_INTERRUPT_PROTOCOL *This,
|
|
||||||
IN HARDWARE_INTERRUPT_SOURCE Source,
|
|
||||||
IN HARDWARE_INTERRUPT_HANDLER Handler
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if (Source > mGicNumInterrupts) {
|
|
||||||
ASSERT(FALSE);
|
|
||||||
return EFI_UNSUPPORTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((Handler == NULL) && (gRegisteredInterruptHandlers[Source] == NULL)) {
|
|
||||||
return EFI_INVALID_PARAMETER;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((Handler != NULL) && (gRegisteredInterruptHandlers[Source] != NULL)) {
|
|
||||||
return EFI_ALREADY_STARTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
gRegisteredInterruptHandlers[Source] = Handler;
|
|
||||||
|
|
||||||
// If the interrupt handler is unregistered then disable the interrupt
|
|
||||||
if (NULL == Handler){
|
|
||||||
return This->DisableInterruptSource (This, Source);
|
|
||||||
} else {
|
|
||||||
return This->EnableInterruptSource (This, Source);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Enable interrupt source Source.
|
Enable interrupt source Source.
|
||||||
|
|
||||||
|
|
|
@ -36,4 +36,12 @@ InstallAndRegisterInterruptService (
|
||||||
IN EFI_EVENT_NOTIFY ExitBootServicesEvent
|
IN EFI_EVENT_NOTIFY ExitBootServicesEvent
|
||||||
);
|
);
|
||||||
|
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
RegisterInterruptSource (
|
||||||
|
IN EFI_HARDWARE_INTERRUPT_PROTOCOL *This,
|
||||||
|
IN HARDWARE_INTERRUPT_SOURCE Source,
|
||||||
|
IN HARDWARE_INTERRUPT_HANDLER Handler
|
||||||
|
);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue