mirror of
https://gitlab.freedesktop.org/mesa/drm.git
synced 2026-05-09 02:48:04 +02:00
More general patch to mark resources in use by all DRM drivers. Makes the
code Linux specific.
This commit is contained in:
parent
1fb27632c3
commit
e6d468ad7f
4 changed files with 8 additions and 64 deletions
|
|
@ -464,8 +464,10 @@ static int drm_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
return -ENODEV;
|
||||
|
||||
dev = &(DRM(device)[DRM(numdevs)]);
|
||||
if (DRM(fb_loaded)==0)
|
||||
if (DRM(fb_loaded)==0) {
|
||||
pci_set_drvdata(pdev, dev);
|
||||
pci_request_regions(pdev, DRIVER_NAME);
|
||||
}
|
||||
|
||||
memset( (void *)dev, 0, sizeof(*dev) );
|
||||
dev->count_lock = SPIN_LOCK_UNLOCKED;
|
||||
|
|
@ -568,6 +570,7 @@ static void __exit drm_cleanup_pci(struct pci_dev *pdev)
|
|||
|
||||
pci_set_drvdata(pdev, NULL);
|
||||
drm_cleanup(dev);
|
||||
pci_release_regions(pdev);
|
||||
}
|
||||
|
||||
static struct pci_driver drm_driver = {
|
||||
|
|
|
|||
|
|
@ -464,8 +464,10 @@ static int drm_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
return -ENODEV;
|
||||
|
||||
dev = &(DRM(device)[DRM(numdevs)]);
|
||||
if (DRM(fb_loaded)==0)
|
||||
if (DRM(fb_loaded)==0) {
|
||||
pci_set_drvdata(pdev, dev);
|
||||
pci_request_regions(pdev, DRIVER_NAME);
|
||||
}
|
||||
|
||||
memset( (void *)dev, 0, sizeof(*dev) );
|
||||
dev->count_lock = SPIN_LOCK_UNLOCKED;
|
||||
|
|
@ -568,6 +570,7 @@ static void __exit drm_cleanup_pci(struct pci_dev *pdev)
|
|||
|
||||
pci_set_drvdata(pdev, NULL);
|
||||
drm_cleanup(dev);
|
||||
pci_release_regions(pdev);
|
||||
}
|
||||
|
||||
static struct pci_driver drm_driver = {
|
||||
|
|
|
|||
|
|
@ -1732,32 +1732,9 @@ int radeon_cp_buffers( DRM_IOCTL_ARGS )
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int radeon_register_regions(struct pci_dev *pdev) {
|
||||
int retcode = -EINVAL;
|
||||
|
||||
/* request the mem regions */
|
||||
if (!request_mem_region (pci_resource_start( pdev, 2 ),
|
||||
pci_resource_len(pdev, 2), DRIVER_NAME)) {
|
||||
DRM_ERROR("cannot reserve MMIO region\n");
|
||||
return retcode;
|
||||
}
|
||||
if (!request_mem_region (pci_resource_start( pdev, 0 ),
|
||||
pci_resource_len(pdev, 0), DRIVER_NAME)) {
|
||||
DRM_ERROR("cannot reserve FB region\n");
|
||||
return retcode;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void radeon_release_regions(struct pci_dev *pdev) {
|
||||
release_mem_region (pci_resource_start( pdev, 2 ), pci_resource_len(pdev, 2));
|
||||
release_mem_region (pci_resource_start( pdev, 0 ), pci_resource_len(pdev, 0));
|
||||
}
|
||||
|
||||
/* 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 retcode = -EINVAL;
|
||||
u32 save, temp;
|
||||
drm_radeon_private_t *dev_priv;
|
||||
|
||||
|
|
@ -1769,11 +1746,6 @@ int radeon_preinit( struct drm_device *dev, unsigned long flags )
|
|||
dev->dev_private = (void *)dev_priv;
|
||||
dev_priv->flags = flags;
|
||||
|
||||
/* request the mem regions */
|
||||
if (!DRM(fb_loaded))
|
||||
if ((retcode = radeon_register_regions(dev->pdev)) != 0)
|
||||
return retcode;
|
||||
|
||||
/* There are signatures in BIOS and PCI-SSID for a PCI card, but they are not very reliable.
|
||||
Following detection method works for all cards tested so far.
|
||||
Note, checking AGP_ENABLE bit after drmAgpEnable call can also give the correct result.
|
||||
|
|
@ -1802,9 +1774,6 @@ int radeon_postcleanup( struct drm_device *dev )
|
|||
|
||||
DRM(free)( dev_priv, sizeof(*dev_priv), DRM_MEM_DRIVER );
|
||||
|
||||
if (!DRM(fb_loaded))
|
||||
radeon_release_regions(dev->pdev);
|
||||
|
||||
dev->dev_private = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1732,32 +1732,9 @@ int radeon_cp_buffers( DRM_IOCTL_ARGS )
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int radeon_register_regions(struct pci_dev *pdev) {
|
||||
int retcode = -EINVAL;
|
||||
|
||||
/* request the mem regions */
|
||||
if (!request_mem_region (pci_resource_start( pdev, 2 ),
|
||||
pci_resource_len(pdev, 2), DRIVER_NAME)) {
|
||||
DRM_ERROR("cannot reserve MMIO region\n");
|
||||
return retcode;
|
||||
}
|
||||
if (!request_mem_region (pci_resource_start( pdev, 0 ),
|
||||
pci_resource_len(pdev, 0), DRIVER_NAME)) {
|
||||
DRM_ERROR("cannot reserve FB region\n");
|
||||
return retcode;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void radeon_release_regions(struct pci_dev *pdev) {
|
||||
release_mem_region (pci_resource_start( pdev, 2 ), pci_resource_len(pdev, 2));
|
||||
release_mem_region (pci_resource_start( pdev, 0 ), pci_resource_len(pdev, 0));
|
||||
}
|
||||
|
||||
/* 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 retcode = -EINVAL;
|
||||
u32 save, temp;
|
||||
drm_radeon_private_t *dev_priv;
|
||||
|
||||
|
|
@ -1769,11 +1746,6 @@ int radeon_preinit( struct drm_device *dev, unsigned long flags )
|
|||
dev->dev_private = (void *)dev_priv;
|
||||
dev_priv->flags = flags;
|
||||
|
||||
/* request the mem regions */
|
||||
if (!DRM(fb_loaded))
|
||||
if ((retcode = radeon_register_regions(dev->pdev)) != 0)
|
||||
return retcode;
|
||||
|
||||
/* There are signatures in BIOS and PCI-SSID for a PCI card, but they are not very reliable.
|
||||
Following detection method works for all cards tested so far.
|
||||
Note, checking AGP_ENABLE bit after drmAgpEnable call can also give the correct result.
|
||||
|
|
@ -1802,9 +1774,6 @@ int radeon_postcleanup( struct drm_device *dev )
|
|||
|
||||
DRM(free)( dev_priv, sizeof(*dev_priv), DRM_MEM_DRIVER );
|
||||
|
||||
if (!DRM(fb_loaded))
|
||||
radeon_release_regions(dev->pdev);
|
||||
|
||||
dev->dev_private = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue