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