- get rid of warning when linux/device.h doesnt exist - touch up the Makefile to let the ebuild handle the module details - fix support with io remap stuff in newer kernels - dont include headers that dont exist in 2.4.x kernels - use module_param() for 2.6.x and MODULE_PARM() for all others - dont declare all_devices as static since it is exported - dont include as the build system does it for us - in lrmi, map old flag names to new names for versions >= 2.6.26 --- src/svgalib-1.9.25/kernel/svgalib_helper/Makefile +++ src/svgalib-1.9.25/kernel/svgalib_helper/Makefile @@ -25,7 +25,7 @@ endif -CLASS_SIMPLE := $(shell grep class_simple_create $(KDIR)/include/linux/device.h) +CLASS_SIMPLE := $(shell grep -s class_simple_create $(KDIR)/include/linux/device.h) ifneq ($(CLASS_SIMPLE),) CLASS_CFLAGS = -DCLASS_SIMPLE=1 --- src/svgalib-1.9.25/kernel/svgalib_helper/Makefile.alt +++ src/svgalib-1.9.25/kernel/svgalib_helper/Makefile.alt @@ -37,7 +37,7 @@ CFLAGS += -DSVGALIB_HELPER_MAJOR=$(SVGALIB_HELPER_MAJOR) ifeq (1,$(findstring 1,$(MODVER))) - CFLAGS += -DMODVERSIONS -include $(INCLUDEDIR)/linux/modversions.h + CFLAGS += -DMODVERSIONS -DCONFIG_MODVERSIONS=1 endif TARGET = svgalib_helper @@ -50,7 +50,8 @@ endif endif -all: .depend $(OBJS) +modules: $(OBJS) +all: .depend modules $(TARGET).o: $(SRC:.c=.o) $(LD) -r $^ -o $@ @@ -61,8 +62,8 @@ install: device modules_install modules_install: $(OBJS) - mkdir -p /lib/modules/$(VER)/kernel/misc - install -m 0644 -c $(OBJS) /lib/modules/$(VER)/kernel/misc + mkdir -p $(TOPDIR)/lib/modules/$(VER)/kernel/misc + install -m 0644 -c $(OBJS) $(TOPDIR)/lib/modules/$(VER)/kernel/misc device: rm -f /dev/svgalib_helper* /dev/svga_helper* /dev/svga /dev/svga? --- src/svgalib-1.9.25/kernel/svgalib_helper/kernel26compat.h +++ src/svgalib-1.9.25/kernel/svgalib_helper/kernel26compat.h @@ -10,7 +10,7 @@ # define PCI_GET_CLASS pci_find_class # define PCI_GET_DEVICE pci_find_device -# if defined (PG_chainlock) +# if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,3) # define my_io_remap_page_range(vma, start, ofs, len, prot) \ io_remap_page_range(vma,start,ofs,len,prot) # else @@ -70,6 +70,7 @@ /* These are also not present in 2.6 kernels ... */ #if (!defined _LINUX_DEVFS_FS_KERNEL_H) || (defined KERNEL_2_6) +#include static inline int devfs_register_chrdev (unsigned int major, const char *name, struct file_operations *fops) { @@ -77,7 +78,12 @@ } static inline int devfs_unregister_chrdev (unsigned int major,const char *name) { - return unregister_chrdev (major, name); +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) + return unregister_chrdev (major, name); +#else + unregister_chrdev (major, name); + return 0; +#endif } #endif @@ -99,7 +105,8 @@ class_device_create(svgalib_helper_class, \ MKDEV(SVGALIB_HELPER_MAJOR, _minor), \ &sh_pci_devs[_minor]->dev->dev, _name); -#else /* 2.6.15 changed class_device_create */ +/* 2.6.15 changed class_device_create */ +#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26) # define SLH_SYSFS_ADD_CONTROL \ class_device_create(svgalib_helper_class, NULL, \ MKDEV(SVGALIB_HELPER_MAJOR, 0), \ @@ -109,7 +116,30 @@ class_device_create(svgalib_helper_class, NULL, \ MKDEV(SVGALIB_HELPER_MAJOR, _minor), \ &sh_pci_devs[_minor]->dev->dev, _name); -#endif /* 2.6.15 */ +/* 2.6.26 changed class_device_create to device_create */ +#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27) +# define SLH_SYSFS_ADD_CONTROL \ + device_create(svgalib_helper_class, NULL, \ + MKDEV(SVGALIB_HELPER_MAJOR, 0), \ + "svga"); + +# define SLH_SYSFS_ADD_DEVICE(_name, _minor) \ + device_create(svgalib_helper_class, &sh_pci_devs[_minor]->dev->dev, \ + MKDEV(SVGALIB_HELPER_MAJOR, _minor), \ + _name); +/* 2.6.27 changed device_create to device_create_drvdata */ +#else +# define SLH_SYSFS_ADD_CONTROL \ + device_create_drvdata(svgalib_helper_class, NULL, \ + MKDEV(SVGALIB_HELPER_MAJOR, 0), \ + "%s%d", "svga", 0); + +# define SLH_SYSFS_ADD_DEVICE(_name, _minor) \ + device_create_drvdata(svgalib_helper_class, \ + &sh_pci_devs[_minor]->dev->dev, \ + MKDEV(SVGALIB_HELPER_MAJOR, _minor), \ + "%s%d", _name, _minor); +#endif # define SLH_SYSFS_REMOVE_DEVICE(i) \ class_destroy(svgalib_helper_class); @@ -161,3 +191,7 @@ #ifndef PCI_VENDOR_ID_RENDITION #define PCI_VENDOR_ID_RENDITION 0x1163 #endif + +#ifndef IRQF_SHARED +# define IRQF_SHARED SA_SHIRQ +#endif --- src/svgalib-1.9.25/kernel/svgalib_helper/main.c +++ src/svgalib-1.9.25/kernel/svgalib_helper/main.c @@ -1,5 +1,3 @@ -#include - #if defined (CONFIG_MODVERSIONS) && !defined (MODVERSIONS) # define MODVERSIONS #endif @@ -17,15 +15,22 @@ #include #include #include +#include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18) #include +#endif #include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) #include +#endif #include #include #include #include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) #include +#endif #define __KERNEL_SYSCALLS__ #include @@ -50,7 +55,7 @@ #include "displaystart.h" int debug=0; -static int all_devices=0; +int all_devices=0; int num_devices=0; static char *sdev_id="svgalib_helper"; @@ -98,7 +103,11 @@ static volatile int vsync=0; static wait_queue_head_t vsync_wait; -static irqreturn_t vsync_interrupt(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t vsync_interrupt(int irq, void *dev_id +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19) +, struct pt_regs *regs +#endif +) { struct sh_pci_device *dev = (struct sh_pci_device *)dev_id; @@ -355,7 +364,7 @@ vsync=1; i=0; while(irqs[i]!=-1) - request_irq(irqs[i++], vsync_interrupt, SA_SHIRQ, "svgalib_helper", sdev_id); + request_irq(irqs[i++], vsync_interrupt, IRQF_SHARED, "svgalib_helper", sdev_id); vga_enable_vsync((void *)sdev_id); wait_event_interruptible(vsync_wait, !vsync); i=0; @@ -443,7 +452,7 @@ int i=sh_pci_devs[minor]->dev->irq; sh_pci_devs[minor]->opencount++; if(sh_pci_devs[minor]->opencount==1 && i!=0 && i!=-1 && i!=255) - request_irq(i, vsync_interrupt, SA_SHIRQ, "svgalib_helper", sh_pci_devs[minor]); + request_irq(i, vsync_interrupt, IRQF_SHARED, "svgalib_helper", sh_pci_devs[minor]); } #ifndef KERNEL_2_6 @@ -763,10 +772,15 @@ } +#ifdef KERNEL_2_6 +module_param(debug, int, 0); +module_param(all_devices, int, 0); +#else MODULE_PARM(debug, "i"); -MODULE_PARM_DESC(debug, "Debug output level."); - MODULE_PARM(all_devices, "i"); +#endif + +MODULE_PARM_DESC(debug, "Debug output level."); MODULE_PARM_DESC(all_devices, "Give access to all PCI devices, regardless of class."); --- src/svgalib-1.9.25/src/lrmi.6.c +++ src/svgalib-1.9.25/src/lrmi.6.c @@ -169,6 +169,13 @@ } } +#ifndef TF_MASK +#define TF_MASK X86_EFLAGS_TF +#define IF_MASK X86_EFLAGS_IF +#define IOPL_MASK X86_EFLAGS_IOPL +#define VIF_MASK X86_EFLAGS_VIF +#define VIP_MASK X86_EFLAGS_VIP +#endif #define DEFAULT_VM86_FLAGS (IF_MASK | IOPL_MASK) #define DEFAULT_STACK_SIZE 0x1000 --- src/svgalib-1.9.25/src/lrmi.9.c +++ src/svgalib-1.9.25/src/lrmi.9.c @@ -206,6 +206,13 @@ #if defined(__linux__) +#ifndef TF_MASK +#define TF_MASK X86_EFLAGS_TF +#define IF_MASK X86_EFLAGS_IF +#define IOPL_MASK X86_EFLAGS_IOPL +#define VIF_MASK X86_EFLAGS_VIF +#define VIP_MASK X86_EFLAGS_VIP +#endif #define DEFAULT_VM86_FLAGS (IF_MASK | IOPL_MASK) #elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) #define DEFAULT_VM86_FLAGS (PSL_I | PSL_IOPL) --- src/svgalib-1.9.25/lrmi-0.6m/lrmi.c +++ src/svgalib-1.9.25/lrmi-0.6m/lrmi.c @@ -170,6 +170,14 @@ } +#ifndef TF_MASK +#define TF_MASK X86_EFLAGS_TF +#define IF_MASK X86_EFLAGS_IF +#define IOPL_MASK X86_EFLAGS_IOPL +#define VIF_MASK X86_EFLAGS_VIF +#define VIP_MASK X86_EFLAGS_VIP +#endif + #define DEFAULT_VM86_FLAGS (IF_MASK | IOPL_MASK) #define DEFAULT_STACK_SIZE 0x1000 #define RETURN_TO_32_INT 255 --- src/svgalib-1.9.25/lrmi-0.9/lrmi.c +++ src/svgalib-1.9.25/lrmi-0.9/lrmi.c @@ -203,6 +203,13 @@ #if defined(__linux__) +#ifndef TF_MASK +#define TF_MASK X86_EFLAGS_TF +#define IF_MASK X86_EFLAGS_IF +#define IOPL_MASK X86_EFLAGS_IOPL +#define VIF_MASK X86_EFLAGS_VIF +#define VIP_MASK X86_EFLAGS_VIP +#endif #define DEFAULT_VM86_FLAGS (IF_MASK | IOPL_MASK) #elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) #define DEFAULT_VM86_FLAGS (PSL_I | PSL_IOPL)