patch-2.3.23 linux/include/asm-arm/proc-armv/mm-init.h
Next file: linux/include/asm-arm/proc-armv/page.h
Previous file: linux/include/asm-arm/proc-armv/elf.h
Back to the patch index
Back to the overall index
- Lines: 178
- Date:
Wed Dec 31 16:00:00 1969
- Orig file:
v2.3.22/linux/include/asm-arm/proc-armv/mm-init.h
- Orig date:
Sat May 8 11:06:58 1999
diff -u --recursive --new-file v2.3.22/linux/include/asm-arm/proc-armv/mm-init.h linux/include/asm-arm/proc-armv/mm-init.h
@@ -1,177 +0,0 @@
-/*
- * linux/include/asm-arm/proc-armv/mm-init.h
- *
- * Copyright (C) 1996 Russell King
- *
- * This contains the code to setup the memory map on an ARM v3 or v4 machine.
- * This is both processor & architecture specific, and requires some
- * more work to get it to fit into our separate processor and architecture
- * structure.
- */
-
-/*
- * On ebsa, we want the memory map set up so:
- *
- * PHYS VIRT
- * 00000000 00000000 Zero page
- * 000003ff 000003ff Zero page end
- * 00000000 c0000000 Kernel and all physical memory
- * 01ffffff c1ffffff End of physical (32MB)
- * e0000000 e0000000 IO start
- * ffffffff ffffffff IO end
- *
- * On rpc, we want:
- *
- * PHYS VIRT
- * 10000000 00000000 Zero page
- * 100003ff 000003ff Zero page end
- * 10000000 c0000000 Kernel and all physical memory
- * 1fffffff cfffffff End of physical (32MB)
- * 02000000 d?000000 Screen memory (first image)
- * 02000000 d8000000 Screen memory (second image)
- * 00000000 df000000 StrongARM cache invalidation area
- * 03000000 e0000000 IO start
- * 03ffffff e0ffffff IO end
- *
- * We set it up using the section page table entries.
- */
-#include <asm/pgtable.h>
-
-#define PTE_SIZE (PTRS_PER_PTE * BYTES_PER_PTR)
-
-extern unsigned long setup_io_pagetables(unsigned long start_mem);
-
-/*
- * Add a SECTION mapping between VIRT and PHYS in domain DOMAIN with protection PROT
- */
-static inline void
-alloc_init_section(unsigned long *mem, unsigned long virt, unsigned long phys, int domain, int prot)
-{
- pgd_t *pgdp;
- pmd_t *pmdp, pmd;
-
- pgdp = pgd_offset_k(virt);
- pmdp = pmd_offset(pgdp, virt);
-
- pmd_val(pmd) = phys | PMD_TYPE_SECT | PMD_DOMAIN(domain) | prot;
- set_pmd(pmdp, pmd);
-}
-
-/*
- * Clear any mapping
- */
-static inline void
-free_init_section(unsigned long virt)
-{
- pgd_t *pgdp;
- pmd_t *pmdp;
-
- pgdp = pgd_offset_k(virt);
- pmdp = pmd_offset(pgdp, virt);
-
- pmd_clear(pmdp);
-}
-
-/*
- * Add a PAGE mapping between VIRT and PHYS in domain DOMAIN with protection PROT
- */
-static inline void
-alloc_init_page(unsigned long *mem, unsigned long virt, unsigned long phys, int domain, int prot)
-{
- pgd_t *pgdp;
- pmd_t *pmdp;
- pte_t *ptep;
-
- pgdp = pgd_offset_k(virt);
- pmdp = pmd_offset(pgdp, virt);
-
- if (pmd_none(*pmdp)) {
- unsigned long memory = *mem;
-
- memory = (memory + PTE_SIZE - 1) & ~(PTE_SIZE - 1);
-
- ptep = (pte_t *)memory;
- memzero(ptep, PTE_SIZE);
- memory += PTE_SIZE;
-
- ptep = (pte_t *)memory;
- memzero(ptep, PTE_SIZE);
-
- set_pmd(pmdp, __mk_pmd(ptep, PMD_TYPE_TABLE | PMD_DOMAIN(domain)));
-
- *mem = memory + PTE_SIZE;
- }
-
- ptep = pte_offset(pmdp, virt);
-
- set_pte(ptep, mk_pte_phys(phys, __pgprot(prot)));
-}
-
-static inline unsigned long
-setup_pagetables(unsigned long start_mem, unsigned long end_mem)
-{
- unsigned long address = 0;
-
- do {
- if (address >= PAGE_OFFSET && address < end_mem)
- /*
- * map in physical ram & kernel
- */
- alloc_init_section(&start_mem, address, __virt_to_phys(address), DOMAIN_KERNEL,
- PMD_SECT_CACHEABLE | PMD_SECT_BUFFERABLE | PMD_SECT_AP_WRITE);
- else
- /*
- * unmap everything else
- */
- free_init_section(address);
-
- address += PGDIR_SIZE;
- } while (address != 0);
-
- /*
- * An area to invalidate the cache
- */
- alloc_init_section(&start_mem, FLUSH_BASE, FLUSH_BASE_PHYS, DOMAIN_KERNEL,
- PMD_SECT_CACHEABLE | PMD_SECT_AP_READ);
-
- /*
- * Now set up our IO mappings
- */
- start_mem = setup_io_pagetables(start_mem);
-
- /*
- * map in zero page
- */
- alloc_init_page(&start_mem, 0, __virt_to_phys(PAGE_OFFSET),
- DOMAIN_USER, L_PTE_CACHEABLE | L_PTE_YOUNG | L_PTE_PRESENT);
-
- flush_cache_all();
-
- return start_mem;
-}
-
-static inline
-void mark_usable_memory_areas(unsigned long *start_mem, unsigned long end_mem)
-{
- unsigned long smem;
-
- *start_mem = smem = PAGE_ALIGN(*start_mem);
-
- /*
- * Mark all of memory from the end of kernel to end of memory
- */
- while (smem < end_mem) {
- clear_bit(PG_reserved, &mem_map[MAP_NR(smem)].flags);
- smem += PAGE_SIZE;
- }
-
- /*
- * Mark memory from page 1 to start of the swapper page directory
- */
- smem = PAGE_OFFSET + PAGE_SIZE;
- while (smem < (unsigned long)&swapper_pg_dir) {
- clear_bit(PG_reserved, &mem_map[MAP_NR(smem)].flags);
- smem += PAGE_SIZE;
- }
-}
-
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)