1/*
2 * Copyright 2007, François Revol, revol@free.fr.
3 * Distributed under the terms of the MIT License.
4 *
5 * Copyright 2003-2005, Axel Dörfler, axeld@pinc-software.de.
6 * Distributed under the terms of the MIT License.
7 *
8 * Copyright 2001, Travis Geiselbrecht. All rights reserved.
9 * Distributed under the terms of the NewOS License.
10 */
11
12
13#include <KernelExport.h>
14
15#include <kernel.h>
16#include <boot/kernel_args.h>
17
18#include <vm/vm.h>
19#include <vm/vm_types.h>
20#include <arch/vm.h>
21//#include <arch_mmu.h>
22
23
24//#define TRACE_ARCH_VM
25#ifdef TRACE_ARCH_VM
26#	define TRACE(x) dprintf x
27#else
28#	define TRACE(x) ;
29#endif
30
31
32status_t
33arch_vm_init(kernel_args *args)
34{
35	TRACE(("arch_vm_init: entry\n"));
36	return B_OK;
37}
38
39
40status_t
41arch_vm_init2(kernel_args *args)
42{
43	return B_OK;
44}
45
46
47status_t
48arch_vm_init_post_area(kernel_args *args)
49{
50	TRACE(("arch_vm_init_post_area: entry\n"));
51	return B_OK;
52}
53
54
55status_t
56arch_vm_init_end(kernel_args *args)
57{
58	// Throw away all mappings that are unused by the kernel
59	vm_free_unused_boot_loader_range(KERNEL_LOAD_BASE, KERNEL_SIZE);
60
61	return B_OK;
62}
63
64
65status_t
66arch_vm_init_post_modules(kernel_args *args)
67{
68	return B_OK;
69}
70
71
72void
73arch_vm_aspace_swap(struct VMAddressSpace *from, struct VMAddressSpace *to)
74{
75	// This functions is only invoked when a userland thread is in the process
76	// of dying. It switches to the kernel team and does whatever cleanup is
77	// necessary (in case it is the team's main thread, it will delete the
78	// team).
79	// It is however not necessary to change the page directory. Userland team's
80	// page directories include all kernel mappings as well. Furthermore our
81	// arch specific translation map data objects are ref-counted, so they won't
82	// go away as long as they are still used on any CPU.
83}
84
85
86bool
87arch_vm_supports_protection(uint32 protection)
88{
89	// TODO check ARM protection possibilities
90	return true;
91}
92
93
94void
95arch_vm_unset_memory_type(VMArea *area)
96{
97	// TODO
98}
99
100
101status_t
102arch_vm_set_memory_type(VMArea *area, phys_addr_t physicalBase, uint32 type)
103{
104	if (type != 0)
105		dprintf("%s: undefined type %lx!\n", __PRETTY_FUNCTION__, type);
106
107	return B_OK;
108}
109