tlb.h revision 100718
1189499Srnoland/*-
2189499Srnoland * Copyright (c) 2001 Jake Burkholder.
3189499Srnoland * All rights reserved.
4189499Srnoland *
5189499Srnoland * Redistribution and use in source and binary forms, with or without
6189499Srnoland * modification, are permitted provided that the following conditions
7189499Srnoland * are met:
8189499Srnoland * 1. Redistributions of source code must retain the above copyright
9189499Srnoland *    notice, this list of conditions and the following disclaimer.
10189499Srnoland * 2. Redistributions in binary form must reproduce the above copyright
11189499Srnoland *    notice, this list of conditions and the following disclaimer in the
12189499Srnoland *    documentation and/or other materials provided with the distribution.
13189499Srnoland *
14189499Srnoland * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15189499Srnoland * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16189499Srnoland * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17189499Srnoland * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18189499Srnoland * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19189499Srnoland * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20189499Srnoland * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21189499Srnoland * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22189499Srnoland * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23189499Srnoland * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24189499Srnoland * SUCH DAMAGE.
25189499Srnoland *
26189499Srnoland * $FreeBSD: head/sys/sparc64/include/tlb.h 100718 2002-07-26 15:54:04Z jake $
27189499Srnoland */
28189499Srnoland
29189499Srnoland#ifndef	_MACHINE_TLB_H_
30189499Srnoland#define	_MACHINE_TLB_H_
31189499Srnoland
32189499Srnoland#define	TLB_DAR_SLOT_SHIFT		(3)
33189499Srnoland#define	TLB_DAR_SLOT(slot)		((slot) << TLB_DAR_SLOT_SHIFT)
34189499Srnoland
35189499Srnoland#define	TAR_VPN_SHIFT			(13)
36189499Srnoland#define	TAR_CTX_MASK			((1 << TAR_VPN_SHIFT) - 1)
37189499Srnoland
38189499Srnoland#define	TLB_TAR_VA(va)			((va) & ~TAR_CTX_MASK)
39189499Srnoland#define	TLB_TAR_CTX(ctx)		((ctx) & TAR_CTX_MASK)
40189499Srnoland
41189499Srnoland#define	TLB_DEMAP_ID_SHIFT		(4)
42189499Srnoland#define	TLB_DEMAP_ID_PRIMARY		(0)
43189499Srnoland#define	TLB_DEMAP_ID_SECONDARY		(1)
44189499Srnoland#define	TLB_DEMAP_ID_NUCLEUS		(2)
45189499Srnoland
46189499Srnoland#define	TLB_DEMAP_TYPE_SHIFT		(6)
47189499Srnoland#define	TLB_DEMAP_TYPE_PAGE		(0)
48189499Srnoland#define	TLB_DEMAP_TYPE_CONTEXT		(1)
49189499Srnoland
50189499Srnoland#define	TLB_DEMAP_VA(va)		((va) & ~PAGE_MASK)
51189499Srnoland#define	TLB_DEMAP_ID(id)		((id) << TLB_DEMAP_ID_SHIFT)
52189499Srnoland#define	TLB_DEMAP_TYPE(type)		((type) << TLB_DEMAP_TYPE_SHIFT)
53189499Srnoland
54189499Srnoland#define	TLB_DEMAP_PAGE			(TLB_DEMAP_TYPE(TLB_DEMAP_TYPE_PAGE))
55189499Srnoland#define	TLB_DEMAP_CONTEXT		(TLB_DEMAP_TYPE(TLB_DEMAP_TYPE_CONTEXT))
56189499Srnoland
57189499Srnoland#define	TLB_DEMAP_PRIMARY		(TLB_DEMAP_ID(TLB_DEMAP_ID_PRIMARY))
58189499Srnoland#define	TLB_DEMAP_SECONDARY		(TLB_DEMAP_ID(TLB_DEMAP_ID_SECONDARY))
59189499Srnoland#define	TLB_DEMAP_NUCLEUS		(TLB_DEMAP_ID(TLB_DEMAP_ID_NUCLEUS))
60189499Srnoland
61189499Srnoland#define	TLB_CTX_KERNEL			(0)
62189499Srnoland#define	TLB_CTX_USER_MIN		(1)
63189499Srnoland#define	TLB_CTX_USER_MAX		(8192)
64189499Srnoland
65189499Srnoland#define	MMU_SFSR_ASI_SHIFT		(16)
66189499Srnoland#define	MMU_SFSR_FT_SHIFT		(7)
67189499Srnoland#define	MMU_SFSR_E_SHIFT		(6)
68189499Srnoland#define	MMU_SFSR_CT_SHIFT		(4)
69189499Srnoland#define	MMU_SFSR_PR_SHIFT		(3)
70189499Srnoland#define	MMU_SFSR_W_SHIFT		(2)
71189499Srnoland#define	MMU_SFSR_OW_SHIFT		(1)
72189499Srnoland#define	MMU_SFSR_FV_SHIFT		(0)
73189499Srnoland
74189499Srnoland#define	MMU_SFSR_ASI_SIZE		(8)
75189499Srnoland#define	MMU_SFSR_FT_SIZE		(6)
76189499Srnoland#define	MMU_SFSR_CT_SIZE		(2)
77189499Srnoland
78189499Srnoland#define	MMU_SFSR_W			(1L << MMU_SFSR_W_SHIFT)
79189499Srnoland
80189499Srnolandstruct tlb_entry;
81189499Srnoland
82189499Srnolandextern int kernel_tlb_slots;
83189499Srnolandextern struct tlb_entry *kernel_tlbs;
84189499Srnoland
85189499Srnolandextern int tlb_slot_count;
86189499Srnoland
87189499Srnolandvoid	tlb_context_demap(struct pmap *pm);
88189499Srnolandvoid	tlb_page_demap(struct pmap *pm, vm_offset_t va);
89189499Srnolandvoid	tlb_range_demap(struct pmap *pm, vm_offset_t start, vm_offset_t end);
90189499Srnolandvoid	tlb_dump(void);
91189499Srnoland
92189499Srnoland#endif /* !_MACHINE_TLB_H_ */
93189499Srnoland