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