#ifndef _VMPROC_H #define _VMPROC_H 1 #include #include #include #include #include "vm.h" #include "physravl.h" #include "yieldedavl.h" #include "regionavl.h" struct vmproc; typedef void (*callback_t)(struct vmproc *who, message *m); struct vmproc { struct vm_arch vm_arch; /* architecture-specific data */ int vm_flags; endpoint_t vm_endpoint; pt_t vm_pt; /* page table data, if VMF_HASPT is set */ vir_bytes vm_stacktop; /* top of stack as seen from process */ vir_bytes vm_offset; /* offset of addr 0 for process */ /* File identification for cs sharing. */ ino_t vm_ino; /* inode number of file */ dev_t vm_dev; /* device number of file system */ time_t vm_ctime; /* inode changed time */ /* Regions in virtual address space. */ region_avl vm_regions_avl; vir_bytes vm_region_top; /* highest vaddr last inserted */ /* Heap for brk() to extend. */ struct vir_region *vm_heap; bitchunk_t vm_call_mask[VM_CALL_MASK_SIZE]; /* State for requests pending to be done to vfs on behalf of * this process. */ callback_t vm_callback; /* function to call on vfs reply */ int vm_callback_type; /* expected message type */ int vm_slot; /* process table slot */ int vm_yielded; /* yielded regions */ union { struct { cp_grant_id_t gid; } open; /* VM_VFS_OPEN */ } vm_state; /* Callback state. */ #if VMSTATS int vm_bytecopies; #endif }; /* Bits for vm_flags */ #define VMF_INUSE 0x001 /* slot contains a process */ #define VMF_SEPARATE 0x002 /* separate i&d */ #define VMF_HASPT 0x004 /* has private page table */ #define VMF_EXITING 0x008 /* PM is cleaning up this process */ #define VMF_HAS_DMA 0x010 /* Process directly or indirectly granted * DMA buffers. */ #define VMF_WATCHEXIT 0x020 /* Store in queryexit table */ #endif