aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/radeon_drv.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_drv.c')
-rw-r--r--drivers/gpu/drm/radeon/radeon_drv.c70
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);
124struct drm_gem_object *radeon_gem_prime_import(struct drm_device *dev, 124struct drm_gem_object *radeon_gem_prime_import(struct drm_device *dev,
125 struct dma_buf *dma_buf); 125 struct dma_buf *dma_buf);
126extern 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)
128int radeon_debugfs_init(struct drm_minor *minor); 130int radeon_debugfs_init(struct drm_minor *minor);
129void radeon_debugfs_cleanup(struct drm_minor *minor); 131void radeon_debugfs_cleanup(struct drm_minor *minor);
130#endif 132#endif
131 133
134/* atpx handler */
135#if defined(CONFIG_VGA_SWITCHEROO)
136void radeon_register_atpx_handler(void);
137void radeon_unregister_atpx_handler(void);
138#else
139static inline void radeon_register_atpx_handler(void) {}
140static inline void radeon_unregister_atpx_handler(void) {}
141#endif
132 142
133int radeon_no_wb; 143int radeon_no_wb;
134int radeon_modeset = -1; 144int radeon_modeset = 1;
135int radeon_dynclks = -1; 145int radeon_dynclks = -1;
136int radeon_r4xx_atom = 0; 146int radeon_r4xx_atom = 0;
137int radeon_agpmode = 0; 147int radeon_agpmode = 0;
@@ -199,6 +209,14 @@ module_param_named(msi, radeon_msi, int, 0444);
199MODULE_PARM_DESC(lockup_timeout, "GPU lockup timeout in ms (defaul 10000 = 10 seconds, 0 = disable)"); 209MODULE_PARM_DESC(lockup_timeout, "GPU lockup timeout in ms (defaul 10000 = 10 seconds, 0 = disable)");
200module_param_named(lockup_timeout, radeon_lockup_timeout, int, 0444); 210module_param_named(lockup_timeout, radeon_lockup_timeout, int, 0444);
201 211
212static struct pci_device_id pciidlist[] = {
213 radeon_PCI_IDS
214};
215
216MODULE_DEVICE_TABLE(pci, pciidlist);
217
218#ifdef CONFIG_DRM_RADEON_UMS
219
202static int radeon_suspend(struct drm_device *dev, pm_message_t state) 220static 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
230static struct pci_device_id pciidlist[] = {
231 radeon_PCI_IDS
232};
233
234#if defined(CONFIG_DRM_RADEON_KMS)
235MODULE_DEVICE_TABLE(pci, pciidlist);
236#endif
237
238static const struct file_operations radeon_driver_old_fops = { 248static 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
287static struct drm_driver kms_driver; 299static struct drm_driver kms_driver;
288 300
289static int radeon_kick_out_firmware_fb(struct pci_dev *pdev) 301static int radeon_kick_out_firmware_fb(struct pci_dev *pdev)
@@ -411,10 +423,12 @@ static struct drm_driver kms_driver = {
411static struct drm_driver *driver; 423static struct drm_driver *driver;
412static struct pci_driver *pdriver; 424static struct pci_driver *pdriver;
413 425
426#ifdef CONFIG_DRM_RADEON_UMS
414static struct pci_driver radeon_pci_driver = { 427static 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
419static struct pci_driver radeon_kms_pci_driver = { 433static 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
428static int __init radeon_init(void) 442static 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