summaryrefslogtreecommitdiff
path: root/vm/vm_page.h
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2012-09-30 19:31:58 +0200
committerRichard Braun <rbraun@sceen.net>2012-09-30 19:31:58 +0200
commit69504fc63720b4bf2677d6074285b82256bc9b83 (patch)
tree47fad139526df60554e3fd26a7b8b1577f29d2d0 /vm/vm_page.h
Initial commit
Diffstat (limited to 'vm/vm_page.h')
-rw-r--r--vm/vm_page.h53
1 files changed, 53 insertions, 0 deletions
diff --git a/vm/vm_page.h b/vm/vm_page.h
new file mode 100644
index 00000000..641cbccf
--- /dev/null
+++ b/vm/vm_page.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2010, 2011 Richard Braun.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _VM_VM_PAGE_H
+#define _VM_VM_PAGE_H
+
+#include <lib/list.h>
+#include <lib/macros.h>
+#include <kern/param.h>
+#include <kern/types.h>
+
+/*
+ * Address/page conversion and rounding macros (not inline functions to
+ * be easily usable on both virtual and physical addresses, which may not
+ * have the same type size).
+ */
+#define vm_page_atop(addr) ((addr) >> PAGE_SHIFT)
+#define vm_page_ptoa(page) ((page) << PAGE_SHIFT)
+#define vm_page_trunc(addr) P2ALIGN(addr, PAGE_SIZE)
+#define vm_page_round(addr) P2ROUND(addr, PAGE_SIZE)
+#define vm_page_aligned(addr) P2ALIGNED(addr, PAGE_SIZE)
+
+/*
+ * Physical page descriptor.
+ */
+struct vm_page {
+ struct list node;
+ unsigned short seg_index;
+ unsigned short order;
+ vm_phys_t phys_addr;
+};
+
+static inline vm_phys_t
+vm_page_to_pa(const struct vm_page *page)
+{
+ return page->phys_addr;
+}
+
+#endif /* _VM_VM_PAGE_H */