On 6 Dec 1999, Oystein Viggen wrote:
> Hi
>
> The freemware kernel module won't compile on recent 2.3-kernels. It gives
> the following error:
I was working on the same thing at the same time as you, I suppose.
I also made patch for 2.3.x
This patch still enables the code to compile on 2.2.x kernels
http://moonflower.uark.edu/~ben
http://sparrow.uark.edu --- The SPARROW Lab ----
:r .signature
Index: freemware/kernel/host-linux.c
===================================================================
RCS file: /cvsroot-freemware/freemware/kernel/host-linux.c,v
retrieving revision 1.13
diff -u -r1.13 host-linux.c
--- freemware/kernel/host-linux.c 1999/12/02 00:12:31 1.13
+++ freemware/kernel/host-linux.c 1999/12/06 08:01:03
@@ -77,6 +77,9 @@
// For the /proc/freemware entry
int fmw_read_procmem(char *, char **, off_t, int, int);
+
+#if LINUX_VERSION_CODE >= VERSION_CODE(2,3,0)
+#else
static struct proc_dir_entry fmw_proc_entry = {
0, // dynamic inode
9, "freemware", // len, name
@@ -86,6 +89,7 @@
NULL,
&fmw_read_procmem, // read function
};
+#endif
@@ -93,7 +97,21 @@
/* Macros */
/************************************************************************/
-
+#ifdef CONFIG_PROC_FS
+#if LINUX_VERSION_CODE >= VERSION_CODE(2,3,0)
+static int freemware_proc_get_info(char * buf, char ** start, off_t offset, int len,
+int unused)
+{
+ #ifdef MODULE
+ #define MODULEPROCSTRING "Driver loaded as module"
+ #else
+ #define MODULEPROCSTRING "Driver compiled into kernel"
+ #endif
+ len=sprintf(buf, "Freemware " "\n"
+ "Load Type: " MODULEPROCSTRING "\n");
+ return len;
+}
+#endif
+#endif
// Check for pending signals
inline unsigned pending_signals(void)
{
@@ -145,7 +163,14 @@
}
// register the /proc entry
+ #ifdef CONFIG_PROC_FS
+#if LINUX_VERSION_CODE >= VERSION_CODE(2,3,0)
+ if (!create_proc_info_entry("freemware", 0, NULL, freemware_proc_get_info))
+ printk(KERN_ERR "freemware: registering /proc/freewmare failed\n");
+#else
proc_register_dynamic(&proc_root, &fmw_proc_entry);
+#endif
+ #endif
// retrieve the monitor physical pages
retrieve_monitor_pages();
@@ -168,7 +193,14 @@
unregister_chrdev(FMW_MAJOR, "freemware");
// unregister /proc entry
+
+ #ifdef CONFIG_PROC_FS
+#if LINUX_VERSION_CODE >= VERSION_CODE(2,3,0)
+ remove_proc_entry("freemware", NULL);
+#else
proc_unregister(&proc_root, fmw_proc_entry.low_ino);
+#endif
+ #endif
}
@@ -338,22 +370,41 @@
}
/* To simplify things, allow only page-aligned offsets */
+#if LINUX_VERSION_CODE >= VERSION_CODE(2,3,0)
+ if ( vma->vm_pgoff & (PAGE_SIZE - 1) ) {
+ printk(KERN_WARNING "freemware: unaligned offset %08lx\n", vma->vm_pgoff);
+#else
if ( vma->vm_offset & (PAGE_SIZE - 1) ) {
printk(KERN_WARNING "freemware: unaligned offset %08lx\n", vma->vm_offset);
+#endif
return -EINVAL;
}
/* Sanity check */
+#if LINUX_VERSION_CODE >= VERSION_CODE(2,3,0)
+ if ( vma->vm_pgoff < 0
+ || vma->vm_pgoff + (vma->vm_end - vma->vm_start)
+ > vm_pages.guest_n_pages * PAGE_SIZE )
+#else
if ( vma->vm_offset < 0
|| vma->vm_offset + (vma->vm_end - vma->vm_start)
> vm_pages.guest_n_pages * PAGE_SIZE )
+#endif
{
+#if LINUX_VERSION_CODE >= VERSION_CODE(2,3,0)
+ printk(KERN_WARNING "freemware: offset %08lx out of range\n", vma->vm_pgoff);
+#else
printk(KERN_WARNING "freemware: offset %08lx out of range\n",
vma->vm_offset);
+#endif
return -EINVAL;
}
/* Map all requested guest pages in ... */
+#if LINUX_VERSION_CODE >= VERSION_CODE(2,3,0)
+ firstpage = vma->vm_pgoff / PAGE_SIZE;
+#else
firstpage = vma->vm_offset / PAGE_SIZE;
+#endif
nr_pages = (vma->vm_end - vma->vm_start) / PAGE_SIZE;
for ( i = 0; i < nr_pages; i++ )
if ( remap_page_range( vma->vm_start + i*PAGE_SIZE,