diff options
Diffstat (limited to 'shared-core')
| -rw-r--r-- | shared-core/i915_dma.c | 16 | ||||
| -rw-r--r-- | shared-core/i915_drv.h | 5 | ||||
| -rw-r--r-- | shared-core/mach64_dma.c | 2 | ||||
| -rw-r--r-- | shared-core/mach64_drv.h | 2 | ||||
| -rw-r--r-- | shared-core/mga_dma.c | 15 | ||||
| -rw-r--r-- | shared-core/mga_drv.h | 6 | ||||
| -rw-r--r-- | shared-core/r128_drv.h | 4 | ||||
| -rw-r--r-- | shared-core/r128_state.c | 4 | ||||
| -rw-r--r-- | shared-core/radeon_cp.c | 14 | ||||
| -rw-r--r-- | shared-core/radeon_drv.h | 18 | ||||
| -rw-r--r-- | shared-core/radeon_state.c | 8 | ||||
| -rw-r--r-- | shared-core/savage_bci.c | 43 | ||||
| -rw-r--r-- | shared-core/savage_drv.h | 6 | ||||
| -rw-r--r-- | shared-core/via_drv.c | 35 | 
14 files changed, 98 insertions, 80 deletions
| diff --git a/shared-core/i915_dma.c b/shared-core/i915_dma.c index fc4548fd..a474f8ad 100644 --- a/shared-core/i915_dma.c +++ b/shared-core/i915_dma.c @@ -710,7 +710,19 @@ static int i915_setparam(DRM_IOCTL_ARGS)  	return 0;  } -void i915_driver_pretakedown(drm_device_t * dev) +int i915_driver_load(drm_device_t *dev, unsigned long flags) +{ +	/* i915 has 4 more counters */ +	dev->counters += 4; +	dev->types[6] = _DRM_STAT_IRQ; +	dev->types[7] = _DRM_STAT_PRIMARY; +	dev->types[8] = _DRM_STAT_SECONDARY; +	dev->types[9] = _DRM_STAT_DMA; + +	return 0; +} + +void i915_driver_lastclose(drm_device_t * dev)  {  	if (dev->dev_private) {  		drm_i915_private_t *dev_priv = dev->dev_private; @@ -719,7 +731,7 @@ void i915_driver_pretakedown(drm_device_t * dev)  	i915_dma_cleanup(dev);  } -void i915_driver_prerelease(drm_device_t * dev, DRMFILE filp) +void i915_driver_preclose(drm_device_t * dev, DRMFILE filp)  {  	if (dev->dev_private) {  		drm_i915_private_t *dev_priv = dev->dev_private; diff --git a/shared-core/i915_drv.h b/shared-core/i915_drv.h index 51b1beab..dbef27f5 100644 --- a/shared-core/i915_drv.h +++ b/shared-core/i915_drv.h @@ -98,8 +98,9 @@ typedef struct drm_i915_private {  				/* i915_dma.c */  extern void i915_kernel_lost_context(drm_device_t * dev); -extern void i915_driver_pretakedown(drm_device_t * dev); -extern void i915_driver_prerelease(drm_device_t * dev, DRMFILE filp); +extern int i915_driver_load(struct drm_device *, unsigned long flags); +extern void i915_driver_lastclose(drm_device_t * dev); +extern void i915_driver_preclose(drm_device_t * dev, DRMFILE filp);  extern int i915_driver_device_is_agp(drm_device_t * dev);  /* i915_irq.c */ diff --git a/shared-core/mach64_dma.c b/shared-core/mach64_dma.c index d7e97a99..4c8edeab 100644 --- a/shared-core/mach64_dma.c +++ b/shared-core/mach64_dma.c @@ -1519,7 +1519,7 @@ int mach64_dma_buffers(DRM_IOCTL_ARGS)  	return ret;  } -void mach64_driver_pretakedown(drm_device_t * dev) +void mach64_driver_lastclose(drm_device_t * dev)  {  	mach64_do_cleanup_dma(dev);  } diff --git a/shared-core/mach64_drv.h b/shared-core/mach64_drv.h index fb3deb2f..29c0aba4 100644 --- a/shared-core/mach64_drv.h +++ b/shared-core/mach64_drv.h @@ -114,7 +114,7 @@ extern int mach64_dma_idle(DRM_IOCTL_ARGS);  extern int mach64_dma_flush(DRM_IOCTL_ARGS);  extern int mach64_engine_reset(DRM_IOCTL_ARGS);  extern int mach64_dma_buffers(DRM_IOCTL_ARGS); -extern void mach64_driver_pretakedown(drm_device_t * dev); +extern void mach64_driver_lastclose(drm_device_t * dev);  extern int mach64_init_freelist(drm_device_t * dev);  extern void mach64_destroy_freelist(drm_device_t * dev); diff --git a/shared-core/mga_dma.c b/shared-core/mga_dma.c index f0404cc0..31df5d6e 100644 --- a/shared-core/mga_dma.c +++ b/shared-core/mga_dma.c @@ -391,7 +391,7 @@ int mga_freelist_put(drm_device_t * dev, drm_buf_t * buf)   * DMA initialization, cleanup   */ -int mga_driver_preinit(drm_device_t *dev, unsigned long flags) +int mga_driver_load(drm_device_t *dev, unsigned long flags)  {  	drm_mga_private_t * dev_priv; @@ -405,6 +405,14 @@ int mga_driver_preinit(drm_device_t *dev, unsigned long flags)  	dev_priv->usec_timeout = MGA_DEFAULT_USEC_TIMEOUT;  	dev_priv->chipset = flags; +	dev_priv->mmio_base = drm_get_resource_start(dev, 1); +	dev_priv->mmio_size = drm_get_resource_len(dev, 1); + +	dev->counters += 3; +	dev->types[6] = _DRM_STAT_IRQ; +	dev->types[7] = _DRM_STAT_PRIMARY; +	dev->types[8] = _DRM_STAT_SECONDARY; +  	return 0;  } @@ -437,7 +445,6 @@ static int mga_do_agp_dma_bootstrap(drm_device_t * dev,  	drm_agp_mode_t mode;  	drm_agp_info_t info; -	  	/* Acquire AGP. */  	err = drm_agp_acquire(dev);  	if (err) { @@ -1100,7 +1107,7 @@ int mga_dma_buffers(DRM_IOCTL_ARGS)  /**   * Called just before the module is unloaded.   */ -int mga_driver_postcleanup(drm_device_t * dev) +int mga_driver_unload(drm_device_t * dev)  {  	drm_free(dev->dev_private, sizeof(drm_mga_private_t), DRM_MEM_DRIVER);  	dev->dev_private = NULL; @@ -1111,7 +1118,7 @@ int mga_driver_postcleanup(drm_device_t * dev)  /**   * Called when the last opener of the device is closed.   */ -void mga_driver_pretakedown(drm_device_t * dev) +void mga_driver_lastclose(drm_device_t * dev)  {  	mga_do_cleanup_dma(dev);  } diff --git a/shared-core/mga_drv.h b/shared-core/mga_drv.h index d77bd364..2c13acc7 100644 --- a/shared-core/mga_drv.h +++ b/shared-core/mga_drv.h @@ -149,14 +149,14 @@ typedef struct drm_mga_private {  } drm_mga_private_t;  				/* mga_dma.c */ -extern int mga_driver_preinit(drm_device_t * dev, unsigned long flags);  extern int mga_dma_bootstrap(DRM_IOCTL_ARGS);  extern int mga_dma_init(DRM_IOCTL_ARGS);  extern int mga_dma_flush(DRM_IOCTL_ARGS);  extern int mga_dma_reset(DRM_IOCTL_ARGS);  extern int mga_dma_buffers(DRM_IOCTL_ARGS); -extern int mga_driver_postcleanup(drm_device_t * dev); -extern void mga_driver_pretakedown(drm_device_t * dev); +extern int mga_driver_load(drm_device_t *dev, unsigned long flags); +extern int mga_driver_unload(drm_device_t * dev); +extern void mga_driver_lastclose(drm_device_t * dev);  extern int mga_driver_dma_quiescent(drm_device_t * dev);  extern int mga_do_wait_for_idle(drm_mga_private_t * dev_priv); diff --git a/shared-core/r128_drv.h b/shared-core/r128_drv.h index ae740548..c6bdf563 100644 --- a/shared-core/r128_drv.h +++ b/shared-core/r128_drv.h @@ -152,8 +152,8 @@ 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); -extern void r128_driver_pretakedown(drm_device_t * dev); -extern void r128_driver_prerelease(drm_device_t * dev, DRMFILE filp); +extern void r128_driver_lastclose(drm_device_t * dev); +extern void r128_driver_preclose(drm_device_t * dev, DRMFILE filp);  extern long r128_compat_ioctl(struct file *filp, unsigned int cmd,  			      unsigned long arg); diff --git a/shared-core/r128_state.c b/shared-core/r128_state.c index d8094452..e4079e85 100644 --- a/shared-core/r128_state.c +++ b/shared-core/r128_state.c @@ -1670,7 +1670,7 @@ static int r128_getparam(DRM_IOCTL_ARGS)  	return 0;  } -void r128_driver_prerelease(drm_device_t * dev, DRMFILE filp) +void r128_driver_preclose(drm_device_t * dev, DRMFILE filp)  {  	if (dev->dev_private) {  		drm_r128_private_t *dev_priv = dev->dev_private; @@ -1680,7 +1680,7 @@ void r128_driver_prerelease(drm_device_t * dev, DRMFILE filp)  	}  } -void r128_driver_pretakedown(drm_device_t * dev) +void r128_driver_lastclose(drm_device_t * dev)  {  	r128_do_cleanup_cce(dev);  } diff --git a/shared-core/radeon_cp.c b/shared-core/radeon_cp.c index 73cc38dc..8694d043 100644 --- a/shared-core/radeon_cp.c +++ b/shared-core/radeon_cp.c @@ -1245,7 +1245,9 @@ static void radeon_set_pciegart(drm_radeon_private_t * dev_priv, int on)  	u32 tmp = RADEON_READ_PCIE(dev_priv, RADEON_PCIE_TX_GART_CNTL);  	if (on) { -		DRM_DEBUG("programming pcie %08X %08X %08X\n", dev_priv->gart_vm_start, dev_priv->bus_pci_gart,dev_priv->gart_size); +		DRM_DEBUG("programming pcie %08X %08lX %08X\n", +			  dev_priv->gart_vm_start, (long)dev_priv->bus_pci_gart, +			  dev_priv->gart_size);  		RADEON_WRITE_PCIE(RADEON_PCIE_TX_DISCARD_RD_ADDR_LO, dev_priv->gart_vm_start);  		RADEON_WRITE_PCIE(RADEON_PCIE_TX_GART_BASE, dev_priv->bus_pci_gart);  		RADEON_WRITE_PCIE(RADEON_PCIE_TX_GART_START_LO, dev_priv->gart_vm_start); @@ -2038,8 +2040,7 @@ int radeon_cp_buffers(DRM_IOCTL_ARGS)  	return ret;  } -/* Always create a map record for MMIO and FB memory, done from DRIVER_POSTINIT */ -int radeon_preinit(struct drm_device *dev, unsigned long flags) +int radeon_driver_load(struct drm_device *dev, unsigned long flags)  {  	drm_radeon_private_t *dev_priv;  	int ret = 0; @@ -2077,7 +2078,10 @@ int radeon_preinit(struct drm_device *dev, unsigned long flags)  	return ret;  } -int radeon_presetup(struct drm_device *dev) +/* Create mappings for registers and framebuffer so userland doesn't necessarily + * have to find them. + */ +int radeon_driver_firstopen(struct drm_device *dev)  {  	int ret;  	drm_local_map_t *map; @@ -2098,7 +2102,7 @@ int radeon_presetup(struct drm_device *dev)  	return 0;  } -int radeon_postcleanup(struct drm_device *dev) +int radeon_driver_unload(struct drm_device *dev)  {  	drm_radeon_private_t *dev_priv = dev->dev_private; diff --git a/shared-core/radeon_drv.h b/shared-core/radeon_drv.h index cb4e0b4b..13cb1231 100644 --- a/shared-core/radeon_drv.h +++ b/shared-core/radeon_drv.h @@ -307,12 +307,14 @@ 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); -extern void radeon_driver_prerelease(drm_device_t * dev, DRMFILE filp); -extern void radeon_driver_pretakedown(drm_device_t * dev); -extern int radeon_driver_open_helper(drm_device_t * dev, -				     drm_file_t * filp_priv); -extern void radeon_driver_free_filp_priv(drm_device_t * dev, -					 drm_file_t * filp_priv); + +extern int radeon_driver_load(struct drm_device *dev, unsigned long flags); +extern int radeon_driver_unload(struct drm_device *dev); +extern int radeon_driver_firstopen(struct drm_device *dev); +extern void radeon_driver_preclose(drm_device_t * dev, DRMFILE filp); +extern void radeon_driver_postclose(drm_device_t * dev, drm_file_t * filp); +extern void radeon_driver_lastclose(drm_device_t * dev); +extern int radeon_driver_open(drm_device_t * dev, drm_file_t * filp_priv);  extern long radeon_compat_ioctl(struct file *filp, unsigned int cmd,  					 unsigned long arg); @@ -931,10 +933,6 @@ do {									\  	RADEON_WRITE( RADEON_PCIE_DATA, (val) );			\  } while (0) -extern int radeon_preinit(struct drm_device *dev, unsigned long flags); -extern int radeon_presetup(struct drm_device *dev); -extern int radeon_postcleanup(struct drm_device *dev); -  #define CP_PACKET0( reg, n )						\  	(RADEON_CP_PACKET0 | ((n) << 16) | ((reg) >> 2))  #define CP_PACKET0_TABLE( reg, n )					\ diff --git a/shared-core/radeon_state.c b/shared-core/radeon_state.c index 53484641..44719bd9 100644 --- a/shared-core/radeon_state.c +++ b/shared-core/radeon_state.c @@ -3004,7 +3004,7 @@ static int radeon_cp_setparam(DRM_IOCTL_ARGS)   *   * DRM infrastructure takes care of reclaiming dma buffers.   */ -void radeon_driver_prerelease(drm_device_t * dev, DRMFILE filp) +void radeon_driver_preclose(drm_device_t * dev, DRMFILE filp)  {  	if (dev->dev_private) {  		drm_radeon_private_t *dev_priv = dev->dev_private; @@ -3017,12 +3017,12 @@ void radeon_driver_prerelease(drm_device_t * dev, DRMFILE filp)  	}  } -void radeon_driver_pretakedown(drm_device_t * dev) +void radeon_driver_lastclose(drm_device_t * dev)  {  	radeon_do_release(dev);  } -int radeon_driver_open_helper(drm_device_t * dev, drm_file_t * filp_priv) +int radeon_driver_open(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; @@ -3044,7 +3044,7 @@ int radeon_driver_open_helper(drm_device_t * dev, drm_file_t * filp_priv)  	return 0;  } -void radeon_driver_free_filp_priv(drm_device_t * dev, drm_file_t * filp_priv) +void radeon_driver_postclose(drm_device_t * dev, drm_file_t * filp_priv)  {  	struct drm_radeon_driver_file_fields *radeon_priv =  	    filp_priv->driver_priv; diff --git a/shared-core/savage_bci.c b/shared-core/savage_bci.c index bfd760ea..9a604b6e 100644 --- a/shared-core/savage_bci.c +++ b/shared-core/savage_bci.c @@ -536,16 +536,31 @@ static void savage_fake_dma_flush(drm_savage_private_t *dev_priv)  	dev_priv->first_dma_page = dev_priv->current_dma_page = 0;  } +int savage_driver_load(drm_device_t *dev, unsigned long chipset) +{ +	drm_savage_private_t *dev_priv; + +	dev_priv = drm_alloc(sizeof(drm_savage_private_t), DRM_MEM_DRIVER); +	if (dev_priv == NULL) +		return DRM_ERR(ENOMEM); + +	memset(dev_priv, 0, sizeof(drm_savage_private_t)); +	dev->dev_private = (void *)dev_priv; + +	dev_priv->chipset = (enum savage_family)chipset; + +	return 0; +} +  /*   * Initalize mappings. On Savage4 and SavageIX the alignment   * and size of the aperture is not suitable for automatic MTRR setup - * in drm_addmap. Therefore we do it manually before the maps are - * initialized. We also need to take care of deleting the MTRRs in - * postcleanup. + * in drm_addmap. Therefore we add them manually before the maps are + * initialized, and tear them down on last close.   */ -int savage_preinit(drm_device_t *dev, unsigned long chipset) +int savage_driver_firstopen(drm_device_t *dev)  { -	drm_savage_private_t *dev_priv; +	drm_savage_private_t *dev_priv = dev->dev_private;  	unsigned long mmio_base, fb_base, fb_size, aperture_base;  	/* fb_rsrc and aper_rsrc aren't really used currently, but still exist  	 * in case we decide we need information on the BAR for BSD in the @@ -554,14 +569,6 @@ int savage_preinit(drm_device_t *dev, unsigned long chipset)  	unsigned int fb_rsrc, aper_rsrc;  	int ret = 0; -	dev_priv = drm_alloc(sizeof(drm_savage_private_t), DRM_MEM_DRIVER); -	if (dev_priv == NULL) -		return DRM_ERR(ENOMEM); - -	memset(dev_priv, 0, sizeof(drm_savage_private_t)); -	dev->dev_private = (void *)dev_priv; -	dev_priv->chipset = (enum savage_family)chipset; -  	dev_priv->mtrr[0].handle = -1;  	dev_priv->mtrr[1].handle = -1;  	dev_priv->mtrr[2].handle = -1; @@ -595,7 +602,8 @@ int savage_preinit(drm_device_t *dev, unsigned long chipset)  			DRM_ERROR("strange pci_resource_len %08lx\n",  				  drm_get_resource_len(dev, 0));  		} -	} else if (chipset != S3_SUPERSAVAGE && chipset != S3_SAVAGE2000) { +	} else if (dev_priv->chipset != S3_SUPERSAVAGE && +		   dev_priv->chipset != S3_SAVAGE2000) {  		mmio_base = drm_get_resource_start(dev, 0);  		fb_rsrc = 1;  		fb_base = drm_get_resource_start(dev, 1); @@ -647,7 +655,7 @@ int savage_preinit(drm_device_t *dev, unsigned long chipset)  /*   * Delete MTRRs and free device-private data.   */ -int savage_postcleanup(drm_device_t *dev) +void savage_driver_lastclose(drm_device_t *dev)  {  	drm_savage_private_t *dev_priv = dev->dev_private;  	int i; @@ -657,6 +665,11 @@ int savage_postcleanup(drm_device_t *dev)  			mtrr_del(dev_priv->mtrr[i].handle,  				 dev_priv->mtrr[i].base,  				 dev_priv->mtrr[i].size); +} + +int savage_driver_unload(drm_device_t *dev) +{ +	drm_savage_private_t *dev_priv = dev->dev_private;  	drm_free(dev_priv, sizeof(drm_savage_private_t), DRM_MEM_DRIVER); diff --git a/shared-core/savage_drv.h b/shared-core/savage_drv.h index a16e7b2b..51266adb 100644 --- a/shared-core/savage_drv.h +++ b/shared-core/savage_drv.h @@ -208,8 +208,10 @@ extern void savage_dma_reset(drm_savage_private_t *dev_priv);  extern void savage_dma_wait(drm_savage_private_t *dev_priv, unsigned int page);  extern uint32_t *savage_dma_alloc(drm_savage_private_t *dev_priv,  				  unsigned int n); -extern int savage_preinit(drm_device_t *dev, unsigned long chipset); -extern int savage_postcleanup(drm_device_t *dev); +extern int savage_driver_load(drm_device_t *dev, unsigned long chipset); +extern int savage_driver_firstopen(drm_device_t *dev); +extern void savage_driver_lastclose(drm_device_t *dev); +extern int savage_driver_unload(drm_device_t *dev);  extern int savage_do_cleanup_bci(drm_device_t *dev);  extern void savage_reclaim_buffers(drm_device_t *dev, DRMFILE filp); diff --git a/shared-core/via_drv.c b/shared-core/via_drv.c index 13cc2e15..d8d85f5e 100644 --- a/shared-core/via_drv.c +++ b/shared-core/via_drv.c @@ -29,30 +29,6 @@  #include "drm_pciids.h" -static int postinit(struct drm_device *dev, unsigned long flags) -{ -	DRM_INFO("Initialized %s %d.%d.%d %s on minor %d: %s\n", -		 DRIVER_NAME, -		 DRIVER_MAJOR, -		 DRIVER_MINOR, -		 DRIVER_PATCHLEVEL, -		 DRIVER_DATE, dev->primary.minor, pci_pretty_name(dev->pdev) -	    ); -	return 0; -} - -static int version(drm_version_t * version) -{ -	int len; - -	version->version_major = DRIVER_MAJOR; -	version->version_minor = DRIVER_MINOR; -	version->version_patchlevel = DRIVER_PATCHLEVEL; -	DRM_COPY(version->name, DRIVER_NAME); -	DRM_COPY(version->date, DRIVER_DATE); -	DRM_COPY(version->desc, DRIVER_DESC); -	return 0; -}  static int dri_library_name(struct drm_device * dev, char * buf)  { @@ -95,8 +71,6 @@ static struct drm_driver driver = {  	.reclaim_buffers = drm_core_reclaim_buffers,  	.get_map_ofs = drm_core_get_map_ofs,  	.get_reg_ofs = drm_core_get_reg_ofs, -	.postinit = postinit, -	.version = version,  	.ioctls = ioctls,  	.num_ioctls = DRM_ARRAY_SIZE(ioctls),  	.fops = { @@ -113,7 +87,14 @@ static struct drm_driver driver = {  		.id_table = pciidlist,  		.probe = probe,  		.remove = __devexit_p(drm_cleanup_pci), -	} +	}, + +	.name = DRIVER_NAME, +	.desc = DRIVER_DESC, +	.date = DRIVER_DATE, +	.major = DRIVER_MAJOR, +	.minor = DRIVER_MINOR, +	.patchlevel = DRIVER_PATCHLEVEL,  };  static int probe(struct pci_dev *pdev, const struct pci_device_id *ent) | 
