xref: /netbsd-src/sys/uvm/pmap/pmap_devmap.h (revision 8b7897c222faf19a07b132f0408bf6f1fafcce17)
1*8b7897c2Sskrll /*	$NetBSD: pmap_devmap.h,v 1.2 2024/11/25 22:03:44 skrll Exp $	*/
26d5cf357Sskrll 
36d5cf357Sskrll /*-
46d5cf357Sskrll  * Copyright (c) 2022 The NetBSD Foundation, Inc.
56d5cf357Sskrll  * All rights reserved.
66d5cf357Sskrll  *
76d5cf357Sskrll  * This code is derived from software contributed to The NetBSD Foundation
86d5cf357Sskrll  * by Nick Hudson
96d5cf357Sskrll  *
106d5cf357Sskrll  * Redistribution and use in source and binary forms, with or without
116d5cf357Sskrll  * modification, are permitted provided that the following conditions
126d5cf357Sskrll  * are met:
136d5cf357Sskrll  * 1. Redistributions of source code must retain the above copyright
146d5cf357Sskrll  *    notice, this list of conditions and the following disclaimer.
156d5cf357Sskrll  * 2. Redistributions in binary form must reproduce the above copyright
166d5cf357Sskrll  *    notice, this list of conditions and the following disclaimer in the
176d5cf357Sskrll  *    documentation and/or other materials provided with the distribution.
186d5cf357Sskrll  *
196d5cf357Sskrll  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
206d5cf357Sskrll  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
216d5cf357Sskrll  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
226d5cf357Sskrll  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
236d5cf357Sskrll  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
246d5cf357Sskrll  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
256d5cf357Sskrll  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
266d5cf357Sskrll  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
276d5cf357Sskrll  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
286d5cf357Sskrll  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
296d5cf357Sskrll  * POSSIBILITY OF SUCH DAMAGE.
306d5cf357Sskrll  */
316d5cf357Sskrll 
326d5cf357Sskrll 
336d5cf357Sskrll #ifndef	_UVM_PMAP_DEVMAP_H_
346d5cf357Sskrll #define	_UVM_PMAP_DEVMAP_H_
356d5cf357Sskrll 
36*8b7897c2Sskrll #ifdef _KERNEL
37*8b7897c2Sskrll 
386d5cf357Sskrll typedef struct pmap_devmap {
396d5cf357Sskrll 	vaddr_t		pd_va;		/* virtual address */
406d5cf357Sskrll 	paddr_t		pd_pa;		/* physical address */
416d5cf357Sskrll 	psize_t		pd_size;	/* size of region */
426d5cf357Sskrll 	vm_prot_t	pd_prot;	/* protection code */
436d5cf357Sskrll 	u_int		pd_flags;	/* flags for pmap_kenter_{pa,range} */
446d5cf357Sskrll } pmap_devmap_t;
456d5cf357Sskrll 
466d5cf357Sskrll 
476d5cf357Sskrll bool pmap_devmap_bootstrapped_p(void);
486d5cf357Sskrll void pmap_devmap_register(const struct pmap_devmap *);
496d5cf357Sskrll void pmap_devmap_bootstrap(vaddr_t, const struct pmap_devmap *);
506d5cf357Sskrll vaddr_t pmap_devmap_root(void);
516d5cf357Sskrll const struct pmap_devmap *pmap_devmap_find_pa(paddr_t, psize_t);
526d5cf357Sskrll const struct pmap_devmap *pmap_devmap_find_va(vaddr_t, vsize_t);
536d5cf357Sskrll 
546d5cf357Sskrll #define	DEVMAP_ENTRY_FLAGS(va, pa, sz, fl)			\
556d5cf357Sskrll {								\
566d5cf357Sskrll 	.pd_va = DEVMAP_ALIGN(va),				\
576d5cf357Sskrll 	.pd_pa = DEVMAP_ALIGN(pa),				\
586d5cf357Sskrll 	.pd_size = DEVMAP_SIZE(sz),				\
596d5cf357Sskrll 	.pd_prot = VM_PROT_READ | VM_PROT_WRITE,		\
606d5cf357Sskrll 	.pd_flags = (fl),					\
616d5cf357Sskrll }
626d5cf357Sskrll 
636d5cf357Sskrll #define	DEVMAP_ENTRY(va, pa, sz)				\
646d5cf357Sskrll 	DEVMAP_ENTRY_FLAGS(va, pa, sz, DEVMAP_FLAGS)
656d5cf357Sskrll 
666d5cf357Sskrll #define	DEVMAP_ENTRY_END	{ 0 }
676d5cf357Sskrll 
68*8b7897c2Sskrll #endif /* _KERNEL */
69*8b7897c2Sskrll 
706d5cf357Sskrll #endif	/* _UVM_PMAP_DEVMAP_H_ */
71