]> git.proxmox.com Git - mirror_edk2.git/blob - MdePkg/Include/IndustryStandard/Pal.h
ShellPkg/UefiHandleParsingLib: Remove some unused Guids
[mirror_edk2.git] / MdePkg / Include / IndustryStandard / Pal.h
1 /** @file
2 Main PAL API's defined in Intel Itanium Architecture Software Developer's Manual.
3
4 Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
6
7 **/
8
9 #ifndef __PAL_API_H__
10 #define __PAL_API_H__
11
12 #define PAL_SUCCESS 0x0
13
14 ///
15 /// CacheType of PAL_CACHE_FLUSH.
16 ///
17 #define PAL_CACHE_FLUSH_INSTRUCTION_ALL 1
18 #define PAL_CACHE_FLUSH_DATA_ALL 2
19 #define PAL_CACHE_FLUSH_ALL 3
20 #define PAL_CACHE_FLUSH_SYNC_TO_DATA 4
21
22
23 ///
24 /// Bitmask of Opearation of PAL_CACHE_FLUSH.
25 ///
26 #define PAL_CACHE_FLUSH_INVALIDATE_LINES BIT0
27 #define PAL_CACHE_FLUSH_NO_INVALIDATE_LINES 0
28 #define PAL_CACHE_FLUSH_POLL_INTERRUPT BIT1
29 #define PAL_CACHE_FLUSH_NO_INTERRUPT 0
30
31 /**
32 PAL Procedure - PAL_CACHE_FLUSH.
33
34 Flush the instruction or data caches. It is required by Itanium processors.
35 The PAL procedure supports the Static Registers calling
36 convention. It could be called at virtual mode and physical
37 mode.
38
39 @param Index Index of PAL_CACHE_FLUSH within the
40 list of PAL procedures.
41 @param CacheType Unsigned 64-bit integer indicating
42 which cache to flush.
43 @param Operation Formatted bit vector indicating the
44 operation of this call.
45 @param ProgressIndicator Unsigned 64-bit integer specifying
46 the starting position of the flush
47 operation.
48
49 @retval 2 Call completed without error, but a PMI
50 was taken during the execution of this
51 procedure.
52 @retval 1 Call has not completed flushing due to
53 a pending interrupt.
54 @retval 0 Call completed without error
55 @retval -2 Invalid argument
56 @retval -3 Call completed with error
57
58 @return R9 Unsigned 64-bit integer specifying the vector
59 number of the pending interrupt.
60 @return R10 Unsigned 64-bit integer specifying the
61 starting position of the flush operation.
62 @return R11 Unsigned 64-bit integer specifying the vector
63 number of the pending interrupt.
64
65 **/
66 #define PAL_CACHE_FLUSH 1
67
68
69 ///
70 /// Attributes of PAL_CACHE_CONFIG_INFO1
71 ///
72 #define PAL_CACHE_ATTR_WT 0
73 #define PAL_CACHE_ATTR_WB 1
74
75 ///
76 /// PAL_CACHE_CONFIG_INFO1.StoreHint
77 ///
78 #define PAL_CACHE_STORE_TEMPORAL 0
79 #define PAL_CACHE_STORE_NONE_TEMPORAL 3
80
81 ///
82 /// PAL_CACHE_CONFIG_INFO1.StoreHint
83 ///
84 #define PAL_CACHE_STORE_TEMPORAL_LVL_1 0
85 #define PAL_CACHE_STORE_NONE_TEMPORAL_LVL_ALL 3
86
87 ///
88 /// PAL_CACHE_CONFIG_INFO1.StoreHint
89 ///
90 #define PAL_CACHE_LOAD_TEMPORAL_LVL_1 0
91 #define PAL_CACHE_LOAD_NONE_TEMPORAL_LVL_1 1
92 #define PAL_CACHE_LOAD_NONE_TEMPORAL_LVL_ALL 3
93
94 ///
95 /// Detail the characteristics of a given processor controlled
96 /// cache in the cache hierarchy.
97 ///
98 typedef struct {
99 UINT64 IsUnified : 1;
100 UINT64 Attributes : 2;
101 UINT64 Associativity:8;
102 UINT64 LineSize:8;
103 UINT64 Stride:8;
104 UINT64 StoreLatency:8;
105 UINT64 StoreHint:8;
106 UINT64 LoadHint:8;
107 } PAL_CACHE_INFO_RETURN1;
108
109 ///
110 /// Detail the characteristics of a given processor controlled
111 /// cache in the cache hierarchy.
112 ///
113 typedef struct {
114 UINT64 CacheSize:32;
115 UINT64 AliasBoundary:8;
116 UINT64 TagLsBits:8;
117 UINT64 TagMsBits:8;
118 } PAL_CACHE_INFO_RETURN2;
119
120 /**
121 PAL Procedure - PAL_CACHE_INFO.
122
123 Return detailed instruction or data cache information. It is
124 required by Itanium processors. The PAL procedure supports the Static
125 Registers calling convention. It could be called at virtual
126 mode and physical mode.
127
128 @param Index Index of PAL_CACHE_INFO within the list of
129 PAL procedures.
130 @param CacheLevel Unsigned 64-bit integer specifying the
131 level in the cache hierarchy for which
132 information is requested. This value must
133 be between 0 and one less than the value
134 returned in the cache_levels return value
135 from PAL_CACHE_SUMMARY.
136 @param CacheType Unsigned 64-bit integer with a value of 1
137 for instruction cache and 2 for data or
138 unified cache. All other values are
139 reserved.
140 @param Reserved Should be 0.
141
142 @retval 0 Call completed without error
143 @retval -2 Invalid argument
144 @retval -3 Call completed with error
145
146 @return R9 Detail the characteristics of a given
147 processor controlled cache in the cache
148 hierarchy. See PAL_CACHE_INFO_RETURN1.
149 @return R10 Detail the characteristics of a given
150 processor controlled cache in the cache
151 hierarchy. See PAL_CACHE_INFO_RETURN2.
152 @return R11 Reserved with 0.
153
154 **/
155 #define PAL_CACHE_INFO 2
156
157
158
159 ///
160 /// Level of PAL_CACHE_INIT.
161 ///
162 #define PAL_CACHE_INIT_ALL 0xffffffffffffffffULL
163
164 ///
165 /// CacheType
166 ///
167 #define PAL_CACHE_INIT_TYPE_INSTRUCTION 0x1
168 #define PAL_CACHE_INIT_TYPE_DATA 0x2
169 #define PAL_CACHE_INIT_TYPE_INSTRUCTION_AND_DATA 0x3
170
171 ///
172 /// Restrict of PAL_CACHE_INIT.
173 ///
174 #define PAL_CACHE_INIT_NO_RESTRICT 0
175 #define PAL_CACHE_INIT_RESTRICTED 1
176
177 /**
178 PAL Procedure - PAL_CACHE_INIT.
179
180 Initialize the instruction or data caches. It is required by
181 Itanium processors. The PAL procedure supports the Static Registers calling
182 convention. It could be called at physical mode.
183
184 @param Index Index of PAL_CACHE_INIT within the list of PAL
185 procedures.
186 @param Level Unsigned 64-bit integer containing the level of
187 cache to initialize. If the cache level can be
188 initialized independently, only that level will
189 be initialized. Otherwise
190 implementation-dependent side-effects will
191 occur.
192 @param CacheType Unsigned 64-bit integer with a value of 1 to
193 initialize the instruction cache, 2 to
194 initialize the data cache, or 3 to
195 initialize both. All other values are
196 reserved.
197 @param Restrict Unsigned 64-bit integer with a value of 0 or
198 1. All other values are reserved. If
199 restrict is 1 and initializing the specified
200 level and cache_type of the cache would
201 cause side-effects, PAL_CACHE_INIT will
202 return -4 instead of initializing the cache.
203
204 @retval 0 Call completed without error
205 @retval -2 Invalid argument
206 @retval -3 Call completed with error.
207 @retval -4 Call could not initialize the specified
208 level and cache_type of the cache without
209 side-effects and restrict was 1.
210
211 **/
212 #define PAL_CACHE_INIT 3
213
214
215 ///
216 /// PAL_CACHE_PROTECTION.Method.
217 ///
218 #define PAL_CACHE_PROTECTION_NONE_PROTECT 0
219 #define PAL_CACHE_PROTECTION_ODD_PROTECT 1
220 #define PAL_CACHE_PROTECTION_EVEN_PROTECT 2
221 #define PAL_CACHE_PROTECTION_ECC_PROTECT 3
222
223
224
225 ///
226 /// PAL_CACHE_PROTECTION.TagOrData.
227 ///
228 #define PAL_CACHE_PROTECTION_PROTECT_DATA 0
229 #define PAL_CACHE_PROTECTION_PROTECT_TAG 1
230 #define PAL_CACHE_PROTECTION_PROTECT_TAG_ANDTHEN_DATA 2
231 #define PAL_CACHE_PROTECTION_PROTECT_DATA_ANDTHEN_TAG 3
232
233 ///
234 /// 32-bit protection information structures.
235 ///
236 typedef struct {
237 UINT32 DataBits:8;
238 UINT32 TagProtLsb:6;
239 UINT32 TagProtMsb:6;
240 UINT32 ProtBits:6;
241 UINT32 Method:4;
242 UINT32 TagOrData:2;
243 } PAL_CACHE_PROTECTION;
244
245 /**
246 PAL Procedure - PAL_CACHE_PROT_INFO.
247
248 Return instruction or data cache protection information. It is
249 required by Itanium processors. The PAL procedure supports the Static
250 Registers calling convention. It could be called at physical
251 mode and Virtual mode.
252
253 @param Index Index of PAL_CACHE_PROT_INFO within the list of
254 PAL procedures.
255 @param CacheLevel Unsigned 64-bit integer specifying the level
256 in the cache hierarchy for which information
257 is requested. This value must be between 0
258 and one less than the value returned in the
259 cache_levels return value from
260 PAL_CACHE_SUMMARY.
261 @param CacheType Unsigned 64-bit integer with a value of 1
262 for instruction cache and 2 for data or
263 unified cache. All other values are
264 reserved.
265
266 @retval 0 Call completed without error
267 @retval -2 Invalid argument
268 @retval -3 Call completed with error.
269
270 @return R9 Detail the characteristics of a given
271 processor controlled cache in the cache
272 hierarchy. See PAL_CACHE_PROTECTION[0..1].
273 @return R10 Detail the characteristics of a given
274 processor controlled cache in the cache
275 hierarchy. See PAL_CACHE_PROTECTION[2..3].
276 @return R11 Detail the characteristics of a given
277 processor controlled cache in the cache
278 hierarchy. See PAL_CACHE_PROTECTION[4..5].
279
280 **/
281 #define PAL_CACHE_PROT_INFO 38
282
283 typedef struct {
284 UINT64 ThreadId : 16; ///< The thread identifier of the logical
285 ///< processor for which information is being
286 ///< returned. This value will be unique on a per core basis.
287 UINT64 Reserved1: 16;
288 UINT64 CoreId: 16; ///< The core identifier of the logical processor
289 ///< for which information is being returned.
290 ///< This value will be unique on a per physical
291 ///< processor package basis.
292 UINT64 Reserved2: 16;
293 } PAL_PCOC_N_CACHE_INFO1;
294
295
296 typedef struct {
297 UINT64 LogicalAddress : 16; ///< Logical address: geographical address
298 ///< of the logical processor for which
299 ///< information is being returned. This is
300 ///< the same value that is returned by the
301 ///< PAL_FIXED_ADDR procedure when it is
302 ///< called on the logical processor.
303 UINT64 Reserved1: 16;
304 UINT64 Reserved2: 32;
305 } PAL_PCOC_N_CACHE_INFO2;
306
307 /**
308 PAL Procedure - PAL_CACHE_SHARED_INFO.
309
310 Returns information on which logical processors share caches.
311 It is optional. The PAL procedure supports the Static
312 Registers calling convention. It could be called at physical
313 mode and Virtual mode.
314
315 @param Index Index of PAL_CACHE_SHARED_INFO within the list
316 of PAL procedures.
317 @param CacheLevel Unsigned 64-bit integer specifying the
318 level in the cache hierarchy for which
319 information is requested. This value must
320 be between 0 and one less than the value
321 returned in the cache_levels return value
322 from PAL_CACHE_SUMMARY.
323 @param CacheType Unsigned 64-bit integer with a value of 1
324 for instruction cache and 2 for data or
325 unified cache. All other values are
326 reserved.
327 @param ProcNumber Unsigned 64-bit integer that specifies for
328 which logical processor information is
329 being requested. This input argument must
330 be zero for the first call to this
331 procedure and can be a maximum value of
332 one less than the number of logical
333 processors sharing this cache, which is
334 returned by the num_shared return value.
335
336 @retval 0 Call completed without error
337 @retval -1 Unimplemented procedure
338 @retval -2 Invalid argument
339 @retval -3 Call completed with error.
340
341 @return R9 Unsigned integer that returns the number of
342 logical processors that share the processor
343 cache level and type, for which information was
344 requested.
345 @return R10 The format of PAL_PCOC_N_CACHE_INFO1.
346 @return R11 The format of PAL_PCOC_N_CACHE_INFO2.
347
348 **/
349 #define PAL_CACHE_SHARED_INFO 43
350
351
352 /**
353 PAL Procedure - PAL_CACHE_SUMMARY.
354
355 Return a summary of the cache hierarchy. It is required by
356 Itanium processors. The PAL procedure supports the Static Registers calling
357 convention. It could be called at physical mode and Virtual
358 mode.
359
360 @param Index Index of PAL_CACHE_SUMMARY within the list of
361 PAL procedures.
362
363 @retval 0 Call completed without error
364 @retval -2 Invalid argument
365 @retval -3 Call completed with error.
366
367 @return R9 CacheLevels Unsigned 64-bit integer denoting the
368 number of levels of cache
369 implemented by the processor.
370 Strictly, this is the number of
371 levels for which the cache
372 controller is integrated into the
373 processor (the cache SRAMs may be
374 external to the processor).
375 @return R10 UniqueCaches Unsigned 64-bit integer denoting the
376 number of unique caches implemented
377 by the processor. This has a maximum
378 of 2*cache_levels, but may be less
379 if any of the levels in the cache
380 hierarchy are unified caches or do
381 not have both instruction and data
382 caches.
383
384 **/
385 #define PAL_CACHE_SUMMARY 4
386
387
388 //
389 // Virtual Memory Attributes implemented by processor.
390 //
391 #define PAL_MEMORY_ATTR_WB 0
392 #define PAL_MEMORY_ATTR_WC 6
393 #define PAL_MEMORY_ATTR_UC 4
394 #define PAL_MEMORY_ATTR_UCE 5
395 #define PAL_MEMORY_ATTR_NATPAGE 7
396
397 /**
398 PAL Procedure - PAL_MEM_ATTRIB.
399
400 Return a list of supported memory attributes.. It is required
401 by Itanium processors. The PAL procedure supports the Static Registers calling
402 convention. It could be called at physical mode and Virtual
403 mode.
404
405 @param Index Index of PAL_MEM_ATTRIB within the list of PAL
406 procedures.
407
408 @retval 0 Call completed without error
409 @retval -2 Invalid argument
410 @retval -3 Call completed with error.
411
412 @return R9 Attributes 8-bit vector of memory attributes
413 implemented by processor. See Virtual
414 Memory Attributes above.
415
416 **/
417
418 #define PAL_MEM_ATTRIB 5
419
420 /**
421 PAL Procedure - PAL_PREFETCH_VISIBILITY.
422
423 Used in architected sequence to transition pages from a
424 cacheable, speculative attribute to an uncacheable attribute.
425 It is required by Itanium processors. The PAL procedure supports the Static
426 Registers calling convention. It could be called at physical
427 mode and Virtual mode.
428
429 @param Index Index of PAL_PREFETCH_VISIBILITY within the list
430 of PAL procedures.
431 @param TransitionType Unsigned integer specifying the type
432 of memory attribute transition that is
433 being performed.
434
435 @retval 1 Call completed without error; this
436 call is not necessary on remote
437 processors.
438 @retval 0 Call completed without error
439 @retval -2 Invalid argument
440 @retval -3 Call completed with error.
441
442 **/
443 #define PAL_PREFETCH_VISIBILITY 41
444
445 /**
446 PAL Procedure - PAL_PTCE_INFO.
447
448 Return information needed for ptc.e instruction to purge
449 entire TC. It is required by Itanium processors. The PAL procedure supports
450 the Static Registers calling convention. It could be called at
451 physical mode and Virtual mode.
452
453 @param Index Index of PAL_PTCE_INFO within the list
454 of PAL procedures.
455
456 @retval 0 Call completed without error
457 @retval -2 Invalid argument
458 @retval -3 Call completed with error.
459
460 @return R9 Unsigned 64-bit integer denoting the beginning
461 address to be used by the first PTCE instruction
462 in the purge loop.
463 @return R10 Two unsigned 32-bit integers denoting the loop
464 counts of the outer (loop 1) and inner (loop 2)
465 purge loops. count1 (loop 1) is contained in bits
466 63:32 of the parameter, and count2 (loop 2) is
467 contained in bits 31:0 of the parameter.
468 @return R11 Two unsigned 32-bit integers denoting the loop
469 strides of the outer (loop 1) and inner (loop 2)
470 purge loops. stride1 (loop 1) is contained in bits
471 63:32 of the parameter, and stride2 (loop 2) is
472 contained in bits 31:0 of the parameter.
473
474 **/
475 #define PAL_PTCE_INFO 6
476
477 typedef struct {
478 UINT64 NumberSets:8; ///< Unsigned 8-bit integer denoting the number
479 ///< of hash sets for the specified level
480 ///< (1=fully associative)
481 UINT64 NumberWays:8; ///< Unsigned 8-bit integer denoting the
482 ///< associativity of the specified level
483 ///< (1=direct).
484 UINT64 NumberEntries:16; ///< Unsigned 16-bit integer denoting the
485 ///< number of entries in the specified TC.
486 UINT64 PageSizeIsOptimized:1; ///< Flag denoting whether the
487 ///< specified level is optimized for
488 ///< the region's preferred page size
489 ///< (1=optimized) tc_pages indicates
490 ///< which page sizes are usable by
491 ///< this translation cache.
492 UINT64 TcIsUnified:1; ///< Flag denoting whether the specified TC is
493 ///< unified (1=unified).
494 UINT64 EntriesReduction:1; ///< Flag denoting whether installed
495 ///< translation registers will reduce
496 ///< the number of entries within the
497 ///< specified TC.
498 } PAL_TC_INFO;
499
500 /**
501 PAL Procedure - PAL_VM_INFO.
502
503 Return detailed information about virtual memory features
504 supported in the processor. It is required by Itanium processors. The PAL
505 procedure supports the Static Registers calling convention. It
506 could be called at physical mode and Virtual mode.
507
508 @param Index Index of PAL_VM_INFO within the list
509 of PAL procedures.
510 @param TcLevel Unsigned 64-bit integer specifying the level
511 in the TLB hierarchy for which information is
512 required. This value must be between 0 and one
513 less than the value returned in the
514 vm_info_1.num_tc_levels return value from
515 PAL_VM_SUMMARY.
516 @param TcType Unsigned 64-bit integer with a value of 1 for
517 instruction translation cache and 2 for data
518 or unified translation cache. All other values
519 are reserved.
520
521 @retval 0 Call completed without error
522 @retval -2 Invalid argument
523 @retval -3 Call completed with error.
524
525 @return R9 8-byte formatted value returning information
526 about the specified TC. See PAL_TC_INFO above.
527 @return R10 64-bit vector containing a bit for each page
528 size supported in the specified TC, where bit
529 position n indicates a page size of 2**n.
530
531 **/
532 #define PAL_VM_INFO 7
533
534
535 /**
536 PAL Procedure - PAL_VM_PAGE_SIZE.
537
538 Return virtual memory TC and hardware walker page sizes
539 supported in the processor. It is required by Itanium processors. The PAL
540 procedure supports the Static Registers calling convention. It
541 could be called at physical mode and Virtual mode.
542
543 @param Index Index of PAL_VM_PAGE_SIZE within the list
544 of PAL procedures.
545
546 @retval 0 Call completed without error
547 @retval -2 Invalid argument
548 @retval -3 Call completed with error.
549
550 @return R9 64-bit vector containing a bit for each
551 architected page size that is supported for
552 TLB insertions and region registers.
553 @return R10 64-bit vector containing a bit for each
554 architected page size supported for TLB purge
555 operations.
556
557 **/
558 #define PAL_VM_PAGE_SIZE 34
559
560 typedef struct {
561 UINT64 WalkerPresent:1; ///< 1-bit flag indicating whether a hardware
562 ///< TLB walker is implemented (1 = walker
563 ///< present).
564 UINT64 WidthOfPhysicalAddress: 7; ///< Unsigned 7-bit integer
565 ///< denoting the number of bits of
566 ///< physical address implemented.
567 UINT64 WidthOfKey:8; ///< Unsigned 8-bit integer denoting the number
568 ///< of bits mplemented in the PKR.key field.
569 UINT64 MaxPkrIndex:8; ///< Unsigned 8-bit integer denoting the
570 ///< maximum PKR index (number of PKRs-1).
571 UINT64 HashTagId:8; ///< Unsigned 8-bit integer which uniquely
572 ///< identifies the processor hash and tag
573 ///< algorithm.
574 UINT64 MaxDtrIndex:8; ///< Unsigned 8 bit integer denoting the
575 ///< maximum data translation register index
576 ///< (number of dtr entries - 1).
577 UINT64 MaxItrIndex:8; ///< Unsigned 8 bit integer denoting the
578 ///< maximum instruction translation register
579 ///< index (number of itr entries - 1).
580 UINT64 NumberOfUniqueTc:8; ///< Unsigned 8-bit integer denoting the
581 ///< number of unique TCs implemented.
582 ///< This is a maximum of
583 ///< 2*num_tc_levels.
584 UINT64 NumberOfTcLevels:8; ///< Unsigned 8-bit integer denoting the
585 ///< number of TC levels.
586 } PAL_VM_INFO1;
587
588 typedef struct {
589 UINT64 WidthOfVirtualAddress:8; ///< Unsigned 8-bit integer denoting
590 ///< is the total number of virtual
591 ///< address bits - 1.
592 UINT64 WidthOfRid:8; ///< Unsigned 8-bit integer denoting the number
593 ///< of bits implemented in the RR.rid field.
594 UINT64 MaxPurgedTlbs:16; ///< Unsigned 16 bit integer denoting the
595 ///< maximum number of concurrent outstanding
596 ///< TLB purges allowed by the processor. A
597 ///< value of 0 indicates one outstanding
598 ///< purge allowed. A value of 216-1
599 ///< indicates no limit on outstanding
600 ///< purges. All other values indicate the
601 ///< actual number of concurrent outstanding
602 ///< purges allowed.
603 UINT64 Reserved:32;
604 } PAL_VM_INFO2;
605
606 /**
607 PAL Procedure - PAL_VM_SUMMARY.
608
609 Return summary information about virtual memory features
610 supported in the processor. It is required by Itanium processors. The PAL
611 procedure supports the Static Registers calling convention. It
612 could be called at physical mode and Virtual mode.
613
614 @param Index Index of PAL_VM_SUMMARY within the list
615 of PAL procedures.
616
617 @retval 0 Call completed without error
618 @retval -2 Invalid argument
619 @retval -3 Call completed with error.
620
621 @return R9 8-byte formatted value returning global virtual
622 memory information. See PAL_VM_INFO1 above.
623 @return R10 8-byte formatted value returning global virtual
624 memory information. See PAL_VM_INFO2 above.
625
626 **/
627 #define PAL_VM_SUMMARY 8
628
629
630 //
631 // Bit mask of TR_valid flag.
632 //
633 #define PAL_TR_ACCESS_RIGHT_IS_VALID BIT0
634 #define PAL_TR_PRIVILEGE_LEVEL_IS_VALID BIT1
635 #define PAL_TR_DIRTY_IS_VALID BIT2
636 #define PAL_TR_MEMORY_ATTR_IS_VALID BIT3
637
638
639 /**
640 PAL Procedure - PAL_VM_TR_READ.
641
642 Read contents of a translation register. It is required by
643 Itanium processors. The PAL procedure supports the Stacked Register calling
644 convention. It could be called at physical mode.
645
646 @param Index Index of PAL_VM_TR_READ within the list
647 of PAL procedures.
648 @param RegNumber Unsigned 64-bit number denoting which TR to
649 read.
650 @param TrType Unsigned 64-bit number denoting whether to
651 read an ITR (0) or DTR (1). All other values
652 are reserved.
653 @param TrBuffer 64-bit pointer to the 32-byte memory buffer in
654 which translation data is returned.
655
656 @retval 0 Call completed without error
657 @retval -2 Invalid argument
658 @retval -3 Call completed with error.
659
660 @return R9 Formatted bit vector denoting which fields are
661 valid. See TR_valid above.
662
663 **/
664 #define PAL_VM_TR_READ 261
665
666
667
668
669 //
670 // Bit Mask of Processor Bus Fesatures .
671 //
672
673 /**
674
675 When 0, bus data errors are detected and single bit errors are
676 corrected. When 1, no error detection or correction is done.
677
678 **/
679 #define PAL_BUS_DISABLE_DATA_ERROR_SIGNALLING BIT63
680
681
682 /**
683
684 When 0, bus address errors are signalled on the bus. When 1,
685 no bus errors are signalled on the bus. If Disable Bus Address
686 Error Checking is 1, this bit is ignored.
687
688 **/
689 #define PAL_BUS_DISABLE_ADDRESS_ERROR_SIGNALLING BIT62
690
691
692
693
694 /**
695
696 When 0, bus errors are detected, single bit errors are
697 corrected., and a CMCI or MCA is generated internally to the
698 processor. When 1, no bus address errors are detected or
699 corrected.
700
701 **/
702 #define PAL_BUS_DISABLE_ADDRESS_ERROR_CHECK BIT61
703
704
705 /**
706
707 When 0, bus protocol errors (BINIT#) are signaled by the
708 processor on the bus. When 1, bus protocol errors (BINIT#) are
709 not signaled on the bus. If Disable Bus Initialization Event
710 Checking is 1, this bit is ignored.
711
712 **/
713 #define PAL_BUS_DISABLE_INITIALIZATION_EVENT_SIGNALLING BIT60
714
715
716 /**
717
718 When 0, bus protocol errors (BINIT#) are detected and sampled
719 and an MCA is generated internally to the processor. When 1,
720 the processor will ignore bus protocol error conditions
721 (BINIT#).
722
723 **/
724 #define PAL_BUS_DISABLE_INITIALIZATION_EVENT_CHECK BIT59
725
726
727
728 /**
729
730 When 0, BERR# is signalled if a bus error is detected. When 1,
731 bus errors are not signalled on the bus.
732
733 **/
734 #define PAL_BUS_DISABLE_ERROR_SIGNALLING BIT58
735
736
737
738
739 /**
740
741 When 0, BERR# is signalled when internal processor requestor
742 initiated bus errors are detected. When 1, internal requester
743 bus errors are not signalled on the bus.
744
745 **/
746 #define PAL_BUS_DISABLE__INTERNAL_ERROR_SIGNALLING BIT57
747
748
749 /**
750
751 When 0, the processor takes an MCA if BERR# is asserted. When
752 1, the processor ignores the BERR# signal.
753
754 **/
755 #define PAL_BUS_DISABLE_ERROR_CHECK BIT56
756
757
758 /**
759
760 When 0, the processor asserts BINIT# if it detects a parity
761 error on the signals which identify the transactions to which
762 this is a response. When 1, the processor ignores parity on
763 these signals.
764
765 **/
766 #define PAL_BUS_DISABLE_RSP_ERROR_CHECK BIT55
767
768
769 /**
770
771 When 0, the in-order transaction queue is limited only by the
772 number of hardware entries. When 1, the processor's in-order
773 transactions queue is limited to one entry.
774
775 **/
776 #define PAL_BUS_DISABLE_TRANSACTION_QUEUE BIT54
777
778 /**
779
780 Enable a bus cache line replacement transaction when a cache
781 line in the exclusive state is replaced from the highest level
782 processor cache and is not present in the lower level processor
783 caches. When 0, no bus cache line replacement transaction will
784 be seen on the bus. When 1, bus cache line replacement
785 transactions will be seen on the bus when the above condition is
786 detected.
787
788 **/
789 #define PAL_BUS_ENABLE_EXCLUSIVE_CACHE_LINE_REPLACEMENT BIT53
790
791
792 /**
793
794 Enable a bus cache line replacement transaction when a cache
795 line in the shared or exclusive state is replaced from the
796 highest level processor cache and is not present in the lower
797 level processor caches.
798 When 0, no bus cache line replacement transaction will be seen
799 on the bus. When 1, bus cache line replacement transactions
800 will be seen on the bus when the above condition is detected.
801
802 **/
803 #define PAL_BUS_ENABLE_SHARED_CACHE_LINE_REPLACEMENT BIT52
804
805
806
807 /**
808
809 When 0, the data bus is configured at the 2x data transfer
810 rate.When 1, the data bus is configured at the 1x data
811 transfer rate, 30 Opt. Req. Disable Bus Lock Mask. When 0, the
812 processor executes locked transactions atomically. When 1, the
813 processor masks the bus lock signal and executes locked
814 transactions as a non-atomic series of transactions.
815
816 **/
817 #define PAL_BUS_ENABLE_HALF_TRANSFER BIT30
818
819 /**
820
821 When 0, the processor will deassert bus request when finished
822 with each transaction. When 1, the processor will continue to
823 assert bus request after it has finished, if it was the last
824 agent to own the bus and if there are no other pending
825 requests.
826
827 **/
828 #define PAL_BUS_REQUEST_BUS_PARKING BIT29
829
830
831 /**
832 PAL Procedure - PAL_BUS_GET_FEATURES.
833
834 Return configurable processor bus interface features and their
835 current settings. It is required by Itanium processors. The PAL procedure
836 supports the Stacked Register calling convention. It could be
837 called at physical mode.
838
839 @param Index Index of PAL_BUS_GET_FEATURES within the list
840 of PAL procedures.
841
842 @retval 0 Call completed without error
843 @retval -2 Invalid argument
844 @retval -3 Call completed with error.
845
846 @return R9 64-bit vector of features implemented.
847 (1=implemented, 0=not implemented)
848 @return R10 64-bit vector of current feature settings.
849 @return R11 64-bit vector of features controllable by
850 software. (1=controllable, 0= not controllable)
851
852 **/
853 #define PAL_BUS_GET_FEATURES 9
854
855 /**
856 PAL Procedure - PAL_BUS_SET_FEATURES.
857
858 Enable or disable configurable features in processor bus
859 interface. It is required by Itanium processors. The PAL procedure
860 supports the Static Registers calling convention. It could be
861 called at physical mode.
862
863 @param Index Index of PAL_BUS_SET_FEATURES within the list
864 of PAL procedures.
865 @param FeatureSelect 64-bit vector denoting desired state of
866 each feature (1=select, 0=non-select).
867
868 @retval 0 Call completed without error
869 @retval -2 Invalid argument
870 @retval -3 Call completed with error.
871
872 **/
873 #define PAL_BUS_SET_FEATURES 10
874
875
876 /**
877 PAL Procedure - PAL_DEBUG_INFO.
878
879 Return the number of instruction and data breakpoint
880 registers. It is required by Itanium processors. The
881 PAL procedure supports the Static Registers calling
882 convention. It could be called at physical mode and virtual
883 mode.
884
885 @param Index Index of PAL_DEBUG_INFO within the list of PAL
886 procedures.
887
888 @retval 0 Call completed without error
889 @retval -2 Invalid argument
890 @retval -3 Call completed with error.
891
892 @return R9 Unsigned 64-bit integer denoting the number of
893 pairs of instruction debug registers implemented
894 by the processor.
895 @return R10 Unsigned 64-bit integer denoting the number of
896 pairs of data debug registers implemented by the
897 processor.
898
899 **/
900 #define PAL_DEBUG_INFO 11
901
902 /**
903 PAL Procedure - PAL_FIXED_ADDR.
904
905 Return the fixed component of a processor's directed address.
906 It is required by Itanium processors. The PAL
907 procedure supports the Static Registers calling convention. It
908 could be called at physical mode and virtual mode.
909
910 @param Index Index of PAL_FIXED_ADDR within the list of PAL
911 procedures.
912
913 @retval 0 Call completed without error
914 @retval -2 Invalid argument
915 @retval -3 Call completed with error.
916
917 @return R9 Fixed geographical address of this processor.
918
919 **/
920 #define PAL_FIXED_ADDR 12
921
922 /**
923 PAL Procedure - PAL_FREQ_BASE.
924
925 Return the frequency of the output clock for use by the
926 platform, if generated by the processor. It is optinal. The
927 PAL procedure supports the Static Registers calling
928 convention. It could be called at physical mode and virtual
929 mode.
930
931 @param Index Index of PAL_FREQ_BASE within the list of PAL
932 procedures.
933
934 @retval 0 Call completed without error
935 @retval -1 Unimplemented procedure
936 @retval -2 Invalid argument
937 @retval -3 Call completed with error.
938
939 @return R9 Base frequency of the platform if generated by the
940 processor chip.
941
942 **/
943 #define PAL_FREQ_BASE 13
944
945
946 /**
947 PAL Procedure - PAL_FREQ_RATIOS.
948
949 Return ratio of processor, bus, and interval time counter to
950 processor input clock or output clock for platform use, if
951 generated by the processor. It is required by Itanium processors. The PAL
952 procedure supports the Static Registers calling convention. It
953 could be called at physical mode and virtual mode.
954
955 @param Index Index of PAL_FREQ_RATIOS within the list of PAL
956 procedures.
957
958 @retval 0 Call completed without error
959 @retval -2 Invalid argument
960 @retval -3 Call completed with error.
961
962 @return R9 Ratio of the processor frequency to the input
963 clock of the processor, if the platform clock is
964 generated externally or to the output clock to the
965 platform, if the platform clock is generated by
966 the processor.
967 @return R10 Ratio of the bus frequency to the input clock of
968 the processor, if the platform clock is generated
969 externally or to the output clock to the platform,
970 if the platform clock is generated by the
971 processor.
972 @return R11 Ratio of the interval timer counter rate to input
973 clock of the processor, if the platform clock is
974 generated externally or to the output clock to the
975 platform, if the platform clock is generated by
976 the processor.
977
978 **/
979 #define PAL_FREQ_RATIOS 14
980
981 typedef struct {
982 UINT64 NumberOfLogicalProcessors:16; ///< Total number of logical
983 ///< processors on this physical
984 ///< processor package that are
985 ///< enabled.
986 UINT64 ThreadsPerCore:8; ///< Number of threads per core.
987 UINT64 Reserved1:8;
988 UINT64 CoresPerProcessor:8; ///< Total number of cores on this
989 ///< physical processor package.
990 UINT64 Reserved2:8;
991 UINT64 PhysicalProcessorPackageId:8; ///< Physical processor package
992 ///< identifier which was
993 ///< assigned at reset by the
994 ///< platform or bus
995 ///< controller. This value may
996 ///< or may not be unique
997 ///< across the entire platform
998 ///< since it depends on the
999 ///< platform vendor's policy.
1000 UINT64 Reserved3:8;
1001 } PAL_LOGICAL_PROCESSPR_OVERVIEW;
1002
1003 typedef struct {
1004 UINT64 ThreadId:16; ///< The thread identifier of the logical
1005 ///< processor for which information is being
1006 ///< returned. This value will be unique on a per
1007 ///< core basis.
1008 UINT64 Reserved1:16;
1009 UINT64 CoreId:16; ///< The core identifier of the logical processor
1010 ///< for which information is being returned.
1011 ///< This value will be unique on a per physical
1012 ///< processor package basis.
1013 UINT64 Reserved2:16;
1014 } PAL_LOGICAL_PROCESSORN_INFO1;
1015
1016 typedef struct {
1017 UINT64 LogicalAddress:16; ///< Geographical address of the logical
1018 ///< processor for which information is being
1019 ///< returned. This is the same value that is
1020 ///< returned by the PAL_FIXED_ADDR procedure
1021 ///< when it is called on the logical processor.
1022 UINT64 Reserved:48;
1023 } PAL_LOGICAL_PROCESSORN_INFO2;
1024
1025 /**
1026 PAL Procedure - PAL_LOGICAL_TO_PHYSICAL.
1027
1028 Return information on which logical processors map to a
1029 physical processor die. It is optinal. The PAL procedure
1030 supports the Static Registers calling convention. It could be
1031 called at physical mode and virtual mode.
1032
1033 @param Index Index of PAL_LOGICAL_TO_PHYSICAL within the list of PAL
1034 procedures.
1035 @param ProcessorNumber Signed 64-bit integer that specifies
1036 for which logical processor
1037 information is being requested. When
1038 this input argument is -1, information
1039 is returned about the logical
1040 processor on which the procedure call
1041 is made. This input argument must be
1042 in the range of 1 up to one less than
1043 the number of logical processors
1044 returned by num_log in the
1045 log_overview return value.
1046
1047 @retval 0 Call completed without error
1048 @retval -1 Unimplemented procedure
1049 @retval -2 Invalid argument
1050 @retval -3 Call completed with error.
1051
1052 @return R9 The format of PAL_LOGICAL_PROCESSPR_OVERVIEW.
1053 @return R10 The format of PAL_LOGICAL_PROCESSORN_INFO1.
1054 @return R11 The format of PAL_LOGICAL_PROCESSORN_INFO2.
1055
1056 **/
1057 #define PAL_LOGICAL_TO_PHYSICAL 42
1058
1059 typedef struct {
1060 UINT64 NumberOfPmcPairs:8; ///< Unsigned 8-bit number defining the
1061 ///< number of generic PMC/PMD pairs.
1062 UINT64 WidthOfCounter:8; ///< Unsigned 8-bit number in the range
1063 ///< 0:60 defining the number of
1064 ///< implemented counter bits.
1065 UINT64 TypeOfCycleCounting:8; ///< Unsigned 8-bit number defining the
1066 ///< event type for counting processor cycles.
1067 UINT64 TypeOfRetiredInstructionBundle:8; ///< Retired Unsigned 8-bit
1068 ///< number defining the
1069 ///< event type for retired
1070 ///< instruction bundles.
1071 UINT64 Reserved:32;
1072 } PAL_PERFORMANCE_INFO;
1073
1074 /**
1075 PAL Procedure - PAL_PERF_MON_INFO.
1076
1077 Return the number and type of performance monitors. It is
1078 required by Itanium processors. The PAL procedure supports the Static
1079 Registers calling convention. It could be called at physical
1080 mode and virtual mode.
1081
1082 @param Index Index of PAL_PERF_MON_INFO within the list of
1083 PAL procedures.
1084 @param PerformanceBuffer An address to an 8-byte aligned
1085 128-byte memory buffer.
1086
1087 @retval 0 Call completed without error
1088 @retval -2 Invalid argument
1089 @retval -3 Call completed with error.
1090
1091 @return R9 Information about the performance monitors
1092 implemented. See PAL_PERFORMANCE_INFO;
1093
1094 **/
1095 #define PAL_PERF_MON_INFO 15
1096
1097 #define PAL_PLATFORM_ADDR_INTERRUPT_BLOCK_TOKEN 0x0
1098 #define PAL_PLATFORM_ADDR_IO_BLOCK_TOKEN 0x1
1099
1100 /**
1101 PAL Procedure - PAL_PLATFORM_ADDR.
1102
1103 Specify processor interrupt block address and I/O port space
1104 address. It is required by Itanium processors. The PAL procedure supports the
1105 Static Registers calling convention. It could be called at
1106 physical mode and virtual mode.
1107
1108 @param Index Index of PAL_PLATFORM_ADDR within the list of
1109 PAL procedures.
1110 @param Type Unsigned 64-bit integer specifying the type of
1111 block. 0 indicates that the processor interrupt
1112 block pointer should be initialized. 1 indicates
1113 that the processor I/O block pointer should be
1114 initialized.
1115 @param Address Unsigned 64-bit integer specifying the address
1116 to which the processor I/O block or interrupt
1117 block shall be set. The address must specify
1118 an implemented physical address on the
1119 processor model, bit 63 is ignored.
1120
1121 @retval 0 Call completed without error
1122 @retval -1 Unimplemented procedure.
1123 @retval -2 Invalid argument
1124 @retval -3 Call completed with error.
1125
1126 **/
1127 #define PAL_PLATFORM_ADDR 16
1128
1129 typedef struct {
1130 UINT64 Reserved1:36;
1131 UINT64 FaultInUndefinedIns:1; ///< Bit36, No Unimplemented
1132 ///< instruction address reported as
1133 ///< fault. Denotes how the processor
1134 ///< reports the detection of
1135 ///< unimplemented instruction
1136 ///< addresses. When 1, the processor
1137 ///< reports an Unimplemented
1138 ///< Instruction Address fault on the
1139 ///< unimplemented address; when 0, it
1140 ///< reports an Unimplemented
1141 ///< Instruction Address trap on the
1142 ///< previous instruction in program
1143 ///< order. This feature may only be
1144 ///< interrogated by
1145 ///< PAL_PROC_GET_FEATURES. It may not
1146 ///< be enabled or disabled by
1147 ///< PAL_PROC_SET_FEATURES. The
1148 ///< corresponding argument is ignored.
1149
1150 UINT64 NoPresentPmi:1; ///< Bit37, No INIT, PMI, and LINT pins
1151 ///< present. Denotes the absence of INIT,
1152 ///< PMI, LINT0 and LINT1 pins on the
1153 ///< processor. When 1, the pins are absent.
1154 ///< When 0, the pins are present. This
1155 ///< feature may only be interrogated by
1156 ///< PAL_PROC_GET_FEATURES. It may not be
1157 ///< enabled or disabled by
1158 ///< PAL_PROC_SET_FEATURES. The corresponding
1159 ///< argument is ignored.
1160
1161 UINT64 NoSimpleImpInUndefinedIns:1; ///< Bit38, No Simple
1162 ///< implementation of
1163 ///< unimplemented instruction
1164 ///< addresses. Denotes how an
1165 ///< unimplemented instruction
1166 ///< address is recorded in IIP
1167 ///< on an Unimplemented
1168 ///< Instruction Address trap or
1169 ///< fault. When 1, the full
1170 ///< unimplemented address is
1171 ///< recorded in IIP; when 0, the
1172 ///< address is sign extended
1173 ///< (virtual addresses) or zero
1174 ///< extended (physical
1175 ///< addresses). This feature may
1176 ///< only be interrogated by
1177 ///< PAL_PROC_GET_FEATURES. It
1178 ///< may not be enabled or
1179 ///< disabled by
1180 ///< PAL_PROC_SET_FEATURES. The
1181 ///< corresponding argument is
1182 ///< ignored.
1183
1184 UINT64 NoVariablePState:1; ///< Bit39, No Variable P-state
1185 ///< performance: A value of 1, indicates
1186 ///< that a processor implements
1187 ///< techniques to optimize performance
1188 ///< for the given P-state power budget
1189 ///< by dynamically varying the
1190 ///< frequency, such that maximum
1191 ///< performance is achieved for the
1192 ///< power budget. A value of 0,
1193 ///< indicates that P-states have no
1194 ///< frequency variation or very small
1195 ///< frequency variations for their given
1196 ///< power budget. This feature may only
1197 ///< be interrogated by
1198 ///< PAL_PROC_GET_FEATURES. it may not be
1199 ///< enabled or disabled by
1200 ///< PAL_PROC_SET_FEATURES. The
1201 ///< corresponding argument is ignored.
1202
1203 UINT64 NoVM:1; ///< Bit40, No Virtual Machine features implemented.
1204 ///< Denotes whether PSR.vm is implemented. This
1205 ///< feature may only be interrogated by
1206 ///< PAL_PROC_GET_FEATURES. It may not be enabled or
1207 ///< disabled by PAL_PROC_SET_FEATURES. The
1208 ///< corresponding argument is ignored.
1209
1210 UINT64 NoXipXpsrXfs:1; ///< Bit41, No XIP, XPSR, and XFS
1211 ///< implemented. Denotes whether XIP, XPSR,
1212 ///< and XFS are implemented for machine
1213 ///< check recovery. This feature may only be
1214 ///< interrogated by PAL_PROC_GET_FEATURES.
1215 ///< It may not be enabled or disabled by
1216 ///< PAL_PROC_SET_FEATURES. The corresponding
1217 ///< argument is ignored.
1218
1219 UINT64 NoXr1ThroughXr3:1; ///< Bit42, No XR1 through XR3 implemented.
1220 ///< Denotes whether XR1 XR3 are
1221 ///< implemented for machine check
1222 ///< recovery. This feature may only be
1223 ///< interrogated by PAL_PROC_GET_FEATURES.
1224 ///< It may not be enabled or disabled by
1225 ///< PAL_PROC_SET_FEATURES. The
1226 ///< corresponding argument is ignored.
1227
1228 UINT64 DisableDynamicPrediction:1; ///< Bit43, Disable Dynamic
1229 ///< Predicate Prediction. When
1230 ///< 0, the processor may predict
1231 ///< predicate results and
1232 ///< execute speculatively, but
1233 ///< may not commit results until
1234 ///< the actual predicates are
1235 ///< known. When 1, the processor
1236 ///< shall not execute predicated
1237 ///< instructions until the
1238 ///< actual predicates are known.
1239
1240 UINT64 DisableSpontaneousDeferral:1; ///< Bit44, Disable Spontaneous
1241 ///< Deferral. When 1, the
1242 ///< processor may optionally
1243 ///< defer speculative loads
1244 ///< that do not encounter any
1245 ///< exception conditions, but
1246 ///< that trigger other
1247 ///< implementation-dependent
1248 ///< conditions (e.g., cache
1249 ///< miss). When 0, spontaneous
1250 ///< deferral is disabled.
1251
1252 UINT64 DisableDynamicDataCachePrefetch:1; ///< Bit45, Disable Dynamic
1253 ///< Data Cache Prefetch.
1254 ///< When 0, the processor
1255 ///< may prefetch into the
1256 ///< caches any data which
1257 ///< has not been accessed
1258 ///< by instruction
1259 ///< execution, but which
1260 ///< is likely to be
1261 ///< accessed. When 1, no
1262 ///< data may be fetched
1263 ///< until it is needed for
1264 ///< instruction execution
1265 ///< or is fetched by an
1266 ///< lfetch instruction.
1267
1268 UINT64 DisableDynamicInsCachePrefetch:1; ///< Bit46, Disable
1269 ///< DynamicInstruction Cache
1270 ///< Prefetch. When 0, the
1271 ///< processor may prefetch
1272 ///< into the caches any
1273 ///< instruction which has
1274 ///< not been executed, but
1275 ///< whose execution is
1276 ///< likely. When 1,
1277 ///< instructions may not be
1278 ///< fetched until needed or
1279 ///< hinted for execution.
1280 ///< (Prefetch for a hinted
1281 ///< branch is allowed even
1282 ///< when dynamic instruction
1283 ///< cache prefetch is
1284 ///< disabled.)
1285
1286 UINT64 DisableBranchPrediction:1; ///< Bit47, Disable Dynamic branch
1287 ///< prediction. When 0, the
1288 ///< processor may predict branch
1289 ///< targets and speculatively
1290 ///< execute, but may not commit
1291 ///< results. When 1, the processor
1292 ///< must wait until branch targets
1293 ///< are known to execute.
1294 UINT64 Reserved2:4;
1295 UINT64 DisablePState:1; ///< Bit52, Disable P-states. When 1, the PAL
1296 ///< P-state procedures (PAL_PSTATE_INFO,
1297 ///< PAL_SET_PSTATE, PAL_GET_PSTATE) will
1298 ///< return with a status of -1
1299 ///< (Unimplemented procedure).
1300
1301 UINT64 EnableMcaOnDataPoisoning:1; ///< Bit53, Enable MCA signaling
1302 ///< on data-poisoning event
1303 ///< detection. When 0, a CMCI
1304 ///< will be signaled on error
1305 ///< detection. When 1, an MCA
1306 ///< will be signaled on error
1307 ///< detection. If this feature
1308 ///< is not supported, then the
1309 ///< corresponding argument is
1310 ///< ignored when calling
1311 ///< PAL_PROC_SET_FEATURES. Note
1312 ///< that the functionality of
1313 ///< this bit is independent of
1314 ///< the setting in bit 60
1315 ///< (Enable CMCI promotion), and
1316 ///< that the bit 60 setting does
1317 ///< not affect CMCI signaling
1318 ///< for data-poisoning related
1319 ///< events. Volume 2: Processor
1320 ///< Abstraction Layer 2:431
1321 ///< PAL_PROC_GET_FEATURES
1322
1323 UINT64 EnableVmsw:1; ///< Bit54, Enable the use of the vmsw
1324 ///< instruction. When 0, the vmsw instruction
1325 ///< causes a Virtualization fault when
1326 ///< executed at the most privileged level.
1327 ///< When 1, this bit will enable normal
1328 ///< operation of the vmsw instruction.
1329
1330 UINT64 EnableEnvNotification:1; ///< Bit55, Enable external
1331 ///< notification when the processor
1332 ///< detects hardware errors caused
1333 ///< by environmental factors that
1334 ///< could cause loss of
1335 ///< deterministic behavior of the
1336 ///< processor. When 1, this bit will
1337 ///< enable external notification,
1338 ///< when 0 external notification is
1339 ///< not provided. The type of
1340 ///< external notification of these
1341 ///< errors is processor-dependent. A
1342 ///< loss of processor deterministic
1343 ///< behavior is considered to have
1344 ///< occurred if these
1345 ///< environmentally induced errors
1346 ///< cause the processor to deviate
1347 ///< from its normal execution and
1348 ///< eventually causes different
1349 ///< behavior which can be observed
1350 ///< at the processor bus pins.
1351 ///< Processor errors that do not
1352 ///< have this effects (i.e.,
1353 ///< software induced machine checks)
1354 ///< may or may not be promoted
1355 ///< depending on the processor
1356 ///< implementation.
1357
1358 UINT64 DisableBinitWithTimeout:1; ///< Bit56, Disable a BINIT on
1359 ///< internal processor time-out.
1360 ///< When 0, the processor may
1361 ///< generate a BINIT on an
1362 ///< internal processor time-out.
1363 ///< When 1, the processor will not
1364 ///< generate a BINIT on an
1365 ///< internal processor time-out.
1366 ///< The event is silently ignored.
1367
1368 UINT64 DisableDPM:1; ///< Bit57, Disable Dynamic Power Management
1369 ///< (DPM). When 0, the hardware may reduce
1370 ///< power consumption by removing the clock
1371 ///< input from idle functional units. When 1,
1372 ///< all functional units will receive clock
1373 ///< input, even when idle.
1374
1375 UINT64 DisableCoherency:1; ///< Bit58, Disable Coherency. When 0,
1376 ///< the processor uses normal coherency
1377 ///< requests and responses. When 1, the
1378 ///< processor answers all requests as if
1379 ///< the line were not present.
1380
1381 UINT64 DisableCache:1; ///< Bit59, Disable Cache. When 0, the
1382 ///< processor performs cast outs on
1383 ///< cacheable pages and issues and responds
1384 ///< to coherency requests normally. When 1,
1385 ///< the processor performs a memory access
1386 ///< for each reference regardless of cache
1387 ///< contents and issues no coherence
1388 ///< requests and responds as if the line
1389 ///< were not present. Cache contents cannot
1390 ///< be relied upon when the cache is
1391 ///< disabled. WARNING: Semaphore
1392 ///< instructions may not be atomic or may
1393 ///< cause Unsupported Data Reference faults
1394 ///< if caches are disabled.
1395
1396 UINT64 EnableCmciPromotion:1; ///< Bit60, Enable CMCI promotion When
1397 ///< 1, Corrected Machine Check
1398 ///< Interrupts (CMCI) are promoted to
1399 ///< MCAs. They are also further
1400 ///< promoted to BERR if bit 39, Enable
1401 ///< MCA promotion, is also set and
1402 ///< they are promoted to BINIT if bit
1403 ///< 38, Enable MCA to BINIT promotion,
1404 ///< is also set. This bit has no
1405 ///< effect if MCA signalling is
1406 ///< disabled (see
1407 ///< PAL_BUS_GET/SET_FEATURES)
1408
1409 UINT64 EnableMcaToBinitPromotion:1; ///< Bit61, Enable MCA to BINIT
1410 ///< promotion. When 1, machine
1411 ///< check aborts (MCAs) are
1412 ///< promoted to the Bus
1413 ///< Initialization signal, and
1414 ///< the BINIT pin is assert on
1415 ///< each occurrence of an MCA.
1416 ///< Setting this bit has no
1417 ///< effect if BINIT signalling
1418 ///< is disabled. (See
1419 ///< PAL_BUS_GET/SET_FEATURES)
1420
1421 UINT64 EnableMcaPromotion:1; ///< Bit62, Enable MCA promotion. When
1422 ///< 1, machine check aborts (MCAs) are
1423 ///< promoted to the Bus Error signal,
1424 ///< and the BERR pin is assert on each
1425 ///< occurrence of an MCA. Setting this
1426 ///< bit has no effect if BERR
1427 ///< signalling is disabled. (See
1428 ///< PAL_BUS_GET/SET_FEATURES)
1429
1430 UINT64 EnableBerrPromotion:1; ///< Bit63. Enable BERR promotion. When
1431 ///< 1, the Bus Error (BERR) signal is
1432 ///< promoted to the Bus Initialization
1433 ///< (BINIT) signal, and the BINIT pin
1434 ///< is asserted on the occurrence of
1435 ///< each Bus Error. Setting this bit
1436 ///< has no effect if BINIT signalling
1437 ///< is disabled. (See
1438 ///< PAL_BUS_GET/SET_FEATURES)
1439 } PAL_PROCESSOR_FEATURES;
1440
1441 /**
1442 PAL Procedure - PAL_PROC_GET_FEATURES.
1443
1444 Return configurable processor features and their current
1445 setting. It is required by Itanium processors. The PAL procedure supports the
1446 Static Registers calling convention. It could be called at
1447 physical mode and virtual mode.
1448
1449 @param Index Index of PAL_PROC_GET_FEATURES within the list of
1450 PAL procedures.
1451 @param Reserved Reserved parameter.
1452 @param FeatureSet Feature set information is being requested
1453 for.
1454
1455 @retval 1 Call completed without error; The
1456 feature_set passed is not supported but a
1457 feature_set of a larger value is supported.
1458 @retval 0 Call completed without error
1459 @retval -2 Invalid argument
1460 @retval -3 Call completed with error.
1461 @retval -8 feature_set passed is beyond the maximum
1462 feature_set supported
1463
1464 @return R9 64-bit vector of features implemented. See
1465 PAL_PROCESSOR_FEATURES.
1466 @return R10 64-bit vector of current feature settings. See
1467 PAL_PROCESSOR_FEATURES.
1468 @return R11 64-bit vector of features controllable by
1469 software.
1470
1471 **/
1472 #define PAL_PROC_GET_FEATURES 17
1473
1474
1475 /**
1476 PAL Procedure - PAL_PROC_SET_FEATURES.
1477
1478 Enable or disable configurable processor features. It is
1479 required by Itanium processors. The PAL procedure supports the Static
1480 Registers calling convention. It could be called at physical
1481 mode.
1482
1483 @param Index Index of PAL_PROC_SET_FEATURES within the list of
1484 PAL procedures.
1485 @param FeatureSelect 64-bit vector denoting desired state of
1486 each feature (1=select, 0=non-select).
1487 @param FeatureSet Feature set to apply changes to. See
1488 PAL_PROC_GET_FEATURES for more information
1489 on feature sets.
1490
1491 @retval 1 Call completed without error; The
1492 feature_set passed is not supported but a
1493 feature_set of a larger value is supported
1494 @retval 0 Call completed without error
1495 @retval -2 Invalid argument
1496 @retval -3 Call completed with error.
1497 @retval -8 feature_set passed is beyond the maximum
1498 feature_set supported
1499
1500 **/
1501 #define PAL_PROC_SET_FEATURES 18
1502
1503
1504 //
1505 // Value of PAL_REGISTER_INFO.InfoRequest.
1506 //
1507 #define PAL_APPLICATION_REGISTER_IMPLEMENTED 0
1508 #define PAL_APPLICATION_REGISTER_READABLE 1
1509 #define PAL_CONTROL_REGISTER_IMPLEMENTED 2
1510 #define PAL_CONTROL_REGISTER_READABLE 3
1511
1512
1513 /**
1514 PAL Procedure - PAL_REGISTER_INFO.
1515
1516 Return AR and CR register information. It is required by Itanium processors.
1517 The PAL procedure supports the Static Registers calling
1518 convention. It could be called at physical mode and virtual
1519 mode.
1520
1521 @param Index Index of PAL_REGISTER_INFO within the list of
1522 PAL procedures.
1523 @param InfoRequest Unsigned 64-bit integer denoting what
1524 register information is requested. See
1525 PAL_REGISTER_INFO.InfoRequest above.
1526
1527 @retval 0 Call completed without error
1528 @retval -2 Invalid argument
1529 @retval -3 Call completed with error.
1530
1531 @return R9 64-bit vector denoting information for registers
1532 0-63. Bit 0 is register 0, bit 63 is register 63.
1533 @return R10 64-bit vector denoting information for registers
1534 64-127. Bit 0 is register 64, bit 63 is register
1535 127.
1536
1537 **/
1538 #define PAL_REGISTER_INFO 39
1539
1540 /**
1541 PAL Procedure - PAL_RSE_INFO.
1542
1543 Return RSE information. It is required by Itanium processors. The PAL
1544 procedure supports the Static Registers calling convention. It
1545 could be called at physical mode and virtual mode.
1546
1547 @param Index Index of PAL_RSE_INFO within the list of
1548 PAL procedures.
1549 @param InfoRequest Unsigned 64-bit integer denoting what
1550 register information is requested. See
1551 PAL_REGISTER_INFO.InfoRequest above.
1552
1553 @retval 0 Call completed without error
1554 @retval -2 Invalid argument
1555 @retval -3 Call completed with error.
1556
1557 @return R9 Number of physical stacked general registers.
1558 @return R10 RSE hints supported by processor.
1559
1560 **/
1561 #define PAL_RSE_INFO 19
1562
1563 typedef struct {
1564 UINT64 VersionOfPalB:16; ///< Is a 16-bit binary coded decimal (BCD)
1565 ///< number that provides identification
1566 ///< information about the PAL_B firmware.
1567 UINT64 Reserved1:8;
1568 UINT64 PalVendor:8; ///< Is an unsigned 8-bit integer indicating the
1569 ///< vendor of the PAL code.
1570 UINT64 VersionOfPalA:16; ///< Is a 16-bit binary coded decimal (BCD)
1571 ///< number that provides identification
1572 ///< information about the PAL_A firmware. In
1573 ///< the split PAL_A model, this return value
1574 ///< is the version number of the
1575 ///< processor-specific PAL_A. The generic
1576 ///< PAL_A version is not returned by this
1577 ///< procedure in the split PAL_A model.
1578 UINT64 Reserved2:16;
1579 } PAL_VERSION_INFO;
1580
1581 /**
1582 PAL Procedure - PAL_VERSION.
1583
1584 Return version of PAL code. It is required by Itanium processors. The PAL
1585 procedure supports the Static Registers calling convention. It
1586 could be called at physical mode and virtual mode.
1587
1588 @param Index Index of PAL_VERSION within the list of
1589 PAL procedures.
1590 @param InfoRequest Unsigned 64-bit integer denoting what
1591 register information is requested. See
1592 PAL_REGISTER_INFO.InfoRequest above.
1593
1594 @retval 0 Call completed without error
1595 @retval -2 Invalid argument
1596 @retval -3 Call completed with error.
1597
1598 @return R9 8-byte formatted value returning the minimum PAL
1599 version needed for proper operation of the
1600 processor. See PAL_VERSION_INFO above.
1601 @return R10 8-byte formatted value returning the current PAL
1602 version running on the processor. See
1603 PAL_VERSION_INFO above.
1604
1605 **/
1606 #define PAL_VERSION 20
1607
1608
1609
1610 //
1611 // Vectors of PAL_MC_CLEAR_LOG.pending
1612 //
1613 #define PAL_MC_PENDING BIT0
1614 #define PAL_INIT_PENDING BIT1
1615
1616 /**
1617 PAL Procedure - PAL_MC_CLEAR_LOG.
1618
1619 Clear all error information from processor error logging
1620 registers. It is required by Itanium processors. The PAL procedure supports
1621 the Static Registers calling convention. It could be called at
1622 physical mode and virtual mode.
1623
1624 @param Index Index of PAL_MC_CLEAR_LOG within the list of
1625 PAL procedures.
1626
1627 @retval 0 Call completed without error
1628 @retval -2 Invalid argument
1629 @retval -3 Call completed with error.
1630
1631 @return R9 64-bit vector denoting whether an event is
1632 pending. See PAL_MC_CLEAR_LOG.pending above.
1633
1634 **/
1635 #define PAL_MC_CLEAR_LOG 21
1636
1637 /**
1638 PAL Procedure - PAL_MC_DRAIN.
1639
1640 Ensure that all operations that could cause an MCA have
1641 completed. It is required by Itanium processors. The PAL procedure supports
1642 the Static Registers calling convention. It could be called at
1643 physical mode and virtual mode.
1644
1645 @param Index Index of PAL_MC_DRAIN within the list of PAL
1646 procedures.
1647
1648 @retval 0 Call completed without error
1649 @retval -2 Invalid argument
1650 @retval -3 Call completed with error.
1651
1652 **/
1653 #define PAL_MC_DRAIN 22
1654
1655
1656 /**
1657 PAL Procedure - PAL_MC_DYNAMIC_STATE.
1658
1659 Return Processor Dynamic State for logging by SAL. It is
1660 optional. The PAL procedure supports the Static Registers
1661 calling convention. It could be called at physical mode.
1662
1663 @param Index Index of PAL_MC_DYNAMIC_STATE within the list of PAL
1664 procedures.
1665 @param Offset Offset of the next 8 bytes of Dynamic Processor
1666 State to return. (multiple of 8).
1667
1668 @retval 0 Call completed without error
1669 @retval -1 Unimplemented procedure.
1670 @retval -2 Invalid argument
1671 @retval -3 Call completed with error.
1672
1673 @return R9 Unsigned 64-bit integer denoting bytes of Dynamic
1674 Processor State returned.
1675 @return R10 Next 8 bytes of Dynamic Processor State.
1676
1677 **/
1678 #define PAL_MC_DYNAMIC_STATE 24
1679
1680
1681
1682 //
1683 // Values of PAL_MC_ERROR_INFO.InfoIndex.
1684 //
1685 #define PAL_PROCESSOR_ERROR_MAP 0
1686 #define PAL_PROCESSOR_STATE_PARAM 1
1687 #define PAL_STRUCTURE_SPECIFIC_ERROR 2
1688
1689 typedef struct {
1690 UINT64 CoreId:4; ///< Bit3:0, Processor core ID (default is 0 for
1691 ///< processors with a single core)
1692
1693 UINT64 ThreadId:4; ///< Bit7:4, Logical thread ID (default is 0 for
1694 ///< processors that execute a single thread)
1695
1696 UINT64 InfoOfInsCache:4; ///< Bit11:8, Error information is
1697 ///< available for 1st, 2nd, 3rd, and 4th
1698 ///< level instruction caches.
1699
1700 UINT64 InfoOfDataCache:4; ///< Bit15:12, Error information is
1701 ///< available for 1st, 2nd, 3rd, and 4th
1702 ///< level data/unified caches.
1703
1704 UINT64 InfoOfInsTlb:4; ///< Bit19:16 Error information is available
1705 ///< for 1st, 2nd, 3rd, and 4th level
1706 ///< instruction TLB.
1707
1708 UINT64 InfoOfDataTlb:4; ///< Bit23:20, Error information is available
1709 ///< for 1st, 2nd, 3rd, and 4th level
1710 ///< data/unified TLB
1711
1712 UINT64 InfoOfProcessorBus:4; ///< Bit27:24 Error information is
1713 ///< available for the 1st, 2nd, 3rd,
1714 ///< and 4th level processor bus
1715 ///< hierarchy.
1716 UINT64 InfoOfRegisterFile:4; ///< Bit31:28 Error information is
1717 ///< available on register file
1718 ///< structures.
1719 UINT64 InfoOfMicroArch:4; ///< Bit47:32, Error information is
1720 ///< available on micro-architectural
1721 ///< structures.
1722 UINT64 Reserved:16;
1723 } PAL_MC_ERROR_INFO_LEVEL_INDEX;
1724
1725 //
1726 // Value of PAL_MC_ERROR_INFO.ErrorTypeIndex
1727 //
1728 #define PAL_ERR_INFO_BY_LEVEL_INDEX 0
1729 #define PAL_ERR_INFO_TARGET_ADDRESS 1
1730 #define PAL_ERR_INFO_REQUESTER_IDENTIFIER 2
1731 #define PAL_ERR_INFO_REPONSER_INDENTIFIER 3
1732 #define PAL_ERR_INFO_PRECISE_INSTRUCTION_POINTER 4
1733
1734 typedef struct {
1735 UINT64 Operation:4; ///< Bit3:0, Type of cache operation that caused
1736 ///< the machine check: 0 - unknown or internal
1737 ///< error 1 - load 2 - store 3 - instruction
1738 ///< fetch or instruction prefetch 4 - data
1739 ///< prefetch (both hardware and software) 5 -
1740 ///< snoop (coherency check) 6 - cast out
1741 ///< (explicit or implicit write-back of a cache
1742 ///< line) 7 - move in (cache line fill)
1743
1744 UINT64 FailedCacheLevel:2; ///< Bit5:4 Level of cache where the
1745 ///< error occurred. A value of 0
1746 ///< indicates the first level of cache.
1747 UINT64 Reserved1:2;
1748 UINT64 FailedInDataPart:1; ///< Bit8, Failure located in the data part of the cache line.
1749 UINT64 FailedInTagPart:1; ///< Bit9, Failure located in the tag part of the cache line.
1750 UINT64 FailedInDataCache:1; ///< Bit10, Failure located in the data cache
1751
1752 UINT64 FailedInInsCache:1; ///< Bit11, Failure located in the
1753 ///< instruction cache.
1754
1755 UINT64 Mesi:3; ///< Bit14:12, 0 - cache line is invalid. 1 - cache
1756 ///< line is held shared. 2 - cache line is held
1757 ///< exclusive. 3 - cache line is modified. All other
1758 ///< values are reserved.
1759
1760 UINT64 MesiIsValid:1; ///< Bit15, The mesi field in the cache_check
1761 ///< parameter is valid.
1762
1763 UINT64 FailedWay:5; ///< Bit20:16, Failure located in the way of
1764 ///< the cache indicated by this value.
1765
1766 UINT64 WayIndexIsValid:1; ///< Bit21, The way and index field in the
1767 ///< cache_check parameter is valid.
1768
1769 UINT64 Reserved2:1;
1770 UINT64 MultipleBitsError:1; ///< Bit23, A multiple-bit error was
1771 ///< detected, and data was poisoned for
1772 ///< the corresponding cache line during
1773 ///< castout.
1774 UINT64 Reserved3:8;
1775 UINT64 IndexOfCacheLineError:20; ///< Bit51:32, Index of the cache
1776 ///< line where the error occurred.
1777 UINT64 Reserved4:2;
1778
1779 UINT64 InstructionSet:1; ///< Bit54, Instruction set. If this value
1780 ///< is set to zero, the instruction that
1781 ///< generated the machine check was an
1782 ///< Intel Itanium instruction. If this bit
1783 ///< is set to one, the instruction that
1784 ///< generated the machine check was IA-32
1785 ///< instruction.
1786
1787 UINT64 InstructionSetIsValid:1; ///< Bit55, The is field in the
1788 ///< cache_check parameter is valid.
1789
1790 UINT64 PrivilegeLevel:2; ///< Bit57:56, Privilege level. The
1791 ///< privilege level of the instruction
1792 ///< bundle responsible for generating the
1793 ///< machine check.
1794
1795 UINT64 PrivilegeLevelIsValide:1; ///< Bit58, The pl field of the
1796 ///< cache_check parameter is
1797 ///< valid.
1798
1799 UINT64 McCorrected:1; ///< Bit59, Machine check corrected: This bit
1800 ///< is set to one to indicate that the machine
1801 ///< check has been corrected.
1802
1803 UINT64 TargetAddressIsValid:1; ///< Bit60, Target address is valid:
1804 ///< This bit is set to one to
1805 ///< indicate that a valid target
1806 ///< address has been logged.
1807
1808 UINT64 RequesterIdentifier:1; ///< Bit61, Requester identifier: This
1809 ///< bit is set to one to indicate that
1810 ///< a valid requester identifier has
1811 ///< been logged.
1812
1813 UINT64 ResponserIdentifier:1; ///< Bit62, Responder identifier: This
1814 ///< bit is set to one to indicate that
1815 ///< a valid responder identifier has
1816 ///< been logged.
1817
1818 UINT64 PreciseInsPointer:1; ///< Bit63, Precise instruction pointer.
1819 ///< This bit is set to one to indicate
1820 ///< that a valid precise instruction
1821 ///< pointer has been logged.
1822
1823 } PAL_CACHE_CHECK_INFO;
1824
1825
1826 typedef struct {
1827 UINT64 FailedSlot:8; ///< Bit7:0, Slot number of the translation
1828 ///< register where the failure occurred.
1829 UINT64 FailedSlotIsValid:1; ///< Bit8, The tr_slot field in the
1830 ///< TLB_check parameter is valid.
1831 UINT64 Reserved1 :1;
1832 UINT64 TlbLevel:2; ///< Bit11:10, The level of the TLB where the
1833 ///< error occurred. A value of 0 indicates the
1834 ///< first level of TLB
1835 UINT64 Reserved2 :4;
1836
1837 UINT64 FailedInDataTr:1; ///< Bit16, Error occurred in the data
1838 ///< translation registers.
1839
1840 UINT64 FailedInInsTr:1; ///< Bit17, Error occurred in the instruction
1841 ///< translation registers
1842
1843 UINT64 FailedInDataTc:1; ///< Bit18, Error occurred in data
1844 ///< translation cache.
1845
1846 UINT64 FailedInInsTc:1; ///< Bit19, Error occurred in the instruction
1847 ///< translation cache.
1848
1849 UINT64 FailedOperation:4; ///< Bit23:20, Type of cache operation that
1850 ///< caused the machine check: 0 - unknown
1851 ///< 1 - TLB access due to load instruction
1852 ///< 2 - TLB access due to store
1853 ///< instruction 3 - TLB access due to
1854 ///< instruction fetch or instruction
1855 ///< prefetch 4 - TLB access due to data
1856 ///< prefetch (both hardware and software)
1857 ///< 5 - TLB shoot down access 6 - TLB
1858 ///< probe instruction (probe, tpa) 7 -
1859 ///< move in (VHPT fill) 8 - purge (insert
1860 ///< operation that purges entries or a TLB
1861 ///< purge instruction) All other values
1862 ///< are reserved.
1863
1864 UINT64 Reserved3:30;
1865 UINT64 InstructionSet:1; ///< Bit54, Instruction set. If this value
1866 ///< is set to zero, the instruction that
1867 ///< generated the machine check was an
1868 ///< Intel Itanium instruction. If this bit
1869 ///< is set to one, the instruction that
1870 ///< generated the machine check was IA-32
1871 ///< instruction.
1872
1873 UINT64 InstructionSetIsValid:1; ///< Bit55, The is field in the
1874 ///< TLB_check parameter is valid.
1875
1876 UINT64 PrivelegeLevel:2; ///< Bit57:56, Privilege level. The
1877 ///< privilege level of the instruction
1878 ///< bundle responsible for generating the
1879 ///< machine check.
1880
1881 UINT64 PrivelegeLevelIsValid:1; ///< Bit58, The pl field of the
1882 ///< TLB_check parameter is valid.
1883
1884 UINT64 McCorrected:1; ///< Bit59, Machine check corrected: This bit
1885 ///< is set to one to indicate that the machine
1886 ///< check has been corrected.
1887
1888 UINT64 TargetAddressIsValid:1; ///< Bit60, Target address is valid:
1889 ///< This bit is set to one to
1890 ///< indicate that a valid target
1891 ///< address has been logged.
1892
1893 UINT64 RequesterIdentifier:1; ///< Bit61 Requester identifier: This
1894 ///< bit is set to one to indicate that
1895 ///< a valid requester identifier has
1896 ///< been logged.
1897
1898 UINT64 ResponserIdentifier:1; ///< Bit62, Responder identifier: This
1899 ///< bit is set to one to indicate that
1900 ///< a valid responder identifier has
1901 ///< been logged.
1902
1903 UINT64 PreciseInsPointer:1; ///< Bit63 Precise instruction pointer.
1904 ///< This bit is set to one to indicate
1905 ///< that a valid precise instruction
1906 ///< pointer has been logged.
1907 } PAL_TLB_CHECK_INFO;
1908
1909 /**
1910 PAL Procedure - PAL_MC_ERROR_INFO.
1911
1912 Return Processor Machine Check Information and Processor
1913 Static State for logging by SAL. It is required by Itanium processors. The
1914 PAL procedure supports the Static Registers calling
1915 convention. It could be called at physical and virtual mode.
1916
1917 @param Index Index of PAL_MC_ERROR_INFO within the list of PAL
1918 procedures.
1919 @param InfoIndex Unsigned 64-bit integer identifying the
1920 error information that is being requested.
1921 See PAL_MC_ERROR_INFO.InfoIndex.
1922 @param LevelIndex 8-byte formatted value identifying the
1923 structure to return error information
1924 on. See PAL_MC_ERROR_INFO_LEVEL_INDEX.
1925 @param ErrorTypeIndex Unsigned 64-bit integer denoting the
1926 type of error information that is
1927 being requested for the structure
1928 identified in LevelIndex.
1929
1930 @retval 0 Call completed without error
1931 @retval -2 Invalid argument
1932 @retval -3 Call completed with error.
1933 @retval -6 Argument was valid, but no error
1934 information was available
1935
1936 @return R9 Error information returned. The format of this
1937 value is dependant on the input values passed.
1938 @return R10 If this value is zero, all the error information
1939 specified by err_type_index has been returned. If
1940 this value is one, more structure-specific error
1941 information is available and the caller needs to
1942 make this procedure call again with level_index
1943 unchanged and err_type_index, incremented.
1944
1945 **/
1946 #define PAL_MC_ERROR_INFO 25
1947
1948 /**
1949 PAL Procedure - PAL_MC_EXPECTED.
1950
1951 Set/Reset Expected Machine Check Indicator. It is required by
1952 Itanium processors. The PAL procedure supports the Static Registers calling
1953 convention. It could be called at physical mode.
1954
1955 @param Index Index of PAL_MC_EXPECTED within the list of PAL
1956 procedures.
1957 @param Expected Unsigned integer with a value of 0 or 1 to
1958 set or reset the hardware resource
1959 PALE_CHECK examines for expected machine
1960 checks.
1961
1962 @retval 0 Call completed without error
1963 @retval -2 Invalid argument
1964 @retval -3 Call completed with error.
1965
1966 @return R9 Unsigned integer denoting whether a machine check
1967 was previously expected.
1968
1969 **/
1970 #define PAL_MC_EXPECTED 23
1971
1972 /**
1973 PAL Procedure - PAL_MC_REGISTER_MEM.
1974
1975 Register min-state save area with PAL for machine checks and
1976 inits. It is required by Itanium processors. The PAL procedure supports the
1977 Static Registers calling convention. It could be called at
1978 physical mode.
1979
1980 @param Index Index of PAL_MC_REGISTER_MEM within the list of PAL
1981 procedures.
1982 @param Address Physical address of the buffer to be
1983 registered with PAL.
1984
1985 @retval 0 Call completed without error
1986 @retval -2 Invalid argument
1987 @retval -3 Call completed with error.
1988
1989 **/
1990 #define PAL_MC_REGISTER_MEM 27
1991
1992 /**
1993 PAL Procedure - PAL_MC_RESUME.
1994
1995 Restore minimal architected state and return to interrupted
1996 process. It is required by Itanium processors. The PAL procedure supports the
1997 Static Registers calling convention. It could be called at
1998 physical mode.
1999
2000 @param Index Index of PAL_MC_RESUME within the list of PAL
2001 procedures.
2002 @param SetCmci Unsigned 64 bit integer denoting whether to
2003 set the CMC interrupt. A value of 0 indicates
2004 not to set the interrupt, a value of 1
2005 indicated to set the interrupt, and all other
2006 values are reserved.
2007 @param SavePtr Physical address of min-state save area used
2008 to used to restore processor state.
2009 @param NewContext Unsigned 64-bit integer denoting whether
2010 the caller is returning to a new context.
2011 A value of 0 indicates the caller is
2012 returning to the interrupted context, a
2013 value of 1 indicates that the caller is
2014 returning to a new context.
2015
2016 @retval -2 Invalid argument
2017 @retval -3 Call completed with error.
2018
2019 **/
2020 #define PAL_MC_RESUME 26
2021
2022 /**
2023 PAL Procedure - PAL_HALT.
2024
2025 Enter the low-power HALT state or an implementation-dependent
2026 low-power state. It is optinal. The PAL procedure supports the
2027 Static Registers calling convention. It could be called at
2028 physical mode.
2029
2030 @param Index Index of PAL_HALT within the list of PAL
2031 procedures.
2032 @param HaltState Unsigned 64-bit integer denoting low power
2033 state requested.
2034 @param IoDetailPtr 8-byte aligned physical address pointer to
2035 information on the type of I/O
2036 (load/store) requested.
2037
2038 @retval 0 Call completed without error
2039 @retval -1 Unimplemented procedure
2040 @retval -2 Invalid argument
2041 @retval -3 Call completed with error.
2042
2043 @return R9 Value returned if a load instruction is requested
2044 in the io_detail_ptr
2045
2046 **/
2047 #define PAL_HALT 28
2048
2049
2050 /**
2051 PAL Procedure - PAL_HALT_INFO.
2052
2053 Return the low power capabilities of the processor. It is
2054 required by Itanium processors. The PAL procedure supports the
2055 Stacked Registers calling convention. It could be called at
2056 physical and virtual mode.
2057
2058 @param Index Index of PAL_HALT_INFO within the list of PAL
2059 procedures.
2060 @param PowerBuffer 64-bit pointer to a 64-byte buffer aligned
2061 on an 8-byte boundary.
2062
2063 @retval 0 Call completed without error
2064 @retval -2 Invalid argument
2065 @retval -3 Call completed with error.
2066
2067 **/
2068 #define PAL_HALT_INFO 257
2069
2070
2071 /**
2072 PAL Procedure - PAL_HALT_LIGHT.
2073
2074 Enter the low power LIGHT HALT state. It is required by
2075 Itanium processors. The PAL procedure supports the Static Registers calling
2076 convention. It could be called at physical and virtual mode.
2077
2078 @param Index Index of PAL_HALT_LIGHT within the list of PAL
2079 procedures.
2080
2081 @retval 0 Call completed without error
2082 @retval -2 Invalid argument
2083 @retval -3 Call completed with error.
2084
2085 **/
2086 #define PAL_HALT_LIGHT 29
2087
2088 /**
2089 PAL Procedure - PAL_CACHE_LINE_INIT.
2090
2091 Initialize tags and data of a cache line for processor
2092 testing. It is required by Itanium processors. The PAL procedure supports the
2093 Static Registers calling convention. It could be called at
2094 physical and virtual mode.
2095
2096 @param Index Index of PAL_CACHE_LINE_INIT within the list of PAL
2097 procedures.
2098 @param Address Unsigned 64-bit integer value denoting the
2099 physical address from which the physical page
2100 number is to be generated. The address must be
2101 an implemented physical address, bit 63 must
2102 be zero.
2103 @param DataValue 64-bit data value which is used to
2104 initialize the cache line.
2105
2106 @retval 0 Call completed without error
2107 @retval -2 Invalid argument
2108 @retval -3 Call completed with error.
2109
2110 **/
2111 #define PAL_CACHE_LINE_INIT 31
2112
2113 /**
2114 PAL Procedure - PAL_CACHE_READ.
2115
2116 Read tag and data of a cache line for diagnostic testing. It
2117 is optional. The PAL procedure supports the
2118 Satcked Registers calling convention. It could be called at
2119 physical mode.
2120
2121 @param Index Index of PAL_CACHE_READ within the list of PAL
2122 procedures.
2123 @param LineId 8-byte formatted value describing where in the
2124 cache to read the data.
2125 @param Address 64-bit 8-byte aligned physical address from
2126 which to read the data. The address must be an
2127 implemented physical address on the processor
2128 model with bit 63 set to zero.
2129
2130 @retval 1 The word at address was found in the
2131 cache, but the line was invalid.
2132 @retval 0 Call completed without error
2133 @retval -2 Invalid argument
2134 @retval -3 Call completed with error.
2135 @retval -5 The word at address was not found in the
2136 cache.
2137 @retval -7 The operation requested is not supported
2138 for this cache_type and level.
2139
2140 @return R9 Right-justified value returned from the cache
2141 line.
2142 @return R10 The number of bits returned in data.
2143 @return R11 The status of the cache line.
2144
2145 **/
2146 #define PAL_CACHE_READ 259
2147
2148
2149 /**
2150 PAL Procedure - PAL_CACHE_WRITE.
2151
2152 Write tag and data of a cache for diagnostic testing. It is
2153 optional. The PAL procedure supports the Satcked Registers
2154 calling convention. It could be called at physical mode.
2155
2156 @param Index Index of PAL_CACHE_WRITE within the list of PAL
2157 procedures.
2158 @param LineId 8-byte formatted value describing where in the
2159 cache to write the data.
2160 @param Address 64-bit 8-byte aligned physical address at
2161 which the data should be written. The address
2162 must be an implemented physical address on the
2163 processor model with bit 63 set to 0.
2164 @param Data Unsigned 64-bit integer value to write into
2165 the specified part of the cache.
2166
2167 @retval 0 Call completed without error
2168 @retval -2 Invalid argument
2169 @retval -3 Call completed with error.
2170 @retval -7 The operation requested is not supported
2171 for this cache_type and level.
2172
2173 **/
2174 #define PAL_CACHE_WRITE 260
2175
2176 /**
2177 PAL Procedure - PAL_TEST_INFO.
2178
2179 Returns alignment and size requirements needed for the memory
2180 buffer passed to the PAL_TEST_PROC procedure as well as
2181 information on self-test control words for the processor self
2182 tests. It is required by Itanium processors. The PAL procedure supports the
2183 Static Registers calling convention. It could be called at
2184 physical mode.
2185
2186 @param Index Index of PAL_TEST_INFO within the list of PAL
2187 procedures.
2188 @param TestPhase Unsigned integer that specifies which phase
2189 of the processor self-test information is
2190 being requested on. A value of 0 indicates
2191 the phase two of the processor self-test and
2192 a value of 1 indicates phase one of the
2193 processor self-test. All other values are
2194 reserved.
2195
2196 @retval 0 Call completed without error
2197 @retval -2 Invalid argument
2198 @retval -3 Call completed with error.
2199
2200 @return R9 Unsigned 64-bit integer denoting the number of
2201 bytes of main memory needed to perform the second
2202 phase of processor self-test.
2203 @return R10 Unsigned 64-bit integer denoting the alignment
2204 required for the memory buffer.
2205 @return R11 48-bit wide bit-field indicating if control of
2206 the processor self-tests is supported and which
2207 bits of the test_control field are defined for
2208 use.
2209
2210 **/
2211 #define PAL_TEST_INFO 37
2212
2213 typedef struct {
2214 UINT64 BufferSize:56; ///< Indicates the size in bytes of the memory
2215 ///< buffer that is passed to this procedure.
2216 ///< BufferSize must be greater than or equal in
2217 ///< size to the bytes_needed return value from
2218 ///< PAL_TEST_INFO, otherwise this procedure will
2219 ///< return with an invalid argument return
2220 ///< value.
2221
2222 UINT64 TestPhase:8; ///< Defines which phase of the processor
2223 ///< self-tests are requested to be run. A value
2224 ///< of zero indicates to run phase two of the
2225 ///< processor self-tests. Phase two of the
2226 ///< processor self-tests are ones that require
2227 ///< external memory to execute correctly. A
2228 ///< value of one indicates to run phase one of
2229 ///< the processor self-tests. Phase one of the
2230 ///< processor self-tests are tests run during
2231 ///< PALE_RESET and do not depend on external
2232 ///< memory to run correctly. When the caller
2233 ///< requests to have phase one of the processor
2234 ///< self-test run via this procedure call, a
2235 ///< memory buffer may be needed to save and
2236 ///< restore state as required by the PAL calling
2237 ///< conventions. The procedure PAL_TEST_INFO
2238 ///< informs the caller about the requirements of
2239 ///< the memory buffer.
2240 } PAL_TEST_INFO_INFO;
2241
2242 typedef struct {
2243 UINT64 TestControl:47; ///< This is an ordered implementation-specific
2244 ///< control word that allows the user control
2245 ///< over the length and runtime of the
2246 ///< processor self-tests. This control word is
2247 ///< ordered from the longest running tests up
2248 ///< to the shortest running tests with bit 0
2249 ///< controlling the longest running test. PAL
2250 ///< may not implement all 47-bits of the
2251 ///< test_control word. PAL communicates if a
2252 ///< bit provides control by placing a zero in
2253 ///< that bit. If a bit provides no control,
2254 ///< PAL will place a one in it. PAL will have
2255 ///< two sets of test_control bits for the two
2256 ///< phases of the processor self-test. PAL
2257 ///< provides information about implemented
2258 ///< test_control bits at the hand-off from PAL
2259 ///< to SAL for the firmware recovery check.
2260 ///< These test_control bits provide control
2261 ///< for phase one of processor self-test. It
2262 ///< also provides this information via the PAL
2263 ///< procedure call PAL_TEST_INFO for both the
2264 ///< phase one and phase two processor tests
2265 ///< depending on which information the caller
2266 ///< is requesting. PAL interprets these bits
2267 ///< as input parameters on two occasions. The
2268 ///< first time is when SAL passes control back
2269 ///< to PAL after the firmware recovery check.
2270 ///< The second time is when a call to
2271 ///< PAL_TEST_PROC is made. When PAL interprets
2272 ///< these bits it will only interpret
2273 ///< implemented test_control bits and will
2274 ///< ignore the values located in the
2275 ///< unimplemented test_control bits. PAL
2276 ///< interprets the implemented bits such that
2277 ///< if a bit contains a zero, this indicates
2278 ///< to run the test. If a bit contains a one,
2279 ///< this indicates to PAL to skip the test. If
2280 ///< the cs bit indicates that control is not
2281 ///< available, the test_control bits will be
2282 ///< ignored or generate an illegal argument in
2283 ///< procedure calls if the caller sets these
2284 ///< bits.
2285
2286 UINT64 ControlSupport:1; ///< This bit defines if an implementation
2287 ///< supports control of the PAL self-tests
2288 ///< via the self-test control word. If
2289 ///< this bit is 0, the implementation does
2290 ///< not support control of the processor
2291 ///< self-tests via the self-test control
2292 ///< word. If this bit is 1, the
2293 ///< implementation does support control of
2294 ///< the processor self-tests via the
2295 ///< self-test control word. If control is
2296 ///< not supported, GR37 will be ignored at
2297 ///< the hand-off between SAL and PAL after
2298 ///< the firmware recovery check and the
2299 ///< PAL procedures related to the
2300 ///< processor self-tests may return
2301 ///< illegal arguments if a user tries to
2302 ///< use the self-test control features.
2303 UINT64 Reserved:16;
2304 } PAL_SELF_TEST_CONTROL;
2305
2306 typedef struct {
2307 UINT64 Attributes:8; ///< Specifies the memory attributes that are
2308 ///< allowed to be used with the memory buffer
2309 ///< passed to this procedure. The attributes
2310 ///< parameter is a vector where each bit
2311 ///< represents one of the virtual memory
2312 ///< attributes defined by the architecture.See
2313 ///< MEMORY_AATRIBUTES. The caller is required
2314 ///< to support the cacheable attribute for the
2315 ///< memory buffer, otherwise an invalid
2316 ///< argument will be returned.
2317 UINT64 Reserved:8;
2318 UINT64 TestControl:48; ///< Is the self-test control word
2319 ///< corresponding to the test_phase passed.
2320 ///< This test_control directs the coverage and
2321 ///< runtime of the processor self-tests
2322 ///< specified by the test_phase input
2323 ///< argument. Information on if this
2324 ///< feature is implemented and the number of
2325 ///< bits supported can be obtained by the
2326 ///< PAL_TEST_INFO procedure call. If this
2327 ///< feature is implemented by the processor,
2328 ///< the caller can selectively skip parts of
2329 ///< the processor self-test by setting
2330 ///< test_control bits to a one. If a bit has a
2331 ///< zero, this test will be run. The values in
2332 ///< the unimplemented bits are ignored. If
2333 ///< PAL_TEST_INFO indicated that the self-test
2334 ///< control word is not implemented, this
2335 ///< procedure will return with an invalid
2336 ///< argument status if the caller sets any of
2337 ///< the test_control bits. See
2338 ///< PAL_SELF_TEST_CONTROL.
2339 } PAL_TEST_CONTROL;
2340
2341 /**
2342 PAL Procedure - PAL_TEST_PROC.
2343
2344 Perform late processor self test. It is required by Itanium processors. The
2345 PAL procedure supports the Static Registers calling
2346 convention. It could be called at physical mode.
2347
2348 @param Index Index of PAL_TEST_PROC within the list of PAL
2349 procedures.
2350 @param TestAddress 64-bit physical address of main memory
2351 area to be used by processor self-test.
2352 The memory region passed must be
2353 cacheable, bit 63 must be zero.
2354 @param TestInfo Input argument specifying the size of the
2355 memory buffer passed and the phase of the
2356 processor self-test that should be run. See
2357 PAL_TEST_INFO.
2358 @param TestParam Input argument specifying the self-test
2359 control word and the allowable memory
2360 attributes that can be used with the memory
2361 buffer. See PAL_TEST_CONTROL.
2362
2363 @retval 1 Call completed without error, but hardware
2364 failures occurred during self-test.
2365 @retval 0 Call completed without error
2366 @retval -2 Invalid argument
2367 @retval -3 Call completed with error.
2368
2369 @return R9 Formatted 8-byte value denoting the state of the
2370 processor after self-test
2371
2372 **/
2373 #define PAL_TEST_PROC 258
2374
2375 typedef struct {
2376 UINT32 NumberOfInterruptControllers; ///< Number of interrupt
2377 ///< controllers currently
2378 ///< enabled on the system.
2379
2380 UINT32 NumberOfProcessors; ///< Number of processors currently
2381 ///< enabled on the system.
2382 } PAL_PLATFORM_INFO;
2383
2384 /**
2385 PAL Procedure - PAL_COPY_INFO.
2386
2387 Return information needed to relocate PAL procedures and PAL
2388 PMI code to memory. It is required by Itanium processors. The PAL procedure
2389 supports the Static Registers calling convention. It could be
2390 called at physical mode.
2391
2392 @param Index Index of PAL_COPY_INFO within the list of PAL
2393 procedures.
2394 @param CopyType Unsigned integer denoting type of procedures
2395 for which copy information is requested.
2396 @param PlatformInfo 8-byte formatted value describing the
2397 number of processors and the number of
2398 interrupt controllers currently enabled
2399 on the system. See PAL_PLATFORM_INFO.
2400 @param McaProcStateInfo Unsigned integer denoting the number
2401 of bytes that SAL needs for the
2402 min-state save area for each
2403 processor.
2404
2405 @retval 0 Call completed without error
2406 @retval -2 Invalid argument
2407 @retval -3 Call completed with error.
2408
2409 @return R9 Unsigned integer denoting the number of bytes of
2410 PAL information that must be copied to main
2411 memory.
2412 @return R10 Unsigned integer denoting the starting alignment
2413 of the data to be copied.
2414
2415 **/
2416 #define PAL_COPY_INFO 30
2417
2418 /**
2419 PAL Procedure - PAL_COPY_PAL.
2420
2421 Relocate PAL procedures and PAL PMI code to memory. It is
2422 required by Itanium processors. The PAL procedure supports the Stacked
2423 Registers calling convention. It could be called at physical
2424 mode.
2425
2426 @param Index Index of PAL_COPY_PAL within the list of PAL
2427 procedures.
2428 @param TargetAddress Physical address of a memory buffer to
2429 copy relocatable PAL procedures and PAL
2430 PMI code.
2431 @param AllocSize Unsigned integer denoting the size of the
2432 buffer passed by SAL for the copy operation.
2433 @param CopyOption Unsigned integer indicating whether
2434 relocatable PAL code and PAL PMI code
2435 should be copied from firmware address
2436 space to main memory.
2437
2438 @retval 0 Call completed without error
2439 @retval -2 Invalid argument
2440 @retval -3 Call completed with error.
2441
2442 @return R9 Unsigned integer denoting the offset of PAL_PROC
2443 in the relocatable segment copied.
2444
2445 **/
2446 #define PAL_COPY_PAL 256
2447
2448 /**
2449 PAL Procedure - PAL_ENTER_IA_32_ENV.
2450
2451 Enter IA-32 System environment. It is optional. The PAL
2452 procedure supports the Static Registers calling convention.
2453 It could be called at physical mode.
2454
2455 Note: Since this is a special call, it does not follow the PAL
2456 static register calling convention. GR28 contains the index of
2457 PAL_ENTER_IA_32_ENV within the list of PAL procedures. All other
2458 input arguments including GR29-GR31 are setup by SAL to values
2459 as required by the IA-32 operating system defined in Table
2460 11-67. The registers that are designated as preserved, scratch,
2461 input arguments and procedure return values by the static
2462 procedure calling convention are not followed by this call. For
2463 instance, GR5 and GR6 need not be preserved since these are
2464 regarded as scratch by the IA-32 operating system. Note: In an
2465 MP system, this call must be COMPLETED on the first CPU to enter
2466 the IA-32 System Environment (may or may not be the BSP) prior
2467 to being called on the remaining processors in the MP system.
2468
2469 @param Index GR28 contains the index of the
2470 PAL_ENTER_IA_32_ENV call within the list of PAL
2471 procedures.
2472
2473
2474 @retval The status is returned in GR4.
2475 -1 - Un-implemented procedure 0 JMPE detected
2476 at privilege level
2477
2478 0 - 1 SAL allocated buffer for IA-32 System
2479 Environment operation is too small
2480
2481 2 - IA-32 Firmware Checksum Error
2482
2483 3 - SAL allocated buffer for IA-32 System
2484 Environment operation is not properly aligned
2485
2486 4 - Error in SAL MP Info Table
2487
2488 5 - Error in SAL Memory Descriptor Table
2489
2490 6 - Error in SAL System Table
2491
2492 7 - Inconsistent IA-32 state
2493
2494 8 - IA-32 Firmware Internal Error
2495
2496 9 - IA-32 Soft Reset (Note: remaining register
2497 state is undefined for this termination
2498 reason)
2499
2500 10 - Machine Check Error
2501
2502 11 - Error in SAL I/O Intercept Table
2503
2504 12 - Processor exit due to other processor in
2505 MP system terminating the IA32 system
2506 environment. (Note: remaining register state
2507 is undefined for this termination reason.)
2508
2509 13 - Itanium architecture-based state
2510 corruption by either SAL PMI handler or I/O
2511 Intercept callback function.
2512
2513
2514 **/
2515 #define PAL_ENTER_IA_32_ENV 33
2516
2517 /**
2518 PAL Procedure - PAL_PMI_ENTRYPOINT.
2519
2520 Register PMI memory entrypoints with processor. It is required
2521 by Itanium processors. The PAL procedure supports the Stacked Registers
2522 calling convention. It could be called at physical mode.
2523
2524 @param Index Index of PAL_PMI_ENTRYPOINT within the list of
2525 PAL procedures.
2526 @param SalPmiEntry 256-byte aligned physical address of SAL
2527 PMI entrypoint in memory.
2528
2529 @retval 0 Call completed without error
2530 @retval -2 Invalid argument
2531 @retval -3 Call completed with error.
2532
2533 **/
2534 #define PAL_PMI_ENTRYPOINT 32
2535
2536
2537 /**
2538
2539 The ASCII brand identification string will be copied to the
2540 address specified in the address input argument. The processor
2541 brand identification string is defined to be a maximum of 128
2542 characters long; 127 bytes will contain characters and the 128th
2543 byte is defined to be NULL (0). A processor may return less than
2544 the 127 ASCII characters as long as the string is null
2545 terminated. The string length will be placed in the brand_info
2546 return argument.
2547
2548 **/
2549 #define PAL_BRAND_INFO_ID_REQUEST 0
2550
2551 /**
2552 PAL Procedure - PAL_BRAND_INFO.
2553
2554 Provides processor branding information. It is optional by
2555 Itanium processors. The PAL procedure supports the Stacked Registers calling
2556 convention. It could be called at physical and Virtual mode.
2557
2558 @param Index Index of PAL_BRAND_INFO within the list of PAL
2559 procedures.
2560 @param InfoRequest Unsigned 64-bit integer specifying the
2561 information that is being requested. (See
2562 PAL_BRAND_INFO_ID_REQUEST)
2563 @param Address Unsigned 64-bit integer specifying the
2564 address of the 128-byte block to which the
2565 processor brand string shall be written.
2566
2567 @retval 0 Call completed without error
2568 @retval -1 Unimplemented procedure
2569 @retval -2 Invalid argument
2570 @retval -3 Call completed with error.
2571 @retval -6 Input argument is not implemented.
2572
2573 @return R9 Brand information returned. The format of this
2574 value is dependent on the input values passed.
2575
2576 **/
2577 #define PAL_BRAND_INFO 274
2578
2579 /**
2580 PAL Procedure - PAL_GET_HW_POLICY.
2581
2582 Returns the current hardware resource sharing policy of the
2583 processor. It is optional by Itanium processors. The PAL procedure supports
2584 the Static Registers calling convention. It could be called at
2585 physical and Virtual mode.
2586
2587
2588 @param Index Index of PAL_GET_HW_POLICY within the list of PAL
2589 procedures.
2590 @param ProcessorNumber Unsigned 64-bit integer that specifies
2591 for which logical processor
2592 information is being requested. This
2593 input argument must be zero for the
2594 first call to this procedure and can
2595 be a maximum value of one less than
2596 the number of logical processors
2597 impacted by the hardware resource
2598 sharing policy, which is returned by
2599 the R10 return value.
2600
2601 @retval 0 Call completed without error
2602 @retval -1 Unimplemented procedure
2603 @retval -2 Invalid argument
2604 @retval -3 Call completed with error.
2605 @retval -9 Call requires PAL memory buffer.
2606
2607 @return R9 Unsigned 64-bit integer representing the current
2608 hardware resource sharing policy.
2609 @return R10 Unsigned 64-bit integer that returns the number
2610 of logical processors impacted by the policy
2611 input argument.
2612 @return R11 Unsigned 64-bit integer containing the logical
2613 address of one of the logical processors
2614 impacted by policy modification.
2615
2616 **/
2617 #define PAL_GET_HW_POLICY 48
2618
2619
2620 //
2621 // Value of PAL_SET_HW_POLICY.Policy
2622 //
2623 #define PAL_SET_HW_POLICY_PERFORMANCE 0
2624 #define PAL_SET_HW_POLICY_FAIRNESS 1
2625 #define PAL_SET_HW_POLICY_HIGH_PRIORITY 2
2626 #define PAL_SET_HW_POLICY_EXCLUSIVE_HIGH_PRIORITY 3
2627
2628 /**
2629 PAL Procedure - PAL_SET_HW_POLICY.
2630
2631 Sets the current hardware resource sharing policy of the
2632 processor. It is optional by Itanium processors. The PAL procedure supports
2633 the Static Registers calling convention. It could be called at
2634 physical and Virtual mode.
2635
2636 @param Index Index of PAL_SET_HW_POLICY within the list of PAL
2637 procedures.
2638 @param Policy Unsigned 64-bit integer specifying the hardware
2639 resource sharing policy the caller is setting.
2640 See Value of PAL_SET_HW_POLICY.Policy above.
2641
2642 @retval 1 Call completed successfully but could not
2643 change the hardware policy since a
2644 competing logical processor is set in
2645 exclusive high priority.
2646 @retval 0 Call completed without error
2647 @retval -1 Unimplemented procedure
2648 @retval -2 Invalid argument
2649 @retval -3 Call completed with error.
2650 @retval -9 Call requires PAL memory buffer.
2651
2652 **/
2653 #define PAL_SET_HW_POLICY 49
2654
2655 typedef struct {
2656 UINT64 Mode:3; ///< Bit2:0, Indicates the mode of operation for this
2657 ///< procedure: 0 - Query mode 1 - Error inject mode
2658 ///< (err_inj should also be specified) 2 - Cancel
2659 ///< outstanding trigger. All other fields in
2660 ///< PAL_MC_ERROR_TYPE_INFO,
2661 ///< PAL_MC_ERROR_STRUCTURE_INFO and
2662 ///< PAL_MC_ERROR_DATA_BUFFER are ignored. All other
2663 ///< values are reserved.
2664
2665 UINT64 ErrorInjection:3; ///< Bit5:3, indicates the mode of error
2666 ///< injection: 0 - Error inject only (no
2667 ///< error consumption) 1 - Error inject
2668 ///< and consume All other values are
2669 ///< reserved.
2670
2671 UINT64 ErrorSeverity:2; ///< Bit7:6, indicates the severity desired
2672 ///< for error injection/query. Definitions
2673 ///< of the different error severity types
2674 ///< 0 - Corrected error 1 - Recoverable
2675 ///< error 2 - Fatal error 3 - Reserved
2676
2677 UINT64 ErrorStructure:5; ///< Bit12:8, Indicates the structure
2678 ///< identification for error
2679 ///< injection/query: 0 - Any structure
2680 ///< (cannot be used during query mode).
2681 ///< When selected, the structure type used
2682 ///< for error injection is determined by
2683 ///< PAL. 1 - Cache 2 - TLB 3 - Register
2684 ///< file 4 - Bus/System interconnect 5-15
2685 ///< - Reserved 16-31 - Processor
2686 ///< specific error injection
2687 ///< capabilities.ErrorDataBuffer is used
2688 ///< to specify error types. Please refer
2689 ///< to the processor specific
2690 ///< documentation for additional details.
2691
2692 UINT64 StructureHierarchy:3; ///< Bit15:13, Indicates the structure
2693 ///< hierarchy for error
2694 ///< injection/query: 0 - Any level of
2695 ///< hierarchy (cannot be used during
2696 ///< query mode). When selected, the
2697 ///< structure hierarchy used for error
2698 ///< injection is determined by PAL. 1
2699 ///< - Error structure hierarchy
2700 ///< level-1 2 - Error structure
2701 ///< hierarchy level-2 3 - Error
2702 ///< structure hierarchy level-3 4 -
2703 ///< Error structure hierarchy level-4
2704 ///< All other values are reserved.
2705
2706 UINT64 Reserved:32; ///< Reserved 47:16 Reserved
2707
2708 UINT64 ImplSpec:16; ///< Bit63:48, Processor specific error injection capabilities.
2709 } PAL_MC_ERROR_TYPE_INFO;
2710
2711 typedef struct {
2712 UINT64 StructInfoIsValid:1; ///< Bit0 When 1, indicates that the
2713 ///< structure information fields
2714 ///< (c_t,cl_p,cl_id) are valid and
2715 ///< should be used for error injection.
2716 ///< When 0, the structure information
2717 ///< fields are ignored, and the values
2718 ///< of these fields used for error
2719 ///< injection are
2720 ///< implementation-specific.
2721
2722 UINT64 CacheType:2; ///< Bit2:1 Indicates which cache should be used
2723 ///< for error injection: 0 - Reserved 1 -
2724 ///< Instruction cache 2 - Data or unified cache
2725 ///< 3 - Reserved
2726
2727 UINT64 PortionOfCacheLine:3; ///< Bit5:3 Indicates the portion of the
2728 ///< cache line where the error should
2729 ///< be injected: 0 - Reserved 1 - Tag
2730 ///< 2 - Data 3 - mesi All other
2731 ///< values are reserved.
2732
2733 UINT64 Mechanism:3; ///< Bit8:6 Indicates which mechanism is used to
2734 ///< identify the cache line to be used for error
2735 ///< injection: 0 - Reserved 1 - Virtual address
2736 ///< provided in the inj_addr field of the buffer
2737 ///< pointed to by err_data_buffer should be used
2738 ///< to identify the cache line for error
2739 ///< injection. 2 - Physical address provided in
2740 ///< the inj_addr field of the buffer pointed to
2741 ///< by err_data_buffershould be used to identify
2742 ///< the cache line for error injection. 3 - way
2743 ///< and index fields provided in err_data_buffer
2744 ///< should be used to identify the cache line
2745 ///< for error injection. All other values are
2746 ///< reserved.
2747
2748 UINT64 DataPoisonOfCacheLine:1; ///< Bit9 When 1, indicates that a
2749 ///< multiple bit, non-correctable
2750 ///< error should be injected in the
2751 ///< cache line specified by cl_id.
2752 ///< If this injected error is not
2753 ///< consumed, it may eventually
2754 ///< cause a data-poisoning event
2755 ///< resulting in a corrected error
2756 ///< signal, when the associated
2757 ///< cache line is cast out (implicit
2758 ///< or explicit write-back of the
2759 ///< cache line). The error severity
2760 ///< specified by err_sev in
2761 ///< err_type_info must be set to 0
2762 ///< (corrected error) when this bit
2763 ///< is set.
2764
2765 UINT64 Reserved1:22;
2766
2767 UINT64 TrigerInfoIsValid:1; ///< Bit32 When 1, indicates that the
2768 ///< trigger information fields (trigger,
2769 ///< trigger_pl) are valid and should be
2770 ///< used for error injection. When 0,
2771 ///< the trigger information fields are
2772 ///< ignored and error injection is
2773 ///< performed immediately.
2774
2775 UINT64 Triger:4; ///< Bit36:33 Indicates the operation type to be
2776 ///< used as the error trigger condition. The
2777 ///< address corresponding to the trigger is
2778 ///< specified in the trigger_addr field of the
2779 ///< buffer pointed to by err_data_buffer: 0 -
2780 ///< Instruction memory access. The trigger match
2781 ///< conditions for this operation type are similar
2782 ///< to the IBR address breakpoint match conditions
2783 ///< 1 - Data memory access. The trigger match
2784 ///< conditions for this operation type are similar
2785 ///< to the DBR address breakpoint match conditions
2786 ///< All other values are reserved.
2787
2788 UINT64 PrivilegeOfTriger:3; ///< Bit39:37 Indicates the privilege
2789 ///< level of the context during which
2790 ///< the error should be injected: 0 -
2791 ///< privilege level 0 1 - privilege
2792 ///< level 1 2 - privilege level 2 3 -
2793 ///< privilege level 3 All other values
2794 ///< are reserved. If the implementation
2795 ///< does not support privilege level
2796 ///< qualifier for triggers (i.e. if
2797 ///< trigger_pl is 0 in the capabilities
2798 ///< vector), this field is ignored and
2799 ///< triggers can be taken at any
2800 ///< privilege level.
2801
2802 UINT64 Reserved2:24;
2803 } PAL_MC_ERROR_STRUCT_INFO;
2804
2805 /**
2806
2807 Buffer Pointed to by err_data_buffer - TLB
2808
2809 **/
2810 typedef struct {
2811 UINT64 TrigerAddress;
2812 UINT64 VirtualPageNumber:52;
2813 UINT64 Reserved1:8;
2814 UINT64 RegionId:24;
2815 UINT64 Reserved2:40;
2816 } PAL_MC_ERROR_DATA_BUFFER_TLB;
2817
2818 /**
2819 PAL Procedure - PAL_MC_ERROR_INJECT.
2820
2821 Injects the requested processor error or returns information
2822 on the supported injection capabilities for this particular
2823 processor implementation. It is optional by Itanium processors. The PAL
2824 procedure supports the Stacked Registers calling convention.
2825 It could be called at physical and Virtual mode.
2826
2827 @param Index Index of PAL_MC_ERROR_INJECT within the list of PAL
2828 procedures.
2829 @param ErrorTypeInfo Unsigned 64-bit integer specifying the
2830 first level error information which
2831 identifies the error structure and
2832 corresponding structure hierarchy, and
2833 the error severity.
2834 @param ErrorStructInfo Unsigned 64-bit integer identifying
2835 the optional structure specific
2836 information that provides the second
2837 level details for the requested error.
2838 @param ErrorDataBuffer 64-bit physical address of a buffer
2839 providing additional parameters for
2840 the requested error. The address of
2841 this buffer must be 8-byte aligned.
2842
2843 @retval 0 Call completed without error
2844 @retval -1 Unimplemented procedure
2845 @retval -2 Invalid argument
2846 @retval -3 Call completed with error.
2847 @retval -4 Call completed with error; the requested
2848 error could not be injected due to failure in
2849 locating the target location in the specified
2850 structure.
2851 @retval -5 Argument was valid, but requested error
2852 injection capability is not supported.
2853 @retval -9 Call requires PAL memory buffer.
2854
2855 @return R9 64-bit vector specifying the supported error
2856 injection capabilities for the input argument
2857 combination of struct_hier, err_struct and
2858 err_sev fields in ErrorTypeInfo.
2859 @return R10 64-bit vector specifying the architectural
2860 resources that are used by the procedure.
2861
2862 **/
2863 #define PAL_MC_ERROR_INJECT 276
2864
2865
2866 //
2867 // Types of PAL_GET_PSTATE.Type
2868 //
2869 #define PAL_GET_PSTATE_RECENT 0
2870 #define PAL_GET_PSTATE_AVERAGE_NEW_START 1
2871 #define PAL_GET_PSTATE_AVERAGE 2
2872 #define PAL_GET_PSTATE_NOW 3
2873
2874 /**
2875 PAL Procedure - PAL_GET_PSTATE.
2876
2877 Returns the performance index of the processor. It is optional
2878 by Itanium processors. The PAL procedure supports the Stacked Registers
2879 calling convention. It could be called at physical and Virtual
2880 mode.
2881
2882 @param Index Index of PAL_GET_PSTATE within the list of PAL
2883 procedures.
2884 @param Type Type of performance_index value to be returned
2885 by this procedure.See PAL_GET_PSTATE.Type above.
2886
2887 @retval 1 Call completed without error, but accuracy
2888 of performance index has been impacted by a
2889 thermal throttling event, or a
2890 hardware-initiated event.
2891 @retval 0 Call completed without error
2892 @retval -1 Unimplemented procedure
2893 @retval -2 Invalid argument
2894 @retval -3 Call completed with error.
2895 @retval -9 Call requires PAL memory buffer.
2896
2897 @return R9 Unsigned integer denoting the processor
2898 performance for the time duration since the last
2899 PAL_GET_PSTATE procedure call was made. The
2900 value returned is between 0 and 100, and is
2901 relative to the performance index of the highest
2902 available P-state.
2903
2904 **/
2905 #define PAL_GET_PSTATE 262
2906
2907 /**
2908
2909 Layout of PAL_PSTATE_INFO.PStateBuffer
2910
2911 **/
2912 typedef struct {
2913 UINT32 PerformanceIndex:7;
2914 UINT32 Reserved1:5;
2915 UINT32 TypicalPowerDissipation:20;
2916 UINT32 TransitionLatency1;
2917 UINT32 TransitionLatency2;
2918 UINT32 Reserved2;
2919 } PAL_PSTATE_INFO_BUFFER;
2920
2921
2922 /**
2923 PAL Procedure - PAL_PSTATE_INFO.
2924
2925 Returns information about the P-states supported by the
2926 processor. It is optional by Itanium processors. The PAL procedure supports
2927 the Static Registers calling convention. It could be called
2928 at physical and Virtual mode.
2929
2930 @param Index Index of PAL_PSTATE_INFO within the list of PAL
2931 procedures.
2932 @param PStateBuffer 64-bit pointer to a 256-byte buffer
2933 aligned on an 8-byte boundary. See
2934 PAL_PSTATE_INFO_BUFFER above.
2935
2936 @retval 0 Call completed without error
2937 @retval -1 Unimplemented procedure
2938 @retval -2 Invalid argument
2939 @retval -3 Call completed with error.
2940
2941 @return R9 Unsigned integer denoting the number of P-states
2942 supported. The maximum value of this field is 16.
2943 @return R10 Dependency domain information
2944
2945 **/
2946 #define PAL_PSTATE_INFO 44
2947
2948
2949 /**
2950 PAL Procedure - PAL_SET_PSTATE.
2951
2952 To request a processor transition to a given P-state. It is
2953 optional by Itanium processors. The PAL procedure supports the Stacked
2954 Registers calling convention. It could be called at physical
2955 and Virtual mode.
2956
2957 @param Index Index of PAL_SET_PSTATE within the list of PAL
2958 procedures.
2959 @param PState Unsigned integer denoting the processor
2960 P-state being requested.
2961 @param ForcePState Unsigned integer denoting whether the
2962 P-state change should be forced for the
2963 logical processor.
2964
2965 @retval 1 Call completed without error, but
2966 transition request was not accepted
2967 @retval 0 Call completed without error
2968 @retval -1 Unimplemented procedure
2969 @retval -2 Invalid argument
2970 @retval -3 Call completed with error.
2971 @retval -9 Call requires PAL memory buffer.
2972
2973 **/
2974 #define PAL_SET_PSTATE 263
2975
2976 /**
2977 PAL Procedure - PAL_SHUTDOWN.
2978
2979 Put the logical processor into a low power state which can be
2980 exited only by a reset event. It is optional by Itanium processors. The PAL
2981 procedure supports the Static Registers calling convention. It
2982 could be called at physical mode.
2983
2984 @param Index Index of PAL_SHUTDOWN within the list of PAL
2985 procedures.
2986 @param NotifyPlatform 8-byte aligned physical address
2987 pointer providing details on how to
2988 optionally notify the platform that
2989 the processor is entering a shutdown
2990 state.
2991
2992 @retval -1 Unimplemented procedure
2993 @retval -2 Invalid argument
2994 @retval -3 Call completed with error.
2995 @retval -9 Call requires PAL memory buffer.
2996
2997 **/
2998 #define PAL_SHUTDOWN 45
2999
3000 /**
3001
3002 Layout of PAL_MEMORY_BUFFER.ControlWord
3003
3004 **/
3005 typedef struct {
3006 UINT64 Registration:1;
3007 UINT64 ProbeInterrupt:1;
3008 UINT64 Reserved:62;
3009 } PAL_MEMORY_CONTROL_WORD;
3010
3011 /**
3012 PAL Procedure - PAL_MEMORY_BUFFER.
3013
3014 Provides cacheable memory to PAL for exclusive use during
3015 runtime. It is optional by Itanium processors. The PAL procedure supports the
3016 Static Registers calling convention. It could be called at
3017 physical mode.
3018
3019 @param Index Index of PAL_MEMORY_BUFFER within the list of PAL
3020 procedures.
3021 @param BaseAddress Physical address of the memory buffer
3022 allocated for PAL use.
3023 @param AllocSize Unsigned integer denoting the size of the
3024 memory buffer.
3025 @param ControlWord Formatted bit vector that provides control
3026 options for this procedure. See
3027 PAL_MEMORY_CONTROL_WORD above.
3028
3029 @retval 1 Call has not completed a buffer relocation
3030 due to a pending interrupt
3031 @retval 0 Call completed without error
3032 @retval -1 Unimplemented procedure
3033 @retval -2 Invalid argument
3034 @retval -3 Call completed with error.
3035 @retval -9 Call requires PAL memory buffer.
3036
3037 @return R9 Returns the minimum size of the memory buffer
3038 required if the alloc_size input argument was
3039 not large enough.
3040
3041 **/
3042 #define PAL_MEMORY_BUFFER 277
3043
3044
3045 /**
3046 PAL Procedure - PAL_VP_CREATE.
3047
3048 Initializes a new vpd for the operation of a new virtual
3049 processor in the virtual environment. It is optional by Itanium processors.
3050 The PAL procedure supports the Stacked Registers calling
3051 convention. It could be called at Virtual mode.
3052
3053 @param Index Index of PAL_VP_CREATE within the list of PAL
3054 procedures.
3055 @param Vpd 64-bit host virtual pointer to the Virtual
3056 Processor Descriptor (VPD).
3057 @param HostIva 64-bit host virtual pointer to the host IVT
3058 for the virtual processor
3059 @param OptionalHandler 64-bit non-zero host-virtual pointer
3060 to an optional handler for
3061 virtualization intercepts.
3062
3063 @retval 0 Call completed without error
3064 @retval -1 Unimplemented procedure
3065 @retval -2 Invalid argument
3066 @retval -3 Call completed with error.
3067 @retval -9 Call requires PAL memory buffer.
3068
3069 **/
3070 #define PAL_VP_CREATE 265
3071
3072 /**
3073
3074 Virtual Environment Information Parameter
3075
3076 **/
3077 typedef struct {
3078 UINT64 Reserved1:8;
3079 UINT64 Opcode:1;
3080 UINT64 Reserved:53;
3081 } PAL_VP_ENV_INFO_RETURN;
3082
3083 /**
3084 PAL Procedure - PAL_VP_ENV_INFO.
3085
3086 Returns the parameters needed to enter a virtual environment.
3087 It is optional by Itanium processors. The PAL procedure supports the Stacked
3088 Registers calling convention. It could be called at Virtual
3089 mode.
3090
3091 @param Index Index of PAL_VP_ENV_INFO within the list of PAL
3092 procedures.
3093 @param Vpd 64-bit host virtual pointer to the Virtual
3094 Processor Descriptor (VPD).
3095 @param HostIva 64-bit host virtual pointer to the host IVT
3096 for the virtual processor
3097 @param OptionalHandler 64-bit non-zero host-virtual pointer
3098 to an optional handler for
3099 virtualization intercepts.
3100
3101 @retval 0 Call completed without error
3102 @retval -1 Unimplemented procedure
3103 @retval -2 Invalid argument
3104 @retval -3 Call completed with error.
3105 @retval -9 Call requires PAL memory buffer.
3106
3107 @return R9 Unsigned integer denoting the number of bytes
3108 required by the PAL virtual environment buffer
3109 during PAL_VP_INIT_ENV
3110 @return R10 64-bit vector of virtual environment
3111 information. See PAL_VP_ENV_INFO_RETURN.
3112
3113
3114 **/
3115 #define PAL_VP_ENV_INFO 266
3116
3117 /**
3118 PAL Procedure - PAL_VP_EXIT_ENV.
3119
3120 Allows a logical processor to exit a virtual environment.
3121 It is optional by Itanium processors. The PAL procedure supports the Stacked
3122 Registers calling convention. It could be called at Virtual
3123 mode.
3124
3125 @param Index Index of PAL_VP_EXIT_ENV within the list of PAL
3126 procedures.
3127 @param Iva Optional 64-bit host virtual pointer to the IVT
3128 when this procedure is done
3129
3130 @retval 0 Call completed without error
3131 @retval -1 Unimplemented procedure
3132 @retval -2 Invalid argument
3133 @retval -3 Call completed with error.
3134 @retval -9 Call requires PAL memory buffer.
3135
3136 **/
3137 #define PAL_VP_EXIT_ENV 267
3138
3139
3140
3141 /**
3142 PAL Procedure - PAL_VP_INIT_ENV.
3143
3144 Allows a logical processor to enter a virtual environment. It
3145 is optional by Itanium processors. The PAL procedure supports the Stacked
3146 Registers calling convention. It could be called at Virtual
3147 mode.
3148
3149 @param Index Index of PAL_VP_INIT_ENV within the list of PAL
3150 procedures.
3151 @param ConfigOptions 64-bit vector of global configuration
3152 settings.
3153 @param PhysicalBase Host physical base address of a block of
3154 contiguous physical memory for the PAL
3155 virtual environment buffer 1) This
3156 memory area must be allocated by the VMM
3157 and be 4K aligned. The first logical
3158 processor to enter the environment will
3159 initialize the physical block for
3160 virtualization operations.
3161 @param VirtualBase Host virtual base address of the
3162 corresponding physical memory block for
3163 the PAL virtual environment buffer : The
3164 VMM must maintain the host virtual to host
3165 physical data and instruction translations
3166 in TRs for addresses within the allocated
3167 address space. Logical processors in this
3168 virtual environment will use this address
3169 when transitioning to virtual mode
3170 operations.
3171
3172 @retval 0 Call completed without error
3173 @retval -1 Unimplemented procedure
3174 @retval -2 Invalid argument
3175 @retval -3 Call completed with error.
3176 @retval -9 Call requires PAL memory buffer.
3177
3178 @return R9 Virtualization Service Address - VSA specifies
3179 the virtual base address of the PAL
3180 virtualization services in this virtual
3181 environment.
3182
3183
3184 **/
3185 #define PAL_VP_INIT_ENV 268
3186
3187
3188 /**
3189 PAL Procedure - PAL_VP_REGISTER.
3190
3191 Register a different host IVT and/or a different optional
3192 virtualization intercept handler for the virtual processor
3193 specified by vpd. It is optional by Itanium processors. The PAL procedure
3194 supports the Stacked Registers calling convention. It could be
3195 called at Virtual mode.
3196
3197 @param Index Index of PAL_VP_REGISTER within the list of PAL
3198 procedures.
3199 @param Vpd 64-bit host virtual pointer to the Virtual
3200 Processor Descriptor (VPD) host_iva 64-bit host
3201 virtual pointer to the host IVT for the virtual
3202 processor
3203 @param OptionalHandler 64-bit non-zero host-virtual pointer
3204 to an optional handler for
3205 virtualization intercepts.
3206
3207 @retval 0 Call completed without error
3208 @retval -1 Unimplemented procedure
3209 @retval -2 Invalid argument
3210 @retval -3 Call completed with error.
3211 @retval -9 Call requires PAL memory buffer.
3212
3213 **/
3214 #define PAL_VP_REGISTER 269
3215
3216
3217 /**
3218 PAL Procedure - PAL_VP_RESTORE.
3219
3220 Restores virtual processor state for the specified vpd on the
3221 logical processor. It is optional by Itanium processors. The PAL procedure
3222 supports the Stacked Registers calling convention. It could be
3223 called at Virtual mode.
3224
3225 @param Index Index of PAL_VP_RESTORE within the list of PAL
3226 procedures.
3227 @param Vpd 64-bit host virtual pointer to the Virtual
3228 Processor Descriptor (VPD) host_iva 64-bit host
3229 virtual pointer to the host IVT for the virtual
3230 processor
3231 @param PalVector Vector specifies PAL procedure
3232 implementation-specific state to be
3233 restored.
3234
3235 @retval 0 Call completed without error
3236 @retval -1 Unimplemented procedure
3237 @retval -2 Invalid argument
3238 @retval -3 Call completed with error.
3239 @retval -9 Call requires PAL memory buffer.
3240
3241 **/
3242 #define PAL_VP_RESTORE 270
3243
3244 /**
3245 PAL Procedure - PAL_VP_SAVE.
3246
3247 Saves virtual processor state for the specified vpd on the
3248 logical processor. It is optional by Itanium processors. The PAL procedure
3249 supports the Stacked Registers calling convention. It could be
3250 called at Virtual mode.
3251
3252 @param Index Index of PAL_VP_SAVE within the list of PAL
3253 procedures.
3254 @param Vpd 64-bit host virtual pointer to the Virtual
3255 Processor Descriptor (VPD) host_iva 64-bit host
3256 virtual pointer to the host IVT for the virtual
3257 processor
3258 @param PalVector Vector specifies PAL procedure
3259 implementation-specific state to be
3260 restored.
3261
3262 @retval 0 Call completed without error
3263 @retval -1 Unimplemented procedure
3264 @retval -2 Invalid argument
3265 @retval -3 Call completed with error.
3266 @retval -9 Call requires PAL memory buffer.
3267
3268 **/
3269 #define PAL_VP_SAVE 271
3270
3271
3272 /**
3273 PAL Procedure - PAL_VP_TERMINATE.
3274
3275 Terminates operation for the specified virtual processor. It
3276 is optional by Itanium processors. The PAL procedure supports the Stacked
3277 Registers calling convention. It could be called at Virtual
3278 mode.
3279
3280 @param Index Index of PAL_VP_TERMINATE within the list of PAL
3281 procedures.
3282 @param Vpd 64-bit host virtual pointer to the Virtual
3283 Processor Descriptor (VPD)
3284 @param Iva Optional 64-bit host virtual pointer to the IVT
3285 when this procedure is done.
3286
3287 @retval 0 Call completed without error
3288 @retval -1 Unimplemented procedure
3289 @retval -2 Invalid argument
3290 @retval -3 Call completed with error.
3291 @retval -9 Call requires PAL memory buffer.
3292
3293 **/
3294 #define PAL_VP_TERMINATE 272
3295
3296 #endif