1 /** @file
2  *
3  *  Copyright (c) 2019, ARM Limited. All rights reserved.
4  *  Copyright (c) 2017 - 2020, Andrei Warkentin <andrey.warkentin@gmail.com>
5  *  Copyright (c) 2016, Linaro Limited. All rights reserved.
6  *
7  *  SPDX-License-Identifier: BSD-2-Clause-Patent
8  *
9  **/
10 
11 #ifndef __RASPBERRY_PI_FIRMWARE_PROTOCOL_H__
12 #define __RASPBERRY_PI_FIRMWARE_PROTOCOL_H__
13 
14 #define RASPBERRY_PI_FIRMWARE_PROTOL_GUID \
15   { 0x0ACA9535, 0x7AD0, 0x4286, { 0xB0, 0x2E, 0x87, 0xFA, 0x7E, 0x2A, 0x57, 0x11 } }
16 
17 typedef
18 EFI_STATUS
19 (EFIAPI *SET_POWER_STATE) (
20   IN  UINT32    DeviceId,
21   IN  BOOLEAN   PowerState,
22   IN  BOOLEAN   Wait
23   );
24 
25 typedef
26 EFI_STATUS
27 (EFIAPI *GET_MAC_ADDRESS) (
28   OUT UINT8     MacAddress[6]
29   );
30 
31 typedef
32 EFI_STATUS
33 (EFIAPI *GET_COMMAND_LINE) (
34   IN  UINTN     BufferSize,
35   OUT CHAR8     CommandLine[]
36   );
37 
38 typedef
39 EFI_STATUS
40 (EFIAPI *GET_CLOCK_STATE) (
41   IN  UINT32    ClockId,
42   OUT UINT32    *ClockState
43   );
44 
45 typedef
46 EFI_STATUS
47 (EFIAPI *SET_CLOCK_STATE) (
48   IN  UINT32 ClockId,
49   IN  UINT32 ClockState
50   );
51 
52 typedef
53 EFI_STATUS
54 (EFIAPI *GET_CLOCK_RATE) (
55   IN  UINT32    ClockId,
56   OUT UINT32    *ClockRate
57   );
58 
59 typedef
60 EFI_STATUS
61 (EFIAPI *SET_CLOCK_RATE) (
62   IN  UINT32    ClockId,
63   OUT UINT32    ClockRate,
64   IN  BOOLEAN   SkipTurbo
65   );
66 
67 typedef
68 EFI_STATUS
69 (EFIAPI *GET_FB) (
70   IN  UINT32 Width,
71   IN  UINT32 Height,
72   IN  UINT32 Depth,
73   OUT EFI_PHYSICAL_ADDRESS *FbBase,
74   OUT UINTN *FbSize,
75   OUT UINTN *Pitch
76   );
77 
78 typedef
79 EFI_STATUS
80 (EFIAPI *GET_FB_SIZE) (
81   OUT   UINT32 *Width,
82   OUT   UINT32 *Height
83   );
84 
85 typedef
86 EFI_STATUS
87 (EFIAPI *FREE_FB) (
88   VOID
89   );
90 
91 typedef
92 VOID
93 (EFIAPI *SET_LED) (
94   BOOLEAN On
95   );
96 
97 typedef
98 EFI_STATUS
99 (EFIAPI *GET_SERIAL) (
100   UINT64 *Serial
101   );
102 
103 typedef
104 EFI_STATUS
105 (EFIAPI *GET_MODEL) (
106   UINT32 *Model
107   );
108 
109 typedef
110 EFI_STATUS
111 (EFIAPI *GET_MODEL_REVISION) (
112   UINT32 *Revision
113   );
114 
115 typedef
116 CHAR8*
117 (EFIAPI *GET_MODEL_NAME) (
118   INTN ModelId
119   );
120 
121 typedef
122 EFI_STATUS
123 (EFIAPI *GET_MODEL_FAMILY) (
124   UINT32 *ModelFamily
125   );
126 
127 typedef
128 EFI_STATUS
129 (EFIAPI *GET_FIRMWARE_REVISION) (
130   UINT32 *Revision
131   );
132 
133 typedef
134 EFI_STATUS
135 (EFIAPI *GET_MODEL_INSTALLED_MB) (
136   UINT32 *InstalledMB
137   );
138 
139 typedef
140 CHAR8*
141 (EFIAPI *GET_MANUFACTURER_NAME) (
142   INTN ManufacturerId
143   );
144 
145 typedef
146 CHAR8*
147 (EFIAPI *GET_CPU_NAME) (
148   INTN CpuId
149   );
150 
151 typedef
152 EFI_STATUS
153 (EFIAPI *GET_ARM_MEM) (
154   UINT32 *Base,
155   UINT32 *Size
156   );
157 
158 typedef
159 EFI_STATUS
160 (EFIAPI *NOTIFY_XHCI_RESET) (
161   UINTN BusNumber,
162   UINTN DeviceNumber,
163   UINTN FunctionNumber
164   );
165 
166 typedef
167 EFI_STATUS
168 (EFIAPI *GPIO_SET_CFG) (
169   UINTN Gpio,
170   UINTN Direction,
171   UINTN State
172   );
173 
174 typedef struct {
175   SET_POWER_STATE        SetPowerState;
176   GET_MAC_ADDRESS        GetMacAddress;
177   GET_COMMAND_LINE       GetCommandLine;
178   GET_CLOCK_RATE         GetClockRate;
179   GET_CLOCK_RATE         GetMaxClockRate;
180   GET_CLOCK_RATE         GetMinClockRate;
181   SET_CLOCK_RATE         SetClockRate;
182   GET_FB                 GetFB;
183   FREE_FB                FreeFB;
184   GET_FB_SIZE            GetFBSize;
185   SET_LED                SetLed;
186   GET_SERIAL             GetSerial;
187   GET_MODEL              GetModel;
188   GET_MODEL_REVISION     GetModelRevision;
189   GET_MODEL_NAME         GetModelName;
190   GET_MODEL_FAMILY       GetModelFamily;
191   GET_FIRMWARE_REVISION  GetFirmwareRevision;
192   GET_MANUFACTURER_NAME  GetManufacturerName;
193   GET_CPU_NAME           GetCpuName;
194   GET_ARM_MEM            GetArmMem;
195   GET_MODEL_INSTALLED_MB GetModelInstalledMB;
196   NOTIFY_XHCI_RESET      NotifyXhciReset;
197   GET_CLOCK_STATE        GetClockState;
198   SET_CLOCK_STATE        SetClockState;
199   GPIO_SET_CFG           SetGpioConfig;
200 } RASPBERRY_PI_FIRMWARE_PROTOCOL;
201 
202 extern EFI_GUID gRaspberryPiFirmwareProtocolGuid;
203 
204 #endif /* __RASPBERRY_PI_FIRMWARE_PROTOCOL_H__ */
205