xref: /openbsd-src/sys/dev/pci/drm/include/asm/set_memory.h (revision 1bb76ff151c0aba8e3312a604e4cd2e5195cf4b7)
1*1bb76ff1Sjsg /*	$OpenBSD: set_memory.h,v 1.5 2023/01/01 01:34:58 jsg Exp $	*/
27f4dd379Sjsg /*
37f4dd379Sjsg  * Copyright (c) 2013, 2014, 2015 Mark Kettenis
47f4dd379Sjsg  *
57f4dd379Sjsg  * Permission to use, copy, modify, and distribute this software for any
67f4dd379Sjsg  * purpose with or without fee is hereby granted, provided that the above
77f4dd379Sjsg  * copyright notice and this permission notice appear in all copies.
87f4dd379Sjsg  *
97f4dd379Sjsg  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
107f4dd379Sjsg  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
117f4dd379Sjsg  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
127f4dd379Sjsg  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
137f4dd379Sjsg  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
147f4dd379Sjsg  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
157f4dd379Sjsg  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
167f4dd379Sjsg  */
177f4dd379Sjsg 
187f4dd379Sjsg #ifndef _ASM_SET_MEMORY_H
197f4dd379Sjsg #define _ASM_SET_MEMORY_H
207f4dd379Sjsg 
21*1bb76ff1Sjsg #include <sys/types.h>
22311b6aa8Smpi #include <sys/systm.h>
237f4dd379Sjsg #include <sys/atomic.h>
24c349dbc7Sjsg 
25c349dbc7Sjsg #include <sys/param.h>		/* for PAGE_SIZE on i386 */
26c349dbc7Sjsg #include <uvm/uvm_extern.h>
27c349dbc7Sjsg 
287f4dd379Sjsg #include <machine/pmap.h>
297f4dd379Sjsg 
307f4dd379Sjsg #if defined(__amd64__) || defined(__i386__)
317f4dd379Sjsg 
327f4dd379Sjsg static inline int
set_pages_array_wb(struct vm_page ** pages,int addrinarray)337f4dd379Sjsg set_pages_array_wb(struct vm_page **pages, int addrinarray)
347f4dd379Sjsg {
357f4dd379Sjsg 	int i;
367f4dd379Sjsg 
377f4dd379Sjsg 	for (i = 0; i < addrinarray; i++)
387f4dd379Sjsg 		atomic_clearbits_int(&pages[i]->pg_flags, PG_PMAP_WC);
397f4dd379Sjsg 
407f4dd379Sjsg 	return 0;
417f4dd379Sjsg }
427f4dd379Sjsg 
437f4dd379Sjsg static inline int
set_pages_array_wc(struct vm_page ** pages,int addrinarray)447f4dd379Sjsg set_pages_array_wc(struct vm_page **pages, int addrinarray)
457f4dd379Sjsg {
467f4dd379Sjsg 	int i;
477f4dd379Sjsg 
487f4dd379Sjsg 	for (i = 0; i < addrinarray; i++)
497f4dd379Sjsg 		atomic_setbits_int(&pages[i]->pg_flags, PG_PMAP_WC);
507f4dd379Sjsg 
517f4dd379Sjsg 	return 0;
527f4dd379Sjsg }
537f4dd379Sjsg 
547f4dd379Sjsg static inline int
set_pages_array_uc(struct vm_page ** pages,int addrinarray)557f4dd379Sjsg set_pages_array_uc(struct vm_page **pages, int addrinarray)
567f4dd379Sjsg {
577f4dd379Sjsg 	/* XXX */
587f4dd379Sjsg 	return 0;
597f4dd379Sjsg }
607f4dd379Sjsg 
617f4dd379Sjsg static inline int
set_pages_wb(struct vm_page * page,int numpages)627f4dd379Sjsg set_pages_wb(struct vm_page *page, int numpages)
637f4dd379Sjsg {
645ca02815Sjsg 	struct vm_page *pg;
655ca02815Sjsg 	paddr_t start = VM_PAGE_TO_PHYS(page);
665ca02815Sjsg 	int i;
675ca02815Sjsg 
685ca02815Sjsg 	for (i = 0; i < numpages; i++) {
695ca02815Sjsg 		pg = PHYS_TO_VM_PAGE(start + (i * PAGE_SIZE));
705ca02815Sjsg 		if (pg != NULL)
715ca02815Sjsg 			atomic_clearbits_int(&pg->pg_flags, PG_PMAP_WC);
725ca02815Sjsg 	}
735ca02815Sjsg 
747f4dd379Sjsg 	return 0;
757f4dd379Sjsg }
767f4dd379Sjsg 
777f4dd379Sjsg static inline int
set_pages_uc(struct vm_page * page,int numpages)787f4dd379Sjsg set_pages_uc(struct vm_page *page, int numpages)
797f4dd379Sjsg {
807f4dd379Sjsg 	/* XXX */
817f4dd379Sjsg 	return 0;
827f4dd379Sjsg }
837f4dd379Sjsg 
847f4dd379Sjsg #endif /* defined(__amd64__) || defined(__i386__) */
857f4dd379Sjsg 
867f4dd379Sjsg #endif
87