| /** @file |
| |
| Copyright (c) 2008-2009 Apple Inc. All rights reserved.<BR> |
| |
| All rights reserved. This program and the accompanying materials |
| are licensed and made available under the terms and conditions of the BSD License |
| which accompanies this distribution. The full text of the license may be found at |
| http://opensource.org/licenses/bsd-license.php |
| |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. |
| |
| **/ |
| |
| #ifndef __EMBEDDED_GPIO_H__ |
| #define __EMBEDDED_GPIO_H__ |
| |
| // |
| // Protocol interface structure |
| // |
| typedef struct _EMBEDDED_GPIO EMBEDDED_GPIO; |
| |
| // |
| // Data Types |
| // |
| typedef UINTN EMBEDDED_GPIO_PIN; |
| |
| #define GPIO(Port, Pin) ((EMBEDDED_GPIO_PIN)(((Port) << (16)) | (Pin))) |
| #define GPIO_PIN(x) ((EMBEDDED_GPIO_PIN)(x) & (0xFFFF)) |
| #define GPIO_PORT(x) ((EMBEDDED_GPIO_PIN)(x) >> (16)) |
| |
| typedef enum { |
| GPIO_MODE_INPUT = 0x00, |
| GPIO_MODE_OUTPUT_0 = 0x0E, |
| GPIO_MODE_OUTPUT_1 = 0x0F, |
| GPIO_MODE_SPECIAL_FUNCTION_2 = 0x02, |
| GPIO_MODE_SPECIAL_FUNCTION_3 = 0x03, |
| GPIO_MODE_SPECIAL_FUNCTION_4 = 0x04, |
| GPIO_MODE_SPECIAL_FUNCTION_5 = 0x05, |
| GPIO_MODE_SPECIAL_FUNCTION_6 = 0x06, |
| GPIO_MODE_SPECIAL_FUNCTION_7 = 0x07 |
| } EMBEDDED_GPIO_MODE; |
| |
| typedef enum { |
| GPIO_PULL_NONE, |
| GPIO_PULL_UP, |
| GPIO_PULL_DOWN |
| } EMBEDDED_GPIO_PULL; |
| |
| // |
| // Function Prototypes |
| // |
| typedef |
| EFI_STATUS |
| (EFIAPI *EMBEDDED_GPIO_GET) ( |
| IN EMBEDDED_GPIO *This, |
| IN EMBEDDED_GPIO_PIN Gpio, |
| OUT UINTN *Value |
| ); |
| /*++ |
| |
| Routine Description: |
| |
| Gets the state of a GPIO pin |
| |
| Arguments: |
| |
| This - pointer to protocol |
| Gpio - which pin to read |
| Value - state of the pin |
| |
| Returns: |
| |
| EFI_SUCCESS - GPIO state returned in Value |
| |
| --*/ |
| |
| |
| typedef |
| EFI_STATUS |
| (EFIAPI *EMBEDDED_GPIO_SET) ( |
| IN EMBEDDED_GPIO *This, |
| IN EMBEDDED_GPIO_PIN Gpio, |
| IN EMBEDDED_GPIO_MODE Mode |
| ); |
| /*++ |
| |
| Routine Description: |
| |
| Sets the state of a GPIO pin |
| |
| Arguments: |
| |
| This - pointer to protocol |
| Gpio - which pin to modify |
| Mode - mode to set |
| |
| Returns: |
| |
| EFI_SUCCESS - GPIO set as requested |
| |
| --*/ |
| |
| |
| typedef |
| EFI_STATUS |
| (EFIAPI *EMBEDDED_GPIO_GET_MODE) ( |
| IN EMBEDDED_GPIO *This, |
| IN EMBEDDED_GPIO_PIN Gpio, |
| OUT EMBEDDED_GPIO_MODE *Mode |
| ); |
| /*++ |
| |
| Routine Description: |
| |
| Gets the mode (function) of a GPIO pin |
| |
| Arguments: |
| |
| This - pointer to protocol |
| Gpio - which pin |
| Mode - pointer to output mode value |
| |
| Returns: |
| |
| EFI_SUCCESS - mode value retrieved |
| |
| --*/ |
| |
| |
| typedef |
| EFI_STATUS |
| (EFIAPI *EMBEDDED_GPIO_SET_PULL) ( |
| IN EMBEDDED_GPIO *This, |
| IN EMBEDDED_GPIO_PIN Gpio, |
| IN EMBEDDED_GPIO_PULL Direction |
| ); |
| /*++ |
| |
| Routine Description: |
| |
| Sets the pull-up / pull-down resistor of a GPIO pin |
| |
| Arguments: |
| |
| This - pointer to protocol |
| Gpio - which pin |
| Direction - pull-up, pull-down, or none |
| |
| Returns: |
| |
| EFI_SUCCESS - pin was set |
| |
| --*/ |
| |
| |
| |
| struct _EMBEDDED_GPIO { |
| EMBEDDED_GPIO_GET Get; |
| EMBEDDED_GPIO_SET Set; |
| EMBEDDED_GPIO_GET_MODE GetMode; |
| EMBEDDED_GPIO_SET_PULL SetPull; |
| }; |
| |
| extern EFI_GUID gEmbeddedGpioProtocolGuid; |
| |
| #endif |