⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 processor.h

📁 嵌入式系统设计与实例开发源码
💻 H
📖 第 1 页 / 共 2 页
字号:
#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 + -