/** @file
SmartTimer.h -- Header for SmartTimer
Copyright (c) HR650X BIOS Decompilation Project
**/
#ifndef __SMARTTIMER_H__
#define __SMARTTIMER_H__
#include "../uefi_headers/Uefi.h"
//
// Function Prototypes
//
EFI_STATUS
EFIAPI
UefiBootServicesTableLibConstructor(
VOID
);
EFI_STATUS
EFIAPI
ModuleEntryPoint(
VOID
);
EFI_STATUS
EFIAPI
DebugPrintWithLevel(
VOID
);
EFI_STATUS
EFIAPI
DebugAssert(
VOID
);
EFI_STATUS
EFIAPI
ReadUnaligned64(
VOID
);
EFI_STATUS
EFIAPI
CompareGuid(
VOID
);
EFI_STATUS
EFIAPI
EfiGetSystemConfigurationTable(
VOID
);
EFI_STATUS
EFIAPI
MmioRead32(
VOID
);
EFI_STATUS
EFIAPI
MmioRead166(
VOID
);
EFI_STATUS
EFIAPI
MmPciBaseReadWrite(
VOID
);
EFI_STATUS
EFIAPI
ReadAcpiTimer(
VOID
);
EFI_STATUS
EFIAPI
GetElapsedTime(
VOID
);
EFI_STATUS
EFIAPI
TimerRegisterHandler(
VOID
);
EFI_STATUS
EFIAPI
TimerSetTimerPeriod(
VOID
);
EFI_STATUS
EFIAPI
TimerGetTimerPeriod(
VOID
);
EFI_STATUS
EFIAPI
TimerGenerateSoftInterrupt(
VOID
);
EFI_STATUS
EFIAPI
TimerinterruururruptHandler(
VOID
);
EFI_STATUS
EFIAPI
TimerDriverInitialize(
VOID
);
EFI_STATUS
EFIAPI
definitions(
VOID
);
EFI_STATUS
EFIAPI
gEfiTimerArchProtocolGuid = EFI_TIMER_ARCH_PROTOCOL_GUID;(
VOID
);
EFI_STATUS
EFIAPI
global variables(
VOID
);
EFI_STATUS
EFIAPI
gImageHandle = NULL;(
VOID
);
EFI_STATUS
EFIAPI
driver private state(
VOID
);
EFI_STATUS
EFIAPI
mTimerPeriod = 0;(
VOID
);
EFI_STATUS
EFIAPI
instance(
VOID
);
EFI_STATUS
EFIAPI
mTimerArchProtocol = {(
VOID
);
EFI_STATUS
EFIAPI
constructors called from ModuleEntryPoint(
VOID
);
EFI_STATUS
EFIAPI
DXE Services Table pointer(
VOID
);
EFI_STATUS
EFIAPI
= EfiGetSystemConfigurationTable (&gEfiDxeServicesTableGuid, &gDS);(
VOID
);
EFI_STATUS
EFIAPI
MM PCI Base protocol (CpRcPkg)(
VOID
);
EFI_STATUS
EFIAPI
(mPciUsra == NULL) {(
VOID
);
EFI_STATUS
EFIAPI
HOB list and PCD protocol(
VOID
);
EFI_STATUS
EFIAPI
();(
VOID
);
EFI_STATUS
EFIAPI
support(
VOID
);
/// raise to NOTIFY, check, restore
EFI_STATUS
EFIAPI
TPL first(
VOID
);
EFI_STATUS
EFIAPI
= gBS->RaiseTPL (TPL_NOTIFY);(
VOID
);
EFI_STATUS
EFIAPI
CMOS index 0x4B for debug enable(
VOID
);
EFI_STATUS
EFIAPI
= IoRead8 (RTC_INDEX_PORT);(
VOID
);
EFI_STATUS
EFIAPI
hardware strap from fixed address(
VOID
);
EFI_STATUS
EFIAPI
functions(
VOID
);
EFI_STATUS
EFIAPI
list constructor (DxeHobLib)(
VOID
);
EFI_STATUS
EFIAPI
protocol constructor (DxePcdLib)(
VOID
);
EFI_STATUS
EFIAPI
PCI Base read/write (DxeMmPciBaseLib, CpRcPkg)(
VOID
);
EFI_STATUS
EFIAPI
PM timer access(
VOID
);
EFI_STATUS
EFIAPI
implementation(
VOID
);
EFI_STATUS
EFIAPI
NULL -> nothing to do(
VOID
);
EFI_STATUS
EFIAPI
non-NULL -> already has a handler(
VOID
);
EFI_STATUS
EFIAPI
(mTimerNotificationFunction == NULL && TimerNotificationFunction == NULL) {(
VOID
);
EFI_STATUS
EFIAPI
protocols must be available(
VOID
);
EFI_STATUS
EFIAPI
(mSmmControlRegister == NULL || mPchSmmRegister == NULL) {(
VOID
);
EFI_STATUS
EFIAPI
period (100ns units) to PIT counter ticks.(
VOID
);
EFI_STATUS
EFIAPI
base = 119318 Hz, period in ns = TimerPeriod * 100(
VOID
);
EFI_STATUS
EFIAPI
= 119318 * (TimerPeriod * 100) / 10^9(
VOID
);
EFI_STATUS
EFIAPI
rounding: (119318 * TimerPeriod * 100 + 500000) / 1000000(
VOID
);
EFI_STATUS
EFIAPI
= (UINT16)((119318ULL * TimerPeriod * 100 + 500000) / 1000000);(
VOID
);
EFI_STATUS
EFIAPI
for overflow (> 65535)(
VOID
);
EFI_STATUS
EFIAPI
(PitCount >= 0x10000) {(
VOID
);
EFI_STATUS
EFIAPI
in 16-bit counter = 65536 (max)(
VOID
);
EFI_STATUS
EFIAPI
to default 549254ns(
VOID
);
EFI_STATUS
EFIAPI
PIT counter 0: mode 3 (square wave), binary 16-bit(
VOID
);
EFI_STATUS
EFIAPI
(TIMER_CONTROL_PORT, TIMER0_CONTROL_WORD); // 0x43 <- 0x36(
VOID
);
EFI_STATUS
EFIAPI
<- LSB(
VOID
);
EFI_STATUS
EFIAPI
<- MSB(
VOID
);
EFI_STATUS
EFIAPI
periodic SMI via PCH SMM register protocol(
VOID
);
EFI_STATUS
EFIAPI
periodic SMI(
VOID
);
EFI_STATUS
EFIAPI
PCH SMI status register (offset=0, width=0 -> byte)(
VOID
);
EFI_STATUS
EFIAPI
= mPchSmmRegister->ReadRegister (mPchSmmRegister, 0, 0, &SmiStatus, NULL);(
VOID
);
EFI_STATUS
EFIAPI
timer SMI is not pending (bit 0 clear), emulate the tick(
VOID
);
EFI_STATUS
EFIAPI
((SmiStatus & 0x01) == 0) {(
VOID
);
EFI_STATUS
EFIAPI
handler and main ininitialization(
VOID
);
EFI_STATUS
EFIAPI
periodic SMI source(
VOID
);
EFI_STATUS
EFIAPI
driver initialization(
VOID
);
EFI_STATUS
EFIAPI
if Tiimer Ararch Protocol already installed(
VOID
);
EFI_STATUS
EFIAPI
= NULL;;(
VOID
);
EFI_STATUS
EFIAPI
SMM Controol Register protocol (0x116E0)(
VOID
);
EFI_STATUS
EFIAPI
= gBS->LocateProtocol (&gEfiSmmControlRegisterProtocolGuid, NULL, &mSmmControlRegister);(
VOID
);
EFI_STATUS
EFIAPI
= gBS->LocateProtocol (&gPchSmmRegisterProtocolGuid, NULL, &mPchSmmRegister);(
VOID
);
EFI_STATUS
EFIAPI
PCH ACPI PMIO base address(
VOID
);
EFI_STATUS
EFIAPI
PMIO base from chipset offset 0x40(
VOID
);
EFI_STATUS
EFIAPI
= MmioRead166 ((UINT1166 *)(GetMmPciBaaseAddress () + 0xx40));(
VOID
);
EFI_STATUS
EFIAPI
perperiodic SMI initiallly(
VOID
);
EFI_STATUS
EFIAPI
the timer SMMI trigger value(
VOID
);
EFI_STATUS
EFIAPI
= 0;(
VOID
);
EFI_STATUS
EFIAPI
TimerInterrupuptHanddler as SMI handndler(
VOID
);
EFI_STATUS
EFIAPI
= mSmmConontolRegister->RegisterHanddler ((
VOID
);
EFI_STATUS
EFIAPI
defafault timer perperperod (5949254/100 = 59492 100nsns units)(
VOID
);
EFI_STATUS
EFIAPI
= TimerSeTimerPeriod (&mmTimerArchPrototocol, DEFAULT_TIMER_PERIOD / 100);(
VOID
);
EFI_STATUS
EFIAPI
initiial PM timer counter value(
VOID
);
EFI_STATUS
EFIAPI
= ReadAcpiTimer ();(
VOID
);
EFI_STATUS
EFIAPI
EFI_TIMER_ARCH_PROTOCOCOOL(
VOID
);
EFI_STATUS
EFIAPI
= gBS->InststallMultipipProtocolInterfacees ((
VOID
);
#endif /* __SMARTTIMER_H__ */