From dea3101e0a5c897d2c9351a7444e139db9f40247 Mon Sep 17 00:00:00 2001 From: Date: Sun, 17 Apr 2005 16:05:31 -0500 Subject: lpfc: add Emulex FC driver version 8.0.28 From: James.Smart@Emulex.Com Modified for kernel import and Signed-off-by: James Bottomley --- Documentation/scsi/ChangeLog.lpfc | 1865 +++++++++++++++++++++++++++++++++++++ Documentation/scsi/lpfc.txt | 83 ++ 2 files changed, 1948 insertions(+) create mode 100644 Documentation/scsi/ChangeLog.lpfc create mode 100644 Documentation/scsi/lpfc.txt (limited to 'Documentation/scsi') diff --git a/Documentation/scsi/ChangeLog.lpfc b/Documentation/scsi/ChangeLog.lpfc new file mode 100644 index 0000000..ae3f962 --- /dev/null +++ b/Documentation/scsi/ChangeLog.lpfc @@ -0,0 +1,1865 @@ +Known issues : + * Please read the associated RELEASE-NOTES file !!! + * This source release intended for upstream kernel releases only! + +Changes from 20050323 to 20050413 + + * Changed version number to 8.0.28 + * Fixed build warning for 2.6.12-rc2 kernels: mempool_alloc now + requires a function which takes an unsigned int for gfp_flags. + * Removed pci dma sync calls to coherent/consistent pci memory. + * Merged patch from Christoph Hellwig : split helpers + for fabric and nport logins out of lpfc_cmpl_els_flogi. + * Removed sysfs attributes that are used to dump the various + discovery lists. + * Fix for issue where not all luns are seen. Search all lists + other than unmap list in lpfc_find_target(). Otherwise INQUIRY + to luns on nodes in NPR or other relevant states (PLOGI, + PRLI...) are errored back and scan() terminates. + * Removed FC_TRANSPORT_PATCHESxxx defines. They're in 2.6.12-rc1. + * Compare return value of lpfc_scsi_tgt_reset against SCSI + midlayer codes SUCCESS/FAILED which that function returns rather + than SLI return code. + * Removed extraneous calls to lpfc_sli_next_iotag which should + only be called from lpfc_sli_submit_iocb. Also make + lpfc_sli_next_iotag static. + * Added PCI ID for LP10000-S. + * Changes in lpfc_abort_handler(): Return SUCCESS if we did not + find command in both TX and TX completion queues. Return ERROR + if we timed out waiting for command to complete after abort was + issued. + * Zero-out response sense length in lpfc_scsi_prep_cmnd to prevent + interpretation of stale sense length when the command completes + - was causing spurious 0710 messages. + * Moved clearing of host_scribble inside host_lock in IO + completion path. + * Fixed a bunch of mixed tab/space indentation. + * Allow hex format numbers in sysfs attribute setting. Fix + application hang when invalid numbers are used in sysfs + settings. + * Removed extra iotag allocation by lpfc_abort_handler. + * Clear host_scribble in the scsi_cmnd structure when failing in + queuecommand. + * Changed logic at top of lpfc_abort_handler so that if the + command's host_scibble field is NULL, return SUCCESS because the + driver has already returned the command to the midlayer. + +Changes from 20050308 to 20050323 + + * Changed version number to 8.0.27 + * Changed a few lines from patch submitted by Christoph Hellwig + (3/19). MAILBOX_WSIZE * (uint32_t) is replaced with an + equivalent MAILBOX_CMDSIZE macro. + * Merged patch from Christoph Hellwig (3/19): some misc patches + against the latest drivers: + - stop using volatile. if you need special ordering use memory + barriers but that doesn't seem to be the case here + - switch lpfc_sli_pcimem_bcopy to take void * arguments. + - remove typecast for constants - a U postfix marks them + unsigned int in C + - add a MAILBOX_CMD_SIZE macro, as most users of + MAILBOX_CMD_WSIZE didn't really want the word count + - kill struct lpfc_scsi_dma_buf and embedded the two members + directly in struct lpfc_scsi_buf + - don't call dma_sync function on allocations from + pci_pool_alloc - it's only for streaming mappings (pci_map_*) + * Merged patch from Christoph Hellwig (3/19) - nlp_failMask isn't + ever used by the driver, just reported to userspace (and that in + a multi-value file which is against the sysfs guidelines). + * Change pci_module_init to pci_register_module() with appropriate + ifdefs. + * Added #include as required by the DMA + 32bit and 64bit defines on some archs. + * Merged patch from Christoph Hellwig (03/19) - fix initialization + order - scsi_add_host must happen last from scsi POV. Also some + minor style/comment fixups. + * Fixed use of TRANSPORT_PATCHES_V2 by changing to + FC_TRANSPORT_PATCHES_V2. + +Changes from 20050223 to 20050308 + + * Changed version number to 8.0.26 + * Revise TRANSPORT_PATCHES_V2 so that lpfc_target is removed and + rport data is used instead. Removed device_queue_hash[]. + * Changed RW attributes of scan_down, max_luns and fcp_bind_method + to R only. + * Fixed RSCN handling during initial link initialization. + * Fixed issue with receiving PLOGI handling when node is on NPR + list and marked for ADISC. + * Fixed RSCN timeout issues. + * Reduced severity of "SCSI layer issued abort device" message to + KERN_WARNING. + * Feedback from Christoph Hellwig (on 2/5) - In the LPFC_EVT_SCAN + case the caller already has the target ID handly, so pass that + one in evt_arg1. + * Fix compile warning/resultant panic in + lpfc_register_remote_port(). + +Changes from 20050215 to 20050223 + + * Changed version number to 8.0.25 + * Add appropriate comments to lpfc_sli.c. + * Use DMA_64BIT_MASK and DMA_32BIT_MASK defines instead of + 0xffffffffffffffffULL & 0xffffffffULL respectively. Use pci + equivalents instead of dma_set_mask and also modify condition + clause to actually exit on error condition. + * Restart els timeout handler only if txcmplq_cnt. On submission, + mod_timer the els_tmofunc. This prevents the worker thread from + waking up the els_tmo handler un-necessarily. The thread was + being woken up even when there were no pending els commands. + * Added new typedefs for abort and reset functions. + * Collapsed lpfc_sli_abort_iocb_xxx into a single function. + * Collapsed lpfc_sli_sum_iocb_xxx into a single function. + * Removed TXQ from all abort and reset handlers since it is never + used. + * Fixed Oops panic in 8.0.23 (reported on SourceForge). The + driver was not handling LPFC_IO_POLL cases correctly in + fast_ring_event and was setting the tgt_reset timeout to 0 in + lpfc_reset_bus_handler. This 0 timeout would not allow the FW + to timeout ABTS's on bad targets and allow the driver to have an + iocb on two lists. Also split the lpfc_sli_ringtxcmpl_get + function into two routines to match the fast and slow completion + semantics - ELS completions worked for the wrong reasons. Also + provided new log message number - had two 0326 entries. + * Removed unused #define LPFC_SCSI_INITIAL_BPL_SIZE. + * Removed unused struct lpfc_node_farp_pend definition. + * Removed unused #define LPFC_SLIM2_PAGE_AREA. + * Changed zeros used as pointers to NULL. + * Removed unneeded braces around single line in lpfc_do_work. + * Close humongous memory leak in lpfc_sli.c - driver was losing 13 + iocbq structures per LIP. + * Removed last of GFP_ATOMIC allocations. + * Locks are not taken outside of nportdisc, hbadisc, els and most + of the init, sli, mbox and ct groups of functions + * Fix comment for lpfc_sli_iocb_cmd_type to fit within 80 columns. + * Replaced wait_event() with wait_event_interruptible(). + wait_event() puts the woker thread in an UNINTERRUPTIBLE state + causing it to figure in load average calculations. Also add a + BUG_ON to the ret code of wait_event_interruptible() since the + premise is that the worker thread is signal-immune. + +Changes from 20050208 to 20050215 + + * Changed version number to 8.0.24 + * Fixed a memory leak of iocbq structure. For ELS solicited iocbs + sli layer now frees the response iocbs after processing it. + * Closed large memory leak -- we were losing 13 iocbq structures + per LIP. + * Changing EIO and ENOMEM to -EIO and -ENOMEM respectively. + * Cleanup of lpfc_sli_iocb_cmd_type array and typing of iocb type. + * Implemented Christoph Hellwig's feedback from 02/05: Remove + macros putLunHigh, putLunLow. Use lpfc_put_lun() inline instead. + * Integrated Christoph Hellwig's feedback from 02/05: Instead of + cpu_to_be32(), use swab16((uint16_t)lun). This is the same as + "swab16() on LE" and "<<16 on BE". + * Added updates for revised FC remote port patch (dev_loss_tmo + moved to rport, hostdata renamed dd_data, add fc_remote_host() + on shutdown). + * Removed unnecessary function prototype. + * Added code to prevent waking up worker thread after the exit of + worker thread. Fixes panic seen with insmod/rmmod testing with + 70 disks. + * Integrated Christoph Hellwig's patch from 1/30: Make some + variables/code static (namely lpfcAlpaArray and + process_nodev_timeout()). + * Integrated Christoph Hellwig's patch from 1/30: Use + switch...case instead of if...else if...else if while decoding + JDEC id. + +Changes from 20050201 to 20050208 + + * Changed version number to 8.0.23 + * Make lpfc_work_done, lpfc_get_scsi_buf, + lpfc_mbx_process_link_up, lpfc_mbx_issue_link_down and + lpfc_sli_chipset_init static. + * Cleaned up references to list_head->next field in the driver. + * Replaced lpfc_discq_post_event with lpfc_workq_post_event. + * Implmented Christoph Hellwig's review from 2/5: Check for return + values of kmalloc. + * Integrated Christoph Hellwig's patch from 1/30: Protecting + scan_tmo and friends in !FC_TRANSPORT_PATCHES_V2 && + !USE_SCAN_TARGET. + * Integrated Christoph Hellwig's patch from 1/30: Some fixes in + the evt handling area. + * Integrated Christoph Hellwig's patch from 1/30: Remove usage of + intr_inited variable. The interrupt initilization from OS side + now happens in lpfc_probe_one(). + * Integrated Christoph Hellwig's patch from 1/30: remove shim + lpfc_alloc_transport_attr - remove shim lpfc_alloc_shost_attrs - + remove shim lpfc_scsi_host_init - allocate phba mem in scsi's + hostdata readjust code so that they are no use after free's + (don't use after scsi_host_put) - make lpfc_alloc_sysfs_attr + return errors + * Fixed panic in lpfc_probe_one(). Do not delete in a list + iterator that is not safe. + * Clean up fast lookup array of the fcp_ring when aborting iocbs. + * Following timeout handlers moved to the lpfc worker thread: + lpfc_disc_timeout, lpfc_els_timeout, lpfc_mbox, lpfc_fdmi_tmo, + lpfc_nodev_timeout, lpfc_els_retry_delay. + * Removed unused NLP_NS_NODE #define. + * Integrated Christoph Hellwig's patch from 1/30: remove unused + lpfc_hba_list; remove unused lpfc_rdrev_wd30; remove + lpfc_get_brd_no and use Linux provided IDR. + * Changed board reset procedure so that lpfc_sli_send_reset() + writes the INITFF bit and leaves lpfc_sli_brdreset() to clear + the bit. + * Removed outfcpio sysfs device attribute. + * VPD changes: 1) Modify driver to use the model name and + description from the VPD data if it exists 2) Rework use of DUMP + mailbox command to support HBAs with 256 bytes of SLIM. + * Fixed compile error for implicit definition of struct + scsi_target + +Changes from 20050124 to 20050201 + + * Changed version number to 8.0.22 + * Moved discovery timeout handler to worker thread. There are + function calls in this function which are not safe to call from + HW interrupt context. + * Removed free_irq from the error path of HBA initialization. + This will fix the free of uninitialised IRQ when config_port + fails. + * Make sure function which processes unsolicited IOCBs on ELS ring + still is called with the lock held. + * Clear LA bit from work_ha when we are not supposed to handle LA. + * Fix double locking bug in the error handling part of + lpfc_mbx_cmpl_read_la. + * Implemented fast IOCB processing for FCP ring. + * Since mboxes are now unconditionally allocated outside of the + lock, free them in cases where they are not used. + * Moved out a couple of GFP_ATOMICs in lpfc_disc_timeout, to + before locks so that they can GFP_KERNEL instead. Also cleaned + up code. + * Collapsed interrupt handling code into one function. + * Removed event posting and handling of solicited and unsolicited + iocbs. + * Remove ELS ring handling leftovers from the lpfc_sli_inter(). + * ELS ring (any slow ring) moved from the lpfc_sli_inter() into a + worker thread. Link Attention, Mbox Attention, and Error + Attention, as well as slow rings' attention is passed to the + worker thread via worker thread copy of Host Attention + register. Corresponding events are removed from the event queue + handling. + * Add entries to hba structure to delegate some functionality from + the lpfc_sli_inter() to a worker thread. + * Reduced used of GFP_ATOMIC for memory allocations. + * Moved locks deeper in order to change GFP_ATOMIC to GFP_KERNEL. + * IOCB initialization fix for Raw IO. + * Removed qcmdcnt, iodonecnt, errcnt from lpfc_target and from + driver. + * Added call to lpfc_els_abort in lpfc_free_node. Modified + lpfc_els_abort to reset txq and txcmplq iterator after a + iocb_cmpl call. + * Fixed a use after free issue in lpfc_init.c. + * Defined default mailbox completion routine and removed code in + the sli layer which checks the mbox_cmpl == 0 to free mail box + resources. + * In lpfc_workq_post_event, clean up comment formatting and remove + unneeded cast of kmalloc's return. + * Removed loop which calls fc_remote_port_unblock and + fc_remote_port_delete for every target as this same effect is + accomplished by the scsi_remove_host call. + * Minor cleanup of header files. Stop header files including + other header files. Removed sentinels which hide multiple + inclusions. Removed unneeded #include directives. + * Fixed memory leaks in mailbox error paths. + * Moved lock from around of lpfc_work_done to lpfc_work_done + itself. + * Removed typedef for LPFC_WORK_EVT_t and left just struct + lpfc_work_evt to comply with linux_scsi review coding style. + * Fixed some trailing whitespaces, spaces used for indentation and + ill-formatting multiline comments. + * Bug fix for Raw IO errors. Reuse of IOCBs now mandates setting + of ulpPU and fcpi_parm to avoid incorrect read check of Write IO + and incorrect read length. + +Changes from 20050110 to 20050124 + + * Changed version number to 8.0.21 + * Removed unpleasant casting in the definition and use of + lpfc_disc_action function pointer array. + * Makefile cleanup. Use ?= operator for setting default + KERNELVERSION and BASEINCLUDE values. Use $(PWD) consistently. + * Removed call to lpfc_sli_intr from lpfc_config_port_post. All + Linux systems will service hardware interrupts while bringing up + the driver. + * Christoph Hellwig change request: Reorg of contents of + lpfc_hbadisc.c, lpfc_scsi.h, lpfc_init.c, lpfc_sli.c, + lpfc_attr.c, lpfc_scsi.c. + * Renamed discovery thread to lpfc_worker thread. Moved handling + of error attention and link attention and mbox event handler to + lpfc_worker thread. + * Removed .proc_info and .proc_name from the driver template and + associated code. + * Removed check of FC_UNLOADING flag in lpfc_queuecommand to + determine what result to return. + * Move modification of FC_UNLOADING flag under host_lock. + * Fix IOERR_RCV_BUFFER_WAITING handling for CT and ELS subsystem. + * Workaround firmware bug for IOERR_RCV_BUFFER_WAITING on ELS + ring. + * Fixed a couple lpfc_post_buffer problems in lpfc_init.c. + * Add missing spaces to the parameter descriptions for + lpfc_cr_delay, lpfc_cr_count and lpfc_discovery_threads. + * Lock before calling lpfc_sli_hba_down(). + * Fix leak of "host" in the error path in the remove_one() path. + * Fix comment for lpfc_cr_count. It defaults to 1. + * Fix issue where we are calling lpfc_disc_done() recursively from + lpfc_linkdown(), but list_for_each_entry_safe() is not safe for + such use. + * Bump lpfc_discovery_threads (count of outstading ELS commands in + discovery) to 32 + * If the SCSI midlayer tries to recover from an error on a lun + while the corresponding target is in the NPR state, lpfc driver + will reject all the resets. This will cause the target to be + moved to offline state and block all the I/Os. The fix for this + is to delay the lun reset to a target which is not in MAPPED + state until the target is rediscovered or nodev timeout is + fired. + +Changes from 20041229 to 20050110 + + * Changed version number to 8.0.20 + * rport fix: use new fc_remote_port_rolechg() function instead of + direct structure change + * rport fix: last null pointer check + * Phase II of GFP_ATOMIC effort. Replaced iocb_mem_pool and + scsibuf_mem_pool with kmalloc and linked list. Inserted list + operations for mempool_alloc calls. General code cleanup. All + abort and reset routines converted. Handle_ring_event + converted. + * If the mbox_cmpl == lpfc_sli_wake_mbox_wait in + lpfc_sli_handle_mb_event, pmb->context1 points to a waitq. Do + not free the structure. + * rport fixes: fix for rmmod crash + * rport fixes: when receiving PRLI's, set node/rport role values + * rport fixes: fix for unload and for fabric port deletes + * VPD info bug fix. + * lpfc_linkdown() should be able to process all outstanding events + by calling lpfc_disc_done() even if it is called from + lpfc_disc_done() Moving all events from phba->dpc_disc to local + local_dpc_disc prevents those events from being processed. + Removing that queue. From now on we should not see "Illegal + State Transition" messages. + * Release host lock and enable interrupts when calling + del_timer_sync() + * All related to rports: Clean up issues with rport deletion + Convert to using block/unblock on list remove (was del/add) + Moved rport delete to freenode - so rport tracks node. + * rport fixes: for fport, get maxframe and class support + information + * Added use of wait_event to work with kthread interface. + * Ensure that scsi_transport_fc.h is always pulled in by + lpfc_scsiport.c + * In remote port changes: no longer nulling target->pnode when + removing from mapped list. Pnode get nulled when the node is + freed (after nodev tmo). This bug was causing i/o recieved in + the small window while the device was blocked to be errored w/ + did_no_connect. With the fix, it returns host_busy + (per the pre-remote port changes). + * Merge in support for fc transport remote port use. This removes + any consistent bindings within the driver. All scanning is now + on a per-target basis driven by the discovery engine. + +Changes from 20041220 to 20041229 + + * Changed version number to 8.0.19 + * Fixed bug for handling RSCN type 3. Terminate RSCN mode + properly after ADISC handling completes. + * Add list_remove_head macro. Macro cleans up memory allocation + list handling. Also clean up lpfc_reset_bus_handler - routine + does not need to allocate its own scsi_cmnd and scsi_device + structures. + * Fixed potential discovery bug, nlp list corrutpion fix potential + memory leak + * Part 1 of the memory allocation rework request by linux-scsi. + This effort fixes the number of bdes per scsi_buf to 64, makes + the scatter-gather count a module parameter, builds a linked + list of scsi_bufs, and removes all dependencies on lpfc_mem.h. + * Reverted lpfc_do_dpc, probe_one, remove_one to original + implementation. Too many problems (driver not completing + initial discovery, and IO not starting to disks). Backs out + kthread patch. + * Fix race condition in lpfc_do_dpc. If wake_up interrupt occurs + while lpfc_do_dpc is running disc_done and the dpc list is + empty, the latest insertion is missed and the schedule_timeout + does not wakeup. The sleep interval is MAX_SCHEDULE_TIMEOUT + defined as ~0UL >> 1, a very large number. Hacked it to 5*HZ + for now. + * Fixed bug introduced when discovery thread implementation was + moved to kthread. kthread_stop() is not able to wake up thread + waiting on a semaphore and "modprobe -r lpfc" is not always + (most of the times) able to complete. Fix is in not using + semaphore for the interruptable sleep. + * Small Makefile cleanup - Remove remnants of 2.4 vs. 2.6 + determination. + +Changes from 20041213 to 20041220 + + * Changed version number to 8.0.18 + * Janitorial cleanup after removal of sliinit and ringinit[] ring + statistic is owned by the ring and SLI stats are in sli + structure. + * Integrated patch from Christoph Hellwig Kill + compile warnings on 64 bit platforms: %variables for %llx format + specifiers must be caste to long long because %(u)int64_t can + just be long on 64bit platforms. + * Integrated patch from Christoph Hellwig Removes + dead code. + * Integrated patch from Christoph Hellwig : use + kthread interface. + * Print LPFC_MODULE_DESC banner in module init routine. + * Removed sliinit structure and ringinit[] array. + * Changed log message number from 324 to 326 in lpfc_sli.c. + * Wait longer for commands to complete in lpfc_reset_bus_handler + and lpfc_reset_bus_handler. Also use schedule_timeout() instead + of msleep() and add error message in lpfc_abort_handler() + * When setting lpfc_nodev_tmo, from dev_loss set routine, make 1 + sec minimum value. + * Functions which assume lock being held were called without lock + and kernel complained about unlocking lock which is not locked. + * Added code in linkdown to unreg if we know login session will be + terminated. + * Removed automap config parameter and fixed up use_adisc logic to + include FCP2 devices. + +Changes from 20041207 to 20041213 + + * Changed version number to 8.0.17 + * Fix sparse warnings by adding __iomem markers to lpfc_compat.h. + * Fix some sparse warnings -- 0 used as NULL pointer. + * Make sure there's a space between every if and it's (. + * Fix some overly long lines and make sure hard tabs are used for + indentation. + * Remove all trailing whitespace. + * Integrate Christoph Hellwig's patch for 8.0.14: if + pci_module_init fails we need to release the transport template. + (also don't print the driver name at startup, linux drivers can + be loaded without hardware present, and noise in the log for + that case is considered unpolite, better print messages only for + hardware actually found). + * Integrate Christoph Hellwig's patch for 8.0.14: Add missing + __iomem annotations, remove broken casts, mark functions static. + Only major changes is chaning of some offsets from word-based to + byte-based so we cans simply do void pointer arithmetics (gcc + extension) instead of casting to uint32_t. + * Integrate Christoph Hellwig's patch for 8.0.14: flag is always + LPFC_SLI_ABORT_IMED, aka 0 - remove dead code. + * Modified preprocessor #ifdef, #if, #ifndef to reflect upstream + kernel submission. Clean build with make clean;make and make + clean;make ADVANCED=1 on SMP x86, 2.6.10-rc2 on RHEL 4 Beta + 1. IO with a few lips and a long cable pull behaved accordingly. + * Implement full VPD support. + * Abort handler will try to wait for abort completion before + returning. Fixes some panics in iocb completion code path. + +Changes from 20041130 to 20041207 + + * Changed version number to 8.0.16 + * Hung dt session fix. When the midlayer calls to abort a scsi + command, make sure the driver does not complete post-abort + handler. Just NULL the iocb_cmpl callback handler and let SLI + take over. + * Add Read check that uses SLI option to validate all READ data + actually received. + + +Changes from 20041123 to 20041130 + + * Changed version number to 8.0.15 + * Ifdef'd unused "binary" attributes by DFC_DEBUG for clean + compiles + * Stop DID_ERROR from showing up along with QUEUE_FULL set by the + Clarion array (SCSI error ret. val. 0x70028) There is no need + for driver to hard fail command which was failed by the target + device. + * Fix for Scsi device scan bug reported on SourceForge. Driver + was returning a DID_ERROR in lpfc_handle_fcp_error causing + midlayer to mark report luns as failing even though it + succeeded. + * Don't ignore SCSI status on underrun conditions for inquiries, + test unit ready's, etc. This was causing us to lose + reservation conflicts, etc + +Changes from 20041018 to 20041123 + + * Changed version number to 8.0.14 + * Added new function "iterator" lpfc_sli_next_iocb_slot() which + returns pointer to iocb entry at cmdidx if queue is not full. + It also updates next_cmdidx, and local_getidx (but not cmdidx) + * lpfc_sli_submit_iocb() copies next_cmdidx into cmdidx. Now it is + the only place were we are updating cmdidx. + * lpfc_sli_update_ring() is split in to two -- + lpfc_sli_update_ring() and lpfc_sli_update_full_ring(). + * lpfc_sli_update_ring() don't to read back correct value of + cmdidx. + * Simplified lpfc_sli_resume_iocb() and its use. + * New static function lpfc_sli_next_iocb(phba, pring, &piocb) to + iterate through commands in the TX queue and new command (at the + end). + * Reduced max_lun to 256 (due to issues reported to some arrays). + Fixed comment, and macro values so def=256, min=1, max=32768. + * Fix an obvious typo/bug: kfree was used to free lpfc_scsi_buf + instead of mempool_free in lpfc_scsiport.c. + * Suppress nodev_tmo message for FABRIC nodes. + * Fixed some usage of plain integer as NULL pointer. + * Bug fix for FLOGI cmpl, lpfc_els_chk_latt error path code + cleanup. + * Fixup lpfc_els_chk_latt() to have Fabric NPorts go thru + discovery state machine as well. + * Fixes to lpfc_els_chk_latt(). + * Use DID not SCSI target id as a port_id and add some missing + locks in lpfc_fcp.c. + * Changed eh_abort_handler to return FAILED if command is not + found in driver. + * Fix crash: paging request at virtual address 0000000000100108 - + a result of removing from the txcmpl list item which was already + removed (100100 is a LIST_POISON1 value from the next pointer + and 8 is an offset of the "prev") Driver runs out of iotags and + does not handle that case well. The root of the proble is in the + initialization code in lpfc_sli.c + * Changes to work with proposed linux kernel patch to support + hotplug. + * Zero out seg_cnt in prep_io failure path to prevent double sg + unmap calls. + * Fix setting of upper 32 bits for Host Group Ring Pointers if in + SLIM. Old code was inappropriately masking off low order bits. + * Use scsi_[activate|deactivate]_tcq calls provided in scsi_tcq.h. + * Integrated patch from Christoph Hellwig (hch@lst.de): don't call + pci_dma_sync_* on coherent memory. pci_dma_sync_* is need and + must be used only with streaming dma mappings pci_map_*, not + coherent mappings. Note: There are more consistent mappings + that are using pci_dma_sync calls. Probably these should be + removed as well. + * Modified lpfc_free_scsi_buf to accomodate all three scsi_buf + free types to alleviate miscellaneous panics with cable pull + testing. + * Set hotplug to default 0 and lpfc_target_remove to not remove + devices unless hotplug is enabled. + * Fixed discovery bug: plogi cmpl uses ndlp after its freed. + * Fixed discovery bug: rnid acc cmpl, can potentially use ndlp + after its freed. + * Modularize code path in lpfc_target_remove(). + * Changes to support SCSI hotplug (ifdef'ed out because they need + kernel support USE_SCAN_TARGET requires kernel support to export + the interface to scsi_scan_target and to move the SCAN_WILD_CARD + define to a general scsi header file. USE_RESCAN_HOST requires + kernel support to export an interface to scan_scsi_host() with + the rescan flag turned on). + * Removed redundant variable declaration of lpfc_linkdown_tmo. + * Fix for large port count remove test. + * Added check to see if BAR1 register is valid before using BAR1 + register for programming config_port mail box command. + * Added lpfc_scsi_hotplug to enable/disable driver support of SCSI + hotplug. + * Changed lpfc_disc_neverdev() to lpfc_disc_illegal() and changed + lpfc_disc_nodev() to lpfc_disc_noop(). Adjusted appropriate + events to use these routines. + * Add support for SCSI device hotplug. + * Take dummy lpfc_target's into account for lpfc_slave_destroy(). + * Bug fix to store WWPN / WWNN in NameServer / FDMI lpfc_nodelist + entries. + * Added slavecnt in lpfc_target for diagnostic purposes. + * Added lpfc_hba load/unload flags to take care of special cases + for add/remove device. + * Have target add/remove delay before scanning. + * Have rmmod path cleanup blocked devices before scsi_remove_host. + * Added a #define for msleep for 2.6.5 kernels. + * In reset bus handler if memory allocation fails, return FAILED + and not SUCCESS. + * Have lpfc eh handlers, bus_reset and lun_reset, wait for all + associated I/Os to complete before returning. + * Fix memset byte count in lpfc_hba_init so that + LP1050 would initialize correctly. + * Backround nodev_timeout processing to DPC This enables us to + unblock (stop dev_loss_tmo) when appopriate. + * Fix array discovery with multiple luns. The max_luns was 0 at + the time the host structure was intialized. lpfc_cfg_params + then set the max_luns to the correct value afterwards. + * Remove unused define LPFC_MAX_LUN and set the default value of + lpfc_max_lun parameter to 512. + * Reduced stack usage of lpfc_hba_init. + * Cleaned up the following warning generated by + scripts/checkincludes.pl lpfc_fcp.c: scsi/scsi_cmnd.h is + included more than once. + * Replaced "set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout(timeout)" with "msleep(timeout)". + * Fixnode was loosing starget when rediscovered. We saw messages + like: lpfc 0000:04:02.0: 0:0263 Cannot block scsi target as a + result. Moved starget field into struct lpfc_target which is + referenced from the node. + * Add additional SLI layer logging in lpfc_sli.c. + * Ignore more unexpected completions in lpfc_nportdisc.c. + * Can not call lpfc_target_unblock from the soft interrupt + context. It seems to be not nessasery to unblock target from + nodev timeout. + * Introduce and use less lethal event handler for unexpected + events in lpfc_nportdisc.c. + * Can not call fc_target_(un)block() functions with interrupts + disabled in lpfc_scsiport.c. + * Added new configuration parameter, lpfc_max_luns range 1-32768, + default 32768. + * Allow lpfc_fcp.c to call lpfc_get_hba_sym_node_name(). + * Increase nodev timeout from 20 seconds to 30 seconds. + * Replace some kfree((void*)ptr) with kfree(ptr). + * Make 3 functions static: lpfc_get_hba_sym_node_name, + lpfc_intr_prep and lpfc_setup_slim_access. Move lpfc_intr_prep + and lpfc_setup_slim_access so they're defined before being used. + * Remove an unecessary list_del() in lpfc_hbadisc.c. + * Set nlp_state before calling lpfc_nlp_list() since this will + potentially call fc_target_unblock which may cause a race in + queuecommand by releasing host_lock. + * Since lpfc_nodev_tmo < dev_loss_tmo remove queuecommand + DID_BAD_TARGET return for now. + * Fix a problem with rcv logo. + * Remove unused portstatistics_t structure. + * Remove #if 0 and unnecessary checks in lpfc_fcp.c. + * Simplify lpfc_issue_lip: Extra layer of protection removed. + * Grab lock before calling lpfc_sli_issue_mbox(phba, pmb, + MBX_NOWAIT) in lpfc_sli_issue_mbox_wait(). + +Changes from 20040920 to 20041018 + + * Changed version number to 8.0.13 + * Hide some attributes using #ifndef DFC_DEBUG ... #endif. + * Modify Makefile to (1) make BUILD_NO_DEBUG=1 will hide some + (binary) attributes (2) make BUILD_FC_TRANS=0 will build driver + for 2.6.5 kernel with block/unblock patch. + * Modified #ifdef names. + * Added support for proposed FC transport host attributes (which + replaces some of the attributes we had local to the driver). + Removed the binary statistics sysfs attribute. + * Added extra ELS verbose logging for ELS responses. + * Added recognition for BUILD_FC_TRANS=2 to Makefile to define + FC_TRANS_VER2. + * Add a pointer for link stats allocation. + * Exported lpfc_get_hba_sym_node_name for use by FC_TRANS_VER2 + sysfs routines. + * Fix discovery problem in lip testing: if device sends an ELS cmd + (i.e. LOGO) before our FLOGI completes it should be LS_RJT'ed. + * Moved #defines around to provide target_add/remove for upstream + kernel deliverables only not SLES9. Provided ifdefs to #include + target_block/unblock only if FC_TRANS_VER1. + * Add sanity check in lpfc_nlp_list move setting nlp_Target + outside #ifdef. + * Added a blocked member to the lpfc_target structure for + block/unblock. This member allows the driver to know when to + unblock for pci_remove_one or pci_add_one. #ifdef'd some more + block/unblock stuff and removed some defensive checks from + target_block/unblock. + * Moved + 5 second window to dev_loss_tmo setting and updated + comments. + * Removed NULL target check from target_block/unblock and fixed up + a few comments. + * Enable sysfs attributes on 2.6.5 kernels and remove extra + compatibility code. + * Remove any and all trailing whitespace. + * Added message 0718 and return error when dma_map_single fails. + * Changed the fcpCntl2 commands to include an FCP_ prefix to get + rid of build warnings on later 2.6.9-rc kernels. Build + conflicts with scsi/scsi.h. Remove inclusions of scsi/scsi.h + from hbadisc.c, sli.c, and fcp.c since these modules had no + dependencies on scsi.h. + * Fixed a bug with RSCN handling. A RSCN received on one device, + shouldn't affect other devices not referenced by the RSCN. + * Moved #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,6) to include + lpfc_jedec_to_ascii to prevent warning in SLES 9. + * Update Makefile to account for SLES 9 and scsi-target upstream + kernel. + * This checkin provides block/unblock hooks for the upstream scsi + target kernel and 2.6.5 on SLES9 SP1 with the block/unblock + patch. + * Discovery changes regarding setting targetp->pnode and + ndlp->nlp_Target Ensure fc_target_* routines are called properly + from discovery. Remove list_del's from lpfc_cleanup(). Ensure + all the lpfc_consistent_bind_* routines don't set any driver + structure objects. + * Fix for timeout of READ_LA or READ_SPARAM mailbox command + causing panic. + * Cleanup list_del()'s for Discovery ndlp lists. + * Bug fixes for some insmod/rmmod crashes, link down crashes and + device loss crashes. + * Removed NLP_SEARCH_DEQUE. + * Call lpfc_target_unblock only if the targetp is nonNull and with + the host_lock held. + * Added qcmdcnt back along with misc bug fixes to discovery. + * Changed tgt_io to outfcpio lpfc_fcp.c. + * Fixed errors caused by LIP and cable pulls both with and without + block/unblock patch. + * For now we have to call fc_target_unblock and fc_target_block + with interrupts enabled. + * Save seg_cnt from dma_map_sg. Save scatter-gather start address + and pass back to dma_unmap_sg in error with seg_cnt. + * Incorporating block/unblock calls into driver with ifdefs. This + change is supported by scsi-target-2.6 kernel and forward only. + * Merged in some discovery bug fixes and added tgt io counters. + * Added sysfs attributes/interfaces: read only attribute + "management_version" and write only attribute "issue_lip". + * Fix build on big endian machines: while #if was OK with + __BIG_ENDIAN which defined as 4321, __BIG_ENDIAN_BITFIELD has to + be tested with #ifdef because it does not have any value, it is + either defined or not. + * Add fabric_name and port_type attributes. + * Change mdelay to msleep. mdelay works, but wastefully uses cpu + resources without a lock held. Revert to msleep. Tested with + sg_reset for bus and three attached targets. + * Added the customary #ifndef...#define...#endif to + lpfc_version.h. + * Integrate patches from Christoph Hellwig: two new helpers common + to lpfc_sli_resume_iocb and lpfc_sli_issue_iocb - singificant + cleanup of those two functions - the unused SLI_IOCB_USE_TXQ is + gone - lpfc_sli_issue_iocb_wait loses it's flags argument + totally. + * Fix in lpfc_sli.c: we can not store a 5 bit value in a 4-bit + field. + * Moved some routines out of lpfc_fcp.c into more appropriate + files. + * Whitespace cleanup: remove all trailing whitespace. + * Make lpfc_disc_ndlp_show static to lpfc_fcp.c. + * Remove leftover printk and replace some with + printk(KERN_WARNING) + * Trivial: fix a few long lines and a soft tab. + * Remove warnings generated by Sparse against driver (make + C=1). Mostly these are "using integer as pointer warnings" + i.e. use NULL instead of 0. + * Integrated patch from Christoph Hellwig: Quite a lot of changes + here, the most notable is that the phba->slim2p lpfc_dmabuf goes + away in favour of a typede pointer and a dma_addr_t. Due to the + typed pointer lots of the cast mess can go away, and while at it + I also replaced the messy SLI2_SLIM_t with a simple struct + lpfc2_sli2_slim that only contains the part of the union we care + about while using SLI2_SLIM_SIZE for all size calculations + directly. + * Integrated patch from Christoph Hellwig: This streamlines the + I/O completion path a little more, especially taking care of + fast-pathing the non-error case. Also removes tons of dead + members and defines from lpfc_scsi.h - e.g. lpfc_target is down + to nothing more then the lpfc_nodelist pointer. + * Added binary sysfs file to issue mbox commands + * Replaced #if __BIG_ENDIAN with #if __BIG_ENDIAN_BITFIELD for + compatibility with the user space applications. + * Decrease the amount of data in proc_info. + * Condense nodelist flag members. + * Expand INFO for discovery sysfs shost entries. + * Notify user if information exceeds 4k sysfs limit. + * Removed a bunch of unused #defines. + * Added initial sysfs discovery shost attributes. + * Remove unused #defines lpfc_disc.h. + * Fixed failMask nodelist settings. + * Cleanup some old comments / unused variables. + * Add LP101 to list of recognized adapters. + +Changes from 20040908 to 20040920 + + * Changed version number to 8.0.12 + * Removed used #defines: DEFAULT_PCI_LATENCY_CLOCKS and + PCI_LATENCY_VALUE from lpfc_hw.h. + * Changes to accomodate rnid. + * Fix RSCN handling so RSCN NS queries only effect NPorts found in + RSCN data. + * If we rcv a plogi on a NPort queued up for discovery, clear the + NLP_NPR_2B_DISC bit since rcv plogi logic will force NPort thru + discovery. + * Ensure lpfc_target is also cleaned up in lpfc_cleanup(). + * Preliminary changes for block/unblock kernel API extensions in + progress with linux-scsi list. These are name changes and + prototype changes only. + * Added send_abts flag to lpfc_els_abort. For rcv LOGO when ADISC + sent, the XRI of the LOGO rcv'ed is the same as the ADISC + sent. Thus we cannot ABTS the ADISC before sending the LOGO ACC. + * Weed out some unused fc_flags. Add FC_DISC_TMO. + * board_online sysfs attribute added to support libdfc functions + InitDiagEnv and SetBrdEnv. + * Streamline code in lpfc_els_retry fixup abort case in + lpfc_els_timeout_handler(). + * Flush discovery/ELS events when we bring SLI layer down. + * ctlreg and slimem binary attributes added to support libdfc + read/write mem/ctl functions. + * Integrated Christoph Hellwig's patch: Cleanup + lpfc_sli_ringpostbuf_get. + * Modified lpfc_slave_alloc and lpfc_slave_destroy to allocate and + free a dummy target pointer. This allows queuecommand to skip + the NULL target pointer check and avoid the console spam when + slave_alloc fails. + * Fix cfg_scan_down logic, it was reversed. + * Init list head ctrspbuflist. + * Change name of lpfc_driver_abort to lpfc_els_abort since it is + only valid for ELS ring. + * Remove unused third argument for lpfc_consistent_bind_get(). + * Fix up iotag fields in lpfc_prep_els_iocb(). + * Remove log message on code path triggered by lpfc_els_abort(). + * Set host->unique_id in lpfc_fcp.c. + * Removed deadwood: lpfc_target.pHba not necessary anymore. + * Integrated patch from Christoph Hellwig: remove dead + SLI_IOCB_POLL handling. + * Integrated patch from Christoph Hellwig: Streamline I/O + submission and completion path a little. + * Remove unnecessary lpfc_brd_no. Ensure brd_no assignment is + unique. + * Removed unused MAX_FCP_LUN. + * Use mod_timer instead of add_timer for fdmi in lpfc_ct.c. + * Fixed misc discovery problems. + * Move stopping timers till just before lpfc_mem_free() call. + * Fix up NameServer reglogin error path. + * Cleanup possible outstanding discovery timers on rmmod. + * Fix discovery NPort to NPort pt2pt problem. + * Get rid of ip_tmofunc / scsi_tmofunc. + * Integrated patch from Christoph Hellwig: + lpfc_disc_done/lpfc_do_dpc cleanup - lpfc_disc_done can return + void - move lpfc_do_dpc and lpfc_disc_done to lpfc_hbadisc.c - + remove checking of list emptiness before calling lpfc_disc_done, + it handles the emtpy list case just fine and the additional + instructions cost less then the bustlocked spinlock operations. + * Integrated patch from Christoph Hellwig: This adds a new 64bit + counter instead, brd_no isn't reused anymore. Also some tiny + whitespace cleanups in surrounding code. + * Reorder functions in lpfc_els.c to remove need for prototypes. + * Removed unsed prototypes from lpfc_crtn.h - + lpfc_ip_timeout_handler, lpfc_read_pci and lpfc_revoke. + * Removed some unused prototypes from lpfc_crtn.h - + lpfc_scsi_hba_reset, lpfc_scsi_issue_inqsn, + lpfc_scsi_issue_inqp0, lpfc_scsi_timeout_handler. + * Integrated patch from Christoph Hellwig: remove TRUE/FALSE + usage. + * Integrated patch from Christoph Hellwig: Remove unused function + prototypes lpfc_set_pkt_len and lpfc_get_pkt_data from + lpfc_crtn.h - fixes build warnings. + * Removed unused struct lpfc_dmabufip definition from lpfc_mem.h. + * Removed pre-2.6.5 MODULE_VERSION macro from lpfc_compat.h. + * Fixing missing static and removing dead code. + * Adding nodewwn, portwwn and portfcid shost attributes. + * Initial support for CT via sysfs. request payloads of size less + than PAGE_SIZE and rsp payloads of size PAGE_SIZE are supported. + Driver maintains a list of rsp's and passes back rsp's + corresponding to the pid of the calling process. + * Support for RefreshInformation, GetAdapterAttributes, + GetPortStatistics. + * Make nodev-tmo default to 20 seconds. + * Fix up some DSM error cases, unreg_login rpi where needed. + * Fix up comments for fc_target_block / fc_target_unblock. + * Fix up code for scsi_block_requests / scsi_unblock_requests. + * Add NLP_FCP_TARGET for nodeinfo support. + * Move suspend/resume in lpfc_nlp_list under appropriate case - + Used host_lock for DPC to avoid race (remove dpc_lock) + * Fix some corner cases for PLOGI receive - simplify error case + for cmpl_reglogin_reglogin_issue. + * Bug fix for ppc64 EEH MMIO panic - always do readl after + writel's of HBA registers to force flush. + * Get rid of initial static routine declarations in lpfc_hbadisc.c + and lpfc_els.c. + * Updates to discovery processing. + +Changes from 20040823 to 20040908 + + * Changed version number to 8.0.11 + * Removed persistent binding code. + * Display both ASC and ASCQ info. + * Fixed link down->up transitions when linkdown tmo expires. Fix + was in the defensive error checking at the start of + queuecommand. + * Removed lpfc_scsi_timeout_handler as this timer is no longer + required. The midlayer will exhaust retries and then call + lpfc_abort_handler, lpfc_reset_lun_handler, and + lpfc_reset_target_handler. + * Minimal support for SCSI flat space addressing/volume set + addressing. Use 16 bits of LUN address so that flat + addressing/VSA will work. + * Changed 2 occurences of if( 1 != f(x)) to if(f(x) != 1) + * Drop include of lpfc_cfgparm.h. + * Reduce stack usage of lpfc_fdmi_cmd in lpfc_ct.c. + * Add minimum range checking property to /sys write/store + functions. + * Fix display of node_name and port_name via fc transport + attr. + * Removed biosparam code. + * Removed range checking. phba->config[] array elements are now + embedded into the hba struct. lpfc_config_setup() has been + removed. + * Collapsed lpfc_scsi_cmd_start into lpfc_queuecommand and cleaned + up combined routines. + * Removed unused prototypes myprint and + lpfc_sched_service_high_priority_queue. + * Removed unused function lpfc_nodev. + * Removed scsi_cmnd->timeout_per_command cancelation. SCSI midlayer + now times out all commands - FW is instructed to not timeout. + * Removed polling code from lpfc_scsi_cmd_start. Reorganized + queuecommand and cmd_start some. + +Changes from 20040810 to 20040823 + + * Changed version number to 8.0.10 + * Additional timer changes as per Arjan / Christoph's comments. + * Used mod_timer() instead of del_timer_sync() where appropriate. + * Fixed a use after free case (panic on 2.6.8.1 with + CONFIG_DEBUG_SLAB set). + * Fix compile warning in lpfc_fcp.c. + * Minor fix for log message, that prints unassigned brdno which is + zero. + * Move scsi_host_alloc() to the beginning of probe_one(). This + ensures that host_lock is available at later stages and also + avoids tons of unnecessary initializing if host_alloc() + fails. + * Removed else clause from lpfc_slave_configure that set + sdev->queue_depth. The driver informs the midlayer of its + setting in the template and only overrides if queue tagging is + enabled. + * Added PCI_DEVICE_ID_ZEPHYR and PCI_DEVICE_ID_ZFLY (Junior + Zephyr) support + +Changes from 20040730 to 20040810 + + * Changed version number to 8.0.9 + * Removed per HBA driver lock. Driver now uses the host->host_lock + * Restored support for the 2.6.5 kernel for those linux distributions + shipped with the 2.6.5 kernel. + * Applied patch from Christoph Hellwig (hch@infradead.org) as follows + "[PATCH] use scsi host private data in ->proc_info. + * Applied patch from Christoph Hellwig (hch@infradead.org) as follows + "Re: [Emulex] Ready for next round. This patch cleans up the memory + allocation routines a little and fixes a missing mempool_destroy and + some missing error handling." + * Changed pointers assignments from 0 to NULL. + * Added fixes to the lpfc_reset_lun_handler and lpfc_reset_bus_handler + entry points that caused kernel to Oops or hang. + * Added fixes to targetless hosts that caused modprobe and insmod to hang. + * Ongoing cleanup to many files + +Changes from 20040723 to 20040730 + + * Changed version number to 8.0.8 + * Removed unused LPFN_DRIVER_VERSION #define. + * Folded lpfc_findnode_scsiid into lpfc_find_target, its only + caller. + * Removed 2 unneeded arguments to lpfc_find_target (lun and + create_flag). + * Make lpfc_sli_reset_on_init = 1 + * Minor cleanup to quieten sparse. + * Removed missing function = 0 in tmo routine in lpfc_els.c. + * Moved additional binding parameters into lpfc_defaults.c: + lpfc_automap / lpfc_fcp_bind_method + * Use msecs_to_jiffies() where applicable. + * Only use queue depth attribute only after SLI HBA setup was + completed. + * Put in memory barriers for PPC + * Added PCI_DEVICE_ID_HELIOS and PCI_DEVICE_ID_JFLY (Junior + Helios) support + * Added 4&10 gigabit choices in user option link_speed + * Updated timer logic: Set timer data after init_timer use + timer_pending() instead of expires. + * Removed some remnants of IP over FC support from Kconfig and + Makefile. + * Remove redundant prototypes for lpfc_handle_eratt, + lpfc_handle_latt and lpfc_read_pci. + * Ongoing cleanup of lpfc_init.c. + * Changed LPFC_CFG_DFT_HBA_Q_DEPTH -> LPFC_CFG_HBA_Q_DEPTH. + * Another cleanup stab at lpfc_ct.c. Remove castings, structure + code sanely, remove redundant code, reorganize code so that + functions are invoked after definition. + +Changes from 20040716 to 20040723 + + * Changed version number to 8.0.7 + * Cleanup of lpfc_ct.c. Removed number of casts, removed tons of + dead/redundant code, cleaned up badly and poorly written code, + cleaned up return values. + * Fixed Persistent binding implementation + * Removed all references to lpfc_scsi_req_tmo + * Removed last references to lun_skip config parameter. + * Removed LPFC_DEV_RPTLUN node failure bit because we don't issue + REPORT_LUNS from the driver anymore. + * Removed LUN-tracking in driver. Removed lpfc_lun struct and + moved any functionality we still need to lpfc_target. + * Added new lpfc_jedec_to_ascii() call and replace two instances + of duplicate code with calls to this function. + * Removed Volume Set Addressing handling on LUN IDs. + * Applied patch from Christoph Hellwig (hch@infradead.org) that + removes dead code belonging to lpfc_build_scsi_cmnd() and its + call path. This is related to the recently removed report_lun + code. + +Changes from 20040709 to 20040716 + + * Changed version number to 8.0.6 + * Removed internal report LUNs usage. Removed functions: + lpfc_disc_issue_rptlun, lpfc_disc_cmpl_rptlun, + lpfc_disc_retry_rptlun and their use. + * Removed usused scheduler prototypes in lpfc_crtn.h + * Replace lpfc_geportname() with generic memcmp(). + * Rearrange code in lpfc_rcv_plogi_plogi_issue() to make it a + little more readable. + * Remove redundant port_cmp != 2 check in if + (!port_cmp) { .... if (port_cmp != 2).... } + * Clock changes: removed struct clk_data and timerList. + * Clock changes: seperate nodev_tmo and els_retry_delay into 2 + seperate timers and convert to 1 argument changed + LPFC_NODE_FARP_PEND_t to struct lpfc_node_farp_pend convert + ipfarp_tmo to 1 argument convert target struct tmofunc and + rtplunfunc to 1 argument * cr_count, cr_delay and + discovery_threads are only needed to be module_params and not + visible via sysfs. + +Changes from 20040614 to 20040709 + + * Changed version number to 8.0.5 + * Make lpfc_info static. + * Make lpfc_get_scsi_buf static. + * Print a warning if pci_set_mwi returns an error. + * Changed SERV_PARM to struct serv_parm. + * Changed LS_RJT to struct ls_rjt. + * Changed CSP to struct csp. + * Changed CLASS_PARMS to struct class_parms. + * Some cosmetic coding style cleanups to lpfc_fcp.c. + * Providing a sysfs interface that dumps the last 32 + LINK_[UP|DOWN] and RSCN events. + * Get rid of delay_iodone timer. + * Remove qfull timers and qfull logic. + * Convert mbox_tmo, nlp_xri_tmo to 1 argment clock handler + * Removed duplicate extern defs of the bind variables. + * Streamline usage of the defines CLASS2 and CLASS3, removing + un-necessary checks on config[LPFC_CFG_FCP_CLASS]. + * Moving the persistent binding variables to new file + lpfc_defaults.c + * Changed LPFC_SCSI_BUF_t to struct lpfc_scsi_buf. + * Moved config specific code from probe_one() into + config_setup(). Removing a redundant check on scandown value + from bind_setup() as this is already done in config_setup(). + * Changed LPFC_SLI_t to struct lpfc_sli. + * Changed FCP_CMND to struct fcp_cmnd. + * Changed FCP_RSP to struct fcp_rsp. + * Remove the need for buf_tmo. + * Changed ULP_BDE64 to struct ulp_bde64. + * Changed ULP_BDE to struct ulp_bde. + * Cleanup lpfc_os_return_scsi_cmd() and it's call path. + * Removed lpfc_no_device_delay. + * Consolidating lpfc_hba_put_event() into lpfc_put_event(). + * Removed following attributes and their functionality: + lpfc_extra_io_tmo, lpfc_nodev_holdio, lpfc_delay_rsp_err, + lpfc_tgt_queue_depth and lpfc_check_cond_err. + * Clock changes consolidating timers, just in the struct lpfc_hba, + to get rid of clkData and pass only one argument to timeout + routine. Also, removing need for outstanding clock linked list + to stop these timers at rmmod. + * Move lpfc.conf contents into lpfc_fcp.c. Removing per adapter + attributes in favor of global attributes. + * Fix a potential null pointer reference of pmbuf in lpfc_ct.c. + * On reset_lun, issue LUN_RESET as opposed to ABORT_TASK_SET. + * Removed SCSI_REQ_TMO related code. + * Introducing two new defines LPFC_ATTR_R and LPFC_ATTR_RW that do + a module_param, MODULE_PARM_DESC, lpfc_param_show, + [lpfc_param_store] and CLASS_DEVICE_ATTRIBUTE. + * Properly clean up when allocation of a linked BDE fails in the + SCSI queuecommand path. + * Fail SCSI command if dma_map_sg call fails. + * Remove unused macros SWAP_ALWAYS and SWAP_ALWAYS16. + * Reset context2 to 0 on exit in + lpfc_sli_issue_iocb_wait_high_priority() and + lpfc_sli_issue_iocb_wait(). + * Arranging lpfc_scsiport.c to follow style of use after + definition. This removes the need for the cruft of forward + declarations. Also removing a redundant #define ScsiResult as it + already available elsewhere. + * Applying "Streamline lpfc error handling" patch from Christoph + Hellwig (hch@infradead.org) with following modifications: fix + mem leaks, remove some misplaced code that need not be there, + print a message on exit (old code prints two (entry/exit)), make + ret values consistent (either 1/0 or SUCCESS/FAILURE), keep all + eh routines in a single file (lpfc_scsiport.c). + * Move contents of lpfc_module_param.h into lpfc_fcp.c. + * Changed sysfs attributes to CLASS_DEVICE_ATTRIBUTES (previously + DEVICE_ATTRIBUTES). They now appear in + /sys/class/scsi_host/hostx (previously in + /sys/bus/pci/drivers/lpfc/devx). + * Removed lpfc_syfs.h and lpfc_sysfs.c. + * Cleanup of config params. Throttle params have been removed. + max_lun has been removed. max_target is replaced with a #define, + lun_skip is removed. Remove ipfc config params and related + code. + * Changed DMABUF_t usage to struct lpfc_dmabuf. + * Downsizing iCfgParam structure to include a_string, a_low, a_hi + and a_default values only. + * Free SCSI buf safety memory pool on shutdown to eliminate memory + leak. + * Change lpfc_printf_log to a #define. Also include phba->brd_no + and newline in the print string rather than in the #define. + * Remove code that optionally locates Host Group Pointers in host + memory SLIM since this is no longer needed for PPC64, once + CONFIG_PORT uses HBA's view of its BAR0. + * Removed the forward declarations of the sli functions and + rearranging the code in lpfc_sli.c. + * Removed the preamble functionality from logging. + * Make lpfc_sli_hba_setup() return negative error codes on error + and correct the comment left over in lpfc_fcp.c + * Removed the lpfc_loadtime variable. + * Put a space between all ifs and their open parens '('. + * Change Studly_Caps LPFC_SCSI_BUF_t to struct lpfc_scsi_buf. + * Fixed insmod hang after hardware error. + * Relocated scsi_host alloc to before we enable the interrupt + handler + * Add .tmp_versions directory to Makefile clean target. This + directory is created in the 2.6.5+ build process (with Red Hat + kernels at least). + * Changing phba->config to kmalloc lpfc_icfgparam and not + *phba->config. This is manifesting itself as a panic in + pci_release_region(). + * Fix for firmware download / board reset problem. + * Integrated patch from Christoph Hellwig (hch@infradead.org) to + reorganize and cleanup lpfc_fcp.c + * Don't abort commands immediately when there is an RSCN event to + give driver time to rediscover targets before the midlayer + retries the SCSI commands. + +Changes from 20040604 to 20040614 + + * Changed version number to 8.0.4 + * Removed lpfc_valid_lun function. + * Added scsi_buf safety pool to address scsi_buf failures in + queuecommand under low memory conditions. Allocations now come + from kmalloc initially, but if kmalloc fails, the allocation + comes from the safety pool. + * Modified lpfc_slave_alloc to only set the scsi_device->hostdata + pointer if the driver has discovered the target. This routine + always returns success now as well since no error ever occurs in + the alloc routine. + * Mask only info and warning messages. Print all error messages + irrespective of mask. + * Removing lpfc_log_chk_msg_disabled() + * Changed lpfc_printf_log to take struct lpfc_hba * directly + instead of a "board number". + * Convert dma_sync_single to pci_dma_sync_single_for_{device/cpu}. + * Implemented new style log messages. The message strings are now + embedded in the call to lpfc_printf_log. + * Decreased FLOGI discovery timeout to 20 seconds. + * On error in lpfc_pci_probe_one() return -1 and not 1. + * Allow for board numbers that are not sequential, paving the way + for hotplug support. + * scsi_add_host() can fail, so wrap it around in an if(). Also + initiate scsi_scan_host() after attaching the sysfs attributes. + * lpfc_release_version is used only in lpfc_ct.c, so move it there + and mark it as static. + * Removed lpfc_sleep_ms and replaced with mdelay or schedule calls + directly + * Removed all (struct list_head *) casts from clkData-related list + handling in list_add, list_del macros. + * Removed EXPORT_SYMBOLs. + * Removed LPFC_MIN_QFULL and lpfc_qthrottle_up. + * Replace LPFCSCSITARGET_t with struct lpfc_target. + * Replace LPFCSCSILUN_t with struct lpfc_lun. + * Remove unused struct declarations (fcPathId and fcRouteId) from + lpfc_scsi.h. + * Rewrite use of FC transport attributes. + * Fix crash when link is lost. This was due to lpfc_delay_iodone + calling list_del on an object that was never put on a list. + * Remove trailing spaces at the end of all lines. + * Set MAX_FCP_TARGET to 256 from 0xff. Set MAX_FCP_LUN and + MAX_FCP_CMDS to their decimal equivalents and updated + documentation. + +Changes from 20040526 to 20040604 + + * Changed version number to 8.0.3 + * Completed sysfs FC transport support. + * Removed unused fields in SCSI LUN and SCSI Target structures: + void *pTargetProto; void *pTargetOSEnv; void *pLunOSEnv; + * Modified list_for_each to list_for_each_entry. Modified + list_for_each_safe to list_for_each_entry_safe. + * Remove lpfc_dfc.h file. + * Changed pHba->phba, pCommand->pcmd + * Changed plogi_ndlp -> plogindlp, pos_tmp->postmp, pRsp->prsp, + pCmd->pcmd + * Changed pText -> ptext + * Changed p_tmp_buff -> ptmpbuff + * Changed pBufList -> pbuflist, pRsp -> prsp, pCmd -> pcmd + * Changed *pos_tmp -> *postmp, *p_mbuf -> *pmbuf + * Following changes are made to the SCSI fast path: Added + DMA_BUF_t member to the lpfc_scsi_buf_t. This will reduce a + memory allocation in the scsi fast path. Added check for + targetp == NULL in the scsi fast path. Increased number of + scatter gather entries in lpfc_scsi_dma_ext to 4 from 3 and + changed the size of lpfc_scsi_dma_ext to 264 + * Fixing some missing static lpfc_nportdisc.c. + * Reordered #include lines so that lpfc.h doesn't have to #include + other header files. + * Remove lpfc_get_hba_sym_node_name() as a global EXPORT and make + it static. + * Move struct clk_data definition from lpfc_hw.h to lpfc_sli.h. + * Changed LPFC_IOCBQ_t to struct lpfc_iocbq. + * Changed LPFC_SLI_RING_t to struct lpfc_sli_ring. + * Changed LPFC_NODELIST_t to struct lpfc_nodelist. + * Rearranged lpfc_nportdisc.c by moving state machine array + (lpfc_disc_action) and the one function that uses it, + lpfc_disc_state_machine, to the end of the file, removing the + need for the raft of prototypes at the top. + * Changed LPFC_BINDLIST_t to struct lpfc_bindlist. + * Removed lpfc_issue_ct_rsp(), lpfc_sleep(), lpfc_add_bind(), + lpfc_del_bind(), lpfc_sli_wake_mbox_wait() and + lpfc_sli_issue_mbox_wait(). + * Fixed a large number of overly-long lines. + * Fixed some discovery problems: Introduced deferred ndlp removal + when in DSM to avoid panic when in nested DMSs Fix NportId + fffc01 handling to not relogin after LOGO fixed handling of LOGO + on PLOGI issue. + * Changed SLI_CT_REQUEST to lpfc_sli_ct_request. + * Changed NAME_TYPE to struct lpfc_name. + * Changed lpfcCfgParam_t to struct lpfc_cfgparam. + * Changed LPFC_STAT_t to struct lpfc_stats. + * Changed HBAEVT_t to struct lpfc_hba_event. + * Changed Studly_Caps lpfcHBA_t to struct lpfc_hba. + * Removed no longer used tasklet_running flag. + * Removing *PSOME_VAR typedefs and using SOME_VAR* directly. + * Changing .use_clustering to ENABLE_CLUSTERING. + * Modify lpfc_queuecommand to return SCSI_MLQUEUE_HOST_BUSY when + it can't queue a SCSI command. Also, remove cmnds_in_flight + member of struct lpfcHBA for 2.6 kernels as it was only needed + to determine what to return from queuecommand. + * Change return type of lpfc_evt_iocb_free to void as it doesn't + return anything. + * Remove unused cmnd_retry_list and in_retry members in struct + lpfcHBA. + * Remove some instances of unneeded casting of kmalloc's return in + lpfc_scsiport.c + * Remove lpfc_linux_attach() and lpfc_linux_detach(). Integrate + them into lpfc_probe_one() and lpfc_release_one() respectively. + * Remove lpfc_num_iocbs, lpfc_num_bufs module parameters + * Remove #defines for NUM_NODES, NUM_BUFS and NUM_IOCBS + +Changes from 20040515 to 20040526 + + * Changing version number to 8.0.2. + * Including dma-mapping.h as one of the include headers. Also + rearrange the #include order. + * Make functions static as appropriate. + * queuecommand() will now return SCSI_MLQUEUE_HOST_BUSY instead of + 1 to backpressure midlayer. + * Removed function prototypes for lpfc_start_timer() and + lpfc_stop_timer() + * Changed timer support to be inline. Clk_data is now declared + right next to the corresponding timer_list entry so we don't + have to allocate these clk_data dynamically. + * Add readls after writels to PCI space to flush the writes. + * Fix misspelled word "safety" in function names. + * Fix up comments in lpfc.conf for per HBA parameters to reflect + new implementation. + * Change lpfc_proc_info handler to get the Nodename from + fc_nodename and not fc_portname. + * Fix up some comments and whitespace in lpfc_fcp.c. + * Formatting changes: get rid of leading spaces in code + * Move discovery processing from tasklet to a kernel thread. + * Move ndlp node from unmap list to map list if ADISC completed + successfully. + * Flush all the ELS IOCBs when there is a link event. + * LP9802 qdepth is twice the LP9802DC qdepth. Delay + elx_sched_init after READ_CONFIG to get max_xri from the + firmware. Reset ELX_CFG_DFT_HBA_Q_DEPTH to max_xri after + READ_CONFIG + * Fix fc_get_cfg_parm() to be more robust and support embedded hex + values. The lpfc_param's are now defined as: + lpfc_log_verbose="lpfc:0,lpfc0:0x10,lpfc1:4,lpfc100:0xffff" The + "," delimter does not matter. It can be anything or not exist at + all. ie param = "lpfc:0lpfc0:0x10.lpfc1:4txtlpfc100:0xffff" will + also work. Additionally the string is treated as case + insensitive. + * Changed all usage of lpfc_find_lun_device() to lpfc_find_lun(). + * Removed unnecessary wrappers lpfc_find_lun_device() and + lpfc_tran_find_lun(). + * Switch from using internal bus/id/lun to similar data from + scsi_device structure. + * Eliminate one-line function lpfc_find_target() + * Added slave_alloc, slave_destory + * lpfc_scsi_cmd_start can now acquire lun pointer from + scsi_device->hostdata, which is setup in slave_alloc. + * Eliminate unnecessary checking on every cmd just to see if we + are accessing the device the first time. + * Remove assumption in lpfc_reset_lun_handler that a valid + lpfc_scsi_buf is hung off of linux's scsi_cmnd->host_scribble + when our reset is called. + +Changes from 20040507 to 20040515 + + * Changed version to 8.0.1 + * Fixed crash on driver rmmod after error injection tests and + lpfc_tasklet deadlock. + * Modified lpfc.conf to remove limit on number of support hosts + * Removed HBAAPI + * Removed duplication of SCSI opcodes from lpfc_fcp.h that are + available in scsi/scsi.h + * Rework module_param usage + * Added MODULE_PARAM_DESC for various module_params + * Removed #define EXPORT_SYMTAB + * Removed #includes of if_arp.h and rtnetlink.h + * Removed string "Open Source" from MODULE_DESC + * Cleanup duplicated string definitions used by MODULE_DESC + * Renamed lpfc_pci_[detect|release] to lpfc_pci_[probe|remove]_one + * Fix formatting of lpfc_driver + * Remove unnecessary memset to 0 of lpfcDRVR + * Attach driver attributes always unless pci_module_init failed + * Remove all one-line wrappers from lpfc_mem. + * Remove lpfc_sysfs_set_[show|store] as it is no longer needed + * Redo lpfc_sysfs_params_[show|store] to one value per attribute rule + * Breakdown lpfc_sysfs_info_show into smaller one value per attribute + * Use device attributes instead of driver attributes where appropriate + * Remove no longer needed EXPORT_SYMBOLs + * Remove some unused code (1600 msg's related) + +Changes from 20040429 to 20040507 + + * Change version to 8.0.0 + * Fix the number of cmd / rsp ring entries in lpfc_fcp.c to match + the divisions setup in lpfc_hw.h. + * Remove phba->iflag reference. + * Several locking improvements. + * Remove functions lpfc_drvr_init_lock, lpfc_drvr_lock, + lpfc_drvr_unlock and lpfc_hipri_*. + * Remove LPFC_DRVR_LOCK and LPFC_DRVR_UNLOCK macros. + * Make lpfc_info() use lpfc_get_hba_model_desc() instead of + rewriting almost identical code. + * Fix 1 overly long line in each of lpfc_cfgparm.h, lpfc_ftp.c and + lpfc_sli.c. + * Fix build for Red Hat 2.6.3 kernel by #defining MODULE_VERSION + only if it isn't already defined. + * Change elx_sli_issue_mbox_wait to return correct error code to + the caller. + * In some of the els completion routines, after calling + lpfc_elx_chk_latt, driver ignores the return code of the + lpfc_elx_chk_latt. This will prevent the discovery state machine + restarting correctly when there are link events in the middle of + discovery state machine running. Fix this by exiting discovery + state machine if lpfc_els_chk_latt returns a non zero value. + * Removed MAX_LPFC_BRDS from lpfc_diag.h + * Removed unused first_check. + * Remove some unused fields and defines. + * Change lpfc-param names to lpfc_param. + * Add use of MODULE_VERSION macro for 2.6 kernels. + * Shorten length of some of the comment lines to make them more + readable. + * Move FCP_* definitions to their own header file, lpfc_fcp.h. + * Remove unused prototypes from lpfc_crtn.h: fcptst, iptst, + lpfc_DELAYMS. + * Remove duplicated prototypes from lpfc_crtn.h: + lpfc_config_port_prep, lpfc_config_port_post, + lpfc_hba_down_prep. + * Removed some unused export_symbols. + * Install driver files into */drivers/scsi/lpfc instead of + */drivers/scsi. + +Changes from 20040426 to 20040429 + + * Declared export symbol lpfc_page_alloc and lpfc_page_free + * Changed lpfc version number to 6.98.3 + * Move the definition of MAX_LPFC_BRDS to the only header file + that uses it (lpfc_diag.h). + * Change lpfc_sli_wake_iocb_wait to do a regular wake_up since + lpfc_sli_issue_iocb_wait now sleeps uninterruptible. + * Replace list_for_each() with list_for_each_safe() when a list + element could be deleted. + * Fix IOCB memory leak + +Changes from 20040416 to 20040426 + + * Change lpfc_config_port_prep() to interpret word 4 of the DUMP + mbox response as a byte-count + * Add info attribute to sysfs + * Minor formatting (spaces to tabs) cleanup in lpfc_sched.h + * Remove unused log message number 732 + * Completing MODULE_PARM -> module_param changes + * Removed unused targetenable module parameter + * Removed locks from lpfc_sli_issue_mbox_wait routine + * Removed code that retry 29,00 check condition + * Removed code that manipulates rspSnsLen. + * Fix use of lun-q-depth config param + * Fix severity inconsistency with log message 249 + * Removed lpfc_max_target from lpfc_linux_attach + * Replace references to lpfcDRVR.pHba[] with lpfc_get_phba_by_inst() + * Change lpfc_param to lpfc-param + * Partially removed 32 HBA restriction within driver. Incorported + lpfc_instcnt, lpfc_instance[], and pHba[] into lpfcDRVR + structure Added routines lpfc_get_phba_by_inst() + lpfc_get_inst_by_phba() lpfc_check_valid_phba() + * Turn on attributes "set" & "params" by default. + * Further formatting/whitespace/line length cleanup on: lpfc_ct.c + lpfc_els.c lpfc_fcp.c lpfc_hbadisc.c lpfc_init.c lpfc_ipport.c + lpfc_mbox.c lpfc_nportdisc.c lpfc_sched.c lpfc_sched.h + lpfc_scsi.h lpfc_scsiport.c lpfc_sli.c and lpfc_sli.h + * Add log message 249 to log any unsupported device addressing + modes encountered. + * Add support for 256 targets and 256 LUNs + * Fixed panic in lpfc_linkdown. + * Removed (struct list_head*) casting in several calls to list_del + * Free irq reservation and kill running timers when insmod or + modprobe are killed via ctrl-c + * Remove drivers/scsi from include path + * Wrap use of log message 311 in macro + * Detect failure return from pci_map_sg call in lpfc_os_prep_io + * Fix use-after-free of IOCB in lpfc_sli_process_sol_iocb which + was causing an Oops on 2.6.5 kernel. + * Cleanup use of several gotos not used for error exit. + * Replace memcpy_toio() and memcpy_toio() with endian-dependent + lpfc_memcpy_to_slim() and lpfc_memcpy_from_slim() so that for + big endian hosts like PPC64, the SLIM is accessed 4 bytes at a + time instead of as a byte-stream. + +Changes from 20040409 to 20040416 + + * The scsi_register and scsi_alloc_host OS calls can fail and + return a zero-valued host pointer. A ctrl-C on 2.6 kernels + during driver load will cause this and the driver to panic. + Fixed this bug. Also found a bug in the error_x handling with + lpfc_sli_hba_down - it was in the wrong place and the driver + lock was not held, but needed to be (in lpfc_linux_attach) Fixed + both. Did some minor comment clean up. + * Removed unwanted (void *) castings. + * Replace define of INVALID_PHYS, with kernel 2.6.5's + dma_mapping_error() and add a inline function for earlier + kernels. Remove lpfc_bad_scatterlist(). + * Clean up formatting in hbaapi.h, lpfc.h, lpfc_cfgparm.h, + lpfc_crtn.h, lpfc_ct.c, lpfc_diag.h, lpfc_disc.h, lpfc_els.c, + lpfc_fcp.c, lpfc_hbadisc.c, lpfc_hw.h, lpfc_init.c, + lpfc_ipport.c, lpfc_logmsg.c, lpfc_logmsg.h and lpfc_scsiport.c + - mostly replacing groups of 8 spaces with hard tabs and keeping + lines to 80 column max.. + * Removed LPFC_DRVR_LOCK call from lpfc_unblock_requests for 2.4 + kernels. The lpfc_scsi_done routine already unlocks the driver + lock since it expects this lock to be held. + * Removed global lock capabilities from driver lock routines + * Remove SA_INTERRUPT flag from request_irq + * Move dma_addr_t cast inside of getPaddr macro as everywhere + getPaddr is used, the return is cast to dma_addr_t. + * Clean up formatting in lpfc_sli.c and lpfc_sysfs.c - mostly + replacing groups of 8 spaces with hard tabs and keeping lines + to 80 column max. + * Fix build for RHEL 2.1 BOOT kernels by always #including + interrupt.h in lpfc.h. + * Fix RHEL 3 build by #defining EXPORT_SYMTAB. + * Replace sprintf with snprintf in lpfc_proc_info. + * Fix build warnings on 2.6 kernels - remove no longer used calls + to character device initialization. + * Initial support code for discovery in tasklet conversion. + * Removing char interface and ioctl code. + * Change all elx prefixes to lpfc + * Replace lpfc_write_slim() & lpfc_read_slim() with memcpy_toio(), + memcpy_fromio(), writel() & readl(). + +Changes from 20040402 to 20040409 + + * Replaced lpfc_read_hbaregs_plus_offset and + lpfc_write_hbaregs_plus_offset functions with readl and writel. + * Get rid of long mdelay's in insmod path + * Changed the way our pci_device_id structures are initialized + * Replace lpfc_read/write_CA/HA/HC/HS with calls to readl() & + writel() directly. + * Increase SLI2_SLIM to 16K Increase cmd / rsp IOCBs accordingly + * Removed lpfc_els_chk_latt from the lpfc_config_post function. + lpfc_els_chk_latt will enable the link event interrupts when + flogi is pending which causes two discovery state machines + running parallely. + * Add pci_disable_device to unload path. + * Move lpfc_sleep_event from lpfc_fcp.c to lpfc_util_ioctl.c + * Call dma_map_single() & pci_map_single() directly instead of via + macro lpfc_pci_map(). Allow address 0 for PPC64. + * Change sleep to uninterruptible in lpfc_sli_issue_icob_wait + because this function doesn't handle signals. + * Move lpfc_wakeup_event from lpfc_fcp.c to lpfc_ioctl.c + * Remove unneeded #include + * Remove unused clock variables lpfc_clkCnt and lpfc_sec_clk. + * Get rid of capitalization of function names. + * Removed lpfc_addr_sprintf. + * Implemented gotos in lpfc_linux_attach for error cases. + * Replace mlist->dma.list = dmp->dma.list; to mlist = dmp. + * Remove functions lpfc_get_OsNameVersion and elx_wakeup. Change + elx_wakeup to wake_up_interruptible + * Add function lpfc_get_os_nameversion and change + lpfc_get_OsNameVersion to lpfc_get_os_nameversion. + * Remove lpfc_get_OsNameVersion + * Change driver name to a consistent lpfc in every visible place. + * Fix build warning: removed unused variable ret in lpfc_fdmi_tmo. + * Remove lpfc_utsname_nodename_check function + * Remove functions lpfc_register_intr and lpfc_unregister_intr + * Fill in owner field in lpfc_ops file_operations struct and + remove now unnecessary open and close entry points. + * Change function name prefixes from elx_ to lpfc_ + * Remove special case check for TUR in elx_os_prep_io() + * Renamed elx_scsi.h to lpfc_scsi.h + * Renamed elx_sched.h to lpfc_sched.h + * Renamed elx_mem.h to lpfc_mem.h + * Renamed elx_sli.h to lpfc_sli.h + * Renamed elx_logmsg.h to lpfc_logmsg.h + * Renamed elx.h to lpfc.h + * Renamed elx_sli.c to lpfc_sli.c + * Renamed elx_sched.c to lpfc_sched.c + * Renamed elx_mem.c to lpfc_mem.c + * Renamed elx_logmsg.c to lpfc_logmsg.c + * Renamed lpfcLINUXfcp.c lpfc_fcp.c + * Renamed elx_clock.c to lpfc_clock.c + * Reduce stack usage in lpfc_info(). + * Move lpip_stats structure from lpfc_hba.h to lpfc_ip.h. + * Move lpfc_stats and HBAEVT_t structures from lpfc_hba.h to + lpfc.h + * Remove lpfc_hba.h + * Remove duplicate rc definitions from + * Removed code which used next pointer to store mbox structure. + * Cleaned up list iterations. + * Removed non list manipulation of the next pointers. + * Change list_del()/INIT_LIST_HEAD sequences to list_del_init() + * In ELX_IOCBQ_t: Moved hipri_trigger field to iocb_flag. Combined + hipri_wait_queue and rsp_iocb in union + * Replaced casting from list_head with list_entry macro. + * Added ct_ndlp_context field to the ELX_IOCBQ_t. + * Do not use DMABUf_t list to store ndlp context + * Return 0 from lpfc_process_iotcl_util() when ELX_INITBRDS + succeeds. + * remove elx_os_scsiport.h + * Do not use DMABUf_t list to hold rpi context + * Replace elx_cfg_* names with lpfc_cfg-* + * Moved FCP activity to ring 0. Moved ELS/CT activity to ring 2. + * Clean up formatting of elx_sli.h (tabs for indents, 80 column + lines). + * Remove unused elxclock declaration in elx_sli.h. + * Since everywhere IOCB_ENTRY is used, the return value is cast, + move the cast into the macro. + * Split ioctls out into seperate files + +Changes from 20040326 to 20040402 + + * Updated ChangeLog for 20040402 SourceForge drop. + * Use safe list iterator for ndlp list + * Added code to return NLP_STE_FREED_NODE from the discovery + state machine functions if the node is freed from the + function. + * Fixes to DMABUF_t handling + * Fix for load error in discovery + * Remove loop_cnt variable from lpfc_rcv_plogi_unused_node. + * Remove nle. reference. + * Remove support for building 2.4 drivers + * Remove elx_util.h and replace elx_disc.h with lpfc_disc.h + * Implemented the Linux list macros in the discovery code. + Also moved elx_disc.h contents into lpfc_disc.h + * Unused variable cleanup + * Use Linux list macros for DMABUF_t + * Break up ioctls into 3 sections, dfc, util, hbaapi + rearranged code so this could be easily seperated into a + differnet module later All 3 are currently turned on by + defines in lpfc_ioctl.c LPFC_DFC_IOCTL, LPFC_UTIL_IOCTL, + LPFC_HBAAPI_IOCTL + * Misc cleanup: some goto's; add comments; clarify function + args + * Added code to use list macro for ELXSCSITARGET_t. + * New list implementation for ELX_MBOXQ_t + * Cleaned up some list_head casting. + * Put IPFC ifdef around two members of struct lpfc_nodelist. + * Cleaned up iocb list using list macros and list_head data + structure. + * lpfc_online() was missing some timer routines that were + started by lpfc_linux_attach(). These routines are now also + started by lpfc_online(). lpfc_offline() only stopped + els_timeout routine. It now stops all timeout routines + associated with that hba. + * Replace seperate next and prev pointers in struct + lpfc_bindlist with list_head type. In elxHBA_t, replace + fc_nlpbind_start and _end with fc_nlpbind_list and use + list_head macros to access it. + * Fix ulpStatus for aborting I/Os overlaps with newer firmware + ulpStatus values + * Rework params_show/store to be consistent as the other + routines. Remove generic'ness and rely on set attribute. + * Remove unused log message. + * Collapse elx_crtn.h and prod_crtn.h into lpfc_crtn.h + * Ifdef Scheduler specific routines + * Removed following ununsed ioclt's: ELX_READ_IOCB + ELX_READ_MEMSEG ELX_READ_BINFO ELX_READ_EINVAL ELX_READ_LHBA + ELX_READ_LXHBA ELX_SET ELX_DBG LPFC_TRACE + * Removed variable fc_dbg_flg + * Fixed a bug where HBA_Q_DEPTH was set incorrectly for + 3-digit HBAs. Also changed can_queue so midlayer will only + send (HBA_Q_DEPTH - 10) cmds. + * Clean up code in the error path, check condition. Remove + ununsed sense-related fields in lun structure. + * Added code for safety pools for following objects: mbuf/bpl, + mbox, iocb, ndlp, bind + * Wrapped '#include ' in '#ifdef USE_SCHEDULER'. + * Fixed 'make clean' target. + * Build now ignores elx_sched.o, and includes lpfc_sysfs.o. + * Wrapped lpfndd.o target in BUILD_IPFC ifdef. + * Removed elx_os.h inclusion in implementation files. + * Removed ELX_OS_IO_t data structure and put data direction + and non scatter/gather physical address into the scsi buffer + structure directly. Moved DRVR_LOCK, putPaddr, getPaddr + macros and some defines into elx.h since they are required + by the whole driver. + * Migrated following ioctls (debug) ELX_DISPLAY_PCI_ALL + ELX_DEVP ELX_READ_BPLIST ELX_RESET_QDEPTH ELX_STAT. + * Step 1 of attempt to move all Debug ioctls to sysfs. + Implemented the following IOCTLs in sysfs: ELX_WRITE_HC + ELX_WRITE_HS ELX_WRITE_HA ELX_WRITE_CA ELX_READ_HC + ELX_READ_HS ELX_READ_HA ELX_READ_CA ELX_READ_MB ELX_RESET + ELX_READ_HBA ELX_INSTANCE ELX_LIP. Also introduced + attribute "set" to be used in conjuction with the above + attributes. + * Removed DLINK, enque and deque declarations now that clock + doesn't use them anymore + * Separated install rule so that BUILD_IPFC has to be set when + make is called in order for the install rule to attempt to + copy the lpfndd.o driver. This change fixes a bug that + occurs because the install rule by default attempted to + install lpfndd.o, whereas the default make rule did not by + default build lpfndd.o. + * Keep track if hbaapi index numbers need to be refreshed. + * Removed prod_os.h from include list. + * Removed LPFC_LOCK and LPFC_UNLOCK macros. Added OS calls + into elx_os_scsiport.c. This file is now empty. + * Added spin_lock_irqsave and spin_unlock_irqrestore calls + into code directly and removed LPFC_LOCK_ and _UNLOCK_ + macros + * Remove references to "elx_clock.h" + * Added utsname.h to include list. The previous checkin to + elx_os.h removed its inclusion of utsname.h since there is + precious little in the file. However, lpfcLINUXfcp.c needs + it and now has it. + * Removed some commented-out code + * Removed elx_lck_t data structure, stray elxDRVR_t type, and + include from file. No longer used. + * Removed two PCI Sync defines. Removed includes - not + needed. Cleaned up macro lines. + * Added two functions from elxLINUXfcp.c. These functions + were IPFC specific. + * Removed hipri lock abstractions and added OS call into code. + Removed elx_lck_t and added spinlock_t directly. Moved two + IPFC functions into lpfc_ipport.c + * Moved IP specific structures to lpfc_ip.h file. + * lpfc_ipfarp_timeout() uses system timer. Remove all usages + of old internal clock support. + * Made changes to compile without IPFC support for the default + build. Added ifdef IPFC for all lpfc_ip.h includes. + * Patched elx_free_scsi_buf + * Removed elx_sched.o from 2.6 dependencies + * Reworked lpfc_pcimap. + * Use Linux swap macros to replace ELX swapping macros + (SWAP_SHORT, SWAP_LONG, SWAP_DATA, SWAP_DATA16, + PCIMEM_SHORT, PCIMEM_LONG, PCIMEM_DATA). + * move in_interrupt() check inside of elx_sleep_ms() + * Moved location of pci.h include. + * Restored elx_lck_t types in elxHBA_t. + * Removed elx_pci_dma_sync call. Also removed some PCI + defines from elx_hw.h and removed the spinlock_t locks that + are no longer used in elx.h + * elx_iodone() now uses system timer. + * elx_qfull_retry() now uses system timer. + * lpfc_put_buf(), lpfc_ip_xri_timeout() and + lpfc_ip_timeout_handler() now use system timer. + * lpfc_fdmi_tmo() and lpfc_qthrottle_up() now use system + timer. + * Removed num_bufs and num_iocbs configuration parameters. + * Fixed a memory corruption bug. This was caused by a memory + write to ndlp structure from lpfc_cmpl_els_acc function. + This ndlp structure was freed from lpfc_els_unsol_event. + * lpfc_disc_timeout() and lpfc_establish_link_tmo() now use + system timer. Also update lpfc_els_retry_delay() to do a + single lock release at the end. + * Remove use of PAN (pseudo adapter number). + * Reintroduced usage of the cross compiler for building on + ppc64 to remove build errors that were cropping up when + using the standard gcc compiler. + * Fix no-unlock-before return in lpfc_els_retry_delay which was + causing a deadlock on insmod in some environments. + * Minor format changes fix up comments + * Create utility clock function elx_start_timer() and + elx_stop_timer(). All timeout routines now use these common + routines. + * Minor formating changes fix up comments + * Minor formatting changes get rid of failover defines for + syntax checking + * Minor formatting changes remove ISCSI defines. + * Fix typo in install target for 2.4 kernels. + * Removed unused elx_scsi_add_timer extern function + declaration. + * Cleanup casting around DMA masks. + * Comment out lpfndd.o modules_install section as lpfndd.o is + not generated if CONFIG_NET_LPFC is not set. Also refer to + BASEINCLUDE only in out of kernel source module builds as it + will not exist otherwise. + * Removed unused malloc counters from lpfcLINUXfcp.c. + * Remove some unnecessary #includes in lpfcLINUXfcp.c + * Remove unncessary #includes in elxLINUXfcp.c + * Minor formatting cleanups in Makefile to avoid some + linewrapping. + * Removed unused elx_mem_pool data structure. + * Remove several unnecessary #includes. + * Moving fix for memory leak in ioctl lip area to sysfs's lip. + * Removed unused elx_dma_handle_t elx_acc_handle_t + FC_MAX_SEGSZ and FC_MAX_POOL. + * Rewrite of Makefile. Fixes breakages with make -j4 during + kernel compile. Does not recompile all files on every + build. Uses the kernel build's definitions of CFLAGS, + MODFLAGS etc. Removed "make rpm" option. + * Removed unused #defines CLOSED, DEAD, OPENED, NORMAL_OPEN + and unneeded #include of elx_sched.h in elx.h. + * Several log message updates + * Add PCI_DEVICE_ID_FIREFLY for LP6000 + * Fixed known issues in 20040326: driver crashes on rmmod in + both 2.4 and 2.6 kernels + + +Changes from 20040319 to 20040326 + + * Updated ChangeLog for 20040326 SourceForge drop. + * remove lpfc_isr / lpfc_tmr logic fixed up 8 spaces from + previous checkins with tabs + * replace elx_in_intr() with in_interrupt() + * Remove unused messages 1602 and 1603. + * Fix the following issues with log messages: Remove unused + messages 406, 407, 409, 927, 928, 1201, 1202, 1204, 1205, 1206 + and 1207. Create a new message 738 to fix duplicate instances + of 736. + * Removed remaining pci interface abstractions from elxLINUXfcp.c. + Implemented OS calls directly in all remaining files and cleaned + up modules. Removed prototypes as well. + * Removed following functions/structures elx_mem_dmapool + elx_idx_dmapool elx_size_dmapool elx_kmem_lock dfc_data_alloc + dfc_data_free dfc_mem struct mbuf_info elx_acc_handle_t + data_handle elx_dma_handle_t dma_handle struct elx_memseg + MEMSEG_t + * lpfc_els_timeout_handler() now uses system timer. + * Further cleanup of #ifdef powerpc + * lpfc_scsi_timeout_handler() now uses system timer. + * Replace common driver's own defines for endianess w/ Linux's + __BIG_ENDIAN etc. + * Added #ifdef IPFC for all IPFC specific code. + * lpfc_disc_retry_rptlun() now uses system timer. + * lpfc_npr_timeout() now uses system timer. + * Modified detect code, on insmod, to only wait a max of 2 secs if + link comes up and there are no devices. + * Move remaining message logging functions into + elx_logmsg.c/elx_logmsg.h. + * Added code to clear link attention bit when there is a pending + link event and the memory allocation for read_la mail box + command fails. + * Removed function calls for mapping bar registers and allocating + kernel virtual memory mappings to the mapped bars Removed + prototypes, lpfc_driver_cache_line, and pci_bar1_map rename to + pci_bar2_map. + * Allocate mbox only if the hba_state is in ready state. + * Complete lip support via sysfs. To lip, echo brdnum > + /sys/bus/pci/drivers/lpfc/lip. + * moving sysfs show/store implementations to lpfc_sysfs.c. Also add + support for lip. + * Add files: lpfc_sysfs.c, lpfc_sysfs.h + * move LPFC_DRIVER_NAME and LPFC_MODULE_DESC out of lpfcLINUXfcp.c + to lpfc_version.h, since it is now needed in lpfc_sysfs.c + * elx_mbox_timeout now uses system timer + * Changed lpfc_nodev_timeout, lpfc_els_retry_delay and + lpfc_linkdown_timeout to use the system timer instead of + internal clock support. + * Move remaining message logging functions in elx_util.c to + elx_logmsg.c. + * Remove some unnecessary typecasting. + * Remove log message that is no longer used (was used by + elx_str_atox). + * Replaced DLINK_t and SLINK_t by standard Linux list_head + * Removed deque macro + * Replaced ELX_DLINK_t ans ELX_SLINK_t by Linux struct list_head + (except for clock) + * Removed following functions from code: linux_kmalloc linux_kfree + elx_alloc_bigbuf elx_free_bigbuf + * Removed following abstract functions from the code. elx_malloc + elx_free elx_ip_get_rcv_buf elx_ip_free_rcv_buf + elx_mem_alloc_dmabuf elx_mem_alloc_dmabufext elx_mem_alloc_dma + elx_mem_alloc_buf lpfc_bufmap + * Removed custom PCI configuration #defines and replaced with + OS-provided #defines. Also added linux/pci.h to *.c files. + * Remove elx_str_ctox. Replace elx_str_atox with sscanf. + * Many indentation/whitespace fixes. + * Replace elx_str_ctox with isxdigit where it was only used to + check the value of a character. + * Removed following functions from the code. elx_kmem_free + elx_kmem_alloc elx_kmem_zalloc + * Change use of 2.4 SCSI typedef Scsi_Host_Template to struct + scsi_host_template for 2.6 kernels. + * Change use of 2.4 SCSI typedefs (Scsi_Device, Scsi_Cmnd, + Scsi_Request) the their real struct names. + * Move 2.6 compatibility irqreturn definitions to lpfc_compat.h. + Protect these definitions from conflicting with similar ones in + later 2.4 kernels. + * Remove unused definitions: LINUX_TGT_t, LINUX_LUN_t, + LINUX_BUF_t, elx_lun_t, SET_ADAPTER_STATUS. + * Convert pci_ calls to linux 2.6 dma_ equivalents. + * Removed unused types: struct buf, struct sc_buf, T_SCSIBUF + typedef. + * Fix Makefile so that 2.4 drivers don't always rebuild all files. + * Remove unused _static_ and fc_lun_t definitions. + * Cleaned up some memory pool implementation code. + * Fix panic with char dev changes. Turns out that 2.6.4 code does + the same in kernel space with the 2.4 interface style + definitions. So remove the new char dev code altogether. + * Remove typecasting from fc_get_cfg_param and consolidate + multiple instances of the parameter switch into a single + instance. + * Use lpfc_is_LC_HBA() macro that tests pcidev->device directly + instead of saving a private copy that undergoes varied shifting + & casting. + * Removed usage of all memory pools. + +Changes from 20040312 to 20040319 + + * Use dev_warn instead of printk for 2.6 kernels + * Correct Iocbq completion routine for 2.6 kernel case + * Change void *pOSCmd to Scsi_Smnd *pCmd + * Change void *pOScmd to struct sk_buff *pCmd + * Remove data directon code. + * Removed memory pool for buf/bpl buffers and use kmalloc/kfree + pci_pool_alloc/free directly. + * Move PPC check for DMA address 0 in scatter-gather list, into + lpfc_compat.h + * Always use pci_unmap_single() instead of pci_unmap_page() + * Clean up the 2.6 vs 2.4 #if blocks. + * Conditionalize Scheduler + * Add a comment to explain a little what the first Makefile + section does. + * Removed lpfc_intr_post + * Sysfs new display format. Also added write functionality. You + can [ echo "0 log_verbose 3" > + /sys/bus/pci/drivers/lpfc/params]. Hex support yet to be added. + * Removed several #ifdef powerpc, including for a discovery issue + in lpfc_ValidLun() + * Change elx_printf_log to use vsprintf. + * Added lpfc_compat.h provides macros to aid compilation in the + Linux 2.4 kernel over various platform architectures. Initially + support mapping to a DMA address. + * Removed memory pool for nlp/bind buffers and use kmalloc/kfree + directly. + * Removed memory pool for iocb buffers and use kmalloc/kfree + directly. + * Removed memory pool for mailbox buffers and use kmalloc/kfree + directly. + * Cleaned up back and forth casts + * Initial support for sysfs for 2.6 kernel. + * Changed elx_dma_addr_t to dma_addr_t + * Fix a 2.6 kernel check to be >= 2.6.0 instead of > (was missing + 2.6.0). + * Remove elx_printf and elx_str_sprintf. Replace elx_print with + printk. + * Replace elx_printf with printk. + * Replace elx_str_sprintf with sprintf. + * Removed the mem_lock, its prototype, function, macro, and + iflags. + * Use kmalloc/kfree for ELX_SCSI_BUF_t + * Use linux pci_pools for SCSI_DMA_EXT + * Use linux pci_pools for BPLs. + * Minor cleanup of DFC args for PPC64. + * Several small indentation cleanups. + * New Linux 2.6 style of char device registration. + * Migrated members of LPFCHBA_t and LINUX_HBA_t into elxHBA_t + * Use strcpy, strncmp, isdigit, strlen instead of abstractions + * Cleanup of driver_template. + * Facilitate compile time turn on/off of lpfc_network_on. + * Split large source files into smaller, better named ones. + +Changes from 2.10a to 20040312 + + * Fix build for 2.4 kernels + * Move driver version macros into lpfc_version.h file. + * Fixed data miscompare with LIP. + * Removed elx_sli, elx_ioc, elx_disc, elx_sch routines, + prototypes, and reference points. + * Correct the space insertions with hardtabs + * Remove routine call pointers in ELX_SLI_INIT_t struct. + * Removed module locks except for drvr, mem, and clock. + * Removed unused module locks from sourcebase. Kept drvr_lock, + mem_lock, and clock_lock. + * Change NULL to 0 diff --git a/Documentation/scsi/lpfc.txt b/Documentation/scsi/lpfc.txt new file mode 100644 index 0000000..4dbe413 --- /dev/null +++ b/Documentation/scsi/lpfc.txt @@ -0,0 +1,83 @@ + +LPFC Driver Release Notes: + +============================================================================= + + + IMPORTANT: + + Starting in the 8.0.17 release, the driver began to be targeted strictly + toward the upstream kernel. As such, we removed #ifdefs for older kernels + (pre 2.6.10). The 8.0.16 release should be used if the driver is to be + run on one of the older kernels. + + The proposed modifications to the transport layer for FC remote ports + and extended attribute support is now part of the upstream kernel + as of 2.6.12. We no longer need to provide patches for this support, + nor a *full* version which has old an new kernel support. + + The driver now requires a 2.6.12 (if pre-release, 2.6.12-rc1) or later + kernel. + + Please heed these dependencies.... + + + ******************************************************************** + + +The following information is provided for additional background on the +history of the driver as we push for upstream acceptance. + +Cable pull and temporary device Loss: + + In older revisions of the lpfc driver, the driver internally queued i/o + received from the midlayer. In the cases where a cable was pulled, link + jitter, or a device temporarily loses connectivity (due to its cable + being removed, a switch rebooting, or a device reboot), the driver could + hide the disappearance of the device from the midlayer. I/O's issued to + the LLDD would simply be queued for a short duration, allowing the device + to reappear or link come back alive, with no inadvertant side effects + to the system. If the driver did not hide these conditions, i/o would be + errored by the driver, the mid-layer would exhaust its retries, and the + device would be taken offline. Manual intervention would be required to + re-enable the device. + + The community supporting kernel.org has driven an effort to remove + internal queuing from all LLDDs. The philosophy is that internal + queuing is unnecessary as the block layer already performs the + queuing. Removing the queues from the LLDD makes a more predictable + and more simple LLDD. + + As a potential new addition to kernel.org, the 8.x driver was asked to + have all internal queuing removed. Emulex complied with this request. + In explaining the impacts of this change, Emulex has worked with the + community in modifying the behavior of the SCSI midlayer so that SCSI + devices can be temporarily suspended while transport events (such as + those described) can occur. + + The proposed patch was posted to the linux-scsi mailing list. The patch + is contained in the 2.6.10-rc2 (and later) patch kits. As such, this + patch is part of the standard 2.6.10 kernel. + + By default, the driver expects the patches for block/unblock interfaces + to be present in the kernel. No #define needs to be set to enable support. + + +Kernel Support + + This source package is targeted for the upstream kernel only. (See notes + at the top of this file). It relies on interfaces that are slowing + migrating into the kernel.org kernel. + + At this time, the driver requires the 2.6.12 (if pre-release, 2.6.12-rc1) + kernel. + + If a driver is needed for older kernels please utilize the 8.0.16 + driver sources. + + +Patches + + Thankfully, at this time, patches are not needed. + + -- cgit v1.1