Index: drivers/scsi/sym53c8xx_2/sym_defs.h
===================================================================
RCS file: /var/cvs/linux-2.6/drivers/scsi/sym53c8xx_2/sym_defs.h,v
retrieving revision 1.5
diff -u -p -r1.5 sym_defs.h
--- drivers/scsi/sym53c8xx_2/sym_defs.h 13 Sep 2004 15:23:29 -0000      1.5
+++ drivers/scsi/sym53c8xx_2/sym_defs.h 7 Oct 2004 19:37:43 -0000
@@ -763,27 +763,27 @@ struct sym_tblsel {
 *     Messages
 */

-#define        M_COMPLETE      (0x00)
-#define        M_EXTENDED      (0x01)
-#define        M_SAVE_DP       (0x02)
-#define        M_RESTORE_DP    (0x03)
-#define        M_DISCONNECT    (0x04)
-#define        M_ID_ERROR      (0x05)
-#define        M_ABORT         (0x06)
-#define        M_REJECT        (0x07)
-#define        M_NOOP          (0x08)
-#define        M_PARITY        (0x09)
-#define        M_LCOMPLETE     (0x0a)
-#define        M_FCOMPLETE     (0x0b)
-#define        M_RESET         (0x0c)
+#define        M_COMPLETE      COMMAND_COMPLETE
+#define        M_EXTENDED      EXTENDED_MESSAGE
+#define        M_SAVE_DP       SAVE_POINTERS
+#define        M_RESTORE_DP    RESTORE_POINTERS
+#define        M_DISCONNECT    DISCONNECT
+#define        M_ID_ERROR      INITIATOR_ERROR
+#define        M_ABORT         ABORT
+#define        M_REJECT        MESSAGE_REJECT
+#define        M_NOOP          NOP
+#define        M_PARITY        MSG_PARITY_ERROR
+#define        M_LCOMPLETE     LINKED_CMD_COMPLETE
+#define        M_FCOMPLETE     LINKED_FLG_CMD_COMPLETE
+#define        M_RESET         BUS_DEVICE_RESET
#define        M_ABORT_TAG     (0x0d)
#define        M_CLEAR_QUEUE   (0x0e)
-#define        M_INIT_REC      (0x0f)
-#define        M_REL_REC       (0x10)
+#define        M_INIT_REC      INITIATE_RECOVERY
+#define        M_REL_REC       RELEASE_RECOVERY
#define        M_TERMINATE     (0x11)
-#define        M_SIMPLE_TAG    (0x20)
-#define        M_HEAD_TAG      (0x21)
-#define        M_ORDERED_TAG   (0x22)
+#define        M_SIMPLE_TAG    SIMPLE_QUEUE_TAG
+#define        M_HEAD_TAG      HEAD_OF_QUEUE_TAG
+#define        M_ORDERED_TAG   ORDERED_QUEUE_TAG
#define        M_IGN_RESIDUE   (0x23)
#define        M_IDENTIFY      (0x80)

@@ -804,15 +804,15 @@ struct sym_tblsel {
 *     Status
 */

-#define        S_GOOD          (0x00)
-#define        S_CHECK_COND    (0x02)
-#define        S_COND_MET      (0x04)
-#define        S_BUSY          (0x08)
-#define        S_INT           (0x10)
-#define        S_INT_COND_MET  (0x14)
-#define        S_CONFLICT      (0x18)
+#define        S_GOOD          SAM_STAT_GOOD
+#define        S_CHECK_COND    SAM_STAT_CHECK_CONDITION
+#define        S_COND_MET      SAM_STAT_CONDITION_MET
+#define        S_BUSY          SAM_STAT_BUSY
+#define        S_INT           SAM_STAT_INTERMEDIATE
+#define        S_INT_COND_MET  SAM_STAT_INTERMEDIATE_CONDITION_MET
+#define        S_CONFLICT      SAM_STAT_RESERVATION_CONFLICT
#define        S_TERMINATED    (0x20)
-#define        S_QUEUE_FULL    (0x28)
+#define        S_QUEUE_FULL    SAM_STAT_TASK_SET_FULL
#define        S_ILLEGAL       (0xff)

#endif /* defined SYM_DEFS_H */
Index: drivers/scsi/sym53c8xx_2/sym_glue.c
===================================================================
RCS file: /var/cvs/linux-2.6/drivers/scsi/sym53c8xx_2/sym_glue.c,v
retrieving revision 1.64
diff -u -p -r1.64 sym_glue.c
--- drivers/scsi/sym53c8xx_2/sym_glue.c 4 Oct 2004 22:23:07 -0000       1.64
+++ drivers/scsi/sym53c8xx_2/sym_glue.c 7 Oct 2004 19:37:43 -0000
@@ -43,6 +43,7 @@
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/module.h>
+#include <linux/moduleparam.h>
#include <linux/spinlock.h>
#include <scsi/scsi.h>
#include <scsi/scsi_tcq.h>
@@ -56,6 +57,15 @@
#define NAME53C                "sym53c"
#define NAME53C8XX     "sym53c8xx"

+/* Bloody SPARC can't do anything normally ... */
+#ifdef __sparc__
+#define IRQ_FMT "%s"
+#define IRQ_PRM(x) __irq_itoa(x)
+#else
+#define IRQ_FMT "%d"
+#define IRQ_PRM(x) (x)
+#endif
+
static int __devinit
pci_get_base_address(struct pci_dev *pdev, int index, u_long *base)
{
@@ -919,7 +929,6 @@ static void sym_tune_dev_queuing(struct
       }
}

-#ifdef SYM_LINUX_BOOT_COMMAND_LINE_SUPPORT
/*
 *  Linux select queue depths function
 */
@@ -972,9 +981,6 @@ static int device_queue_depth(struct sym
       }
       return DEF_DEPTH;
}
-#else
-#define device_queue_depth(np, t, l)   (sym_driver_setup.max_tag)
-#endif /* SYM_LINUX_BOOT_COMMAND_LINE_SUPPORT */

/*
 * Linux entry point for device queue sizing.
@@ -1400,18 +1406,8 @@ static int sym_host_info(struct sym_hcb
       copy_info(&info, "Chip " NAME53C "%s, device id 0x%x, "
                        "revision id 0x%x\n",
                        np->s.chip_name, np->device_id, np->revision_id);
-       copy_info(&info, "At PCI address %s, "
-#ifdef __sparc__
-               "IRQ %s\n",
-#else
-               "IRQ %d\n",
-#endif
-               pci_name(np->s.device),
-#ifdef __sparc__
-               __irq_itoa(np->s.irq));
-#else
-               (int) np->s.irq);
-#endif
+       copy_info(&info, "At PCI address %s, IRQ " IRQ_FMT "\n",
+               pci_name(np->s.device), IRQ_PRM(np->s.irq));
       copy_info(&info, "Min. period factor %d, %s SCSI BUS%s\n",
                        (int) (np->minsync_dt ? np->minsync_dt : np->minsync),
                        np->maxwide ? "Wide" : "Narrow",
@@ -1539,19 +1535,9 @@ static struct Scsi_Host * __devinit sym_
       struct sym_fw *fw;

       printk(KERN_INFO
-               "sym%d: <%s> rev 0x%x at pci %s "
-#ifdef __sparc__
-               "irq %s\n",
-#else
-               "irq %d\n",
-#endif
+               "sym%d: <%s> rev 0x%x at pci %s irq " IRQ_FMT "\n",
               unit, dev->chip.name, dev->chip.revision_id,
-               pci_name(dev->pdev),
-#ifdef __sparc__
-               __irq_itoa(dev->s.irq));
-#else
-               dev->s.irq);
-#endif
+               pci_name(dev->pdev), IRQ_PRM(dev->s.irq));

       /*
        *  Get the firmware for this chip.
@@ -1768,16 +1754,11 @@ static inline void sym_get_nvram(struct
#endif /* SYM_CONF_NVRAM_SUPPORT */

/*
- *  Driver setup from the boot command line
+ * This is the old module parameter parsing code.  Will be removed eventually.
 */
-#ifdef SYM_LINUX_BOOT_COMMAND_LINE_SUPPORT

static struct sym_driver_setup
       sym_driver_safe_setup __initdata = SYM_LINUX_DRIVER_SAFE_SETUP;
-#ifdef MODULE
-char *sym53c8xx;       /* command line passed by insmod */
-MODULE_PARM(sym53c8xx, "s");
-#endif

#define OPT_MAX_TAG            1
#define OPT_BURST_ORDER                2
@@ -1823,17 +1804,20 @@ static int __init get_setup_token(char *
       }
       return 0;
}
-#endif /* SYM_LINUX_BOOT_COMMAND_LINE_SUPPORT */

int __init sym53c8xx_setup(char *str)
{
-#ifdef SYM_LINUX_BOOT_COMMAND_LINE_SUPPORT
       char *cur = str;
       char *pc, *pv;
       unsigned long val;
       unsigned int i,  c;
       int xi = 0;

+       printk(NAME53C8XX "Using old-style setup code.  Please switch to new "
+                       "module param code.\n"
+                       "See Documentation/scsi/sym53c8xx_2.txt for "
+                       "details.\n");
+
       while (cur != NULL && (pc = strchr(cur, ':')) != NULL) {
               char *pe;

@@ -1895,14 +1879,65 @@ int __init sym53c8xx_setup(char *str)
               if ((cur = strchr(cur, ARG_SEP)) != NULL)
                       ++cur;
       }
-#endif /* SYM_LINUX_BOOT_COMMAND_LINE_SUPPORT */
       return 1;
}

-#ifndef MODULE
+#ifdef MODULE
+static char *sym53c8xx;        /* command line passed by insmod */
+MODULE_PARM(sym53c8xx, "s");
+#else
__setup("sym53c8xx=", sym53c8xx_setup);
#endif

+/*
+ * The shiny new module param code.
+ */
+
+static char *excl_string;
+static char *safe_string;
+module_param_named(max_tag, sym_driver_setup.max_tag, ushort, 0);
+module_param_string(tag_ctrl, sym_driver_setup.tag_ctrl, 100, 0);
+module_param_named(burst, sym_driver_setup.burst_order, byte, 0);
+module_param_named(led, sym_driver_setup.scsi_led, byte, 0);
+module_param_named(diff, sym_driver_setup.scsi_diff, byte, 0);
+module_param_named(irqm, sym_driver_setup.irq_mode, byte, 0);
+module_param_named(buschk, sym_driver_setup.scsi_bus_check, byte, 0);
+module_param_named(hostid, sym_driver_setup.host_id, byte, 0);
+module_param_named(verb, sym_driver_setup.verbose, byte, 0);
+module_param_named(debug, sym_driver_setup.debug, ushort, 0);
+module_param_named(settle, sym_driver_setup.settle_delay, byte, 0);
+module_param_named(nvram, sym_driver_setup.use_nvram, byte, 0);
+module_param_named(excl, excl_string, charp, 0);
+module_param_named(safe, safe_string, charp, 0);
+
+static void sym2_setup_params(void)
+{
+       char *p = excl_string;
+       int xi = 0;
+
+       while (p && (xi < 8)) {
+               char *next_p;
+               int val = (int) simple_strtoul(p, &next_p, 0);
+               sym_driver_setup.excludes[xi++] = val;
+               p = next_p;
+       }
+
+       if (safe_string) {
+               if (*safe_string == 'y') {
+                       memcpy(&sym_driver_setup, &sym_driver_safe_setup,
+                               sizeof(sym_driver_setup));
+               } else if (*safe_string != 'n') {
+                       printk(KERN_WARNING NAME53C8XX "Ignoring parameter %s"
+                                       " passed to safe option", safe_string);
+               }
+       }
+
+#ifdef MODULE
+       if (sym53c8xx)
+               sym53c8xx_setup(sym53c8xx);
+#endif
+}
+
static int __devinit sym_check_supported(struct sym_device *device)
{
       struct sym_pci_chip *chip;
@@ -2143,6 +2178,8 @@ static int sym_detach(struct sym_hcb *np

MODULE_LICENSE("GPL");
MODULE_VERSION(SYM_VERSION);
+MODULE_AUTHOR("Matthew Wilcox <[email protected]>");
+MODULE_DESCRIPTION("NCR, Symbios and LSI 8xx and 1010 PCI SCSI adapters");

/*
 * Driver host template.
@@ -2427,6 +2464,8 @@ static struct pci_driver sym2_driver = {
static int __init sym2_init(void)
{
       int error;
+
+       sym2_setup_params();
       sym2_transport_template = spi_attach_transport(&sym2_transport_functions);
       if (!sym2_transport_template)
               return -ENODEV;