
Release notes for Marvell Linux IAL Layer, Release: 3.4.0
============================================================================

Table of Contents
-----------------

1.	Contents of Release 3.4.0
2.	Changes from Previous Releases
3.	File Structures
4.	Known Issues
5.      Notes
6.      Disclaimer
	

1. Contents of Release 3.4.0
==============================

 - Linux IAL


2. Changes from Previous Releases
=================================


Changes from Release 3.2.1
----------------------------
Updated files:
build.sh
mvLinuxIalHt.h
mvLinuxIalHt.c
mvLinuxIalLib.h
mvLinuxIalLib.c
mvLinuxIalOs.c


New Features:
=============

Kernel 2.6 support:
-------------------

Added Support for kernel version 2.6 and on: SCSI hot plug, PCI hot plug

The build.sh script modified to support for kernel version 2.6

Added makefile for kernel version 2.6

Added system work thread to handle hot plug events in kernel version 2.6

Added IALBusChangeNotifyEx(): IAL Common callback function to handle hot plug
events in kernel verison 2.6


SCSI Host Instance per SATA Channel:
------------------------------------

Each SATA channel is registered in the system as a SCSI host. Each host has one bus that is
always set to 0, so the new address of a hard drive is
<host_no, bus=0, target=PMPort, lun=0>.

Each SATA channel appears as a host in /proc/scsi/mvSata.

For kernel 2.4 and 2.6, all entry points per adapter are synchronized with the
adapter's spin lock.

Set the host queue size limit to 31 commands for NCQ and TCQ modes, and to 2 in
a none-queued mode.

For Linux 2.6, Limit the device queue size (2 to 31 commands) according to
EDMA mode.

For Linux 2.4 add mv_ial_ht_select_queue_depths(). This function sets the device
queue size to 31.

Block requests from the scsi midlayer. Whenever the channel is in the
initialization state, requests are blocked using the SCSI midlayer API
function scsi_requests_block(). The requests are unblocked when channel
initialization is finished.

Changed PRD table allocation - each channel has its own PRD table.



Bug Fixes and Modifications:
============================

Added PRD table alignment to 16 byte.

mvMicroSecondsDelay() uses usleep() instead of msleep().
The msleep() function causes exception when called from interrupt handler in kernel version 2.6.5 ).

Simplified the eh_abort() entry point, this function simply restarts the channel.

Removed unused code and variables.

In the functions mv_ial_lib_add_done_queue() and mv_ial_lib_get_first_cmnd(), added
sanity check for the input parameters and check pointers before usage.

Removed the "do_done" flag. This flag is used to mark the commands to be canceled for
a given channel from the adapter's common commands done queue. From this revision, 
each channel has its own queue.

In mv_ial_lib_event_notify(), added support for the new SATA errors events reported by the Core
Driver. This is a callback function.

In mv_ial_lib_allocate_edma_queues(), set the size of the PCI consistent memory
according to the number of SATA channels supported by teh device (8 or 4).

updated RedHat/files/modules.cgz with the following kernels:
2.4.18-14 - for RedHat 8.0
2.4.20-8  - for RedHat 9.0



Added files:
============
Makefile_2_4
Makefile_2_6

Deleted files:
==============
Makefile


3. File Structures
==================

-->LinuxIAL
      |
      +----->Makefile_2_6
      +----->Makefile_2_4
      +----->build.sh
      +----->mvLinuxIalHt.c
      +----->mvLinuxIalHt.h
      +----->mvLinuxIalLib.c
      +----->mvLinuxIalLib.h
      +----->mvLinuxIalOs.c
      +----->mvLinuxIalSmart.c
      +----->mvLinuxIalSmart.h
      +----->mvOsLinux.h
      +----->RedHat
             |
             +---->build.sh
             +---->gen_module.sh
             +---->files
                   |
                   +---->modinfo
                   +---->modules.cgz
                   +---->modules.dep
                   +---->pcitable
                   +---->rhdd-6.1

4. Known Issues
===============
- Kernel 2.6 support defined as Not Qualified as only a minimal validation was done 
  prior to the release of this package.


- In Kernel 2.6, a device may be set into offline state due to bus reset. This issue
  will be fixed in a future revision.

- Infinite loop in the SCSI error handler of Kernel 2.4:
  While handling an error, (e.g. a timeout error), the scsi_send_eh_cmnd() function
  issues a timed out queued command. When this command hits a repeatable failure 
  (e.g. MEDIUM ERROR), the SCSI error handler keep issuing that command on the 
  same (broken) block infinitely.

- For Kernel 2.4 the channel's maximum queue depth is two commands for a none-queued
  mode. This may cause a startvation if multiple drives are connected to the same
  SATA channel through a Port Multiplier (PM). The channel queue (of only two commands)
  is a shared resource between all the drives connected to that channel. The scsi-mid 
  layer is not aware of that shared resource, so it may fill the queue with commands
  of the same drive, and when trying to serivce IO's for the other drives it
  will find that this queue is full.
  This issue will be handled in future revisions.

- In Kernel 2.4 a device may be set into offline state under heavy load of bus resets
  issued by sg_reset utility.
  This issue will be fixed in future revisions.

- The Folling message may be falsely printed when reseting the SATA channel:
  "Core Driver (FATAL_ERROR) <$adapter> <$channel>: Error in handling EDMA error"
  This massage should be ignored in such case.
  This issue will be fixed in future revisions.

- In Kernel 2.6, a command may be issued to a released channel. In this case, the
  following message will be printed:
  "Linux IAL (FATAL_ERROR): in queuecommand, command queued for released host!!"
  this is a Linux issue, and seems to be fixed in the linux version 2.6.8.

- In heavy load under Kernel 2.6 - unplugging a hard drive may not be noticed
  by the OS.
  This issue will be resolved in future revisions.

- RedHat/gen_module.sh doesn't support Kernel 2.6.
  This issue will be fixed in future revisions.

- RedHat/gen_module.sh doesn't support RHEL.
  This issue will be fixed in future revisions.

5. Notes
========
Tested on the following platforms:

 - RedHat AS v3 (Kernel version 2.4.21-9.EL)
 - Fedora Core2 (Kernel version 2.6.5-1.327)
 - Suse Linux 9.1 (Kernel version 2.6.4-52)


6. Disclaimer
=============
No part of this document may be reproduced or transmitted in any form or by any means, 
electronic or mechanical, including photocopying and recording, for any purpose, without
the express written permission of Marvell. Marvell retains the right to make changes to
this document at any time, without notice. Marvell makes no warranty of any kind, 
expressed or implied, with regard to any information contained in this document, 
including, but not limited to, the implied warranties of merchantability or fitness for 
any particular purpose. Further, Marvell does not warrant the accuracy or completeness 
of the information, text, graphics, or other items contained within this document. 
Marvell products are not designed for use in life-support equipment or applications that 
would cause a life-threatening situation if any such products failed. Do not use Marvell 
products in these types of equipment or applications. 
Marvell assumes no responsibility, either for use of these products or for any infringements 
of patents and trademarks, or other rights of third parties resulting from its use. No 
license is granted under any patents, patent rights, or trademarks of Marvell.
These products may include one or more optional functions. The user has the choice of 
implementing any particular optional function. Should the user choose to implement any of 
these optional functions, it is possible that the use could be subject to third party 
intellectual property rights. Marvell recommends that the user investigate whether third party 
intellectual property rights are relevant to the intended use of these products and obtain 
licenses as appropriate under relevant intellectual property rights. 
With respect to the products described herein, the user or recipient, in the absence of 
appropriate U.S. government authorization, agrees: 
1) Not to re-export or release any such information consisting of technology, software or source 
code controlled for national security reasons by the U.S. Export Control Regulations ("EAR"), to 
a national of EAR Country Groups D:1 or E:2; 
2) Not to export the direct product of such technology or such software, to EAR Country Groups 
D:1 or E:2, if such technology or software and direct products thereof are controlled for national 
security reasons by the EAR; and, 
3) In the case of technology controlled for national security reasons under the EAR where the direct 
product of the technology is a complete plant or component of a plant, not to export to EAR Country 
Groups D:1 or E:2 the direct product of the plant or major component thereof, if such direct 
product is controlled for national security reasons by the EAR, or is subject to controls under the 
U.S. Munitions List ("USML"). 
At all times hereunder, the recipient of any such information agrees that they shall be deemed to have 
manually signed this document in connection with their receipt of any such information. 
Copyright  2004. Marvell International Ltd. All rights reserved. Marvell, the Marvell logo, 
Moving Forward Faster, Alaska, Fastwriter, GalNet, PHYAdvantage and Prestera are registered trademarks of 
Marvell. Discovery, DSP Switcher, GalTis, Horizon, Libertas, Link Street, NetGX, RADLAN, Raising The 
Technology Bar, The Technology Within, UniMAC, Virtual Cable Tester, and Yukon are trademarks of Marvell. 
All other trademarks are the property of their respective owners.
