#ifndef _VM_VM_KERN_H_
#define _VM_VM_KERN_H_
#include <mach/mach_types.h>
#include <mach/boolean.h>
#include <mach/kern_return.h>
#ifdef KERNEL_PRIVATE
#ifdef XNU_KERNEL_PRIVATE
extern kern_return_t kernel_memory_allocate(
vm_map_t map,
vm_offset_t *addrp,
vm_size_t size,
vm_offset_t mask,
int flags,
vm_tag_t tag);
#define KMA_HERE 0x01
#define KMA_NOPAGEWAIT 0x02
#define KMA_KOBJECT 0x04
#define KMA_LOMEM 0x08
#define KMA_GUARD_FIRST 0x10
#define KMA_GUARD_LAST 0x20
#define KMA_PERMANENT 0x40
#define KMA_NOENCRYPT 0x80
#define KMA_KSTACK 0x100
#define KMA_VAONLY 0x200
#define KMA_COMPRESSOR 0x400
extern kern_return_t kmem_alloc_contig(
vm_map_t map,
vm_offset_t *addrp,
vm_size_t size,
vm_offset_t mask,
ppnum_t max_pnum,
ppnum_t pnum_mask,
int flags,
vm_tag_t tag);
extern kern_return_t kmem_alloc(
vm_map_t map,
vm_offset_t *addrp,
vm_size_t size,
vm_tag_t tag);
extern kern_return_t kmem_alloc_pageable(
vm_map_t map,
vm_offset_t *addrp,
vm_size_t size,
vm_tag_t tag);
extern kern_return_t kmem_alloc_aligned(
vm_map_t map,
vm_offset_t *addrp,
vm_size_t size,
vm_tag_t tag);
extern kern_return_t kmem_realloc(
vm_map_t map,
vm_offset_t oldaddr,
vm_size_t oldsize,
vm_offset_t *newaddrp,
vm_size_t newsize,
vm_tag_t tag);
extern void kmem_free(
vm_map_t map,
vm_offset_t addr,
vm_size_t size);
extern kern_return_t kmem_suballoc(
vm_map_t parent,
vm_offset_t *addr,
vm_size_t size,
boolean_t pageable,
int flags,
vm_map_t *new_map);
extern kern_return_t kmem_alloc_kobject(
vm_map_t map,
vm_offset_t *addrp,
vm_size_t size,
vm_tag_t tag);
extern kern_return_t kernel_memory_populate(
vm_map_t map,
vm_offset_t addr,
vm_size_t size,
int flags,
vm_tag_t tag);
extern void kernel_memory_depopulate(
vm_map_t map,
vm_offset_t addr,
vm_size_t size,
int flags);
extern kern_return_t memory_object_iopl_request(
ipc_port_t port,
memory_object_offset_t offset,
upl_size_t *upl_size,
upl_t *upl_ptr,
upl_page_info_array_t user_page_list,
unsigned int *page_list_count,
upl_control_flags_t *flags);
struct mach_memory_info;
extern kern_return_t vm_page_diagnose(struct mach_memory_info * sites,
unsigned int num_sites);
extern vm_tag_t vm_tag_bt(void);
extern vm_tag_t vm_tag_alloc(vm_allocation_site_t * site);
extern void vm_tag_alloc_locked(vm_allocation_site_t * site);
extern vm_tag_t vm_tag_bt_debug(void);
extern boolean_t vm_kernel_map_is_kernel(vm_map_t map);
extern ppnum_t kernel_pmap_present_mapping(uint64_t vaddr, uint64_t * pvincr);
#else
extern kern_return_t kmem_alloc(
vm_map_t map,
vm_offset_t *addrp,
vm_size_t size);
extern kern_return_t kmem_alloc_pageable(
vm_map_t map,
vm_offset_t *addrp,
vm_size_t size);
extern kern_return_t kmem_alloc_kobject(
vm_map_t map,
vm_offset_t *addrp,
vm_size_t size);
extern void kmem_free(
vm_map_t map,
vm_offset_t addr,
vm_size_t size);
#endif
#ifdef MACH_KERNEL_PRIVATE
extern void kmem_init(
vm_offset_t start,
vm_offset_t end);
extern kern_return_t copyinmap(
vm_map_t map,
vm_map_offset_t fromaddr,
void *todata,
vm_size_t length);
extern kern_return_t copyoutmap(
vm_map_t map,
void *fromdata,
vm_map_offset_t toaddr,
vm_size_t length);
extern kern_return_t vm_conflict_check(
vm_map_t map,
vm_map_offset_t off,
vm_map_size_t len,
memory_object_t pager,
vm_object_offset_t file_off);
extern kern_return_t kmem_alloc_external(
vm_map_t map,
vm_offset_t *addrp,
vm_size_t size);
extern kern_return_t kmem_alloc_kobject_external(
vm_map_t map,
vm_offset_t *addrp,
vm_size_t size);
extern kern_return_t kmem_alloc_pageable_external(
vm_map_t map,
vm_offset_t *addrp,
vm_size_t size);
#endif
extern vm_map_t kernel_map;
extern vm_map_t kernel_pageable_map;
extern vm_map_t ipc_kernel_map;
#endif
#ifdef KERNEL
extern vm_offset_t vm_kernel_addrperm_ext;
extern void vm_kernel_addrperm_external(
vm_offset_t addr,
vm_offset_t *perm_addr);
extern void vm_kernel_unslide_or_perm_external(
vm_offset_t addr,
vm_offset_t *up_addr);
#endif
#endif