diff options
Diffstat (limited to 'drivers/gpu/drm/drm_drv.c')
| -rw-r--r-- | drivers/gpu/drm/drm_drv.c | 16 | 
1 files changed, 15 insertions, 1 deletions
diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c index 452c2d866ec..3ab1e9cc469 100644 --- a/drivers/gpu/drm/drm_drv.c +++ b/drivers/gpu/drm/drm_drv.c @@ -116,7 +116,13 @@ static struct drm_ioctl_desc drm_ioctls[] = {  	DRM_IOCTL_DEF(DRM_IOCTL_WAIT_VBLANK, drm_wait_vblank, 0), +	DRM_IOCTL_DEF(DRM_IOCTL_MODESET_CTL, drm_modeset_ctl, 0), +  	DRM_IOCTL_DEF(DRM_IOCTL_UPDATE_DRAW, drm_update_drawable_info, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), + +	DRM_IOCTL_DEF(DRM_IOCTL_GEM_CLOSE, drm_gem_close_ioctl, 0), +	DRM_IOCTL_DEF(DRM_IOCTL_GEM_FLINK, drm_gem_flink_ioctl, DRM_AUTH), +	DRM_IOCTL_DEF(DRM_IOCTL_GEM_OPEN, drm_gem_open_ioctl, DRM_AUTH),  };  #define DRM_CORE_IOCTL_COUNT	ARRAY_SIZE( drm_ioctls ) @@ -260,11 +266,19 @@ int drm_init(struct drm_driver *driver)  	for (i = 0; driver->pci_driver.id_table[i].vendor != 0; i++) {  		pid = (struct pci_device_id *)&driver->pci_driver.id_table[i]; +		/* Loop around setting up a DRM device for each PCI device +		 * matching our ID and device class.  If we had the internal +		 * function that pci_get_subsys and pci_get_class used, we'd +		 * be able to just pass pid in instead of doing a two-stage +		 * thing. +		 */  		pdev = NULL; -		/* pass back in pdev to account for multiple identical cards */  		while ((pdev =  			pci_get_subsys(pid->vendor, pid->device, pid->subvendor,  				       pid->subdevice, pdev)) != NULL) { +			if ((pdev->class & pid->class_mask) != pid->class) +				continue; +  			/* stealth mode requires a manual probe */  			pci_dev_get(pdev);  			drm_get_dev(pdev, pid, driver);  | 
