summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/radeon/radeon_screen.c
diff options
context:
space:
mode:
authorDave Airlie <airlied@linux.ie>2008-01-27 12:16:06 +1000
committerDave Airlie <airlied@linux.ie>2008-01-27 12:16:06 +1000
commit3bfef648000e544a3505feea5bda7aa9f184f304 (patch)
treeee0cade80417f40a7f2bc8dbd7f68eb4fecfacfa /src/mesa/drivers/dri/radeon/radeon_screen.c
parentda60fd1291c9ab3bd898c80d9583d2041df6d0b7 (diff)
r300: add initial rs690 support to Mesa
The rs690 has an rs4xx style vertex-shader less 3D engine. It uses the new r500 output engine though. It also needs a new drm with rs690 support, which is just getting cleaned up.
Diffstat (limited to 'src/mesa/drivers/dri/radeon/radeon_screen.c')
-rw-r--r--src/mesa/drivers/dri/radeon/radeon_screen.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/mesa/drivers/dri/radeon/radeon_screen.c b/src/mesa/drivers/dri/radeon/radeon_screen.c
index f2af532834..b4c26be57e 100644
--- a/src/mesa/drivers/dri/radeon/radeon_screen.c
+++ b/src/mesa/drivers/dri/radeon/radeon_screen.c
@@ -362,6 +362,8 @@ radeonCreateScreen( __DRIscreenPrivate *sPriv )
RADEONDRIPtr dri_priv = (RADEONDRIPtr)sPriv->pDevPriv;
unsigned char *RADEONMMIO;
int i;
+ int ret;
+ uint32_t temp;
if (sPriv->devPrivSize != sizeof(RADEONDRIRec)) {
fprintf(stderr,"\nERROR! sizeof(RADEONDRIRec) does not match passed size from device driver\n");
@@ -684,6 +686,11 @@ radeonCreateScreen( __DRIscreenPrivate *sPriv )
fprintf(stderr, "Warning, xpress200 detected.\n");
break;
+ case PCI_CHIP_RS690_791E:
+ screen->chip_family = CHIP_FAMILY_RS690;
+ fprintf(stderr, "Warning, RS690 detected, 3D support is incomplete.\n");
+ break;
+
default:
fprintf(stderr, "unknown chip id 0x%x, can't guess.\n",
dri_priv->deviceID);
@@ -705,7 +712,19 @@ radeonCreateScreen( __DRIscreenPrivate *sPriv )
screen->cpp = dri_priv->bpp / 8;
screen->AGPMode = dri_priv->AGPMode;
- screen->fbLocation = ( INREG( RADEON_MC_FB_LOCATION ) & 0xffff ) << 16;
+ 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;
+ }
if ( sPriv->drm_version.minor >= 10 ) {
drm_radeon_setparam_t sp;