]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EmbeddedPkg/Include/Protocol/HardwareInterrupt2.h
EmbeddedPkg: Introduce HardwareInterrupt2 protocol
[mirror_edk2.git] / EmbeddedPkg / Include / Protocol / HardwareInterrupt2.h
diff --git a/EmbeddedPkg/Include/Protocol/HardwareInterrupt2.h b/EmbeddedPkg/Include/Protocol/HardwareInterrupt2.h
new file mode 100644 (file)
index 0000000..caa28d4
--- /dev/null
@@ -0,0 +1,182 @@
+/** @file\r
+\r
+  Copyright (c) 2016-2017, Linaro Ltd. All rights reserved.<BR>\r
+\r
+  This program and the accompanying materials\r
+  are licensed and made available under the terms and conditions of the BSD License\r
+  which accompanies this distribution.  The full text of the license may be found at\r
+  http://opensource.org/licenses/bsd-license.php\r
+\r
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#ifndef __HARDWARE_INTERRUPT2_H__\r
+#define __HARDWARE_INTERRUPT2_H__\r
+\r
+#include <Protocol/HardwareInterrupt.h>\r
+\r
+// 22838932-1a2d-4a47-aaba-f3f7cf569470\r
+\r
+#define EFI_HARDWARE_INTERRUPT2_PROTOCOL_GUID \\r
+  { 0x32898322, 0x2d1a, 0x474a, \\r
+    { 0xba, 0xaa, 0xf3, 0xf7, 0xcf, 0x56, 0x94, 0x70 } }\r
+\r
+typedef enum {\r
+  EFI_HARDWARE_INTERRUPT2_TRIGGER_LEVEL_LOW,\r
+  EFI_HARDWARE_INTERRUPT2_TRIGGER_LEVEL_HIGH,\r
+  EFI_HARDWARE_INTERRUPT2_TRIGGER_EDGE_FALLING,\r
+  EFI_HARDWARE_INTERRUPT2_TRIGGER_EDGE_RISING,\r
+} EFI_HARDWARE_INTERRUPT2_TRIGGER_TYPE;\r
+\r
+typedef struct _EFI_HARDWARE_INTERRUPT2_PROTOCOL \\r
+                 EFI_HARDWARE_INTERRUPT2_PROTOCOL;\r
+\r
+/**\r
+  Register Handler for the specified interrupt source.\r
+\r
+  @param This     Instance pointer for this protocol\r
+  @param Source   Hardware source of the interrupt\r
+  @param Handler  Callback for interrupt. NULL to unregister\r
+\r
+  @retval EFI_SUCCESS Source was updated to support Handler.\r
+  @retval EFI_DEVICE_ERROR  Hardware could not be programmed.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *HARDWARE_INTERRUPT2_REGISTER) (\r
+  IN EFI_HARDWARE_INTERRUPT2_PROTOCOL *This,\r
+  IN HARDWARE_INTERRUPT_SOURCE Source,\r
+  IN HARDWARE_INTERRUPT_HANDLER Handler\r
+  );\r
+\r
+\r
+/**\r
+  Enable interrupt source Source.\r
+\r
+  @param This     Instance pointer for this protocol\r
+  @param Source   Hardware source of the interrupt\r
+\r
+  @retval EFI_SUCCESS       Source interrupt enabled.\r
+  @retval EFI_DEVICE_ERROR  Hardware could not be programmed.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *HARDWARE_INTERRUPT2_ENABLE) (\r
+  IN EFI_HARDWARE_INTERRUPT2_PROTOCOL *This,\r
+  IN HARDWARE_INTERRUPT_SOURCE Source\r
+  );\r
+\r
+\r
+/**\r
+  Disable interrupt source Source.\r
+\r
+  @param This     Instance pointer for this protocol\r
+  @param Source   Hardware source of the interrupt\r
+\r
+  @retval EFI_SUCCESS       Source interrupt disabled.\r
+  @retval EFI_DEVICE_ERROR  Hardware could not be programmed.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *HARDWARE_INTERRUPT2_DISABLE) (\r
+  IN EFI_HARDWARE_INTERRUPT2_PROTOCOL *This,\r
+  IN HARDWARE_INTERRUPT_SOURCE Source\r
+  );\r
+\r
+\r
+/**\r
+  Return current state of interrupt source Source.\r
+\r
+  @param This     Instance pointer for this protocol\r
+  @param Source   Hardware source of the interrupt\r
+  @param InterruptState  TRUE: source enabled, FALSE: source disabled.\r
+\r
+  @retval EFI_SUCCESS       InterruptState is valid\r
+  @retval EFI_DEVICE_ERROR  InterruptState is not valid\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *HARDWARE_INTERRUPT2_INTERRUPT_STATE) (\r
+  IN EFI_HARDWARE_INTERRUPT2_PROTOCOL *This,\r
+  IN HARDWARE_INTERRUPT_SOURCE Source,\r
+  IN BOOLEAN *InterruptState\r
+  );\r
+\r
+/**\r
+  Signal to the hardware that the End Of Interrupt state\r
+  has been reached.\r
+\r
+  @param This     Instance pointer for this protocol\r
+  @param Source   Hardware source of the interrupt\r
+\r
+  @retval EFI_SUCCESS       Source interrupt EOI'ed.\r
+  @retval EFI_DEVICE_ERROR  Hardware could not be programmed.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *HARDWARE_INTERRUPT2_END_OF_INTERRUPT) (\r
+  IN EFI_HARDWARE_INTERRUPT2_PROTOCOL *This,\r
+  IN HARDWARE_INTERRUPT_SOURCE Source\r
+  );\r
+\r
+/**\r
+  Return the configured trigger type for an interrupt source\r
+\r
+  @param This         Instance pointer for this protocol\r
+  @param Source       Hardware source of the interrupt\r
+  @param TriggerType  The configured trigger type\r
+\r
+  @retval EFI_SUCCESS       Operation successful\r
+  @retval EFI_DEVICE_ERROR  Information could not be returned\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *HARDWARE_INTERRUPT2_GET_TRIGGER_TYPE) (\r
+  IN  EFI_HARDWARE_INTERRUPT2_PROTOCOL *This,\r
+  IN  HARDWARE_INTERRUPT_SOURCE Source,\r
+  OUT EFI_HARDWARE_INTERRUPT2_TRIGGER_TYPE *TriggerType\r
+  );\r
+\r
+\r
+/**\r
+ Configure the trigger type for an interrupt source\r
+\r
+  @param This         Instance pointer for this protocol\r
+  @param Source       Hardware source of the interrupt\r
+  @param TriggerType  The trigger type to configure\r
+\r
+  @retval EFI_SUCCESS       Operation successful\r
+  @retval EFI_DEVICE_ERROR  Hardware could not be programmed.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *HARDWARE_INTERRUPT2_SET_TRIGGER_TYPE) (\r
+  IN  EFI_HARDWARE_INTERRUPT2_PROTOCOL *This,\r
+  IN  HARDWARE_INTERRUPT_SOURCE Source,\r
+  IN  EFI_HARDWARE_INTERRUPT2_TRIGGER_TYPE TriggerType\r
+  );\r
+\r
+struct _EFI_HARDWARE_INTERRUPT2_PROTOCOL {\r
+  HARDWARE_INTERRUPT2_REGISTER            RegisterInterruptSource;\r
+  HARDWARE_INTERRUPT2_ENABLE              EnableInterruptSource;\r
+  HARDWARE_INTERRUPT2_DISABLE             DisableInterruptSource;\r
+  HARDWARE_INTERRUPT2_INTERRUPT_STATE     GetInterruptSourceState;\r
+  HARDWARE_INTERRUPT2_END_OF_INTERRUPT    EndOfInterrupt;\r
+\r
+  // v2 members\r
+  HARDWARE_INTERRUPT2_GET_TRIGGER_TYPE    GetTriggerType;\r
+  HARDWARE_INTERRUPT2_SET_TRIGGER_TYPE    SetTriggerType;\r
+};\r
+\r
+extern EFI_GUID gHardwareInterrupt2ProtocolGuid;\r
+\r
+#endif\r