summaryrefslogtreecommitdiff
path: root/src/kernel/mem.h
diff options
context:
space:
mode:
authordzwdz2021-08-11 17:50:57 +0000
committerdzwdz2021-08-11 17:50:57 +0000
commita0a4acb002f051d8a964659cb7aa9cd51740266a (patch)
treeb2b61086681c5670284d4f1d54805b4390ee7bbc /src/kernel/mem.h
parenta32374156ea2cf129b413fa017d7e52e59570c04 (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.h21
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 *);