diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_drv.c')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_drv.c | 70 |
1 files changed, 37 insertions, 33 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c index d9bf96ee299a..833484da12d9 100644 --- a/drivers/gpu/drm/radeon/radeon_drv.c +++ b/drivers/gpu/drm/radeon/radeon_drv.c | |||
@@ -123,15 +123,25 @@ struct dma_buf *radeon_gem_prime_export(struct drm_device *dev, | |||
123 | int flags); | 123 | int flags); |
124 | struct drm_gem_object *radeon_gem_prime_import(struct drm_device *dev, | 124 | struct drm_gem_object *radeon_gem_prime_import(struct drm_device *dev, |
125 | struct dma_buf *dma_buf); | 125 | struct dma_buf *dma_buf); |
126 | extern long radeon_kms_compat_ioctl(struct file *filp, unsigned int cmd, | ||
127 | unsigned long arg); | ||
126 | 128 | ||
127 | #if defined(CONFIG_DEBUG_FS) | 129 | #if defined(CONFIG_DEBUG_FS) |
128 | int radeon_debugfs_init(struct drm_minor *minor); | 130 | int radeon_debugfs_init(struct drm_minor *minor); |
129 | void radeon_debugfs_cleanup(struct drm_minor *minor); | 131 | void radeon_debugfs_cleanup(struct drm_minor *minor); |
130 | #endif | 132 | #endif |
131 | 133 | ||
134 | /* atpx handler */ | ||
135 | #if defined(CONFIG_VGA_SWITCHEROO) | ||
136 | void radeon_register_atpx_handler(void); | ||
137 | void radeon_unregister_atpx_handler(void); | ||
138 | #else | ||
139 | static inline void radeon_register_atpx_handler(void) {} | ||
140 | static inline void radeon_unregister_atpx_handler(void) {} | ||
141 | #endif | ||
132 | 142 | ||
133 | int radeon_no_wb; | 143 | int radeon_no_wb; |
134 | int radeon_modeset = -1; | 144 | int radeon_modeset = 1; |
135 | int radeon_dynclks = -1; | 145 | int radeon_dynclks = -1; |
136 | int radeon_r4xx_atom = 0; | 146 | int radeon_r4xx_atom = 0; |
137 | int radeon_agpmode = 0; | 147 | int radeon_agpmode = 0; |
@@ -199,6 +209,14 @@ module_param_named(msi, radeon_msi, int, 0444); | |||
199 | MODULE_PARM_DESC(lockup_timeout, "GPU lockup timeout in ms (defaul 10000 = 10 seconds, 0 = disable)"); | 209 | MODULE_PARM_DESC(lockup_timeout, "GPU lockup timeout in ms (defaul 10000 = 10 seconds, 0 = disable)"); |
200 | module_param_named(lockup_timeout, radeon_lockup_timeout, int, 0444); | 210 | module_param_named(lockup_timeout, radeon_lockup_timeout, int, 0444); |
201 | 211 | ||
212 | static struct pci_device_id pciidlist[] = { | ||
213 | radeon_PCI_IDS | ||
214 | }; | ||
215 | |||
216 | MODULE_DEVICE_TABLE(pci, pciidlist); | ||
217 | |||
218 | #ifdef CONFIG_DRM_RADEON_UMS | ||
219 | |||
202 | static int radeon_suspend(struct drm_device *dev, pm_message_t state) | 220 | static int radeon_suspend(struct drm_device *dev, pm_message_t state) |
203 | { | 221 | { |
204 | drm_radeon_private_t *dev_priv = dev->dev_private; | 222 | drm_radeon_private_t *dev_priv = dev->dev_private; |
@@ -227,14 +245,6 @@ static int radeon_resume(struct drm_device *dev) | |||
227 | return 0; | 245 | return 0; |
228 | } | 246 | } |
229 | 247 | ||
230 | static struct pci_device_id pciidlist[] = { | ||
231 | radeon_PCI_IDS | ||
232 | }; | ||
233 | |||
234 | #if defined(CONFIG_DRM_RADEON_KMS) | ||
235 | MODULE_DEVICE_TABLE(pci, pciidlist); | ||
236 | #endif | ||
237 | |||
238 | static const struct file_operations radeon_driver_old_fops = { | 248 | static const struct file_operations radeon_driver_old_fops = { |
239 | .owner = THIS_MODULE, | 249 | .owner = THIS_MODULE, |
240 | .open = drm_open, | 250 | .open = drm_open, |
@@ -284,6 +294,8 @@ static struct drm_driver driver_old = { | |||
284 | .patchlevel = DRIVER_PATCHLEVEL, | 294 | .patchlevel = DRIVER_PATCHLEVEL, |
285 | }; | 295 | }; |
286 | 296 | ||
297 | #endif | ||
298 | |||
287 | static struct drm_driver kms_driver; | 299 | static struct drm_driver kms_driver; |
288 | 300 | ||
289 | static int radeon_kick_out_firmware_fb(struct pci_dev *pdev) | 301 | static int radeon_kick_out_firmware_fb(struct pci_dev *pdev) |
@@ -411,10 +423,12 @@ static struct drm_driver kms_driver = { | |||
411 | static struct drm_driver *driver; | 423 | static struct drm_driver *driver; |
412 | static struct pci_driver *pdriver; | 424 | static struct pci_driver *pdriver; |
413 | 425 | ||
426 | #ifdef CONFIG_DRM_RADEON_UMS | ||
414 | static struct pci_driver radeon_pci_driver = { | 427 | static struct pci_driver radeon_pci_driver = { |
415 | .name = DRIVER_NAME, | 428 | .name = DRIVER_NAME, |
416 | .id_table = pciidlist, | 429 | .id_table = pciidlist, |
417 | }; | 430 | }; |
431 | #endif | ||
418 | 432 | ||
419 | static struct pci_driver radeon_kms_pci_driver = { | 433 | static struct pci_driver radeon_kms_pci_driver = { |
420 | .name = DRIVER_NAME, | 434 | .name = DRIVER_NAME, |
@@ -427,28 +441,6 @@ static struct pci_driver radeon_kms_pci_driver = { | |||
427 | 441 | ||
428 | static int __init radeon_init(void) | 442 | static int __init radeon_init(void) |
429 | { | 443 | { |
430 | driver = &driver_old; | ||
431 | pdriver = &radeon_pci_driver; | ||
432 | driver->num_ioctls = radeon_max_ioctl; | ||
433 | #ifdef CONFIG_VGA_CONSOLE | ||
434 | if (vgacon_text_force() && radeon_modeset == -1) { | ||
435 | DRM_INFO("VGACON disable radeon kernel modesetting.\n"); | ||
436 | driver = &driver_old; | ||
437 | pdriver = &radeon_pci_driver; | ||
438 | driver->driver_features &= ~DRIVER_MODESET; | ||
439 | radeon_modeset = 0; | ||
440 | } | ||
441 | #endif | ||
442 | /* if enabled by default */ | ||
443 | if (radeon_modeset == -1) { | ||
444 | #ifdef CONFIG_DRM_RADEON_KMS | ||
445 | DRM_INFO("radeon defaulting to kernel modesetting.\n"); | ||
446 | radeon_modeset = 1; | ||
447 | #else | ||
448 | DRM_INFO("radeon defaulting to userspace modesetting.\n"); | ||
449 | radeon_modeset = 0; | ||
450 | #endif | ||
451 | } | ||
452 | if (radeon_modeset == 1) { | 444 | if (radeon_modeset == 1) { |
453 | DRM_INFO("radeon kernel modesetting enabled.\n"); | 445 | DRM_INFO("radeon kernel modesetting enabled.\n"); |
454 | driver = &kms_driver; | 446 | driver = &kms_driver; |
@@ -456,9 +448,21 @@ static int __init radeon_init(void) | |||
456 | driver->driver_features |= DRIVER_MODESET; | 448 | driver->driver_features |= DRIVER_MODESET; |
457 | driver->num_ioctls = radeon_max_kms_ioctl; | 449 | driver->num_ioctls = radeon_max_kms_ioctl; |
458 | radeon_register_atpx_handler(); | 450 | radeon_register_atpx_handler(); |
451 | |||
452 | } else { | ||
453 | #ifdef CONFIG_DRM_RADEON_UMS | ||
454 | DRM_INFO("radeon userspace modesetting enabled.\n"); | ||
455 | driver = &driver_old; | ||
456 | pdriver = &radeon_pci_driver; | ||
457 | driver->driver_features &= ~DRIVER_MODESET; | ||
458 | driver->num_ioctls = radeon_max_ioctl; | ||
459 | #else | ||
460 | DRM_ERROR("No UMS support in radeon module!\n"); | ||
461 | return -EINVAL; | ||
462 | #endif | ||
459 | } | 463 | } |
460 | /* if the vga console setting is enabled still | 464 | |
461 | * let modprobe override it */ | 465 | /* let modprobe override vga console setting */ |
462 | return drm_pci_init(driver, pdriver); | 466 | return drm_pci_init(driver, pdriver); |
463 | } | 467 | } |
464 | 468 | ||