Manual merge with Linus.
[sfrench/cifs-2.6.git] / drivers / ieee1394 / sbp2.c
1 /*
2  * sbp2.c - SBP-2 protocol driver for IEEE-1394
3  *
4  * Copyright (C) 2000 James Goodwin, Filanet Corporation (www.filanet.com)
5  * jamesg@filanet.com (JSG)
6  *
7  * Copyright (C) 2003 Ben Collins <bcollins@debian.org>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software Foundation,
21  * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22  */
23
24 /*
25  * Brief Description:
26  *
27  * This driver implements the Serial Bus Protocol 2 (SBP-2) over IEEE-1394
28  * under Linux. The SBP-2 driver is implemented as an IEEE-1394 high-level
29  * driver. It also registers as a SCSI lower-level driver in order to accept
30  * SCSI commands for transport using SBP-2.
31  *
32  * You may access any attached SBP-2 storage devices as if they were SCSI
33  * devices (e.g. mount /dev/sda1,  fdisk, mkfs, etc.).
34  *
35  * Current Issues:
36  *
37  *      - Error Handling: SCSI aborts and bus reset requests are handled somewhat
38  *        but the code needs additional debugging.
39  */
40
41 #include <linux/config.h>
42 #include <linux/kernel.h>
43 #include <linux/list.h>
44 #include <linux/string.h>
45 #include <linux/slab.h>
46 #include <linux/interrupt.h>
47 #include <linux/fs.h>
48 #include <linux/poll.h>
49 #include <linux/module.h>
50 #include <linux/moduleparam.h>
51 #include <linux/types.h>
52 #include <linux/delay.h>
53 #include <linux/sched.h>
54 #include <linux/blkdev.h>
55 #include <linux/smp_lock.h>
56 #include <linux/init.h>
57 #include <linux/pci.h>
58
59 #include <asm/current.h>
60 #include <asm/uaccess.h>
61 #include <asm/io.h>
62 #include <asm/byteorder.h>
63 #include <asm/atomic.h>
64 #include <asm/system.h>
65 #include <asm/scatterlist.h>
66
67 #include <scsi/scsi.h>
68 #include <scsi/scsi_cmnd.h>
69 #include <scsi/scsi_dbg.h>
70 #include <scsi/scsi_device.h>
71 #include <scsi/scsi_host.h>
72
73 #include "csr1212.h"
74 #include "ieee1394.h"
75 #include "ieee1394_types.h"
76 #include "ieee1394_core.h"
77 #include "nodemgr.h"
78 #include "hosts.h"
79 #include "highlevel.h"
80 #include "ieee1394_transactions.h"
81 #include "sbp2.h"
82
83 /*
84  * Module load parameter definitions
85  */
86
87 /*
88  * Change max_speed on module load if you have a bad IEEE-1394
89  * controller that has trouble running 2KB packets at 400mb.
90  *
91  * NOTE: On certain OHCI parts I have seen short packets on async transmit
92  * (probably due to PCI latency/throughput issues with the part). You can
93  * bump down the speed if you are running into problems.
94  */
95 static int max_speed = IEEE1394_SPEED_MAX;
96 module_param(max_speed, int, 0644);
97 MODULE_PARM_DESC(max_speed, "Force max speed (3 = 800mb, 2 = 400mb, 1 = 200mb, 0 = 100mb)");
98
99 /*
100  * Set serialize_io to 1 if you'd like only one scsi command sent
101  * down to us at a time (debugging). This might be necessary for very
102  * badly behaved sbp2 devices.
103  *
104  * TODO: Make this configurable per device.
105  */
106 static int serialize_io = 1;
107 module_param(serialize_io, int, 0444);
108 MODULE_PARM_DESC(serialize_io, "Serialize I/O coming from scsi drivers (default = 1, faster = 0)");
109
110 /*
111  * Bump up max_sectors if you'd like to support very large sized
112  * transfers. Please note that some older sbp2 bridge chips are broken for
113  * transfers greater or equal to 128KB.  Default is a value of 255
114  * sectors, or just under 128KB (at 512 byte sector size). I can note that
115  * the Oxsemi sbp2 chipsets have no problems supporting very large
116  * transfer sizes.
117  */
118 static int max_sectors = SBP2_MAX_SECTORS;
119 module_param(max_sectors, int, 0444);
120 MODULE_PARM_DESC(max_sectors, "Change max sectors per I/O supported (default = 255)");
121
122 /*
123  * Exclusive login to sbp2 device? In most cases, the sbp2 driver should
124  * do an exclusive login, as it's generally unsafe to have two hosts
125  * talking to a single sbp2 device at the same time (filesystem coherency,
126  * etc.). If you're running an sbp2 device that supports multiple logins,
127  * and you're either running read-only filesystems or some sort of special
128  * filesystem supporting multiple hosts (one such filesystem is OpenGFS,
129  * see opengfs.sourceforge.net for more info), then set exclusive_login
130  * to zero. Note: The Oxsemi OXFW911 sbp2 chipset supports up to four
131  * concurrent logins.
132  */
133 static int exclusive_login = 1;
134 module_param(exclusive_login, int, 0644);
135 MODULE_PARM_DESC(exclusive_login, "Exclusive login to sbp2 device (default = 1)");
136
137 /*
138  * SCSI inquiry hack for really badly behaved sbp2 devices. Turn this on
139  * if your sbp2 device is not properly handling the SCSI inquiry command.
140  * This hack makes the inquiry look more like a typical MS Windows inquiry
141  * by enforcing 36 byte inquiry and avoiding access to mode_sense page 8.
142  *
143  * If force_inquiry_hack=1 is required for your device to work,
144  * please submit the logged sbp2_firmware_revision value of this device to
145  * the linux1394-devel mailing list.
146  */
147 static int force_inquiry_hack;
148 module_param(force_inquiry_hack, int, 0644);
149 MODULE_PARM_DESC(force_inquiry_hack, "Force SCSI inquiry hack (default = 0)");
150
151 /*
152  * Export information about protocols/devices supported by this driver.
153  */
154 static struct ieee1394_device_id sbp2_id_table[] = {
155         {
156          .match_flags = IEEE1394_MATCH_SPECIFIER_ID | IEEE1394_MATCH_VERSION,
157          .specifier_id = SBP2_UNIT_SPEC_ID_ENTRY & 0xffffff,
158          .version = SBP2_SW_VERSION_ENTRY & 0xffffff},
159         {}
160 };
161
162 MODULE_DEVICE_TABLE(ieee1394, sbp2_id_table);
163
164 /*
165  * Debug levels, configured via kernel config, or enable here.
166  */
167
168 #define CONFIG_IEEE1394_SBP2_DEBUG 0
169 /* #define CONFIG_IEEE1394_SBP2_DEBUG_ORBS */
170 /* #define CONFIG_IEEE1394_SBP2_DEBUG_DMA */
171 /* #define CONFIG_IEEE1394_SBP2_DEBUG 1 */
172 /* #define CONFIG_IEEE1394_SBP2_DEBUG 2 */
173 /* #define CONFIG_IEEE1394_SBP2_PACKET_DUMP */
174
175 #ifdef CONFIG_IEEE1394_SBP2_DEBUG_ORBS
176 #define SBP2_ORB_DEBUG(fmt, args...)    HPSB_ERR("sbp2(%s): "fmt, __FUNCTION__, ## args)
177 static u32 global_outstanding_command_orbs = 0;
178 #define outstanding_orb_incr global_outstanding_command_orbs++
179 #define outstanding_orb_decr global_outstanding_command_orbs--
180 #else
181 #define SBP2_ORB_DEBUG(fmt, args...)
182 #define outstanding_orb_incr
183 #define outstanding_orb_decr
184 #endif
185
186 #ifdef CONFIG_IEEE1394_SBP2_DEBUG_DMA
187 #define SBP2_DMA_ALLOC(fmt, args...) \
188         HPSB_ERR("sbp2(%s)alloc(%d): "fmt, __FUNCTION__, \
189                  ++global_outstanding_dmas, ## args)
190 #define SBP2_DMA_FREE(fmt, args...) \
191         HPSB_ERR("sbp2(%s)free(%d): "fmt, __FUNCTION__, \
192                  --global_outstanding_dmas, ## args)
193 static u32 global_outstanding_dmas = 0;
194 #else
195 #define SBP2_DMA_ALLOC(fmt, args...)
196 #define SBP2_DMA_FREE(fmt, args...)
197 #endif
198
199 #if CONFIG_IEEE1394_SBP2_DEBUG >= 2
200 #define SBP2_DEBUG(fmt, args...)        HPSB_ERR("sbp2: "fmt, ## args)
201 #define SBP2_INFO(fmt, args...)         HPSB_ERR("sbp2: "fmt, ## args)
202 #define SBP2_NOTICE(fmt, args...)       HPSB_ERR("sbp2: "fmt, ## args)
203 #define SBP2_WARN(fmt, args...)         HPSB_ERR("sbp2: "fmt, ## args)
204 #elif CONFIG_IEEE1394_SBP2_DEBUG == 1
205 #define SBP2_DEBUG(fmt, args...)        HPSB_DEBUG("sbp2: "fmt, ## args)
206 #define SBP2_INFO(fmt, args...)         HPSB_INFO("sbp2: "fmt, ## args)
207 #define SBP2_NOTICE(fmt, args...)       HPSB_NOTICE("sbp2: "fmt, ## args)
208 #define SBP2_WARN(fmt, args...)         HPSB_WARN("sbp2: "fmt, ## args)
209 #else
210 #define SBP2_DEBUG(fmt, args...)
211 #define SBP2_INFO(fmt, args...)         HPSB_INFO("sbp2: "fmt, ## args)
212 #define SBP2_NOTICE(fmt, args...)       HPSB_NOTICE("sbp2: "fmt, ## args)
213 #define SBP2_WARN(fmt, args...)         HPSB_WARN("sbp2: "fmt, ## args)
214 #endif
215
216 #define SBP2_ERR(fmt, args...)          HPSB_ERR("sbp2: "fmt, ## args)
217 #define SBP2_DEBUG_ENTER()              SBP2_DEBUG("%s", __FUNCTION__)
218
219 /*
220  * Globals
221  */
222
223 static void sbp2scsi_complete_all_commands(struct scsi_id_instance_data *scsi_id,
224                                            u32 status);
225
226 static void sbp2scsi_complete_command(struct scsi_id_instance_data *scsi_id,
227                                       u32 scsi_status, struct scsi_cmnd *SCpnt,
228                                       void (*done)(struct scsi_cmnd *));
229
230 static struct scsi_host_template scsi_driver_template;
231
232 static const u8 sbp2_speedto_max_payload[] = { 0x7, 0x8, 0x9, 0xA, 0xB, 0xC };
233
234 static void sbp2_host_reset(struct hpsb_host *host);
235
236 static int sbp2_probe(struct device *dev);
237 static int sbp2_remove(struct device *dev);
238 static int sbp2_update(struct unit_directory *ud);
239
240 static struct hpsb_highlevel sbp2_highlevel = {
241         .name =         SBP2_DEVICE_NAME,
242         .host_reset =   sbp2_host_reset,
243 };
244
245 static struct hpsb_address_ops sbp2_ops = {
246         .write = sbp2_handle_status_write
247 };
248
249 #ifdef CONFIG_IEEE1394_SBP2_PHYS_DMA
250 static struct hpsb_address_ops sbp2_physdma_ops = {
251         .read = sbp2_handle_physdma_read,
252         .write = sbp2_handle_physdma_write,
253 };
254 #endif
255
256 static struct hpsb_protocol_driver sbp2_driver = {
257         .name           = "SBP2 Driver",
258         .id_table       = sbp2_id_table,
259         .update         = sbp2_update,
260         .driver         = {
261                 .name           = SBP2_DEVICE_NAME,
262                 .bus            = &ieee1394_bus_type,
263                 .probe          = sbp2_probe,
264                 .remove         = sbp2_remove,
265         },
266 };
267
268 /*
269  * List of device firmwares that require the inquiry hack.
270  * Yields a few false positives but did not break other devices so far.
271  */
272 static u32 sbp2_broken_inquiry_list[] = {
273         0x00002800,     /* Stefan Richter <stefanr@s5r6.in-berlin.de> */
274                         /* DViCO Momobay CX-1 */
275         0x00000200      /* Andreas Plesch <plesch@fas.harvard.edu> */
276                         /* QPS Fire DVDBurner */
277 };
278
279 /**************************************
280  * General utility functions
281  **************************************/
282
283 #ifndef __BIG_ENDIAN
284 /*
285  * Converts a buffer from be32 to cpu byte ordering. Length is in bytes.
286  */
287 static __inline__ void sbp2util_be32_to_cpu_buffer(void *buffer, int length)
288 {
289         u32 *temp = buffer;
290
291         for (length = (length >> 2); length--; )
292                 temp[length] = be32_to_cpu(temp[length]);
293
294         return;
295 }
296
297 /*
298  * Converts a buffer from cpu to be32 byte ordering. Length is in bytes.
299  */
300 static __inline__ void sbp2util_cpu_to_be32_buffer(void *buffer, int length)
301 {
302         u32 *temp = buffer;
303
304         for (length = (length >> 2); length--; )
305                 temp[length] = cpu_to_be32(temp[length]);
306
307         return;
308 }
309 #else /* BIG_ENDIAN */
310 /* Why waste the cpu cycles? */
311 #define sbp2util_be32_to_cpu_buffer(x,y)
312 #define sbp2util_cpu_to_be32_buffer(x,y)
313 #endif
314
315 #ifdef CONFIG_IEEE1394_SBP2_PACKET_DUMP
316 /*
317  * Debug packet dump routine. Length is in bytes.
318  */
319 static void sbp2util_packet_dump(void *buffer, int length, char *dump_name,
320                                  u32 dump_phys_addr)
321 {
322         int i;
323         unsigned char *dump = buffer;
324
325         if (!dump || !length || !dump_name)
326                 return;
327
328         if (dump_phys_addr)
329                 printk("[%s, 0x%x]", dump_name, dump_phys_addr);
330         else
331                 printk("[%s]", dump_name);
332         for (i = 0; i < length; i++) {
333                 if (i > 0x3f) {
334                         printk("\n   ...");
335                         break;
336                 }
337                 if ((i & 0x3) == 0)
338                         printk("  ");
339                 if ((i & 0xf) == 0)
340                         printk("\n   ");
341                 printk("%02x ", (int)dump[i]);
342         }
343         printk("\n");
344
345         return;
346 }
347 #else
348 #define sbp2util_packet_dump(w,x,y,z)
349 #endif
350
351 /*
352  * Goofy routine that basically does a down_timeout function.
353  */
354 static int sbp2util_down_timeout(atomic_t *done, int timeout)
355 {
356         int i;
357
358         for (i = timeout; (i > 0 && atomic_read(done) == 0); i-= HZ/10) {
359                 if (msleep_interruptible(100))  /* 100ms */
360                         return 1;
361         }
362         return (i > 0) ? 0 : 1;
363 }
364
365 /* Free's an allocated packet */
366 static void sbp2_free_packet(struct hpsb_packet *packet)
367 {
368         hpsb_free_tlabel(packet);
369         hpsb_free_packet(packet);
370 }
371
372 /* This is much like hpsb_node_write(), except it ignores the response
373  * subaction and returns immediately. Can be used from interrupts.
374  */
375 static int sbp2util_node_write_no_wait(struct node_entry *ne, u64 addr,
376                                        quadlet_t *buffer, size_t length)
377 {
378         struct hpsb_packet *packet;
379
380         packet = hpsb_make_writepacket(ne->host, ne->nodeid,
381                                        addr, buffer, length);
382         if (!packet)
383                 return -ENOMEM;
384
385         hpsb_set_packet_complete_task(packet,
386                                       (void (*)(void *))sbp2_free_packet,
387                                       packet);
388
389         hpsb_node_fill_packet(ne, packet);
390
391         if (hpsb_send_packet(packet) < 0) {
392                 sbp2_free_packet(packet);
393                 return -EIO;
394         }
395
396         return 0;
397 }
398
399 /*
400  * This function is called to create a pool of command orbs used for
401  * command processing. It is called when a new sbp2 device is detected.
402  */
403 static int sbp2util_create_command_orb_pool(struct scsi_id_instance_data *scsi_id)
404 {
405         struct sbp2scsi_host_info *hi = scsi_id->hi;
406         int i;
407         unsigned long flags, orbs;
408         struct sbp2_command_info *command;
409
410         orbs = serialize_io ? 2 : SBP2_MAX_CMDS;
411
412         spin_lock_irqsave(&scsi_id->sbp2_command_orb_lock, flags);
413         for (i = 0; i < orbs; i++) {
414                 command = kzalloc(sizeof(*command), GFP_ATOMIC);
415                 if (!command) {
416                         spin_unlock_irqrestore(&scsi_id->sbp2_command_orb_lock,
417                                                flags);
418                         return -ENOMEM;
419                 }
420                 command->command_orb_dma =
421                     pci_map_single(hi->host->pdev, &command->command_orb,
422                                    sizeof(struct sbp2_command_orb),
423                                    PCI_DMA_BIDIRECTIONAL);
424                 SBP2_DMA_ALLOC("single command orb DMA");
425                 command->sge_dma =
426                     pci_map_single(hi->host->pdev,
427                                    &command->scatter_gather_element,
428                                    sizeof(command->scatter_gather_element),
429                                    PCI_DMA_BIDIRECTIONAL);
430                 SBP2_DMA_ALLOC("scatter_gather_element");
431                 INIT_LIST_HEAD(&command->list);
432                 list_add_tail(&command->list, &scsi_id->sbp2_command_orb_completed);
433         }
434         spin_unlock_irqrestore(&scsi_id->sbp2_command_orb_lock, flags);
435         return 0;
436 }
437
438 /*
439  * This function is called to delete a pool of command orbs.
440  */
441 static void sbp2util_remove_command_orb_pool(struct scsi_id_instance_data *scsi_id)
442 {
443         struct hpsb_host *host = scsi_id->hi->host;
444         struct list_head *lh, *next;
445         struct sbp2_command_info *command;
446         unsigned long flags;
447
448         spin_lock_irqsave(&scsi_id->sbp2_command_orb_lock, flags);
449         if (!list_empty(&scsi_id->sbp2_command_orb_completed)) {
450                 list_for_each_safe(lh, next, &scsi_id->sbp2_command_orb_completed) {
451                         command = list_entry(lh, struct sbp2_command_info, list);
452
453                         /* Release our generic DMA's */
454                         pci_unmap_single(host->pdev, command->command_orb_dma,
455                                          sizeof(struct sbp2_command_orb),
456                                          PCI_DMA_BIDIRECTIONAL);
457                         SBP2_DMA_FREE("single command orb DMA");
458                         pci_unmap_single(host->pdev, command->sge_dma,
459                                          sizeof(command->scatter_gather_element),
460                                          PCI_DMA_BIDIRECTIONAL);
461                         SBP2_DMA_FREE("scatter_gather_element");
462
463                         kfree(command);
464                 }
465         }
466         spin_unlock_irqrestore(&scsi_id->sbp2_command_orb_lock, flags);
467         return;
468 }
469
470 /*
471  * This function finds the sbp2_command for a given outstanding command
472  * orb.Only looks at the inuse list.
473  */
474 static struct sbp2_command_info *sbp2util_find_command_for_orb(
475                 struct scsi_id_instance_data *scsi_id, dma_addr_t orb)
476 {
477         struct sbp2_command_info *command;
478         unsigned long flags;
479
480         spin_lock_irqsave(&scsi_id->sbp2_command_orb_lock, flags);
481         if (!list_empty(&scsi_id->sbp2_command_orb_inuse)) {
482                 list_for_each_entry(command, &scsi_id->sbp2_command_orb_inuse, list) {
483                         if (command->command_orb_dma == orb) {
484                                 spin_unlock_irqrestore(&scsi_id->sbp2_command_orb_lock, flags);
485                                 return command;
486                         }
487                 }
488         }
489         spin_unlock_irqrestore(&scsi_id->sbp2_command_orb_lock, flags);
490
491         SBP2_ORB_DEBUG("could not match command orb %x", (unsigned int)orb);
492
493         return NULL;
494 }
495
496 /*
497  * This function finds the sbp2_command for a given outstanding SCpnt.
498  * Only looks at the inuse list.
499  */
500 static struct sbp2_command_info *sbp2util_find_command_for_SCpnt(struct scsi_id_instance_data *scsi_id, void *SCpnt)
501 {
502         struct sbp2_command_info *command;
503         unsigned long flags;
504
505         spin_lock_irqsave(&scsi_id->sbp2_command_orb_lock, flags);
506         if (!list_empty(&scsi_id->sbp2_command_orb_inuse)) {
507                 list_for_each_entry(command, &scsi_id->sbp2_command_orb_inuse, list) {
508                         if (command->Current_SCpnt == SCpnt) {
509                                 spin_unlock_irqrestore(&scsi_id->sbp2_command_orb_lock, flags);
510                                 return command;
511                         }
512                 }
513         }
514         spin_unlock_irqrestore(&scsi_id->sbp2_command_orb_lock, flags);
515         return NULL;
516 }
517
518 /*
519  * This function allocates a command orb used to send a scsi command.
520  */
521 static struct sbp2_command_info *sbp2util_allocate_command_orb(
522                 struct scsi_id_instance_data *scsi_id,
523                 struct scsi_cmnd *Current_SCpnt,
524                 void (*Current_done)(struct scsi_cmnd *))
525 {
526         struct list_head *lh;
527         struct sbp2_command_info *command = NULL;
528         unsigned long flags;
529
530         spin_lock_irqsave(&scsi_id->sbp2_command_orb_lock, flags);
531         if (!list_empty(&scsi_id->sbp2_command_orb_completed)) {
532                 lh = scsi_id->sbp2_command_orb_completed.next;
533                 list_del(lh);
534                 command = list_entry(lh, struct sbp2_command_info, list);
535                 command->Current_done = Current_done;
536                 command->Current_SCpnt = Current_SCpnt;
537                 list_add_tail(&command->list, &scsi_id->sbp2_command_orb_inuse);
538         } else {
539                 SBP2_ERR("%s: no orbs available", __FUNCTION__);
540         }
541         spin_unlock_irqrestore(&scsi_id->sbp2_command_orb_lock, flags);
542         return command;
543 }
544
545 /* Free our DMA's */
546 static void sbp2util_free_command_dma(struct sbp2_command_info *command)
547 {
548         struct scsi_id_instance_data *scsi_id =
549                 (struct scsi_id_instance_data *)command->Current_SCpnt->device->host->hostdata[0];
550         struct hpsb_host *host;
551
552         if (!scsi_id) {
553                 SBP2_ERR("%s: scsi_id == NULL", __FUNCTION__);
554                 return;
555         }
556
557         host = scsi_id->ud->ne->host;
558
559         if (command->cmd_dma) {
560                 if (command->dma_type == CMD_DMA_SINGLE) {
561                         pci_unmap_single(host->pdev, command->cmd_dma,
562                                          command->dma_size, command->dma_dir);
563                         SBP2_DMA_FREE("single bulk");
564                 } else if (command->dma_type == CMD_DMA_PAGE) {
565                         pci_unmap_page(host->pdev, command->cmd_dma,
566                                        command->dma_size, command->dma_dir);
567                         SBP2_DMA_FREE("single page");
568                 } /* XXX: Check for CMD_DMA_NONE bug */
569                 command->dma_type = CMD_DMA_NONE;
570                 command->cmd_dma = 0;
571         }
572
573         if (command->sge_buffer) {
574                 pci_unmap_sg(host->pdev, command->sge_buffer,
575                              command->dma_size, command->dma_dir);
576                 SBP2_DMA_FREE("scatter list");
577                 command->sge_buffer = NULL;
578         }
579 }
580
581 /*
582  * This function moves a command to the completed orb list.
583  */
584 static void sbp2util_mark_command_completed(struct scsi_id_instance_data *scsi_id,
585                                             struct sbp2_command_info *command)
586 {
587         unsigned long flags;
588
589         spin_lock_irqsave(&scsi_id->sbp2_command_orb_lock, flags);
590         list_del(&command->list);
591         sbp2util_free_command_dma(command);
592         list_add_tail(&command->list, &scsi_id->sbp2_command_orb_completed);
593         spin_unlock_irqrestore(&scsi_id->sbp2_command_orb_lock, flags);
594 }
595
596 /*
597  * Is scsi_id valid? Is the 1394 node still present?
598  */
599 static inline int sbp2util_node_is_available(struct scsi_id_instance_data *scsi_id)
600 {
601         return scsi_id && scsi_id->ne && !scsi_id->ne->in_limbo;
602 }
603
604 /*********************************************
605  * IEEE-1394 core driver stack related section
606  *********************************************/
607 static struct scsi_id_instance_data *sbp2_alloc_device(struct unit_directory *ud);
608
609 static int sbp2_probe(struct device *dev)
610 {
611         struct unit_directory *ud;
612         struct scsi_id_instance_data *scsi_id;
613
614         SBP2_DEBUG_ENTER();
615
616         ud = container_of(dev, struct unit_directory, device);
617
618         /* Don't probe UD's that have the LUN flag. We'll probe the LUN(s)
619          * instead. */
620         if (ud->flags & UNIT_DIRECTORY_HAS_LUN_DIRECTORY)
621                 return -ENODEV;
622
623         scsi_id = sbp2_alloc_device(ud);
624
625         if (!scsi_id)
626                 return -ENOMEM;
627
628         sbp2_parse_unit_directory(scsi_id, ud);
629
630         return sbp2_start_device(scsi_id);
631 }
632
633 static int sbp2_remove(struct device *dev)
634 {
635         struct unit_directory *ud;
636         struct scsi_id_instance_data *scsi_id;
637         struct scsi_device *sdev;
638
639         SBP2_DEBUG_ENTER();
640
641         ud = container_of(dev, struct unit_directory, device);
642         scsi_id = ud->device.driver_data;
643         if (!scsi_id)
644                 return 0;
645
646         if (scsi_id->scsi_host) {
647                 /* Get rid of enqueued commands if there is no chance to
648                  * send them. */
649                 if (!sbp2util_node_is_available(scsi_id))
650                         sbp2scsi_complete_all_commands(scsi_id, DID_NO_CONNECT);
651                 /* scsi_remove_device() will trigger shutdown functions of SCSI
652                  * highlevel drivers which would deadlock if blocked. */
653                 scsi_unblock_requests(scsi_id->scsi_host);
654         }
655         sdev = scsi_id->sdev;
656         if (sdev) {
657                 scsi_id->sdev = NULL;
658                 scsi_remove_device(sdev);
659         }
660
661         sbp2_logout_device(scsi_id);
662         sbp2_remove_device(scsi_id);
663
664         return 0;
665 }
666
667 static int sbp2_update(struct unit_directory *ud)
668 {
669         struct scsi_id_instance_data *scsi_id = ud->device.driver_data;
670
671         SBP2_DEBUG_ENTER();
672
673         if (sbp2_reconnect_device(scsi_id)) {
674
675                 /*
676                  * Ok, reconnect has failed. Perhaps we didn't
677                  * reconnect fast enough. Try doing a regular login, but
678                  * first do a logout just in case of any weirdness.
679                  */
680                 sbp2_logout_device(scsi_id);
681
682                 if (sbp2_login_device(scsi_id)) {
683                         /* Login failed too, just fail, and the backend
684                          * will call our sbp2_remove for us */
685                         SBP2_ERR("Failed to reconnect to sbp2 device!");
686                         return -EBUSY;
687                 }
688         }
689
690         /* Set max retries to something large on the device. */
691         sbp2_set_busy_timeout(scsi_id);
692
693         /* Do a SBP-2 fetch agent reset. */
694         sbp2_agent_reset(scsi_id, 1);
695
696         /* Get the max speed and packet size that we can use. */
697         sbp2_max_speed_and_size(scsi_id);
698
699         /* Complete any pending commands with busy (so they get
700          * retried) and remove them from our queue
701          */
702         sbp2scsi_complete_all_commands(scsi_id, DID_BUS_BUSY);
703
704         /* Make sure we unblock requests (since this is likely after a bus
705          * reset). */
706         scsi_unblock_requests(scsi_id->scsi_host);
707
708         return 0;
709 }
710
711 /* This functions is called by the sbp2_probe, for each new device. We now
712  * allocate one scsi host for each scsi_id (unit directory). */
713 static struct scsi_id_instance_data *sbp2_alloc_device(struct unit_directory *ud)
714 {
715         struct sbp2scsi_host_info *hi;
716         struct Scsi_Host *scsi_host = NULL;
717         struct scsi_id_instance_data *scsi_id = NULL;
718
719         SBP2_DEBUG_ENTER();
720
721         scsi_id = kzalloc(sizeof(*scsi_id), GFP_KERNEL);
722         if (!scsi_id) {
723                 SBP2_ERR("failed to create scsi_id");
724                 goto failed_alloc;
725         }
726
727         scsi_id->ne = ud->ne;
728         scsi_id->ud = ud;
729         scsi_id->speed_code = IEEE1394_SPEED_100;
730         scsi_id->max_payload_size = sbp2_speedto_max_payload[IEEE1394_SPEED_100];
731         atomic_set(&scsi_id->sbp2_login_complete, 0);
732         INIT_LIST_HEAD(&scsi_id->sbp2_command_orb_inuse);
733         INIT_LIST_HEAD(&scsi_id->sbp2_command_orb_completed);
734         INIT_LIST_HEAD(&scsi_id->scsi_list);
735         spin_lock_init(&scsi_id->sbp2_command_orb_lock);
736         scsi_id->sbp2_lun = 0;
737
738         ud->device.driver_data = scsi_id;
739
740         hi = hpsb_get_hostinfo(&sbp2_highlevel, ud->ne->host);
741         if (!hi) {
742                 hi = hpsb_create_hostinfo(&sbp2_highlevel, ud->ne->host, sizeof(*hi));
743                 if (!hi) {
744                         SBP2_ERR("failed to allocate hostinfo");
745                         goto failed_alloc;
746                 }
747                 SBP2_DEBUG("sbp2_alloc_device: allocated hostinfo");
748                 hi->host = ud->ne->host;
749                 INIT_LIST_HEAD(&hi->scsi_ids);
750
751 #ifdef CONFIG_IEEE1394_SBP2_PHYS_DMA
752                 /* Handle data movement if physical dma is not
753                  * enabled or not supported on host controller */
754                 if (!hpsb_register_addrspace(&sbp2_highlevel, ud->ne->host,
755                                              &sbp2_physdma_ops,
756                                              0x0ULL, 0xfffffffcULL)) {
757                         SBP2_ERR("failed to register lower 4GB address range");
758                         goto failed_alloc;
759                 }
760 #endif
761         }
762
763         /* Prevent unloading of the 1394 host */
764         if (!try_module_get(hi->host->driver->owner)) {
765                 SBP2_ERR("failed to get a reference on 1394 host driver");
766                 goto failed_alloc;
767         }
768
769         scsi_id->hi = hi;
770
771         list_add_tail(&scsi_id->scsi_list, &hi->scsi_ids);
772
773         /* Register the status FIFO address range. We could use the same FIFO
774          * for targets at different nodes. However we need different FIFOs per
775          * target in order to support multi-unit devices. */
776         scsi_id->status_fifo_addr = hpsb_allocate_and_register_addrspace(
777                         &sbp2_highlevel, ud->ne->host, &sbp2_ops,
778                         sizeof(struct sbp2_status_block), sizeof(quadlet_t),
779                         ~0ULL, ~0ULL);
780         if (!scsi_id->status_fifo_addr) {
781                 SBP2_ERR("failed to allocate status FIFO address range");
782                 goto failed_alloc;
783         }
784
785         /* Register our host with the SCSI stack. */
786         scsi_host = scsi_host_alloc(&scsi_driver_template,
787                                     sizeof(unsigned long));
788         if (!scsi_host) {
789                 SBP2_ERR("failed to register scsi host");
790                 goto failed_alloc;
791         }
792
793         scsi_host->hostdata[0] = (unsigned long)scsi_id;
794
795         if (!scsi_add_host(scsi_host, &ud->device)) {
796                 scsi_id->scsi_host = scsi_host;
797                 return scsi_id;
798         }
799
800         SBP2_ERR("failed to add scsi host");
801         scsi_host_put(scsi_host);
802
803 failed_alloc:
804         sbp2_remove_device(scsi_id);
805         return NULL;
806 }
807
808 static void sbp2_host_reset(struct hpsb_host *host)
809 {
810         struct sbp2scsi_host_info *hi;
811         struct scsi_id_instance_data *scsi_id;
812
813         hi = hpsb_get_hostinfo(&sbp2_highlevel, host);
814
815         if (hi) {
816                 list_for_each_entry(scsi_id, &hi->scsi_ids, scsi_list)
817                         scsi_block_requests(scsi_id->scsi_host);
818         }
819 }
820
821 /*
822  * This function is where we first pull the node unique ids, and then
823  * allocate memory and register a SBP-2 device.
824  */
825 static int sbp2_start_device(struct scsi_id_instance_data *scsi_id)
826 {
827         struct sbp2scsi_host_info *hi = scsi_id->hi;
828         int error;
829
830         SBP2_DEBUG_ENTER();
831
832         /* Login FIFO DMA */
833         scsi_id->login_response =
834                 pci_alloc_consistent(hi->host->pdev,
835                                      sizeof(struct sbp2_login_response),
836                                      &scsi_id->login_response_dma);
837         if (!scsi_id->login_response)
838                 goto alloc_fail;
839         SBP2_DMA_ALLOC("consistent DMA region for login FIFO");
840
841         /* Query logins ORB DMA */
842         scsi_id->query_logins_orb =
843                 pci_alloc_consistent(hi->host->pdev,
844                                      sizeof(struct sbp2_query_logins_orb),
845                                      &scsi_id->query_logins_orb_dma);
846         if (!scsi_id->query_logins_orb)
847                 goto alloc_fail;
848         SBP2_DMA_ALLOC("consistent DMA region for query logins ORB");
849
850         /* Query logins response DMA */
851         scsi_id->query_logins_response =
852                 pci_alloc_consistent(hi->host->pdev,
853                                      sizeof(struct sbp2_query_logins_response),
854                                      &scsi_id->query_logins_response_dma);
855         if (!scsi_id->query_logins_response)
856                 goto alloc_fail;
857         SBP2_DMA_ALLOC("consistent DMA region for query logins response");
858
859         /* Reconnect ORB DMA */
860         scsi_id->reconnect_orb =
861                 pci_alloc_consistent(hi->host->pdev,
862                                      sizeof(struct sbp2_reconnect_orb),
863                                      &scsi_id->reconnect_orb_dma);
864         if (!scsi_id->reconnect_orb)
865                 goto alloc_fail;
866         SBP2_DMA_ALLOC("consistent DMA region for reconnect ORB");
867
868         /* Logout ORB DMA */
869         scsi_id->logout_orb =
870                 pci_alloc_consistent(hi->host->pdev,
871                                      sizeof(struct sbp2_logout_orb),
872                                      &scsi_id->logout_orb_dma);
873         if (!scsi_id->logout_orb)
874                 goto alloc_fail;
875         SBP2_DMA_ALLOC("consistent DMA region for logout ORB");
876
877         /* Login ORB DMA */
878         scsi_id->login_orb =
879                 pci_alloc_consistent(hi->host->pdev,
880                                      sizeof(struct sbp2_login_orb),
881                                      &scsi_id->login_orb_dma);
882         if (!scsi_id->login_orb)
883                 goto alloc_fail;
884         SBP2_DMA_ALLOC("consistent DMA region for login ORB");
885
886         SBP2_DEBUG("New SBP-2 device inserted, SCSI ID = %x", scsi_id->ud->id);
887
888         /*
889          * Create our command orb pool
890          */
891         if (sbp2util_create_command_orb_pool(scsi_id)) {
892                 SBP2_ERR("sbp2util_create_command_orb_pool failed!");
893                 sbp2_remove_device(scsi_id);
894                 return -ENOMEM;
895         }
896
897         /* Schedule a timeout here. The reason is that we may be so close
898          * to a bus reset, that the device is not available for logins.
899          * This can happen when the bus reset is caused by the host
900          * connected to the sbp2 device being removed. That host would
901          * have a certain amount of time to relogin before the sbp2 device
902          * allows someone else to login instead. One second makes sense. */
903         msleep_interruptible(1000);
904         if (signal_pending(current)) {
905                 sbp2_remove_device(scsi_id);
906                 return -EINTR;
907         }
908
909         /*
910          * Login to the sbp-2 device
911          */
912         if (sbp2_login_device(scsi_id)) {
913                 /* Login failed, just remove the device. */
914                 sbp2_remove_device(scsi_id);
915                 return -EBUSY;
916         }
917
918         /*
919          * Set max retries to something large on the device
920          */
921         sbp2_set_busy_timeout(scsi_id);
922
923         /*
924          * Do a SBP-2 fetch agent reset
925          */
926         sbp2_agent_reset(scsi_id, 1);
927
928         /*
929          * Get the max speed and packet size that we can use
930          */
931         sbp2_max_speed_and_size(scsi_id);
932
933         /* Add this device to the scsi layer now */
934         error = scsi_add_device(scsi_id->scsi_host, 0, scsi_id->ud->id, 0);
935         if (error) {
936                 SBP2_ERR("scsi_add_device failed");
937                 sbp2_logout_device(scsi_id);
938                 sbp2_remove_device(scsi_id);
939                 return error;
940         }
941
942         return 0;
943
944 alloc_fail:
945         SBP2_ERR("Could not allocate memory for scsi_id");
946         sbp2_remove_device(scsi_id);
947         return -ENOMEM;
948 }
949
950 /*
951  * This function removes an sbp2 device from the sbp2scsi_host_info struct.
952  */
953 static void sbp2_remove_device(struct scsi_id_instance_data *scsi_id)
954 {
955         struct sbp2scsi_host_info *hi;
956
957         SBP2_DEBUG_ENTER();
958
959         if (!scsi_id)
960                 return;
961
962         hi = scsi_id->hi;
963
964         /* This will remove our scsi device aswell */
965         if (scsi_id->scsi_host) {
966                 scsi_remove_host(scsi_id->scsi_host);
967                 scsi_host_put(scsi_id->scsi_host);
968         }
969
970         sbp2util_remove_command_orb_pool(scsi_id);
971
972         list_del(&scsi_id->scsi_list);
973
974         if (scsi_id->login_response) {
975                 pci_free_consistent(hi->host->pdev,
976                                     sizeof(struct sbp2_login_response),
977                                     scsi_id->login_response,
978                                     scsi_id->login_response_dma);
979                 SBP2_DMA_FREE("single login FIFO");
980         }
981
982         if (scsi_id->login_orb) {
983                 pci_free_consistent(hi->host->pdev,
984                                     sizeof(struct sbp2_login_orb),
985                                     scsi_id->login_orb,
986                                     scsi_id->login_orb_dma);
987                 SBP2_DMA_FREE("single login ORB");
988         }
989
990         if (scsi_id->reconnect_orb) {
991                 pci_free_consistent(hi->host->pdev,
992                                     sizeof(struct sbp2_reconnect_orb),
993                                     scsi_id->reconnect_orb,
994                                     scsi_id->reconnect_orb_dma);
995                 SBP2_DMA_FREE("single reconnect orb");
996         }
997
998         if (scsi_id->logout_orb) {
999                 pci_free_consistent(hi->host->pdev,
1000                                     sizeof(struct sbp2_logout_orb),
1001                                     scsi_id->logout_orb,
1002                                     scsi_id->logout_orb_dma);
1003                 SBP2_DMA_FREE("single logout orb");
1004         }
1005
1006         if (scsi_id->query_logins_orb) {
1007                 pci_free_consistent(hi->host->pdev,
1008                                     sizeof(struct sbp2_query_logins_orb),
1009                                     scsi_id->query_logins_orb,
1010                                     scsi_id->query_logins_orb_dma);
1011                 SBP2_DMA_FREE("single query logins orb");
1012         }
1013
1014         if (scsi_id->query_logins_response) {
1015                 pci_free_consistent(hi->host->pdev,
1016                                     sizeof(struct sbp2_query_logins_response),
1017                                     scsi_id->query_logins_response,
1018                                     scsi_id->query_logins_response_dma);
1019                 SBP2_DMA_FREE("single query logins data");
1020         }
1021
1022         if (scsi_id->status_fifo_addr)
1023                 hpsb_unregister_addrspace(&sbp2_highlevel, hi->host,
1024                         scsi_id->status_fifo_addr);
1025
1026         scsi_id->ud->device.driver_data = NULL;
1027
1028         if (hi)
1029                 module_put(hi->host->driver->owner);
1030
1031         SBP2_DEBUG("SBP-2 device removed, SCSI ID = %d", scsi_id->ud->id);
1032
1033         kfree(scsi_id);
1034 }
1035
1036 #ifdef CONFIG_IEEE1394_SBP2_PHYS_DMA
1037 /*
1038  * This function deals with physical dma write requests (for adapters that do not support
1039  * physical dma in hardware). Mostly just here for debugging...
1040  */
1041 static int sbp2_handle_physdma_write(struct hpsb_host *host, int nodeid,
1042                                      int destid, quadlet_t *data, u64 addr,
1043                                      size_t length, u16 flags)
1044 {
1045
1046         /*
1047          * Manually put the data in the right place.
1048          */
1049         memcpy(bus_to_virt((u32) addr), data, length);
1050         sbp2util_packet_dump(data, length, "sbp2 phys dma write by device",
1051                              (u32) addr);
1052         return RCODE_COMPLETE;
1053 }
1054
1055 /*
1056  * This function deals with physical dma read requests (for adapters that do not support
1057  * physical dma in hardware). Mostly just here for debugging...
1058  */
1059 static int sbp2_handle_physdma_read(struct hpsb_host *host, int nodeid,
1060                                     quadlet_t *data, u64 addr, size_t length,
1061                                     u16 flags)
1062 {
1063
1064         /*
1065          * Grab data from memory and send a read response.
1066          */
1067         memcpy(data, bus_to_virt((u32) addr), length);
1068         sbp2util_packet_dump(data, length, "sbp2 phys dma read by device",
1069                              (u32) addr);
1070         return RCODE_COMPLETE;
1071 }
1072 #endif
1073
1074 /**************************************
1075  * SBP-2 protocol related section
1076  **************************************/
1077
1078 /*
1079  * This function queries the device for the maximum concurrent logins it
1080  * supports.
1081  */
1082 static int sbp2_query_logins(struct scsi_id_instance_data *scsi_id)
1083 {
1084         struct sbp2scsi_host_info *hi = scsi_id->hi;
1085         quadlet_t data[2];
1086         int max_logins;
1087         int active_logins;
1088
1089         SBP2_DEBUG_ENTER();
1090
1091         scsi_id->query_logins_orb->reserved1 = 0x0;
1092         scsi_id->query_logins_orb->reserved2 = 0x0;
1093
1094         scsi_id->query_logins_orb->query_response_lo = scsi_id->query_logins_response_dma;
1095         scsi_id->query_logins_orb->query_response_hi = ORB_SET_NODE_ID(hi->host->node_id);
1096
1097         scsi_id->query_logins_orb->lun_misc = ORB_SET_FUNCTION(SBP2_QUERY_LOGINS_REQUEST);
1098         scsi_id->query_logins_orb->lun_misc |= ORB_SET_NOTIFY(1);
1099         scsi_id->query_logins_orb->lun_misc |= ORB_SET_LUN(scsi_id->sbp2_lun);
1100
1101         scsi_id->query_logins_orb->reserved_resp_length =
1102                 ORB_SET_QUERY_LOGINS_RESP_LENGTH(sizeof(struct sbp2_query_logins_response));
1103
1104         scsi_id->query_logins_orb->status_fifo_hi =
1105                 ORB_SET_STATUS_FIFO_HI(scsi_id->status_fifo_addr, hi->host->node_id);
1106         scsi_id->query_logins_orb->status_fifo_lo =
1107                 ORB_SET_STATUS_FIFO_LO(scsi_id->status_fifo_addr);
1108
1109         sbp2util_cpu_to_be32_buffer(scsi_id->query_logins_orb, sizeof(struct sbp2_query_logins_orb));
1110
1111         sbp2util_packet_dump(scsi_id->query_logins_orb, sizeof(struct sbp2_query_logins_orb),
1112                              "sbp2 query logins orb", scsi_id->query_logins_orb_dma);
1113
1114         memset(scsi_id->query_logins_response, 0, sizeof(struct sbp2_query_logins_response));
1115         memset(&scsi_id->status_block, 0, sizeof(struct sbp2_status_block));
1116
1117         data[0] = ORB_SET_NODE_ID(hi->host->node_id);
1118         data[1] = scsi_id->query_logins_orb_dma;
1119         sbp2util_cpu_to_be32_buffer(data, 8);
1120
1121         atomic_set(&scsi_id->sbp2_login_complete, 0);
1122
1123         hpsb_node_write(scsi_id->ne, scsi_id->sbp2_management_agent_addr, data, 8);
1124
1125         if (sbp2util_down_timeout(&scsi_id->sbp2_login_complete, 2*HZ)) {
1126                 SBP2_INFO("Error querying logins to SBP-2 device - timed out");
1127                 return -EIO;
1128         }
1129
1130         if (scsi_id->status_block.ORB_offset_lo != scsi_id->query_logins_orb_dma) {
1131                 SBP2_INFO("Error querying logins to SBP-2 device - timed out");
1132                 return -EIO;
1133         }
1134
1135         if (STATUS_GET_RESP(scsi_id->status_block.ORB_offset_hi_misc) ||
1136             STATUS_GET_DEAD_BIT(scsi_id->status_block.ORB_offset_hi_misc) ||
1137             STATUS_GET_SBP_STATUS(scsi_id->status_block.ORB_offset_hi_misc)) {
1138
1139                 SBP2_INFO("Error querying logins to SBP-2 device - timed out");
1140                 return -EIO;
1141         }
1142
1143         sbp2util_cpu_to_be32_buffer(scsi_id->query_logins_response, sizeof(struct sbp2_query_logins_response));
1144
1145         SBP2_DEBUG("length_max_logins = %x",
1146                    (unsigned int)scsi_id->query_logins_response->length_max_logins);
1147
1148         SBP2_DEBUG("Query logins to SBP-2 device successful");
1149
1150         max_logins = RESPONSE_GET_MAX_LOGINS(scsi_id->query_logins_response->length_max_logins);
1151         SBP2_DEBUG("Maximum concurrent logins supported: %d", max_logins);
1152
1153         active_logins = RESPONSE_GET_ACTIVE_LOGINS(scsi_id->query_logins_response->length_max_logins);
1154         SBP2_DEBUG("Number of active logins: %d", active_logins);
1155
1156         if (active_logins >= max_logins) {
1157                 return -EIO;
1158         }
1159
1160         return 0;
1161 }
1162
1163 /*
1164  * This function is called in order to login to a particular SBP-2 device,
1165  * after a bus reset.
1166  */
1167 static int sbp2_login_device(struct scsi_id_instance_data *scsi_id)
1168 {
1169         struct sbp2scsi_host_info *hi = scsi_id->hi;
1170         quadlet_t data[2];
1171
1172         SBP2_DEBUG_ENTER();
1173
1174         if (!scsi_id->login_orb) {
1175                 SBP2_DEBUG("%s: login_orb not alloc'd!", __FUNCTION__);
1176                 return -EIO;
1177         }
1178
1179         if (!exclusive_login) {
1180                 if (sbp2_query_logins(scsi_id)) {
1181                         SBP2_INFO("Device does not support any more concurrent logins");
1182                         return -EIO;
1183                 }
1184         }
1185
1186         /* Set-up login ORB, assume no password */
1187         scsi_id->login_orb->password_hi = 0;
1188         scsi_id->login_orb->password_lo = 0;
1189
1190         scsi_id->login_orb->login_response_lo = scsi_id->login_response_dma;
1191         scsi_id->login_orb->login_response_hi = ORB_SET_NODE_ID(hi->host->node_id);
1192
1193         scsi_id->login_orb->lun_misc = ORB_SET_FUNCTION(SBP2_LOGIN_REQUEST);
1194         scsi_id->login_orb->lun_misc |= ORB_SET_RECONNECT(0);   /* One second reconnect time */
1195         scsi_id->login_orb->lun_misc |= ORB_SET_EXCLUSIVE(exclusive_login);     /* Exclusive access to device */
1196         scsi_id->login_orb->lun_misc |= ORB_SET_NOTIFY(1);      /* Notify us of login complete */
1197         scsi_id->login_orb->lun_misc |= ORB_SET_LUN(scsi_id->sbp2_lun);
1198
1199         scsi_id->login_orb->passwd_resp_lengths =
1200                 ORB_SET_LOGIN_RESP_LENGTH(sizeof(struct sbp2_login_response));
1201
1202         scsi_id->login_orb->status_fifo_hi =
1203                 ORB_SET_STATUS_FIFO_HI(scsi_id->status_fifo_addr, hi->host->node_id);
1204         scsi_id->login_orb->status_fifo_lo =
1205                 ORB_SET_STATUS_FIFO_LO(scsi_id->status_fifo_addr);
1206
1207         sbp2util_cpu_to_be32_buffer(scsi_id->login_orb, sizeof(struct sbp2_login_orb));
1208
1209         sbp2util_packet_dump(scsi_id->login_orb, sizeof(struct sbp2_login_orb),
1210                              "sbp2 login orb", scsi_id->login_orb_dma);
1211
1212         memset(scsi_id->login_response, 0, sizeof(struct sbp2_login_response));
1213         memset(&scsi_id->status_block, 0, sizeof(struct sbp2_status_block));
1214
1215         data[0] = ORB_SET_NODE_ID(hi->host->node_id);
1216         data[1] = scsi_id->login_orb_dma;
1217         sbp2util_cpu_to_be32_buffer(data, 8);
1218
1219         atomic_set(&scsi_id->sbp2_login_complete, 0);
1220
1221         hpsb_node_write(scsi_id->ne, scsi_id->sbp2_management_agent_addr, data, 8);
1222
1223         /*
1224          * Wait for login status (up to 20 seconds)...
1225          */
1226         if (sbp2util_down_timeout(&scsi_id->sbp2_login_complete, 20*HZ)) {
1227                 SBP2_ERR("Error logging into SBP-2 device - login timed-out");
1228                 return -EIO;
1229         }
1230
1231         /*
1232          * Sanity. Make sure status returned matches login orb.
1233          */
1234         if (scsi_id->status_block.ORB_offset_lo != scsi_id->login_orb_dma) {
1235                 SBP2_ERR("Error logging into SBP-2 device - login timed-out");
1236                 return -EIO;
1237         }
1238
1239         /*
1240          * Check status
1241          */
1242         if (STATUS_GET_RESP(scsi_id->status_block.ORB_offset_hi_misc) ||
1243             STATUS_GET_DEAD_BIT(scsi_id->status_block.ORB_offset_hi_misc) ||
1244             STATUS_GET_SBP_STATUS(scsi_id->status_block.ORB_offset_hi_misc)) {
1245
1246                 SBP2_ERR("Error logging into SBP-2 device - login failed");
1247                 return -EIO;
1248         }
1249
1250         /*
1251          * Byte swap the login response, for use when reconnecting or
1252          * logging out.
1253          */
1254         sbp2util_cpu_to_be32_buffer(scsi_id->login_response, sizeof(struct sbp2_login_response));
1255
1256         /*
1257          * Grab our command block agent address from the login response.
1258          */
1259         SBP2_DEBUG("command_block_agent_hi = %x",
1260                    (unsigned int)scsi_id->login_response->command_block_agent_hi);
1261         SBP2_DEBUG("command_block_agent_lo = %x",
1262                    (unsigned int)scsi_id->login_response->command_block_agent_lo);
1263
1264         scsi_id->sbp2_command_block_agent_addr =
1265                 ((u64)scsi_id->login_response->command_block_agent_hi) << 32;
1266         scsi_id->sbp2_command_block_agent_addr |= ((u64)scsi_id->login_response->command_block_agent_lo);
1267         scsi_id->sbp2_command_block_agent_addr &= 0x0000ffffffffffffULL;
1268
1269         SBP2_INFO("Logged into SBP-2 device");
1270
1271         return 0;
1272
1273 }
1274
1275 /*
1276  * This function is called in order to logout from a particular SBP-2
1277  * device, usually called during driver unload.
1278  */
1279 static int sbp2_logout_device(struct scsi_id_instance_data *scsi_id)
1280 {
1281         struct sbp2scsi_host_info *hi = scsi_id->hi;
1282         quadlet_t data[2];
1283         int error;
1284
1285         SBP2_DEBUG_ENTER();
1286
1287         /*
1288          * Set-up logout ORB
1289          */
1290         scsi_id->logout_orb->reserved1 = 0x0;
1291         scsi_id->logout_orb->reserved2 = 0x0;
1292         scsi_id->logout_orb->reserved3 = 0x0;
1293         scsi_id->logout_orb->reserved4 = 0x0;
1294
1295         scsi_id->logout_orb->login_ID_misc = ORB_SET_FUNCTION(SBP2_LOGOUT_REQUEST);
1296         scsi_id->logout_orb->login_ID_misc |= ORB_SET_LOGIN_ID(scsi_id->login_response->length_login_ID);
1297
1298         /* Notify us when complete */
1299         scsi_id->logout_orb->login_ID_misc |= ORB_SET_NOTIFY(1);
1300
1301         scsi_id->logout_orb->reserved5 = 0x0;
1302         scsi_id->logout_orb->status_fifo_hi =
1303                 ORB_SET_STATUS_FIFO_HI(scsi_id->status_fifo_addr, hi->host->node_id);
1304         scsi_id->logout_orb->status_fifo_lo =
1305                 ORB_SET_STATUS_FIFO_LO(scsi_id->status_fifo_addr);
1306
1307         /*
1308          * Byte swap ORB if necessary
1309          */
1310         sbp2util_cpu_to_be32_buffer(scsi_id->logout_orb, sizeof(struct sbp2_logout_orb));
1311
1312         sbp2util_packet_dump(scsi_id->logout_orb, sizeof(struct sbp2_logout_orb),
1313                              "sbp2 logout orb", scsi_id->logout_orb_dma);
1314
1315         /*
1316          * Ok, let's write to the target's management agent register
1317          */
1318         data[0] = ORB_SET_NODE_ID(hi->host->node_id);
1319         data[1] = scsi_id->logout_orb_dma;
1320         sbp2util_cpu_to_be32_buffer(data, 8);
1321
1322         atomic_set(&scsi_id->sbp2_login_complete, 0);
1323
1324         error = hpsb_node_write(scsi_id->ne,
1325                                 scsi_id->sbp2_management_agent_addr, data, 8);
1326         if (error)
1327                 return error;
1328
1329         /* Wait for device to logout...1 second. */
1330         if (sbp2util_down_timeout(&scsi_id->sbp2_login_complete, HZ))
1331                 return -EIO;
1332
1333         SBP2_INFO("Logged out of SBP-2 device");
1334
1335         return 0;
1336
1337 }
1338
1339 /*
1340  * This function is called in order to reconnect to a particular SBP-2
1341  * device, after a bus reset.
1342  */
1343 static int sbp2_reconnect_device(struct scsi_id_instance_data *scsi_id)
1344 {
1345         struct sbp2scsi_host_info *hi = scsi_id->hi;
1346         quadlet_t data[2];
1347         int error;
1348
1349         SBP2_DEBUG_ENTER();
1350
1351         /*
1352          * Set-up reconnect ORB
1353          */
1354         scsi_id->reconnect_orb->reserved1 = 0x0;
1355         scsi_id->reconnect_orb->reserved2 = 0x0;
1356         scsi_id->reconnect_orb->reserved3 = 0x0;
1357         scsi_id->reconnect_orb->reserved4 = 0x0;
1358
1359         scsi_id->reconnect_orb->login_ID_misc = ORB_SET_FUNCTION(SBP2_RECONNECT_REQUEST);
1360         scsi_id->reconnect_orb->login_ID_misc |=
1361                 ORB_SET_LOGIN_ID(scsi_id->login_response->length_login_ID);
1362
1363         /* Notify us when complete */
1364         scsi_id->reconnect_orb->login_ID_misc |= ORB_SET_NOTIFY(1);
1365
1366         scsi_id->reconnect_orb->reserved5 = 0x0;
1367         scsi_id->reconnect_orb->status_fifo_hi =
1368                 ORB_SET_STATUS_FIFO_HI(scsi_id->status_fifo_addr, hi->host->node_id);
1369         scsi_id->reconnect_orb->status_fifo_lo =
1370                 ORB_SET_STATUS_FIFO_LO(scsi_id->status_fifo_addr);
1371
1372         /*
1373          * Byte swap ORB if necessary
1374          */
1375         sbp2util_cpu_to_be32_buffer(scsi_id->reconnect_orb, sizeof(struct sbp2_reconnect_orb));
1376
1377         sbp2util_packet_dump(scsi_id->reconnect_orb, sizeof(struct sbp2_reconnect_orb),
1378                              "sbp2 reconnect orb", scsi_id->reconnect_orb_dma);
1379
1380         /*
1381          * Initialize status fifo
1382          */
1383         memset(&scsi_id->status_block, 0, sizeof(struct sbp2_status_block));
1384
1385         /*
1386          * Ok, let's write to the target's management agent register
1387          */
1388         data[0] = ORB_SET_NODE_ID(hi->host->node_id);
1389         data[1] = scsi_id->reconnect_orb_dma;
1390         sbp2util_cpu_to_be32_buffer(data, 8);
1391
1392         atomic_set(&scsi_id->sbp2_login_complete, 0);
1393
1394         error = hpsb_node_write(scsi_id->ne,
1395                                 scsi_id->sbp2_management_agent_addr, data, 8);
1396         if (error)
1397                 return error;
1398
1399         /*
1400          * Wait for reconnect status (up to 1 second)...
1401          */
1402         if (sbp2util_down_timeout(&scsi_id->sbp2_login_complete, HZ)) {
1403                 SBP2_ERR("Error reconnecting to SBP-2 device - reconnect timed-out");
1404                 return -EIO;
1405         }
1406
1407         /*
1408          * Sanity. Make sure status returned matches reconnect orb.
1409          */
1410         if (scsi_id->status_block.ORB_offset_lo != scsi_id->reconnect_orb_dma) {
1411                 SBP2_ERR("Error reconnecting to SBP-2 device - reconnect timed-out");
1412                 return -EIO;
1413         }
1414
1415         /*
1416          * Check status
1417          */
1418         if (STATUS_GET_RESP(scsi_id->status_block.ORB_offset_hi_misc) ||
1419             STATUS_GET_DEAD_BIT(scsi_id->status_block.ORB_offset_hi_misc) ||
1420             STATUS_GET_SBP_STATUS(scsi_id->status_block.ORB_offset_hi_misc)) {
1421
1422                 SBP2_ERR("Error reconnecting to SBP-2 device - reconnect failed");
1423                 return -EIO;
1424         }
1425
1426         HPSB_DEBUG("Reconnected to SBP-2 device");
1427
1428         return 0;
1429
1430 }
1431
1432 /*
1433  * This function is called in order to set the busy timeout (number of
1434  * retries to attempt) on the sbp2 device.
1435  */
1436 static int sbp2_set_busy_timeout(struct scsi_id_instance_data *scsi_id)
1437 {
1438         quadlet_t data;
1439
1440         SBP2_DEBUG_ENTER();
1441
1442         data = cpu_to_be32(SBP2_BUSY_TIMEOUT_VALUE);
1443         if (hpsb_node_write(scsi_id->ne, SBP2_BUSY_TIMEOUT_ADDRESS, &data, 4))
1444                 SBP2_ERR("%s error", __FUNCTION__);
1445         return 0;
1446 }
1447
1448 /*
1449  * This function is called to parse sbp2 device's config rom unit
1450  * directory. Used to determine things like sbp2 management agent offset,
1451  * and command set used (SCSI or RBC).
1452  */
1453 static void sbp2_parse_unit_directory(struct scsi_id_instance_data *scsi_id,
1454                                       struct unit_directory *ud)
1455 {
1456         struct csr1212_keyval *kv;
1457         struct csr1212_dentry *dentry;
1458         u64 management_agent_addr;
1459         u32 command_set_spec_id, command_set, unit_characteristics,
1460             firmware_revision, workarounds;
1461         int i;
1462
1463         SBP2_DEBUG_ENTER();
1464
1465         management_agent_addr = 0x0;
1466         command_set_spec_id = 0x0;
1467         command_set = 0x0;
1468         unit_characteristics = 0x0;
1469         firmware_revision = 0x0;
1470
1471         /* Handle different fields in the unit directory, based on keys */
1472         csr1212_for_each_dir_entry(ud->ne->csr, kv, ud->ud_kv, dentry) {
1473                 switch (kv->key.id) {
1474                 case CSR1212_KV_ID_DEPENDENT_INFO:
1475                         if (kv->key.type == CSR1212_KV_TYPE_CSR_OFFSET) {
1476                                 /* Save off the management agent address */
1477                                 management_agent_addr =
1478                                     CSR1212_REGISTER_SPACE_BASE +
1479                                     (kv->value.csr_offset << 2);
1480
1481                                 SBP2_DEBUG("sbp2_management_agent_addr = %x",
1482                                            (unsigned int)management_agent_addr);
1483                         } else if (kv->key.type == CSR1212_KV_TYPE_IMMEDIATE) {
1484                                 scsi_id->sbp2_lun =
1485                                     ORB_SET_LUN(kv->value.immediate);
1486                         }
1487                         break;
1488
1489                 case SBP2_COMMAND_SET_SPEC_ID_KEY:
1490                         /* Command spec organization */
1491                         command_set_spec_id = kv->value.immediate;
1492                         SBP2_DEBUG("sbp2_command_set_spec_id = %x",
1493                                    (unsigned int)command_set_spec_id);
1494                         break;
1495
1496                 case SBP2_COMMAND_SET_KEY:
1497                         /* Command set used by sbp2 device */
1498                         command_set = kv->value.immediate;
1499                         SBP2_DEBUG("sbp2_command_set = %x",
1500                                    (unsigned int)command_set);
1501                         break;
1502
1503                 case SBP2_UNIT_CHARACTERISTICS_KEY:
1504                         /*
1505                          * Unit characterisitcs (orb related stuff
1506                          * that I'm not yet paying attention to)
1507                          */
1508                         unit_characteristics = kv->value.immediate;
1509                         SBP2_DEBUG("sbp2_unit_characteristics = %x",
1510                                    (unsigned int)unit_characteristics);
1511                         break;
1512
1513                 case SBP2_FIRMWARE_REVISION_KEY:
1514                         /* Firmware revision */
1515                         firmware_revision = kv->value.immediate;
1516                         if (force_inquiry_hack)
1517                                 SBP2_INFO("sbp2_firmware_revision = %x",
1518                                           (unsigned int)firmware_revision);
1519                         else
1520                                 SBP2_DEBUG("sbp2_firmware_revision = %x",
1521                                            (unsigned int)firmware_revision);
1522                         break;
1523
1524                 default:
1525                         break;
1526                 }
1527         }
1528
1529         /* This is the start of our broken device checking. We try to hack
1530          * around oddities and known defects.  */
1531         workarounds = 0x0;
1532
1533         /* If the vendor id is 0xa0b8 (Symbios vendor id), then we have a
1534          * bridge with 128KB max transfer size limitation. For sanity, we
1535          * only voice this when the current max_sectors setting
1536          * exceeds the 128k limit. By default, that is not the case.
1537          *
1538          * It would be really nice if we could detect this before the scsi
1539          * host gets initialized. That way we can down-force the
1540          * max_sectors to account for it. That is not currently
1541          * possible.  */
1542         if ((firmware_revision & 0xffff00) ==
1543                         SBP2_128KB_BROKEN_FIRMWARE &&
1544                         (max_sectors * 512) > (128*1024)) {
1545                 SBP2_WARN("Node " NODE_BUS_FMT ": Bridge only supports 128KB max transfer size.",
1546                                 NODE_BUS_ARGS(ud->ne->host, ud->ne->nodeid));
1547                 SBP2_WARN("WARNING: Current max_sectors setting is larger than 128KB (%d sectors)!",
1548                                 max_sectors);
1549                 workarounds |= SBP2_BREAKAGE_128K_MAX_TRANSFER;
1550         }
1551
1552         /* Check for a blacklisted set of devices that require us to force
1553          * a 36 byte host inquiry. This can be overriden as a module param
1554          * (to force all hosts).  */
1555         for (i = 0; i < ARRAY_SIZE(sbp2_broken_inquiry_list); i++) {
1556                 if ((firmware_revision & 0xffff00) ==
1557                                 sbp2_broken_inquiry_list[i]) {
1558                         SBP2_WARN("Node " NODE_BUS_FMT ": Using 36byte inquiry workaround",
1559                                         NODE_BUS_ARGS(ud->ne->host, ud->ne->nodeid));
1560                         workarounds |= SBP2_BREAKAGE_INQUIRY_HACK;
1561                         break; /* No need to continue. */
1562                 }
1563         }
1564
1565         /* If this is a logical unit directory entry, process the parent
1566          * to get the values. */
1567         if (ud->flags & UNIT_DIRECTORY_LUN_DIRECTORY) {
1568                 struct unit_directory *parent_ud =
1569                         container_of(ud->device.parent, struct unit_directory, device);
1570                 sbp2_parse_unit_directory(scsi_id, parent_ud);
1571         } else {
1572                 scsi_id->sbp2_management_agent_addr = management_agent_addr;
1573                 scsi_id->sbp2_command_set_spec_id = command_set_spec_id;
1574                 scsi_id->sbp2_command_set = command_set;
1575                 scsi_id->sbp2_unit_characteristics = unit_characteristics;
1576                 scsi_id->sbp2_firmware_revision = firmware_revision;
1577                 scsi_id->workarounds = workarounds;
1578                 if (ud->flags & UNIT_DIRECTORY_HAS_LUN)
1579                         scsi_id->sbp2_lun = ORB_SET_LUN(ud->lun);
1580         }
1581 }
1582
1583 /*
1584  * This function is called in order to determine the max speed and packet
1585  * size we can use in our ORBs. Note, that we (the driver and host) only
1586  * initiate the transaction. The SBP-2 device actually transfers the data
1587  * (by reading from the DMA area we tell it). This means that the SBP-2
1588  * device decides the actual maximum data it can transfer. We just tell it
1589  * the speed that it needs to use, and the max_rec the host supports, and
1590  * it takes care of the rest.
1591  */
1592 static int sbp2_max_speed_and_size(struct scsi_id_instance_data *scsi_id)
1593 {
1594         struct sbp2scsi_host_info *hi = scsi_id->hi;
1595
1596         SBP2_DEBUG_ENTER();
1597
1598         /* Initial setting comes from the hosts speed map */
1599         scsi_id->speed_code =
1600             hi->host->speed_map[NODEID_TO_NODE(hi->host->node_id) * 64 +
1601                                 NODEID_TO_NODE(scsi_id->ne->nodeid)];
1602
1603         /* Bump down our speed if the user requested it */
1604         if (scsi_id->speed_code > max_speed) {
1605                 scsi_id->speed_code = max_speed;
1606                 SBP2_ERR("Forcing SBP-2 max speed down to %s",
1607                          hpsb_speedto_str[scsi_id->speed_code]);
1608         }
1609
1610         /* Payload size is the lesser of what our speed supports and what
1611          * our host supports.  */
1612         scsi_id->max_payload_size =
1613             min(sbp2_speedto_max_payload[scsi_id->speed_code],
1614                 (u8) (hi->host->csr.max_rec - 1));
1615
1616         HPSB_DEBUG("Node " NODE_BUS_FMT ": Max speed [%s] - Max payload [%u]",
1617                    NODE_BUS_ARGS(hi->host, scsi_id->ne->nodeid),
1618                    hpsb_speedto_str[scsi_id->speed_code],
1619                    1 << ((u32) scsi_id->max_payload_size + 2));
1620
1621         return 0;
1622 }
1623
1624 /*
1625  * This function is called in order to perform a SBP-2 agent reset.
1626  */
1627 static int sbp2_agent_reset(struct scsi_id_instance_data *scsi_id, int wait)
1628 {
1629         quadlet_t data;
1630         u64 addr;
1631         int retval;
1632
1633         SBP2_DEBUG_ENTER();
1634
1635         data = ntohl(SBP2_AGENT_RESET_DATA);
1636         addr = scsi_id->sbp2_command_block_agent_addr + SBP2_AGENT_RESET_OFFSET;
1637
1638         if (wait)
1639                 retval = hpsb_node_write(scsi_id->ne, addr, &data, 4);
1640         else
1641                 retval = sbp2util_node_write_no_wait(scsi_id->ne, addr, &data, 4);
1642
1643         if (retval < 0) {
1644                 SBP2_ERR("hpsb_node_write failed.\n");
1645                 return -EIO;
1646         }
1647
1648         /*
1649          * Need to make sure orb pointer is written on next command
1650          */
1651         scsi_id->last_orb = NULL;
1652
1653         return 0;
1654 }
1655
1656 static void sbp2_prep_command_orb_sg(struct sbp2_command_orb *orb,
1657                                      struct sbp2scsi_host_info *hi,
1658                                      struct sbp2_command_info *command,
1659                                      unsigned int scsi_use_sg,
1660                                      struct scatterlist *sgpnt,
1661                                      u32 orb_direction,
1662                                      enum dma_data_direction dma_dir)
1663 {
1664         command->dma_dir = dma_dir;
1665         orb->data_descriptor_hi = ORB_SET_NODE_ID(hi->host->node_id);
1666         orb->misc |= ORB_SET_DIRECTION(orb_direction);
1667
1668         /* Special case if only one element (and less than 64KB in size) */
1669         if ((scsi_use_sg == 1) &&
1670             (sgpnt[0].length <= SBP2_MAX_SG_ELEMENT_LENGTH)) {
1671
1672                 SBP2_DEBUG("Only one s/g element");
1673                 command->dma_size = sgpnt[0].length;
1674                 command->dma_type = CMD_DMA_PAGE;
1675                 command->cmd_dma = pci_map_page(hi->host->pdev,
1676                                                 sgpnt[0].page,
1677                                                 sgpnt[0].offset,
1678                                                 command->dma_size,
1679                                                 command->dma_dir);
1680                 SBP2_DMA_ALLOC("single page scatter element");
1681
1682                 orb->data_descriptor_lo = command->cmd_dma;
1683                 orb->misc |= ORB_SET_DATA_SIZE(command->dma_size);
1684
1685         } else {
1686                 struct sbp2_unrestricted_page_table *sg_element =
1687                                         &command->scatter_gather_element[0];
1688                 u32 sg_count, sg_len;
1689                 dma_addr_t sg_addr;
1690                 int i, count = pci_map_sg(hi->host->pdev, sgpnt, scsi_use_sg,
1691                                           dma_dir);
1692
1693                 SBP2_DMA_ALLOC("scatter list");
1694
1695                 command->dma_size = scsi_use_sg;
1696                 command->sge_buffer = sgpnt;
1697
1698                 /* use page tables (s/g) */
1699                 orb->misc |= ORB_SET_PAGE_TABLE_PRESENT(0x1);
1700                 orb->data_descriptor_lo = command->sge_dma;
1701
1702                 /*
1703                  * Loop through and fill out our sbp-2 page tables
1704                  * (and split up anything too large)
1705                  */
1706                 for (i = 0, sg_count = 0 ; i < count; i++, sgpnt++) {
1707                         sg_len = sg_dma_len(sgpnt);
1708                         sg_addr = sg_dma_address(sgpnt);
1709                         while (sg_len) {
1710                                 sg_element[sg_count].segment_base_lo = sg_addr;
1711                                 if (sg_len > SBP2_MAX_SG_ELEMENT_LENGTH) {
1712                                         sg_element[sg_count].length_segment_base_hi =
1713                                                 PAGE_TABLE_SET_SEGMENT_LENGTH(SBP2_MAX_SG_ELEMENT_LENGTH);
1714                                         sg_addr += SBP2_MAX_SG_ELEMENT_LENGTH;
1715                                         sg_len -= SBP2_MAX_SG_ELEMENT_LENGTH;
1716                                 } else {
1717                                         sg_element[sg_count].length_segment_base_hi =
1718                                                 PAGE_TABLE_SET_SEGMENT_LENGTH(sg_len);
1719                                         sg_len = 0;
1720                                 }
1721                                 sg_count++;
1722                         }
1723                 }
1724
1725                 /* Number of page table (s/g) elements */
1726                 orb->misc |= ORB_SET_DATA_SIZE(sg_count);
1727
1728                 sbp2util_packet_dump(sg_element,
1729                                      (sizeof(struct sbp2_unrestricted_page_table)) * sg_count,
1730                                      "sbp2 s/g list", command->sge_dma);
1731
1732                 /* Byte swap page tables if necessary */
1733                 sbp2util_cpu_to_be32_buffer(sg_element,
1734                                             (sizeof(struct sbp2_unrestricted_page_table)) *
1735                                             sg_count);
1736         }
1737 }
1738
1739 static void sbp2_prep_command_orb_no_sg(struct sbp2_command_orb *orb,
1740                                         struct sbp2scsi_host_info *hi,
1741                                         struct sbp2_command_info *command,
1742                                         struct scatterlist *sgpnt,
1743                                         u32 orb_direction,
1744                                         unsigned int scsi_request_bufflen,
1745                                         void *scsi_request_buffer,
1746                                         enum dma_data_direction dma_dir)
1747 {
1748         command->dma_dir = dma_dir;
1749         command->dma_size = scsi_request_bufflen;
1750         command->dma_type = CMD_DMA_SINGLE;
1751         command->cmd_dma = pci_map_single(hi->host->pdev, scsi_request_buffer,
1752                                           command->dma_size, command->dma_dir);
1753         orb->data_descriptor_hi = ORB_SET_NODE_ID(hi->host->node_id);
1754         orb->misc |= ORB_SET_DIRECTION(orb_direction);
1755
1756         SBP2_DMA_ALLOC("single bulk");
1757
1758         /*
1759          * Handle case where we get a command w/o s/g enabled (but
1760          * check for transfers larger than 64K)
1761          */
1762         if (scsi_request_bufflen <= SBP2_MAX_SG_ELEMENT_LENGTH) {
1763
1764                 orb->data_descriptor_lo = command->cmd_dma;
1765                 orb->misc |= ORB_SET_DATA_SIZE(scsi_request_bufflen);
1766
1767         } else {
1768                 struct sbp2_unrestricted_page_table *sg_element =
1769                         &command->scatter_gather_element[0];
1770                 u32 sg_count, sg_len;
1771                 dma_addr_t sg_addr;
1772
1773                 /*
1774                  * Need to turn this into page tables, since the
1775                  * buffer is too large.
1776                  */
1777                 orb->data_descriptor_lo = command->sge_dma;
1778
1779                 /* Use page tables (s/g) */
1780                 orb->misc |= ORB_SET_PAGE_TABLE_PRESENT(0x1);
1781
1782                 /*
1783                  * fill out our sbp-2 page tables (and split up
1784                  * the large buffer)
1785                  */
1786                 sg_count = 0;
1787                 sg_len = scsi_request_bufflen;
1788                 sg_addr = command->cmd_dma;
1789                 while (sg_len) {
1790                         sg_element[sg_count].segment_base_lo = sg_addr;
1791                         if (sg_len > SBP2_MAX_SG_ELEMENT_LENGTH) {
1792                                 sg_element[sg_count].length_segment_base_hi =
1793                                         PAGE_TABLE_SET_SEGMENT_LENGTH(SBP2_MAX_SG_ELEMENT_LENGTH);
1794                                 sg_addr += SBP2_MAX_SG_ELEMENT_LENGTH;
1795                                 sg_len -= SBP2_MAX_SG_ELEMENT_LENGTH;
1796                         } else {
1797                                 sg_element[sg_count].length_segment_base_hi =
1798                                         PAGE_TABLE_SET_SEGMENT_LENGTH(sg_len);
1799                                 sg_len = 0;
1800                         }
1801                         sg_count++;
1802                 }
1803
1804                 /* Number of page table (s/g) elements */
1805                 orb->misc |= ORB_SET_DATA_SIZE(sg_count);
1806
1807                 sbp2util_packet_dump(sg_element,
1808                                      (sizeof(struct sbp2_unrestricted_page_table)) * sg_count,
1809                                      "sbp2 s/g list", command->sge_dma);
1810
1811                 /* Byte swap page tables if necessary */
1812                 sbp2util_cpu_to_be32_buffer(sg_element,
1813                                             (sizeof(struct sbp2_unrestricted_page_table)) *
1814                                              sg_count);
1815         }
1816 }
1817
1818 /*
1819  * This function is called to create the actual command orb and s/g list
1820  * out of the scsi command itself.
1821  */
1822 static void sbp2_create_command_orb(struct scsi_id_instance_data *scsi_id,
1823                                     struct sbp2_command_info *command,
1824                                     unchar *scsi_cmd,
1825                                     unsigned int scsi_use_sg,
1826                                     unsigned int scsi_request_bufflen,
1827                                     void *scsi_request_buffer,
1828                                     enum dma_data_direction dma_dir)
1829 {
1830         struct sbp2scsi_host_info *hi = scsi_id->hi;
1831         struct scatterlist *sgpnt = (struct scatterlist *)scsi_request_buffer;
1832         struct sbp2_command_orb *command_orb = &command->command_orb;
1833         u32 orb_direction;
1834
1835         /*
1836          * Set-up our command ORB..
1837          *
1838          * NOTE: We're doing unrestricted page tables (s/g), as this is
1839          * best performance (at least with the devices I have). This means
1840          * that data_size becomes the number of s/g elements, and
1841          * page_size should be zero (for unrestricted).
1842          */
1843         command_orb->next_ORB_hi = ORB_SET_NULL_PTR(1);
1844         command_orb->next_ORB_lo = 0x0;
1845         command_orb->misc = ORB_SET_MAX_PAYLOAD(scsi_id->max_payload_size);
1846         command_orb->misc |= ORB_SET_SPEED(scsi_id->speed_code);
1847         command_orb->misc |= ORB_SET_NOTIFY(1); /* Notify us when complete */
1848
1849         if (dma_dir == DMA_NONE)
1850                 orb_direction = ORB_DIRECTION_NO_DATA_TRANSFER;
1851         else if (dma_dir == DMA_TO_DEVICE && scsi_request_bufflen)
1852                 orb_direction = ORB_DIRECTION_WRITE_TO_MEDIA;
1853         else if (dma_dir == DMA_FROM_DEVICE && scsi_request_bufflen)
1854                 orb_direction = ORB_DIRECTION_READ_FROM_MEDIA;
1855         else {
1856                 SBP2_WARN("Falling back to DMA_NONE");
1857                 orb_direction = ORB_DIRECTION_NO_DATA_TRANSFER;
1858         }
1859
1860         /* Set-up our pagetable stuff */
1861         if (orb_direction == ORB_DIRECTION_NO_DATA_TRANSFER) {
1862                 SBP2_DEBUG("No data transfer");
1863                 command_orb->data_descriptor_hi = 0x0;
1864                 command_orb->data_descriptor_lo = 0x0;
1865                 command_orb->misc |= ORB_SET_DIRECTION(1);
1866         } else if (scsi_use_sg) {
1867                 SBP2_DEBUG("Use scatter/gather");
1868                 sbp2_prep_command_orb_sg(command_orb, hi, command, scsi_use_sg,
1869                                          sgpnt, orb_direction, dma_dir);
1870         } else {
1871                 SBP2_DEBUG("No scatter/gather");
1872                 sbp2_prep_command_orb_no_sg(command_orb, hi, command, sgpnt,
1873                                             orb_direction, scsi_request_bufflen,
1874                                             scsi_request_buffer, dma_dir);
1875         }
1876
1877         /* Byte swap command ORB if necessary */
1878         sbp2util_cpu_to_be32_buffer(command_orb, sizeof(struct sbp2_command_orb));
1879
1880         /* Put our scsi command in the command ORB */
1881         memset(command_orb->cdb, 0, 12);
1882         memcpy(command_orb->cdb, scsi_cmd, COMMAND_SIZE(*scsi_cmd));
1883 }
1884
1885 /*
1886  * This function is called in order to begin a regular SBP-2 command.
1887  */
1888 static int sbp2_link_orb_command(struct scsi_id_instance_data *scsi_id,
1889                                  struct sbp2_command_info *command)
1890 {
1891         struct sbp2scsi_host_info *hi = scsi_id->hi;
1892         struct sbp2_command_orb *command_orb = &command->command_orb;
1893         struct node_entry *ne = scsi_id->ne;
1894         u64 addr;
1895
1896         outstanding_orb_incr;
1897         SBP2_ORB_DEBUG("sending command orb %p, total orbs = %x",
1898                        command_orb, global_outstanding_command_orbs);
1899
1900         pci_dma_sync_single_for_device(hi->host->pdev, command->command_orb_dma,
1901                                        sizeof(struct sbp2_command_orb),
1902                                        PCI_DMA_BIDIRECTIONAL);
1903         pci_dma_sync_single_for_device(hi->host->pdev, command->sge_dma,
1904                                        sizeof(command->scatter_gather_element),
1905                                        PCI_DMA_BIDIRECTIONAL);
1906         /*
1907          * Check to see if there are any previous orbs to use
1908          */
1909         if (scsi_id->last_orb == NULL) {
1910                 quadlet_t data[2];
1911
1912                 /*
1913                  * Ok, let's write to the target's management agent register
1914                  */
1915                 addr = scsi_id->sbp2_command_block_agent_addr + SBP2_ORB_POINTER_OFFSET;
1916                 data[0] = ORB_SET_NODE_ID(hi->host->node_id);
1917                 data[1] = command->command_orb_dma;
1918                 sbp2util_cpu_to_be32_buffer(data, 8);
1919
1920                 SBP2_ORB_DEBUG("write command agent, command orb %p", command_orb);
1921
1922                 if (sbp2util_node_write_no_wait(ne, addr, data, 8) < 0) {
1923                         SBP2_ERR("sbp2util_node_write_no_wait failed.\n");
1924                         return -EIO;
1925                 }
1926
1927                 SBP2_ORB_DEBUG("write command agent complete");
1928
1929                 scsi_id->last_orb = command_orb;
1930                 scsi_id->last_orb_dma = command->command_orb_dma;
1931
1932         } else {
1933                 quadlet_t data;
1934
1935                 /*
1936                  * We have an orb already sent (maybe or maybe not
1937                  * processed) that we can append this orb to. So do so,
1938                  * and ring the doorbell. Have to be very careful
1939                  * modifying these next orb pointers, as they are accessed
1940                  * both by the sbp2 device and us.
1941                  */
1942                 scsi_id->last_orb->next_ORB_lo =
1943                     cpu_to_be32(command->command_orb_dma);
1944                 /* Tells hardware that this pointer is valid */
1945                 scsi_id->last_orb->next_ORB_hi = 0x0;
1946                 pci_dma_sync_single_for_device(hi->host->pdev,
1947                                                scsi_id->last_orb_dma,
1948                                                sizeof(struct sbp2_command_orb),
1949                                                PCI_DMA_BIDIRECTIONAL);
1950
1951                 /*
1952                  * Ring the doorbell
1953                  */
1954                 data = cpu_to_be32(command->command_orb_dma);
1955                 addr = scsi_id->sbp2_command_block_agent_addr + SBP2_DOORBELL_OFFSET;
1956
1957                 SBP2_ORB_DEBUG("ring doorbell, command orb %p", command_orb);
1958
1959                 if (sbp2util_node_write_no_wait(ne, addr, &data, 4) < 0) {
1960                         SBP2_ERR("sbp2util_node_write_no_wait failed");
1961                         return -EIO;
1962                 }
1963
1964                 scsi_id->last_orb = command_orb;
1965                 scsi_id->last_orb_dma = command->command_orb_dma;
1966
1967         }
1968         return 0;
1969 }
1970
1971 /*
1972  * This function is called in order to begin a regular SBP-2 command.
1973  */
1974 static int sbp2_send_command(struct scsi_id_instance_data *scsi_id,
1975                              struct scsi_cmnd *SCpnt,
1976                              void (*done)(struct scsi_cmnd *))
1977 {
1978         unchar *cmd = (unchar *) SCpnt->cmnd;
1979         unsigned int request_bufflen = SCpnt->request_bufflen;
1980         struct sbp2_command_info *command;
1981
1982         SBP2_DEBUG_ENTER();
1983         SBP2_DEBUG("SCSI transfer size = %x", request_bufflen);
1984         SBP2_DEBUG("SCSI s/g elements = %x", (unsigned int)SCpnt->use_sg);
1985
1986         /*
1987          * Allocate a command orb and s/g structure
1988          */
1989         command = sbp2util_allocate_command_orb(scsi_id, SCpnt, done);
1990         if (!command) {
1991                 return -EIO;
1992         }
1993
1994         /*
1995          * Now actually fill in the comamnd orb and sbp2 s/g list
1996          */
1997         sbp2_create_command_orb(scsi_id, command, cmd, SCpnt->use_sg,
1998                                 request_bufflen, SCpnt->request_buffer,
1999                                 SCpnt->sc_data_direction);
2000
2001         sbp2util_packet_dump(&command->command_orb, sizeof(struct sbp2_command_orb),
2002                              "sbp2 command orb", command->command_orb_dma);
2003
2004         /*
2005          * Initialize status fifo
2006          */
2007         memset(&scsi_id->status_block, 0, sizeof(struct sbp2_status_block));
2008
2009         /*
2010          * Link up the orb, and ring the doorbell if needed
2011          */
2012         sbp2_link_orb_command(scsi_id, command);
2013
2014         return 0;
2015 }
2016
2017 /*
2018  * Translates SBP-2 status into SCSI sense data for check conditions
2019  */
2020 static unsigned int sbp2_status_to_sense_data(unchar *sbp2_status, unchar *sense_data)
2021 {
2022         SBP2_DEBUG_ENTER();
2023
2024         /*
2025          * Ok, it's pretty ugly...   ;-)
2026          */
2027         sense_data[0] = 0x70;
2028         sense_data[1] = 0x0;
2029         sense_data[2] = sbp2_status[9];
2030         sense_data[3] = sbp2_status[12];
2031         sense_data[4] = sbp2_status[13];
2032         sense_data[5] = sbp2_status[14];
2033         sense_data[6] = sbp2_status[15];
2034         sense_data[7] = 10;
2035         sense_data[8] = sbp2_status[16];
2036         sense_data[9] = sbp2_status[17];
2037         sense_data[10] = sbp2_status[18];
2038         sense_data[11] = sbp2_status[19];
2039         sense_data[12] = sbp2_status[10];
2040         sense_data[13] = sbp2_status[11];
2041         sense_data[14] = sbp2_status[20];
2042         sense_data[15] = sbp2_status[21];
2043
2044         return sbp2_status[8] & 0x3f;   /* return scsi status */
2045 }
2046
2047 /*
2048  * This function is called after a command is completed, in order to do any necessary SBP-2
2049  * response data translations for the SCSI stack
2050  */
2051 static void sbp2_check_sbp2_response(struct scsi_id_instance_data *scsi_id,
2052                                      struct scsi_cmnd *SCpnt)
2053 {
2054         u8 *scsi_buf = SCpnt->request_buffer;
2055
2056         SBP2_DEBUG_ENTER();
2057
2058         if (SCpnt->cmnd[0] == INQUIRY && (SCpnt->cmnd[1] & 3) == 0) {
2059                 /*
2060                  * Make sure data length is ok. Minimum length is 36 bytes
2061                  */
2062                 if (scsi_buf[4] == 0) {
2063                         scsi_buf[4] = 36 - 5;
2064                 }
2065
2066                 /*
2067                  * Fix ansi revision and response data format
2068                  */
2069                 scsi_buf[2] |= 2;
2070                 scsi_buf[3] = (scsi_buf[3] & 0xf0) | 2;
2071         }
2072 }
2073
2074 /*
2075  * This function deals with status writes from the SBP-2 device
2076  */
2077 static int sbp2_handle_status_write(struct hpsb_host *host, int nodeid, int destid,
2078                                     quadlet_t *data, u64 addr, size_t length, u16 fl)
2079 {
2080         struct sbp2scsi_host_info *hi;
2081         struct scsi_id_instance_data *scsi_id = NULL, *scsi_id_tmp;
2082         struct scsi_cmnd *SCpnt = NULL;
2083         u32 scsi_status = SBP2_SCSI_STATUS_GOOD;
2084         struct sbp2_command_info *command;
2085         unsigned long flags;
2086
2087         SBP2_DEBUG_ENTER();
2088
2089         sbp2util_packet_dump(data, length, "sbp2 status write by device", (u32)addr);
2090
2091         if (!host) {
2092                 SBP2_ERR("host is NULL - this is bad!");
2093                 return RCODE_ADDRESS_ERROR;
2094         }
2095
2096         hi = hpsb_get_hostinfo(&sbp2_highlevel, host);
2097
2098         if (!hi) {
2099                 SBP2_ERR("host info is NULL - this is bad!");
2100                 return RCODE_ADDRESS_ERROR;
2101         }
2102
2103         /*
2104          * Find our scsi_id structure by looking at the status fifo address
2105          * written to by the sbp2 device.
2106          */
2107         list_for_each_entry(scsi_id_tmp, &hi->scsi_ids, scsi_list) {
2108                 if (scsi_id_tmp->ne->nodeid == nodeid &&
2109                     scsi_id_tmp->status_fifo_addr == addr) {
2110                         scsi_id = scsi_id_tmp;
2111                         break;
2112                 }
2113         }
2114
2115         if (!scsi_id) {
2116                 SBP2_ERR("scsi_id is NULL - device is gone?");
2117                 return RCODE_ADDRESS_ERROR;
2118         }
2119
2120         /*
2121          * Put response into scsi_id status fifo...
2122          */
2123         memcpy(&scsi_id->status_block, data, length);
2124
2125         /*
2126          * Byte swap first two quadlets (8 bytes) of status for processing
2127          */
2128         sbp2util_be32_to_cpu_buffer(&scsi_id->status_block, 8);
2129
2130         /*
2131          * Handle command ORB status here if necessary. First, need to match status with command.
2132          */
2133         command = sbp2util_find_command_for_orb(scsi_id, scsi_id->status_block.ORB_offset_lo);
2134         if (command) {
2135
2136                 SBP2_DEBUG("Found status for command ORB");
2137                 pci_dma_sync_single_for_cpu(hi->host->pdev, command->command_orb_dma,
2138                                             sizeof(struct sbp2_command_orb),
2139                                             PCI_DMA_BIDIRECTIONAL);
2140                 pci_dma_sync_single_for_cpu(hi->host->pdev, command->sge_dma,
2141                                             sizeof(command->scatter_gather_element),
2142                                             PCI_DMA_BIDIRECTIONAL);
2143
2144                 SBP2_ORB_DEBUG("matched command orb %p", &command->command_orb);
2145                 outstanding_orb_decr;
2146
2147                 /*
2148                  * Matched status with command, now grab scsi command pointers and check status
2149                  */
2150                 SCpnt = command->Current_SCpnt;
2151                 sbp2util_mark_command_completed(scsi_id, command);
2152
2153                 if (SCpnt) {
2154
2155                         /*
2156                          * See if the target stored any scsi status information
2157                          */
2158                         if (STATUS_GET_LENGTH(scsi_id->status_block.ORB_offset_hi_misc) > 1) {
2159                                 /*
2160                                  * Translate SBP-2 status to SCSI sense data
2161                                  */
2162                                 SBP2_DEBUG("CHECK CONDITION");
2163                                 scsi_status = sbp2_status_to_sense_data((unchar *)&scsi_id->status_block, SCpnt->sense_buffer);
2164                         }
2165
2166                         /*
2167                          * Check to see if the dead bit is set. If so, we'll have to initiate
2168                          * a fetch agent reset.
2169                          */
2170                         if (STATUS_GET_DEAD_BIT(scsi_id->status_block.ORB_offset_hi_misc)) {
2171
2172                                 /*
2173                                  * Initiate a fetch agent reset.
2174                                  */
2175                                 SBP2_DEBUG("Dead bit set - initiating fetch agent reset");
2176                                 sbp2_agent_reset(scsi_id, 0);
2177                         }
2178
2179                         SBP2_ORB_DEBUG("completing command orb %p", &command->command_orb);
2180                 }
2181
2182                 /*
2183                  * Check here to see if there are no commands in-use. If there are none, we can
2184                  * null out last orb so that next time around we write directly to the orb pointer...
2185                  * Quick start saves one 1394 bus transaction.
2186                  */
2187                 spin_lock_irqsave(&scsi_id->sbp2_command_orb_lock, flags);
2188                 if (list_empty(&scsi_id->sbp2_command_orb_inuse)) {
2189                         scsi_id->last_orb = NULL;
2190                 }
2191                 spin_unlock_irqrestore(&scsi_id->sbp2_command_orb_lock, flags);
2192
2193         } else {
2194
2195                 /*
2196                  * It's probably a login/logout/reconnect status.
2197                  */
2198                 if ((scsi_id->login_orb_dma == scsi_id->status_block.ORB_offset_lo) ||
2199                     (scsi_id->query_logins_orb_dma == scsi_id->status_block.ORB_offset_lo) ||
2200                     (scsi_id->reconnect_orb_dma == scsi_id->status_block.ORB_offset_lo) ||
2201                     (scsi_id->logout_orb_dma == scsi_id->status_block.ORB_offset_lo)) {
2202                         atomic_set(&scsi_id->sbp2_login_complete, 1);
2203                 }
2204         }
2205
2206         if (SCpnt) {
2207
2208                 /* Complete the SCSI command. */
2209                 SBP2_DEBUG("Completing SCSI command");
2210                 sbp2scsi_complete_command(scsi_id, scsi_status, SCpnt,
2211                                           command->Current_done);
2212                 SBP2_ORB_DEBUG("command orb completed");
2213         }
2214
2215         return RCODE_COMPLETE;
2216 }
2217
2218 /**************************************
2219  * SCSI interface related section
2220  **************************************/
2221
2222 /*
2223  * This routine is the main request entry routine for doing I/O. It is
2224  * called from the scsi stack directly.
2225  */
2226 static int sbp2scsi_queuecommand(struct scsi_cmnd *SCpnt,
2227                                  void (*done)(struct scsi_cmnd *))
2228 {
2229         struct scsi_id_instance_data *scsi_id =
2230                 (struct scsi_id_instance_data *)SCpnt->device->host->hostdata[0];
2231         struct sbp2scsi_host_info *hi;
2232         int result = DID_NO_CONNECT << 16;
2233
2234         SBP2_DEBUG_ENTER();
2235 #if (CONFIG_IEEE1394_SBP2_DEBUG >= 2) || defined(CONFIG_IEEE1394_SBP2_PACKET_DUMP)
2236         scsi_print_command(SCpnt);
2237 #endif
2238
2239         if (!sbp2util_node_is_available(scsi_id))
2240                 goto done;
2241
2242         hi = scsi_id->hi;
2243
2244         if (!hi) {
2245                 SBP2_ERR("sbp2scsi_host_info is NULL - this is bad!");
2246                 goto done;
2247         }
2248
2249         /*
2250          * Until we handle multiple luns, just return selection time-out
2251          * to any IO directed at non-zero LUNs
2252          */
2253         if (SCpnt->device->lun)
2254                 goto done;
2255
2256         /*
2257          * Check for request sense command, and handle it here
2258          * (autorequest sense)
2259          */
2260         if (SCpnt->cmnd[0] == REQUEST_SENSE) {
2261                 SBP2_DEBUG("REQUEST_SENSE");
2262                 memcpy(SCpnt->request_buffer, SCpnt->sense_buffer, SCpnt->request_bufflen);
2263                 memset(SCpnt->sense_buffer, 0, sizeof(SCpnt->sense_buffer));
2264                 sbp2scsi_complete_command(scsi_id, SBP2_SCSI_STATUS_GOOD, SCpnt, done);
2265                 return 0;
2266         }
2267
2268         /*
2269          * Check to see if we are in the middle of a bus reset.
2270          */
2271         if (!hpsb_node_entry_valid(scsi_id->ne)) {
2272                 SBP2_ERR("Bus reset in progress - rejecting command");
2273                 result = DID_BUS_BUSY << 16;
2274                 goto done;
2275         }
2276
2277         /*
2278          * Bidirectional commands are not yet implemented,
2279          * and unknown transfer direction not handled.
2280          */
2281         if (SCpnt->sc_data_direction == DMA_BIDIRECTIONAL) {
2282                 SBP2_ERR("Cannot handle DMA_BIDIRECTIONAL - rejecting command");
2283                 result = DID_ERROR << 16;
2284                 goto done;
2285         }
2286
2287         /*
2288          * Try and send our SCSI command
2289          */
2290         if (sbp2_send_command(scsi_id, SCpnt, done)) {
2291                 SBP2_ERR("Error sending SCSI command");
2292                 sbp2scsi_complete_command(scsi_id, SBP2_SCSI_STATUS_SELECTION_TIMEOUT,
2293                                           SCpnt, done);
2294         }
2295         return 0;
2296
2297 done:
2298         SCpnt->result = result;
2299         done(SCpnt);
2300         return 0;
2301 }
2302
2303 /*
2304  * This function is called in order to complete all outstanding SBP-2
2305  * commands (in case of resets, etc.).
2306  */
2307 static void sbp2scsi_complete_all_commands(struct scsi_id_instance_data *scsi_id,
2308                                            u32 status)
2309 {
2310         struct sbp2scsi_host_info *hi = scsi_id->hi;
2311         struct list_head *lh;
2312         struct sbp2_command_info *command;
2313         unsigned long flags;
2314
2315         SBP2_DEBUG_ENTER();
2316
2317         spin_lock_irqsave(&scsi_id->sbp2_command_orb_lock, flags);
2318         while (!list_empty(&scsi_id->sbp2_command_orb_inuse)) {
2319                 SBP2_DEBUG("Found pending command to complete");
2320                 lh = scsi_id->sbp2_command_orb_inuse.next;
2321                 command = list_entry(lh, struct sbp2_command_info, list);
2322                 pci_dma_sync_single_for_cpu(hi->host->pdev, command->command_orb_dma,
2323                                             sizeof(struct sbp2_command_orb),
2324                                             PCI_DMA_BIDIRECTIONAL);
2325                 pci_dma_sync_single_for_cpu(hi->host->pdev, command->sge_dma,
2326                                             sizeof(command->scatter_gather_element),
2327                                             PCI_DMA_BIDIRECTIONAL);
2328                 sbp2util_mark_command_completed(scsi_id, command);
2329                 if (command->Current_SCpnt) {
2330                         command->Current_SCpnt->result = status << 16;
2331                         command->Current_done(command->Current_SCpnt);
2332                 }
2333         }
2334         spin_unlock_irqrestore(&scsi_id->sbp2_command_orb_lock, flags);
2335
2336         return;
2337 }
2338
2339 /*
2340  * This function is called in order to complete a regular SBP-2 command.
2341  *
2342  * This can be called in interrupt context.
2343  */
2344 static void sbp2scsi_complete_command(struct scsi_id_instance_data *scsi_id,
2345                                       u32 scsi_status, struct scsi_cmnd *SCpnt,
2346                                       void (*done)(struct scsi_cmnd *))
2347 {
2348         SBP2_DEBUG_ENTER();
2349
2350         /*
2351          * Sanity
2352          */
2353         if (!SCpnt) {
2354                 SBP2_ERR("SCpnt is NULL");
2355                 return;
2356         }
2357
2358         /*
2359          * If a bus reset is in progress and there was an error, don't
2360          * complete the command, just let it get retried at the end of the
2361          * bus reset.
2362          */
2363         if (!hpsb_node_entry_valid(scsi_id->ne)
2364             && (scsi_status != SBP2_SCSI_STATUS_GOOD)) {
2365                 SBP2_ERR("Bus reset in progress - retry command later");
2366                 return;
2367         }
2368
2369         /*
2370          * Switch on scsi status
2371          */
2372         switch (scsi_status) {
2373         case SBP2_SCSI_STATUS_GOOD:
2374                 SCpnt->result = DID_OK << 16;
2375                 break;
2376
2377         case SBP2_SCSI_STATUS_BUSY:
2378                 SBP2_ERR("SBP2_SCSI_STATUS_BUSY");
2379                 SCpnt->result = DID_BUS_BUSY << 16;
2380                 break;
2381
2382         case SBP2_SCSI_STATUS_CHECK_CONDITION:
2383                 SBP2_DEBUG("SBP2_SCSI_STATUS_CHECK_CONDITION");
2384                 SCpnt->result = CHECK_CONDITION << 1 | DID_OK << 16;
2385 #if CONFIG_IEEE1394_SBP2_DEBUG >= 1
2386                 scsi_print_command(SCpnt);
2387                 scsi_print_sense(SBP2_DEVICE_NAME, SCpnt);
2388 #endif
2389                 break;
2390
2391         case SBP2_SCSI_STATUS_SELECTION_TIMEOUT:
2392                 SBP2_ERR("SBP2_SCSI_STATUS_SELECTION_TIMEOUT");
2393                 SCpnt->result = DID_NO_CONNECT << 16;
2394                 scsi_print_command(SCpnt);
2395                 break;
2396
2397         case SBP2_SCSI_STATUS_CONDITION_MET:
2398         case SBP2_SCSI_STATUS_RESERVATION_CONFLICT:
2399         case SBP2_SCSI_STATUS_COMMAND_TERMINATED:
2400                 SBP2_ERR("Bad SCSI status = %x", scsi_status);
2401                 SCpnt->result = DID_ERROR << 16;
2402                 scsi_print_command(SCpnt);
2403                 break;
2404
2405         default:
2406                 SBP2_ERR("Unsupported SCSI status = %x", scsi_status);
2407                 SCpnt->result = DID_ERROR << 16;
2408         }
2409
2410         /*
2411          * Take care of any sbp2 response data mucking here (RBC stuff, etc.)
2412          */
2413         if (SCpnt->result == DID_OK << 16) {
2414                 sbp2_check_sbp2_response(scsi_id, SCpnt);
2415         }
2416
2417         /*
2418          * If a bus reset is in progress and there was an error, complete
2419          * the command as busy so that it will get retried.
2420          */
2421         if (!hpsb_node_entry_valid(scsi_id->ne)
2422             && (scsi_status != SBP2_SCSI_STATUS_GOOD)) {
2423                 SBP2_ERR("Completing command with busy (bus reset)");
2424                 SCpnt->result = DID_BUS_BUSY << 16;
2425         }
2426
2427         /*
2428          * If a unit attention occurs, return busy status so it gets
2429          * retried... it could have happened because of a 1394 bus reset
2430          * or hot-plug...
2431          * XXX  DID_BUS_BUSY is actually a bad idea because it will defy
2432          * the scsi layer's retry logic.
2433          */
2434 #if 0
2435         if ((scsi_status == SBP2_SCSI_STATUS_CHECK_CONDITION) &&
2436             (SCpnt->sense_buffer[2] == UNIT_ATTENTION)) {
2437                 SBP2_DEBUG("UNIT ATTENTION - return busy");
2438                 SCpnt->result = DID_BUS_BUSY << 16;
2439         }
2440 #endif
2441
2442         /*
2443          * Tell scsi stack that we're done with this command
2444          */
2445         done(SCpnt);
2446 }
2447
2448 static int sbp2scsi_slave_alloc(struct scsi_device *sdev)
2449 {
2450         struct scsi_id_instance_data *scsi_id =
2451                 (struct scsi_id_instance_data *)sdev->host->hostdata[0];
2452
2453         scsi_id->sdev = sdev;
2454
2455         if (force_inquiry_hack ||
2456             scsi_id->workarounds & SBP2_BREAKAGE_INQUIRY_HACK) {
2457                 sdev->inquiry_len = 36;
2458                 sdev->skip_ms_page_8 = 1;
2459         }
2460         return 0;
2461 }
2462
2463 static int sbp2scsi_slave_configure(struct scsi_device *sdev)
2464 {
2465         blk_queue_dma_alignment(sdev->request_queue, (512 - 1));
2466         sdev->use_10_for_rw = 1;
2467         sdev->use_10_for_ms = 1;
2468         return 0;
2469 }
2470
2471 static void sbp2scsi_slave_destroy(struct scsi_device *sdev)
2472 {
2473         ((struct scsi_id_instance_data *)sdev->host->hostdata[0])->sdev = NULL;
2474         return;
2475 }
2476
2477 /*
2478  * Called by scsi stack when something has really gone wrong.  Usually
2479  * called when a command has timed-out for some reason.
2480  */
2481 static int sbp2scsi_abort(struct scsi_cmnd *SCpnt)
2482 {
2483         struct scsi_id_instance_data *scsi_id =
2484                 (struct scsi_id_instance_data *)SCpnt->device->host->hostdata[0];
2485         struct sbp2scsi_host_info *hi = scsi_id->hi;
2486         struct sbp2_command_info *command;
2487
2488         SBP2_ERR("aborting sbp2 command");
2489         scsi_print_command(SCpnt);
2490
2491         if (sbp2util_node_is_available(scsi_id)) {
2492
2493                 /*
2494                  * Right now, just return any matching command structures
2495                  * to the free pool.
2496                  */
2497                 command = sbp2util_find_command_for_SCpnt(scsi_id, SCpnt);
2498                 if (command) {
2499                         SBP2_DEBUG("Found command to abort");
2500                         pci_dma_sync_single_for_cpu(hi->host->pdev,
2501                                                     command->command_orb_dma,
2502                                                     sizeof(struct sbp2_command_orb),
2503                                                     PCI_DMA_BIDIRECTIONAL);
2504                         pci_dma_sync_single_for_cpu(hi->host->pdev,
2505                                                     command->sge_dma,
2506                                                     sizeof(command->scatter_gather_element),
2507                                                     PCI_DMA_BIDIRECTIONAL);
2508                         sbp2util_mark_command_completed(scsi_id, command);
2509                         if (command->Current_SCpnt) {
2510                                 command->Current_SCpnt->result = DID_ABORT << 16;
2511                                 command->Current_done(command->Current_SCpnt);
2512                         }
2513                 }
2514
2515                 /*
2516                  * Initiate a fetch agent reset.
2517                  */
2518                 sbp2_agent_reset(scsi_id, 0);
2519                 sbp2scsi_complete_all_commands(scsi_id, DID_BUS_BUSY);
2520         }
2521
2522         return SUCCESS;
2523 }
2524
2525 /*
2526  * Called by scsi stack when something has really gone wrong.
2527  */
2528 static int sbp2scsi_reset(struct scsi_cmnd *SCpnt)
2529 {
2530         struct scsi_id_instance_data *scsi_id =
2531                 (struct scsi_id_instance_data *)SCpnt->device->host->hostdata[0];
2532
2533         SBP2_ERR("reset requested");
2534
2535         if (sbp2util_node_is_available(scsi_id)) {
2536                 SBP2_ERR("Generating sbp2 fetch agent reset");
2537                 sbp2_agent_reset(scsi_id, 0);
2538         }
2539
2540         return SUCCESS;
2541 }
2542
2543 static ssize_t sbp2_sysfs_ieee1394_id_show(struct device *dev,
2544                                            struct device_attribute *attr,
2545                                            char *buf)
2546 {
2547         struct scsi_device *sdev;
2548         struct scsi_id_instance_data *scsi_id;
2549         int lun;
2550
2551         if (!(sdev = to_scsi_device(dev)))
2552                 return 0;
2553
2554         if (!(scsi_id = (struct scsi_id_instance_data *)sdev->host->hostdata[0]))
2555                 return 0;
2556
2557         lun = ORB_SET_LUN(scsi_id->sbp2_lun);
2558
2559         return sprintf(buf, "%016Lx:%d:%d\n", (unsigned long long)scsi_id->ne->guid,
2560                        scsi_id->ud->id, lun);
2561 }
2562 static DEVICE_ATTR(ieee1394_id, S_IRUGO, sbp2_sysfs_ieee1394_id_show, NULL);
2563
2564 static struct device_attribute *sbp2_sysfs_sdev_attrs[] = {
2565         &dev_attr_ieee1394_id,
2566         NULL
2567 };
2568
2569 MODULE_AUTHOR("Ben Collins <bcollins@debian.org>");
2570 MODULE_DESCRIPTION("IEEE-1394 SBP-2 protocol driver");
2571 MODULE_SUPPORTED_DEVICE(SBP2_DEVICE_NAME);
2572 MODULE_LICENSE("GPL");
2573
2574 /* SCSI host template */
2575 static struct scsi_host_template scsi_driver_template = {
2576         .module =                       THIS_MODULE,
2577         .name =                         "SBP-2 IEEE-1394",
2578         .proc_name =                    SBP2_DEVICE_NAME,
2579         .queuecommand =                 sbp2scsi_queuecommand,
2580         .eh_abort_handler =             sbp2scsi_abort,
2581         .eh_device_reset_handler =      sbp2scsi_reset,
2582         .slave_alloc =                  sbp2scsi_slave_alloc,
2583         .slave_configure =              sbp2scsi_slave_configure,
2584         .slave_destroy =                sbp2scsi_slave_destroy,
2585         .this_id =                      -1,
2586         .sg_tablesize =                 SG_ALL,
2587         .use_clustering =               ENABLE_CLUSTERING,
2588         .cmd_per_lun =                  SBP2_MAX_CMDS,
2589         .can_queue =                    SBP2_MAX_CMDS,
2590         .emulated =                     1,
2591         .sdev_attrs =                   sbp2_sysfs_sdev_attrs,
2592 };
2593
2594 static int sbp2_module_init(void)
2595 {
2596         int ret;
2597
2598         SBP2_DEBUG_ENTER();
2599
2600         /* Module load debug option to force one command at a time (serializing I/O) */
2601         if (serialize_io) {
2602                 SBP2_INFO("Driver forced to serialize I/O (serialize_io=1)");
2603                 SBP2_INFO("Try serialize_io=0 for better performance");
2604                 scsi_driver_template.can_queue = 1;
2605                 scsi_driver_template.cmd_per_lun = 1;
2606         }
2607
2608         /* Set max sectors (module load option). Default is 255 sectors. */
2609         scsi_driver_template.max_sectors = max_sectors;
2610
2611         /* Register our high level driver with 1394 stack */
2612         hpsb_register_highlevel(&sbp2_highlevel);
2613
2614         ret = hpsb_register_protocol(&sbp2_driver);
2615         if (ret) {
2616                 SBP2_ERR("Failed to register protocol");
2617                 hpsb_unregister_highlevel(&sbp2_highlevel);
2618                 return ret;
2619         }
2620
2621         return 0;
2622 }
2623
2624 static void __exit sbp2_module_exit(void)
2625 {
2626         SBP2_DEBUG_ENTER();
2627
2628         hpsb_unregister_protocol(&sbp2_driver);
2629
2630         hpsb_unregister_highlevel(&sbp2_highlevel);
2631 }
2632
2633 module_init(sbp2_module_init);
2634 module_exit(sbp2_module_exit);