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 recieved in
	  the small window while the device was blocked to be errored w/
	  did_no_connect. With the fix, it returns host_busy
	  (per the pre-remote port changes).
	* Merge in support for fc transport remote port use. This removes
	  any consistent bindings within the driver. All scanning is now
	  on a per-target basis driven by the discovery engine.

Changes from 20041220 to 20041229

	* Changed version number to 8.0.19
	* Fixed bug for handling RSCN type 3.  Terminate RSCN mode
	  properly after ADISC handling completes.
	* Add list_remove_head macro.  Macro cleans up memory allocation
	  list handling.  Also clean up lpfc_reset_bus_handler - routine
	  does not need to allocate its own scsi_cmnd and scsi_device
	  structures.
	* Fixed potential discovery bug, nlp list corrutpion fix potential
	  memory leak
	* Part 1 of the memory allocation rework request by linux-scsi.
	  This effort fixes the number of bdes per scsi_buf to 64, makes
	  the scatter-gather count a module parameter, builds a linked
	  list of scsi_bufs, and removes all dependencies on lpfc_mem.h.
	* Reverted lpfc_do_dpc, probe_one, remove_one to original
	  implementation.  Too many problems (driver not completing
	  initial discovery, and IO not starting to disks).  Backs out
	  kthread patch.
	* Fix race condition in lpfc_do_dpc.  If wake_up interrupt occurs
	  while lpfc_do_dpc is running disc_done and the dpc list is
	  empty, the latest insertion is missed and the schedule_timeout
	  does not wakeup.  The sleep interval is MAX_SCHEDULE_TIMEOUT
	  defined as ~0UL >> 1, a very large number.  Hacked it to 5*HZ
	  for now.
	* Fixed bug introduced when discovery thread implementation was
	  moved to kthread. kthread_stop() is not able to wake up thread
	  waiting on a semaphore and "modprobe -r lpfc" is not always
	  (most of the times) able to complete. Fix is in not using
	  semaphore for the interruptable sleep.
	* Small Makefile cleanup - Remove remnants of 2.4 vs. 2.6
	  determination.

Changes from 20041213 to 20041220

	* Changed version number to 8.0.18
	* Janitorial cleanup after removal of sliinit and ringinit[] ring
	  statistic is owned by the ring and SLI stats are in sli
	  structure.
	* Integrated patch from Christoph Hellwig <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 accomodate all three scsi_buf
	  free types to alleviate miscellaneous panics with cable pull
	  testing.
	* Set hotplug to default 0 and lpfc_target_remove to not remove
	  devices unless hotplug is enabled.
	* Fixed discovery bug: plogi cmpl uses ndlp after its freed.
	* Fixed discovery bug: rnid acc cmpl, can potentially use ndlp
	  after its freed.
	* Modularize code path in lpfc_target_remove().
	* Changes to support SCSI hotplug (ifdef'ed out because they need
	  kernel support USE_SCAN_TARGET requires kernel support to export
	  the interface to scsi_scan_target and to move the SCAN_WILD_CARD
	  define to a general scsi header file.  USE_RESCAN_HOST requires
	  kernel support to export an interface to scan_scsi_host() with
	  the rescan flag turned on).
	* Removed redundant variable declaration of lpfc_linkdown_tmo.
	* Fix for large port count remove test.
	* Added check to see if BAR1 register is valid before using BAR1
	  register for programming config_port mail box command.
	* Added lpfc_scsi_hotplug to enable/disable driver support of SCSI
	  hotplug.
	* Changed lpfc_disc_neverdev() to lpfc_disc_illegal() and changed
	  lpfc_disc_nodev() to lpfc_disc_noop().  Adjusted appropriate
	  events to use these routines.
	* Add support for SCSI device hotplug.
	* Take dummy lpfc_target's into account for lpfc_slave_destroy().
	* Bug fix to store WWPN / WWNN in NameServer / FDMI lpfc_nodelist
	  entries.
	* Added slavecnt in lpfc_target for diagnostic purposes.
	* Added lpfc_hba load/unload flags to take care of special cases
	  for add/remove device.
	* Have target add/remove delay before scanning.
	* Have rmmod path cleanup blocked devices before scsi_remove_host.
	* Added a #define for msleep for 2.6.5 kernels.
	* In reset bus handler if memory allocation fails, return FAILED
	  and not SUCCESS.
	* Have lpfc eh handlers, bus_reset and lun_reset, wait for all
	  associated I/Os to complete before returning.
	* Fix memset byte count in lpfc_hba_init so that
	  LP1050 would initialize correctly.
	* Backround nodev_timeout processing to DPC This enables us to
	  unblock (stop dev_loss_tmo) when appopriate.
	* Fix array discovery with multiple luns.  The max_luns was 0 at
	  the time the host structure was 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 loosing starget when rediscovered. We saw messages
	  like: lpfc 0000:04:02.0: 0:0263 Cannot block scsi target as a
	  result.  Moved starget field into struct lpfc_target which is
	  referenced from the node.
	* Add additional SLI layer logging in lpfc_sli.c.
	* Ignore more unexpected completions in lpfc_nportdisc.c.
	* Can not call lpfc_target_unblock from the soft interrupt
	  context.  It seems to be not nessasery to unblock target from
	  nodev timeout.
	* Introduce and use less lethal event handler for unexpected
	  events in lpfc_nportdisc.c.
	* Can not call fc_target_(un)block() functions with interrupts
	  disabled in lpfc_scsiport.c.
	* Added new configuration parameter, lpfc_max_luns range 1-32768,
	  default 32768.
	* Allow lpfc_fcp.c to call lpfc_get_hba_sym_node_name().
	* Increase nodev timeout from 20 seconds to 30 seconds.
	* Replace some kfree((void*)ptr) with kfree(ptr).
	* Make 3 functions static: lpfc_get_hba_sym_node_name,
	  lpfc_intr_prep and lpfc_setup_slim_access.  Move lpfc_intr_prep
	  and lpfc_setup_slim_access so they're defined before being used.
	* Remove an unecessary list_del() in lpfc_hbadisc.c.
	* Set nlp_state before calling lpfc_nlp_list() since this will
	  potentially call fc_target_unblock which may cause a race in
	  queuecommand by releasing host_lock.
	* Since lpfc_nodev_tmo < dev_loss_tmo remove queuecommand
	  DID_BAD_TARGET return for now.
	* Fix a problem with rcv logo.
	* Remove unused portstatistics_t structure.
	* Remove #if 0 and unnecessary checks in lpfc_fcp.c.
	* Simplify lpfc_issue_lip: Extra layer of protection removed.
	* Grab lock before calling lpfc_sli_issue_mbox(phba, pmb,
	  MBX_NOWAIT) in lpfc_sli_issue_mbox_wait().

Changes from 20040920 to 20041018

	* Changed version number to 8.0.13
	* Hide some attributes using #ifndef DFC_DEBUG ... #endif.
	* Modify Makefile to (1) make BUILD_NO_DEBUG=1 will hide some
	  (binary) attributes (2) make BUILD_FC_TRANS=0 will build driver
	  for 2.6.5 kernel with block/unblock patch.
	* Modified #ifdef names.
	* Added support for proposed FC transport host attributes (which
	  replaces some of the attributes we had local to the driver).
	  Removed the binary statistics sysfs attribute.
	* Added extra ELS verbose logging for ELS responses.
	* Added recognition for BUILD_FC_TRANS=2 to Makefile to define
	  FC_TRANS_VER2.
	* Add a pointer for link stats allocation.
	* Exported lpfc_get_hba_sym_node_name for use by FC_TRANS_VER2
	  sysfs routines.
	* Fix discovery problem in lip testing: if device sends an ELS cmd
	  (i.e. LOGO) before our FLOGI completes it should be LS_RJT'ed.
	* Moved #defines around to provide target_add/remove for upstream
	  kernel deliverables only not SLES9.  Provided ifdefs to #include
	  target_block/unblock only if FC_TRANS_VER1.
	* Add sanity check in lpfc_nlp_list move setting nlp_Target
	  outside #ifdef.
	* Added a blocked member to the lpfc_target structure for
	  block/unblock.  This member allows the driver to know when to
	  unblock for pci_remove_one or pci_add_one.  #ifdef'd some more
	  block/unblock stuff and removed some defensive checks from
	  target_block/unblock.
	* Moved + 5 second window to dev_loss_tmo setting and updated
	  comments.
	* Removed NULL target check from target_block/unblock and fixed up
	  a few comments.
	* Enable sysfs attributes on 2.6.5 kernels and remove extra
	  compatibility code.
	* Remove any and all trailing whitespace.
	* Added message 0718 and return error when dma_map_single fails.
	* Changed the fcpCntl2 commands to include an FCP_ prefix to get
	  rid of build warnings on later 2.6.9-rc kernels.  Build
	  conflicts with scsi/scsi.h.  Remove inclusions of scsi/scsi.h
	  from hbadisc.c, sli.c, and fcp.c since these modules had no
	  dependencies on scsi.h.
	* Fixed a bug with RSCN handling. A RSCN received on one device,
	  shouldn't affect other devices not referenced by the RSCN.
	* Moved #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,6) to include
	  lpfc_jedec_to_ascii to prevent warning in SLES 9.
	* Update Makefile to account for SLES 9 and scsi-target upstream
	  kernel.
	* This checkin provides block/unblock hooks for the upstream scsi
	  target kernel and 2.6.5 on SLES9 SP1 with the block/unblock
	  patch.
	* Discovery changes regarding setting targetp->pnode and
	  ndlp->nlp_Target Ensure fc_target_* routines are called properly
	  from discovery.  Remove list_del's from lpfc_cleanup().  Ensure
	  all the lpfc_consistent_bind_* routines don't set any driver
	  structure objects.
	* Fix for timeout of READ_LA or READ_SPARAM mailbox command
	  causing panic.
	* Cleanup list_del()'s for Discovery ndlp lists.
	* Bug fixes for some insmod/rmmod crashes, link down crashes and
	  device loss crashes.
	* Removed NLP_SEARCH_DEQUE.
	* Call lpfc_target_unblock only if the targetp is nonNull and with
	  the host_lock held.
	* Added qcmdcnt back along with misc bug fixes to discovery.
	* Changed tgt_io to outfcpio lpfc_fcp.c.
	* Fixed errors caused by LIP and cable pulls both with and without
	  block/unblock patch.
	* For now we have to call fc_target_unblock and fc_target_block
	  with interrupts enabled.
	* Save seg_cnt from dma_map_sg.  Save scatter-gather start address
	  and pass back to dma_unmap_sg in error with seg_cnt.
	* Incorporating block/unblock calls into driver with ifdefs.  This
	  change is supported by scsi-target-2.6 kernel and forward only.
	* Merged in some discovery bug fixes and added tgt io counters.
	* Added sysfs attributes/interfaces: read only attribute
	  "management_version" and write only attribute "issue_lip".
	* Fix build on big endian machines: while #if was OK with
	  __BIG_ENDIAN which defined as 4321, __BIG_ENDIAN_BITFIELD has to
	  be tested with #ifdef because it does not have any value, it is
	  either defined or not.
	* Add fabric_name and port_type attributes.
	* Change mdelay to msleep.  mdelay works, but wastefully uses cpu
	  resources without a lock held. Revert to msleep.  Tested with
	  sg_reset for bus and three attached targets.
	* Added the customary #ifndef...#define...#endif to
	  lpfc_version.h.
	* Integrate patches from Christoph Hellwig: two new helpers common
	  to lpfc_sli_resume_iocb and lpfc_sli_issue_iocb - singificant
	  cleanup of those two functions - the unused SLI_IOCB_USE_TXQ is
	  gone - lpfc_sli_issue_iocb_wait loses 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 accomodate rnid.
	* Fix RSCN handling so RSCN NS queries only effect NPorts found in
	  RSCN data.
	* If we rcv a plogi on a NPort queued up for discovery, clear the
	  NLP_NPR_2B_DISC bit since rcv plogi logic will force NPort thru
	  discovery.
	* Ensure lpfc_target is also cleaned up in lpfc_cleanup().
	* Preliminary changes for block/unblock kernel API extensions in
	  progress with linux-scsi list.  These are name changes and
	  prototype changes only.
	* Added send_abts flag to lpfc_els_abort. For rcv LOGO when ADISC
	  sent, the XRI of the LOGO rcv'ed is the same as the ADISC
	  sent. Thus we cannot ABTS the ADISC before sending the LOGO ACC.
	* Weed out some unused fc_flags.  Add FC_DISC_TMO.
	* board_online sysfs attribute added to support libdfc functions
	  InitDiagEnv and SetBrdEnv.
	* Streamline code in lpfc_els_retry fixup abort case in
	  lpfc_els_timeout_handler().
	* Flush discovery/ELS events when we bring SLI layer down.
	* ctlreg and slimem binary attributes added to support libdfc
	  read/write mem/ctl functions.
	* Integrated Christoph Hellwig's patch: Cleanup
	  lpfc_sli_ringpostbuf_get.
	* Modified lpfc_slave_alloc and lpfc_slave_destroy to allocate and
	  free a dummy target pointer.  This allows queuecommand to skip
	  the NULL target pointer check and avoid the console spam when
	  slave_alloc fails.
	* Fix cfg_scan_down logic, it was reversed.
	* Init list head ctrspbuflist.
	* Change name of lpfc_driver_abort to lpfc_els_abort since it is
	  only valid for ELS ring.
	* Remove unused third argument for lpfc_consistent_bind_get().
	* Fix up iotag fields in lpfc_prep_els_iocb().
	* Remove log message on code path triggered by lpfc_els_abort().
	* Set host->unique_id in lpfc_fcp.c.
	* Removed deadwood: lpfc_target.pHba not necessary anymore.
	* Integrated patch from Christoph Hellwig: remove dead
	  SLI_IOCB_POLL handling.
	* Integrated patch from Christoph Hellwig: Streamline I/O
	  submission and completion path a little.
	* Remove unnecessary lpfc_brd_no.  Ensure brd_no assignment is
	  unique.
	* Removed unused MAX_FCP_LUN.
	* Use mod_timer instead of add_timer for fdmi in lpfc_ct.c.
	* Fixed misc discovery problems.
	* Move stopping timers till just before lpfc_mem_free() call.
	* Fix up NameServer reglogin error path.
	* Cleanup possible outstanding discovery timers on rmmod.
	* Fix discovery NPort to NPort pt2pt problem.
	* Get rid of ip_tmofunc / scsi_tmofunc.
	* Integrated patch from Christoph Hellwig:
	  lpfc_disc_done/lpfc_do_dpc cleanup - lpfc_disc_done can return
	  void - move lpfc_do_dpc and lpfc_disc_done to lpfc_hbadisc.c -
	  remove checking of list emptiness before calling lpfc_disc_done,
	  it handles the 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 unsed prototypes from lpfc_crtn.h -
	  lpfc_ip_timeout_handler, lpfc_read_pci and lpfc_revoke.
	* Removed some unused prototypes from lpfc_crtn.h -
	  lpfc_scsi_hba_reset, lpfc_scsi_issue_inqsn,
	  lpfc_scsi_issue_inqp0, lpfc_scsi_timeout_handler.
	* Integrated patch from Christoph Hellwig: remove TRUE/FALSE
	  usage.
	* Integrated patch from Christoph Hellwig: Remove unused function
	  prototypes lpfc_set_pkt_len and lpfc_get_pkt_data from
	  lpfc_crtn.h - fixes build warnings.
	* Removed unused struct lpfc_dmabufip definition from lpfc_mem.h.
	* Removed pre-2.6.5 MODULE_VERSION macro from lpfc_compat.h.
	* Fixing missing static and removing dead code.
	* Adding nodewwn, portwwn and portfcid shost attributes.
	* Initial support for CT via sysfs. request payloads of size less
	  than PAGE_SIZE and rsp payloads of size PAGE_SIZE are supported.
	  Driver maintains a list of rsp's and passes back rsp's
	  corresponding to the pid of the calling process.
	* Support for RefreshInformation, GetAdapterAttributes,
	  GetPortStatistics.
	* Make nodev-tmo default to 20 seconds.
	* Fix up some DSM error cases, unreg_login rpi where needed.
	* Fix up comments for fc_target_block / fc_target_unblock.
	* Fix up code for scsi_block_requests / scsi_unblock_requests.
	* Add NLP_FCP_TARGET for nodeinfo support.
	* Move suspend/resume in lpfc_nlp_list under appropriate case -
	  Used host_lock for DPC to avoid race (remove dpc_lock)
	* Fix some corner cases for PLOGI receive - simplify error case
	  for cmpl_reglogin_reglogin_issue.
	* Bug fix for ppc64 EEH MMIO panic - always do readl after
	  writel's of HBA registers to force flush.
	* Get rid of initial static routine declarations in lpfc_hbadisc.c
	  and lpfc_els.c.
	* Updates to discovery processing.

Changes from 20040823 to 20040908

	* Changed version number to 8.0.11
	* Removed persistent binding code.
	* Display both ASC and ASCQ info.
	* Fixed link down->up transitions when linkdown tmo expires. Fix
	  was in the defensive error checking at the start of
	  queuecommand.
	* Removed lpfc_scsi_timeout_handler as this timer is no longer
	  required.  The midlayer will exhaust retries and then call
	  lpfc_abort_handler, lpfc_reset_lun_handler, and
	  lpfc_reset_target_handler.
	* Minimal support for SCSI flat space addressing/volume set
	  addressing.  Use 16 bits of LUN address so that flat
	  addressing/VSA will work.
	* Changed 2 occurences of if( 1 != f(x)) to if(f(x) != 1)
	* Drop include of lpfc_cfgparm.h.
	* Reduce stack usage of lpfc_fdmi_cmd in lpfc_ct.c.
	* Add minimum range checking property to /sys write/store
	  functions.
	* Fix display of node_name and port_name via fc transport
	  attr.
	* Removed biosparam code.
	* Removed range checking. phba->config[] array elements are now
	  embedded into the hba struct. lpfc_config_setup() has been
	  removed.
	* Collapsed lpfc_scsi_cmd_start into lpfc_queuecommand and cleaned
	  up combined routines.
	* Removed unused prototypes myprint and
	  lpfc_sched_service_high_priority_queue.
	* Removed unused function lpfc_nodev.
	* Removed scsi_cmnd->timeout_per_command cancelation. SCSI midlayer
	  now times out all commands - FW is instructed to not timeout.
	* Removed polling code from lpfc_scsi_cmd_start. Reorganized
	  queuecommand and cmd_start some.

Changes from 20040810 to 20040823

	* Changed version number to 8.0.10
	* Additional timer changes as per Arjan / Christoph's comments.
	* Used mod_timer() instead of del_timer_sync() where appropriate.
	* Fixed a use after free case (panic on 2.6.8.1 with
	  CONFIG_DEBUG_SLAB set).
	* Fix compile warning in lpfc_fcp.c.
	* Minor fix for log message, that prints unassigned brdno which is
	  zero.
	* Move scsi_host_alloc() to the beginning of probe_one(). This
	  ensures that host_lock is available at later stages and also
	  avoids tons of unnecessary initializing if host_alloc()
	  fails.
	* Removed else clause from lpfc_slave_configure that set
	  sdev->queue_depth.  The driver informs the midlayer of its
	  setting in the template and only overrides if queue tagging is
	  enabled.
	* Added PCI_DEVICE_ID_ZEPHYR and PCI_DEVICE_ID_ZFLY (Junior
	  Zephyr) support

Changes from 20040730 to 20040810
	
	* Changed version number to 8.0.9
	* Removed per HBA driver lock.  Driver now uses the host->host_lock
	* Restored support for the 2.6.5 kernel for those linux distributions
	  shipped with the 2.6.5 kernel.
	* Applied patch from Christoph Hellwig (hch@infradead.org) as follows
	  "[PATCH] use scsi host private data in ->proc_info.  
	* Applied patch from Christoph Hellwig (hch@infradead.org) as follows
	  "Re: [Emulex] Ready for next round.  This patch cleans up the memory 
	  allocation routines a little and fixes a missing mempool_destroy and
	  some missing error handling."
	* Changed pointers assignments from 0 to NULL.
	* Added fixes to the lpfc_reset_lun_handler and lpfc_reset_bus_handler
	  entry points that caused kernel to Oops or hang.
	* Added fixes to targetless hosts that caused modprobe and insmod to hang.
	* Ongoing cleanup to many files
	  
Changes from 20040723 to 20040730

	* Changed version number to 8.0.8
	* Removed unused LPFN_DRIVER_VERSION #define.
	* Folded lpfc_findnode_scsiid into lpfc_find_target, its only
	  caller.
	* Removed 2 unneeded arguments to lpfc_find_target (lun and
	  create_flag).
	* Make lpfc_sli_reset_on_init = 1
	* Minor cleanup to quieten sparse.
	* Removed missing function = 0 in tmo routine in lpfc_els.c.
	* Moved additional binding parameters into lpfc_defaults.c:
	  lpfc_automap / lpfc_fcp_bind_method
	* Use msecs_to_jiffies() where applicable.
	* Only use queue depth attribute only after SLI HBA setup was
	  completed.
	* Put in memory barriers for PPC
	* Added PCI_DEVICE_ID_HELIOS and PCI_DEVICE_ID_JFLY (Junior
	  Helios) support
	* Added 4&10 gigabit choices in user option link_speed
	* Updated timer logic: Set timer data after init_timer use
	  timer_pending() instead of expires.
	* Removed some remnants of IP over FC support from Kconfig and
	  Makefile.
	* Remove redundant prototypes for lpfc_handle_eratt,
	  lpfc_handle_latt and lpfc_read_pci.
	* Ongoing cleanup of lpfc_init.c.
	* Changed LPFC_CFG_DFT_HBA_Q_DEPTH -> LPFC_CFG_HBA_Q_DEPTH.
	* Another cleanup stab at lpfc_ct.c. Remove castings, structure
	  code sanely, remove redundant code, reorganize code so that
	  functions are invoked after definition.

Changes from 20040716 to 20040723

	* Changed version number to 8.0.7
	* Cleanup of lpfc_ct.c. Removed number of casts, removed tons of
	  dead/redundant code, cleaned up badly and poorly written code,
	  cleaned up return values.
	* Fixed Persistent binding implementation
	* Removed all references to lpfc_scsi_req_tmo
	* Removed last references to lun_skip config parameter.
	* Removed LPFC_DEV_RPTLUN node failure bit because we don't issue
	  REPORT_LUNS from the driver anymore.
	* Removed LUN-tracking in driver.  Removed lpfc_lun struct and
	  moved any functionality we still need to lpfc_target.
	* Added new lpfc_jedec_to_ascii() call and replace two instances
	  of duplicate code with calls to this function.
	* Removed Volume Set Addressing handling on LUN IDs.
	* Applied patch from Christoph Hellwig (hch@infradead.org) that
	  removes dead code belonging to lpfc_build_scsi_cmnd() and its
	  call path. This is related to the recently removed report_lun
	  code.

Changes from 20040709 to 20040716

	* Changed version number to 8.0.6
	* Removed internal report LUNs usage.  Removed functions:
	  lpfc_disc_issue_rptlun, lpfc_disc_cmpl_rptlun,
	  lpfc_disc_retry_rptlun and their use.
	* Removed usused scheduler prototypes in lpfc_crtn.h
	* Replace lpfc_geportname() with generic memcmp().
	* Rearrange code in lpfc_rcv_plogi_plogi_issue() to make it a
	  little more readable.
	* Remove redundant port_cmp != 2 check in if
	  (!port_cmp) { .... if (port_cmp != 2).... }
	* Clock changes: removed struct clk_data and timerList.
	* Clock changes: 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 parallely.
	* Add pci_disable_device to unload path.
	* Move lpfc_sleep_event from lpfc_fcp.c to lpfc_util_ioctl.c
	* Call dma_map_single() & pci_map_single() directly instead of via
	  macro lpfc_pci_map().  Allow address 0 for PPC64.
	* Change sleep to uninterruptible in lpfc_sli_issue_icob_wait
	  because this function doesn't handle signals.
	* Move lpfc_wakeup_event from lpfc_fcp.c to lpfc_ioctl.c
	* Remove unneeded #include <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 conjuction with the above
	  attributes.
	* Removed DLINK, enque and deque declarations now that clock
	  doesn't use them anymore
	* Separated install rule so that BUILD_IPFC has to be set when
	  make is called in order for the install rule to attempt to
	  copy the lpfndd.o driver.  This change fixes a bug that
	  occurs because the install rule by default attempted to
	  install lpfndd.o, whereas the default make rule did not by
	  default build lpfndd.o.
	* Keep track if hbaapi index numbers need to be refreshed.
	* Removed prod_os.h from include list.
	* Removed LPFC_LOCK and LPFC_UNLOCK macros.  Added OS calls
	  into elx_os_scsiport.c.  This file is now empty.
	* Added spin_lock_irqsave and spin_unlock_irqrestore calls
	  into code directly and removed LPFC_LOCK_ and _UNLOCK_
	  macros
	* Remove references to "elx_clock.h"
	* Added utsname.h to include list.  The previous checkin to
	  elx_os.h removed its inclusion of utsname.h since there is
	  precious little in the file.  However, lpfcLINUXfcp.c needs
	  it and now has it.
	* Removed some commented-out code
	* Removed elx_lck_t data structure, stray elxDRVR_t type, and
	  include from file.  No longer used.
	* Removed two PCI Sync defines.  Removed includes - not
	  needed.  Cleaned up macro lines.
	* Added two functions from elxLINUXfcp.c.  These functions
	  were IPFC specific.
	* Removed hipri lock abstractions and added OS call into code.
	  Removed elx_lck_t and added spinlock_t directly. Moved two
	  IPFC functions into lpfc_ipport.c
	* Moved IP specific structures to lpfc_ip.h file.
	* lpfc_ipfarp_timeout() uses system timer.  Remove all usages
	  of old internal clock support.
	* Made changes to compile without IPFC support for the default
	  build.  Added ifdef IPFC for all lpfc_ip.h includes.
	* Patched elx_free_scsi_buf
  	* Removed elx_sched.o from 2.6 dependencies
	* Reworked lpfc_pcimap.
	* Use Linux swap macros to replace ELX swapping macros
	  (SWAP_SHORT, SWAP_LONG, SWAP_DATA, SWAP_DATA16,
	  PCIMEM_SHORT, PCIMEM_LONG, PCIMEM_DATA).
	* move in_interrupt() check inside of elx_sleep_ms()
	* Moved location of pci.h include.
	* Restored elx_lck_t types in elxHBA_t.
	* Removed elx_pci_dma_sync call.  Also removed some PCI
	  defines from elx_hw.h and removed the spinlock_t locks that
	  are no longer used in elx.h
	* elx_iodone() now uses system timer.
  	* elx_qfull_retry() now uses system timer.
	* lpfc_put_buf(), lpfc_ip_xri_timeout() and
	  lpfc_ip_timeout_handler() now use system timer.
	* lpfc_fdmi_tmo() and lpfc_qthrottle_up() now use system
          timer.
	* Removed num_bufs and num_iocbs configuration parameters.
	* Fixed a memory corruption bug. This was caused by a memory
	  write to ndlp structure from lpfc_cmpl_els_acc function.
	  This ndlp structure was freed from lpfc_els_unsol_event.
	* lpfc_disc_timeout() and lpfc_establish_link_tmo() now use
	  system timer.  Also update lpfc_els_retry_delay() to do a
	  single lock release at the end.
	* Remove use of PAN (pseudo adapter number).
	* Reintroduced usage of the cross compiler for building on
	  ppc64 to remove build errors that were cropping up when
	  using the standard gcc compiler.
	* Fix no-unlock-before return in lpfc_els_retry_delay which was
	  causing  a deadlock on insmod in some environments.
	* Minor format changes fix up comments
	* Create utility clock function elx_start_timer() and
	  elx_stop_timer().  All timeout routines now use these common
	  routines.
	* Minor formating changes fix up comments
	* Minor formatting changes get rid of failover defines for
	  syntax checking
	* Minor formatting changes remove ISCSI defines.
	* Fix typo in install target for 2.4 kernels.
	* Removed unused elx_scsi_add_timer extern function
	  declaration.
	* Cleanup casting around DMA masks.
	* Comment out lpfndd.o modules_install section as lpfndd.o is
	  not generated if CONFIG_NET_LPFC is not set. Also refer to
	  BASEINCLUDE only in out of kernel source module builds as it
	  will not exist otherwise.
	* Removed unused malloc counters from lpfcLINUXfcp.c.
	* Remove some unnecessary #includes in lpfcLINUXfcp.c
	* Remove unncessary #includes in elxLINUXfcp.c
	* Minor formatting cleanups in Makefile to avoid some
          linewrapping.
	* Removed unused elx_mem_pool data structure.
	* Remove several unnecessary #includes.
	* Moving fix for memory leak in ioctl lip area to sysfs's lip.
	* Removed unused elx_dma_handle_t elx_acc_handle_t
	  FC_MAX_SEGSZ and FC_MAX_POOL.
	* Rewrite of Makefile. Fixes breakages with make -j4 during
	  kernel compile. Does not recompile all files on every
	  build. Uses the kernel build's definitions of CFLAGS,
	  MODFLAGS etc. Removed "make rpm" option.
	* Removed unused #defines CLOSED, DEAD, OPENED, NORMAL_OPEN
	  and unneeded #include of elx_sched.h in elx.h.
	* Several log message updates
	* Add PCI_DEVICE_ID_FIREFLY for LP6000
	* Fixed known issues in 20040326: driver crashes on rmmod in
	  both 2.4 and 2.6 kernels
	

Changes from 20040319 to 20040326

	* Updated ChangeLog for 20040326 SourceForge drop.
	* remove lpfc_isr / lpfc_tmr logic fixed up 8 spaces from
	  previous checkins with tabs
	* replace elx_in_intr() with in_interrupt()
	* Remove unused messages 1602 and 1603.
	* Fix the following issues with log messages: Remove unused
	  messages 406, 407, 409, 927, 928, 1201, 1202, 1204, 1205, 1206
	  and 1207.  Create a new message 738 to fix duplicate instances
	  of 736.
	* Removed remaining pci interface abstractions from elxLINUXfcp.c.
	  Implemented OS calls directly in all remaining files and cleaned
	  up modules.  Removed prototypes as well.
	* Removed following functions/structures elx_mem_dmapool
	  elx_idx_dmapool elx_size_dmapool elx_kmem_lock dfc_data_alloc
	  dfc_data_free dfc_mem struct mbuf_info elx_acc_handle_t
	  data_handle elx_dma_handle_t dma_handle struct elx_memseg
	  MEMSEG_t
	* lpfc_els_timeout_handler() now uses system timer.
	* Further cleanup of #ifdef powerpc
	* lpfc_scsi_timeout_handler() now uses system timer.
	* Replace common driver's own defines for endianess w/ Linux's
	  __BIG_ENDIAN etc.
	* Added #ifdef IPFC for all IPFC specific code.
	* lpfc_disc_retry_rptlun() now uses system timer.
	* lpfc_npr_timeout() now uses system timer.
	* Modified detect code, on insmod, to only wait a max of 2 secs if
	  link comes up and there are no devices.
	* Move remaining message logging functions into
	  elx_logmsg.c/elx_logmsg.h.
	* Added code to clear link attention bit when there is a pending
	  link event and the memory allocation for read_la mail box
	  command fails.
	* Removed function calls for mapping bar registers and allocating
	  kernel virtual memory mappings to the mapped bars Removed
	  prototypes, lpfc_driver_cache_line, and pci_bar1_map rename to
	  pci_bar2_map.
	* Allocate mbox only if the hba_state is in ready state.
	* Complete lip support via sysfs. To lip, echo brdnum >
	  /sys/bus/pci/drivers/lpfc/lip.
	* moving sysfs show/store implementations to lpfc_sysfs.c. Also add
	  support for lip.
	* Add files: lpfc_sysfs.c, lpfc_sysfs.h
	* move LPFC_DRIVER_NAME and LPFC_MODULE_DESC out of lpfcLINUXfcp.c
	  to lpfc_version.h, since it is now needed in lpfc_sysfs.c
	* elx_mbox_timeout now uses system timer
	* Changed lpfc_nodev_timeout, lpfc_els_retry_delay and
	  lpfc_linkdown_timeout to use the system timer instead of
	  internal clock support.
	* Move remaining message logging functions in elx_util.c to
	  elx_logmsg.c.
	* Remove some unnecessary typecasting.
	* Remove log message that is no longer used (was used by
	  elx_str_atox).
	* Replaced DLINK_t and SLINK_t by standard Linux list_head
	* Removed deque macro
	* Replaced ELX_DLINK_t ans ELX_SLINK_t by Linux struct list_head
	  (except for clock)
	* Removed following functions from code: linux_kmalloc linux_kfree
	  elx_alloc_bigbuf elx_free_bigbuf
	* Removed following abstract functions from the code.  elx_malloc
	  elx_free elx_ip_get_rcv_buf elx_ip_free_rcv_buf
	  elx_mem_alloc_dmabuf elx_mem_alloc_dmabufext elx_mem_alloc_dma
	  elx_mem_alloc_buf lpfc_bufmap
	* Removed custom PCI configuration #defines and replaced with
	  OS-provided #defines. Also added linux/pci.h to *.c files.
	* Remove elx_str_ctox.	Replace elx_str_atox with sscanf.
	* Many indentation/whitespace fixes.
	* Replace elx_str_ctox with isxdigit where it was only used to
	  check the value of a character.
	* Removed following functions from the code.  elx_kmem_free
	  elx_kmem_alloc elx_kmem_zalloc
	* Change use of 2.4 SCSI typedef Scsi_Host_Template to	struct
	  scsi_host_template for 2.6 kernels.
	* Change use of 2.4 SCSI typedefs (Scsi_Device, Scsi_Cmnd,
	  Scsi_Request) the their real struct names.
	* Move 2.6 compatibility irqreturn definitions to lpfc_compat.h.
	  Protect these definitions from conflicting with similar ones in
	  later 2.4 kernels.
	* Remove unused definitions: LINUX_TGT_t, LINUX_LUN_t,
	  LINUX_BUF_t, elx_lun_t, SET_ADAPTER_STATUS.
	* Convert pci_ calls to linux 2.6 dma_ equivalents.
	* Removed unused types: struct buf, struct sc_buf, T_SCSIBUF
	  typedef.
	* Fix Makefile so that 2.4 drivers don't always rebuild all files.
	* Remove unused _static_ and fc_lun_t definitions.
	* Cleaned up some memory pool implementation code.
	* Fix panic with char dev changes. Turns out that 2.6.4 code does
	  the same in kernel space with the 2.4 interface style
	  definitions. So remove the new char dev code altogether.
	* Remove typecasting from fc_get_cfg_param and consolidate
	  multiple instances of the parameter switch into a single
	  instance.
	* Use lpfc_is_LC_HBA() macro that tests pcidev->device directly
	  instead of saving a private copy that undergoes varied shifting
	  & casting.
	* Removed usage of all memory pools.

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

Changes from 2.10a to 20040312

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