Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
2293 | Serge | 1 | #include |
2 | #include |
||
3 | #include "acpi.h" |
||
4 | |||
5 | extern acpi_rsdp_t* acpi_rsdp; |
||
6 | extern acpi_rsdt_t* acpi_rsdt; |
||
7 | |||
8 | addr_t acpi_ioapic; |
||
9 | addr_t acpi_local_apic; |
||
10 | |||
11 | u8_t __fastcall acpi_table_checksum(u32_t length, u8_t *buffer); |
||
12 | |||
13 | acpi_rsdp_t* acpi_locate() |
||
14 | { |
||
15 | /** @todo checksum, check version */ |
||
16 | addr_t p; |
||
17 | |||
18 | for (p = ACPI_HI_RSDP_WINDOW_START; p < ACPI_HI_RSDP_WINDOW_END; p+=16) |
||
19 | { |
||
20 | acpi_rsdp_t* r = (acpi_rsdp_t*) p; |
||
21 | if ((r->sig[0] == 0x20445352) && |
||
22 | (r->sig[1] == 0x20525450) && |
||
23 | acpi_table_checksum(ACPI_RSDP_CHECKSUM_LENGTH, (u8_t*)r)==0 ) |
||
24 | { |
||
25 | return r; |
||
26 | }; |
||
27 | }; |
||
28 | /* not found */ |
||
29 | return NULL; |
||
30 | }; |
||
31 | |||
32 | addr_t __fastcall rsdt_find(acpi_rsdt_t *rsdt, u32_t sig) |
||
33 | { |
||
34 | addr_t head = 0; |
||
35 | u32_t i; |
||
36 | |||
37 | for (i = 0; i < ((rsdt->header.len-sizeof(acpi_thead_t))/ |
||
38 | sizeof(rsdt->ptrs[0])); i++) |
||
39 | { |
||
40 | acpi_thead_t* t= (acpi_thead_t*)acpi_remap_table(rsdt->ptrs[i]); |
||
41 | |||
42 | if (t->sig == sig) |
||
43 | { |
||
44 | head = rsdt->ptrs[i]; |
||
45 | break; |
||
46 | }; |
||
47 | } |
||
48 | return head; |
||
49 | };>> |
||
50 |