#ifndef __CPUCSRACCESS_H__
#define __CPUCSRACCESS_H__

#include "../uefi_headers/Uefi.h"

EFI_STATUS EFIAPI ModuleEntryPoint(VOID);

void CpuCsrInitUefiBootServices(__int64 ImageHandle, __int64 SystemTable);
__int64 CpuCsrUnloadDriver(void);
__int64 CpuCsrWriteDispatch1(char Socket, int Agent, int Command, __int64 Payload);
__int64 CpuCsrReadWriteDispatch(unsigned __int8 Socket, __int64 Agent, __int64 Command);
__int64 CpuCsrWriteDispatch2(unsigned __int8 Socket, unsigned __int8 Agent, int Command, int Payload);
__int64 CpuCsrWriteDispatch3(char Socket, __int64 Agent, unsigned int Command);
__int64 CpuCsrWriteDispatch4(char Socket, __int64 Agent, unsigned int Command);
__int64 CpuCsrWriteDispatch5(char Socket, __int64 Agent, __int64 Command);
__int64 CpuCsrWriteDispatch6(char Socket, __int64 Agent, __int64 Command, int Payload);
__int64 CpuCsrWriteDispatch7(char Socket, __int64 Agent, __int64 Command);
__int64 CpuCsrWriteDispatch8(char Socket, __int64 Agent);
__int64 CpuCsrWriteDispatch9(char Socket, __int64 Agent, unsigned int Command);
__int64 CpuCsrWriteDispatch10(char Socket, __int64 Agent);
__int64 CpuCsrWriteCheckpoint(unsigned __int8 Socket, unsigned __int8 Agent, unsigned __int16 Step);
char CpuCsrParsePlatformConfig(void);
__int64 CpuCsrDriverEntry(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable);
__int64 CpuCsrPacketRead(__int64 Protocol, unsigned __int8 Socket, unsigned __int8 Agent, int Command);
__int64 CpuCsrPacketWrite(__int64 Protocol, unsigned __int8 Socket, unsigned __int8 Agent, int Command, ...);
__int64 CpuCsrPollWithRetry(__int64 Protocol, unsigned __int8 Socket, __int64 Agent, int Command);
void CpuCsrAssertHalt(__int64 Enabled, __int64 Format, __int64 Value);
__int64 CpuCsrZeroMem(__int64 Buffer, unsigned __int64 Length);
unsigned __int32 PciCfgInDword(unsigned __int16 Port);
__int64 CpuCsrGetDebugProtocol(void);
__int64 CpuCsrDebugPrint(__int64 Level, __int64 Format, ...);
__int64 CpuCsrDebugAssert(__int64 File, __int64 Line, __int64 Expression);
char CpuCsrDebugEnabled(void);
bool CpuCsrDebugLevelEnabled(int Level);
void CpuCsrNotifyVirtualAddrChange(void);
__int64 CpuCsrCloseDebugEvent(void);
unsigned __int64 CpuCsrGetConfigTable(__int64 Guid, _QWORD *Table);
__int64 CpuCsrGetHobList(void);
void CpuCsrNotifyEventStub(void);
__int64 CpuCsrRuntimeVirtualAddrCallback(void);
__int64 CpuCsrPciExpressVirtualAddrCallback(void);
__int64 CpuCsrPciExpressTranslateAddr(__int64 Address);
__int64 CpuCsrMicrosecondDelay(unsigned int Microseconds);
__int64 CpuCsrGetPcdProtocol(void);
__int64 CpuCsrReadUnaligned64(__int64 Address);
__int64 CpuCsrPciExpressEnable(_WORD *Address);
__int64 CpuCsrFreePool(void);

#endif
