xref: /openbsd-src/sys/dev/pci/drm/include/linux/gfp.h (revision 5a38ef86d0b61900239c7913d24a05e7b88a58f0)
1 /* Public domain. */
2 
3 #ifndef _LINUX_GFP_H
4 #define _LINUX_GFP_H
5 
6 #include <sys/types.h>
7 #include <sys/malloc.h>
8 #include <uvm/uvm_extern.h>
9 
10 #include <linux/mmzone.h>
11 
12 #define __GFP_ZERO		M_ZERO
13 #define __GFP_DMA32		0x00010000
14 #define __GFP_NOWARN		0
15 #define __GFP_NORETRY		0
16 #define __GFP_RETRY_MAYFAIL	0
17 #define __GFP_MOVABLE		0
18 #define __GFP_COMP		0
19 #define __GFP_KSWAPD_RECLAIM	0
20 #define __GFP_HIGHMEM		0
21 #define __GFP_RECLAIMABLE	0
22 
23 #define GFP_ATOMIC		M_NOWAIT
24 #define GFP_NOWAIT		M_NOWAIT
25 #define GFP_KERNEL		(M_WAITOK | M_CANFAIL)
26 #define GFP_USER		(M_WAITOK | M_CANFAIL)
27 #define GFP_HIGHUSER		0
28 #define GFP_DMA32		__GFP_DMA32
29 #define GFP_TRANSHUGE_LIGHT	0
30 
31 static inline bool
32 gfpflags_allow_blocking(const unsigned int flags)
33 {
34 	return (flags & M_WAITOK) != 0;
35 }
36 
37 struct vm_page *alloc_pages(unsigned int, unsigned int);
38 void	__free_pages(struct vm_page *, unsigned int);
39 
40 static inline struct vm_page *
41 alloc_page(unsigned int gfp_mask)
42 {
43 	return alloc_pages(gfp_mask, 0);
44 }
45 
46 static inline void
47 __free_page(struct vm_page *page)
48 {
49 	__free_pages(page, 0);
50 }
51 
52 static inline unsigned long
53 __get_free_page(unsigned int gfp_mask)
54 {
55 	void *addr = km_alloc(PAGE_SIZE, &kv_page, &kp_dirty, &kd_nowait);
56 	return (unsigned long)addr;
57 }
58 
59 static inline void
60 free_page(unsigned long addr)
61 {
62 	km_free((void *)addr, PAGE_SIZE, &kv_page, &kp_dirty);
63 }
64 
65 #endif
66