| #ifndef __MMU_H |
| #define __MMU_H |
| |
| #ifdef CONFIG_METAG_USER_TCM |
| #include <linux/list.h> |
| #endif |
| |
| #ifdef CONFIG_HUGETLB_PAGE |
| #include <asm/page.h> |
| #endif |
| |
| typedef struct { |
| /* Software pgd base pointer used for Meta 1.x MMU. */ |
| unsigned long pgd_base; |
| #ifdef CONFIG_METAG_USER_TCM |
| struct list_head tcm; |
| #endif |
| #ifdef CONFIG_HUGETLB_PAGE |
| #if HPAGE_SHIFT < HUGEPT_SHIFT |
| /* last partially filled huge page table address */ |
| unsigned long part_huge; |
| #endif |
| #endif |
| } mm_context_t; |
| |
| /* Given a virtual address, return the pte for the top level 4meg entry |
| * that maps that address. |
| * Returns 0 (an empty pte) if that range is not mapped. |
| */ |
| unsigned long mmu_read_first_level_page(unsigned long vaddr); |
| |
| /* Given a linear (virtual) address, return the second level 4k pte |
| * that maps that address. Returns 0 if the address is not mapped. |
| */ |
| unsigned long mmu_read_second_level_page(unsigned long vaddr); |
| |
| /* Get the virtual base address of the MMU */ |
| unsigned long mmu_get_base(void); |
| |
| /* Initialize the MMU. */ |
| void mmu_init(unsigned long mem_end); |
| |
| #ifdef CONFIG_METAG_META21_MMU |
| /* |
| * For cpu "cpu" calculate and return the address of the |
| * MMCU_TnLOCAL_TABLE_PHYS0 if running in local-space or |
| * MMCU_TnGLOBAL_TABLE_PHYS0 if running in global-space. |
| */ |
| static inline unsigned long mmu_phys0_addr(unsigned int cpu) |
| { |
| unsigned long phys0; |
| |
| phys0 = (MMCU_T0LOCAL_TABLE_PHYS0 + |
| (MMCU_TnX_TABLE_PHYSX_STRIDE * cpu)) + |
| (MMCU_TXG_TABLE_PHYSX_OFFSET * is_global_space(PAGE_OFFSET)); |
| |
| return phys0; |
| } |
| |
| /* |
| * For cpu "cpu" calculate and return the address of the |
| * MMCU_TnLOCAL_TABLE_PHYS1 if running in local-space or |
| * MMCU_TnGLOBAL_TABLE_PHYS1 if running in global-space. |
| */ |
| static inline unsigned long mmu_phys1_addr(unsigned int cpu) |
| { |
| unsigned long phys1; |
| |
| phys1 = (MMCU_T0LOCAL_TABLE_PHYS1 + |
| (MMCU_TnX_TABLE_PHYSX_STRIDE * cpu)) + |
| (MMCU_TXG_TABLE_PHYSX_OFFSET * is_global_space(PAGE_OFFSET)); |
| |
| return phys1; |
| } |
| #endif /* CONFIG_METAG_META21_MMU */ |
| |
| #endif |