Skip to content

Commit

Permalink
drm: add drm simple memory manager support for SiS and VIA drivers
Browse files Browse the repository at this point in the history
This add support to the SiS and VIA drivers for the simple memory manager.
This fixes a lot of problems with the current simple code these drivers used,
including locking and SMP issues.

Signed-off-by: Dave Airlie <airlied@linux.ie>
  • Loading branch information
Thomas Hellstrom authored and Dave Airlie committed Sep 21, 2006
1 parent 3a1bd92 commit ce65a44
Show file tree
Hide file tree
Showing 12 changed files with 344 additions and 1,403 deletions.
4 changes: 2 additions & 2 deletions drivers/char/drm/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ i830-objs := i830_drv.o i830_dma.o i830_irq.o
i915-objs := i915_drv.o i915_dma.o i915_irq.o i915_mem.o
radeon-objs := radeon_drv.o radeon_cp.o radeon_state.o radeon_mem.o radeon_irq.o r300_cmdbuf.o
ffb-objs := ffb_drv.o ffb_context.o
sis-objs := sis_drv.o sis_ds.o sis_mm.o
sis-objs := sis_drv.o sis_mm.o
savage-objs := savage_drv.o savage_bci.o savage_state.o
via-objs := via_irq.o via_drv.o via_ds.o via_map.o via_mm.o via_dma.o via_verifier.o via_video.o via_dmablit.o
via-objs := via_irq.o via_drv.o via_map.o via_mm.o via_dma.o via_verifier.o via_video.o via_dmablit.o

ifeq ($(CONFIG_COMPAT),y)
drm-objs += drm_ioc32.o
Expand Down
38 changes: 35 additions & 3 deletions drivers/char/drm/sis_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,43 @@ static struct pci_device_id pciidlist[] = {
sisdrv_PCI_IDS
};

static int sis_driver_load(drm_device_t *dev, unsigned long chipset)
{
drm_sis_private_t *dev_priv;
int ret;

dev_priv = drm_calloc(1, sizeof(drm_sis_private_t), DRM_MEM_DRIVER);
if (dev_priv == NULL)
return DRM_ERR(ENOMEM);

dev->dev_private = (void *)dev_priv;
dev_priv->chipset = chipset;
ret = drm_sman_init(&dev_priv->sman, 2, 12, 8);
if (ret) {
drm_free(dev_priv, sizeof(dev_priv), DRM_MEM_DRIVER);
}

return ret;
}

static int sis_driver_unload(drm_device_t *dev)
{
drm_sis_private_t *dev_priv = dev->dev_private;

drm_sman_takedown(&dev_priv->sman);
drm_free(dev_priv, sizeof(*dev_priv), DRM_MEM_DRIVER);

return 0;
}

static struct drm_driver driver = {
.driver_features = DRIVER_USE_AGP | DRIVER_USE_MTRR,
.context_ctor = sis_init_context,
.context_dtor = sis_final_context,
.reclaim_buffers = drm_core_reclaim_buffers,
.load = sis_driver_load,
.unload = sis_driver_unload,
.context_dtor = NULL,
.reclaim_buffers = NULL,
.reclaim_buffers_locked = sis_reclaim_buffers_locked,
.lastclose = sis_lastclose,
.get_map_ofs = drm_core_get_map_ofs,
.get_reg_ofs = drm_core_get_reg_ofs,
.ioctls = sis_ioctls,
Expand Down
24 changes: 15 additions & 9 deletions drivers/char/drm/sis_drv.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,23 +31,29 @@
/* General customization:
*/

#define DRIVER_AUTHOR "SIS"
#define DRIVER_AUTHOR "SIS, Tungsten Graphics"
#define DRIVER_NAME "sis"
#define DRIVER_DESC "SIS 300/630/540"
#define DRIVER_DATE "20030826"
#define DRIVER_DATE "20060529"
#define DRIVER_MAJOR 1
#define DRIVER_MINOR 1
#define DRIVER_PATCHLEVEL 0
#define DRIVER_MINOR 2
#define DRIVER_PATCHLEVEL 1

#include "sis_ds.h"
#include "drm_sman.h"

typedef struct drm_sis_private {
memHeap_t *AGPHeap;
memHeap_t *FBHeap;
drm_local_map_t *mmio;
unsigned int idle_fault;
drm_sman_t sman;
unsigned int chipset;
int vram_initialized;
int agp_initialized;
unsigned long vram_offset;
unsigned long agp_offset;
} drm_sis_private_t;

extern int sis_init_context(drm_device_t * dev, int context);
extern int sis_final_context(drm_device_t * dev, int context);
extern void sis_reclaim_buffers_locked(drm_device_t *dev, struct file *filp);
extern void sis_lastclose(drm_device_t *dev);

extern drm_ioctl_desc_t sis_ioctls[];
extern int sis_max_ioctl;
Expand Down
299 changes: 0 additions & 299 deletions drivers/char/drm/sis_ds.c

This file was deleted.

Loading

0 comments on commit ce65a44

Please sign in to comment.