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