Subversion Repositories Kolibri OS

Rev

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