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 <hch@lst.de>: 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 <linux/dma-mapping.h> 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.
	* Implemented 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 initialization 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 received 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 interruptible 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 <hch@lst.de> Kill
	  compile warnings on 64 bit platforms: %variables for %llx format
	  specifiers must be cast to long long because %(u)int64_t can
	  just be long on 64bit platforms.
	* Integrated patch from Christoph Hellwig <hch@lst.de> Removes
	  dead code.
	* Integrated patch from Christoph Hellwig <hch@lst.de>: 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 its (.
	* 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 changing of some offsets from word-based to
	  byte-based so we can simply do void pointer arithmetic (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 problem 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 accommodate 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.
	* Background nodev_timeout processing to DPC. This enables us to
	  unblock (stop dev_loss_tmo) when appropriate.
	* Fix array discovery with multiple luns.  The max_luns was 0 at
	  the time the host structure was initialized.  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 losing 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 unnecessary 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 its 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 than 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 accommodate 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 empty 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 unused 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 occurrences 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: separate nodev_tmo and els_retry_delay into 2
	  separate 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 argument 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 its 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.  Incorporated
	  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 parallelly.
	* 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 <linux/netdevice.h>
	* 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 separate 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 separated into a
	  different 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 separate 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 unused ioctl'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
	  unused sense-related fields in lun structure.
	* Added code for safety pools for following objects: mbuf/bpl,
	  mbox, iocb, ndlp, bind
	* Wrapped '#include <elx_sched.h>' 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 conjunction with the above
	  attributes.
	* Removed DLINK, enqueue and dequeue 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 formatting 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 unnecessary #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 endianness 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 and 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 direction 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
