3w-9xxx.h

来自「Linux Kernel 2.6.9 for OMAP1710」· C头文件 代码 · 共 705 行 · 第 1/2 页

H
705
字号
/*   3w-9xxx.h -- 3ware 9000 Storage Controller device driver for Linux.   Written By: Adam Radford <linuxraid@amcc.com>   Copyright (C) 2004 Applied Micro Circuits Corporation.   This program is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; version 2 of the License.   This program is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.   NO WARRANTY   THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR   CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT   LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is   solely responsible for determining the appropriateness of using and   distributing the Program and assumes all risks associated with its   exercise of rights under this Agreement, including but not limited to   the risks and costs of program errors, damage to or loss of data,   programs or equipment, and unavailability or interruption of operations.   DISCLAIMER OF LIABILITY   NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL   DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR   TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE   USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED   HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES   You should have received a copy of the GNU General Public License   along with this program; if not, write to the Free Software   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA   Bugs/Comments/Suggestions should be mailed to:   linuxraid@amcc.com   For more information, goto:   http://www.amcc.com*/#ifndef _3W_9XXX_H#define _3W_9XXX_H/* AEN string type */typedef struct TAG_twa_message_type {  unsigned int   code;  char*          text;} twa_message_type;/* AEN strings */static twa_message_type twa_aen_table[] = {	{0x0000, "AEN queue empty"},	{0x0001, "Controller reset occurred"},	{0x0002, "Degraded unit detected"},	{0x0003, "Controller error occured"},	{0x0004, "Background rebuild failed"},	{0x0005, "Background rebuild done"},	{0x0006, "Incomplete unit detected"},	{0x0007, "Background initialize done"},	{0x0008, "Unclean shutdown detected"},	{0x0009, "Drive timeout detected"},	{0x000A, "Drive error detected"},	{0x000B, "Rebuild started"},	{0x000C, "Background initialize started"},	{0x000D, "Entire logical unit was deleted"},	{0x000E, "Background initialize failed"},	{0x000F, "SMART attribute exceeded threshold"},	{0x0010, "Power supply reported AC under range"},	{0x0011, "Power supply reported DC out of range"},	{0x0012, "Power supply reported a malfunction"},	{0x0013, "Power supply predicted malfunction"},	{0x0014, "Battery charge is below threshold"},	{0x0015, "Fan speed is below threshold"},	{0x0016, "Temperature sensor is above threshold"},	{0x0017, "Power supply was removed"},	{0x0018, "Power supply was inserted"},	{0x0019, "Drive was removed from a bay"},	{0x001A, "Drive was inserted into a bay"},	{0x001B, "Drive bay cover door was opened"},	{0x001C, "Drive bay cover door was closed"},	{0x001D, "Product case was opened"},	{0x0020, "Prepare for shutdown (power-off)"},	{0x0021, "Downgrade UDMA mode to lower speed"},	{0x0022, "Upgrade UDMA mode to higher speed"},	{0x0023, "Sector repair completed"},	{0x0024, "Sbuf memory test failed"},	{0x0025, "Error flushing cached write data to array"},	{0x0026, "Drive reported data ECC error"},	{0x0027, "DCB has checksum error"},	{0x0028, "DCB version is unsupported"},	{0x0029, "Background verify started"},	{0x002A, "Background verify failed"},	{0x002B, "Background verify done"},	{0x002C, "Bad sector overwritten during rebuild"},	{0x002D, "Background rebuild error on source drive"},	{0x002E, "Replace failed because replacement drive too small"},	{0x002F, "Verify failed because array was never initialized"},	{0x0030, "Unsupported ATA drive"},	{0x0031, "Synchronize host/controller time"},	{0x0032, "Spare capacity is inadequate for some units"},	{0x0033, "Background migration started"},	{0x0034, "Background migration failed"},	{0x0035, "Background migration done"},	{0x0036, "Verify detected and fixed data/parity mismatch"},	{0x0037, "SO-DIMM incompatible"},	{0x0038, "SO-DIMM not detected"},	{0x0039, "Corrected Sbuf ECC error"},	{0x003A, "Drive power on reset detected"},	{0x003B, "Background rebuild paused"},	{0x003C, "Background initialize paused"},	{0x003D, "Background verify paused"},	{0x003E, "Background migration paused"},	{0x003F, "Corrupt flash file system detected"},	{0x0040, "Flash file system repaired"},	{0x0041, "Unit number assignments were lost"},	{0x0042, "Error during read of primary DCB"},	{0x0043, "Latent error found in backup DCB"},	{0x00FC, "Recovered/finished array membership update"},	{0x00FD, "Handler lockup"},	{0x00FE, "Retrying PCI transfer"},	{0x00FF, "AEN queue is full"},	{0xFFFFFFFF, (char*) 0}};/* AEN severity table */static char *twa_aen_severity_table[] ={	"None", "ERROR", "WARNING", "INFO", "DEBUG", (char*) 0};/* Error strings */static twa_message_type twa_error_table[] = {	{0x0100, "SGL entry contains zero data"},	{0x0101, "Invalid command opcode"},	{0x0102, "SGL entry has unaligned address"},	{0x0103, "SGL size does not match command"},	{0x0104, "SGL entry has illegal length"},	{0x0105, "Command packet is not aligned"},	{0x0106, "Invalid request ID"},	{0x0107, "Duplicate request ID"},	{0x0108, "ID not locked"},	{0x0109, "LBA out of range"},	{0x010A, "Logical unit not supported"},	{0x010B, "Parameter table does not exist"},	{0x010C, "Parameter index does not exist"},	{0x010D, "Invalid field in CDB"},	{0x010E, "Specified port has invalid drive"},	{0x010F, "Parameter item size mismatch"},	{0x0110, "Failed memory allocation"},	{0x0111, "Memory request too large"},	{0x0112, "Out of memory segments"},	{0x0113, "Invalid address to deallocate"},	{0x0114, "Out of memory"},	{0x0115, "Out of heap"},	{0x0120, "Double degrade"},	{0x0121, "Drive not degraded"},	{0x0122, "Reconstruct error"},	{0x0123, "Replace not accepted"},	{0x0124, "Replace drive capacity too small"},	{0x0125, "Sector count not allowed"},	{0x0126, "No spares left"},	{0x0127, "Reconstruct error"},	{0x0128, "Unit is offline"},	{0x0129, "Cannot update status to DCB"},	{0x0130, "Invalid stripe handle"},	{0x0131, "Handle that was not locked"},	{0x0132, "Handle that was not empty"},	{0x0133, "Handle has different owner"},	{0x0140, "IPR has parent"},	{0x0150, "Illegal Pbuf address alignment"},	{0x0151, "Illegal Pbuf transfer length"},	{0x0152, "Illegal Sbuf address alignment"},	{0x0153, "Illegal Sbuf transfer length"},	{0x0160, "Command packet too large"},	{0x0161, "SGL exceeds maximum length"},	{0x0162, "SGL has too many entries"},	{0x0170, "Insufficient resources for rebuilder"},	{0x0171, "Verify error (data != parity)"},	{0x0180, "Requested segment not in directory of this DCB"},	{0x0181, "DCB segment has unsupported version"},	{0x0182, "DCB segment has checksum error"},	{0x0183, "DCB support (settings) segment invalid"},	{0x0184, "DCB UDB (unit descriptor block) segment invalid"},	{0x0185, "DCB GUID (globally unique identifier) segment invalid"},	{0x01A0, "Could not clear Sbuf"},	{0x01C0, "Flash identify failed"},	{0x01C1, "Flash out of bounds"},	{0x01C2, "Flash verify error"},	{0x01C3, "Flash file object not found"},	{0x01C4, "Flash file already present"},	{0x01C5, "Flash file system full"},	{0x01C6, "Flash file not present"},	{0x01C7, "Flash file size error"},	{0x01C8, "Bad flash file checksum"},	{0x01CA, "Corrupt flash file system detected"},	{0x01D0, "Invalid field in parameter list"},	{0x01D1, "Parameter list length error"},	{0x01D2, "Parameter item is not changeable"},	{0x01D3, "Parameter item is not saveable"},	{0x0200, "UDMA CRC error"},	{0x0201, "Internal CRC error"},	{0x0202, "Data ECC error"},	{0x0203, "ADP level 1 error"},	{0x0204, "Port timeout"},	{0x0205, "Drive power on reset"},	{0x0206, "ADP level 2 error"},	{0x0207, "Soft reset failed"},	{0x0208, "Drive not ready"},	{0x0209, "Unclassified port error"},	{0x020A, "Drive aborted command"},	{0x0210, "Internal CRC error"},	{0x0211, "PCI abort error"},	{0x0212, "PCI parity error"},	{0x0213, "Port handler error"},	{0x0214, "Token interrupt count error"},	{0x0215, "Timeout waiting for PCI transfer"},	{0x0216, "Corrected buffer ECC"},	{0x0217, "Uncorrected buffer ECC"},	{0x0230, "Unsupported command during flash recovery"},	{0x0231, "Next image buffer expected"},	{0x0232, "Binary image architecture incompatible"},	{0x0233, "Binary image has no signature"},	{0x0234, "Binary image has bad checksum"},	{0x0235, "Image downloaded overflowed buffer"},	{0x0240, "I2C device not found"},	{0x0241, "I2C transaction aborted"},	{0x0242, "SO-DIMM parameter(s) incompatible using defaults"},	{0x0243, "SO-DIMM unsupported"},	{0x0248, "SPI transfer status error"},	{0x0249, "SPI transfer timeout error"},	{0x0250, "Invalid unit descriptor size in CreateUnit"},	{0x0251, "Unit descriptor size exceeds data buffer in CreateUnit"},	{0x0252, "Invalid value in CreateUnit descriptor"},	{0x0253, "Inadequate disk space to support descriptor in CreateUnit"},	{0x0254, "Unable to create data channel for this unit descriptor"},	{0x0255, "CreateUnit descriptor specifies a drive already in use"},	{0x0256, "Unable to write configuration to all disks during CreateUnit"},	{0x0257, "CreateUnit does not support this descriptor version"},	{0x0258, "Invalid subunit for RAID 0 or 5 in CreateUnit"},	{0x0259, "Too many descriptors in CreateUnit"},	{0x025A, "Invalid configuration specified in CreateUnit descriptor"},	{0x025B, "Invalid LBA offset specified in CreateUnit descriptor"},	{0x025C, "Invalid stripelet size specified in CreateUnit descriptor"},	{0x0260, "SMART attribute exceeded threshold"},	{0xFFFFFFFF, (char*) 0}};/* Control register bit definitions */#define TW_CONTROL_CLEAR_HOST_INTERRUPT	       0x00080000#define TW_CONTROL_CLEAR_ATTENTION_INTERRUPT   0x00040000#define TW_CONTROL_MASK_COMMAND_INTERRUPT      0x00020000#define TW_CONTROL_MASK_RESPONSE_INTERRUPT     0x00010000#define TW_CONTROL_UNMASK_COMMAND_INTERRUPT    0x00008000#define TW_CONTROL_UNMASK_RESPONSE_INTERRUPT   0x00004000#define TW_CONTROL_CLEAR_ERROR_STATUS	       0x00000200#define TW_CONTROL_ISSUE_SOFT_RESET	       0x00000100#define TW_CONTROL_ENABLE_INTERRUPTS	       0x00000080#define TW_CONTROL_DISABLE_INTERRUPTS	       0x00000040#define TW_CONTROL_ISSUE_HOST_INTERRUPT	       0x00000020#define TW_CONTROL_CLEAR_PARITY_ERROR          0x00800000#define TW_CONTROL_CLEAR_QUEUE_ERROR           0x00400000#define TW_CONTROL_CLEAR_PCI_ABORT             0x00100000#define TW_CONTROL_CLEAR_SBUF_WRITE_ERROR      0x00000008/* Status register bit definitions */#define TW_STATUS_MAJOR_VERSION_MASK	       0xF0000000#define TW_STATUS_MINOR_VERSION_MASK	       0x0F000000#define TW_STATUS_PCI_PARITY_ERROR	       0x00800000#define TW_STATUS_QUEUE_ERROR		       0x00400000#define TW_STATUS_MICROCONTROLLER_ERROR	       0x00200000#define TW_STATUS_PCI_ABORT		       0x00100000#define TW_STATUS_HOST_INTERRUPT	       0x00080000#define TW_STATUS_ATTENTION_INTERRUPT	       0x00040000#define TW_STATUS_COMMAND_INTERRUPT	       0x00020000#define TW_STATUS_RESPONSE_INTERRUPT	       0x00010000#define TW_STATUS_COMMAND_QUEUE_FULL	       0x00008000#define TW_STATUS_RESPONSE_QUEUE_EMPTY	       0x00004000#define TW_STATUS_MICROCONTROLLER_READY	       0x00002000#define TW_STATUS_COMMAND_QUEUE_EMPTY	       0x00001000#define TW_STATUS_EXPECTED_BITS		       0x00002000#define TW_STATUS_UNEXPECTED_BITS	       0x00F00008#define TW_STATUS_SBUF_WRITE_ERROR             0x00000008#define TW_STATUS_VALID_INTERRUPT              0x00DF0008/* RESPONSE QUEUE BIT DEFINITIONS */#define TW_RESPONSE_ID_MASK		       0x00000FF0/* PCI related defines */#define TW_DEVICE_NAME			       "3w-9xxx"#define TW_NUMDEVICES 1#define TW_PCI_CLEAR_PARITY_ERRORS 0xc100#define TW_PCI_CLEAR_PCI_ABORT     0x2000/* Command packet opcodes used by the driver */#define TW_OP_INIT_CONNECTION 0x1#define TW_OP_GET_PARAM	      0x12#define TW_OP_SET_PARAM	      0x13#define TW_OP_EXECUTE_SCSI    0x10#define TW_OP_DOWNLOAD_FIRMWARE 0x16#define TW_OP_RESET             0x1C/* Asynchronous Event Notification (AEN) codes used by the driver */#define TW_AEN_QUEUE_EMPTY       0x0000#define TW_AEN_SOFT_RESET        0x0001#define TW_AEN_SYNC_TIME_WITH_HOST 0x031#define TW_AEN_SEVERITY_ERROR    0x1#define TW_AEN_SEVERITY_DEBUG    0x4#define TW_AEN_NOT_RETRIEVED 0x1#define TW_AEN_RETRIEVED 0x2/* Command state defines */#define TW_S_INITIAL   0x1  /* Initial state */#define TW_S_STARTED   0x2  /* Id in use */#define TW_S_POSTED    0x4  /* Posted to the controller */#define TW_S_PENDING   0x8  /* Waiting to be posted in isr */#define TW_S_COMPLETED 0x10 /* Completed by isr */#define TW_S_FINISHED  0x20 /* I/O completely done *//* Compatibility defines */#define TW_9000_ARCH_ID 0x5#define TW_CURRENT_FW_SRL 24#define TW_CURRENT_FW_BUILD 5#define TW_CURRENT_FW_BRANCH 1/* Phase defines */#define TW_PHASE_INITIAL 0#define TW_PHASE_SINGLE  1#define TW_PHASE_SGLIST  2/* Misc defines */#define TW_SECTOR_SIZE                        512#define TW_ALIGNMENT_9000                     4  /* 4 bytes */#define TW_ALIGNMENT_9000_SGL                 0x3#define TW_MAX_UNITS			      16#define TW_INIT_MESSAGE_CREDITS		      0x100#define TW_INIT_COMMAND_PACKET_SIZE	      0x3#define TW_INIT_COMMAND_PACKET_SIZE_EXTENDED  0x6#define TW_EXTENDED_INIT_CONNECT	      0x2#define TW_BUNDLED_FW_SAFE_TO_FLASH	      0x4#define TW_CTLR_FW_RECOMMENDS_FLASH	      0x8#define TW_CTLR_FW_COMPATIBLE		      0x2#define TW_BASE_FW_SRL			      0x17#define TW_BASE_FW_BRANCH		      0#define TW_BASE_FW_BUILD		      1#if BITS_PER_LONG > 32#define TW_APACHE_MAX_SGL_LENGTH 72

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?