1/*
2 * Copyright 2008-2010, Fran��ois Revol, revol@free.fr. All rights reserved.
3 * Copyright 2004-2005, Axel D��rfler, axeld@pinc-software.de. All rights reserved.
4 * Distributed under the terms of the MIT License.
5 */
6#ifndef MMU_H
7#define MMU_H
8
9
10#include <SupportDefs.h>
11
12
13// For use with mmu_map_physical_memory()
14static const uint32 kDefaultPageFlags = 0x3;	// present, R/W
15
16#ifdef __cplusplus
17extern "C" {
18#endif
19
20extern void mmu_init(void);
21extern void mmu_init_for_kernel(void);
22extern addr_t mmu_map_physical_memory(addr_t physicalAddress, size_t size, uint32 flags);
23extern void *mmu_allocate(void *virtualAddress, size_t size);
24extern void mmu_free(void *virtualAddress, size_t size);
25
26extern addr_t mmu_get_next_page_tables();
27
28
29struct boot_mmu_ops {
30	void (*initialize)(void);
31		/* len=0 to disable */
32	status_t (*set_tt)(int which, addr_t pa, size_t len, uint32 perms);
33		/* load root pointers */
34	status_t (*load_rp)(addr_t pa);
35	status_t (*allocate_kernel_pgdirs)(void);
36	status_t (*enable_paging)(void);
37	status_t (*add_page_table)(addr_t virtualAddress);
38	void (*unmap_page)(addr_t virtualAddress);
39	void (*map_page)(addr_t virtualAddress, addr_t pa, uint32 flags);
40};
41
42extern const struct boot_mmu_ops k030MMUOps;
43extern const struct boot_mmu_ops k040MMUOps;
44extern const struct boot_mmu_ops k060MMUOps;
45
46
47
48
49#ifdef __cplusplus
50}
51#endif
52
53#endif	/* MMU_H */
54