0001
0002 #ifndef __ALPHA_IRONGATE__H__
0003 #define __ALPHA_IRONGATE__H__
0004
0005 #include <linux/types.h>
0006 #include <asm/compiler.h>
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035 typedef volatile __u32 igcsr32;
0036
0037 typedef struct {
0038 igcsr32 dev_vendor;
0039 igcsr32 stat_cmd;
0040 igcsr32 class;
0041 igcsr32 latency;
0042 igcsr32 bar0;
0043 igcsr32 bar1;
0044 igcsr32 bar2;
0045
0046 igcsr32 rsrvd0[6];
0047
0048 igcsr32 capptr;
0049
0050 igcsr32 rsrvd1[2];
0051
0052 igcsr32 bacsr10;
0053 igcsr32 bacsr32;
0054 igcsr32 bacsr54_eccms761;
0055
0056
0057 igcsr32 rsrvd2[1];
0058
0059 igcsr32 drammap;
0060 igcsr32 dramtm;
0061 igcsr32 dramms;
0062
0063 igcsr32 rsrvd3[1];
0064
0065 igcsr32 biu0;
0066 igcsr32 biusip;
0067
0068 igcsr32 rsrvd4[2];
0069
0070 igcsr32 mro;
0071
0072 igcsr32 rsrvd5[3];
0073
0074 igcsr32 whami;
0075 igcsr32 pciarb;
0076 igcsr32 pcicfg;
0077
0078 igcsr32 rsrvd6[4];
0079
0080 igcsr32 pci_mem;
0081
0082
0083
0084 igcsr32 agpcap;
0085 igcsr32 agpstat;
0086 igcsr32 agpcmd;
0087 igcsr32 agpva;
0088 igcsr32 agpmode;
0089 } Irongate0;
0090
0091
0092 typedef struct {
0093
0094 igcsr32 dev_vendor;
0095 igcsr32 stat_cmd;
0096 igcsr32 class;
0097 igcsr32 htype;
0098 igcsr32 rsrvd0[2];
0099 igcsr32 busnos;
0100 igcsr32 io_baselim_regs;
0101 igcsr32 mem_baselim;
0102 igcsr32 pfmem_baselim;
0103 igcsr32 rsrvd1[2];
0104 igcsr32 io_baselim;
0105 igcsr32 rsrvd2[2];
0106 igcsr32 interrupt;
0107
0108 } Irongate1;
0109
0110 extern igcsr32 *IronECC;
0111
0112
0113
0114
0115
0116
0117 #ifdef USE_48_BIT_KSEG
0118 #define IRONGATE_BIAS 0x80000000000UL
0119 #else
0120 #define IRONGATE_BIAS 0x10000000000UL
0121 #endif
0122
0123
0124 #define IRONGATE_MEM (IDENT_ADDR | IRONGATE_BIAS | 0x000000000UL)
0125 #define IRONGATE_IACK_SC (IDENT_ADDR | IRONGATE_BIAS | 0x1F8000000UL)
0126 #define IRONGATE_IO (IDENT_ADDR | IRONGATE_BIAS | 0x1FC000000UL)
0127 #define IRONGATE_CONF (IDENT_ADDR | IRONGATE_BIAS | 0x1FE000000UL)
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137 #define IGCSR(dev,fun,reg) ( IRONGATE_CONF | \
0138 ((dev)<<11) | \
0139 ((fun)<<8) | \
0140 (reg) )
0141
0142 #define IRONGATE0 ((Irongate0 *) IGCSR(0, 0, 0))
0143 #define IRONGATE1 ((Irongate1 *) IGCSR(1, 0, 0))
0144
0145
0146
0147
0148
0149
0150 #define SCB_Q_SYSERR 0x620
0151 #define SCB_Q_PROCERR 0x630
0152 #define SCB_Q_SYSMCHK 0x660
0153 #define SCB_Q_PROCMCHK 0x670
0154
0155 struct el_IRONGATE_sysdata_mcheck {
0156 __u32 FrameSize;
0157 __u32 FrameFlags;
0158 __u32 CpuOffset;
0159 __u32 SystemOffset;
0160 __u32 MCHK_Code;
0161 __u32 MCHK_Frame_Rev;
0162 __u64 I_STAT;
0163 __u64 DC_STAT;
0164 __u64 C_ADDR;
0165 __u64 DC1_SYNDROME;
0166 __u64 DC0_SYNDROME;
0167 __u64 C_STAT;
0168 __u64 C_STS;
0169 __u64 RESERVED0;
0170 __u64 EXC_ADDR;
0171 __u64 IER_CM;
0172 __u64 ISUM;
0173 __u64 MM_STAT;
0174 __u64 PAL_BASE;
0175 __u64 I_CTL;
0176 __u64 PCTX;
0177 };
0178
0179
0180 #ifdef __KERNEL__
0181
0182 #ifndef __EXTERN_INLINE
0183 #define __EXTERN_INLINE extern inline
0184 #define __IO_EXTERN_INLINE
0185 #endif
0186
0187
0188
0189
0190
0191
0192
0193
0194
0195
0196
0197
0198 __EXTERN_INLINE void __iomem *irongate_ioportmap(unsigned long addr)
0199 {
0200 return (void __iomem *)(addr + IRONGATE_IO);
0201 }
0202
0203 extern void __iomem *irongate_ioremap(unsigned long addr, unsigned long size);
0204 extern void irongate_iounmap(volatile void __iomem *addr);
0205
0206 __EXTERN_INLINE int irongate_is_ioaddr(unsigned long addr)
0207 {
0208 return addr >= IRONGATE_MEM;
0209 }
0210
0211 __EXTERN_INLINE int irongate_is_mmio(const volatile void __iomem *xaddr)
0212 {
0213 unsigned long addr = (unsigned long)xaddr;
0214 return addr < IRONGATE_IO || addr >= IRONGATE_CONF;
0215 }
0216
0217 #undef __IO_PREFIX
0218 #define __IO_PREFIX irongate
0219 #define irongate_trivial_rw_bw 1
0220 #define irongate_trivial_rw_lq 1
0221 #define irongate_trivial_io_bw 1
0222 #define irongate_trivial_io_lq 1
0223 #define irongate_trivial_iounmap 0
0224 #include <asm/io_trivial.h>
0225
0226 #ifdef __IO_EXTERN_INLINE
0227 #undef __EXTERN_INLINE
0228 #undef __IO_EXTERN_INLINE
0229 #endif
0230
0231 #endif
0232
0233 #endif