--- linux/drivers/scsi/fdomain.c	Fri Nov 19 03:25:28 1999
+++ 4alan/drivers/scsi/fdomain.c	Sun Dec 19 15:30:23 1999
@@ -280,6 +280,7 @@
 #undef MODULE
 #endif
 
+#include <linux/init.h>
 #include <linux/sched.h>
 #include <asm/io.h>
 #include <linux/blk.h>
@@ -427,8 +428,8 @@
                                    parameters.  For example:
 				   insmod fdomain fdomain=0x140,11
 				*/
-static int               fdomain[]={ 0, 0, 0 };
-MODULE_PARM(fdomain, "2-3i");
+static char * fdomain = NULL;
+MODULE_PARM(fdomain, "s");
 #endif
 
 static unsigned long addresses[] = {
@@ -563,21 +564,30 @@
    printk( "\n" );
 }
 
-void fdomain_setup( char *str, int *ints )
+static int __init fdomain_setup( char *str )
 {
-   if (setup_called++ || ints[0] < 2 || ints[0] > 3) {
-      printk( "scsi: <fdomain>"
-	      " Usage: fdomain=<PORT_BASE>,<IRQ>[,<ADAPTER_ID>]\n" );
-      printk( "scsi: <fdomain> Bad LILO/INSMOD parameters?\n" );
-   }
+	int ints[4];
+
+	(void)get_options(str, ARRAY_SIZE(ints), ints);
 
-   port_base       = ints[0] >= 1 ? ints[1] : 0;
-   interrupt_level = ints[0] >= 2 ? ints[2] : 0;
-   this_id         = ints[0] >= 3 ? ints[3] : 0;
+	if (setup_called++ || ints[0] < 2 || ints[0] > 3) {
+		printk( "scsi: <fdomain>"
+		" Usage: fdomain=<PORT_BASE>,<IRQ>[,<ADAPTER_ID>]\n" );
+		printk( "scsi: <fdomain> Bad LILO/INSMOD parameters?\n" );
+		return 0;
+	}
+
+	port_base       = ints[0] >= 1 ? ints[1] : 0;
+	interrupt_level = ints[0] >= 2 ? ints[2] : 0;
+	this_id         = ints[0] >= 3 ? ints[3] : 0;
    
-   bios_major = bios_minor = -1; /* Use geometry for BIOS version >= 3.4 */
+	bios_major = bios_minor = -1; /* Use geometry for BIOS version >= 3.4 */
+	++setup_called;
+	return 1;
 }
 
+__setup("fdomain=", fdomain_setup);
+
 
 static void do_pause( unsigned amount )	/* Pause for amount*10 milliseconds */
 {
@@ -694,6 +704,7 @@
    printk( "scsi: <fdomain> fdomain_isa_detect:" );
 #endif
 
+
    for (i = 0; !bios_base && i < ADDRESS_COUNT; i++) {
 #if DEBUG_DETECT
       printk( " %lx(%lx),", addresses[i], bios_base );
@@ -880,13 +891,8 @@
    tpnt->proc_name = "fdomain";
 
 #ifdef MODULE
-   if (fdomain[0] || fdomain[1] || fdomain[2]) {
-      port_base       = fdomain[0];
-      interrupt_level = fdomain[1];
-      this_id         = fdomain[2];
-      bios_major = bios_minor = -1;
-      ++setup_called;
-   }
+	if (fdomain)
+		fdomain_setup(fdomain);
 #endif
    
    if (setup_called) {