sbp2.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:102k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  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.  * This program is free software; you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License as published by
  9.  * the Free Software Foundation; either version 2 of the License, or
  10.  * (at your option) any later version.
  11.  *
  12.  * This program is distributed in the hope that it will be useful,
  13.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.  * GNU General Public License for more details.
  16.  *
  17.  * You should have received a copy of the GNU General Public License
  18.  * along with this program; if not, write to the Free Software Foundation,
  19.  * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  20.  */
  21. /*
  22.  * Brief Description:
  23.  *
  24.  * This driver implements the Serial Bus Protocol 2 (SBP-2) over IEEE-1394
  25.  * under Linux. The SBP-2 driver is implemented as an IEEE-1394 high-level
  26.  * driver. It also registers as a SCSI lower-level driver in order to accept
  27.  * SCSI commands for transport using SBP-2.
  28.  *
  29.  *
  30.  * Driver Loading:
  31.  *
  32.  * Currently, the SBP-2 driver is supported only as a module. Because the 
  33.  * Linux SCSI stack is not Plug-N-Play aware, module load order is 
  34.  * important. Assuming the SCSI core drivers are either built into the 
  35.  * kernel or already loaded as modules, you should load the IEEE-1394 modules 
  36.  * in the following order:
  37.  *
  38.  *  ieee1394 (e.g. insmod ieee1394)
  39.  * ohci1394 (e.g. insmod ohci1394)
  40.  * sbp2 (e.g. insmod sbp2)
  41.  *
  42.  * The SBP-2 driver will attempt to discover any attached SBP-2 devices when first
  43.  * loaded, or after any IEEE-1394 bus reset (e.g. a hot-plug). It will then print 
  44.  * out a debug message indicating if it was able to discover a SBP-2 device.
  45.  *
  46.  * Currently, the SBP-2 driver will catch any attached SBP-2 devices during the
  47.  * initial scsi bus scan (when the driver is first loaded). To add or remove
  48.  * SBP-2 devices "after" this initial scan (i.e. if you plug-in or un-plug a 
  49.  * device after the SBP-2 driver is loaded), you must either use the scsi procfs
  50.  * add-single-device, remove-single-device, or a shell script such as 
  51.  * rescan-scsi-bus.sh.
  52.  *
  53.  * The easiest way to add/detect new SBP-2 devices is to run the shell script
  54.  * rescan-scsi-bus.sh (or re-load the SBP-2 driver). This script may be 
  55.  * found at:
  56.  * http://www.garloff.de/kurt/linux/rescan-scsi-bus.sh
  57.  *
  58.  * As an alternative, you may manually add/remove SBP-2 devices via the procfs with
  59.  * add-single-device <h> <b> <t> <l> or remove-single-device <h> <b> <t> <l>, where:
  60.  * <h> = host (starting at zero for first SCSI adapter)
  61.  * <b> = bus (normally zero)
  62.  * <t> = target (starting at zero for first SBP-2 device)
  63.  * <l> = lun (normally zero)
  64.  *
  65.  * e.g. To manually add/detect a new SBP-2 device
  66.  * echo "scsi add-single-device 0 0 0 0" > /proc/scsi/scsi
  67.  *
  68.  * e.g. To manually remove a SBP-2 device after it's been unplugged
  69.  * echo "scsi remove-single-device 0 0 0 0" > /proc/scsi/scsi
  70.  *
  71.  * e.g. To check to see which SBP-2/SCSI devices are currently registered
  72.  *  cat /proc/scsi/scsi
  73.  *
  74.  * After scanning for new SCSI devices (above), you may access any attached 
  75.  * SBP-2 storage devices as if they were SCSI devices (e.g. mount /dev/sda1, 
  76.  * fdisk, mkfs, etc.).
  77.  *
  78.  *
  79.  * Module Load Options:
  80.  *
  81.  * sbp2_max_speed  - Force max speed allowed 
  82.  *   (2 = 400mb, 1 = 200mb, 0 = 100mb. default = 2)
  83.  * sbp2_serialize_io - Serialize all I/O coming down from the scsi drivers 
  84.  *   (0 = deserialized, 1 = serialized, default = 0)
  85.  * sbp2_max_sectors,  - Change max sectors per I/O supported (default = 255)
  86.  * sbp2_max_outstanding_cmds - Change max outstanding concurrent commands (default = 8)
  87.  * sbp2_max_cmds_per_lun - Change max concurrent commands per sbp2 device (default = 1)
  88.  * sbp2_exclusive_login - Set to zero if you'd like to allow multiple hosts the ability
  89.  *   to log in at the same time. Sbp2 device must support this,
  90.  *   and you must know what you're doing (default = 1)
  91.  *
  92.  * (e.g. insmod sbp2 sbp2_serialize_io = 1)
  93.  *
  94.  *
  95.  * Current Support:
  96.  *
  97.  * The SBP-2 driver is still in an early state, but supports a variety of devices.
  98.  * I have read/written many gigabytes of data from/to SBP-2 drives, and have seen 
  99.  * performance of more than 25 MBytes/s on individual drives (limit of the media 
  100.  * transfer rate).
  101.  *
  102.  *
  103.  * Following are a sampling of devices that have been tested successfully:
  104.  *
  105.  * - Western Digital IEEE-1394 hard drives
  106.  * - Maxtor IEEE-1394 hard drives
  107.  * - VST (SmartDisk) IEEE-1394 hard drives and Zip drives (several flavors)
  108.  * - LaCie IEEE-1394 hard drives (several flavors)
  109.  * - QPS IEEE-1394 CD-RW/DVD drives and hard drives
  110.  * - BusLink IEEE-1394 hard drives
  111.  * - Iomega IEEE-1394 Zip/Jazz/Peerless drives
  112.  * - ClubMac IEEE-1394 hard drives
  113.  * - FirePower IEEE-1394 hard drives
  114.  * - EzQuest IEEE-1394 hard drives and CD-RW drives
  115.  * - Castlewood/ADS IEEE-1394 ORB drives
  116.  * - Evergreen IEEE-1394 hard drives and CD-RW drives
  117.  * - Addonics IEEE-1394 CD-RW drives
  118.  * - Bellstor IEEE-1394 hard drives and CD-RW drives
  119.  * - APDrives IEEE-1394 hard drives
  120.  * - Fujitsu IEEE-1394 MO drives
  121.  * - Sony IEEE-1394 CD-RW drives
  122.  * - Epson IEEE-1394 scanners
  123.  * - ADS IEEE-1394 memory stick and compact flash readers 
  124.  * - SBP-2 bridge-based devices (LSI, Oxford Semiconductor, Indigita bridges)
  125.  * - Various other standard IEEE-1394 hard drives and enclosures
  126.  *
  127.  *
  128.  * Performance Issues:
  129.  *
  130.  * - Make sure you are "not" running fat/fat32 on your attached SBP-2 drives. You'll
  131.  *   get much better performance formatting the drive ext2 (but you will lose the
  132.  *   ability to easily move the drive between Windows/Linux).
  133.  *
  134.  *
  135.  * Current Issues:
  136.  *
  137.  * - Error Handling: SCSI aborts and bus reset requests are handled somewhat
  138.  *   but the code needs additional debugging.
  139.  *
  140.  * - Module: The SBP-2 driver is currently only supported as a module. It would not take
  141.  *   much work to allow it to be compiled into the kernel, but you'd have to 
  142.  *   add some init code to the kernel to support this... and modules are much
  143.  *   more flexible anyway.   ;-)
  144.  *
  145.  * - Hot-plugging: Interaction with the SCSI stack and support for hot-plugging could
  146.  *   stand some improvement.
  147.  *
  148.  *
  149.  * History:
  150.  *
  151.  * 07/25/00 - Initial revision (JSG)
  152.  * 08/11/00 - Following changes/bug fixes were made (JSG):
  153.  *    * Bug fix to SCSI procfs code (still needs to be synched with 2.4 kernel).
  154.  *    * Bug fix where request sense commands were actually sent on the bus.
  155.  *    * Changed bus reset/abort code to deal with devices that spin up quite
  156.  *      slowly (which result in SCSI time-outs).
  157.  *    * "More" properly pull information from device's config rom, for enumeration
  158.  *      of SBP-2 devices, and determining SBP-2 register offsets.
  159.  *    * Change Simplified Direct Access Device type to Direct Access Device type in
  160.  *      returned inquiry data, in order to make the SCSI stack happy.
  161.  *    * Modified driver to register with the SCSI stack "before" enumerating any attached
  162.  *      SBP-2 devices. This means that you'll have to use procfs scsi-add-device or 
  163.  *      some sort of script to discover new SBP-2 devices.
  164.  *    * Minor re-write of some code and other minor changes.
  165.  * 08/28/00 - Following changes/bug fixes were made (JSG):
  166.  *    * Bug fixes to scatter/gather support (case of one s/g element)
  167.  *    * Updated direction table for scsi commands (mostly DVD commands)
  168.  *    * Retries when trying to detect SBP-2 devices (for slow devices)
  169.  *    * Slightly better error handling (previously none) when commands time-out.
  170.  *    * Misc. other bug fixes and code reorganization.
  171.  * 09/13/00 - Following changes/bug fixes were made (JSG)
  172.  *    * Moved detection/enumeration code to a kernel thread which is woken up when IEEE-1394
  173.  *      bus resets occur.
  174.  *    * Added code to handle bus resets and hot-plugging while devices are mounted, but full
  175.  *      hot-plug support is not quite there yet.
  176.  *    * Now use speed map to determine speed and max payload sizes for ORBs
  177.  *    * Clean-up of code and reorganization 
  178.  * 09/19/00 - Added better hot-plug support and other minor changes (JSG)
  179.  * 10/15/00 - Fixes for latest 2.4.0 test kernel, minor fix for hot-plug race. (JSG)
  180.  * 12/03/00 - Created pool of request packet structures for use in sending out sbp2 command
  181.  *    and agent reset requests. This removes the kmallocs/kfrees in the critical I/O paths,
  182.  *    and also deals with some subtle race conditions related to allocating and freeing
  183.  *    packets. (JSG)
  184.  *      12/09/00 - Improved the sbp2 device detection by actually reading the root and unit 
  185.  *    directory (khk@khk.net)
  186.  * 12/23/00 - Following changes/enhancements were made (JSG)
  187.  *    * Only do SCSI to RBC command conversion for Direct Access and Simplified
  188.  *      Direct Access Devices (this is pulled from the config rom root directory).
  189.  *      This is needed because doing the conversion for all device types broke the
  190.  *      Epson scanner. Still looking for a better way of determining when to convert
  191.  *      commands (for RBC devices). Thanks to khk for helping on this!
  192.  *    * Added ability to "emulate" physical dma support, for host adapters such as TILynx.
  193.  *    * Determine max payload and speed by also looking at the host adapter's max_rec field.
  194.  * 01/19/01 - Added checks to sbp2 login and made the login time-out longer. Also fixed a compile 
  195.  *    problem for 2.4.0. (JSG)
  196.  * 01/24/01 - Fixed problem when individual s/g elements are 64KB or larger. Needed to break
  197.  *    up these larger elements, since the sbp2 page table element size is only 16 bits. (JSG)
  198.  * 01/29/01 - Minor byteswap fix for login response (used for reconnect and log out).
  199.  * 03/07/01 - Following changes/enhancements were made (JSG)
  200.  *    * Changes to allow us to catch the initial scsi bus scan (for detecting sbp2
  201.  *      devices when first loading sbp2.o). To disable this, un-define 
  202.  *      SBP2_SUPPORT_INITIAL_BUS_SCAN.
  203.  *    * Temporary fix to deal with many sbp2 devices that do not support individual
  204.  *      transfers of greater than 128KB in size. 
  205.  *    * Mode sense conversion from 6 byte to 10 byte versions for CDRW/DVD devices. (Mark Burton)
  206.  *    * Define allowing support for goofy sbp2 devices that do not support mode
  207.  *      sense command at all, allowing them to be mounted rw (such as 1394 memory
  208.  *      stick and compact flash readers). Define SBP2_MODE_SENSE_WRITE_PROTECT_HACK
  209.  *      if you need this fix.
  210.  * 03/29/01 - Major performance enhancements and misc. other changes. Thanks to Daniel Berlin for many of
  211.  *    changes and suggestions for change:
  212.  *    * Now use sbp2 doorbell and link commands on the fly (instead of serializing requests)
  213.  *    * Removed all bit fields in an attempt to run on PPC machines (still needs a little more work)
  214.  *    * Added large request break-up/linking support for sbp2 chipsets that do not support transfers 
  215.  *      greater than 128KB in size.
  216.  *    * Bumped up max commands per lun to two, and max total outstanding commands to eight.
  217.  * 04/03/01 - Minor clean-up. Write orb pointer directly if no outstanding commands (saves one 1394 bus
  218.  *    transaction). Added module load options (bus scan, mode sense hack, max speed, serialize_io,
  219.  *    no_large_transfers). Better bus reset handling while I/O pending. Set serialize_io to 1 by 
  220.  *    default (debugging of deserialized I/O in progress).
  221.  * 04/04/01 - Added workaround for PPC Pismo firewire chipset. See #define below. (Daniel Berlin)
  222.  * 04/20/01 - Minor clean-up. Allocate more orb structures when running with sbp2 target chipsets with
  223.  *    128KB max transfer limit.
  224.  * 06/16/01 - Converted DMA interfaces to pci_dma - Ben Collins
  225.  *  <bcollins@debian.org
  226.  * 07/22/01 - Use NodeMngr to get info about the local host and
  227.  *    attached devices. Ben Collins
  228.  *
  229.  *      09/15/01 - Remove detection code, instead subscribe to the nodemgr
  230.  *                 driver management interface.  This also removes the
  231.  *                 initial bus scan stuff since the nodemgr calls
  232.  *                 sbp2_probe for each sbp2 device already on the bus,
  233.  *                 when we register our driver.  This change 
  234.  *                 automtically adds hotplug support to the driver.
  235.  *                                 Kristian Hogsberg <hogsberg@users.sf.net>
  236.  *
  237.  *      11/17/01 - Various bugfixes/cleanups:
  238.  *                 * Remember to logout of device in sbp2_disconnect.
  239.  *                 * If we fail to reconnect to a device after bus reset
  240.  *                   remember to release unit directory, so the ieee1394
  241.  *                   knows we no longer manage it.
  242.  *                 * Unregister scsi hosts in sbp2_remove_host when a
  243.  *                   hpsb_host goes away.
  244.  *                 * Remove stupid hack in sbp2_remove_host.
  245.  *                 * Switched to "manual" module initialization
  246.  *                   (i.e. not scsi_module.c) and moved sbp2_cleanup
  247.  *                   moved sbp2scsi_release to sbp2_module_ext.  The
  248.  *                   release function is called once pr. registered
  249.  *                   scsi host, but sbp2_cleanup should only be called
  250.  *                   upon module unload.  Moved much initialization
  251.  *                   from sbp2scsi_detect to sbp2_module_init.
  252.  *                                 Kristian Hogsberg <hogsberg@users.sf.net>
  253.  * 01/06/02 - Misc bug fixes/enhancements: (JSG)
  254.  *    * Enable use_new_eh_code for scsi stuff.
  255.  *    * Do not write all ones for NULL ORB high/low fields, but
  256.  *      rather leave reserved areas zeroed (per SBP2 spec).
  257.  *    * Use newer scsi transfer direction passed down instead of our
  258.  *      direction table.
  259.  *    * Bumped login time-out to 20 seconds, as some devices are slow.
  260.  *    * Fixed a couple scsi unregister bugs on module unload
  261.  * 01/13/02 - Fixed compatibility with certain SBP2 devices, such as Iomega
  262.  *    1394 devices (Peerless, Jazz). Also a bit of clean-up of the 
  263.  *    driver, thanks to H.J.Lu (hjl@lucon.org). Removed mode_sense_hack
  264.  *    module load option, as it's been fixed in the 2.4 scsi stack.
  265.  * 02/10/02 - Added support for max_sectors, minor fix for inquiry command, make
  266.  *    up sbp2 device type from inquiry response data if not part of 
  267.  *    device's 1394 unit directory. (JSG)
  268.  * 02/18/02 - Code clean-up and enhancements: (JSG)
  269.  *    * Finish cleaning out hacked code for dealing with broken sbp2 devices
  270.  *      which do not support requests of 128KB or greater. Now use 
  271.  *      max_sectors scsi host entry to limit transfer sizes.
  272.  *    * Change status fifo address from a single address to a set of addresses,
  273.  *      with each sbp2 device having its own status fifo address. This makes
  274.  *      it easier to match the status write to the sbp2 device instance.
  275.  *    * Minor change to use lun when logging into sbp2 devices. First step in
  276.  *      supporting multi-lun devices such as CD/DVD changer devices.
  277.  *    * Added a new module load option for setting max sectors. For use by folk
  278.  *      who'd like to bump up the max scsi transfer size supported.
  279.  *    * Enabled deserialized operation by default, allowing for better performance,
  280.  *      particularily when running with multiple sbp2 devices. For debugging,
  281.  *      you may enable serialization through use of the sbp2_serialize_io module
  282.  *      load option (e.g. insmod sbp2 sbp2_serialize_io=1).
  283.  * 02/20/02 - Added a couple additional module load options. 
  284.  *    Needed to bump down max commands per lun because of the !%@&*^# QPS CDRW 
  285.  *    drive I have, which doesn't seem to get along with other sbp2 devices 
  286.  *    (or handle linked commands well).
  287.  * 04/21/02 - Added some additional debug capabilities:
  288.  *    * Able to handle phys dma requests directly, if host controller has phys
  289.  *      dma disabled (e.g. insmod ohci1394 phys_dma=0). Undefine CONFIG_IEEE1394_SBP2_PHYS_DMA
  290.  *      if you'd like to disable sbp2 driver from registering for phys address range. 
  291.  *    * New packet dump debug define (CONFIG_IEEE1394_SBP2_PACKET_DUMP) which allows
  292.  *      dumping of all sbp2 related packets sent and received. Especially effective
  293.  *      when phys dma is disabled on ohci controller (e.g. insmod ohci1394 phys_dma=0).
  294.  *    * Added new sbp2 module load option (sbp2_exclusive_login) for allowing
  295.  *      non-exclusive login to sbp2 device, for special multi-host applications.
  296.  * 04/23/02 - Fix for Sony CD-ROM drives. Only send fetch agent reset to sbp2 device if it
  297.  *    returns the dead bit in status. Thanks to Chandan (chandan@toad.net) for this one.
  298.  * 04/27/02 - Fix sbp2 login problem on SMP systems, enable real spinlocks by default. (JSG)
  299.  * 06/09/02 - Don't force 36-bute SCSI inquiry, but leave in a define for badly behaved devices. (JSG)   
  300.  */
  301. /*
  302.  * Includes
  303.  */
  304. #include <linux/config.h>
  305. #include <linux/kernel.h>
  306. #include <linux/list.h>
  307. #include <linux/string.h>
  308. #include <linux/slab.h>
  309. #include <linux/fs.h>
  310. #include <linux/poll.h>
  311. #include <linux/module.h>
  312. #include <linux/types.h>
  313. #include <linux/delay.h>
  314. #include <linux/sched.h>
  315. #include <linux/proc_fs.h>
  316. #include <linux/blk.h>
  317. #include <linux/smp_lock.h>
  318. #include <linux/init.h>
  319. #include <linux/blk.h>
  320. #include <asm/current.h>
  321. #include <asm/uaccess.h>
  322. #include <asm/io.h>
  323. #include <asm/byteorder.h>
  324. #include <asm/atomic.h>
  325. #include <asm/system.h>
  326. #include <asm/io.h>
  327. #include <asm/scatterlist.h>
  328. #ifdef CONFIG_KBUILD_2_5
  329. #include <scsi.h>
  330. #include <hosts.h>
  331. #include <sd.h>
  332. #else
  333. #include "../scsi/scsi.h"
  334. #include "../scsi/hosts.h"
  335. #include "../scsi/sd.h"
  336. #endif
  337. #include "ieee1394.h"
  338. #include "ieee1394_types.h"
  339. #include "ieee1394_core.h"
  340. #include "hosts.h"
  341. #include "nodemgr.h"
  342. #include "highlevel.h"
  343. #include "ieee1394_transactions.h"
  344. #include "ieee1394_hotplug.h"
  345. #include "sbp2.h"
  346. static char version[] __devinitdata =
  347. "$Rev: 584 $ James Goodwin <jamesg@filanet.com>";
  348. /*
  349.  * Module load parameter definitions
  350.  */
  351. /*
  352.  * Change sbp2_max_speed on module load if you have a bad IEEE-1394
  353.  * controller that has trouble running 2KB packets at 400mb.
  354.  *
  355.  * NOTE: On certain OHCI parts I have seen short packets on async transmit
  356.  * (probably due to PCI latency/throughput issues with the part). You can
  357.  * bump down the speed if you are running into problems.
  358.  *
  359.  * Valid values:
  360.  * sbp2_max_speed = 2 (default: max speed 400mb)
  361.  * sbp2_max_speed = 1 (max speed 200mb)
  362.  * sbp2_max_speed = 0 (max speed 100mb)
  363.  */
  364. MODULE_PARM(sbp2_max_speed,"i");
  365. MODULE_PARM_DESC(sbp2_max_speed, "Force max speed (2 = 400mb default, 1 = 200mb, 0 = 100mb)");
  366. static int sbp2_max_speed = SPEED_400;
  367. /*
  368.  * Set sbp2_serialize_io to 1 if you'd like only one scsi command sent
  369.  * down to us at a time (debugging). This might be necessary for very
  370.  * badly behaved sbp2 devices.
  371.  */
  372. MODULE_PARM(sbp2_serialize_io,"i");
  373. MODULE_PARM_DESC(sbp2_serialize_io, "Serialize all I/O coming down from the scsi drivers (default = 0)");
  374. static int sbp2_serialize_io = 0; /* serialize I/O - available for debugging purposes */
  375. /*
  376.  * Bump up sbp2_max_sectors if you'd like to support very large sized
  377.  * transfers. Please note that some older sbp2 bridge chips are broken for
  378.  * transfers greater or equal to 128KB.  Default is a value of 255
  379.  * sectors, or just under 128KB (at 512 byte sector size). I can note that
  380.  * the Oxsemi sbp2 chipsets have no problems supporting very large
  381.  * transfer sizes.
  382.  */
  383. MODULE_PARM(sbp2_max_sectors,"i");
  384. MODULE_PARM_DESC(sbp2_max_sectors, "Change max sectors per I/O supported (default = 255)");
  385. static int sbp2_max_sectors = SBP2_MAX_SECTORS;
  386. /*
  387.  * Adjust sbp2_max_outstanding_cmds to tune performance if you have many
  388.  * sbp2 devices attached (or if you need to do some debugging).
  389.  */
  390. MODULE_PARM(sbp2_max_outstanding_cmds,"i");
  391. MODULE_PARM_DESC(sbp2_max_outstanding_cmds, "Change max outstanding concurrent commands (default = 8)");
  392. static int sbp2_max_outstanding_cmds = SBP2SCSI_MAX_OUTSTANDING_CMDS;
  393. /*
  394.  * Adjust sbp2_max_cmds_per_lun to tune performance. Enabling more than
  395.  * one concurrent/linked command per sbp2 device may allow some
  396.  * performance gains, but some older sbp2 devices have firmware bugs
  397.  * resulting in problems when linking commands... so, enable this with
  398.  * care.  I can note that the Oxsemi OXFW911 sbp2 chipset works very well
  399.  * with large numbers of concurrent/linked commands.  =)
  400.  */
  401. MODULE_PARM(sbp2_max_cmds_per_lun,"i");
  402. MODULE_PARM_DESC(sbp2_max_cmds_per_lun, "Change max concurrent commands per sbp2 device (default = 1)");
  403. static int sbp2_max_cmds_per_lun = SBP2SCSI_MAX_CMDS_PER_LUN;
  404. /*
  405.  * Exclusive login to sbp2 device? In most cases, the sbp2 driver should
  406.  * do an exclusive login, as it's generally unsafe to have two hosts
  407.  * talking to a single sbp2 device at the same time (filesystem coherency,
  408.  * etc.). If you're running an sbp2 device that supports multiple logins,
  409.  * and you're either running read-only filesystems or some sort of special
  410.  * filesystem supporting multiple hosts, then set sbp2_exclusive_login to
  411.  * zero. Note: The Oxsemi OXFW911 sbp2 chipset supports up to four
  412.  * concurrent logins.
  413.  */
  414. MODULE_PARM(sbp2_exclusive_login,"i");
  415. MODULE_PARM_DESC(sbp2_exclusive_login, "Exclusive login to sbp2 device (default = 1)");
  416. static int sbp2_exclusive_login = 1;
  417. /*
  418.  * SCSI inquiry hack for really badly behaved sbp2 devices. Turn this on
  419.  * if your sbp2 device is not properly handling the SCSI inquiry command.
  420.  * This hack makes the inquiry look more like a typical MS Windows
  421.  * inquiry.
  422.  * 
  423.  * If sbp2_force_inquiry_hack=1 is required for your device to work,
  424.  * please submit the logged sbp2_firmware_revision value of this device to
  425.  * the linux1394-devel mailing list.
  426.  */
  427. MODULE_PARM(sbp2_force_inquiry_hack,"i");
  428. MODULE_PARM_DESC(sbp2_force_inquiry_hack, "Force SCSI inquiry hack (default = 0)");
  429. static int sbp2_force_inquiry_hack = 0;
  430. /*
  431.  * Export information about protocols/devices supported by this driver.
  432.  */
  433. static struct ieee1394_device_id sbp2_id_table[] = {
  434. {
  435. .match_flags =IEEE1394_MATCH_SPECIFIER_ID |
  436.               IEEE1394_MATCH_VERSION,
  437. .specifier_id = SBP2_UNIT_SPEC_ID_ENTRY & 0xffffff,
  438. .version =    SBP2_SW_VERSION_ENTRY & 0xffffff
  439. },
  440. { }
  441. };
  442. MODULE_DEVICE_TABLE(ieee1394, sbp2_id_table);
  443. /*
  444.  * Debug levels, configured via kernel config, or enable here.
  445.  */
  446. /* #define CONFIG_IEEE1394_SBP2_DEBUG_ORBS */
  447. /* #define CONFIG_IEEE1394_SBP2_DEBUG_DMA */
  448. /* #define CONFIG_IEEE1394_SBP2_DEBUG 1 */
  449. /* #define CONFIG_IEEE1394_SBP2_DEBUG 2 */
  450. /* #define CONFIG_IEEE1394_SBP2_PACKET_DUMP */
  451. #ifdef CONFIG_IEEE1394_SBP2_DEBUG_ORBS
  452. #define SBP2_ORB_DEBUG(fmt, args...) HPSB_ERR("sbp2(%s): "fmt, __FUNCTION__, ## args)
  453. static u32 global_outstanding_command_orbs = 0;
  454. #define outstanding_orb_incr global_outstanding_command_orbs++
  455. #define outstanding_orb_decr global_outstanding_command_orbs--
  456. #else
  457. #define SBP2_ORB_DEBUG(fmt, args...)
  458. #define outstanding_orb_incr
  459. #define outstanding_orb_decr
  460. #endif
  461. #ifdef CONFIG_IEEE1394_SBP2_DEBUG_DMA
  462. #define SBP2_DMA_ALLOC(fmt, args...) 
  463. HPSB_ERR("sbp2(%s)alloc(%d): "fmt, __FUNCTION__, 
  464.  ++global_outstanding_dmas, ## args)
  465. #define SBP2_DMA_FREE(fmt, args...) 
  466. HPSB_ERR("sbp2(%s)free(%d): "fmt, __FUNCTION__, 
  467.  --global_outstanding_dmas, ## args)
  468. static u32 global_outstanding_dmas = 0;
  469. #else
  470. #define SBP2_DMA_ALLOC(fmt, args...)
  471. #define SBP2_DMA_FREE(fmt, args...)
  472. #endif
  473. #if CONFIG_IEEE1394_SBP2_DEBUG >= 2
  474. #define SBP2_DEBUG(fmt, args...) HPSB_ERR("sbp2: "fmt, ## args)
  475. #define SBP2_INFO(fmt, args...) HPSB_ERR("sbp2: "fmt, ## args)
  476. #define SBP2_NOTICE(fmt, args...) HPSB_ERR("sbp2: "fmt, ## args)
  477. #define SBP2_WARN(fmt, args...) HPSB_ERR("sbp2: "fmt, ## args)
  478. #elif CONFIG_IEEE1394_SBP2_DEBUG == 1
  479. #define SBP2_DEBUG(fmt, args...) HPSB_DEBUG("sbp2: "fmt, ## args)
  480. #define SBP2_INFO(fmt, args...) HPSB_INFO("sbp2: "fmt, ## args)
  481. #define SBP2_NOTICE(fmt, args...) HPSB_NOTICE("sbp2: "fmt, ## args)
  482. #define SBP2_WARN(fmt, args...) HPSB_WARN("sbp2: "fmt, ## args)
  483. #else 
  484. #define SBP2_DEBUG(fmt, args...)
  485. #define SBP2_INFO(fmt, args...) HPSB_INFO("sbp2: "fmt, ## args)
  486. #define SBP2_NOTICE(fmt, args...)       HPSB_NOTICE("sbp2: "fmt, ## args)
  487. #define SBP2_WARN(fmt, args...)         HPSB_WARN("sbp2: "fmt, ## args)
  488. #endif
  489. #define SBP2_ERR(fmt, args...) HPSB_ERR("sbp2: "fmt, ## args)
  490. /*
  491.  * Spinlock debugging stuff.
  492.  */
  493. #define SBP2_USE_REAL_SPINLOCKS
  494. #ifdef SBP2_USE_REAL_SPINLOCKS
  495. #define sbp2_spin_lock(lock, flags) spin_lock_irqsave(lock, flags)
  496. #define sbp2_spin_unlock(lock, flags) spin_unlock_irqrestore(lock, flags);
  497. static spinlock_t sbp2_host_info_lock = SPIN_LOCK_UNLOCKED;
  498. #else
  499. #define sbp2_spin_lock(lock, flags) do {save_flags(flags); cli();} while (0)
  500. #define sbp2_spin_unlock(lock, flags) do {restore_flags(flags);} while (0)
  501. #endif
  502. /*
  503.  * Globals
  504.  */
  505. static Scsi_Host_Template scsi_driver_template;
  506. static u8 sbp2_speedto_maxrec[] = { 0x7, 0x8, 0x9 };
  507. static LIST_HEAD(sbp2_host_info_list);
  508. static struct hpsb_highlevel *sbp2_hl_handle = NULL;
  509. static struct hpsb_highlevel_ops sbp2_hl_ops = {
  510. .add_host = sbp2_add_host,
  511. .remove_host = sbp2_remove_host,
  512. };
  513. static struct hpsb_address_ops sbp2_ops = {
  514. .write = sbp2_handle_status_write
  515. };
  516. #ifdef CONFIG_IEEE1394_SBP2_PHYS_DMA
  517. static struct hpsb_address_ops sbp2_physdma_ops = {
  518.         .read = sbp2_handle_physdma_read,
  519.         .write = sbp2_handle_physdma_write,
  520. };
  521. #endif
  522. static struct hpsb_protocol_driver sbp2_driver = {
  523. .name = "SBP2 Driver",
  524. .id_table =  sbp2_id_table,
  525. .probe =  sbp2_probe,
  526. .disconnect =  sbp2_disconnect,
  527. .update =  sbp2_update
  528. };
  529. /* List of device firmware's that require a forced 36 byte inquiry.  */
  530. static u32 sbp2_broken_inquiry_list[] = {
  531. 0x00002800, /* Stefan Richter <richtest@bauwesen.tu-cottbus.de> */
  532. /* DViCO Momobay CX-1 */
  533. 0x00000200 /* Andreas Plesch <plesch@fas.harvard.edu> */
  534. /* QPS Fire DVDBurner */
  535. };
  536. #define NUM_BROKEN_INQUIRY_DEVS 
  537. (sizeof(sbp2_broken_inquiry_list)/sizeof(*sbp2_broken_inquiry_list))
  538. /**************************************
  539.  * General utility functions
  540.  **************************************/
  541. #ifndef __BIG_ENDIAN
  542. /*
  543.  * Converts a buffer from be32 to cpu byte ordering. Length is in bytes.
  544.  */
  545. static __inline__ void sbp2util_be32_to_cpu_buffer(void *buffer, int length)
  546. {
  547. u32 *temp = buffer;
  548. for (length = (length >> 2); length--; )
  549. temp[length] = be32_to_cpu(temp[length]);
  550. return;
  551. }
  552. /*
  553.  * Converts a buffer from cpu to be32 byte ordering. Length is in bytes.
  554.  */
  555. static __inline__ void sbp2util_cpu_to_be32_buffer(void *buffer, int length)
  556. {
  557. u32 *temp = buffer;
  558. for (length = (length >> 2); length--; )
  559. temp[length] = cpu_to_be32(temp[length]);
  560. return;
  561. }
  562. #else /* BIG_ENDIAN */
  563. /* Why waste the cpu cycles? */
  564. #define sbp2util_be32_to_cpu_buffer(x,y)
  565. #define sbp2util_cpu_to_be32_buffer(x,y)
  566. #endif
  567. #ifdef CONFIG_IEEE1394_SBP2_PACKET_DUMP
  568. /*
  569.  * Debug packet dump routine. Length is in bytes.
  570.  */
  571. static void sbp2util_packet_dump(void *buffer, int length, char *dump_name, u32 dump_phys_addr)
  572. {
  573. int i;
  574. unsigned char *dump = buffer;
  575. if (!dump || !length || !dump_name)
  576. return;
  577. if (dump_phys_addr)
  578. printk("[%s, 0x%x]", dump_name, dump_phys_addr);
  579. else
  580. printk("[%s]", dump_name);
  581. for (i = 0; i < length; i++) {
  582. if (i > 0x3f) {
  583. printk("n   ...");
  584. break;
  585. }
  586. if ((i & 0x3) == 0)
  587. printk("  ");
  588. if ((i & 0xf) == 0)
  589. printk("n   ");
  590. printk("%02x ", (int) dump[i]);
  591. }
  592. printk("n");
  593. return;
  594. }
  595. #else
  596. #define sbp2util_packet_dump(w,x,y,z)
  597. #endif
  598. /*
  599.  * Goofy routine that basically does a down_timeout function.
  600.  */
  601. static int sbp2util_down_timeout(atomic_t *done, int timeout)
  602. {
  603. int i;
  604. for (i = timeout; (i > 0 && atomic_read(done) == 0); i-= HZ/10) {
  605. set_current_state(TASK_INTERRUPTIBLE);
  606. if (schedule_timeout(HZ/10)) /* 100ms */
  607. return(1);
  608. }
  609. return ((i > 0) ? 0:1);
  610. }
  611. /*
  612.  * This function is called to initially create a packet pool for use in
  613.  * sbp2 I/O requests. This packet pool is used when sending out sbp2
  614.  * command and agent reset requests, and allows us to remove all
  615.  * kmallocs/kfrees from the critical I/O paths.
  616.  */
  617. static int sbp2util_create_request_packet_pool(struct sbp2scsi_host_info *hi)
  618. {
  619. struct hpsb_packet *packet;
  620. int i;
  621. hi->request_packet = kmalloc(sizeof(struct sbp2_request_packet) * SBP2_MAX_REQUEST_PACKETS, 
  622.      GFP_KERNEL);
  623. if (!hi->request_packet) {
  624. SBP2_ERR("sbp2util_create_request_packet_pool - packet allocation failed!");
  625. return(-ENOMEM);
  626. }
  627. memset(hi->request_packet, 0, sizeof(struct sbp2_request_packet) * SBP2_MAX_REQUEST_PACKETS);
  628. /* 
  629.  * Create a pool of request packets. Just take the max supported 
  630.  * concurrent commands and multiply by two to be safe... 
  631.  */
  632. for (i=0; i<SBP2_MAX_REQUEST_PACKETS; i++) {
  633. /*
  634.  * Max payload of 8 bytes since the sbp2 command request
  635.  * uses a payload of 8 bytes, and agent reset is a quadlet
  636.  * write request. Bump this up if we plan on using this
  637.  * pool for other stuff.
  638.  */
  639. packet = alloc_hpsb_packet(8);
  640. if (!packet) {
  641. SBP2_ERR("sbp2util_create_request_packet_pool - packet allocation failed!");
  642. return(-ENOMEM);
  643. }
  644. /* 
  645.  * Put these request packets into a free list
  646.  */
  647. INIT_LIST_HEAD(&hi->request_packet[i].list);
  648. hi->request_packet[i].packet = packet;
  649. list_add_tail(&hi->request_packet[i].list, &hi->sbp2_req_free);
  650. }
  651. return(0);
  652. }
  653. /*
  654.  * This function is called to remove the packet pool. It is called when
  655.  * the sbp2 driver is unloaded.
  656.  */
  657. static void sbp2util_remove_request_packet_pool(struct sbp2scsi_host_info *hi)
  658. {
  659. struct list_head *lh;
  660. struct sbp2_request_packet *request_packet;
  661. unsigned long flags;
  662. /* 
  663.  * Go through free list releasing packets
  664.  */
  665. sbp2_spin_lock(&hi->sbp2_request_packet_lock, flags);
  666. while (!list_empty(&hi->sbp2_req_free)) {
  667. lh = hi->sbp2_req_free.next;
  668. list_del(lh);
  669. request_packet = list_entry(lh, struct sbp2_request_packet, list);
  670. /*
  671.  * Free the hpsb packets that we allocated for the pool
  672.  */
  673. if (request_packet) {
  674. free_hpsb_packet(request_packet->packet);
  675. }
  676. }
  677. kfree(hi->request_packet);
  678. sbp2_spin_unlock(&hi->sbp2_request_packet_lock, flags);
  679. return;
  680. }
  681. /*
  682.  * This function is called to retrieve a block write packet from our
  683.  * packet pool. This function is used in place of calling
  684.  * alloc_hpsb_packet (which costs us three kmallocs). Instead we just pull
  685.  * out a free request packet and re-initialize values in it. I'm sure this
  686.  * can still stand some more optimization.
  687.  */
  688. static struct sbp2_request_packet *
  689. sbp2util_allocate_write_request_packet(struct sbp2scsi_host_info *hi,
  690.        struct node_entry *ne, u64 addr,
  691.        size_t data_size,
  692.        quadlet_t data) {
  693. struct list_head *lh;
  694. struct sbp2_request_packet *request_packet = NULL;
  695. struct hpsb_packet *packet;
  696. unsigned long flags;
  697. sbp2_spin_lock(&hi->sbp2_request_packet_lock, flags);
  698. if (!list_empty(&hi->sbp2_req_free)) {
  699. /*
  700.  * Pull out a free request packet
  701.  */
  702. lh = hi->sbp2_req_free.next;
  703. list_del(lh);
  704. request_packet = list_entry(lh, struct sbp2_request_packet, list);
  705. packet = request_packet->packet;
  706. /*
  707.  * Initialize the packet (this is really initialization
  708.  * the core 1394 stack should do, but I'm doing it myself
  709.  * to avoid the overhead).
  710.  */
  711. packet->data_size = data_size;
  712. INIT_LIST_HEAD(&packet->list);
  713. sema_init(&packet->state_change, 0);
  714. packet->state = hpsb_unused;
  715. packet->data_be = 1;
  716. hpsb_node_fill_packet(ne, packet);
  717. packet->tlabel = get_tlabel(hi->host, packet->node_id, 0);
  718. if (!data_size) {
  719. fill_async_writequad(packet, addr, data);
  720. } else {
  721. fill_async_writeblock(packet, addr, data_size);         
  722. }
  723. /*
  724.  * Set up a task queue completion routine, which returns
  725.  * the packet to the free list and releases the tlabel.
  726.  */
  727. request_packet->tq.routine = (void (*)(void*))sbp2util_free_request_packet;
  728. request_packet->tq.data = request_packet;
  729. request_packet->hi_context = hi;
  730. hpsb_add_packet_complete_task(packet, &request_packet->tq);
  731. /*
  732.  * Now, put the packet on the in-use list.
  733.  */
  734. list_add_tail(&request_packet->list, &hi->sbp2_req_inuse);
  735. } else {
  736. SBP2_ERR("sbp2util_allocate_request_packet - no packets available!");
  737. }
  738. sbp2_spin_unlock(&hi->sbp2_request_packet_lock, flags);
  739. return(request_packet);
  740. }
  741. /*
  742.  * This function is called to return a packet to our packet pool. It is
  743.  * also called as a completion routine when a request packet is completed.
  744.  */
  745. static void sbp2util_free_request_packet(struct sbp2_request_packet *request_packet)
  746. {
  747. unsigned long flags;
  748. struct sbp2scsi_host_info *hi = request_packet->hi_context;
  749. /*
  750.  * Free the tlabel, and return the packet to the free pool.
  751.  */
  752. sbp2_spin_lock(&hi->sbp2_request_packet_lock, flags);
  753. free_tlabel(hi->host, LOCAL_BUS | request_packet->packet->node_id,
  754.     request_packet->packet->tlabel);
  755. list_del(&request_packet->list);
  756. list_add_tail(&request_packet->list, &hi->sbp2_req_free);
  757. sbp2_spin_unlock(&hi->sbp2_request_packet_lock, flags);
  758. return;
  759. }
  760. /*
  761.  * This function is called to create a pool of command orbs used for
  762.  * command processing. It is called when a new sbp2 device is detected.
  763.  */
  764. static int sbp2util_create_command_orb_pool(struct scsi_id_instance_data *scsi_id,
  765.     struct sbp2scsi_host_info *hi)
  766. {
  767. int i;
  768. unsigned long flags;
  769. struct sbp2_command_info *command;
  770.         
  771. sbp2_spin_lock(&scsi_id->sbp2_command_orb_lock, flags);
  772. for (i = 0; i < scsi_id->sbp2_total_command_orbs; i++) {
  773. command = (struct sbp2_command_info *)
  774.     kmalloc(sizeof(struct sbp2_command_info), GFP_KERNEL);
  775. if (!command) {
  776. sbp2_spin_unlock(&scsi_id->sbp2_command_orb_lock, flags);
  777. return(-ENOMEM);
  778. }
  779. memset(command, '', sizeof(struct sbp2_command_info));
  780. command->command_orb_dma =
  781. pci_map_single (hi->host->pdev, &command->command_orb,
  782. sizeof(struct sbp2_command_orb),
  783. PCI_DMA_BIDIRECTIONAL);
  784. SBP2_DMA_ALLOC("single command orb DMA");
  785. command->sge_dma =
  786. pci_map_single (hi->host->pdev, &command->scatter_gather_element,
  787. sizeof(command->scatter_gather_element),
  788. PCI_DMA_BIDIRECTIONAL);
  789. SBP2_DMA_ALLOC("scatter_gather_element");
  790. INIT_LIST_HEAD(&command->list);
  791. list_add_tail(&command->list, &scsi_id->sbp2_command_orb_completed);
  792. }
  793. sbp2_spin_unlock(&scsi_id->sbp2_command_orb_lock, flags);
  794. return 0;
  795. }
  796. /*
  797.  * This function is called to delete a pool of command orbs.
  798.  */
  799. static void sbp2util_remove_command_orb_pool(struct scsi_id_instance_data *scsi_id,
  800.      struct sbp2scsi_host_info *hi)
  801. {
  802. struct list_head *lh, *next;
  803. struct sbp2_command_info *command;
  804. unsigned long flags;
  805.         
  806. sbp2_spin_lock(&scsi_id->sbp2_command_orb_lock, flags);
  807. if (!list_empty(&scsi_id->sbp2_command_orb_completed)) {
  808. list_for_each_safe(lh, next, &scsi_id->sbp2_command_orb_completed) {
  809. command = list_entry(lh, struct sbp2_command_info, list);
  810. /* Release our generic DMA's */
  811. pci_unmap_single(hi->host->pdev, command->command_orb_dma,
  812.  sizeof(struct sbp2_command_orb),
  813.  PCI_DMA_BIDIRECTIONAL);
  814. SBP2_DMA_FREE("single command orb DMA");
  815. pci_unmap_single(hi->host->pdev, command->sge_dma,
  816.  sizeof(command->scatter_gather_element),
  817.  PCI_DMA_BIDIRECTIONAL);
  818. SBP2_DMA_FREE("scatter_gather_element");
  819. kfree(command);
  820. }
  821. }
  822. sbp2_spin_unlock(&scsi_id->sbp2_command_orb_lock, flags);
  823. return;
  824. }
  825. /* 
  826.  * This function finds the sbp2_command for a given outstanding command
  827.  * orb.Only looks at the inuse list.
  828.  */
  829. static struct sbp2_command_info *sbp2util_find_command_for_orb(
  830. struct scsi_id_instance_data *scsi_id, dma_addr_t orb)
  831. {
  832. struct list_head *lh;
  833. struct sbp2_command_info *command;
  834. unsigned long flags;
  835. sbp2_spin_lock(&scsi_id->sbp2_command_orb_lock, flags);
  836. if (!list_empty(&scsi_id->sbp2_command_orb_inuse)) {
  837. list_for_each(lh, &scsi_id->sbp2_command_orb_inuse) {
  838. command = list_entry(lh, struct sbp2_command_info, list);
  839. if (command->command_orb_dma == orb) {
  840. sbp2_spin_unlock(&scsi_id->sbp2_command_orb_lock, flags);
  841. return (command);
  842. }
  843. }
  844. }
  845. sbp2_spin_unlock(&scsi_id->sbp2_command_orb_lock, flags);
  846. SBP2_ORB_DEBUG("could not match command orb %x", (unsigned int)orb);
  847. return(NULL);
  848. }
  849. /* 
  850.  * This function finds the sbp2_command for a given outstanding SCpnt.
  851.  * Only looks at the inuse list.
  852.  */
  853. static struct sbp2_command_info *sbp2util_find_command_for_SCpnt(struct scsi_id_instance_data *scsi_id, void *SCpnt)
  854. {
  855. struct list_head *lh;
  856. struct sbp2_command_info *command;
  857. unsigned long flags;
  858. sbp2_spin_lock(&scsi_id->sbp2_command_orb_lock, flags);
  859. if (!list_empty(&scsi_id->sbp2_command_orb_inuse)) {
  860. list_for_each(lh, &scsi_id->sbp2_command_orb_inuse) {
  861. command = list_entry(lh, struct sbp2_command_info, list);
  862. if (command->Current_SCpnt == SCpnt) {
  863. sbp2_spin_unlock(&scsi_id->sbp2_command_orb_lock, flags);
  864. return (command);
  865. }
  866. }
  867. }
  868. sbp2_spin_unlock(&scsi_id->sbp2_command_orb_lock, flags);
  869. return(NULL);
  870. }
  871. /*
  872.  * This function allocates a command orb used to send a scsi command.
  873.  */
  874. static struct sbp2_command_info *sbp2util_allocate_command_orb(
  875. struct scsi_id_instance_data *scsi_id, 
  876. Scsi_Cmnd *Current_SCpnt, 
  877. void (*Current_done)(Scsi_Cmnd *),
  878. struct sbp2scsi_host_info *hi)
  879. {
  880. struct list_head *lh;
  881. struct sbp2_command_info *command = NULL;
  882. unsigned long flags;
  883. sbp2_spin_lock(&scsi_id->sbp2_command_orb_lock, flags);
  884. if (!list_empty(&scsi_id->sbp2_command_orb_completed)) {
  885. lh = scsi_id->sbp2_command_orb_completed.next;
  886. list_del(lh);
  887. command = list_entry(lh, struct sbp2_command_info, list);
  888. command->Current_done = Current_done;
  889. command->Current_SCpnt = Current_SCpnt;
  890. list_add_tail(&command->list, &scsi_id->sbp2_command_orb_inuse);
  891. } else {
  892. SBP2_ERR("sbp2util_allocate_command_orb - No orbs available!");
  893. }
  894. sbp2_spin_unlock(&scsi_id->sbp2_command_orb_lock, flags);
  895. return (command);
  896. }
  897. /* Free our DMA's */
  898. static void sbp2util_free_command_dma(struct sbp2_command_info *command)
  899. {
  900. struct sbp2scsi_host_info *hi;
  901. hi = (struct sbp2scsi_host_info *) command->Current_SCpnt->host->hostdata[0];
  902. if (hi == NULL) {
  903. printk(KERN_ERR "%s: hi == NULLn", __FUNCTION__);
  904. return;
  905. }
  906. if (command->cmd_dma) {
  907. if (command->dma_type == CMD_DMA_SINGLE) {
  908. pci_unmap_single(hi->host->pdev, command->cmd_dma,
  909.  command->dma_size, command->dma_dir);
  910. SBP2_DMA_FREE("single bulk");
  911. } else if (command->dma_type == CMD_DMA_PAGE) {
  912. #if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,13)
  913. pci_unmap_single(hi->host->pdev, command->cmd_dma,
  914.  command->dma_size, command->dma_dir);
  915. #else
  916. pci_unmap_page(hi->host->pdev, command->cmd_dma,
  917.        command->dma_size, command->dma_dir);
  918. #endif /* Linux version < 2.4.13 */
  919. SBP2_DMA_FREE("single page");
  920. } /* XXX: Check for CMD_DMA_NONE bug */
  921. command->dma_type = CMD_DMA_NONE;
  922. command->cmd_dma = 0;
  923. }
  924. if (command->sge_buffer) {
  925. pci_unmap_sg(hi->host->pdev, command->sge_buffer,
  926.      command->dma_size, command->dma_dir);
  927. SBP2_DMA_FREE("scatter list");
  928. command->sge_buffer = NULL;
  929. }
  930. }
  931. /*
  932.  * This function moves a command to the completed orb list.
  933.  */
  934. static void sbp2util_mark_command_completed(struct scsi_id_instance_data *scsi_id, struct sbp2_command_info *command)
  935. {
  936. unsigned long flags;
  937. sbp2_spin_lock(&scsi_id->sbp2_command_orb_lock, flags);
  938. list_del(&command->list);
  939. sbp2util_free_command_dma(command);
  940. list_add_tail(&command->list, &scsi_id->sbp2_command_orb_completed);
  941. sbp2_spin_unlock(&scsi_id->sbp2_command_orb_lock, flags);
  942. }
  943. /*********************************************
  944.  * IEEE-1394 core driver stack related section
  945.  *********************************************/
  946. /*
  947.  * This function is called at SCSI init in order to register our driver
  948.  * with the IEEE-1394 stack.
  949.  */
  950. int sbp2_init(void)
  951. {
  952. SBP2_DEBUG("sbp2_init");
  953. /*
  954.  * Register our high level driver with 1394 stack
  955.  */
  956. sbp2_hl_handle = hpsb_register_highlevel(SBP2_DEVICE_NAME, &sbp2_hl_ops);
  957. if (sbp2_hl_handle == NULL) {
  958. SBP2_ERR("sbp2 failed to register with ieee1394 highlevel");
  959. return(-ENOMEM);
  960. }
  961. /*
  962.  * Register our sbp2 status address space...
  963.  */
  964. hpsb_register_addrspace(sbp2_hl_handle, &sbp2_ops, SBP2_STATUS_FIFO_ADDRESS,
  965. SBP2_STATUS_FIFO_ADDRESS + 
  966. SBP2_STATUS_FIFO_ENTRY_TO_OFFSET(SBP2SCSI_MAX_SCSI_IDS+1));
  967. /*
  968.  * Handle data movement if physical dma is not enabled/supported on host controller
  969.  */
  970. #ifdef CONFIG_IEEE1394_SBP2_PHYS_DMA
  971. hpsb_register_addrspace(sbp2_hl_handle, &sbp2_physdma_ops, 0x0ULL, 0xfffffffcULL);
  972. #endif
  973. hpsb_register_protocol(&sbp2_driver);
  974. return 0;
  975. }
  976. /*
  977.  * This function is called from cleanup module, or during shut-down, in
  978.  * order to unregister our driver.
  979.  */
  980. void sbp2_cleanup(void)
  981. {
  982. SBP2_DEBUG("sbp2_cleanup");
  983. hpsb_unregister_protocol(&sbp2_driver);
  984. if (sbp2_hl_handle) {
  985. hpsb_unregister_highlevel(sbp2_hl_handle);
  986. sbp2_hl_handle = NULL;
  987. }
  988. }
  989. static int sbp2_probe(struct unit_directory *ud)
  990. {
  991. struct sbp2scsi_host_info *hi;
  992. SBP2_DEBUG("sbp2_probe");
  993. hi = sbp2_find_host_info(ud->ne->host);
  994. return sbp2_start_device(hi, ud);
  995. }
  996. static void sbp2_disconnect(struct unit_directory *ud)
  997. {
  998. struct sbp2scsi_host_info *hi;
  999. struct scsi_id_instance_data *scsi_id = ud->driver_data;
  1000. SBP2_DEBUG("sbp2_disconnect");
  1001. hi = sbp2_find_host_info(ud->ne->host);
  1002. if (hi != NULL) {
  1003. sbp2_logout_device(hi, scsi_id);
  1004.   sbp2_remove_device(hi, scsi_id);
  1005. }
  1006. }
  1007. static void sbp2_update(struct unit_directory *ud)
  1008. {
  1009. struct sbp2scsi_host_info *hi;
  1010. struct scsi_id_instance_data *scsi_id = ud->driver_data;
  1011. unsigned long flags;
  1012. SBP2_DEBUG("sbp2_update");
  1013. hi = sbp2_find_host_info(ud->ne->host);
  1014. if (sbp2_reconnect_device(hi, scsi_id)) {
  1015. /* 
  1016.  * Ok, reconnect has failed. Perhaps we didn't
  1017.  * reconnect fast enough. Try doing a regular login.
  1018.  */
  1019. if (sbp2_login_device(hi, scsi_id)) {
  1020. /* Login failed too, just remove the device. */
  1021. SBP2_ERR("sbp2_reconnect_device failed!");
  1022. sbp2_remove_device(hi, scsi_id);
  1023. hpsb_release_unit_directory(ud);
  1024. return;
  1025. }
  1026. }
  1027. /* Set max retries to something large on the device. */
  1028. sbp2_set_busy_timeout(hi, scsi_id);
  1029. /* Do a SBP-2 fetch agent reset. */
  1030. sbp2_agent_reset(hi, scsi_id, 0);
  1031. /* Get the max speed and packet size that we can use. */
  1032. sbp2_max_speed_and_size(hi, scsi_id);
  1033. /* Complete any pending commands with busy (so they get
  1034.  * retried) and remove them from our queue
  1035.  */
  1036. sbp2_spin_lock(&hi->sbp2_command_lock, flags);
  1037. sbp2scsi_complete_all_commands(hi, scsi_id, DID_BUS_BUSY);
  1038. sbp2_spin_unlock(&hi->sbp2_command_lock, flags);
  1039. }
  1040. /*
  1041.  * This function is called after registering our operations in sbp2_init.
  1042.  * We go ahead and allocate some memory for our host info structure, and
  1043.  * init some structures.
  1044.  */
  1045. static void sbp2_add_host(struct hpsb_host *host)
  1046. {
  1047. struct sbp2scsi_host_info *hi;
  1048. unsigned long flags;
  1049. SBP2_DEBUG("sbp2_add_host");
  1050. /* Allocate some memory for our host info structure */
  1051. hi = (struct sbp2scsi_host_info *)kmalloc(sizeof(struct sbp2scsi_host_info),
  1052.   GFP_KERNEL);
  1053. if (hi == NULL) {
  1054. SBP2_ERR("out of memory in sbp2_add_host");
  1055. return;
  1056. }
  1057. /* Initialize some host stuff */
  1058. memset(hi, 0, sizeof(struct sbp2scsi_host_info));
  1059. INIT_LIST_HEAD(&hi->list);
  1060. INIT_LIST_HEAD(&hi->sbp2_req_inuse);
  1061. INIT_LIST_HEAD(&hi->sbp2_req_free);
  1062. hi->host = host;
  1063. hi->sbp2_command_lock = SPIN_LOCK_UNLOCKED;
  1064. hi->sbp2_request_packet_lock = SPIN_LOCK_UNLOCKED;
  1065. /* Create our request packet pool (pool of packets for use in I/O) */
  1066. if (sbp2util_create_request_packet_pool(hi)) {
  1067. SBP2_ERR("sbp2util_create_request_packet_pool failed!");
  1068. return;
  1069. }
  1070. sbp2_spin_lock(&sbp2_host_info_lock, flags);
  1071. list_add_tail(&hi->list, &sbp2_host_info_list);
  1072. sbp2_spin_unlock(&sbp2_host_info_lock, flags);
  1073. /* Register our host with the SCSI stack. */
  1074. hi->scsi_host = scsi_register (&scsi_driver_template, sizeof(void *));
  1075. if (hi->scsi_host) {
  1076. hi->scsi_host->hostdata[0] = (unsigned long)hi;
  1077. hi->scsi_host->max_id = SBP2SCSI_MAX_SCSI_IDS;
  1078. }
  1079. scsi_driver_template.present++;
  1080. return;
  1081. }
  1082. /*
  1083.  * This fuction returns a host info structure from the host structure, in
  1084.  * case we have multiple hosts.
  1085.  */
  1086. static struct sbp2scsi_host_info *sbp2_find_host_info(struct hpsb_host *host)
  1087. {
  1088. struct list_head *lh;
  1089. struct sbp2scsi_host_info *hi;
  1090. list_for_each (lh, &sbp2_host_info_list) {
  1091. hi = list_entry(lh, struct sbp2scsi_host_info, list);
  1092. if (hi->host == host)
  1093. return hi;
  1094. }
  1095. return NULL;
  1096. }
  1097. /*
  1098.  * This function returns a host info structure for a given Scsi_Host
  1099.  * struct.
  1100.  */
  1101. static struct sbp2scsi_host_info *sbp2_find_host_info_scsi(struct Scsi_Host *host)
  1102. {
  1103. struct list_head *lh;
  1104. struct sbp2scsi_host_info *hi;
  1105. list_for_each (lh, &sbp2_host_info_list) {
  1106. hi = list_entry(lh, struct sbp2scsi_host_info, list);
  1107. if (hi->scsi_host == host)
  1108. return hi;
  1109. }
  1110. return NULL;
  1111. }
  1112. /*
  1113.  * This function is called when a host is removed.
  1114.  */
  1115. static void sbp2_remove_host(struct hpsb_host *host)
  1116. {
  1117. struct sbp2scsi_host_info *hi;
  1118. unsigned long flags;
  1119. SBP2_DEBUG("sbp2_remove_host");
  1120. sbp2_spin_lock(&sbp2_host_info_lock, flags);
  1121. hi = sbp2_find_host_info(host);
  1122. if (hi != NULL) {
  1123. sbp2util_remove_request_packet_pool(hi);
  1124. list_del(&hi->list);
  1125. kfree(hi);
  1126. }
  1127. else
  1128. SBP2_ERR("attempt to remove unknown host %p", host);
  1129. sbp2_spin_unlock(&sbp2_host_info_lock, flags);
  1130. }
  1131. /*
  1132.  * This function is where we first pull the node unique ids, and then
  1133.  * allocate memory and register a SBP-2 device.
  1134.  */
  1135. static int sbp2_start_device(struct sbp2scsi_host_info *hi, struct unit_directory *ud)
  1136. {
  1137. struct scsi_id_instance_data *scsi_id = NULL;
  1138. struct node_entry *ne;
  1139. int i;
  1140. SBP2_DEBUG("sbp2_start_device");
  1141. ne = ud->ne;
  1142. /*
  1143.  * This really is a "new" device plugged in. Let's allocate memory
  1144.  * for our scsi id instance data.
  1145.  */
  1146. scsi_id = (struct scsi_id_instance_data *)kmalloc(sizeof(struct scsi_id_instance_data),
  1147.   GFP_KERNEL);
  1148. if (!scsi_id)
  1149. goto alloc_fail_first;
  1150. memset(scsi_id, 0, sizeof(struct scsi_id_instance_data));
  1151. /* Login FIFO DMA */
  1152. scsi_id->login_response =
  1153. pci_alloc_consistent(hi->host->pdev, sizeof(struct sbp2_login_response),
  1154.      &scsi_id->login_response_dma);
  1155. if (!scsi_id->login_response)
  1156. goto alloc_fail;
  1157. SBP2_DMA_ALLOC("consistent DMA region for login FIFO");
  1158. /* Reconnect ORB DMA */
  1159. scsi_id->reconnect_orb =
  1160. pci_alloc_consistent(hi->host->pdev, sizeof(struct sbp2_reconnect_orb),
  1161.      &scsi_id->reconnect_orb_dma);
  1162. if (!scsi_id->reconnect_orb)
  1163. goto alloc_fail;
  1164. SBP2_DMA_ALLOC("consistent DMA region for reconnect ORB");
  1165. /* Logout ORB DMA */
  1166. scsi_id->logout_orb =
  1167. pci_alloc_consistent(hi->host->pdev, sizeof(struct sbp2_logout_orb),
  1168.      &scsi_id->logout_orb_dma);
  1169. if (!scsi_id->logout_orb)
  1170. goto alloc_fail;
  1171. SBP2_DMA_ALLOC("consistent DMA region for logout ORB");
  1172. /* Login ORB DMA */
  1173. scsi_id->login_orb =
  1174. pci_alloc_consistent(hi->host->pdev, sizeof(struct sbp2_login_orb),
  1175.      &scsi_id->login_orb_dma);
  1176. if (scsi_id->login_orb == NULL) {
  1177. alloc_fail:
  1178. if (scsi_id->logout_orb) {
  1179. pci_free_consistent(hi->host->pdev,
  1180. sizeof(struct sbp2_logout_orb),
  1181. scsi_id->logout_orb,
  1182. scsi_id->logout_orb_dma);
  1183. SBP2_DMA_FREE("logout ORB DMA");
  1184. }
  1185. if (scsi_id->reconnect_orb) {
  1186. pci_free_consistent(hi->host->pdev,
  1187. sizeof(struct sbp2_reconnect_orb),
  1188. scsi_id->reconnect_orb,
  1189. scsi_id->reconnect_orb_dma);
  1190. SBP2_DMA_FREE("reconnect ORB DMA");
  1191. }
  1192. if (scsi_id->login_response) {
  1193. pci_free_consistent(hi->host->pdev,
  1194. sizeof(struct sbp2_login_response),
  1195. scsi_id->login_response,
  1196. scsi_id->login_response_dma);
  1197. SBP2_DMA_FREE("login FIFO DMA");
  1198. }
  1199. kfree(scsi_id);
  1200. alloc_fail_first:
  1201. SBP2_ERR ("Could not allocate memory for scsi_id");
  1202. return(-ENOMEM);
  1203. }
  1204. SBP2_DMA_ALLOC("consistent DMA region for login ORB");
  1205. /*
  1206.  * Initialize some of the fields in this structure
  1207.  */
  1208. scsi_id->ne = ne;
  1209. scsi_id->ud = ud;
  1210. scsi_id->speed_code = SPEED_100;
  1211. scsi_id->max_payload_size = sbp2_speedto_maxrec[SPEED_100];
  1212. ud->driver_data = scsi_id;
  1213. atomic_set(&scsi_id->sbp2_login_complete, 0);
  1214. /* 
  1215.  * Initialize structures needed for the command orb pool.
  1216.  */
  1217. INIT_LIST_HEAD(&scsi_id->sbp2_command_orb_inuse);
  1218. INIT_LIST_HEAD(&scsi_id->sbp2_command_orb_completed);
  1219. scsi_id->sbp2_command_orb_lock = SPIN_LOCK_UNLOCKED;
  1220. scsi_id->sbp2_total_command_orbs = 0;
  1221. /*
  1222.  * Make sure that we've gotten ahold of the sbp2 management agent
  1223.  * address. Also figure out the command set being used (SCSI or
  1224.  * RBC).
  1225.  */
  1226. sbp2_parse_unit_directory(scsi_id);
  1227. scsi_id->sbp2_total_command_orbs = SBP2_MAX_COMMAND_ORBS;
  1228. /* 
  1229.  * Knock the total command orbs down if we are serializing I/O
  1230.  */
  1231. if (sbp2_serialize_io) {
  1232. scsi_id->sbp2_total_command_orbs = 2; /* one extra for good measure */
  1233. }
  1234. /*
  1235.  * Find an empty spot to stick our scsi id instance data. 
  1236.  */
  1237. for (i = 0; i < SBP2SCSI_MAX_SCSI_IDS; i++) {
  1238. if (!hi->scsi_id[i]) {
  1239. hi->scsi_id[i] = scsi_id;
  1240. scsi_id->id = i;
  1241. SBP2_DEBUG("New SBP-2 device inserted, SCSI ID = %x", (unsigned int) i);
  1242. break;
  1243. }
  1244. }
  1245. /*
  1246.  * Create our command orb pool
  1247.  */
  1248. if (sbp2util_create_command_orb_pool(scsi_id, hi)) {
  1249. SBP2_ERR("sbp2util_create_command_orb_pool failed!");
  1250. sbp2_remove_device(hi, scsi_id);
  1251. return -ENOMEM;
  1252. }
  1253. /*
  1254.  * Make sure we are not out of space
  1255.  */
  1256. if (i == SBP2SCSI_MAX_SCSI_IDS) {
  1257. SBP2_ERR("No slots left for SBP-2 device");
  1258. sbp2_remove_device(hi, scsi_id);
  1259. return -EBUSY;
  1260. }
  1261. /*
  1262.  * Login to the sbp-2 device
  1263.  */
  1264. if (sbp2_login_device(hi, scsi_id)) {
  1265. /* Login failed, just remove the device. */
  1266. SBP2_ERR("sbp2_login_device failed");
  1267. sbp2_remove_device(hi, scsi_id);
  1268. return -EBUSY;
  1269. }
  1270. /*
  1271.  * Set max retries to something large on the device
  1272.  */
  1273. sbp2_set_busy_timeout(hi, scsi_id);
  1274. /*
  1275.  * Do a SBP-2 fetch agent reset
  1276.  */
  1277. sbp2_agent_reset(hi, scsi_id, 0);
  1278. /*
  1279.  * Get the max speed and packet size that we can use
  1280.  */
  1281. sbp2_max_speed_and_size(hi, scsi_id);
  1282. return 0;
  1283. }
  1284. /*
  1285.  * This function removes an sbp2 device from the sbp2scsi_host_info struct.
  1286.  */
  1287. static void sbp2_remove_device(struct sbp2scsi_host_info *hi, 
  1288.        struct scsi_id_instance_data *scsi_id)
  1289. {
  1290. SBP2_DEBUG("sbp2_remove_device");
  1291. /* Complete any pending commands with selection timeout */
  1292. sbp2scsi_complete_all_commands(hi, scsi_id, DID_NO_CONNECT);
  1293.        
  1294. /* Clean up any other structures */
  1295. if (scsi_id->sbp2_total_command_orbs) {
  1296. sbp2util_remove_command_orb_pool(scsi_id, hi);
  1297. }
  1298. if (scsi_id->login_response) {
  1299. pci_free_consistent(hi->host->pdev,
  1300.     sizeof(struct sbp2_login_response),
  1301.     scsi_id->login_response,
  1302.     scsi_id->login_response_dma);
  1303. SBP2_DMA_FREE("single login FIFO");
  1304. }
  1305. if (scsi_id->login_orb) {
  1306. pci_free_consistent(hi->host->pdev,
  1307.     sizeof(struct sbp2_login_orb),
  1308.     scsi_id->login_orb,
  1309.     scsi_id->login_orb_dma);
  1310. SBP2_DMA_FREE("single login ORB");
  1311. }
  1312. if (scsi_id->reconnect_orb) {
  1313. pci_free_consistent(hi->host->pdev,
  1314.     sizeof(struct sbp2_reconnect_orb),
  1315.     scsi_id->reconnect_orb,
  1316.     scsi_id->reconnect_orb_dma);
  1317. SBP2_DMA_FREE("single reconnect orb");
  1318. }
  1319. if (scsi_id->logout_orb) {
  1320. pci_free_consistent(hi->host->pdev,
  1321.     sizeof(struct sbp2_logout_orb),
  1322.     scsi_id->logout_orb,
  1323.     scsi_id->reconnect_orb_dma);
  1324. SBP2_DMA_FREE("single logout orb");
  1325. }
  1326. SBP2_DEBUG("SBP-2 device removed, SCSI ID = %d", scsi_id->id);
  1327. hi->scsi_id[scsi_id->id] = NULL;
  1328. kfree(scsi_id);
  1329. }
  1330. #ifdef CONFIG_IEEE1394_SBP2_PHYS_DMA
  1331. /*
  1332.  * This function deals with physical dma write requests (for adapters that do not support
  1333.  * physical dma in hardware). Mostly just here for debugging...
  1334.  */
  1335. static int sbp2_handle_physdma_write(struct hpsb_host *host, int nodeid, int destid, quadlet_t *data,
  1336.                                      u64 addr, unsigned int length)
  1337. {
  1338.         /*
  1339.          * Manually put the data in the right place.
  1340.          */
  1341.         memcpy(bus_to_virt((u32)addr), data, length);
  1342. sbp2util_packet_dump(data, length, "sbp2 phys dma write by device", (u32)addr);
  1343.         return(RCODE_COMPLETE);
  1344. }
  1345. /*
  1346.  * This function deals with physical dma read requests (for adapters that do not support
  1347.  * physical dma in hardware). Mostly just here for debugging...
  1348.  */
  1349. static int sbp2_handle_physdma_read(struct hpsb_host *host, int nodeid, quadlet_t *data,
  1350.                                     u64 addr, unsigned int length)
  1351. {
  1352.         /*
  1353.          * Grab data from memory and send a read response.
  1354.          */
  1355.         memcpy(data, bus_to_virt((u32)addr), length);
  1356. sbp2util_packet_dump(data, length, "sbp2 phys dma read by device", (u32)addr);
  1357.         return(RCODE_COMPLETE);
  1358. }
  1359. #endif
  1360. /**************************************
  1361.  * SBP-2 protocol related section
  1362.  **************************************/
  1363. /*
  1364.  * This function determines if we should convert scsi commands for a particular sbp2 device type
  1365.  */
  1366. static __inline__ int sbp2_command_conversion_device_type(u8 device_type)
  1367. {
  1368. return (((device_type == TYPE_DISK) ||
  1369.  (device_type == TYPE_SDAD) ||
  1370.  (device_type == TYPE_ROM)) ? 1:0);
  1371. }
  1372. /*
  1373.  * This function is called in order to login to a particular SBP-2 device,
  1374.  * after a bus reset.
  1375.  */
  1376. static int sbp2_login_device(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id) 
  1377. {
  1378. quadlet_t data[2];
  1379. SBP2_DEBUG("sbp2_login_device");
  1380. if (!scsi_id->login_orb) {
  1381. SBP2_DEBUG("sbp2_login_device: login_orb not alloc'd!");
  1382. return(-EIO);
  1383. }
  1384. /* Set-up login ORB, assume no password */
  1385. scsi_id->login_orb->password_hi = 0; 
  1386. scsi_id->login_orb->password_lo = 0;
  1387. SBP2_DEBUG("sbp2_login_device: password_hi/lo initialized");
  1388. scsi_id->login_orb->login_response_lo = scsi_id->login_response_dma;
  1389. scsi_id->login_orb->login_response_hi = ORB_SET_NODE_ID(hi->host->node_id);
  1390. SBP2_DEBUG("sbp2_login_device: login_response_hi/lo initialized");
  1391. scsi_id->login_orb->lun_misc = ORB_SET_FUNCTION(LOGIN_REQUEST);
  1392. scsi_id->login_orb->lun_misc |= ORB_SET_RECONNECT(0); /* One second reconnect time */
  1393. scsi_id->login_orb->lun_misc |= ORB_SET_EXCLUSIVE(sbp2_exclusive_login); /* Exclusive access to device */
  1394. scsi_id->login_orb->lun_misc |= ORB_SET_NOTIFY(1); /* Notify us of login complete */
  1395. /* Set the lun if we were able to pull it from the device's unit directory */
  1396. if (scsi_id->sbp2_device_type_and_lun != SBP2_DEVICE_TYPE_LUN_UNINITIALIZED) {
  1397. scsi_id->login_orb->lun_misc |= ORB_SET_LUN(scsi_id->sbp2_device_type_and_lun);
  1398. }
  1399. SBP2_DEBUG("sbp2_login_device: lun_misc initialized");
  1400. scsi_id->login_orb->passwd_resp_lengths =
  1401. ORB_SET_LOGIN_RESP_LENGTH(sizeof(struct sbp2_login_response));
  1402. SBP2_DEBUG("sbp2_login_device: passwd_resp_lengths initialized");
  1403. scsi_id->login_orb->status_FIFO_lo = SBP2_STATUS_FIFO_ADDRESS_LO + 
  1404.      SBP2_STATUS_FIFO_ENTRY_TO_OFFSET(scsi_id->id);
  1405. scsi_id->login_orb->status_FIFO_hi = (ORB_SET_NODE_ID(hi->host->node_id) |
  1406.       SBP2_STATUS_FIFO_ADDRESS_HI);
  1407. SBP2_DEBUG("sbp2_login_device: status FIFO initialized");
  1408. /*
  1409.  * Byte swap ORB if necessary
  1410.  */
  1411. sbp2util_cpu_to_be32_buffer(scsi_id->login_orb, sizeof(struct sbp2_login_orb));
  1412. SBP2_DEBUG("sbp2_login_device: orb byte-swapped");
  1413. sbp2util_packet_dump(scsi_id->login_orb, sizeof(struct sbp2_login_orb), 
  1414.      "sbp2 login orb", scsi_id->login_orb_dma);
  1415. /*
  1416.  * Initialize login response and status fifo
  1417.  */
  1418. memset(scsi_id->login_response, 0, sizeof(struct sbp2_login_response));
  1419. memset(&scsi_id->status_block, 0, sizeof(struct sbp2_status_block));
  1420. SBP2_DEBUG("sbp2_login_device: login_response/status FIFO memset");
  1421. /*
  1422.  * Ok, let's write to the target's management agent register
  1423.  */
  1424. data[0] = ORB_SET_NODE_ID(hi->host->node_id);
  1425. data[1] = scsi_id->login_orb_dma;
  1426. sbp2util_cpu_to_be32_buffer(data, 8);
  1427. atomic_set(&scsi_id->sbp2_login_complete, 0);
  1428. SBP2_DEBUG("sbp2_login_device: prepared to write");
  1429. hpsb_node_write(scsi_id->ne, scsi_id->sbp2_management_agent_addr, data, 8);
  1430. SBP2_DEBUG("sbp2_login_device: written");
  1431. /*
  1432.  * Wait for login status (up to 20 seconds)... 
  1433.  */
  1434. if (sbp2util_down_timeout(&scsi_id->sbp2_login_complete, 20*HZ)) {
  1435. SBP2_ERR("Error logging into SBP-2 device - login timed-out");
  1436. return(-EIO);
  1437. }
  1438. /*
  1439.  * Sanity. Make sure status returned matches login orb.
  1440.  */
  1441. if (scsi_id->status_block.ORB_offset_lo != scsi_id->login_orb_dma) {
  1442. SBP2_ERR("Error logging into SBP-2 device - login timed-out");
  1443. return(-EIO);
  1444. }
  1445. /*
  1446.  * Check status
  1447.  */
  1448. if (STATUS_GET_RESP(scsi_id->status_block.ORB_offset_hi_misc) ||
  1449.     STATUS_GET_DEAD_BIT(scsi_id->status_block.ORB_offset_hi_misc) ||
  1450.     STATUS_GET_SBP_STATUS(scsi_id->status_block.ORB_offset_hi_misc)) {
  1451. SBP2_ERR("Error logging into SBP-2 device - login failed");
  1452. return(-EIO);
  1453. }
  1454. /*
  1455.  * Byte swap the login response, for use when reconnecting or
  1456.  * logging out.
  1457.  */
  1458. sbp2util_cpu_to_be32_buffer(scsi_id->login_response, sizeof(struct sbp2_login_response));
  1459. /*
  1460.  * Grab our command block agent address from the login response.
  1461.  */
  1462. SBP2_DEBUG("command_block_agent_hi = %x",
  1463.    (unsigned int)scsi_id->login_response->command_block_agent_hi);
  1464. SBP2_DEBUG("command_block_agent_lo = %x",
  1465.    (unsigned int)scsi_id->login_response->command_block_agent_lo);
  1466. scsi_id->sbp2_command_block_agent_addr =
  1467. ((u64)scsi_id->login_response->command_block_agent_hi) << 32;
  1468. scsi_id->sbp2_command_block_agent_addr |= ((u64)scsi_id->login_response->command_block_agent_lo);
  1469. scsi_id->sbp2_command_block_agent_addr &= 0x0000ffffffffffffULL;
  1470. SBP2_INFO("Logged into SBP-2 device");
  1471. return(0);
  1472. }
  1473. /*
  1474.  * This function is called in order to logout from a particular SBP-2
  1475.  * device, usually called during driver unload.
  1476.  */
  1477. static int sbp2_logout_device(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id) 
  1478. {
  1479. quadlet_t data[2];
  1480. SBP2_DEBUG("sbp2_logout_device");
  1481. /*
  1482.  * Set-up logout ORB
  1483.  */
  1484. scsi_id->logout_orb->reserved1 = 0x0;
  1485. scsi_id->logout_orb->reserved2 = 0x0;
  1486. scsi_id->logout_orb->reserved3 = 0x0;
  1487. scsi_id->logout_orb->reserved4 = 0x0;
  1488. scsi_id->logout_orb->login_ID_misc = ORB_SET_FUNCTION(LOGOUT_REQUEST);
  1489. scsi_id->logout_orb->login_ID_misc |= ORB_SET_LOGIN_ID(scsi_id->login_response->length_login_ID);
  1490. /* Notify us when complete */
  1491. scsi_id->logout_orb->login_ID_misc |= ORB_SET_NOTIFY(1);
  1492. scsi_id->logout_orb->reserved5 = 0x0;
  1493. scsi_id->logout_orb->status_FIFO_lo = SBP2_STATUS_FIFO_ADDRESS_LO + 
  1494.       SBP2_STATUS_FIFO_ENTRY_TO_OFFSET(scsi_id->id);
  1495. scsi_id->logout_orb->status_FIFO_hi = (ORB_SET_NODE_ID(hi->host->node_id) |
  1496.        SBP2_STATUS_FIFO_ADDRESS_HI);
  1497. /*
  1498.  * Byte swap ORB if necessary
  1499.  */
  1500. sbp2util_cpu_to_be32_buffer(scsi_id->logout_orb, sizeof(struct sbp2_logout_orb));
  1501. sbp2util_packet_dump(scsi_id->logout_orb, sizeof(struct sbp2_logout_orb), 
  1502.      "sbp2 logout orb", scsi_id->logout_orb_dma);
  1503. /*
  1504.  * Ok, let's write to the target's management agent register
  1505.  */
  1506. data[0] = ORB_SET_NODE_ID(hi->host->node_id);
  1507. data[1] = scsi_id->logout_orb_dma;
  1508. sbp2util_cpu_to_be32_buffer(data, 8);
  1509. atomic_set(&scsi_id->sbp2_login_complete, 0);
  1510. hpsb_node_write(scsi_id->ne, scsi_id->sbp2_management_agent_addr, data, 8);
  1511. /* Wait for device to logout...1 second. */
  1512. sbp2util_down_timeout(&scsi_id->sbp2_login_complete, HZ);
  1513. SBP2_INFO("Logged out of SBP-2 device");
  1514. return(0);
  1515. }
  1516. /*
  1517.  * This function is called in order to reconnect to a particular SBP-2
  1518.  * device, after a bus reset.
  1519.  */
  1520. static int sbp2_reconnect_device(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id) 
  1521. {
  1522. quadlet_t data[2];
  1523. SBP2_DEBUG("sbp2_reconnect_device");
  1524. /*
  1525.  * Set-up reconnect ORB
  1526.  */
  1527. scsi_id->reconnect_orb->reserved1 = 0x0;
  1528. scsi_id->reconnect_orb->reserved2 = 0x0;
  1529. scsi_id->reconnect_orb->reserved3 = 0x0;
  1530. scsi_id->reconnect_orb->reserved4 = 0x0;
  1531. scsi_id->reconnect_orb->login_ID_misc = ORB_SET_FUNCTION(RECONNECT_REQUEST);
  1532. scsi_id->reconnect_orb->login_ID_misc |=
  1533. ORB_SET_LOGIN_ID(scsi_id->login_response->length_login_ID);
  1534. /* Notify us when complete */
  1535. scsi_id->reconnect_orb->login_ID_misc |= ORB_SET_NOTIFY(1);
  1536. scsi_id->reconnect_orb->reserved5 = 0x0;
  1537. scsi_id->reconnect_orb->status_FIFO_lo = SBP2_STATUS_FIFO_ADDRESS_LO + 
  1538.  SBP2_STATUS_FIFO_ENTRY_TO_OFFSET(scsi_id->id);
  1539. scsi_id->reconnect_orb->status_FIFO_hi =
  1540. (ORB_SET_NODE_ID(hi->host->node_id) | SBP2_STATUS_FIFO_ADDRESS_HI);
  1541. /*
  1542.  * Byte swap ORB if necessary
  1543.  */
  1544. sbp2util_cpu_to_be32_buffer(scsi_id->reconnect_orb, sizeof(struct sbp2_reconnect_orb));
  1545. sbp2util_packet_dump(scsi_id->reconnect_orb, sizeof(struct sbp2_reconnect_orb), 
  1546.      "sbp2 reconnect orb", scsi_id->reconnect_orb_dma);
  1547. /*
  1548.  * Initialize status fifo
  1549.  */
  1550. memset(&scsi_id->status_block, 0, sizeof(struct sbp2_status_block));
  1551. /*
  1552.  * Ok, let's write to the target's management agent register
  1553.  */
  1554. data[0] = ORB_SET_NODE_ID(hi->host->node_id);
  1555. data[1] = scsi_id->reconnect_orb_dma;
  1556. sbp2util_cpu_to_be32_buffer(data, 8);
  1557. atomic_set(&scsi_id->sbp2_login_complete, 0);
  1558. hpsb_node_write(scsi_id->ne, scsi_id->sbp2_management_agent_addr, data, 8);
  1559. /*
  1560.  * Wait for reconnect status (up to 1 second)...
  1561.  */
  1562. if (sbp2util_down_timeout(&scsi_id->sbp2_login_complete, HZ)) {
  1563. SBP2_ERR("Error reconnecting to SBP-2 device - reconnect timed-out");
  1564. return(-EIO);
  1565. }
  1566. /*
  1567.  * Sanity. Make sure status returned matches reconnect orb.
  1568.  */
  1569. if (scsi_id->status_block.ORB_offset_lo != scsi_id->reconnect_orb_dma) {
  1570. SBP2_ERR("Error reconnecting to SBP-2 device - reconnect timed-out");
  1571. return(-EIO);
  1572. }
  1573. /*
  1574.  * Check status
  1575.  */
  1576. if (STATUS_GET_RESP(scsi_id->status_block.ORB_offset_hi_misc) ||
  1577.     STATUS_GET_DEAD_BIT(scsi_id->status_block.ORB_offset_hi_misc) ||
  1578.     STATUS_GET_SBP_STATUS(scsi_id->status_block.ORB_offset_hi_misc)) {
  1579. SBP2_ERR("Error reconnecting to SBP-2 device - reconnect failed");
  1580. return(-EIO);
  1581. }
  1582. SBP2_INFO("Reconnected to SBP-2 device");
  1583. return(0);
  1584. }
  1585. /*
  1586.  * This function is called in order to set the busy timeout (number of
  1587.  * retries to attempt) on the sbp2 device. 
  1588.  */
  1589. static int sbp2_set_busy_timeout(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id)
  1590. {      
  1591. quadlet_t data;
  1592. SBP2_DEBUG("sbp2_set_busy_timeout");
  1593. /*
  1594.  * Ok, let's write to the target's busy timeout register
  1595.  */
  1596. data = cpu_to_be32(SBP2_BUSY_TIMEOUT_VALUE);
  1597. if (hpsb_node_write(scsi_id->ne, SBP2_BUSY_TIMEOUT_ADDRESS, &data, 4)) {
  1598. SBP2_ERR("sbp2_set_busy_timeout error");
  1599. }
  1600. return(0);
  1601. }
  1602. /*
  1603.  * This function is called to parse sbp2 device's config rom unit
  1604.  * directory. Used to determine things like sbp2 management agent offset,
  1605.  * and command set used (SCSI or RBC). 
  1606.  */
  1607. static void sbp2_parse_unit_directory(struct scsi_id_instance_data *scsi_id)
  1608. {
  1609. struct unit_directory *ud;
  1610. int i;
  1611. SBP2_DEBUG("sbp2_parse_unit_directory");
  1612. /* Initialize some fields, in case an entry does not exist */
  1613. scsi_id->sbp2_device_type_and_lun = SBP2_DEVICE_TYPE_LUN_UNINITIALIZED;
  1614. scsi_id->sbp2_management_agent_addr = 0x0;
  1615. scsi_id->sbp2_command_set_spec_id = 0x0;
  1616. scsi_id->sbp2_command_set = 0x0;
  1617. scsi_id->sbp2_unit_characteristics = 0x0;
  1618. scsi_id->sbp2_firmware_revision = 0x0;
  1619. ud = scsi_id->ud;
  1620. /* Handle different fields in the unit directory, based on keys */
  1621. for (i = 0; i < ud->count; i++) {
  1622. switch (CONFIG_ROM_KEY(ud->quadlets[i])) {
  1623. case SBP2_CSR_OFFSET_KEY:
  1624. /* Save off the management agent address */
  1625. scsi_id->sbp2_management_agent_addr =
  1626. CSR_REGISTER_BASE + 
  1627. (CONFIG_ROM_VALUE(ud->quadlets[i]) << 2);
  1628. SBP2_DEBUG("sbp2_management_agent_addr = %x",
  1629.    (unsigned int) scsi_id->sbp2_management_agent_addr);
  1630. break;
  1631. case SBP2_COMMAND_SET_SPEC_ID_KEY:
  1632. /* Command spec organization */
  1633. scsi_id->sbp2_command_set_spec_id
  1634. = CONFIG_ROM_VALUE(ud->quadlets[i]);
  1635. SBP2_DEBUG("sbp2_command_set_spec_id = %x",
  1636.    (unsigned int) scsi_id->sbp2_command_set_spec_id);
  1637. break;
  1638. case SBP2_COMMAND_SET_KEY:
  1639. /* Command set used by sbp2 device */
  1640. scsi_id->sbp2_command_set
  1641. = CONFIG_ROM_VALUE(ud->quadlets[i]);
  1642. SBP2_DEBUG("sbp2_command_set = %x",
  1643.    (unsigned int) scsi_id->sbp2_command_set);
  1644. break;
  1645. case SBP2_UNIT_CHARACTERISTICS_KEY:
  1646. /*
  1647.  * Unit characterisitcs (orb related stuff
  1648.  * that I'm not yet paying attention to)
  1649.  */
  1650. scsi_id->sbp2_unit_characteristics
  1651. = CONFIG_ROM_VALUE(ud->quadlets[i]);
  1652. SBP2_DEBUG("sbp2_unit_characteristics = %x",
  1653.    (unsigned int) scsi_id->sbp2_unit_characteristics);
  1654. break;
  1655. case SBP2_DEVICE_TYPE_AND_LUN_KEY:
  1656. /*
  1657.  * Device type and lun (used for
  1658.  * detemining type of sbp2 device)
  1659.  */
  1660. scsi_id->sbp2_device_type_and_lun
  1661. = CONFIG_ROM_VALUE(ud->quadlets[i]);
  1662. SBP2_DEBUG("sbp2_device_type_and_lun = %x",
  1663.    (unsigned int) scsi_id->sbp2_device_type_and_lun);
  1664. break;
  1665. case SBP2_FIRMWARE_REVISION_KEY:
  1666. /* Firmware revision */
  1667. scsi_id->sbp2_firmware_revision
  1668. = CONFIG_ROM_VALUE(ud->quadlets[i]);
  1669. if (sbp2_force_inquiry_hack)
  1670. SBP2_INFO("sbp2_firmware_revision = %x",
  1671.    (unsigned int) scsi_id->sbp2_firmware_revision);
  1672. else SBP2_DEBUG("sbp2_firmware_revision = %x",
  1673.    (unsigned int) scsi_id->sbp2_firmware_revision);
  1674. break;
  1675. default:
  1676. break;
  1677. }
  1678. }
  1679. /* This is the start of our broken device checking. We try to hack
  1680.  * around oddities and known defects.  */
  1681. scsi_id->workarounds = 0x0;
  1682. /* If the vendor id is 0xa0b8 (Symbios vendor id), then we have a
  1683.  * bridge with 128KB max transfer size limitation. For sanity, we
  1684.  * only voice this when the current sbp2_max_sectors setting
  1685.  * exceeds the 128k limit. By default, that is not the case.
  1686.  *
  1687.  * It would be really nice if we could detect this before the scsi
  1688.  * host gets initialized. That way we can down-force the
  1689.  * sbp2_max_sectors to account for it. That is not currently
  1690.  * possible.  */
  1691. if ((scsi_id->sbp2_firmware_revision & 0xffff00) ==
  1692. SBP2_128KB_BROKEN_FIRMWARE &&
  1693. (sbp2_max_sectors * 512) > (128 * 1024)) {
  1694. SBP2_WARN("Node " NODE_BUS_FMT ": Bridge only supports 128KB max transfer size.",
  1695. NODE_BUS_ARGS(scsi_id->ne->nodeid));
  1696. SBP2_WARN("WARNING: Current sbp2_max_sectors setting is larger than 128KB (%d sectors)!",
  1697. sbp2_max_sectors);
  1698. scsi_id->workarounds |= SBP2_BREAKAGE_128K_MAX_TRANSFER;
  1699. }
  1700. /* Check for a blacklisted set of devices that require us to force
  1701.  * a 36 byte host inquiry. This can be overriden as a module param
  1702.  * (to force all hosts).  */
  1703. for (i = 0; i < NUM_BROKEN_INQUIRY_DEVS; i++) {
  1704. if ((scsi_id->sbp2_firmware_revision & 0xffff00) ==
  1705. sbp2_broken_inquiry_list[i]) {
  1706. SBP2_WARN("Node " NODE_BUS_FMT ": Using 36byte inquiry workaround",
  1707. NODE_BUS_ARGS(scsi_id->ne->nodeid));
  1708. scsi_id->workarounds |= SBP2_BREAKAGE_INQUIRY_HACK;
  1709. break; /* No need to continue. */
  1710. }
  1711. }
  1712. }
  1713. /*
  1714.  * This function is called in order to determine the max speed and packet
  1715.  * size we can use in our ORBs. Note, that we (the driver and host) only
  1716.  * initiate the transaction. The SBP-2 device actually transfers the data
  1717.  * (by reading from the DMA area we tell it). This means that the SBP-2
  1718.  * device decides the actual maximum data it can transfer. We just tell it
  1719.  * the speed that it needs to use, and the max_rec the host supports, and
  1720.  * it takes care of the rest.
  1721.  */
  1722. static int sbp2_max_speed_and_size(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id)
  1723. {
  1724. SBP2_DEBUG("sbp2_max_speed_and_size");
  1725. /* Initial setting comes from the hosts speed map */
  1726. scsi_id->speed_code = hi->host->speed_map[(hi->host->node_id & NODE_MASK) * 64
  1727.   + (scsi_id->ne->nodeid & NODE_MASK)];
  1728. /* Bump down our speed if the user requested it */
  1729. if (scsi_id->speed_code > sbp2_max_speed) {
  1730. scsi_id->speed_code = sbp2_max_speed;
  1731. SBP2_ERR("Forcing SBP-2 max speed down to %s",
  1732.  hpsb_speedto_str[scsi_id->speed_code]);
  1733. }
  1734. /* Payload size is the lesser of what our speed supports and what
  1735.  * our host supports.  */
  1736. scsi_id->max_payload_size = min(sbp2_speedto_maxrec[scsi_id->speed_code],
  1737. (u8)(((be32_to_cpu(hi->host->csr.rom[2]) >> 12) & 0xf) - 1));
  1738. SBP2_ERR("Node[" NODE_BUS_FMT "]: Max speed [%s] - Max payload [%u]",
  1739.  NODE_BUS_ARGS(scsi_id->ne->nodeid), hpsb_speedto_str[scsi_id->speed_code],
  1740.  1 << ((u32)scsi_id->max_payload_size + 2));
  1741. return(0);
  1742. }
  1743. /*
  1744.  * This function is called in order to perform a SBP-2 agent reset. 
  1745.  */
  1746. static int sbp2_agent_reset(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id, u32 flags) 
  1747. {
  1748. struct sbp2_request_packet *agent_reset_request_packet;
  1749. SBP2_DEBUG("sbp2_agent_reset");
  1750. /*
  1751.  * Ok, let's write to the target's management agent register
  1752.  */
  1753. agent_reset_request_packet =
  1754. sbp2util_allocate_write_request_packet(hi, scsi_id->ne,
  1755.        scsi_id->sbp2_command_block_agent_addr +
  1756.        SBP2_AGENT_RESET_OFFSET,
  1757.        0, ntohl(SBP2_AGENT_RESET_DATA));
  1758. if (!agent_reset_request_packet) {
  1759. SBP2_ERR("sbp2util_allocate_write_request_packet failed");
  1760. return(-EIO);
  1761. }
  1762. if (!hpsb_send_packet(agent_reset_request_packet->packet)) {
  1763. SBP2_ERR("hpsb_send_packet failed");
  1764. sbp2util_free_request_packet(agent_reset_request_packet); 
  1765. return(-EIO);
  1766. }
  1767. if (!(flags & SBP2_SEND_NO_WAIT)) {
  1768. down(&agent_reset_request_packet->packet->state_change);
  1769. down(&agent_reset_request_packet->packet->state_change);
  1770. }
  1771. /*
  1772.  * Need to make sure orb pointer is written on next command
  1773.  */
  1774. scsi_id->last_orb = NULL;
  1775. return(0);
  1776. }
  1777. /*
  1778.  * This function is called to create the actual command orb and s/g list
  1779.  * out of the scsi command itself.
  1780.  */
  1781. static int sbp2_create_command_orb(struct sbp2scsi_host_info *hi, 
  1782.    struct scsi_id_instance_data *scsi_id,
  1783.    struct sbp2_command_info *command,
  1784.    unchar *scsi_cmd,
  1785.    unsigned int scsi_use_sg,
  1786.    unsigned int scsi_request_bufflen,
  1787.    void *scsi_request_buffer, 
  1788.    unsigned char scsi_dir)
  1789. {
  1790. struct scatterlist *sgpnt = (struct scatterlist *) scsi_request_buffer;
  1791. struct sbp2_command_orb *command_orb = &command->command_orb;
  1792. struct sbp2_unrestricted_page_table *scatter_gather_element =
  1793. &command->scatter_gather_element[0];
  1794. int dma_dir = scsi_to_pci_dma_dir (scsi_dir);
  1795. u32 sg_count, sg_len, orb_direction;
  1796. dma_addr_t sg_addr;
  1797. int i;
  1798. /*
  1799.  * Set-up our command ORB..
  1800.  *
  1801.  * NOTE: We're doing unrestricted page tables (s/g), as this is
  1802.  * best performance (at least with the devices I have). This means
  1803.  * that data_size becomes the number of s/g elements, and
  1804.  * page_size should be zero (for unrestricted).
  1805.  */
  1806. command_orb->next_ORB_hi = ORB_SET_NULL_PTR(1);
  1807. command_orb->next_ORB_lo = 0x0;
  1808. command_orb->misc = ORB_SET_MAX_PAYLOAD(scsi_id->max_payload_size);
  1809. command_orb->misc |= ORB_SET_SPEED(scsi_id->speed_code);
  1810. command_orb->misc |= ORB_SET_NOTIFY(1); /* Notify us when complete */
  1811. /*
  1812.  * Get the direction of the transfer. If the direction is unknown, then use our
  1813.  * goofy table as a back-up.
  1814.  */
  1815. switch (scsi_dir) {
  1816. case SCSI_DATA_NONE:
  1817. orb_direction = ORB_DIRECTION_NO_DATA_TRANSFER;
  1818. break;
  1819. case SCSI_DATA_WRITE:
  1820. orb_direction = ORB_DIRECTION_WRITE_TO_MEDIA;
  1821. break;
  1822. case SCSI_DATA_READ:
  1823. orb_direction = ORB_DIRECTION_READ_FROM_MEDIA;
  1824. break;
  1825. case SCSI_DATA_UNKNOWN:
  1826. default:
  1827. SBP2_ERR("SCSI data transfer direction not specified. "
  1828.  "Update the SBP2 direction table in sbp2.h if " 
  1829.  "necessary for your application");
  1830. print_command (scsi_cmd);
  1831. orb_direction = sbp2scsi_direction_table[*scsi_cmd];
  1832. break;
  1833. }
  1834. /*
  1835.  * Set-up our pagetable stuff... unfortunately, this has become
  1836.  * messier than I'd like. Need to clean this up a bit.   ;-)
  1837.  */
  1838. if (orb_direction == ORB_DIRECTION_NO_DATA_TRANSFER) {
  1839. SBP2_DEBUG("No data transfer");
  1840. /*
  1841.  * Handle no data transfer
  1842.  */
  1843. command_orb->data_descriptor_hi = 0x0;
  1844. command_orb->data_descriptor_lo = 0x0;
  1845. command_orb->misc |= ORB_SET_DIRECTION(1);
  1846. } else if (scsi_use_sg) {
  1847. SBP2_DEBUG("Use scatter/gather");
  1848. /*
  1849.  * Special case if only one element (and less than 64KB in size)
  1850.  */
  1851. if ((scsi_use_sg == 1) && (sgpnt[0].length <= SBP2_MAX_SG_ELEMENT_LENGTH)) {
  1852. SBP2_DEBUG("Only one s/g element");
  1853. command->dma_dir = dma_dir;
  1854. command->dma_size = sgpnt[0].length;
  1855. command->dma_type = CMD_DMA_PAGE;
  1856. #if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,13)
  1857. command->cmd_dma = pci_map_single (hi->host->pdev, sgpnt[0].address,
  1858.    command->dma_size,
  1859.    command->dma_dir);
  1860. #else
  1861. command->cmd_dma = pci_map_page(hi->host->pdev,
  1862. sgpnt[0].page,
  1863. sgpnt[0].offset,
  1864. command->dma_size,
  1865. command->dma_dir);
  1866. #endif /* Linux version < 2.4.13 */
  1867. SBP2_DMA_ALLOC("single page scatter element");
  1868. command_orb->data_descriptor_hi = ORB_SET_NODE_ID(hi->host->node_id);
  1869. command_orb->data_descriptor_lo = command->cmd_dma;
  1870. command_orb->misc |= ORB_SET_DATA_SIZE(command->dma_size);
  1871. command_orb->misc |= ORB_SET_DIRECTION(orb_direction);
  1872. } else {
  1873. int count = pci_map_sg(hi->host->pdev, sgpnt, scsi_use_sg, dma_dir);
  1874. SBP2_DMA_ALLOC("scatter list");
  1875. command->dma_size = scsi_use_sg;
  1876. command->dma_dir = dma_dir;
  1877. command->sge_buffer = sgpnt;
  1878. /* use page tables (s/g) */
  1879. command_orb->misc |= ORB_SET_PAGE_TABLE_PRESENT(0x1);
  1880. command_orb->misc |= ORB_SET_DIRECTION(orb_direction);
  1881. command_orb->data_descriptor_hi = ORB_SET_NODE_ID(hi->host->node_id);
  1882. command_orb->data_descriptor_lo = command->sge_dma;
  1883. /*
  1884.  * Loop through and fill out our sbp-2 page tables
  1885.  * (and split up anything too large)
  1886.  */
  1887. for (i = 0, sg_count = 0 ; i < count; i++, sgpnt++) {
  1888. sg_len = sg_dma_len(sgpnt);
  1889. sg_addr = sg_dma_address(sgpnt);
  1890. while (sg_len) {
  1891. scatter_gather_element[sg_count].segment_base_lo = sg_addr;
  1892. if (sg_len > SBP2_MAX_SG_ELEMENT_LENGTH) {
  1893. scatter_gather_element[sg_count].length_segment_base_hi =  
  1894. PAGE_TABLE_SET_SEGMENT_LENGTH(SBP2_MAX_SG_ELEMENT_LENGTH);
  1895. sg_addr += SBP2_MAX_SG_ELEMENT_LENGTH;
  1896. sg_len -= SBP2_MAX_SG_ELEMENT_LENGTH;
  1897. } else {
  1898. scatter_gather_element[sg_count].length_segment_base_hi = 
  1899. PAGE_TABLE_SET_SEGMENT_LENGTH(sg_len);
  1900. sg_len = 0;
  1901. }
  1902. sg_count++;
  1903. }
  1904. }
  1905. /* Number of page table (s/g) elements */
  1906. command_orb->misc |= ORB_SET_DATA_SIZE(sg_count);
  1907. sbp2util_packet_dump(scatter_gather_element, 
  1908.      (sizeof(struct sbp2_unrestricted_page_table)) * sg_count, 
  1909.      "sbp2 s/g list", command->sge_dma);
  1910. /*
  1911.  * Byte swap page tables if necessary
  1912.  */
  1913. sbp2util_cpu_to_be32_buffer(scatter_gather_element, 
  1914.     (sizeof(struct sbp2_unrestricted_page_table)) *
  1915.     sg_count);
  1916. }
  1917. } else {
  1918. SBP2_DEBUG("No scatter/gather");
  1919. command->dma_dir = dma_dir;
  1920. command->dma_size = scsi_request_bufflen;
  1921. command->dma_type = CMD_DMA_SINGLE;
  1922. command->cmd_dma = pci_map_single (hi->host->pdev, scsi_request_buffer,
  1923.    command->dma_size,
  1924.    command->dma_dir);
  1925. SBP2_DMA_ALLOC("single bulk");
  1926. /*
  1927.  * Handle case where we get a command w/o s/g enabled (but
  1928.  * check for transfers larger than 64K)
  1929.  */
  1930. if (scsi_request_bufflen <= SBP2_MAX_SG_ELEMENT_LENGTH) {
  1931. command_orb->data_descriptor_hi = ORB_SET_NODE_ID(hi->host->node_id);
  1932. command_orb->data_descriptor_lo = command->cmd_dma;
  1933. command_orb->misc |= ORB_SET_DATA_SIZE(scsi_request_bufflen);
  1934. command_orb->misc |= ORB_SET_DIRECTION(orb_direction);
  1935. /*
  1936.  * Sanity, in case our direction table is not
  1937.  * up-to-date
  1938.  */
  1939. if (!scsi_request_bufflen) {
  1940. command_orb->data_descriptor_hi = 0x0;
  1941. command_orb->data_descriptor_lo = 0x0;
  1942. command_orb->misc |= ORB_SET_DIRECTION(1);
  1943. }
  1944. } else {
  1945. /*
  1946.  * Need to turn this into page tables, since the
  1947.  * buffer is too large.
  1948.  */                     
  1949. command_orb->data_descriptor_hi = ORB_SET_NODE_ID(hi->host->node_id);
  1950. command_orb->data_descriptor_lo = command->sge_dma;
  1951. /* Use page tables (s/g) */
  1952. command_orb->misc |= ORB_SET_PAGE_TABLE_PRESENT(0x1);
  1953. command_orb->misc |= ORB_SET_DIRECTION(orb_direction);
  1954. /*
  1955.  * fill out our sbp-2 page tables (and split up
  1956.  * the large buffer)
  1957.  */
  1958. sg_count = 0;
  1959. sg_len = scsi_request_bufflen;
  1960. sg_addr = command->cmd_dma;
  1961. while (sg_len) {
  1962. scatter_gather_element[sg_count].segment_base_lo = sg_addr;
  1963. if (sg_len > SBP2_MAX_SG_ELEMENT_LENGTH) {
  1964. scatter_gather_element[sg_count].length_segment_base_hi = 
  1965. PAGE_TABLE_SET_SEGMENT_LENGTH(SBP2_MAX_SG_ELEMENT_LENGTH);
  1966. sg_addr += SBP2_MAX_SG_ELEMENT_LENGTH;
  1967. sg_len -= SBP2_MAX_SG_ELEMENT_LENGTH;
  1968. } else {
  1969. scatter_gather_element[sg_count].length_segment_base_hi = 
  1970. PAGE_TABLE_SET_SEGMENT_LENGTH(sg_len);
  1971. sg_len = 0;
  1972. }
  1973. sg_count++;
  1974. }
  1975. /* Number of page table (s/g) elements */
  1976. command_orb->misc |= ORB_SET_DATA_SIZE(sg_count);
  1977. sbp2util_packet_dump(scatter_gather_element, 
  1978.      (sizeof(struct sbp2_unrestricted_page_table)) * sg_count, 
  1979.      "sbp2 s/g list", command->sge_dma);
  1980. /*
  1981.  * Byte swap page tables if necessary
  1982.  */
  1983. sbp2util_cpu_to_be32_buffer(scatter_gather_element, 
  1984.     (sizeof(struct sbp2_unrestricted_page_table)) *
  1985.      sg_count);
  1986. }
  1987. }
  1988. /*
  1989.  * Byte swap command ORB if necessary
  1990.  */
  1991. sbp2util_cpu_to_be32_buffer(command_orb, sizeof(struct sbp2_command_orb));
  1992. /*
  1993.  * Put our scsi command in the command ORB
  1994.  */
  1995. memset(command_orb->cdb, 0, 12);
  1996. memcpy(command_orb->cdb, scsi_cmd, COMMAND_SIZE(*scsi_cmd));
  1997. return(0);
  1998. }
  1999.  
  2000. /*
  2001.  * This function is called in order to begin a regular SBP-2 command. 
  2002.  */
  2003. static int sbp2_link_orb_command(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id,
  2004.  struct sbp2_command_info *command)
  2005. {
  2006.         struct sbp2_request_packet *command_request_packet;
  2007. struct sbp2_command_orb *command_orb = &command->command_orb;
  2008. outstanding_orb_incr;
  2009. SBP2_ORB_DEBUG("sending command orb %p, total orbs = %x",
  2010. command_orb, global_outstanding_command_orbs);
  2011. pci_dma_sync_single(hi->host->pdev, command->command_orb_dma,
  2012.     sizeof(struct sbp2_command_orb),
  2013.     PCI_DMA_BIDIRECTIONAL);
  2014. pci_dma_sync_single(hi->host->pdev, command->sge_dma,
  2015.     sizeof(command->scatter_gather_element),
  2016.     PCI_DMA_BIDIRECTIONAL);
  2017. /*
  2018.  * Check to see if there are any previous orbs to use
  2019.  */
  2020. if (scsi_id->last_orb == NULL) {
  2021. /*
  2022.  * Ok, let's write to the target's management agent register
  2023.  */
  2024. if (hpsb_node_entry_valid(scsi_id->ne)) {
  2025. command_request_packet =
  2026. sbp2util_allocate_write_request_packet(hi, scsi_id->ne,
  2027. scsi_id->sbp2_command_block_agent_addr +
  2028. SBP2_ORB_POINTER_OFFSET, 8, 0);
  2029. if (!command_request_packet) {
  2030. SBP2_ERR("sbp2util_allocate_write_request_packet failed");
  2031. return(-EIO);
  2032. }
  2033. command_request_packet->packet->data[0] = ORB_SET_NODE_ID(hi->host->node_id);
  2034. command_request_packet->packet->data[1] = command->command_orb_dma;
  2035. sbp2util_cpu_to_be32_buffer(command_request_packet->packet->data, 8);
  2036. SBP2_ORB_DEBUG("write command agent, command orb %p", command_orb);
  2037. if (!hpsb_send_packet(command_request_packet->packet)) {
  2038. SBP2_ERR("hpsb_send_packet failed");
  2039. sbp2util_free_request_packet(command_request_packet); 
  2040. return(-EIO);
  2041. }
  2042. SBP2_ORB_DEBUG("write command agent complete");
  2043. }
  2044. scsi_id->last_orb = command_orb;
  2045. scsi_id->last_orb_dma = command->command_orb_dma;
  2046. } else {
  2047. /*
  2048.  * We have an orb already sent (maybe or maybe not
  2049.  * processed) that we can append this orb to. So do so,
  2050.  * and ring the doorbell. Have to be very careful
  2051.  * modifying these next orb pointers, as they are accessed
  2052.  * both by the sbp2 device and us.
  2053.  */
  2054. scsi_id->last_orb->next_ORB_lo =
  2055. cpu_to_be32(command->command_orb_dma);
  2056. /* Tells hardware that this pointer is valid */
  2057. scsi_id->last_orb->next_ORB_hi = 0x0;
  2058. pci_dma_sync_single(hi->host->pdev, scsi_id->last_orb_dma,
  2059.     sizeof(struct sbp2_command_orb),
  2060.     PCI_DMA_BIDIRECTIONAL);
  2061. /*
  2062.  * Ring the doorbell
  2063.  */
  2064. if (hpsb_node_entry_valid(scsi_id->ne)) {
  2065. command_request_packet = sbp2util_allocate_write_request_packet(hi,
  2066. scsi_id->ne,
  2067. scsi_id->sbp2_command_block_agent_addr + SBP2_DOORBELL_OFFSET,
  2068. 0, cpu_to_be32(command->command_orb_dma));
  2069. if (!command_request_packet) {
  2070. SBP2_ERR("sbp2util_allocate_write_request_packet failed");
  2071. return(-EIO);
  2072. }
  2073. SBP2_ORB_DEBUG("ring doorbell, command orb %p", command_orb);
  2074. if (!hpsb_send_packet(command_request_packet->packet)) {
  2075. SBP2_ERR("hpsb_send_packet failed");
  2076. sbp2util_free_request_packet(command_request_packet);
  2077. return(-EIO);
  2078. }
  2079. }
  2080. scsi_id->last_orb = command_orb;
  2081. scsi_id->last_orb_dma = command->command_orb_dma;
  2082. }
  2083.         return(0);
  2084. }
  2085. /*
  2086.  * This function is called in order to begin a regular SBP-2 command. 
  2087.  */
  2088. static int sbp2_send_command(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id,
  2089.      Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *))
  2090. {
  2091. unchar *cmd = (unchar *) SCpnt->cmnd;
  2092. unsigned int request_bufflen = SCpnt->request_bufflen;
  2093. struct sbp2_command_info *command;
  2094. SBP2_DEBUG("sbp2_send_command");
  2095. #if (CONFIG_IEEE1394_SBP2_DEBUG >= 2) || defined(CONFIG_IEEE1394_SBP2_PACKET_DUMP)
  2096. printk("[scsi command]n   ");
  2097. print_command (cmd);
  2098. #endif
  2099. SBP2_DEBUG("SCSI transfer size = %x", request_bufflen);
  2100. SBP2_DEBUG("SCSI s/g elements = %x", (unsigned int)SCpnt->use_sg);
  2101. /*
  2102.  * Allocate a command orb and s/g structure
  2103.  */
  2104. command = sbp2util_allocate_command_orb(scsi_id, SCpnt, done, hi);
  2105. if (!command) {
  2106. return(-EIO);
  2107. }
  2108. /*
  2109.  * The scsi stack sends down a request_bufflen which does not match the
  2110.  * length field in the scsi cdb. This causes some sbp2 devices to 
  2111.  * reject this inquiry command. Fix the request_bufflen. 
  2112.  */
  2113. if (*cmd == INQUIRY) {
  2114. if (sbp2_force_inquiry_hack || scsi_id->workarounds & SBP2_BREAKAGE_INQUIRY_HACK)
  2115. request_bufflen = cmd[4] = 0x24;
  2116. else
  2117. request_bufflen = cmd[4];
  2118. }
  2119. /*
  2120.  * Now actually fill in the comamnd orb and sbp2 s/g list
  2121.  */
  2122. sbp2_create_command_orb(hi, scsi_id, command, cmd, SCpnt->use_sg,
  2123. request_bufflen, SCpnt->request_buffer,
  2124. SCpnt->sc_data_direction); 
  2125. /*
  2126.  * Update our cdb if necessary (to handle sbp2 RBC command set
  2127.  * differences). This is where the command set hacks go!   =)
  2128.  */
  2129. sbp2_check_sbp2_command(scsi_id, command->command_orb.cdb);
  2130. sbp2util_packet_dump(&command->command_orb, sizeof(struct sbp2_command_orb), 
  2131.      "sbp2 command orb", command->command_orb_dma);
  2132. /*
  2133.  * Initialize status fifo
  2134.  */
  2135. memset(&scsi_id->status_block, 0, sizeof(struct sbp2_status_block));
  2136. /*
  2137.  * Link up the orb, and ring the doorbell if needed
  2138.  */
  2139. sbp2_link_orb_command(hi, scsi_id, command);
  2140. return(0);
  2141. }
  2142. /*
  2143.  * This function deals with command set differences between Linux scsi
  2144.  * command set and sbp2 RBC command set.
  2145.  */
  2146. static void sbp2_check_sbp2_command(struct scsi_id_instance_data *scsi_id, unchar *cmd)
  2147. {
  2148. unchar new_cmd[16];
  2149. u8 device_type = SBP2_DEVICE_TYPE (scsi_id->sbp2_device_type_and_lun);
  2150. SBP2_DEBUG("sbp2_check_sbp2_command");
  2151. switch (*cmd) {
  2152. case READ_6:
  2153. if (sbp2_command_conversion_device_type(device_type)) {
  2154. SBP2_DEBUG("Convert READ_6 to READ_10");
  2155.     
  2156. /*
  2157.  * Need to turn read_6 into read_10
  2158.  */
  2159. new_cmd[0] = 0x28;
  2160. new_cmd[1] = (cmd[1] & 0xe0);
  2161. new_cmd[2] = 0x0;
  2162. new_cmd[3] = (cmd[1] & 0x1f);
  2163. new_cmd[4] = cmd[2];
  2164. new_cmd[5] = cmd[3];
  2165. new_cmd[6] = 0x0;
  2166. new_cmd[7] = 0x0;
  2167. new_cmd[8] = cmd[4];
  2168. new_cmd[9] = cmd[5];
  2169. memcpy(cmd, new_cmd, 10);
  2170. }
  2171. break;
  2172. case WRITE_6:
  2173. if (sbp2_command_conversion_device_type(device_type)) {
  2174. SBP2_DEBUG("Convert WRITE_6 to WRITE_10");
  2175. /*
  2176.  * Need to turn write_6 into write_10
  2177.  */
  2178. new_cmd[0] = 0x2a;
  2179. new_cmd[1] = (cmd[1] & 0xe0);
  2180. new_cmd[2] = 0x0;
  2181. new_cmd[3] = (cmd[1] & 0x1f);
  2182. new_cmd[4] = cmd[2];
  2183. new_cmd[5] = cmd[3];
  2184. new_cmd[6] = 0x0;
  2185. new_cmd[7] = 0x0;
  2186. new_cmd[8] = cmd[4];
  2187. new_cmd[9] = cmd[5];
  2188. memcpy(cmd, new_cmd, 10);
  2189. }
  2190. break;
  2191. case MODE_SENSE:
  2192. if (sbp2_command_conversion_device_type(device_type)) {
  2193. SBP2_DEBUG("Convert MODE_SENSE_6 to MODE_SENSE_10");
  2194. /*
  2195.  * Need to turn mode_sense_6 into mode_sense_10
  2196.  */
  2197. new_cmd[0] = 0x5a;
  2198. new_cmd[1] = cmd[1];
  2199. new_cmd[2] = cmd[2];
  2200. new_cmd[3] = 0x0;
  2201. new_cmd[4] = 0x0;
  2202. new_cmd[5] = 0x0;
  2203. new_cmd[6] = 0x0;
  2204. new_cmd[7] = 0x0;
  2205. new_cmd[8] = cmd[4];
  2206. new_cmd[9] = cmd[5];
  2207. memcpy(cmd, new_cmd, 10);
  2208. }
  2209. break;
  2210. case MODE_SELECT:
  2211. /*
  2212.  * TODO. Probably need to change mode select to 10 byte version
  2213.  */
  2214. default:
  2215. break;
  2216. }
  2217. return;
  2218. }
  2219. /*
  2220.  * Translates SBP-2 status into SCSI sense data for check conditions
  2221.  */
  2222. static unsigned int sbp2_status_to_sense_data(unchar *sbp2_status, unchar *sense_data)
  2223. {
  2224. SBP2_DEBUG("sbp2_status_to_sense_data");
  2225. /*
  2226.  * Ok, it's pretty ugly...   ;-)
  2227.  */
  2228. sense_data[0] = 0x70;
  2229. sense_data[1] = 0x0;
  2230. sense_data[2] = sbp2_status[9];
  2231. sense_data[3] = sbp2_status[12];
  2232. sense_data[4] = sbp2_status[13];
  2233. sense_data[5] = sbp2_status[14];
  2234. sense_data[6] = sbp2_status[15];
  2235. sense_data[7] = 10;
  2236. sense_data[8] = sbp2_status[16];
  2237. sense_data[9] = sbp2_status[17];
  2238. sense_data[10] = sbp2_status[18];
  2239. sense_data[11] = sbp2_status[19];
  2240. sense_data[12] = sbp2_status[10];
  2241. sense_data[13] = sbp2_status[11];
  2242. sense_data[14] = sbp2_status[20];
  2243. sense_data[15] = sbp2_status[21];
  2244. return(sbp2_status[8] & 0x3f); /* return scsi status */
  2245. }
  2246. /*
  2247.  * This function is called after a command is completed, in order to do any necessary SBP-2
  2248.  * response data translations for the SCSI stack
  2249.  */
  2250. static void sbp2_check_sbp2_response(struct scsi_id_instance_data *scsi_id, 
  2251.      Scsi_Cmnd *SCpnt)
  2252. {
  2253. u8 *scsi_buf = SCpnt->request_buffer;
  2254. u8 device_type = SBP2_DEVICE_TYPE (scsi_id->sbp2_device_type_and_lun);
  2255. SBP2_DEBUG("sbp2_check_sbp2_response");
  2256. switch (SCpnt->cmnd[0]) {
  2257. case INQUIRY:
  2258. /*
  2259.  * If scsi_id->sbp2_device_type_and_lun is uninitialized, then fill 
  2260.  * this information in from the inquiry response data. Lun is set to zero.
  2261.  */
  2262. if (scsi_id->sbp2_device_type_and_lun == SBP2_DEVICE_TYPE_LUN_UNINITIALIZED) {
  2263. SBP2_DEBUG("Creating sbp2_device_type_and_lun from scsi inquiry data");
  2264. scsi_id->sbp2_device_type_and_lun = (scsi_buf[0] & 0x1f) << 16;
  2265. }
  2266. /*
  2267.  * Make sure data length is ok. Minimum length is 36 bytes
  2268.  */
  2269. if (scsi_buf[4] == 0) {
  2270. scsi_buf[4] = 36 - 5;
  2271. }
  2272. /*
  2273.  * Check for Simple Direct Access Device and change it to TYPE_DISK
  2274.  */
  2275. if ((scsi_buf[0] & 0x1f) == TYPE_SDAD) {
  2276. SBP2_DEBUG("Changing TYPE_SDAD to TYPE_DISK");
  2277. scsi_buf[0] &= 0xe0;
  2278. }
  2279. /*
  2280.  * Fix ansi revision and response data format
  2281.  */
  2282. scsi_buf[2] |= 2;
  2283. scsi_buf[3] = (scsi_buf[3] & 0xf0) | 2;
  2284. break;
  2285. case MODE_SENSE:
  2286. if (sbp2_command_conversion_device_type(device_type)) {
  2287. SBP2_DEBUG("Modify mode sense response (10 byte version)");
  2288. scsi_buf[0] = scsi_buf[1]; /* Mode data length */
  2289. scsi_buf[1] = scsi_buf[2]; /* Medium type */
  2290. scsi_buf[2] = scsi_buf[3]; /* Device specific parameter */
  2291. scsi_buf[3] = scsi_buf[7]; /* Block descriptor length */
  2292. memcpy(scsi_buf + 4, scsi_buf + 8, scsi_buf[0]);
  2293. }
  2294. break;
  2295. case MODE_SELECT:
  2296. /*
  2297.  * TODO. Probably need to change mode select to 10 byte version
  2298.  */
  2299. default:
  2300. break;
  2301. }
  2302. return;
  2303. }
  2304. /*
  2305.  * This function deals with status writes from the SBP-2 device
  2306.  */
  2307. static int sbp2_handle_status_write(struct hpsb_host *host, int nodeid, int destid,
  2308.     quadlet_t *data, u64 addr, unsigned int length)
  2309. {
  2310. struct sbp2scsi_host_info *hi = NULL;
  2311. struct scsi_id_instance_data *scsi_id = NULL;
  2312. u32 id;
  2313. unsigned long flags;
  2314. Scsi_Cmnd *SCpnt = NULL;
  2315. u32 scsi_status = SBP2_SCSI_STATUS_GOOD;
  2316. struct sbp2_command_info *command;
  2317. SBP2_DEBUG("sbp2_handle_status_write");
  2318. sbp2util_packet_dump(data, length, "sbp2 status write by device", (u32)addr);
  2319. if (!host) {
  2320. SBP2_ERR("host is NULL - this is bad!");
  2321. return(RCODE_ADDRESS_ERROR);
  2322. }
  2323. sbp2_spin_lock(&sbp2_host_info_lock, flags);
  2324. hi = sbp2_find_host_info(host);
  2325. sbp2_spin_unlock(&sbp2_host_info_lock, flags);
  2326. if (!hi) {
  2327. SBP2_ERR("host info is NULL - this is bad!");
  2328. return(RCODE_ADDRESS_ERROR);
  2329. }
  2330. sbp2_spin_lock(&hi->sbp2_command_lock, flags);
  2331. /*
  2332.  * Find our scsi_id structure by looking at the status fifo address written to by
  2333.  * the sbp2 device.
  2334.  */
  2335. id = SBP2_STATUS_FIFO_OFFSET_TO_ENTRY((u32)(addr - SBP2_STATUS_FIFO_ADDRESS)); 
  2336. scsi_id = hi->scsi_id[id];
  2337. if (!scsi_id) {
  2338. SBP2_ERR("scsi_id is NULL - device is gone?");
  2339. sbp2_spin_unlock(&hi->sbp2_command_lock, flags);
  2340. return(RCODE_ADDRESS_ERROR);
  2341. }
  2342. /*
  2343.  * Put response into scsi_id status fifo... 
  2344.  */
  2345. memcpy(&scsi_id->status_block, data, length);
  2346. /*
  2347.  * Byte swap first two quadlets (8 bytes) of status for processing
  2348.  */
  2349. sbp2util_be32_to_cpu_buffer(&scsi_id->status_block, 8);
  2350. /*
  2351.  * Handle command ORB status here if necessary. First, need to match status with command.
  2352.  */
  2353. command = sbp2util_find_command_for_orb(scsi_id, scsi_id->status_block.ORB_offset_lo);
  2354. if (command) {
  2355. SBP2_DEBUG("Found status for command ORB");
  2356. pci_dma_sync_single(hi->host->pdev, command->command_orb_dma,
  2357.     sizeof(struct sbp2_command_orb),
  2358.     PCI_DMA_BIDIRECTIONAL);
  2359. pci_dma_sync_single(hi->host->pdev, command->sge_dma,
  2360.     sizeof(command->scatter_gather_element),
  2361.     PCI_DMA_BIDIRECTIONAL);
  2362. SBP2_ORB_DEBUG("matched command orb %p", &command->command_orb);
  2363. outstanding_orb_decr;
  2364. /*
  2365.  * Matched status with command, now grab scsi command pointers and check status
  2366.  */
  2367. SCpnt = command->Current_SCpnt;
  2368. sbp2util_mark_command_completed(scsi_id, command);
  2369. if (SCpnt) {
  2370. /*
  2371.  * See if the target stored any scsi status information
  2372.  */
  2373. if (STATUS_GET_LENGTH(scsi_id->status_block.ORB_offset_hi_misc) > 1) {
  2374. /*
  2375.  * Translate SBP-2 status to SCSI sense data
  2376.  */
  2377. SBP2_DEBUG("CHECK CONDITION");
  2378. scsi_status = sbp2_status_to_sense_data((unchar *)&scsi_id->status_block, SCpnt->sense_buffer);
  2379. }
  2380. /*
  2381.  * Check to see if the dead bit is set. If so, we'll have to initiate
  2382.  * a fetch agent reset.
  2383.  */
  2384. if (STATUS_GET_DEAD_BIT(scsi_id->status_block.ORB_offset_hi_misc)) {
  2385. /*
  2386.  * Initiate a fetch agent reset. 
  2387.  */
  2388. SBP2_DEBUG("Dead bit set - initiating fetch agent reset");
  2389.                                 sbp2_agent_reset(hi, scsi_id, SBP2_SEND_NO_WAIT);
  2390. }
  2391. SBP2_ORB_DEBUG("completing command orb %p", &command->command_orb);
  2392. /*
  2393.  * Complete the SCSI command
  2394.  */
  2395. SBP2_DEBUG("Completing SCSI command");
  2396. sbp2scsi_complete_command(hi, scsi_id, scsi_status, SCpnt, command->Current_done);
  2397. SBP2_ORB_DEBUG("command orb completed");
  2398. }
  2399. /*
  2400.  * Check here to see if there are no commands in-use. If there are none, we can
  2401.  * null out last orb so that next time around we write directly to the orb pointer... 
  2402.  * Quick start saves one 1394 bus transaction.
  2403.  */
  2404. if (list_empty(&scsi_id->sbp2_command_orb_inuse)) {
  2405. scsi_id->last_orb = NULL;
  2406. }
  2407. } else {
  2408. /* 
  2409.  * It's probably a login/logout/reconnect status.
  2410.  */
  2411. if ((scsi_id->login_orb_dma == scsi_id->status_block.ORB_offset_lo) ||
  2412.     (scsi_id->reconnect_orb_dma == scsi_id->status_block.ORB_offset_lo) ||
  2413.     (scsi_id->logout_orb_dma == scsi_id->status_block.ORB_offset_lo)) {
  2414. atomic_set(&scsi_id->sbp2_login_complete, 1);
  2415. }
  2416. }
  2417. sbp2_spin_unlock(&hi->sbp2_command_lock, flags);
  2418. return(RCODE_COMPLETE);
  2419. }
  2420. /**************************************
  2421.  * SCSI interface related section
  2422.  **************************************/
  2423. /*
  2424.  * This routine is the main request entry routine for doing I/O. It is 
  2425.  * called from the scsi stack directly.
  2426.  */
  2427. static int sbp2scsi_queuecommand (Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *)) 
  2428. {
  2429. struct sbp2scsi_host_info *hi = NULL;
  2430. struct scsi_id_instance_data *scsi_id = NULL;
  2431. unsigned long flags;
  2432. SBP2_DEBUG("sbp2scsi_queuecommand");
  2433. /*
  2434.  * Pull our host info and scsi id instance data from the scsi command
  2435.  */
  2436. hi = (struct sbp2scsi_host_info *) SCpnt->host->hostdata[0];
  2437. if (!hi) {
  2438. SBP2_ERR("sbp2scsi_host_info is NULL - this is bad!");
  2439. SCpnt->result = DID_NO_CONNECT << 16;
  2440. done (SCpnt);
  2441. return(0);
  2442. }
  2443. scsi_id = hi->scsi_id[SCpnt->target];
  2444. /*
  2445.  * If scsi_id is null, it means there is no device in this slot,
  2446.  * so we should return selection timeout.
  2447.  */
  2448. if (!scsi_id) {
  2449. SCpnt->result = DID_NO_CONNECT << 16;
  2450. done (SCpnt);
  2451. return(0);
  2452. }
  2453. /*
  2454.  * Until we handle multiple luns, just return selection time-out
  2455.  * to any IO directed at non-zero LUNs
  2456.  */
  2457. if (SCpnt->lun) {
  2458. SCpnt->result = DID_NO_CONNECT << 16;
  2459. done (SCpnt);
  2460. return(0);
  2461. }
  2462. /*
  2463.  * Check for request sense command, and handle it here
  2464.  * (autorequest sense)
  2465.  */
  2466. if (SCpnt->cmnd[0] == REQUEST_SENSE) {
  2467. SBP2_DEBUG("REQUEST_SENSE");
  2468. memcpy(SCpnt->request_buffer, SCpnt->sense_buffer, SCpnt->request_bufflen);
  2469. memset(SCpnt->sense_buffer, 0, sizeof(SCpnt->sense_buffer));
  2470. sbp2scsi_complete_command(hi, scsi_id, SBP2_SCSI_STATUS_GOOD, SCpnt, done);
  2471. return(0);
  2472. }
  2473. /*
  2474.  * Check to see if we are in the middle of a bus reset.
  2475.  */
  2476. if (!hpsb_node_entry_valid(scsi_id->ne)) {
  2477. SBP2_ERR("Bus reset in progress - rejecting command");
  2478. SCpnt->result = DID_BUS_BUSY << 16;
  2479. done (SCpnt);
  2480. return(0);
  2481. }
  2482. /*
  2483.  * Try and send our SCSI command
  2484.  */
  2485. sbp2_spin_lock(&hi->sbp2_command_lock, flags);
  2486. if (sbp2_send_command(hi, scsi_id, SCpnt, done)) {
  2487. SBP2_ERR("Error sending SCSI command");
  2488. sbp2scsi_complete_command(hi, scsi_id, SBP2_SCSI_STATUS_SELECTION_TIMEOUT, SCpnt, done);
  2489. }
  2490. sbp2_spin_unlock(&hi->sbp2_command_lock, flags);
  2491. return(0);
  2492. }
  2493. /*
  2494.  * This function is called in order to complete all outstanding SBP-2
  2495.  * commands (in case of resets, etc.).
  2496.  */
  2497. static void sbp2scsi_complete_all_commands(struct sbp2scsi_host_info *hi,
  2498.    struct scsi_id_instance_data *scsi_id, 
  2499.    u32 status)
  2500. {
  2501. struct list_head *lh;
  2502. struct sbp2_command_info *command;
  2503. SBP2_DEBUG("sbp2_complete_all_commands");
  2504. while (!list_empty(&scsi_id->sbp2_command_orb_inuse)) {
  2505. SBP2_DEBUG("Found pending command to complete");
  2506. lh = scsi_id->sbp2_command_orb_inuse.next;
  2507. command = list_entry(lh, struct sbp2_command_info, list);
  2508. pci_dma_sync_single(hi->host->pdev, command->command_orb_dma,
  2509.     sizeof(struct sbp2_command_orb),
  2510.     PCI_DMA_BIDIRECTIONAL);
  2511. pci_dma_sync_single(hi->host->pdev, command->sge_dma,
  2512.     sizeof(command->scatter_gather_element),
  2513.     PCI_DMA_BIDIRECTIONAL);
  2514. sbp2util_mark_command_completed(scsi_id, command);
  2515. if (command->Current_SCpnt) {
  2516. void (*done)(Scsi_Cmnd *) = command->Current_done;
  2517. command->Current_SCpnt->result = status << 16;
  2518. done (command->Current_SCpnt);
  2519. }
  2520. }
  2521. return;
  2522. }
  2523. /*
  2524.  * This function is called in order to complete a regular SBP-2 command.
  2525.  */
  2526. static void sbp2scsi_complete_command(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id, u32 scsi_status,
  2527.       Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *))
  2528. {
  2529. SBP2_DEBUG("sbp2scsi_complete_command");
  2530. /*
  2531.  * Sanity
  2532.  */
  2533. if (!SCpnt) {
  2534. SBP2_ERR("SCpnt is NULL");
  2535. return;
  2536. }
  2537. /*
  2538.  * If a bus reset is in progress and there was an error, don't
  2539.  * complete the command, just let it get retried at the end of the
  2540.  * bus reset.
  2541.  */
  2542. if (!hpsb_node_entry_valid(scsi_id->ne) && (scsi_status != SBP2_SCSI_STATUS_GOOD)) {
  2543. SBP2_ERR("Bus reset in progress - retry command later");
  2544. return;
  2545. }
  2546.         
  2547. /*
  2548.  * Switch on scsi status
  2549.  */
  2550. switch (scsi_status) {
  2551. case SBP2_SCSI_STATUS_GOOD:
  2552. SCpnt->result = DID_OK;
  2553. break;
  2554. case SBP2_SCSI_STATUS_BUSY:
  2555. SBP2_ERR("SBP2_SCSI_STATUS_BUSY");
  2556. SCpnt->result = DID_BUS_BUSY << 16;
  2557. break;
  2558. case SBP2_SCSI_STATUS_CHECK_CONDITION:
  2559. SBP2_DEBUG("SBP2_SCSI_STATUS_CHECK_CONDITION");
  2560. SCpnt->result = CHECK_CONDITION << 1;
  2561. /*
  2562.  * Debug stuff
  2563.  */
  2564. #if CONFIG_IEEE1394_SBP2_DEBUG >= 1
  2565. print_command (SCpnt->cmnd);
  2566. print_sense("bh", SCpnt);
  2567. #endif
  2568. break;
  2569. case SBP2_SCSI_STATUS_SELECTION_TIMEOUT:
  2570. SBP2_ERR("SBP2_SCSI_STATUS_SELECTION_TIMEOUT");
  2571. SCpnt->result = DID_NO_CONNECT << 16;
  2572. print_command (SCpnt->cmnd);
  2573. break;
  2574. case SBP2_SCSI_STATUS_CONDITION_MET:
  2575. case SBP2_SCSI_STATUS_RESERVATION_CONFLICT:
  2576. case SBP2_SCSI_STATUS_COMMAND_TERMINATED:
  2577. SBP2_ERR("Bad SCSI status = %x", scsi_status);
  2578. SCpnt->result = DID_ERROR << 16;
  2579. print_command (SCpnt->cmnd);
  2580. break;
  2581. default:
  2582. SBP2_ERR("Unsupported SCSI status = %x", scsi_status);
  2583. SCpnt->result = DID_ERROR << 16;
  2584. }
  2585. /*
  2586.  * Take care of any sbp2 response data mucking here (RBC stuff, etc.)
  2587.  */
  2588. if (SCpnt->result == DID_OK) {
  2589. sbp2_check_sbp2_response(scsi_id, SCpnt);
  2590. }
  2591. /*
  2592.  * If a bus reset is in progress and there was an error, complete
  2593.  * the command as busy so that it will get retried.
  2594.  */
  2595. if (!hpsb_node_entry_valid(scsi_id->ne) && (scsi_status != SBP2_SCSI_STATUS_GOOD)) {
  2596. SBP2_ERR("Completing command with busy (bus reset)");
  2597. SCpnt->result = DID_BUS_BUSY << 16;
  2598. }
  2599. /*
  2600.  * If a unit attention occurs, return busy status so it gets
  2601.  * retried... it could have happened because of a 1394 bus reset
  2602.  * or hot-plug...
  2603.  */
  2604. #if 0
  2605. if ((scsi_status == SBP2_SCSI_STATUS_CHECK_CONDITION) && 
  2606.     (SCpnt->sense_buffer[2] == UNIT_ATTENTION)) {
  2607. SBP2_DEBUG("UNIT ATTENTION - return busy");
  2608. SCpnt->result = DID_BUS_BUSY << 16;
  2609. }
  2610. #endif
  2611. /*
  2612.  * Tell scsi stack that we're done with this command
  2613.  */
  2614. #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
  2615. spin_lock_irq(&io_request_lock);
  2616. done (SCpnt);
  2617. spin_unlock_irq(&io_request_lock);
  2618. #else
  2619. spin_lock_irq(hi->scsi_host->host_lock);
  2620. done (SCpnt);
  2621. spin_unlock_irq(hi->scsi_host->host_lock);
  2622. #endif
  2623. return;
  2624. }
  2625. /*
  2626.  * Called by scsi stack when something has really gone wrong.  Usually
  2627.  * called when a command has timed-out for some reason.
  2628.  */
  2629. static int sbp2scsi_abort (Scsi_Cmnd *SCpnt) 
  2630. {
  2631. struct sbp2scsi_host_info *hi = (struct sbp2scsi_host_info *) SCpnt->host->hostdata[0];
  2632. struct scsi_id_instance_data *scsi_id = hi->scsi_id[SCpnt->target];
  2633. struct sbp2_command_info *command;
  2634. unsigned long flags;
  2635. SBP2_ERR("aborting sbp2 command");
  2636. print_command (SCpnt->cmnd);
  2637.         
  2638. if (scsi_id) {
  2639. /*
  2640.  * Right now, just return any matching command structures
  2641.  * to the free pool.
  2642.  */
  2643. sbp2_spin_lock(&hi->sbp2_command_lock, flags);
  2644. command = sbp2util_find_command_for_SCpnt(scsi_id, SCpnt);
  2645. if (command) {
  2646. SBP2_DEBUG("Found command to abort");
  2647. pci_dma_sync_single(hi->host->pdev,
  2648.     command->command_orb_dma,
  2649.     sizeof(struct sbp2_command_orb),
  2650.     PCI_DMA_BIDIRECTIONAL);
  2651. pci_dma_sync_single(hi->host->pdev,
  2652.     command->sge_dma,
  2653.     sizeof(command->scatter_gather_element),
  2654.     PCI_DMA_BIDIRECTIONAL);
  2655. sbp2util_mark_command_completed(scsi_id, command);
  2656. if (command->Current_SCpnt) {
  2657. void (*done)(Scsi_Cmnd *) = command->Current_done;
  2658. command->Current_SCpnt->result = DID_ABORT << 16;
  2659. done (command->Current_SCpnt);
  2660. }
  2661. }
  2662. /*
  2663.  * Initiate a fetch agent reset. 
  2664.  */
  2665. sbp2_agent_reset(hi, scsi_id, SBP2_SEND_NO_WAIT);
  2666. sbp2scsi_complete_all_commands(hi, scsi_id, DID_BUS_BUSY);
  2667. sbp2_spin_unlock(&hi->sbp2_command_lock, flags);
  2668. }
  2669. return(SUCCESS);
  2670. }
  2671. /*
  2672.  * Called by scsi stack when something has really gone wrong.
  2673.  */
  2674. static int sbp2scsi_reset (Scsi_Cmnd *SCpnt) 
  2675. {
  2676. struct sbp2scsi_host_info *hi = (struct sbp2scsi_host_info *) SCpnt->host->hostdata[0];
  2677. struct scsi_id_instance_data *scsi_id = hi->scsi_id[SCpnt->target];
  2678. SBP2_ERR("reset requested");
  2679. if (scsi_id) {
  2680. SBP2_ERR("Generating sbp2 fetch agent reset");
  2681. sbp2_agent_reset(hi, scsi_id, SBP2_SEND_NO_WAIT);
  2682. }
  2683. return(SUCCESS);
  2684. }
  2685. /*
  2686.  * Called by scsi stack to get bios parameters (used by fdisk, and at boot).
  2687.  */
  2688. #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,28)
  2689. static int sbp2scsi_biosparam (Scsi_Disk *disk, kdev_t dev, int geom[]) 
  2690. #else
  2691. static int sbp2scsi_biosparam (Scsi_Disk *disk, struct block_device *dev, int geom[]) 
  2692. #endif
  2693. {
  2694. int heads, sectors, cylinders;
  2695. SBP2_DEBUG("Request for bios parameters");
  2696. heads = 64;
  2697. sectors = 32;
  2698. cylinders = disk->capacity / (heads * sectors);
  2699. if (cylinders > 1024) {
  2700. heads = 255;
  2701. sectors = 63;
  2702. cylinders = disk->capacity / (heads * sectors);
  2703. }
  2704. geom[0] = heads;
  2705. geom[1] = sectors;
  2706. geom[2] = cylinders;
  2707. return(0);
  2708. }
  2709. /*
  2710.  * Called by scsi stack after scsi driver is registered
  2711.  */
  2712. static int sbp2scsi_detect (Scsi_Host_Template *tpnt) 
  2713. {
  2714. SBP2_DEBUG("sbp2scsi_detect");
  2715. /*
  2716.  * Call sbp2_init to register with the ieee1394 stack. This
  2717.  * results in a callback to sbp2_add_host for each ieee1394
  2718.  * host controller currently registered, and for each of those
  2719.  * we register a scsi host with the scsi stack.
  2720.  */
  2721. #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
  2722. spin_unlock_irq(&io_request_lock);
  2723. sbp2_init();
  2724. spin_lock_irq(&io_request_lock);
  2725. #else
  2726. sbp2_init();
  2727. #endif
  2728. /* We return the number of hosts registered. */
  2729. return scsi_driver_template.present;
  2730. }
  2731. /*
  2732.  * Called for contents of procfs
  2733.  */
  2734. static const char *sbp2scsi_info (struct Scsi_Host *host)
  2735. {
  2736. struct sbp2scsi_host_info *hi = sbp2_find_host_info_scsi(host);
  2737. static char info[1024];
  2738. if (!hi) /* shouldn't happen, but... */
  2739.          return "IEEE-1394 SBP-2 protocol driver";
  2740. sprintf(info, "IEEE-1394 SBP-2 protocol driver (host: %s)n%sn"
  2741. "SBP-2 module load options:n"
  2742. "- Max speed supported: %sn"
  2743. "- Max sectors per I/O supported: %dn"
  2744. "- Max outstanding commands supported: %dn"
  2745. "- Max outstanding commands per lun supported: %dn"
  2746.                 "- Serialized I/O (debug): %sn"
  2747. "- Exclusive login: %s",
  2748. hi->host->driver->name,
  2749. version,
  2750. hpsb_speedto_str[sbp2_max_speed],
  2751. sbp2_max_sectors,
  2752. sbp2_max_outstanding_cmds,
  2753. sbp2_max_cmds_per_lun,
  2754. sbp2_serialize_io ? "yes" : "no",
  2755. sbp2_exclusive_login ? "yes" : "no");
  2756. return info;
  2757. }
  2758. MODULE_AUTHOR("James Goodwin <jamesg@filanet.com>");
  2759. MODULE_DESCRIPTION("IEEE-1394 SBP-2 protocol driver");
  2760. MODULE_SUPPORTED_DEVICE(SBP2_DEVICE_NAME);
  2761. MODULE_LICENSE("GPL");
  2762. /* SCSI host template */
  2763. static Scsi_Host_Template scsi_driver_template = {
  2764. .name = "IEEE-1394 SBP-2 protocol driver",
  2765. .info = sbp2scsi_info,
  2766. .detect = sbp2scsi_detect,
  2767. .queuecommand = sbp2scsi_queuecommand,
  2768. .eh_abort_handler = sbp2scsi_abort,
  2769. .eh_device_reset_handler =sbp2scsi_reset,
  2770. .eh_bus_reset_handler = sbp2scsi_reset,
  2771. .eh_host_reset_handler =sbp2scsi_reset,
  2772. .bios_param = sbp2scsi_biosparam,
  2773. .this_id = -1,
  2774. .sg_tablesize = SBP2_MAX_SG_ELEMENTS,
  2775. .use_clustering = SBP2_CLUSTERING,
  2776. #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
  2777. .use_new_eh_code = TRUE,
  2778. #endif
  2779. .emulated = 1,
  2780. .proc_name = SBP2_DEVICE_NAME,
  2781. };
  2782. static int sbp2_module_init(void)
  2783. {
  2784. SBP2_DEBUG("sbp2_module_init");
  2785. /*
  2786.  * Module load debug option to force one command at a time (serializing I/O)
  2787.  */
  2788. if (sbp2_serialize_io) {
  2789. SBP2_ERR("Driver forced to serialize I/O (serialize_io = 1)");
  2790. scsi_driver_template.can_queue = 1;
  2791. scsi_driver_template.cmd_per_lun = 1;
  2792. } else {
  2793. scsi_driver_template.can_queue = sbp2_max_outstanding_cmds;
  2794. scsi_driver_template.cmd_per_lun = sbp2_max_cmds_per_lun;
  2795. }
  2796. /* 
  2797.  * Set max sectors (module load option). Default is 255 sectors. 
  2798.  */
  2799. scsi_driver_template.max_sectors = sbp2_max_sectors;
  2800. /*
  2801.  * Ideally we would register our scsi_driver_template with the
  2802.  * scsi stack and after that register with the ieee1394 stack
  2803.  * and process the add_host callbacks. However, the detect
  2804.  * function in the scsi host template requires that we find at
  2805.  * least one host, so we "nest" the registrations by calling
  2806.  * sbp2_init from the detect function.
  2807.  */
  2808. scsi_driver_template.module = THIS_MODULE;
  2809. if (SCSI_REGISTER_HOST(&scsi_driver_template) ||
  2810.     !scsi_driver_template.present) {
  2811. SBP2_ERR("Please load the lower level IEEE-1394 driver "
  2812.  "(e.g. ohci1394) before sbp2...");
  2813. sbp2_cleanup();
  2814. return -ENODEV;
  2815. }
  2816. return 0;
  2817. }
  2818. static void __exit sbp2_module_exit(void)
  2819. {
  2820. SBP2_DEBUG("sbp2_module_exit");
  2821. /*
  2822.  * On module unload we unregister with the ieee1394 stack
  2823.  * which results in remove_host callbacks for all ieee1394
  2824.  * host controllers.  In the callbacks we unregister the
  2825.  * corresponding scsi hosts.
  2826.  */
  2827. sbp2_cleanup();
  2828. if (SCSI_UNREGISTER_HOST(&scsi_driver_template))
  2829. SBP2_ERR("sbp2_module_exit: couldn't unregister scsi driver");
  2830. }
  2831. module_init(sbp2_module_init);
  2832. module_exit(sbp2_module_exit);