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