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