text: /*++
  
  Copyright (c) 2013-2017, ARM Ltd. All rights reserved.<BR>
  
  SPDX-License-Identifier: BSD-2-Clause-Patent
  
  --*/
  
  #ifndef ARM_GIC_DXE_H_
  #define ARM_GIC_DXE_H_
  
  #include <Library/ArmGicLib.h>
  #include <Library/ArmLib.h>
  #include <Library/DebugLib.h>
  #include <Library/IoLib.h>
  #include <Library/MemoryAllocationLib.h>
  #include <Library/UefiBootServicesTableLib.h>
  #include <Library/UefiLib.h>
  
  #include <Protocol/Cpu.h>
  #include <Protocol/HardwareInterrupt.h>
  #include <Protocol/HardwareInterrupt2.h>
  
  extern UINTN                        mGicNumInterrupts;
  extern HARDWARE_INTERRUPT_HANDLER  *gRegisteredInterruptHandlers;
  
  // Common API
  EFI_STATUS
  InstallAndRegisterInterruptService (
    IN EFI_HARDWARE_INTERRUPT_PROTOCOL   *InterruptProtocol,
    IN EFI_HARDWARE_INTERRUPT2_PROTOCOL  *Interrupt2Protocol,
    IN EFI_CPU_INTERRUPT_HANDLER          InterruptHandler,
    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
    );
  
  // GicV2 API
  EFI_STATUS
  GicV2DxeInitialize (
    IN EFI_HANDLE         ImageHandle,
    IN EFI_SYSTEM_TABLE   *SystemTable
    );
  
  // GicV3 API
  EFI_STATUS
  GicV3DxeInitialize (
    IN EFI_HANDLE         ImageHandle,
    IN EFI_SYSTEM_TABLE   *SystemTable
    );
  
  
  // Shared code
  
  /**
    Calculate GICD_ICFGRn base address and corresponding bit
    field Int_config[1] of the GIC distributor register.
  
    @param Source       Hardware source of the interrupt.
    @param RegAddress   Corresponding GICD_ICFGRn base address.
    @param Config1Bit   Bit number of F Int_config[1] bit in the register.
  
    @retval EFI_SUCCESS       Source interrupt supported.
    @retval EFI_UNSUPPORTED   Source interrupt is not supported.
  **/
  EFI_STATUS
  GicGetDistributorIcfgBaseAndBit (
    IN HARDWARE_INTERRUPT_SOURCE             Source,
    OUT UINTN                               *RegAddress,
    OUT UINTN                               *Config1Bit
    );
  
  #endif // ARM_GIC_DXE_H_
  