blob: 41a7aa70844c436158f1cfdd2a29dc180d044fab (
plain) (
blame)
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
|
#include "acpi.h"
#include "StringOperations.h"
Rsdp::Rsdp() : rsdpStruct(nullptr), rsdtObj(nullptr), xsdtObj(nullptr)
{
rsdpStruct = (struct rsdp *)StringOperations::findInMemory(rsdpSign, rsdpRomMemArea);
if(rsdpStruct == nullptr)
{
rsdpStruct = (struct rsdp *)StringOperations::findInMemory(rsdpSign, rsdpEbdaMemArea);
}
if(rsdpStruct != nullptr)
{
rsdtObj = Rsdt(rsdpStruct->rsdtAddress);
if(rsdpStruct->revision >= validFieldRevision)
{
xsdtObj = Xsdt(rsdpStruct->xsdtAddress);
}
}
};
const Rsdt *Rsdp::getRsdt() const
{
if(rsdpStruct != nullptr) return &rsdtObj;
else return nullptr;
};
Rsdt::Rsdt(const nulltype null) : entry(null)
{
rsdtStruct = null;
};
Rsdt::Rsdt(const uint32 addrRsdt) : entry(nullptr)
{
rsdtStruct = (const struct rsdt *)(addrRsdt);
if(rsdtStruct != nullptr)
{
entry = Entry(rsdtStruct->header.length,
(&rsdtStruct->firstEntryAddr));
}
};
const Xsdt *Rsdp::getXsdt() const
{
if(rsdpStruct != nullptr) return &xsdtObj;
else return nullptr;
};
Xsdt::Xsdt(const nulltype null)
{
xsdtStruct = nullptr;
};
Xsdt::Xsdt(const uint32 xsdt)
{
xsdtStruct = (const struct xsdt *)(xsdt);
};
Entry::Entry(const uint32 rsdtLength, const uint32 *entryAddress)
{
sizeHeadersInBytes = rsdtLength - sizeof(descHeader);
headers = (const struct descHeader **)(entryAddress);
};
Entry::Entry(const nulltype null)
{
sizeHeadersInBytes = 0;
headers = null;
};
|