Files
magenta/libmango/include-user/mango/vm.h
T

104 lines
2.4 KiB
C

#ifndef MANGO_VM_H_
#define MANGO_VM_H_
#include <mango/status.h>
#include <mango/types.h>
extern kern_status_t vm_object_create(
const char *name,
size_t name_len,
size_t data_len,
vm_prot_t prot,
kern_handle_t *out);
extern kern_status_t vm_object_read(
kern_handle_t object,
void *dst,
off_t offset,
size_t count,
size_t *nr_read);
extern kern_status_t vm_object_write(
kern_handle_t object,
const void *src,
off_t offset,
size_t count,
size_t *nr_written);
extern kern_status_t vm_object_copy(
kern_handle_t dst,
off_t dst_offset,
kern_handle_t src,
off_t src_offset,
size_t count,
size_t *nr_copied);
extern kern_status_t address_space_read(
kern_handle_t region,
void *dst,
virt_addr_t base,
size_t count,
size_t *nr_read);
extern kern_status_t address_space_write(
kern_handle_t region,
const void *src,
virt_addr_t base,
size_t count,
size_t *nr_read);
extern kern_status_t address_space_map(
kern_handle_t region,
virt_addr_t map_address,
kern_handle_t object,
off_t object_offset,
size_t length,
vm_flags_t flags,
vm_prot_t prot,
virt_addr_t *out_base_address);
extern kern_status_t address_space_unmap(
kern_handle_t region,
virt_addr_t base,
size_t length);
extern kern_status_t address_space_reserve(
kern_handle_t region,
virt_addr_t base,
size_t length,
virt_addr_t *out_base_address);
extern kern_status_t address_space_release(
kern_handle_t region,
virt_addr_t base,
size_t length);
extern kern_status_t vm_controller_create(kern_handle_t *out);
extern kern_status_t vm_controller_recv(
kern_handle_t ctrl,
equeue_packet_vm_request_t *out);
extern kern_status_t vm_controller_recv_async(
kern_handle_t ctrl,
kern_handle_t eq,
equeue_key_t key);
extern kern_status_t vm_controller_create_object(
kern_handle_t ctrl,
const char *name,
size_t name_len,
equeue_key_t key,
size_t data_len,
vm_prot_t prot,
kern_handle_t *out);
extern kern_status_t vm_controller_prepare_attach(
kern_handle_t ctrl,
uint64_t req_id,
kern_handle_t *out_vmo);
extern kern_status_t vm_controller_finish_attach(
kern_handle_t ctrl,
uint64_t req_id,
equeue_key_t new_key);
extern kern_status_t vm_controller_detach_object(
kern_handle_t ctrl,
kern_handle_t vmo);
extern kern_status_t vm_controller_supply_pages(
kern_handle_t ctrl,
kern_handle_t dst_vmo,
off_t dst_offset,
kern_handle_t src_vmo,
off_t src_offset,
size_t length);
#endif