tte.h revision 102040
148204Sjmg/*- 215903Swosch * Copyright (c) 1997 Berkeley Software Design, Inc. All rights reserved. 315903Swosch * 415903Swosch * Redistribution and use in source and binary forms, with or without 515903Swosch * modification, are permitted provided that the following conditions 615903Swosch * are met: 715903Swosch * 1. Redistributions of source code must retain the above copyright 815903Swosch * notice, this list of conditions and the following disclaimer. 915903Swosch * 2. Redistributions in binary form must reproduce the above copyright 1015903Swosch * notice, this list of conditions and the following disclaimer in the 1115903Swosch * documentation and/or other materials provided with the distribution. 1215903Swosch * 3. Berkeley Software Design Inc's name may not be used to endorse or 1315903Swosch * promote products derived from this software without specific prior 1415903Swosch * written permission. 1515903Swosch * 1615903Swosch * THIS SOFTWARE IS PROVIDED BY BERKELEY SOFTWARE DESIGN INC ``AS IS'' AND 1715903Swosch * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1815903Swosch * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1915903Swosch * ARE DISCLAIMED. IN NO EVENT SHALL BERKELEY SOFTWARE DESIGN INC BE LIABLE 2015903Swosch * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2123546Swosch * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2234678Sbde * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2323546Swosch * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2423546Swosch * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2523546Swosch * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2615903Swosch * SUCH DAMAGE. 2715903Swosch * 2815903Swosch * from: BSDI: pmap.v9.h,v 1.10.2.6 1999/08/23 22:18:44 cp Exp 2915903Swosch * $FreeBSD: head/sys/sparc64/include/tte.h 102040 2002-08-18 02:09:27Z jake $ 3015903Swosch */ 3138413Sjb 3238413Sjb#ifndef _MACHINE_TTE_H_ 3338042Sbde#define _MACHINE_TTE_H_ 3439161Sobrien 3515903Swosch#define TTE_SHIFT (5) 3639161Sobrien 3715903Swosch#define TD_SIZE_SHIFT (61) 3815903Swosch#define TD_SOFT2_SHIFT (50) 3915903Swosch#define TD_DIAG_SHIFT (41) 4015903Swosch#define TD_PA_SHIFT (13) 4115903Swosch#define TD_SOFT_SHIFT (7) 4215903Swosch 4315903Swosch#define TD_SIZE_BITS (2) 4415903Swosch#define TD_SOFT2_BITS (9) 4532216Swosch#define TD_DIAG_BITS (9) 4632216Swosch#define TD_PA_BITS (28) 4732216Swosch#define TD_SOFT_BITS (6) 4832216Swosch 4915903Swosch#define TD_SIZE_MASK ((1UL << TD_SIZE_BITS) - 1) 5015903Swosch#define TD_SOFT2_MASK ((1UL << TD_SOFT2_BITS) - 1) 5115903Swosch#define TD_DIAG_MASK ((1UL << TD_DIAG_BITS) - 1) 5215903Swosch#define TD_PA_MASK ((1UL << TD_PA_BITS) - 1) 5315903Swosch#define TD_SOFT_MASK ((1UL << TD_SOFT_BITS) - 1) 5415903Swosch 5515903Swosch#define TS_8K (0UL) 5615903Swosch#define TS_64K (1UL) 5715903Swosch#define TS_512K (2UL) 5815903Swosch#define TS_4M (3UL) 5915903Swosch 6015903Swosch#define TS_MIN TS_8K 6145961Speter#define TS_MAX TS_4M 6215903Swosch 6315903Swosch#define TD_V (1UL << 63) 6415903Swosch#define TD_8K (TS_8K << TD_SIZE_SHIFT) 6515903Swosch#define TD_64K (TS_64K << TD_SIZE_SHIFT) 6615903Swosch#define TD_512K (TS_512K << TD_SIZE_SHIFT) 6715903Swosch#define TD_4M (TS_4M << TD_SIZE_SHIFT) 6815903Swosch#define TD_NFO (1UL << 60) 6915903Swosch#define TD_IE (1UL << 59) 7015903Swosch#define TD_PA(pa) ((pa) & (TD_PA_MASK << TD_PA_SHIFT)) 7115903Swosch#define TD_EXEC ((1UL << 4) << TD_SOFT_SHIFT) 7215903Swosch#define TD_REF ((1UL << 3) << TD_SOFT_SHIFT) 7339161Sobrien#define TD_PV ((1UL << 2) << TD_SOFT_SHIFT) 7415903Swosch#define TD_SW ((1UL << 1) << TD_SOFT_SHIFT) 7539161Sobrien#define TD_WIRED ((1UL << 0) << TD_SOFT_SHIFT) 7615903Swosch#define TD_L (1UL << 6) 7715903Swosch#define TD_CP (1UL << 5) 7815903Swosch#define TD_CV (1UL << 4) 7915903Swosch#define TD_E (1UL << 3) 8015903Swosch#define TD_P (1UL << 2) 8115903Swosch#define TD_W (1UL << 1) 8215903Swosch#define TD_G (1UL << 0) 8315903Swosch 8415903Swosch#define TV_SIZE_BITS (TD_SIZE_BITS) 8515903Swosch#define TV_VPN(va, sz) ((((va) >> TTE_PAGE_SHIFT(sz)) << TV_SIZE_BITS) | sz) 8615903Swosch 8715903Swosch#define TTE_SIZE_SPREAD (3) 8815903Swosch#define TTE_PAGE_SHIFT(sz) \ 8915903Swosch (PAGE_SHIFT + ((sz) * TTE_SIZE_SPREAD)) 9015903Swosch 9115903Swosch#define TTE_GET_SIZE(tp) \ 9215903Swosch (((tp)->tte_data >> TD_SIZE_SHIFT) & TD_SIZE_MASK) 9315903Swosch#define TTE_GET_PAGE_SHIFT(tp) \ 9415903Swosch TTE_PAGE_SHIFT(TTE_GET_SIZE(tp)) 9515903Swosch#define TTE_GET_PAGE_SIZE(tp) \ 9615903Swosch (1 << TTE_GET_PAGE_SHIFT(tp)) 9715903Swosch#define TTE_GET_PAGE_MASK(tp) \ 9815903Swosch (TTE_GET_PAGE_SIZE(tp) - 1) 9915903Swosch 10015903Swosch#define TTE_GET_PA(tp) \ 10115903Swosch ((tp)->tte_data & (TD_PA_MASK << TD_PA_SHIFT)) 10215903Swosch#define TTE_GET_VPN(tp) \ 10315903Swosch ((tp)->tte_vpn >> TV_SIZE_BITS) 10415903Swosch#define TTE_GET_VA(tp) \ 10515903Swosch (TTE_GET_VPN(tp) << TTE_GET_PAGE_SHIFT(tp)) 10615903Swosch#define TTE_GET_PMAP(tp) \ 10715903Swosch ((tp)->tte_pmap) 10815903Swosch#define TTE_ZERO(tp) \ 10915903Swosch bzero(tp, sizeof(*tp)) 11015903Swosch 11115903Swoschstruct pmap; 11215903Swosch 11315903Swoschstruct tte { 11415903Swosch u_long tte_vpn; 11515903Swosch u_long tte_data; 11615903Swosch STAILQ_ENTRY(tte) tte_link; 11715903Swosch struct pmap *tte_pmap; 11832216Swosch}; 11915903Swosch 12038042Sbdestatic __inline int 12138042Sbdette_match(struct tte *tp, vm_offset_t va) 12238042Sbde{ 12338042Sbde return (((tp->tte_data & TD_V) != 0) && 12438656Sjb (tp->tte_vpn == TV_VPN(va, TTE_GET_SIZE(tp)))); 12538656Sjb} 12638656Sjb 12738656Sjb#endif /* !_MACHINE_TTE_H_ */ 12838656Sjb