salproc.h revision 1.1 1 1.1 jakllsch /* $NetBSD: salproc.h,v 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