EmbeddedGpio.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. /** @file
  2. Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
  3. SPDX-License-Identifier: BSD-2-Clause-Patent
  4. **/
  5. #ifndef __EMBEDDED_GPIO_H__
  6. #define __EMBEDDED_GPIO_H__
  7. //
  8. // Protocol interface structure
  9. //
  10. typedef struct _EMBEDDED_GPIO EMBEDDED_GPIO;
  11. //
  12. // Data Types
  13. //
  14. typedef UINTN EMBEDDED_GPIO_PIN;
  15. #define GPIO(Port, Pin) ((EMBEDDED_GPIO_PIN)(((Port) << (16)) | (Pin)))
  16. #define GPIO_PIN(x) ((EMBEDDED_GPIO_PIN)(x) & (0xFFFF))
  17. #define GPIO_PORT(x) ((EMBEDDED_GPIO_PIN)(x) >> (16))
  18. typedef enum {
  19. GPIO_MODE_INPUT = 0x00,
  20. GPIO_MODE_OUTPUT_0 = 0x0E,
  21. GPIO_MODE_OUTPUT_1 = 0x0F,
  22. GPIO_MODE_SPECIAL_FUNCTION_2 = 0x02,
  23. GPIO_MODE_SPECIAL_FUNCTION_3 = 0x03,
  24. GPIO_MODE_SPECIAL_FUNCTION_4 = 0x04,
  25. GPIO_MODE_SPECIAL_FUNCTION_5 = 0x05,
  26. GPIO_MODE_SPECIAL_FUNCTION_6 = 0x06,
  27. GPIO_MODE_SPECIAL_FUNCTION_7 = 0x07
  28. } EMBEDDED_GPIO_MODE;
  29. typedef enum {
  30. GPIO_PULL_NONE,
  31. GPIO_PULL_UP,
  32. GPIO_PULL_DOWN
  33. } EMBEDDED_GPIO_PULL;
  34. //
  35. // Function Prototypes
  36. //
  37. typedef
  38. EFI_STATUS
  39. (EFIAPI *EMBEDDED_GPIO_GET)(
  40. IN EMBEDDED_GPIO *This,
  41. IN EMBEDDED_GPIO_PIN Gpio,
  42. OUT UINTN *Value
  43. );
  44. /*++
  45. Routine Description:
  46. Gets the state of a GPIO pin
  47. Arguments:
  48. This - pointer to protocol
  49. Gpio - which pin to read
  50. Value - state of the pin
  51. Returns:
  52. EFI_SUCCESS - GPIO state returned in Value
  53. --*/
  54. typedef
  55. EFI_STATUS
  56. (EFIAPI *EMBEDDED_GPIO_SET)(
  57. IN EMBEDDED_GPIO *This,
  58. IN EMBEDDED_GPIO_PIN Gpio,
  59. IN EMBEDDED_GPIO_MODE Mode
  60. );
  61. /*++
  62. Routine Description:
  63. Sets the state of a GPIO pin
  64. Arguments:
  65. This - pointer to protocol
  66. Gpio - which pin to modify
  67. Mode - mode to set
  68. Returns:
  69. EFI_SUCCESS - GPIO set as requested
  70. --*/
  71. typedef
  72. EFI_STATUS
  73. (EFIAPI *EMBEDDED_GPIO_GET_MODE)(
  74. IN EMBEDDED_GPIO *This,
  75. IN EMBEDDED_GPIO_PIN Gpio,
  76. OUT EMBEDDED_GPIO_MODE *Mode
  77. );
  78. /*++
  79. Routine Description:
  80. Gets the mode (function) of a GPIO pin
  81. Arguments:
  82. This - pointer to protocol
  83. Gpio - which pin
  84. Mode - pointer to output mode value
  85. Returns:
  86. EFI_SUCCESS - mode value retrieved
  87. --*/
  88. typedef
  89. EFI_STATUS
  90. (EFIAPI *EMBEDDED_GPIO_SET_PULL)(
  91. IN EMBEDDED_GPIO *This,
  92. IN EMBEDDED_GPIO_PIN Gpio,
  93. IN EMBEDDED_GPIO_PULL Direction
  94. );
  95. /*++
  96. Routine Description:
  97. Sets the pull-up / pull-down resistor of a GPIO pin
  98. Arguments:
  99. This - pointer to protocol
  100. Gpio - which pin
  101. Direction - pull-up, pull-down, or none
  102. Returns:
  103. EFI_SUCCESS - pin was set
  104. --*/
  105. struct _EMBEDDED_GPIO {
  106. EMBEDDED_GPIO_GET Get;
  107. EMBEDDED_GPIO_SET Set;
  108. EMBEDDED_GPIO_GET_MODE GetMode;
  109. EMBEDDED_GPIO_SET_PULL SetPull;
  110. };
  111. extern EFI_GUID gEmbeddedGpioProtocolGuid;
  112. typedef struct _GPIO_CONTROLLER GPIO_CONTROLLER;
  113. typedef struct _PLATFORM_GPIO_CONTROLLER PLATFORM_GPIO_CONTROLLER;
  114. struct _GPIO_CONTROLLER {
  115. UINTN RegisterBase;
  116. UINTN GpioIndex;
  117. UINTN InternalGpioCount;
  118. };
  119. struct _PLATFORM_GPIO_CONTROLLER {
  120. UINTN GpioCount;
  121. UINTN GpioControllerCount;
  122. GPIO_CONTROLLER *GpioController;
  123. };
  124. extern EFI_GUID gPlatformGpioProtocolGuid;
  125. #endif