mga_dma.c (113995) | mga_dma.c (119098) |
---|---|
1/* mga_dma.c -- DMA support for mga g200/g400 -*- linux-c -*- 2 * Created: Mon Dec 13 01:50:01 1999 by jhartmann@precisioninsight.com 3 * 4 * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. 5 * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. 6 * All Rights Reserved. 7 * 8 * Permission is hereby granted, free of charge, to any person obtaining a --- 18 unchanged lines hidden (view full) --- 27 * Authors: 28 * Rickard E. (Rik) Faith <faith@valinux.com> 29 * Jeff Hartmann <jhartmann@valinux.com> 30 * Keith Whitwell <keith@tungstengraphics.com> 31 * 32 * Rewritten by: 33 * Gareth Hughes <gareth@valinux.com> 34 * | 1/* mga_dma.c -- DMA support for mga g200/g400 -*- linux-c -*- 2 * Created: Mon Dec 13 01:50:01 1999 by jhartmann@precisioninsight.com 3 * 4 * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. 5 * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. 6 * All Rights Reserved. 7 * 8 * Permission is hereby granted, free of charge, to any person obtaining a --- 18 unchanged lines hidden (view full) --- 27 * Authors: 28 * Rickard E. (Rik) Faith <faith@valinux.com> 29 * Jeff Hartmann <jhartmann@valinux.com> 30 * Keith Whitwell <keith@tungstengraphics.com> 31 * 32 * Rewritten by: 33 * Gareth Hughes <gareth@valinux.com> 34 * |
35 * $FreeBSD: head/sys/dev/drm/mga_dma.c 113995 2003-04-25 01:18:47Z anholt $ | 35 * $FreeBSD: head/sys/dev/drm/mga_dma.c 119098 2003-08-19 02:57:31Z anholt $ |
36 */ 37 38#include "dev/drm/mga.h" 39#include "dev/drm/drmP.h" 40#include "dev/drm/drm.h" 41#include "dev/drm/mga_drm.h" 42#include "dev/drm/mga_drv.h" 43 --- 507 unchanged lines hidden (view full) --- 551 mga_do_cleanup_dma( dev ); 552 return DRM_ERR(EINVAL); 553 } 554 555 dev_priv->sarea_priv = 556 (drm_mga_sarea_t *)((u8 *)dev_priv->sarea->handle + 557 init->sarea_priv_offset); 558 | 36 */ 37 38#include "dev/drm/mga.h" 39#include "dev/drm/drmP.h" 40#include "dev/drm/drm.h" 41#include "dev/drm/mga_drm.h" 42#include "dev/drm/mga_drv.h" 43 --- 507 unchanged lines hidden (view full) --- 551 mga_do_cleanup_dma( dev ); 552 return DRM_ERR(EINVAL); 553 } 554 555 dev_priv->sarea_priv = 556 (drm_mga_sarea_t *)((u8 *)dev_priv->sarea->handle + 557 init->sarea_priv_offset); 558 |
559 DRM_IOREMAP( dev_priv->warp ); 560 DRM_IOREMAP( dev_priv->primary ); 561 DRM_IOREMAP( dev_priv->buffers ); | 559 DRM_IOREMAP( dev_priv->warp, dev ); 560 DRM_IOREMAP( dev_priv->primary, dev ); 561 DRM_IOREMAP( dev_priv->buffers, dev ); |
562 563 if(!dev_priv->warp->handle || 564 !dev_priv->primary->handle || 565 !dev_priv->buffers->handle ) { 566 DRM_ERROR( "failed to ioremap agp regions!\n" ); 567 /* Assign dev_private so we can do cleanup. */ 568 dev->dev_private = (void *)dev_priv; 569 mga_do_cleanup_dma( dev ); --- 66 unchanged lines hidden (view full) --- 636 dev->dev_private = (void *)dev_priv; 637 return 0; 638} 639 640int mga_do_cleanup_dma( drm_device_t *dev ) 641{ 642 DRM_DEBUG( "\n" ); 643 | 562 563 if(!dev_priv->warp->handle || 564 !dev_priv->primary->handle || 565 !dev_priv->buffers->handle ) { 566 DRM_ERROR( "failed to ioremap agp regions!\n" ); 567 /* Assign dev_private so we can do cleanup. */ 568 dev->dev_private = (void *)dev_priv; 569 mga_do_cleanup_dma( dev ); --- 66 unchanged lines hidden (view full) --- 636 dev->dev_private = (void *)dev_priv; 637 return 0; 638} 639 640int mga_do_cleanup_dma( drm_device_t *dev ) 641{ 642 DRM_DEBUG( "\n" ); 643 |
644#if _HAVE_DMA_IRQ 645 /* Make sure interrupts are disabled here because the uninstall ioctl 646 * may not have been called from userspace and after dev_private 647 * is freed, it's too late. 648 */ 649 if ( dev->irq ) DRM(irq_uninstall)(dev); 650#endif 651 |
|
644 if ( dev->dev_private ) { 645 drm_mga_private_t *dev_priv = dev->dev_private; 646 647 if ( dev_priv->warp != NULL ) | 652 if ( dev->dev_private ) { 653 drm_mga_private_t *dev_priv = dev->dev_private; 654 655 if ( dev_priv->warp != NULL ) |
648 DRM_IOREMAPFREE( dev_priv->warp ); | 656 DRM_IOREMAPFREE( dev_priv->warp, dev ); |
649 if ( dev_priv->primary != NULL ) | 657 if ( dev_priv->primary != NULL ) |
650 DRM_IOREMAPFREE( dev_priv->primary ); | 658 DRM_IOREMAPFREE( dev_priv->primary, dev ); |
651 if ( dev_priv->buffers != NULL ) | 659 if ( dev_priv->buffers != NULL ) |
652 DRM_IOREMAPFREE( dev_priv->buffers ); | 660 DRM_IOREMAPFREE( dev_priv->buffers, dev ); |
653 654 if ( dev_priv->head != NULL ) { 655 mga_freelist_cleanup( dev ); 656 } 657 658 DRM(free)( dev->dev_private, sizeof(drm_mga_private_t), 659 DRM_MEM_DRIVER ); 660 dev->dev_private = NULL; 661 } 662 663 return 0; 664} 665 666int mga_dma_init( DRM_IOCTL_ARGS ) 667{ 668 DRM_DEVICE; 669 drm_mga_init_t init; 670 | 661 662 if ( dev_priv->head != NULL ) { 663 mga_freelist_cleanup( dev ); 664 } 665 666 DRM(free)( dev->dev_private, sizeof(drm_mga_private_t), 667 DRM_MEM_DRIVER ); 668 dev->dev_private = NULL; 669 } 670 671 return 0; 672} 673 674int mga_dma_init( DRM_IOCTL_ARGS ) 675{ 676 DRM_DEVICE; 677 drm_mga_init_t init; 678 |
679 LOCK_TEST_WITH_RETURN( dev, filp ); 680 |
|
671 DRM_COPY_FROM_USER_IOCTL( init, (drm_mga_init_t *)data, sizeof(init) ); 672 673 switch ( init.func ) { 674 case MGA_INIT_DMA: 675 return mga_do_init_dma( dev, &init ); 676 case MGA_CLEANUP_DMA: 677 return mga_do_cleanup_dma( dev ); 678 } --- 123 unchanged lines hidden --- | 681 DRM_COPY_FROM_USER_IOCTL( init, (drm_mga_init_t *)data, sizeof(init) ); 682 683 switch ( init.func ) { 684 case MGA_INIT_DMA: 685 return mga_do_init_dma( dev, &init ); 686 case MGA_CLEANUP_DMA: 687 return mga_do_cleanup_dma( dev ); 688 } --- 123 unchanged lines hidden --- |