1*53ee8cc1Swenshuai.xi //<MStar Software> 2*53ee8cc1Swenshuai.xi //****************************************************************************** 3*53ee8cc1Swenshuai.xi // MStar Software 4*53ee8cc1Swenshuai.xi // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved. 5*53ee8cc1Swenshuai.xi // All software, firmware and related documentation herein ("MStar Software") are 6*53ee8cc1Swenshuai.xi // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by 7*53ee8cc1Swenshuai.xi // law, including, but not limited to, copyright law and international treaties. 8*53ee8cc1Swenshuai.xi // Any use, modification, reproduction, retransmission, or republication of all 9*53ee8cc1Swenshuai.xi // or part of MStar Software is expressly prohibited, unless prior written 10*53ee8cc1Swenshuai.xi // permission has been granted by MStar. 11*53ee8cc1Swenshuai.xi // 12*53ee8cc1Swenshuai.xi // By accessing, browsing and/or using MStar Software, you acknowledge that you 13*53ee8cc1Swenshuai.xi // have read, understood, and agree, to be bound by below terms ("Terms") and to 14*53ee8cc1Swenshuai.xi // comply with all applicable laws and regulations: 15*53ee8cc1Swenshuai.xi // 16*53ee8cc1Swenshuai.xi // 1. MStar shall retain any and all right, ownership and interest to MStar 17*53ee8cc1Swenshuai.xi // Software and any modification/derivatives thereof. 18*53ee8cc1Swenshuai.xi // No right, ownership, or interest to MStar Software and any 19*53ee8cc1Swenshuai.xi // modification/derivatives thereof is transferred to you under Terms. 20*53ee8cc1Swenshuai.xi // 21*53ee8cc1Swenshuai.xi // 2. You understand that MStar Software might include, incorporate or be 22*53ee8cc1Swenshuai.xi // supplied together with third party`s software and the use of MStar 23*53ee8cc1Swenshuai.xi // Software may require additional licenses from third parties. 24*53ee8cc1Swenshuai.xi // Therefore, you hereby agree it is your sole responsibility to separately 25*53ee8cc1Swenshuai.xi // obtain any and all third party right and license necessary for your use of 26*53ee8cc1Swenshuai.xi // such third party`s software. 27*53ee8cc1Swenshuai.xi // 28*53ee8cc1Swenshuai.xi // 3. MStar Software and any modification/derivatives thereof shall be deemed as 29*53ee8cc1Swenshuai.xi // MStar`s confidential information and you agree to keep MStar`s 30*53ee8cc1Swenshuai.xi // confidential information in strictest confidence and not disclose to any 31*53ee8cc1Swenshuai.xi // third party. 32*53ee8cc1Swenshuai.xi // 33*53ee8cc1Swenshuai.xi // 4. MStar Software is provided on an "AS IS" basis without warranties of any 34*53ee8cc1Swenshuai.xi // kind. Any warranties are hereby expressly disclaimed by MStar, including 35*53ee8cc1Swenshuai.xi // without limitation, any warranties of merchantability, non-infringement of 36*53ee8cc1Swenshuai.xi // intellectual property rights, fitness for a particular purpose, error free 37*53ee8cc1Swenshuai.xi // and in conformity with any international standard. You agree to waive any 38*53ee8cc1Swenshuai.xi // claim against MStar for any loss, damage, cost or expense that you may 39*53ee8cc1Swenshuai.xi // incur related to your use of MStar Software. 40*53ee8cc1Swenshuai.xi // In no event shall MStar be liable for any direct, indirect, incidental or 41*53ee8cc1Swenshuai.xi // consequential damages, including without limitation, lost of profit or 42*53ee8cc1Swenshuai.xi // revenues, lost or damage of data, and unauthorized system use. 43*53ee8cc1Swenshuai.xi // You agree that this Section 4 shall still apply without being affected 44*53ee8cc1Swenshuai.xi // even if MStar Software has been modified by MStar in accordance with your 45*53ee8cc1Swenshuai.xi // request or instruction for your use, except otherwise agreed by both 46*53ee8cc1Swenshuai.xi // parties in writing. 47*53ee8cc1Swenshuai.xi // 48*53ee8cc1Swenshuai.xi // 5. If requested, MStar may from time to time provide technical supports or 49*53ee8cc1Swenshuai.xi // services in relation with MStar Software to you for your use of 50*53ee8cc1Swenshuai.xi // MStar Software in conjunction with your or your customer`s product 51*53ee8cc1Swenshuai.xi // ("Services"). 52*53ee8cc1Swenshuai.xi // You understand and agree that, except otherwise agreed by both parties in 53*53ee8cc1Swenshuai.xi // writing, Services are provided on an "AS IS" basis and the warranty 54*53ee8cc1Swenshuai.xi // disclaimer set forth in Section 4 above shall apply. 55*53ee8cc1Swenshuai.xi // 56*53ee8cc1Swenshuai.xi // 6. Nothing contained herein shall be construed as by implication, estoppels 57*53ee8cc1Swenshuai.xi // or otherwise: 58*53ee8cc1Swenshuai.xi // (a) conferring any license or right to use MStar name, trademark, service 59*53ee8cc1Swenshuai.xi // mark, symbol or any other identification; 60*53ee8cc1Swenshuai.xi // (b) obligating MStar or any of its affiliates to furnish any person, 61*53ee8cc1Swenshuai.xi // including without limitation, you and your customers, any assistance 62*53ee8cc1Swenshuai.xi // of any kind whatsoever, or any information; or 63*53ee8cc1Swenshuai.xi // (c) conferring any license or right under any intellectual property right. 64*53ee8cc1Swenshuai.xi // 65*53ee8cc1Swenshuai.xi // 7. These terms shall be governed by and construed in accordance with the laws 66*53ee8cc1Swenshuai.xi // of Taiwan, R.O.C., excluding its conflict of law rules. 67*53ee8cc1Swenshuai.xi // Any and all dispute arising out hereof or related hereto shall be finally 68*53ee8cc1Swenshuai.xi // settled by arbitration referred to the Chinese Arbitration Association, 69*53ee8cc1Swenshuai.xi // Taipei in accordance with the ROC Arbitration Law and the Arbitration 70*53ee8cc1Swenshuai.xi // Rules of the Association by three (3) arbitrators appointed in accordance 71*53ee8cc1Swenshuai.xi // with the said Rules. 72*53ee8cc1Swenshuai.xi // The place of arbitration shall be in Taipei, Taiwan and the language shall 73*53ee8cc1Swenshuai.xi // be English. 74*53ee8cc1Swenshuai.xi // The arbitration award shall be final and binding to both parties. 75*53ee8cc1Swenshuai.xi // 76*53ee8cc1Swenshuai.xi //****************************************************************************** 77*53ee8cc1Swenshuai.xi //<MStar Software> 78*53ee8cc1Swenshuai.xi 79*53ee8cc1Swenshuai.xi 80*53ee8cc1Swenshuai.xi #ifndef SCSI_H 81*53ee8cc1Swenshuai.xi #define SCSI_H 82*53ee8cc1Swenshuai.xi 83*53ee8cc1Swenshuai.xi #include <MsTypes.h> 84*53ee8cc1Swenshuai.xi #include "include/drvTypes.h" 85*53ee8cc1Swenshuai.xi #include "drvUsbcommon.h" 86*53ee8cc1Swenshuai.xi //#include "../../include/kernel/Timer.h" 87*53ee8cc1Swenshuai.xi //#include "../mass_stor/drvMassStor.h" 88*53ee8cc1Swenshuai.xi 89*53ee8cc1Swenshuai.xi #define MAX_USTOR 8 90*53ee8cc1Swenshuai.xi 91*53ee8cc1Swenshuai.xi 92*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 93*53ee8cc1Swenshuai.xi 94*53ee8cc1Swenshuai.xi #define TEST_UNIT_READY 0x00 95*53ee8cc1Swenshuai.xi #define REQUEST_SENSE 0x03 96*53ee8cc1Swenshuai.xi #define FORMAT_UNIT 0x04 97*53ee8cc1Swenshuai.xi #define INQUIRY 0x12 98*53ee8cc1Swenshuai.xi #define MODE_SELECT 0x15 99*53ee8cc1Swenshuai.xi #define RESERVE 0x16 100*53ee8cc1Swenshuai.xi #define RELEASE 0x17 101*53ee8cc1Swenshuai.xi #define MODE_SENSE 0x5a 102*53ee8cc1Swenshuai.xi #define MODE_SENSE6 0x1a 103*53ee8cc1Swenshuai.xi #define START_STOP 0x1b 104*53ee8cc1Swenshuai.xi #define ALLOW_MEDIUM_REMOVAL 0x1e 105*53ee8cc1Swenshuai.xi #define READ_CAPACITY 0x25 106*53ee8cc1Swenshuai.xi #define READ_10 0x28 107*53ee8cc1Swenshuai.xi #define WRITE_10 0x2a 108*53ee8cc1Swenshuai.xi #define VERIFY 0x2f 109*53ee8cc1Swenshuai.xi #define SYNCHRONIZE_CACHE 0x35 110*53ee8cc1Swenshuai.xi #define WRITE_BUFFER 0x3b 111*53ee8cc1Swenshuai.xi #define PERSISTENT_RESERVE_IN 0x5e 112*53ee8cc1Swenshuai.xi #define PERSISTENT_RESERVE_OUT 0x5f 113*53ee8cc1Swenshuai.xi 114*53ee8cc1Swenshuai.xi #define SEND_DIAGNOSTIC 0x1d 115*53ee8cc1Swenshuai.xi 116*53ee8cc1Swenshuai.xi 117*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 118*53ee8cc1Swenshuai.xi #define GOOD 0x00 119*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 120*53ee8cc1Swenshuai.xi #define CHECK_CONDITION 0x01 121*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 122*53ee8cc1Swenshuai.xi #define CONDITION_GOOD 0x02 123*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 124*53ee8cc1Swenshuai.xi #define BUSY 0x04 125*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 126*53ee8cc1Swenshuai.xi #define INTERMEDIATE_GOOD 0x08 127*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 128*53ee8cc1Swenshuai.xi #define INTERMEDIATE_C_GOOD 0x0a 129*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 130*53ee8cc1Swenshuai.xi #define RESERVATION_CONFLICT 0x0c 131*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 132*53ee8cc1Swenshuai.xi #define COMMAND_TERMINATED 0x11 133*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 134*53ee8cc1Swenshuai.xi #define QUEUE_FULL 0x14 135*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 136*53ee8cc1Swenshuai.xi #define STATUS_MASK 0x3e 137*53ee8cc1Swenshuai.xi 138*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 139*53ee8cc1Swenshuai.xi #define NO_SENSE 0x00 140*53ee8cc1Swenshuai.xi #define RECOVERED_ERROR 0x01 141*53ee8cc1Swenshuai.xi #define NOT_READY 0x02 142*53ee8cc1Swenshuai.xi #define MEDIUM_ERROR 0x03 143*53ee8cc1Swenshuai.xi #define HARDWARE_ERROR 0x04 144*53ee8cc1Swenshuai.xi #define ILLEGAL_REQUEST 0x05 145*53ee8cc1Swenshuai.xi #define UNIT_ATTENTION 0x06 146*53ee8cc1Swenshuai.xi #define DATA_PROTECT 0x07 147*53ee8cc1Swenshuai.xi #define BLANK_CHECK 0x08 148*53ee8cc1Swenshuai.xi #define COPY_ABORTED 0x0a 149*53ee8cc1Swenshuai.xi #define ABORTED_COMMAND 0x0b 150*53ee8cc1Swenshuai.xi #define VOLUME_OVERFLOW 0x0d 151*53ee8cc1Swenshuai.xi #define MISCOMPARE 0x0e 152*53ee8cc1Swenshuai.xi 153*53ee8cc1Swenshuai.xi 154*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 155*53ee8cc1Swenshuai.xi #define TYPE_DISK 0x00 156*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 157*53ee8cc1Swenshuai.xi #define TYPE_TAPE 0x01 158*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 159*53ee8cc1Swenshuai.xi #define TYPE_PRINTER 0x02 160*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 161*53ee8cc1Swenshuai.xi #define TYPE_PROCESSOR 0x03 162*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 163*53ee8cc1Swenshuai.xi #define TYPE_WORM 0x04 164*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 165*53ee8cc1Swenshuai.xi #define TYPE_ROM 0x05 166*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 167*53ee8cc1Swenshuai.xi #define TYPE_SCANNER 0x06 168*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 169*53ee8cc1Swenshuai.xi #define TYPE_MOD 0x07 170*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 171*53ee8cc1Swenshuai.xi #define TYPE_MEDIUM_CHANGER 0x08 172*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 173*53ee8cc1Swenshuai.xi #define TYPE_COMM 0x09 174*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 175*53ee8cc1Swenshuai.xi #define TYPE_ENCLOSURE 0x0d 176*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 177*53ee8cc1Swenshuai.xi #define TYPE_NO_LUN 0x7f 178*53ee8cc1Swenshuai.xi 179*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 180*53ee8cc1Swenshuai.xi #define COMMAND_COMPLETE 0x00 181*53ee8cc1Swenshuai.xi #define EXTENDED_MESSAGE 0x01 182*53ee8cc1Swenshuai.xi #define EXTENDED_MODIFY_DATA_POINTER 0x00 183*53ee8cc1Swenshuai.xi #define EXTENDED_SDTR 0x01 184*53ee8cc1Swenshuai.xi #define EXTENDED_EXTENDED_IDENTIFY 0x02 185*53ee8cc1Swenshuai.xi #define EXTENDED_WDTR 0x03 186*53ee8cc1Swenshuai.xi #define SAVE_POINTERS 0x02 187*53ee8cc1Swenshuai.xi #define RESTORE_POINTERS 0x03 188*53ee8cc1Swenshuai.xi #define DISCONNECT 0x04 189*53ee8cc1Swenshuai.xi #define INITIATOR_ERROR 0x05 190*53ee8cc1Swenshuai.xi #define ABORT 0x06 191*53ee8cc1Swenshuai.xi #define MESSAGE_REJECT 0x07 192*53ee8cc1Swenshuai.xi #define NOP 0x08 193*53ee8cc1Swenshuai.xi #define MSG_PARITY_ERROR 0x09 194*53ee8cc1Swenshuai.xi #define LINKED_CMD_COMPLETE 0x0a 195*53ee8cc1Swenshuai.xi #define LINKED_FLG_CMD_COMPLETE 0x0b 196*53ee8cc1Swenshuai.xi #define BUS_DEVICE_RESET 0x0c 197*53ee8cc1Swenshuai.xi 198*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 199*53ee8cc1Swenshuai.xi #define INITIATE_RECOVERY 0x0f 200*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 201*53ee8cc1Swenshuai.xi #define RELEASE_RECOVERY 0x10 202*53ee8cc1Swenshuai.xi 203*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 204*53ee8cc1Swenshuai.xi #define SIMPLE_QUEUE_TAG 0x20 205*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 206*53ee8cc1Swenshuai.xi #define HEAD_OF_QUEUE_TAG 0x21 207*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 208*53ee8cc1Swenshuai.xi #define ORDERED_QUEUE_TAG 0x22 209*53ee8cc1Swenshuai.xi 210*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 211*53ee8cc1Swenshuai.xi 212*53ee8cc1Swenshuai.xi #define SCSI_IOCTL_GET_IDLUN 0x5382 /* conflicts with CDROMAUDIOBUFSIZ */ 213*53ee8cc1Swenshuai.xi 214*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 215*53ee8cc1Swenshuai.xi 216*53ee8cc1Swenshuai.xi #define SCSI_IOCTL_TAGGED_ENABLE 0x5383 217*53ee8cc1Swenshuai.xi #define SCSI_IOCTL_TAGGED_DISABLE 0x5384 218*53ee8cc1Swenshuai.xi 219*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 220*53ee8cc1Swenshuai.xi #define SCSI_IOCTL_PROBE_HOST 0x5385 221*53ee8cc1Swenshuai.xi 222*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 223*53ee8cc1Swenshuai.xi #define SCSI_IOCTL_GET_BUS_NUMBER 0x5386 224*53ee8cc1Swenshuai.xi 225*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 226*53ee8cc1Swenshuai.xi #define SCSI_IOCTL_GET_PCI 0x5387 227*53ee8cc1Swenshuai.xi 228*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 229*53ee8cc1Swenshuai.xi #define status_byte(result) (((result) >> 1) & 0x1f) 230*53ee8cc1Swenshuai.xi #define msg_byte(result) (((result) >> 8) & 0xff) 231*53ee8cc1Swenshuai.xi #define host_byte(result) (((result) >> 16) & 0xff) 232*53ee8cc1Swenshuai.xi #define driver_byte(result) (((result) >> 24) & 0xff) 233*53ee8cc1Swenshuai.xi #define suggestion(result) (driver_byte(result) & SUGGEST_MASK) 234*53ee8cc1Swenshuai.xi 235*53ee8cc1Swenshuai.xi #define sense_class(sense) (((sense) >> 4) & 0x7) 236*53ee8cc1Swenshuai.xi #define sense_error(sense) ((sense) & 0xf) 237*53ee8cc1Swenshuai.xi #define sense_valid(sense) ((sense) & 0x80); 238*53ee8cc1Swenshuai.xi 239*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 240*53ee8cc1Swenshuai.xi #define NEEDS_RETRY 0x2001 241*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 242*53ee8cc1Swenshuai.xi #define SUCCESS 0x2002 243*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 244*53ee8cc1Swenshuai.xi #define FAILED 0x2003 245*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 246*53ee8cc1Swenshuai.xi #define QUEUED 0x2004 247*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 248*53ee8cc1Swenshuai.xi #define SOFT_ERROR 0x2005 249*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 250*53ee8cc1Swenshuai.xi #define ADD_TO_MLQUEUE 0x2006 251*53ee8cc1Swenshuai.xi 252*53ee8cc1Swenshuai.xi #define IDENTIFY_BASE 0x80 253*53ee8cc1Swenshuai.xi #define IDENTIFY(can_disconnect, lun) (IDENTIFY_BASE |\ 254*53ee8cc1Swenshuai.xi ((can_disconnect) ? 0x40 : 0) |\ 255*53ee8cc1Swenshuai.xi ((lun) & 0x07)) 256*53ee8cc1Swenshuai.xi 257*53ee8cc1Swenshuai.xi 258*53ee8cc1Swenshuai.xi 259*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 260*53ee8cc1Swenshuai.xi #define MAX_COMMAND_SIZE 16 261*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 262*53ee8cc1Swenshuai.xi #define SCSI_SENSE_BUFFERSIZE 64 263*53ee8cc1Swenshuai.xi 264*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 265*53ee8cc1Swenshuai.xi 266*53ee8cc1Swenshuai.xi 267*53ee8cc1Swenshuai.xi #define DID_OK 0x00 268*53ee8cc1Swenshuai.xi #define DID_NO_CONNECT 0x01 269*53ee8cc1Swenshuai.xi #define DID_BUS_BUSY 0x02 270*53ee8cc1Swenshuai.xi #define DID_TIME_OUT 0x03 271*53ee8cc1Swenshuai.xi #define DID_BAD_TARGET 0x04 272*53ee8cc1Swenshuai.xi #define DID_ABORT 0x05 273*53ee8cc1Swenshuai.xi #define DID_PARITY 0x06 274*53ee8cc1Swenshuai.xi #define DID_ERROR 0x07 275*53ee8cc1Swenshuai.xi #define DID_RESET 0x08 276*53ee8cc1Swenshuai.xi #define DID_BAD_INTR 0x09 277*53ee8cc1Swenshuai.xi #define DID_PASSTHROUGH 0x0a 278*53ee8cc1Swenshuai.xi #define DID_SOFT_ERROR 0x0b 279*53ee8cc1Swenshuai.xi #define DRIVER_OK 0x00 280*53ee8cc1Swenshuai.xi 281*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 282*53ee8cc1Swenshuai.xi #define SCSI_DATA_UNKNOWN 0 283*53ee8cc1Swenshuai.xi #define SCSI_DATA_WRITE 1 284*53ee8cc1Swenshuai.xi #define SCSI_DATA_READ 2 285*53ee8cc1Swenshuai.xi #define SCSI_DATA_NONE 3 286*53ee8cc1Swenshuai.xi 287*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 288*53ee8cc1Swenshuai.xi #define SAM_STAT_GOOD 0x00 289*53ee8cc1Swenshuai.xi #define SAM_STAT_CHECK_CONDITION 0x02 290*53ee8cc1Swenshuai.xi #define SAM_STAT_CONDITION_MET 0x04 291*53ee8cc1Swenshuai.xi #define SAM_STAT_BUSY 0x08 292*53ee8cc1Swenshuai.xi #define SAM_STAT_INTERMEDIATE 0x10 293*53ee8cc1Swenshuai.xi #define SAM_STAT_INTERMEDIATE_CONDITION_MET 0x14 294*53ee8cc1Swenshuai.xi #define SAM_STAT_RESERVATION_CONFLICT 0x18 295*53ee8cc1Swenshuai.xi #define SAM_STAT_COMMAND_TERMINATED 0x22 /* obsolete in SAM-3 */ 296*53ee8cc1Swenshuai.xi #define SAM_STAT_TASK_SET_FULL 0x28 297*53ee8cc1Swenshuai.xi #define SAM_STAT_ACA_ACTIVE 0x30 298*53ee8cc1Swenshuai.xi #define SAM_STAT_TASK_ABORTED 0x40 299*53ee8cc1Swenshuai.xi 300*53ee8cc1Swenshuai.xi 301*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 302*53ee8cc1Swenshuai.xi #define CBW_TAG 0x01020304 // temp 303*53ee8cc1Swenshuai.xi 304*53ee8cc1Swenshuai.xi #define CBW_SIGNATE 0x43425355 305*53ee8cc1Swenshuai.xi #define CSW_SIGNATE 0x53425355 306*53ee8cc1Swenshuai.xi #define CSW_STATUS_CMD_PASS 0x00 307*53ee8cc1Swenshuai.xi #define CSW_STATUS_CMD_FAIL 0x01 308*53ee8cc1Swenshuai.xi #define CSW_STATUS_PHASE_ERROR 0x02 309*53ee8cc1Swenshuai.xi 310*53ee8cc1Swenshuai.xi #define CBW_FLAG_IN 0x80 311*53ee8cc1Swenshuai.xi #define CBW_FLAG_OUT 0x00 312*53ee8cc1Swenshuai.xi 313*53ee8cc1Swenshuai.xi #if 0 314*53ee8cc1Swenshuai.xi #define CB_LENGTH_TEST_UNIT_READY 0x06 315*53ee8cc1Swenshuai.xi #define CB_LENGTH_REQUEST_SENSE 0x0C 316*53ee8cc1Swenshuai.xi #define CB_LENGTH_INQUIRY 0x06 317*53ee8cc1Swenshuai.xi #define CB_LENGTH_MODE_SENSE 0x0C 318*53ee8cc1Swenshuai.xi //#define CB_LENGTH_ALLOW_MEDIUM_REMOVAL 0x1e 319*53ee8cc1Swenshuai.xi #define CB_LENGTH_READ_CAPACITY 0x0A 320*53ee8cc1Swenshuai.xi #define CB_LENGTH_READ_10 0x0A 321*53ee8cc1Swenshuai.xi #define CB_LENGTH_WRITE_10 0x0A 322*53ee8cc1Swenshuai.xi #else 323*53ee8cc1Swenshuai.xi #define CB_LENGTH_TEST_UNIT_READY 0x0C 324*53ee8cc1Swenshuai.xi #define CB_LENGTH_REQUEST_SENSE 0x0C 325*53ee8cc1Swenshuai.xi #define CB_LENGTH_INQUIRY 0x0C 326*53ee8cc1Swenshuai.xi #define CB_LENGTH_MODE_SENSE 0x0C 327*53ee8cc1Swenshuai.xi //#define CB_LENGTH_ALLOW_MEDIUM_REMOVAL 0x1e 328*53ee8cc1Swenshuai.xi #define CB_LENGTH_READ_CAPACITY 0x0C 329*53ee8cc1Swenshuai.xi #define CB_LENGTH_READ_10 0x0C 330*53ee8cc1Swenshuai.xi #define CB_LENGTH_WRITE_10 0x0C 331*53ee8cc1Swenshuai.xi #endif 332*53ee8cc1Swenshuai.xi 333*53ee8cc1Swenshuai.xi #define DATA_LENGTH_INQUIRY 36 334*53ee8cc1Swenshuai.xi #define DATA_LENGTH_MODE_SENSE 192 335*53ee8cc1Swenshuai.xi #define DATA_LENGTH_REQUEST_SENSE 18 336*53ee8cc1Swenshuai.xi #define DATA_LENGTH_READ_CAPACITY 8 337*53ee8cc1Swenshuai.xi 338*53ee8cc1Swenshuai.xi #define REMOVABLE_DEVICE_MASK 0x80 339*53ee8cc1Swenshuai.xi 340*53ee8cc1Swenshuai.xi typedef struct CommandBlockWrapper 341*53ee8cc1Swenshuai.xi { 342*53ee8cc1Swenshuai.xi U32 u32Signature; 343*53ee8cc1Swenshuai.xi U32 u32Tag; 344*53ee8cc1Swenshuai.xi U32 u32DataTransferLength; 345*53ee8cc1Swenshuai.xi unsigned char u8Flags; 346*53ee8cc1Swenshuai.xi unsigned char u8LUN; 347*53ee8cc1Swenshuai.xi unsigned char u8CBLength; 348*53ee8cc1Swenshuai.xi unsigned char u8CB[16]; 349*53ee8cc1Swenshuai.xi } CBW; 350*53ee8cc1Swenshuai.xi 351*53ee8cc1Swenshuai.xi typedef struct CommandStatusWrapper 352*53ee8cc1Swenshuai.xi { 353*53ee8cc1Swenshuai.xi U32 u32Signature; 354*53ee8cc1Swenshuai.xi U32 u32Tag; 355*53ee8cc1Swenshuai.xi U32 u32DataResidue; 356*53ee8cc1Swenshuai.xi unsigned char u8Status; 357*53ee8cc1Swenshuai.xi } CSW; 358*53ee8cc1Swenshuai.xi 359*53ee8cc1Swenshuai.xi typedef enum 360*53ee8cc1Swenshuai.xi { 361*53ee8cc1Swenshuai.xi SCSI_OPSTATE_TEST_UNIT_READY = 0, 362*53ee8cc1Swenshuai.xi SCSI_OPSTATE_REQUEST_SENSE, 363*53ee8cc1Swenshuai.xi SCSI_OPSTATE_INQUIRY, 364*53ee8cc1Swenshuai.xi SCSI_OPSTATE_MODE_SELECT, 365*53ee8cc1Swenshuai.xi SCSI_OPSTATE_MODE_SENSE, 366*53ee8cc1Swenshuai.xi SCSI_OPSTATE_ALLOW_MEDIUM_REMOVAL, 367*53ee8cc1Swenshuai.xi SCSI_OPSTATE_READ_CAPACITY, 368*53ee8cc1Swenshuai.xi SCSI_OPSTATE_READ_10, 369*53ee8cc1Swenshuai.xi SCSI_OPSTATE_WRITE_10 370*53ee8cc1Swenshuai.xi } ScsiOpState; 371*53ee8cc1Swenshuai.xi 372*53ee8cc1Swenshuai.xi 373*53ee8cc1Swenshuai.xi typedef struct ScsiDevice 374*53ee8cc1Swenshuai.xi { 375*53ee8cc1Swenshuai.xi // Get by INQUIRY command 376*53ee8cc1Swenshuai.xi unsigned char u8DeviceType; 377*53ee8cc1Swenshuai.xi unsigned char u8VendorID[8]; 378*53ee8cc1Swenshuai.xi unsigned char u8ProductID[16]; 379*53ee8cc1Swenshuai.xi unsigned char u8ProductVer[4]; 380*53ee8cc1Swenshuai.xi } Scsi_Device; 381*53ee8cc1Swenshuai.xi 382*53ee8cc1Swenshuai.xi // extern Scsi_Device tScsi_Device; 383*53ee8cc1Swenshuai.xi struct scsi_cmnd 384*53ee8cc1Swenshuai.xi { 385*53ee8cc1Swenshuai.xi // int sc_magic; //no use 386*53ee8cc1Swenshuai.xi 387*53ee8cc1Swenshuai.xi // struct Scsi_Host *host; 388*53ee8cc1Swenshuai.xi // U16 state; //no use 389*53ee8cc1Swenshuai.xi // U16 owner; //no use 390*53ee8cc1Swenshuai.xi 391*53ee8cc1Swenshuai.xi // Scsi_Device device; 392*53ee8cc1Swenshuai.xi 393*53ee8cc1Swenshuai.xi // Scsi_Request *sc_request; 394*53ee8cc1Swenshuai.xi // struct scsi_cmnd *next; //no use 395*53ee8cc1Swenshuai.xi // struct scsi_cmnd *reset_chain; //no use 396*53ee8cc1Swenshuai.xi 397*53ee8cc1Swenshuai.xi // int eh_state; //no use 398*53ee8cc1Swenshuai.xi /* Used for state tracking in error handlr */ 399*53ee8cc1Swenshuai.xi // void (*done) (struct scsi_cmnd *); //no use 400*53ee8cc1Swenshuai.xi /* Mid-level done function */ 401*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 402*53ee8cc1Swenshuai.xi 403*53ee8cc1Swenshuai.xi U32 serial_number; // CBW Tag 404*53ee8cc1Swenshuai.xi // U32 serial_number_at_timeout; //no use 405*53ee8cc1Swenshuai.xi 406*53ee8cc1Swenshuai.xi // int retries; //no use 407*53ee8cc1Swenshuai.xi // int allowed; //no use 408*53ee8cc1Swenshuai.xi // int timeout_per_command; //no use 409*53ee8cc1Swenshuai.xi // int timeout_total; //no use 410*53ee8cc1Swenshuai.xi // int timeout; //no use 411*53ee8cc1Swenshuai.xi 412*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 413*53ee8cc1Swenshuai.xi // unsigned volatile char internal_timeout; //no use 414*53ee8cc1Swenshuai.xi // struct scsi_cmnd *bh_next; //no use 415*53ee8cc1Swenshuai.xi /* To enumerate the commands waiting 416*53ee8cc1Swenshuai.xi to be processed. */ 417*53ee8cc1Swenshuai.xi 418*53ee8cc1Swenshuai.xi // U32 target; //no use 419*53ee8cc1Swenshuai.xi unsigned char lun; //no use?? 420*53ee8cc1Swenshuai.xi // U32 channel; //no use 421*53ee8cc1Swenshuai.xi unsigned char cmd_len; 422*53ee8cc1Swenshuai.xi // unsigned char old_cmd_len; //no use 423*53ee8cc1Swenshuai.xi unsigned char sc_data_direction; 424*53ee8cc1Swenshuai.xi // unsigned char sc_old_data_direction; //no use 425*53ee8cc1Swenshuai.xi 426*53ee8cc1Swenshuai.xi /* These elements define the operation we are about to perform */ 427*53ee8cc1Swenshuai.xi unsigned char cmnd[MAX_COMMAND_SIZE]; 428*53ee8cc1Swenshuai.xi U32 request_bufflen; /* Actual request size */ 429*53ee8cc1Swenshuai.xi 430*53ee8cc1Swenshuai.xi // struct timer_list eh_timeout; /* Used to time out the command. */ 431*53ee8cc1Swenshuai.xi void *request_buffer; /* Actual requested buffer */ 432*53ee8cc1Swenshuai.xi 433*53ee8cc1Swenshuai.xi /* These elements define the operation we ultimately want to perform */ 434*53ee8cc1Swenshuai.xi // unsigned char data_cmnd[MAX_COMMAND_SIZE]; //no use 435*53ee8cc1Swenshuai.xi // U16 old_use_sg; //no use 436*53ee8cc1Swenshuai.xi /* We save use_sg here when requesting 437*53ee8cc1Swenshuai.xi * sense info */ 438*53ee8cc1Swenshuai.xi U16 use_sg; /* Number of pieces of scatter-gather */ 439*53ee8cc1Swenshuai.xi // U16 sglist_len; //no use 440*53ee8cc1Swenshuai.xi /* size of malloc'd scatter-gather list */ 441*53ee8cc1Swenshuai.xi // U16 abort_reason; //no use 442*53ee8cc1Swenshuai.xi /* If the mid-level code requests an 443*53ee8cc1Swenshuai.xi * abort, this is the reason. */ 444*53ee8cc1Swenshuai.xi // U32 bufflen; //no use 445*53ee8cc1Swenshuai.xi /* Size of data buffer */ 446*53ee8cc1Swenshuai.xi // void *buffer; //no use 447*53ee8cc1Swenshuai.xi /* Data buffer */ 448*53ee8cc1Swenshuai.xi 449*53ee8cc1Swenshuai.xi // U32 underflow; //no use 450*53ee8cc1Swenshuai.xi /* Return error if less than 451*53ee8cc1Swenshuai.xi this amount is transferred */ 452*53ee8cc1Swenshuai.xi // U32 old_underflow; //no use 453*53ee8cc1Swenshuai.xi /* save underflow here when reusing the 454*53ee8cc1Swenshuai.xi * command for error handling */ 455*53ee8cc1Swenshuai.xi 456*53ee8cc1Swenshuai.xi // U32 transfersize; //no use 457*53ee8cc1Swenshuai.xi /* How much we are guaranteed to 458*53ee8cc1Swenshuai.xi transfer with each SCSI transfer 459*53ee8cc1Swenshuai.xi (ie, between disconnect / 460*53ee8cc1Swenshuai.xi reconnects. Probably == sector 461*53ee8cc1Swenshuai.xi size */ 462*53ee8cc1Swenshuai.xi 463*53ee8cc1Swenshuai.xi int resid; 464*53ee8cc1Swenshuai.xi /* Number of bytes requested to be 465*53ee8cc1Swenshuai.xi transferred less actual number 466*53ee8cc1Swenshuai.xi transferred (0 if not supported) */ 467*53ee8cc1Swenshuai.xi 468*53ee8cc1Swenshuai.xi // struct request *request; //no use 469*53ee8cc1Swenshuai.xi /* The command we are 470*53ee8cc1Swenshuai.xi working on */ 471*53ee8cc1Swenshuai.xi 472*53ee8cc1Swenshuai.xi unsigned char sense_buffer[SCSI_SENSE_BUFFERSIZE]; /* obtained by REQUEST SENSE 473*53ee8cc1Swenshuai.xi * when CHECK CONDITION is 474*53ee8cc1Swenshuai.xi * received on original command 475*53ee8cc1Swenshuai.xi * (auto-sense) */ 476*53ee8cc1Swenshuai.xi 477*53ee8cc1Swenshuai.xi U32 flags; 478*53ee8cc1Swenshuai.xi 479*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 480*53ee8cc1Swenshuai.xi // U32 done_late:1; //no use 481*53ee8cc1Swenshuai.xi 482*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 483*53ee8cc1Swenshuai.xi void (*scsi_done) (struct scsi_cmnd *); 484*53ee8cc1Swenshuai.xi 485*53ee8cc1Swenshuai.xi /*USB HOST USB HOST USB HOST USB HOST USB HOST USB HOST*/ 486*53ee8cc1Swenshuai.xi 487*53ee8cc1Swenshuai.xi // Scsi_Pointer SCp; /* Scratchpad used by some host adapters */ 488*53ee8cc1Swenshuai.xi 489*53ee8cc1Swenshuai.xi // unsigned char *host_scribble; //no use 490*53ee8cc1Swenshuai.xi /* The host adapter is allowed to 491*53ee8cc1Swenshuai.xi * call scsi_malloc and get some memory 492*53ee8cc1Swenshuai.xi * and hang it here. The host adapter 493*53ee8cc1Swenshuai.xi * is also expected to call scsi_free 494*53ee8cc1Swenshuai.xi * to release this memory. (The memory 495*53ee8cc1Swenshuai.xi * obtained by scsi_malloc is guaranteed 496*53ee8cc1Swenshuai.xi * to be at an address < 16Mb). */ 497*53ee8cc1Swenshuai.xi 498*53ee8cc1Swenshuai.xi int result; /* Status code from lower level driver */ 499*53ee8cc1Swenshuai.xi 500*53ee8cc1Swenshuai.xi unsigned char tag; /* SCSI-II queued command tag */ 501*53ee8cc1Swenshuai.xi // U32 pid; /* Process ID, starts at 0 */ 502*53ee8cc1Swenshuai.xi }; 503*53ee8cc1Swenshuai.xi 504*53ee8cc1Swenshuai.xi typedef struct scsi_cmnd Scsi_Cmnd; 505*53ee8cc1Swenshuai.xi 506*53ee8cc1Swenshuai.xi extern BOOL bSCSI_INQUIRY(U8 uPort, unsigned char uLunNum, unsigned char *pIngBuf); 507*53ee8cc1Swenshuai.xi extern BOOL bSCSI_READ_CAPACITY(U8 uPort, unsigned char uLunNum, 508*53ee8cc1Swenshuai.xi U32 *pTotalBlks, 509*53ee8cc1Swenshuai.xi U32 *pBlkSize); 510*53ee8cc1Swenshuai.xi extern BOOL bSCSI_TEST_UNIT_READY(U8 uPort, unsigned char uLunNum, BOOL CheckCBI); //GGYY 511*53ee8cc1Swenshuai.xi extern BOOL bInit_USB_Disk(U8 uPort); 512*53ee8cc1Swenshuai.xi extern BOOL bSCSI_Read_10(U8 uPort, 513*53ee8cc1Swenshuai.xi unsigned char uLunNum, 514*53ee8cc1Swenshuai.xi U32 u32BlockAddr, 515*53ee8cc1Swenshuai.xi U32 u32BlockNum, 516*53ee8cc1Swenshuai.xi unsigned char *u8Buffer); 517*53ee8cc1Swenshuai.xi 518*53ee8cc1Swenshuai.xi extern BOOL bSCSI_Write_10(U8 uPort, 519*53ee8cc1Swenshuai.xi unsigned char uLunNum, 520*53ee8cc1Swenshuai.xi U32 u32BlockAddr, 521*53ee8cc1Swenshuai.xi U32 u32BlockNum, 522*53ee8cc1Swenshuai.xi unsigned char *u8Buffer); 523*53ee8cc1Swenshuai.xi 524*53ee8cc1Swenshuai.xi extern BOOL bSCSI_Read_10_512(U8 uPort, 525*53ee8cc1Swenshuai.xi unsigned char uLunNum, 526*53ee8cc1Swenshuai.xi U32 u32BlockAddr, 527*53ee8cc1Swenshuai.xi U32 u32BlockNum, 528*53ee8cc1Swenshuai.xi unsigned char *u8Buffer); 529*53ee8cc1Swenshuai.xi 530*53ee8cc1Swenshuai.xi extern BOOL bSCSI_Write_10_512(U8 uPort, 531*53ee8cc1Swenshuai.xi unsigned char uLunNum, 532*53ee8cc1Swenshuai.xi U32 u32BlockAddr, 533*53ee8cc1Swenshuai.xi U32 u32BlockNum, 534*53ee8cc1Swenshuai.xi unsigned char *u8Buffer); 535*53ee8cc1Swenshuai.xi 536*53ee8cc1Swenshuai.xi extern BOOL bIsDevValid(U8 uPort, unsigned char LunNum); 537*53ee8cc1Swenshuai.xi extern unsigned char u8GetDevType(U8 uPort, unsigned char LunNum); 538*53ee8cc1Swenshuai.xi extern void vRemove_DISK_LUNs(U8 uPort); 539*53ee8cc1Swenshuai.xi #endif 540*53ee8cc1Swenshuai.xi 541