diff options
author | David Dawes <dawes@xfree86.org> | 2001-07-30 19:59:39 +0000 |
---|---|---|
committer | David Dawes <dawes@xfree86.org> | 2001-07-30 19:59:39 +0000 |
commit | 56bd9c207770d41a497f3e8237a1099dd9d4cd91 (patch) | |
tree | 528632e9ff74ae98caa8c55d4a8f201669c00e93 /linux/drm_stub.h | |
parent | 84a5e7108773d5a5ff7242e1460c98e3acb178a8 (diff) |
Merge the multihead-1-0-0 branch into the trunk, with the exception of themultihead-1-0-0-20010730-merge
glide header files.
The changes include:
- Brian Paul's changes to the tdfx client-side 3D driver to make it
dlopen() the correct glide library (Voodoo3 or Voodoo5). This allows
both types of the glide library to co-exist, and allows Voodoo3/Voodoo5
cards to be mixed in multi-head configs.
- DRM kernel driver changes to allow a driver to set up multiple instances
(minor numbers), one for each card present that the driver supports.
This is currently implemented and tested only for the tdfx DRM driver.
- Add some missing missing <stdarg.h> includes.
- Some log message cleanups.
- Change the 2D tdfx driver to access VGA legacy registers via their PCI
I/O space access points rather than their legacy addresses, and fix
some problems with the way the VGA-related bits are initialised.
Status:
- With these changes, multi-head direct rendering works with multiple
Voodoo3 and/or Voodoo5 cards. This has been tested with two PCI Voodoo3
cards and an AGP Voodoo5 card, and all permutations of those.
Caveats:
- Xinerama is not supported. If Xinerama is enabled, then direct rendering
gets disabled.
- The text mode on secondary screens will show junk after the X server
exits.
- On some hardware, starting the X server on multiple 3dfx cards will
result in a hard lockup. One workaround is to enable APIC support in a
uni-processor kernel, or use an SMP kernel.
Diffstat (limited to 'linux/drm_stub.h')
-rw-r--r-- | linux/drm_stub.h | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/linux/drm_stub.h b/linux/drm_stub.h index bc958796..6811d6ba 100644 --- a/linux/drm_stub.h +++ b/linux/drm_stub.h @@ -121,11 +121,13 @@ static int DRM(stub_putminor)(int minor) return 0; } + int DRM(stub_register)(const char *name, struct file_operations *fops, drm_device_t *dev) { struct drm_stub_info *i = NULL; - + + DRM_DEBUG("\n"); if (register_chrdev(DRM_MAJOR, "drm", &DRM(stub_fops))) i = (struct drm_stub_info *)inter_module_get("drm"); @@ -133,9 +135,11 @@ int DRM(stub_register)(const char *name, struct file_operations *fops, /* Already registered */ DRM(stub_info).info_register = i->info_register; DRM(stub_info).info_unregister = i->info_unregister; - } else { + DRM_DEBUG("already registered\n"); + } else if (DRM(stub_info).info_register != DRM(stub_getminor)) { DRM(stub_info).info_register = DRM(stub_getminor); DRM(stub_info).info_unregister = DRM(stub_putminor); + DRM_DEBUG("calling inter_module_register\n"); inter_module_register("drm", THIS_MODULE, &DRM(stub_info)); } if (DRM(stub_info).info_register) |