|
@@ -129,3 +129,131 @@
|
|
|
| CF_PAGE_SHARED \
|
|
|
| CF_PAGE_READABLE)
|
|
|
#define __S100 __pgprot(CF_PAGE_VALID \
|
|
|
+ | CF_PAGE_ACCESSED \
|
|
|
+ | CF_PAGE_EXEC)
|
|
|
+#define __S101 __pgprot(CF_PAGE_VALID \
|
|
|
+ | CF_PAGE_ACCESSED \
|
|
|
+ | CF_PAGE_READABLE \
|
|
|
+ | CF_PAGE_EXEC)
|
|
|
+#define __S110 __pgprot(CF_PAGE_VALID \
|
|
|
+ | CF_PAGE_ACCESSED \
|
|
|
+ | CF_PAGE_SHARED \
|
|
|
+ | CF_PAGE_EXEC)
|
|
|
+#define __S111 __pgprot(CF_PAGE_VALID \
|
|
|
+ | CF_PAGE_ACCESSED \
|
|
|
+ | CF_PAGE_SHARED \
|
|
|
+ | CF_PAGE_READABLE \
|
|
|
+ | CF_PAGE_EXEC)
|
|
|
+
|
|
|
+#define PTE_MASK PAGE_MASK
|
|
|
+#define CF_PAGE_CHG_MASK (PTE_MASK | CF_PAGE_ACCESSED | CF_PAGE_DIRTY)
|
|
|
+
|
|
|
+#ifndef __ASSEMBLY__
|
|
|
+
|
|
|
+/*
|
|
|
+ * Conversion functions: convert a page and protection to a page entry,
|
|
|
+ * and a page entry and page directory to the page they refer to.
|
|
|
+ */
|
|
|
+#define mk_pte(page, pgprot) pfn_pte(page_to_pfn(page), (pgprot))
|
|
|
+
|
|
|
+static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
|
|
|
+{
|
|
|
+ pte_val(pte) = (pte_val(pte) & CF_PAGE_CHG_MASK) | pgprot_val(newprot);
|
|
|
+ return pte;
|
|
|
+}
|
|
|
+
|
|
|
+#define pmd_set(pmdp, ptep) do {} while (0)
|
|
|
+
|
|
|
+static inline void pgd_set(pgd_t *pgdp, pmd_t *pmdp)
|
|
|
+{
|
|
|
+ pgd_val(*pgdp) = virt_to_phys(pmdp);
|
|
|
+}
|
|
|
+
|
|
|
+#define __pte_page(pte) ((unsigned long) (pte_val(pte) & PAGE_MASK))
|
|
|
+#define __pmd_page(pmd) ((unsigned long) (pmd_val(pmd)))
|
|
|
+
|
|
|
+static inline int pte_none(pte_t pte)
|
|
|
+{
|
|
|
+ return !pte_val(pte);
|
|
|
+}
|
|
|
+
|
|
|
+static inline int pte_present(pte_t pte)
|
|
|
+{
|
|
|
+ return pte_val(pte) & CF_PAGE_VALID;
|
|
|
+}
|
|
|
+
|
|
|
+static inline void pte_clear(struct mm_struct *mm, unsigned long addr,
|
|
|
+ pte_t *ptep)
|
|
|
+{
|
|
|
+ pte_val(*ptep) = 0;
|
|
|
+}
|
|
|
+
|
|
|
+#define pte_pagenr(pte) ((__pte_page(pte) - PAGE_OFFSET) >> PAGE_SHIFT)
|
|
|
+#define pte_page(pte) virt_to_page(__pte_page(pte))
|
|
|
+
|
|
|
+static inline int pmd_none2(pmd_t *pmd) { return !pmd_val(*pmd); }
|
|
|
+#define pmd_none(pmd) pmd_none2(&(pmd))
|
|
|
+static inline int pmd_bad2(pmd_t *pmd) { return 0; }
|
|
|
+#define pmd_bad(pmd) pmd_bad2(&(pmd))
|
|
|
+#define pmd_present(pmd) (!pmd_none2(&(pmd)))
|
|
|
+static inline void pmd_clear(pmd_t *pmdp) { pmd_val(*pmdp) = 0; }
|
|
|
+
|
|
|
+static inline int pgd_none(pgd_t pgd) { return 0; }
|
|
|
+static inline int pgd_bad(pgd_t pgd) { return 0; }
|
|
|
+static inline int pgd_present(pgd_t pgd) { return 1; }
|
|
|
+static inline void pgd_clear(pgd_t *pgdp) {}
|
|
|
+
|
|
|
+#define pte_ERROR(e) \
|
|
|
+ printk(KERN_ERR "%s:%d: bad pte %08lx.\n", \
|
|
|
+ __FILE__, __LINE__, pte_val(e))
|
|
|
+#define pmd_ERROR(e) \
|
|
|
+ printk(KERN_ERR "%s:%d: bad pmd %08lx.\n", \
|
|
|
+ __FILE__, __LINE__, pmd_val(e))
|
|
|
+#define pgd_ERROR(e) \
|
|
|
+ printk(KERN_ERR "%s:%d: bad pgd %08lx.\n", \
|
|
|
+ __FILE__, __LINE__, pgd_val(e))
|
|
|
+
|
|
|
+/*
|
|
|
+ * The following only work if pte_present() is true.
|
|
|
+ * Undefined behaviour if not...
|
|
|
+ * [we have the full set here even if they don't change from m68k]
|
|
|
+ */
|
|
|
+static inline int pte_read(pte_t pte)
|
|
|
+{
|
|
|
+ return pte_val(pte) & CF_PAGE_READABLE;
|
|
|
+}
|
|
|
+
|
|
|
+static inline int pte_write(pte_t pte)
|
|
|
+{
|
|
|
+ return pte_val(pte) & CF_PAGE_WRITABLE;
|
|
|
+}
|
|
|
+
|
|
|
+static inline int pte_exec(pte_t pte)
|
|
|
+{
|
|
|
+ return pte_val(pte) & CF_PAGE_EXEC;
|
|
|
+}
|
|
|
+
|
|
|
+static inline int pte_dirty(pte_t pte)
|
|
|
+{
|
|
|
+ return pte_val(pte) & CF_PAGE_DIRTY;
|
|
|
+}
|
|
|
+
|
|
|
+static inline int pte_young(pte_t pte)
|
|
|
+{
|
|
|
+ return pte_val(pte) & CF_PAGE_ACCESSED;
|
|
|
+}
|
|
|
+
|
|
|
+static inline int pte_file(pte_t pte)
|
|
|
+{
|
|
|
+ return pte_val(pte) & CF_PAGE_FILE;
|
|
|
+}
|
|
|
+
|
|
|
+static inline int pte_special(pte_t pte)
|
|
|
+{
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static inline pte_t pte_wrprotect(pte_t pte)
|
|
|
+{
|
|
|
+ pte_val(pte) &= ~CF_PAGE_WRITABLE;
|
|
|
+ return pte;
|