1 /* Driver for Realtek RTS51xx USB card reader
2  *
3  * Copyright(c) 2009 Realtek Semiconductor Corp. All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License as published by the
7  * Free Software Foundation; either version 2, or (at your option) any
8  * later version.
9  *
10  * This program is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, see <http://www.gnu.org/licenses/>.
17  *
18  * Author:
19  *   wwang (wei_wang@realsil.com.cn)
20  *   No. 450, Shenhu Road, Suzhou Industry Park, Suzhou, China
21  * Maintainer:
22  *   Edwin Rong (edwin_rong@realsil.com.cn)
23  *   No. 450, Shenhu Road, Suzhou Industry Park, Suzhou, China
24  */
25 
26 #include <linux/blkdev.h>
27 #include <linux/kthread.h>
28 #include <linux/sched.h>
29 #include <linux/slab.h>
30 #include <linux/vmalloc.h>
31 #include <linux/export.h>
32 
33 #include <scsi/scsi.h>
34 #include <scsi/scsi_eh.h>
35 #include <scsi/scsi_device.h>
36 
37 #include "debug.h"
38 #include "rts51x.h"
39 #include "rts51x_chip.h"
40 #include "rts51x_scsi.h"
41 #include "rts51x_card.h"
42 #include "rts51x_transport.h"
43 #include "rts51x_sys.h"
44 #include "sd_cprm.h"
45 #include "ms_mg.h"
46 #include "trace.h"
47 
scsi_show_command(struct scsi_cmnd * srb)48 void scsi_show_command(struct scsi_cmnd *srb)
49 {
50 	char *what = NULL;
51 	int i, unknown_cmd = 0;
52 
53 	switch (srb->cmnd[0]) {
54 	case TEST_UNIT_READY:
55 		what = (char *)"TEST_UNIT_READY";
56 		break;
57 	case REZERO_UNIT:
58 		what = (char *)"REZERO_UNIT";
59 		break;
60 	case REQUEST_SENSE:
61 		what = (char *)"REQUEST_SENSE";
62 		break;
63 	case FORMAT_UNIT:
64 		what = (char *)"FORMAT_UNIT";
65 		break;
66 	case READ_BLOCK_LIMITS:
67 		what = (char *)"READ_BLOCK_LIMITS";
68 		break;
69 	case 0x07:
70 		what = (char *)"REASSIGN_BLOCKS";
71 		break;
72 	case READ_6:
73 		what = (char *)"READ_6";
74 		break;
75 	case WRITE_6:
76 		what = (char *)"WRITE_6";
77 		break;
78 	case SEEK_6:
79 		what = (char *)"SEEK_6";
80 		break;
81 	case READ_REVERSE:
82 		what = (char *)"READ_REVERSE";
83 		break;
84 	case WRITE_FILEMARKS:
85 		what = (char *)"WRITE_FILEMARKS";
86 		break;
87 	case SPACE:
88 		what = (char *)"SPACE";
89 		break;
90 	case INQUIRY:
91 		what = (char *)"INQUIRY";
92 		break;
93 	case RECOVER_BUFFERED_DATA:
94 		what = (char *)"RECOVER_BUFFERED_DATA";
95 		break;
96 	case MODE_SELECT:
97 		what = (char *)"MODE_SELECT";
98 		break;
99 	case RESERVE:
100 		what = (char *)"RESERVE";
101 		break;
102 	case RELEASE:
103 		what = (char *)"RELEASE";
104 		break;
105 	case COPY:
106 		what = (char *)"COPY";
107 		break;
108 	case ERASE:
109 		what = (char *)"ERASE";
110 		break;
111 	case MODE_SENSE:
112 		what = (char *)"MODE_SENSE";
113 		break;
114 	case START_STOP:
115 		what = (char *)"START_STOP";
116 		break;
117 	case RECEIVE_DIAGNOSTIC:
118 		what = (char *)"RECEIVE_DIAGNOSTIC";
119 		break;
120 	case SEND_DIAGNOSTIC:
121 		what = (char *)"SEND_DIAGNOSTIC";
122 		break;
123 	case ALLOW_MEDIUM_REMOVAL:
124 		what = (char *)"ALLOW_MEDIUM_REMOVAL";
125 		break;
126 	case SET_WINDOW:
127 		what = (char *)"SET_WINDOW";
128 		break;
129 	case READ_CAPACITY:
130 		what = (char *)"READ_CAPACITY";
131 		break;
132 	case READ_10:
133 		what = (char *)"READ_10";
134 		break;
135 	case WRITE_10:
136 		what = (char *)"WRITE_10";
137 		break;
138 	case SEEK_10:
139 		what = (char *)"SEEK_10";
140 		break;
141 	case WRITE_VERIFY:
142 		what = (char *)"WRITE_VERIFY";
143 		break;
144 	case VERIFY:
145 		what = (char *)"VERIFY";
146 		break;
147 	case SEARCH_HIGH:
148 		what = (char *)"SEARCH_HIGH";
149 		break;
150 	case SEARCH_EQUAL:
151 		what = (char *)"SEARCH_EQUAL";
152 		break;
153 	case SEARCH_LOW:
154 		what = (char *)"SEARCH_LOW";
155 		break;
156 	case SET_LIMITS:
157 		what = (char *)"SET_LIMITS";
158 		break;
159 	case READ_POSITION:
160 		what = (char *)"READ_POSITION";
161 		break;
162 	case SYNCHRONIZE_CACHE:
163 		what = (char *)"SYNCHRONIZE_CACHE";
164 		break;
165 	case LOCK_UNLOCK_CACHE:
166 		what = (char *)"LOCK_UNLOCK_CACHE";
167 		break;
168 	case READ_DEFECT_DATA:
169 		what = (char *)"READ_DEFECT_DATA";
170 		break;
171 	case MEDIUM_SCAN:
172 		what = (char *)"MEDIUM_SCAN";
173 		break;
174 	case COMPARE:
175 		what = (char *)"COMPARE";
176 		break;
177 	case COPY_VERIFY:
178 		what = (char *)"COPY_VERIFY";
179 		break;
180 	case WRITE_BUFFER:
181 		what = (char *)"WRITE_BUFFER";
182 		break;
183 	case READ_BUFFER:
184 		what = (char *)"READ_BUFFER";
185 		break;
186 	case UPDATE_BLOCK:
187 		what = (char *)"UPDATE_BLOCK";
188 		break;
189 	case READ_LONG:
190 		what = (char *)"READ_LONG";
191 		break;
192 	case WRITE_LONG:
193 		what = (char *)"WRITE_LONG";
194 		break;
195 	case CHANGE_DEFINITION:
196 		what = (char *)"CHANGE_DEFINITION";
197 		break;
198 	case WRITE_SAME:
199 		what = (char *)"WRITE_SAME";
200 		break;
201 	case GPCMD_READ_SUBCHANNEL:
202 		what = (char *)"READ SUBCHANNEL";
203 		break;
204 	case READ_TOC:
205 		what = (char *)"READ_TOC";
206 		break;
207 	case GPCMD_READ_HEADER:
208 		what = (char *)"READ HEADER";
209 		break;
210 	case GPCMD_PLAY_AUDIO_10:
211 		what = (char *)"PLAY AUDIO (10)";
212 		break;
213 	case GPCMD_PLAY_AUDIO_MSF:
214 		what = (char *)"PLAY AUDIO MSF";
215 		break;
216 	case GPCMD_GET_EVENT_STATUS_NOTIFICATION:
217 		what = (char *)"GET EVENT/STATUS NOTIFICATION";
218 		break;
219 	case GPCMD_PAUSE_RESUME:
220 		what = (char *)"PAUSE/RESUME";
221 		break;
222 	case LOG_SELECT:
223 		what = (char *)"LOG_SELECT";
224 		break;
225 	case LOG_SENSE:
226 		what = (char *)"LOG_SENSE";
227 		break;
228 	case GPCMD_STOP_PLAY_SCAN:
229 		what = (char *)"STOP PLAY/SCAN";
230 		break;
231 	case GPCMD_READ_DISC_INFO:
232 		what = (char *)"READ DISC INFORMATION";
233 		break;
234 	case GPCMD_READ_TRACK_RZONE_INFO:
235 		what = (char *)"READ TRACK INFORMATION";
236 		break;
237 	case GPCMD_RESERVE_RZONE_TRACK:
238 		what = (char *)"RESERVE TRACK";
239 		break;
240 	case GPCMD_SEND_OPC:
241 		what = (char *)"SEND OPC";
242 		break;
243 	case MODE_SELECT_10:
244 		what = (char *)"MODE_SELECT_10";
245 		break;
246 	case GPCMD_REPAIR_RZONE_TRACK:
247 		what = (char *)"REPAIR TRACK";
248 		break;
249 	case 0x59:
250 		what = (char *)"READ MASTER CUE";
251 		break;
252 	case MODE_SENSE_10:
253 		what = (char *)"MODE_SENSE_10";
254 		break;
255 	case GPCMD_CLOSE_TRACK:
256 		what = (char *)"CLOSE TRACK/SESSION";
257 		break;
258 	case 0x5C:
259 		what = (char *)"READ BUFFER CAPACITY";
260 		break;
261 	case 0x5D:
262 		what = (char *)"SEND CUE SHEET";
263 		break;
264 	case GPCMD_BLANK:
265 		what = (char *)"BLANK";
266 		break;
267 	case REPORT_LUNS:
268 		what = (char *)"REPORT LUNS";
269 		break;
270 	case MOVE_MEDIUM:
271 		what = (char *)"MOVE_MEDIUM or PLAY AUDIO (12)";
272 		break;
273 	case READ_12:
274 		what = (char *)"READ_12";
275 		break;
276 	case WRITE_12:
277 		what = (char *)"WRITE_12";
278 		break;
279 	case WRITE_VERIFY_12:
280 		what = (char *)"WRITE_VERIFY_12";
281 		break;
282 	case SEARCH_HIGH_12:
283 		what = (char *)"SEARCH_HIGH_12";
284 		break;
285 	case SEARCH_EQUAL_12:
286 		what = (char *)"SEARCH_EQUAL_12";
287 		break;
288 	case SEARCH_LOW_12:
289 		what = (char *)"SEARCH_LOW_12";
290 		break;
291 	case SEND_VOLUME_TAG:
292 		what = (char *)"SEND_VOLUME_TAG";
293 		break;
294 	case READ_ELEMENT_STATUS:
295 		what = (char *)"READ_ELEMENT_STATUS";
296 		break;
297 	case GPCMD_READ_CD_MSF:
298 		what = (char *)"READ CD MSF";
299 		break;
300 	case GPCMD_SCAN:
301 		what = (char *)"SCAN";
302 		break;
303 	case GPCMD_SET_SPEED:
304 		what = (char *)"SET CD SPEED";
305 		break;
306 	case GPCMD_MECHANISM_STATUS:
307 		what = (char *)"MECHANISM STATUS";
308 		break;
309 	case GPCMD_READ_CD:
310 		what = (char *)"READ CD";
311 		break;
312 	case 0xE1:
313 		what = (char *)"WRITE CONTINUE";
314 		break;
315 	case WRITE_LONG_2:
316 		what = (char *)"WRITE_LONG_2";
317 		break;
318 	case VENDOR_CMND:
319 		what = (char *)"Realtek's vendor command";
320 		break;
321 	default:
322 		what = (char *)"(unknown command)";
323 		unknown_cmd = 1;
324 		break;
325 	}
326 
327 	if (srb->cmnd[0] != TEST_UNIT_READY)
328 		RTS51X_DEBUGP("Command %s (%d bytes)\n", what, srb->cmd_len);
329 	if (unknown_cmd) {
330 		RTS51X_DEBUGP("");
331 		for (i = 0; i < srb->cmd_len && i < 16; i++)
332 			RTS51X_DEBUGPN(" %02x", srb->cmnd[i]);
333 		RTS51X_DEBUGPN("\n");
334 	}
335 }
336 
set_sense_type(struct rts51x_chip * chip,unsigned int lun,int sense_type)337 void set_sense_type(struct rts51x_chip *chip, unsigned int lun, int sense_type)
338 {
339 	switch (sense_type) {
340 	case SENSE_TYPE_MEDIA_CHANGE:
341 		set_sense_data(chip, lun, CUR_ERR, 0x06, 0, 0x28, 0, 0, 0);
342 		break;
343 
344 	case SENSE_TYPE_MEDIA_NOT_PRESENT:
345 		set_sense_data(chip, lun, CUR_ERR, 0x02, 0, 0x3A, 0, 0, 0);
346 		break;
347 
348 	case SENSE_TYPE_MEDIA_LBA_OVER_RANGE:
349 		set_sense_data(chip, lun, CUR_ERR, 0x05, 0, 0x21, 0, 0, 0);
350 		break;
351 
352 	case SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT:
353 		set_sense_data(chip, lun, CUR_ERR, 0x05, 0, 0x25, 0, 0, 0);
354 		break;
355 
356 	case SENSE_TYPE_MEDIA_WRITE_PROTECT:
357 		set_sense_data(chip, lun, CUR_ERR, 0x07, 0, 0x27, 0, 0, 0);
358 		break;
359 
360 	case SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR:
361 		set_sense_data(chip, lun, CUR_ERR, 0x03, 0, 0x11, 0, 0, 0);
362 		break;
363 
364 	case SENSE_TYPE_MEDIA_WRITE_ERR:
365 		set_sense_data(chip, lun, CUR_ERR, 0x03, 0, 0x0C, 0x02, 0, 0);
366 		break;
367 
368 	case SENSE_TYPE_MEDIA_INVALID_CMD_FIELD:
369 		set_sense_data(chip, lun, CUR_ERR, ILGAL_REQ, 0,
370 			       ASC_INVLD_CDB, ASCQ_INVLD_CDB, CDB_ILLEGAL, 1);
371 		break;
372 
373 	case SENSE_TYPE_FORMAT_IN_PROGRESS:
374 		set_sense_data(chip, lun, CUR_ERR, 0x02, 0, 0x04, 0x04, 0, 0);
375 		break;
376 
377 	case SENSE_TYPE_FORMAT_CMD_FAILED:
378 		set_sense_data(chip, lun, CUR_ERR, 0x03, 0, 0x31, 0x01, 0, 0);
379 		break;
380 
381 #ifdef SUPPORT_MAGIC_GATE
382 	case SENSE_TYPE_MG_KEY_FAIL_NOT_ESTAB:
383 		set_sense_data(chip, lun, CUR_ERR, 0x05, 0, 0x6F, 0x02, 0, 0);
384 		break;
385 
386 	case SENSE_TYPE_MG_KEY_FAIL_NOT_AUTHEN:
387 		set_sense_data(chip, lun, CUR_ERR, 0x05, 0, 0x6F, 0x00, 0, 0);
388 		break;
389 
390 	case SENSE_TYPE_MG_INCOMPATIBLE_MEDIUM:
391 		set_sense_data(chip, lun, CUR_ERR, 0x02, 0, 0x30, 0x00, 0, 0);
392 		break;
393 
394 	case SENSE_TYPE_MG_WRITE_ERR:
395 		set_sense_data(chip, lun, CUR_ERR, 0x03, 0, 0x0C, 0x00, 0, 0);
396 		break;
397 #endif
398 
399 #ifdef SUPPORT_SD_LOCK
400 	case SENSE_TYPE_MEDIA_READ_FORBIDDEN:
401 		set_sense_data(chip, lun, CUR_ERR, 0x07, 0, 0x11, 0x13, 0, 0);
402 		break;
403 #endif
404 
405 	case SENSE_TYPE_NO_SENSE:
406 	default:
407 		set_sense_data(chip, lun, CUR_ERR, 0, 0, 0, 0, 0, 0);
408 		break;
409 	}
410 }
411 
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)412 void set_sense_data(struct rts51x_chip *chip, unsigned int lun, u8 err_code,
413 		    u8 sense_key, u32 info, u8 asc, u8 ascq, u8 sns_key_info0,
414 		    u16 sns_key_info1)
415 {
416 	struct sense_data_t *sense = &(chip->sense_buffer[lun]);
417 
418 	sense->err_code = err_code;
419 	sense->sense_key = sense_key;
420 	sense->info[0] = (u8) (info >> 24);
421 	sense->info[1] = (u8) (info >> 16);
422 	sense->info[2] = (u8) (info >> 8);
423 	sense->info[3] = (u8) info;
424 
425 	sense->ad_sense_len = sizeof(struct sense_data_t) - 8;
426 	sense->asc = asc;
427 	sense->ascq = ascq;
428 	if (sns_key_info0 != 0) {
429 		sense->sns_key_info[0] = SKSV | sns_key_info0;
430 		sense->sns_key_info[1] = (sns_key_info1 & 0xf0) >> 8;
431 		sense->sns_key_info[2] = sns_key_info1 & 0x0f;
432 	}
433 }
434 
test_unit_ready(struct scsi_cmnd * srb,struct rts51x_chip * chip)435 static int test_unit_ready(struct scsi_cmnd *srb, struct rts51x_chip *chip)
436 {
437 	unsigned int lun = SCSI_LUN(srb);
438 
439 	rts51x_init_cards(chip);
440 
441 	if (!check_card_ready(chip, lun)) {
442 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
443 		return TRANSPORT_FAILED;
444 	}
445 
446 	if (!check_lun_mc(chip, lun)) {
447 		set_lun_mc(chip, lun);
448 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
449 		return TRANSPORT_FAILED;
450 	}
451 #ifdef SUPPORT_SD_LOCK
452 	if (get_lun_card(chip, SCSI_LUN(srb)) == SD_CARD) {
453 		struct sd_info *sd_card = &(chip->sd_card);
454 		if (sd_card->sd_lock_notify) {
455 			sd_card->sd_lock_notify = 0;
456 			set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
457 			return TRANSPORT_FAILED;
458 		} else if (sd_card->sd_lock_status & SD_LOCKED) {
459 			set_sense_type(chip, lun,
460 				       SENSE_TYPE_MEDIA_READ_FORBIDDEN);
461 			return TRANSPORT_FAILED;
462 		}
463 	}
464 #endif
465 
466 	return TRANSPORT_GOOD;
467 }
468 
469 unsigned char formatter_inquiry_str[20] = {
470 	'M', 'E', 'M', 'O', 'R', 'Y', 'S', 'T', 'I', 'C', 'K',
471 	'-', 'M', 'G',		/* Byte[47:49] */
472 	0x0B,			/* Byte[50]: MG, MS, MSPro, MSXC */
473 	0x00,			/* Byte[51]: Category Specific Commands */
474 	0x00,			/* Byte[52]: Access Control and feature */
475 	0x20, 0x20, 0x20,	/* Byte[53:55] */
476 };
477 
inquiry(struct scsi_cmnd * srb,struct rts51x_chip * chip)478 static int inquiry(struct scsi_cmnd *srb, struct rts51x_chip *chip)
479 {
480 	unsigned int lun = SCSI_LUN(srb);
481 	char *inquiry_default = (char *)"Generic-xD/SD/M.S.      1.00 ";
482 	char *inquiry_string;
483 	unsigned char sendbytes;
484 	unsigned char *buf;
485 	u8 card = get_lun_card(chip, lun);
486 	int pro_formatter_flag = 0;
487 	unsigned char inquiry_buf[] = {
488 		QULIFIRE | DRCT_ACCESS_DEV,
489 		RMB_DISC | 0x0D,
490 		0x00,
491 		0x01,
492 		0x1f,
493 		0x02,
494 		0,
495 		REL_ADR | WBUS_32 | WBUS_16 | SYNC | LINKED | CMD_QUE | SFT_RE,
496 	};
497 
498 	inquiry_string = inquiry_default;
499 
500 	buf = vmalloc(scsi_bufflen(srb));
501 	if (buf == NULL)
502 		TRACE_RET(chip, TRANSPORT_ERROR);
503 
504 	if (MS_FORMATTER_ENABLED(chip) && (get_lun2card(chip, lun) & MS_CARD)) {
505 		if (!card || (card == MS_CARD))
506 			pro_formatter_flag = 1;
507 	}
508 
509 	if (pro_formatter_flag) {
510 		if (scsi_bufflen(srb) < 56)
511 			sendbytes = (unsigned char)(scsi_bufflen(srb));
512 		else
513 			sendbytes = 56;
514 	} else {
515 		if (scsi_bufflen(srb) < 36)
516 			sendbytes = (unsigned char)(scsi_bufflen(srb));
517 		else
518 			sendbytes = 36;
519 	}
520 
521 	if (sendbytes > 8) {
522 		memcpy(buf, inquiry_buf, 8);
523 		memcpy(buf + 8, inquiry_string, sendbytes - 8);
524 		if (pro_formatter_flag)
525 			buf[4] = 0x33;	/* Additional Length */
526 	} else {
527 		memcpy(buf, inquiry_buf, sendbytes);
528 	}
529 
530 	if (pro_formatter_flag) {
531 		if (sendbytes > 36)
532 			memcpy(buf + 36, formatter_inquiry_str, sendbytes - 36);
533 	}
534 
535 	scsi_set_resid(srb, 0);
536 
537 	rts51x_set_xfer_buf(buf, scsi_bufflen(srb), srb);
538 	vfree(buf);
539 
540 	return TRANSPORT_GOOD;
541 }
542 
start_stop_unit(struct scsi_cmnd * srb,struct rts51x_chip * chip)543 static int start_stop_unit(struct scsi_cmnd *srb, struct rts51x_chip *chip)
544 {
545 	unsigned int lun = SCSI_LUN(srb);
546 
547 	scsi_set_resid(srb, scsi_bufflen(srb));
548 
549 	if (srb->cmnd[1] == 1)
550 		return TRANSPORT_GOOD;
551 
552 	switch (srb->cmnd[0x4]) {
553 	case STOP_MEDIUM:
554 		/* Media disabled */
555 		return TRANSPORT_GOOD;
556 
557 	case UNLOAD_MEDIUM:
558 		/* Media shall be unload */
559 		if (check_card_ready(chip, lun))
560 			eject_card(chip, lun);
561 		return TRANSPORT_GOOD;
562 
563 	case MAKE_MEDIUM_READY:
564 	case LOAD_MEDIUM:
565 		if (check_card_ready(chip, lun)) {
566 			return TRANSPORT_GOOD;
567 		} else {
568 			set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
569 			TRACE_RET(chip, TRANSPORT_FAILED);
570 		}
571 
572 		break;
573 	}
574 
575 	TRACE_RET(chip, TRANSPORT_ERROR);
576 }
577 
allow_medium_removal(struct scsi_cmnd * srb,struct rts51x_chip * chip)578 static int allow_medium_removal(struct scsi_cmnd *srb, struct rts51x_chip *chip)
579 {
580 	int prevent;
581 
582 	prevent = srb->cmnd[4] & 0x1;
583 
584 	scsi_set_resid(srb, 0);
585 
586 	if (prevent) {
587 		set_sense_type(chip, SCSI_LUN(srb),
588 			       SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
589 		TRACE_RET(chip, TRANSPORT_FAILED);
590 	}
591 
592 	return TRANSPORT_GOOD;
593 }
594 
ms_mode_sense(struct rts51x_chip * chip,u8 cmd,int lun,u8 * buf,int buf_len)595 static void ms_mode_sense(struct rts51x_chip *chip, u8 cmd,
596 			  int lun, u8 *buf, int buf_len)
597 {
598 	struct ms_info *ms_card = &(chip->ms_card);
599 	int sys_info_offset;
600 	int data_size = buf_len;
601 	int support_format = 0;
602 	int i = 0;
603 
604 	if (cmd == MODE_SENSE) {
605 		sys_info_offset = 8;
606 		if (data_size > 0x68)
607 			data_size = 0x68;
608 		buf[i++] = 0x67;	/* Mode Data Length */
609 	} else {
610 		sys_info_offset = 12;
611 		if (data_size > 0x6C)
612 			data_size = 0x6C;
613 		buf[i++] = 0x00;	/* Mode Data Length (MSB) */
614 		buf[i++] = 0x6A;	/* Mode Data Length (LSB) */
615 	}
616 
617 	/* Medium Type Code */
618 	if (check_card_ready(chip, lun)) {
619 		if (CHK_MSXC(ms_card)) {
620 			support_format = 1;
621 			buf[i++] = 0x40;
622 		} else if (CHK_MSPRO(ms_card)) {
623 			support_format = 1;
624 			buf[i++] = 0x20;
625 		} else {
626 			buf[i++] = 0x10;
627 		}
628 
629 		/* WP */
630 		if (check_card_wp(chip, lun))
631 			buf[i++] = 0x80;
632 		else
633 			buf[i++] = 0x00;
634 	} else {
635 		buf[i++] = 0x00;	/* MediaType */
636 		buf[i++] = 0x00;	/* WP */
637 	}
638 
639 	buf[i++] = 0x00;	/* Reserved */
640 
641 	if (cmd == MODE_SENSE_10) {
642 		buf[i++] = 0x00;	/* Reserved */
643 		buf[i++] = 0x00;	/* Block descriptor length(MSB) */
644 		buf[i++] = 0x00;	/* Block descriptor length(LSB) */
645 
646 		/* The Following Data is the content of "Page 0x20" */
647 		if (data_size >= 9)
648 			buf[i++] = 0x20;	/* Page Code */
649 		if (data_size >= 10)
650 			buf[i++] = 0x62;	/* Page Length */
651 		if (data_size >= 11)
652 			buf[i++] = 0x00;	/* No Access Control */
653 		if (data_size >= 12) {
654 			if (support_format)
655 				buf[i++] = 0xC0;	/* SF, SGM */
656 			else
657 				buf[i++] = 0x00;
658 		}
659 	} else {
660 		/* The Following Data is the content of "Page 0x20" */
661 		if (data_size >= 5)
662 			buf[i++] = 0x20;	/* Page Code */
663 		if (data_size >= 6)
664 			buf[i++] = 0x62;	/* Page Length */
665 		if (data_size >= 7)
666 			buf[i++] = 0x00;	/* No Access Control */
667 		if (data_size >= 8) {
668 			if (support_format)
669 				buf[i++] = 0xC0;	/* SF, SGM */
670 			else
671 				buf[i++] = 0x00;
672 		}
673 	}
674 
675 	if (data_size > sys_info_offset) {
676 		/* 96 Bytes Attribute Data */
677 		int len = data_size - sys_info_offset;
678 		len = (len < 96) ? len : 96;
679 
680 		memcpy(buf + sys_info_offset, ms_card->raw_sys_info, len);
681 	}
682 }
683 
mode_sense(struct scsi_cmnd * srb,struct rts51x_chip * chip)684 static int mode_sense(struct scsi_cmnd *srb, struct rts51x_chip *chip)
685 {
686 	unsigned int lun = SCSI_LUN(srb);
687 	unsigned int dataSize;
688 	int status;
689 	int pro_formatter_flag;
690 	unsigned char pageCode, *buf;
691 	u8 card = get_lun_card(chip, lun);
692 
693 	if (!check_card_ready(chip, lun)) {
694 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
695 		scsi_set_resid(srb, scsi_bufflen(srb));
696 		TRACE_RET(chip, TRANSPORT_FAILED);
697 	}
698 
699 	pro_formatter_flag = 0;
700 	dataSize = 8;
701 	/* In Combo mode, device responses ModeSense command as a MS LUN
702 	 * when no card is inserted */
703 	if ((get_lun2card(chip, lun) & MS_CARD)) {
704 		if (!card || (card == MS_CARD)) {
705 			dataSize = 108;
706 			if (chip->option.mspro_formatter_enable)
707 				pro_formatter_flag = 1;
708 		}
709 	}
710 
711 	buf = kmalloc(dataSize, GFP_KERNEL);
712 	if (buf == NULL)
713 		TRACE_RET(chip, TRANSPORT_ERROR);
714 
715 	pageCode = srb->cmnd[2] & 0x3f;
716 
717 	if ((pageCode == 0x3F) || (pageCode == 0x1C) ||
718 	    (pageCode == 0x00) || (pro_formatter_flag && (pageCode == 0x20))) {
719 		if (srb->cmnd[0] == MODE_SENSE) {
720 			if ((pageCode == 0x3F) || (pageCode == 0x20)) {
721 				ms_mode_sense(chip, srb->cmnd[0], lun, buf,
722 					      dataSize);
723 			} else {
724 				dataSize = 4;
725 				buf[0] = 0x03;
726 				buf[1] = 0x00;
727 				if (check_card_wp(chip, lun))
728 					buf[2] = 0x80;
729 				else
730 				buf[3] = 0x00;
731 			}
732 		} else {
733 			if ((pageCode == 0x3F) || (pageCode == 0x20)) {
734 				ms_mode_sense(chip, srb->cmnd[0], lun, buf,
735 					      dataSize);
736 			} else {
737 				dataSize = 8;
738 				buf[0] = 0x00;
739 				buf[1] = 0x06;
740 				buf[2] = 0x00;
741 				if (check_card_wp(chip, lun))
742 					buf[3] = 0x80;
743 				else
744 					buf[3] = 0x00;
745 				buf[4] = 0x00;
746 				buf[5] = 0x00;
747 				buf[6] = 0x00;
748 				buf[7] = 0x00;
749 			}
750 		}
751 		status = TRANSPORT_GOOD;
752 	} else {
753 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
754 		scsi_set_resid(srb, scsi_bufflen(srb));
755 		status = TRANSPORT_FAILED;
756 	}
757 
758 	if (status == TRANSPORT_GOOD) {
759 		unsigned int len = min(scsi_bufflen(srb), dataSize);
760 		rts51x_set_xfer_buf(buf, len, srb);
761 		scsi_set_resid(srb, scsi_bufflen(srb) - len);
762 	}
763 	kfree(buf);
764 
765 	return status;
766 }
767 
request_sense(struct scsi_cmnd * srb,struct rts51x_chip * chip)768 static int request_sense(struct scsi_cmnd *srb, struct rts51x_chip *chip)
769 {
770 	struct sense_data_t *sense;
771 	unsigned int lun = SCSI_LUN(srb);
772 	struct ms_info *ms_card = &(chip->ms_card);
773 	unsigned char *tmp, *buf;
774 
775 	sense = &(chip->sense_buffer[lun]);
776 
777 	if ((get_lun_card(chip, lun) == MS_CARD)
778 	    && PRO_UNDER_FORMATTING(ms_card)) {
779 		mspro_format_sense(chip, lun);
780 	}
781 
782 	buf = vmalloc(scsi_bufflen(srb));
783 	if (buf == NULL)
784 		TRACE_RET(chip, TRANSPORT_ERROR);
785 
786 	tmp = (unsigned char *)sense;
787 	memcpy(buf, tmp, scsi_bufflen(srb));
788 
789 	rts51x_set_xfer_buf(buf, scsi_bufflen(srb), srb);
790 	vfree(buf);
791 
792 	scsi_set_resid(srb, 0);
793 	/* Reset Sense Data */
794 	set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
795 	return TRANSPORT_GOOD;
796 }
797 
read_write(struct scsi_cmnd * srb,struct rts51x_chip * chip)798 static int read_write(struct scsi_cmnd *srb, struct rts51x_chip *chip)
799 {
800 #ifdef SUPPORT_SD_LOCK
801 	struct sd_info *sd_card = &(chip->sd_card);
802 #endif
803 	unsigned int lun = SCSI_LUN(srb);
804 	int retval;
805 	u32 start_sec;
806 	u16 sec_cnt;
807 
808 	if (!check_card_ready(chip, lun) || (chip->capacity[lun] == 0)) {
809 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
810 		TRACE_RET(chip, TRANSPORT_FAILED);
811 	}
812 
813 	if (!check_lun_mc(chip, lun)) {
814 		set_lun_mc(chip, lun);
815 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
816 		return TRANSPORT_FAILED;
817 	}
818 
819 	rts51x_prepare_run(chip);
820 	RTS51X_SET_STAT(chip, STAT_RUN);
821 
822 #ifdef SUPPORT_SD_LOCK
823 	if (sd_card->sd_erase_status) {
824 		/* Accessing to any card is forbidden
825 		 * until the erase procedure of SD is completed */
826 		RTS51X_DEBUGP("SD card being erased!\n");
827 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_READ_FORBIDDEN);
828 		TRACE_RET(chip, TRANSPORT_FAILED);
829 	}
830 
831 	if (get_lun_card(chip, lun) == SD_CARD) {
832 		if (sd_card->sd_lock_status & SD_LOCKED) {
833 			RTS51X_DEBUGP("SD card locked!\n");
834 			set_sense_type(chip, lun,
835 				       SENSE_TYPE_MEDIA_READ_FORBIDDEN);
836 			TRACE_RET(chip, TRANSPORT_FAILED);
837 		}
838 	}
839 #endif
840 
841 	if ((srb->cmnd[0] == READ_10) || (srb->cmnd[0] == WRITE_10)) {
842 		start_sec =
843 		    ((u32) srb->cmnd[2] << 24) |
844 		    ((u32) srb->cmnd[3] << 16) |
845 		    ((u32) srb->cmnd[4] << 8) |
846 		    ((u32) srb->cmnd[5]);
847 		sec_cnt = ((u16) (srb->cmnd[7]) << 8) | srb->cmnd[8];
848 	} else if ((srb->cmnd[0] == READ_6) || (srb->cmnd[0] == WRITE_6)) {
849 		start_sec = ((u32) (srb->cmnd[1] & 0x1F) << 16) |
850 		    ((u32) srb->cmnd[2] << 8) | ((u32) srb->cmnd[3]);
851 		sec_cnt = srb->cmnd[4];
852 	} else if ((srb->cmnd[0] == VENDOR_CMND) &&
853 			(srb->cmnd[1] == SCSI_APP_CMD) &&
854 			((srb->cmnd[2] == PP_READ10) ||
855 			 (srb->cmnd[2] == PP_WRITE10))) {
856 		start_sec = ((u32) srb->cmnd[4] << 24) |
857 			((u32) srb->cmnd[5] << 16) |
858 			((u32) srb->cmnd[6] << 8) |
859 			((u32) srb->cmnd[7]);
860 		sec_cnt = ((u16) (srb->cmnd[9]) << 8) | srb->cmnd[10];
861 	} else {
862 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
863 		TRACE_RET(chip, TRANSPORT_FAILED);
864 	}
865 
866 	if ((start_sec > chip->capacity[lun]) ||
867 	    ((start_sec + sec_cnt) > chip->capacity[lun])) {
868 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LBA_OVER_RANGE);
869 		TRACE_RET(chip, TRANSPORT_FAILED);
870 	}
871 
872 	if (sec_cnt == 0) {
873 		scsi_set_resid(srb, 0);
874 		return TRANSPORT_GOOD;
875 	}
876 
877 	if ((srb->sc_data_direction == DMA_TO_DEVICE)
878 	    && check_card_wp(chip, lun)) {
879 		RTS51X_DEBUGP("Write protected card!\n");
880 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_PROTECT);
881 		TRACE_RET(chip, TRANSPORT_FAILED);
882 	}
883 
884 	retval = card_rw(srb, chip, start_sec, sec_cnt);
885 	if (retval != STATUS_SUCCESS) {
886 #if 0
887 		if (chip->need_release & chip->lun2card[lun]) {
888 			set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
889 		} else {
890 #endif
891 		if (srb->sc_data_direction == DMA_FROM_DEVICE) {
892 			set_sense_type(chip, lun,
893 				       SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
894 		} else {
895 			set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_ERR);
896 		}
897 #if 0
898 		}
899 #endif
900 		TRACE_RET(chip, TRANSPORT_FAILED);
901 	}
902 
903 	scsi_set_resid(srb, 0);
904 
905 	return TRANSPORT_GOOD;
906 }
907 
read_format_capacity(struct scsi_cmnd * srb,struct rts51x_chip * chip)908 static int read_format_capacity(struct scsi_cmnd *srb, struct rts51x_chip *chip)
909 {
910 	unsigned char *buf;
911 	unsigned int lun = SCSI_LUN(srb);
912 	unsigned int buf_len;
913 	u8 card = get_lun_card(chip, lun);
914 	int desc_cnt;
915 	int i = 0;
916 
917 	if (!check_card_ready(chip, lun)) {
918 		if (!chip->option.mspro_formatter_enable) {
919 			set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
920 			TRACE_RET(chip, TRANSPORT_FAILED);
921 		}
922 	}
923 
924 	buf_len = (scsi_bufflen(srb) > 12) ? 0x14 : 12;
925 
926 	buf = kmalloc(buf_len, GFP_KERNEL);
927 	if (buf == NULL)
928 		TRACE_RET(chip, TRANSPORT_ERROR);
929 
930 	buf[i++] = 0;
931 	buf[i++] = 0;
932 	buf[i++] = 0;
933 
934 	/* Capacity List Length */
935 	if ((buf_len > 12) && chip->option.mspro_formatter_enable &&
936 	    (chip->lun2card[lun] & MS_CARD) && (!card || (card == MS_CARD))) {
937 		buf[i++] = 0x10;
938 		desc_cnt = 2;
939 	} else {
940 		buf[i++] = 0x08;
941 		desc_cnt = 1;
942 	}
943 
944 	while (desc_cnt) {
945 		if (check_card_ready(chip, lun)) {
946 			buf[i++] = (unsigned char)((chip->capacity[lun]) >> 24);
947 			buf[i++] = (unsigned char)((chip->capacity[lun]) >> 16);
948 			buf[i++] = (unsigned char)((chip->capacity[lun]) >> 8);
949 			buf[i++] = (unsigned char)(chip->capacity[lun]);
950 
951 			if (desc_cnt == 2)
952 				/* Byte[8]: Descriptor Type: Formatted medium */
953 				buf[i++] = 2;
954 			else
955 				buf[i++] = 0;	/* Byte[16] */
956 		} else {
957 			buf[i++] = 0xFF;
958 			buf[i++] = 0xFF;
959 			buf[i++] = 0xFF;
960 			buf[i++] = 0xFF;
961 
962 			if (desc_cnt == 2)
963 				/* Byte[8]: Descriptor Type: No medium */
964 				buf[i++] = 3;
965 			else
966 				buf[i++] = 0;	/*Byte[16] */
967 		}
968 
969 		buf[i++] = 0x00;
970 		buf[i++] = 0x02;
971 		buf[i++] = 0x00;
972 
973 		desc_cnt--;
974 	}
975 
976 	buf_len = min(scsi_bufflen(srb), buf_len);
977 	rts51x_set_xfer_buf(buf, buf_len, srb);
978 	kfree(buf);
979 
980 	scsi_set_resid(srb, scsi_bufflen(srb) - buf_len);
981 
982 	return TRANSPORT_GOOD;
983 }
984 
read_capacity(struct scsi_cmnd * srb,struct rts51x_chip * chip)985 static int read_capacity(struct scsi_cmnd *srb, struct rts51x_chip *chip)
986 {
987 	unsigned char *buf;
988 	unsigned int lun = SCSI_LUN(srb);
989 
990 	if (!check_card_ready(chip, lun)) {
991 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
992 		TRACE_RET(chip, TRANSPORT_FAILED);
993 	}
994 
995 	if (!check_lun_mc(chip, lun)) {
996 		set_lun_mc(chip, lun);
997 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
998 		return TRANSPORT_FAILED;
999 	}
1000 
1001 	buf = kmalloc(8, GFP_KERNEL);
1002 	if (buf == NULL)
1003 		TRACE_RET(chip, TRANSPORT_ERROR);
1004 
1005 	buf[0] = (unsigned char)((chip->capacity[lun] - 1) >> 24);
1006 	buf[1] = (unsigned char)((chip->capacity[lun] - 1) >> 16);
1007 	buf[2] = (unsigned char)((chip->capacity[lun] - 1) >> 8);
1008 	buf[3] = (unsigned char)(chip->capacity[lun] - 1);
1009 
1010 	buf[4] = 0x00;
1011 	buf[5] = 0x00;
1012 	buf[6] = 0x02;
1013 	buf[7] = 0x00;
1014 
1015 	rts51x_set_xfer_buf(buf, scsi_bufflen(srb), srb);
1016 	kfree(buf);
1017 
1018 	scsi_set_resid(srb, 0);
1019 
1020 	return TRANSPORT_GOOD;
1021 }
1022 
get_dev_status(struct scsi_cmnd * srb,struct rts51x_chip * chip)1023 static int get_dev_status(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1024 {
1025 	unsigned int lun = SCSI_LUN(srb);
1026 	unsigned int buf_len;
1027 	u8 status[32] = { 0 };
1028 
1029 	rts51x_pp_status(chip, lun, status, 32);
1030 
1031 	buf_len = min(scsi_bufflen(srb), (unsigned int)sizeof(status));
1032 	rts51x_set_xfer_buf(status, buf_len, srb);
1033 	scsi_set_resid(srb, scsi_bufflen(srb) - buf_len);
1034 
1035 	return TRANSPORT_GOOD;
1036 }
1037 
read_status(struct scsi_cmnd * srb,struct rts51x_chip * chip)1038 static int read_status(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1039 {
1040 	u8 rts51x_status[16];
1041 	unsigned int buf_len;
1042 	unsigned int lun = SCSI_LUN(srb);
1043 
1044 	rts51x_read_status(chip, lun, rts51x_status, 16);
1045 
1046 	buf_len = min(scsi_bufflen(srb), (unsigned int)sizeof(rts51x_status));
1047 	rts51x_set_xfer_buf(rts51x_status, buf_len, srb);
1048 	scsi_set_resid(srb, scsi_bufflen(srb) - buf_len);
1049 
1050 	return TRANSPORT_GOOD;
1051 }
1052 
read_mem(struct scsi_cmnd * srb,struct rts51x_chip * chip)1053 static int read_mem(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1054 {
1055 	unsigned int lun = SCSI_LUN(srb);
1056 	unsigned short addr, len, i;
1057 	int retval;
1058 	u8 *buf;
1059 
1060 	rts51x_prepare_run(chip);
1061 	RTS51X_SET_STAT(chip, STAT_RUN);
1062 
1063 	addr = ((u16) srb->cmnd[2] << 8) | srb->cmnd[3];
1064 	len = ((u16) srb->cmnd[4] << 8) | srb->cmnd[5];
1065 
1066 	if (addr < 0xe000) {
1067 		RTS51X_DEBUGP("filter!addr=0x%x\n", addr);
1068 		return TRANSPORT_GOOD;
1069 	}
1070 
1071 	buf = vmalloc(len);
1072 	if (!buf)
1073 		TRACE_RET(chip, TRANSPORT_ERROR);
1074 
1075 	for (i = 0; i < len; i++) {
1076 		retval = rts51x_ep0_read_register(chip, addr + i, buf + i);
1077 		if (retval != STATUS_SUCCESS) {
1078 			vfree(buf);
1079 			set_sense_type(chip, lun,
1080 				       SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1081 			TRACE_RET(chip, TRANSPORT_FAILED);
1082 		}
1083 	}
1084 
1085 	len = (unsigned short)min(scsi_bufflen(srb), (unsigned int)len);
1086 	rts51x_set_xfer_buf(buf, len, srb);
1087 	scsi_set_resid(srb, scsi_bufflen(srb) - len);
1088 
1089 	vfree(buf);
1090 
1091 	return TRANSPORT_GOOD;
1092 }
1093 
write_mem(struct scsi_cmnd * srb,struct rts51x_chip * chip)1094 static int write_mem(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1095 {
1096 	unsigned int lun = SCSI_LUN(srb);
1097 	unsigned short addr, len, i;
1098 	int retval;
1099 	u8 *buf;
1100 
1101 	rts51x_prepare_run(chip);
1102 	RTS51X_SET_STAT(chip, STAT_RUN);
1103 
1104 	addr = ((u16) srb->cmnd[2] << 8) | srb->cmnd[3];
1105 	len = ((u16) srb->cmnd[4] << 8) | srb->cmnd[5];
1106 
1107 	if (addr < 0xe000) {
1108 		RTS51X_DEBUGP("filter!addr=0x%x\n", addr);
1109 		return TRANSPORT_GOOD;
1110 	}
1111 
1112 	len = (unsigned short)min(scsi_bufflen(srb), (unsigned int)len);
1113 	buf = vmalloc(len);
1114 	if (!buf)
1115 		TRACE_RET(chip, TRANSPORT_ERROR);
1116 
1117 	rts51x_get_xfer_buf(buf, len, srb);
1118 
1119 	for (i = 0; i < len; i++) {
1120 		retval =
1121 		    rts51x_ep0_write_register(chip, addr + i, 0xFF, buf[i]);
1122 		if (retval != STATUS_SUCCESS) {
1123 			vfree(buf);
1124 			set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_ERR);
1125 			TRACE_RET(chip, TRANSPORT_FAILED);
1126 		}
1127 	}
1128 
1129 	vfree(buf);
1130 	scsi_set_resid(srb, scsi_bufflen(srb) - len);
1131 
1132 	return TRANSPORT_GOOD;
1133 }
1134 
get_sd_csd(struct scsi_cmnd * srb,struct rts51x_chip * chip)1135 static int get_sd_csd(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1136 {
1137 	struct sd_info *sd_card = &(chip->sd_card);
1138 	unsigned int lun = SCSI_LUN(srb);
1139 
1140 	if (!check_card_ready(chip, lun)) {
1141 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
1142 		TRACE_RET(chip, TRANSPORT_FAILED);
1143 	}
1144 
1145 	if (get_lun_card(chip, lun) != SD_CARD) {
1146 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1147 		TRACE_RET(chip, TRANSPORT_FAILED);
1148 	}
1149 
1150 	scsi_set_resid(srb, 0);
1151 	rts51x_set_xfer_buf(sd_card->raw_csd, scsi_bufflen(srb), srb);
1152 
1153 	return TRANSPORT_GOOD;
1154 }
1155 
read_phy_register(struct scsi_cmnd * srb,struct rts51x_chip * chip)1156 static int read_phy_register(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1157 {
1158 	int retval;
1159 	u8 addr, len, i;
1160 	u8 *buf;
1161 
1162 	rts51x_prepare_run(chip);
1163 	RTS51X_SET_STAT(chip, STAT_RUN);
1164 
1165 	addr = srb->cmnd[5];
1166 	len = srb->cmnd[7];
1167 
1168 	if (len) {
1169 		buf = vmalloc(len);
1170 		if (!buf)
1171 			TRACE_RET(chip, TRANSPORT_ERROR);
1172 
1173 		for (i = 0; i < len; i++) {
1174 			retval =
1175 			    rts51x_read_phy_register(chip, addr + i, buf + i);
1176 			if (retval != STATUS_SUCCESS) {
1177 				vfree(buf);
1178 				set_sense_type(chip, SCSI_LUN(srb),
1179 					SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1180 				TRACE_RET(chip, TRANSPORT_FAILED);
1181 			}
1182 		}
1183 
1184 		len = min(scsi_bufflen(srb), (unsigned int)len);
1185 		rts51x_set_xfer_buf(buf, len, srb);
1186 		scsi_set_resid(srb, scsi_bufflen(srb) - len);
1187 
1188 		vfree(buf);
1189 	}
1190 
1191 	return TRANSPORT_GOOD;
1192 }
1193 
write_phy_register(struct scsi_cmnd * srb,struct rts51x_chip * chip)1194 static int write_phy_register(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1195 {
1196 	int retval;
1197 	u8 addr, len, i;
1198 	u8 *buf;
1199 
1200 	rts51x_prepare_run(chip);
1201 	RTS51X_SET_STAT(chip, STAT_RUN);
1202 
1203 	addr = srb->cmnd[5];
1204 	len = srb->cmnd[7];
1205 
1206 	if (len) {
1207 		len = min(scsi_bufflen(srb), (unsigned int)len);
1208 
1209 		buf = vmalloc(len);
1210 		if (buf == NULL)
1211 			TRACE_RET(chip, TRANSPORT_ERROR);
1212 
1213 		rts51x_get_xfer_buf(buf, len, srb);
1214 		scsi_set_resid(srb, scsi_bufflen(srb) - len);
1215 
1216 		for (i = 0; i < len; i++) {
1217 			retval =
1218 			    rts51x_write_phy_register(chip, addr + i, buf[i]);
1219 			if (retval != STATUS_SUCCESS) {
1220 				vfree(buf);
1221 				set_sense_type(chip, SCSI_LUN(srb),
1222 					       SENSE_TYPE_MEDIA_WRITE_ERR);
1223 				TRACE_RET(chip, TRANSPORT_FAILED);
1224 			}
1225 		}
1226 
1227 		vfree(buf);
1228 	}
1229 
1230 	return TRANSPORT_GOOD;
1231 }
1232 
get_card_bus_width(struct scsi_cmnd * srb,struct rts51x_chip * chip)1233 static int get_card_bus_width(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1234 {
1235 	unsigned int lun = SCSI_LUN(srb);
1236 	u8 card, bus_width;
1237 
1238 	if (!check_card_ready(chip, lun)) {
1239 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
1240 		TRACE_RET(chip, TRANSPORT_FAILED);
1241 	}
1242 
1243 	card = get_lun_card(chip, lun);
1244 	if ((card == SD_CARD) || (card == MS_CARD)) {
1245 		bus_width = chip->card_bus_width[lun];
1246 	} else {
1247 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1248 		TRACE_RET(chip, TRANSPORT_FAILED);
1249 	}
1250 
1251 	scsi_set_resid(srb, 0);
1252 	rts51x_set_xfer_buf(&bus_width, scsi_bufflen(srb), srb);
1253 
1254 	return TRANSPORT_GOOD;
1255 }
1256 
1257 #ifdef _MSG_TRACE
trace_msg_cmd(struct scsi_cmnd * srb,struct rts51x_chip * chip)1258 static int trace_msg_cmd(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1259 {
1260 	unsigned char *buf = NULL;
1261 	u8 clear;
1262 	unsigned int buf_len;
1263 
1264 	buf_len =
1265 	    4 +
1266 	    ((2 + MSG_FUNC_LEN + MSG_FILE_LEN + TIME_VAL_LEN) * TRACE_ITEM_CNT);
1267 
1268 	if ((scsi_bufflen(srb) < buf_len) || (scsi_sglist(srb) == NULL)) {
1269 		set_sense_type(chip, SCSI_LUN(srb),
1270 			       SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1271 		TRACE_RET(chip, TRANSPORT_FAILED);
1272 	}
1273 
1274 	clear = srb->cmnd[2];
1275 
1276 	buf = vmalloc(scsi_bufflen(srb));
1277 	if (buf == NULL)
1278 		TRACE_RET(chip, TRANSPORT_ERROR);
1279 
1280 	rts51x_trace_msg(chip, buf, clear);
1281 
1282 	rts51x_set_xfer_buf(buf, scsi_bufflen(srb), srb);
1283 	vfree(buf);
1284 
1285 	scsi_set_resid(srb, 0);
1286 	return TRANSPORT_GOOD;
1287 }
1288 #endif
1289 
rw_mem_cmd_buf(struct scsi_cmnd * srb,struct rts51x_chip * chip)1290 static int rw_mem_cmd_buf(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1291 {
1292 	int retval = STATUS_SUCCESS;
1293 	unsigned int lun = SCSI_LUN(srb);
1294 	u8 cmd_type, mask, value, idx, mode, len;
1295 	u16 addr;
1296 	u32 timeout;
1297 
1298 	rts51x_prepare_run(chip);
1299 	RTS51X_SET_STAT(chip, STAT_RUN);
1300 
1301 	switch (srb->cmnd[3]) {
1302 	case INIT_BATCHCMD:
1303 		rts51x_init_cmd(chip);
1304 		break;
1305 
1306 	case ADD_BATCHCMD:
1307 		cmd_type = srb->cmnd[4];
1308 		if (cmd_type > 2) {
1309 			set_sense_type(chip, lun,
1310 				       SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1311 			TRACE_RET(chip, TRANSPORT_FAILED);
1312 		}
1313 		addr = (srb->cmnd[5] << 8) | srb->cmnd[6];
1314 		mask = srb->cmnd[7];
1315 		value = srb->cmnd[8];
1316 		rts51x_add_cmd(chip, cmd_type, addr, mask, value);
1317 		break;
1318 
1319 	case SEND_BATCHCMD:
1320 		mode = srb->cmnd[4];
1321 		len = srb->cmnd[5];
1322 		timeout =
1323 		    ((u32) srb->cmnd[6] << 24) | ((u32) srb->
1324 						  cmnd[7] << 16) | ((u32) srb->
1325 								    cmnd[8] <<
1326 								    8) | ((u32)
1327 									  srb->
1328 									  cmnd
1329 									  [9]);
1330 		retval = rts51x_send_cmd(chip, mode, 1000);
1331 		if (retval != STATUS_SUCCESS) {
1332 			set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_ERR);
1333 			TRACE_RET(chip, TRANSPORT_FAILED);
1334 		}
1335 		if (mode & STAGE_R) {
1336 			retval = rts51x_get_rsp(chip, len, timeout);
1337 			if (retval != STATUS_SUCCESS) {
1338 				set_sense_type(chip, lun,
1339 					SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1340 				TRACE_RET(chip, TRANSPORT_FAILED);
1341 			}
1342 		}
1343 		break;
1344 
1345 	case GET_BATCHRSP:
1346 		idx = srb->cmnd[4];
1347 		value = chip->rsp_buf[idx];
1348 		if (scsi_bufflen(srb) < 1) {
1349 			set_sense_type(chip, lun,
1350 				       SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1351 			TRACE_RET(chip, TRANSPORT_FAILED);
1352 		}
1353 		rts51x_set_xfer_buf(&value, 1, srb);
1354 		scsi_set_resid(srb, 0);
1355 		break;
1356 
1357 	default:
1358 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1359 		TRACE_RET(chip, TRANSPORT_FAILED);
1360 	}
1361 
1362 	if (retval != STATUS_SUCCESS) {
1363 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_ERR);
1364 		TRACE_RET(chip, TRANSPORT_FAILED);
1365 	}
1366 
1367 	return TRANSPORT_GOOD;
1368 }
1369 
suit_cmd(struct scsi_cmnd * srb,struct rts51x_chip * chip)1370 static int suit_cmd(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1371 {
1372 	int result;
1373 
1374 	switch (srb->cmnd[3]) {
1375 	case INIT_BATCHCMD:
1376 	case ADD_BATCHCMD:
1377 	case SEND_BATCHCMD:
1378 	case GET_BATCHRSP:
1379 		result = rw_mem_cmd_buf(srb, chip);
1380 		break;
1381 	default:
1382 		result = TRANSPORT_ERROR;
1383 	}
1384 
1385 	return result;
1386 }
1387 
app_cmd(struct scsi_cmnd * srb,struct rts51x_chip * chip)1388 static int app_cmd(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1389 {
1390 	int result;
1391 
1392 	switch (srb->cmnd[2]) {
1393 	case PP_READ10:
1394 	case PP_WRITE10:
1395 		result = read_write(srb, chip);
1396 		break;
1397 
1398 	case SUIT_CMD:
1399 		result = suit_cmd(srb, chip);
1400 		break;
1401 
1402 	case READ_PHY:
1403 		result = read_phy_register(srb, chip);
1404 		break;
1405 
1406 	case WRITE_PHY:
1407 		result = write_phy_register(srb, chip);
1408 		break;
1409 
1410 	case GET_DEV_STATUS:
1411 		result = get_dev_status(srb, chip);
1412 		break;
1413 
1414 	default:
1415 		set_sense_type(chip, SCSI_LUN(srb),
1416 			       SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1417 		TRACE_RET(chip, TRANSPORT_FAILED);
1418 	}
1419 
1420 	return result;
1421 }
1422 
vendor_cmnd(struct scsi_cmnd * srb,struct rts51x_chip * chip)1423 static int vendor_cmnd(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1424 {
1425 	int result = TRANSPORT_GOOD;
1426 
1427 	switch (srb->cmnd[1]) {
1428 	case READ_STATUS:
1429 		result = read_status(srb, chip);
1430 		break;
1431 
1432 	case READ_MEM:
1433 		result = read_mem(srb, chip);
1434 		break;
1435 
1436 	case WRITE_MEM:
1437 		result = write_mem(srb, chip);
1438 		break;
1439 
1440 	case GET_BUS_WIDTH:
1441 		result = get_card_bus_width(srb, chip);
1442 		break;
1443 
1444 	case GET_SD_CSD:
1445 		result = get_sd_csd(srb, chip);
1446 		break;
1447 
1448 #ifdef _MSG_TRACE
1449 	case TRACE_MSG:
1450 		result = trace_msg_cmd(srb, chip);
1451 		break;
1452 #endif
1453 
1454 	case SCSI_APP_CMD:
1455 		result = app_cmd(srb, chip);
1456 		break;
1457 
1458 	default:
1459 		set_sense_type(chip, SCSI_LUN(srb),
1460 			       SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1461 		TRACE_RET(chip, TRANSPORT_FAILED);
1462 	}
1463 
1464 	return result;
1465 }
1466 
ms_format_cmnd(struct scsi_cmnd * srb,struct rts51x_chip * chip)1467 static int ms_format_cmnd(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1468 {
1469 	struct ms_info *ms_card = &(chip->ms_card);
1470 	unsigned int lun = SCSI_LUN(srb);
1471 	int retval, quick_format;
1472 
1473 	if (get_lun_card(chip, lun) != MS_CARD) {
1474 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
1475 		TRACE_RET(chip, TRANSPORT_FAILED);
1476 	}
1477 
1478 	if ((srb->cmnd[3] != 0x4D) || (srb->cmnd[4] != 0x47)
1479 	    || (srb->cmnd[5] != 0x66) || (srb->cmnd[6] != 0x6D)
1480 	    || (srb->cmnd[7] != 0x74)) {
1481 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1482 		TRACE_RET(chip, TRANSPORT_FAILED);
1483 	}
1484 
1485 	if (srb->cmnd[8] & 0x01)
1486 		quick_format = 0;
1487 	else
1488 		quick_format = 1;
1489 
1490 	if (!(chip->card_ready & MS_CARD)) {
1491 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
1492 		TRACE_RET(chip, TRANSPORT_FAILED);
1493 	}
1494 
1495 	if (chip->card_wp & MS_CARD) {
1496 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_PROTECT);
1497 		TRACE_RET(chip, TRANSPORT_FAILED);
1498 	}
1499 
1500 	if (!CHK_MSPRO(ms_card)) {
1501 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
1502 		TRACE_RET(chip, TRANSPORT_FAILED);
1503 	}
1504 
1505 	rts51x_prepare_run(chip);
1506 	RTS51X_SET_STAT(chip, STAT_RUN);
1507 
1508 	retval = mspro_format(srb, chip, MS_SHORT_DATA_LEN, quick_format);
1509 	if (retval != STATUS_SUCCESS) {
1510 		set_sense_type(chip, lun, SENSE_TYPE_FORMAT_CMD_FAILED);
1511 		TRACE_RET(chip, TRANSPORT_FAILED);
1512 	}
1513 
1514 	scsi_set_resid(srb, 0);
1515 	return TRANSPORT_GOOD;
1516 }
1517 
1518 #ifdef SUPPORT_PCGL_1P18
get_ms_information(struct scsi_cmnd * srb,struct rts51x_chip * chip)1519 int get_ms_information(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1520 {
1521 	struct ms_info *ms_card = &(chip->ms_card);
1522 	unsigned int lun = SCSI_LUN(srb);
1523 	u8 dev_info_id, data_len;
1524 	u8 *buf;
1525 	unsigned int buf_len;
1526 	int i;
1527 
1528 	if (!check_card_ready(chip, lun)) {
1529 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
1530 		TRACE_RET(chip, TRANSPORT_FAILED);
1531 	}
1532 	if ((get_lun_card(chip, lun) != MS_CARD)) {
1533 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
1534 		TRACE_RET(chip, TRANSPORT_FAILED);
1535 	}
1536 
1537 	if ((srb->cmnd[2] != 0xB0) || (srb->cmnd[4] != 0x4D) ||
1538 	    (srb->cmnd[5] != 0x53) || (srb->cmnd[6] != 0x49) ||
1539 	    (srb->cmnd[7] != 0x44)) {
1540 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1541 		TRACE_RET(chip, TRANSPORT_FAILED);
1542 	}
1543 
1544 	dev_info_id = srb->cmnd[3];
1545 	if ((CHK_MSXC(ms_card) && (dev_info_id == 0x10)) ||
1546 	    (!CHK_MSXC(ms_card) && (dev_info_id == 0x13)) ||
1547 	    !CHK_MSPRO(ms_card)) {
1548 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1549 		TRACE_RET(chip, TRANSPORT_FAILED);
1550 	}
1551 
1552 	if (dev_info_id == 0x15)
1553 		buf_len = data_len = 0x3A;
1554 	else
1555 		buf_len = data_len = 0x6A;
1556 
1557 	buf = kmalloc(buf_len, GFP_KERNEL);
1558 	if (!buf)
1559 		TRACE_RET(chip, TRANSPORT_ERROR);
1560 
1561 	i = 0;
1562 	/* GET Memory Stick Media Information Response Header */
1563 	buf[i++] = 0x00;	/* Data length MSB */
1564 	buf[i++] = data_len;	/* Data length LSB */
1565 	/* Device Information Type Code */
1566 	if (CHK_MSXC(ms_card))
1567 		buf[i++] = 0x03;
1568 	else
1569 		buf[i++] = 0x02;
1570 	/* SGM bit */
1571 	buf[i++] = 0x01;
1572 	/* Reserved */
1573 	buf[i++] = 0x00;
1574 	buf[i++] = 0x00;
1575 	buf[i++] = 0x00;
1576 	/* Number of Device Information */
1577 	buf[i++] = 0x01;
1578 
1579 	/*  Device Information Body
1580 	 *  Device Information ID Number */
1581 	buf[i++] = dev_info_id;
1582 	/* Device Information Length */
1583 	if (dev_info_id == 0x15)
1584 		data_len = 0x31;
1585 	else
1586 		data_len = 0x61;
1587 	buf[i++] = 0x00;	/* Data length MSB */
1588 	buf[i++] = data_len;	/* Data length LSB */
1589 	/* Valid Bit */
1590 	buf[i++] = 0x80;
1591 	if ((dev_info_id == 0x10) || (dev_info_id == 0x13)) {
1592 		/* System Information */
1593 		memcpy(buf + i, ms_card->raw_sys_info, 96);
1594 	} else {
1595 		/* Model Name */
1596 		memcpy(buf + i, ms_card->raw_model_name, 48);
1597 	}
1598 
1599 	rts51x_set_xfer_buf(buf, buf_len, srb);
1600 
1601 	if (dev_info_id == 0x15)
1602 		scsi_set_resid(srb, scsi_bufflen(srb) - 0x3C);
1603 	else
1604 		scsi_set_resid(srb, scsi_bufflen(srb) - 0x6C);
1605 
1606 	kfree(buf);
1607 	return STATUS_SUCCESS;
1608 }
1609 #endif
1610 
ms_sp_cmnd(struct scsi_cmnd * srb,struct rts51x_chip * chip)1611 static int ms_sp_cmnd(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1612 {
1613 	int retval = TRANSPORT_ERROR;
1614 
1615 	if (srb->cmnd[2] == MS_FORMAT)
1616 		retval = ms_format_cmnd(srb, chip);
1617 #ifdef SUPPORT_PCGL_1P18
1618 	else if (srb->cmnd[2] == GET_MS_INFORMATION)
1619 		retval = get_ms_information(srb, chip);
1620 #endif
1621 
1622 	return retval;
1623 }
1624 
1625 #ifdef SUPPORT_CPRM
sd_extention_cmnd(struct scsi_cmnd * srb,struct rts51x_chip * chip)1626 static int sd_extention_cmnd(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1627 {
1628 	unsigned int lun = SCSI_LUN(srb);
1629 	int result;
1630 
1631 	rts51x_prepare_run(chip);
1632 	RTS51X_SET_STAT(chip, STAT_RUN);
1633 
1634 	sd_cleanup_work(chip);
1635 
1636 	if (!check_card_ready(chip, lun)) {
1637 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
1638 		TRACE_RET(chip, TRANSPORT_FAILED);
1639 	}
1640 	if ((get_lun_card(chip, lun) != SD_CARD)) {
1641 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
1642 		TRACE_RET(chip, TRANSPORT_FAILED);
1643 	}
1644 
1645 	switch (srb->cmnd[0]) {
1646 	case SD_PASS_THRU_MODE:
1647 		result = sd_pass_thru_mode(srb, chip);
1648 		break;
1649 
1650 	case SD_EXECUTE_NO_DATA:
1651 		result = sd_execute_no_data(srb, chip);
1652 		break;
1653 
1654 	case SD_EXECUTE_READ:
1655 		result = sd_execute_read_data(srb, chip);
1656 		break;
1657 
1658 	case SD_EXECUTE_WRITE:
1659 		result = sd_execute_write_data(srb, chip);
1660 		break;
1661 
1662 	case SD_GET_RSP:
1663 		result = sd_get_cmd_rsp(srb, chip);
1664 		break;
1665 
1666 	case SD_HW_RST:
1667 		result = sd_hw_rst(srb, chip);
1668 		break;
1669 
1670 	default:
1671 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1672 		TRACE_RET(chip, TRANSPORT_FAILED);
1673 	}
1674 
1675 	return result;
1676 }
1677 #endif
1678 
1679 #ifdef SUPPORT_MAGIC_GATE
mg_report_key(struct scsi_cmnd * srb,struct rts51x_chip * chip)1680 int mg_report_key(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1681 {
1682 	struct ms_info *ms_card = &(chip->ms_card);
1683 	unsigned int lun = SCSI_LUN(srb);
1684 	int retval;
1685 	u8 key_format;
1686 
1687 	rts51x_prepare_run(chip);
1688 	RTS51X_SET_STAT(chip, STAT_RUN);
1689 
1690 	ms_cleanup_work(chip);
1691 
1692 	if (!check_card_ready(chip, lun)) {
1693 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
1694 		TRACE_RET(chip, TRANSPORT_FAILED);
1695 	}
1696 	if ((get_lun_card(chip, lun) != MS_CARD)) {
1697 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
1698 		TRACE_RET(chip, TRANSPORT_FAILED);
1699 	}
1700 
1701 	if (srb->cmnd[7] != KC_MG_R_PRO) {
1702 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1703 		TRACE_RET(chip, TRANSPORT_FAILED);
1704 	}
1705 
1706 	if (!CHK_MSPRO(ms_card)) {
1707 		set_sense_type(chip, lun, SENSE_TYPE_MG_INCOMPATIBLE_MEDIUM);
1708 		TRACE_RET(chip, TRANSPORT_FAILED);
1709 	}
1710 
1711 	key_format = srb->cmnd[10] & 0x3F;
1712 
1713 	switch (key_format) {
1714 	case KF_GET_LOC_EKB:
1715 		if ((scsi_bufflen(srb) == 0x41C) &&
1716 		    (srb->cmnd[8] == 0x04) && (srb->cmnd[9] == 0x1C)) {
1717 			retval = mg_get_local_EKB(srb, chip);
1718 			if (retval != STATUS_SUCCESS)
1719 				TRACE_RET(chip, TRANSPORT_FAILED);
1720 		} else {
1721 			set_sense_type(chip, lun,
1722 				       SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1723 			TRACE_RET(chip, TRANSPORT_FAILED);
1724 		}
1725 		break;
1726 
1727 	case KF_RSP_CHG:
1728 		if ((scsi_bufflen(srb) == 0x24) &&
1729 		    (srb->cmnd[8] == 0x00) && (srb->cmnd[9] == 0x24)) {
1730 			retval = mg_get_rsp_chg(srb, chip);
1731 			if (retval != STATUS_SUCCESS)
1732 				TRACE_RET(chip, TRANSPORT_FAILED);
1733 		} else {
1734 			set_sense_type(chip, lun,
1735 				       SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1736 			TRACE_RET(chip, TRANSPORT_FAILED);
1737 		}
1738 		break;
1739 
1740 	case KF_GET_ICV:
1741 		ms_card->mg_entry_num = srb->cmnd[5];
1742 		if ((scsi_bufflen(srb) == 0x404) &&
1743 		    (srb->cmnd[8] == 0x04) &&
1744 		    (srb->cmnd[9] == 0x04) &&
1745 		    (srb->cmnd[2] == 0x00) &&
1746 		    (srb->cmnd[3] == 0x00) &&
1747 		    (srb->cmnd[4] == 0x00) && (srb->cmnd[5] < 32)) {
1748 			retval = mg_get_ICV(srb, chip);
1749 			if (retval != STATUS_SUCCESS)
1750 				TRACE_RET(chip, TRANSPORT_FAILED);
1751 		} else {
1752 			set_sense_type(chip, lun,
1753 				       SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1754 			TRACE_RET(chip, TRANSPORT_FAILED);
1755 		}
1756 		break;
1757 
1758 	default:
1759 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1760 		TRACE_RET(chip, TRANSPORT_FAILED);
1761 	}
1762 
1763 	scsi_set_resid(srb, 0);
1764 	return TRANSPORT_GOOD;
1765 }
1766 
mg_send_key(struct scsi_cmnd * srb,struct rts51x_chip * chip)1767 int mg_send_key(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1768 {
1769 	struct ms_info *ms_card = &(chip->ms_card);
1770 	unsigned int lun = SCSI_LUN(srb);
1771 	int retval;
1772 	u8 key_format;
1773 
1774 	rts51x_prepare_run(chip);
1775 	RTS51X_SET_STAT(chip, STAT_RUN);
1776 
1777 	ms_cleanup_work(chip);
1778 
1779 	if (!check_card_ready(chip, lun)) {
1780 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
1781 		TRACE_RET(chip, TRANSPORT_FAILED);
1782 	}
1783 	if (check_card_wp(chip, lun)) {
1784 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_PROTECT);
1785 		TRACE_RET(chip, TRANSPORT_FAILED);
1786 	}
1787 	if ((get_lun_card(chip, lun) != MS_CARD)) {
1788 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
1789 		TRACE_RET(chip, TRANSPORT_FAILED);
1790 	}
1791 
1792 	if (srb->cmnd[7] != KC_MG_R_PRO) {
1793 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1794 		TRACE_RET(chip, TRANSPORT_FAILED);
1795 	}
1796 
1797 	if (!CHK_MSPRO(ms_card)) {
1798 		set_sense_type(chip, lun, SENSE_TYPE_MG_INCOMPATIBLE_MEDIUM);
1799 		TRACE_RET(chip, TRANSPORT_FAILED);
1800 	}
1801 
1802 	key_format = srb->cmnd[10] & 0x3F;
1803 
1804 	switch (key_format) {
1805 	case KF_SET_LEAF_ID:
1806 		if ((scsi_bufflen(srb) == 0x0C) &&
1807 		    (srb->cmnd[8] == 0x00) && (srb->cmnd[9] == 0x0C)) {
1808 			retval = mg_set_leaf_id(srb, chip);
1809 			if (retval != STATUS_SUCCESS)
1810 				TRACE_RET(chip, TRANSPORT_FAILED);
1811 		} else {
1812 			set_sense_type(chip, lun,
1813 				       SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1814 			TRACE_RET(chip, TRANSPORT_FAILED);
1815 		}
1816 		break;
1817 
1818 	case KF_CHG_HOST:
1819 		if ((scsi_bufflen(srb) == 0x0C) &&
1820 		    (srb->cmnd[8] == 0x00) && (srb->cmnd[9] == 0x0C)) {
1821 			retval = mg_chg(srb, chip);
1822 			if (retval != STATUS_SUCCESS)
1823 				TRACE_RET(chip, TRANSPORT_FAILED);
1824 		} else {
1825 			set_sense_type(chip, lun,
1826 				       SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1827 			TRACE_RET(chip, TRANSPORT_FAILED);
1828 		}
1829 		break;
1830 
1831 	case KF_RSP_HOST:
1832 		if ((scsi_bufflen(srb) == 0x0C) &&
1833 		    (srb->cmnd[8] == 0x00) && (srb->cmnd[9] == 0x0C)) {
1834 			retval = mg_rsp(srb, chip);
1835 			if (retval != STATUS_SUCCESS)
1836 				TRACE_RET(chip, TRANSPORT_FAILED);
1837 		} else {
1838 			set_sense_type(chip, lun,
1839 				       SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1840 			TRACE_RET(chip, TRANSPORT_FAILED);
1841 		}
1842 		break;
1843 
1844 	case KF_SET_ICV:
1845 		ms_card->mg_entry_num = srb->cmnd[5];
1846 		if ((scsi_bufflen(srb) == 0x404) &&
1847 		    (srb->cmnd[8] == 0x04) &&
1848 		    (srb->cmnd[9] == 0x04) &&
1849 		    (srb->cmnd[2] == 0x00) &&
1850 		    (srb->cmnd[3] == 0x00) &&
1851 		    (srb->cmnd[4] == 0x00) && (srb->cmnd[5] < 32)) {
1852 			retval = mg_set_ICV(srb, chip);
1853 			if (retval != STATUS_SUCCESS)
1854 				TRACE_RET(chip, TRANSPORT_FAILED);
1855 		} else {
1856 			set_sense_type(chip, lun,
1857 				       SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1858 			TRACE_RET(chip, TRANSPORT_FAILED);
1859 		}
1860 		break;
1861 
1862 	default:
1863 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1864 		TRACE_RET(chip, TRANSPORT_FAILED);
1865 	}
1866 
1867 	scsi_set_resid(srb, 0);
1868 	return TRANSPORT_GOOD;
1869 }
1870 #endif
1871 
rts51x_scsi_handler(struct scsi_cmnd * srb,struct rts51x_chip * chip)1872 int rts51x_scsi_handler(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1873 {
1874 #ifdef SUPPORT_SD_LOCK
1875 	struct sd_info *sd_card = &(chip->sd_card);
1876 #endif
1877 	struct ms_info *ms_card = &(chip->ms_card);
1878 	unsigned int lun = SCSI_LUN(srb);
1879 	int result = TRANSPORT_GOOD;
1880 
1881 #ifdef SUPPORT_SD_LOCK
1882 	if (sd_card->sd_erase_status) {
1883 		/* Block all SCSI command except for REQUEST_SENSE
1884 		 * and rs_ppstatus */
1885 		if (!
1886 		    ((srb->cmnd[0] == VENDOR_CMND)
1887 		     && (srb->cmnd[1] == SCSI_APP_CMD)
1888 		     && (srb->cmnd[2] == GET_DEV_STATUS))
1889 		    && (srb->cmnd[0] != REQUEST_SENSE)) {
1890 			/* Logical Unit Not Ready Format in Progress */
1891 			set_sense_data(chip, lun, CUR_ERR, 0x02, 0, 0x04, 0x04,
1892 				       0, 0);
1893 			TRACE_RET(chip, TRANSPORT_FAILED);
1894 		}
1895 	}
1896 #endif
1897 
1898 	if ((get_lun_card(chip, lun) == MS_CARD) &&
1899 	    (ms_card->format_status == FORMAT_IN_PROGRESS)) {
1900 		if ((srb->cmnd[0] != REQUEST_SENSE)
1901 		    && (srb->cmnd[0] != INQUIRY)) {
1902 			/* Logical Unit Not Ready Format in Progress */
1903 			set_sense_data(chip, lun, CUR_ERR, 0x02, 0, 0x04, 0x04,
1904 				       0, (u16) (ms_card->progress));
1905 			TRACE_RET(chip, TRANSPORT_FAILED);
1906 		}
1907 	}
1908 
1909 	switch (srb->cmnd[0]) {
1910 	case READ_10:
1911 	case WRITE_10:
1912 	case READ_6:
1913 	case WRITE_6:
1914 		result = read_write(srb, chip);
1915 		break;
1916 
1917 	case TEST_UNIT_READY:
1918 		result = test_unit_ready(srb, chip);
1919 		break;
1920 
1921 	case INQUIRY:
1922 		result = inquiry(srb, chip);
1923 		break;
1924 
1925 	case READ_CAPACITY:
1926 		result = read_capacity(srb, chip);
1927 		break;
1928 
1929 	case START_STOP:
1930 		result = start_stop_unit(srb, chip);
1931 		break;
1932 
1933 	case ALLOW_MEDIUM_REMOVAL:
1934 		result = allow_medium_removal(srb, chip);
1935 		break;
1936 
1937 	case REQUEST_SENSE:
1938 		result = request_sense(srb, chip);
1939 		break;
1940 
1941 	case MODE_SENSE:
1942 	case MODE_SENSE_10:
1943 		result = mode_sense(srb, chip);
1944 		break;
1945 
1946 	case 0x23:
1947 		result = read_format_capacity(srb, chip);
1948 		break;
1949 
1950 	case VENDOR_CMND:
1951 		result = vendor_cmnd(srb, chip);
1952 		break;
1953 
1954 	case MS_SP_CMND:
1955 		result = ms_sp_cmnd(srb, chip);
1956 		break;
1957 
1958 #ifdef SUPPORT_CPRM
1959 	case SD_PASS_THRU_MODE:
1960 	case SD_EXECUTE_NO_DATA:
1961 	case SD_EXECUTE_READ:
1962 	case SD_EXECUTE_WRITE:
1963 	case SD_GET_RSP:
1964 	case SD_HW_RST:
1965 		result = sd_extention_cmnd(srb, chip);
1966 		break;
1967 #endif
1968 
1969 #ifdef SUPPORT_MAGIC_GATE
1970 	case CMD_MSPRO_MG_RKEY:
1971 		result = mg_report_key(srb, chip);
1972 		break;
1973 
1974 	case CMD_MSPRO_MG_SKEY:
1975 		result = mg_send_key(srb, chip);
1976 		break;
1977 #endif
1978 
1979 	case FORMAT_UNIT:
1980 	case MODE_SELECT:
1981 	case VERIFY:
1982 		result = TRANSPORT_GOOD;
1983 		break;
1984 
1985 	default:
1986 		set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1987 		result = TRANSPORT_FAILED;
1988 	}
1989 
1990 	return result;
1991 }
1992 
1993 /***********************************************************************
1994  * Host functions
1995  ***********************************************************************/
1996 
host_info(struct Scsi_Host * host)1997 const char *host_info(struct Scsi_Host *host)
1998 {
1999 	return "SCSI emulation for RTS51xx USB driver-based card reader";
2000 }
2001 
slave_alloc(struct scsi_device * sdev)2002 int slave_alloc(struct scsi_device *sdev)
2003 {
2004 	/*
2005 	 * Set the INQUIRY transfer length to 36.  We don't use any of
2006 	 * the extra data and many devices choke if asked for more or
2007 	 * less than 36 bytes.
2008 	 */
2009 	sdev->inquiry_len = 36;
2010 	return 0;
2011 }
2012 
slave_configure(struct scsi_device * sdev)2013 int slave_configure(struct scsi_device *sdev)
2014 {
2015 	/* Scatter-gather buffers (all but the last) must have a length
2016 	 * divisible by the bulk maxpacket size.  Otherwise a data packet
2017 	 * would end up being short, causing a premature end to the data
2018 	 * transfer.  Since high-speed bulk pipes have a maxpacket size
2019 	 * of 512, we'll use that as the scsi device queue's DMA alignment
2020 	 * mask.  Guaranteeing proper alignment of the first buffer will
2021 	 * have the desired effect because, except at the beginning and
2022 	 * the end, scatter-gather buffers follow page boundaries. */
2023 	blk_queue_dma_alignment(sdev->request_queue, (512 - 1));
2024 
2025 	/* Set the SCSI level to at least 2.  We'll leave it at 3 if that's
2026 	 * what is originally reported.  We need this to avoid confusing
2027 	 * the SCSI layer with devices that report 0 or 1, but need 10-byte
2028 	 * commands (ala ATAPI devices behind certain bridges, or devices
2029 	 * which simply have broken INQUIRY data).
2030 	 *
2031 	 * NOTE: This means /dev/sg programs (ala cdrecord) will get the
2032 	 * actual information.  This seems to be the preference for
2033 	 * programs like that.
2034 	 *
2035 	 * NOTE: This also means that /proc/scsi/scsi and sysfs may report
2036 	 * the actual value or the modified one, depending on where the
2037 	 * data comes from.
2038 	 */
2039 	if (sdev->scsi_level < SCSI_2)
2040 		sdev->scsi_level = sdev->sdev_target->scsi_level = SCSI_2;
2041 
2042 	return 0;
2043 }
2044 
2045 /***********************************************************************
2046  * /proc/scsi/ functions
2047  ***********************************************************************/
2048 
2049 /* we use this macro to help us write into the buffer */
2050 #undef SPRINTF
2051 #define SPRINTF(args...) \
2052 	do { if (pos < buffer+length) pos += sprintf(pos, ## args); } while (0)
2053 
proc_info(struct Scsi_Host * host,char * buffer,char ** start,off_t offset,int length,int inout)2054 int proc_info(struct Scsi_Host *host, char *buffer,
2055 	      char **start, off_t offset, int length, int inout)
2056 {
2057 	char *pos = buffer;
2058 
2059 	/* if someone is sending us data, just throw it away */
2060 	if (inout)
2061 		return length;
2062 
2063 	/* print the controller name */
2064 	SPRINTF("   Host scsi%d: %s\n", host->host_no, RTS51X_NAME);
2065 
2066 	/* print product, vendor, and driver version strings */
2067 	SPRINTF("       Vendor: Realtek Corp.\n");
2068 	SPRINTF("      Product: RTS51xx USB Card Reader\n");
2069 	SPRINTF("      Version: %s\n", DRIVER_VERSION);
2070 	SPRINTF("        Build: %s\n", __TIME__);
2071 
2072 	/*
2073 	 * Calculate start of next buffer, and return value.
2074 	 */
2075 	*start = buffer + offset;
2076 
2077 	if ((pos - buffer) < offset)
2078 		return 0;
2079 	else if ((pos - buffer - offset) < length)
2080 		return pos - buffer - offset;
2081 	else
2082 		return length;
2083 }
2084 
2085 /* queue a command */
2086 /* This is always called with scsi_lock(host) held */
queuecommand_lck(struct scsi_cmnd * srb,void (* done)(struct scsi_cmnd *))2087 int queuecommand_lck(struct scsi_cmnd *srb, void (*done) (struct scsi_cmnd *))
2088 {
2089 	struct rts51x_chip *chip = host_to_rts51x(srb->device->host);
2090 
2091 	/* check for state-transition errors */
2092 	if (chip->srb != NULL) {
2093 		RTS51X_DEBUGP("Error in %s: chip->srb = %p\n",
2094 			       __func__, chip->srb);
2095 		return SCSI_MLQUEUE_HOST_BUSY;
2096 	}
2097 
2098 	/* fail the command if we are disconnecting */
2099 	if (test_bit(FLIDX_DISCONNECTING, &chip->usb->dflags)) {
2100 		RTS51X_DEBUGP("Fail command during disconnect\n");
2101 		srb->result = DID_NO_CONNECT << 16;
2102 		done(srb);
2103 		return 0;
2104 	}
2105 
2106 	/* enqueue the command and wake up the control thread */
2107 	srb->scsi_done = done;
2108 	chip->srb = srb;
2109 	complete(&chip->usb->cmnd_ready);
2110 
2111 	return 0;
2112 }
2113 
2114 #if 0 /* LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 37) */
2115 int queuecommand(struct scsi_cmnd *srb, void (*done) (struct scsi_cmnd *))
2116 {
2117 	return queuecommand_lck(srb, done);
2118 }
2119 #else
DEF_SCSI_QCMD(queuecommand)2120 DEF_SCSI_QCMD(queuecommand)
2121 #endif
2122 /***********************************************************************
2123  * Error handling functions
2124  ***********************************************************************/
2125 /* Command timeout and abort */
2126 int command_abort(struct scsi_cmnd *srb)
2127 {
2128 	struct rts51x_chip *chip = host_to_rts51x(srb->device->host);
2129 
2130 	RTS51X_DEBUGP("%s called\n", __func__);
2131 
2132 	/* us->srb together with the TIMED_OUT, RESETTING, and ABORTING
2133 	 * bits are protected by the host lock. */
2134 	scsi_lock(rts51x_to_host(chip));
2135 
2136 	/* Is this command still active? */
2137 	if (chip->srb != srb) {
2138 		scsi_unlock(rts51x_to_host(chip));
2139 		RTS51X_DEBUGP("-- nothing to abort\n");
2140 		return FAILED;
2141 	}
2142 
2143 	/* Set the TIMED_OUT bit.  Also set the ABORTING bit, but only if
2144 	 * a device reset isn't already in progress (to avoid interfering
2145 	 * with the reset).  Note that we must retain the host lock while
2146 	 * calling usb_stor_stop_transport(); otherwise it might interfere
2147 	 * with an auto-reset that begins as soon as we release the lock. */
2148 	set_bit(FLIDX_TIMED_OUT, &chip->usb->dflags);
2149 	if (!test_bit(FLIDX_RESETTING, &chip->usb->dflags)) {
2150 		set_bit(FLIDX_ABORTING, &chip->usb->dflags);
2151 		/* rts51x_stop_transport(us); */
2152 	}
2153 	scsi_unlock(rts51x_to_host(chip));
2154 
2155 	/* Wait for the aborted command to finish */
2156 	wait_for_completion(&chip->usb->notify);
2157 	return SUCCESS;
2158 }
2159 
2160 /* This invokes the transport reset mechanism to reset the state of the
2161  * device */
device_reset(struct scsi_cmnd * srb)2162 int device_reset(struct scsi_cmnd *srb)
2163 {
2164 	int result = 0;
2165 
2166 	RTS51X_DEBUGP("%s called\n", __func__);
2167 
2168 	return result < 0 ? FAILED : SUCCESS;
2169 }
2170 
2171 /* Simulate a SCSI bus reset by resetting the device's USB port. */
bus_reset(struct scsi_cmnd * srb)2172 int bus_reset(struct scsi_cmnd *srb)
2173 {
2174 	int result = 0;
2175 
2176 	RTS51X_DEBUGP("%s called\n", __func__);
2177 
2178 	return result < 0 ? FAILED : SUCCESS;
2179 }
2180 
rts5139_info(struct Scsi_Host * host)2181 static const char *rts5139_info(struct Scsi_Host *host)
2182 {
2183 	return "SCSI emulation for RTS5139 USB card reader";
2184 }
2185 
2186 struct scsi_host_template rts51x_host_template = {
2187 	/* basic userland interface stuff */
2188 	.name = RTS51X_NAME,
2189 	.proc_name = RTS51X_NAME,
2190 	.proc_info = proc_info,
2191 	.info = rts5139_info,
2192 
2193 	/* command interface -- queued only */
2194 	.queuecommand = queuecommand,
2195 
2196 	/* error and abort handlers */
2197 	.eh_abort_handler = command_abort,
2198 	.eh_device_reset_handler = device_reset,
2199 	.eh_bus_reset_handler = bus_reset,
2200 
2201 	/* queue commands only, only one command per LUN */
2202 	.can_queue = 1,
2203 	.cmd_per_lun = 1,
2204 
2205 	/* unknown initiator id */
2206 	.this_id = -1,
2207 
2208 	.slave_alloc = slave_alloc,
2209 	.slave_configure = slave_configure,
2210 
2211 	/* lots of sg segments can be handled */
2212 	.sg_tablesize = SG_ALL,
2213 
2214 	/* limit the total size of a transfer to 120 KB */
2215 	.max_sectors = 240,
2216 
2217 	/* merge commands... this seems to help performance, but
2218 	 * periodically someone should test to see which setting is more
2219 	 * optimal.
2220 	 */
2221 	.use_clustering = 1,
2222 
2223 	/* emulated HBA */
2224 	.emulated = 1,
2225 
2226 	/* we do our own delay after a device or bus reset */
2227 	.skip_settle_delay = 1,
2228 
2229 	/* sysfs device attributes */
2230 	/* .sdev_attrs = sysfs_device_attr_list, */
2231 
2232 	/* module management */
2233 	.module = THIS_MODULE
2234 };
2235 
2236