1 | /* $NetBSD: vmalloc.h,v 1.4 2014/08/23 08:03:33 riastradh Exp $ */ |
2 | |
3 | /*- |
4 | * Copyright (c) 2013 The NetBSD Foundation, Inc. |
5 | * All rights reserved. |
6 | * |
7 | * This code is derived from software contributed to The NetBSD Foundation |
8 | * by Taylor R. Campbell. |
9 | * |
10 | * Redistribution and use in source and binary forms, with or without |
11 | * modification, are permitted provided that the following conditions |
12 | * are met: |
13 | * 1. Redistributions of source code must retain the above copyright |
14 | * notice, this list of conditions and the following disclaimer. |
15 | * 2. Redistributions in binary form must reproduce the above copyright |
16 | * notice, this list of conditions and the following disclaimer in the |
17 | * documentation and/or other materials provided with the distribution. |
18 | * |
19 | * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS |
20 | * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED |
21 | * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
22 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS |
23 | * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
24 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
25 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
26 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
27 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
28 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
29 | * POSSIBILITY OF SUCH DAMAGE. |
30 | */ |
31 | |
32 | #ifndef _LINUX_VMALLOC_H_ |
33 | #define _LINUX_VMALLOC_H_ |
34 | |
35 | #include <sys/malloc.h> |
36 | |
37 | #include <uvm/uvm_extern.h> |
38 | |
39 | #include <linux/mm_types.h> |
40 | |
41 | static inline bool |
42 | is_vmalloc_addr(void *addr) |
43 | { |
44 | /* XXX Assumes vmalloc and kmalloc both use malloc(9). */ |
45 | return true; |
46 | } |
47 | |
48 | static inline void * |
49 | vmalloc(unsigned long size) |
50 | { |
51 | return malloc(size, M_TEMP, M_WAITOK); |
52 | } |
53 | |
54 | static inline void * |
55 | vmalloc_user(unsigned long size) |
56 | { |
57 | return malloc(size, M_TEMP, (M_WAITOK | M_ZERO)); |
58 | } |
59 | |
60 | static inline void * |
61 | vzalloc(unsigned long size) |
62 | { |
63 | return malloc(size, M_TEMP, (M_WAITOK | M_ZERO)); |
64 | } |
65 | |
66 | static inline void |
67 | vfree(void *ptr) |
68 | { |
69 | return free(ptr, M_TEMP); |
70 | } |
71 | |
72 | #define PAGE_KERNEL 0 /* XXX pgprot */ |
73 | |
74 | static inline void * |
75 | vmap(struct page **pages, unsigned npages, unsigned long flags __unused, |
76 | pgprot_t prot __unused) |
77 | { |
78 | vaddr_t va; |
79 | |
80 | /* XXX Sleazy cast should be OK here. */ |
81 | __CTASSERT(sizeof(*pages[0]) == sizeof(struct vm_page)); |
82 | va = uvm_pagermapin((struct vm_page **)pages, npages, 0); |
83 | if (va == 0) |
84 | return NULL; |
85 | |
86 | return (void *)va; |
87 | } |
88 | |
89 | static inline void |
90 | vunmap(void *ptr, unsigned npages) |
91 | { |
92 | |
93 | uvm_pagermapout((vaddr_t)ptr, npages); |
94 | } |
95 | |
96 | #endif /* _LINUX_VMALLOC_H_ */ |
97 | |