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;