|
|
#ifndef _SAL_PROC_H
#define _SAL_PROC_H
/*
* * Copyright (c) 1999 Intel Corporation * * Module Name: * * SalProc.h * * Abstract: * * Main SAL interface routins for IA-64 calls. * * * Revision History * */
/* return value that mimicks r8,r9,r10 & r11 registers */ typedef struct { UINT64 p0; UINT64 p1; UINT64 p2; UINT64 p3; } rArg;
#define SAL_PCI_CONFIG_READ 0x01000010
#define SAL_PCI_CONFIG_WRITE 0x01000011
typedef VOID (*PFN)(); typedef rArg (*PFN_SAL_PROC)(UINT64,UINT64,UINT64,UINT64,UINT64,UINT64,UINT64,UINT64); typedef rArg (*PFN_SAL_CALLBACK)(UINT64,UINT64,UINT64,UINT64,UINT64,UINT64,UINT64,UINT64);
typedef struct _PLABEL { UINT64 ProcEntryPoint; UINT64 GP; } PLABEL;
typedef struct tagIA32_BIOS_REGISTER_STATE {
/* general registers */ UINT32 eax; UINT32 ecx; UINT32 edx; UINT32 ebx;
/* stack registers */ UINT32 esp; UINT32 ebp; UINT32 esi; UINT32 edi;
/* eflags */ UINT32 eflags;
/* instruction pointer */ UINT32 eip;
UINT16 cs; UINT16 ds; UINT16 es; UINT16 fs; UINT16 gs; UINT16 ss;
/* Reserved */ UINT32 Reserved1; UINT64 Reserved2; } IA32_BIOS_REGISTER_STATE;
VOID EFIInitMsg(VOID);
EFI_STATUS PlRegisterAndStartTimer( IN UINTN Period );
EFI_STATUS PlDeRegisterAndCancelTimer(VOID);
VOID SalProc ( IN UINT64 Arg1, IN UINT64 Arg2, IN UINT64 Arg3, IN UINT64 Arg4, IN UINT64 Arg5, IN UINT64 Arg6, IN UINT64 Arg7, IN UINT64 Arg8, OUT rArg *Results OPTIONAL );
VOID SalCallBack ( IN UINT64 Arg1, IN UINT64 Arg2, IN UINT64 Arg3, IN UINT64 Arg4, IN UINT64 Arg5, IN UINT64 Arg6, IN UINT64 Arg7, IN UINT64 Arg8, OUT rArg *Results OPTIONAL );
VOID RUNTIMEFUNCTION RtSalCallBack ( IN UINT64 Arg1, IN UINT64 Arg2, IN UINT64 Arg3, IN UINT64 Arg4, IN UINT64 Arg5, IN UINT64 Arg6, IN UINT64 Arg7, IN UINT64 Arg8, OUT rArg *Results OPTIONAL );
extern PLABEL RtGlobalSalProcEntry; extern PLABEL RtGlobalSALCallBack;
#pragma pack(1)
/*
* SAL System Table */ typedef struct { UINT32 Signature; UINT32 Length; UINT16 Revision; UINT16 EntryCount; UINT8 CheckSum; UINT8 Reserved[7]; UINT16 SALA_Ver; UINT16 SALB_Ver; UINT8 OemId[32]; UINT8 ProductID[32]; UINT8 Reserved2[8]; } SAL_SYSTEM_TABLE_HDR;
#define SAL_ST_ENTRY_POINT 0
#define SAL_ST_MEMORY_DESCRIPTOR 1
#define SAL_ST_PLATFORM_FEATURES 2
#define SAL_ST_TR_USAGE 3
#define SAL_ST_PTC 4
#define SAL_ST_AP_WAKEUP 5
typedef struct { UINT8 Type; /* Type == 0 */ UINT8 Reserved[7]; UINT64 PalProcEntry; UINT64 SalProcEntry; UINT64 GlobalDataPointer; UINT64 Reserved2[2]; } SAL_ST_ENTRY_POINT_DESCRIPTOR;
typedef struct { UINT8 Type; /* Type == 1 */ UINT8 NeedVirtualRegistration; UINT8 MemoryAttributes; UINT8 PageAccessRights; UINT8 SupportedAttributes; UINT8 Reserved; UINT16 MemoryType; UINT64 PhysicalMemoryAddress; UINT32 Length; UINT32 Reserved1; UINT64 OemReserved; } SAL_ST_MEMORY_DESCRIPTOR_ENTRY;
/*
* MemoryType info */ #define SAL_SAPIC_IPI_BLOCK 0x0002
#define SAL_IO_PORT_MAPPING 0x0003
typedef struct { UINT8 Type; /* Type == 2 */ UINT8 PlatformFeatures; UINT8 Reserved[14]; } SAL_ST_MEMORY_DECRIPTOR;
typedef struct { UINT8 Type; /* Type == 3 */ UINT8 TRType; UINT8 TRNumber; UINT8 Reserved[5]; UINT64 VirtualAddress; UINT64 EncodedPageSize; UINT64 Reserved1; } SAL_ST_TR_DECRIPTOR;
typedef struct { UINT64 NumberOfProcessors; UINT64 LocalIDRegister; } SAL_COHERENCE_DOMAIN_INFO;
typedef struct { UINT8 Type; /* Type == 4 */ UINT8 Reserved[3]; UINT32 NumberOfDomains; SAL_COHERENCE_DOMAIN_INFO *DomainInformation; } SAL_ST_CACHE_COHERENCE_DECRIPTOR;
typedef struct { UINT8 Type; /* Type == 5 */ UINT8 WakeUpType; UINT8 Reserved[6]; UINT64 ExternalInterruptVector; } SAL_ST_AP_WAKEUP_DECRIPTOR;
typedef struct { SAL_SYSTEM_TABLE_HDR Header; SAL_ST_ENTRY_POINT_DESCRIPTOR Entry0; } SAL_SYSTEM_TABLE_ASCENDING_ORDER;
#define FIT_ENTRY_PTR (0x100000000 - 32) /* 4GB - 24 */
#define FIT_PALA_ENTRY (0x100000000 - 48) /* 4GB - 32 */
#define FIT_PALB_TYPE 01
typedef struct { UINT64 Address; UINT8 Size[3]; UINT8 Reserved; UINT16 Revision; UINT8 Type:7; UINT8 CheckSumValid:1; UINT8 CheckSum; } FIT_ENTRY;
#pragma pack()
typedef rArg (*CALL_SAL_PROC)( IN UINT64 Arg1, IN UINT64 Arg2, IN UINT64 Arg3, IN UINT64 Arg4, IN UINT64 Arg5, IN UINT64 Arg6, IN UINT64 Arg7, IN UINT64 Arg8 );
typedef rArg (*CALL_PAL_PROC)( IN UINT64 Arg1, IN UINT64 Arg2, IN UINT64 Arg3, IN UINT64 Arg4 );
extern CALL_SAL_PROC GlobalSalProc; extern CALL_PAL_PROC GlobalPalProc; extern PLABEL SalProcPlabel; extern PLABEL PalProcPlabel;
#endif
|