rem: sPageTableHashMask = (tableSize >> 6) - 1;
context: arch_mmu_init(void){	// get map of physical memory (fill in kernel_args structure)		size_t total;	if (find_physical_memory_ranges(total) < B_OK)		return B_ERROR;	printf("total physical memory = %u MB\n", total / (1024*1024));	// get OpenFirmware's current page table	void *table;	size_t tableSize;	ppc_get_page_table(&table, &tableSize);	printf("-> table = %p, size = %u\n", table, tableSize);	if (table == NULL && tableSize == 0) {		puts("OpenFirmware is in real addressing mode!");	}	// can we just keep the page table?	size_t suggestedTableSize = suggested_page_table_size(total);	printf("suggested page table size = %u\n", suggestedTableSize);	if (tableSize < suggestedTableSize) {		// nah, we need a new one!		printf("need new page table, size = %u!\n", suggestedTableSize);		table = of_claim(0, suggestedTableSize, suggestedTableSize);			// KERNEL_BASE would be better as virtual address, but			// at least with Apple's OpenFirmware, it makes no			// difference - we will have to remap it later		if (table == (void *)OF_FAILED)			return B_NO_MEMORY;		printf("new table at: %p\n", table);		sPageTable = (page_table_entry_group *)table;		sPageTableHashMask = (suggestedTableSize >> 6) - 1;	} else {		// ToDo: we could check if the page table is much too large		//	and create a smaller one in this case (in order to save 		//	memory).		sPageTable = (page_table_entry_group *)table;		sPageTableHashMask = (tableSize >> 6) - 1;	}	// find already allocated ranges of physical memory	// and the virtual address space	void *physicalTable;	if (find_allocated_ranges(table, &physicalTable) < B_OK)		return B_ERROR;	// ToDo: take over control of MMU	return B_OK;}