EmbeddedGpio.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. /** @file
  2. Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
  3. Copyright (c) 2017, Linaro, Ltd. All rights reserved.<BR>
  4. SPDX-License-Identifier: BSD-2-Clause-Patent
  5. **/
  6. #ifndef __EMBEDDED_GPIO_PPI_H__
  7. #define __EMBEDDED_GPIO_PPI_H__
  8. //
  9. // Protocol interface structure
  10. //
  11. typedef struct _EMBEDDED_GPIO_PPI EMBEDDED_GPIO_PPI;
  12. //
  13. // Data Types
  14. //
  15. typedef UINTN EMBEDDED_GPIO_PIN;
  16. #define GPIO(Port, Pin) ((EMBEDDED_GPIO_PIN)(((Port) << (16)) | (Pin)))
  17. #define GPIO_PIN(x) ((EMBEDDED_GPIO_PIN)(x) & (0xFFFF))
  18. #define GPIO_PORT(x) ((EMBEDDED_GPIO_PIN)(x) >> (16))
  19. typedef enum {
  20. GPIO_MODE_INPUT = 0x00,
  21. GPIO_MODE_OUTPUT_0 = 0x0E,
  22. GPIO_MODE_OUTPUT_1 = 0x0F,
  23. GPIO_MODE_SPECIAL_FUNCTION_2 = 0x02,
  24. GPIO_MODE_SPECIAL_FUNCTION_3 = 0x03,
  25. GPIO_MODE_SPECIAL_FUNCTION_4 = 0x04,
  26. GPIO_MODE_SPECIAL_FUNCTION_5 = 0x05,
  27. GPIO_MODE_SPECIAL_FUNCTION_6 = 0x06,
  28. GPIO_MODE_SPECIAL_FUNCTION_7 = 0x07
  29. } EMBEDDED_GPIO_MODE;
  30. typedef enum {
  31. GPIO_PULL_NONE,
  32. GPIO_PULL_UP,
  33. GPIO_PULL_DOWN
  34. } EMBEDDED_GPIO_PULL;
  35. //
  36. // Function Prototypes
  37. //
  38. /**
  39. Gets the state of a GPIO pin
  40. @param This Pointer to protocol
  41. @param Gpio Which pin to read
  42. @param Value State of the pin
  43. @retval EFI_SUCCESS GPIO state returned in Value
  44. @retval EFI_INVALID_PARAMETER Value is NULL
  45. @retval EFI_NOT_FOUND Pin does not exit
  46. **/
  47. typedef
  48. EFI_STATUS
  49. (EFIAPI *EMBEDDED_GPIO_GET)(
  50. IN EMBEDDED_GPIO_PPI *This,
  51. IN EMBEDDED_GPIO_PIN Gpio,
  52. OUT UINTN *Value
  53. );
  54. /**
  55. Sets the state of a GPIO pin
  56. @param This Pointer to protocol
  57. @param Gpio Which pin to modify
  58. @param Mode Mode to set
  59. @retval EFI_SUCCESS GPIO set as requested
  60. @retval EFI_INVALID_PARAMETER Invalid mode
  61. @retval EFI_NOT_FOUND Pin does not exit
  62. **/
  63. typedef
  64. EFI_STATUS
  65. (EFIAPI *EMBEDDED_GPIO_SET)(
  66. IN EMBEDDED_GPIO_PPI *This,
  67. IN EMBEDDED_GPIO_PIN Gpio,
  68. IN EMBEDDED_GPIO_MODE Mode
  69. );
  70. /**
  71. Gets the mode (function) of a GPIO pin
  72. @param This Pointer to protocol
  73. @param Gpio Which pin
  74. @param Mode Pointer to output mode value
  75. @retval EFI_SUCCESS Mode value retrieved
  76. @retval EFI_INVALID_PARAMETER Mode is NULL
  77. @retval EFI_NOT_FOUND Pin does not exit
  78. **/
  79. typedef
  80. EFI_STATUS
  81. (EFIAPI *EMBEDDED_GPIO_GET_MODE)(
  82. IN EMBEDDED_GPIO_PPI *This,
  83. IN EMBEDDED_GPIO_PIN Gpio,
  84. OUT EMBEDDED_GPIO_MODE *Mode
  85. );
  86. /**
  87. Sets the pull-up / pull-down resistor of a GPIO pin
  88. @param This Pointer to PPI
  89. @param Gpio Port/pin index
  90. @param Pull The pullup/pulldown mode to set
  91. @retval EFI_SUCCESS Mode was set
  92. @retval EFI_NOT_FOUND Pin does not exist
  93. @retval EFI_UNSUPPORTED Action not supported
  94. **/
  95. typedef
  96. EFI_STATUS
  97. (EFIAPI *EMBEDDED_GPIO_SET_PULL)(
  98. IN EMBEDDED_GPIO_PPI *This,
  99. IN EMBEDDED_GPIO_PIN Gpio,
  100. IN EMBEDDED_GPIO_PULL Direction
  101. );
  102. struct _EMBEDDED_GPIO_PPI {
  103. EMBEDDED_GPIO_GET Get;
  104. EMBEDDED_GPIO_SET Set;
  105. EMBEDDED_GPIO_GET_MODE GetMode;
  106. EMBEDDED_GPIO_SET_PULL SetPull;
  107. };
  108. extern EFI_GUID gEmbeddedGpioPpiGuid;
  109. #endif