112361Speytoia/* $NetBSD: pmap_devmap.h,v 1.1 2023/04/20 08:28:02 skrll Exp $ */ 212361Speytoia 312361Speytoia/*- 412361Speytoia * Copyright (c) 2022 The NetBSD Foundation, Inc. 512361Speytoia * All rights reserved. 612361Speytoia * 712361Speytoia * This code is derived from software contributed to The NetBSD Foundation 812361Speytoia * by Nick Hudson 912361Speytoia * 1012361Speytoia * Redistribution and use in source and binary forms, with or without 1112361Speytoia * modification, are permitted provided that the following conditions 1212361Speytoia * are met: 1312361Speytoia * 1. Redistributions of source code must retain the above copyright 1412361Speytoia * notice, this list of conditions and the following disclaimer. 1512361Speytoia * 2. Redistributions in binary form must reproduce the above copyright 1612361Speytoia * notice, this list of conditions and the following disclaimer in the 1712361Speytoia * documentation and/or other materials provided with the distribution. 1812361Speytoia * 1912361Speytoia * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 2012361Speytoia * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 2112361Speytoia * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 2212361Speytoia * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 2312361Speytoia * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2412361Speytoia * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2512361Speytoia * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2612361Speytoia * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2712361Speytoia * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2812361Speytoia * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 2912361Speytoia * POSSIBILITY OF SUCH DAMAGE. 3012361Speytoia */ 3112361Speytoia 3212361Speytoia 3312361Speytoia#ifndef _UVM_PMAP_DEVMAP_H_ 3412361Speytoia#define _UVM_PMAP_DEVMAP_H_ 3512361Speytoia 3612361Speytoiatypedef struct pmap_devmap { 3712361Speytoia vaddr_t pd_va; /* virtual address */ 3812361Speytoia paddr_t pd_pa; /* physical address */ 3912361Speytoia psize_t pd_size; /* size of region */ 4012361Speytoia vm_prot_t pd_prot; /* protection code */ 4112361Speytoia u_int pd_flags; /* flags for pmap_kenter_{pa,range} */ 4212361Speytoia} pmap_devmap_t; 4312361Speytoia 4412361Speytoia 4512361Speytoiabool pmap_devmap_bootstrapped_p(void); 4612361Speytoiavoid pmap_devmap_register(const struct pmap_devmap *); 4712361Speytoiavoid pmap_devmap_bootstrap(vaddr_t, const struct pmap_devmap *); 4812361Speytoiavaddr_t pmap_devmap_root(void); 4912361Speytoiaconst struct pmap_devmap *pmap_devmap_find_pa(paddr_t, psize_t); 5012361Speytoiaconst struct pmap_devmap *pmap_devmap_find_va(vaddr_t, vsize_t); 5112361Speytoia 5212361Speytoia#define DEVMAP_ENTRY_FLAGS(va, pa, sz, fl) \ 5312361Speytoia{ \ 5412361Speytoia .pd_va = DEVMAP_ALIGN(va), \ 5512361Speytoia .pd_pa = DEVMAP_ALIGN(pa), \ 5612361Speytoia .pd_size = DEVMAP_SIZE(sz), \ 5712361Speytoia .pd_prot = VM_PROT_READ | VM_PROT_WRITE, \ 5812361Speytoia .pd_flags = (fl), \ 5912361Speytoia} 6012361Speytoia 6112361Speytoia#define DEVMAP_ENTRY(va, pa, sz) \ 6212361Speytoia DEVMAP_ENTRY_FLAGS(va, pa, sz, DEVMAP_FLAGS) 6312361Speytoia 6412361Speytoia#define DEVMAP_ENTRY_END { 0 } 6512361Speytoia 6612361Speytoia#endif /* _UVM_PMAP_DEVMAP_H_ */ 6712361Speytoia