| #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 |
| |