 /* TERMS AND CONDITIONS OF USE
 * 
 * Redistribution and use in source form, with or without modification, are
 * permitted provided that redistributions of source code must retain the
 * above copyright notice, this list of conditions and the following disclaimer.
 * 
 * This software is provided `as is' by Adaptec and
 * any express or implied warranties, including, but not limited to, the
 * implied warranties of merchantability and fitness for a particular purpose,
 * are disclaimed. In no event shall Adaptec be
 * liable for any direct, indirect, incidental, special, exemplary or
 * consequential damages (including, but not limited to, procurement of
 * substitute goods or services; loss of use, data, or profits; or business
 * interruptions) however caused and on any theory of liability, whether in
 * contract, strict liability, or tort (including negligence or otherwise)
 * arising in any way out of the use of this driver software, even if advised
 * of the possibility of such damage.
 * 
 ****************************************************************
 * This driver supports the Adaptec I2O RAID and DPT SmartRAID V I2O boards.
 *
 * CREDITS:
 * The original linux driver was ported to Linux by Karen White while at 
 * Dell Computer.  It was ported from Bob Pasteur's (of DPT) original 
 * non-Linux driver.  Mark Salyzyn and Bob Pasteur consulted on the original
 * driver. 
 * 
 * 2.0 version of the driver by Deanna Bonds and Mark Salyzyn.
 *
 * HISTORY:
 * The driver was originally ported to linux version 2.0.34 
 *
 * V2.0 Rewrite of driver.  Re-architectured based on i2o subsystem.
 *   This was the first full GPL version since the last version used
 *   i2osig headers which were not GPL.  Developer Testing version.
 * V2.1 Internal testing
 * V2.2 First released version
 *
 * V2.3 
 *   Changes:
 *      Added Raptor Support
 *      Fixed bug causing system to hang under extreme load with 
 *         management utilities running (removed GFP_DMA from kmalloc flags)
 *
 *
 * V2.4 First version ready to be submitted to be embedded in the kernel
 *   Changes: 
 *      Implemented suggestions from Alan Cox
 *      Added calculation of resid for sg layer
 *      Better error handling
 *         Added checking underflow conditions 
 *         Added DATAPROTECT checking
 *         Changed error return codes
 *         Fixed pointer bug in bus reset routine
 *      Enabled hba reset from ioctls (allows a FW flash to reboot and use the new
 *         FW without having to reboot)
 *      Changed proc output
 *
 * TODO:
 *      Add 64 bit Scatter Gather when compiled on 64 bit architectures
 *      Add sparse lun scanning 
 *      Add code that checks if a device that had been taken offline is
 *         now online (at the FW level) when test unit ready or inquiry 
 *         command from scsi-core
 *      Add proc read interface
 *         busrescan command
 *         rescan command
 *      Add code to rescan routine that notifies scsi-core about new devices
 *      Add support for C-PCI (hotplug stuff)
 *      Add ioctl passthru error recovery
 *
 * NOTES:
 * The DPT card optimizes the order of processing commands.  Consequently,
 * a command may take up to 6 minutes to complete after it has been sent
 * to the board.  
 *
 * The files dpti_ioctl.h dptsig.h osd_defs.h osd_util.h sys_info.h are part of the
 * interface files for Adaptec's management routines.  These define the structures used
 * in the ioctls.  They are written to be portable.  They are hard to read, but I need
 * to use them 'as is' or I can miss changes in the interface.
 *
 */

