1*6942ea66Sjsg /* $OpenBSD: highmem.h,v 1.3 2020/06/14 15:20:07 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 _LINUX_HIGHMEM_H 197f4dd379Sjsg #define _LINUX_HIGHMEM_H 207f4dd379Sjsg 21c349dbc7Sjsg #include <sys/param.h> 227f4dd379Sjsg #include <uvm/uvm_extern.h> 237f4dd379Sjsg #include <linux/uaccess.h> 247f4dd379Sjsg 257f4dd379Sjsg void *kmap(struct vm_page *); 26*6942ea66Sjsg void kunmap_va(void *addr); 277f4dd379Sjsg 287f4dd379Sjsg #define kmap_to_page(ptr) (ptr) 297f4dd379Sjsg 307f4dd379Sjsg #if defined(__i386__) || defined(__amd64__) 317f4dd379Sjsg 327f4dd379Sjsg static inline void * 337f4dd379Sjsg kmap_atomic(struct vm_page *pg) 347f4dd379Sjsg { 357f4dd379Sjsg vaddr_t va; 367f4dd379Sjsg 377f4dd379Sjsg #if defined (__HAVE_PMAP_DIRECT) 387f4dd379Sjsg va = pmap_map_direct(pg); 397f4dd379Sjsg #else 407f4dd379Sjsg extern vaddr_t pmap_tmpmap_pa(paddr_t); 417f4dd379Sjsg va = pmap_tmpmap_pa(VM_PAGE_TO_PHYS(pg)); 427f4dd379Sjsg #endif 437f4dd379Sjsg return (void *)va; 447f4dd379Sjsg } 457f4dd379Sjsg 467f4dd379Sjsg static inline void 477f4dd379Sjsg kunmap_atomic(void *addr) 487f4dd379Sjsg { 497f4dd379Sjsg #if defined (__HAVE_PMAP_DIRECT) 507f4dd379Sjsg pmap_unmap_direct((vaddr_t)addr); 517f4dd379Sjsg #else 527f4dd379Sjsg extern void pmap_tmpunmap_pa(void); 537f4dd379Sjsg pmap_tmpunmap_pa(); 547f4dd379Sjsg #endif 557f4dd379Sjsg } 567f4dd379Sjsg 577f4dd379Sjsg #endif /* defined(__i386__) || defined(__amd64__) */ 587f4dd379Sjsg 597f4dd379Sjsg #endif 60