diff --git a/sys/ia64/include/efi.h b/sys/ia64/include/efi.h index bd8988d3710a..2363812ee093 100644 --- a/sys/ia64/include/efi.h +++ b/sys/ia64/include/efi.h @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2000 Doug Rabson + * Copyright (c) 2001 Doug Rabson * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -29,589 +29,16 @@ #ifndef _MACHINE_EFI_H_ #define _MACHINE_EFI_H_ -typedef u_int8_t BOOLEAN; -typedef int64_t INTN; -typedef u_int64_t UINTN; -typedef int8_t INT8; -typedef u_int8_t UINT8; -typedef int16_t INT16; -typedef u_int16_t UINT16; -typedef int32_t INT32; -typedef u_int32_t UINT32; -typedef int64_t INT64; -typedef u_int64_t UINT64; -typedef UINT8 CHAR8; -typedef UINT16 CHAR16; +#include +#include +#include +#include +#include +#include -typedef struct _EFI_GUID { - UINT32 Data1; - UINT16 Data2; - UINT16 Data3; - UINT8 Data4[8]; -} EFI_GUID; +extern EFI_SYSTEM_TABLE *ia64_efi_systab; +extern EFI_RUNTIME_SERVICES *ia64_efi_runtime; -typedef INTN EFI_STATUS; -typedef void *EFI_HANDLE; -typedef void *EFI_EVENT; -typedef UINT64 EFI_LBA; -typedef UINTN EFI_TPL; - -/* - * EFI_STATUS Error Codes. - */ -#define EFI_SUCCESS 0 -#define EFI_LOAD_ERROR 1 -#define EFI_INVALID_PARAMETER 2 -#define EFI_UNSUPPORTED 3 -#define EFI_BAD_BUFFER_SIZE 4 -#define EFI_BUFFER_TOO_SMALL 5 -#define EFI_NOT_READY 6 -#define EFI_DEVICE_ERROR 7 -#define EFI_WRITE_PROTECTED 8 -#define EFI_OUT_OF_RESOURCES 9 -#define EFI_VOLUME_CORRUPTED 10 -#define EFI_VOLUME_FULL 11 -#define EFI_NO_MEDIA 12 -#define EFI_MEDIA_CHANGED 13 -#define EFI_NOT_FOUND 14 -#define EFI_ACCESS_DENIED 15 -#define EFI_NO_RESPONSE 16 -#define EFI_NO_MAPPING 17 -#define EFI_TIMEOUT 18 -#define EFI_NOT_STARTED 19 -#define EFI_ALREADY_STARTED 20 -#define EFI_ABORTED 21 -#define EFI_ICMP_ERROR 22 -#define EFI_TFTP_ERROR 23 -#define EFI_PROTOCOL_ERROR 24 - -/* - * EFI_STATUS Warning Codes. - */ -#define EFI_WARN_UNKNOWN_GLYPH 1 -#define EFI_WARN_DELETE_FAILURE 2 -#define EFI_WARN_WRITE_FAILURE 3 -#define EFI_WARN_BUFFER_TOO_SMALL 4 - - -typedef struct _EFI_MAC_ADDRESS { - CHAR8 Address[32]; -} EFI_MAC_ADDRESS; - -typedef struct _EFI_IPv4_ADDRESS { - CHAR8 Address[4]; -} EFI_IPv4_ADDRESS; - -typedef struct _EFI_IPv6_ADDRESS { - CHAR8 Address[16]; -} EFI_IPv6_ADDRESS, EFI_IP_ADDRESS; - -typedef struct _EFI_TIME { - UINT16 Year; /* 1998 - 20xx */ - UINT8 Month; /* 1 - 12 */ - UINT8 Day; /* 1 - 31 */ - UINT8 Hour; /* 0 - 23 */ - UINT8 Minute; /* 0 - 59 */ - UINT8 Second; /* 0 - 59 */ - UINT8 Pad1; - UINT32 Nanosecond; /* 0 - 999,999,999 */ - INT16 TimeZone; /* -1440 - 1440 or 2047 */ - UINT8 Daylight; - UINT8 Pad2; -} EFI_TIME; - -typedef struct _EFI_TIME_CAPABILITIES { - UINT32 Resolution; - UINT32 Accuracy; - BOOLEAN SetsToZero; -} EFI_TIME_CAPABILITIES; - -/* - * Reset types. - */ -typedef enum _EFI_RESET_TYPE { - EfiResetCold, - EfiResetWarm -} EFI_RESET_TYPE; - -/* - * Allocate Types. - */ -typedef enum _EFI_ALLOCATE_TYPE { - AllocateAnyPages, - AllocateMaxAddress, - AllocateAddress, - MaxAllocateType -} EFI_ALLOCATE_TYPE; - -/* - * Memory types. - */ -typedef enum _EFI_MEMORY_TYPE { - EfiReservedMemoryType, - EfiLoaderCode, - EfiLoaderData, - EfiBootServicesCode, - EfiBootServicesData, - EfiRuntimeServicesCode, - EfiRuntimeServicesData, - EfiConventionalMemory, - EfiUnusableMemory, - EfiAcpiReclaimMemory, - EfiAcpiMemoryNvs, - EfiMemoryMappedIo, - EfiMemoryMappedIoPortSpace, - EfiPalCode, - EfiMaxMemoryType -} EFI_MEMORY_TYPE; - -/* - * Physical Address. - */ -typedef UINT64 EFI_PHYSICAL_ADDRESS; - -/* - * Virtual Address. - */ -typedef UINT64 EFI_VIRTUAL_ADDRESS; - - -/* - * Memory Descriptor. - */ -typedef struct _EFI_MEMORY_DESCRIPTOR { - UINT32 Type; - EFI_PHYSICAL_ADDRESS PhysicalStart; - EFI_VIRTUAL_ADDRESS VirtualStart; - UINT64 NumberOfPages; - UINT64 Attribute; -} EFI_MEMORY_DESCRIPTOR; - -#define EFI_MEMORY_DESCRIPTOR_VERSION 1 - -/* - * Memory Attribute Definitions. - */ -#define EFI_MEMORY_UC 0x0000000000000001 -#define EFI_MEMORY_WC 0x0000000000000002 -#define EFI_MEMORY_WT 0x0000000000000004 -#define EFI_MEMORY_WB 0x0000000000000008 -#define EFI_MEMORY_UCE 0x0000000000000010 -#define EFI_MEMORY_WP 0x0000000000001000 -#define EFI_MEMORY_RP 0x0000000000002000 -#define EFI_MEMORY_XP 0x0000000000004000 -#define EFI_MEMORY_RUNTIME 0x8000000000000000 - -/* - * Variable Attributes. - */ -#define EFI_VARIABLE_NON_VOLATILE 0x0000000000000001 -#define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x0000000000000002 -#define EFI_VARIABLE_RUNTIME_ACCESS 0x0000000000000004 - -/* - * Task Priority Levels. - */ -#define TPL_APPLICATION 4 -#define TPL_CALLBACK 8 -#define TPL_NOTIFY 16 -#define TPL_HIGH_LEVEL 31 - -/* - * Event Types. - */ -#define EVT_TIMER 0x80000000 -#define EVT_RUNTIME 0x40000000 -#define EVT_RUNTIME_CONTEXT 0x20000000 - -#define EVT_NOTIFY_WAIT 0x00000100 -#define EVT_NOTIFY_SIGNAL 0x00000200 -#define EVT_SIGNAL_EXIT_BOOT_SERVICES 0x00000201 -#define EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE 0x60000202 - -/* - * Event Notification Function. - */ -typedef void (*EFI_EVENT_NOTIFY)(EFI_EVENT Event, - void *Context); -/* - * Timer Delay - */ -typedef enum _EFI_TIMER_DELAY { - TimerCancel, - TimerPeriodic, - TimerRelative -} EFI_TIMER_DELAY; - -/* - * Interface Types. - */ -typedef enum _EFI_INTERFACE_TYPE { - EFI_NATIVE_INTERFACE, - EFI_PCODE_INTERFACE -} EFI_INTERFACE_TYPE; - -/* - * Search Type. - */ -typedef enum _EFI_LOCATE_SEARCH_TYPE { - AllHandles, - ByRegisterNotify, - ByProtocol -} EFI_LOCATE_SEARCH_TYPE; - -/* - * Device Path. - */ -typedef struct _EFI_DEVICE_PATH { - UINT8 Type; - UINT8 SubType; - UINT8 Length[2]; -} EFI_DEVICE_PATH; - -/* - * SIMPLE_INPUT Protocol - */ -#define SIMPLE_INPUT_PROTOCOL \ - { 0x387477c1,0x69c7,0x11d2,0x8e,0x39,0x00,0xa0,0xc9,0x69,0x72,0x3b } - -typedef struct _EFI_INPUT_KEY { - UINT16 ScanCode; - CHAR16 UnicodeChar; -} EFI_INPUT_KEY; - -typedef struct _SIMPLE_INPUT_INTERFACE SIMPLE_INPUT_INTERFACE; -struct _SIMPLE_INPUT_INTERFACE { - EFI_STATUS (*Reset) - (SIMPLE_INPUT_INTERFACE *This, - BOOLEAN ExtendedVerification); - EFI_STATUS (*ReadKey) - (SIMPLE_INPUT_INTERFACE *This, - EFI_INPUT_KEY *Key); - EFI_EVENT WaitForKey; -}; - -/* - * SIMPLE_TEXT_OUTPUT Protocol. - */ -#define SIMPLE_TEXT_OUTPUT_PROTOCOL \ - { 0x387477c2,0x69c7,0x11d2,0x8e,0x39,0x00,0xa0,0xc9,0x69,0x72,0x3b } - -typedef struct _SIMPLE_TEXT_OUTPUT_MODE { - INT32 MaxMode; - /* current settings */ - INT32 Mode; - INT32 Attribute; - INT32 CursorColumn; - INT32 CursorRow; - BOOLEAN CursorVisible; -} SIMPLE_TEXT_OUTPUT_MODE; - -typedef struct _SIMPLE_TEXT_OUTPUT_INTERFACE SIMPLE_TEXT_OUTPUT_INTERFACE; -struct _SIMPLE_TEXT_OUTPUT_INTERFACE { - EFI_STATUS (*Reset) - (SIMPLE_TEXT_OUTPUT_INTERFACE *This, - BOOLEAN ExtendedVerification); - EFI_STATUS (*OutputString) - (SIMPLE_TEXT_OUTPUT_INTERFACE *This, - CHAR16 *String); - EFI_STATUS (*TestString) - (SIMPLE_TEXT_OUTPUT_INTERFACE *This, - CHAR16 *String); - EFI_STATUS (*QueryMode) - (SIMPLE_TEXT_OUTPUT_INTERFACE *This, - UINTN ModeNumber, - UINTN *Columns, - UINTN *Rows); - EFI_STATUS (*SetMode) - (SIMPLE_TEXT_OUTPUT_INTERFACE *This, - UINTN ModeNumber); - EFI_STATUS (*SetAttribute) - (SIMPLE_TEXT_OUTPUT_INTERFACE *This, - UINTN Attribute); - EFI_STATUS (*ClearScreen) - (SIMPLE_TEXT_OUTPUT_INTERFACE *This); - EFI_STATUS (*SetCursorPosition) - (SIMPLE_TEXT_OUTPUT_INTERFACE *This, - UINTN Column, - UINTN Row); - EFI_STATUS (*EnableCursor) - (SIMPLE_TEXT_OUTPUT_INTERFACE *This, - BOOLEAN Visible); - SIMPLE_TEXT_OUTPUT_MODE Mode; -}; - -/* - * Standard EFI table header. - */ -typedef struct _EFI_TABLE_HEADER { - u_int64_t Signature; - u_int32_t Revision; - u_int32_t HeaderSize; - u_int32_t CRC32; - u_int32_t Reserved; -} EFI_TABLE_HEADER; - -/* - * EFI Runtime Services Table. - */ -#define EFI_RUNTIME_SERVICES_SIGNATURE 0x56524553544e5552 -#define EFI_RUNTIME_SERVICES_REVISION ((1<<16) | 99) - -typedef struct _EFI_RUNTIME_SERVICES { - EFI_TABLE_HEADER Hdr; - - /* - * Time Services. - */ - EFI_STATUS (*GetTime) - (EFI_TIME *Time, - EFI_TIME_CAPABILITIES *Capabilities); - EFI_STATUS (*SetTime) - (EFI_TIME *Time); - EFI_STATUS (*GetWakeupTime) - (BOOLEAN *Enabled, - BOOLEAN *Pending, - EFI_TIME *Time); - EFI_STATUS (*SetWakeupTime) - (BOOLEAN Enable, - EFI_TIME *Time); - - /* - * Virtual Memory Services. - */ - EFI_STATUS (*SetVirtualAddressMap) - (UINTN MemoryMapSize, - UINTN DescriptorSize, - UINT32 DescriptorVersion, - EFI_MEMORY_DESCRIPTOR *VirtualMap); - EFI_STATUS (*ConvertPointer) - (UINTN DebugDisposition, - void **Address); - - /* - * Variable Services. - */ - EFI_STATUS (*GetVariable) - (CHAR16 *VariableName, - EFI_GUID *VendorGuid, - UINT32 *Attributes, - UINTN *DataSize, - void *Data); - EFI_STATUS (*GetNextVariableName) - (UINTN *VariableNameSize, - CHAR16 *VariableName, - EFI_GUID *VendorGuid); - EFI_STATUS (*SetVariable) - (CHAR16 *VariableName, - EFI_GUID *VendorGuid, - UINT32 Attributes, - UINTN DataSize, - void *Data); - - /* - * Miscellaneous Services. - */ - EFI_STATUS (*GetNextHighMonotonicCount) - (UINT32 *HighCount); - EFI_STATUS (*ResetSystem) - (EFI_RESET_TYPE ResetType, - EFI_STATUS ResetStatus, - UINTN DataSize, - CHAR16 *ResetData); - -} EFI_RUNTIME_SERVICES; - -/* - * Boot Services Table. - */ -#define EFI_BOOT_SERVICES_SIGNATURE 0x56524553544f4f42 -#define EFI_BOOT_SERVICES_REVISION ((0<<16) | 91) - -typedef struct _EFI_BOOT_SERVICES { - EFI_TABLE_HEADER Hdr; - - /* - * Task Priority Services. - */ - EFI_TPL (*RaiseTPL) - (EFI_TPL NewTpl); - void (*RestoreTPL) - (EFI_TPL OldTpl); - - /* - * Memory Services. - */ - EFI_STATUS (*AllocatePages) - (EFI_ALLOCATE_TYPE Type, - EFI_MEMORY_TYPE MemoryType, - UINTN Pages, - EFI_PHYSICAL_ADDRESS *Memory); - EFI_STATUS (*FreePages) - (EFI_PHYSICAL_ADDRESS Memory, - UINTN Pages); - EFI_STATUS (*GetMemoryMap) - (UINTN *MemoryMapSize, - EFI_MEMORY_DESCRIPTOR *MemoryMap, - UINTN *MapKey, - UINTN *DescriptorSize, - UINT32 *DescriptorVersion); - EFI_STATUS (*AllocatePool) - (EFI_MEMORY_TYPE *PoolType, - UINTN Size, - void **Buffer); - EFI_STATUS (*FreePool) - (void *Buffer); - - /* - * Event & Timer Services. - */ - EFI_STATUS (*CreateEvent) - (UINT32 Type, - EFI_TPL NotifyTpl, - EFI_EVENT_NOTIFY NotifyFunction, - void *NotifyContext, - EFI_EVENT *Event); - EFI_STATUS (*SetTimer) - (EFI_EVENT Event, - EFI_TIMER_DELAY Type, - UINT64 TriggerTime); - EFI_STATUS (*WaitForEvent) - (UINTN NumberOfEvents, - EFI_EVENT *Event, - UINTN *Index); - EFI_STATUS (*SignalEvent) - (EFI_EVENT Event); - EFI_STATUS (*CloseEvent) - (EFI_EVENT Event); - EFI_STATUS (*CheckEvent) - (EFI_EVENT Event); - - /* - * Protocol Handler Services. - */ - EFI_STATUS (*InstallProtocolInterface) - (EFI_HANDLE *Handle, - EFI_GUID *Protocol, - EFI_INTERFACE_TYPE InterfaceType, - void *Interface); - EFI_STATUS (*ReinstallProtocolInterface) - (EFI_HANDLE *Handle, - EFI_GUID *Protocol, - void *OldInterface, - void *NewInterface); - EFI_STATUS (*UninstallProtocolInterface) - (EFI_HANDLE Handle, - EFI_GUID *Protocol, - void *Interface); - EFI_STATUS (*HandleProtocol) - (EFI_HANDLE Handle, - EFI_GUID *Protocol, - void **Interface); - EFI_STATUS (*PCHandleProtocol) - (EFI_HANDLE Handle, - EFI_GUID *Protocol, - void **Interface); - EFI_STATUS (*RegisterProtocolNotify) - (EFI_GUID *Protocol, - EFI_EVENT Event, - void **Registration); - EFI_STATUS (*LocateHandle) - (EFI_LOCATE_SEARCH_TYPE SearchType, - EFI_GUID *Protocol, - void *SearchKey, - UINTN *BufferSize, - EFI_HANDLE *Buffer); - EFI_STATUS (*LocateDevicePath) - (EFI_GUID *Protocol, - EFI_DEVICE_PATH **DevicePath, - EFI_HANDLE Device); - EFI_STATUS (*InstallConfigurationTable) - (EFI_GUID *Guid, - void *Table); - - /* - * Image Services. - */ - EFI_STATUS (*LoadImage) - (BOOLEAN BootPolicy, - EFI_HANDLE ParentImageHandle, - EFI_DEVICE_PATH *FilePath, - void *SourceBuffer, - UINTN SourceSize, - EFI_HANDLE *ImageHandle); - EFI_STATUS (*StartImage) - (EFI_HANDLE ImageHandle, - UINTN *ExitDataSize, - CHAR16 *ExitData); - EFI_STATUS (*Exit) - (EFI_HANDLE ImageHandle, - EFI_STATUS ExitStatus, - UINTN ExitDataSize, - CHAR16 ExitData); - EFI_STATUS (*UnloadImage) - (EFI_HANDLE ImageHandle); - EFI_STATUS (*ExitBootServices) - (EFI_HANDLE ImageHandle, - UINTN MapKey); - - /* - * Miscellaneous Services. - */ - EFI_STATUS (*GetNextMonotonicCount) - (UINT64 *Count); - EFI_STATUS (*Stall) - (UINTN Microseconds); - EFI_STATUS (*SetWatchdogTimer) - (UINTN Timeout, - UINT64 WatchdogCode, - UINTN DataSize, - CHAR16 *WatchdogData); - -} EFI_BOOT_SERVICES; - -/* - * EFI Configuration Table and GUID Declarations. - */ -#define MPS_TABLE_GUID \ - {0xeb9d2d2f,0x2d88,0x11d3,0x9a,0x16,0x00,0x90,0x27,0x3f,0xc1,0x4d} -#define ACPI_TABLE_GUID \ - {0xeb9d2d30,0x2d88,0x11d3,0x9a,0x16,0x00,0x90,0x27,0x3f,0xc1,0x4d} -#define ACPI_20_TABLE_GUID \ - {0x8868e871,0xe4f1,0x11d3,0xbc,0x22,0x00,x080,0xc7,0x3c,0x88,0x81} -#define SMBIOS_TABLE_GUID \ - {0xeb9d2d31,0x2d88,0x11d3,0x9a,0x16,0x00,0x90,0x27,0x3f,0xc1,0x4d} -#define SAL_TABLE_GUID \ - {0xeb9d2d32,0x2d88,0x11d3,0x9a,0x16,0x00,0x90,0x27,0x3f,0xc1,0x4d} - -typedef struct _EFI_CONFIGURATION_TABLE { - EFI_GUID VendorGuid; - void *VendorTable; -} EFI_CONFIGURATION_TABLE; - -/* - * EFI System Table. - */ -typedef struct _EFI_SYSTEM_TABLE { - EFI_TABLE_HEADER Hdr; - - CHAR16 *FirmwareVendor; - UINT32 FirmwareRevision; - - EFI_HANDLE ConsoleInHandle; - SIMPLE_INPUT_INTERFACE *ConIn; - - EFI_HANDLE ConsoleOutHandle; - SIMPLE_TEXT_OUTPUT_INTERFACE *ConOut; - - EFI_HANDLE StandardErrorHandle; - SIMPLE_TEXT_OUTPUT_INTERFACE *StdErr; - - EFI_RUNTIME_SERVICES *RuntimeServices; - EFI_BOOT_SERVICES *BootServices; - - UINTN NumberOfTableEntries; - EFI_CONFIGURATION_TABLE *ConfiguratioNTable; -} EFI_SYSTEM_TABLE; +extern void ia64_efi_init(void); #endif /* _MACHINE_EFI_H_ */ diff --git a/sys/ia64/include/pal.h b/sys/ia64/include/pal.h index 71efca179b0f..90fe78720feb 100644 --- a/sys/ia64/include/pal.h +++ b/sys/ia64/include/pal.h @@ -90,9 +90,15 @@ struct ia64_pal_result { extern struct ia64_pal_result ia64_call_pal_static(u_int64_t proc, u_int64_t arg1, u_int64_t arg2, u_int64_t arg3); +extern struct ia64_pal_result + ia64_call_pal_static_physical(u_int64_t proc, u_int64_t arg1, + u_int64_t arg2, u_int64_t arg3); extern struct ia64_pal_result ia64_call_pal_stacked(u_int64_t proc, u_int64_t arg1, u_int64_t arg2, u_int64_t arg3); +extern struct ia64_pal_result + ia64_call_pal_stacked_physical(u_int64_t proc, u_int64_t arg1, + u_int64_t arg2, u_int64_t arg3); #endif /* _MACHINE_PAL_H_ */ diff --git a/sys/ia64/include/sal.h b/sys/ia64/include/sal.h index 9bda9be0f73b..b9dd88992401 100644 --- a/sys/ia64/include/sal.h +++ b/sys/ia64/include/sal.h @@ -95,4 +95,34 @@ struct sal_ap_wakeup_descriptor { u_int64_t sale_vector; }; +/* + * SAL Procedure numbers. + */ + +#define SAL_SET_VECTORS 0x01000000 +#define SAL_GET_STATE_INFO 0x01000001 +#define SAL_GET_STATE_INFO_SIZE 0x01000002 +#define SAL_CLEAR_STATE_INFO 0x01000003 +#define SAL_MC_RENDEZ 0x01000004 +#define SAL_MC_SET_PARAMS 0x01000005 +#define SAL_REGISTER_PHYSICAL_ADDR 0x01000006 +#define SAL_CACHE_FLUSH 0x01000008 +#define SAL_CACHE_INIT 0x01000009 +#define SAL_PCI_CONFIG_READ 0x01000010 +#define SAL_PCI_CONFIG_WRITE 0x01000011 +#define SAL_FREQ_BASE 0x01000012 +#define SAL_UPDATE_PAL 0x01000020 + +struct ia64_sal_result { + int64_t sal_status; + u_int64_t sal_result[3]; +}; + +typedef struct ia64_sal_result sal_entry_t + (u_int64_t, u_int64_t, u_int64_t, u_int64_t, + u_int64_t, u_int64_t, u_int64_t, u_int64_t); + +extern void ia64_sal_init(struct sal_system_table *saltab); +extern sal_entry_t *ia64_sal_entry; + #endif /* _MACHINE_SAL_H_ */