diff options
Diffstat (limited to 'src/kernel/mem/virt.h')
-rw-r--r-- | src/kernel/mem/virt.h | 52 |
1 files changed, 9 insertions, 43 deletions
diff --git a/src/kernel/mem/virt.h b/src/kernel/mem/virt.h index 1f9ef14..fc35078 100644 --- a/src/kernel/mem/virt.h +++ b/src/kernel/mem/virt.h @@ -1,48 +1,14 @@ -/* contains utilities for interacting with virtual memory */ +// move this to proc.h, maybe? #pragma once #include <camellia/types.h> -#include <kernel/mem/alloc.h> -#include <stdbool.h> #include <stddef.h> -struct virt_iter { - void *frag; - size_t frag_len; - size_t prior; // sum of all prior frag_lens - bool error; +struct process; - void __user *_virt; - size_t _remaining; - struct pagedir *_pages; - bool _user; - bool _writeable; -}; - -struct virt_cpy_error { - bool read_fail, write_fail; -}; - -/* if pages == NULL, create an iterator over physical memory. */ -void virt_iter_new( - struct virt_iter *iter, void __user *virt, size_t length, - struct pagedir *pages, bool user, bool writeable); - -bool virt_iter_next(struct virt_iter *); - -size_t virt_cpy( - struct pagedir *dest_pages, void __user *dest, - struct pagedir *src_pages, const void __user *src, - size_t length, struct virt_cpy_error *err); - - -/* copies to virtual memory, returns true on success */ -static inline bool virt_cpy_to(struct pagedir *dest_pages, - void __user *dest, const void *src, size_t length) { - return length == virt_cpy(dest_pages, dest, NULL, (userptr_t)src, length, NULL); -} - -/* copies from virtual memory, returns true on success */ -static inline bool virt_cpy_from(struct pagedir *src_pages, - void *dest, const void __user *src, size_t length) { - return length == virt_cpy(NULL, (userptr_t)dest, src_pages, src, length, NULL); -} +size_t pcpy_to(struct process *p, __user void *dst, const void *src, size_t len); +size_t pcpy_from(struct process *p, void *dst, const __user void *src, size_t len); +size_t pcpy_bi( + struct process *dstp, __user void *dst, + struct process *srcp, const __user void *src, + size_t len +); |