📄 radeon_screen.c
字号:
if ( drmMap( sPriv->fd, screen->mmio.handle, screen->mmio.size, &screen->mmio.map ) ) { FREE( screen ); __driUtilMessage("%s: drmMap failed\n", __FUNCTION__ ); return NULL; } RADEONMMIO = screen->mmio.map; screen->status.handle = dri_priv->statusHandle; screen->status.size = dri_priv->statusSize; if ( drmMap( sPriv->fd, screen->status.handle, screen->status.size, &screen->status.map ) ) { drmUnmap( screen->mmio.map, screen->mmio.size ); FREE( screen ); __driUtilMessage("%s: drmMap (2) failed\n", __FUNCTION__ ); return NULL; } screen->scratch = (__volatile__ u_int32_t *) ((GLubyte *)screen->status.map + RADEON_SCRATCH_REG_OFFSET); screen->buffers = drmMapBufs( sPriv->fd ); if ( !screen->buffers ) { drmUnmap( screen->status.map, screen->status.size ); drmUnmap( screen->mmio.map, screen->mmio.size ); FREE( screen ); __driUtilMessage("%s: drmMapBufs failed\n", __FUNCTION__ ); return NULL; } if ( dri_priv->gartTexHandle && dri_priv->gartTexMapSize ) { screen->gartTextures.handle = dri_priv->gartTexHandle; screen->gartTextures.size = dri_priv->gartTexMapSize; if ( drmMap( sPriv->fd, screen->gartTextures.handle, screen->gartTextures.size, (drmAddressPtr)&screen->gartTextures.map ) ) { drmUnmapBufs( screen->buffers ); drmUnmap( screen->status.map, screen->status.size ); drmUnmap( screen->mmio.map, screen->mmio.size ); FREE( screen ); __driUtilMessage("%s: drmMap failed for GART texture area\n", __FUNCTION__); return NULL; } screen->gart_texture_offset = dri_priv->gartTexOffset + screen->gart_base; } screen->chip_flags = 0; /* XXX: add more chipsets */ switch ( dri_priv->deviceID ) { case PCI_CHIP_RADEON_LY: case PCI_CHIP_RADEON_LZ: case PCI_CHIP_RADEON_QY: case PCI_CHIP_RADEON_QZ: case PCI_CHIP_RN50_515E: case PCI_CHIP_RN50_5969: screen->chip_family = CHIP_FAMILY_RV100; break; case PCI_CHIP_RS100_4136: case PCI_CHIP_RS100_4336: screen->chip_family = CHIP_FAMILY_RS100; break; case PCI_CHIP_RS200_4137: case PCI_CHIP_RS200_4337: case PCI_CHIP_RS250_4237: case PCI_CHIP_RS250_4437: screen->chip_family = CHIP_FAMILY_RS200; break; case PCI_CHIP_RADEON_QD: case PCI_CHIP_RADEON_QE: case PCI_CHIP_RADEON_QF: case PCI_CHIP_RADEON_QG: /* all original radeons (7200) presumably have a stencil op bug */ screen->chip_family = CHIP_FAMILY_R100; screen->chip_flags = RADEON_CHIPSET_TCL | RADEON_CHIPSET_BROKEN_STENCIL; break; case PCI_CHIP_RV200_QW: case PCI_CHIP_RV200_QX: case PCI_CHIP_RADEON_LW: case PCI_CHIP_RADEON_LX: screen->chip_family = CHIP_FAMILY_RV200; screen->chip_flags = RADEON_CHIPSET_TCL; break; case PCI_CHIP_R200_BB: case PCI_CHIP_R200_BC: case PCI_CHIP_R200_QH: case PCI_CHIP_R200_QL: case PCI_CHIP_R200_QM: screen->chip_family = CHIP_FAMILY_R200; screen->chip_flags = RADEON_CHIPSET_TCL; break; case PCI_CHIP_RV250_If: case PCI_CHIP_RV250_Ig: case PCI_CHIP_RV250_Ld: case PCI_CHIP_RV250_Lf: case PCI_CHIP_RV250_Lg: screen->chip_family = CHIP_FAMILY_RV250; screen->chip_flags = R200_CHIPSET_YCBCR_BROKEN | RADEON_CHIPSET_TCL; break; case PCI_CHIP_RV280_5960: case PCI_CHIP_RV280_5961: case PCI_CHIP_RV280_5962: case PCI_CHIP_RV280_5964: case PCI_CHIP_RV280_5965: case PCI_CHIP_RV280_5C61: case PCI_CHIP_RV280_5C63: screen->chip_family = CHIP_FAMILY_RV280; screen->chip_flags = RADEON_CHIPSET_TCL; break; case PCI_CHIP_RS300_5834: case PCI_CHIP_RS300_5835: case PCI_CHIP_RS350_7834: case PCI_CHIP_RS350_7835: screen->chip_family = CHIP_FAMILY_RS300; break; /* 9500 with 1 pipe verified by: Reid Linnemann <lreid@cs.okstate.edu> */ case PCI_CHIP_R300_AD: screen->chip_family = CHIP_FAMILY_RV350; screen->chip_flags = RADEON_CHIPSET_TCL; break; case PCI_CHIP_R300_AE: case PCI_CHIP_R300_AF: case PCI_CHIP_R300_AG: case PCI_CHIP_R300_ND: case PCI_CHIP_R300_NE: case PCI_CHIP_R300_NF: case PCI_CHIP_R300_NG: screen->chip_family = CHIP_FAMILY_R300; screen->chip_flags = RADEON_CHIPSET_TCL; break; case PCI_CHIP_RV350_AP: case PCI_CHIP_RV350_AQ: case PCI_CHIP_RV350_AR: case PCI_CHIP_RV350_AS: case PCI_CHIP_RV350_AT: case PCI_CHIP_RV350_AV: case PCI_CHIP_RV350_AU: case PCI_CHIP_RV350_NP: case PCI_CHIP_RV350_NQ: case PCI_CHIP_RV350_NR: case PCI_CHIP_RV350_NS: case PCI_CHIP_RV350_NT: case PCI_CHIP_RV350_NV: screen->chip_family = CHIP_FAMILY_RV350; screen->chip_flags = RADEON_CHIPSET_TCL; break; case PCI_CHIP_R350_AH: case PCI_CHIP_R350_AI: case PCI_CHIP_R350_AJ: case PCI_CHIP_R350_AK: case PCI_CHIP_R350_NH: case PCI_CHIP_R350_NI: case PCI_CHIP_R360_NJ: case PCI_CHIP_R350_NK: screen->chip_family = CHIP_FAMILY_R350; screen->chip_flags = RADEON_CHIPSET_TCL; break; case PCI_CHIP_RV370_5460: case PCI_CHIP_RV370_5462: case PCI_CHIP_RV370_5464: case PCI_CHIP_RV370_5B60: case PCI_CHIP_RV370_5B62: case PCI_CHIP_RV370_5B63: case PCI_CHIP_RV370_5B64: case PCI_CHIP_RV370_5B65: case PCI_CHIP_RV380_3150: case PCI_CHIP_RV380_3152: case PCI_CHIP_RV380_3154: case PCI_CHIP_RV380_3E50: case PCI_CHIP_RV380_3E54: screen->chip_family = CHIP_FAMILY_RV380; screen->chip_flags = RADEON_CHIPSET_TCL; break; case PCI_CHIP_R420_JN: case PCI_CHIP_R420_JH: case PCI_CHIP_R420_JI: case PCI_CHIP_R420_JJ: case PCI_CHIP_R420_JK: case PCI_CHIP_R420_JL: case PCI_CHIP_R420_JM: case PCI_CHIP_R420_JO: case PCI_CHIP_R420_JP: case PCI_CHIP_R420_JT: case PCI_CHIP_R481_4B49: case PCI_CHIP_R481_4B4A: case PCI_CHIP_R481_4B4B: case PCI_CHIP_R481_4B4C: case PCI_CHIP_R423_UH: case PCI_CHIP_R423_UI: case PCI_CHIP_R423_UJ: case PCI_CHIP_R423_UK: case PCI_CHIP_R430_554C: case PCI_CHIP_R430_554D: case PCI_CHIP_R430_554E: case PCI_CHIP_R430_554F: case PCI_CHIP_R423_5550: case PCI_CHIP_R423_UQ: case PCI_CHIP_R423_UR: case PCI_CHIP_R423_UT: case PCI_CHIP_R430_5D48: case PCI_CHIP_R430_5D49: case PCI_CHIP_R430_5D4A: case PCI_CHIP_R480_5D4C: case PCI_CHIP_R480_5D4D: case PCI_CHIP_R480_5D4E: case PCI_CHIP_R480_5D4F: case PCI_CHIP_R480_5D50: case PCI_CHIP_R480_5D52: case PCI_CHIP_R423_5D57: screen->chip_family = CHIP_FAMILY_R420; screen->chip_flags = RADEON_CHIPSET_TCL; break; case PCI_CHIP_RV410_5E4C: case PCI_CHIP_RV410_5E4F: case PCI_CHIP_RV410_564A: case PCI_CHIP_RV410_564B: case PCI_CHIP_RV410_564F: case PCI_CHIP_RV410_5652: case PCI_CHIP_RV410_5653: case PCI_CHIP_RV410_5657: case PCI_CHIP_RV410_5E48: case PCI_CHIP_RV410_5E4A: case PCI_CHIP_RV410_5E4B: case PCI_CHIP_RV410_5E4D: screen->chip_family = CHIP_FAMILY_RV410; screen->chip_flags = RADEON_CHIPSET_TCL; break; case PCI_CHIP_RS480_5954: case PCI_CHIP_RS480_5955: case PCI_CHIP_RS482_5974: case PCI_CHIP_RS482_5975: case PCI_CHIP_RS400_5A41: case PCI_CHIP_RS400_5A42: case PCI_CHIP_RC410_5A61: case PCI_CHIP_RC410_5A62: screen->chip_family = CHIP_FAMILY_RS400; break; case PCI_CHIP_RS690_791E: case PCI_CHIP_RS690_791F: screen->chip_family = CHIP_FAMILY_RS690; break; case PCI_CHIP_RS740_796C: case PCI_CHIP_RS740_796D: case PCI_CHIP_RS740_796E: case PCI_CHIP_RS740_796F: screen->chip_family = CHIP_FAMILY_RS740; break; case PCI_CHIP_R520_7100: case PCI_CHIP_R520_7101: case PCI_CHIP_R520_7102: case PCI_CHIP_R520_7103: case PCI_CHIP_R520_7104: case PCI_CHIP_R520_7105: case PCI_CHIP_R520_7106: case PCI_CHIP_R520_7108: case PCI_CHIP_R520_7109: case PCI_CHIP_R520_710A: case PCI_CHIP_R520_710B: case PCI_CHIP_R520_710C: case PCI_CHIP_R520_710E: case PCI_CHIP_R520_710F: screen->chip_family = CHIP_FAMILY_R520; screen->chip_flags = RADEON_CHIPSET_TCL; break; case PCI_CHIP_RV515_7140: case PCI_CHIP_RV515_7141: case PCI_CHIP_RV515_7142: case PCI_CHIP_RV515_7143: case PCI_CHIP_RV515_7144: case PCI_CHIP_RV515_7145: case PCI_CHIP_RV515_7146: case PCI_CHIP_RV515_7147: case PCI_CHIP_RV515_7149: case PCI_CHIP_RV515_714A: case PCI_CHIP_RV515_714B: case PCI_CHIP_RV515_714C: case PCI_CHIP_RV515_714D: case PCI_CHIP_RV515_714E: case PCI_CHIP_RV515_714F: case PCI_CHIP_RV515_7151: case PCI_CHIP_RV515_7152: case PCI_CHIP_RV515_7153: case PCI_CHIP_RV515_715E: case PCI_CHIP_RV515_715F: case PCI_CHIP_RV515_7180: case PCI_CHIP_RV515_7181: case PCI_CHIP_RV515_7183: case PCI_CHIP_RV515_7186: case PCI_CHIP_RV515_7187: case PCI_CHIP_RV515_7188: case PCI_CHIP_RV515_718A: case PCI_CHIP_RV515_718B: case PCI_CHIP_RV515_718C: case PCI_CHIP_RV515_718D: case PCI_CHIP_RV515_718F: case PCI_CHIP_RV515_7193: case PCI_CHIP_RV515_7196: case PCI_CHIP_RV515_719B: case PCI_CHIP_RV515_719F: case PCI_CHIP_RV515_7200: case PCI_CHIP_RV515_7210: case PCI_CHIP_RV515_7211: screen->chip_family = CHIP_FAMILY_RV515; screen->chip_flags = RADEON_CHIPSET_TCL; break; case PCI_CHIP_RV530_71C0: case PCI_CHIP_RV530_71C1: case PCI_CHIP_RV530_71C2: case PCI_CHIP_RV530_71C3: case PCI_CHIP_RV530_71C4: case PCI_CHIP_RV530_71C5: case PCI_CHIP_RV530_71C6: case PCI_CHIP_RV530_71C7: case PCI_CHIP_RV530_71CD: case PCI_CHIP_RV530_71CE: case PCI_CHIP_RV530_71D2: case PCI_CHIP_RV530_71D4: case PCI_CHIP_RV530_71D5: case PCI_CHIP_RV530_71D6: case PCI_CHIP_RV530_71DA: case PCI_CHIP_RV530_71DE: screen->chip_family = CHIP_FAMILY_RV530; screen->chip_flags = RADEON_CHIPSET_TCL; break; case PCI_CHIP_R580_7240: case PCI_CHIP_R580_7243: case PCI_CHIP_R580_7244: case PCI_CHIP_R580_7245: case PCI_CHIP_R580_7246: case PCI_CHIP_R580_7247: case PCI_CHIP_R580_7248: case PCI_CHIP_R580_7249: case PCI_CHIP_R580_724A: case PCI_CHIP_R580_724B: case PCI_CHIP_R580_724C: case PCI_CHIP_R580_724D: case PCI_CHIP_R580_724E: case PCI_CHIP_R580_724F: case PCI_CHIP_R580_7284: screen->chip_family = CHIP_FAMILY_R580; screen->chip_flags = RADEON_CHIPSET_TCL; break; case PCI_CHIP_RV570_7280: case PCI_CHIP_RV560_7281: case PCI_CHIP_RV560_7283: case PCI_CHIP_RV560_7287: case PCI_CHIP_RV570_7288: case PCI_CHIP_RV570_7289: case PCI_CHIP_RV570_728B: case PCI_CHIP_RV570_728C: case PCI_CHIP_RV560_7290: case PCI_CHIP_RV560_7291: case PCI_CHIP_RV560_7293: case PCI_CHIP_RV560_7297: screen->chip_family = CHIP_FAMILY_RV560; screen->chip_flags = RADEON_CHIPSET_TCL; break; default: fprintf(stderr, "unknown chip id 0x%x, can't guess.\n", dri_priv->deviceID); return NULL; } if ((screen->chip_family == CHIP_FAMILY_R350 || screen->chip_family == CHIP_FAMILY_R300) && sPriv->ddx_version.minor < 2) { fprintf(stderr, "xf86-video-ati-6.6.2 or newer needed for Radeon 9500/9700/9800 cards.\n"); return NULL; } if ((sPriv->drm_version.minor < 29) && (screen->chip_family >= CHIP_FAMILY_RV515)) { fprintf(stderr, "R500 support requires a newer drm.\n"); return NULL; } if (getenv("R300_NO_TCL")) screen->chip_flags &= ~RADEON_CHIPSET_TCL; if (screen->chip_family <= CHIP_FAMILY_RS200) screen->chip_flags |= RADEON_CLASS_R100; else if (screen->chip_family <= CHIP_FAMILY_RV280) screen->chip_flags |= RADEON_CLASS_R200; else screen->chip_flags |= RADEON_CLASS_R300; screen->cpp = dri_priv->bpp / 8; screen->AGPMode = dri_priv->AGPMode; ret = radeonGetParam( sPriv->fd, RADEON_PARAM_FB_LOCATION, &temp); if (ret) { if (screen->chip_family < CHIP_FAMILY_RS690) screen->fbLocation = ( INREG( RADEON_MC_FB_LOCATION ) & 0xffff) << 16; else { FREE( screen ); fprintf(stderr, "Unable to get fb location need newer drm\n"); return NULL; } } else { screen->fbLocation = (temp & 0xffff) << 16; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -