7 #include <minix/sysutil.h>
9 void *alloc_contig(size_t len
, int flags
, phys_bytes
*phys
)
12 int mmapflags
= MAP_PREALLOC
|MAP_CONTIG
|MAP_ANON
;
14 if(flags
& AC_LOWER16M
)
15 mmapflags
|= MAP_LOWER16M
;
16 if(flags
& AC_LOWER1M
)
17 mmapflags
|= MAP_LOWER1M
;
18 if(flags
& AC_ALIGN64K
)
19 mmapflags
|= MAP_ALIGNMENT_64KB
;
21 /* First try to get memory with mmap. This is guaranteed
22 * to be page-aligned, and we can tell VM it has to be
23 * pre-allocated and contiguous.
26 buf
= sef_llvm_ac_mmap(0, len
, PROT_READ
|PROT_WRITE
, mmapflags
, -1, 0);
27 if(buf
== MAP_FAILED
) {
31 /* Get physical address, if requested. */
32 if(phys
!= NULL
&& sys_umap(SELF
, VM_D
, (vir_bytes
)buf
, len
,
34 panic("sys_umap_data_fb failed");
39 int free_contig(void *addr
, size_t len
)
41 return sef_llvm_ac_munmap(addr
, len
);