xref: /haiku/src/system/kernel/arch/m68k/arch_030_mmu.cpp (revision b55a57da7173b9af0432bd3e148d03f06161d036)
1 /*
2  * Copyright 2007, Haiku Inc. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  *
5  * Authors:
6  * 		François Revol <revol@free.fr>
7  */
8 
9 #include <arch/cpu.h>
10 
11 #include <arch_030_mmu.h>
12 
13 #define ARCH_M68K_MMU_TYPE 68030
14 
15 #include "arch_vm_translation_map_impl.cpp"
16 
17 static void
18 set_pgdir(void *rt)
19 {
20 	long_page_directory_entry entry;
21 	*(uint64 *)&entry = DFL_PAGEENT_VAL;
22 	entry.type = DT_ROOT;
23 	entry.addr = TA_TO_PREA(((addr_t)rt));
24 
25 	asm volatile( \
26 		"pmove (%0),%%srp\n" \
27 		"pmove (%0),%%crp\n" \
28 		: : "a"((uint64 *)&entry));
29 
30 }
31 
32 
33 struct m68k_vm_ops m68030_vm_ops = {
34 	_m68k_translation_map_get_pgdir,
35 	m68k_vm_translation_map_init_map,
36 	m68k_vm_translation_map_init_kernel_map_post_sem,
37 	m68k_vm_translation_map_init,
38 	m68k_vm_translation_map_init_post_area,
39 	m68k_vm_translation_map_init_post_sem,
40 	m68k_vm_translation_map_early_map,
41 	/*m68k_vm_translation_map_*/early_query,
42 	set_pgdir,
43 #if 0
44 	m68k_map_address_range,
45 	m68k_unmap_address_range,
46 	m68k_remap_address_range
47 #endif
48 	m68k_vm_translation_map_is_kernel_page_accessible
49 };
50