tte.h revision 88652
1236834Sadrian/*- 2236834Sadrian * Copyright (c) 1997 Berkeley Software Design, Inc. All rights reserved. 3236834Sadrian * 4236834Sadrian * Redistribution and use in source and binary forms, with or without 5236834Sadrian * modification, are permitted provided that the following conditions 6236834Sadrian * are met: 7236834Sadrian * 1. Redistributions of source code must retain the above copyright 8236834Sadrian * notice, this list of conditions and the following disclaimer. 9236834Sadrian * 2. Redistributions in binary form must reproduce the above copyright 10236834Sadrian * notice, this list of conditions and the following disclaimer in the 11236834Sadrian * documentation and/or other materials provided with the distribution. 12236834Sadrian * 3. Berkeley Software Design Inc's name may not be used to endorse or 13236834Sadrian * promote products derived from this software without specific prior 14236834Sadrian * written permission. 15236834Sadrian * 16236834Sadrian * THIS SOFTWARE IS PROVIDED BY BERKELEY SOFTWARE DESIGN INC ``AS IS'' AND 17236834Sadrian * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18236834Sadrian * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19236834Sadrian * ARE DISCLAIMED. IN NO EVENT SHALL BERKELEY SOFTWARE DESIGN INC BE LIABLE 20236834Sadrian * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21236834Sadrian * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22236834Sadrian * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23236834Sadrian * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24236834Sadrian * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25236834Sadrian * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26236834Sadrian * SUCH DAMAGE. 27236834Sadrian * 28236834Sadrian * from: BSDI: pmap.v9.h,v 1.10.2.6 1999/08/23 22:18:44 cp Exp 29236834Sadrian * $FreeBSD: head/sys/sparc64/include/tte.h 88652 2001-12-29 08:24:02Z jake $ 30236834Sadrian */ 31236834Sadrian 32236834Sadrian#ifndef _MACHINE_TTE_H_ 33236834Sadrian#define _MACHINE_TTE_H_ 34236834Sadrian 35236834Sadrian#define TTE_SHIFT (4) 36236834Sadrian 37236834Sadrian#define TT_CTX_SHIFT (48) 38236834Sadrian#define TT_VA_SHIFT (22) 39236834Sadrian#define TT_VPN_SHIFT (9) 40236834Sadrian 41236834Sadrian#define TT_CTX_SIZE (13) 42236834Sadrian#define TT_VA_SIZE (42) 43236834Sadrian 44236834Sadrian#define TT_CTX_MASK ((1UL << TT_CTX_SIZE) - 1) 45236834Sadrian#define TT_VA_MASK ((1UL << TT_VA_SIZE) - 1) 46236834Sadrian 47236834Sadrian#define TT_G (1UL << 63) 48236834Sadrian#define TT_CTX(ctx) (((u_long)(ctx) & TT_CTX_MASK) << TT_CTX_SHIFT) 49236834Sadrian#define TT_VA(va) ((u_long)(va) >> TT_VA_SHIFT) 50236834Sadrian 51236834Sadrian#define TD_SIZE_SHIFT (61) 52236834Sadrian#define TD_SOFT2_SHIFT (50) 53236834Sadrian#define TD_DIAG_SHIFT (41) 54236834Sadrian#define TD_PA_SHIFT (13) 55236834Sadrian#define TD_SOFT_SHIFT (7) 56236834Sadrian 57236834Sadrian#define TD_SIZE_SIZE (2) 58236834Sadrian#define TD_SOFT2_SIZE (9) 59236834Sadrian#define TD_DIAG_SIZE (9) 60236834Sadrian#define TD_PA_SIZE (28) 61236834Sadrian#define TD_SOFT_SIZE (6) 62236834Sadrian 63236834Sadrian#define TD_SIZE_MASK (((1UL << TD_SIZE_SIZE) - 1) << TD_SIZE_SHIFT) 64236834Sadrian#define TD_SOFT2_MASK (((1UL << TD_SOFT2_SIZE) - 1) << TD_SOFT2_SHIFT) 65236834Sadrian#define TD_DIAG_MASK (((1UL << TD_DIAG_SIZE) - 1) << TD_DIAG_SHIFT) 66236834Sadrian#define TD_PA_MASK (((1UL << TD_PA_SIZE) - 1) << TD_PA_SHIFT) 67236834Sadrian#define TD_SOFT_MASK (((1UL << TD_SOFT_SIZE) - 1) << TD_SOFT_SHIFT) 68236834Sadrian 69236834Sadrian#define TD_VA_LOW_SHIFT TD_SOFT2_SHIFT 70236834Sadrian#define TD_VA_LOW_MASK TD_SOFT2_MASK 71236834Sadrian 72236834Sadrian#define TS_EXEC (1UL << 4) 73236834Sadrian#define TS_REF (1UL << 3) 74236834Sadrian#define TS_PV (1UL << 2) 75236834Sadrian#define TS_W (1UL << 1) 76236834Sadrian#define TS_WIRED (1UL << 0) 77236834Sadrian 78236834Sadrian#define TD_V (1UL << 63) 79236834Sadrian#define TD_8K (0UL << TD_SIZE_SHIFT) 80236834Sadrian#define TD_64K (1UL << TD_SIZE_SHIFT) 81236834Sadrian#define TD_512K (2UL << TD_SIZE_SHIFT) 82236834Sadrian#define TD_4M (3UL << TD_SIZE_SHIFT) 83236834Sadrian#define TD_NFO (1UL << 60) 84236834Sadrian#define TD_IE (1UL << 59) 85236834Sadrian#define TD_VPN_LOW(vpn) ((vpn << TD_SOFT2_SHIFT) & TD_SOFT2_MASK) 86236834Sadrian#define TD_VA_LOW(va) (TD_VPN_LOW((va) >> PAGE_SHIFT)) 87236834Sadrian#define TD_PA(pa) ((pa) & TD_PA_MASK) 88236834Sadrian#define TD_EXEC (TS_EXEC << TD_SOFT_SHIFT) 89236834Sadrian#define TD_REF (TS_REF << TD_SOFT_SHIFT) 90236834Sadrian#define TD_PV (TS_PV << TD_SOFT_SHIFT) 91236834Sadrian#define TD_SW (TS_W << TD_SOFT_SHIFT) 92236834Sadrian#define TD_WIRED (TS_WIRED << TD_SOFT_SHIFT) 93236834Sadrian#define TD_L (1UL << 6) 94236834Sadrian#define TD_CP (1UL << 5) 95236834Sadrian#define TD_CV (1UL << 4) 96236834Sadrian#define TD_E (1UL << 3) 97236834Sadrian#define TD_P (1UL << 2) 98236834Sadrian#define TD_W (1UL << 1) 99236834Sadrian#define TD_G (1UL << 0) 100236834Sadrian 101236834Sadrian#define TT_GET_CTX(tag) (((tag) >> TT_CTX_SHIFT) & TT_CTX_MASK) 102236834Sadrian#define TD_GET_SIZE(d) (((d) >> TD_SIZE_SHIFT) & 3) 103236834Sadrian#define TD_GET_PA(d) ((d) & TD_PA_MASK) 104236834Sadrian 105236834Sadrianstruct tte { 106236834Sadrian u_long tte_tag; 107236834Sadrian u_long tte_data; 108236834Sadrian}; 109236834Sadrian 110236834Sadrianstatic __inline vm_offset_t 111236834Sadriantte_get_vpn(struct tte tte) 112236834Sadrian{ 113236834Sadrian return (((tte.tte_tag & TT_VA_MASK) << TT_VPN_SHIFT) | 114236834Sadrian ((tte.tte_data & TD_VA_LOW_MASK) >> TD_VA_LOW_SHIFT)); 115236834Sadrian} 116236834Sadrian 117236834Sadrianstatic __inline vm_offset_t 118236834Sadriantte_get_va(struct tte tte) 119236834Sadrian{ 120236834Sadrian return (tte_get_vpn(tte) << PAGE_SHIFT); 121236834Sadrian} 122236834Sadrian 123236834Sadrianstatic __inline int 124236834Sadriantte_match(struct tte tte, vm_offset_t va) 125236834Sadrian{ 126236834Sadrian return ((tte.tte_data & TD_V) != 0 && 127236834Sadrian ((tte.tte_tag ^ TT_VA(va)) & TT_VA_MASK) == 0 && 128236834Sadrian ((tte.tte_data ^ TD_VA_LOW(va)) & TD_VA_LOW_MASK) == 0); 129} 130 131#endif /* !_MACHINE_TTE_H_ */ 132