1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
/** @file
Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
Copyright (c) 2017, Linaro, Ltd. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef __EMBEDDED_GPIO_PPI_H__
#define __EMBEDDED_GPIO_PPI_H__
//
// Protocol interface structure
//
typedef struct _EMBEDDED_GPIO_PPI EMBEDDED_GPIO_PPI;
//
// 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
//
/**
Gets the state of a GPIO pin
@param This Pointer to protocol
@param Gpio Which pin to read
@param Value State of the pin
@retval EFI_SUCCESS GPIO state returned in Value
@retval EFI_INVALID_PARAMETER Value is NULL
@retval EFI_NOT_FOUND Pin does not exit
**/
typedef
EFI_STATUS
(EFIAPI *EMBEDDED_GPIO_GET)(
IN EMBEDDED_GPIO_PPI *This,
IN EMBEDDED_GPIO_PIN Gpio,
OUT UINTN *Value
);
/**
Sets the state of a GPIO pin
@param This Pointer to protocol
@param Gpio Which pin to modify
@param Mode Mode to set
@retval EFI_SUCCESS GPIO set as requested
@retval EFI_INVALID_PARAMETER Invalid mode
@retval EFI_NOT_FOUND Pin does not exit
**/
typedef
EFI_STATUS
(EFIAPI *EMBEDDED_GPIO_SET)(
IN EMBEDDED_GPIO_PPI *This,
IN EMBEDDED_GPIO_PIN Gpio,
IN EMBEDDED_GPIO_MODE Mode
);
/**
Gets the mode (function) of a GPIO pin
@param This Pointer to protocol
@param Gpio Which pin
@param Mode Pointer to output mode value
@retval EFI_SUCCESS Mode value retrieved
@retval EFI_INVALID_PARAMETER Mode is NULL
@retval EFI_NOT_FOUND Pin does not exit
**/
typedef
EFI_STATUS
(EFIAPI *EMBEDDED_GPIO_GET_MODE)(
IN EMBEDDED_GPIO_PPI *This,
IN EMBEDDED_GPIO_PIN Gpio,
OUT EMBEDDED_GPIO_MODE *Mode
);
/**
Sets the pull-up / pull-down resistor of a GPIO pin
@param This Pointer to PPI
@param Gpio Port/pin index
@param Pull The pullup/pulldown mode to set
@retval EFI_SUCCESS Mode was set
@retval EFI_NOT_FOUND Pin does not exist
@retval EFI_UNSUPPORTED Action not supported
**/
typedef
EFI_STATUS
(EFIAPI *EMBEDDED_GPIO_SET_PULL)(
IN EMBEDDED_GPIO_PPI *This,
IN EMBEDDED_GPIO_PIN Gpio,
IN EMBEDDED_GPIO_PULL Direction
);
struct _EMBEDDED_GPIO_PPI {
EMBEDDED_GPIO_GET Get;
EMBEDDED_GPIO_SET Set;
EMBEDDED_GPIO_GET_MODE GetMode;
EMBEDDED_GPIO_SET_PULL SetPull;
};
extern EFI_GUID gEmbeddedGpioPpiGuid;
#endif
|