diff options
author | Michel Dänzer <michel@tungstengraphics.com> | 2007-03-20 09:13:24 +0100 |
---|---|---|
committer | Michel Dänzer <michel@tungstengraphics.com> | 2007-03-20 09:13:24 +0100 |
commit | 3cfa3a5c8daf03aaad6fc30d275709f6eb717d29 (patch) | |
tree | 54100f109258942afaad81d1e4cfcf7642a80202 /src | |
parent | e174d8df8c801fad95e5f79cff69187c200bee6e (diff) |
radeon: Unify code to release the CP.
Diffstat (limited to 'src')
-rw-r--r-- | src/radeon.h | 18 | ||||
-rw-r--r-- | src/radeon_dri.c | 16 |
2 files changed, 12 insertions, 22 deletions
diff --git a/src/radeon.h b/src/radeon.h index 5bb005b9..8d0115e9 100644 --- a/src/radeon.h +++ b/src/radeon.h @@ -964,6 +964,16 @@ do { \ info->CPStarted = TRUE; \ } while (0) +#define RADEONCP_RELEASE(pScrn, info) \ +do { \ + if (info->CPInUse) { \ + RADEON_PURGE_CACHE(); \ + RADEON_WAIT_UNTIL_IDLE(); \ + RADEONCPReleaseIndirect(pScrn); \ + info->CPInUse = FALSE; \ + } \ +} while (0) + #define RADEONCP_STOP(pScrn, info) \ do { \ int _ret; \ @@ -1128,14 +1138,6 @@ do { \ ADVANCE_RING(); \ } while (0) -#define RADEON_FLUSH_CACHE() \ -do { \ - BEGIN_RING(2); \ - OUT_RING(CP_PACKET0(RADEON_RB3D_DSTCACHE_CTLSTAT, 0)); \ - OUT_RING(RADEON_RB3D_DC_FLUSH); \ - ADVANCE_RING(); \ -} while (0) - #define RADEON_PURGE_CACHE() \ do { \ BEGIN_RING(2); \ diff --git a/src/radeon_dri.c b/src/radeon_dri.c index ee6192e9..7ebf958d 100644 --- a/src/radeon_dri.c +++ b/src/radeon_dri.c @@ -409,13 +409,7 @@ static void RADEONLeaveServer(ScreenPtr pScreen) /* The CP is always running, but if we've generated any CP commands * we must flush them to the kernel module now. */ - if (info->CPInUse) { - RADEON_FLUSH_CACHE(); - RADEON_WAIT_UNTIL_IDLE(); - RADEONCPReleaseIndirect(pScrn); - - info->CPInUse = FALSE; - } + RADEONCP_RELEASE(pScrn, info); #ifdef USE_EXA info->engineMode = EXA_ENGINEMODE_UNKNOWN; @@ -1703,13 +1697,7 @@ void RADEONDRIStop(ScreenPtr pScreen) /* If we've generated any CP commands, we must flush them to the * kernel module now. */ - if (info->CPInUse) { - RADEON_FLUSH_CACHE(); - RADEON_WAIT_UNTIL_IDLE(); - RADEONCPReleaseIndirect(pScrn); - - info->CPInUse = FALSE; - } + RADEONCP_RELEASE(pScrn, info); RADEONCP_STOP(pScrn, info); } info->directRenderingInited = FALSE; |