180709Sjake/*- 280709Sjake * Copyright (c) 1997 Berkeley Software Design, Inc. All rights reserved. 380709Sjake * 480709Sjake * Redistribution and use in source and binary forms, with or without 580709Sjake * modification, are permitted provided that the following conditions 680709Sjake * are met: 780709Sjake * 1. Redistributions of source code must retain the above copyright 880709Sjake * notice, this list of conditions and the following disclaimer. 980709Sjake * 2. Redistributions in binary form must reproduce the above copyright 1080709Sjake * notice, this list of conditions and the following disclaimer in the 1180709Sjake * documentation and/or other materials provided with the distribution. 1280709Sjake * 3. Berkeley Software Design Inc's name may not be used to endorse or 1380709Sjake * promote products derived from this software without specific prior 1480709Sjake * written permission. 1580709Sjake * 1680709Sjake * THIS SOFTWARE IS PROVIDED BY BERKELEY SOFTWARE DESIGN INC ``AS IS'' AND 1780709Sjake * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1880709Sjake * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1980709Sjake * ARE DISCLAIMED. IN NO EVENT SHALL BERKELEY SOFTWARE DESIGN INC BE LIABLE 2080709Sjake * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2180709Sjake * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2280709Sjake * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2380709Sjake * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2480709Sjake * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2580709Sjake * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2680709Sjake * SUCH DAMAGE. 2780709Sjake * 2880709Sjake * from: BSDI: pmap.v9.h,v 1.10.2.6 1999/08/23 22:18:44 cp Exp 2980709Sjake * $FreeBSD: releng/10.3/sys/sparc64/include/tsb.h 223378 2011-06-21 20:48:14Z marius $ 3080709Sjake */ 3180709Sjake 3280709Sjake#ifndef _MACHINE_TSB_H_ 3380709Sjake#define _MACHINE_TSB_H_ 3480709Sjake 3597829Sjake#define TSB_PAGES_SHIFT (4) 3691274Sjake#define TSB_PAGES (1 << TSB_PAGES_SHIFT) 3791274Sjake#define TSB_BSHIFT (TSB_PAGES_SHIFT + PAGE_SHIFT) 38166105Smarius#define TSB_BSIZE (1 << TSB_BSHIFT) 3988649Sjake#define TSB_BUCKET_SHIFT (2) 4088649Sjake#define TSB_BUCKET_SIZE (1 << TSB_BUCKET_SHIFT) 4188649Sjake#define TSB_BUCKET_ADDRESS_BITS \ 4288826Stmm (TSB_BSHIFT - TSB_BUCKET_SHIFT - TTE_SHIFT) 4388649Sjake#define TSB_BUCKET_MASK ((1 << TSB_BUCKET_ADDRESS_BITS) - 1) 4480709Sjake 45166105Smarius#ifndef LOCORE 46166105Smarius 47166105Smarius#define TSB_SIZE (TSB_BSIZE / sizeof(struct tte)) 48166105Smarius 4988649Sjakeextern struct tte *tsb_kernel; 50101653Sjakeextern vm_size_t tsb_kernel_mask; 51101653Sjakeextern vm_size_t tsb_kernel_size; 52113238Sjakeextern vm_paddr_t tsb_kernel_phys; 5380709Sjake 5488649Sjakestatic __inline struct tte * 5588649Sjaketsb_vpntobucket(pmap_t pm, vm_offset_t vpn) 5680709Sjake{ 57166105Smarius 5888649Sjake return (&pm->pm_tsb[(vpn & TSB_BUCKET_MASK) << TSB_BUCKET_SHIFT]); 5980709Sjake} 6080709Sjake 6188649Sjakestatic __inline struct tte * 62102040Sjaketsb_vtobucket(pmap_t pm, u_long sz, vm_offset_t va) 6380709Sjake{ 64166105Smarius 65102040Sjake return (tsb_vpntobucket(pm, va >> TTE_PAGE_SHIFT(sz))); 6680709Sjake} 6780709Sjake 6888649Sjakestatic __inline struct tte * 6988649Sjaketsb_kvpntotte(vm_offset_t vpn) 7080709Sjake{ 71166105Smarius 72101653Sjake return (&tsb_kernel[vpn & tsb_kernel_mask]); 7380709Sjake} 7480709Sjake 7588649Sjakestatic __inline struct tte * 7688649Sjaketsb_kvtotte(vm_offset_t va) 7780709Sjake{ 78166105Smarius 7988649Sjake return (tsb_kvpntotte(va >> PAGE_SHIFT)); 8080709Sjake} 8180709Sjake 8291338Sjaketypedef int (tsb_callback_t)(struct pmap *, struct pmap *, struct tte *, 83166105Smarius vm_offset_t); 8488826Stmm 8588649Sjakestruct tte *tsb_tte_lookup(pmap_t pm, vm_offset_t va); 8688649Sjakevoid tsb_tte_remove(struct tte *stp); 87102040Sjakestruct tte *tsb_tte_enter(pmap_t pm, vm_page_t m, vm_offset_t va, u_long sz, 88166105Smarius u_long data); 8980709Sjakevoid tsb_tte_local_remove(struct tte *tp); 9091168Sjakevoid tsb_foreach(pmap_t pm1, pmap_t pm2, vm_offset_t start, vm_offset_t end, 91166105Smarius tsb_callback_t *callback); 9280709Sjake 93166105Smarius#endif /* !LOCORE */ 94166105Smarius 9580709Sjake#endif /* !_MACHINE_TSB_H_ */ 96