aboutsummaryrefslogtreecommitdiff
path: root/gnu-efi/gnu-efi-3.0/inc/ia64/salproc.h
diff options
context:
space:
mode:
Diffstat (limited to 'gnu-efi/gnu-efi-3.0/inc/ia64/salproc.h')
-rw-r--r--gnu-efi/gnu-efi-3.0/inc/ia64/salproc.h264
1 files changed, 264 insertions, 0 deletions
diff --git a/gnu-efi/gnu-efi-3.0/inc/ia64/salproc.h b/gnu-efi/gnu-efi-3.0/inc/ia64/salproc.h
new file mode 100644
index 0000000..62a5dca
--- /dev/null
+++ b/gnu-efi/gnu-efi-3.0/inc/ia64/salproc.h
@@ -0,0 +1,264 @@
+#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
+