]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] IEEE1394 updates to 2.5.40
authorBen Collins <bcollins@debian.org>
Fri, 4 Oct 2002 03:33:22 +0000 (20:33 -0700)
committerBen Collins <bcollins@debian.org>
Fri, 4 Oct 2002 03:33:22 +0000 (20:33 -0700)
- Fixup for new tq changes
- Fix dv1394 for use without devfs
- Fix dv1394 for PAL capture
- Fix a hard to trigger bug in nodemgr.c
- Add another broken firmware device to sbp2's list

drivers/ieee1394/dv1394-private.h
drivers/ieee1394/dv1394.c
drivers/ieee1394/eth1394.h
drivers/ieee1394/ieee1394_core.c
drivers/ieee1394/ieee1394_core.h
drivers/ieee1394/nodemgr.c
drivers/ieee1394/ohci1394.c
drivers/ieee1394/raw1394.c
drivers/ieee1394/sbp2.c

index e0c5feac87d76f0e5381c781212588b2edc423bc..7342b18e1b220b58a8f0b41ec159ed50f8fb1e06 100644 (file)
@@ -301,7 +301,8 @@ struct frame {
        unsigned long data; 
 
        /* Max # of packets per frame */
-        #define MAX_PACKETS 320
+       /* 320 is enough for NTSC, need to check what PAL is */
+        #define MAX_PACKETS 500
 
 
        /* a PAGE_SIZE memory pool for allocating CIP headers
index 17ed4770e671f2419352262d13c374dfa1c2de6b..fb83cad456af4f73fe1131a2108d1064c96d2426 100644 (file)
@@ -170,6 +170,15 @@ static spinlock_t dv1394_cards_lock = SPIN_LOCK_UNLOCKED;
 
 static struct hpsb_highlevel *hl_handle; /* = NULL; */
 
+static LIST_HEAD(dv1394_devfs);
+struct dv1394_devfs_entry {
+       struct list_head list;
+    devfs_handle_t devfs;
+       char name[32];
+       struct dv1394_devfs_entry *parent;
+};
+static spinlock_t dv1394_devfs_lock = SPIN_LOCK_UNLOCKED;
+
 /* translate from a struct file* to the corresponding struct video_card* */
 
 static inline struct video_card* file_to_video_card(struct file *file)
@@ -2555,17 +2564,6 @@ static struct file_operations dv1394_fops=
 
 /*** DEVFS HELPERS *********************************************************/
 
-#ifdef CONFIG_DEVFS_FS
-
-static LIST_HEAD(dv1394_devfs);
-struct dv1394_devfs_entry {
-       struct list_head list;
-    devfs_handle_t devfs;
-       char name[32];
-       struct dv1394_devfs_entry *parent;
-};
-static spinlock_t dv1394_devfs_lock = SPIN_LOCK_UNLOCKED;
-
 struct dv1394_devfs_entry *
 dv1394_devfs_find( char *name)
 {
@@ -2695,7 +2693,6 @@ void dv1394_devfs_del( char *name)
                kfree(p);
        }
 }
-#endif /* CONFIG_DEVFS */
 
 /*** IEEE1394 HPSB CALLBACKS ***********************************************/
 
@@ -2854,6 +2851,7 @@ static void dv1394_add_host (struct hpsb_host *host)
 {
        struct ti_ohci *ohci;
        char buf[16];
+       struct dv1394_devfs_entry *devfs_entry;
 
        /* We only work with the OHCI-1394 driver */
        if (strcmp(host->driver->name, OHCI1394_DRIVER_NAME))
@@ -2875,8 +2873,6 @@ static void dv1394_add_host (struct hpsb_host *host)
 #endif
 
 #ifdef CONFIG_DEVFS_FS
-{
-       struct dv1394_devfs_entry *devfs_entry;
        devfs_entry = dv1394_devfs_find("dv");
        if (devfs_entry != NULL) {
                snprintf(buf, sizeof(buf), "host%d", ohci->id);
@@ -2884,7 +2880,6 @@ static void dv1394_add_host (struct hpsb_host *host)
                dv1394_devfs_add_dir("NTSC", devfs_entry, NULL);
                dv1394_devfs_add_dir("PAL", devfs_entry, NULL);
        }
-}
 #endif
        
        dv1394_init(ohci, DV1394_NTSC, MODE_RECEIVE);
index 0deb53f5c6a869125d24b5c0c73021e53767bf5d..93ff59cb357c9817e8c905487084770405af2673 100644 (file)
@@ -51,7 +51,7 @@ struct host_info {
        struct net_device *dev;
 };
 
-/* This is our task struct. It's used for the complete_tq callback.  */
+/* This is our task struct. It's used for the packet complete callback.  */
 struct packet_task {
        struct sk_buff *skb;    /* Socket buffer we are sending */
        nodeid_t dest_node;     /* Destination of the packet */
index 6eb347deb9b231455375a5068e156dd795eaa85c..77ada1f2cf191b6a1c15301ade6f75b5ce3077ff 100644 (file)
@@ -19,6 +19,7 @@
 #include <linux/interrupt.h>
 #include <linux/module.h>
 #include <linux/proc_fs.h>
+#include <linux/tqueue.h>
 #include <asm/bitops.h>
 #include <asm/byteorder.h>
 #include <asm/semaphore.h>
@@ -66,6 +67,29 @@ static void dump_packet(const char *text, quadlet_t *data, int size)
         printk("\n");
 }
 
+static void process_complete_tasks(struct hpsb_packet *packet)
+{
+       struct list_head *lh, *next;
+
+       list_for_each_safe(lh, next, &packet->complete_tq) {
+               struct tq_struct *tq = list_entry(lh, struct tq_struct, list);
+               list_del(&tq->list);
+               schedule_task(tq);
+       }
+
+       return;
+}
+
+/**
+ * hpsb_add_packet_complete_task - add a new task for when a packet completes
+ * @packet: the packet whose completion we want the task added to
+ * @tq: the tq_struct describing the task to add
+ */
+void hpsb_add_packet_complete_task(struct hpsb_packet *packet, struct tq_struct *tq)
+{
+       list_add_tail(&tq->list, &packet->complete_tq);
+       return;
+}
 
 /**
  * alloc_hpsb_packet - allocate new packet structure
@@ -160,7 +184,10 @@ int hpsb_bus_reset(struct hpsb_host *host)
         abort_requests(host);
         host->in_bus_reset = 1;
         host->irm_id = -1;
+       host->is_irm = 0;
         host->busmgr_id = -1;
+       host->is_busmgr = 0;
+       host->is_cycmst = 0;
         host->node_count = 0;
         host->selfid_count = 0;
 
@@ -354,7 +381,10 @@ void hpsb_selfid_complete(struct hpsb_host *host, int phyid, int isroot)
         }
 
         host->reset_retries = 0;
-        if (isroot) host->driver->devctl(host, ACT_CYCLE_MASTER, 1);
+        if (isroot) {
+               host->driver->devctl(host, ACT_CYCLE_MASTER, 1);
+               host->is_cycmst = 1;
+       }
        atomic_inc(&host->generation);
        host->in_bus_reset = 0;
         highlevel_host_reset(host);
@@ -378,7 +408,7 @@ void hpsb_packet_sent(struct hpsb_host *host, struct hpsb_packet *packet,
                 packet->state = hpsb_complete;
                 up(&packet->state_change);
                 up(&packet->state_change);
-                run_task_queue(&packet->complete_tq);
+                process_complete_tasks(packet);
                 return;
         }
 
@@ -390,7 +420,7 @@ void hpsb_packet_sent(struct hpsb_host *host, struct hpsb_packet *packet,
         spin_unlock_irqrestore(&host->pending_pkt_lock, flags);
 
         up(&packet->state_change);
-        queue_task(&host->timeout_tq, &tq_timer);
+        schedule_task(&host->timeout_tq);
 }
 
 /**
@@ -528,7 +558,7 @@ void handle_packet_response(struct hpsb_host *host, int tcode, quadlet_t *data,
 
         packet->state = hpsb_complete;
         up(&packet->state_change);
-        run_task_queue(&packet->complete_tq);
+       process_complete_tasks(packet);
 }
 
 
@@ -748,7 +778,7 @@ void abort_requests(struct hpsb_host *host)
                 packet->state = hpsb_complete;
                 packet->ack_code = ACKX_ABORTED;
                 up(&packet->state_change);
-                run_task_queue(&packet->complete_tq);
+               process_complete_tasks(packet);
         }
 }
 
@@ -780,9 +810,9 @@ void abort_timedouts(struct hpsb_host *host)
                 }
         }
 
-        if (!list_empty(&host->pending_packets)) {
-                queue_task(&host->timeout_tq, &tq_timer);
-        }
+        if (!list_empty(&host->pending_packets))
+               schedule_task(&host->timeout_tq);
+
         spin_unlock_irqrestore(&host->pending_pkt_lock, flags);
 
         list_for_each(lh, &expiredlist) {
@@ -790,7 +820,7 @@ void abort_timedouts(struct hpsb_host *host)
                 packet->state = hpsb_complete;
                 packet->ack_code = ACKX_TIMEOUT;
                 up(&packet->state_change);
-                run_task_queue(&packet->complete_tq);
+               process_complete_tasks(packet);
         }
 }
 
@@ -1049,6 +1079,7 @@ EXPORT_SYMBOL(hpsb_remove_host);
 EXPORT_SYMBOL(hpsb_ref_host);
 EXPORT_SYMBOL(hpsb_unref_host);
 EXPORT_SYMBOL(hpsb_speedto_str);
+EXPORT_SYMBOL(hpsb_add_packet_complete_task);
 
 EXPORT_SYMBOL(alloc_hpsb_packet);
 EXPORT_SYMBOL(free_hpsb_packet);
index eb7ecd533c9be79b414d338c4c8c5807c8479fea..d62ff3e4b42d21343f606ce2fbc87a58b3a6ef15 100644 (file)
@@ -69,7 +69,7 @@ struct hpsb_packet {
         /* Very core internal, don't care. */
         struct semaphore state_change;
 
-        task_queue complete_tq;
+       struct list_head complete_tq;
 
         /* Store jiffies for implementing bus timeouts. */
         unsigned long sendtime;
@@ -77,6 +77,9 @@ struct hpsb_packet {
         quadlet_t embedded_header[5];
 };
 
+/* add a new task for when a packet completes */
+void hpsb_add_packet_complete_task(struct hpsb_packet *packet, struct tq_struct *tq);
+
 static inline struct hpsb_packet *driver_packet(struct list_head *l)
 {
        return list_entry(l, struct hpsb_packet, driver_list);
index 1940fc02a014478fe53213080a3415e677ac6ec5..23b8c1b7fd90738e3566bda7178c9a8656b6d0c5 100644 (file)
@@ -195,6 +195,10 @@ static int nodemgr_read_quadlet(struct hpsb_host *host,
                ret = hpsb_read(host, nodeid, generation, address, quad, 4);
                if (!ret)
                        break;
+
+               set_current_state(TASK_INTERRUPTIBLE);
+               if (schedule_timeout (HZ/3))
+                       return -1;
        }
        *quad = be32_to_cpu(*quad);
 
@@ -207,8 +211,10 @@ static int nodemgr_size_text_leaf(struct hpsb_host *host,
 {
        quadlet_t quad;
        int size = 0;
+
        if (nodemgr_read_quadlet(host, nodeid, generation, address, &quad))
                return -1;
+
        if (CONFIG_ROM_KEY(quad) == CONFIG_ROM_DESCRIPTOR_LEAF) {
                /* This is the offset.  */
                address += 4 * CONFIG_ROM_VALUE(quad); 
@@ -217,6 +223,7 @@ static int nodemgr_size_text_leaf(struct hpsb_host *host,
                /* Now we got the size of the text descriptor leaf. */
                size = CONFIG_ROM_LEAF_LENGTH(quad);
        }
+
        return size;
 }
 
@@ -228,7 +235,7 @@ static int nodemgr_read_text_leaf(struct node_entry *ne,
        int i, size, ret;
 
        if (nodemgr_read_quadlet(ne->host, ne->nodeid, ne->generation, address, &quad)
-           && CONFIG_ROM_KEY(quad) != CONFIG_ROM_DESCRIPTOR_LEAF)
+           || CONFIG_ROM_KEY(quad) != CONFIG_ROM_DESCRIPTOR_LEAF)
                return -1;
 
        /* This is the offset.  */
index f7dc11764538c41483724d52249954dd65e7261e..3504e3075aa8426fad813d57e13e21e8a10fcc5d 100644 (file)
@@ -154,7 +154,7 @@ printk(level "%s: " fmt "\n" , OHCI1394_DRIVER_NAME , ## args)
 printk(level "%s_%d: " fmt "\n" , OHCI1394_DRIVER_NAME, card , ## args)
 
 static char version[] __devinitdata =
-       "$Rev: 555 $ Ben Collins <bcollins@debian.org>";
+       "$Rev: 578 $ Ben Collins <bcollins@debian.org>";
 
 /* Module Parameters */
 MODULE_PARM(attempt_root,"i");
@@ -595,7 +595,7 @@ static void ohci_initialize(struct ti_ohci *ohci)
              ((((buf) >> 16) & 0xf) + (((buf) >> 20) & 0xf) * 10),
              ((((buf) >> 4) & 0xf) + ((buf) & 0xf) * 10), ohci->dev->irq,
              pci_resource_start(ohci->dev, 0),
-             pci_resource_start(ohci->dev, 0) + OHCI1394_REGISTER_SIZE,
+             pci_resource_start(ohci->dev, 0) + OHCI1394_REGISTER_SIZE - 1,
              ohci->max_packet_size);
 }
 
@@ -810,7 +810,6 @@ static int ohci_transmit(struct hpsb_host *host, struct hpsb_packet *packet)
 {
        struct ti_ohci *ohci = host->hostdata;
        struct dma_trm_ctx *d;
-       unsigned char tcode;
        unsigned long flags;
 
        if (packet->data_size > ohci->max_packet_size) {
@@ -821,10 +820,14 @@ static int ohci_transmit(struct hpsb_host *host, struct hpsb_packet *packet)
        }
 
        /* Decide wether we have an iso, a request, or a response packet */
-       tcode = (packet->header[0]>>4)&0xf;
-       if (tcode == TCODE_ISO_DATA) d = &ohci->it_context;
-       else if (tcode & 0x02) d = &ohci->at_resp_context;
-       else d = &ohci->at_req_context;
+       if (packet->type == hpsb_raw)
+               d = &ohci->at_req_context;
+       else if (packet->tcode == TCODE_ISO_DATA)
+               d = &ohci->it_context;
+       else if (packet->tcode & 0x02)
+               d = &ohci->at_resp_context;
+       else 
+               d = &ohci->at_req_context;
 
        spin_lock_irqsave(&d->lock,flags);
 
index a2ae34654a4fac4a0b52e5668105741c757d3582..6b850e688628eedc285cd381c49de5b6ce453180 100644 (file)
@@ -743,7 +743,7 @@ static int handle_remote_request(struct file_info *fi,
         }
 
         req->tq.data = req;
-        queue_task(&req->tq, &packet->complete_tq);
+        hpsb_add_packet_complete_task(packet, &req->tq);
 
         spin_lock_irq(&fi->reqlists_lock);
         list_add_tail(&req->list, &fi->req_pending);
@@ -786,7 +786,7 @@ static int handle_iso_send(struct file_info *fi, struct pending_request *req,
         req->tq.data = req;
         req->tq.routine = (void (*)(void*))queue_complete_req;
         req->req.length = 0;
-        queue_task(&req->tq, &packet->complete_tq);
+       hpsb_add_packet_complete_task(packet, &req->tq);
 
         spin_lock_irq(&fi->reqlists_lock);
         list_add_tail(&req->list, &fi->req_pending);
index ca6ff888d4925bcd349815c37d6743869083c1a3..9973409e811270006c631c90ec8bbec581eb6c23 100644 (file)
 #include <asm/byteorder.h>
 #include <asm/atomic.h>
 #include <asm/system.h>
+#include <asm/io.h>
 #include <asm/scatterlist.h>
 
 #ifdef CONFIG_KBUILD_2_5
 #include "sbp2.h"
 
 static char version[] __devinitdata =
-       "$Rev: 545 $ James Goodwin <jamesg@filanet.com>";
+       "$Rev: 584 $ James Goodwin <jamesg@filanet.com>";
 
 /*
  * Module load parameter definitions
  */
 
 /*
- * Change sbp2_max_speed on module load if you have a bad IEEE-1394 controller
- * that has trouble running 2KB packets at 400mb.
+ * Change sbp2_max_speed on module load if you have a bad IEEE-1394
+ * controller that has trouble running 2KB packets at 400mb.
  *
  * NOTE: On certain OHCI parts I have seen short packets on async transmit
  * (probably due to PCI latency/throughput issues with the part). You can
@@ -374,48 +375,54 @@ MODULE_PARM_DESC(sbp2_max_speed, "Force max speed (2 = 400mb default, 1 = 200mb,
 static int sbp2_max_speed = SPEED_400;
 
 /*
- * Set sbp2_serialize_io to 1 if you'd like only one scsi command sent down to
- * us at a time (debugging). This might be necessary for very badly behaved sbp2 devices.
+ * Set sbp2_serialize_io to 1 if you'd like only one scsi command sent
+ * down to us at a time (debugging). This might be necessary for very
+ * badly behaved sbp2 devices.
  */
 MODULE_PARM(sbp2_serialize_io,"i");
 MODULE_PARM_DESC(sbp2_serialize_io, "Serialize all I/O coming down from the scsi drivers (default = 0)");
 static int sbp2_serialize_io = 0;      /* serialize I/O - available for debugging purposes */
 
 /*
- * Bump up sbp2_max_sectors if you'd like to support very large sized transfers. Please note 
- * that some older sbp2 bridge chips are broken for transfers greater or equal to 128KB.
- * Default is a value of 255 sectors, or just under 128KB (at 512 byte sector size). I can note
- * that the Oxsemi sbp2 chipsets have no problems supporting very large transfer sizes.
+ * Bump up sbp2_max_sectors if you'd like to support very large sized
+ * transfers. Please note that some older sbp2 bridge chips are broken for
+ * transfers greater or equal to 128KB.  Default is a value of 255
+ * sectors, or just under 128KB (at 512 byte sector size). I can note that
+ * the Oxsemi sbp2 chipsets have no problems supporting very large
+ * transfer sizes.
  */
 MODULE_PARM(sbp2_max_sectors,"i");
 MODULE_PARM_DESC(sbp2_max_sectors, "Change max sectors per I/O supported (default = 255)");
 static int sbp2_max_sectors = SBP2_MAX_SECTORS;
 
 /*
- * Adjust sbp2_max_outstanding_cmds to tune performance if you have many sbp2 devices attached
- * (or if you need to do some debugging).
+ * Adjust sbp2_max_outstanding_cmds to tune performance if you have many
+ * sbp2 devices attached (or if you need to do some debugging).
  */
 MODULE_PARM(sbp2_max_outstanding_cmds,"i");
 MODULE_PARM_DESC(sbp2_max_outstanding_cmds, "Change max outstanding concurrent commands (default = 8)");
 static int sbp2_max_outstanding_cmds = SBP2SCSI_MAX_OUTSTANDING_CMDS;
 
 /*
- * Adjust sbp2_max_cmds_per_lun to tune performance. Enabling more than one concurrent/linked 
- * command per sbp2 device may allow some performance gains, but some older sbp2 devices have 
- * firmware bugs resulting in problems when linking commands... so, enable this with care. 
- * I can note that the Oxsemi OXFW911 sbp2 chipset works very well with large numbers of 
- * concurrent/linked commands.  =)
+ * Adjust sbp2_max_cmds_per_lun to tune performance. Enabling more than
+ * one concurrent/linked command per sbp2 device may allow some
+ * performance gains, but some older sbp2 devices have firmware bugs
+ * resulting in problems when linking commands... so, enable this with
+ * care.  I can note that the Oxsemi OXFW911 sbp2 chipset works very well
+ * with large numbers of concurrent/linked commands.  =)
  */
 MODULE_PARM(sbp2_max_cmds_per_lun,"i");
 MODULE_PARM_DESC(sbp2_max_cmds_per_lun, "Change max concurrent commands per sbp2 device (default = 1)");
 static int sbp2_max_cmds_per_lun = SBP2SCSI_MAX_CMDS_PER_LUN;
 
 /*
- * Exclusive login to sbp2 device? In most cases, the sbp2 driver should do an exclusive login, as it's
- * generally unsafe to have two hosts talking to a single sbp2 device at the same time (filesystem
- * coherency, etc.). If you're running an sbp2 device that supports multiple logins, and you're either
- * running read-only filesystems or some sort of special filesystem supporting multiple hosts, then
- * set sbp2_exclusive_login to zero. Note: The Oxsemi OXFW911 sbp2 chipset supports up to four
+ * Exclusive login to sbp2 device? In most cases, the sbp2 driver should
+ * do an exclusive login, as it's generally unsafe to have two hosts
+ * talking to a single sbp2 device at the same time (filesystem coherency,
+ * etc.). If you're running an sbp2 device that supports multiple logins,
+ * and you're either running read-only filesystems or some sort of special
+ * filesystem supporting multiple hosts, then set sbp2_exclusive_login to
+ * zero. Note: The Oxsemi OXFW911 sbp2 chipset supports up to four
  * concurrent logins.
  */
 MODULE_PARM(sbp2_exclusive_login,"i");
@@ -423,9 +430,14 @@ MODULE_PARM_DESC(sbp2_exclusive_login, "Exclusive login to sbp2 device (default
 static int sbp2_exclusive_login = 1;
 
 /*
- * SCSI inquiry hack for really badly behaved sbp2 devices. Turn this on if your sbp2 device
- * is not properly handling the SCSI inquiry command. This hack makes the inquiry look more
- * like a typical MS Windows inquiry.
+ * SCSI inquiry hack for really badly behaved sbp2 devices. Turn this on
+ * if your sbp2 device is not properly handling the SCSI inquiry command.
+ * This hack makes the inquiry look more like a typical MS Windows
+ * inquiry.
+ * 
+ * If sbp2_force_inquiry_hack=1 is required for your device to work,
+ * please submit the logged sbp2_firmware_revision value of this device to
+ * the linux1394-devel mailing list.
  */
 MODULE_PARM(sbp2_force_inquiry_hack,"i");
 MODULE_PARM_DESC(sbp2_force_inquiry_hack, "Force SCSI inquiry hack (default = 0)");
@@ -550,13 +562,17 @@ static struct hpsb_protocol_driver sbp2_driver = {
        .update =       sbp2_update
 };
 
-/* List of device firmware's that require a forced 36 byte inquiry. Note
- * the final 0x0 needs to be there for denoting end of list.  */
+/* List of device firmware's that require a forced 36 byte inquiry.  */
 static u32 sbp2_broken_inquiry_list[] = {
        0x00002800,     /* Stefan Richter <richtest@bauwesen.tu-cottbus.de> */
-       0x0
+                       /* DViCO Momobay CX-1 */
+       0x00000200      /* Andreas Plesch <plesch@fas.harvard.edu> */
+                       /* QPS Fire DVDBurner */
 };
 
+#define NUM_BROKEN_INQUIRY_DEVS \
+       (sizeof(sbp2_broken_inquiry_list)/sizeof(*sbp2_broken_inquiry_list))
+
 /**************************************
  * General utility functions
  **************************************/
@@ -787,7 +803,7 @@ sbp2util_allocate_write_request_packet(struct sbp2scsi_host_info *hi,
                request_packet->tq.routine = (void (*)(void*))sbp2util_free_request_packet;
                request_packet->tq.data = request_packet;
                request_packet->hi_context = hi;
-               queue_task(&request_packet->tq, &packet->complete_tq);
+               hpsb_add_packet_complete_task(packet, &request_packet->tq);
 
                /*
                 * Now, put the packet on the in-use list.
@@ -1914,7 +1930,10 @@ static void sbp2_parse_unit_directory(struct scsi_id_instance_data *scsi_id)
                        /* Firmware revision */
                        scsi_id->sbp2_firmware_revision
                                = CONFIG_ROM_VALUE(ud->quadlets[i]);
-                       SBP2_DEBUG("sbp2_firmware_revision = %x",
+                       if (sbp2_force_inquiry_hack)
+                               SBP2_INFO("sbp2_firmware_revision = %x",
+                                  (unsigned int) scsi_id->sbp2_firmware_revision);
+                       else    SBP2_DEBUG("sbp2_firmware_revision = %x",
                                   (unsigned int) scsi_id->sbp2_firmware_revision);
                        break;
 
@@ -1948,19 +1967,14 @@ static void sbp2_parse_unit_directory(struct scsi_id_instance_data *scsi_id)
 
        /* Check for a blacklisted set of devices that require us to force
         * a 36 byte host inquiry. This can be overriden as a module param
-        * (to force all hosts).
-        *
-        * XXX If this does not detect your firmware as being defective,
-        * but using the sbp2_force_inquiry_hack allows your device to
-        * work, please submit the value of your firmware revision to the
-        * linux1394-devel mailing list.  */
-       for (i = 0; sbp2_broken_inquiry_list[i]; i++) {
+        * (to force all hosts).  */
+       for (i = 0; i < NUM_BROKEN_INQUIRY_DEVS; i++) {
                if ((scsi_id->sbp2_firmware_revision & 0xffff00) ==
                                sbp2_broken_inquiry_list[i]) {
                        SBP2_WARN("Node " NODE_BUS_FMT ": Using 36byte inquiry workaround",
                                        NODE_BUS_ARGS(scsi_id->ne->nodeid));
                        scsi_id->workarounds |= SBP2_BREAKAGE_INQUIRY_HACK;
-                       break; // No need to continue.
+                       break; /* No need to continue. */
                }
        }
 }