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