#include <linux/config.h>#include <linux/kernel.h>#include <linux/mm.h>#include <linux/malloc.h>#include <linux/vmalloc.h>#include <linux/pagemap.h>#include <linux/init.h>#include <linux/blk.h>#include <asm/page.h>#include <asm/pgtable.h>#include <asm/io.h>#include <asm/kdebug.h>#include <asm/vaddrs.h>#include <asm/traps.h>#include <asm/smp.h>#include <asm/mbus.h>#include <asm/cache.h>#include <asm/oplib.h>#include <asm/sbus.h>#include <asm/asi.h>#include <asm/msi.h>#include <asm/a.out.h>#include <asm/mmu_context.h>#include <asm/io-unit.h>#include <asm/spinlock.h>#include <asm/viking.h>#include <asm/mxcc.h>#include <asm/ross.h>#include <asm/tsunami.h>#include <asm/swift.h>#include <asm/turbosparc.h>#include <asm/btfixup.h>Include dependency graph for srmmu.c:

Go to the source code of this file.
Defines | |
| #define | FLUSH_BEGIN(mm) if((mm)->context != NO_CONTEXT) { |
| #define | FLUSH_END } |
| #define | ctxd_set(ctxp, pgdp) BTFIXUP_CALL(ctxd_set)(ctxp,pgdp) |
| #define | pmd_set(pmdp, ptep) BTFIXUP_CALL(pmd_set)(pmdp,ptep) |
| #define | flush_page_for_dma(page) BTFIXUP_CALL(flush_page_for_dma)(page) |
| #define | flush_chunk(chunk) BTFIXUP_CALL(flush_chunk)(chunk) |
| #define | SRMMU_HASHSZ 256 |
| #define | srmmu_ahashfn(addr) ((addr) >> 24) |
| #define | srmmu_set_entry(ptr, newentry) srmmu_swap((unsigned long *) (ptr), (newentry)) |
| #define | PGSKIP_DEBUG(from, to) do { } while (0) |
| #define | UWINMASK_OFFSET (const unsigned long)(&(((struct task_struct *)0)->tss.uwinmask)) |
| #define | MKTRACE(foo) |
| #define | KERNEL_PTE(page_shifted) ((page_shifted)|SRMMU_CACHE|SRMMU_PRIV|SRMMU_VALID) |
| #define | SWIFT_MASKID_ADDR 0x10003018 |
| #define | PATCH_BRANCH(insn, dest) |
Functions | |
| static unsigned long | srmmu_v2p (unsigned long vaddr) |
| static unsigned long | srmmu_p2v (unsigned long paddr) |
| static unsigned long | srmmu_c_v2p (unsigned long vaddr) |
| static unsigned long | srmmu_c_p2v (unsigned long paddr) |
| static unsigned long | srmmu_s_v2p (unsigned long vaddr) |
| static unsigned long | srmmu_s_p2v (unsigned long paddr) |
| static unsigned long | srmmu_swap (unsigned long *addr, unsigned long value) |
| __initfunc (void srmmu_frob_mem_map(unsigned long start_mem)) | |
| static int | srmmu_device_memory (unsigned long x) |
| static unsigned long | srmmu_pgd_page (pgd_t pgd) |
| static unsigned long | srmmu_pmd_page (pmd_t pmd) |
| static unsigned long | srmmu_pte_page (pte_t pte) |
| static unsigned long | srmmu_c_pgd_page (pgd_t pgd) |
| static unsigned long | srmmu_c_pmd_page (pmd_t pmd) |
| static unsigned long | srmmu_c_pte_page (pte_t pte) |
| static unsigned long | srmmu_s_pgd_page (pgd_t pgd) |
| static unsigned long | srmmu_s_pmd_page (pmd_t pmd) |
| static unsigned long | srmmu_s_pte_page (pte_t pte) |
| static int | srmmu_pte_none (pte_t pte) |
| static int | srmmu_pte_present (pte_t pte) |
| static void | srmmu_pte_clear (pte_t *ptep) |
| static int | srmmu_pmd_none (pmd_t pmd) |
| static int | srmmu_pmd_bad (pmd_t pmd) |
| static int | srmmu_pmd_present (pmd_t pmd) |
| static void | srmmu_pmd_clear (pmd_t *pmdp) |
| static int | srmmu_pgd_none (pgd_t pgd) |
| static int | srmmu_pgd_bad (pgd_t pgd) |
| static int | srmmu_pgd_present (pgd_t pgd) |
| static void | srmmu_pgd_clear (pgd_t *pgdp) |
| static int | srmmu_pte_write (pte_t pte) |
| static int | srmmu_pte_dirty (pte_t pte) |
| static int | srmmu_pte_young (pte_t pte) |
| static pte_t | srmmu_pte_wrprotect (pte_t pte) |
| static pte_t | srmmu_pte_mkclean (pte_t pte) |
| static pte_t | srmmu_pte_mkold (pte_t pte) |
| static pte_t | srmmu_pte_mkwrite (pte_t pte) |
| static pte_t | srmmu_pte_mkdirty (pte_t pte) |
| static pte_t | srmmu_pte_mkyoung (pte_t pte) |
| static pte_t | srmmu_mk_pte (unsigned long page, pgprot_t pgprot) |
| static pte_t | srmmu_c_mk_pte (unsigned long page, pgprot_t pgprot) |
| static pte_t | srmmu_s_mk_pte (unsigned long page, pgprot_t pgprot) |
| static pte_t | srmmu_mk_pte_phys (unsigned long page, pgprot_t pgprot) |
| static pte_t | srmmu_mk_pte_io (unsigned long page, pgprot_t pgprot, int space) |
| static void | srmmu_ctxd_set (ctxd_t *ctxp, pgd_t *pgdp) |
| static void | srmmu_pgd_set (pgd_t *pgdp, pmd_t *pmdp) |
| static void | srmmu_pmd_set (pmd_t *pmdp, pte_t *ptep) |
| static void | srmmu_c_ctxd_set (ctxd_t *ctxp, pgd_t *pgdp) |
| static void | srmmu_c_pgd_set (pgd_t *pgdp, pmd_t *pmdp) |
| static void | srmmu_c_pmd_set (pmd_t *pmdp, pte_t *ptep) |
| static void | srmmu_s_ctxd_set (ctxd_t *ctxp, pgd_t *pgdp) |
| static void | srmmu_s_pgd_set (pgd_t *pgdp, pmd_t *pmdp) |
| static void | srmmu_s_pmd_set (pmd_t *pmdp, pte_t *ptep) |
| static pte_t | srmmu_pte_modify (pte_t pte, pgprot_t newprot) |
| static pgd_t * | srmmu_pgd_offset (struct mm_struct *mm, unsigned long address) |
| static pmd_t * | srmmu_pmd_offset (pgd_t *dir, unsigned long address) |
| static pte_t * | srmmu_pte_offset (pmd_t *dir, unsigned long address) |
| static pmd_t * | srmmu_c_pmd_offset (pgd_t *dir, unsigned long address) |
| static pte_t * | srmmu_c_pte_offset (pmd_t *dir, unsigned long address) |
| static pmd_t * | srmmu_s_pmd_offset (pgd_t *dir, unsigned long address) |
| static pte_t * | srmmu_s_pte_offset (pmd_t *dir, unsigned long address) |
| static void | srmmu_update_rootmmu_dir (struct task_struct *tsk, pgd_t *pgdp) |
| static pte_t * | srmmu_get_pte_fast (void) |
| static pte_t * | srmmu_get_pte_slow (void) |
| static pgd_t * | srmmu_get_pgd_fast (void) |
| static pgd_t * | srmmu_get_pgd_slow (void) |
| static void | srmmu_free_pte_slow (pte_t *pte) |
| static void | srmmu_free_pgd_slow (pgd_t *pgd) |
| static void | srmmu_pte_free (pte_t *pte) |
| static pte_t * | srmmu_pte_alloc (pmd_t *pmd, unsigned long address) |
| static void | srmmu_pmd_free (pmd_t *pmd) |
| static pmd_t * | srmmu_pmd_alloc (pgd_t *pgd, unsigned long address) |
| static void | srmmu_pgd_free (pgd_t *pgd) |
| static pgd_t * | srmmu_pgd_alloc (void) |
| static void | srmmu_set_pgdir (unsigned long address, pgd_t entry) |
| static void | srmmu_set_pte_cacheable (pte_t *ptep, pte_t pteval) |
| void | swift_flush_chunk (unsigned long chunk) |
| static void | srmmu_set_pte_nocache_swift (pte_t *ptep, pte_t pteval) |
| static void | srmmu_set_pte_nocache_cypress (pte_t *ptep, pte_t pteval) |
| static void | srmmu_set_pte_nocache_viking (pte_t *ptep, pte_t pteval) |
| static void | srmmu_quick_kernel_fault (unsigned long address) |
| static void | alloc_context (struct mm_struct *mm) |
| static void | free_context (int context) |
| static void | srmmu_switch_to_context (struct task_struct *tsk) |
| static void | srmmu_init_new_context (struct mm_struct *mm) |
| void | srmmu_mapioaddr (unsigned long physaddr, unsigned long virt_addr, int bus_type, int rdonly) |
| void | srmmu_unmapioaddr (unsigned long virt_addr) |
| task_struct * | srmmu_alloc_task_struct (void) |
| static void | srmmu_free_task_struct (struct task_struct *tsk) |
| void | tsunami_flush_cache_all (void) |
| void | tsunami_flush_cache_mm (struct mm_struct *mm) |
| void | tsunami_flush_cache_range (struct mm_struct *mm, unsigned long start, unsigned long end) |
| void | tsunami_flush_cache_page (struct vm_area_struct *vma, unsigned long page) |
| void | tsunami_flush_page_to_ram (unsigned long page) |
| void | tsunami_flush_page_for_dma (unsigned long page) |
| void | tsunami_flush_sig_insns (struct mm_struct *mm, unsigned long insn_addr) |
| void | tsunami_flush_chunk (unsigned long chunk) |
| void | tsunami_flush_tlb_all (void) |
| void | tsunami_flush_tlb_mm (struct mm_struct *mm) |
| void | tsunami_flush_tlb_range (struct mm_struct *mm, unsigned long start, unsigned long end) |
| void | tsunami_flush_tlb_page (struct vm_area_struct *vma, unsigned long page) |
| void | tsunami_setup_blockops (void) |
| void | swift_flush_cache_all (void) |
| void | swift_flush_cache_mm (struct mm_struct *mm) |
| void | swift_flush_cache_range (struct mm_struct *mm, unsigned long start, unsigned long end) |
| void | swift_flush_cache_page (struct vm_area_struct *vma, unsigned long page) |
| void | swift_flush_page_to_ram (unsigned long page) |
| void | swift_flush_page_for_dma (unsigned long page) |
| void | swift_flush_sig_insns (struct mm_struct *mm, unsigned long insn_addr) |
| void | swift_flush_tlb_all (void) |
| void | swift_flush_tlb_mm (struct mm_struct *mm) |
| void | swift_flush_tlb_range (struct mm_struct *mm, unsigned long start, unsigned long end) |
| void | swift_flush_tlb_page (struct vm_area_struct *vma, unsigned long page) |
| static void | swift_update_rootmmu_dir (struct task_struct *tsk, pgd_t *pgdp) |
| static void | swift_init_new_context (struct mm_struct *mm) |
| static void | cypress_flush_cache_all (void) |
| static void | cypress_flush_cache_mm (struct mm_struct *mm) |
| static void | cypress_flush_cache_range (struct mm_struct *mm, unsigned long start, unsigned long end) |
| static void | cypress_flush_cache_page (struct vm_area_struct *vma, unsigned long page) |
| static void | cypress_flush_page_to_ram (unsigned long page) |
| static void | cypress_flush_chunk (unsigned long chunk) |
| static void | cypress_flush_page_for_dma (unsigned long page) |
| static void | cypress_flush_sig_insns (struct mm_struct *mm, unsigned long insn_addr) |
| static void | cypress_flush_tlb_all (void) |
| static void | cypress_flush_tlb_mm (struct mm_struct *mm) |
| static void | cypress_flush_tlb_range (struct mm_struct *mm, unsigned long start, unsigned long end) |
| static void | cypress_flush_tlb_page (struct vm_area_struct *vma, unsigned long page) |
| void | viking_flush_cache_all (void) |
| void | viking_flush_cache_mm (struct mm_struct *mm) |
| void | viking_flush_cache_range (struct mm_struct *mm, unsigned long start, unsigned long end) |
| void | viking_flush_cache_page (struct vm_area_struct *vma, unsigned long page) |
| void | viking_flush_page_to_ram (unsigned long page) |
| void | viking_flush_page_for_dma (unsigned long page) |
| void | viking_flush_sig_insns (struct mm_struct *mm, unsigned long addr) |
| void | viking_flush_page (unsigned long page) |
| void | viking_mxcc_flush_page (unsigned long page) |
| void | viking_flush_chunk (unsigned long chunk) |
| void | viking_c_flush_chunk (unsigned long chunk) |
| void | viking_s_flush_chunk (unsigned long chunk) |
| void | viking_mxcc_flush_chunk (unsigned long chunk) |
| void | viking_flush_tlb_all (void) |
| void | viking_flush_tlb_mm (struct mm_struct *mm) |
| void | viking_flush_tlb_range (struct mm_struct *mm, unsigned long start, unsigned long end) |
| void | viking_flush_tlb_page (struct vm_area_struct *vma, unsigned long page) |
| void | sun4dsmp_flush_tlb_all (void) |
| void | sun4dsmp_flush_tlb_mm (struct mm_struct *mm) |
| void | sun4dsmp_flush_tlb_range (struct mm_struct *mm, unsigned long start, unsigned long end) |
| void | sun4dsmp_flush_tlb_page (struct vm_area_struct *vma, unsigned long page) |
| void | hypersparc_flush_cache_all (void) |
| void | hypersparc_flush_cache_mm (struct mm_struct *mm) |
| void | hypersparc_flush_cache_range (struct mm_struct *mm, unsigned long start, unsigned long end) |
| void | hypersparc_flush_cache_page (struct vm_area_struct *vma, unsigned long page) |
| void | hypersparc_flush_page_to_ram (unsigned long page) |
| void | hypersparc_flush_chunk (unsigned long chunk) |
| void | hypersparc_flush_page_for_dma (unsigned long page) |
| void | hypersparc_flush_sig_insns (struct mm_struct *mm, unsigned long insn_addr) |
| void | hypersparc_flush_tlb_all (void) |
| void | hypersparc_flush_tlb_mm (struct mm_struct *mm) |
| void | hypersparc_flush_tlb_range (struct mm_struct *mm, unsigned long start, unsigned long end) |
| void | hypersparc_flush_tlb_page (struct vm_area_struct *vma, unsigned long page) |
| void | hypersparc_setup_blockops (void) |
| static void | srmmu_set_pte_nocache_hyper (pte_t *ptep, pte_t pteval) |
| static void | hypersparc_ctxd_set (ctxd_t *ctxp, pgd_t *pgdp) |
| static void | hypersparc_update_rootmmu_dir (struct task_struct *tsk, pgd_t *pgdp) |
| static void | viking_update_rootmmu_dir (struct task_struct *tsk, pgd_t *pgdp) |
| static void | cypress_update_rootmmu_dir (struct task_struct *tsk, pgd_t *pgdp) |
| static void | hypersparc_switch_to_context (struct task_struct *tsk) |
| static void | hypersparc_init_new_context (struct mm_struct *mm) |
| static unsigned long | srmmu_early_paddr (unsigned long vaddr) |
| static void | srmmu_early_pgd_set (pgd_t *pgdp, pmd_t *pmdp) |
| static void | srmmu_early_pmd_set (pmd_t *pmdp, pte_t *ptep) |
| static unsigned long | srmmu_early_pgd_page (pgd_t pgd) |
| static unsigned long | srmmu_early_pmd_page (pmd_t pmd) |
| static pmd_t * | srmmu_early_pmd_offset (pgd_t *dir, unsigned long address) |
| static pte_t * | srmmu_early_pte_offset (pmd_t *dir, unsigned long address) |
| static void | srmmu_allocate_ptable_skeleton (unsigned long start, unsigned long end) |
| __initfunc (void srmmu_inherit_prom_mappings(unsigned long start, unsigned long end)) | |
| __initfunc (void srmmu_end_memory(unsigned long memory_size, unsigned long *end_mem_p)) | |
| __initfunc (static void do_large_mapping(unsigned long vaddr, unsigned long phys_base)) | |
| static int | find_in_spbanks (unsigned long phys_page) |
| __initfunc (static int find_free_spbank(char *taken_vector)) | |
| __initfunc (static unsigned long map_spbank(unsigned long vbase, int sp_entry)) | |
| static void | memprobe_error (char *msg) |
| static void | map_kernel (void) |
| unsigned long | free_area_init (unsigned long, unsigned long) |
| unsigned long | sparc_context_init (unsigned long, int) |
| static int | srmmu_mmu_info (char *buf) |
| static void | srmmu_update_mmu_cache (struct vm_area_struct *vma, unsigned long address, pte_t pte) |
| static void | srmmu_destroy_context (struct mm_struct *mm) |
| static void | srmmu_vac_update_mmu_cache (struct vm_area_struct *vma, unsigned long address, pte_t pte) |
| static void | hypersparc_destroy_context (struct mm_struct *mm) |
| __initfunc (static void srmmu_is_bad(void)) | |
| __initfunc (static void init_cypress_605(unsigned long mrev)) | |
| static void | turbosparc_flush_cache_all (void) |
| static void | turbosparc_flush_cache_mm (struct mm_struct *mm) |
| static void | turbosparc_flush_cache_range (struct mm_struct *mm, unsigned long start, unsigned long end) |
| static void | turbosparc_flush_cache_page (struct vm_area_struct *vma, unsigned long page) |
| static void | turbosparc_flush_page_to_ram (unsigned long page) |
| static void | turbosparc_flush_sig_insns (struct mm_struct *mm, unsigned long insn_addr) |
| static void | turbosparc_flush_page_for_dma (unsigned long page) |
| static void | turbosparc_flush_chunk (unsigned long chunk) |
| static void | turbosparc_flush_tlb_all (void) |
| static void | turbosparc_flush_tlb_mm (struct mm_struct *mm) |
| static void | turbosparc_flush_tlb_range (struct mm_struct *mm, unsigned long start, unsigned long end) |
| static void | turbosparc_flush_tlb_page (struct vm_area_struct *vma, unsigned long page) |
| static int | srmmu_check_pgt_cache (int low, int high) |
| __initfunc (void ld_mmu_srmmu(void)) | |
Variables | |
| enum mbus_module | srmmu_modtype |
| unsigned int | hwbug_bitmask |
| int | vac_cache_size |
| int | vac_line_size |
| int | vac_badbits |
| unsigned long | sparc_iobase_vaddr |
| static int | phys_mem_contig |
| int | flush_page_for_dma_global = 1 |
| static struct srmmu_stats | module_stats |
| char * | srmmu_name |
| ctxd_t * | srmmu_ctx_table_phys |
| ctxd_t * | srmmu_context_table |
| static struct srmmu_trans | srmmu_map [SPARC_PHYS_BANKS] |
| unsigned long | srmmu_v2p_hash [SRMMU_HASHSZ] |
| static unsigned long | srmmu_p2v_hash [SRMMU_HASHSZ] |
| int | viking_mxcc_present = 0 |
| static unsigned long | mempool |
| static unsigned long | kbpage |
| static int lots_of_ram | __initdata = 0 |
| int | physmem_mapped_contig |
| int | linux_num_cpus |
| void(* | poke_srmmu )(void) |
| unsigned long | spwin_mmu_patchme |
| unsigned long | fwin_mmu_patchme |
| unsigned long | tsetup_mmu_patchme |
| unsigned long | rtrap_mmu_patchme |
| unsigned long | spwin_srmmu_stackchk |
| unsigned long | srmmu_fwin_stackchk |
| unsigned long | tsetup_srmmu_stackchk |
| unsigned long | srmmu_rett_stackchk |
| unsigned long | srmmu_fault |
|
|
Definition at line 72 of file srmmu.c. Referenced by __initfunc(), cypress_update_rootmmu_dir(), hypersparc_update_rootmmu_dir(), map_kernel(), srmmu_destroy_context(), srmmu_init_new_context(), srmmu_switch_to_context(), srmmu_update_rootmmu_dir(), swift_update_rootmmu_dir(), and viking_update_rootmmu_dir(). |
|
|
|
Definition at line 80 of file srmmu.c. Referenced by map_kernel(), srmmu_get_pgd_slow(), srmmu_get_pte_slow(), srmmu_set_pgdir(), and viking_update_rootmmu_dir(). |
|
|
|
|
|
|
Definition at line 1601 of file srmmu.c. Referenced by __initfunc(). |
|
|
Definition at line 1535 of file srmmu.c. Referenced by __initfunc(), and map_kernel(). |
|
|
Value: do { \ iaddr = &(insn); \ daddr = &(dest); \ *iaddr = SPARC_BRANCH((unsigned long) daddr, (unsigned long) iaddr); \ } while(0); |
|
|
Definition at line 206 of file srmmu.c. Referenced by __initfunc(). |
|
|
Definition at line 73 of file srmmu.c. Referenced by __bad_pte(), __initfunc(), callback_init(), get_pte_slow(), inherit_prom_mappings(), map_kernel(), pte_alloc(), and srmmu_pte_alloc(). |
|
|
Definition at line 114 of file srmmu.c. Referenced by map_kernel(), srmmu_p2v(), and srmmu_v2p(). |
|
|
Definition at line 108 of file srmmu.c. Referenced by map_kernel(). |
|
|
|
|
|
|
|
|
|
|
Definition at line 2327 of file srmmu.c. References Cypress, Cypress_vD, Cypress_vE, HWBUG_ASIFLUSH_BROKEN, hwbug_bitmask, HWBUG_COPYBACK_BROKEN, srmmu_modtype, and srmmu_name. |
|
|
Definition at line 2131 of file srmmu.c. References prom_halt(), and prom_printf. Here is the call graph for this function: ![]() |
|
|
Definition at line 1649 of file srmmu.c. References base_addr, MKTRACE, srmmu_trans::pbase, size, srmmu_trans::size, sp_banks, srmmu_map, SRMMU_PGDIR_ALIGN, SRMMU_PGDIR_MASK, SRMMU_PGDIR_SIZE, and srmmu_trans::vbase. |
|
|
|
|
|
Definition at line 1604 of file srmmu.c. References init_task, KERNEL_PTE, MKTRACE, and srmmu_pgd_offset(). Here is the call graph for this function: ![]() |
|
|
Definition at line 1542 of file srmmu.c. References base_addr, end_of_phys_memory, first, i, KERNBASE, last, PAGE_SIZE, sp_banks, srmmu_hwprobe(), SRMMU_PGDIR_ALIGN, SRMMU_PGDIR_MASK, SRMMU_PGDIR_SIZE, SRMMU_PTE_PMASK, and sum. Here is the call graph for this function: ![]() |
|
|
Definition at line 1474 of file srmmu.c. References init_task, KADB_DEBUGGER_BEGVM, PAGE_SIZE, sparc_init_alloc(), srmmu_early_pgd_set(), srmmu_early_pmd_offset(), srmmu_early_pmd_set(), srmmu_early_pte_offset(), srmmu_hwprobe(), srmmu_pgd_none(), srmmu_pgd_offset(), SRMMU_PGDIR_MASK, SRMMU_PGDIR_SIZE, SRMMU_PMD_MASK, srmmu_pmd_none(), SRMMU_PMD_SIZE, SRMMU_PMD_TABLE_SIZE, and SRMMU_PTE_TABLE_SIZE. Here is the call graph for this function: ![]() |
|
|
Definition at line 209 of file srmmu.c. References addr, i, KERNBASE, MAP_NR, max_mapnr, mem_map, PAGE_ALIGN, PAGE_OFFSET, PAGE_SIZE, pg0, pg1, pg2, pg3, PGSKIP_DEBUG, set_bit, srmmu_trans::size, sparc_valid_addr_bitmap, srmmu_map, and srmmu_trans::vbase. |
|
|
Definition at line 797 of file srmmu.c. References add_to_used_ctxlist, ctx_free, ctx_list::ctx_mm, ctx_list::ctx_number, ctx_used, current, flush_cache_mm, flush_tlb_mm, ctx_list::next, NO_CONTEXT, panic(), and remove_from_ctx_list(). Here is the call graph for this function: ![]() |
|
|
Defi |