error_t acpi::mapRsdt(void) { LoosePage<acpi::sRsdt> rsdt; uarch_t rsdtNPages; if (!acpi::rsdpFound() || !acpi::testForRsdt()) { return ERROR_GENERAL; }; if (acpi::getRsdt() != NULL) { return ERROR_SUCCESS; }; rsdt = (acpi::sRsdt *)walkerPageRanger::createMappingTo( cache.rsdp->rsdtPaddr, 2, PAGEATTRIB_PRESENT | PAGEATTRIB_SUPERVISOR); if (rsdt == NULL) { printf(ERROR ACPI"Failed to temp map RSDT.\n"); return ERROR_MEMORY_VIRTUAL_PAGEMAP; }; rsdt.nPages = rsdt.nMapped = 2; rsdt.vasStream = processTrib.__kgetStream()->getVaddrSpaceStream(); rsdt = WPRANGER_ADJUST_VADDR( rsdt.get(), paddr_t(cache.rsdp->rsdtPaddr), acpi::sRsdt *); // Ensure that the table is valid: compute checksum. if (!checksumIsValid(rsdt.get())) { printf(WARNING ACPI"RSDT has invalid checksum.\n"); rsdt = WPRANGER_UNADJUST_VADDR(rsdt.get(), acpi::sRsdt *); return ERROR_GENERAL; };
bool frame::isValid() const { //mengembalikan true bila format dan checksum benar if (formatIsValid()) { return checksumIsValid(); } else return false; }