Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 148748
b: refs/heads/master
c: 5c01b46
h: refs/heads/master
v: v3
  • Loading branch information
Arnd Bergmann authored and Arnd Bergmann committed Jun 11, 2009
1 parent a30b2ac commit c597d85
Show file tree
Hide file tree
Showing 9 changed files with 241 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 3f7e212df82ca0459d44c91d9e019efd1b5f936c
refs/heads/master: 5c01b46bb6bb8f2662573c05c87b5d68fa25af89
12 changes: 12 additions & 0 deletions trunk/include/asm-generic/cache.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#ifndef __ASM_GENERIC_CACHE_H
#define __ASM_GENERIC_CACHE_H
/*
* 32 bytes appears to be the most common cache line size,
* so make that the default here. Architectures with larger
* cache lines need to provide their own cache.h.
*/

#define L1_CACHE_SHIFT 5
#define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT)

#endif /* __ASM_GENERIC_CACHE_H */
30 changes: 30 additions & 0 deletions trunk/include/asm-generic/cacheflush.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#ifndef __ASM_CACHEFLUSH_H
#define __ASM_CACHEFLUSH_H

/* Keep includes the same across arches. */
#include <linux/mm.h>

/*
* The cache doesn't need to be flushed when TLB entries change when
* the cache is mapped to physical memory, not virtual memory
*/
#define flush_cache_all() do { } while (0)
#define flush_cache_mm(mm) do { } while (0)
#define flush_cache_dup_mm(mm) do { } while (0)
#define flush_cache_range(vma, start, end) do { } while (0)
#define flush_cache_page(vma, vmaddr, pfn) do { } while (0)
#define flush_dcache_page(page) do { } while (0)
#define flush_dcache_mmap_lock(mapping) do { } while (0)
#define flush_dcache_mmap_unlock(mapping) do { } while (0)
#define flush_icache_range(start, end) do { } while (0)
#define flush_icache_page(vma,pg) do { } while (0)
#define flush_icache_user_range(vma,pg,adr,len) do { } while (0)
#define flush_cache_vmap(start, end) do { } while (0)
#define flush_cache_vunmap(start, end) do { } while (0)

#define copy_to_user_page(vma, page, vaddr, dst, src, len) \
memcpy(dst, src, len)
#define copy_from_user_page(vma, page, vaddr, dst, src, len) \
memcpy(dst, src, len)

#endif /* __ASM_CACHEFLUSH_H */
15 changes: 15 additions & 0 deletions trunk/include/asm-generic/mmu.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#ifndef __ASM_GENERIC_MMU_H
#define __ASM_GENERIC_MMU_H

/*
* This is the mmu.h header for nommu implementations.
* Architectures with an MMU need something more complex.
*/
#ifndef __ASSEMBLY__
typedef struct {
struct vm_list_struct *vmlist;
unsigned long end_brk;
} mm_context_t;
#endif

#endif /* __ASM_GENERIC_MMU_H */
45 changes: 45 additions & 0 deletions trunk/include/asm-generic/mmu_context.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#ifndef __ASM_GENERIC_MMU_CONTEXT_H
#define __ASM_GENERIC_MMU_CONTEXT_H

/*
* Generic hooks for NOMMU architectures, which do not need to do
* anything special here.
*/

#include <asm-generic/mm_hooks.h>

struct task_struct;
struct mm_struct;

static inline void enter_lazy_tlb(struct mm_struct *mm,
struct task_struct *tsk)
{
}

static inline int init_new_context(struct task_struct *tsk,
struct mm_struct *mm)
{
return 0;
}

static inline void destroy_context(struct mm_struct *mm)
{
}

static inline void deactivate_mm(struct task_struct *task,
struct mm_struct *mm)
{
}

static inline void switch_mm(struct mm_struct *prev,
struct mm_struct *next,
struct task_struct *tsk)
{
}

static inline void activate_mm(struct mm_struct *prev_mm,
struct mm_struct *next_mm)
{
}

#endif /* __ASM_GENERIC_MMU_CONTEXT_H */
99 changes: 99 additions & 0 deletions trunk/include/asm-generic/page.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
#ifndef __ASM_GENERIC_PAGE_H
#define __ASM_GENERIC_PAGE_H
/*
* Generic page.h implementation, for NOMMU architectures.
* This provides the dummy definitions for the memory management.
*/

#ifdef CONFIG_MMU
#error need to prove a real asm/page.h
#endif


/* PAGE_SHIFT determines the page size */

#define PAGE_SHIFT 12
#ifdef __ASSEMBLY__
#define PAGE_SIZE (1 << PAGE_SHIFT)
#else
#define PAGE_SIZE (1UL << PAGE_SHIFT)
#endif
#define PAGE_MASK (~(PAGE_SIZE-1))

#include <asm/setup.h>

#ifndef __ASSEMBLY__

#define get_user_page(vaddr) __get_free_page(GFP_KERNEL)
#define free_user_page(page, addr) free_page(addr)

#define clear_page(page) memset((page), 0, PAGE_SIZE)
#define copy_page(to,from) memcpy((to), (from), PAGE_SIZE)

#define clear_user_page(page, vaddr, pg) clear_page(page)
#define copy_user_page(to, from, vaddr, pg) copy_page(to, from)

/*
* These are used to make use of C type-checking..
*/
typedef struct {
unsigned long pte;
} pte_t;
typedef struct {
unsigned long pmd[16];
} pmd_t;
typedef struct {
unsigned long pgd;
} pgd_t;
typedef struct {
unsigned long pgprot;
} pgprot_t;
typedef struct page *pgtable_t;

#define pte_val(x) ((x).pte)
#define pmd_val(x) ((&x)->pmd[0])
#define pgd_val(x) ((x).pgd)
#define pgprot_val(x) ((x).pgprot)

#define __pte(x) ((pte_t) { (x) } )
#define __pmd(x) ((pmd_t) { (x) } )
#define __pgd(x) ((pgd_t) { (x) } )
#define __pgprot(x) ((pgprot_t) { (x) } )

extern unsigned long memory_start;
extern unsigned long memory_end;

#endif /* !__ASSEMBLY__ */

#ifdef CONFIG_KERNEL_RAM_BASE_ADDRESS
#define PAGE_OFFSET (CONFIG_KERNEL_RAM_BASE_ADDRESS)
#else
#define PAGE_OFFSET (0)
#endif

#ifndef __ASSEMBLY__

#define __va(x) ((void *)((unsigned long)(x) + PAGE_OFFSET))
#define __pa(x) ((unsigned long) (x) - PAGE_OFFSET)

#define virt_to_pfn(kaddr) (__pa(kaddr) >> PAGE_SHIFT)
#define pfn_to_virt(pfn) __va((pfn) << PAGE_SHIFT)

#define virt_to_page(addr) (mem_map + (((unsigned long)(addr)-PAGE_OFFSET) >> PAGE_SHIFT))
#define page_to_virt(page) ((((page) - mem_map) << PAGE_SHIFT) + PAGE_OFFSET)

#ifndef page_to_phys
#define page_to_phys(page) ((dma_addr_t)page_to_pfn(page) << PAGE_SHIFT)
#endif

#define pfn_valid(pfn) ((pfn) < max_mapnr)

#define virt_addr_valid(kaddr) (((void *)(kaddr) >= (void *)PAGE_OFFSET) && \
((void *)(kaddr) < (void *)memory_end))

#endif /* __ASSEMBLY__ */

#include <asm-generic/memory_model.h>
#include <asm-generic/getorder.h>

#endif /* __ASM_GENERIC_PAGE_H */
12 changes: 12 additions & 0 deletions trunk/include/asm-generic/pgalloc.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#ifndef __ASM_GENERIC_PGALLOC_H
#define __ASM_GENERIC_PGALLOC_H
/*
* an empty file is enough for a nommu architecture
*/
#ifdef CONFIG_MMU
#error need to implement an architecture specific asm/pgalloc.h
#endif

#define check_pgt_cache() do { } while (0)

#endif /* __ASM_GENERIC_PGALLOC_H */
9 changes: 9 additions & 0 deletions trunk/include/asm-generic/segment.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#ifndef __ASM_GENERIC_SEGMENT_H
#define __ASM_GENERIC_SEGMENT_H
/*
* Only here because we have some old header files that expect it...
*
* New architectures probably don't want to have their own version.
*/

#endif /* __ASM_GENERIC_SEGMENT_H */
18 changes: 18 additions & 0 deletions trunk/include/asm-generic/tlbflush.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#ifndef __ASM_GENERIC_TLBFLUSH_H
#define __ASM_GENERIC_TLBFLUSH_H
/*
* This is a dummy tlbflush implementation that can be used on all
* nommu architectures.
* If you have an MMU, you need to write your own functions.
*/
#ifdef CONFIG_MMU
#error need to implement an architecture specific asm/tlbflush.h
#endif

static inline void flush_tlb_mm(struct mm_struct *mm)
{
BUG();
}


#endif /* __ASM_GENERIC_TLBFLUSH_H */

0 comments on commit c597d85

Please sign in to comment.