 /* 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 condtions 
 *         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.
 *
 */

