1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22 /* 23 * Copyright (c) 2009, Intel Corporation. 24 * All Rights Reserved. 25 */ 26 27 /* 28 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 29 * Use is subject to license terms. 30 */ 31 32 #ifndef _SYS_AGPDEFS_H 33 #define _SYS_AGPDEFS_H 34 35 #ifdef __cplusplus 36 extern "C" { 37 #endif 38 39 /* 40 * This AGP memory type is required by some hardware like i810 video 41 * card, which need physical contiguous pages to setup hardware cursor. 42 * Usually, several tens of kilo bytes are needed in this case. 43 * We use DDI DMA interfaces to allocate such memory in agpgart driver, 44 * and it can not be exported to user applications directly by calling mmap 45 * on agpgart driver. The typical usage scenario is as the following: 46 * Firstly, Xserver get the memory physical address by calling AGPIOC_ALLOCATE 47 * on agpgart driver. Secondly, Xserver use the physical address to mmap 48 * the memory to Xserver space area by xsvc driver. 49 * 50 */ 51 #define AGP_PHYSICAL 2 /* Only used for i810, HW curosr */ 52 53 #ifdef _KERNEL 54 55 /* AGP space units */ 56 #define AGP_PAGE_SHIFT 12 57 #define AGP_PAGE_SIZE (1 << AGP_PAGE_SHIFT) 58 #define AGP_PAGE_OFFSET (AGP_PAGE_SIZE - 1) 59 #define AGP_MB2PAGES(x) ((x) << 8) 60 #define AGP_PAGES2BYTES(x) ((x) << AGP_PAGE_SHIFT) 61 #define AGP_BYTES2PAGES(x) ((x) >> AGP_PAGE_SHIFT) 62 #define AGP_PAGES2KB(x) ((x) << 2) 63 #define AGP_ALIGNED(offset) (((offset) & AGP_PAGE_OFFSET) == 0) 64 65 /* stand pci register offset */ 66 #define PCI_CONF_CAP_MASK 0x10 67 #define PCI_CONF_CAPID_MASK 0xff 68 #define PCI_CONF_NCAPID_MASK 0xff00 69 70 #define INTEL_VENDOR_ID 0x8086 71 #define AMD_VENDOR_ID 0x1022 72 #define VENDOR_ID_MASK 0xffff 73 74 /* macros for device types */ 75 #define DEVICE_IS_I810 11 /* intel i810 series video card */ 76 #define DEVICE_IS_I830 12 /* intel i830, i845, i855 series */ 77 #define DEVICE_IS_AGP 21 /* external AGP video card */ 78 #define CHIP_IS_INTEL 10 /* intel agp bridge */ 79 #define CHIP_IS_AMD 20 /* amd agp bridge */ 80 81 /* AGP bridge device id */ 82 #define AMD_BR_8151 0x74541022 83 #define INTEL_BR_810 0x71208086 84 #define INTEL_BR_810DC 0x71228086 85 #define INTEL_BR_810E 0x71248086 86 #define INTEL_BR_815 0x11308086 /* include 815G/EG/P/EP */ 87 #define INTEL_BR_830M 0x35758086 88 #define INTEL_BR_845 0x25608086 /* include 845G/P */ 89 #define INTEL_BR_855GM 0x35808086 /* include 852GM/PM */ 90 #define INTEL_BR_855PM 0x33408086 91 #define INTEL_BR_865 0x25708086 92 #define INTEL_BR_915 0x25808086 93 #define INTEL_BR_915GM 0x25908086 94 #define INTEL_BR_945 0x27708086 95 #define INTEL_BR_945GM 0x27a08086 96 #define INTEL_BR_945GME 0x27ac8086 97 #define INTEL_BR_946GZ 0x29708086 98 #define INTEL_BR_965G1 0x29808086 99 #define INTEL_BR_965Q 0x29908086 100 #define INTEL_BR_965G2 0x29a08086 101 #define INTEL_BR_965GM 0x2a008086 102 #define INTEL_BR_965GME 0x2a108086 103 #define INTEL_BR_Q35 0x29b08086 104 #define INTEL_BR_G33 0x29c08086 105 #define INTEL_BR_Q33 0x29d08086 106 #define INTEL_BR_GM45 0x2a408086 107 #define INTEL_BR_EL 0x2e008086 108 #define INTEL_BR_Q45 0x2e108086 109 #define INTEL_BR_G45 0x2e208086 110 #define INTEL_BR_G41 0x2e308086 111 #define INTEL_BR_IGDNG_D 0x00408086 112 #define INTEL_BR_IGDNG_M 0x00448086 113 #define INTEL_BR_IGDNG_MA 0x00628086 114 #define INTEL_BR_IGDNG_MC2 0x006a8086 115 #define INTEL_BR_B43 0x2e408086 116 117 /* AGP common register offset in pci configuration space */ 118 #define AGP_CONF_MISC 0x51 /* one byte */ 119 #define AGP_CONF_CAPPTR 0x34 120 #define AGP_CONF_APERBASE 0x10 121 #define AGP_CONF_STATUS 0x04 /* CAP + 0x4 */ 122 #define AGP_CONF_COMMAND 0x08 /* CAP + 0x8 */ 123 124 /* AGP target register and mask defines */ 125 #define AGP_CONF_CONTROL 0x10 /* CAP + 0x10 */ 126 #define AGP_TARGET_BAR1 1 127 #define AGP_32_APERBASE_MASK 0xffc00000 /* 4M aligned */ 128 #define AGP_64_APERBASE_MASK 0xffffc00000LL /* 4M aligned */ 129 #define AGP_CONF_APERSIZE 0x14 /* CAP + 0x14 */ 130 #define AGP_CONF_ATTBASE 0x18 /* CAP + 0x18 */ 131 #define AGP_ATTBASE_MASK 0xfffff000 132 #define AGPCTRL_GTLBEN (0x1 << 7) 133 #define AGP_APER_TYPE_MASK 0x4 134 #define AGP_APER_SIZE_MASK 0xf00 135 #define AGP_APER_128M_MASK 0x3f 136 #define AGP_APER_4G_MASK 0xf00 137 #define AGP_APER_4M 0x3f 138 #define AGP_APER_8M 0x3e 139 #define AGP_APER_16M 0x3c 140 #define AGP_APER_32M 0x38 141 #define AGP_APER_64M 0x30 142 #define AGP_APER_128M 0x20 143 #define AGP_APER_256M 0xf00 144 #define AGP_APER_512M 0xe00 145 #define AGP_APER_1024M 0xc00 146 #define AGP_APER_2048M 0x800 147 #define AGP_APER_4G 0x000 148 #define AGP_MISC_APEN 0x2 149 150 /* AGP gart table definition */ 151 #define AGP_ENTRY_VALID 0x1 152 153 /* AGP term definitions */ 154 #define AGP_CAP_ID 0x2 155 #define AGP_CAP_OFF_DEF 0xa0 156 157 /* Intel integrated video card, chipset id */ 158 #define INTEL_IGD_810 0x71218086 159 #define INTEL_IGD_810DC 0x71238086 160 #define INTEL_IGD_810E 0x71258086 161 #define INTEL_IGD_815 0x11328086 162 #define INTEL_IGD_830M 0x35778086 163 #define INTEL_IGD_845G 0x25628086 164 #define INTEL_IGD_855GM 0x35828086 165 #define INTEL_IGD_865G 0x25728086 166 #define INTEL_IGD_915 0x25828086 167 #define INTEL_IGD_915GM 0x25928086 168 #define INTEL_IGD_945 0x27728086 169 #define INTEL_IGD_945GM 0x27a28086 170 #define INTEL_IGD_945GME 0x27ae8086 171 #define INTEL_IGD_946GZ 0x29728086 172 #define INTEL_IGD_965G1 0x29828086 173 #define INTEL_IGD_965Q 0x29928086 174 #define INTEL_IGD_965G2 0x29a28086 175 #define INTEL_IGD_965GM 0x2a028086 176 #define INTEL_IGD_965GME 0x2a128086 177 #define INTEL_IGD_Q35 0x29b28086 178 #define INTEL_IGD_G33 0x29c28086 179 #define INTEL_IGD_Q33 0x29d28086 180 #define INTEL_IGD_GM45 0x2a428086 181 #define INTEL_IGD_EL 0x2e028086 182 #define INTEL_IGD_Q45 0x2e128086 183 #define INTEL_IGD_G45 0x2e228086 184 #define INTEL_IGD_G41 0x2e328086 185 #define INTEL_IGD_IGDNG_D 0x00428086 186 #define INTEL_IGD_IGDNG_M 0x00468086 187 #define INTEL_IGD_B43 0x2e428086 188 189 /* Intel 915 and 945 series */ 190 #define IS_INTEL_915(device) ((device == INTEL_IGD_915) || \ 191 (device == INTEL_IGD_915GM) || \ 192 (device == INTEL_IGD_945) || \ 193 (device == INTEL_IGD_945GM) || \ 194 (device == INTEL_IGD_945GME)) 195 196 /* Intel 965 series */ 197 #define IS_INTEL_965(device) ((device == INTEL_IGD_946GZ) || \ 198 (device == INTEL_IGD_965G1) || \ 199 (device == INTEL_IGD_965Q) || \ 200 (device == INTEL_IGD_965G2) || \ 201 (device == INTEL_IGD_965GM) || \ 202 (device == INTEL_IGD_965GME) || \ 203 (device == INTEL_IGD_GM45) || \ 204 IS_INTEL_G4X(device)) 205 206 /* Intel G33 series */ 207 #define IS_INTEL_X33(device) ((device == INTEL_IGD_Q35) || \ 208 (device == INTEL_IGD_G33) || \ 209 (device == INTEL_IGD_Q33)) 210 211 /* IGDNG */ 212 #define IS_IGDNG(device) ((device == INTEL_IGD_IGDNG_D) || \ 213 (device == INTEL_IGD_IGDNG_M)) 214 215 /* Intel G4X series */ 216 #define IS_INTEL_G4X(device) ((device == INTEL_IGD_EL) || \ 217 (device == INTEL_IGD_Q45) || \ 218 (device == INTEL_IGD_G45) || \ 219 (device == INTEL_IGD_G41) || \ 220 IS_IGDNG(device) || \ 221 (device == INTEL_IGD_B43)) 222 223 /* register offsets in PCI config space */ 224 #define I8XX_CONF_GMADR 0x10 /* GMADR of i8xx series */ 225 #define I915_CONF_GMADR 0x18 /* GMADR of i915 series */ 226 /* (Mirror) GMCH Graphics Control Register (GGC, MGGC) */ 227 #define I8XX_CONF_GC 0x52 228 229 /* Intel integrated video card graphics mode mask */ 230 #define I8XX_GC_MODE_MASK 0x70 231 #define IX33_GC_MODE_MASK 0xf0 232 /* GTT Graphics Memory Size (9:8) in GMCH Graphics Control Register */ 233 #define IX33_GGMS_MASK 0x300 234 /* No VT mode, 1MB allocated for GTT */ 235 #define IX33_GGMS_1M 0x100 236 /* VT mode, 2MB allocated for GTT */ 237 #define IX33_GGMS_2M 0x200 238 239 /* Intel integrated video card GTT definition */ 240 #define GTT_PAGE_SHIFT 12 241 #define GTT_PAGE_SIZE (1 << GTT_PAGE_SHIFT) 242 #define GTT_PAGE_OFFSET (GTT_PAGE_SIZE - 1) 243 #define GTT_PTE_MASK (~GTT_PAGE_OFFSET) 244 #define GTT_PTE_VALID 0x1 245 #define GTT_TABLE_VALID 0x1 246 #define GTT_BASE_MASK 0xfffff000 247 #define GTT_MB_TO_PAGES(m) ((m) << 8) 248 #define GTT_POINTER_MASK 0xffffffff00000000 249 250 /* Intel i810 register offset */ 251 #define I810_POINTER_MASK 0xffffffffc0000000 252 #define I810_CONF_SMRAM 0x70 /* offset in PCI config space */ 253 #define I810_GMS_MASK 0xc0 /* smram register mask */ 254 /* 255 * GART and GTT entry format table 256 * 257 * AMD64 GART entry 258 * from bios and kernel develop guide for amd64 259 * ----------------------------- 260 * Bits Description | 261 * 0 valid | 262 * 1 coherent | 263 * 3:2 reserved | 264 * 11:4 physaddr[39:32] | 265 * 31:12 physaddr[31:12] | 266 * ----------------------------- 267 * Intel GTT entry 268 * Intel video programming manual 269 * ----------------------------- 270 * Bits descrition | 271 * 0 valid | 272 * 2:1 memory type | 273 * 29:12 PhysAddr[29:12] | 274 * 31:30 reserved | 275 * ----------------------------- 276 * AGP entry 277 * from AGP protocol 3.0 278 * ----------------------------- 279 * Bits descrition | 280 * 0 valid | 281 * 1 coherent | 282 * 3:2 reserved | 283 * 11:4 PhysAddr[39:32] | 284 * 31:12 PhysAddr[31:12] | 285 * 63:32 PhysAddr[71:40] | 286 * ----------------------------- 287 */ 288 289 /* 290 * gart and gtt table base register format 291 * 292 * AMD64 register format 293 * from bios and kernel develop guide for AMD64 294 * --------------------------------------------- 295 * Bits Description | 296 * 3:0 reserved | 297 * 31:4 physical addr 39:12 | 298 * ---------------------------------------------- 299 * INTEL AGPGART table base register format 300 * from AGP protocol 3.0 p142, only support 32 bits 301 * --------------------------------------------- 302 * Bits Description | 303 * 11:0 reserved | 304 * 31:12 physical addr 31:12 | 305 * 63:32 physical addr 63:32 | 306 * --------------------------------------------- 307 * INTEL i810 GTT table base register format 308 * _____________________________________________ 309 * Bits Description | 310 * 0 GTT table enable bit | 311 * 11:1 reserved | 312 * 31:12 physical addr 31:12 | 313 * --------------------------------------------- 314 */ 315 316 /* Intel agp bridge specific */ 317 #define AGP_INTEL_POINTER_MASK 0xffffffff00000000 318 319 /* Amd64 cpu gart device reigster offset */ 320 #define AMD64_APERTURE_CONTROL 0x90 321 #define AMD64_APERTURE_BASE 0x94 322 #define AMD64_GART_CACHE_CTL 0x9c 323 #define AMD64_GART_BASE 0x98 324 325 /* Amd64 cpu gart bits */ 326 #define AMD64_APERBASE_SHIFT 25 327 #define AMD64_APERBASE_MASK 0x00007fff 328 #define AMD64_GARTBASE_SHIFT 8 329 #define AMD64_GARTBASE_MASK 0xfffffff0 330 #define AMD64_POINTER_MASK 0xffffff0000000000 331 #define AMD64_INVALID_CACHE 0x1 332 #define AMD64_GART_SHIFT 12 333 #define AMD64_RESERVE_SHIFT 4 334 #define AMD64_APERSIZE_MASK 0xe 335 #define AMD64_GARTEN 0x1 336 #define AMD64_DISGARTCPU 0x10 337 #define AMD64_DISGARTIO 0x20 338 #define AMD64_ENTRY_VALID 0x1 339 340 /* Other common routines */ 341 #define MB2BYTES(m) ((m) << 20) 342 #define BYTES2MB(m) ((m) >> 20) 343 #define GIGA_MASK 0xC0000000 344 #define UI32_MASK 0xffffffffU 345 #define MAXAPERMEGAS 0x1000 /* Aper size no more than 4G */ 346 #define MINAPERMEGAS 192 347 348 #endif /* _KERNEL */ 349 350 #ifdef __cplusplus 351 } 352 #endif 353 354 #endif /* _SYS_AGPDEFS_H */