1 /* 2 * Copyright (c) 2010 by The DragonFly Project and Samuel J. Greear. 3 * All rights reserved. 4 * 5 * This code is derived from software contributed to The DragonFly Project 6 * by Samuel J. Greear <sjg@thesjg.com> 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 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 16 * the documentation and/or other materials provided with the 17 * distribution. 18 * 3. Neither the name of The DragonFly Project nor the names of its 19 * contributors may be used to endorse or promote products derived 20 * from this software without specific, prior written permission. 21 * 22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 23 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 25 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 26 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 27 * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, 28 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 29 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 30 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 31 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 32 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 */ 35 36 #ifndef _CPU_LWBUF_H_ 37 #define _CPU_LWBUF_H_ 38 39 #ifndef _SYS_TYPES_H_ 40 #include <sys/types.h> 41 #endif 42 #ifndef _SYS_GLOBALDATA_H_ 43 #include <sys/globaldata.h> 44 #endif 45 #ifndef _VM_PMAP_H_ 46 #include <vm/pmap.h> 47 #endif 48 #ifndef _VM_VM_PAGE_H_ 49 #include <vm/vm_page.h> 50 #endif 51 #include <machine/atomic.h> 52 #ifndef _MACHINE_VMPARAM_H_ 53 #include <machine/vmparam.h> 54 #endif 55 56 #if !defined(_KERNEL) && !defined(_KERNEL_STRUCTURES) 57 #error "This file should not be included by userland programs." 58 #endif 59 60 struct lwbuf { 61 vm_page_t m; /* currently mapped page */ 62 vm_offset_t kva; /* va of mapping */ 63 }; 64 65 static __inline vm_page_t 66 lwbuf_page(struct lwbuf *lwb) 67 { 68 return (lwb->m); 69 } 70 71 static __inline vm_offset_t 72 lwbuf_kva(struct lwbuf *lwb) 73 { 74 return (lwb->kva); 75 } 76 77 static __inline struct lwbuf * 78 lwbuf_alloc(vm_page_t m, struct lwbuf *lwb_cache) 79 { 80 struct lwbuf *lwb = lwb_cache; 81 82 lwb->m = m; 83 lwb->kva = PHYS_TO_DMAP(VM_PAGE_TO_PHYS(lwb->m)); 84 85 return (lwb); 86 } 87 88 static __inline void 89 lwbuf_free(struct lwbuf *lwb) 90 { 91 lwb->m = NULL; /* safety */ 92 } 93 94 #define lwbuf_set_global(lwb) 95 96 #if defined(_KERNEL) 97 98 #endif 99 100 #endif /* !_CPU_LWBUF_H_ */ 101