From c158a36c4cfef024ba1be05a163cfd4b00ebea21 Mon Sep 17 00:00:00 2001 From: Jon Smirl Date: Thu, 23 Sep 2004 05:39:15 +0000 Subject: [PATCH] 1) switches from class_sysfs to drm sysfs implementation to allow customization 2) compiles again on 2.4, but doesn't work --- linux-core/Makefile | 3 ++- linux-core/drmP.h | 4 +++- linux-core/drm_compat.h | 51 +++++++++++++++++++++++++++++++++++++++++++++---- linux-core/drm_stub.c | 27 +++++++++++++------------- linux-core/ffb_drv.c | 15 +-------------- linux-core/i810_dma.c | 5 ----- linux-core/i810_drv.c | 19 +----------------- linux-core/i830_dma.c | 5 ----- linux-core/i830_drv.c | 19 +----------------- linux-core/i915_drv.c | 18 +---------------- linux-core/mach64_drv.c | 19 +----------------- linux-core/mga_drv.c | 19 ++---------------- linux-core/r128_drv.c | 18 +---------------- linux-core/radeon_drv.c | 18 +---------------- linux-core/savage_drv.c | 19 +----------------- linux-core/sis_drv.c | 19 +----------------- linux-core/tdfx_drv.c | 19 +----------------- linux/Makefile | 3 ++- linux/drmP.h | 4 +++- linux/drm_compat.h | 51 +++++++++++++++++++++++++++++++++++++++++++++---- linux/drm_stub.h | 27 +++++++++++++------------- linux/ffb_drv.c | 15 +-------------- linux/i810_dma.c | 5 ----- linux/i810_drv.c | 19 +----------------- linux/i830_dma.c | 5 ----- linux/i830_drv.c | 19 +----------------- linux/i915_drv.c | 18 +---------------- linux/mach64_drv.c | 19 +----------------- linux/mga_drv.c | 19 ++---------------- linux/r128_drv.c | 18 +---------------- linux/radeon_drv.c | 18 +---------------- linux/radeon_i2c.c | 5 +++++ linux/savage_drv.c | 19 +----------------- linux/sis_drv.c | 19 +----------------- linux/tdfx_drv.c | 19 +----------------- shared-core/via_drv.c | 19 +----------------- shared/via_drv.c | 19 +----------------- 37 files changed, 161 insertions(+), 476 deletions(-) diff --git a/linux-core/Makefile b/linux-core/Makefile index 9cfe7d5..b338f7d 100644 --- a/linux-core/Makefile +++ b/linux-core/Makefile @@ -69,7 +69,8 @@ DRM_MODULES ?= $(MODULE_LIST) DRMTEMPLATES = drm_auth.h drm_bufs.h drm_context.h drm_dma.h drm_drawable.h \ drm_drv.h drm_fops.h drm_init.h drm_ioctl.h drm_irq.h \ - drm_lock.h drm_memory.h drm_proc.h drm_stub.h drm_vm.h + drm_lock.h drm_memory.h drm_proc.h drm_stub.h drm_vm.h \ + drm_sysfs.h drm_core.h DRMSHARED = drm.h drm_sarea.h DRMHEADERS = drmP.h $(DRMSHARED) diff --git a/linux-core/drmP.h b/linux-core/drmP.h index 6a0a73a..f89db79 100644 --- a/linux-core/drmP.h +++ b/linux-core/drmP.h @@ -56,7 +56,9 @@ #include /* For (un)lock_kernel */ #include #include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) #include +#endif #if defined(__alpha__) || defined(__powerpc__) #include /* For pte_wrprotect */ #endif @@ -693,7 +695,7 @@ typedef struct drm_minor { typedef struct drm_global { unsigned int cards_limit; drm_minor_t *minors; - struct class_simple *drm_class; + struct drm_sysfs_class *drm_class; struct proc_dir_entry *proc_root; struct cdev drm_cdev; } drm_global_t; diff --git a/linux-core/drm_compat.h b/linux-core/drm_compat.h index d1c55cd..50e13b9 100644 --- a/linux-core/drm_compat.h +++ b/linux-core/drm_compat.h @@ -52,6 +52,10 @@ #define pte_unmap(pte) #endif +#ifndef module_param +#define module_param(name, type, perm) +#endif + #ifndef list_for_each_safe #define list_for_each_safe(pos, n, head) \ for (pos = (head)->next, n = pos->next; pos != (head); \ @@ -100,6 +104,17 @@ static inline struct page * vmalloc_to_page(void * vmalloc_addr) } #endif +#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,4,2) +#define down_write down +#define up_write up +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) +#define DRM_PCI_DEV(pdev) &pdev->dev +#else +#define DRM_PCI_DEV(pdev) NULL +#endif + #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) static inline unsigned iminor(struct inode *inode) { @@ -108,24 +123,52 @@ static inline unsigned iminor(struct inode *inode) #define old_encode_dev(x) (x) +struct drm_sysfs_class; struct class_simple; struct device; #define pci_dev_put(x) do {} while (0) #define pci_get_subsys pci_find_subsys -#define class_simple_device_add(...) do {} while (0) +static inline struct class_device *DRM(sysfs_device_add)(struct drm_sysfs_class *cs, dev_t dev, struct device *device, const char *fmt, ...){return NULL;} -static inline void class_simple_device_remove(dev_t dev){} +static inline void DRM(sysfs_device_remove)(dev_t dev){} -static inline void class_simple_destroy(struct class_simple *cs){} +static inline void DRM(sysfs_destroy)(struct drm_sysfs_class *cs){} -static inline struct class_simple *class_simple_create(struct module *owner, char *name) { return (struct class_simple *)owner; } +static inline struct drm_sysfs_class *DRM(sysfs_create)(struct module *owner, char *name) { return NULL; } #ifndef pci_pretty_name #define pci_pretty_name(x) x->name #endif +/* not used in 2.4, just makes the code compile */ +#define KOBJ_NAME_LEN 20 +struct kobject { + char name[KOBJ_NAME_LEN]; +}; +struct cdev { + struct kobject kobj; + struct module *owner; + struct file_operations *ops; + struct list_head list; + dev_t dev; + unsigned int count; +}; +static inline void cdev_del(struct cdev *cd){} +static inline void cdev_init(struct cdev *cd, struct file_operations *fop){} +static inline int cdev_add(struct cdev *cd, dev_t dt, unsigned u){ return 0;} + +static inline int register_chrdev_region(dev_t device, unsigned minor, char *name) { + return register_chrdev(device, name, NULL); +} + +static inline int unregister_chrdev_region(dev_t device, unsigned minor) { + return unregister_chrdev(device, NULL); +} + +static inline int kobject_put(struct kobject *kobj){ return 0;}; + #endif #ifndef __user diff --git a/linux-core/drm_stub.c b/linux-core/drm_stub.c index 7037338..52b0345 100644 --- a/linux-core/drm_stub.c +++ b/linux-core/drm_stub.c @@ -42,10 +42,8 @@ MODULE_LICENSE("GPL and additional rights"); MODULE_PARM_DESC(cards_limit, "Maximum number of graphics cards"); MODULE_PARM_DESC(debug, "Enable debug output"); -#ifdef module_param module_param(cards_limit, int, 0444); module_param(debug, int, 0666); -#endif drm_global_t *DRM(global); @@ -135,10 +133,10 @@ static int get_minor(struct pci_dev *pdev, const struct pci_device_id *ent) pci_request_regions(pdev, DRIVER_NAME); pci_enable_device(pdev); } - dev_class = class_simple_device_add(DRM(global)->drm_class, - MKDEV(DRM_MAJOR, minor), &pdev->dev, "card%d", minor); + dev_class = DRM(sysfs_device_add)(DRM(global)->drm_class, + MKDEV(DRM_MAJOR, minor), DRM_PCI_DEV(pdev), "card%d", minor); if (IS_ERR(dev_class)) { - printk (KERN_ERR "DRM: Error class_simple_device_add.\n"); + printk (KERN_ERR "DRM: Error sysfs_device_add.\n"); ret = PTR_ERR(dev_class); goto err_g2; } @@ -191,10 +189,10 @@ int DRM(get_secondary_minor)(drm_device_t *dev, drm_minor_t **sec_minor) goto err_g1; } - dev_class = class_simple_device_add(DRM(global)->drm_class, - MKDEV(DRM_MAJOR, minor), &dev->pdev->dev, "card%d", minor); + dev_class = DRM(sysfs_device_add)(DRM(global)->drm_class, + MKDEV(DRM_MAJOR, minor), DRM_PCI_DEV(dev->pdev), "card%d", minor); if (IS_ERR(dev_class)) { - printk (KERN_ERR "DRM: Error class_simple_device_add.\n"); + printk (KERN_ERR "DRM: Error sysfs_device_add.\n"); ret = PTR_ERR(dev_class); goto err_g2; } @@ -232,7 +230,7 @@ int DRM(put_minor)(drm_device_t *dev) DRM_DEBUG("release primary minor %d\n", dev->minor); DRM(proc_cleanup)(dev->minor, DRM(global)->proc_root, minors->dev_root); - class_simple_device_remove(MKDEV(DRM_MAJOR, dev->minor)); + DRM(sysfs_device_remove)(MKDEV(DRM_MAJOR, dev->minor)); *minors = (drm_minor_t){.dev = NULL, .class = DRM_MINOR_FREE}; DRM(free)(dev, sizeof(*dev), DRM_MEM_STUB); @@ -248,7 +246,8 @@ int DRM(put_minor)(drm_device_t *dev) DRM_DEBUG("unregistering inter_module \n"); inter_module_unregister("drm"); remove_proc_entry("dri", NULL); - class_simple_destroy(DRM(global)->drm_class); + DRM(sysfs_destroy)(DRM(global)->drm_class); + cdev_del(&DRM(global)->drm_cdev); unregister_chrdev_region(MKDEV(DRM_MAJOR, 0), DRM_MAX_MINOR); @@ -277,7 +276,7 @@ int DRM(put_secondary_minor)(drm_minor_t *sec_minor) DRM_DEBUG("release secondary minor %d\n", minor); DRM(proc_cleanup)(minor, DRM(global)->proc_root, sec_minor->dev_root); - class_simple_device_remove(MKDEV(DRM_MAJOR, minor)); + DRM(sysfs_device_remove)(MKDEV(DRM_MAJOR, minor)); *sec_minor = (drm_minor_t){.dev = NULL, .class = DRM_MINOR_FREE}; @@ -333,8 +332,8 @@ int DRM(probe)(struct pci_dev *pdev, const struct pci_device_id *ent) printk (KERN_ERR "DRM: Error registering drm major number.\n"); goto err_p2; } - - global->drm_class = class_simple_create(THIS_MODULE, "drm"); + + global->drm_class = DRM(sysfs_create)(THIS_MODULE, "drm"); if (IS_ERR(global->drm_class)) { printk (KERN_ERR "DRM: Error creating drm class.\n"); ret = PTR_ERR(global->drm_class); @@ -359,7 +358,7 @@ int DRM(probe)(struct pci_dev *pdev, const struct pci_device_id *ent) } return 0; err_p4: - class_simple_destroy(global->drm_class); + DRM(sysfs_destroy)(global->drm_class); err_p3: cdev_del(&global->drm_cdev); unregister_chrdev_region(dev, DRM_MAX_MINOR); diff --git a/linux-core/ffb_drv.c b/linux-core/ffb_drv.c index 5edafa0..1d78cbd 100644 --- a/linux-core/ffb_drv.c +++ b/linux-core/ffb_drv.c @@ -237,12 +237,7 @@ unsigned long ffb_get_unmapped_area(struct file *filp, return addr; } -#include "drm_auth.h" -#include "drm_bufs.h" -#include "drm_context.h" -#include "drm_dma.h" -#include "drm_drawable.h" -#include "drm_drv.h" +#include "drm_core.h" /* This functions must be here since it references DRM(numdevs) * which drm_drv.h declares. @@ -281,11 +276,3 @@ int ffb_presetup(drm_device_t *dev) return ret; } -#include "drm_fops.h" -#include "drm_init.h" -#include "drm_ioctl.h" -#include "drm_lock.h" -#include "drm_memory.h" -#include "drm_proc.h" -#include "drm_vm.h" -#include "drm_stub.h" diff --git a/linux-core/i810_dma.c b/linux-core/i810_dma.c index 0c82885..5d2165c 100644 --- a/linux-core/i810_dma.c +++ b/linux-core/i810_dma.c @@ -52,11 +52,6 @@ #define I810_BUF_UNMAPPED 0 #define I810_BUF_MAPPED 1 -#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,4,2) -#define down_write down -#define up_write up -#endif - static inline void i810_print_status_page(drm_device_t *dev) { drm_device_dma_t *dma = dev->dma; diff --git a/linux-core/i810_drv.c b/linux-core/i810_drv.c index 1ab8b01..00ca551 100644 --- a/linux-core/i810_drv.c +++ b/linux-core/i810_drv.c @@ -37,21 +37,4 @@ #include "i810_drm.h" #include "i810_drv.h" -#include "drm_agpsupport.h" -#include "drm_auth.h" -#include "drm_bufs.h" -#include "drm_context.h" -#include "drm_dma.h" -#include "drm_drawable.h" -#include "drm_drv.h" - -#include "drm_fops.h" -#include "drm_init.h" -#include "drm_ioctl.h" -#include "drm_irq.h" -#include "drm_lock.h" -#include "drm_memory.h" -#include "drm_proc.h" -#include "drm_vm.h" -#include "drm_stub.h" -#include "drm_scatter.h" +#include "drm_core.h" diff --git a/linux-core/i830_dma.c b/linux-core/i830_dma.c index f39611c..1ce2a35 100644 --- a/linux-core/i830_dma.c +++ b/linux-core/i830_dma.c @@ -54,11 +54,6 @@ #define I830_BUF_UNMAPPED 0 #define I830_BUF_MAPPED 1 -#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,4,2) -#define down_write down -#define up_write up -#endif - static inline void i830_print_status_page(drm_device_t *dev) { drm_device_dma_t *dma = dev->dma; diff --git a/linux-core/i830_drv.c b/linux-core/i830_drv.c index 900706c..eb45b27 100644 --- a/linux-core/i830_drv.c +++ b/linux-core/i830_drv.c @@ -39,21 +39,4 @@ #include "i830_drm.h" #include "i830_drv.h" -#include "drm_agpsupport.h" -#include "drm_auth.h" -#include "drm_bufs.h" -#include "drm_context.h" -#include "drm_dma.h" -#include "drm_drawable.h" -#include "drm_drv.h" - -#include "drm_fops.h" -#include "drm_init.h" -#include "drm_ioctl.h" -#include "drm_irq.h" -#include "drm_lock.h" -#include "drm_memory.h" -#include "drm_proc.h" -#include "drm_vm.h" -#include "drm_stub.h" -#include "drm_scatter.h" +#include "drm_core.h" diff --git a/linux-core/i915_drv.c b/linux-core/i915_drv.c index e74ef34..becce4d 100644 --- a/linux-core/i915_drv.c +++ b/linux-core/i915_drv.c @@ -14,20 +14,4 @@ #include "i915_drm.h" #include "i915_drv.h" -#include "drm_agpsupport.h" -#include "drm_auth.h" /* is this needed? */ -#include "drm_bufs.h" -#include "drm_context.h" /* is this needed? */ -#include "drm_drawable.h" /* is this needed? */ -#include "drm_dma.h" -#include "drm_drv.h" -#include "drm_fops.h" -#include "drm_init.h" -#include "drm_irq.h" -#include "drm_ioctl.h" -#include "drm_lock.h" -#include "drm_memory.h" /* */ -#include "drm_proc.h" -#include "drm_vm.h" -#include "drm_stub.h" -#include "drm_scatter.h" +#include "drm_core.h" diff --git a/linux-core/mach64_drv.c b/linux-core/mach64_drv.c index 32f6cdd..05170ab 100644 --- a/linux-core/mach64_drv.c +++ b/linux-core/mach64_drv.c @@ -34,21 +34,4 @@ #include "mach64_drm.h" #include "mach64_drv.h" -#include "drm_agpsupport.h" -#include "drm_auth.h" -#include "drm_bufs.h" -#include "drm_context.h" -#include "drm_dma.h" -#include "drm_drawable.h" -#include "drm_drv.h" -#include "drm_fops.h" -#include "drm_init.h" -#include "drm_irq.h" -#include "drm_ioctl.h" -#include "drm_lock.h" -#include "drm_memory.h" -#include "drm_pci.h" -#include "drm_proc.h" -#include "drm_vm.h" -#include "drm_stub.h" -#include "drm_scatter.h" +#include "drm_core.h" diff --git a/linux-core/mga_drv.c b/linux-core/mga_drv.c index 57940d5..54bfb2d 100644 --- a/linux-core/mga_drv.c +++ b/linux-core/mga_drv.c @@ -35,20 +35,5 @@ #include "drm.h" #include "mga_drm.h" #include "mga_drv.h" -#include "drm_agpsupport.h" -#include "drm_auth.h" -#include "drm_bufs.h" -#include "drm_context.h" -#include "drm_dma.h" -#include "drm_drawable.h" -#include "drm_drv.h" -#include "drm_fops.h" -#include "drm_init.h" -#include "drm_ioctl.h" -#include "drm_irq.h" -#include "drm_lock.h" -#include "drm_memory.h" -#include "drm_proc.h" -#include "drm_vm.h" -#include "drm_stub.h" -#include "drm_scatter.h" + +#include "drm_core.h" diff --git a/linux-core/r128_drv.c b/linux-core/r128_drv.c index 1dee161..8cfc996 100644 --- a/linux-core/r128_drv.c +++ b/linux-core/r128_drv.c @@ -37,20 +37,4 @@ #include "r128_drv.h" #include "ati_pcigart.h" -#include "drm_agpsupport.h" -#include "drm_auth.h" -#include "drm_bufs.h" -#include "drm_context.h" -#include "drm_dma.h" -#include "drm_drawable.h" -#include "drm_drv.h" -#include "drm_fops.h" -#include "drm_init.h" -#include "drm_ioctl.h" -#include "drm_irq.h" -#include "drm_lock.h" -#include "drm_memory.h" -#include "drm_proc.h" -#include "drm_vm.h" -#include "drm_stub.h" -#include "drm_scatter.h" +#include "drm_core.h" diff --git a/linux-core/radeon_drv.c b/linux-core/radeon_drv.c index 74e32df..965abc4 100644 --- a/linux-core/radeon_drv.c +++ b/linux-core/radeon_drv.c @@ -38,20 +38,4 @@ #include "radeon_drv.h" #include "ati_pcigart.h" -#include "drm_agpsupport.h" -#include "drm_auth.h" -#include "drm_bufs.h" -#include "drm_context.h" -#include "drm_dma.h" -#include "drm_drawable.h" -#include "drm_drv.h" -#include "drm_fops.h" -#include "drm_init.h" -#include "drm_ioctl.h" -#include "drm_irq.h" -#include "drm_lock.h" -#include "drm_memory.h" -#include "drm_proc.h" -#include "drm_vm.h" -#include "drm_stub.h" -#include "drm_scatter.h" +#include "drm_core.h" diff --git a/linux-core/savage_drv.c b/linux-core/savage_drv.c index 5d19682..0c51887 100644 --- a/linux-core/savage_drv.c +++ b/linux-core/savage_drv.c @@ -250,23 +250,6 @@ int savage_free_cont_mem(struct inode *inode, struct file *filp, #endif /* end #if 0 */ -#include "drm_agpsupport.h" -#include "drm_auth.h" -#include "drm_bufs.h" -#include "drm_context.h" -#include "drm_dma.h" -#include "drm_drawable.h" -#include "drm_drv.h" -#include "drm_fops.h" -#include "drm_init.h" -#include "drm_ioctl.h" -#include "drm_irq.h" -#include "drm_lock.h" -#include "drm_memory.h" -#include "drm_proc.h" -#include "drm_vm.h" -#include "drm_stub.h" -#include "drm_scatter.h" - +#include "drm_core.h" diff --git a/linux-core/sis_drv.c b/linux-core/sis_drv.c index 0b968dc..90e01cd 100644 --- a/linux-core/sis_drv.c +++ b/linux-core/sis_drv.c @@ -31,22 +31,5 @@ #include "sis_drm.h" #include "sis_drv.h" -#include "drm_auth.h" -#include "drm_agpsupport.h" -#include "drm_bufs.h" -#include "drm_context.h" -#include "drm_dma.h" -#include "drm_drawable.h" -#include "drm_drv.h" -#include "drm_fops.h" -#include "drm_init.h" -#include "drm_irq.h" -#include "drm_ioctl.h" -#include "drm_lock.h" -#include "drm_memory.h" -#include "drm_proc.h" -#include "drm_vm.h" -#include "drm_stub.h" -#include "drm_scatter.h" - +#include "drm_core.h" diff --git a/linux-core/tdfx_drv.c b/linux-core/tdfx_drv.c index f34d32d..d131444 100644 --- a/linux-core/tdfx_drv.c +++ b/linux-core/tdfx_drv.c @@ -34,24 +34,7 @@ #include "tdfx.h" #include "drmP.h" -#include "drm_agpsupport.h" -#include "drm_auth.h" -#include "drm_bufs.h" -#include "drm_context.h" -#include "drm_dma.h" -#include "drm_drawable.h" -#include "drm_drv.h" - -#include "drm_fops.h" -#include "drm_init.h" -#include "drm_ioctl.h" -#include "drm_irq.h" -#include "drm_lock.h" -#include "drm_memory.h" -#include "drm_proc.h" -#include "drm_vm.h" -#include "drm_stub.h" -#include "drm_scatter.h" +#include "drm_core.h" void DRM(driver_register_fns)(drm_device_t *dev) { diff --git a/linux/Makefile b/linux/Makefile index 9cfe7d5..b338f7d 100644 --- a/linux/Makefile +++ b/linux/Makefile @@ -69,7 +69,8 @@ DRM_MODULES ?= $(MODULE_LIST) DRMTEMPLATES = drm_auth.h drm_bufs.h drm_context.h drm_dma.h drm_drawable.h \ drm_drv.h drm_fops.h drm_init.h drm_ioctl.h drm_irq.h \ - drm_lock.h drm_memory.h drm_proc.h drm_stub.h drm_vm.h + drm_lock.h drm_memory.h drm_proc.h drm_stub.h drm_vm.h \ + drm_sysfs.h drm_core.h DRMSHARED = drm.h drm_sarea.h DRMHEADERS = drmP.h $(DRMSHARED) diff --git a/linux/drmP.h b/linux/drmP.h index 6a0a73a..f89db79 100644 --- a/linux/drmP.h +++ b/linux/drmP.h @@ -56,7 +56,9 @@ #include /* For (un)lock_kernel */ #include #include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) #include +#endif #if defined(__alpha__) || defined(__powerpc__) #include /* For pte_wrprotect */ #endif @@ -693,7 +695,7 @@ typedef struct drm_minor { typedef struct drm_global { unsigned int cards_limit; drm_minor_t *minors; - struct class_simple *drm_class; + struct drm_sysfs_class *drm_class; struct proc_dir_entry *proc_root; struct cdev drm_cdev; } drm_global_t; diff --git a/linux/drm_compat.h b/linux/drm_compat.h index d1c55cd..50e13b9 100644 --- a/linux/drm_compat.h +++ b/linux/drm_compat.h @@ -52,6 +52,10 @@ #define pte_unmap(pte) #endif +#ifndef module_param +#define module_param(name, type, perm) +#endif + #ifndef list_for_each_safe #define list_for_each_safe(pos, n, head) \ for (pos = (head)->next, n = pos->next; pos != (head); \ @@ -100,6 +104,17 @@ static inline struct page * vmalloc_to_page(void * vmalloc_addr) } #endif +#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,4,2) +#define down_write down +#define up_write up +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) +#define DRM_PCI_DEV(pdev) &pdev->dev +#else +#define DRM_PCI_DEV(pdev) NULL +#endif + #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) static inline unsigned iminor(struct inode *inode) { @@ -108,24 +123,52 @@ static inline unsigned iminor(struct inode *inode) #define old_encode_dev(x) (x) +struct drm_sysfs_class; struct class_simple; struct device; #define pci_dev_put(x) do {} while (0) #define pci_get_subsys pci_find_subsys -#define class_simple_device_add(...) do {} while (0) +static inline struct class_device *DRM(sysfs_device_add)(struct drm_sysfs_class *cs, dev_t dev, struct device *device, const char *fmt, ...){return NULL;} -static inline void class_simple_device_remove(dev_t dev){} +static inline void DRM(sysfs_device_remove)(dev_t dev){} -static inline void class_simple_destroy(struct class_simple *cs){} +static inline void DRM(sysfs_destroy)(struct drm_sysfs_class *cs){} -static inline struct class_simple *class_simple_create(struct module *owner, char *name) { return (struct class_simple *)owner; } +static inline struct drm_sysfs_class *DRM(sysfs_create)(struct module *owner, char *name) { return NULL; } #ifndef pci_pretty_name #define pci_pretty_name(x) x->name #endif +/* not used in 2.4, just makes the code compile */ +#define KOBJ_NAME_LEN 20 +struct kobject { + char name[KOBJ_NAME_LEN]; +}; +struct cdev { + struct kobject kobj; + struct module *owner; + struct file_operations *ops; + struct list_head list; + dev_t dev; + unsigned int count; +}; +static inline void cdev_del(struct cdev *cd){} +static inline void cdev_init(struct cdev *cd, struct file_operations *fop){} +static inline int cdev_add(struct cdev *cd, dev_t dt, unsigned u){ return 0;} + +static inline int register_chrdev_region(dev_t device, unsigned minor, char *name) { + return register_chrdev(device, name, NULL); +} + +static inline int unregister_chrdev_region(dev_t device, unsigned minor) { + return unregister_chrdev(device, NULL); +} + +static inline int kobject_put(struct kobject *kobj){ return 0;}; + #endif #ifndef __user diff --git a/linux/drm_stub.h b/linux/drm_stub.h index 7037338..52b0345 100644 --- a/linux/drm_stub.h +++ b/linux/drm_stub.h @@ -42,10 +42,8 @@ MODULE_LICENSE("GPL and additional rights"); MODULE_PARM_DESC(cards_limit, "Maximum number of graphics cards"); MODULE_PARM_DESC(debug, "Enable debug output"); -#ifdef module_param module_param(cards_limit, int, 0444); module_param(debug, int, 0666); -#endif drm_global_t *DRM(global); @@ -135,10 +133,10 @@ static int get_minor(struct pci_dev *pdev, const struct pci_device_id *ent) pci_request_regions(pdev, DRIVER_NAME); pci_enable_device(pdev); } - dev_class = class_simple_device_add(DRM(global)->drm_class, - MKDEV(DRM_MAJOR, minor), &pdev->dev, "card%d", minor); + dev_class = DRM(sysfs_device_add)(DRM(global)->drm_class, + MKDEV(DRM_MAJOR, minor), DRM_PCI_DEV(pdev), "card%d", minor); if (IS_ERR(dev_class)) { - printk (KERN_ERR "DRM: Error class_simple_device_add.\n"); + printk (KERN_ERR "DRM: Error sysfs_device_add.\n"); ret = PTR_ERR(dev_class); goto err_g2; } @@ -191,10 +189,10 @@ int DRM(get_secondary_minor)(drm_device_t *dev, drm_minor_t **sec_minor) goto err_g1; } - dev_class = class_simple_device_add(DRM(global)->drm_class, - MKDEV(DRM_MAJOR, minor), &dev->pdev->dev, "card%d", minor); + dev_class = DRM(sysfs_device_add)(DRM(global)->drm_class, + MKDEV(DRM_MAJOR, minor), DRM_PCI_DEV(dev->pdev), "card%d", minor); if (IS_ERR(dev_class)) { - printk (KERN_ERR "DRM: Error class_simple_device_add.\n"); + printk (KERN_ERR "DRM: Error sysfs_device_add.\n"); ret = PTR_ERR(dev_class); goto err_g2; } @@ -232,7 +230,7 @@ int DRM(put_minor)(drm_device_t *dev) DRM_DEBUG("release primary minor %d\n", dev->minor); DRM(proc_cleanup)(dev->minor, DRM(global)->proc_root, minors->dev_root); - class_simple_device_remove(MKDEV(DRM_MAJOR, dev->minor)); + DRM(sysfs_device_remove)(MKDEV(DRM_MAJOR, dev->minor)); *minors = (drm_minor_t){.dev = NULL, .class = DRM_MINOR_FREE}; DRM(free)(dev, sizeof(*dev), DRM_MEM_STUB); @@ -248,7 +246,8 @@ int DRM(put_minor)(drm_device_t *dev) DRM_DEBUG("unregistering inter_module \n"); inter_module_unregister("drm"); remove_proc_entry("dri", NULL); - class_simple_destroy(DRM(global)->drm_class); + DRM(sysfs_destroy)(DRM(global)->drm_class); + cdev_del(&DRM(global)->drm_cdev); unregister_chrdev_region(MKDEV(DRM_MAJOR, 0), DRM_MAX_MINOR); @@ -277,7 +276,7 @@ int DRM(put_secondary_minor)(drm_minor_t *sec_minor) DRM_DEBUG("release secondary minor %d\n", minor); DRM(proc_cleanup)(minor, DRM(global)->proc_root, sec_minor->dev_root); - class_simple_device_remove(MKDEV(DRM_MAJOR, minor)); + DRM(sysfs_device_remove)(MKDEV(DRM_MAJOR, minor)); *sec_minor = (drm_minor_t){.dev = NULL, .class = DRM_MINOR_FREE}; @@ -333,8 +332,8 @@ int DRM(probe)(struct pci_dev *pdev, const struct pci_device_id *ent) printk (KERN_ERR "DRM: Error registering drm major number.\n"); goto err_p2; } - - global->drm_class = class_simple_create(THIS_MODULE, "drm"); + + global->drm_class = DRM(sysfs_create)(THIS_MODULE, "drm"); if (IS_ERR(global->drm_class)) { printk (KERN_ERR "DRM: Error creating drm class.\n"); ret = PTR_ERR(global->drm_class); @@ -359,7 +358,7 @@ int DRM(probe)(struct pci_dev *pdev, const struct pci_device_id *ent) } return 0; err_p4: - class_simple_destroy(global->drm_class); + DRM(sysfs_destroy)(global->drm_class); err_p3: cdev_del(&global->drm_cdev); unregister_chrdev_region(dev, DRM_MAX_MINOR); diff --git a/linux/ffb_drv.c b/linux/ffb_drv.c index 5edafa0..1d78cbd 100644 --- a/linux/ffb_drv.c +++ b/linux/ffb_drv.c @@ -237,12 +237,7 @@ unsigned long ffb_get_unmapped_area(struct file *filp, return addr; } -#include "drm_auth.h" -#include "drm_bufs.h" -#include "drm_context.h" -#include "drm_dma.h" -#include "drm_drawable.h" -#include "drm_drv.h" +#include "drm_core.h" /* This functions must be here since it references DRM(numdevs) * which drm_drv.h declares. @@ -281,11 +276,3 @@ int ffb_presetup(drm_device_t *dev) return ret; } -#include "drm_fops.h" -#include "drm_init.h" -#include "drm_ioctl.h" -#include "drm_lock.h" -#include "drm_memory.h" -#include "drm_proc.h" -#include "drm_vm.h" -#include "drm_stub.h" diff --git a/linux/i810_dma.c b/linux/i810_dma.c index 0c82885..5d2165c 100644 --- a/linux/i810_dma.c +++ b/linux/i810_dma.c @@ -52,11 +52,6 @@ #define I810_BUF_UNMAPPED 0 #define I810_BUF_MAPPED 1 -#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,4,2) -#define down_write down -#define up_write up -#endif - static inline void i810_print_status_page(drm_device_t *dev) { drm_device_dma_t *dma = dev->dma; diff --git a/linux/i810_drv.c b/linux/i810_drv.c index 1ab8b01..00ca551 100644 --- a/linux/i810_drv.c +++ b/linux/i810_drv.c @@ -37,21 +37,4 @@ #include "i810_drm.h" #include "i810_drv.h" -#include "drm_agpsupport.h" -#include "drm_auth.h" -#include "drm_bufs.h" -#include "drm_context.h" -#include "drm_dma.h" -#include "drm_drawable.h" -#include "drm_drv.h" - -#include "drm_fops.h" -#include "drm_init.h" -#include "drm_ioctl.h" -#include "drm_irq.h" -#include "drm_lock.h" -#include "drm_memory.h" -#include "drm_proc.h" -#include "drm_vm.h" -#include "drm_stub.h" -#include "drm_scatter.h" +#include "drm_core.h" diff --git a/linux/i830_dma.c b/linux/i830_dma.c index f39611c..1ce2a35 100644 --- a/linux/i830_dma.c +++ b/linux/i830_dma.c @@ -54,11 +54,6 @@ #define I830_BUF_UNMAPPED 0 #define I830_BUF_MAPPED 1 -#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,4,2) -#define down_write down -#define up_write up -#endif - static inline void i830_print_status_page(drm_device_t *dev) { drm_device_dma_t *dma = dev->dma; diff --git a/linux/i830_drv.c b/linux/i830_drv.c index 900706c..eb45b27 100644 --- a/linux/i830_drv.c +++ b/linux/i830_drv.c @@ -39,21 +39,4 @@ #include "i830_drm.h" #include "i830_drv.h" -#include "drm_agpsupport.h" -#include "drm_auth.h" -#include "drm_bufs.h" -#include "drm_context.h" -#include "drm_dma.h" -#include "drm_drawable.h" -#include "drm_drv.h" - -#include "drm_fops.h" -#include "drm_init.h" -#include "drm_ioctl.h" -#include "drm_irq.h" -#include "drm_lock.h" -#include "drm_memory.h" -#include "drm_proc.h" -#include "drm_vm.h" -#include "drm_stub.h" -#include "drm_scatter.h" +#include "drm_core.h" diff --git a/linux/i915_drv.c b/linux/i915_drv.c index e74ef34..becce4d 100644 --- a/linux/i915_drv.c +++ b/linux/i915_drv.c @@ -14,20 +14,4 @@ #include "i915_drm.h" #include "i915_drv.h" -#include "drm_agpsupport.h" -#include "drm_auth.h" /* is this needed? */ -#include "drm_bufs.h" -#include "drm_context.h" /* is this needed? */ -#include "drm_drawable.h" /* is this needed? */ -#include "drm_dma.h" -#include "drm_drv.h" -#include "drm_fops.h" -#include "drm_init.h" -#include "drm_irq.h" -#include "drm_ioctl.h" -#include "drm_lock.h" -#include "drm_memory.h" /* */ -#include "drm_proc.h" -#include "drm_vm.h" -#include "drm_stub.h" -#include "drm_scatter.h" +#include "drm_core.h" diff --git a/linux/mach64_drv.c b/linux/mach64_drv.c index 32f6cdd..05170ab 100644 --- a/linux/mach64_drv.c +++ b/linux/mach64_drv.c @@ -34,21 +34,4 @@ #include "mach64_drm.h" #include "mach64_drv.h" -#include "drm_agpsupport.h" -#include "drm_auth.h" -#include "drm_bufs.h" -#include "drm_context.h" -#include "drm_dma.h" -#include "drm_drawable.h" -#include "drm_drv.h" -#include "drm_fops.h" -#include "drm_init.h" -#include "drm_irq.h" -#include "drm_ioctl.h" -#include "drm_lock.h" -#include "drm_memory.h" -#include "drm_pci.h" -#include "drm_proc.h" -#include "drm_vm.h" -#include "drm_stub.h" -#include "drm_scatter.h" +#include "drm_core.h" diff --git a/linux/mga_drv.c b/linux/mga_drv.c index 57940d5..54bfb2d 100644 --- a/linux/mga_drv.c +++ b/linux/mga_drv.c @@ -35,20 +35,5 @@ #include "drm.h" #include "mga_drm.h" #include "mga_drv.h" -#include "drm_agpsupport.h" -#include "drm_auth.h" -#include "drm_bufs.h" -#include "drm_context.h" -#include "drm_dma.h" -#include "drm_drawable.h" -#include "drm_drv.h" -#include "drm_fops.h" -#include "drm_init.h" -#include "drm_ioctl.h" -#include "drm_irq.h" -#include "drm_lock.h" -#include "drm_memory.h" -#include "drm_proc.h" -#include "drm_vm.h" -#include "drm_stub.h" -#include "drm_scatter.h" + +#include "drm_core.h" diff --git a/linux/r128_drv.c b/linux/r128_drv.c index 1dee161..8cfc996 100644 --- a/linux/r128_drv.c +++ b/linux/r128_drv.c @@ -37,20 +37,4 @@ #include "r128_drv.h" #include "ati_pcigart.h" -#include "drm_agpsupport.h" -#include "drm_auth.h" -#include "drm_bufs.h" -#include "drm_context.h" -#include "drm_dma.h" -#include "drm_drawable.h" -#include "drm_drv.h" -#include "drm_fops.h" -#include "drm_init.h" -#include "drm_ioctl.h" -#include "drm_irq.h" -#include "drm_lock.h" -#include "drm_memory.h" -#include "drm_proc.h" -#include "drm_vm.h" -#include "drm_stub.h" -#include "drm_scatter.h" +#include "drm_core.h" diff --git a/linux/radeon_drv.c b/linux/radeon_drv.c index 74e32df..965abc4 100644 --- a/linux/radeon_drv.c +++ b/linux/radeon_drv.c @@ -38,20 +38,4 @@ #include "radeon_drv.h" #include "ati_pcigart.h" -#include "drm_agpsupport.h" -#include "drm_auth.h" -#include "drm_bufs.h" -#include "drm_context.h" -#include "drm_dma.h" -#include "drm_drawable.h" -#include "drm_drv.h" -#include "drm_fops.h" -#include "drm_init.h" -#include "drm_ioctl.h" -#include "drm_irq.h" -#include "drm_lock.h" -#include "drm_memory.h" -#include "drm_proc.h" -#include "drm_vm.h" -#include "drm_stub.h" -#include "drm_scatter.h" +#include "drm_core.h" diff --git a/linux/radeon_i2c.c b/linux/radeon_i2c.c index a68b9ee..e259172 100644 --- a/linux/radeon_i2c.c +++ b/linux/radeon_i2c.c @@ -19,6 +19,9 @@ #include #include #include +#include + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) #include #include