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 + -
显示快捷键?