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