SimpleKernel 1.17.0
Loading...
Searching...
No Matches
acpi.hpp
Go to the documentation of this file.
1
5#pragma once
6
7#include <cstdint>
8
9namespace acpi {
10
18class Acpi {
19 public:
22
26 explicit Acpi(uint64_t rsdp) : rsdp_addr_(rsdp) {}
27 Acpi() = default;
28 Acpi(const Acpi&) = delete;
29 Acpi(Acpi&&) = default;
30 auto operator=(const Acpi&) -> Acpi& = delete;
31 auto operator=(Acpi&&) -> Acpi& = default;
32 ~Acpi() = default;
34
35 private:
40 struct [[gnu::packed]] GenericAddressStructure {
44 uint8_t access_size;
45 uint64_t address;
46 };
47
52 struct [[gnu::packed]] Rsdp {
53 char signature[8];
54 uint8_t checksum;
55 char oemid[6];
56 uint8_t revision;
57 uint32_t rsdt_address;
58 uint32_t length;
59 uint64_t xsdt_address;
61 uint8_t reserved[3];
62 };
63
68 struct [[gnu::packed]] DescriptionHeader {
69 char signature[4];
70 uint32_t length;
71 uint8_t revision;
72 uint8_t checksum;
73 char oemid[6];
74 char oem_table_id[8];
75 uint32_t oem_revision;
76 uint32_t creator_id;
78 };
79
84 struct [[gnu::packed]] Rsdt {
86 uint32_t* entry;
87 };
88
93 struct [[gnu::packed]] Xsdt {
95 uint64_t* entry;
96 };
97
102 struct [[gnu::packed]] Fadt {
105 uint32_t dsdt;
106 uint8_t reserved;
108 uint16_t sci_int;
109 uint32_t smi_cmd;
110 uint8_t acpi_enable;
112 uint8_t s4bios_req;
113 uint8_t pstate_cnt;
114 uint32_t pm1a_evt_blk;
115 uint32_t pm1b_evt_blk;
116 uint32_t pm1a_cnt_blk;
117 uint32_t pm1b_cnt_blk;
118 uint32_t pm2_cnt_blk;
119 uint32_t pm_tmr_blk;
120 uint32_t gpe0_blk;
121 uint32_t gpe1_blk;
122 uint8_t pm1_evt_len;
123 uint8_t pm1_cnt_len;
124 uint8_t pm2_cnt_len;
125 uint8_t pm_tmr_len;
128 uint8_t gpe1_base;
129 uint8_t cst_cnt;
130 uint16_t p_lvl2_lat;
131 uint16_t p_lvl3_lat;
132 uint16_t flush_size;
133 uint16_t flush_stride;
134 uint8_t duty_offset;
135 uint8_t duty_width;
136 uint8_t day_alrm;
137 uint8_t mon_alrm;
138 uint8_t century;
140 uint8_t reserved2;
141 uint32_t flags;
143 uint8_t reset_value;
147 uint64_t x_dsdt;
159 };
160
165 struct [[gnu::packed]] Dsdt {
168 };
169
170 uint64_t rsdp_addr_{0};
171};
172
173} // namespace acpi
ACPI 驱动
Definition acpi.hpp:18
Acpi(uint64_t rsdp)
构造函数
Definition acpi.hpp:26
Acpi()=default
~Acpi()=default
auto operator=(Acpi &&) -> Acpi &=default
Acpi(Acpi &&)=default
auto operator=(const Acpi &) -> Acpi &=delete
uint64_t rsdp_addr_
Definition acpi.hpp:170
Acpi(const Acpi &)=delete
Definition acpi.hpp:9
System Description Table Header.
Definition acpi.hpp:68
Differentiated System Description Table (DSDT)
Definition acpi.hpp:165
DescriptionHeader header
Definition acpi.hpp:166
uint8_t * definition_block
Definition acpi.hpp:167
Fixed ACPI Description Table (FADT)
Definition acpi.hpp:102
GenericAddressStructure x_gpe0_blk
Definition acpi.hpp:154
uint32_t gpe1_blk
Definition acpi.hpp:121
uint8_t acpi_enable
Definition acpi.hpp:110
uint8_t fadt_minor_version
Definition acpi.hpp:145
uint32_t dsdt
Definition acpi.hpp:105
GenericAddressStructure sleep_status_reg
Definition acpi.hpp:157
GenericAddressStructure sleep_control_reg
Definition acpi.hpp:156
GenericAddressStructure x_pm2_cnt_blk
Definition acpi.hpp:152
uint8_t acpi_disable
Definition acpi.hpp:111
GenericAddressStructure x_pm_tmr_blk
Definition acpi.hpp:153
uint16_t p_lvl3_lat
Definition acpi.hpp:131
uint16_t flush_size
Definition acpi.hpp:132
uint8_t pm_tmr_len
Definition acpi.hpp:125
uint16_t iapc_boot_arch
Definition acpi.hpp:139
uint8_t s4bios_req
Definition acpi.hpp:112
GenericAddressStructure x_pm1b_evt_blk
Definition acpi.hpp:149
uint8_t reserved
Definition acpi.hpp:106
uint32_t pm1b_cnt_blk
Definition acpi.hpp:117
uint8_t reserved2
Definition acpi.hpp:140
uint32_t pm1b_evt_blk
Definition acpi.hpp:115
uint8_t pm2_cnt_len
Definition acpi.hpp:124
uint8_t reset_value
Definition acpi.hpp:143
uint64_t x_dsdt
Definition acpi.hpp:147
uint8_t gpe1_base
Definition acpi.hpp:128
uint16_t sci_int
Definition acpi.hpp:108
uint8_t pm1_cnt_len
Definition acpi.hpp:123
uint32_t gpe0_blk
Definition acpi.hpp:120
uint32_t pm_tmr_blk
Definition acpi.hpp:119
uint8_t duty_offset
Definition acpi.hpp:134
uint8_t preferred_pm_profile
Definition acpi.hpp:107
uint32_t pm1a_cnt_blk
Definition acpi.hpp:116
uint64_t x_firmware_ctrl
Definition acpi.hpp:146
GenericAddressStructure reset_reg
Definition acpi.hpp:142
uint8_t gpe1_blk_len
Definition acpi.hpp:127
uint8_t duty_width
Definition acpi.hpp:135
uint8_t day_alrm
Definition acpi.hpp:136
GenericAddressStructure x_pm1a_cnt_blk
Definition acpi.hpp:150
uint8_t pm1_evt_len
Definition acpi.hpp:122
uint64_t hypervisor_vendor_id
Definition acpi.hpp:158
GenericAddressStructure x_pm1a_evt_blk
Definition acpi.hpp:148
uint16_t arm_boot_arch
Definition acpi.hpp:144
uint8_t mon_alrm
Definition acpi.hpp:137
uint32_t flags
Definition acpi.hpp:141
GenericAddressStructure x_pm1b_cnt_blk
Definition acpi.hpp:151
uint32_t pm2_cnt_blk
Definition acpi.hpp:118
DescriptionHeader header
Definition acpi.hpp:103
GenericAddressStructure x_gpe1_blk
Definition acpi.hpp:155
uint16_t p_lvl2_lat
Definition acpi.hpp:130
uint16_t flush_stride
Definition acpi.hpp:133
uint8_t pstate_cnt
Definition acpi.hpp:113
uint32_t firmware_ctrl
Definition acpi.hpp:104
uint8_t cst_cnt
Definition acpi.hpp:129
uint32_t pm1a_evt_blk
Definition acpi.hpp:114
uint8_t gpe0_blk_len
Definition acpi.hpp:126
uint8_t century
Definition acpi.hpp:138
uint32_t smi_cmd
Definition acpi.hpp:109
Generic Address Structure.
Definition acpi.hpp:40
Root System Description Pointer (RSDP) Structure.
Definition acpi.hpp:52
uint8_t checksum
Definition acpi.hpp:54
uint64_t xsdt_address
Definition acpi.hpp:59
uint32_t rsdt_address
Definition acpi.hpp:57
uint8_t extended_checksum
Definition acpi.hpp:60
uint8_t revision
Definition acpi.hpp:56
uint32_t length
Definition acpi.hpp:58
Root System Description Table (RSDT)
Definition acpi.hpp:84
uint32_t * entry
Definition acpi.hpp:86
DescriptionHeader header
Definition acpi.hpp:85
Extended System Description Table (XSDT)
Definition acpi.hpp:93
DescriptionHeader header
Definition acpi.hpp:94
uint64_t * entry
Definition acpi.hpp:95