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.
	* Implmented Christoph Hellwig's review from 2/5: Check for return
	  values of kmalloc.
	* Integrated Christoph Hellwig's patch from 1/30: Protecting
	  scan_tmo and friends in !FC_TRANSPORT_PATCHES_V2 &&
	  !USE_SCAN_TARGET.
	* Integrated Christoph Hellwig's patch from 1/30: Some fixes in
	  the evt handling area.
	* Integrated Christoph Hellwig's patch from 1/30: Remove usage of
	  intr_inited variable. The interrupt initilization from OS side
	  now happens in lpfc_probe_one().
	* Integrated Christoph Hellwig's patch from 1/30: remove shim
	  lpfc_alloc_transport_attr - remove shim lpfc_alloc_shost_attrs -
	  remove shim lpfc_scsi_host_init - allocate phba mem in scsi's
	  hostdata readjust code so that they are no use after free's
	  (don't use after scsi_host_put) - make lpfc_alloc_sysfs_attr
	  return errors
	* Fixed panic in lpfc_probe_one(). Do not delete in a list
	  iterator that is not safe.
	* Clean up fast lookup array of the fcp_ring when aborting iocbs.
	* Following timeout handlers moved to the lpfc worker thread:
	  lpfc_disc_timeout, lpfc_els_timeout, lpfc_mbox, lpfc_fdmi_tmo,
	  lpfc_nodev_timeout, lpfc_els_retry_delay.
	* Removed unused NLP_NS_NODE #define.
	* Integrated Christoph Hellwig's patch from 1/30: remove unused
	  lpfc_hba_list; remove unused lpfc_rdrev_wd30; remove
	  lpfc_get_brd_no and use Linux provided IDR.
	* Changed board reset procedure so that lpfc_sli_send_reset()
	  writes the INITFF bit and leaves lpfc_sli_brdreset() to clear
	  the bit.
	* Removed outfcpio sysfs device attribute.
	* VPD changes: 1) Modify driver to use the model name and
	  description from the VPD data if it exists 2) Rework use of DUMP
	  mailbox command to support HBAs with 256 bytes of SLIM.
	* Fixed compile error for implicit definition of struct
	  scsi_target

Changes from 20050124 to 20050201

	* Changed version number to 8.0.22
	* Moved discovery timeout handler to worker thread. There are
	  function calls in this function which are not safe to call from
	  HW interrupt context.
	* Removed free_irq from the error path of HBA initialization.
	  This will fix the free of uninitialised IRQ when config_port
	  fails.
	* Make sure function which processes unsolicited IOCBs on ELS ring
	  still is called with the lock held.
	* Clear LA bit from work_ha when we are not supposed to handle LA.
	* Fix double locking bug in the error handling part of
	  lpfc_mbx_cmpl_read_la.
	* Implemented fast IOCB processing for FCP ring.
	* Since mboxes are now unconditionally allocated outside of the
	  lock, free them in cases where they are not used.
	* Moved out a couple of GFP_ATOMICs in lpfc_disc_timeout, to
	  before locks so that they can GFP_KERNEL instead. Also cleaned
	  up code.
	* Collapsed interrupt handling code into one function.
	* Removed event posting and handling of solicited and unsolicited
	  iocbs.
	* Remove ELS ring handling leftovers from the lpfc_sli_inter().
	* ELS ring (any slow ring) moved from the lpfc_sli_inter() into a
	  worker thread.  Link Attention, Mbox Attention, and Error
	  Attention, as well as slow rings' attention is passed to the
	  worker thread via worker thread copy of Host Attention
	  register. Corresponding events are removed from the event queue
	  handling.
	* Add entries to hba structure to delegate some functionality from
	  the lpfc_sli_inter() to a worker thread.
	* Reduced used of GFP_ATOMIC for memory allocations.
	* Moved locks deeper in order to change GFP_ATOMIC to GFP_KERNEL.
	* IOCB initialization fix for Raw IO.
	* Removed qcmdcnt, iodonecnt, errcnt from lpfc_target and from
	  driver.
	* Added call to lpfc_els_abort in lpfc_free_node.  Modified
	  lpfc_els_abort to reset txq and txcmplq iterator after a
	  iocb_cmpl call.
	* Fixed a use after free issue in lpfc_init.c.
	* Defined default mailbox completion routine and removed code in
	  the sli layer which checks the mbox_cmpl == 0 to free mail box
	  resources.
	* In lpfc_workq_post_event, clean up comment formatting and remove
	  unneeded cast of kmalloc's return.
	* Removed loop which calls fc_remote_port_unblock and
	  fc_remote_port_delete for every target as this same effect is
	  accomplished by the scsi_remove_host call.
	* Minor cleanup of header files.  Stop header files including
	  other header files.  Removed sentinels which hide multiple
	  inclusions.  Removed unneeded #include directives.
	* Fixed memory leaks in mailbox error paths.
	* Moved lock from around of lpfc_work_done to lpfc_work_done
	  itself.
	* Removed typedef for LPFC_WORK_EVT_t and left just struct
	  lpfc_work_evt to comply with linux_scsi review coding style.
	* Fixed some trailing whitespaces, spaces used for indentation and
	  ill-formatting multiline comments.
	* Bug fix for Raw IO errors.  Reuse of IOCBs now mandates setting
	  of ulpPU and fcpi_parm to avoid incorrect read check of Write IO
	  and incorrect read length.

Changes from 20050110 to 20050124

	* Changed version number to 8.0.21
	* Removed unpleasant casting in the definition and use of
	  lpfc_disc_action function pointer array.
	* Makefile cleanup.  Use ?= operator for setting default
	  KERNELVERSION and BASEINCLUDE values.  Use $(PWD) consistently.
	* Removed call to lpfc_sli_intr from lpfc_config_port_post.  All
	  Linux systems will service hardware interrupts while bringing up
	  the driver.
	* Christoph Hellwig change request: Reorg of contents of
	  lpfc_hbadisc.c, lpfc_scsi.h, lpfc_init.c, lpfc_sli.c,
	  lpfc_attr.c, lpfc_scsi.c.
	* Renamed discovery thread to lpfc_worker thread.  Moved handling
	  of error attention and link attention and mbox event handler to
	  lpfc_worker thread.
	* Removed .proc_info and .proc_name from the driver template and
	  associated code.
	* Removed check of FC_UNLOADING flag in lpfc_queuecommand to
	  determine what result to return.
	* Move modification of FC_UNLOADING flag under host_lock.
	* Fix IOERR_RCV_BUFFER_WAITING handling for CT and ELS subsystem.
	* Workaround firmware bug for IOERR_RCV_BUFFER_WAITING on ELS
	  ring.
	* Fixed a couple lpfc_post_buffer problems in lpfc_init.c.
	* Add missing spaces to the parameter descriptions for
	  lpfc_cr_delay, lpfc_cr_count and lpfc_discovery_threads.
	* Lock before calling lpfc_sli_hba_down().
	* Fix leak of "host" in the error path in the remove_one() path.
	* Fix comment for lpfc_cr_count.  It defaults to 1.
	* Fix issue where we are calling lpfc_disc_done() recursively from
	  lpfc_linkdown(), but list_for_each_entry_safe() is not safe for
	  such use.
	* Bump lpfc_discovery_threads (count of outstading ELS commands in
	  discovery) to 32
	* If the SCSI midlayer tries to recover from an error on a lun
	  while the corresponding target is in the NPR state, lpfc driver
	  will reject all the resets. This will cause the target to be
	  moved to offline state and block all the I/Os. The fix for this
	  is to delay the lun reset to a target which is not in MAPPED
	  state until the target is rediscovered or nodev timeout is
	  fired.

Changes from 20041229 to 20050110

	* Changed version number to 8.0.20
	* rport fix: use new fc_remote_port_rolechg() function instead of
	  direct structure change
	* rport fix: last null pointer check
	* Phase II of GFP_ATOMIC effort.  Replaced iocb_mem_pool and
	  scsibuf_mem_pool with kmalloc and linked list.  Inserted list
	  operations for mempool_alloc calls.  General code cleanup.  All
	  abort and reset routines converted.  Handle_ring_event
	  converted.
	* If the mbox_cmpl == lpfc_sli_wake_mbox_wait in
	  lpfc_sli_handle_mb_event, pmb->context1 points to a waitq. Do
	  not free the structure.
	* rport fixes: fix for rmmod crash
	* rport fixes: when receiving PRLI's, set node/rport role values
	* rport fixes: fix for unload and for fabric port deletes
	* VPD info bug fix.
	* lpfc_linkdown() should be able to process all outstanding events
	  by calling lpfc_disc_done() even if it is called from
	  lpfc_disc_done() Moving all events from phba->dpc_disc to local
	  local_dpc_disc prevents those events from being processed.
	  Removing that queue. From now on we should not see "Illegal
	  State Transition" messages.
	* Release host lock and enable interrupts when calling
	  del_timer_sync()
	* All related to rports: Clean up issues with rport deletion
	  Convert to using block/unblock on list remove (was del/add)
	  Moved rport delete to freenode - so rport tracks node.
	* rport fixes: for fport, get maxframe and class support
	  information
	* Added use of wait_event to work with kthread interface.
	* Ensure that scsi_transport_fc.h is always pulled in by
	  lpfc_scsiport.c
	* In remote port changes: no longer nulling target->pnode when
	  removing from mapped list. Pnode get nulled when the node is
	  freed (after nodev tmo). This bug was causing i/o 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 interruptable sleep.
	* Small Makefile cleanup - Remove remnants of 2.4 vs. 2.6
	  determination.

Changes from 20041213 to 20041220

	* Changed version number to 8.0.18
	* Janitorial cleanup after removal of sliinit and ringinit[] ring
	  statistic is owned by the ring and SLI stats are in sli
	  structure.
	* Integrated patch from Christoph Hellwig <hch@lst.de> Kill
	  compile warnings on 64 bit platforms: %variables for %llx format
	  specifiers must be caste to long long because %(u)int64_t can
	  just be long on 64bit platforms.
	* Integrated patch from Christoph Hellwig <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 chaning of some offsets from word-based to
	  byte-based so we cans simply do void pointer arithmetics (gcc
	  extension) instead of casting to uint32_t.
	* Integrate Christoph Hellwig's patch for 8.0.14: flag is always
	  LPFC_SLI_ABORT_IMED, aka 0 - remove dead code.
	* Modified preprocessor #ifdef, #if, #ifndef to reflect upstream
	  kernel submission.  Clean build with make clean;make and make
	  clean;make ADVANCED=1 on SMP x86, 2.6.10-rc2 on RHEL 4 Beta
	  1. IO with a few lips and a long cable pull behaved accordingly.
	* Implement full VPD support.
	* Abort handler will try to wait for abort completion before
	  returning.  Fixes some panics in iocb completion code path.

Changes from 20041130 to 20041207
	
	* Changed version number to 8.0.16
	* Hung dt session fix.  When the midlayer calls to abort a scsi
	  command, make sure the driver does not complete post-abort
	  handler.  Just NULL the iocb_cmpl callback handler and let SLI
	  take over.
	* Add Read check that uses SLI option to validate all READ data
	  actually received.


Changes from 20041123 to 20041130

	* Changed version number to 8.0.15
	* Ifdef'd unused "binary" attributes by DFC_DEBUG for clean
	  compiles
	* Stop DID_ERROR from showing up along with QUEUE_FULL set by the
	  Clarion array (SCSI error ret. val.  0x70028) There is no need
	  for driver to hard fail command which was failed by the target
	  device.
	* Fix for Scsi device scan bug reported on SourceForge.  Driver
	  was returning a DID_ERROR in lpfc_handle_fcp_error causing
	  midlayer to mark report luns as failing even though it
	  succeeded.
	* Don't ignore SCSI status on underrun conditions for inquiries,
	  test unit ready's, etc.  This was causing us to lose
	  reservation conflicts, etc

Changes from 20041018 to 20041123
	
	* Changed version number to 8.0.14
	* Added new function "iterator" lpfc_sli_next_iocb_slot() which
	  returns pointer to iocb entry at cmdidx if queue is not full.
	  It also updates next_cmdidx, and local_getidx (but not cmdidx)
	* lpfc_sli_submit_iocb() copies next_cmdidx into cmdidx. Now it is
	  the only place were we are updating cmdidx.
	* lpfc_sli_update_ring() is split in to two --
	  lpfc_sli_update_ring() and lpfc_sli_update_full_ring().
	* lpfc_sli_update_ring() don't to read back correct value of
	  cmdidx.
	* Simplified lpfc_sli_resume_iocb() and its use.
	* New static function lpfc_sli_next_iocb(phba, pring, &piocb) to
	  iterate through commands in the TX queue and new command (at the
	  end).
	* Reduced max_lun to 256 (due to issues reported to some arrays).
	  Fixed comment, and macro values so def=256, min=1, max=32768.
	* Fix an obvious typo/bug: kfree was used to free lpfc_scsi_buf
	  instead of mempool_free in lpfc_scsiport.c.
	* Suppress nodev_tmo message for FABRIC nodes.
	* Fixed some usage of plain integer as NULL pointer.
	* Bug fix for FLOGI cmpl, lpfc_els_chk_latt error path code
	  cleanup.
	* Fixup lpfc_els_chk_latt() to have Fabric NPorts go thru
	  discovery state machine as well.
	* Fixes to lpfc_els_chk_latt().
	* Use DID not SCSI target id as a port_id and add some missing
	  locks in lpfc_fcp.c.
	* Changed eh_abort_handler to return FAILED if command is not
	  found in driver.
	* Fix crash: paging request at virtual address 0000000000100108 -
	  a result of removing from the txcmpl list item which was already
	  removed (100100 is a LIST_POISON1 value from the next pointer
	  and 8 is an offset of the "prev") Driver runs out of iotags and
	  does not handle that case well. The root of the proble is in the
	  initialization code in lpfc_sli.c
	* Changes to work with proposed linux kernel patch to support
	  hotplug.
	* Zero out seg_cnt in prep_io failure path to prevent double sg
	  unmap calls.
	* Fix setting of upper 32 bits for Host Group Ring Pointers if in
	  SLIM. Old code was inappropriately masking off low order bits.
	* Use scsi_[activate|deactivate]_tcq calls provided in scsi_tcq.h.
	* Integrated patch from Christoph Hellwig (hch@lst.de): don't call
	  pci_dma_sync_* on coherent memory. pci_dma_sync_* is need and
	  must be used only with streaming dma mappings pci_map_*, not
	  coherent mappings.  Note: There are more consistent mappings
	  that are using pci_dma_sync calls. Probably these should be
	  removed as well.
	* Modified lpfc_free_scsi_buf to 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.
	* Backround nodev_timeout processing to DPC This enables us to
	  unblock (stop dev_loss_tmo) when appopriate.
	* Fix array discovery with multiple luns.  The max_luns was 0 at
	  the time the host structure was 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 argment clock handler
	* Removed duplicate extern defs of the bind variables.
	* Streamline usage of the defines CLASS2 and CLASS3, removing
	  un-necessary checks on config[LPFC_CFG_FCP_CLASS].
	* Moving the persistent binding variables to new file
	  lpfc_defaults.c
	* Changed LPFC_SCSI_BUF_t to struct lpfc_scsi_buf.
	* Moved config specific code from probe_one() into
	  config_setup(). Removing a redundant check on scandown value
	  from bind_setup() as this is already done in config_setup().
	* Changed LPFC_SLI_t to struct lpfc_sli.
	* Changed FCP_CMND to struct fcp_cmnd.
	* Changed FCP_RSP to struct fcp_rsp.
	* Remove the need for buf_tmo.
	* Changed ULP_BDE64 to struct ulp_bde64.
	* Changed ULP_BDE to struct ulp_bde.
	* Cleanup lpfc_os_return_scsi_cmd() and 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.  Incorported
	  lpfc_instcnt, lpfc_instance[], and pHba[] into lpfcDRVR
	  structure Added routines lpfc_get_phba_by_inst()
	  lpfc_get_inst_by_phba() lpfc_check_valid_phba()
	* Turn on attributes "set" & "params" by default.
	* Further formatting/whitespace/line length cleanup on: lpfc_ct.c
	  lpfc_els.c lpfc_fcp.c lpfc_hbadisc.c lpfc_init.c lpfc_ipport.c
	  lpfc_mbox.c lpfc_nportdisc.c lpfc_sched.c lpfc_sched.h
	  lpfc_scsi.h lpfc_scsiport.c lpfc_sli.c and lpfc_sli.h
	* Add log message 249 to log any unsupported device addressing
	  modes encountered.
	* Add support for 256 targets and 256 LUNs
	* Fixed panic in lpfc_linkdown.
	* Removed (struct list_head*) casting in several calls to list_del
	* Free irq reservation and kill running timers when insmod or
	  modprobe are killed via ctrl-c
	* Remove drivers/scsi from include path
	* Wrap use of log message 311 in macro
	* Detect failure return from pci_map_sg call in lpfc_os_prep_io
	* Fix use-after-free of IOCB in lpfc_sli_process_sol_iocb which
	  was causing an Oops on 2.6.5 kernel.
	* Cleanup use of several gotos not used for error exit.
	* Replace memcpy_toio() and memcpy_toio() with endian-dependent
	  lpfc_memcpy_to_slim() and lpfc_memcpy_from_slim() so that for
	  big endian hosts like PPC64, the SLIM is accessed 4 bytes at a
	  time instead of as a byte-stream.

Changes from 20040409 to 20040416

	* The scsi_register and scsi_alloc_host OS calls can fail and
	  return a zero-valued host pointer.  A ctrl-C on 2.6 kernels
	  during driver load will cause this and the driver to panic.
	  Fixed this bug.  Also found a bug in the error_x handling with
	  lpfc_sli_hba_down - it was in the wrong place and the driver
	  lock was not held, but needed to be (in lpfc_linux_attach) Fixed
	  both.  Did some minor comment clean up.
	* Removed unwanted (void *) castings.
	* Replace define of INVALID_PHYS, with kernel 2.6.5's
	  dma_mapping_error() and add a inline function for earlier
	  kernels.  Remove lpfc_bad_scatterlist().
	* Clean up formatting in hbaapi.h, lpfc.h, lpfc_cfgparm.h,
	  lpfc_crtn.h, lpfc_ct.c, lpfc_diag.h, lpfc_disc.h, lpfc_els.c,
	  lpfc_fcp.c, lpfc_hbadisc.c, lpfc_hw.h, lpfc_init.c,
	  lpfc_ipport.c, lpfc_logmsg.c, lpfc_logmsg.h and lpfc_scsiport.c
	  - mostly replacing groups of 8 spaces with hard tabs and keeping
	  lines to 80 column max..
	* Removed LPFC_DRVR_LOCK call from lpfc_unblock_requests for 2.4
	  kernels.  The lpfc_scsi_done routine already unlocks the driver
	  lock since it expects this lock to be held.
	* Removed global lock capabilities from driver lock routines
	* Remove SA_INTERRUPT flag from request_irq
	* Move dma_addr_t cast inside of getPaddr macro as everywhere
	  getPaddr is used, the return is cast to dma_addr_t.
	* Clean up formatting in lpfc_sli.c and lpfc_sysfs.c - mostly
	   replacing groups of 8 spaces with hard tabs and keeping lines
	   to 80 column max.
	* Fix build for RHEL 2.1 BOOT kernels by always #including
	  interrupt.h in lpfc.h.
	* Fix RHEL 3 build by #defining EXPORT_SYMTAB.
	* Replace sprintf with snprintf in lpfc_proc_info.
	* Fix build warnings on 2.6 kernels - remove no longer used calls
	  to  character device initialization.
	* Initial support code for discovery in tasklet conversion.
	* Removing char interface and ioctl code.
	* Change all elx prefixes to lpfc
	* Replace lpfc_write_slim() & lpfc_read_slim() with memcpy_toio(),
	  memcpy_fromio(), writel() & readl().

Changes from 20040402 to 20040409

	* Replaced lpfc_read_hbaregs_plus_offset and
	  lpfc_write_hbaregs_plus_offset functions with readl and writel.
	* Get rid of long mdelay's in insmod path
	* Changed the way our pci_device_id structures are initialized
	* Replace lpfc_read/write_CA/HA/HC/HS with calls to readl() &
	  writel() directly.
	* Increase SLI2_SLIM to 16K Increase cmd / rsp IOCBs accordingly
	* Removed lpfc_els_chk_latt from the lpfc_config_post function.
	  lpfc_els_chk_latt will enable the link event interrupts when
	  flogi is pending which causes two discovery state machines
	  running 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
	  differnet module later All 3 are currently turned on by
	  defines in lpfc_ioctl.c LPFC_DFC_IOCTL, LPFC_UTIL_IOCTL,
	  LPFC_HBAAPI_IOCTL
	* Misc cleanup: some goto's; add comments; clarify function
	  args
	* Added code to use list macro for ELXSCSITARGET_t.
	* New list implementation for ELX_MBOXQ_t
	* Cleaned up some list_head casting.
	* Put IPFC ifdef around two members of struct lpfc_nodelist.
	* Cleaned up iocb list using list macros and list_head data
	  structure.
	* lpfc_online() was missing some timer routines that were
	  started by lpfc_linux_attach().  These routines are now also
	  started by lpfc_online().  lpfc_offline() only stopped
	  els_timeout routine.  It now stops all timeout routines
	  associated with that hba.
	* Replace 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 ununsed ioclt's: ELX_READ_IOCB
	  ELX_READ_MEMSEG ELX_READ_BINFO ELX_READ_EINVAL ELX_READ_LHBA
	  ELX_READ_LXHBA ELX_SET ELX_DBG LPFC_TRACE 
	* Removed variable fc_dbg_flg
	* Fixed a bug where HBA_Q_DEPTH was set incorrectly for
	  3-digit HBAs.  Also changed can_queue so midlayer will only
	  send (HBA_Q_DEPTH - 10) cmds.
	* Clean up code in the error path, check condition.  Remove
	  ununsed sense-related fields in lun structure.
	* Added code for safety pools for following objects: mbuf/bpl,
	  mbox, iocb, ndlp, bind
	* Wrapped '#include <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, enque and deque declarations now that clock
	  doesn't use them anymore
	* Separated install rule so that BUILD_IPFC has to be set when
	  make is called in order for the install rule to attempt to
	  copy the lpfndd.o driver.  This change fixes a bug that
	  occurs because the install rule by default attempted to
	  install lpfndd.o, whereas the default make rule did not by
	  default build lpfndd.o.
	* Keep track if hbaapi index numbers need to be refreshed.
	* Removed prod_os.h from include list.
	* Removed LPFC_LOCK and LPFC_UNLOCK macros.  Added OS calls
	  into elx_os_scsiport.c.  This file is now empty.
	* Added spin_lock_irqsave and spin_unlock_irqrestore calls
	  into code directly and removed LPFC_LOCK_ and _UNLOCK_
	  macros
	* Remove references to "elx_clock.h"
	* Added utsname.h to include list.  The previous checkin to
	  elx_os.h removed its inclusion of utsname.h since there is
	  precious little in the file.  However, lpfcLINUXfcp.c needs
	  it and now has it.
	* Removed some commented-out code
	* Removed elx_lck_t data structure, stray elxDRVR_t type, and
	  include from file.  No longer used.
	* Removed two PCI Sync defines.  Removed includes - not
	  needed.  Cleaned up macro lines.
	* Added two functions from elxLINUXfcp.c.  These functions
	  were IPFC specific.
	* Removed hipri lock abstractions and added OS call into code.
	  Removed elx_lck_t and added spinlock_t directly. Moved two
	  IPFC functions into lpfc_ipport.c
	* Moved IP specific structures to lpfc_ip.h file.
	* lpfc_ipfarp_timeout() uses system timer.  Remove all usages
	  of old internal clock support.
	* Made changes to compile without IPFC support for the default
	  build.  Added ifdef IPFC for all lpfc_ip.h includes.
	* Patched elx_free_scsi_buf
  	* Removed elx_sched.o from 2.6 dependencies
	* Reworked lpfc_pcimap.
	* Use Linux swap macros to replace ELX swapping macros
	  (SWAP_SHORT, SWAP_LONG, SWAP_DATA, SWAP_DATA16,
	  PCIMEM_SHORT, PCIMEM_LONG, PCIMEM_DATA).
	* move in_interrupt() check inside of elx_sleep_ms()
	* Moved location of pci.h include.
	* Restored elx_lck_t types in elxHBA_t.
	* Removed elx_pci_dma_sync call.  Also removed some PCI
	  defines from elx_hw.h and removed the spinlock_t locks that
	  are no longer used in elx.h
	* elx_iodone() now uses system timer.
  	* elx_qfull_retry() now uses system timer.
	* lpfc_put_buf(), lpfc_ip_xri_timeout() and
	  lpfc_ip_timeout_handler() now use system timer.
	* lpfc_fdmi_tmo() and lpfc_qthrottle_up() now use system
          timer.
	* Removed num_bufs and num_iocbs configuration parameters.
	* Fixed a memory corruption bug. This was caused by a memory
	  write to ndlp structure from lpfc_cmpl_els_acc function.
	  This ndlp structure was freed from lpfc_els_unsol_event.
	* lpfc_disc_timeout() and lpfc_establish_link_tmo() now use
	  system timer.  Also update lpfc_els_retry_delay() to do a
	  single lock release at the end.
	* Remove use of PAN (pseudo adapter number).
	* Reintroduced usage of the cross compiler for building on
	  ppc64 to remove build errors that were cropping up when
	  using the standard gcc compiler.
	* Fix no-unlock-before return in lpfc_els_retry_delay which was
	  causing  a deadlock on insmod in some environments.
	* Minor format changes fix up comments
	* Create utility clock function elx_start_timer() and
	  elx_stop_timer().  All timeout routines now use these common
	  routines.
	* Minor formating changes fix up comments
	* Minor formatting changes get rid of failover defines for
	  syntax checking
	* Minor formatting changes remove ISCSI defines.
	* Fix typo in install target for 2.4 kernels.
	* Removed unused elx_scsi_add_timer extern function
	  declaration.
	* Cleanup casting around DMA masks.
	* Comment out lpfndd.o modules_install section as lpfndd.o is
	  not generated if CONFIG_NET_LPFC is not set. Also refer to
	  BASEINCLUDE only in out of kernel source module builds as it
	  will not exist otherwise.
	* Removed unused malloc counters from lpfcLINUXfcp.c.
	* Remove some unnecessary #includes in lpfcLINUXfcp.c
	* Remove unncessary #includes in elxLINUXfcp.c
	* Minor formatting cleanups in Makefile to avoid some
          linewrapping.
	* Removed unused elx_mem_pool data structure.
	* Remove several unnecessary #includes.
	* Moving fix for memory leak in ioctl lip area to sysfs's lip.
	* Removed unused elx_dma_handle_t elx_acc_handle_t
	  FC_MAX_SEGSZ and FC_MAX_POOL.
	* Rewrite of Makefile. Fixes breakages with make -j4 during
	  kernel compile. Does not recompile all files on every
	  build. Uses the kernel build's definitions of CFLAGS,
	  MODFLAGS etc. Removed "make rpm" option.
	* Removed unused #defines CLOSED, DEAD, OPENED, NORMAL_OPEN
	  and unneeded #include of elx_sched.h in elx.h.
	* Several log message updates
	* Add PCI_DEVICE_ID_FIREFLY for LP6000
	* Fixed known issues in 20040326: driver crashes on rmmod in
	  both 2.4 and 2.6 kernels
	

Changes from 20040319 to 20040326

	* Updated ChangeLog for 20040326 SourceForge drop.
	* remove lpfc_isr / lpfc_tmr logic fixed up 8 spaces from
	  previous checkins with tabs
	* replace elx_in_intr() with in_interrupt()
	* Remove unused messages 1602 and 1603.
	* Fix the following issues with log messages: Remove unused
	  messages 406, 407, 409, 927, 928, 1201, 1202, 1204, 1205, 1206
	  and 1207.  Create a new message 738 to fix duplicate instances
	  of 736.
	* Removed remaining pci interface abstractions from elxLINUXfcp.c.
	  Implemented OS calls directly in all remaining files and cleaned
	  up modules.  Removed prototypes as well.
	* Removed following functions/structures elx_mem_dmapool
	  elx_idx_dmapool elx_size_dmapool elx_kmem_lock dfc_data_alloc
	  dfc_data_free dfc_mem struct mbuf_info elx_acc_handle_t
	  data_handle elx_dma_handle_t dma_handle struct elx_memseg
	  MEMSEG_t
	* lpfc_els_timeout_handler() now uses system timer.
	* Further cleanup of #ifdef powerpc
	* lpfc_scsi_timeout_handler() now uses system timer.
	* Replace common driver's own defines for 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 ans ELX_SLINK_t by Linux struct list_head
	  (except for clock)
	* Removed following functions from code: linux_kmalloc linux_kfree
	  elx_alloc_bigbuf elx_free_bigbuf
	* Removed following abstract functions from the code.  elx_malloc
	  elx_free elx_ip_get_rcv_buf elx_ip_free_rcv_buf
	  elx_mem_alloc_dmabuf elx_mem_alloc_dmabufext elx_mem_alloc_dma
	  elx_mem_alloc_buf lpfc_bufmap
	* Removed custom PCI configuration #defines and replaced with
	  OS-provided #defines. Also added linux/pci.h to *.c files.
	* Remove elx_str_ctox.	Replace elx_str_atox with sscanf.
	* Many indentation/whitespace fixes.
	* Replace elx_str_ctox with isxdigit where it was only used to
	  check the value of a character.
	* Removed following functions from the code.  elx_kmem_free
	  elx_kmem_alloc elx_kmem_zalloc
	* Change use of 2.4 SCSI typedef Scsi_Host_Template to	struct
	  scsi_host_template for 2.6 kernels.
	* Change use of 2.4 SCSI typedefs (Scsi_Device, Scsi_Cmnd,
	  Scsi_Request) the their real struct names.
	* Move 2.6 compatibility irqreturn definitions to lpfc_compat.h.
	  Protect these definitions from conflicting with similar ones in
	  later 2.4 kernels.
	* Remove unused definitions: LINUX_TGT_t, LINUX_LUN_t,
	  LINUX_BUF_t, elx_lun_t, SET_ADAPTER_STATUS.
	* Convert pci_ calls to linux 2.6 dma_ equivalents.
	* Removed unused types: struct buf, struct sc_buf, T_SCSIBUF
	  typedef.
	* Fix Makefile so that 2.4 drivers don't always rebuild all files.
	* Remove unused _static_ and fc_lun_t definitions.
	* Cleaned up some memory pool implementation code.
	* Fix panic with char dev changes. Turns out that 2.6.4 code does
	  the same in kernel space with the 2.4 interface style
	  definitions. So remove the new char dev code altogether.
	* Remove typecasting from fc_get_cfg_param and consolidate
	  multiple instances of the parameter switch into a single
	  instance.
	* Use lpfc_is_LC_HBA() macro that tests pcidev->device directly
	  instead of saving a private copy that undergoes varied shifting
	  & casting.
	* Removed usage of all memory pools.

Changes from 20040312 to 20040319
	
	* Use dev_warn instead of printk for 2.6 kernels
	* Correct Iocbq completion routine for 2.6 kernel case
	* Change void *pOSCmd to Scsi_Smnd *pCmd
	* Change void *pOScmd to struct sk_buff *pCmd
	* Remove data directon code.
	* Removed memory pool for buf/bpl buffers and use kmalloc/kfree
	  pci_pool_alloc/free directly.
	* Move PPC check for DMA address 0 in scatter-gather list, into
	  lpfc_compat.h
	* Always use pci_unmap_single() instead of pci_unmap_page()
	* Clean up the 2.6 vs 2.4 #if blocks.
	* Conditionalize Scheduler
	* Add a comment to explain a little what the first Makefile
	  section does.
	* Removed lpfc_intr_post
	* Sysfs new display format. Also added write functionality. You
	  can [ echo "0 log_verbose 3" >
	  /sys/bus/pci/drivers/lpfc/params]. Hex support yet to be added.
	* Removed several #ifdef powerpc, including for a discovery issue
	  in lpfc_ValidLun()
	* Change elx_printf_log to use vsprintf.
	* Added lpfc_compat.h provides macros to aid compilation in the
	  Linux 2.4 kernel over various platform architectures.  Initially
	  support mapping to a DMA address.
	* Removed memory pool for nlp/bind buffers and use kmalloc/kfree
	  directly.
	* Removed memory pool for iocb buffers and use kmalloc/kfree
	  directly.
	* Removed memory pool for mailbox buffers and use kmalloc/kfree
	  directly.
	* Cleaned up back and forth casts
	* Initial support for sysfs for 2.6 kernel.
	* Changed elx_dma_addr_t to dma_addr_t
	* Fix a 2.6 kernel check to be >= 2.6.0 instead of > (was missing
	  2.6.0).
	* Remove elx_printf and elx_str_sprintf. Replace elx_print with
	  printk.
	* Replace elx_printf with printk.
	* Replace elx_str_sprintf with sprintf.
	* Removed the mem_lock, its prototype, function, macro, and
	  iflags.
	* Use kmalloc/kfree for ELX_SCSI_BUF_t
	* Use linux pci_pools for SCSI_DMA_EXT
	* Use linux pci_pools for BPLs.
	* Minor cleanup of DFC args for PPC64.
	* Several small indentation cleanups.
	* New Linux 2.6 style of char device registration.
	* Migrated members of LPFCHBA_t and LINUX_HBA_t into elxHBA_t
	* Use strcpy, strncmp, isdigit, strlen instead of abstractions
	* Cleanup of driver_template.
	* Facilitate compile time turn on/off of lpfc_network_on.
	* Split large source files into smaller, better named ones.

Changes from 2.10a to 20040312

	* Fix build for 2.4 kernels
	* Move driver version macros into lpfc_version.h file.
	* Fixed data miscompare with LIP.
	* Removed elx_sli, elx_ioc, elx_disc, elx_sch routines,
	  prototypes, and reference points.
	* Correct the space insertions with hardtabs
	* Remove routine call pointers in ELX_SLI_INIT_t struct.
	* Removed module locks except for drvr, mem, and clock.
	* Removed unused module locks from sourcebase. Kept drvr_lock,
	  mem_lock, and clock_lock.
	* Change NULL to 0
