diff -urpwN svgalib-1.9.17/kernel/svgalib_helper/Makefile svgalib-1.9.17.kernel2.6/kernel/svgalib_helper/Makefile --- svgalib-1.9.17/kernel/svgalib_helper/Makefile 2002-10-28 18:25:47.000000000 +0200 +++ svgalib-1.9.17.kernel2.6/kernel/svgalib_helper/Makefile 2003-08-03 14:34:40.000000000 +0200 @@ -1,45 +1,69 @@ include ../../Makefile.cfg -MODVER = $(shell grep CONFIG_MODVERSIONS $(INCLUDEDIR)/linux/autoconf.h) +ifndef INCLUDEDIR +INCLUDEDIR = /lib/modules/$(shell uname -r)/build/include +endif + +MODVER = $(shell grep CONFIG_MODVERSIONS $(INCLUDEDIR)/linux/autoconf.h 2>/dev/null) ifeq ($(MODVER),) @echo INCLUDEDIR is not set up correctly exit 1 endif -CFLAGS = -O2 -DLINUX -Dlinux -D__KERNEL__ -DMODULE -Wall $(DEBFLAGS) -CFLAGS += -I$(INCLUDEDIR) -CFLAGS += -DSVGALIB_HELPER_MAJOR=$(SVGALIB_HELPER_MAJOR) - -ifeq (1,$(findstring 1,$(MODVER))) - CFLAGS += -DMODVERSIONS -include $(INCLUDEDIR)/linux/modversions.h -endif - # Extract version number from headers. -VER = $(shell awk -F\" '/REL/ {print $$2}' $(INCLUDEDIR)/linux/version.h) +VER = $(shell awk -F\" '/REL/ {print $$2}' $(INCLUDEDIR)/linux/version.h 2>/dev/null) # Use version of current running kernel ifeq ($(VER),) VER = $(shell uname -r) endif +VER_MAJOR = $(shell echo $(VER) | cut -d. -f1) +VER_MINOR = $(shell echo $(VER) | cut -d. -f2) + +INCLUDES += -I$(INCLUDEDIR) +INCLUDES += -I$(INCLUDEDIR)/asm/mach-default + +#CFLAGS = -O2 -DLINUX -Dlinux -D__KERNEL__ -DMODULE -Wall $(DEBFLAGS) +CFLAGS = -O2 -DLINUX -Dlinux -D__KERNEL__ -DMODULE $(DEBFLAGS) -nostdinc -iwithprefix include +ifeq (2,$(VER_MAJOR)) + ifeq (6,$(VER_MINOR)) + CFLAGS += -DKBUILD_MODNAME="svgalib_helper" + endif +endif +CFLAGS += $(INCLUDES) +CFLAGS += -DSVGALIB_HELPER_MAJOR=$(SVGALIB_HELPER_MAJOR) + +ifeq (1,$(findstring 1,$(MODVER))) + CFLAGS += -DMODVERSIONS -include $(INCLUDEDIR)/linux/modversions.h +endif + TARGET = svgalib_helper OBJS = $(TARGET).o +ifeq (2,$(VER_MAJOR)) + ifeq (6,$(VER_MINOR)) + OBJS = $(TARGET).ko + endif +endif SRC = main.c interrupt.c i810.c -all: .depend $(TARGET).o +all: .depend $(OBJS) $(TARGET).o: $(SRC:.c=.o) $(LD) -r $^ -o $@ +$(TARGET).ko: $(TARGET).o + $(LD) -d -r $^ -o $@ + install: device modules_install -modules_install: $(TARGET).o +modules_install: $(OBJS) mkdir -p $(TOPDIR)/lib/modules/$(VER)/misc - install -m 0644 -c $(TARGET).o $(TOPDIR)/lib/modules/$(VER)/misc + install -m 0644 -c $(OBJS) $(TOPDIR)/lib/modules/$(VER)/misc device: - rm -f /dev/svgalib_helper* /dev/svga /dev/svga? + rm -f /dev/svgalib_helper* /dev/svga_helper* /dev/svga /dev/svga? mknod -m 666 /dev/svga c $(SVGALIB_HELPER_MAJOR) 0 mknod -m 666 /dev/svga1 c $(SVGALIB_HELPER_MAJOR) 1 mknod -m 666 /dev/svga2 c $(SVGALIB_HELPER_MAJOR) 2 @@ -47,7 +71,7 @@ device: mknod -m 666 /dev/svga4 c $(SVGALIB_HELPER_MAJOR) 4 clean: - rm -f *.o *~ core .depend *.bak *.orig + rm -f *.ko *.o *~ core .depend *.bak *.orig depend .depend dep: $(CC) $(CFLAGS) -M *.c > $@ diff -urpwN svgalib-1.9.17/kernel/svgalib_helper/kernel25compat.h svgalib-1.9.17.kernel2.6/kernel/svgalib_helper/kernel25compat.h --- svgalib-1.9.17/kernel/svgalib_helper/kernel25compat.h 2002-09-10 20:20:13.000000000 +0200 +++ svgalib-1.9.17.kernel2.6/kernel/svgalib_helper/kernel25compat.h 1970-01-01 02:00:00.000000000 +0200 @@ -1,20 +0,0 @@ -#define minor(x) MINOR(x) - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) -#define my_remap_page_range(vma, start, ofs, len, prot) remap_page_range(start,ofs,len,prot) -#else -#define my_remap_page_range(vma, start, ofs, len, prot) remap_page_range(vma,start,ofs,len,prot) -#endif - -#ifndef _LINUX_DEVFS_FS_KERNEL_H -static inline int devfs_register_chrdev (unsigned int major, const char *name, - struct file_operations *fops) -{ - return register_chrdev (major, name, fops); -} -static inline int devfs_unregister_chrdev (unsigned int major,const char *name) -{ - return unregister_chrdev (major, name); -} -#endif - diff -urpwN svgalib-1.9.17/kernel/svgalib_helper/kernel26compat.h svgalib-1.9.17.kernel2.6/kernel/svgalib_helper/kernel26compat.h --- svgalib-1.9.17/kernel/svgalib_helper/kernel26compat.h 1970-01-01 02:00:00.000000000 +0200 +++ svgalib-1.9.17.kernel2.6/kernel/svgalib_helper/kernel26compat.h 2003-08-03 14:33:28.000000000 +0200 @@ -0,0 +1,46 @@ +#ifndef minor +#define minor(x) MINOR(x) +#endif + +#ifndef KERNEL_VERSION +# include +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) + +# ifdef KERNEL_2_6 +# undef KERNEL_2_6 +# endif + +#define my_remap_page_range(vma, start, ofs, len, prot) remap_page_range(start,ofs,len,prot) + +typedef void irqreturn_t; + +#else + +# ifndef KERNEL_2_6 +# define KERNEL_2_6 +# endif + +#define my_remap_page_range(vma, start, ofs, len, prot) remap_page_range(vma,start,ofs,len,prot) + +#include + +# ifdef CONFIG_DEVFS_FS +typedef void* devfs_handle_t; +# endif + +#endif + +#ifndef _LINUX_DEVFS_FS_KERNEL_H +static inline int devfs_register_chrdev (unsigned int major, const char *name, + struct file_operations *fops) +{ + return register_chrdev (major, name, fops); +} +static inline int devfs_unregister_chrdev (unsigned int major,const char *name) +{ + return unregister_chrdev (major, name); +} +#endif + diff -urpwN svgalib-1.9.17/kernel/svgalib_helper/main.c svgalib-1.9.17.kernel2.6/kernel/svgalib_helper/main.c --- svgalib-1.9.17/kernel/svgalib_helper/main.c 2002-09-10 20:20:23.000000000 +0200 +++ svgalib-1.9.17.kernel2.6/kernel/svgalib_helper/main.c 2003-08-03 14:35:53.000000000 +0200 @@ -1,6 +1,12 @@ -#include +#include + +#if defined (CONFIG_MODVERSIONS) && !defined (MODVERSIONS) +# define MODVERSIONS +#endif #include /* printk() */ +#include + #include /* kmalloc() */ #include /* everything... */ #include /* error codes */ @@ -15,7 +21,7 @@ #include #include -#include "kernel25compat.h" +#include "kernel26compat.h" #include #include /* cli(), *_flags */ @@ -39,7 +45,7 @@ static struct sh_pci_device *sh_pci_devs static int irqs[MAX_NR_DEVICES]; -#ifdef CONFIG_DEVFS_FS +#if (defined CONFIG_DEVFS_FS) && (!defined KERNEL_2_6) static devfs_handle_t devfs_handle; #endif @@ -47,11 +53,11 @@ static int check_io_range(port,device) { return 1; } -static struct pci_dev *get_pci_dev(int pcipos, int minor) { +static struct pci_dev *get_pci_dev(int pcipos, int _minor) { - if(minor>=num_devices) return NULL; - if(minor>0) { - return sh_pci_devs[minor]->dev; + if(_minor>=num_devices) return NULL; + if(_minor>0) { + return sh_pci_devs[_minor]->dev; } else { if(pcipos>0 && pciposdev; @@ -60,11 +66,11 @@ static struct pci_dev *get_pci_dev(int p } -static int get_dev(int pcipos, int minor) { +static int get_dev(int pcipos, int _minor) { - if(minor>=num_devices) return 0; - if(minor>0) { - return minor; + if(_minor>=num_devices) return 0; + if(_minor>0) { + return _minor; } else { int i; int b, d; @@ -81,20 +87,33 @@ static int get_dev(int pcipos, int minor static volatile int vsync=0; static wait_queue_head_t vsync_wait; -static void vsync_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t vsync_interrupt(int irq, void *dev_id, struct pt_regs *regs) { struct sh_pci_device *dev = (struct sh_pci_device *)dev_id; if((char *)dev==sdev_id) { - if(!vga_test_vsync(dev))return; + if(!vga_test_vsync(dev)) +#ifndef KERNEL_2_6 + return; +#else + return IRQ_NONE; +#endif vga_ack_vsync(dev); } else { - if(!dev->test_vsync(dev)) return; + if(!dev->test_vsync(dev)) +#ifndef KERNEL_2_6 + return; +#else + return IRQ_NONE; +#endif dev->ack_vsync(dev); } vsync=0; wake_up_interruptible(&vsync_wait); +#ifdef KERNEL_2_6 + return IRQ_HANDLED; +#endif } @@ -103,10 +122,10 @@ static int svgalib_helper_ioctl( struct io_t iov; pcic_t pciv; - int minor = minor(inode->i_rdev); + int _minor = minor(inode->i_rdev); struct pci_dev *pdev; io_string_t iostr; - int i, ret; + int i = 0, ret; u8 pb; u16 pw; u32 pl; @@ -126,7 +145,7 @@ static int svgalib_helper_ioctl( struct if (iostr.length>4096) return -EINVAL; if ( (outb_str = kmalloc(iostr.length, GFP_KERNEL )) == NULL ) return -ENOMEM; copy_from_user(outb_str,iostr.string,iostr.length); - if(check_io_range(iostr.port,minor)) + if(check_io_range(iostr.port,_minor)) for(i=0; i5)) return -EINVAL; pciv.val=sh_pci_devs[i]->len[pciv.address]; copy_to_user((char *)arg,&pciv,sizeof(pciv)); @@ -248,7 +267,7 @@ static int svgalib_helper_ioctl( struct case _IOC_NR(SVGALIB_HELPER_IOCSPCIOUTB): copy_from_user(&pciv,(char *)arg,sizeof(pciv)); - pdev = get_pci_dev(pciv.pcipos, minor); + pdev = get_pci_dev(pciv.pcipos, _minor); if(!pdev) return -EINVAL; pb=pciv.val; pci_write_config_byte(pdev, pciv.address, pb); @@ -256,7 +275,7 @@ static int svgalib_helper_ioctl( struct case _IOC_NR(SVGALIB_HELPER_IOCSPCIOUTW): copy_from_user(&pciv,(char *)arg,sizeof(pciv)); - pdev = get_pci_dev(pciv.pcipos, minor); + pdev = get_pci_dev(pciv.pcipos, _minor); if(!pdev) return -EINVAL; pw=pciv.val; pci_write_config_word(pdev, pciv.address, pw); @@ -264,7 +283,7 @@ static int svgalib_helper_ioctl( struct case _IOC_NR(SVGALIB_HELPER_IOCSPCIOUTL): copy_from_user(&pciv,(char *)arg,sizeof(pciv)); - pdev = get_pci_dev(pciv.pcipos, minor); + pdev = get_pci_dev(pciv.pcipos, _minor); if(!pdev) return -EINVAL; pl=pciv.val; pci_write_config_dword(pdev, pciv.address, pl); @@ -284,17 +303,17 @@ static int svgalib_helper_ioctl( struct case _IOC_NR(SVGALIB_HELPER_IOCWAITRETRACE): /* Workaround for nvidia cards, which are not vga compatible */ - if(!minor && num_devices==2) minor=1; + if(!_minor && num_devices==2) _minor=1; - if(minor) { - i=sh_pci_devs[minor]->dev->irq; - dev_id = sh_pci_devs[minor]; + if(_minor) { + i=sh_pci_devs[_minor]->dev->irq; + dev_id = sh_pci_devs[_minor]; if(i==0 || i==-1 || i==255) return -EINVAL; } else dev_id = sdev_id; vsync=1; - if(minor) { + if(_minor) { request_irq(i, vsync_interrupt, SA_SHIRQ, "svgalib_helper", dev_id); } else { i=0; @@ -302,16 +321,16 @@ static int svgalib_helper_ioctl( struct request_irq(irqs[i++], vsync_interrupt, SA_SHIRQ, "svgalib_helper", dev_id); } - if(minor) { - sh_pci_devs[minor]->enable_vsync(sh_pci_devs[minor]); + if(_minor) { + sh_pci_devs[_minor]->enable_vsync(sh_pci_devs[_minor]); } else { - vga_enable_vsync(sh_pci_devs[minor]); + vga_enable_vsync(sh_pci_devs[_minor]); } interruptible_sleep_on(&vsync_wait); - if(minor) { - if(vsync) sh_pci_devs[minor]->ack_vsync(dev_id); + if(_minor) { + if(vsync) sh_pci_devs[_minor]->ack_vsync(dev_id); free_irq(i, dev_id); } else { i=0; @@ -331,17 +350,25 @@ static int svgalib_helper_ioctl( struct static int svgalib_helper_open( struct inode *inode, struct file * filp) { - int minor = minor(inode->i_rdev); + int _minor = minor(inode->i_rdev); - if(minor>=num_devices) return -ENODEV; + if(_minor>=num_devices) return -ENODEV; +#ifndef KERNEL_2_6 MOD_INC_USE_COUNT; +#else + try_module_get(THIS_MODULE); +#endif return 0; } static int svgalib_helper_release( struct inode *inode, struct file *filp) { +#ifndef KERNEL_2_6 MOD_DEC_USE_COUNT; +#else + module_put(THIS_MODULE); +#endif return 0; } @@ -399,14 +426,14 @@ int check_mem(int card, unsigned long st static int svgalib_helper_mmap(struct file *filp, struct vm_area_struct *vma) { unsigned long start=vma->vm_start; unsigned long end=vma->vm_end; - unsigned long minor = minor(filp->f_dentry->d_inode->i_rdev); + unsigned long _minor = minor(filp->f_dentry->d_inode->i_rdev); #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,0) unsigned long ofs=vma->vm_pgoff*PAGE_SIZE; #else unsigned long ofs=vma->vm_offset; #endif - if(check_mem(minor, ofs, end-start)) return -EPERM; + if(check_mem(_minor, ofs, end-start)) return -EPERM; if(remap_cache(vma, ofs, start, end)) return -EAGAIN; return 0; } @@ -432,14 +459,20 @@ int init_module(void) int result, i, j; struct pci_dev *dev=NULL; #ifdef CONFIG_DEVFS_FS +# ifndef KERNEL_2_6 devfs_handle_t slave_handle; #endif +#endif /* * Register your major, and accept a dynamic number */ printk(KERN_INFO "svgalib_helper: Initializing, version %s\n", versionstr); +#ifndef KERNEL_2_6 result = devfs_register_chrdev(SVGALIB_HELPER_MAJOR, "svgalib_helper", &svgalib_helper_fops); +#else + result = register_chrdev(SVGALIB_HELPER_MAJOR, "svgalib_helper", &svgalib_helper_fops); +#endif if (result < 0) { printk(KERN_WARNING "svgalib_helper: can't get major %d\n",SVGALIB_HELPER_MAJOR); return result; @@ -453,15 +486,26 @@ int init_module(void) for(i=1;i