int r128_enable_vblank(struct drm_device *dev, int crtc) { drm_r128_private_t *dev_priv = dev->dev_private; if (crtc != 0) { DRM_ERROR("%s: bad crtc %d\n", __FUNCTION__, crtc); return -EINVAL; } R128_WRITE(R128_GEN_INT_CNTL, R128_CRTC_VBLANK_INT_EN); return 0; }
void r128_dma_service( DRM_IRQ_ARGS ) { drm_device_t *dev = (drm_device_t *) arg; drm_r128_private_t *dev_priv = (drm_r128_private_t *)dev->dev_private; int status; status = R128_READ( R128_GEN_INT_STATUS ); /* VBLANK interrupt */ if ( status & R128_CRTC_VBLANK_INT ) { R128_WRITE( R128_GEN_INT_STATUS, R128_CRTC_VBLANK_INT_AK ); atomic_inc(&dev->vbl_received); DRM_WAKEUP(&dev->vbl_queue); DRM(vbl_send_signals)( dev ); } }
irqreturn_t r128_driver_irq_handler(DRM_IRQ_ARGS) { struct drm_device *dev = (struct drm_device *) arg; drm_r128_private_t *dev_priv = (drm_r128_private_t *) dev->dev_private; int status; status = R128_READ(R128_GEN_INT_STATUS); /* VBLANK interrupt */ if (status & R128_CRTC_VBLANK_INT) { R128_WRITE(R128_GEN_INT_STATUS, R128_CRTC_VBLANK_INT_AK); atomic_inc(&dev_priv->vbl_received); drm_handle_vblank(dev, 0); return IRQ_HANDLED; } return IRQ_NONE; }
irqreturn_t r128_driver_irq_handler( DRM_IRQ_ARGS ) { drm_device_t *dev = (drm_device_t *) arg; drm_r128_private_t *dev_priv = (drm_r128_private_t *)dev->dev_private; int status; status = R128_READ( R128_GEN_INT_STATUS ); /* VBLANK interrupt */ if ( status & R128_CRTC_VBLANK_INT ) { R128_WRITE( R128_GEN_INT_STATUS, R128_CRTC_VBLANK_INT_AK ); atomic_inc(&dev->vbl_received); DRM_WAKEUP(&dev->vbl_queue); DRM(vbl_send_signals)( dev ); return IRQ_HANDLED; } return IRQ_NONE; }