TianoCore EDK2 master
Loading...
Searching...
No Matches
BaseLib.h
Go to the documentation of this file.
1
16#ifndef __BASE_LIB__
17#define __BASE_LIB__
18
19//
20// Definitions for architecture-specific types
21//
22#if defined (MDE_CPU_IA32)
26typedef struct {
27 UINT32 Ebx;
28 UINT32 Esi;
29 UINT32 Edi;
30 UINT32 Ebp;
31 UINT32 Esp;
32 UINT32 Eip;
33 UINT32 Ssp;
34} BASE_LIBRARY_JUMP_BUFFER;
35
36#define BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT 4
37
38#endif // defined (MDE_CPU_IA32)
39
40#if defined (MDE_CPU_X64)
44typedef struct {
45 UINT64 Rbx;
46 UINT64 Rsp;
47 UINT64 Rbp;
48 UINT64 Rdi;
49 UINT64 Rsi;
50 UINT64 R12;
51 UINT64 R13;
52 UINT64 R14;
53 UINT64 R15;
54 UINT64 Rip;
55 UINT64 MxCsr;
56 UINT8 XmmBuffer[160];
57 UINT64 Ssp;
58} BASE_LIBRARY_JUMP_BUFFER;
59
60#define BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT 8
61
62#endif // defined (MDE_CPU_X64)
63
64#if defined (MDE_CPU_EBC)
68typedef struct {
69 UINT64 R0;
70 UINT64 R1;
71 UINT64 R2;
72 UINT64 R3;
73 UINT64 IP;
74} BASE_LIBRARY_JUMP_BUFFER;
75
76#define BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT 8
77
78#endif // defined (MDE_CPU_EBC)
79
80#if defined (MDE_CPU_AARCH64)
81typedef struct {
82 // GP regs
83 UINT64 X19;
84 UINT64 X20;
85 UINT64 X21;
86 UINT64 X22;
87 UINT64 X23;
88 UINT64 X24;
89 UINT64 X25;
90 UINT64 X26;
91 UINT64 X27;
92 UINT64 X28;
93 UINT64 FP;
94 UINT64 LR;
95 UINT64 IP0;
96
97 // FP regs
98 UINT64 D8;
99 UINT64 D9;
100 UINT64 D10;
101 UINT64 D11;
102 UINT64 D12;
103 UINT64 D13;
104 UINT64 D14;
105 UINT64 D15;
106} BASE_LIBRARY_JUMP_BUFFER;
107
108#define BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT 8
109
118UINT64
119EFIAPI
120ArmReadCntPctReg (
121 VOID
122 );
123
124//
125// Bit shifts for the ID_AA64ISAR0_EL1 register.
126//
127#define ARM_ID_AA64ISAR0_EL1_AES_SHIFT (4U)
128#define ARM_ID_AA64ISAR0_EL1_SHA1_SHIFT (8U)
129#define ARM_ID_AA64ISAR0_EL1_SHA2_SHIFT (12U)
130#define ARM_ID_AA64ISAR0_EL1_CRC32_SHIFT (16U)
131#define ARM_ID_AA64ISAR0_EL1_ATOMIC_SHIFT (20U)
132#define ARM_ID_AA64ISAR0_EL1_RDM_SHIFT (28U)
133#define ARM_ID_AA64ISAR0_EL1_SHA3_SHIFT (32U)
134#define ARM_ID_AA64ISAR0_EL1_SM3_SHIFT (36U)
135#define ARM_ID_AA64ISAR0_EL1_SM4_SHIFT (40U)
136#define ARM_ID_AA64ISAR0_EL1_DP_SHIFT (44U)
137#define ARM_ID_AA64ISAR0_EL1_FHM_SHIFT (48U)
138#define ARM_ID_AA64ISAR0_EL1_TS_SHIFT (52U)
139#define ARM_ID_AA64ISAR0_EL1_TLB_SHIFT (56U)
140#define ARM_ID_AA64ISAR0_EL1_RNDR_SHIFT (60U)
141
142//
143// Bit masks for the ID_AA64ISAR0_EL1 fields.
144//
145#define ARM_ID_AA64ISAR0_EL1_AES_MASK (0xFU)
146#define ARM_ID_AA64ISAR0_EL1_SHA1_MASK (0xFU)
147#define ARM_ID_AA64ISAR0_EL1_SHA2_MASK (0xFU)
148#define ARM_ID_AA64ISAR0_EL1_CRC32_MASK (0xFU)
149#define ARM_ID_AA64ISAR0_EL1_ATOMIC_MASK (0xFU)
150#define ARM_ID_AA64ISAR0_EL1_RDM_MASK (0xFU)
151#define ARM_ID_AA64ISAR0_EL1_SHA3_MASK (0xFU)
152#define ARM_ID_AA64ISAR0_EL1_SM3_MASK (0xFU)
153#define ARM_ID_AA64ISAR0_EL1_SM4_MASK (0xFU)
154#define ARM_ID_AA64ISAR0_EL1_DP_MASK (0xFU)
155#define ARM_ID_AA64ISAR0_EL1_FHM_MASK (0xFU)
156#define ARM_ID_AA64ISAR0_EL1_TS_MASK (0xFU)
157#define ARM_ID_AA64ISAR0_EL1_TLB_MASK (0xFU)
158#define ARM_ID_AA64ISAR0_EL1_RNDR_MASK (0xFU)
159
160//
161// Bit masks for the ID_AA64ISAR0_EL1 field values.
162//
163#define ARM_ID_AA64ISAR0_EL1_AES_FEAT_AES_MASK (0x1U)
164#define ARM_ID_AA64ISAR0_EL1_AES_FEAT_PMULL_MASK (0x2U)
165#define ARM_ID_AA64ISAR0_EL1_SHA1_FEAT_SHA1_MASK (0x1U)
166#define ARM_ID_AA64ISAR0_EL1_SHA2_FEAT_SHA256_MASK (0x1U)
167#define ARM_ID_AA64ISAR0_EL1_SHA2_FEAT_SHA512_MASK (0x2U)
168#define ARM_ID_AA64ISAR0_EL1_CRC32_HAVE_CRC32_MASK (0x1U)
169#define ARM_ID_AA64ISAR0_EL1_ATOMIC_FEAT_LSE_MASK (0x2U)
170#define ARM_ID_AA64ISAR0_EL1_RDM_FEAT_RDM_MASK (0x1U)
171#define ARM_ID_AA64ISAR0_EL1_SHA3_FEAT_SHA3_MASK (0x1U)
172#define ARM_ID_AA64ISAR0_EL1_SM3_FEAT_SM3_MASK (0x1U)
173#define ARM_ID_AA64ISAR0_EL1_SM4_FEAT_SM4_MASK (0x1U)
174#define ARM_ID_AA64ISAR0_EL1_DP_FEAT_DOTPROD_MASK (0x1U)
175#define ARM_ID_AA64ISAR0_EL1_FHM_FEAT_FHM_MASK (0x1U)
176#define ARM_ID_AA64ISAR0_EL1_TS_FEAT_FLAGM_MASK (0x1U)
177#define ARM_ID_AA64ISAR0_EL1_TS_FEAT_FLAGM2_MASK (0x2U)
178#define ARM_ID_AA64ISAR0_EL1_TLB_FEAT_TLBIOS_MASK (0x1U)
179#define ARM_ID_AA64ISAR0_EL1_TLB_FEAT_TLBIRANGE_MASK (0x2U)
180#define ARM_ID_AA64ISAR0_EL1_RNDR_FEAT_RNG_MASK (0x1U)
181
190UINT64
191EFIAPI
192ArmReadIdAA64Isar0Reg (
193 VOID
194 );
195
196#endif // defined (MDE_CPU_AARCH64)
197
198#if defined (MDE_CPU_RISCV64)
202typedef struct {
203 UINT64 RA;
204 UINT64 S0;
205 UINT64 S1;
206 UINT64 S2;
207 UINT64 S3;
208 UINT64 S4;
209 UINT64 S5;
210 UINT64 S6;
211 UINT64 S7;
212 UINT64 S8;
213 UINT64 S9;
214 UINT64 S10;
215 UINT64 S11;
216 UINT64 SP;
217} BASE_LIBRARY_JUMP_BUFFER;
218
219#define BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT 8
220
221VOID
222RiscVSetSupervisorScratch (
223 IN UINT64
224 );
225
226UINT64
227RiscVGetSupervisorScratch (
228 VOID
229 );
230
231VOID
232RiscVSetSupervisorStvec (
233 IN UINT64
234 );
235
236UINT64
237RiscVGetSupervisorStvec (
238 VOID
239 );
240
241UINT64
242RiscVGetSupervisorTrapCause (
243 VOID
244 );
245
246VOID
247RiscVSetSupervisorAddressTranslationRegister (
248 IN UINT64
249 );
250
251UINT64
252RiscVGetSupervisorAddressTranslationRegister (
253 VOID
254 );
255
256UINT64
257RiscVReadTimer (
258 VOID
259 );
260
261VOID
262RiscVSetSupervisorTimeCompareRegister (
263 IN UINT64
264 );
265
266VOID
267RiscVEnableTimerInterrupt (
268 VOID
269 );
270
271VOID
272RiscVDisableTimerInterrupt (
273 VOID
274 );
275
276VOID
277RiscVClearPendingTimerInterrupt (
278 VOID
279 );
280
285VOID
286EFIAPI
287RiscVInvalidateInstCacheFenceAsm (
288 VOID
289 );
290
295VOID
296EFIAPI
297RiscVInvalidateDataCacheFenceAsm (
298 VOID
299 );
300
306VOID
307EFIAPI
308RiscVCpuCacheFlushCmoAsm (
309 IN UINTN
310 );
311
318VOID
319EFIAPI
320RiscVCpuCacheCleanCmoAsm (
321 IN UINTN
322 );
323
328VOID
329EFIAPI
330RiscVCpuCacheInvalCmoAsm (
331 IN UINTN
332 );
333
334#endif // defined (MDE_CPU_RISCV64)
335
336#if defined (MDE_CPU_LOONGARCH64)
340typedef struct {
341 UINT64 S0;
342 UINT64 S1;
343 UINT64 S2;
344 UINT64 S3;
345 UINT64 S4;
346 UINT64 S5;
347 UINT64 S6;
348 UINT64 S7;
349 UINT64 S8;
350 UINT64 SP;
351 UINT64 FP;
352 UINT64 RA;
353} BASE_LIBRARY_JUMP_BUFFER;
354
355#define BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT 8
356
357/*
358 * Set the exception base address for LoongArch.
359 *
360 * @param ExceptionBaseAddress The exception base address, must be aligned greater than or qeual to 4K .
361 */
362VOID
363SetExceptionBaseAddress (
364 IN UINT64
365 );
366
367/*
368 * Set the TlbRebase address for LoongArch.
369 *
370 * @param TlbRebaseAddress The TlbRebase address, must be aligned greater than or qeual to 4K .
371 */
372VOID
373SetTlbRebaseAddress (
374 IN UINT64
375 );
376
382VOID
383EnableLocalInterrupts (
384 IN UINT16
385 );
386
392VOID
393DisableLocalInterrupts (
394 IN UINT16
395 );
396
403VOID
404AsmCpucfg (
405 IN UINT32 Index,
406 OUT UINT32 *Data
407 );
408
416UINTN
417AsmReadStableCounter (
418 VOID
419 );
420
429UINTN
430CsrRead (
431 IN UINT16 Select
432 );
433
443UINTN
444CsrWrite (
445 IN UINT16 Select,
446 IN UINTN Value
447 );
448
459UINTN
460CsrXChg (
461 IN UINT16 Select,
462 IN UINTN Value,
463 IN UINTN Mask
464 );
465
474UINT8
475IoCsrRead8 (
476 IN UINTN Select
477 );
478
487UINT16
488IoCsrRead16 (
489 IN UINTN Select
490 );
491
500UINT32
501IoCsrRead32 (
502 IN UINTN Select
503 );
504
513UINT64
514IoCsrRead64 (
515 IN UINTN Select
516 );
517
527VOID
528IoCsrWrite8 (
529 IN UINTN Select,
530 IN UINT8 Value
531 );
532
542VOID
543IoCsrWrite16 (
544 IN UINTN Select,
545 IN UINT16 Value
546 );
547
557VOID
558IoCsrWrite32 (
559 IN UINTN Select,
560 IN UINT32 Value
561 );
562
572VOID
573IoCsrWrite64 (
574 IN UINTN Select,
575 IN UINT64 Value
576 );
577
578#endif // defined (MDE_CPU_LOONGARCH64)
579
580//
581// String Services
582//
583
600UINTN
601EFIAPI
602StrnLenS (
603 IN CONST CHAR16 *String,
604 IN UINTN MaxSize
605 );
606
628UINTN
629EFIAPI
630StrnSizeS (
631 IN CONST CHAR16 *String,
632 IN UINTN MaxSize
633 );
634
661RETURN_STATUS
662EFIAPI
663StrCpyS (
664 OUT CHAR16 *Destination,
665 IN UINTN DestMax,
666 IN CONST CHAR16 *Source
667 );
668
698RETURN_STATUS
699EFIAPI
700StrnCpyS (
701 OUT CHAR16 *Destination,
702 IN UINTN DestMax,
703 IN CONST CHAR16 *Source,
704 IN UINTN Length
705 );
706
736RETURN_STATUS
737EFIAPI
738StrCatS (
739 IN OUT CHAR16 *Destination,
740 IN UINTN DestMax,
741 IN CONST CHAR16 *Source
742 );
743
776RETURN_STATUS
777EFIAPI
778StrnCatS (
779 IN OUT CHAR16 *Destination,
780 IN UINTN DestMax,
781 IN CONST CHAR16 *Source,
782 IN UINTN Length
783 );
784
828RETURN_STATUS
829EFIAPI
831 IN CONST CHAR16 *String,
832 OUT CHAR16 **EndPointer OPTIONAL,
833 OUT UINTN *Data
834 );
835
879RETURN_STATUS
880EFIAPI
882 IN CONST CHAR16 *String,
883 OUT CHAR16 **EndPointer OPTIONAL,
884 OUT UINT64 *Data
885 );
886
935RETURN_STATUS
936EFIAPI
938 IN CONST CHAR16 *String,
939 OUT CHAR16 **EndPointer OPTIONAL,
940 OUT UINTN *Data
941 );
942
991RETURN_STATUS
992EFIAPI
994 IN CONST CHAR16 *String,
995 OUT CHAR16 **EndPointer OPTIONAL,
996 OUT UINT64 *Data
997 );
998
1013UINTN
1014EFIAPI
1016 IN CONST CHAR8 *String,
1017 IN UINTN MaxSize
1018 );
1019
1039UINTN
1040EFIAPI
1042 IN CONST CHAR8 *String,
1043 IN UINTN MaxSize
1044 );
1045
1069RETURN_STATUS
1070EFIAPI
1072 OUT CHAR8 *Destination,
1073 IN UINTN DestMax,
1074 IN CONST CHAR8 *Source
1075 );
1076
1103RETURN_STATUS
1104EFIAPI
1106 OUT CHAR8 *Destination,
1107 IN UINTN DestMax,
1108 IN CONST CHAR8 *Source,
1109 IN UINTN Length
1110 );
1111
1138RETURN_STATUS
1139EFIAPI
1141 IN OUT CHAR8 *Destination,
1142 IN UINTN DestMax,
1143 IN CONST CHAR8 *Source
1144 );
1145
1175RETURN_STATUS
1176EFIAPI
1178 IN OUT CHAR8 *Destination,
1179 IN UINTN DestMax,
1180 IN CONST CHAR8 *Source,
1181 IN UINTN Length
1182 );
1183
1225RETURN_STATUS
1226EFIAPI
1228 IN CONST CHAR8 *String,
1229 OUT CHAR8 **EndPointer OPTIONAL,
1230 OUT UINTN *Data
1231 );
1232
1274RETURN_STATUS
1275EFIAPI
1277 IN CONST CHAR8 *String,
1278 OUT CHAR8 **EndPointer OPTIONAL,
1279 OUT UINT64 *Data
1280 );
1281
1327RETURN_STATUS
1328EFIAPI
1330 IN CONST CHAR8 *String,
1331 OUT CHAR8 **EndPointer OPTIONAL,
1332 OUT UINTN *Data
1333 );
1334
1380RETURN_STATUS
1381EFIAPI
1383 IN CONST CHAR8 *String,
1384 OUT CHAR8 **EndPointer OPTIONAL,
1385 OUT UINT64 *Data
1386 );
1387
1405UINTN
1406EFIAPI
1407StrLen (
1408 IN CONST CHAR16 *String
1409 );
1410
1429UINTN
1430EFIAPI
1431StrSize (
1432 IN CONST CHAR16 *String
1433 );
1434
1463INTN
1464EFIAPI
1465StrCmp (
1466 IN CONST CHAR16 *FirstString,
1467 IN CONST CHAR16 *SecondString
1468 );
1469
1502INTN
1503EFIAPI
1504StrnCmp (
1505 IN CONST CHAR16 *FirstString,
1506 IN CONST CHAR16 *SecondString,
1507 IN UINTN Length
1508 );
1509
1535CHAR16 *
1536EFIAPI
1537StrStr (
1538 IN CONST CHAR16 *String,
1539 IN CONST CHAR16 *SearchString
1540 );
1541
1576UINTN
1577EFIAPI
1579 IN CONST CHAR16 *String
1580 );
1581
1616UINT64
1617EFIAPI
1619 IN CONST CHAR16 *String
1620 );
1621
1657UINTN
1658EFIAPI
1660 IN CONST CHAR16 *String
1661 );
1662
1698UINT64
1699EFIAPI
1701 IN CONST CHAR16 *String
1702 );
1703
1754RETURN_STATUS
1755EFIAPI
1757 IN CONST CHAR16 *String,
1758 OUT CHAR16 **EndPointer OPTIONAL,
1759 OUT IPv6_ADDRESS *Address,
1760 OUT UINT8 *PrefixLength OPTIONAL
1761 );
1762
1804RETURN_STATUS
1805EFIAPI
1807 IN CONST CHAR16 *String,
1808 OUT CHAR16 **EndPointer OPTIONAL,
1809 OUT IPv4_ADDRESS *Address,
1810 OUT UINT8 *PrefixLength OPTIONAL
1811 );
1812
1813#define GUID_STRING_LENGTH 36
1814
1857RETURN_STATUS
1858EFIAPI
1859StrToGuid (
1860 IN CONST CHAR16 *String,
1861 OUT GUID *Guid
1862 );
1863
1897RETURN_STATUS
1898EFIAPI
1900 IN CONST CHAR16 *String,
1901 IN UINTN Length,
1902 OUT UINT8 *Buffer,
1903 IN UINTN MaxBufferSize
1904 );
1905
1946RETURN_STATUS
1947EFIAPI
1949 IN CONST CHAR16 *Source,
1950 OUT CHAR8 *Destination,
1951 IN UINTN DestMax
1952 );
1953
1997RETURN_STATUS
1998EFIAPI
2000 IN CONST CHAR16 *Source,
2001 IN UINTN Length,
2002 OUT CHAR8 *Destination,
2003 IN UINTN DestMax,
2004 OUT UINTN *DestinationLength
2005 );
2006
2024UINTN
2025EFIAPI
2027 IN CONST CHAR8 *String
2028 );
2029
2047UINTN
2048EFIAPI
2050 IN CONST CHAR8 *String
2051 );
2052
2079INTN
2080EFIAPI
2082 IN CONST CHAR8 *FirstString,
2083 IN CONST CHAR8 *SecondString
2084 );
2085
2115INTN
2116EFIAPI
2118 IN CONST CHAR8 *FirstString,
2119 IN CONST CHAR8 *SecondString
2120 );
2121
2152INTN
2153EFIAPI
2155 IN CONST CHAR8 *FirstString,
2156 IN CONST CHAR8 *SecondString,
2157 IN UINTN Length
2158 );
2159
2184CHAR8 *
2185EFIAPI
2187 IN CONST CHAR8 *String,
2188 IN CONST CHAR8 *SearchString
2189 );
2190
2221UINTN
2222EFIAPI
2224 IN CONST CHAR8 *String
2225 );
2226
2257UINT64
2258EFIAPI
2260 IN CONST CHAR8 *String
2261 );
2262
2297UINTN
2298EFIAPI
2300 IN CONST CHAR8 *String
2301 );
2302
2337UINT64
2338EFIAPI
2340 IN CONST CHAR8 *String
2341 );
2342
2391RETURN_STATUS
2392EFIAPI
2394 IN CONST CHAR8 *String,
2395 OUT CHAR8 **EndPointer OPTIONAL,
2396 OUT IPv6_ADDRESS *Address,
2397 OUT UINT8 *PrefixLength OPTIONAL
2398 );
2399
2439RETURN_STATUS
2440EFIAPI
2442 IN CONST CHAR8 *String,
2443 OUT CHAR8 **EndPointer OPTIONAL,
2444 OUT IPv4_ADDRESS *Address,
2445 OUT UINT8 *PrefixLength OPTIONAL
2446 );
2447
2488RETURN_STATUS
2489EFIAPI
2491 IN CONST CHAR8 *String,
2492 OUT GUID *Guid
2493 );
2494
2526RETURN_STATUS
2527EFIAPI
2529 IN CONST CHAR8 *String,
2530 IN UINTN Length,
2531 OUT UINT8 *Buffer,
2532 IN UINTN MaxBufferSize
2533 );
2534
2571RETURN_STATUS
2572EFIAPI
2574 IN CONST CHAR8 *Source,
2575 OUT CHAR16 *Destination,
2576 IN UINTN DestMax
2577 );
2578
2621RETURN_STATUS
2622EFIAPI
2624 IN CONST CHAR8 *Source,
2625 IN UINTN Length,
2626 OUT CHAR16 *Destination,
2627 IN UINTN DestMax,
2628 OUT UINTN *DestinationLength
2629 );
2630
2646CHAR16
2647EFIAPI
2649 IN CHAR16 Char
2650 );
2651
2665CHAR8
2666EFIAPI
2668 IN CHAR8 Chr
2669 );
2670
2690RETURN_STATUS
2691EFIAPI
2693 IN CONST UINT8 *Source,
2694 IN UINTN SourceLength,
2695 OUT CHAR8 *Destination OPTIONAL,
2696 IN OUT UINTN *DestinationSize
2697 );
2698
2781RETURN_STATUS
2782EFIAPI
2784 IN CONST CHAR8 *Source OPTIONAL,
2785 IN UINTN SourceSize,
2786 OUT UINT8 *Destination OPTIONAL,
2787 IN OUT UINTN *DestinationSize
2788 );
2789
2803UINT8
2804EFIAPI
2806 IN UINT8 Value
2807 );
2808
2823UINT8
2824EFIAPI
2826 IN UINT8 Value
2827 );
2828
2829//
2830// File Path Manipulation Functions
2831//
2832
2841BOOLEAN
2842EFIAPI
2844 IN OUT CHAR16 *Path
2845 );
2846
2860CHAR16 *
2861EFIAPI
2863 IN CHAR16 *Path
2864 );
2865
2866//
2867// Linked List Functions and Macros
2868//
2869
2884#define INITIALIZE_LIST_HEAD_VARIABLE(ListHead) {&(ListHead), &(ListHead)}
2885
2893#define BASE_LIST_FOR_EACH(Entry, ListHead) \
2894 for(Entry = (ListHead)->ForwardLink; Entry != (ListHead); Entry = Entry->ForwardLink)
2895
2909#define BASE_LIST_FOR_EACH_SAFE(Entry, NextEntry, ListHead) \
2910 for(Entry = (ListHead)->ForwardLink, NextEntry = Entry->ForwardLink;\
2911 Entry != (ListHead); Entry = NextEntry, NextEntry = Entry->ForwardLink)
2912
2932BOOLEAN
2933EFIAPI
2935 IN CONST LIST_ENTRY *FirstEntry,
2936 IN CONST LIST_ENTRY *SecondEntry
2937 );
2938
2955LIST_ENTRY *
2956EFIAPI
2958 IN OUT LIST_ENTRY *ListHead
2959 );
2960
2983LIST_ENTRY *
2984EFIAPI
2986 IN OUT LIST_ENTRY *ListHead,
2987 IN OUT LIST_ENTRY *Entry
2988 );
2989
3012LIST_ENTRY *
3013EFIAPI
3015 IN OUT LIST_ENTRY *ListHead,
3016 IN OUT LIST_ENTRY *Entry
3017 );
3018
3039LIST_ENTRY *
3040EFIAPI
3042 IN CONST LIST_ENTRY *List
3043 );
3044
3066LIST_ENTRY *
3067EFIAPI
3069 IN CONST LIST_ENTRY *List,
3070 IN CONST LIST_ENTRY *Node
3071 );
3072
3094LIST_ENTRY *
3095EFIAPI
3097 IN CONST LIST_ENTRY *List,
3098 IN CONST LIST_ENTRY *Node
3099 );
3100
3120BOOLEAN
3121EFIAPI
3123 IN CONST LIST_ENTRY *ListHead
3124 );
3125
3152BOOLEAN
3153EFIAPI
3154IsNull (
3155 IN CONST LIST_ENTRY *List,
3156 IN CONST LIST_ENTRY *Node
3157 );
3158
3182BOOLEAN
3183EFIAPI
3185 IN CONST LIST_ENTRY *List,
3186 IN CONST LIST_ENTRY *Node
3187 );
3188
3215LIST_ENTRY *
3216EFIAPI
3218 IN OUT LIST_ENTRY *FirstEntry,
3219 IN OUT LIST_ENTRY *SecondEntry
3220 );
3221
3243LIST_ENTRY *
3244EFIAPI
3246 IN CONST LIST_ENTRY *Entry
3247 );
3248
3249//
3250// Math Services
3251//
3252
3263typedef
3265(EFIAPI *BASE_SORT_COMPARE)(
3266 IN CONST VOID *Buffer1,
3267 IN CONST VOID *Buffer2
3268 );
3269
3293VOID
3294EFIAPI
3295QuickSort (
3296 IN OUT VOID *BufferToSort,
3297 IN CONST UINTN Count,
3298 IN CONST UINTN ElementSize,
3299 IN BASE_SORT_COMPARE CompareFunction,
3300 OUT VOID *BufferOneElement
3301 );
3302
3318UINT64
3319EFIAPI
3320LShiftU64 (
3321 IN UINT64 Operand,
3322 IN UINTN Count
3323 );
3324
3340UINT64
3341EFIAPI
3342RShiftU64 (
3343 IN UINT64 Operand,
3344 IN UINTN Count
3345 );
3346
3362UINT64
3363EFIAPI
3364ARShiftU64 (
3365 IN UINT64 Operand,
3366 IN UINTN Count
3367 );
3368
3385UINT32
3386EFIAPI
3387LRotU32 (
3388 IN UINT32 Operand,
3389 IN UINTN Count
3390 );
3391
3408UINT32
3409EFIAPI
3410RRotU32 (
3411 IN UINT32 Operand,
3412 IN UINTN Count
3413 );
3414
3431UINT64
3432EFIAPI
3433LRotU64 (
3434 IN UINT64 Operand,
3435 IN UINTN Count
3436 );
3437
3454UINT64
3455EFIAPI
3456RRotU64 (
3457 IN UINT64 Operand,
3458 IN UINTN Count
3459 );
3460
3474INTN
3475EFIAPI
3477 IN UINT32 Operand
3478 );
3479
3494INTN
3495EFIAPI
3497 IN UINT64 Operand
3498 );
3499
3514INTN
3515EFIAPI
3517 IN UINT32 Operand
3518 );
3519
3534INTN
3535EFIAPI
3537 IN UINT64 Operand
3538 );
3539
3553UINT32
3554EFIAPI
3556 IN UINT32 Operand
3557 );
3558
3572UINT64
3573EFIAPI
3575 IN UINT64 Operand
3576 );
3577
3590UINT16
3591EFIAPI
3593 IN UINT16 Value
3594 );
3595
3608UINT32
3609EFIAPI
3611 IN UINT32 Value
3612 );
3613
3626UINT64
3627EFIAPI
3629 IN UINT64 Value
3630 );
3631
3646UINT64
3647EFIAPI
3648MultU64x32 (
3649 IN UINT64 Multiplicand,
3650 IN UINT32 Multiplier
3651 );
3652
3667UINT64
3668EFIAPI
3669MultU64x64 (
3670 IN UINT64 Multiplicand,
3671 IN UINT64 Multiplier
3672 );
3673
3688INT64
3689EFIAPI
3690MultS64x64 (
3691 IN INT64 Multiplicand,
3692 IN INT64 Multiplier
3693 );
3694
3711UINT64
3712EFIAPI
3713DivU64x32 (
3714 IN UINT64 Dividend,
3715 IN UINT32 Divisor
3716 );
3717
3734UINT32
3735EFIAPI
3736ModU64x32 (
3737 IN UINT64 Dividend,
3738 IN UINT32 Divisor
3739 );
3740
3760UINT64
3761EFIAPI
3763 IN UINT64 Dividend,
3764 IN UINT32 Divisor,
3765 OUT UINT32 *Remainder OPTIONAL
3766 );
3767
3787UINT64
3788EFIAPI
3790 IN UINT64 Dividend,
3791 IN UINT64 Divisor,
3792 OUT UINT64 *Remainder OPTIONAL
3793 );
3794
3818INT64
3819EFIAPI
3821 IN INT64 Dividend,
3822 IN INT64 Divisor,
3823 OUT INT64 *Remainder OPTIONAL
3824 );
3825
3839UINT16
3840EFIAPI
3842 IN CONST VOID *Buffer
3843 );
3844
3860UINT16
3861EFIAPI
3863 OUT VOID *Buffer,
3864 IN UINT16 Value
3865 );
3866
3880UINT32
3881EFIAPI
3883 IN CONST VOID *Buffer
3884 );
3885
3901UINT32
3902EFIAPI
3904 OUT VOID *Buffer,
3905 IN UINT32 Value
3906 );
3907
3921UINT32
3922EFIAPI
3924 IN CONST VOID *Buffer
3925 );
3926
3942UINT32
3943EFIAPI
3945 OUT VOID *Buffer,
3946 IN UINT32 Value
3947 );
3948
3962UINT64
3963EFIAPI
3965 IN CONST VOID *Buffer
3966 );
3967
3983UINT64
3984EFIAPI
3986 OUT VOID *Buffer,
3987 IN UINT64 Value
3988 );
3989
3990//
3991// Bit Field Functions
3992//
3993
4013UINT8
4014EFIAPI
4016 IN UINT8 Operand,
4017 IN UINTN StartBit,
4018 IN UINTN EndBit
4019 );
4020
4044UINT8
4045EFIAPI
4047 IN UINT8 Operand,
4048 IN UINTN StartBit,
4049 IN UINTN EndBit,
4050 IN UINT8 Value
4051 );
4052
4077UINT8
4078EFIAPI
4080 IN UINT8 Operand,
4081 IN UINTN StartBit,
4082 IN UINTN EndBit,
4083 IN UINT8 OrData
4084 );
4085
4110UINT8
4111EFIAPI
4113 IN UINT8 Operand,
4114 IN UINTN StartBit,
4115 IN UINTN EndBit,
4116 IN UINT8 AndData
4117 );
4118
4146UINT8
4147EFIAPI
4149 IN UINT8 Operand,
4150 IN UINTN StartBit,
4151 IN UINTN EndBit,
4152 IN UINT8 AndData,
4153 IN UINT8 OrData
4154 );
4155
4175UINT16
4176EFIAPI
4178 IN UINT16 Operand,
4179 IN UINTN StartBit,
4180 IN UINTN EndBit
4181 );
4182
4206UINT16
4207EFIAPI
4209 IN UINT16 Operand,
4210 IN UINTN StartBit,
4211 IN UINTN EndBit,
4212 IN UINT16 Value
4213 );
4214
4239UINT16
4240EFIAPI
4242 IN UINT16 Operand,
4243 IN UINTN StartBit,
4244 IN UINTN EndBit,
4245 IN UINT16 OrData
4246 );
4247
4272UINT16
4273EFIAPI
4275 IN UINT16 Operand,
4276 IN UINTN StartBit,
4277 IN UINTN EndBit,
4278 IN UINT16 AndData
4279 );
4280
4308UINT16
4309EFIAPI
4311 IN UINT16 Operand,
4312 IN UINTN StartBit,
4313 IN UINTN EndBit,
4314 IN UINT16 AndData,
4315 IN UINT16 OrData
4316 );
4317
4337UINT32
4338EFIAPI
4340 IN UINT32 Operand,
4341 IN UINTN StartBit,
4342 IN UINTN EndBit
4343 );
4344
4368UINT32
4369EFIAPI
4371 IN UINT32 Operand,
4372 IN UINTN StartBit,
4373 IN UINTN EndBit,
4374 IN UINT32 Value
4375 );
4376
4401UINT32
4402EFIAPI
4404 IN UINT32 Operand,
4405 IN UINTN StartBit,
4406 IN UINTN EndBit,
4407 IN UINT32 OrData
4408 );
4409
4434UINT32
4435EFIAPI
4437 IN UINT32 Operand,
4438 IN UINTN StartBit,
4439 IN UINTN EndBit,
4440 IN UINT32 AndData
4441 );
4442
4470UINT32
4471EFIAPI
4473 IN UINT32 Operand,
4474 IN UINTN StartBit,
4475 IN UINTN EndBit,
4476 IN UINT32 AndData,
4477 IN UINT32 OrData
4478 );
4479
4499UINT64
4500EFIAPI
4502 IN UINT64 Operand,
4503 IN UINTN StartBit,
4504 IN UINTN EndBit
4505 );
4506
4530UINT64
4531EFIAPI
4533 IN UINT64 Operand,
4534 IN UINTN StartBit,
4535 IN UINTN EndBit,
4536 IN UINT64 Value
4537 );
4538
4563UINT64
4564EFIAPI
4566 IN UINT64 Operand,
4567 IN UINTN StartBit,
4568 IN UINTN EndBit,
4569 IN UINT64 OrData
4570 );
4571
4596UINT64
4597EFIAPI
4599 IN UINT64 Operand,
4600 IN UINTN StartBit,
4601 IN UINTN EndBit,
4602 IN UINT64 AndData
4603 );
4604
4632UINT64
4633EFIAPI
4635 IN UINT64 Operand,
4636 IN UINTN StartBit,
4637 IN UINTN EndBit,
4638 IN UINT64 AndData,
4639 IN UINT64 OrData
4640 );
4641
4662UINT8
4663EFIAPI
4665 IN UINT32 Operand,
4666 IN UINTN StartBit,
4667 IN UINTN EndBit
4668 );
4669
4690UINT8
4691EFIAPI
4693 IN UINT64 Operand,
4694 IN UINTN StartBit,
4695 IN UINTN EndBit
4696 );
4697
4698/*******************************************************************************
4699
4700 UUID (Universally Unique IDentifier), as defined in RFC4122
4701 (https://datatracker.ietf.org/doc/html/rfc4122#section-4.1), is a 128-bit number
4702 used to uniquely identify information in computer systems.
4703
4704 UUIDs contains 5 fields:
4705 - time_low: 32 bits
4706 - time_mid: 16 bits
4707 - time_hi_and_version: 16 bits
4708 - clock_seq_hi_and_reserved: 8 bits
4709 - clock_seq_low: 8 bits
4710 - node: 8 bits * 6
4711
4712 Each field encoded with the Most Significant Byte first (known as network byte
4713 order, or big-endian).
4714
4715 GUID (Globally Unique Identifier), on the other hand, is a 128-bit number used
4716 in UEFI environments, which is similar to UUID but has a different byte order
4717 in memory. See https://uefi.org/specs/UEFI/2.11/Apx_A_GUID_and_Time_Formats.html
4718
4719 GUID also contains 5 fields:
4720 - TimeLow: 32 bits
4721 - TimeMid: 16 bits
4722 - TimeHiAndVersion: 16 bits
4723 - ClockSeqHighAndReserved: 16 bits
4724 - ClockSeqLow: 8 bits
4725 - Node: 8 bits * 6
4726
4727 TimeLow, TimeMid, TimeHighAndVersion fields in the EFI are encoded with the Least
4728 Significant Byte first (also known as little-endian).
4729
4730 Example:
4731 Consider the same string representation/registry format for MM communication v2:
4732 "378daedc-f06b-4446-8314-40ab933c87a3"
4733
4734 In UUID format, it is represented as:
4735 - Data fields:
4736 - time_low: 0x37 0x8d 0xae 0xdc (0x378daedc in big-endian)
4737 - time_mid: 0xf0 0x6b (0xf06b in big-endian)
4738 - time_hi_and_version: 0x44 0x46 (0x4446 in big-endian)
4739 - clock_seq_hi_and_reserved: 0x83
4740 - clock_seq_low: 0x14
4741 - node: 0x00, 0xab, 0x93, 0x3c, 0x87, 0xa3
4742 - Byte representation in memory:
4743 - 37 8d ae dc f0 6b 44 46 83 14 40 ab 93 3c 87 a3
4744
4745 However, in GUID format, it is represented as:
4746 - Data fields:
4747 - TimeLow: 0xdc 0xae 0x8d 0x37 (0x378daedc in little-endian)
4748 - TimeMid: 0x6b 0xf0 (0xf06b in little-endian)
4749 - TimeHiAndVersion: 0x46 0x44 (0x4446 in little-endian)
4750 - ClockSeqHighAndReserved: 0x83
4751 - ClockSeqLow: 0x14
4752 - Node: 0x00, 0xab, 0x93, 0x3c, 0x87, 0xa3
4753 - Byte representation in memory:
4754 - dc ae 8d 37 6b f0 46 44 83 14 40 ab 93 3c 87 a3
4755
4756*******************************************************************************/
4757
4768VOID
4769EFIAPI
4771 IN GUID *FromGuid,
4772 OUT GUID *ToUuid
4773 );
4774
4786VOID
4787EFIAPI
4789 IN GUID *FromUuid,
4790 OUT GUID *ToGuid
4791 );
4792
4793//
4794// Base Library Checksum Functions
4795//
4796
4815UINT8
4816EFIAPI
4818 IN CONST UINT8 *Buffer,
4819 IN UINTN Length
4820 );
4821
4840UINT8
4841EFIAPI
4843 IN CONST UINT8 *Buffer,
4844 IN UINTN Length
4845 );
4846
4866UINT16
4867EFIAPI
4869 IN CONST UINT16 *Buffer,
4870 IN UINTN Length
4871 );
4872
4893UINT16
4894EFIAPI
4896 IN CONST UINT16 *Buffer,
4897 IN UINTN Length
4898 );
4899
4919UINT32
4920EFIAPI
4922 IN CONST UINT32 *Buffer,
4923 IN UINTN Length
4924 );
4925
4946UINT32
4947EFIAPI
4949 IN CONST UINT32 *Buffer,
4950 IN UINTN Length
4951 );
4952
4972UINT64
4973EFIAPI
4975 IN CONST UINT64 *Buffer,
4976 IN UINTN Length
4977 );
4978
4999UINT64
5000EFIAPI
5002 IN CONST UINT64 *Buffer,
5003 IN UINTN Length
5004 );
5005
5019UINT32
5020EFIAPI
5022 IN VOID *Buffer,
5023 IN UINTN Length
5024 );
5025
5035UINT16
5036EFIAPI
5038 IN CONST VOID *Buffer,
5039 IN UINTN Length,
5040 IN UINT16 InitialValue
5041 );
5042
5043//
5044// Initial value for the CRC16-ANSI algorithm, when no prior checksum has been calculated.
5045//
5046#define CRC16ANSI_INIT 0xffff
5047
5057UINT32
5058EFIAPI
5060 IN CONST VOID *Buffer,
5061 IN UINTN Length,
5062 IN UINT32 InitialValue
5063 );
5064
5074UINT16
5075EFIAPI
5077 IN CONST VOID *Buffer,
5078 IN UINTN Length,
5079 IN UINT16 InitialValue
5080 );
5081
5082//
5083// Base Library CPU Functions
5084//
5085
5092typedef
5094(EFIAPI *SWITCH_STACK_ENTRY_POINT)(
5095 IN VOID *Context1 OPTIONAL,
5096 IN VOID *Context2 OPTIONAL
5097 );
5098
5106VOID
5107EFIAPI
5109 VOID
5110 );
5111
5134UINTN
5135EFIAPI
5136SetJump (
5137 OUT BASE_LIBRARY_JUMP_BUFFER *JumpBuffer
5138 );
5139
5156VOID
5157EFIAPI
5158LongJump (
5159 IN BASE_LIBRARY_JUMP_BUFFER *JumpBuffer,
5160 IN UINTN Value
5161 );
5162
5167VOID
5168EFIAPI
5170 VOID
5171 );
5172
5177VOID
5178EFIAPI
5180 VOID
5181 );
5182
5191BOOLEAN
5192EFIAPI
5194 VOID
5195 );
5196
5202VOID
5203EFIAPI
5205 VOID
5206 );
5207
5218BOOLEAN
5219EFIAPI
5221 VOID
5222 );
5223
5238BOOLEAN
5239EFIAPI
5241 IN BOOLEAN InterruptState
5242 );
5243
5251VOID
5252EFIAPI
5253CpuPause (
5254 VOID
5255 );
5256
5286VOID
5287EFIAPI
5289 IN SWITCH_STACK_ENTRY_POINT EntryPoint,
5290 IN VOID *Context1 OPTIONAL,
5291 IN VOID *Context2 OPTIONAL,
5292 IN VOID *NewStack,
5293 ...
5294 );
5295
5303VOID
5304EFIAPI
5306 VOID
5307 );
5308
5318VOID
5319EFIAPI
5321 VOID
5322 );
5323
5331VOID
5332EFIAPI
5334 VOID
5335 );
5336
5351UINTN
5352EFIAPI
5353TdCall (
5354 IN UINT64 Leaf,
5355 IN UINT64 Arg1,
5356 IN UINT64 Arg2,
5357 IN UINT64 Arg3,
5358 IN OUT VOID *Results
5359 );
5360
5376UINTN
5377EFIAPI
5378TdVmCall (
5379 IN UINT64 Leaf,
5380 IN UINT64 Arg1,
5381 IN UINT64 Arg2,
5382 IN UINT64 Arg3,
5383 IN UINT64 Arg4,
5384 IN OUT VOID *Results
5385 );
5386
5393BOOLEAN
5394EFIAPI
5396 VOID
5397 );
5398
5405BOOLEAN
5406EFIAPI
5408 VOID
5409 );
5410
5411#if defined (MDE_CPU_X64)
5412//
5413// The page size for the PVALIDATE instruction
5414//
5415typedef enum {
5416 PvalidatePageSize4K = 0,
5417 PvalidatePageSize2MB,
5418} PVALIDATE_PAGE_SIZE;
5419
5420//
5421// PVALIDATE Return Code.
5422//
5423#define PVALIDATE_RET_SUCCESS 0
5424#define PVALIDATE_RET_FAIL_INPUT 1
5425#define PVALIDATE_RET_SIZE_MISMATCH 6
5426
5427//
5428// The PVALIDATE instruction did not make any changes to the RMP entry.
5429//
5430#define PVALIDATE_RET_NO_RMPUPDATE 255
5431
5452UINT32
5453EFIAPI
5454AsmPvalidate (
5455 IN PVALIDATE_PAGE_SIZE PageSize,
5456 IN BOOLEAN Validate,
5457 IN PHYSICAL_ADDRESS Address
5458 );
5459
5460//
5461// RDX settings for RMPADJUST
5462//
5463#define RMPADJUST_VMPL_MAX 3
5464#define RMPADJUST_VMPL_MASK 0xFF
5465#define RMPADJUST_VMPL_SHIFT 0
5466#define RMPADJUST_PERMISSION_MASK_MASK 0xFF
5467#define RMPADJUST_PERMISSION_MASK_SHIFT 8
5468#define RMPADJUST_VMSA_PAGE_BIT BIT16
5469
5487UINT32
5488EFIAPI
5489AsmRmpAdjust (
5490 IN UINT64 Rax,
5491 IN UINT64 Rcx,
5492 IN UINT64 Rdx
5493 );
5494
5495#endif
5496
5497#if defined (MDE_CPU_IA32) || defined (MDE_CPU_X64)
5502typedef union {
5503 struct {
5504 UINT32 CF : 1;
5505 UINT32 Reserved_0 : 1;
5506 UINT32 PF : 1;
5507 UINT32 Reserved_1 : 1;
5508 UINT32 AF : 1;
5509 UINT32 Reserved_2 : 1;
5510 UINT32 ZF : 1;
5511 UINT32 SF : 1;
5512 UINT32 TF : 1;
5513 UINT32 IF : 1;
5514 UINT32 DF : 1;
5515 UINT32 OF : 1;
5516 UINT32 IOPL : 2;
5517 UINT32 NT : 1;
5518 UINT32 Reserved_3 : 1;
5519 } Bits;
5520 UINT16 Uint16;
5521} IA32_FLAGS16;
5522
5528typedef union {
5529 struct {
5530 UINT32 CF : 1;
5531 UINT32 Reserved_0 : 1;
5532 UINT32 PF : 1;
5533 UINT32 Reserved_1 : 1;
5534 UINT32 AF : 1;
5535 UINT32 Reserved_2 : 1;
5536 UINT32 ZF : 1;
5537 UINT32 SF : 1;
5538 UINT32 TF : 1;
5539 UINT32 IF : 1;
5540 UINT32 DF : 1;
5541 UINT32 OF : 1;
5542 UINT32 IOPL : 2;
5543 UINT32 NT : 1;
5544 UINT32 Reserved_3 : 1;
5545 UINT32 RF : 1;
5546 UINT32 VM : 1;
5547 UINT32 AC : 1;
5548 UINT32 VIF : 1;
5549 UINT32 VIP : 1;
5550 UINT32 ID : 1;
5551 UINT32 Reserved_4 : 10;
5552 } Bits;
5553 UINTN UintN;
5554} IA32_EFLAGS32;
5555
5561typedef union {
5562 struct {
5563 UINT32 PE : 1;
5564 UINT32 MP : 1;
5565 UINT32 EM : 1;
5566 UINT32 TS : 1;
5567 UINT32 ET : 1;
5568 UINT32 NE : 1;
5569 UINT32 Reserved_0 : 10;
5570 UINT32 WP : 1;
5571 UINT32 Reserved_1 : 1;
5572 UINT32 AM : 1;
5573 UINT32 Reserved_2 : 10;
5574 UINT32 NW : 1;
5575 UINT32 CD : 1;
5576 UINT32 PG : 1;
5577 } Bits;
5578 UINTN UintN;
5579} IA32_CR0;
5580
5586typedef union {
5587 struct {
5588 UINT32 VME : 1;
5589 UINT32 PVI : 1;
5590 UINT32 TSD : 1;
5591 UINT32 DE : 1;
5592 UINT32 PSE : 1;
5593 UINT32 PAE : 1;
5594 UINT32 MCE : 1;
5595 UINT32 PGE : 1;
5596 UINT32 PCE : 1;
5598 UINT32 OSFXSR : 1;
5600 UINT32 OSXMMEXCPT : 1;
5603 UINT32 UMIP : 1;
5604 UINT32 LA57 : 1;
5605 UINT32 VMXE : 1;
5606 UINT32 SMXE : 1;
5607 UINT32 Reserved_3 : 1;
5608 UINT32 FSGSBASE : 1;
5609 UINT32 PCIDE : 1;
5610 UINT32 OSXSAVE : 1;
5611 UINT32 Reserved_4 : 1;
5612 UINT32 SMEP : 1;
5613 UINT32 SMAP : 1;
5614 UINT32 PKE : 1;
5615 UINT32 Reserved_5 : 9;
5616 } Bits;
5617 UINTN UintN;
5618} IA32_CR4;
5619
5623typedef union {
5624 struct {
5625 UINT32 LimitLow : 16;
5626 UINT32 BaseLow : 16;
5627 UINT32 BaseMid : 8;
5628 UINT32 Type : 4;
5629 UINT32 S : 1;
5630 UINT32 DPL : 2;
5631 UINT32 P : 1;
5632 UINT32 LimitHigh : 4;
5633 UINT32 AVL : 1;
5634 UINT32 L : 1;
5635 UINT32 DB : 1;
5636 UINT32 G : 1;
5637 UINT32 BaseHigh : 8;
5638 } Bits;
5639 UINT64 Uint64;
5640} IA32_SEGMENT_DESCRIPTOR;
5641
5645 #pragma pack (1)
5646typedef struct {
5647 UINT16 Limit;
5648 UINTN Base;
5649} IA32_DESCRIPTOR;
5650 #pragma pack ()
5651
5652#define IA32_IDT_GATE_TYPE_TASK 0x85
5653#define IA32_IDT_GATE_TYPE_INTERRUPT_16 0x86
5654#define IA32_IDT_GATE_TYPE_TRAP_16 0x87
5655#define IA32_IDT_GATE_TYPE_INTERRUPT_32 0x8E
5656#define IA32_IDT_GATE_TYPE_TRAP_32 0x8F
5657
5658#define IA32_GDT_TYPE_TSS 0x9
5659#define IA32_GDT_ALIGNMENT 8
5660
5661 #if defined (MDE_CPU_IA32)
5665typedef union {
5666 struct {
5667 UINT32 OffsetLow : 16;
5668 UINT32 Selector : 16;
5669 UINT32 Reserved_0 : 8;
5670 UINT32 GateType : 8;
5671 UINT32 OffsetHigh : 16;
5672 } Bits;
5673 UINT64 Uint64;
5674} IA32_IDT_GATE_DESCRIPTOR;
5675
5676 #pragma pack (1)
5677//
5678// IA32 Task-State Segment Definition
5679//
5680typedef struct {
5681 UINT16 PreviousTaskLink;
5682 UINT16 Reserved_2;
5683 UINT32 ESP0;
5684 UINT16 SS0;
5685 UINT16 Reserved_10;
5686 UINT32 ESP1;
5687 UINT16 SS1;
5688 UINT16 Reserved_18;
5689 UINT32 ESP2;
5690 UINT16 SS2;
5691 UINT16 Reserved_26;
5692 UINT32 CR3;
5693 UINT32 EIP;
5694 UINT32 EFLAGS;
5695 UINT32 EAX;
5696 UINT32 ECX;
5697 UINT32 EDX;
5698 UINT32 EBX;
5699 UINT32 ESP;
5700 UINT32 EBP;
5701 UINT32 ESI;
5702 UINT32 EDI;
5703 UINT16 ES;
5704 UINT16 Reserved_74;
5705 UINT16 CS;
5706 UINT16 Reserved_78;
5707 UINT16 SS;
5708 UINT16 Reserved_82;
5709 UINT16 DS;
5710 UINT16 Reserved_86;
5711 UINT16 FS;
5712 UINT16 Reserved_90;
5713 UINT16 GS;
5714 UINT16 Reserved_94;
5715 UINT16 LDTSegmentSelector;
5716 UINT16 Reserved_98;
5717 UINT16 T;
5718 UINT16 IOMapBaseAddress;
5719} IA32_TASK_STATE_SEGMENT;
5720
5721typedef union {
5722 struct {
5723 UINT32 LimitLow : 16;
5724 UINT32 BaseLow : 16;
5725 UINT32 BaseMid : 8;
5726 UINT32 Type : 4;
5727 UINT32 Reserved_43 : 1;
5728 UINT32 DPL : 2;
5729 UINT32 P : 1;
5730 UINT32 LimitHigh : 4;
5731 UINT32 AVL : 1;
5732 UINT32 Reserved_52 : 2;
5733 UINT32 G : 1;
5734 UINT32 BaseHigh : 8;
5735 } Bits;
5736 UINT64 Uint64;
5737} IA32_TSS_DESCRIPTOR;
5738 #pragma pack ()
5739
5740 #endif // defined (MDE_CPU_IA32)
5741
5742 #if defined (MDE_CPU_X64)
5746typedef union {
5747 struct {
5748 UINT32 OffsetLow : 16;
5749 UINT32 Selector : 16;
5750 UINT32 Reserved_0 : 8;
5751 UINT32 GateType : 8;
5752 UINT32 OffsetHigh : 16;
5753 UINT32 OffsetUpper : 32;
5754 UINT32 Reserved_1 : 32;
5755 } Bits;
5756 struct {
5757 UINT64 Uint64;
5758 UINT64 Uint64_1;
5759 } Uint128;
5760} IA32_IDT_GATE_DESCRIPTOR;
5761
5762 #pragma pack (1)
5763//
5764// IA32 Task-State Segment Definition
5765//
5766typedef struct {
5767 UINT32 Reserved_0;
5768 UINT64 RSP0;
5769 UINT64 RSP1;
5770 UINT64 RSP2;
5771 UINT64 Reserved_28;
5772 UINT64 IST[7];
5773 UINT64 Reserved_92;
5774 UINT16 Reserved_100;
5775 UINT16 IOMapBaseAddress;
5776} IA32_TASK_STATE_SEGMENT;
5777
5778typedef union {
5779 struct {
5780 UINT32 LimitLow : 16;
5781 UINT32 BaseLow : 16;
5782 UINT32 BaseMidl : 8;
5783 UINT32 Type : 4;
5784 UINT32 Reserved_43 : 1;
5785 UINT32 DPL : 2;
5786 UINT32 P : 1;
5787 UINT32 LimitHigh : 4;
5788 UINT32 AVL : 1;
5789 UINT32 Reserved_52 : 2;
5790 UINT32 G : 1;
5791 UINT32 BaseMidh : 8;
5792 UINT32 BaseHigh : 32;
5793 UINT32 Reserved_96 : 32;
5794 } Bits;
5795 struct {
5796 UINT64 Uint64;
5797 UINT64 Uint64_1;
5798 } Uint128;
5799} IA32_TSS_DESCRIPTOR;
5800 #pragma pack ()
5801
5802 #endif // defined (MDE_CPU_X64)
5803
5807typedef struct {
5808 UINT8 Buffer[512];
5809} IA32_FX_BUFFER;
5810
5814typedef struct {
5815 UINT32 Reserved1;
5816 UINT32 Reserved2;
5817 UINT32 Reserved3;
5818 UINT32 Reserved4;
5819 UINT8 BL;
5820 UINT8 BH;
5821 UINT16 Reserved5;
5822 UINT8 DL;
5823 UINT8 DH;
5824 UINT16 Reserved6;
5825 UINT8 CL;
5826 UINT8 CH;
5827 UINT16 Reserved7;
5828 UINT8 AL;
5829 UINT8 AH;
5830 UINT16 Reserved8;
5831} IA32_BYTE_REGS;
5832
5833typedef struct {
5834 UINT16 DI;
5835 UINT16 Reserved1;
5836 UINT16 SI;
5837 UINT16 Reserved2;
5838 UINT16 BP;
5839 UINT16 Reserved3;
5840 UINT16 SP;
5841 UINT16 Reserved4;
5842 UINT16 BX;
5843 UINT16 Reserved5;
5844 UINT16 DX;
5845 UINT16 Reserved6;
5846 UINT16 CX;
5847 UINT16 Reserved7;
5848 UINT16 AX;
5849 UINT16 Reserved8;
5850} IA32_WORD_REGS;
5851
5852typedef struct {
5853 UINT32 EDI;
5854 UINT32 ESI;
5855 UINT32 EBP;
5856 UINT32 ESP;
5857 UINT32 EBX;
5858 UINT32 EDX;
5859 UINT32 ECX;
5860 UINT32 EAX;
5861 UINT16 DS;
5862 UINT16 ES;
5863 UINT16 FS;
5864 UINT16 GS;
5865 IA32_EFLAGS32 EFLAGS;
5866 UINT32 Eip;
5867 UINT16 CS;
5868 UINT16 SS;
5869} IA32_DWORD_REGS;
5870
5871typedef union {
5872 IA32_DWORD_REGS E;
5873 IA32_WORD_REGS X;
5874 IA32_BYTE_REGS H;
5875} IA32_REGISTER_SET;
5876
5880typedef struct {
5881 IA32_REGISTER_SET *RealModeState;
5882 VOID *RealModeBuffer;
5883 UINT32 RealModeBufferSize;
5884 UINT32 ThunkAttributes;
5885} THUNK_CONTEXT;
5886
5887#define THUNK_ATTRIBUTE_BIG_REAL_MODE 0x00000001
5888#define THUNK_ATTRIBUTE_DISABLE_A20_MASK_INT_15 0x00000002
5889#define THUNK_ATTRIBUTE_DISABLE_A20_MASK_KBD_CTRL 0x00000004
5890
5903typedef VOID (X86_ASSEMBLY_PATCH_LABEL) (
5904 VOID
5905 );
5906
5932UINT32
5933EFIAPI
5934AsmCpuid (
5935 IN UINT32 Index,
5936 OUT UINT32 *Eax OPTIONAL,
5937 OUT UINT32 *Ebx OPTIONAL,
5938 OUT UINT32 *Ecx OPTIONAL,
5939 OUT UINT32 *Edx OPTIONAL
5940 );
5941
5974UINT32
5975EFIAPI
5976AsmCpuidEx (
5977 IN UINT32 Index,
5978 IN UINT32 SubIndex,
5979 OUT UINT32 *Eax OPTIONAL,
5980 OUT UINT32 *Ebx OPTIONAL,
5981 OUT UINT32 *Ecx OPTIONAL,
5982 OUT UINT32 *Edx OPTIONAL
5983 );
5984
5992VOID
5993EFIAPI
5995 VOID
5996 );
5997
6005VOID
6006EFIAPI
6008 VOID
6009 );
6010
6025UINT32
6026EFIAPI
6028 IN UINT32 Index
6029 );
6030
6048UINT32
6049EFIAPI
6051 IN UINT32 Index,
6052 IN UINT32 Value
6053 );
6054
6074UINT32
6075EFIAPI
6076AsmMsrOr32 (
6077 IN UINT32 Index,
6078 IN UINT32 OrData
6079 );
6080
6100UINT32
6101EFIAPI
6103 IN UINT32 Index,
6104 IN UINT32 AndData
6105 );
6106
6129UINT32
6130EFIAPI
6132 IN UINT32 Index,
6133 IN UINT32 AndData,
6134 IN UINT32 OrData
6135 );
6136
6159UINT32
6160EFIAPI
6162 IN UINT32 Index,
6163 IN UINTN StartBit,
6164 IN UINTN EndBit
6165 );
6166
6192UINT32
6193EFIAPI
6195 IN UINT32 Index,
6196 IN UINTN StartBit,
6197 IN UINTN EndBit,
6198 IN UINT32 Value
6199 );
6200
6228UINT32
6229EFIAPI
6231 IN UINT32 Index,
6232 IN UINTN StartBit,
6233 IN UINTN EndBit,
6234 IN UINT32 OrData
6235 );
6236
6264UINT32
6265EFIAPI
6267 IN UINT32 Index,
6268 IN UINTN StartBit,
6269 IN UINTN EndBit,
6270 IN UINT32 AndData
6271 );
6272
6304UINT32
6305EFIAPI
6307 IN UINT32 Index,
6308 IN UINTN StartBit,
6309 IN UINTN EndBit,
6310 IN UINT32 AndData,
6311 IN UINT32 OrData
6312 );
6313
6328UINT64
6329EFIAPI
6331 IN UINT32 Index
6332 );
6333
6351UINT64
6352EFIAPI
6354 IN UINT32 Index,
6355 IN UINT64 Value
6356 );
6357
6376UINT64
6377EFIAPI
6378AsmMsrOr64 (
6379 IN UINT32 Index,
6380 IN UINT64 OrData
6381 );
6382
6401UINT64
6402EFIAPI
6404 IN UINT32 Index,
6405 IN UINT64 AndData
6406 );
6407
6429UINT64
6430EFIAPI
6432 IN UINT32 Index,
6433 IN UINT64 AndData,
6434 IN UINT64 OrData
6435 );
6436
6459UINT64
6460EFIAPI
6462 IN UINT32 Index,
6463 IN UINTN StartBit,
6464 IN UINTN EndBit
6465 );
6466
6491UINT64
6492EFIAPI
6494 IN UINT32 Index,
6495 IN UINTN StartBit,
6496 IN UINTN EndBit,
6497 IN UINT64 Value
6498 );
6499
6527UINT64
6528EFIAPI
6530 IN UINT32 Index,
6531 IN UINTN StartBit,
6532 IN UINTN EndBit,
6533 IN UINT64 OrData
6534 );
6535
6563UINT64
6564EFIAPI
6566 IN UINT32 Index,
6567 IN UINTN StartBit,
6568 IN UINTN EndBit,
6569 IN UINT64 AndData
6570 );
6571
6602UINT64
6603EFIAPI
6605 IN UINT32 Index,
6606 IN UINTN StartBit,
6607 IN UINTN EndBit,
6608 IN UINT64 AndData,
6609 IN UINT64 OrData
6610 );
6611
6622UINTN
6623EFIAPI
6625 VOID
6626 );
6627
6638UINTN
6639EFIAPI
6640AsmReadCr0 (
6641 VOID
6642 );
6643
6654UINTN
6655EFIAPI
6656AsmReadCr2 (
6657 VOID
6658 );
6659
6670UINTN
6671EFIAPI
6672AsmReadCr3 (
6673 VOID
6674 );
6675
6686UINTN
6687EFIAPI
6688AsmReadCr4 (
6689 VOID
6690 );
6691
6703UINTN
6704EFIAPI
6706 UINTN Cr0
6707 );
6708
6720UINTN
6721EFIAPI
6723 UINTN Cr2
6724 );
6725
6737UINTN
6738EFIAPI
6740 UINTN Cr3
6741 );
6742
6754UINTN
6755EFIAPI
6757 UINTN Cr4
6758 );
6759
6770UINTN
6771EFIAPI
6772AsmReadDr0 (
6773 VOID
6774 );
6775
6786UINTN
6787EFIAPI
6788AsmReadDr1 (
6789 VOID
6790 );
6791
6802UINTN
6803EFIAPI
6804AsmReadDr2 (
6805 VOID
6806 );
6807
6818UINTN
6819EFIAPI
6820AsmReadDr3 (
6821 VOID
6822 );
6823
6834UINTN
6835EFIAPI
6836AsmReadDr4 (
6837 VOID
6838 );
6839
6850UINTN
6851EFIAPI
6852AsmReadDr5 (
6853 VOID
6854 );
6855
6866UINTN
6867EFIAPI
6868AsmReadDr6 (
6869 VOID
6870 );
6871
6882UINTN
6883EFIAPI
6884AsmReadDr7 (
6885 VOID
6886 );
6887
6899UINTN
6900EFIAPI
6902 UINTN Dr0
6903 );
6904
6916UINTN
6917EFIAPI
6919 UINTN Dr1
6920 );
6921
6933UINTN
6934EFIAPI
6936 UINTN Dr2
6937 );
6938
6950UINTN
6951EFIAPI
6953 UINTN Dr3
6954 );
6955
6967UINTN
6968EFIAPI
6970 UINTN Dr4
6971 );
6972
6984UINTN
6985EFIAPI
6987 UINTN Dr5
6988 );
6989
7001UINTN
7002EFIAPI
7004 UINTN Dr6
7005 );
7006
7018UINTN
7019EFIAPI
7021 UINTN Dr7
7022 );
7023
7033UINT16
7034EFIAPI
7035AsmReadCs (
7036 VOID
7037 );
7038
7048UINT16
7049EFIAPI
7050AsmReadDs (
7051 VOID
7052 );
7053
7063UINT16
7064EFIAPI
7065AsmReadEs (
7066 VOID
7067 );
7068
7078UINT16
7079EFIAPI
7080AsmReadFs (
7081 VOID
7082 );
7083
7093UINT16
7094EFIAPI
7095AsmReadGs (
7096 VOID
7097 );
7098
7108UINT16
7109EFIAPI
7110AsmReadSs (
7111 VOID
7112 );
7113
7123UINT16
7124EFIAPI
7125AsmReadTr (
7126 VOID
7127 );
7128
7140VOID
7141EFIAPI
7143 OUT IA32_DESCRIPTOR *Gdtr
7144 );
7145
7157VOID
7158EFIAPI
7160 IN CONST IA32_DESCRIPTOR *Gdtr
7161 );
7162
7174VOID
7175EFIAPI
7177 OUT IA32_DESCRIPTOR *Idtr
7178 );
7179
7191VOID
7192EFIAPI
7194 IN CONST IA32_DESCRIPTOR *Idtr
7195 );
7196
7206UINT16
7207EFIAPI
7209 VOID
7210 );
7211
7221VOID
7222EFIAPI
7224 IN UINT16 Ldtr
7225 );
7226
7240VOID
7241EFIAPI
7242AsmFxSave (
7243 OUT IA32_FX_BUFFER *Buffer
7244 );
7245
7260VOID
7261EFIAPI
7263 IN CONST IA32_FX_BUFFER *Buffer
7264 );
7265
7275UINT64
7276EFIAPI
7277AsmReadMm0 (
7278 VOID
7279 );
7280
7290UINT64
7291EFIAPI
7292AsmReadMm1 (
7293 VOID
7294 );
7295
7305UINT64
7306EFIAPI
7307AsmReadMm2 (
7308 VOID
7309 );
7310
7320UINT64
7321EFIAPI
7322AsmReadMm3 (
7323 VOID
7324 );
7325
7335UINT64
7336EFIAPI
7337AsmReadMm4 (
7338 VOID
7339 );
7340
7350UINT64
7351EFIAPI
7352AsmReadMm5 (
7353 VOID
7354 );
7355
7365UINT64
7366EFIAPI
7367AsmReadMm6 (
7368 VOID
7369 );
7370
7380UINT64
7381EFIAPI
7382AsmReadMm7 (
7383 VOID
7384 );
7385
7395VOID
7396EFIAPI
7398 IN UINT64 Value
7399 );
7400
7410VOID
7411EFIAPI
7413 IN UINT64 Value
7414 );
7415
7425VOID
7426EFIAPI
7428 IN UINT64 Value
7429 );
7430
7440VOID
7441EFIAPI
7443 IN UINT64 Value
7444 );
7445
7455VOID
7456EFIAPI
7458 IN UINT64 Value
7459 );
7460
7470VOID
7471EFIAPI
7473 IN UINT64 Value
7474 );
7475
7485VOID
7486EFIAPI
7488 IN UINT64 Value
7489 );
7490
7500VOID
7501EFIAPI
7503 IN UINT64 Value
7504 );
7505
7515UINT64
7516EFIAPI
7517AsmReadTsc (
7518 VOID
7519 );
7520
7532UINT64
7533EFIAPI
7534AsmReadPmc (
7535 IN UINT32 Index
7536 );
7537
7554UINTN
7555EFIAPI
7556AsmMonitor (
7557 IN UINTN Eax,
7558 IN UINTN Ecx,
7559 IN UINTN Edx
7560 );
7561
7576UINTN
7577EFIAPI
7578AsmMwait (
7579 IN UINTN Eax,
7580 IN UINTN Ecx
7581 );
7582
7590VOID
7591EFIAPI
7592AsmWbinvd (
7593 VOID
7594 );
7595
7603VOID
7604EFIAPI
7605AsmInvd (
7606 VOID
7607 );
7608
7624VOID *
7625EFIAPI
7627 IN VOID *LinearAddress
7628 );
7629
7667VOID
7668EFIAPI
7670 IN SWITCH_STACK_ENTRY_POINT EntryPoint,
7671 IN VOID *Context1 OPTIONAL,
7672 IN VOID *Context2 OPTIONAL,
7673 IN VOID *NewStack
7674 );
7675
7710VOID
7711EFIAPI
7713 IN SWITCH_STACK_ENTRY_POINT EntryPoint,
7714 IN VOID *Context1 OPTIONAL,
7715 IN VOID *Context2 OPTIONAL,
7716 IN VOID *NewStack
7717 );
7718
7751VOID
7752EFIAPI
7754 IN UINT16 Cs,
7755 IN UINT64 EntryPoint,
7756 IN UINT64 Context1 OPTIONAL,
7757 IN UINT64 Context2 OPTIONAL,
7758 IN UINT64 NewStack
7759 );
7760
7791VOID
7792EFIAPI
7794 IN UINT16 Cs,
7795 IN UINT32 EntryPoint,
7796 IN UINT32 Context1 OPTIONAL,
7797 IN UINT32 Context2 OPTIONAL,
7798 IN UINT32 NewStack
7799 );
7800
7801//
7802// 16-bit thunking services
7803//
7804
7826VOID
7827EFIAPI
7829 OUT UINT32 *RealModeBufferSize,
7830 OUT UINT32 *ExtraStackSize
7831 );
7832
7847VOID
7848EFIAPI
7850 IN OUT THUNK_CONTEXT *ThunkContext
7851 );
7852
7906VOID
7907EFIAPI
7908AsmThunk16 (
7909 IN OUT THUNK_CONTEXT *ThunkContext
7910 );
7911
7932VOID
7933EFIAPI
7935 IN OUT THUNK_CONTEXT *ThunkContext
7936 );
7937
7949BOOLEAN
7950EFIAPI
7952 OUT UINT16 *Rand
7953 );
7954
7966BOOLEAN
7967EFIAPI
7969 OUT UINT32 *Rand
7970 );
7971
7983BOOLEAN
7984EFIAPI
7986 OUT UINT64 *Rand
7987 );
7988
7994VOID
7995EFIAPI
7996AsmWriteTr (
7997 IN UINT16 Selector
7998 );
7999
8007VOID
8008EFIAPI
8009AsmLfence (
8010 VOID
8011 );
8012
8023UINT64
8024EFIAPI
8025AsmXGetBv (
8026 IN UINT32 Index
8027 );
8028
8046UINT64
8047EFIAPI
8048AsmXSetBv (
8049 IN UINT32 Index,
8050 IN UINT64 Value
8051 );
8052
8060VOID
8061EFIAPI
8062AsmVmgExit (
8063 VOID
8064 );
8065
8069typedef struct {
8070 VOID *Caa;
8071 UINT64 RaxIn;
8072 UINT64 RcxIn;
8073 UINT64 RdxIn;
8074 UINT64 R8In;
8075 UINT64 R9In;
8076 UINT64 RaxOut;
8077 UINT64 RcxOut;
8078 UINT64 RdxOut;
8079 UINT64 R8Out;
8080 UINT64 R9Out;
8081 UINT8 *CallPending;
8082} SVSM_CALL_DATA;
8083
8099UINT32
8100EFIAPI
8101AsmVmgExitSvsm (
8102 IN OUT SVSM_CALL_DATA *SvsmCallData
8103 );
8104
8139VOID
8140EFIAPI
8142 OUT X86_ASSEMBLY_PATCH_LABEL *InstructionEnd,
8143 IN UINT64 PatchValue,
8144 IN UINTN ValueSize
8145 );
8146
8147#endif // defined (MDE_CPU_IA32) || defined (MDE_CPU_X64)
8148#endif // !defined (__BASE_LIB__)
UINT64 UINTN
INT64 INTN
VOID EFIAPI AsmWriteMm3(IN UINT64 Value)
Definition: GccInline.c:445
UINT64 EFIAPI AsmReadMm7(VOID)
Definition: GccInline.c:350
UINTN EFIAPI AsmReadEflags(VOID)
Definition: GccInline.c:75
UINT64 EFIAPI AsmReadTsc(VOID)
Definition: GccInline.c:555
VOID EFIAPI AsmWriteMm7(IN UINT64 Value)
Definition: GccInline.c:533
UINT64 EFIAPI AsmReadMm2(VOID)
Definition: GccInline.c:205
UINT64 EFIAPI AsmReadMm5(VOID)
Definition: GccInline.c:292
VOID EFIAPI AsmWriteMm5(IN UINT64 Value)
Definition: GccInline.c:489
UINT64 EFIAPI AsmReadMm1(VOID)
Definition: GccInline.c:176
VOID EFIAPI AsmWriteMm6(IN UINT64 Value)
Definition: GccInline.c:511
VOID EFIAPI AsmWriteMm0(IN UINT64 Value)
Definition: GccInline.c:379
UINT64 EFIAPI AsmReadMm3(VOID)
Definition: GccInline.c:234
VOID EFIAPI AsmWriteMm2(IN UINT64 Value)
Definition: GccInline.c:423
UINT64 EFIAPI AsmReadMm6(VOID)
Definition: GccInline.c:321
VOID EFIAPI AsmWriteMm4(IN UINT64 Value)
Definition: GccInline.c:467
UINT64 EFIAPI AsmReadMm0(VOID)
Definition: GccInline.c:147
UINT64 EFIAPI AsmReadMm4(VOID)
Definition: GccInline.c:263
VOID EFIAPI AsmWriteMm1(IN UINT64 Value)
Definition: GccInline.c:401
UINT32 EFIAPI BitFieldAnd32(IN UINT32 Operand, IN UINTN StartBit, IN UINTN EndBit, IN UINT32 AndData)
Definition: BitField.c:639
UINTN EFIAPI AsciiStrnLenS(IN CONST CHAR8 *String, IN UINTN MaxSize)
Definition: SafeString.c:1696
UINT64 EFIAPI BitFieldOr64(IN UINT64 Operand, IN UINTN StartBit, IN UINTN EndBit, IN UINT64 OrData)
Definition: BitField.c:793
UINT8 EFIAPI BitFieldCountOnes64(IN UINT64 Operand, IN UINTN StartBit, IN UINTN EndBit)
Definition: BitField.c:984
UINT16 EFIAPI BitFieldAnd16(IN UINT16 Operand, IN UINTN StartBit, IN UINTN EndBit, IN UINT16 AndData)
Definition: BitField.c:447
UINT64 EFIAPI CalculateCheckSum64(IN CONST UINT64 *Buffer, IN UINTN Length)
Definition: CheckSum.c:311
INTN EFIAPI AsciiStriCmp(IN CONST CHAR8 *FirstString, IN CONST CHAR8 *SecondString)
Definition: String.c:814
UINT32 EFIAPI RRotU32(IN UINT32 Operand, IN UINTN Count)
Definition: RRotU32.c:29
UINT64 EFIAPI StrHexToUint64(IN CONST CHAR16 *String)
Definition: String.c:560
BOOLEAN EFIAPI IsNull(IN CONST LIST_ENTRY *List, IN CONST LIST_ENTRY *Node)
Definition: LinkedList.c:443
UINT8 EFIAPI BcdToDecimal8(IN UINT8 Value)
Definition: String.c:1677
LIST_ENTRY *EFIAPI GetPreviousNode(IN CONST LIST_ENTRY *List, IN CONST LIST_ENTRY *Node)
Definition: LinkedList.c:369
BOOLEAN EFIAPI SetInterruptState(IN BOOLEAN InterruptState)
Definition: Cpu.c:48
UINT64 EFIAPI BitFieldAndThenOr64(IN UINT64 Operand, IN UINTN StartBit, IN UINTN EndBit, IN UINT64 AndData, IN UINT64 OrData)
Definition: BitField.c:900
UINTN EFIAPI StrSize(IN CONST CHAR16 *String)
Definition: String.c:72
UINT8 EFIAPI BitFieldAndThenOr8(IN UINT8 Operand, IN UINTN StartBit, IN UINTN EndBit, IN UINT8 AndData, IN UINT8 OrData)
Definition: BitField.c:296
BOOLEAN EFIAPI IsListEmpty(IN CONST LIST_ENTRY *ListHead)
Definition: LinkedList.c:403
BOOLEAN EFIAPI SevGuestIsEnabled(VOID)
Definition: AmdSevNull.c:21
RETURN_STATUS EFIAPI AsciiStrnCpyS(OUT CHAR8 *Destination, IN UINTN DestMax, IN CONST CHAR8 *Source, IN UINTN Length)
Definition: SafeString.c:1875
UINT32 EFIAPI BitFieldAndThenOr32(IN UINT32 Operand, IN UINTN StartBit, IN UINTN EndBit, IN UINT32 AndData, IN UINT32 OrData)
Definition: BitField.c:680
INTN EFIAPI LowBitSet32(IN UINT32 Operand)
Definition: LowBitSet32.c:26
RETURN_STATUS EFIAPI StrCpyS(OUT CHAR16 *Destination, IN UINTN DestMax, IN CONST CHAR16 *Source)
Definition: SafeString.c:226
UINT64 EFIAPI ReadUnaligned64(IN CONST VOID *Buffer)
Definition: Unaligned.c:191
CHAR16 EFIAPI CharToUpper(IN CHAR16 Char)
Definition: String.c:307
LIST_ENTRY *EFIAPI GetNextNode(IN CONST LIST_ENTRY *List, IN CONST LIST_ENTRY *Node)
Definition: LinkedList.c:333
BOOLEAN EFIAPI GetInterruptState(VOID)
Definition: CpuBreakpoint.c:86
UINT16 EFIAPI WriteUnaligned16(OUT VOID *Buffer, IN UINT16 Value)
Definition: Unaligned.c:62
UINT64 EFIAPI DivU64x32(IN UINT64 Dividend, IN UINT32 Divisor)
Definition: DivU64x32.c:29
UINTN EFIAPI StrDecimalToUintn(IN CONST CHAR16 *String)
Definition: String.c:405
INTN EFIAPI StrCmp(IN CONST CHAR16 *FirstString, IN CONST CHAR16 *SecondString)
Definition: String.c:109
RETURNS_TWICE UINTN EFIAPI SetJump(OUT BASE_LIBRARY_JUMP_BUFFER *JumpBuffer)
UINT32 EFIAPI ReadUnaligned24(IN CONST VOID *Buffer)
Definition: Unaligned.c:87
UINT64 EFIAPI MultU64x64(IN UINT64 Multiplicand, IN UINT64 Multiplier)
Definition: MultU64x64.c:27
UINT32 EFIAPI CalculateSum32(IN CONST UINT32 *Buffer, IN UINTN Length)
Definition: CheckSum.c:187
INTN(EFIAPI * BASE_SORT_COMPARE)(IN CONST VOID *Buffer1, IN CONST VOID *Buffer2)
Definition: BaseLib.h:3265
BOOLEAN EFIAPI SaveAndDisableInterrupts(VOID)
Definition: Cpu.c:21
UINT16 EFIAPI SwapBytes16(IN UINT16 Value)
Definition: SwapBytes16.c:25
BOOLEAN EFIAPI IsNodeAtEnd(IN CONST LIST_ENTRY *List, IN CONST LIST_ENTRY *Node)
Definition: LinkedList.c:481
UINTN EFIAPI TdCall(IN UINT64 Leaf, IN UINT64 Arg1, IN UINT64 Arg2, IN UINT64 Arg3, IN OUT VOID *Results)
Definition: IntelTdxNull.c:31
RETURN_STATUS EFIAPI AsciiStrHexToUint64S(IN CONST CHAR8 *String, OUT CHAR8 **EndPointer OPTIONAL, OUT UINT64 *Data)
Definition: SafeString.c:2527
VOID EFIAPI SwitchStack(IN SWITCH_STACK_ENTRY_POINT EntryPoint, IN VOID *Context1 OPTIONAL, IN VOID *Context2 OPTIONAL, IN VOID *NewStack,...)
Definition: SwitchStack.c:42
UINT32 EFIAPI CalculateCrc32(IN VOID *Buffer, IN UINTN Length)
Definition: CheckSum.c:600
INT64 EFIAPI DivS64x64Remainder(IN INT64 Dividend, IN INT64 Divisor, OUT INT64 *Remainder OPTIONAL)
UINT64 EFIAPI AsciiStrDecimalToUint64(IN CONST CHAR8 *String)
Definition: String.c:1053
UINTN EFIAPI AsciiStrLen(IN CONST CHAR8 *String)
Definition: String.c:641
UINT32 EFIAPI WriteUnaligned24(OUT VOID *Buffer, IN UINT32 Value)
Definition: Unaligned.c:113
UINT64 EFIAPI StrDecimalToUint64(IN CONST CHAR16 *String)
Definition: String.c:456
LIST_ENTRY *EFIAPI InsertHeadList(IN OUT LIST_ENTRY *ListHead, IN OUT LIST_ENTRY *Entry)
Definition: LinkedList.c:218
RETURN_STATUS EFIAPI AsciiStrCatS(IN OUT CHAR8 *Destination, IN UINTN DestMax, IN CONST CHAR8 *Source)
Definition: SafeString.c:1964
RETURN_STATUS EFIAPI StrDecimalToUint64S(IN CONST CHAR16 *String, OUT CHAR16 **EndPointer OPTIONAL, OUT UINT64 *Data)
Definition: SafeString.c:743
UINT32 EFIAPI GetPowerOfTwo32(IN UINT32 Operand)
UINT32 EFIAPI BitFieldWrite32(IN UINT32 Operand, IN UINTN StartBit, IN UINTN EndBit, IN UINT32 Value)
Definition: BitField.c:563
LIST_ENTRY *EFIAPI GetFirstNode(IN CONST LIST_ENTRY *List)
Definition: LinkedList.c:298
UINT16 EFIAPI BitFieldAndThenOr16(IN UINT16 Operand, IN UINTN StartBit, IN UINTN EndBit, IN UINT16 AndData, IN UINT16 OrData)
Definition: BitField.c:488
UINT16 EFIAPI CalculateSum16(IN CONST UINT16 *Buffer, IN UINTN Length)
Definition: CheckSum.c:107
UINT32 EFIAPI BitFieldOr32(IN UINT32 Operand, IN UINTN StartBit, IN UINTN EndBit, IN UINT32 OrData)
Definition: BitField.c:601
UINT32 EFIAPI WriteUnaligned32(OUT VOID *Buffer, IN UINT32 Value)
Definition: Unaligned.c:166
UINT64 EFIAPI BitFieldWrite64(IN UINT64 Operand, IN UINTN StartBit, IN UINTN EndBit, IN UINT64 Value)
Definition: BitField.c:755
INTN EFIAPI AsciiStrCmp(IN CONST CHAR8 *FirstString, IN CONST CHAR8 *SecondString)
Definition: String.c:716
UINTN EFIAPI StrnSizeS(IN CONST CHAR16 *String, IN UINTN MaxSize)
Definition: SafeString.c:176
VOID EFIAPI CpuDeadLoop(VOID)
Definition: CpuDeadLoop.c:25
VOID EFIAPI QuickSort(IN OUT VOID *BufferToSort, IN CONST UINTN Count, IN CONST UINTN ElementSize, IN BASE_SORT_COMPARE CompareFunction, OUT VOID *BufferOneElement)
Definition: QuickSort.c:36
UINT8 EFIAPI CalculateSum8(IN CONST UINT8 *Buffer, IN UINTN Length)
Definition: CheckSum.c:33
INTN EFIAPI AsciiStrnCmp(IN CONST CHAR8 *FirstString, IN CONST CHAR8 *SecondString, IN UINTN Length)
Definition: String.c:872
RETURN_STATUS EFIAPI UnicodeStrToAsciiStrS(IN CONST CHAR16 *Source, OUT CHAR8 *Destination, IN UINTN DestMax)
Definition: SafeString.c:2650
VOID EFIAPI MemoryFence(VOID)
Definition: CpuBreakpoint.c:42
VOID EFIAPI CpuPause(VOID)
UINT8 EFIAPI CalculateCheckSum8(IN CONST UINT8 *Buffer, IN UINTN Length)
Definition: CheckSum.c:71
RETURN_STATUS EFIAPI Base64Decode(IN CONST CHAR8 *Source OPTIONAL, IN UINTN SourceSize, OUT UINT8 *Destination OPTIONAL, IN OUT UINTN *DestinationSize)
Definition: String.c:1379
VOID EFIAPI EnableInterrupts(VOID)
Definition: CpuBreakpoint.c:67
UINTN EFIAPI AsciiStrDecimalToUintn(IN CONST CHAR8 *String)
Definition: String.c:1006
LIST_ENTRY *EFIAPI SwapListEntries(IN OUT LIST_ENTRY *FirstEntry, IN OUT LIST_ENTRY *SecondEntry)
Definition: LinkedList.c:522
RETURN_STATUS EFIAPI StrCatS(IN OUT CHAR16 *Destination, IN UINTN DestMax, IN CONST CHAR16 *Source)
Definition: SafeString.c:405
UINT32 EFIAPI SwapBytes32(IN UINT32 Value)
Definition: SwapBytes32.c:25
UINT32 EFIAPI ModU64x32(IN UINT64 Dividend, IN UINT32 Divisor)
Definition: ModU64x32.c:29
VOID EFIAPI DisableInterrupts(VOID)
Definition: CpuBreakpoint.c:54
RETURN_STATUS EFIAPI AsciiStrDecimalToUintnS(IN CONST CHAR8 *String, OUT CHAR8 **EndPointer OPTIONAL, OUT UINTN *Data)
Definition: SafeString.c:2179
UINT8 EFIAPI BitFieldWrite8(IN UINT8 Operand, IN UINTN StartBit, IN UINTN EndBit, IN UINT8 Value)
Definition: BitField.c:179
VOID EFIAPI ConvertUuidToGuid(IN GUID *FromUuid, OUT GUID *ToGuid)
UINTN EFIAPI StrHexToUintn(IN CONST CHAR16 *String)
Definition: String.c:508
RETURN_STATUS EFIAPI AsciiStrHexToUintnS(IN CONST CHAR8 *String, OUT CHAR8 **EndPointer OPTIONAL, OUT UINTN *Data)
Definition: SafeString.c:2399
UINTN EFIAPI StrnLenS(IN CONST CHAR16 *String, IN UINTN MaxSize)
Definition: SafeString.c:119
RETURN_STATUS EFIAPI StrToIpv6Address(IN CONST CHAR16 *String, OUT CHAR16 **EndPointer OPTIONAL, OUT IPv6_ADDRESS *Address, OUT UINT8 *PrefixLength OPTIONAL)
Definition: SafeString.c:1129
RETURN_STATUS EFIAPI StrToIpv4Address(IN CONST CHAR16 *String, OUT CHAR16 **EndPointer OPTIONAL, OUT IPv4_ADDRESS *Address, OUT UINT8 *PrefixLength OPTIONAL)
Definition: SafeString.c:1351
INTN EFIAPI StrnCmp(IN CONST CHAR16 *FirstString, IN CONST CHAR16 *SecondString, IN UINTN Length)
Definition: String.c:162
RETURN_STATUS EFIAPI AsciiStrDecimalToUint64S(IN CONST CHAR8 *String, OUT CHAR8 **EndPointer OPTIONAL, OUT UINT64 *Data)
Definition: SafeString.c:2287
UINT8 EFIAPI BitFieldRead8(IN UINT8 Operand, IN UINTN StartBit, IN UINTN EndBit)
Definition: BitField.c:143
LIST_ENTRY *EFIAPI RemoveEntryList(IN CONST LIST_ENTRY *Entry)
Definition: LinkedList.c:590
UINT64 EFIAPI RShiftU64(IN UINT64 Operand, IN UINTN Count)
Definition: RShiftU64.c:28
UINT64 EFIAPI ARShiftU64(IN UINT64 Operand, IN UINTN Count)
Definition: ARShiftU64.c:28
RETURN_STATUS EFIAPI AsciiStrToGuid(IN CONST CHAR8 *String, OUT GUID *Guid)
Definition: SafeString.c:3458
UINT64 EFIAPI MultU64x32(IN UINT64 Multiplicand, IN UINT32 Multiplier)
Definition: MultU64x32.c:27
RETURN_STATUS EFIAPI StrToGuid(IN CONST CHAR16 *String, OUT GUID *Guid)
Definition: SafeString.c:1500
RETURN_STATUS EFIAPI AsciiStrToIpv4Address(IN CONST CHAR8 *String, OUT CHAR8 **EndPointer OPTIONAL, OUT IPv4_ADDRESS *Address, OUT UINT8 *PrefixLength OPTIONAL)
Definition: SafeString.c:3313
CHAR16 *EFIAPI PathCleanUpDirectories(IN CHAR16 *Path)
Definition: FilePaths.c:68
UINT16 EFIAPI CalculateCheckSum16(IN CONST UINT16 *Buffer, IN UINTN Length)
Definition: CheckSum.c:151
UINT64 EFIAPI DivU64x32Remainder(IN UINT64 Dividend, IN UINT32 Divisor, OUT UINT32 *Remainder OPTIONAL)
RETURN_STATUS EFIAPI StrHexToUintnS(IN CONST CHAR16 *String, OUT CHAR16 **EndPointer OPTIONAL, OUT UINTN *Data)
Definition: SafeString.c:860
UINT8 EFIAPI BitFieldAnd8(IN UINT8 Operand, IN UINTN StartBit, IN UINTN EndBit, IN UINT8 AndData)
Definition: BitField.c:255
UINTN EFIAPI AsciiStrnSizeS(IN CONST CHAR8 *String, IN UINTN MaxSize)
Definition: SafeString.c:1749
UINT64 EFIAPI DivU64x64Remainder(IN UINT64 Dividend, IN UINT64 Divisor, OUT UINT64 *Remainder OPTIONAL)
UINT64 EFIAPI GetPowerOfTwo64(IN UINT64 Operand)
BOOLEAN EFIAPI PathRemoveLastItem(IN OUT CHAR16 *Path)
Definition: FilePaths.c:22
UINT32 EFIAPI ReadUnaligned32(IN CONST VOID *Buffer)
Definition: Unaligned.c:140
LIST_ENTRY *EFIAPI InitializeListHead(IN OUT LIST_ENTRY *ListHead)
Definition: LinkedList.c:182
UINT16 EFIAPI BitFieldWrite16(IN UINT16 Operand, IN UINTN StartBit, IN UINTN EndBit, IN UINT16 Value)
Definition: BitField.c:371
RETURN_STATUS EFIAPI StrHexToBytes(IN CONST CHAR16 *String, IN UINTN Length, OUT UINT8 *Buffer, IN UINTN MaxBufferSize)
Definition: SafeString.c:1615
UINT64 EFIAPI RRotU64(IN UINT64 Operand, IN UINTN Count)
Definition: RRotU64.c:29
UINTN EFIAPI AsciiStrHexToUintn(IN CONST CHAR8 *String)
Definition: String.c:1104
INT64 EFIAPI MultS64x64(IN INT64 Multiplicand, IN INT64 Multiplier)
Definition: MultS64x64.c:27
RETURN_STATUS EFIAPI AsciiStrToIpv6Address(IN CONST CHAR8 *String, OUT CHAR8 **EndPointer OPTIONAL, OUT IPv6_ADDRESS *Address, OUT UINT8 *PrefixLength OPTIONAL)
Definition: SafeString.c:3095
INTN EFIAPI LowBitSet64(IN UINT64 Operand)
Definition: LowBitSet64.c:27
RETURN_STATUS EFIAPI StrnCatS(IN OUT CHAR16 *Destination, IN UINTN DestMax, IN CONST CHAR16 *Source, IN UINTN Length)
Definition: SafeString.c:507
VOID EFIAPI CpuBreakpoint(VOID)
Definition: CpuBreakpoint.c:26
UINT8 EFIAPI DecimalToBcd8(IN UINT8 Value)
Definition: String.c:1653
RETURN_STATUS EFIAPI StrDecimalToUintnS(IN CONST CHAR16 *String, OUT CHAR16 **EndPointer OPTIONAL, OUT UINTN *Data)
Definition: SafeString.c:631
UINT64 EFIAPI BitFieldRead64(IN UINT64 Operand, IN UINTN StartBit, IN UINTN EndBit)
Definition: BitField.c:719
UINT64 EFIAPI LShiftU64(IN UINT64 Operand, IN UINTN Count)
Definition: LShiftU64.c:28
UINT64 EFIAPI BitFieldAnd64(IN UINT64 Operand, IN UINTN StartBit, IN UINTN EndBit, IN UINT64 AndData)
Definition: BitField.c:845
RETURN_STATUS EFIAPI AsciiStrToUnicodeStrS(IN CONST CHAR8 *Source, OUT CHAR16 *Destination, IN UINTN DestMax)
Definition: SafeString.c:2873
UINT64 EFIAPI SwapBytes64(IN UINT64 Value)
Definition: SwapBytes64.c:25
UINT16 EFIAPI CalculateCrc16CcittF(IN CONST VOID *Buffer, IN UINTN Length, IN UINT16 InitialValue)
Definition: CheckSum.c:813
UINT16 EFIAPI BitFieldOr16(IN UINT16 Operand, IN UINTN StartBit, IN UINTN EndBit, IN UINT16 OrData)
Definition: BitField.c:409
VOID EFIAPI ConvertGuidToUuid(IN GUID *FromGuid, OUT GUID *ToUuid)
UINT64 EFIAPI CalculateSum64(IN CONST UINT64 *Buffer, IN UINTN Length)
Definition: CheckSum.c:267
UINT8 EFIAPI BitFieldCountOnes32(IN UINT32 Operand, IN UINTN StartBit, IN UINTN EndBit)
Definition: BitField.c:940
VOID(EFIAPI * SWITCH_STACK_ENTRY_POINT)(IN VOID *Context1 OPTIONAL, IN VOID *Context2 OPTIONAL)
Definition: BaseLib.h:5094
RETURN_STATUS EFIAPI StrHexToUint64S(IN CONST CHAR16 *String, OUT CHAR16 **EndPointer OPTIONAL, OUT UINT64 *Data)
Definition: SafeString.c:994
UINT16 EFIAPI BitFieldRead16(IN UINT16 Operand, IN UINTN StartBit, IN UINTN EndBit)
Definition: BitField.c:335
UINTN EFIAPI AsciiStrSize(IN CONST CHAR8 *String)
Definition: String.c:681
UINT32 EFIAPI LRotU32(IN UINT32 Operand, IN UINTN Count)
Definition: LRotU32.c:29
UINT32 EFIAPI CalculateCrc32c(IN CONST VOID *Buffer, IN UINTN Length, IN UINT32 InitialValue)
Definition: CheckSum.c:747
UINT16 EFIAPI CalculateCrc16Ansi(IN CONST VOID *Buffer, IN UINTN Length, IN UINT16 InitialValue)
Definition: CheckSum.c:670
VOID EFIAPI LongJump(IN BASE_LIBRARY_JUMP_BUFFER *JumpBuffer, IN UINTN Value)
Definition: LongJump.c:29
RETURN_STATUS EFIAPI StrnCpyS(OUT CHAR16 *Destination, IN UINTN DestMax, IN CONST CHAR16 *Source, IN UINTN Length)
Definition: SafeString.c:310
UINT64 EFIAPI WriteUnaligned64(OUT VOID *Buffer, IN UINT64 Value)
Definition: Unaligned.c:217
INTN EFIAPI HighBitSet64(IN UINT64 Operand)
Definition: HighBitSet64.c:27
RETURN_STATUS EFIAPI AsciiStrHexToBytes(IN CONST CHAR8 *String, IN UINTN Length, OUT UINT8 *Buffer, IN UINTN MaxBufferSize)
Definition: SafeString.c:3569
UINT16 EFIAPI ReadUnaligned16(IN CONST VOID *Buffer)
Definition: Unaligned.c:36
UINT8 EFIAPI BitFieldOr8(IN UINT8 Operand, IN UINTN StartBit, IN UINTN EndBit, IN UINT8 OrData)
Definition: BitField.c:217
UINT32 EFIAPI CalculateCheckSum32(IN CONST UINT32 *Buffer, IN UINTN Length)
Definition: CheckSum.c:231
RETURN_STATUS EFIAPI AsciiStrnCatS(IN OUT CHAR8 *Destination, IN UINTN DestMax, IN CONST CHAR8 *Source, IN UINTN Length)
Definition: SafeString.c:2060
UINT64 EFIAPI LRotU64(IN UINT64 Operand, IN UINTN Count)
Definition: LRotU64.c:29
RETURN_STATUS EFIAPI AsciiStrnToUnicodeStrS(IN CONST CHAR8 *Source, IN UINTN Length, OUT CHAR16 *Destination, IN UINTN DestMax, OUT UINTN *DestinationLength)
Definition: SafeString.c:2972
UINTN EFIAPI StrLen(IN CONST CHAR16 *String)
Definition: String.c:30
CHAR8 *EFIAPI AsciiStrStr(IN CONST CHAR8 *String, IN CONST CHAR8 *SearchString)
Definition: String.c:931
BOOLEAN EFIAPI IsNodeInList(IN CONST LIST_ENTRY *FirstEntry, IN CONST LIST_ENTRY *SecondEntry)
Definition: LinkedList.c:121
CHAR8 EFIAPI AsciiCharToUpper(IN CHAR8 Chr)
Definition: String.c:750
UINT64 EFIAPI AsciiStrHexToUint64(IN CONST CHAR8 *String)
Definition: String.c:1155
RETURN_STATUS EFIAPI UnicodeStrnToAsciiStrS(IN CONST CHAR16 *Source, IN UINTN Length, OUT CHAR8 *Destination, IN UINTN DestMax, OUT UINTN *DestinationLength)
Definition: SafeString.c:2757
RETURN_STATUS EFIAPI AsciiStrCpyS(OUT CHAR8 *Destination, IN UINTN DestMax, IN CONST CHAR8 *Source)
Definition: SafeString.c:1797
VOID EFIAPI EnableDisableInterrupts(VOID)
CHAR16 *EFIAPI StrStr(IN CONST CHAR16 *String, IN CONST CHAR16 *SearchString)
Definition: String.c:224
INTN EFIAPI HighBitSet32(IN UINT32 Operand)
Definition: HighBitSet32.c:27
LIST_ENTRY *EFIAPI InsertTailList(IN OUT LIST_ENTRY *ListHead, IN OUT LIST_ENTRY *Entry)
Definition: LinkedList.c:259
RETURN_STATUS EFIAPI Base64Encode(IN CONST UINT8 *Source, IN UINTN SourceLength, OUT CHAR8 *Destination OPTIONAL, IN OUT UINTN *DestinationSize)
Definition: String.c:1195
UINTN EFIAPI TdVmCall(IN UINT64 Leaf, IN UINT64 Arg1, IN UINT64 Arg2, IN UINT64 Arg3, IN UINT64 Arg4, IN OUT VOID *Results)
Definition: IntelTdxNull.c:59
UINT32 EFIAPI BitFieldRead32(IN UINT32 Operand, IN UINTN StartBit, IN UINTN EndBit)
Definition: BitField.c:527
VOID EFIAPI SpeculationBarrier(VOID)
UINT32 EFIAPI AsmCpuidEx(IN UINT32 Index, IN UINT32 SubIndex, OUT UINT32 *RegisterEax OPTIONAL, OUT UINT32 *RegisterEbx OPTIONAL, OUT UINT32 *RegisterEcx OPTIONAL, OUT UINT32 *RegisterEdx OPTIONAL)
Definition: CpuIdEx.c:43
UINTN EFIAPI CsrRead(IN UINT16 Select)
Definition: Csr.c:37
UINTN EFIAPI CsrXChg(IN UINT16 Select, IN OUT UINTN Value, IN UINTN Mask)
Definition: Csr.c:75
UINTN EFIAPI CsrWrite(IN UINT16 Select, IN OUT UINTN Value)
Definition: Csr.c:55
VOID EFIAPI AsmDisableCache(VOID)
Definition: DisableCache.c:18
VOID EFIAPI AsmEnableCache(VOID)
Definition: EnableCache.c:18
VOID *EFIAPI AsmFlushCacheLine(IN VOID *LinearAddress)
UINTN EFIAPI AsmWriteDr1(UINTN Dr1)
UINT16 EFIAPI AsmReadTr(VOID)
UINT16 EFIAPI AsmReadLdtr(VOID)
UINTN EFIAPI AsmWriteDr4(UINTN Dr4)
UINTN EFIAPI AsmReadDr1(VOID)
VOID EFIAPI AsmInvd(VOID)
UINTN EFIAPI AsmReadDr0(VOID)
UINT16 EFIAPI AsmReadFs(VOID)
UINTN EFIAPI AsmWriteDr7(UINTN Dr7)
UINTN EFIAPI AsmWriteDr3(UINTN Dr3)
UINT16 EFIAPI AsmReadEs(VOID)
UINTN EFIAPI AsmReadCr3(VOID)
UINTN EFIAPI AsmReadDr2(VOID)
UINTN EFIAPI AsmWriteCr2(UINTN Cr2)
UINT64 EFIAPI AsmReadMsr64(IN UINT32 Index)
Definition: GccInlinePriv.c:60
UINTN EFIAPI AsmWriteCr3(UINTN Cr3)
UINTN EFIAPI AsmWriteCr4(UINTN Cr4)
VOID EFIAPI AsmWbinvd(VOID)
UINTN EFIAPI AsmReadCr0(VOID)
UINTN EFIAPI AsmWriteDr2(UINTN Dr2)
UINTN EFIAPI AsmWriteDr0(UINTN Dr0)
UINT16 EFIAPI AsmReadGs(VOID)
UINTN EFIAPI AsmWriteCr0(UINTN Cr0)
UINTN EFIAPI AsmWriteDr5(UINTN Dr5)
UINTN EFIAPI AsmReadCr2(VOID)
UINT16 EFIAPI AsmReadSs(VOID)
UINT16 EFIAPI AsmReadCs(VOID)
UINT64 EFIAPI AsmWriteMsr64(IN UINT32 Index, IN UINT64 Value)
UINTN EFIAPI AsmReadDr3(VOID)
VOID EFIAPI AsmWriteLdtr(IN UINT16 Ldtr)
UINTN EFIAPI AsmReadCr4(VOID)
UINTN EFIAPI AsmReadDr6(VOID)
UINTN EFIAPI AsmWriteDr6(UINTN Dr6)
UINT64 EFIAPI AsmReadPmc(IN UINT32 Index)
UINT16 EFIAPI AsmReadDs(VOID)
UINTN EFIAPI AsmReadDr4(VOID)
UINTN EFIAPI AsmReadDr7(VOID)
UINTN EFIAPI AsmReadDr5(VOID)
#define CONST
Definition: Base.h:259
#define RETURNS_TWICE
Definition: Base.h:177
#define VOID
Definition: Base.h:269
#define OPTIONAL
Definition: Base.h:290
#define IN
Definition: Base.h:279
#define OUT
Definition: Base.h:284
UINT32 EFIAPI AsmCpuid(IN UINT32 Index, OUT UINT32 *RegisterEax OPTIONAL, OUT UINT32 *RegisterEbx OPTIONAL, OUT UINT32 *RegisterEcx OPTIONAL, OUT UINT32 *RegisterEdx OPTIONAL)
Definition: CpuId.c:36
BOOLEAN EFIAPI TdIsEnabled()
Definition: IntelTdxNull.c:79
UINTN EFIAPI AsmMonitor(IN UINTN RegisterEax, IN UINTN RegisterEcx, IN UINTN RegisterEdx)
Definition: Monitor.c:27
UINTN EFIAPI AsmMwait(IN UINTN RegisterEax, IN UINTN RegisterEcx)
Definition: Mwait.c:25
UINTN Rand(VOID)
Definition: Support.c:39
VOID EFIAPI AsmDisablePaging32(IN SWITCH_STACK_ENTRY_POINT EntryPoint, IN VOID *Context1 OPTIONAL, IN VOID *Context2 OPTIONAL, IN VOID *NewStack)
VOID EFIAPI AsmDisablePaging64(IN UINT16 Cs, IN UINT32 EntryPoint, IN UINT32 Context1 OPTIONAL, IN UINT32 Context2 OPTIONAL, IN UINT32 NewStack)
VOID EFIAPI AsmEnablePaging32(IN SWITCH_STACK_ENTRY_POINT EntryPoint, IN VOID *Context1 OPTIONAL, IN VOID *Context2 OPTIONAL, IN VOID *NewStack)
VOID EFIAPI AsmEnablePaging64(IN UINT16 Cs, IN UINT64 EntryPoint, IN UINT64 Context1 OPTIONAL, IN UINT64 Context2 OPTIONAL, IN UINT64 NewStack)
VOID EFIAPI AsmFxRestore(IN CONST IA32_FX_BUFFER *Buffer)
Definition: X86FxRestore.c:27
VOID EFIAPI AsmFxSave(OUT IA32_FX_BUFFER *Buffer)
Definition: X86FxSave.c:26
UINT32 EFIAPI AsmWriteMsr32(IN UINT32 Index, IN UINT32 Value)
Definition: X86Msr.c:53
UINT64 EFIAPI AsmMsrAnd64(IN UINT32 Index, IN UINT64 AndData)
Definition: X86Msr.c:406
UINT64 EFIAPI AsmMsrBitFieldOr64(IN UINT32 Index, IN UINTN StartBit, IN UINTN EndBit, IN UINT64 OrData)
Definition: X86Msr.c:547
UINT32 EFIAPI AsmMsrBitFieldAndThenOr32(IN UINT32 Index, IN UINTN StartBit, IN UINTN EndBit, IN UINT32 AndData, IN UINT32 OrData)
Definition: X86Msr.c:339
UINT64 EFIAPI AsmMsrOr64(IN UINT32 Index, IN UINT64 OrData)
Definition: X86Msr.c:378
UINT32 EFIAPI AsmMsrAnd32(IN UINT32 Index, IN UINT32 AndData)
Definition: X86Msr.c:111
UINT32 EFIAPI AsmMsrAndThenOr32(IN UINT32 Index, IN UINT32 AndData, IN UINT32 OrData)
Definition: X86Msr.c:143
UINT64 EFIAPI AsmMsrBitFieldWrite64(IN UINT32 Index, IN UINTN StartBit, IN UINTN EndBit, IN UINT64 Value)
Definition: X86Msr.c:505
UINT64 EFIAPI AsmMsrBitFieldAnd64(IN UINT32 Index, IN UINTN StartBit, IN UINTN EndBit, IN UINT64 AndData)
Definition: X86Msr.c:589
UINT32 EFIAPI AsmMsrBitFieldOr32(IN UINT32 Index, IN UINTN StartBit, IN UINTN EndBit, IN UINT32 OrData)
Definition: X86Msr.c:253
UINT32 EFIAPI AsmMsrOr32(IN UINT32 Index, IN UINT32 OrData)
Definition: X86Msr.c:82
UINT32 EFIAPI AsmReadMsr32(IN UINT32 Index)
Definition: X86Msr.c:27
UINT64 EFIAPI AsmMsrBitFieldRead64(IN UINT32 Index, IN UINTN StartBit, IN UINTN EndBit)
Definition: X86Msr.c:470
UINT64 EFIAPI AsmMsrBitFieldAndThenOr64(IN UINT32 Index, IN UINTN StartBit, IN UINTN EndBit, IN UINT64 AndData, IN UINT64 OrData)
Definition: X86Msr.c:634
UINT64 EFIAPI AsmMsrAndThenOr64(IN UINT32 Index, IN UINT64 AndData, IN UINT64 OrData)
Definition: X86Msr.c:437
UINT32 EFIAPI AsmMsrBitFieldRead32(IN UINT32 Index, IN UINTN StartBit, IN UINTN EndBit)
Definition: X86Msr.c:176
UINT32 EFIAPI AsmMsrBitFieldWrite32(IN UINT32 Index, IN UINTN StartBit, IN UINTN EndBit, IN UINT32 Value)
Definition: X86Msr.c:212
UINT32 EFIAPI AsmMsrBitFieldAnd32(IN UINT32 Index, IN UINTN StartBit, IN UINTN EndBit, IN UINT32 AndData)
Definition: X86Msr.c:294
VOID EFIAPI PatchInstructionX86(OUT X86_ASSEMBLY_PATCH_LABEL *InstructionEnd, IN UINT64 PatchValue, IN UINTN ValueSize)
BOOLEAN EFIAPI AsmRdRand32(OUT UINT32 *Rand)
Definition: X86RdRand.c:46
BOOLEAN EFIAPI AsmRdRand64(OUT UINT64 *Rand)
Definition: X86RdRand.c:67
BOOLEAN EFIAPI AsmRdRand16(OUT UINT16 *Rand)
Definition: X86RdRand.c:25
VOID EFIAPI AsmReadGdtr(OUT IA32_DESCRIPTOR *Gdtr)
Definition: X86ReadGdtr.c:24
VOID EFIAPI AsmReadIdtr(OUT IA32_DESCRIPTOR *Idtr)
Definition: X86ReadIdtr.c:24
VOID EFIAPI AsmGetThunk16Properties(OUT UINT32 *RealModeBufferSize, OUT UINT32 *ExtraStackSize)
Definition: X86Thunk.c:62
VOID EFIAPI AsmPrepareThunk16(IN OUT THUNK_CONTEXT *ThunkContext)
Definition: X86Thunk.c:94
VOID EFIAPI AsmPrepareAndThunk16(IN OUT THUNK_CONTEXT *ThunkContext)
Definition: X86Thunk.c:257
VOID EFIAPI AsmThunk16(IN OUT THUNK_CONTEXT *ThunkContext)
Definition: X86Thunk.c:212
VOID EFIAPI AsmWriteTr(IN UINT16 Selector)
VOID EFIAPI AsmWriteGdtr(IN CONST IA32_DESCRIPTOR *Gdtr)
VOID EFIAPI AsmWriteIdtr(IN CONST IA32_DESCRIPTOR *Idtr)
VOID EFIAPI AsmLfence(VOID)
Definition: Base.h:213