diff options
Diffstat (limited to 'bsd/gamma_dma.c')
-rw-r--r-- | bsd/gamma_dma.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/bsd/gamma_dma.c b/bsd/gamma_dma.c index 20b29793..714554d2 100644 --- a/bsd/gamma_dma.c +++ b/bsd/gamma_dma.c @@ -567,3 +567,45 @@ int gamma_dma( DRM_IOCTL_ARGS ) return retcode; } + +void DRM(driver_irq_preinstall)(drm_device_t *dev) { + drm_gamma_private_t *dev_priv = + (drm_gamma_private_t *)dev->dev_private; +#if 1 + while(GAMMA_READ(GAMMA_INFIFOSPACE) < 2); + GAMMA_WRITE( GAMMA_GCOMMANDMODE, 0x00000004 ); + GAMMA_WRITE( GAMMA_GDMACONTROL, 0x00000000 ); +#else + while(GAMMA_READ(GAMMA_INFIFOSPACE) < 2); + while(GAMMA_READ(GAMMA_INFIFOSPACE) < 2); + GAMMA_WRITE( GAMMA_GCOMMANDMODE, GAMMA_QUEUED_DMA_MODE ); + GAMMA_WRITE( GAMMA_GDMACONTROL, 0x00000000 ); +#endif +} + +void DRM(driver_irq_postinstall)(drm_device_t *dev) { + drm_gamma_private_t *dev_priv = + (drm_gamma_private_t *)dev->dev_private; +#if 1 + while(GAMMA_READ(GAMMA_INFIFOSPACE) < 2); + while(GAMMA_READ(GAMMA_INFIFOSPACE) < 3); + GAMMA_WRITE( GAMMA_GINTENABLE, 0x00002001 ); + GAMMA_WRITE( GAMMA_COMMANDINTENABLE, 0x00000008 ); + GAMMA_WRITE( GAMMA_GDELAYTIMER, 0x00039090 ); +#else + while(GAMMA_READ(GAMMA_INFIFOSPACE) < 2); + while(GAMMA_READ(GAMMA_INFIFOSPACE) < 2); + GAMMA_WRITE( GAMMA_GINTENABLE, 0x00002000 ); + GAMMA_WRITE( GAMMA_COMMANDINTENABLE, 0x00000004 ); +#endif +} + +void DRM(driver_irq_uninstall)( drm_device_t *dev ) { + drm_gamma_private_t *dev_priv = + (drm_gamma_private_t *)dev->dev_private; + while(GAMMA_READ(GAMMA_INFIFOSPACE) < 2); + while(GAMMA_READ(GAMMA_INFIFOSPACE) < 3); + GAMMA_WRITE( GAMMA_GDELAYTIMER, 0x00000000 ); + GAMMA_WRITE( GAMMA_COMMANDINTENABLE, 0x00000000 ); + GAMMA_WRITE( GAMMA_GINTENABLE, 0x00000000 ); +} |