xref: /netbsd-src/sys/arch/powerpc/include/pmap.h (revision d102777cf65467e3a1005a659b5581523e370740)
1 /*	$NetBSD: pmap.h,v 1.43 2023/12/15 09:43:59 rin Exp $	*/
2 
3 #ifndef _POWERPC_PMAP_H_
4 #define _POWERPC_PMAP_H_
5 
6 #ifdef _KERNEL_OPT
7 #include "opt_ppcarch.h"
8 #include "opt_modular.h"
9 #endif
10 
11 #if !defined(_MODULE)
12 
13 #if defined(PPC_BOOKE)
14 #include <powerpc/booke/pmap.h>
15 #elif defined(PPC_IBM4XX)
16 #include <powerpc/ibm4xx/pmap.h>
17 #elif defined(PPC_OEA) || defined (PPC_OEA64) || defined (PPC_OEA64_BRIDGE)
18 #include <powerpc/oea/pmap.h>
19 #elif defined(_KERNEL)
20 #error unknown PPC variant
21 #endif
22 
23 #ifndef PMAP_DIRECT_MAPPED_LEN
24 #define	PMAP_DIRECT_MAPPED_LEN	(~0UL)
25 #endif
26 
27 #endif /* !_MODULE */
28 
29 #if !defined(_LOCORE) && (defined(MODULAR) || defined(_MODULE))
30 /*
31  * Both BOOKE and OEA use __HAVE_VM_PAGE_MD but IBM4XX doesn't so define
32  * a compatible vm_page_md so that struct vm_page is the same size for all
33  * PPC variants.
34  */
35 #ifndef __HAVE_VM_PAGE_MD
36 #define __HAVE_VM_PAGE_MD
37 #define VM_MDPAGE_INIT(pg) __nothing
38 
39 struct vm_page_md {
40 	uintptr_t mdpg_dummy[5];
41 };
42 #endif /* !__HAVE_VM_PAGE_MD */
43 
44 __CTASSERT(sizeof(struct vm_page_md) == sizeof(uintptr_t)*5);
45 
46 #ifndef __HAVE_PMAP_PV_TRACK
47 /*
48  * We need empty stubs for modules shared with all sub-archs.
49  */
50 #define	__HAVE_PMAP_PV_TRACK
51 #define	PMAP_PV_TRACK_ONLY_STUBS
52 #include <uvm/pmap/pmap_pvt.h>
53 #endif /* !__HAVE_PMAP_PV_TRACK */
54 
55 #endif /* !LOCORE && (MODULAR || _MODULE) */
56 
57 #endif /* !_POWERPC_PMAP_H_ */
58