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 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 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
