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