1 /** @file 2 PlatformHelperLib function prototype definitions. 3 4 Copyright (c) 2013 Intel Corporation. 5 6 This program and the accompanying materials 7 are licensed and made available under the terms and conditions of the BSD License 8 which accompanies this distribution. The full text of the license may be found at 9 http://opensource.org/licenses/bsd-license.php 10 11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13 14 **/ 15 16 #ifndef __PLATFORM_HELPER_LIB_H__ 17 #define __PLATFORM_HELPER_LIB_H__ 18 19 #include "Platform.h" 20 21 // 22 // Function prototypes for routines exported by this library. 23 // 24 25 /** 26 Find pointer to RAW data in Firmware volume file. 27 28 @param FvNameGuid Firmware volume to search. If == NULL search all. 29 @param FileNameGuid Firmware volume file to search for. 30 @param SectionData Pointer to RAW data section of found file. 31 @param SectionDataSize Pointer to UNITN to get size of RAW data. 32 33 @retval EFI_SUCCESS Raw Data found. 34 @retval EFI_INVALID_PARAMETER FileNameGuid == NULL. 35 @retval EFI_NOT_FOUND Firmware volume file not found. 36 @retval EFI_UNSUPPORTED Unsupported in current enviroment (PEI or DXE). 37 38 **/ 39 EFI_STATUS 40 EFIAPI 41 PlatformFindFvFileRawDataSection ( 42 IN CONST EFI_GUID *FvNameGuid OPTIONAL, 43 IN CONST EFI_GUID *FileNameGuid, 44 OUT VOID **SectionData, 45 OUT UINTN *SectionDataSize 46 ); 47 48 /** 49 Read 8bit character from debug stream. 50 51 Block until character is read. 52 53 @return 8bit character read from debug stream. 54 55 **/ 56 CHAR8 57 EFIAPI 58 PlatformDebugPortGetChar8 ( 59 VOID 60 ); 61 62 /** 63 Find free spi protect register and write to it to protect a flash region. 64 65 @param DirectValue Value to directly write to register. 66 if DirectValue == 0 the use Base & Length below. 67 @param BaseAddress Base address of region in Flash Memory Map. 68 @param Length Length of region to protect. 69 70 @retval EFI_SUCCESS Free spi protect register found & written. 71 @retval EFI_NOT_FOUND Free Spi protect register not found. 72 @retval EFI_DEVICE_ERROR Unable to write to spi protect register. 73 74 **/ 75 EFI_STATUS 76 EFIAPI 77 PlatformWriteFirstFreeSpiProtect ( 78 IN CONST UINT32 DirectValue, 79 IN CONST UINT32 BaseAddress, 80 IN CONST UINT32 Length 81 ); 82 83 /** 84 Lock legacy SPI static configuration information. 85 86 Function will assert if unable to lock config. 87 88 **/ 89 VOID 90 EFIAPI 91 PlatformFlashLockConfig ( 92 VOID 93 ); 94 95 /** 96 Lock regions and config of SPI flash given the policy for this platform. 97 98 Function will assert if unable to lock regions or config. 99 100 @param PreBootPolicy If TRUE do Pre Boot Flash Lock Policy. 101 102 **/ 103 VOID 104 EFIAPI 105 PlatformFlashLockPolicy ( 106 IN CONST BOOLEAN PreBootPolicy 107 ); 108 109 /** 110 Erase and Write to platform flash. 111 112 Routine accesses one flash block at a time, each access consists 113 of an erase followed by a write of FLASH_BLOCK_SIZE. One or both 114 of DoErase & DoWrite params must be TRUE. 115 116 Limitations:- 117 CpuWriteAddress must be aligned to FLASH_BLOCK_SIZE. 118 DataSize must be a multiple of FLASH_BLOCK_SIZE. 119 120 @param Smst If != NULL then InSmm and use to locate 121 SpiProtocol. 122 @param CpuWriteAddress Address in CPU memory map of flash region. 123 @param Data The buffer containing the data to be written. 124 @param DataSize Amount of data to write. 125 @param DoErase Earse each block. 126 @param DoWrite Write to each block. 127 128 @retval EFI_SUCCESS Operation successful. 129 @retval EFI_NOT_READY Required resources not setup. 130 @retval EFI_INVALID_PARAMETER Invalid parameter. 131 @retval Others Unexpected error happened. 132 133 **/ 134 EFI_STATUS 135 EFIAPI 136 PlatformFlashEraseWrite ( 137 IN VOID *Smst, 138 IN UINTN CpuWriteAddress, 139 IN UINT8 *Data, 140 IN UINTN DataSize, 141 IN BOOLEAN DoErase, 142 IN BOOLEAN DoWrite 143 ); 144 145 /** Check if System booted with recovery Boot Stage1 image. 146 147 @retval TRUE If system booted with recovery Boot Stage1 image. 148 @retval FALSE If system booted with normal stage1 image. 149 150 **/ 151 BOOLEAN 152 EFIAPI 153 PlatformIsBootWithRecoveryStage1 ( 154 VOID 155 ); 156 157 /** 158 Clear SPI Protect registers. 159 160 @retval EFI_SUCESS SPI protect registers cleared. 161 @retval EFI_ACCESS_DENIED Unable to clear SPI protect registers. 162 **/ 163 164 EFI_STATUS 165 EFIAPI 166 PlatformClearSpiProtect ( 167 VOID 168 ); 169 170 /** 171 Determine if an SPI address range is protected. 172 173 @param SpiBaseAddress Base of SPI range. 174 @param Length Length of SPI range. 175 176 @retval TRUE Range is protected. 177 @retval FALSE Range is not protected. 178 **/ 179 BOOLEAN 180 EFIAPI 181 PlatformIsSpiRangeProtected ( 182 IN CONST UINT32 SpiBaseAddress, 183 IN CONST UINT32 Length 184 ); 185 186 /** 187 Set Legacy GPIO Level 188 189 @param LevelRegOffset GPIO level register Offset from GPIO Base Address. 190 @param GpioNum GPIO bit to change. 191 @param HighLevel If TRUE set GPIO High else Set GPIO low. 192 193 **/ 194 VOID 195 EFIAPI 196 PlatformLegacyGpioSetLevel ( 197 IN CONST UINT32 LevelRegOffset, 198 IN CONST UINT32 GpioNum, 199 IN CONST BOOLEAN HighLevel 200 ); 201 202 /** 203 Get Legacy GPIO Level 204 205 @param LevelRegOffset GPIO level register Offset from GPIO Base Address. 206 @param GpioNum GPIO bit to check. 207 208 @retval TRUE If bit is SET. 209 @retval FALSE If bit is CLEAR. 210 211 **/ 212 BOOLEAN 213 EFIAPI 214 PlatformLegacyGpioGetLevel ( 215 IN CONST UINT32 LevelRegOffset, 216 IN CONST UINT32 GpioNum 217 ); 218 219 /** 220 Set the direction of Pcal9555 IO Expander GPIO pin. 221 222 @param Pcal9555SlaveAddr I2c Slave address of Pcal9555 Io Expander. 223 @param GpioNum Gpio direction to configure - values 0-7 for Port0 224 and 8-15 for Port1. 225 @param CfgAsInput If TRUE set pin direction as input else set as output. 226 227 **/ 228 VOID 229 EFIAPI 230 PlatformPcal9555GpioSetDir ( 231 IN CONST UINT32 Pcal9555SlaveAddr, 232 IN CONST UINT32 GpioNum, 233 IN CONST BOOLEAN CfgAsInput 234 ); 235 236 /** 237 Set the level of Pcal9555 IO Expander GPIO high or low. 238 239 @param Pcal9555SlaveAddr I2c Slave address of Pcal9555 Io Expander. 240 @param GpioNum Gpio to change values 0-7 for Port0 and 8-15 241 for Port1. 242 @param HighLevel If TRUE set pin high else set pin low. 243 244 **/ 245 VOID 246 EFIAPI 247 PlatformPcal9555GpioSetLevel ( 248 IN CONST UINT32 Pcal9555SlaveAddr, 249 IN CONST UINT32 GpioNum, 250 IN CONST BOOLEAN HighLevel 251 ); 252 253 /** 254 255 Enable pull-up/pull-down resistors of Pcal9555 GPIOs. 256 257 @param Pcal9555SlaveAddr I2c Slave address of Pcal9555 Io Expander. 258 @param GpioNum Gpio to change values 0-7 for Port0 and 8-15 259 for Port1. 260 261 **/ 262 VOID 263 EFIAPI 264 PlatformPcal9555GpioEnablePull ( 265 IN CONST UINT32 Pcal9555SlaveAddr, 266 IN CONST UINT32 GpioNum 267 ); 268 269 /** 270 271 Disable pull-up/pull-down resistors of Pcal9555 GPIOs. 272 273 @param Pcal9555SlaveAddr I2c Slave address of Pcal9555 Io Expander. 274 @param GpioNum Gpio to change values 0-7 for Port0 and 8-15 275 for Port1. 276 277 **/ 278 VOID 279 EFIAPI 280 PlatformPcal9555GpioDisablePull ( 281 IN CONST UINT32 Pcal9555SlaveAddr, 282 IN CONST UINT32 GpioNum 283 ); 284 285 BOOLEAN 286 EFIAPI 287 PlatformPcal9555GpioGetState ( 288 IN CONST UINT32 Pcal9555SlaveAddr, 289 IN CONST UINT32 GpioNum 290 ); 291 292 /** 293 Init platform LEDs into known state. 294 295 @param PlatformType Executing platform type. 296 297 @retval EFI_SUCCESS Operation success. 298 299 **/ 300 EFI_STATUS 301 EFIAPI 302 PlatformLedInit ( 303 IN CONST EFI_PLATFORM_TYPE Type 304 ); 305 306 /** 307 Turn on or off platform flash update LED. 308 309 @param PlatformType Executing platform type. 310 @param TurnOn If TRUE turn on else turn off. 311 312 @retval EFI_SUCCESS Operation success. 313 314 **/ 315 EFI_STATUS 316 EFIAPI 317 PlatformFlashUpdateLed ( 318 IN CONST EFI_PLATFORM_TYPE Type, 319 IN CONST BOOLEAN TurnOn 320 ); 321 322 #endif // #ifndef __PLATFORM_HELPER_LIB_H__ 323