1 1.1 jakllsch /* $NetBSD: salproc.h,v 1.1.1.1 2014/04/01 16:16:07 jakllsch Exp $ */ 2 1.1 jakllsch 3 1.1 jakllsch #ifndef _SAL_PROC_H 4 1.1 jakllsch #define _SAL_PROC_H 5 1.1 jakllsch // 6 1.1 jakllsch // 7 1.1 jakllsch //Copyright (c) 1999 Intel Corporation 8 1.1 jakllsch // 9 1.1 jakllsch //Module Name: 10 1.1 jakllsch // 11 1.1 jakllsch // SalProc.h 12 1.1 jakllsch // 13 1.1 jakllsch //Abstract: 14 1.1 jakllsch // 15 1.1 jakllsch // Main SAL interface routins for IA-64 calls. 16 1.1 jakllsch // 17 1.1 jakllsch // 18 1.1 jakllsch //Revision History 19 1.1 jakllsch // 20 1.1 jakllsch // 21 1.1 jakllsch 22 1.1 jakllsch // return value that mimicks r8,r9,r10 & r11 registers 23 1.1 jakllsch typedef struct { 24 1.1 jakllsch UINT64 p0; 25 1.1 jakllsch UINT64 p1; 26 1.1 jakllsch UINT64 p2; 27 1.1 jakllsch UINT64 p3; 28 1.1 jakllsch } rArg; 29 1.1 jakllsch 30 1.1 jakllsch #define SAL_PCI_CONFIG_READ 0x01000010 31 1.1 jakllsch #define SAL_PCI_CONFIG_WRITE 0x01000011 32 1.1 jakllsch 33 1.1 jakllsch typedef VOID (*PFN)(); 34 1.1 jakllsch typedef rArg (*PFN_SAL_PROC)(UINT64,UINT64,UINT64,UINT64,UINT64,UINT64,UINT64,UINT64); 35 1.1 jakllsch typedef rArg (*PFN_SAL_CALLBACK)(UINT64,UINT64,UINT64,UINT64,UINT64,UINT64,UINT64,UINT64); 36 1.1 jakllsch 37 1.1 jakllsch typedef struct _PLABEL { 38 1.1 jakllsch UINT64 ProcEntryPoint; 39 1.1 jakllsch UINT64 GP; 40 1.1 jakllsch } PLABEL; 41 1.1 jakllsch 42 1.1 jakllsch typedef struct tagIA32_BIOS_REGISTER_STATE { 43 1.1 jakllsch 44 1.1 jakllsch // general registers 45 1.1 jakllsch UINT32 eax; 46 1.1 jakllsch UINT32 ecx; 47 1.1 jakllsch UINT32 edx; 48 1.1 jakllsch UINT32 ebx; 49 1.1 jakllsch 50 1.1 jakllsch // stack registers 51 1.1 jakllsch UINT32 esp; 52 1.1 jakllsch UINT32 ebp; 53 1.1 jakllsch UINT32 esi; 54 1.1 jakllsch UINT32 edi; 55 1.1 jakllsch 56 1.1 jakllsch // eflags 57 1.1 jakllsch UINT32 eflags; 58 1.1 jakllsch 59 1.1 jakllsch // instruction pointer 60 1.1 jakllsch UINT32 eip; 61 1.1 jakllsch 62 1.1 jakllsch UINT16 cs; 63 1.1 jakllsch UINT16 ds; 64 1.1 jakllsch UINT16 es; 65 1.1 jakllsch UINT16 fs; 66 1.1 jakllsch UINT16 gs; 67 1.1 jakllsch UINT16 ss; 68 1.1 jakllsch 69 1.1 jakllsch // Reserved 70 1.1 jakllsch UINT32 Reserved1; 71 1.1 jakllsch UINT64 Reserved2; 72 1.1 jakllsch } IA32_BIOS_REGISTER_STATE; 73 1.1 jakllsch 74 1.1 jakllsch VOID EFIInitMsg(VOID); 75 1.1 jakllsch 76 1.1 jakllsch EFI_STATUS 77 1.1 jakllsch PlRegisterAndStartTimer( 78 1.1 jakllsch IN UINTN Period 79 1.1 jakllsch ); 80 1.1 jakllsch 81 1.1 jakllsch EFI_STATUS 82 1.1 jakllsch PlDeRegisterAndCancelTimer(VOID); 83 1.1 jakllsch 84 1.1 jakllsch VOID 85 1.1 jakllsch SalProc ( 86 1.1 jakllsch IN UINT64 Arg1, 87 1.1 jakllsch IN UINT64 Arg2, 88 1.1 jakllsch IN UINT64 Arg3, 89 1.1 jakllsch IN UINT64 Arg4, 90 1.1 jakllsch IN UINT64 Arg5, 91 1.1 jakllsch IN UINT64 Arg6, 92 1.1 jakllsch IN UINT64 Arg7, 93 1.1 jakllsch IN UINT64 Arg8, 94 1.1 jakllsch OUT rArg *Results OPTIONAL 95 1.1 jakllsch ); 96 1.1 jakllsch 97 1.1 jakllsch VOID 98 1.1 jakllsch SalCallBack ( 99 1.1 jakllsch IN UINT64 Arg1, 100 1.1 jakllsch IN UINT64 Arg2, 101 1.1 jakllsch IN UINT64 Arg3, 102 1.1 jakllsch IN UINT64 Arg4, 103 1.1 jakllsch IN UINT64 Arg5, 104 1.1 jakllsch IN UINT64 Arg6, 105 1.1 jakllsch IN UINT64 Arg7, 106 1.1 jakllsch IN UINT64 Arg8, 107 1.1 jakllsch OUT rArg *Results OPTIONAL 108 1.1 jakllsch ); 109 1.1 jakllsch 110 1.1 jakllsch VOID 111 1.1 jakllsch RUNTIMEFUNCTION 112 1.1 jakllsch RtSalCallBack ( 113 1.1 jakllsch IN UINT64 Arg1, 114 1.1 jakllsch IN UINT64 Arg2, 115 1.1 jakllsch IN UINT64 Arg3, 116 1.1 jakllsch IN UINT64 Arg4, 117 1.1 jakllsch IN UINT64 Arg5, 118 1.1 jakllsch IN UINT64 Arg6, 119 1.1 jakllsch IN UINT64 Arg7, 120 1.1 jakllsch IN UINT64 Arg8, 121 1.1 jakllsch OUT rArg *Results OPTIONAL 122 1.1 jakllsch ); 123 1.1 jakllsch 124 1.1 jakllsch 125 1.1 jakllsch extern PLABEL RtGlobalSalProcEntry; 126 1.1 jakllsch extern PLABEL RtGlobalSALCallBack; 127 1.1 jakllsch 128 1.1 jakllsch #pragma pack(1) 129 1.1 jakllsch // 130 1.1 jakllsch // SAL System Table 131 1.1 jakllsch // 132 1.1 jakllsch typedef struct { 133 1.1 jakllsch UINT32 Signature; 134 1.1 jakllsch UINT32 Length; 135 1.1 jakllsch UINT16 Revision; 136 1.1 jakllsch UINT16 EntryCount; 137 1.1 jakllsch UINT8 CheckSum; 138 1.1 jakllsch UINT8 Reserved[7]; 139 1.1 jakllsch UINT16 SALA_Ver; 140 1.1 jakllsch UINT16 SALB_Ver; 141 1.1 jakllsch UINT8 OemId[32]; 142 1.1 jakllsch UINT8 ProductID[32]; 143 1.1 jakllsch UINT8 Reserved2[8]; 144 1.1 jakllsch } SAL_SYSTEM_TABLE_HDR; 145 1.1 jakllsch 146 1.1 jakllsch #define SAL_ST_ENTRY_POINT 0 147 1.1 jakllsch #define SAL_ST_MEMORY_DESCRIPTOR 1 148 1.1 jakllsch #define SAL_ST_PLATFORM_FEATURES 2 149 1.1 jakllsch #define SAL_ST_TR_USAGE 3 150 1.1 jakllsch #define SAL_ST_PTC 4 151 1.1 jakllsch #define SAL_ST_AP_WAKEUP 5 152 1.1 jakllsch 153 1.1 jakllsch typedef struct { 154 1.1 jakllsch UINT8 Type; // Type == 0 155 1.1 jakllsch UINT8 Reserved[7]; 156 1.1 jakllsch UINT64 PalProcEntry; 157 1.1 jakllsch UINT64 SalProcEntry; 158 1.1 jakllsch UINT64 GlobalDataPointer; 159 1.1 jakllsch UINT64 Reserved2[2]; 160 1.1 jakllsch } SAL_ST_ENTRY_POINT_DESCRIPTOR; 161 1.1 jakllsch 162 1.1 jakllsch typedef struct { 163 1.1 jakllsch UINT8 Type; // Type == 1 164 1.1 jakllsch UINT8 NeedVirtualRegistration; 165 1.1 jakllsch UINT8 MemoryAttributes; 166 1.1 jakllsch UINT8 PageAccessRights; 167 1.1 jakllsch UINT8 SupportedAttributes; 168 1.1 jakllsch UINT8 Reserved; 169 1.1 jakllsch UINT16 MemoryType; 170 1.1 jakllsch UINT64 PhysicalMemoryAddress; 171 1.1 jakllsch UINT32 Length; 172 1.1 jakllsch UINT32 Reserved1; 173 1.1 jakllsch UINT64 OemReserved; 174 1.1 jakllsch } SAL_ST_MEMORY_DESCRIPTOR_ENTRY; 175 1.1 jakllsch 176 1.1 jakllsch // 177 1.1 jakllsch // MemoryType info 178 1.1 jakllsch // 179 1.1 jakllsch #define SAL_SAPIC_IPI_BLOCK 0x0002 180 1.1 jakllsch #define SAL_IO_PORT_MAPPING 0x0003 181 1.1 jakllsch 182 1.1 jakllsch typedef struct { 183 1.1 jakllsch UINT8 Type; // Type == 2 184 1.1 jakllsch UINT8 PlatformFeatures; 185 1.1 jakllsch UINT8 Reserved[14]; 186 1.1 jakllsch } SAL_ST_MEMORY_DECRIPTOR; 187 1.1 jakllsch 188 1.1 jakllsch typedef struct { 189 1.1 jakllsch UINT8 Type; // Type == 3 190 1.1 jakllsch UINT8 TRType; 191 1.1 jakllsch UINT8 TRNumber; 192 1.1 jakllsch UINT8 Reserved[5]; 193 1.1 jakllsch UINT64 VirtualAddress; 194 1.1 jakllsch UINT64 EncodedPageSize; 195 1.1 jakllsch UINT64 Reserved1; 196 1.1 jakllsch } SAL_ST_TR_DECRIPTOR; 197 1.1 jakllsch 198 1.1 jakllsch typedef struct { 199 1.1 jakllsch UINT64 NumberOfProcessors; 200 1.1 jakllsch UINT64 LocalIDRegister; 201 1.1 jakllsch } SAL_COHERENCE_DOMAIN_INFO; 202 1.1 jakllsch 203 1.1 jakllsch typedef struct { 204 1.1 jakllsch UINT8 Type; // Type == 4 205 1.1 jakllsch UINT8 Reserved[3]; 206 1.1 jakllsch UINT32 NumberOfDomains; 207 1.1 jakllsch SAL_COHERENCE_DOMAIN_INFO *DomainInformation; 208 1.1 jakllsch } SAL_ST_CACHE_COHERENCE_DECRIPTOR; 209 1.1 jakllsch 210 1.1 jakllsch typedef struct { 211 1.1 jakllsch UINT8 Type; // Type == 5 212 1.1 jakllsch UINT8 WakeUpType; 213 1.1 jakllsch UINT8 Reserved[6]; 214 1.1 jakllsch UINT64 ExternalInterruptVector; 215 1.1 jakllsch } SAL_ST_AP_WAKEUP_DECRIPTOR; 216 1.1 jakllsch 217 1.1 jakllsch typedef struct { 218 1.1 jakllsch SAL_SYSTEM_TABLE_HDR Header; 219 1.1 jakllsch SAL_ST_ENTRY_POINT_DESCRIPTOR Entry0; 220 1.1 jakllsch } SAL_SYSTEM_TABLE_ASCENDING_ORDER; 221 1.1 jakllsch 222 1.1 jakllsch #define FIT_ENTRY_PTR (0x100000000 - 32) // 4GB - 24 223 1.1 jakllsch #define FIT_PALA_ENTRY (0x100000000 - 48) // 4GB - 32 224 1.1 jakllsch #define FIT_PALB_TYPE 01 225 1.1 jakllsch 226 1.1 jakllsch typedef struct { 227 1.1 jakllsch UINT64 Address; 228 1.1 jakllsch UINT8 Size[3]; 229 1.1 jakllsch UINT8 Reserved; 230 1.1 jakllsch UINT16 Revision; 231 1.1 jakllsch UINT8 Type:7; 232 1.1 jakllsch UINT8 CheckSumValid:1; 233 1.1 jakllsch UINT8 CheckSum; 234 1.1 jakllsch } FIT_ENTRY; 235 1.1 jakllsch 236 1.1 jakllsch #pragma pack() 237 1.1 jakllsch 238 1.1 jakllsch typedef 239 1.1 jakllsch rArg 240 1.1 jakllsch (*CALL_SAL_PROC)( 241 1.1 jakllsch IN UINT64 Arg1, 242 1.1 jakllsch IN UINT64 Arg2, 243 1.1 jakllsch IN UINT64 Arg3, 244 1.1 jakllsch IN UINT64 Arg4, 245 1.1 jakllsch IN UINT64 Arg5, 246 1.1 jakllsch IN UINT64 Arg6, 247 1.1 jakllsch IN UINT64 Arg7, 248 1.1 jakllsch IN UINT64 Arg8 249 1.1 jakllsch ); 250 1.1 jakllsch 251 1.1 jakllsch typedef 252 1.1 jakllsch rArg 253 1.1 jakllsch (*CALL_PAL_PROC)( 254 1.1 jakllsch IN UINT64 Arg1, 255 1.1 jakllsch IN UINT64 Arg2, 256 1.1 jakllsch IN UINT64 Arg3, 257 1.1 jakllsch IN UINT64 Arg4 258 1.1 jakllsch ); 259 1.1 jakllsch 260 1.1 jakllsch extern CALL_SAL_PROC GlobalSalProc; 261 1.1 jakllsch extern CALL_PAL_PROC GlobalPalProc; 262 1.1 jakllsch extern PLABEL SalProcPlabel; 263 1.1 jakllsch extern PLABEL PalProcPlabel; 264 1.1 jakllsch 265 1.1 jakllsch #endif 266 1.1 jakllsch 267