core_apecs.h

来自「linux 内核源代码」· C头文件 代码 · 共 518 行 · 第 1/2 页

H
518
字号
	unsigned long pceb_vid;	unsigned long pceb_did;	unsigned long pceb_revision;	unsigned long pceb_command;	unsigned long pceb_status;	unsigned long pceb_latency;	unsigned long pceb_control;	unsigned long pceb_arbcon;	unsigned long pceb_arbpri;	unsigned long esc_id;	unsigned long esc_revision;	unsigned long esc_int0;	unsigned long esc_int1;	unsigned long esc_elcr0;	unsigned long esc_elcr1;	unsigned long esc_last_eisa;	unsigned long esc_nmi_stat;	unsigned long pci_ir;	unsigned long pci_imr;	unsigned long svr_mgr;};/* This for the normal APECS machines.  */struct el_apecs_sysdata_mcheck{	unsigned long coma_gcr;	unsigned long coma_edsr;	unsigned long coma_ter;	unsigned long coma_elar;	unsigned long coma_ehar;	unsigned long coma_ldlr;	unsigned long coma_ldhr;	unsigned long coma_base0;	unsigned long coma_base1;	unsigned long coma_base2;	unsigned long coma_cnfg0;	unsigned long coma_cnfg1;	unsigned long coma_cnfg2;	unsigned long epic_dcsr;	unsigned long epic_pear;	unsigned long epic_sear;	unsigned long epic_tbr1;	unsigned long epic_tbr2;	unsigned long epic_pbr1;	unsigned long epic_pbr2;	unsigned long epic_pmr1;	unsigned long epic_pmr2;	unsigned long epic_harx1;	unsigned long epic_harx2;	unsigned long epic_pmlt;	unsigned long epic_tag0;	unsigned long epic_tag1;	unsigned long epic_tag2;	unsigned long epic_tag3;	unsigned long epic_tag4;	unsigned long epic_tag5;	unsigned long epic_tag6;	unsigned long epic_tag7;	unsigned long epic_data0;	unsigned long epic_data1;	unsigned long epic_data2;	unsigned long epic_data3;	unsigned long epic_data4;	unsigned long epic_data5;	unsigned long epic_data6;	unsigned long epic_data7;};struct el_apecs_procdata{	unsigned long paltemp[32];  /* PAL TEMP REGS. */	/* EV4-specific fields */	unsigned long exc_addr;     /* Address of excepting instruction. */	unsigned long exc_sum;      /* Summary of arithmetic traps. */	unsigned long exc_mask;     /* Exception mask (from exc_sum). */	unsigned long iccsr;        /* IBox hardware enables. */	unsigned long pal_base;     /* Base address for PALcode. */	unsigned long hier;         /* Hardware Interrupt Enable. */	unsigned long hirr;         /* Hardware Interrupt Request. */	unsigned long csr;          /* D-stream fault info. */	unsigned long dc_stat;      /* D-cache status (ECC/Parity Err). */	unsigned long dc_addr;      /* EV3 Phys Addr for ECC/DPERR. */	unsigned long abox_ctl;     /* ABox Control Register. */	unsigned long biu_stat;     /* BIU Status. */	unsigned long biu_addr;     /* BUI Address. */	unsigned long biu_ctl;      /* BIU Control. */	unsigned long fill_syndrome;/* For correcting ECC errors. */	unsigned long fill_addr;    /* Cache block which was being read */	unsigned long va;           /* Effective VA of fault or miss. */	unsigned long bc_tag;       /* Backup Cache Tag Probe Results.*/};#ifdef __KERNEL__#ifndef __EXTERN_INLINE#define __EXTERN_INLINE extern inline#define __IO_EXTERN_INLINE#endif/* * I/O functions: * * Unlike Jensen, the APECS machines have no concept of local * I/O---everything goes over the PCI bus. * * There is plenty room for optimization here.  In particular, * the Alpha's insb/insw/extb/extw should be useful in moving * data to/from the right byte-lanes. */#define vip	volatile int __force *#define vuip	volatile unsigned int __force *#define vulp	volatile unsigned long __force *#define APECS_SET_HAE						\	do {							\		if (addr >= (1UL << 24)) {			\			unsigned long msb = addr & 0xf8000000;	\			addr -= msb;				\			set_hae(msb);				\		}						\	} while (0)__EXTERN_INLINE unsigned int apecs_ioread8(void __iomem *xaddr){	unsigned long addr = (unsigned long) xaddr;	unsigned long result, base_and_type;	if (addr >= APECS_DENSE_MEM) {		addr -= APECS_DENSE_MEM;		APECS_SET_HAE;		base_and_type = APECS_SPARSE_MEM + 0x00;	} else {		addr -= APECS_IO;		base_and_type = APECS_IO + 0x00;	}	result = *(vip) ((addr << 5) + base_and_type);	return __kernel_extbl(result, addr & 3);}__EXTERN_INLINE void apecs_iowrite8(u8 b, void __iomem *xaddr){	unsigned long addr = (unsigned long) xaddr;	unsigned long w, base_and_type;	if (addr >= APECS_DENSE_MEM) {		addr -= APECS_DENSE_MEM;		APECS_SET_HAE;		base_and_type = APECS_SPARSE_MEM + 0x00;	} else {		addr -= APECS_IO;		base_and_type = APECS_IO + 0x00;	}	w = __kernel_insbl(b, addr & 3);	*(vuip) ((addr << 5) + base_and_type) = w;}__EXTERN_INLINE unsigned int apecs_ioread16(void __iomem *xaddr){	unsigned long addr = (unsigned long) xaddr;	unsigned long result, base_and_type;	if (addr >= APECS_DENSE_MEM) {		addr -= APECS_DENSE_MEM;		APECS_SET_HAE;		base_and_type = APECS_SPARSE_MEM + 0x08;	} else {		addr -= APECS_IO;		base_and_type = APECS_IO + 0x08;	}	result = *(vip) ((addr << 5) + base_and_type);	return __kernel_extwl(result, addr & 3);}__EXTERN_INLINE void apecs_iowrite16(u16 b, void __iomem *xaddr){	unsigned long addr = (unsigned long) xaddr;	unsigned long w, base_and_type;	if (addr >= APECS_DENSE_MEM) {		addr -= APECS_DENSE_MEM;		APECS_SET_HAE;		base_and_type = APECS_SPARSE_MEM + 0x08;	} else {		addr -= APECS_IO;		base_and_type = APECS_IO + 0x08;	}	w = __kernel_inswl(b, addr & 3);	*(vuip) ((addr << 5) + base_and_type) = w;}__EXTERN_INLINE unsigned int apecs_ioread32(void __iomem *xaddr){	unsigned long addr = (unsigned long) xaddr;	if (addr < APECS_DENSE_MEM)		addr = ((addr - APECS_IO) << 5) + APECS_IO + 0x18;	return *(vuip)addr;}__EXTERN_INLINE void apecs_iowrite32(u32 b, void __iomem *xaddr){	unsigned long addr = (unsigned long) xaddr;	if (addr < APECS_DENSE_MEM)		addr = ((addr - APECS_IO) << 5) + APECS_IO + 0x18;	*(vuip)addr = b;}__EXTERN_INLINE void __iomem *apecs_ioportmap(unsigned long addr){	return (void __iomem *)(addr + APECS_IO);}__EXTERN_INLINE void __iomem *apecs_ioremap(unsigned long addr,					    unsigned long size){	return (void __iomem *)(addr + APECS_DENSE_MEM);}__EXTERN_INLINE int apecs_is_ioaddr(unsigned long addr){	return addr >= IDENT_ADDR + 0x180000000UL;}__EXTERN_INLINE int apecs_is_mmio(const volatile void __iomem *addr){	return (unsigned long)addr >= APECS_DENSE_MEM;}#undef APECS_SET_HAE#undef vip#undef vuip#undef vulp#undef __IO_PREFIX#define __IO_PREFIX		apecs#define apecs_trivial_io_bw	0#define apecs_trivial_io_lq	0#define apecs_trivial_rw_bw	2#define apecs_trivial_rw_lq	1#define apecs_trivial_iounmap	1#include <asm/io_trivial.h>#ifdef __IO_EXTERN_INLINE#undef __EXTERN_INLINE#undef __IO_EXTERN_INLINE#endif#endif /* __KERNEL__ */#endif /* __ALPHA_APECS__H__ */

⌨️ 快捷键说明

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