|
@@ -113,11 +113,18 @@ static inline unsigned long srmmu_swap(unsigned long *addr, unsigned long value)
|
|
|
return value;
|
|
|
}
|
|
|
|
|
|
-static inline void srmmu_set_pte(pte_t *ptep, pte_t pteval)
|
|
|
+/* Certain architectures need to do special things when pte's
|
|
|
+ * within a page table are directly modified. Thus, the following
|
|
|
+ * hook is made available.
|
|
|
+ */
|
|
|
+
|
|
|
+static inline void set_pte(pte_t *ptep, pte_t pteval)
|
|
|
{
|
|
|
srmmu_swap((unsigned long *)ptep, pte_val(pteval));
|
|
|
}
|
|
|
|
|
|
+#define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep,pteval)
|
|
|
+
|
|
|
static inline int srmmu_device_memory(unsigned long x)
|
|
|
{
|
|
|
return ((x & 0xF0000000) != 0);
|
|
@@ -134,18 +141,19 @@ BTFIXUPDEF_CALL_CONST(unsigned long, pgd_page_vaddr, pgd_t)
|
|
|
|
|
|
#define pgd_page_vaddr(pgd) BTFIXUP_CALL(pgd_page_vaddr)(pgd)
|
|
|
|
|
|
-BTFIXUPDEF_CALL_CONST(int, pte_present, pte_t)
|
|
|
+static inline int pte_present(pte_t pte)
|
|
|
+{
|
|
|
+ return ((pte_val(pte) & SRMMU_ET_MASK) == SRMMU_ET_PTE);
|
|
|
+}
|
|
|
|
|
|
static inline int pte_none(pte_t pte)
|
|
|
{
|
|
|
return !pte_val(pte);
|
|
|
}
|
|
|
|
|
|
-#define pte_present(pte) BTFIXUP_CALL(pte_present)(pte)
|
|
|
-
|
|
|
static inline void __pte_clear(pte_t *ptep)
|
|
|
{
|
|
|
- srmmu_set_pte(ptep, __pte(0));
|
|
|
+ set_pte(ptep, __pte(0));
|
|
|
}
|
|
|
|
|
|
static inline void pte_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep)
|
|
@@ -172,7 +180,7 @@ static inline void pmd_clear(pmd_t *pmdp)
|
|
|
{
|
|
|
int i;
|
|
|
for (i = 0; i < PTRS_PER_PTE/SRMMU_REAL_PTRS_PER_PTE; i++)
|
|
|
- srmmu_set_pte((pte_t *)&pmdp->pmdv[i], __pte(0));
|
|
|
+ set_pte((pte_t *)&pmdp->pmdv[i], __pte(0));
|
|
|
}
|
|
|
|
|
|
static inline int pgd_none(pgd_t pgd)
|
|
@@ -192,7 +200,7 @@ static inline int pgd_present(pgd_t pgd)
|
|
|
|
|
|
static inline void pgd_clear(pgd_t *pgdp)
|
|
|
{
|
|
|
- srmmu_set_pte((pte_t *)pgdp, __pte(0));
|
|
|
+ set_pte((pte_t *)pgdp, __pte(0));
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -292,14 +300,20 @@ static inline unsigned long pte_pfn(pte_t pte)
|
|
|
* Conversion functions: convert a page and protection to a page entry,
|
|
|
* and a page entry and page directory to the page they refer to.
|
|
|
*/
|
|
|
-BTFIXUPDEF_CALL_CONST(pte_t, mk_pte, struct page *, pgprot_t)
|
|
|
+static inline pte_t mk_pte(struct page *page, pgprot_t pgprot)
|
|
|
+{
|
|
|
+ return __pte((page_to_pfn(page) << (PAGE_SHIFT-4)) | pgprot_val(pgprot));
|
|
|
+}
|
|
|
|
|
|
-BTFIXUPDEF_CALL_CONST(pte_t, mk_pte_phys, unsigned long, pgprot_t)
|
|
|
-BTFIXUPDEF_CALL_CONST(pte_t, mk_pte_io, unsigned long, pgprot_t, int)
|
|
|
+static inline pte_t mk_pte_phys(unsigned long page, pgprot_t pgprot)
|
|
|
+{
|
|
|
+ return __pte(((page) >> 4) | pgprot_val(pgprot));
|
|
|
+}
|
|
|
|
|
|
-#define mk_pte(page,pgprot) BTFIXUP_CALL(mk_pte)(page,pgprot)
|
|
|
-#define mk_pte_phys(page,pgprot) BTFIXUP_CALL(mk_pte_phys)(page,pgprot)
|
|
|
-#define mk_pte_io(page,pgprot,space) BTFIXUP_CALL(mk_pte_io)(page,pgprot,space)
|
|
|
+static inline pte_t mk_pte_io(unsigned long page, pgprot_t pgprot, int space)
|
|
|
+{
|
|
|
+ return __pte(((page) >> 4) | (space << 28) | pgprot_val(pgprot));
|
|
|
+}
|
|
|
|
|
|
#define pgprot_noncached pgprot_noncached
|
|
|
static inline pgprot_t pgprot_noncached(pgprot_t prot)
|
|
@@ -339,16 +353,6 @@ BTFIXUPDEF_CALL(pte_t *, pte_offset_kernel, pmd_t *, unsigned long)
|
|
|
#define pte_offset_map(d, a) pte_offset_kernel(d,a)
|
|
|
#define pte_unmap(pte) do{}while(0)
|
|
|
|
|
|
-/* Certain architectures need to do special things when pte's
|
|
|
- * within a page table are directly modified. Thus, the following
|
|
|
- * hook is made available.
|
|
|
- */
|
|
|
-
|
|
|
-BTFIXUPDEF_CALL(void, set_pte, pte_t *, pte_t)
|
|
|
-
|
|
|
-#define set_pte(ptep,pteval) BTFIXUP_CALL(set_pte)(ptep,pteval)
|
|
|
-#define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep,pteval)
|
|
|
-
|
|
|
struct seq_file;
|
|
|
BTFIXUPDEF_CALL(void, mmu_info, struct seq_file *)
|
|
|
|