tsb.h revision 101653
1187498Simp/*- 2187498Simp * Copyright (c) 1997 Berkeley Software Design, Inc. All rights reserved. 3187498Simp * 4187498Simp * Redistribution and use in source and binary forms, with or without 5187498Simp * modification, are permitted provided that the following conditions 6187498Simp * are met: 7187498Simp * 1. Redistributions of source code must retain the above copyright 8187498Simp * notice, this list of conditions and the following disclaimer. 9187498Simp * 2. Redistributions in binary form must reproduce the above copyright 10187498Simp * notice, this list of conditions and the following disclaimer in the 11187498Simp * documentation and/or other materials provided with the distribution. 12187498Simp * 3. Berkeley Software Design Inc's name may not be used to endorse or 13187498Simp * promote products derived from this software without specific prior 14187498Simp * written permission. 15187498Simp * 16187498Simp * THIS SOFTWARE IS PROVIDED BY BERKELEY SOFTWARE DESIGN INC ``AS IS'' AND 17187498Simp * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18187498Simp * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19187498Simp * ARE DISCLAIMED. IN NO EVENT SHALL BERKELEY SOFTWARE DESIGN INC BE LIABLE 20187498Simp * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21187498Simp * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22187498Simp * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23187498Simp * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24187498Simp * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25187498Simp * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26187498Simp * SUCH DAMAGE. 27187498Simp * 28187498Simp * from: BSDI: pmap.v9.h,v 1.10.2.6 1999/08/23 22:18:44 cp Exp 29187498Simp * $FreeBSD: head/sys/sparc64/include/tsb.h 101653 2002-08-10 22:14:16Z jake $ 30187498Simp */ 31187498Simp 32187498Simp#ifndef _MACHINE_TSB_H_ 33187498Simp#define _MACHINE_TSB_H_ 34187498Simp 35187498Simp#define TSB_PAGES_SHIFT (4) 36187498Simp#define TSB_PAGES (1 << TSB_PAGES_SHIFT) 37187498Simp#define TSB_BSHIFT (TSB_PAGES_SHIFT + PAGE_SHIFT) 38187498Simp#define TSB_BSIZE (1UL << TSB_BSHIFT) 39187498Simp#define TSB_SIZE (TSB_BSIZE / sizeof(struct tte)) 40187498Simp#define TSB_BUCKET_SHIFT (2) 41187498Simp#define TSB_BUCKET_SIZE (1 << TSB_BUCKET_SHIFT) 42187498Simp#define TSB_BUCKET_ADDRESS_BITS \ 43187498Simp (TSB_BSHIFT - TSB_BUCKET_SHIFT - TTE_SHIFT) 44187498Simp#define TSB_BUCKET_MASK ((1 << TSB_BUCKET_ADDRESS_BITS) - 1) 45187498Simp 46187498Simpextern struct tte *tsb_kernel; 47187498Simpextern vm_size_t tsb_kernel_mask; 48187498Simpextern vm_size_t tsb_kernel_size; 49187498Simpextern vm_offset_t tsb_kernel_phys; 50187498Simp 51187498Simpstatic __inline struct tte * 52187498Simptsb_vpntobucket(pmap_t pm, vm_offset_t vpn) 53187498Simp{ 54187498Simp return (&pm->pm_tsb[(vpn & TSB_BUCKET_MASK) << TSB_BUCKET_SHIFT]); 55187498Simp} 56187498Simp 57187498Simpstatic __inline struct tte * 58187498Simptsb_vtobucket(pmap_t pm, vm_offset_t va) 59187498Simp{ 60187498Simp return (tsb_vpntobucket(pm, va >> PAGE_SHIFT)); 61187498Simp} 62187498Simp 63187498Simpstatic __inline struct tte * 64187498Simptsb_kvpntotte(vm_offset_t vpn) 65187498Simp{ 66187498Simp return (&tsb_kernel[vpn & tsb_kernel_mask]); 67187498Simp} 68187498Simp 69187498Simpstatic __inline struct tte * 70187498Simptsb_kvtotte(vm_offset_t va) 71187498Simp{ 72187498Simp return (tsb_kvpntotte(va >> PAGE_SHIFT)); 73187498Simp} 74187498Simp 75198669Srrstypedef int (tsb_callback_t)(struct pmap *, struct pmap *, struct tte *, 76198669Srrs vm_offset_t); 77198669Srrs 78198669Srrsstruct tte *tsb_tte_lookup(pmap_t pm, vm_offset_t va); 79198669Srrsvoid tsb_tte_remove(struct tte *stp); 80198669Srrsstruct tte *tsb_tte_enter(pmap_t pm, vm_page_t m, vm_offset_t va, 81187498Simp u_long data); 82187498Simpvoid tsb_tte_local_remove(struct tte *tp); 83187498Simpvoid tsb_foreach(pmap_t pm1, pmap_t pm2, vm_offset_t start, vm_offset_t end, 84187498Simp tsb_callback_t *callback); 85187498Simp 86187498Simp#endif /* !_MACHINE_TSB_H_ */ 87187498Simp