/*
|
/*
|
* linux/include/asm-arm/proc-fns.h
|
* linux/include/asm-arm/proc-fns.h
|
*
|
*
|
* Copyright (C) 1997 Russell King
|
* Copyright (C) 1997 Russell King
|
*/
|
*/
|
#ifndef __ASM_PROCFNS_H
|
#ifndef __ASM_PROCFNS_H
|
#define __ASM_PROCFNS_H
|
#define __ASM_PROCFNS_H
|
|
|
#include <asm/page.h>
|
#include <asm/page.h>
|
|
|
#ifdef __KERNEL__
|
#ifdef __KERNEL__
|
/*
|
/*
|
* Don't change this structure
|
* Don't change this structure
|
*/
|
*/
|
extern struct processor {
|
extern struct processor {
|
const char *name;
|
const char *name;
|
/* MISC
|
/* MISC
|
*
|
*
|
* flush caches for task switch
|
* flush caches for task switch
|
*/
|
*/
|
void (*_switch_to)(void *prev, void *next);
|
void (*_switch_to)(void *prev, void *next);
|
/*
|
/*
|
* get data abort address/flags
|
* get data abort address/flags
|
*/
|
*/
|
void (*_data_abort)(unsigned long pc);
|
void (*_data_abort)(unsigned long pc);
|
/*
|
/*
|
* check for any bugs
|
* check for any bugs
|
*/
|
*/
|
void (*_check_bugs)(void);
|
void (*_check_bugs)(void);
|
/*
|
/*
|
* Set up any processor specifics
|
* Set up any processor specifics
|
*/
|
*/
|
void (*_proc_init)(void);
|
void (*_proc_init)(void);
|
/*
|
/*
|
* Disable any processor specifics
|
* Disable any processor specifics
|
*/
|
*/
|
void (*_proc_fin)(void);
|
void (*_proc_fin)(void);
|
/*
|
/*
|
* Processor architecture specific
|
* Processor architecture specific
|
*/
|
*/
|
union {
|
union {
|
struct {
|
struct {
|
/* CACHE
|
/* CACHE
|
*
|
*
|
* flush all caches
|
* flush all caches
|
*/
|
*/
|
void (*_flush_cache_all)(void);
|
void (*_flush_cache_all)(void);
|
/*
|
/*
|
* flush a specific page or pages
|
* flush a specific page or pages
|
*/
|
*/
|
void (*_flush_cache_area)(unsigned long address, unsigned long end, int flags);
|
void (*_flush_cache_area)(unsigned long address, unsigned long end, int flags);
|
/*
|
/*
|
* flush cache entry for an address
|
* flush cache entry for an address
|
*/
|
*/
|
void (*_flush_cache_entry)(unsigned long address);
|
void (*_flush_cache_entry)(unsigned long address);
|
/*
|
/*
|
* flush a virtual address used for a page table
|
* flush a virtual address used for a page table
|
* note D-cache only!
|
* note D-cache only!
|
*/
|
*/
|
void (*_flush_cache_pte)(unsigned long address);
|
void (*_flush_cache_pte)(unsigned long address);
|
/*
|
/*
|
* flush a page to RAM
|
* flush a page to RAM
|
*/
|
*/
|
void (*_flush_ram_page)(unsigned long page);
|
void (*_flush_ram_page)(unsigned long page);
|
/* TLB
|
/* TLB
|
*
|
*
|
* flush all TLBs
|
* flush all TLBs
|
*/
|
*/
|
void (*_flush_tlb_all)(void);
|
void (*_flush_tlb_all)(void);
|
/*
|
/*
|
* flush a specific TLB
|
* flush a specific TLB
|
*/
|
*/
|
void (*_flush_tlb_area)(unsigned long address, unsigned long end, int flags);
|
void (*_flush_tlb_area)(unsigned long address, unsigned long end, int flags);
|
/*
|
/*
|
* Set a PMD (handling IMP bit 4)
|
* Set a PMD (handling IMP bit 4)
|
*/
|
*/
|
void (*_set_pmd)(pmd_t *pmdp, pmd_t pmd);
|
void (*_set_pmd)(pmd_t *pmdp, pmd_t pmd);
|
/*
|
/*
|
* Special stuff for a reset
|
* Special stuff for a reset
|
*/
|
*/
|
unsigned long (*reset)(void);
|
unsigned long (*reset)(void);
|
} armv3v4;
|
} armv3v4;
|
struct {
|
struct {
|
/* MEMC
|
/* MEMC
|
*
|
*
|
* remap memc tables
|
* remap memc tables
|
*/
|
*/
|
void (*_remap_memc)(void *tsk);
|
void (*_remap_memc)(void *tsk);
|
/*
|
/*
|
* update task's idea of mmap
|
* update task's idea of mmap
|
*/
|
*/
|
void (*_update_map)(void *tsk);
|
void (*_update_map)(void *tsk);
|
/*
|
/*
|
* update task's idea after abort
|
* update task's idea after abort
|
*/
|
*/
|
void (*_update_mmu_cache)(void *vma, unsigned long addr, pte_t pte);
|
void (*_update_mmu_cache)(void *vma, unsigned long addr, pte_t pte);
|
/* XCHG
|
/* XCHG
|
*/
|
*/
|
unsigned long (*_xchg_1)(unsigned long x, volatile void *ptr);
|
unsigned long (*_xchg_1)(unsigned long x, volatile void *ptr);
|
unsigned long (*_xchg_2)(unsigned long x, volatile void *ptr);
|
unsigned long (*_xchg_2)(unsigned long x, volatile void *ptr);
|
unsigned long (*_xchg_4)(unsigned long x, volatile void *ptr);
|
unsigned long (*_xchg_4)(unsigned long x, volatile void *ptr);
|
} armv2;
|
} armv2;
|
} u;
|
} u;
|
} processor;
|
} processor;
|
#endif
|
#endif
|
#endif
|
#endif
|
|
|
|
|