/** @file
HeciInit.h -- Header for HeciInit
Copyright (c) HR650X BIOS Decompilation Project
**/
#ifndef __HECIINIT_H__
#define __HECIINIT_H__
#include "../uefi_headers/Uefi.h"
//
// Function Prototypes
//
EFI_STATUS
EFIAPI
AsmReadIdtr(
VOID
);
EFI_STATUS
EFIAPI
HeciGetPcd32(
VOID
);
EFI_STATUS
EFIAPI
HeciGetPcdPtr(
VOID
);
EFI_STATUS
EFIAPI
HeciCompareGuid(
VOID
);
EFI_STATUS
EFIAPI
IoRead16(
VOID
);
EFI_STATUS
EFIAPI
IoWrite16(
VOID
);
EFI_STATUS
EFIAPI
IoRead32(
VOID
);
EFI_STATUS
EFIAPI
MemoryRead16(
VOID
);
EFI_STATUS
EFIAPI
HeciReadVendorId(
VOID
);
EFI_STATUS
EFIAPI
PciExpressRead8(
VOID
);
EFI_STATUS
EFIAPI
HeciPciRead32(
VOID
);
EFI_STATUS
EFIAPI
HeciMicrosecondDelay(
VOID
);
EFI_STATUS
EFIAPI
HeciGetMbar(
VOID
);
EFI_STATUS
EFIAPI
HeciGetMbarEx(
VOID
);
EFI_STATUS
EFIAPI
HeciReset(
VOID
);
EFI_STATUS
EFIAPI
HeciWaitMeReady(
VOID
);
EFI_STATUS
EFIAPI
HeciInitialize(
VOID
);
EFI_STATUS
EFIAPI
HeciIsBusy(
VOID
);
EFI_STATUS
EFIAPI
HeciReadMsg(
VOID
);
EFI_STATUS
EFIAPI
HeciReceive(
VOID
);
EFI_STATUS
EFIAPI
HeciWriteCircularBuf(
VOID
);
EFI_STATUS
EFIAPI
HeciSendCore(
VOID
);
EFI_STATUS
EFIAPI
HeciSend(
VOID
);
EFI_STATUS
EFIAPI
HeciSendwAck(
VOID
);
EFI_STATUS
EFIAPI
HeciGetMeStatus(
VOID
);
EFI_STATUS
EFIAPI
HeciGetMeMode(
VOID
);
EFI_STATUS
EFIAPI
Heci2GetNmStatus(
VOID
);
EFI_STATUS
EFIAPI
HeciIsDwrDetected(
VOID
);
EFI_STATUS
EFIAPI
HeciGetMeFs1FromHob(
VOID
);
EFI_STATUS
EFIAPI
HeciGetOnBoardMeType(
VOID
);
EFI_STATUS
EFIAPI
HeciLogMeType(
VOID
);
EFI_STATUS
EFIAPI
PchAcpiBaseGet(
VOID
);
EFI_STATUS
EFIAPI
PchPwrmBaseGet(
VOID
);
EFI_STATUS
EFIAPI
Heci2GetMbar(
VOID
);
EFI_STATUS
EFIAPI
Heci2Initialize(
VOID
);
EFI_STATUS
EFIAPI
HeciIsSimicsMode(
VOID
);
EFI_STATUS
EFIAPI
HeciReadBootMode(
VOID
);
EFI_STATUS
EFIAPI
HeciWriteBootMode(
VOID
);
EFI_STATUS
EFIAPI
HeciInitBootMode(
VOID
);
EFI_STATUS
EFIAPI
HeciPciRead8(
VOID
);
EFI_STATUS
EFIAPI
HeciPciCfgRead(
VOID
);
EFI_STATUS
EFIAPI
HeciPeimEntryPoint(
VOID
);
EFI_STATUS
EFIAPI
data used by the HECI PEIM(
VOID
);
EFI_STATUS
EFIAPI
UINT8 mImageGuid[]; // GUID at 0xFFD9FA54(
VOID
);
EFI_STATUS
EFIAPI
mode flag storage at 0xFFD9FA64(
VOID
);
EFI_STATUS
EFIAPI
base address(
VOID
);
EFI_STATUS
EFIAPI
and string utility functions(
VOID
);
EFI_STATUS
EFIAPI
copy (dest after src): copy backwards(
VOID
);
EFI_STATUS
EFIAPI
((UINT8 *)Source + Count - 1(
VOID
);
EFI_STATUS
EFIAPI
Services table access via IDT(
VOID
);
EFI_STATUS
EFIAPI
(Platform Configuration Database) access(
VOID
);
EFI_STATUS
EFIAPI
(Hand-Off Block) functions(
VOID
);
EFI_STATUS
EFIAPI
if (Hob == NULL) {(
VOID
);
EFI_STATUS
EFIAPI
Express config read(
VOID
);
EFI_STATUS
EFIAPI
delay via MBAR polling(
VOID
);
EFI_STATUS
EFIAPI
microseconds to ticks at 3.579545 MHz(
VOID
);
EFI_STATUS
EFIAPI
= 3579545 * us / 1000000(
VOID
);
EFI_STATUS
EFIAPI
= (UINT64)3579545 * Microseconds;(
VOID
);
EFI_STATUS
EFIAPI
get MBAR (HECI-1)(
VOID
);
EFI_STATUS
EFIAPI
memory space and bus master in PCI config if not already set(
VOID
);
EFI_STATUS
EFIAPI
((*((UINT8 *)HeciPciRead32 (0, HECI_PCI_CMD_REG_OFFSET) + 4) & 6) != 6) {(
VOID
);
EFI_STATUS
EFIAPI
reset(
VOID
);
EFI_STATUS
EFIAPI
ME state - don't reset in certain error states(
VOID
);
EFI_STATUS
EFIAPI
= *((UINT32 *)HeciPciRead32 (0, HECI_PCI_ME_FS_OFFSET) + 64);(
VOID
);
EFI_STATUS
EFIAPI
(HIWORD(MeFs1) & 0x0F) == 2 || // SPS w/Debug(
VOID
);
EFI_STATUS
EFIAPI
DEBUG ((EFI_D_ERROR, "[HECI] Wrong ME state, can't execute reset ME FS 0x%x\n", MeFs1));(
VOID
);
EFI_STATUS
EFIAPI
host reset bits (HRA | ER) if not already set(
VOID
);
EFI_STATUS
EFIAPI
((HostCsr & HECI_CSR_ER) == 0) {(
VOID
);
EFI_STATUS
EFIAPI
for host-side reset to complete (RDY cleared)(
VOID
);
EFI_STATUS
EFIAPI
= 25000;(
VOID
);
EFI_STATUS
EFIAPI
for ME-side reset ready (RDY set)(
VOID
);
EFI_STATUS
EFIAPI
wait for ME ready(
VOID
);
EFI_STATUS
EFIAPI
((Csr & 8) != 0) {(
VOID
);
EFI_STATUS
EFIAPI
((Csr & 0x10) != 0) {(
VOID
);
EFI_STATUS
EFIAPI
if device is present(
VOID
);
EFI_STATUS
EFIAPI
= MemoryRead16 ((UINT16 *)HeciPciRead32 (0, 0));(
VOID
);
EFI_STATUS
EFIAPI
MBAR(
VOID
);
EFI_STATUS
EFIAPI
= HeciGetMbarEx (0);(
VOID
);
EFI_STATUS
EFIAPI
HIDM boot mode (Boot Type = 0, Boot Target = 0, Mode = SCI)(
VOID
);
EFI_STATUS
EFIAPI
bus master + memory space(
VOID
);
EFI_STATUS
EFIAPI
ME state(
VOID
);
EFI_STATUS
EFIAPI
mode - initialization will be handled later(
VOID
);
EFI_STATUS
EFIAPI
HeciWaitMeReady ();(
VOID
);
EFI_STATUS
EFIAPI
for ME interface ready(
VOID
);
EFI_STATUS
EFIAPI
(HeciWaitMeReady ()) {(
VOID
);
EFI_STATUS
EFIAPI
host CSR: set IG + RP + HRA(
VOID
);
EFI_STATUS
EFIAPI
= *(volatile UINT32 *)(Mbar + 4);(
VOID
);
EFI_STATUS
EFIAPI
check interface busy(
VOID
);
EFI_STATUS
EFIAPI
message read from circular buffer(
VOID
);
EFI_STATUS
EFIAPI
if buffer is empty (write pointer == read pointer)(
VOID
);
EFI_STATUS
EFIAPI
((UINT8)HIWORD (Regs->MeData) == BYTE1 (Regs->MeData)) {(
VOID
);
EFI_STATUS
EFIAPI
for empty buffer in blocking case(
VOID
);
EFI_STATUS
EFIAPI
((UINT8)BYTE2 (Regs->MeData) == BYTE1 (Regs->MeData) && !MsgHeader) {(
VOID
);
EFI_STATUS
EFIAPI
message header(
VOID
);
EFI_STATUS
EFIAPI
= 1000;(
VOID
);
EFI_STATUS
EFIAPI
for enough slots to be available(
VOID
);
EFI_STATUS
EFIAPI
(Timeout = 1000; SlotCount > (UINT8)(HIWORD (Regs->MeData) - BYTE1 (Regs->MeData)); ) {(
VOID
);
EFI_STATUS
EFIAPI
the message data(
VOID
);
EFI_STATUS
EFIAPI
(i = 0; i < SlotCount; i++) {(
VOID
);
EFI_STATUS
EFIAPI
HRA(
VOID
);
EFI_STATUS
EFIAPI
message receive(
VOID
);
EFI_STATUS
EFIAPI
message send core(
VOID
);
EFI_STATUS
EFIAPI
the message header and data(
VOID
);
EFI_STATUS
EFIAPI
if ME-side ready for data(
VOID
);
EFI_STATUS
EFIAPI
((Regs->MeData & 8) != 0) {(
VOID
);
EFI_STATUS
EFIAPI
ready - reset and retry(
VOID
);
EFI_STATUS
EFIAPI
(HeciReset (0)) {(
VOID
);
EFI_STATUS
EFIAPI
send message(
VOID
);
EFI_STATUS
EFIAPI
send with acknowledgement(
VOID
);
EFI_STATUS
EFIAPI
if circular buffer is empty (write ptr == read ptr)(
VOID
);
EFI_STATUS
EFIAPI
((UINT8)BYTE2 (*(volatile UINT32 *)(Mbar + 12)) == BYTE1 (*(volatile UINT32 *)(Mbar + 12))) {(
VOID
);
EFI_STATUS
EFIAPI
status / mode detection(
VOID
);
EFI_STATUS
EFIAPI
*MeStatus = ME_STATUS_NORMAL;(
VOID
);
EFI_STATUS
EFIAPI
*MeStatus = ME_STATUS_SECBOOT;(
VOID
);
EFI_STATUS
EFIAPI
if ((MeFs1 & 0xF000) == 0) {(
VOID
);
EFI_STATUS
EFIAPI
*MeStatus = ME_STATUS_DFX;(
VOID
);
EFI_STATUS
EFIAPI
*MeStatus = ME_STATUS_DISABLED;(
VOID
);
EFI_STATUS
EFIAPI
*MeStatus = ME_STATUS_ERROR;(
VOID
);
EFI_STATUS
EFIAPI
(Disable Warm Reset) detection(
VOID
);
EFI_STATUS
EFIAPI
type detection(
VOID
);
EFI_STATUS
EFIAPI
not found or Group[0].FunNumber == 0(
VOID
);
EFI_STATUS
EFIAPI
(FwHob != NULL) {(
VOID
);
EFI_STATUS
EFIAPI
DWR first(
VOID
);
EFI_STATUS
EFIAPI
(HeciIsDwrDetected ()) {(
VOID
);
EFI_STATUS
EFIAPI
MEFS1 from the HECI device config(
VOID
);
EFI_STATUS
EFIAPI
= *((UINT32 *)HeciPciRead32 (22, 0) + 64);(
VOID
);
EFI_STATUS
EFIAPI
available - fall back to HOB(
VOID
);
EFI_STATUS
EFIAPI
= HeciGetMeFs1FromHob ();(
VOID
);
EFI_STATUS
EFIAPI
ME type(
VOID
);
EFI_STATUS
EFIAPI
((MeFs1 & 0x0F) != 0x0F) {(
VOID
);
EFI_STATUS
EFIAPI
mode(
VOID
);
EFI_STATUS
EFIAPI
ME_TYPE_DISABLED;(
VOID
);
EFI_STATUS
EFIAPI
type(
VOID
);
EFI_STATUS
EFIAPI
((EFI_D_ERROR, "HECI: ME type not recognized (MEFS1: 0x%08X)\n", MeFs1));(
VOID
);
EFI_STATUS
EFIAPI
ACPI base get(
VOID
);
EFI_STATUS
EFIAPI
HIDM(
VOID
);
EFI_STATUS
EFIAPI
space enable(
VOID
);
EFI_STATUS
EFIAPI
+ Mem(
VOID
);
EFI_STATUS
EFIAPI
host CSR(
VOID
);
EFI_STATUS
EFIAPI
mode detection(
VOID
);
EFI_STATUS
EFIAPI
RTC index 0x4A to check for SIMICS(
VOID
);
EFI_STATUS
EFIAPI
= __inbyte (0x70);(
VOID
);
EFI_STATUS
EFIAPI
check through memory-based detection(
VOID
);
EFI_STATUS
EFIAPI
= (*(volatile UINT8 *)0xFDAF0490 & 2) | 1;(
VOID
);
EFI_STATUS
EFIAPI
Mode read/write(
VOID
);
EFI_STATUS
EFIAPI
Express config read (byte)(
VOID
);
EFI_STATUS
EFIAPI
Entry Point(
VOID
);
EFI_STATUS
EFIAPI
boot mode tracking(
VOID
);
EFI_STATUS
EFIAPI
();(
VOID
);
EFI_STATUS
EFIAPI
for DWR (Disable Warm Reset)(
VOID
);
EFI_STATUS
EFIAPI
ME type for the current platform(
VOID
);
EFI_STATUS
EFIAPI
= HeciGetOnBoardMeType ();(
VOID
);
EFI_STATUS
EFIAPI
HECI-1 interface(
VOID
);
EFI_STATUS
EFIAPI
(0, HECI_PCI_CMD_REG_OFFSET) + 20 = 0;(
VOID
);
#endif /* __HECIINIT_H__ */