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 + -
显示快捷键?