Deleted Added
full compact
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 ---