Subversion Repositories HelenOS

Rev

Rev 2726 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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