#ifndef MANGO_VM_H_ #define MANGO_VM_H_ #include #include 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_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