| /** @file | |
| Library that provides QNC specific library services in PEI phase | |
| Copyright (c) 2013-2015 Intel Corporation. | |
| This program and the accompanying materials | |
| are licensed and made available under the terms and conditions of the BSD License | |
| which accompanies this distribution. The full text of the license may be found at | |
| http://opensource.org/licenses/bsd-license.php | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
| **/ | |
| #ifndef __INTEL_QNC_LIB_H__ | |
| #define __INTEL_QNC_LIB_H__ | |
| /** | |
| This function initializes the QNC register before MRC. | |
| It sets RCBA, PMBASE, disable Watchdog timer and initialize QNC GPIO. | |
| If the function cannot complete it'll ASSERT(). | |
| **/ | |
| VOID | |
| EFIAPI | |
| PeiQNCPreMemInit ( | |
| VOID | |
| ); | |
| /** | |
| Used to check SCH if it's S3 state. Clear the register state after query. | |
| @retval TRUE if it's S3 state. | |
| @retval FALSE if it's not S3 state. | |
| **/ | |
| BOOLEAN | |
| EFIAPI | |
| QNCCheckS3AndClearState ( | |
| VOID | |
| ); | |
| /** | |
| Used to check SCH if system wakes up from power on reset. Clear the register state after query. | |
| @retval TRUE if system wakes up from power on reset | |
| @retval FALSE if system does not wake up from power on reset | |
| **/ | |
| BOOLEAN | |
| EFIAPI | |
| QNCCheckPowerOnResetAndClearState ( | |
| VOID | |
| ); | |
| /** | |
| This function is used to clear SMI and wake status. | |
| **/ | |
| VOID | |
| EFIAPI | |
| QNCClearSmiAndWake ( | |
| VOID | |
| ); | |
| /** | |
| Used to initialize the QNC register after MRC. | |
| **/ | |
| VOID | |
| EFIAPI | |
| PeiQNCPostMemInit ( | |
| VOID | |
| ); | |
| /** Send DRAM Ready opcode. | |
| @param[in] OpcodeParam Parameter to DRAM ready opcode. | |
| @retval VOID | |
| **/ | |
| VOID | |
| EFIAPI | |
| QNCSendOpcodeDramReady ( | |
| IN UINT32 OpcodeParam | |
| ); | |
| /** | |
| Relocate RMU Main binary to memory after MRC to improve performance. | |
| @param[in] DestBaseAddress - Specify the new memory address for the RMU Main binary. | |
| @param[in] SrcBaseAddress - Specify the current memory address for the RMU Main binary. | |
| @param[in] Size - Specify size of the RMU Main binary. | |
| @retval VOID | |
| **/ | |
| VOID | |
| EFIAPI | |
| RmuMainRelocation ( | |
| IN CONST UINT32 DestBaseAddress, | |
| IN CONST UINT32 SrcBaseAddress, | |
| IN CONST UINTN Size | |
| ); | |
| /** | |
| Get the total memory size | |
| **/ | |
| UINT32 | |
| EFIAPI | |
| QNCGetTotalMemorysize ( | |
| VOID | |
| ); | |
| /** | |
| Get the memory range of TSEG. | |
| The TSEG's memory is below TOLM. | |
| @param[out] BaseAddress The base address of TSEG's memory range | |
| @param[out] MemorySize The size of TSEG's memory range | |
| **/ | |
| VOID | |
| EFIAPI | |
| QNCGetTSEGMemoryRange ( | |
| OUT UINT64 *BaseAddress, | |
| OUT UINT64 *MemorySize | |
| ); | |
| /** | |
| Updates the PAM registers in the MCH for the requested range and mode. | |
| @param Start The start address of the memory region | |
| @param Length The length, in bytes, of the memory region | |
| @param ReadEnable Pointer to the boolean variable on whether to enable read for legacy memory section. | |
| If NULL, then read attribute will not be touched by this call. | |
| @param ReadEnable Pointer to the boolean variable on whether to enable write for legacy memory section. | |
| If NULL, then write attribute will not be touched by this call. | |
| @param Granularity A pointer to granularity, in bytes, that the PAM registers support | |
| @retval RETURN_SUCCESS The PAM registers in the MCH were updated | |
| @retval RETURN_INVALID_PARAMETER The memory range is not valid in legacy region. | |
| **/ | |
| RETURN_STATUS | |
| EFIAPI | |
| QNCLegacyRegionManipulation ( | |
| IN UINT32 Start, | |
| IN UINT32 Length, | |
| IN BOOLEAN *ReadEnable, | |
| IN BOOLEAN *WriteEnable, | |
| OUT UINT32 *Granularity | |
| ); | |
| /** | |
| Do early init of pci express rootports on Soc. | |
| **/ | |
| VOID | |
| EFIAPI | |
| PciExpressEarlyInit ( | |
| VOID | |
| ); | |
| /** | |
| Complete initialization of all the pci express rootports on Soc. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| PciExpressInit ( | |
| ); | |
| /** | |
| Determine if QNC is supported. | |
| @retval FALSE QNC is not supported. | |
| @retval TRUE QNC is supported. | |
| **/ | |
| BOOLEAN | |
| EFIAPI | |
| IsQncSupported ( | |
| VOID | |
| ); | |
| /** | |
| Get the DeviceId of the SoC | |
| @retval PCI DeviceId of the SoC | |
| **/ | |
| UINT16 | |
| EFIAPI | |
| QncGetSocDeviceId ( | |
| VOID | |
| ); | |
| /** | |
| Enable SMI detection of legacy flash access violations. | |
| **/ | |
| VOID | |
| EFIAPI | |
| QncEnableLegacyFlashAccessViolationSmi ( | |
| VOID | |
| ); | |
| /** | |
| Setup RMU Thermal sensor registers for Vref mode. | |
| **/ | |
| VOID | |
| EFIAPI | |
| QNCThermalSensorSetVRefMode ( | |
| VOID | |
| ); | |
| /** | |
| Setup RMU Thermal sensor registers for Ratiometric mode. | |
| **/ | |
| VOID | |
| EFIAPI | |
| QNCThermalSensorSetRatiometricMode ( | |
| VOID | |
| ); | |
| /** | |
| Setup RMU Thermal sensor trip point values. | |
| @param[in] CatastrophicTripOnDegreesCelsius - Catastrophic set trip point threshold. | |
| @param[in] HotTripOnDegreesCelsius - Hot set trip point threshold. | |
| @param[in] HotTripOffDegreesCelsius - Hot clear trip point threshold. | |
| @retval VOID | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| QNCThermalSensorSetTripValues ( | |
| IN CONST UINTN CatastrophicTripOnDegreesCelsius, | |
| IN CONST UINTN HotTripOnDegreesCelsius, | |
| IN CONST UINTN HotTripOffDegreesCelsius | |
| ); | |
| /** | |
| Enable RMU Thermal sensor with a Catastrophic Trip point. | |
| @retval EFI_SUCCESS Trip points setup. | |
| @retval EFI_INVALID_PARAMETER Invalid trip point value. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| QNCThermalSensorEnableWithCatastrophicTrip ( | |
| IN CONST UINTN CatastrophicTripOnDegreesCelsius | |
| ); | |
| /** | |
| Lock all RMU Thermal sensor control & trip point registers. | |
| **/ | |
| VOID | |
| EFIAPI | |
| QNCThermalSensorLockAllRegisters ( | |
| VOID | |
| ); | |
| /** | |
| Set chipset policy for double bit ECC error. | |
| @param[in] PolicyValue Policy to config on double bit ECC error. | |
| **/ | |
| VOID | |
| EFIAPI | |
| QNCPolicyDblEccBitErr ( | |
| IN CONST UINT32 PolicyValue | |
| ); | |
| /** | |
| Determine if running on secure Quark hardware Sku. | |
| @retval FALSE Base Quark Sku or unprovisioned Secure Sku running. | |
| @retval TRUE Provisioned SecureSku hardware running. | |
| **/ | |
| BOOLEAN | |
| EFIAPI | |
| QncIsSecureProvisionedSku ( | |
| VOID | |
| ); | |
| #endif | |