Beispiel #1
0
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;
	};
Beispiel #2
0
bool frame::isValid() const { //mengembalikan true bila format dan checksum benar
    if (formatIsValid()) {
        return checksumIsValid();
    } else return false;
}