📄 processor.h
字号:
#define WRS_NONE 0 /* No WDT reset occurred */#define WRS_CORE 1 /* WDT forced core reset */#define WRS_CHIP 2 /* WDT forced chip reset */#define WRS_SYSTEM 3 /* WDT forced system reset */#define TSR_PIS 0x08000000 /* PIT Interrupt Status */#define TSR_FIS 0x04000000 /* FIT Interrupt Status */#define SPRN_UMMCR0 0x3A8 /* User Monitor Mode Control Register 0 */#define SPRN_UMMCR1 0x3AC /* User Monitor Mode Control Register 0 */#define SPRN_UPMC1 0x3A9 /* User Performance Counter Register 1 */#define SPRN_UPMC2 0x3AA /* User Performance Counter Register 2 */#define SPRN_UPMC3 0x3AD /* User Performance Counter Register 3 */#define SPRN_UPMC4 0x3AE /* User Performance Counter Register 4 */#define SPRN_USIA 0x3AB /* User Sampled Instruction Address Register */#define SPRN_VRSAVE 0x100 /* Vector Register Save Register */#define SPRN_XER 0x001 /* Fixed Point Exception Register */#define SPRN_ZPR 0x3B0 /* Zone Protection Register *//* Short-hand versions for a number of the above SPRNs */#define CTR SPRN_CTR /* Counter Register */#define DAR SPRN_DAR /* Data Address Register */#define DABR SPRN_DABR /* Data Address Breakpoint Register */#define DBAT0L SPRN_DBAT0L /* Data BAT 0 Lower Register */#define DBAT0U SPRN_DBAT0U /* Data BAT 0 Upper Register */#define DBAT1L SPRN_DBAT1L /* Data BAT 1 Lower Register */#define DBAT1U SPRN_DBAT1U /* Data BAT 1 Upper Register */#define DBAT2L SPRN_DBAT2L /* Data BAT 2 Lower Register */#define DBAT2U SPRN_DBAT2U /* Data BAT 2 Upper Register */#define DBAT3L SPRN_DBAT3L /* Data BAT 3 Lower Register */#define DBAT3U SPRN_DBAT3U /* Data BAT 3 Upper Register */#define DCMP SPRN_DCMP /* Data TLB Compare Register */#define DEC SPRN_DEC /* Decrement Register */#define DMISS SPRN_DMISS /* Data TLB Miss Register */#define DSISR SPRN_DSISR /* Data Storage Interrupt Status Register */#define EAR SPRN_EAR /* External Address Register */#define HASH1 SPRN_HASH1 /* Primary Hash Address Register */#define HASH2 SPRN_HASH2 /* Secondary Hash Address Register */#define HID0 SPRN_HID0 /* Hardware Implementation Register 0 */#define HID1 SPRN_HID1 /* Hardware Implementation Register 1 */#define IABR SPRN_IABR /* Instruction Address Breakpoint Register */#define IBAT0L SPRN_IBAT0L /* Instruction BAT 0 Lower Register */#define IBAT0U SPRN_IBAT0U /* Instruction BAT 0 Upper Register */#define IBAT1L SPRN_IBAT1L /* Instruction BAT 1 Lower Register */#define IBAT1U SPRN_IBAT1U /* Instruction BAT 1 Upper Register */#define IBAT2L SPRN_IBAT2L /* Instruction BAT 2 Lower Register */#define IBAT2U SPRN_IBAT2U /* Instruction BAT 2 Upper Register */#define IBAT3L SPRN_IBAT3L /* Instruction BAT 3 Lower Register */#define IBAT3U SPRN_IBAT3U /* Instruction BAT 3 Upper Register */#define ICMP SPRN_ICMP /* Instruction TLB Compare Register */#define IMISS SPRN_IMISS /* Instruction TLB Miss Register */#define IMMR SPRN_IMMR /* PPC 860/821 Internal Memory Map Register */#define L2CR SPRN_L2CR /* PPC 750 L2 control register */#define LR SPRN_LR#define PVR SPRN_PVR /* Processor Version */#define RPA SPRN_RPA /* Required Physical Address Register */#define SDR1 SPRN_SDR1 /* MMU hash base register */#define SPR0 SPRN_SPRG0 /* Supervisor Private Registers */#define SPR1 SPRN_SPRG1#define SPR2 SPRN_SPRG2#define SPR3 SPRN_SPRG3#define SPR4 SPRN_SPRG4 /* Supervisor Private Registers (4xx) */#define SPR5 SPRN_SPRG5#define SPR6 SPRN_SPRG6#define SPR7 SPRN_SPRG7#define SPRG0 SPRN_SPRG0#define SPRG1 SPRN_SPRG1#define SPRG2 SPRN_SPRG2#define SPRG3 SPRN_SPRG3#define SPRG4 SPRN_SPRG4#define SPRG5 SPRN_SPRG5#define SPRG6 SPRN_SPRG6#define SPRG7 SPRN_SPRG7#define SRR0 SPRN_SRR0 /* Save and Restore Register 0 */#define SRR1 SPRN_SRR1 /* Save and Restore Register 1 */#define TBRL SPRN_TBRL /* Time Base Read Lower Register */#define TBRU SPRN_TBRU /* Time Base Read Upper Register */#define TBWL SPRN_TBWL /* Time Base Write Lower Register */#define TBWU SPRN_TBWU /* Time Base Write Upper Register */#define ICTC 1019#define THRM1 SPRN_THRM1 /* Thermal Management Register 1 */#define THRM2 SPRN_THRM2 /* Thermal Management Register 2 */#define THRM3 SPRN_THRM3 /* Thermal Management Register 3 */#define XER SPRN_XER/* Processor Version Register *//* Processor Version Register (PVR) field extraction */#define PVR_VER(pvr) (((pvr) >> 16) & 0xFFFF) /* Version field */#define PVR_REV(pvr) (((pvr) >> 0) & 0xFFFF) /* Revison field *//* * IBM has further subdivided the standard PowerPC 16-bit version and * revision subfields of the PVR for the PowerPC 403s into the following: */#define PVR_FAM(pvr) (((pvr) >> 20) & 0xFFF) /* Family field */#define PVR_MEM(pvr) (((pvr) >> 16) & 0xF) /* Member field */#define PVR_CORE(pvr) (((pvr) >> 12) & 0xF) /* Core field */#define PVR_CFG(pvr) (((pvr) >> 8) & 0xF) /* Configuration field */#define PVR_MAJ(pvr) (((pvr) >> 4) & 0xF) /* Major revision field */#define PVR_MIN(pvr) (((pvr) >> 0) & 0xF) /* Minor revision field *//* Processor Version Numbers */#define PVR_403GA 0x00200000#define PVR_403GB 0x00200100#define PVR_403GC 0x00200200#define PVR_403GCX 0x00201400#define PVR_405GP 0x40110000#define PVR_STB03XXX 0x40310000 #define PVR_601 0x00010000#define PVR_602 0x00050000#define PVR_603 0x00030000#define PVR_603e 0x00060000#define PVR_603ev 0x00070000#define PVR_603r 0x00071000#define PVR_604 0x00040000#define PVR_604e 0x00090000#define PVR_604r 0x000A0000#define PVR_620 0x00140000#define PVR_740 0x00080000#define PVR_750 PVR_740#define PVR_740P 0x10080000#define PVR_750P PVR_740P#define PVR_7400 0x000C0000#define PVR_7410 0x800C0000/* * For the 8xx processors, all of them report the same PVR family for * the PowerPC core. The various versions of these processors must be * differentiated by the version number in the Communication Processor * Module (CPM). */#define PVR_821 0x00500000#define PVR_823 PVR_821#define PVR_850 PVR_821#define PVR_860 PVR_821#define PVR_8240 0x00810100#define PVR_8260 PVR_8240/* We only need to define a new _MACH_xxx for machines which are part of * a configuration which supports more than one type of different machine. * This is currently limited to CONFIG_ALL_PPC and CHRP/PReP/PMac. -- Tom */#define _MACH_prep 0x00000001#define _MACH_Pmac 0x00000002 /* pmac or pmac clone (non-chrp) */#define _MACH_chrp 0x00000004 /* chrp machine *//* see residual.h for these */#define _PREP_Motorola 0x01 /* motorola prep */#define _PREP_Firm 0x02 /* firmworks prep */#define _PREP_IBM 0x00 /* ibm prep */#define _PREP_Bull 0x03 /* bull prep *//* these are arbitrary */#define _CHRP_Motorola 0x04 /* motorola chrp, the cobra */#define _CHRP_IBM 0x05 /* IBM chrp, the longtrail and longtrail 2 */#define _GLOBAL(n)\ .globl n;\n:/* Macros for setting and retrieving special purpose registers */#define stringify(s) tostring(s)#define tostring(s) #s#define mfdcr(rn) ({unsigned int rval; \ asm volatile("mfdcr %0," stringify(rn) \ : "=r" (rval)); rval;})#define mtdcr(rn, v) asm volatile("mtdcr " stringify(rn) ",%0" : : "r" (v))#define mfmsr() ({unsigned int rval; \ asm volatile("mfmsr %0" : "=r" (rval)); rval;})#define mtmsr(v) asm volatile("mtmsr %0" : : "r" (v))#define mfspr(rn) ({unsigned int rval; \ asm volatile("mfspr %0," stringify(rn) \ : "=r" (rval)); rval;})#define mtspr(rn, v) asm volatile("mtspr " stringify(rn) ",%0" : : "r" (v))/* Segment Registers */#define SR0 0#define SR1 1#define SR2 2#define SR3 3#define SR4 4#define SR5 5#define SR6 6#define SR7 7#define SR8 8#define SR9 9#define SR10 10#define SR11 11#define SR12 12#define SR13 13#define SR14 14#define SR15 15#ifndef __ASSEMBLY__#if defined(CONFIG_ALL_PPC)extern int _machine;/* what kind of prep workstation we are */extern int _prep_type;/* * This is used to identify the board type from a given PReP board * vendor. Board revision is also made available. */extern unsigned char ucSystemType;extern unsigned char ucBoardRev;extern unsigned char ucBoardRevMaj, ucBoardRevMin;#else#define _machine 0#endif /* CONFIG_ALL_PPC */struct task_struct;void start_thread(struct pt_regs *regs, unsigned long nip, unsigned long sp);void release_thread(struct task_struct *);/* * Create a new kernel thread. */extern long kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);/* * Bus types */#define EISA_bus 0#define EISA_bus__is_a_macro /* for versions in ksyms.c */#define MCA_bus 0#define MCA_bus__is_a_macro /* for versions in ksyms.c *//* Lazy FPU handling on uni-processor */extern struct task_struct *last_task_used_math;extern struct task_struct *last_task_used_altivec;/* * this is the minimum allowable io space due to the location * of the io areas on prep (first one at 0x80000000) but * as soon as I get around to remapping the io areas with the BATs * to match the mac we can raise this. -- Cort */#define TASK_SIZE (0x80000000UL)/* This decides where the kernel will search for a free chunk of vm * space during mmap's. */#define TASK_UNMAPPED_BASE (TASK_SIZE / 8 * 3)typedef struct { unsigned long seg;} mm_segment_t;struct thread_struct { unsigned long ksp; /* Kernel stack pointer */ unsigned long wchan; /* Event task is sleeping on */ struct pt_regs *regs; /* Pointer to saved register state */ mm_segment_t fs; /* for get_fs() validation */ void *pgdir; /* root of page-table tree */ signed long last_syscall; double fpr[32]; /* Complete floating point set */ unsigned long fpscr_pad; /* fpr ... fpscr must be contiguous */ unsigned long fpscr; /* Floating point status */#ifdef CONFIG_ALTIVEC vector128 vr[32]; /* Complete AltiVec set */ vector128 vscr; /* AltiVec status */ unsigned long vrsave;#endif /* CONFIG_ALTIVEC */};#define INIT_SP (sizeof(init_stack) + (unsigned long) &init_stack)#define INIT_THREAD { \ INIT_SP, /* ksp */ \ 0, /* wchan */ \ 0, /* regs */ \ KERNEL_DS, /*fs*/ \ swapper_pg_dir, /* pgdir */ \ 0, /* last_syscall */ \ {0}, 0, 0 \}/* * Return saved PC of a blocked thread. For now, this is the "user" PC */static inline unsigned long thread_saved_pc(struct thread_struct *t){ return (t->regs) ? t->regs->nip : 0;}#define copy_segments(tsk, mm) do { } while (0)#define release_segments(mm) do { } while (0)unsigned long get_wchan(struct task_struct *p);#define KSTK_EIP(tsk) ((tsk)->thread.regs? (tsk)->thread.regs->nip: 0)#define KSTK_ESP(tsk) ((tsk)->thread.regs? (tsk)->thread.regs->gpr[1]: 0)/* * NOTE! The task struct and the stack go together */#define THREAD_SIZE (2*PAGE_SIZE)#define alloc_task_struct() \ ((struct task_struct *) __get_free_pages(GFP_KERNEL,1))#define free_task_struct(p) free_pages((unsigned long)(p),1)#define get_task_struct(tsk) atomic_inc(&virt_to_page(tsk)->count)/* in process.c - for early bootup debug -- Cort */int ll_printk(const char *, ...);void ll_puts(const char *);#define init_task (init_task_union.task)#define init_stack (init_task_union.stack)/* In misc.c */void _nmask_and_or_msr(unsigned long nmask, unsigned long or_val);#define cpu_relax() do { } while (0)/* * Prefetch macros. */#define ARCH_HAS_PREFETCH#define ARCH_HAS_PREFETCHW#define ARCH_HAS_SPINLOCK_PREFETCHextern inline void prefetch(const void *x){ __asm__ __volatile__ ("dcbt 0,%0" : : "r" (x));}extern inline void prefetchw(const void *x){ __asm__ __volatile__ ("dcbtst 0,%0" : : "r" (x));}#define spin_lock_prefetch(x) prefetchw(x)#endif /* !__ASSEMBLY__ */#define have_of (_machine == _MACH_chrp || _machine == _MACH_Pmac)#endif /* __ASM_PPC_PROCESSOR_H */#endif /* __KERNEL__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -