/** *** 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__