processor.h

来自「Linux Kernel 2.6.9 for OMAP1710」· C头文件 代码 · 共 206 行

H
206
字号
#ifdef __KERNEL__#ifndef __ASM_PPC_PROCESSOR_H#define __ASM_PPC_PROCESSOR_H/* * Default implementation of macro that returns current * instruction pointer ("program counter"). */#define current_text_addr() ({ __label__ _l; _l: &&_l;})#include <linux/config.h>#include <linux/stringify.h>#include <asm/ptrace.h>#include <asm/types.h>#include <asm/mpc8xx.h>#include <asm/reg.h>/* 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_PPC_MULTIPLATFORM 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)\	.stabs __stringify(n:F-1),N_FUN,0,0,n;\	.globl n;\n:/* * 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	(CONFIG_TASK_SIZE)#ifndef __ASSEMBLY__#ifdef CONFIG_PPC_MULTIPLATFORMextern 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_PPC_MULTIPLATFORM */struct task_struct;void start_thread(struct pt_regs *regs, unsigned long nip, unsigned long sp);void release_thread(struct task_struct *);/* Prepare to copy thread state - unlazy all lazy status */extern void prepare_to_copy(struct task_struct *tsk);/* * Create a new kernel thread. */extern long kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);/* * Bus types */#define MCA_bus 0#define MCA_bus__is_a_macro/* Lazy FPU handling on uni-processor */extern struct task_struct *last_task_used_math;extern struct task_struct *last_task_used_altivec;extern struct task_struct *last_task_used_spe;/* 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 */	struct pt_regs	*regs;		/* Pointer to saved register state */	mm_segment_t	fs;		/* for get_fs() validation */	void		*pgdir;		/* root of page-table tree */	int		fpexc_mode;	/* floating-point exception mode */	signed long	last_syscall;#if defined(CONFIG_4xx) || defined (CONFIG_BOOKE)	unsigned long	dbcr0;		/* debug control register values */	unsigned long	dbcr1;#endif	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	/* Complete AltiVec register set */	vector128	vr[32] __attribute((aligned(16)));	/* AltiVec status */	vector128	vscr __attribute((aligned(16)));	unsigned long	vrsave;	int		used_vr;	/* set if process has used altivec */#endif /* CONFIG_ALTIVEC */#ifdef CONFIG_SPE	unsigned long	evr[32];	/* upper 32-bits of SPE regs */	u64		acc;		/* Accumulator */	unsigned long	spefscr;	/* SPE & eFP status */	int		used_spe;	/* set if process has used spe */#endif /* CONFIG_SPE */};#define ARCH_MIN_TASKALIGN 16#define INIT_SP		(sizeof(init_stack) + (unsigned long) &init_stack)#define INIT_THREAD { \	.ksp = INIT_SP, \	.fs = KERNEL_DS, \	.pgdir = swapper_pg_dir, \	.fpexc_mode = MSR_FE0 | MSR_FE1, \}/* * Return saved PC of a blocked thread. For now, this is the "user" PC */#define thread_saved_pc(tsk)	\	((tsk)->thread.regs? (tsk)->thread.regs->nip: 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)/* Get/set floating-point exception mode */#define GET_FPEXC_CTL(tsk, adr)	get_fpexc_mode((tsk), (adr))#define SET_FPEXC_CTL(tsk, val)	set_fpexc_mode((tsk), (val))extern int get_fpexc_mode(struct task_struct *tsk, unsigned long adr);extern int set_fpexc_mode(struct task_struct *tsk, unsigned int val);static inline unsigned int __unpack_fe01(unsigned int msr_bits){	return ((msr_bits & MSR_FE0) >> 10) | ((msr_bits & MSR_FE1) >> 8);}static inline unsigned int __pack_fe01(unsigned int fpmode){	return ((fpmode << 10) & MSR_FE0) | ((fpmode << 8) & MSR_FE1);}/* in process.c - for early bootup debug -- Cort */int ll_printk(const char *, ...);void ll_puts(const char *);/* In misc.c */void _nmask_and_or_msr(unsigned long nmask, unsigned long or_val);#define have_of (_machine == _MACH_chrp || _machine == _MACH_Pmac)#define cpu_relax()	barrier()/* * 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)extern int emulate_altivec(struct pt_regs *regs);#endif /* !__ASSEMBLY__ */#endif /* __ASM_PPC_PROCESSOR_H */#endif /* __KERNEL__ */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?