/* * QLogic ISP2200 and ISP2300 Linux Driver Revision List File. * ******************************************************************** * * Revision History: * * Rev 6.0.2 Sept 11, 2002 DG * - released. * Rev 6.0.1b8/6.0.1 Aug 14, 2002 DG * - (224393) Fix oops cause by a coding error in the RSCN * processing logic which corrupted a srb pointer in the * outstanding array. * Rev 6.0.1b7 July 31, 2002 DG * - (224175) Fix issue where the report-luns logic would interpret * data on an incorrect status from the device. * - Change inquiry data size from 4 bytes to 36. * Rev 6.0.1b6 Jul 18, 2002 DG * - (223188) Fix Oops found in clustering testing when * the lun_queue is Null when processing an interrupt. * Rev 6.0.1b5 Jun 28, 2002 DG * - Fix timer race condition when removing timer. Change * logic to do a modify timer instead a adding timer. * Rev 6.0.1c May 26, 2002 * - HSG80 release. * Rev 6.0.1b4 May 26, 2002 DG * - Added new firmware 3.01.09. * Rev 6.0.1b3 May 20, 2002 DG * - Fixed device type check in "not ready" logic. * - Fixed locking issue in status_entry routine * when target goes away. * Rev 6.0.1b2 May 15, 2002 DG * - Added new firmware 3.01.08. * Rev 6.0b23-test1/6.0.1b1 May 08, 2002 DG * - Fixed Segment fault when scan code wants to scan for a * large number of luns. * Rev 6.0b23 May 06, 2002 RA/RLU * -Added the new setup() routine for lk>=2.4 and above to handle the * kernel command line parameter. * -Set BIT_1 when issuing login_fabric() from the ioctl to take * care of McData issue. * Rev 6.0b22-test2 April 30, 2002 DG * - Made tasklet a compile time option. * - Fixed mailbox timeouts on first mailbox command after polling. * - Fixed MPIO issue of requests setting in pending queue after * resync of second adapter. * Rev 6.0b22-test1 April 29, 2002 RA/AV * - Updated makefile to add the support for all the arch-i386/i486/i586 * /i686 -especially to address the skipjack issue. * - Set the right host status when device returns queue full. * Rev 6.0b22 April 26, 2002 RL/AV * - Corrected usage of pci info by directly getting it from ha->pdev. * This fixes problem with referencing the now uninitialized * fields of ha->pci_bus and ha->pci_device_fn from various * places including ioctl calls. * - Corrected HBA port state value returned in ioctl call. * - Corrected saving of failover path ID. * - Added passing of SRB_IOCTL flag via the CMD_RESID_LEN(cmd) field * from scsi passthru ioctl so the passthru IO won't get retried. * - Added checking of SRB_IOCTL in regular IO path so we do not * retry these IOs. * - Enabled ABORT_TARGET mailbox command to clear reservation. * - Replaced set_cache_line function with RedHat implementation. * - Cleaned up variable names in cmd_timeout. * * Rev 6.0b21-test2 April 24, 2002 DG * - Fixed Oops in qla2x00_next() when starting new command * after a resync. * - Fixed issues in failover code. * - Added back suspend lun support. * * Rev 6.0b21-test1 April 18, 2002 AV * - Remove per-lun pending queues in favor of a simplified * single adapter pending queue for all queued commands * issued to the adapter. * - Cleanup global detect semaphore name usage. * - Simplify the queue command process by postponing expensive * backend checks to the qla2x00_next() function. * - Remove all NOP *_LOCK/UNLOCK macros. These macros are no * longer needed with the 6.x series drivers. * - Removed all OLD error-handling code. * - Simplify the SCSI host template -- remove references to * OLD error-handling routines. * * Rev 6.0b21 April 17, 2002 RL * - Added more error handling code for send_fcct ioctl command, * and fixed a panic problem by using dummy tgt/lun q structures. * - Added get/set RNID related mailbox commands and ioctl support. * - Fixed compile warning by defining pci_set_dma_mask function * for kernel version < 2.4.3. * - Moved sp_get and sp_put back to qla2x00.c. * - Some indentation clean up and ioctl debug level clean up. * * Rev 6.0b20 April 15, 2002 RA * - Added HSG80 flag in makefile to define COMPAQ(-DCOMPAQ) compilation * flag. * - Added HSG80_PORT_RETRY_COUNT macro for COMPAQ-HSG80. * * Rev 6.0b19 April 10, 2002 RA * - Use pci_set_dma_mask() to set up 64bit/32bit instead of * CONFIG_HIGHMEM. * - Renamed RETRY_FOR_NOT_READY back to COMPAQ-By default disabled. * * Rev 6.0b18 April 10, 2002 AV/RA * - With Indent-8 tabs formatted all of the driver files. * - Removed the left over serial console support. * - Changed the debug routines to linux style. * - Change places where we use SYS_DELAY to udelay/barrier() * - Fix bugs wwrt to >> 32 of 32 bit variables. * - Cleaned up the support for lk < 2.4 kernel. * - Fixed missing wakeups of the dpc thread * - Added barrier() between subsequent reads in * qla2x00_debounce_register(); * * Rev 6.0b17 April 09, 2002 AV/RLU/RA * - Deleted all direct references to qla2x00_callback outside * of sp_put and __sp_put functions, so the sp->ref_count * is decremented correctly before going back to free pool. * This fixed IO timeout/hang after some direct qla2x00_callback * calls are invoked. * - Fixed panic from ioctl passthru command which makes separate call * to allocate new sp by deleting the zeroing out of sp content after * calling get_new_sp. We should not overwrite sp content * because get_new_sp initializes some fields to non-zero. * - Moved the call to rpt_lun_discovery to later so that LUN 0 will * always be allocated regardless of the actual LUN list * returned. This allows kernel to continue scanning past * a non-existent LUN 0. * - Added output of the following to proc_info per customer * request: * 'Number of reqs in scsi_retry_q', 'Number of reqs in failover_q', * 'Device queue depth'. * - Added qlport_down_retry as a new driver parameter per customer * request. * - Changed ioctl busy polling interval to 1 second instead of * 1 tick. 1 tick is unrealistic. * - Added more ioctl function description headers. * * Rev 6.0b16 April 08, 2002 RA/AV/RLU * - Added the support to recognise medium changer type * as Tape devive(inq[0] == 8). * - For Not Ready case suspend the lun only for Hard Disk Device * type. * - Nuked the support for FC_VI. * - Before examining the scsi status Mask of the reserved bits 12-15. * - Added the CONFIG_HIGHMEM support for 64bit dma addresing on 32bit * platform. * - Renamed file- settings.h as qla_settings.h * - Debug macros moved from qla2x00.c to qla_debug.h and made * statement like. * - Removed serial console code. * - Added the missing hardware lock in eh_abort when searching the "sp" * in the active array. * - Added loop state and number of free srb's in the /proc * - Changed to use kernel interface or routines(ex-readb()) * for Memory Mapped I/O. * - Cleaned up qla2x00_pci_config() routine. * - Renamed COMPAQ flag to G80. * - Set the port_down_retry_count to 30 if in the nvram its configured * less than 30.Need enough time to try and get the port back * - Get rid of the lun_list field in the inq_cmd_rsp structure. * - Check for abort_active/reconfiguration/recovery active state * before issuing get_link_status mbx cmd. * - Renamed qla2200_nvram_config() to qla2x00_nvram_config() * - Need to get rid of caddr_t as its illegal in the kernel-???? * - Add ref_count to the "sp" structure, needed to keep locking sane * over functions that sleep.Added sp_get() and sp_put() . * - Use Report Luns (RLC) for lun discovery process. * - Use a consistent set of command structures during SNS queries -- * add sns_cmd_rsp_t structure. * - Fix issue where SNS query would return too much data for * the firmware to handle -- explicitely define the maximum amount * of double-words in the SNS request. * - Changed VIRT_TO_BUS/KMALLOC to pci_alloc_consistent() in qla_fo.c * - Updated README.qla2x00 * * Rev 6.0b15 April 05, 2002 DG/RA/RL * - Corrected more local dpc flag checking in configure_loop. * This fixed problem not calling correct functions based * on correct flags. * - Deleted hardcoded port_down_retry_count. * - Corrected macros used to split up dma physical address * for use by registers. Now the macros work on both 32bit * and 64 bit platforms. * - More dma_addr_t function parameter type correction. * - Added update of port_id in build_fcport_list function * when updating a pre-existed port. This fixed problem * of not able to login after the port location has been * changed. * - Return a different status for 4006 error from login fabric * mbx cmd so we don't retry anymore. * * Rev 6.0b14 April 04, 2002 DG/RA/RLU/AV * - Fixed query_disc_port ioctl not returning correct port * state. * - Changed port_down_retry_count to 32. * - Corrected local dpc flag variable checking in configure_loop * to use bit manipulation functions instead of C style bit * checking. This results in correctly log out lost * fabric ports. * - Corrected qla2x00_send_sns function parameter type for * physical address to use dma_addr_t. * - Added PCI module device table. * - Updated README file with Suse ramdisk info. * * Rev 6.0b13 April 03, 2002 DG/RA/RLU/AV * - Fixed the makefile issue: corrected documentation, * and makefile syntax problem (making both drivers when * only one is asked for). * - Reduced stack size in functions using over 0x200 bytes * stack space: qla2x00_set_lun_data_from_config, * qla2x00_cfg_build_path_tree, qla2x00_aen_get, * qla2x00_query_hba_node, qla2x00_get_port_summary, * qla2x00_send_fcct. * - Changed get_disc_port ioctl behavior which returns next * available device instance info when a port/target is * disconnected. Now return error when query for lost port. * - Moved the allocation of host database to outside of the adapter * structure allocation to avoid the allocation size limitation in * the scsi_register function. * - Changed qla2100_ function names to qla2x00_ prefix. * - Changed previous qla2100_print calls to use printk. * - Cleaned up compile warnings. * - Added the support in README.qla2x00 to build the driver as part of the * kernel. * * Rev 6.0b12 April 01, 2002 DG/RA QLogic * - Fixed the port login stuff-not trying to login even the port was * marked as lost unless RSCN happens and we do a loop resync. * - Copy the done queue into local queue in qla2x00_done() such that we * do not wind up calling done queue takslet for the same IOs from DPC * or any other place. * * Rev 6.0b11 April 01, 2002 RL/RA QLogic * - Added initialization of the new lun q lock for ioctl_lq. * This fixes passthru ioctl hanging problem. * - Added the missing hardware lock in qla2x00_process_risc_intrs() * when we call qla2100_isr(). * * Rev 6.0b10 March 29, 2002 DG QLogic * - Added new support for suspending the lun on "not ready" * conditions. * - Deleted extra usage of io_request lock in fc_scsi and * scsi3 passthru ioctl functions. * - Updated README file. * * Rev 6.0b9 March 28, 2002 RA/DG/RLU/JJ QLogic * - Added use of additional fields in Scsi_Cmnd to save IO * status related values for ioctl SCSI/FCCT passthru cmd * processing. * - Added scsi3_passthru function to process 16 byte CDBs * whose fclun value can be in either VSA or PDA format. * - Added device and bus reset new error handling functions. * - Added option and code to handle register_fc4. * * Rev 6.0b8 March 27,2002 RA/DG/RLU QLogic * - Set the host_byte status correctly in process_completed_request(). * - Fixed the stack overflow in configure_fabric() qla2x00_ioctl() * and qla2x00_fo_ioctl() routine. * - Cover the case in eh_host_reset() where abort_isp is already active. * - Release the hardware lock before we return in reset_chip() routine. * - Added the support to grab the io_request_lock back in the queuecommand * after adding the request to scsi_retry_queue. * - Fixed the issue in the detect routine where we dont hang around for * the devices to come online. * -Implemented scsi_retry_queue stuff. * -Added the function headers for qla2x00_process_risc_intrs * and qla2x00_process_completed_requests * -Got rid of abort_q_put() ,abort_q_get() cmd_wait(), * qla2100_return_status() routines and ABORT lock. * -Added the support for 2.5.7>lk>=2.4.8 in Scsi Host TEMPLATE. * Rev 6.0b7 March 20, 2002 JJ QLogic * - Change not to use the first slot (0) of the outstanding_cmd * array, since we will put NULL handle for a completed cmd. * - Implement new hardware lock in place of io_request_lock * in order to improve performance. * - Save ha in srb_t when being inserted into the failover * queue so we know which ha to look for when that cmd is * timed out. * - Add aborting isp if abort command failed. * - Fix cmd_timeout routine to get the valid ha for the * fail-over driver. * * Rev 6.0b6 March 20, 2002 RL QLogic * - New PCI device registration and API support for 2.4.0 and * above only. * - Template change (previously done). * - Remove explicit virt_to_* calls in foavor of * *_alloc_consistent. * - Only allow compilation on 2.4.0 machines and above. * - Corrected ioctl hang due to SETINSTANCE command. * - Added io_request lock in FCCT passthru function when issuing * login_fabric mbx cmd. * - Corrected issue_iocb parameter as referenced in qla_fo.c. * * Rev 6.0b5 March 14, 2002 RL QLogic * - Added qla2200.c and qla2300.c files to enable separate * driver make in RedHat kernel source directory. * - Added/enabled two new error handling functions: eh_abort and * eh_host_reset. * - Changed issue_iocb prototype to pass in the buffer physical address * value. * - Changed request_region function (in register_with_Linux) to use * correct driver name string. * - Added release_region if request_irq function failed (in * register_with_Linux). * - Moved the enabling of host interrupt (in mbx cmd issuing) to just * before going to sleep waiting for completion. * * Rev 6.0b4 March 11, 2002 RA QLogic * - Fixed the panic in the loop reset routine where we trying to * derefernce tgt queue even if its NULL. * - Changed the MAX_SRBS count to 4096. * - Changed to dma_addr_t instead of depending on BITS_PER_LONG * macro in get_port_database. * - Changed README.qla2x00-Support for 2.4.x only. * * Rev 6.0b3 March 08,2002 RA QLogic * - Fixed the panic in abort routine- where we try to dereference * "sp" even its NULL causing to panic. * - Partially cleaned up compiler warning. * * Rev 6.0b2 March 07,2002 RA QLogic * - Update 2200(v2.02.01) and 2300(v3.1.02) firmware. * - Instead of depending on BITS_PER_LONG macro to * figure out whether address will be 64 bit or 32 bit * ,changed it to dma_addr_t data type .Even on 32bit system * if there is high memory support it will be 64bit instead of 32bit. * - Earlier we used to call qla2100_callback directly in qla2x00_ms_entry * routine.But now its dangerous to do so.As we zero out the * sp pointer in the cmd just before calling scsi_done().So we just * the "sp" in done_queue and let the tasklet process it later. * Rev 6.0b1 March 06,2002 RA,DG QLogic * - Started with Driver Version-5.38b16 as the base. * - Initial release of the 6 series driver, with all the * changes ported from the 4.x series driver(mentioned below). * - Now we keep track of the loop_id, so that we can log * into that port successfully when it comes back. * - All the options setting has been moved from qla2x00.c to settings.h * file. * -Added the support from NEW Error Handling Code perspective. * Right now the macro(NEW_EH_CODE) is turned off till we * completely fix all the issue related to NEW_EH_CODE in the driver. /**************************************************************************** * Changes Ported from 4.x Driver: -Changed malloc.h to use slab.h to get rid of the compiler warning message. -Use del_timer_sync to delete qla2100_timer for lk > 2.4.0 -Send marker only at one place ie when we are about to send out the commands to the ISP except during initialize_adapter(). -Added the marker support for 64bit_start_scsi. -Initialized the different queues. PENDING QUEUE:-Initialized in lun_alloc() RETRY QUEUE:- "" in detect() DONE QUEUE :- "" in detect() ACTIVE QUEUE : FAILOVER QUEUE : "" in detect() FREE QUEUE:- Initialised in allocate_sp_pool() -Got rid of udelay in mem_alloc() routine. -Got rid of support for lk<2.4 in mem_alloc() and mem_free() routines. -Allocating sp during initialisation instead of on the fly. -Added the timer for each command. -Modified the different queues to use kernel list macro for queue management.Using one lock ie "list_lock" to protect different queues. -Added qla2x00_free_sp_pool() routine to release the sp_pool memory when we unload the driver. - Modified the qla2x00_next() prototype to pass vis_ha except in done. -Introduced Port state:DEAD,LOST and ONLINE . -Fixed the QLA2X00_FAILURE macro. -Fixed the abort routine-retry queue or failoever queue will be on the real HBA. -Added the ql2xlogintimeout stuff-Instead of 4sec,firmware will be using 20 secs initially(2*ratov value) to login into the switch for ED1032. -Added the retry logic to login into the switch. -Added the code to kick off port_down_retry timer when we get 28-29 compl status but the firmware is not quick enough to report that the device is missing. -Now using macros to fix the wraparound situation for jiffies. -Fixed the qla2x00_abort_queue().Instead of calling callback directly, all the requests after being deleted from the lun_queue will be put in the done_queue(). -Fixed port logic in dpc to restore loop id in the fcport structure. -Changed fcport->state to atomic. -Changed the status_entry rotuine to check for completion first and then scsi status. - Change state of "sp" to ACTIVE STATE when we issue it to RISC. ******************************************************************************/