aboutsummaryrefslogtreecommitdiff
path: root/drivers/staging/rts5139/rts51x_scsi.h
blob: 1a0d705661863558bb86a87509ca116ad23097db (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/* Driver for Realtek RTS51xx USB card reader
 * Header file
 *
 * Copyright(c) 2009 Realtek Semiconductor Corp. All rights reserved.
 *
 * 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; either version 2, or (at your option) any
 * later version.
 *
 * 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.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, see <http://www.gnu.org/licenses/>.
 *
 * Author:
 *   wwang (wei_wang@realsil.com.cn)
 *   No. 450, Shenhu Road, Suzhou Industry Park, Suzhou, China
 * Maintainer:
 *   Edwin Rong (edwin_rong@realsil.com.cn)
 *   No. 450, Shenhu Road, Suzhou Industry Park, Suzhou, China
 */

#ifndef __RTS51X_SCSI_H
#define __RTS51X_SCSI_H

#include <linux/usb.h>
#include <linux/usb_usual.h>
#include <linux/blkdev.h>
#include <linux/completion.h>
#include <linux/mutex.h>
#include <scsi/scsi_host.h>

#include "rts51x_chip.h"

#define MS_SP_CMND		0xFA
#define MS_FORMAT		0xA0
#define GET_MS_INFORMATION	0xB0

#define VENDOR_CMND		0xF0

#define READ_STATUS		0x09

#define READ_MEM		0x0D
#define WRITE_MEM		0x0E
#define GET_BUS_WIDTH		0x13
#define GET_SD_CSD		0x14
#define TOGGLE_GPIO		0x15
#define TRACE_MSG		0x18

#define SCSI_APP_CMD		0x10

#define PP_READ10		0x1A
#define PP_WRITE10		0x0A
#define READ_HOST_REG		0x1D
#define WRITE_HOST_REG		0x0D
#define SET_VAR			0x05
#define GET_VAR			0x15
#define DMA_READ		0x16
#define DMA_WRITE		0x06
#define GET_DEV_STATUS		0x10
#define SET_CHIP_MODE		0x27
#define SUIT_CMD		0xE0
#define WRITE_PHY		0x07
#define READ_PHY		0x17

#define INIT_BATCHCMD		0x41
#define ADD_BATCHCMD		0x42
#define SEND_BATCHCMD		0x43
#define GET_BATCHRSP		0x44

#ifdef SUPPORT_CPRM
/* SD Pass Through Command Extension */
#define SD_PASS_THRU_MODE	0xD0
#define SD_EXECUTE_NO_DATA	0xD1
#define SD_EXECUTE_READ		0xD2
#define SD_EXECUTE_WRITE	0xD3
#define SD_GET_RSP		0xD4
#define SD_HW_RST		0xD6
#endif

#ifdef SUPPORT_MAGIC_GATE
#define CMD_MSPRO_MG_RKEY	0xA4	/* Report Key Command */
#define CMD_MSPRO_MG_SKEY	0xA3	/* Send Key Command */

/* CBWCB field: key class */
#define KC_MG_R_PRO		0xBE	/* MG-R PRO */

/* CBWCB field: key format */
#define KF_SET_LEAF_ID		0x31	/* Set Leaf ID */
#define KF_GET_LOC_EKB		0x32	/* Get Local EKB */
#define KF_CHG_HOST		0x33	/* Challenge (host) */
#define KF_RSP_CHG		0x34	/* Response and Challenge (device)  */
#define KF_RSP_HOST		0x35	/* Response (host) */
#define KF_GET_ICV		0x36	/* Get ICV */
#define KF_SET_ICV		0x37	/* SSet ICV */
#endif

struct rts51x_chip;

/*-----------------------------------
    Start-Stop-Unit
-----------------------------------*/
#define STOP_MEDIUM			0x00	/* access disable */
#define MAKE_MEDIUM_READY		0x01	/* access enable */
#define UNLOAD_MEDIUM			0x02	/* unload */
#define LOAD_MEDIUM			0x03	/* load */

/*-----------------------------------
    STANDARD_INQUIRY
-----------------------------------*/
#define QULIFIRE                0x00
#define AENC_FNC                0x00
#define TRML_IOP                0x00
#define REL_ADR                 0x00
#define WBUS_32                 0x00
#define WBUS_16                 0x00
#define SYNC                    0x00
#define LINKED                  0x00
#define CMD_QUE                 0x00
#define SFT_RE                  0x00

#define VEN_ID_LEN              8	/* Vendor ID Length         */
#define PRDCT_ID_LEN            16	/* Product ID Length        */
#define PRDCT_REV_LEN           4	/* Product LOT Length       */

#define DRCT_ACCESS_DEV         0x00	/* Direct Access Device             */
#define RMB_DISC                0x80	/* The Device is Removable          */
#define ANSI_SCSI2              0x02	/* Based on ANSI-SCSI2              */

#define SCSI                    0x00	/* Interface ID                     */

void rts51x_scsi_show_command(struct scsi_cmnd *srb);
void rts51x_set_sense_type(struct rts51x_chip *chip, unsigned int lun, int sense_type);
void rts51x_set_sense_data(struct rts51x_chip *chip, unsigned int lun, u8 err_code,
		    u8 sense_key, u32 info, u8 asc, u8 ascq, u8 sns_key_info0,
		    u16 sns_key_info1);

int rts51x_scsi_handler(struct scsi_cmnd *srb, struct rts51x_chip *chip);

struct Scsi_Host;
struct scsi_device;
struct scsi_cmnd;

int slave_alloc(struct scsi_device *sdev);
int slave_configure(struct scsi_device *sdev);
int queuecommand(struct Scsi_Host *, struct scsi_cmnd *);
int command_abort(struct scsi_cmnd *srb);
int bus_reset(struct scsi_cmnd *srb);

#endif /* __RTS51X_SCSI_H */