diff options
Diffstat (limited to 'src/kernel/libs/acpi.c')
-rw-r--r-- | src/kernel/libs/acpi.c | 58 |
1 files changed, 0 insertions, 58 deletions
diff --git a/src/kernel/libs/acpi.c b/src/kernel/libs/acpi.c deleted file mode 100644 index 0c22fe4..0000000 --- a/src/kernel/libs/acpi.c +++ /dev/null @@ -1,58 +0,0 @@ -#include <acpi.h> -#include <stdint.h> -#include <printf.h> - -static int RSDP_verify(void *rsdp_pointer) { - printf("Verifying potential RSDP at address 0x%p... ", rsdp_pointer); - union rsdp_t *rsdp = rsdp_pointer; - uint8_t checksum = 0; - char *rsdp_csm_ptr = rsdp_pointer; - int i; - if(checksum) return 0; - if(rsdp->v1.version) { - printf("APCI revision > 2.\n"); - checksum = 0; - printf("len : %i\n", rsdp->v2.len); - for(i = 0; i < rsdp->v2.len; i++) { - checksum += rsdp_csm_ptr[i]; - } - } - else { - printf("APCI revision 1.\n"); - for(i = 0; i <= 20; i++) { - checksum += rsdp_csm_ptr[i]; - } - } - if(checksum) { - return 0; - printf("Invalid, searching on.\n"); - } - printf("RSDP Verified!\n"); - return 1; -} - -rsdp_t *find_RSDP() { - const char sig[9] = "RSD PTR "; - uintptr_t *p = (void *)0x040e; - uintptr_t *ebda_unshifted = (void *)p; - - void *ebda = (void *)((uintptr_t)ebda_unshifted << (uintptr_t)4 & (uintptr_t)0xfffff); - - for(void *i = ebda; i <= ebda + 64000; i += 16) { - if(!(memcmp(sig, i, 8))) { - if(RSDP_verify(i)) { - return(i); - } - } - } - - for(void *i = (void *)0xe0000; i <= (void *)0xfffff; i += 16) { - if(!(memcmp(sig, i, 8))) { - if(RSDP_verify(i)) { - return(i); - } - } - } -} - - |