1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
use crate::;
/// ## Root System Description Pointer structure.
///
/// During OS initialization, OSPM must obtain the Root System Description Pointer (RSDP) structure from the platform.
/// When OSPM locates the Root System Description Pointer (RSDP) structure,
/// it then locates the Root System Description Table (RSDT) or the Extended Root System Description Table (XSDT) using the physical system address supplied in the RSDP.
///
/// ## Finding the RSDP on IA-PC Systems
///
/// OSPM finds the Root System Description Pointer (RSDP) structure by searching physical memory ranges on 16-byte boundaries for a valid Root System Description Pointer structure signature and checksum match as follows:
/// - The first 1 KB of the Extended BIOS Data Area (EBDA). For EISA or MCA systems, the EBDA can be found in the two-byte location 40:0Eh on the BIOS data area.
/// - The BIOS read-only memory space between 0E0000h and 0FFFFFh.
///
/// ## Finding the RSDP on UEFI Enabled Systems
///
/// In Unified Extensible Firmware Interface (UEFI) enabled systems, a pointer to the RSDP structure exists within the EFI System Table.
/// The OS loader is provided a pointer to the EFI System Table at invocation.
/// The OS loader must retrieve the pointer to the RSDP structure from the EFI System Table and convey the pointer to OSPM, using an OS dependent data structure, as part of the hand off of control from the OS loader to the OS.
///
/// The OS loader locates the pointer to the RSDP structure by examining the EFI Configuration Table within the EFI System Table.
/// EFI Configuration Table entries consist of Globally Unique Identifier (GUID)/table pointer pairs.
/// The UEFI specification defines two GUIDs for ACPI; one for ACPI 1.0 and the other for ACPI 2.0 or later specification revisions.
///
/// The EFI GUID for a pointer to the ACPI 1.0 specification RSDP structure is:
/// - eb9d2d30-2d88-11d3-9a16-0090273fc14d
///
/// The EFI GUID for a pointer to the ACPI 2.0 or later specification RSDP structure is:
/// - 8868e871-e4f1-11d3-bc22-0080c73c8881
///
/// The OS loader for an ACPI-compatible OS will search for an RSDP structure pointer (RSDP Structure) using the current revision GUID first and if it finds one, will use the corresponding RSDP structure pointer.
/// If the GUID is not found then the OS loader will search for the RSDP structure pointer using the ACPI 1.0 version GUID.
///
/// The OS loader must retrieve the pointer to the RSDP structure from the EFI System Table before assuming platform control via the EFI ExitBootServices interface. See the UEFI Specification for more information.