xref: /utopia/UTPA2-700.0.x/modules/usb/drv/usb_ecos/usbhost/drvSCSI.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
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