arcmsr.h

来自「linux 内核源代码」· C头文件 代码 · 共 560 行 · 第 1/2 页

H
560
字号
/**********************************************************************************        O.S   : Linux**   FILE NAME  : arcmsr.h**        BY    : Erich Chen**   Description: SCSI RAID Device Driver for**                ARECA RAID Host adapter********************************************************************************* Copyright (C) 2002 - 2005, Areca Technology Corporation All rights reserved.****     Web site: www.areca.com.tw**       E-mail: support@areca.com.tw**** This program is free software; you can redistribute it and/or modify** it under the terms of the GNU General Public License version 2 as** published by the Free Software Foundation.** 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.********************************************************************************* Redistribution and use in source and binary forms, with or without** modification, are permitted provided that the following conditions** are met:** 1. Redistributions of source code must retain the above copyright**    notice, this list of conditions and the following disclaimer.** 2. Redistributions in binary form must reproduce the above copyright**    notice, this list of conditions and the following disclaimer in the**    documentation and/or other materials provided with the distribution.** 3. The name of the author may not be used to endorse or promote products**    derived from this software without specific prior written permission.**** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES(INCLUDING, BUT** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,** DATA, OR PROFITS; OR BUSINESS INTERRUPTION)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 OF** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.********************************************************************************/#include <linux/interrupt.h>struct class_device_attribute;/*The limit of outstanding scsi command that firmware can handle*/#define ARCMSR_MAX_OUTSTANDING_CMD						256#define ARCMSR_MAX_FREECCB_NUM							320#define ARCMSR_DRIVER_VERSION		     "Driver Version 1.20.00.15 2007/08/30"#define ARCMSR_SCSI_INITIATOR_ID						255#define ARCMSR_MAX_XFER_SECTORS							512#define ARCMSR_MAX_XFER_SECTORS_B						4096#define ARCMSR_MAX_TARGETID							17#define ARCMSR_MAX_TARGETLUN							8#define ARCMSR_MAX_CMD_PERLUN		                 ARCMSR_MAX_OUTSTANDING_CMD#define ARCMSR_MAX_QBUFFER							4096#define ARCMSR_MAX_SG_ENTRIES							38#define ARCMSR_MAX_HBB_POSTQUEUE						264/************************************************************************************************************************************************************************/#define ARC_SUCCESS                                                       0#define ARC_FAILURE                                                       1/**********************************************************************************        split 64bits dma addressing********************************************************************************/#define dma_addr_hi32(addr)               (uint32_t) ((addr>>16)>>16)#define dma_addr_lo32(addr)               (uint32_t) (addr & 0xffffffff)/**********************************************************************************        MESSAGE CONTROL CODE********************************************************************************/struct CMD_MESSAGE{      uint32_t HeaderLength;      uint8_t  Signature[8];      uint32_t Timeout;      uint32_t ControlCode;      uint32_t ReturnCode;      uint32_t Length;};/**********************************************************************************        IOP Message Transfer Data for user space********************************************************************************/struct CMD_MESSAGE_FIELD{    struct CMD_MESSAGE			cmdmessage;    uint8_t				messagedatabuffer[1032];};/* IOP message transfer */#define ARCMSR_MESSAGE_FAIL			0x0001/* DeviceType */#define ARECA_SATA_RAID				0x90000000/* FunctionCode */#define FUNCTION_READ_RQBUFFER			0x0801#define FUNCTION_WRITE_WQBUFFER			0x0802#define FUNCTION_CLEAR_RQBUFFER			0x0803#define FUNCTION_CLEAR_WQBUFFER			0x0804#define FUNCTION_CLEAR_ALLQBUFFER		0x0805#define FUNCTION_RETURN_CODE_3F			0x0806#define FUNCTION_SAY_HELLO			0x0807#define FUNCTION_SAY_GOODBYE			0x0808#define FUNCTION_FLUSH_ADAPTER_CACHE		0x0809/* ARECA IO CONTROL CODE*/#define ARCMSR_MESSAGE_READ_RQBUFFER       \	ARECA_SATA_RAID | FUNCTION_READ_RQBUFFER#define ARCMSR_MESSAGE_WRITE_WQBUFFER      \	ARECA_SATA_RAID | FUNCTION_WRITE_WQBUFFER#define ARCMSR_MESSAGE_CLEAR_RQBUFFER      \	ARECA_SATA_RAID | FUNCTION_CLEAR_RQBUFFER#define ARCMSR_MESSAGE_CLEAR_WQBUFFER      \	ARECA_SATA_RAID | FUNCTION_CLEAR_WQBUFFER#define ARCMSR_MESSAGE_CLEAR_ALLQBUFFER    \	ARECA_SATA_RAID | FUNCTION_CLEAR_ALLQBUFFER#define ARCMSR_MESSAGE_RETURN_CODE_3F      \	ARECA_SATA_RAID | FUNCTION_RETURN_CODE_3F#define ARCMSR_MESSAGE_SAY_HELLO           \	ARECA_SATA_RAID | FUNCTION_SAY_HELLO#define ARCMSR_MESSAGE_SAY_GOODBYE         \	ARECA_SATA_RAID | FUNCTION_SAY_GOODBYE#define ARCMSR_MESSAGE_FLUSH_ADAPTER_CACHE \	ARECA_SATA_RAID | FUNCTION_FLUSH_ADAPTER_CACHE/* ARECA IOCTL ReturnCode */#define ARCMSR_MESSAGE_RETURNCODE_OK              0x00000001#define ARCMSR_MESSAGE_RETURNCODE_ERROR           0x00000006#define ARCMSR_MESSAGE_RETURNCODE_3F              0x0000003F/****************************************************************   structure for holding DMA address data**************************************************************/#define IS_SG64_ADDR                0x01000000 /* bit24 */struct  SG32ENTRY{	__le32					length;	__le32					address;};struct  SG64ENTRY{	__le32					length;	__le32					address;	__le32					addresshigh;};struct SGENTRY_UNION{	union	{		struct SG32ENTRY            sg32entry;		struct SG64ENTRY            sg64entry;	}u;};/***********************************************************************      Q Buffer of IOP Message Transfer*********************************************************************/struct QBUFFER{	uint32_t      data_len;	uint8_t       data[124];};/**********************************************************************************      FIRMWARE INFO for Intel IOP R 80331 processor (Type A)********************************************************************************/struct FIRMWARE_INFO{	uint32_t      signature;		/*0, 00-03*/	uint32_t      request_len;		/*1, 04-07*/	uint32_t      numbers_queue;		/*2, 08-11*/	uint32_t      sdram_size;               /*3, 12-15*/	uint32_t      ide_channels;		/*4, 16-19*/	char          vendor[40];		/*5, 20-59*/	char          model[8];			/*15, 60-67*/	char          firmware_ver[16];     	/*17, 68-83*/	char          device_map[16];		/*21, 84-99*/};/* signature of set and get firmware config */#define ARCMSR_SIGNATURE_GET_CONFIG		      0x87974060#define ARCMSR_SIGNATURE_SET_CONFIG		      0x87974063/* message code of inbound message register */#define ARCMSR_INBOUND_MESG0_NOP		      0x00000000#define ARCMSR_INBOUND_MESG0_GET_CONFIG		      0x00000001#define ARCMSR_INBOUND_MESG0_SET_CONFIG               0x00000002#define ARCMSR_INBOUND_MESG0_ABORT_CMD                0x00000003#define ARCMSR_INBOUND_MESG0_STOP_BGRB                0x00000004#define ARCMSR_INBOUND_MESG0_FLUSH_CACHE              0x00000005#define ARCMSR_INBOUND_MESG0_START_BGRB               0x00000006#define ARCMSR_INBOUND_MESG0_CHK331PENDING            0x00000007#define ARCMSR_INBOUND_MESG0_SYNC_TIMER               0x00000008/* doorbell interrupt generator */#define ARCMSR_INBOUND_DRIVER_DATA_WRITE_OK           0x00000001#define ARCMSR_INBOUND_DRIVER_DATA_READ_OK            0x00000002#define ARCMSR_OUTBOUND_IOP331_DATA_WRITE_OK          0x00000001#define ARCMSR_OUTBOUND_IOP331_DATA_READ_OK           0x00000002/* ccb areca cdb flag */#define ARCMSR_CCBPOST_FLAG_SGL_BSIZE                 0x80000000#define ARCMSR_CCBPOST_FLAG_IAM_BIOS                  0x40000000#define ARCMSR_CCBREPLY_FLAG_IAM_BIOS                 0x40000000#define ARCMSR_CCBREPLY_FLAG_ERROR                    0x10000000/* outbound firmware ok */#define ARCMSR_OUTBOUND_MESG1_FIRMWARE_OK             0x80000000/***************************************************************************                SPEC. for Areca Type B adapter*************************************************************************//* ARECA HBB COMMAND for its FIRMWARE *//* window of "instruction flags" from driver to iop */#define ARCMSR_DRV2IOP_DOORBELL                       0x00020400#define ARCMSR_DRV2IOP_DOORBELL_MASK                  0x00020404/* window of "instruction flags" from iop to driver */#define ARCMSR_IOP2DRV_DOORBELL                       0x00020408#define ARCMSR_IOP2DRV_DOORBELL_MASK                  0x0002040C/* ARECA FLAG LANGUAGE *//* ioctl transfer */#define ARCMSR_IOP2DRV_DATA_WRITE_OK                  0x00000001/* ioctl transfer */#define ARCMSR_IOP2DRV_DATA_READ_OK                   0x00000002#define ARCMSR_IOP2DRV_CDB_DONE                       0x00000004#define ARCMSR_IOP2DRV_MESSAGE_CMD_DONE               0x00000008#define ARCMSR_DOORBELL_HANDLE_INT		      0x0000000F#define ARCMSR_DOORBELL_INT_CLEAR_PATTERN   	      0xFF00FFF0#define ARCMSR_MESSAGE_INT_CLEAR_PATTERN	      0xFF00FFF7/* (ARCMSR_INBOUND_MESG0_GET_CONFIG<<16)|ARCMSR_DRV2IOP_MESSAGE_CMD_POSTED) */#define ARCMSR_MESSAGE_GET_CONFIG		      0x00010008/* (ARCMSR_INBOUND_MESG0_SET_CONFIG<<16)|ARCMSR_DRV2IOP_MESSAGE_CMD_POSTED) */#define ARCMSR_MESSAGE_SET_CONFIG		      0x00020008/* (ARCMSR_INBOUND_MESG0_ABORT_CMD<<16)|ARCMSR_DRV2IOP_MESSAGE_CMD_POSTED) */#define ARCMSR_MESSAGE_ABORT_CMD		      0x00030008/* (ARCMSR_INBOUND_MESG0_STOP_BGRB<<16)|ARCMSR_DRV2IOP_MESSAGE_CMD_POSTED) */#define ARCMSR_MESSAGE_STOP_BGRB		      0x00040008/* (ARCMSR_INBOUND_MESG0_FLUSH_CACHE<<16)|ARCMSR_DRV2IOP_MESSAGE_CMD_POSTED) */#define ARCMSR_MESSAGE_FLUSH_CACHE                    0x00050008/* (ARCMSR_INBOUND_MESG0_START_BGRB<<16)|ARCMSR_DRV2IOP_MESSAGE_CMD_POSTED) */#define ARCMSR_MESSAGE_START_BGRB		      0x00060008#define ARCMSR_MESSAGE_START_DRIVER_MODE	      0x000E0008#define ARCMSR_MESSAGE_SET_POST_WINDOW		      0x000F0008/* ARCMSR_OUTBOUND_MESG1_FIRMWARE_OK */#define ARCMSR_MESSAGE_FIRMWARE_OK		      0x80000000/* ioctl transfer */#define ARCMSR_DRV2IOP_DATA_WRITE_OK                  0x00000001/* ioctl transfer */#define ARCMSR_DRV2IOP_DATA_READ_OK                   0x00000002#define ARCMSR_DRV2IOP_CDB_POSTED                     0x00000004#define ARCMSR_DRV2IOP_MESSAGE_CMD_POSTED             0x00000008/* data tunnel buffer between user space program and its firmware *//* user space data to iop 128bytes */#define ARCMSR_IOCTL_WBUFFER			      0x0000fe00/* iop data to user space 128bytes */#define ARCMSR_IOCTL_RBUFFER			      0x0000ff00/* iop message_rwbuffer for message command */#define ARCMSR_MSGCODE_RWBUFFER			      0x0000fa00/**********************************************************************************    ARECA SCSI COMMAND DESCRIPTOR BLOCK size 0x1F8 (504)********************************************************************************/struct ARCMSR_CDB{	uint8_t							Bus;	uint8_t							TargetID;	uint8_t							LUN;	uint8_t							Function;	uint8_t							CdbLength;	uint8_t							sgcount;	uint8_t							Flags;

⌨️ 快捷键说明

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