diff options
author | dzwdz | 2021-08-11 17:50:57 +0000 |
---|---|---|
committer | dzwdz | 2021-08-11 17:50:57 +0000 |
commit | a0a4acb002f051d8a964659cb7aa9cd51740266a (patch) | |
tree | b2b61086681c5670284d4f1d54805b4390ee7bbc /src/kernel/mem.h | |
parent | a32374156ea2cf129b413fa017d7e52e59570c04 (diff) |
abstract out iterating over virtual memory
most syscalls will have to do this to copy memory around or whatever.
it's pretty ugly too, but i can't come up with a better abstraction...
Diffstat (limited to 'src/kernel/mem.h')
-rw-r--r-- | src/kernel/mem.h | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/kernel/mem.h b/src/kernel/mem.h index b17ba30..78de8db 100644 --- a/src/kernel/mem.h +++ b/src/kernel/mem.h @@ -1,4 +1,5 @@ #pragma once +#include <kernel/arch/generic.h> #include <kernel/main.h> #include <stddef.h> @@ -12,3 +13,23 @@ void page_free(void *first, size_t pages); void *kmalloc(size_t len); void kfree(void *ptr); + + +// used for iterating through some part of a process' memory +struct virt_iter { + void *frag; + size_t frag_len; + bool error; + + void *_virt; + size_t _remaining; + struct pagedir *_pages; + bool _user; + bool _writeable; +}; + +void virt_iter_new( + struct virt_iter *iter, void *virt, size_t length, + struct pagedir *pages, bool user, bool writeable); + +bool virt_iter_next(struct virt_iter *); |