You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
283 lines
6.6 KiB
283 lines
6.6 KiB
/**
|
|
*** Copyright (C) 1996-97 Intel Corporation. All rights reserved.
|
|
***
|
|
*** The information and source code contained herein is the exclusive
|
|
*** property of Intel Corporation and may not be disclosed, examined
|
|
*** or reproduced in whole or in part without explicit written authorization
|
|
*** from the company.
|
|
**/
|
|
|
|
//++
|
|
//
|
|
// Module name
|
|
// sal.h
|
|
// Author
|
|
// Allen Kay (akay) Jun-12-95
|
|
// Description
|
|
// Defines SAL data structures
|
|
//--
|
|
|
|
#ifndef __SUSAL__
|
|
#define __SUSAL__
|
|
|
|
typedef struct _IA32_BIOS_REGISTER_STATE {
|
|
|
|
// general registers
|
|
ULONG eax;
|
|
ULONG ecx;
|
|
ULONG edx;
|
|
ULONG ebx;
|
|
ULONG esp;
|
|
|
|
// stack registers
|
|
ULONG ebp;
|
|
ULONG esi;
|
|
ULONG edi;
|
|
|
|
// eflags
|
|
ULONG eflags;
|
|
|
|
// instruction pointer
|
|
ULONG eip;
|
|
|
|
// segment registers
|
|
USHORT cs;
|
|
USHORT ds;
|
|
USHORT es;
|
|
USHORT fs;
|
|
USHORT gs;
|
|
USHORT ss;
|
|
|
|
ULONG Reserved1;
|
|
ULONGLONG Reserved2;
|
|
} IA32_BIOS_REGISTER_STATE, *PIA32_BIOS_REGISTER_STATE;
|
|
|
|
typedef union _BIT32_AND_BIT16 {
|
|
ULONG Part32;
|
|
struct {
|
|
USHORT LowPart16;
|
|
USHORT HighPart16;
|
|
};
|
|
struct {
|
|
UCHAR Byte0;
|
|
UCHAR Byte1;
|
|
UCHAR Byte2;
|
|
UCHAR Byte3;
|
|
};
|
|
} BIT32_AND_BIT16;
|
|
|
|
//
|
|
// EFLAG definition
|
|
//
|
|
#define CARRY_FLAG 0x1
|
|
#define PARITY_FLAG 0x2
|
|
#define AUXILARY_FLAG 0x4
|
|
#define ZERO_FLAG 0x8
|
|
#define SIGN_FLAG 0x10
|
|
#define TRAP_FLAG 0x11
|
|
|
|
//
|
|
// SAL descriptor types
|
|
//
|
|
typedef enum {
|
|
PAL_SAL_EP_TYPE = 0,
|
|
SAL_MEMORY_TYPE,
|
|
PLATFORM_FEATURES_TYPE,
|
|
TRANSLATION_REGISTER_TYPE,
|
|
PTC_COHERENCE_TYPE,
|
|
AP_WAKEUP_TYPE
|
|
};
|
|
|
|
//
|
|
// Format of the SAL System Table (SST) Header. SAL Specs July 2000, Revision: 2.9.
|
|
// The SST is followed by a variable number of entries with varying length.
|
|
//
|
|
|
|
typedef struct _SST_HEADER {
|
|
ULONG Signature;
|
|
ULONG Length;
|
|
USHORT SalRev;
|
|
USHORT EntryCount;
|
|
UCHAR CheckSum;
|
|
UCHAR Reserved1[7];
|
|
USHORT Sal_A_Version;
|
|
USHORT Sal_B_Version;
|
|
UCHAR OemId[32];
|
|
UCHAR ProductId[32];
|
|
UCHAR Reserved2[8];
|
|
} SST_HEADER, *PSST_HEADER;
|
|
|
|
//
|
|
// PAL and SAL entry point descriptor
|
|
//
|
|
typedef struct _PAL_SAL_ENTRY_POINT {
|
|
UCHAR EntryType;
|
|
UCHAR Reserved0[7];
|
|
ULONGLONG PalEntryPoint;
|
|
ULONGLONG SalEntryPoint;
|
|
ULONGLONG GlobalPointer;
|
|
UCHAR Reserved1[16];
|
|
} PAL_SAL_ENTRY_POINT, *PPAL_SAL_ENTRY_POINT;
|
|
|
|
//
|
|
// Memory descriptor
|
|
//
|
|
typedef struct _SAL_MEMORY_DESCRIPTOR {
|
|
UCHAR EntryType;
|
|
UCHAR NeedVaReg;
|
|
UCHAR CurrentAttribute;
|
|
UCHAR PageAccessRights;
|
|
UCHAR SupportedAttribute;
|
|
UCHAR Reserved1[1];
|
|
UCHAR MemoryType;
|
|
UCHAR MemoryUsage;
|
|
ULONGLONG Address;
|
|
ULONG Length;
|
|
UCHAR Reserved[4];
|
|
UCHAR OemReserved[8];
|
|
} SAL_MEMORY_DESCRIPTOR, *PSAL_MEMORY_DESCRIPTOR;
|
|
|
|
typedef struct _PLATFORM_FEATURES {
|
|
UCHAR EntryType;
|
|
UCHAR FeatureList;
|
|
UCHAR Reserved[14];
|
|
} PLATFORM_FEATURES, *PPLATFORM_FEATURES;
|
|
|
|
typedef struct _TRANSLATION_REGISTER {
|
|
UCHAR EntryType;
|
|
UCHAR TRType;
|
|
UCHAR TRNumber;
|
|
UCHAR Reserved1[5];
|
|
ULONGLONG VirtualAddress;
|
|
ULONGLONG PageSize;
|
|
UCHAR Reserved2[8];
|
|
} TRANSLATION_REGISTER, *PTRANSLATION_REGISTER;
|
|
|
|
typedef struct _PTC_COHERENCE_DOMAIN {
|
|
UCHAR EntryType;
|
|
UCHAR Reserved[3];
|
|
ULONG NumberOfDomains;
|
|
ULONGLONG CoherenceDomainInfo;
|
|
} PTC_COHERENCE_DOMAIN, *PPTC_COHERENCE_DOMAIN;
|
|
|
|
typedef struct _COHERENCE_DOMAIN_INFO {
|
|
ULONGLONG NumberOfProcessors;
|
|
ULONGLONG LocalIdRegisters;
|
|
} COHERENCE_DOMAIN_INFO, *PCOHERENCE_DOMAIN_INFO;
|
|
|
|
typedef struct _AP_WAKEUP_DESCRIPTOR {
|
|
UCHAR EntryType;
|
|
UCHAR WakeupMechanism;
|
|
UCHAR Reserved[6];
|
|
ULONGLONG WakeupVector;
|
|
} AP_WAKEUP_DESCRIPTOR, *PAP_WAKEUP_DESCRIPTOR;
|
|
|
|
typedef struct _BOOT_INFO_TABLE {
|
|
ULONGLONG Signature;
|
|
ULONG TableLength;
|
|
UCHAR CheckSum;
|
|
UCHAR DriveNumber;
|
|
UCHAR OsRecord;
|
|
UCHAR Reserved1[1];
|
|
PULONGLONG OsBootDevice;
|
|
UCHAR ConsoleInputNumber;
|
|
UCHAR ConsoleOutputNumber;
|
|
UCHAR Reserved2[6];
|
|
ULONGLONG OsBootDeviceRecord;
|
|
ULONGLONG ConsoleIn1DevInfo;
|
|
ULONGLONG ConsoleOut1DevInfo;
|
|
} BOOT_INFO_TABLE, *PBOOT_INFO_TABLE;
|
|
|
|
//
|
|
//
|
|
// EDD Disk Address Packet definition
|
|
//
|
|
typedef struct _DISK_ADDRESS_PACKET {
|
|
UCHAR PacketSize;
|
|
UCHAR Reserved0;
|
|
UCHAR BlocksToTransfer;
|
|
UCHAR Reserved1;
|
|
ULONG Buffer32;
|
|
ULONGLONG LBA;
|
|
PUCHAR Buffer64;
|
|
} DISK_ADDRESS_PACKET, *PDISK_ADDRESS_PACKET;
|
|
|
|
//
|
|
// SAL procedure function ID's
|
|
//
|
|
#define SAL_SYSTEM_RESET 0x01000000
|
|
#define SAL_SET_VECTORS 0x01000001
|
|
#define SAL_GET_STATE_INFO 0x01000002
|
|
#define SAL_GET_STATE_INFO_SIZE 0x01000003
|
|
#define SAL_CLEAR_STATE_INFO 0x01000004
|
|
#define SAL_MC_RENDEZ 0x01000005
|
|
#define SAL_MC_SET_PARAMS 0x01000006
|
|
#define SAL_VERSION 0x01000007
|
|
#define SAL_CACHE_FLUSH 0x01000010
|
|
#define SAL_CACHE_INIT 0x01000011
|
|
#define SAL_PCI_CONFIG_READ 0x01000030
|
|
#define SAL_PCI_CONFIG_WRITE 0x01000031
|
|
#define SAL_FREQ_BASE 0x01000032
|
|
#define SAL_EXT_ISR_ADD 0x01000033
|
|
#define SAL_EXT_ISR_DELETE 0x01000034
|
|
#define SAL_ALLOC_MEM 0x01000050
|
|
#define SAL_FREE_MEM 0x01000051
|
|
#define SAL_UPDATE_PAL 0x01000060
|
|
|
|
//
|
|
// Macro used by functions in exp.c
|
|
//
|
|
#define BCD_TO_BIN(BcdNumber) (BcdNumber & 0xf0) + (BcdNumber & 0x0f)
|
|
|
|
//
|
|
// Structure definitions and equates for INT 15 function E820
|
|
//
|
|
|
|
typedef struct _E820_FRAME {
|
|
ULONG ErrorFlag;
|
|
ULONG Key;
|
|
ULONG DescSize;
|
|
|
|
ULONG BaseAddrLow;
|
|
ULONG BaseAddrHigh;
|
|
ULONG SizeLow;
|
|
ULONG SizeHigh;
|
|
ULONG MemoryType;
|
|
} E820_FRAME, *PE820_FRAME;
|
|
|
|
//
|
|
// Return value structure
|
|
//
|
|
typedef struct _SAL_RETURN_VALUES {
|
|
ULONGLONG RetVal0;
|
|
ULONGLONG RetVal1;
|
|
ULONGLONG RetVal2;
|
|
ULONGLONG RetVal3;
|
|
} SAL_RETURN_VALUES, *PSAL_RETURN_VALUES;
|
|
|
|
//
|
|
// SAL Handoff Parameters
|
|
//
|
|
typedef struct _SAL_HANDOFF_PARAMS {
|
|
ULONG_PTR MPSConfigTable;
|
|
ULONG_PTR SalSystemTable;
|
|
ULONG_PTR BootInfoTable;
|
|
ULONG_PTR PalProcEp;
|
|
ULONG_PTR SalProcEp;
|
|
ULONGLONG SalProcGp;
|
|
ULONG_PTR AcpiRsdt;
|
|
} SAL_HANDOFF_PARAMS, *PSAL_HANDOFF_PARAMS;
|
|
|
|
//
|
|
// Defining entry point for SAL_PROC.
|
|
//
|
|
typedef
|
|
VOID
|
|
(*PTRANSFER_ROUTINE) ();
|
|
|
|
//
|
|
// Misc. definitions.
|
|
//
|
|
#define SAL_BLOCK_SIZE 0x1000 // SAL memory block size
|
|
|
|
#endif __SUSAL__
|