aboutsummaryrefslogtreecommitdiff
path: root/arch/riscv64/include
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2024-07-06 18:14:04 +0300
committerKimplul <kimi.h.kuparinen@gmail.com>2024-07-06 18:14:04 +0300
commit76517486919657ecadda9867125dc6730f29a5b7 (patch)
tree02d975db2b911ec7b92c4b1be7c5a2510b418ae1 /arch/riscv64/include
parent608f44306a6f0d5692f5c81bcbfe7a621ec254ba (diff)
downloadkmi-76517486919657ecadda9867125dc6730f29a5b7.tar.gz
kmi-76517486919657ecadda9867125dc6730f29a5b7.zip
pretty massive virtual memory rewrite
+ The system is now a bit simpler and hopefully easier to understand, while also extending the shared memory to be 1:N, where there is one owner who may become a zombie while waiting for the N to die.
Diffstat (limited to 'arch/riscv64/include')
-rw-r--r--arch/riscv64/include/uapi.h38
-rw-r--r--arch/riscv64/include/vmem.h48
2 files changed, 59 insertions, 27 deletions
diff --git a/arch/riscv64/include/uapi.h b/arch/riscv64/include/uapi.h
new file mode 100644
index 0000000..a8c236b
--- /dev/null
+++ b/arch/riscv64/include/uapi.h
@@ -0,0 +1,38 @@
+/* SPDX-License-Identifier: copyleft-next-0.3.1 */
+/* Copyright 2024, Kim Kuparinen < kimi.h.kuparinen@gmail.com > */
+
+#ifndef KMI_RISCV_UAPI_H
+#define KMI_RISCV_UAPI_H
+
+/**
+ * @file uapi.h
+ *
+ * RISCV-specific stuff that should be visible to userspace, currently mainly
+ * VM_R/VM_W/VM_X flags.
+ */
+
+/** Page is active. */
+#define VM_V (1 << 0)
+
+/** Page is readable. */
+#define VM_R (1 << 1)
+
+/** Page is writable. */
+#define VM_W (1 << 2)
+
+/** Page is executable. */
+#define VM_X (1 << 3)
+
+/** Page is user-accessible. */
+#define VM_U (1 << 4)
+
+/** Page is global. */
+#define VM_G (1 << 5)
+
+/** Page has been accessed. */
+#define VM_A (1 << 6)
+
+/** Page is dirty. */
+#define VM_D (1 << 7)
+
+#endif /* KMI_RISCV_UAPI_H */
diff --git a/arch/riscv64/include/vmem.h b/arch/riscv64/include/vmem.h
index ed99843..704858b 100644
--- a/arch/riscv64/include/vmem.h
+++ b/arch/riscv64/include/vmem.h
@@ -4,6 +4,8 @@
#ifndef KMI_RISCV_VMAP_H
#define KMI_RISCV_VMAP_H
+#include "uapi.h"
+
/**
* @file vmem.h
* riscv64 definitions of arch-specific virtual memory data types and macros.
@@ -11,9 +13,6 @@
* architecture-nonspecific, but works for now.
*/
-#include <kmi/types.h>
-#include <kmi/attrs.h>
-
/**
* Number of entries in one page table, depends on if we're running riscv32 or
* riscv64.
@@ -26,30 +25,6 @@
#define RISCV_NUM_LEAVES 1024
#endif
-/** Page is active. */
-#define VM_V (1 << 0)
-
-/** Page is readable. */
-#define VM_R (1 << 1)
-
-/** Page is writable. */
-#define VM_W (1 << 2)
-
-/** Page is executable. */
-#define VM_X (1 << 3)
-
-/** Page is user-accessible. */
-#define VM_U (1 << 4)
-
-/** Page is global. */
-#define VM_G (1 << 5)
-
-/** Page has been accessed. */
-#define VM_A (1 << 6)
-
-/** Page is dirty. */
-#define VM_D (1 << 7)
-
/** Memory mode of cpu. Currently only Sv39 is supported. */
enum mm_mode {
/** 48bit effective addresses on 64bit systems. */
@@ -71,4 +46,23 @@ struct vmem {
struct vmem *leaf[RISCV_NUM_LEAVES];
};
+/**
+ * Extract virtual memory flags (MR_XXX).
+ *
+ * @param x Flags to extract virtual memory region flags from.
+ * @return Virtual memory region flags.
+ */
+#define vm_flags(x) ((x) & ~0xff)
+
+/**
+ * Extract physical memory page flags (VM_XXX).
+ *
+ * @param x Flags to extract physical memory page flags from.
+ * @return Physical memory page flags.
+ */
+#define vp_flags(x) ((x) & 0xff)
+
+/** How many VM_XXX flags architecture has. MR_XXX are applied after them. */
+#define ARCH_VP_FLAGS 8
+
#endif /* KMI_RISCV_VMAP_H */