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,

Reply via email to