#include struct rsdp *acpi_search_for_rsdp() { char *ptr = (char *)BIOS_START; char *str = RSDP_SIG; while ((uint32_t)ptr <= (uint32_t)BIOS_END - RSDP_SIG_LEN) { int i; for (i = 0; i < RSDP_SIG_LEN; i++) { if (ptr[i] != str[i]) break; } if (i == RSDP_SIG_LEN) { return (struct rsdp *)ptr; } ptr++; } return 0; } int acpi_validate_rsdp_checksum(struct rsdp *s) { uint8_t *bytes = (uint8_t *)s; uint8_t sum = 0; for (int i = 0; i < RSDP_SIZE; i++) { sum += bytes[i]; } return (sum & 0x0F) == 0; } int acpi_validate_sdt_checksum(struct ACPISDTHeader *s) { uint8_t sum = 0; for (uint32_t i = 0; i < s->Length; i++) { sum += ((char *)s)[i]; } return sum == 0; }