Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 | /* $Id$ * * This file is subject to the terms and conditions of the GNU General Public * License. See the file "COPYING" in the main directory of this archive * for more details. * * Copyright (C) 1992 - 1997, 2000 Silicon Graphics, Inc. * Copyright (C) 2000 by Colin Ngam */ #ifndef _ASM_SN_PCI_PCI_DEFS_H #define _ASM_SN_PCI_PCI_DEFS_H #include <linux/config.h> /* defines for the PCI bus architecture */ /* Bit layout of address fields for Type-1 * Configuration Space cycles. */ #define PCI_TYPE0_SLOT_MASK 0xFFFFF800 #define PCI_TYPE0_FUNC_MASK 0x00000700 #define PCI_TYPE0_REG_MASK 0x000000FF #define PCI_TYPE0_SLOT_SHFT 11 #define PCI_TYPE0_FUNC_SHFT 8 #define PCI_TYPE0_REG_SHFT 0 #define PCI_TYPE0_FUNC(a) (((a) & PCI_TYPE0_FUNC_MASK) >> PCI_TYPE0_FUNC_SHFT) #define PCI_TYPE0_REG(a) (((a) & PCI_TYPE0_REG_MASK) >> PCI_TYPE0_REG_SHFT) #define PCI_TYPE0(s,f,r) ((((1<<(s)) << PCI_TYPE0_SLOT_SHFT) & PCI_TYPE0_SLOT_MASK) |\ (((f) << PCI_TYPE0_FUNC_SHFT) & PCI_TYPE0_FUNC_MASK) |\ (((r) << PCI_TYPE0_REG_SHFT) & PCI_TYPE0_REG_MASK)) /* Bit layout of address fields for Type-1 * Configuration Space cycles. * NOTE: I'm including the byte offset within * the 32-bit word as part of the register * number as an extension of the layout in * the PCI spec. */ #define PCI_TYPE1_BUS_MASK 0x00FF0000 #define PCI_TYPE1_SLOT_MASK 0x0000F100 #define PCI_TYPE1_FUNC_MASK 0x00000700 #define PCI_TYPE1_REG_MASK 0x000000FF #define PCI_TYPE1_BUS_SHFT 16 #define PCI_TYPE1_SLOT_SHFT 11 #define PCI_TYPE1_FUNC_SHFT 8 #define PCI_TYPE1_REG_SHFT 0 #define PCI_TYPE1_BUS(a) (((a) & PCI_TYPE1_BUS_MASK) >> PCI_TYPE1_BUS_SHFT) #define PCI_TYPE1_SLOT(a) (((a) & PCI_TYPE1_SLOT_MASK) >> PCI_TYPE1_SLOT_SHFT) #define PCI_TYPE1_FUNC(a) (((a) & PCI_TYPE1_FUNC_MASK) >> PCI_TYPE1_FUNC_SHFT) #define PCI_TYPE1_REG(a) (((a) & PCI_TYPE1_REG_MASK) >> PCI_TYPE1_REG_SHFT) #define PCI_TYPE1(b,s,f,r) ((((b) << PCI_TYPE1_BUS_SHFT) & PCI_TYPE1_BUS_MASK) |\ (((s) << PCI_TYPE1_SLOT_SHFT) & PCI_TYPE1_SLOT_MASK) |\ (((f) << PCI_TYPE1_FUNC_SHFT) & PCI_TYPE1_FUNC_MASK) |\ (((r) << PCI_TYPE1_REG_SHFT) & PCI_TYPE1_REG_MASK)) /* Byte offsets of registers in CFG space */ #define PCI_CFG_VENDOR_ID 0x00 /* Vendor ID (2 bytes) */ #define PCI_CFG_DEVICE_ID 0x02 /* Device ID (2 bytes) */ #define PCI_CFG_COMMAND 0x04 /* Command (2 bytes) */ #define PCI_CFG_STATUS 0x06 /* Status (2 bytes) */ /* NOTE: if you are using a C "switch" statement to * differentiate between the Config space registers, be * aware that PCI_CFG_CLASS_CODE and PCI_CFG_BASE_CLASS * are the same offset. */ #define PCI_CFG_REV_ID 0x08 /* Revision Id (1 byte) */ #define PCI_CFG_CLASS_CODE 0x09 /* Class Code (3 bytes) */ #define PCI_CFG_BASE_CLASS 0x09 /* Base Class (1 byte) */ #define PCI_CFG_SUB_CLASS 0x0A /* Sub Class (1 byte) */ #define PCI_CFG_PROG_IF 0x0B /* Prog Interface (1 byte) */ #define PCI_CFG_CACHE_LINE 0x0C /* Cache line size (1 byte) */ #define PCI_CFG_LATENCY_TIMER 0x0D /* Latency Timer (1 byte) */ #define PCI_CFG_HEADER_TYPE 0x0E /* Header Type (1 byte) */ #define PCI_CFG_BIST 0x0F /* Built In Self Test */ #define PCI_CFG_BASE_ADDR_0 0x10 /* Base Address (4 bytes) */ #define PCI_CFG_BASE_ADDR_1 0x14 /* Base Address (4 bytes) */ #define PCI_CFG_BASE_ADDR_2 0x18 /* Base Address (4 bytes) */ #define PCI_CFG_BASE_ADDR_3 0x1C /* Base Address (4 bytes) */ #define PCI_CFG_BASE_ADDR_4 0x20 /* Base Address (4 bytes) */ #define PCI_CFG_BASE_ADDR_5 0x24 /* Base Address (4 bytes) */ #define PCI_CFG_BASE_ADDR_OFF 0x04 /* Base Address Offset (1..5)*/ #define PCI_CFG_BASE_ADDR(n) (PCI_CFG_BASE_ADDR_0 + (n)*PCI_CFG_BASE_ADDR_OFF) #define PCI_CFG_BASE_ADDRS 6 /* up to this many BASE regs */ #define PCI_CFG_CARDBUS_CIS 0x28 /* Cardbus CIS Pointer (4B) */ #define PCI_CFG_SUBSYS_VEND_ID 0x2C /* Subsystem Vendor ID (2B) */ #define PCI_CFG_SUBSYS_ID 0x2E /* Subsystem ID */ #define PCI_EXPANSION_ROM 0x30 /* Expansion Rom Base (4B) */ #define PCI_INTR_LINE 0x3C /* Interrupt Line (1B) */ #define PCI_INTR_PIN 0x3D /* Interrupt Pin (1B) */ #define PCI_MIN_GNT 0x3E /* Minimum Grant (1B) */ #define PCI_MAX_LAT 0x3F /* Maximum Latency (1B) */ #define PCI_CFG_VEND_SPECIFIC 0x40 /* first vendor specific reg */ /* layout for Type 0x01 headers */ #define PCI_CFG_PPB_BUS_PRI 0x18 /* immediate upstream bus # */ #define PCI_CFG_PPB_BUS_SEC 0x19 /* immediate downstream bus # */ #define PCI_CFG_PPB_BUS_SUB 0x1A /* last downstream bus # */ #define PCI_CFG_PPB_SEC_LAT 0x1B /* latency timer for SEC bus */ #define PCI_CFG_PPB_IOBASE 0x1C /* IO Base Addr bits 12..15 */ #define PCI_CFG_PPB_IOLIM 0x1D /* IO Limit Addr bits 12..15 */ #define PCI_CFG_PPB_SEC_STAT 0x1E /* Secondary Status */ #define PCI_CFG_PPB_MEMBASE 0x20 /* MEM Base Addr bits 16..31 */ #define PCI_CFG_PPB_MEMLIM 0x22 /* MEM Limit Addr bits 16..31 */ #define PCI_CFG_PPB_MEMPFBASE 0x24 /* PfMEM Base Addr bits 16..31 */ #define PCI_CFG_PPB_MEMPFLIM 0x26 /* PfMEM Limit Addr bits 16..31 */ #define PCI_CFG_PPB_MEMPFBASEHI 0x28 /* PfMEM Base Addr bits 32..63 */ #define PCI_CFG_PPB_MEMPFLIMHI 0x2C /* PfMEM Limit Addr bits 32..63 */ #define PCI_CFG_PPB_IOBASEHI 0x30 /* IO Base Addr bits 16..31 */ #define PCI_CFG_PPB_IOLIMHI 0x32 /* IO Limit Addr bits 16..31 */ #define PCI_CFG_PPB_SUB_VENDOR 0x34 /* Subsystem Vendor ID */ #define PCI_CFG_PPB_SUB_DEVICE 0x36 /* Subsystem Device ID */ #define PCI_CFG_PPB_INT_PIN 0x3D /* Interrupt Pin */ #define PCI_CFG_PPB_BRIDGE_CTRL 0x3E /* Bridge Control */ /* XXX- these might be DEC 21152 specific */ #define PCI_CFG_PPB_CHIP_CTRL 0x40 #define PCI_CFG_PPB_DIAG_CTRL 0x41 #define PCI_CFG_PPB_ARB_CTRL 0x42 #define PCI_CFG_PPB_SERR_DISABLE 0x64 #define PCI_CFG_PPB_CLK2_CTRL 0x68 #define PCI_CFG_PPB_SERR_STATUS 0x6A /* Command Register layout (0x04) */ #define PCI_CMD_IO_SPACE 0x001 /* I/O Space device */ #define PCI_CMD_MEM_SPACE 0x002 /* Memory Space */ #define PCI_CMD_BUS_MASTER 0x004 /* Bus Master */ #define PCI_CMD_SPEC_CYCLES 0x008 /* Special Cycles */ #define PCI_CMD_MEMW_INV_ENAB 0x010 /* Memory Write Inv Enable */ #define PCI_CMD_VGA_PALETTE_SNP 0x020 /* VGA Palette Snoop */ #define PCI_CMD_PAR_ERR_RESP 0x040 /* Parity Error Response */ #define PCI_CMD_WAIT_CYCLE_CTL 0x080 /* Wait Cycle Control */ #define PCI_CMD_SERR_ENABLE 0x100 /* SERR# Enable */ #define PCI_CMD_F_BK_BK_ENABLE 0x200 /* Fast Back-to-Back Enable */ /* Status Register Layout (0x06) */ #define PCI_STAT_PAR_ERR_DET 0x8000 /* Detected Parity Error */ #define PCI_STAT_SYS_ERR 0x4000 /* Signaled System Error */ #define PCI_STAT_RCVD_MSTR_ABT 0x2000 /* Received Master Abort */ #define PCI_STAT_RCVD_TGT_ABT 0x1000 /* Received Target Abort */ #define PCI_STAT_SGNL_TGT_ABT 0x0800 /* Signaled Target Abort */ #define PCI_STAT_DEVSEL_TIMING 0x0600 /* DEVSEL Timing Mask */ #define DEVSEL_TIMING(_x) (((_x) >> 9) & 3) /* devsel tim macro */ #define DEVSEL_FAST 0 /* Fast timing */ #define DEVSEL_MEDIUM 1 /* Medium timing */ #define DEVSEL_SLOW 2 /* Slow timing */ #define PCI_STAT_DATA_PAR_ERR 0x0100 /* Data Parity Err Detected */ #define PCI_STAT_F_BK_BK_CAP 0x0080 /* Fast Back-to-Back Capable */ #define PCI_STAT_UDF_SUPP 0x0040 /* UDF Supported */ #define PCI_STAT_66MHZ_CAP 0x0020 /* 66 MHz Capable */ /* BIST Register Layout (0x0F) */ #define PCI_BIST_BIST_CAP 0x80 /* BIST Capable */ #define PCI_BIST_START_BIST 0x40 /* Start BIST */ #define PCI_BIST_CMPLTION_MASK 0x0F /* COMPLETION MASK */ #define PCI_BIST_CMPL_OK 0x00 /* 0 value is completion OK */ /* Base Address Register 0x10 */ #define PCI_BA_IO_SPACE 0x1 /* I/O Space Marker */ #define PCI_BA_MEM_LOCATION 0x6 /* 2 bits for location avail */ #define PCI_BA_MEM_32BIT 0x0 /* Anywhere in 32bit space */ #define PCI_BA_MEM_1MEG 0x2 /* Locate below 1 Meg */ #define PCI_BA_MEM_64BIT 0x4 /* Anywhere in 64bit space */ #define PCI_BA_PREFETCH 0x8 /* Prefetchable, no side effect */ /* PIO interface macros */ #ifndef IOC3_EMULATION #define PCI_INB(x) (*((volatile char*)x)) #define PCI_INH(x) (*((volatile short*)x)) #define PCI_INW(x) (*((volatile int*)x)) #define PCI_OUTB(x,y) (*((volatile char*)x) = y) #define PCI_OUTH(x,y) (*((volatile short*)x) = y) #define PCI_OUTW(x,y) (*((volatile int*)x) = y) #else extern uint pci_read(void * address, int type); extern void pci_write(void * address, int data, int type); #define BYTE 1 #define HALF 2 #define WORD 4 #define PCI_INB(x) pci_read((void *)(x),BYTE) #define PCI_INH(x) pci_read((void *)(x),HALF) #define PCI_INW(x) pci_read((void *)(x),WORD) #define PCI_OUTB(x,y) pci_write((void *)(x),(y),BYTE) #define PCI_OUTH(x,y) pci_write((void *)(x),(y),HALF) #define PCI_OUTW(x,y) pci_write((void *)(x),(y),WORD) #endif /* !IOC3_EMULATION */ /* effects on reads, merges */ #ifdef CONFIG_SGI_IP22 #define BYTECOUNT_W_GIO 0xbf400000 #endif /* * Definition of address layouts for PCI Config mechanism #1 * XXX- These largely duplicate PCI_TYPE1 constants at the top * of the file; the two groups should probably be combined. */ #define CFG1_ADDR_REGISTER_MASK 0x000000fc #define CFG1_ADDR_FUNCTION_MASK 0x00000700 #define CFG1_ADDR_DEVICE_MASK 0x0000f800 #define CFG1_ADDR_BUS_MASK 0x00ff0000 #define CFG1_REGISTER_SHIFT 2 #define CFG1_FUNCTION_SHIFT 8 #define CFG1_DEVICE_SHIFT 11 #define CFG1_BUS_SHIFT 16 #ifdef CONFIG_SGI_IP32 /* Definitions related to IP32 PCI Bridge policy * XXX- should probaly be moved to a mace-specific header */ #define PCI_CONFIG_BITS 0xfe0085ff #define PCI_CONTROL_MRMRA_ENABLE 0x00000800 #define PCI_FIRST_IO_ADDR 0x1000 #define PCI_IO_MAP_INCR 0x1000 #endif /* CONFIG_SGI_IP32 */ #endif /* _ASM_SN_PCI_PCI_DEFS_H */ |