78 lines
1.9 KiB
C
78 lines
1.9 KiB
C
#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
|