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