Home | History | Annotate | Download | only in Protocol
      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