xref: /csrg-svn/sys/luna68k/luna68k/pte.h (revision 63198)
153991Sfujita /*
253991Sfujita  * Copyright (c) 1988 University of Utah.
353991Sfujita  * Copyright (c) 1992 OMRON Corporation.
4*63198Sbostic  * Copyright (c) 1982, 1986, 1990, 1992, 1993
5*63198Sbostic  *	The Regents of the University of California.  All rights reserved.
653991Sfujita  *
753991Sfujita  * This code is derived from software contributed to Berkeley by
853991Sfujita  * the Systems Programming Group of the University of Utah Computer
953991Sfujita  * Science Department.
1053991Sfujita  *
1153991Sfujita  * %sccs.include.redist.c%
1253991Sfujita  *
1353991Sfujita  * from: Utah $Hdr: pte.h 1.13 92/01/20$
1457413Sakito  * from: hp300/hp300/pte.h	7.4 (Berkeley) 6/5/92
1553991Sfujita  *
16*63198Sbostic  *	@(#)pte.h	8.1 (Berkeley) 06/10/93
1753991Sfujita  */
1853991Sfujita 
1953991Sfujita /*
2053991Sfujita  * LUNA68K hardware segment/page table entries
2153991Sfujita  */
2253991Sfujita 
2353991Sfujita struct ste {
2453991Sfujita 	unsigned int	sg_pfnum:20;	/* page table frame number */
2553991Sfujita 	unsigned int	:8;		/* reserved at 0 */
2653991Sfujita 	unsigned int	:1;		/* reserved at 1 */
2753991Sfujita 	unsigned int	sg_prot:1;	/* write protect bit */
2853991Sfujita 	unsigned int	sg_v:2;		/* valid bits */
2953991Sfujita };
3053991Sfujita 
3157413Sakito struct ste40 {
3257413Sakito 	unsigned int	sg_ptaddr:24;	/* page table page addr */
3357413Sakito 	unsigned int	:4;		/* reserved at 0 */
3457413Sakito 	unsigned int	sg_u;		/* hardware modified (dirty) bit */
3557413Sakito 	unsigned int	sg_prot:1;	/* write protect bit */
3657413Sakito 	unsigned int	sg_v:2;		/* valid bits */
3757413Sakito };
3857413Sakito 
3953991Sfujita struct pte {
4053991Sfujita 	unsigned int	pg_pfnum:20;	/* page frame number or 0 */
4153991Sfujita 	unsigned int	:3;
4253991Sfujita 	unsigned int	pg_w:1;		/* is wired */
4353991Sfujita 	unsigned int	:1;		/* reserved at zero */
4453991Sfujita 	unsigned int	pg_ci:1;	/* cache inhibit bit */
4553991Sfujita 	unsigned int	:1;		/* reserved at zero */
4653991Sfujita 	unsigned int	pg_m:1;		/* hardware modified (dirty) bit */
4753991Sfujita 	unsigned int	pg_u:1;		/* hardware used (reference) bit */
4853991Sfujita 	unsigned int	pg_prot:1;	/* write protect bit */
4953991Sfujita 	unsigned int	pg_v:2;		/* valid bit */
5053991Sfujita };
5153991Sfujita 
5253991Sfujita typedef struct ste	st_entry_t;	/* segment table entry */
5353991Sfujita typedef struct pte	pt_entry_t;	/* Mach page table entry */
5453991Sfujita 
5553991Sfujita #define	PT_ENTRY_NULL	((pt_entry_t *) 0)
5653991Sfujita #define	ST_ENTRY_NULL	((st_entry_t *) 0)
5753991Sfujita 
5853991Sfujita #define	SG_V		0x00000002	/* segment is valid */
5953991Sfujita #define	SG_NV		0x00000000
6053991Sfujita #define	SG_PROT		0x00000004	/* access protection mask */
6153991Sfujita #define	SG_RO		0x00000004
6253991Sfujita #define	SG_RW		0x00000000
6357413Sakito #define	SG_U		0x00000008	/* modified bit (68040) */
6453991Sfujita #define	SG_FRAME	0xfffff000
6553991Sfujita #define	SG_IMASK	0xffc00000
6657413Sakito #define	SG_ISHIFT	22
6753991Sfujita #define	SG_PMASK	0x003ff000
6853991Sfujita #define	SG_PSHIFT	12
6953991Sfujita 
7053991Sfujita /* 68040 additions */
7153991Sfujita #define	SG4_MASK1	0xfe000000
7253991Sfujita #define	SG4_SHIFT1	25
7353991Sfujita #define	SG4_MASK2	0x01fc0000
7453991Sfujita #define	SG4_SHIFT2	18
7553991Sfujita #define	SG4_MASK3	0x0003f000
7653991Sfujita #define	SG4_SHIFT3	12
7753991Sfujita #define	SG4_ADDR1	0xfffffe00
7853991Sfujita #define	SG4_ADDR2	0xffffff00
7953991Sfujita #define	SG4_LEV1SIZE	128
8053991Sfujita #define	SG4_LEV2SIZE	128
8153991Sfujita #define	SG4_LEV3SIZE	64
8253991Sfujita 
8353991Sfujita #define	PG_V		0x00000001
8453991Sfujita #define	PG_NV		0x00000000
8553991Sfujita #define	PG_PROT		0x00000004
8653991Sfujita #define	PG_U		0x00000008
8753991Sfujita #define	PG_M		0x00000010
8853991Sfujita #define	PG_W		0x00000100
8953991Sfujita #define	PG_RO		0x00000004
9053991Sfujita #define	PG_RW		0x00000000
9153991Sfujita #define	PG_FRAME	0xfffff000
9253991Sfujita #define	PG_CI		0x00000040
9353991Sfujita #define PG_SHIFT	12
9453991Sfujita #define	PG_PFNUM(x)	(((x) & PG_FRAME) >> PG_SHIFT)
9553991Sfujita 
9653991Sfujita /* 68040 additions */
9753991Sfujita #define	PG_CMASK	0x00000060	/* cache mode mask */
9853991Sfujita #define	PG_CWT		0x00000000	/* writethrough caching */
9953991Sfujita #define	PG_CCB		0x00000020	/* copyback caching */
10053991Sfujita #define	PG_CIS		0x00000040	/* cache inhibited serialized */
10153991Sfujita #define	PG_CIN		0x00000060	/* cache inhibited nonserialized */
10253991Sfujita #define	PG_SO		0x00000080	/* supervisor only */
10353991Sfujita 
10453991Sfujita #define LUNA_STSIZE	(MAXUL2SIZE*SG4_LEV2SIZE*sizeof(st_entry_t))
10553991Sfujita                                                 /* user process segment table size */
10653991Sfujita #define LUNA_MAX_PTSIZE	0x400000		/* max size of UPT */
10753991Sfujita #define LUNA_MAX_KPTSIZE	0x100000	/* max memory to allocate to KPT */
10853991Sfujita #define LUNA_PTBASE		0x10000000	/* UPT map base address */
10953991Sfujita #define LUNA_PTMAXSIZE		0x20000000	/* UPT map maximum size */
11053991Sfujita 
11153991Sfujita /*
11253991Sfujita  * Kernel virtual address to page table entry and to physical address.
11353991Sfujita  */
11453991Sfujita #define	kvtopte(va) \
11553991Sfujita 	(&Sysmap[((unsigned)(va) - VM_MIN_KERNEL_ADDRESS) >> PGSHIFT])
11653991Sfujita #define	ptetokv(pt) \
11753991Sfujita 	((((pt_entry_t *)(pt) - Sysmap) << PGSHIFT) + VM_MIN_KERNEL_ADDRESS)
11853991Sfujita #define	kvtophys(va) \
11953991Sfujita 	((kvtopte(va)->pg_pfnum << PGSHIFT) | ((int)(va) & PGOFSET))
12053991Sfujita 
121