.ring_test = &r100_ring_test,
                        .ib_test = &r100_ib_test,
                        .is_lockup = &r100_gpu_is_lockup,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                }
        },
        .irq = {
                        .ring_test = &r100_ring_test,
                        .ib_test = &r100_ib_test,
                        .is_lockup = &r100_gpu_is_lockup,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                }
        },
        .irq = {
                        .ring_test = &r100_ring_test,
                        .ib_test = &r100_ib_test,
                        .is_lockup = &r100_gpu_is_lockup,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                }
        },
        .irq = {
                        .ring_test = &r100_ring_test,
                        .ib_test = &r100_ib_test,
                        .is_lockup = &r100_gpu_is_lockup,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                }
        },
        .irq = {
                        .ring_test = &r100_ring_test,
                        .ib_test = &r100_ib_test,
                        .is_lockup = &r100_gpu_is_lockup,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                }
        },
        .irq = {
                        .ring_test = &r100_ring_test,
                        .ib_test = &r100_ib_test,
                        .is_lockup = &r100_gpu_is_lockup,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                }
        },
        .irq = {
                        .ring_test = &r100_ring_test,
                        .ib_test = &r100_ib_test,
                        .is_lockup = &r100_gpu_is_lockup,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                }
        },
        .irq = {
                        .ring_test = &r100_ring_test,
                        .ib_test = &r100_ib_test,
                        .is_lockup = &r100_gpu_is_lockup,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                }
        },
        .irq = {
                        .ring_test = &r100_ring_test,
                        .ib_test = &r100_ib_test,
                        .is_lockup = &r100_gpu_is_lockup,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                }
        },
        .irq = {
                        .ring_test = &r100_ring_test,
                        .ib_test = &r100_ib_test,
                        .is_lockup = &r100_gpu_is_lockup,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                }
        },
        .irq = {
                        .ring_test = &r600_ring_test,
                        .ib_test = &r600_ib_test,
                        .is_lockup = &r600_gfx_is_lockup,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                },
                [R600_RING_TYPE_DMA_INDEX] = {
                        .ib_execute = &r600_dma_ring_ib_execute,
                        .ring_test = &r600_dma_ring_test,
                        .ib_test = &r600_dma_ib_test,
                        .is_lockup = &r600_dma_is_lockup,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                }
        },
        .irq = {
                        .ring_test = &r600_ring_test,
                        .ib_test = &r600_ib_test,
                        .is_lockup = &r600_gfx_is_lockup,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                },
                [R600_RING_TYPE_DMA_INDEX] = {
                        .ib_execute = &r600_dma_ring_ib_execute,
                        .ring_test = &r600_dma_ring_test,
                        .ib_test = &r600_dma_ib_test,
                        .is_lockup = &r600_dma_is_lockup,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                }
        },
        .irq = {
                        .ring_test = &r600_ring_test,
                        .ib_test = &r600_ib_test,
                        .is_lockup = &r600_gfx_is_lockup,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                },
                [R600_RING_TYPE_DMA_INDEX] = {
                        .ib_execute = &r600_dma_ring_ib_execute,
                        .ring_test = &r600_dma_ring_test,
                        .ib_test = &r600_dma_ib_test,
                        .is_lockup = &r600_dma_is_lockup,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                },
                [R600_RING_TYPE_UVD_INDEX] = {
                        .ib_execute = &r600_uvd_ib_execute,
                        .ring_test = &r600_uvd_ring_test,
                        .ib_test = &r600_uvd_ib_test,
                        .is_lockup = &radeon_ring_test_lockup,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                }
        },
        .irq = {
                        .ring_test = &r600_ring_test,
                        .ib_test = &r600_ib_test,
                        .is_lockup = &evergreen_gfx_is_lockup,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                },
                [R600_RING_TYPE_DMA_INDEX] = {
                        .ib_execute = &evergreen_dma_ring_ib_execute,
                        .ring_test = &r600_dma_ring_test,
                        .ib_test = &r600_dma_ib_test,
                        .is_lockup = &evergreen_dma_is_lockup,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                },
                [R600_RING_TYPE_UVD_INDEX] = {
                        .ib_execute = &r600_uvd_ib_execute,
                        .ring_test = &r600_uvd_ring_test,
                        .ib_test = &r600_uvd_ib_test,
                        .is_lockup = &radeon_ring_test_lockup,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                }
        },
        .irq = {
                        .ring_test = &r600_ring_test,
                        .ib_test = &r600_ib_test,
                        .is_lockup = &evergreen_gfx_is_lockup,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                },
                [R600_RING_TYPE_DMA_INDEX] = {
                        .ib_execute = &evergreen_dma_ring_ib_execute,
                        .ring_test = &r600_dma_ring_test,
                        .ib_test = &r600_dma_ib_test,
                        .is_lockup = &evergreen_dma_is_lockup,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                },
                [R600_RING_TYPE_UVD_INDEX] = {
                        .ib_execute = &r600_uvd_ib_execute,
                        .ring_test = &r600_uvd_ring_test,
                        .ib_test = &r600_uvd_ib_test,
                        .is_lockup = &radeon_ring_test_lockup,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                }
        },
        .irq = {
                        .ring_test = &r600_ring_test,
                        .ib_test = &r600_ib_test,
                        .is_lockup = &evergreen_gfx_is_lockup,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                },
                [R600_RING_TYPE_DMA_INDEX] = {
                        .ib_execute = &evergreen_dma_ring_ib_execute,
                        .ring_test = &r600_dma_ring_test,
                        .ib_test = &r600_dma_ib_test,
                        .is_lockup = &evergreen_dma_is_lockup,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                },
                [R600_RING_TYPE_UVD_INDEX] = {
                        .ib_execute = &r600_uvd_ib_execute,
                        .ring_test = &r600_uvd_ring_test,
                        .ib_test = &r600_uvd_ib_test,
                        .is_lockup = &radeon_ring_test_lockup,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                }
        },
        .irq = {
                        .ib_test = &r600_ib_test,
                        .is_lockup = &cayman_gfx_is_lockup,
                        .vm_flush = &cayman_vm_flush,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                },
                [CAYMAN_RING_TYPE_CP1_INDEX] = {
                        .ib_execute = &cayman_ring_ib_execute,
                        .ib_test = &r600_ib_test,
                        .is_lockup = &cayman_gfx_is_lockup,
                        .vm_flush = &cayman_vm_flush,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                },
                [CAYMAN_RING_TYPE_CP2_INDEX] = {
                        .ib_execute = &cayman_ring_ib_execute,
                        .ib_test = &r600_ib_test,
                        .is_lockup = &cayman_gfx_is_lockup,
                        .vm_flush = &cayman_vm_flush,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                },
                [R600_RING_TYPE_DMA_INDEX] = {
                        .ib_execute = &cayman_dma_ring_ib_execute,
                        .ib_test = &r600_dma_ib_test,
                        .is_lockup = &cayman_dma_is_lockup,
                        .vm_flush = &cayman_dma_vm_flush,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                },
                [CAYMAN_RING_TYPE_DMA1_INDEX] = {
                        .ib_execute = &cayman_dma_ring_ib_execute,
                        .ib_test = &r600_dma_ib_test,
                        .is_lockup = &cayman_dma_is_lockup,
                        .vm_flush = &cayman_dma_vm_flush,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                },
                [R600_RING_TYPE_UVD_INDEX] = {
                        .ib_execute = &r600_uvd_ib_execute,
                        .ring_test = &r600_uvd_ring_test,
                        .ib_test = &r600_uvd_ib_test,
                        .is_lockup = &radeon_ring_test_lockup,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                }
        },
        .irq = {
                        .ib_test = &r600_ib_test,
                        .is_lockup = &cayman_gfx_is_lockup,
                        .vm_flush = &cayman_vm_flush,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                },
                [CAYMAN_RING_TYPE_CP1_INDEX] = {
                        .ib_execute = &cayman_ring_ib_execute,
                        .ib_test = &r600_ib_test,
                        .is_lockup = &cayman_gfx_is_lockup,
                        .vm_flush = &cayman_vm_flush,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                },
                [CAYMAN_RING_TYPE_CP2_INDEX] = {
                        .ib_execute = &cayman_ring_ib_execute,
                        .ib_test = &r600_ib_test,
                        .is_lockup = &cayman_gfx_is_lockup,
                        .vm_flush = &cayman_vm_flush,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                },
                [R600_RING_TYPE_DMA_INDEX] = {
                        .ib_execute = &cayman_dma_ring_ib_execute,
                        .ib_test = &r600_dma_ib_test,
                        .is_lockup = &cayman_dma_is_lockup,
                        .vm_flush = &cayman_dma_vm_flush,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                },
                [CAYMAN_RING_TYPE_DMA1_INDEX] = {
                        .ib_execute = &cayman_dma_ring_ib_execute,
                        .ib_test = &r600_dma_ib_test,
                        .is_lockup = &cayman_dma_is_lockup,
                        .vm_flush = &cayman_dma_vm_flush,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                },
                [R600_RING_TYPE_UVD_INDEX] = {
                        .ib_execute = &r600_uvd_ib_execute,
                        .ring_test = &r600_uvd_ring_test,
                        .ib_test = &r600_uvd_ib_test,
                        .is_lockup = &radeon_ring_test_lockup,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                }
        },
        .irq = {
                        .ib_test = &r600_ib_test,
                        .is_lockup = &si_gfx_is_lockup,
                        .vm_flush = &si_vm_flush,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                },
                [CAYMAN_RING_TYPE_CP1_INDEX] = {
                        .ib_execute = &si_ring_ib_execute,
                        .ib_test = &r600_ib_test,
                        .is_lockup = &si_gfx_is_lockup,
                        .vm_flush = &si_vm_flush,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                },
                [CAYMAN_RING_TYPE_CP2_INDEX] = {
                        .ib_execute = &si_ring_ib_execute,
                        .ib_test = &r600_ib_test,
                        .is_lockup = &si_gfx_is_lockup,
                        .vm_flush = &si_vm_flush,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                },
                [R600_RING_TYPE_DMA_INDEX] = {
                        .ib_execute = &cayman_dma_ring_ib_execute,
                        .ib_test = &r600_dma_ib_test,
                        .is_lockup = &si_dma_is_lockup,
                        .vm_flush = &si_dma_vm_flush,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                },
                [CAYMAN_RING_TYPE_DMA1_INDEX] = {
                        .ib_execute = &cayman_dma_ring_ib_execute,
                        .ib_test = &r600_dma_ib_test,
                        .is_lockup = &si_dma_is_lockup,
                        .vm_flush = &si_dma_vm_flush,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                },
                [R600_RING_TYPE_UVD_INDEX] = {
                        .ib_execute = &r600_uvd_ib_execute,
                        .ring_test = &r600_uvd_ring_test,
                        .ib_test = &r600_uvd_ib_test,
                        .is_lockup = &radeon_ring_test_lockup,
+                       .get_rptr = &radeon_ring_generic_get_rptr,
+                       .get_wptr = &radeon_ring_generic_get_wptr,
+                       .set_wptr = &radeon_ring_generic_set_wptr,
                }
        },
        .irq = {