From d4dbf457813e97531ded3bf24f3b6ad421189c69 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Tue, 24 Aug 2004 11:15:53 +0000 Subject: Merged drmfntbl-0-0-2 --- shared-core/i915_dma.c | 5 +++++ shared-core/i915_drv.h | 4 ++++ shared-core/i915_irq.c | 8 ++++---- shared-core/mach64_dma.c | 8 ++++++-- shared-core/mach64_drv.h | 6 ++++++ shared-core/mach64_irq.c | 10 +++++----- shared-core/mga_dma.c | 8 ++++++-- shared-core/mga_drv.h | 6 ++++++ shared-core/mga_irq.c | 4 ++-- shared-core/r128_cce.c | 14 ++++++-------- shared-core/r128_drv.h | 6 ++++++ shared-core/r128_irq.c | 4 ++-- shared-core/r128_state.c | 8 +++++++- shared-core/radeon_cp.c | 16 +++++++--------- shared-core/radeon_drv.h | 8 ++++++++ shared-core/radeon_irq.c | 4 ++-- shared-core/radeon_state.c | 41 +++++++++++++++++++++++++++++++++++------ shared-core/sis_mm.c | 1 + shared-core/tdfx_drv.h | 2 -- shared-core/via_drv.c | 1 + shared-core/via_drv.h | 8 ++++++++ shared-core/via_irq.c | 11 +++++------ shared-core/via_mm.c | 10 ++++++++-- 23 files changed, 140 insertions(+), 53 deletions(-) (limited to 'shared-core') diff --git a/shared-core/i915_dma.c b/shared-core/i915_dma.c index 72573cbb..91de65a7 100644 --- a/shared-core/i915_dma.c +++ b/shared-core/i915_dma.c @@ -790,6 +790,11 @@ static void i915_driver_prerelease(drm_device_t *dev, DRMFILE filp) void i915_driver_register_fns(drm_device_t *dev) { + dev->driver_features = DRIVER_USE_AGP | DRIVER_REQUIRE_AGP | DRIVER_USE_MTRR | DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED; dev->fn_tbl.pretakedown = i915_driver_pretakedown; dev->fn_tbl.prerelease = i915_driver_prerelease; + dev->fn_tbl.irq_preinstall = i915_driver_irq_preinstall; + dev->fn_tbl.irq_postinstall = i915_driver_irq_postinstall; + dev->fn_tbl.irq_uninstall = i915_driver_irq_uninstall; + dev->fn_tbl.irq_handler = i915_driver_irq_handler; } diff --git a/shared-core/i915_drv.h b/shared-core/i915_drv.h index 40530eb0..4773d056 100644 --- a/shared-core/i915_drv.h +++ b/shared-core/i915_drv.h @@ -76,6 +76,10 @@ extern int i915_irq_wait( DRM_IOCTL_ARGS ); extern int i915_wait_irq(drm_device_t *dev, int irq_nr); extern int i915_emit_irq(drm_device_t *dev); +extern irqreturn_t i915_driver_irq_handler( DRM_IRQ_ARGS ); +extern void i915_driver_irq_preinstall( drm_device_t *dev ); +extern void i915_driver_irq_postinstall( drm_device_t *dev ); +extern void i915_driver_irq_uninstall( drm_device_t *dev ); /* i915_mem.c */ extern int i915_mem_alloc( DRM_IOCTL_ARGS ); diff --git a/shared-core/i915_irq.c b/shared-core/i915_irq.c index e37da827..96c7e0f5 100644 --- a/shared-core/i915_irq.c +++ b/shared-core/i915_irq.c @@ -19,7 +19,7 @@ #define READ_BREADCRUMB(dev_priv) (((u32*)(dev_priv->hw_status_page))[5]) -irqreturn_t DRM(irq_handler)( DRM_IRQ_ARGS ) +irqreturn_t i915_driver_irq_handler( DRM_IRQ_ARGS ) { drm_device_t *dev = (drm_device_t *)arg; drm_i915_private_t *dev_priv = (drm_i915_private_t *)dev->dev_private; @@ -144,7 +144,7 @@ int i915_irq_wait( DRM_IOCTL_ARGS ) /* drm_dma.h hooks */ -void DRM(driver_irq_preinstall)( drm_device_t *dev ) { +void i915_driver_irq_preinstall( drm_device_t *dev ) { drm_i915_private_t *dev_priv = (drm_i915_private_t *)dev->dev_private; @@ -153,7 +153,7 @@ void DRM(driver_irq_preinstall)( drm_device_t *dev ) { I915_WRITE16( I915REG_INT_ENABLE_R, 0x0 ); } -void DRM(driver_irq_postinstall)( drm_device_t *dev ) { +void i915_driver_irq_postinstall( drm_device_t *dev ) { drm_i915_private_t *dev_priv = (drm_i915_private_t *)dev->dev_private; @@ -161,7 +161,7 @@ void DRM(driver_irq_postinstall)( drm_device_t *dev ) { DRM_INIT_WAITQUEUE(&dev_priv->irq_queue); } -void DRM(driver_irq_uninstall)( drm_device_t *dev ) { +void i915_driver_irq_uninstall( drm_device_t *dev ) { drm_i915_private_t *dev_priv = (drm_i915_private_t *)dev->dev_private; if (!dev_priv) diff --git a/shared-core/mach64_dma.c b/shared-core/mach64_dma.c index 4f90916d..210a6103 100644 --- a/shared-core/mach64_dma.c +++ b/shared-core/mach64_dma.c @@ -972,13 +972,11 @@ int mach64_do_cleanup_dma( drm_device_t *dev ) { DRM_DEBUG( "%s\n", __FUNCTION__ ); -#if _HAVE_DMA_IRQ /* Make sure interrupts are disabled here because the uninstall ioctl * may not have been called from userspace and after dev_private * is freed, it's too late. */ if ( dev->irq ) DRM(irq_uninstall)(dev); -#endif if ( dev->dev_private ) { drm_mach64_private_t *dev_priv = dev->dev_private; @@ -1335,5 +1333,11 @@ static void mach64_driver_pretakedown(drm_device_t *dev) void mach64_driver_register_fns(drm_device_t *dev) { + dev->driver_features = DRIVER_USE_AGP | DRIVER_USE_MTRR | DRIVER_PCI_DMA | DRIVER_HAVE_DMA | DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | DRIVER_IRQ_VBL; dev->fn_tbl.pretakedown = mach64_driver_pretakedown; + dev->fn_tbl.vblank_wait = mach64_driver_vblank_wait; + dev->fn_tbl.irq_preinstall = mach64_driver_irq_preinstall; + dev->fn_tbl.irq_postinstall = mach64_driver_irq_postinstall; + dev->fn_tbl.irq_uninstall = mach64_driver_irq_uninstall; + dev->fn_tbl.irq_handler = mach64_driver_irq_handler; } diff --git a/shared-core/mach64_drv.h b/shared-core/mach64_drv.h index d009d29e..b49e6f65 100644 --- a/shared-core/mach64_drv.h +++ b/shared-core/mach64_drv.h @@ -127,6 +127,12 @@ extern int mach64_dma_swap( DRM_IOCTL_ARGS ); extern int mach64_dma_vertex( DRM_IOCTL_ARGS ); extern int mach64_dma_blit( DRM_IOCTL_ARGS ); extern int mach64_get_param( DRM_IOCTL_ARGS ); +extern int mach64_driver_vblank_wait(drm_device_t *dev, unsigned int *sequence); + +extern irqreturn_t mach64_driver_irq_handler( DRM_IRQ_ARGS ); +extern void mach64_driver_irq_preinstall( drm_device_t *dev ); +extern void mach64_driver_irq_postinstall( drm_device_t *dev ); +extern void mach64_driver_irq_uninstall( drm_device_t *dev ); /* ================================================================ * Registers diff --git a/shared-core/mach64_irq.c b/shared-core/mach64_irq.c index 9acd6269..efa0641f 100644 --- a/shared-core/mach64_irq.c +++ b/shared-core/mach64_irq.c @@ -40,7 +40,7 @@ #include "mach64_drm.h" #include "mach64_drv.h" -irqreturn_t DRM(irq_handler)( DRM_IRQ_ARGS ) +irqreturn_t mach64_driver_irq_handler( DRM_IRQ_ARGS ) { drm_device_t *dev = (drm_device_t *) arg; drm_mach64_private_t *dev_priv = @@ -69,7 +69,7 @@ irqreturn_t DRM(irq_handler)( DRM_IRQ_ARGS ) return IRQ_NONE; } -int DRM(vblank_wait)(drm_device_t *dev, unsigned int *sequence) +int mach64_driver_vblank_wait(drm_device_t *dev, unsigned int *sequence) { unsigned int cur_vblank; int ret = 0; @@ -89,7 +89,7 @@ int DRM(vblank_wait)(drm_device_t *dev, unsigned int *sequence) /* drm_dma.h hooks */ -void DRM(driver_irq_preinstall)( drm_device_t *dev ) { +void mach64_driver_irq_preinstall( drm_device_t *dev ) { drm_mach64_private_t *dev_priv = (drm_mach64_private_t *)dev->dev_private; @@ -102,7 +102,7 @@ void DRM(driver_irq_preinstall)( drm_device_t *dev ) { | MACH64_CRTC_VBLANK_INT ); } -void DRM(driver_irq_postinstall)( drm_device_t *dev ) { +void mach64_driver_irq_postinstall( drm_device_t *dev ) { drm_mach64_private_t *dev_priv = (drm_mach64_private_t *)dev->dev_private; @@ -114,7 +114,7 @@ void DRM(driver_irq_postinstall)( drm_device_t *dev ) { } -void DRM(driver_irq_uninstall)( drm_device_t *dev ) { +void mach64_driver_irq_uninstall( drm_device_t *dev ) { drm_mach64_private_t *dev_priv = (drm_mach64_private_t *)dev->dev_private; if ( !dev_priv ) diff --git a/shared-core/mga_dma.c b/shared-core/mga_dma.c index 2a095014..409f0ab7 100644 --- a/shared-core/mga_dma.c +++ b/shared-core/mga_dma.c @@ -630,13 +630,11 @@ int mga_do_cleanup_dma( drm_device_t *dev ) { DRM_DEBUG( "\n" ); -#if __HAVE_IRQ /* Make sure interrupts are disabled here because the uninstall ioctl * may not have been called from userspace and after dev_private * is freed, it's too late. */ if ( dev->irq_enabled ) DRM(irq_uninstall)(dev); -#endif if ( dev->dev_private ) { drm_mga_private_t *dev_priv = dev->dev_private; @@ -815,6 +813,12 @@ static int mga_driver_dma_quiescent(drm_device_t *dev) void mga_driver_register_fns(drm_device_t *dev) { + dev->driver_features = DRIVER_USE_AGP | DRIVER_REQUIRE_AGP | DRIVER_USE_MTRR | DRIVER_HAVE_DMA | DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | DRIVER_IRQ_VBL; dev->fn_tbl.pretakedown = mga_driver_pretakedown; dev->fn_tbl.dma_quiescent = mga_driver_dma_quiescent; + dev->fn_tbl.vblank_wait = mga_driver_vblank_wait; + dev->fn_tbl.irq_preinstall = mga_driver_irq_preinstall; + dev->fn_tbl.irq_postinstall = mga_driver_irq_postinstall; + dev->fn_tbl.irq_uninstall = mga_driver_irq_uninstall; + dev->fn_tbl.irq_handler = mga_driver_irq_handler; } diff --git a/shared-core/mga_drv.h b/shared-core/mga_drv.h index 65847165..75dcb0e9 100644 --- a/shared-core/mga_drv.h +++ b/shared-core/mga_drv.h @@ -130,6 +130,12 @@ extern int mga_getparam( DRM_IOCTL_ARGS ); extern int mga_warp_install_microcode( drm_mga_private_t *dev_priv ); extern int mga_warp_init( drm_mga_private_t *dev_priv ); +extern int mga_driver_vblank_wait(drm_device_t *dev, unsigned int *sequence); +extern irqreturn_t mga_driver_irq_handler( DRM_IRQ_ARGS ); +extern void mga_driver_irq_preinstall( drm_device_t *dev ); +extern void mga_driver_irq_postinstall( drm_device_t *dev ); +extern void mga_driver_irq_uninstall( drm_device_t *dev ); + #define mga_flush_write_combine() DRM_WRITEMEMORYBARRIER() #if defined(__linux__) && defined(__alpha__) diff --git a/shared-core/mga_irq.c b/shared-core/mga_irq.c index e486618b..c3185b0b 100644 --- a/shared-core/mga_irq.c +++ b/shared-core/mga_irq.c @@ -36,7 +36,7 @@ #include "mga_drm.h" #include "mga_drv.h" -irqreturn_t mga_irq_handler( DRM_IRQ_ARGS ) +irqreturn_t mga_driver_irq_handler( DRM_IRQ_ARGS ) { drm_device_t *dev = (drm_device_t *) arg; drm_mga_private_t *dev_priv = @@ -56,7 +56,7 @@ irqreturn_t mga_irq_handler( DRM_IRQ_ARGS ) return IRQ_NONE; } -int mga_vblank_wait(drm_device_t *dev, unsigned int *sequence) +int mga_driver_vblank_wait(drm_device_t *dev, unsigned int *sequence) { unsigned int cur_vblank; int ret = 0; diff --git a/shared-core/r128_cce.c b/shared-core/r128_cce.c index c6c7f6d3..64c9b8be 100644 --- a/shared-core/r128_cce.c +++ b/shared-core/r128_cce.c @@ -322,7 +322,7 @@ static void r128_cce_init_ring_buffer( drm_device_t *dev, /* The manual (p. 2) says this address is in "VM space". This * means it's an offset from the start of AGP space. */ -#if __REALLY_HAVE_AGP +#if __OS_HAS_AGP if ( !dev_priv->is_pci ) ring_start = dev_priv->cce_ring->offset - dev->agp->base; else @@ -510,7 +510,7 @@ static int r128_do_init_cce( drm_device_t *dev, drm_r128_init_t *init ) (drm_r128_sarea_t *)((u8 *)dev_priv->sarea->handle + init->sarea_priv_offset); -#if __REALLY_HAVE_AGP +#if __OS_HAS_AGP if ( !dev_priv->is_pci ) { drm_core_ioremap( dev_priv->cce_ring, dev ); drm_core_ioremap( dev_priv->ring_rptr, dev ); @@ -533,7 +533,7 @@ static int r128_do_init_cce( drm_device_t *dev, drm_r128_init_t *init ) dev->agp_buffer_map->handle = (void *)dev->agp_buffer_map->offset; } -#if __REALLY_HAVE_AGP +#if __OS_HAS_AGP if ( !dev_priv->is_pci ) dev_priv->cce_buffers_offset = dev->agp->base; else @@ -558,7 +558,7 @@ static int r128_do_init_cce( drm_device_t *dev, drm_r128_init_t *init ) R128_WRITE( R128_LAST_DISPATCH_REG, dev_priv->sarea_priv->last_dispatch ); -#if __REALLY_HAVE_AGP +#if __OS_HAS_AGP if ( dev_priv->is_pci ) { #endif if (!DRM(ati_pcigart_init)( dev, &dev_priv->phys_pci_gart, @@ -569,7 +569,7 @@ static int r128_do_init_cce( drm_device_t *dev, drm_r128_init_t *init ) return DRM_ERR(ENOMEM); } R128_WRITE( R128_PCI_GART_PAGE, dev_priv->bus_pci_gart ); -#if __REALLY_HAVE_AGP +#if __OS_HAS_AGP } #endif @@ -586,18 +586,16 @@ static int r128_do_init_cce( drm_device_t *dev, drm_r128_init_t *init ) int r128_do_cleanup_cce( drm_device_t *dev ) { -#if __HAVE_IRQ /* Make sure interrupts are disabled here because the uninstall ioctl * may not have been called from userspace and after dev_private * is freed, it's too late. */ if ( dev->irq_enabled ) DRM(irq_uninstall)(dev); -#endif if ( dev->dev_private ) { drm_r128_private_t *dev_priv = dev->dev_private; -#if __REALLY_HAVE_AGP +#if __OS_HAS_AGP if ( !dev_priv->is_pci ) { if ( dev_priv->cce_ring != NULL ) drm_core_ioremapfree( dev_priv->cce_ring, dev ); diff --git a/shared-core/r128_drv.h b/shared-core/r128_drv.h index 12ca9b4f..5b91256c 100644 --- a/shared-core/r128_drv.h +++ b/shared-core/r128_drv.h @@ -142,6 +142,12 @@ extern int r128_cce_depth( DRM_IOCTL_ARGS ); extern int r128_cce_stipple( DRM_IOCTL_ARGS ); extern int r128_cce_indirect( DRM_IOCTL_ARGS ); +extern int r128_driver_vblank_wait(drm_device_t *dev, unsigned int *sequence); + +extern irqreturn_t r128_driver_irq_handler( DRM_IRQ_ARGS ); +extern void r128_driver_irq_preinstall( drm_device_t *dev ); +extern void r128_driver_irq_postinstall( drm_device_t *dev ); +extern void r128_driver_irq_uninstall( drm_device_t *dev ); /* Register definitions, register access macros and drmAddMap constants * for Rage 128 kernel driver. diff --git a/shared-core/r128_irq.c b/shared-core/r128_irq.c index e77a5538..be1b9dac 100644 --- a/shared-core/r128_irq.c +++ b/shared-core/r128_irq.c @@ -36,7 +36,7 @@ #include "r128_drm.h" #include "r128_drv.h" -irqreturn_t r128_irq_handler( DRM_IRQ_ARGS ) +irqreturn_t r128_driver_irq_handler( DRM_IRQ_ARGS ) { drm_device_t *dev = (drm_device_t *) arg; drm_r128_private_t *dev_priv = @@ -56,7 +56,7 @@ irqreturn_t r128_irq_handler( DRM_IRQ_ARGS ) return IRQ_NONE; } -int DRM(vblank_wait)(drm_device_t *dev, unsigned int *sequence) +int r128_driver_vblank_wait(drm_device_t *dev, unsigned int *sequence) { unsigned int cur_vblank; int ret = 0; diff --git a/shared-core/r128_state.c b/shared-core/r128_state.c index 88d7715a..d772f173 100644 --- a/shared-core/r128_state.c +++ b/shared-core/r128_state.c @@ -1712,7 +1712,13 @@ static void r128_driver_pretakedown(drm_device_t *dev) void r128_driver_register_fns(drm_device_t *dev) { - dev->dev_priv_size = sizeof(drm_r128_buf_priv_t); + dev->driver_features = DRIVER_USE_AGP | DRIVER_USE_MTRR | DRIVER_PCI_DMA | DRIVER_SG | DRIVER_HAVE_DMA | DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | DRIVER_IRQ_VBL; + dev->dev_priv_size = sizeof(drm_r128_buf_priv_t); dev->fn_tbl.prerelease = r128_driver_prerelease; dev->fn_tbl.pretakedown = r128_driver_pretakedown; + dev->fn_tbl.vblank_wait = r128_driver_vblank_wait; + dev->fn_tbl.irq_preinstall = r128_driver_irq_preinstall; + dev->fn_tbl.irq_postinstall = r128_driver_irq_postinstall; + dev->fn_tbl.irq_uninstall = r128_driver_irq_uninstall; + dev->fn_tbl.irq_handler = r128_driver_irq_handler; } diff --git a/shared-core/radeon_cp.c b/shared-core/radeon_cp.c index 6987a84c..1e87ff37 100644 --- a/shared-core/radeon_cp.c +++ b/shared-core/radeon_cp.c @@ -858,7 +858,7 @@ static void radeon_cp_init_ring_buffer( drm_device_t *dev, ( ( dev_priv->gart_vm_start - 1 ) & 0xffff0000 ) | ( dev_priv->fb_location >> 16 ) ); -#if __REALLY_HAVE_AGP +#if __OS_HAS_AGP if (dev_priv->flags & CHIP_IS_AGP) { RADEON_WRITE( RADEON_MC_AGP_LOCATION, (((dev_priv->gart_vm_start - 1 + @@ -885,7 +885,7 @@ static void radeon_cp_init_ring_buffer( drm_device_t *dev, SET_RING_HEAD( dev_priv, cur_read_ptr ); dev_priv->ring.tail = cur_read_ptr; -#if __REALLY_HAVE_AGP +#if __OS_HAS_AGP if (dev_priv->flags & CHIP_IS_AGP) { /* set RADEON_AGP_BASE here instead of relying on X from user space */ RADEON_WRITE( RADEON_AGP_BASE, (unsigned int)dev->agp->base ); @@ -1146,7 +1146,7 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init ) (drm_radeon_sarea_t *)((u8 *)dev_priv->sarea->handle + init->sarea_priv_offset); -#if __REALLY_HAVE_AGP +#if __OS_HAS_AGP if ( dev_priv->flags & CHIP_IS_AGP ) { drm_core_ioremap( dev_priv->cp_ring, dev ); drm_core_ioremap( dev_priv->ring_rptr, dev ); @@ -1195,7 +1195,7 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init ) dev_priv->gart_vm_start = dev_priv->fb_location + RADEON_READ( RADEON_CONFIG_APER_SIZE ); -#if __REALLY_HAVE_AGP +#if __OS_HAS_AGP if (dev_priv->flags & CHIP_IS_AGP) dev_priv->gart_buffers_offset = (dev->agp_buffer_map->offset - dev->agp->base @@ -1224,7 +1224,7 @@ static int radeon_do_init_cp( drm_device_t *dev, drm_radeon_init_t *init ) dev_priv->ring.high_mark = RADEON_RING_HIGH_MARK; -#if __REALLY_HAVE_AGP +#if __OS_HAS_AGP if (dev_priv->flags & CHIP_IS_AGP) { /* Turn off PCI GART */ radeon_set_pcigart( dev_priv, 0 ); @@ -1257,15 +1257,13 @@ int radeon_do_cleanup_cp( drm_device_t *dev ) drm_radeon_private_t *dev_priv = dev->dev_private; DRM_DEBUG( "\n" ); -#if __HAVE_IRQ /* Make sure interrupts are disabled here because the uninstall ioctl * may not have been called from userspace and after dev_private * is freed, it's too late. */ if ( dev->irq_enabled ) DRM(irq_uninstall)(dev); -#endif -#if __REALLY_HAVE_AGP +#if __OS_HAS_AGP if (dev_priv->flags & CHIP_IS_AGP) { if ( dev_priv->cp_ring != NULL ) { drm_core_ioremapfree( dev_priv->cp_ring, dev ); @@ -1315,7 +1313,7 @@ static int radeon_do_resume_cp( drm_device_t *dev ) DRM_DEBUG("Starting radeon_do_resume_cp()\n"); -#if __REALLY_HAVE_AGP +#if __OS_HAS_AGP if (dev_priv->flags & CHIP_IS_AGP) { /* Turn off PCI GART */ radeon_set_pcigart( dev_priv, 0 ); diff --git a/shared-core/radeon_drv.h b/shared-core/radeon_drv.h index 4b66e5be..8c584864 100644 --- a/shared-core/radeon_drv.h +++ b/shared-core/radeon_drv.h @@ -72,6 +72,9 @@ typedef struct drm_radeon_depth_clear_t { u32 se_cntl; } drm_radeon_depth_clear_t; +struct drm_radeon_driver_file_fields { + int64_t radeon_fb_delta; +}; struct mem_block { struct mem_block *next; @@ -216,6 +219,11 @@ extern int radeon_wait_irq(drm_device_t *dev, int swi_nr); extern int radeon_emit_irq(drm_device_t *dev); extern void radeon_do_release(drm_device_t *dev); +extern int radeon_driver_vblank_wait(drm_device_t *dev, unsigned int *sequence); +extern irqreturn_t radeon_driver_irq_handler( DRM_IRQ_ARGS ); +extern void radeon_driver_irq_preinstall( drm_device_t *dev ); +extern void radeon_driver_irq_postinstall( drm_device_t *dev ); +extern void radeon_driver_irq_uninstall( drm_device_t *dev ); /* Flags for stats.boxes */ diff --git a/shared-core/radeon_irq.c b/shared-core/radeon_irq.c index 51d19493..bdb3cc16 100644 --- a/shared-core/radeon_irq.c +++ b/shared-core/radeon_irq.c @@ -54,7 +54,7 @@ * tied to dma at all, this is just a hangover from dri prehistory. */ -irqreturn_t DRM(irq_handler)( DRM_IRQ_ARGS ) +irqreturn_t radeon_driver_irq_handler( DRM_IRQ_ARGS ) { drm_device_t *dev = (drm_device_t *) arg; drm_radeon_private_t *dev_priv = @@ -141,7 +141,7 @@ int radeon_emit_and_wait_irq(drm_device_t *dev) } -int DRM(vblank_wait)(drm_device_t *dev, unsigned int *sequence) +int radeon_driver_vblank_wait(drm_device_t *dev, unsigned int *sequence) { drm_radeon_private_t *dev_priv = (drm_radeon_private_t *)dev->dev_private; diff --git a/shared-core/radeon_state.c b/shared-core/radeon_state.c index 4a7bfd2d..cdbd7a8e 100644 --- a/shared-core/radeon_state.c +++ b/shared-core/radeon_state.c @@ -43,12 +43,15 @@ static __inline__ int radeon_check_and_fixup_offset( drm_radeon_private_t *dev_p drm_file_t *filp_priv, u32 *offset ) { u32 off = *offset; + struct drm_radeon_driver_file_fields *radeon_priv; if ( off >= dev_priv->fb_location && off < ( dev_priv->gart_vm_start + dev_priv->gart_size ) ) return 0; - off += filp_priv->radeon_fb_delta; + radeon_priv = filp_priv->driver_priv; + + off += radeon_priv->radeon_fb_delta; DRM_DEBUG( "offset fixed up to 0x%x\n", off ); @@ -2525,7 +2528,8 @@ int radeon_cp_setparam( DRM_IOCTL_ARGS ) { drm_radeon_private_t *dev_priv = dev->dev_private; drm_file_t *filp_priv; drm_radeon_setparam_t sp; - + struct drm_radeon_driver_file_fields *radeon_priv; + if ( !dev_priv ) { DRM_ERROR( "%s called with no initialization\n", __FUNCTION__ ); return DRM_ERR( EINVAL ); @@ -2538,7 +2542,8 @@ int radeon_cp_setparam( DRM_IOCTL_ARGS ) { switch( sp.param ) { case RADEON_SETPARAM_FB_LOCATION: - filp_priv->radeon_fb_delta = dev_priv->fb_location - sp.value; + radeon_priv = filp_priv->driver_priv; + radeon_priv->radeon_fb_delta = dev_priv->fb_location - sp.value; break; default: DRM_DEBUG( "Invalid parameter %d\n", sp.param ); @@ -2571,17 +2576,35 @@ static void radeon_driver_pretakedown(drm_device_t *dev) radeon_do_release(dev); } -static void radeon_driver_open_helper(drm_device_t *dev, drm_file_t *filp_priv) +static int radeon_driver_open_helper(drm_device_t *dev, drm_file_t *filp_priv) { drm_radeon_private_t *dev_priv = dev->dev_private; + struct drm_radeon_driver_file_fields *radeon_priv; + + radeon_priv = (struct drm_radeon_driver_file_fields *)DRM(alloc)(sizeof(*radeon_priv), DRM_MEM_FILES); + + if (!radeon_priv) + return -ENOMEM; + + filp_priv->driver_priv = radeon_priv; + if ( dev_priv ) - filp_priv->radeon_fb_delta = dev_priv->fb_location; + radeon_priv->radeon_fb_delta = dev_priv->fb_location; else - filp_priv->radeon_fb_delta = 0; + radeon_priv->radeon_fb_delta = 0; + return 0; +} + +static void radeon_driver_free_filp_private(drm_device_t *dev, drm_file_t *filp_priv) +{ + struct drm_radeon_driver_file_fields *radeon_priv = filp_priv->driver_priv; + + DRM(free)(radeon_priv, sizeof(*radeon_priv), DRM_MEM_FILES); } void radeon_driver_register_fns(struct drm_device *dev) { + dev->driver_features = DRIVER_USE_AGP | DRIVER_USE_MTRR | DRIVER_PCI_DMA | DRIVER_SG | DRIVER_HAVE_IRQ | DRIVER_HAVE_DMA | DRIVER_IRQ_SHARED | DRIVER_IRQ_VBL; dev->dev_priv_size = sizeof(drm_radeon_buf_priv_t); dev->fn_tbl.preinit = radeon_preinit; dev->fn_tbl.postinit = radeon_postinit; @@ -2589,4 +2612,10 @@ void radeon_driver_register_fns(struct drm_device *dev) dev->fn_tbl.prerelease = radeon_driver_prerelease; dev->fn_tbl.pretakedown = radeon_driver_pretakedown; dev->fn_tbl.open_helper = radeon_driver_open_helper; + dev->fn_tbl.vblank_wait = radeon_driver_vblank_wait; + dev->fn_tbl.irq_preinstall = radeon_driver_irq_preinstall; + dev->fn_tbl.irq_postinstall = radeon_driver_irq_postinstall; + dev->fn_tbl.irq_uninstall = radeon_driver_irq_uninstall; + dev->fn_tbl.irq_handler = radeon_driver_irq_handler; + dev->fn_tbl.free_filp_private = radeon_driver_free_filp_private; } diff --git a/shared-core/sis_mm.c b/shared-core/sis_mm.c index 233843d5..27b904fc 100644 --- a/shared-core/sis_mm.c +++ b/shared-core/sis_mm.c @@ -411,6 +411,7 @@ int sis_final_context(struct drm_device *dev, int context) void DRM(driver_register_fns)(drm_device_t *dev) { + dev->driver_features = DRIVER_USE_AGP | DRIVER_USE_MTRR; dev->fn_tbl.context_ctor = sis_init_context; dev->fn_tbl.context_dtor = sis_final_context; } diff --git a/shared-core/tdfx_drv.h b/shared-core/tdfx_drv.h index 6b067db7..a582a3db 100644 --- a/shared-core/tdfx_drv.h +++ b/shared-core/tdfx_drv.h @@ -36,8 +36,6 @@ /* General customization: */ -#define __HAVE_MTRR 1 -#define __HAVE_CTX_BITMAP 1 #define DRIVER_AUTHOR "VA Linux Systems Inc." diff --git a/shared-core/via_drv.c b/shared-core/via_drv.c index 77423764..b3119f66 100644 --- a/shared-core/via_drv.c +++ b/shared-core/via_drv.c @@ -68,4 +68,5 @@ #include "drm_proc.h" #include "drm_vm.h" #include "drm_stub.h" +#include "drm_scatter.h" diff --git a/shared-core/via_drv.h b/shared-core/via_drv.h index 582eb6de..dd4a370f 100644 --- a/shared-core/via_drv.h +++ b/shared-core/via_drv.h @@ -64,6 +64,14 @@ extern int via_do_init_map(drm_device_t *dev, drm_via_init_t *init); extern int via_do_cleanup_map(drm_device_t *dev); extern int via_map_init(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg); +extern int via_driver_vblank_wait(drm_device_t* dev, unsigned int* sequence); + +extern irqreturn_t via_driver_irq_handler( DRM_IRQ_ARGS ); +extern void via_driver_irq_preinstall( drm_device_t *dev ); +extern void via_driver_irq_postinstall( drm_device_t *dev ); +extern void via_driver_irq_uninstall( drm_device_t *dev ); + +extern int via_dma_cleanup(drm_device_t *dev); extern int via_dma_cleanup(drm_device_t *dev); diff --git a/shared-core/via_irq.c b/shared-core/via_irq.c index 7e540cc1..eafb1d7d 100644 --- a/shared-core/via_irq.c +++ b/shared-core/via_irq.c @@ -46,8 +46,7 @@ #define VIA_IRQ_VBI_ENABLE (1 << 19) #define VIA_IRQ_VBI_PENDING (1 << 3) -irqreturn_t DRM(irq_handler)( DRM_IRQ_ARGS ) - +irqreturn_t via_driver_irq_handler( DRM_IRQ_ARGS ) { drm_device_t* dev = (drm_device_t*)arg; drm_via_private_t* dev_priv = (drm_via_private_t*)dev->dev_private; @@ -83,7 +82,7 @@ static __inline__ void viadrv_acknowledge_irqs(drm_via_private_t* dev_priv) } } -int DRM(vblank_wait)(drm_device_t* dev, unsigned int* sequence) +int via_driver_vblank_wait(drm_device_t* dev, unsigned int* sequence) { drm_via_private_t* dev_priv = (drm_via_private_t*)dev->dev_private; unsigned int cur_vblank; @@ -112,7 +111,7 @@ int DRM(vblank_wait)(drm_device_t* dev, unsigned int* sequence) /* * drm_dma.h hooks */ -void DRM(driver_irq_preinstall)(drm_device_t* dev){ +void via_driver_irq_preinstall(drm_device_t* dev){ drm_via_private_t* dev_priv = (drm_via_private_t *)dev->dev_private; u32 status; @@ -130,7 +129,7 @@ void DRM(driver_irq_preinstall)(drm_device_t* dev){ } } -void DRM(driver_irq_postinstall)(drm_device_t* dev){ +void via_driver_irq_postinstall(drm_device_t* dev){ drm_via_private_t* dev_priv = (drm_via_private_t *)dev->dev_private; u32 status; @@ -147,7 +146,7 @@ void DRM(driver_irq_postinstall)(drm_device_t* dev){ } } -void DRM(driver_irq_uninstall)(drm_device_t* dev){ +void via_driver_irq_uninstall(drm_device_t* dev){ drm_via_private_t* dev_priv = (drm_via_private_t *)dev->dev_private; u32 status; diff --git a/shared-core/via_mm.c b/shared-core/via_mm.c index fa37e782..117cca70 100644 --- a/shared-core/via_mm.c +++ b/shared-core/via_mm.c @@ -358,6 +358,12 @@ EXPORT_SYMBOL(via_fb_free); void DRM(driver_register_fns)(drm_device_t *dev) { - dev->fn_tbl.context_ctor = via_init_context; - dev->fn_tbl.context_dtor = via_final_context; + dev->driver_features = DRIVER_USE_AGP | DRIVER_USE_MTRR | DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | DRIVER_IRQ_VBL; + dev->fn_tbl.context_ctor = via_init_context; + dev->fn_tbl.context_dtor = via_final_context; + dev->fn_tbl.vblank_wait = via_driver_vblank_wait; + dev->fn_tbl.irq_preinstall = via_driver_irq_preinstall; + dev->fn_tbl.irq_postinstall = via_driver_irq_postinstall; + dev->fn_tbl.irq_uninstall = via_driver_irq_uninstall; + dev->fn_tbl.irq_handler = via_driver_irq_handler; } -- cgit v1.2.3