1/* $NetBSD$ */ 2/*- 3 * Copyright (c) 2011 The NetBSD Foundation, Inc. 4 * All rights reserved. 5 * 6 * This code is derived from software contributed to The NetBSD Foundation 7 * by Matt Thomas of 3am Software Foundry. 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions 11 * are met: 12 * 1. Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 2. Redistributions in binary form must reproduce the above copyright 15 * notice, this list of conditions and the following disclaimer in the 16 * documentation and/or other materials provided with the distribution. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 19 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 20 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 21 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 22 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 * POSSIBILITY OF SUCH DAMAGE. 29 */ 30#ifndef _COMMON_PMAP_TLB_TLB_H_ 31#define _COMMON_PMAP_TLB_TLB_H_ 32 33#if defined(_KERNEL) || defined(_KMEMUSER) 34 35struct tlbmask; 36 37struct tlb_md_ops { 38 void (*md_tlb_set_asid)(tlb_asid_t); 39 tlb_asid_t 40 (*md_tlb_get_asid)(void); 41 void (*md_tlb_invalidate_all)(void); 42 void (*md_tlb_invalidate_globals)(void); 43 void (*md_tlb_invalidate_asids)(tlb_asid_t, tlb_asid_t); 44 void (*md_tlb_invalidate_addr)(vaddr_t, tlb_asid_t); 45 bool (*md_tlb_update_addr)(vaddr_t, tlb_asid_t, pt_entry_t, bool); 46 void (*md_tlb_read_entry)(size_t, struct tlbmask *); 47 void (*md_tlb_write_entry)(size_t, const struct tlbmask *); 48 u_int (*md_tlb_record_asids)(u_long *); 49 void (*md_tlb_dump)(void (*)(const char *, ...)); 50 void (*md_tlb_walk)(void *, bool (*)(void *, vaddr_t, tlb_asid_t, 51 pt_entry_t)); 52}; 53 54tlb_asid_t 55 tlb_get_asid(void); 56void tlb_set_asid(tlb_asid_t); 57void tlb_invalidate_all(void); 58void tlb_invalidate_globals(void); 59void tlb_invalidate_asids(tlb_asid_t, tlb_asid_t); 60void tlb_invalidate_addr(vaddr_t, tlb_asid_t); 61bool tlb_update_addr(vaddr_t, tlb_asid_t, pt_entry_t, bool); 62u_int tlb_record_asids(u_long *); 63void tlb_enter_addr(size_t, const struct tlbmask *); 64void tlb_read_entry(size_t, struct tlbmask *); 65void tlb_write_entry(size_t, const struct tlbmask *); 66void tlb_walk(void *, bool (*)(void *, vaddr_t, tlb_asid_t, pt_entry_t)); 67void tlb_dump(void (*)(const char *, ...)); 68 69#endif /* _KERNEL || _KMEMUSER */ 70 71#endif /* !_COMMON_PMAP_TLB_TLB_H_ */ 72