1 /* Driver for Realtek RTS51xx USB card reader
3 * Copyright(c) 2009 Realtek Semiconductor Corp. All rights reserved.
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
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.
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/>.
19 * wwang (wei_wang@realsil.com.cn)
20 * No. 450, Shenhu Road, Suzhou Industry Park, Suzhou, China
22 * Edwin Rong (edwin_rong@realsil.com.cn)
23 * No. 450, Shenhu Road, Suzhou Industry Park, Suzhou, China
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>
33 #include <scsi/scsi.h>
34 #include <scsi/scsi_eh.h>
35 #include <scsi/scsi_device.h>
39 #include "rts51x_chip.h"
40 #include "rts51x_scsi.h"
41 #include "rts51x_card.h"
42 #include "rts51x_transport.h"
47 void scsi_show_command(struct scsi_cmnd *srb)
50 int i, unknown_cmd = 0;
52 switch (srb->cmnd[0]) {
54 what = (char *)"TEST_UNIT_READY";
57 what = (char *)"REZERO_UNIT";
60 what = (char *)"REQUEST_SENSE";
63 what = (char *)"FORMAT_UNIT";
65 case READ_BLOCK_LIMITS:
66 what = (char *)"READ_BLOCK_LIMITS";
69 what = (char *)"REASSIGN_BLOCKS";
72 what = (char *)"READ_6";
75 what = (char *)"WRITE_6";
78 what = (char *)"SEEK_6";
81 what = (char *)"READ_REVERSE";
84 what = (char *)"WRITE_FILEMARKS";
87 what = (char *)"SPACE";
90 what = (char *)"INQUIRY";
92 case RECOVER_BUFFERED_DATA:
93 what = (char *)"RECOVER_BUFFERED_DATA";
96 what = (char *)"MODE_SELECT";
99 what = (char *)"RESERVE";
102 what = (char *)"RELEASE";
105 what = (char *)"COPY";
108 what = (char *)"ERASE";
111 what = (char *)"MODE_SENSE";
114 what = (char *)"START_STOP";
116 case RECEIVE_DIAGNOSTIC:
117 what = (char *)"RECEIVE_DIAGNOSTIC";
119 case SEND_DIAGNOSTIC:
120 what = (char *)"SEND_DIAGNOSTIC";
122 case ALLOW_MEDIUM_REMOVAL:
123 what = (char *)"ALLOW_MEDIUM_REMOVAL";
126 what = (char *)"SET_WINDOW";
129 what = (char *)"READ_CAPACITY";
132 what = (char *)"READ_10";
135 what = (char *)"WRITE_10";
138 what = (char *)"SEEK_10";
141 what = (char *)"WRITE_VERIFY";
144 what = (char *)"VERIFY";
147 what = (char *)"SEARCH_HIGH";
150 what = (char *)"SEARCH_EQUAL";
153 what = (char *)"SEARCH_LOW";
156 what = (char *)"SET_LIMITS";
159 what = (char *)"READ_POSITION";
161 case SYNCHRONIZE_CACHE:
162 what = (char *)"SYNCHRONIZE_CACHE";
164 case LOCK_UNLOCK_CACHE:
165 what = (char *)"LOCK_UNLOCK_CACHE";
167 case READ_DEFECT_DATA:
168 what = (char *)"READ_DEFECT_DATA";
171 what = (char *)"MEDIUM_SCAN";
174 what = (char *)"COMPARE";
177 what = (char *)"COPY_VERIFY";
180 what = (char *)"WRITE_BUFFER";
183 what = (char *)"READ_BUFFER";
186 what = (char *)"UPDATE_BLOCK";
189 what = (char *)"READ_LONG";
192 what = (char *)"WRITE_LONG";
194 case CHANGE_DEFINITION:
195 what = (char *)"CHANGE_DEFINITION";
198 what = (char *)"WRITE_SAME";
200 case GPCMD_READ_SUBCHANNEL:
201 what = (char *)"READ SUBCHANNEL";
204 what = (char *)"READ_TOC";
206 case GPCMD_READ_HEADER:
207 what = (char *)"READ HEADER";
209 case GPCMD_PLAY_AUDIO_10:
210 what = (char *)"PLAY AUDIO (10)";
212 case GPCMD_PLAY_AUDIO_MSF:
213 what = (char *)"PLAY AUDIO MSF";
215 case GPCMD_GET_EVENT_STATUS_NOTIFICATION:
216 what = (char *)"GET EVENT/STATUS NOTIFICATION";
218 case GPCMD_PAUSE_RESUME:
219 what = (char *)"PAUSE/RESUME";
222 what = (char *)"LOG_SELECT";
225 what = (char *)"LOG_SENSE";
227 case GPCMD_STOP_PLAY_SCAN:
228 what = (char *)"STOP PLAY/SCAN";
230 case GPCMD_READ_DISC_INFO:
231 what = (char *)"READ DISC INFORMATION";
233 case GPCMD_READ_TRACK_RZONE_INFO:
234 what = (char *)"READ TRACK INFORMATION";
236 case GPCMD_RESERVE_RZONE_TRACK:
237 what = (char *)"RESERVE TRACK";
240 what = (char *)"SEND OPC";
243 what = (char *)"MODE_SELECT_10";
245 case GPCMD_REPAIR_RZONE_TRACK:
246 what = (char *)"REPAIR TRACK";
249 what = (char *)"READ MASTER CUE";
252 what = (char *)"MODE_SENSE_10";
254 case GPCMD_CLOSE_TRACK:
255 what = (char *)"CLOSE TRACK/SESSION";
258 what = (char *)"READ BUFFER CAPACITY";
261 what = (char *)"SEND CUE SHEET";
264 what = (char *)"BLANK";
267 what = (char *)"REPORT LUNS";
270 what = (char *)"MOVE_MEDIUM or PLAY AUDIO (12)";
273 what = (char *)"READ_12";
276 what = (char *)"WRITE_12";
278 case WRITE_VERIFY_12:
279 what = (char *)"WRITE_VERIFY_12";
282 what = (char *)"SEARCH_HIGH_12";
284 case SEARCH_EQUAL_12:
285 what = (char *)"SEARCH_EQUAL_12";
288 what = (char *)"SEARCH_LOW_12";
290 case SEND_VOLUME_TAG:
291 what = (char *)"SEND_VOLUME_TAG";
293 case READ_ELEMENT_STATUS:
294 what = (char *)"READ_ELEMENT_STATUS";
296 case GPCMD_READ_CD_MSF:
297 what = (char *)"READ CD MSF";
300 what = (char *)"SCAN";
302 case GPCMD_SET_SPEED:
303 what = (char *)"SET CD SPEED";
305 case GPCMD_MECHANISM_STATUS:
306 what = (char *)"MECHANISM STATUS";
309 what = (char *)"READ CD";
312 what = (char *)"WRITE CONTINUE";
315 what = (char *)"WRITE_LONG_2";
318 what = (char *)"Realtek's vendor command";
321 what = (char *)"(unknown command)";
326 if (srb->cmnd[0] != TEST_UNIT_READY)
327 RTS51X_DEBUGP("Command %s (%d bytes)\n", what, srb->cmd_len);
330 for (i = 0; i < srb->cmd_len && i < 16; i++)
331 RTS51X_DEBUGPN(" %02x", srb->cmnd[i]);
332 RTS51X_DEBUGPN("\n");
336 void set_sense_type(struct rts51x_chip *chip, unsigned int lun, int sense_type)
338 switch (sense_type) {
339 case SENSE_TYPE_MEDIA_CHANGE:
340 set_sense_data(chip, lun, CUR_ERR, 0x06, 0, 0x28, 0, 0, 0);
343 case SENSE_TYPE_MEDIA_NOT_PRESENT:
344 set_sense_data(chip, lun, CUR_ERR, 0x02, 0, 0x3A, 0, 0, 0);
347 case SENSE_TYPE_MEDIA_LBA_OVER_RANGE:
348 set_sense_data(chip, lun, CUR_ERR, 0x05, 0, 0x21, 0, 0, 0);
351 case SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT:
352 set_sense_data(chip, lun, CUR_ERR, 0x05, 0, 0x25, 0, 0, 0);
355 case SENSE_TYPE_MEDIA_WRITE_PROTECT:
356 set_sense_data(chip, lun, CUR_ERR, 0x07, 0, 0x27, 0, 0, 0);
359 case SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR:
360 set_sense_data(chip, lun, CUR_ERR, 0x03, 0, 0x11, 0, 0, 0);
363 case SENSE_TYPE_MEDIA_WRITE_ERR:
364 set_sense_data(chip, lun, CUR_ERR, 0x03, 0, 0x0C, 0x02, 0, 0);
367 case SENSE_TYPE_MEDIA_INVALID_CMD_FIELD:
368 set_sense_data(chip, lun, CUR_ERR, ILGAL_REQ, 0,
369 ASC_INVLD_CDB, ASCQ_INVLD_CDB, CDB_ILLEGAL, 1);
372 case SENSE_TYPE_FORMAT_IN_PROGRESS:
373 set_sense_data(chip, lun, CUR_ERR, 0x02, 0, 0x04, 0x04, 0, 0);
376 case SENSE_TYPE_FORMAT_CMD_FAILED:
377 set_sense_data(chip, lun, CUR_ERR, 0x03, 0, 0x31, 0x01, 0, 0);
380 #ifdef SUPPORT_MAGIC_GATE
381 case SENSE_TYPE_MG_KEY_FAIL_NOT_ESTAB:
382 set_sense_data(chip, lun, CUR_ERR, 0x05, 0, 0x6F, 0x02, 0, 0);
385 case SENSE_TYPE_MG_KEY_FAIL_NOT_AUTHEN:
386 set_sense_data(chip, lun, CUR_ERR, 0x05, 0, 0x6F, 0x00, 0, 0);
389 case SENSE_TYPE_MG_INCOMPATIBLE_MEDIUM:
390 set_sense_data(chip, lun, CUR_ERR, 0x02, 0, 0x30, 0x00, 0, 0);
393 case SENSE_TYPE_MG_WRITE_ERR:
394 set_sense_data(chip, lun, CUR_ERR, 0x03, 0, 0x0C, 0x00, 0, 0);
398 case SENSE_TYPE_NO_SENSE:
400 set_sense_data(chip, lun, CUR_ERR, 0, 0, 0, 0, 0, 0);
405 void set_sense_data(struct rts51x_chip *chip, unsigned int lun, u8 err_code,
406 u8 sense_key, u32 info, u8 asc, u8 ascq, u8 sns_key_info0,
409 struct sense_data_t *sense = &(chip->sense_buffer[lun]);
411 sense->err_code = err_code;
412 sense->sense_key = sense_key;
413 sense->info[0] = (u8) (info >> 24);
414 sense->info[1] = (u8) (info >> 16);
415 sense->info[2] = (u8) (info >> 8);
416 sense->info[3] = (u8) info;
418 sense->ad_sense_len = sizeof(struct sense_data_t) - 8;
421 if (sns_key_info0 != 0) {
422 sense->sns_key_info[0] = SKSV | sns_key_info0;
423 sense->sns_key_info[1] = (sns_key_info1 & 0xf0) >> 8;
424 sense->sns_key_info[2] = sns_key_info1 & 0x0f;
428 static int test_unit_ready(struct scsi_cmnd *srb, struct rts51x_chip *chip)
430 unsigned int lun = SCSI_LUN(srb);
432 rts51x_init_cards(chip);
434 if (!check_card_ready(chip, lun)) {
435 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
436 return TRANSPORT_FAILED;
439 if (!check_lun_mc(chip, lun)) {
440 set_lun_mc(chip, lun);
441 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
442 return TRANSPORT_FAILED;
445 return TRANSPORT_GOOD;
448 unsigned char formatter_inquiry_str[20] = {
449 'M', 'E', 'M', 'O', 'R', 'Y', 'S', 'T', 'I', 'C', 'K',
450 '-', 'M', 'G', /* Byte[47:49] */
451 0x0B, /* Byte[50]: MG, MS, MSPro, MSXC */
452 0x00, /* Byte[51]: Category Specific Commands */
453 0x00, /* Byte[52]: Access Control and feature */
454 0x20, 0x20, 0x20, /* Byte[53:55] */
457 static int inquiry(struct scsi_cmnd *srb, struct rts51x_chip *chip)
459 unsigned int lun = SCSI_LUN(srb);
460 char *inquiry_default = (char *)"Generic-xD/SD/M.S. 1.00 ";
461 char *inquiry_string;
462 unsigned char sendbytes;
464 u8 card = get_lun_card(chip, lun);
465 int pro_formatter_flag = 0;
466 unsigned char inquiry_buf[] = {
467 QULIFIRE | DRCT_ACCESS_DEV,
474 REL_ADR | WBUS_32 | WBUS_16 | SYNC | LINKED | CMD_QUE | SFT_RE,
477 inquiry_string = inquiry_default;
479 buf = vmalloc(scsi_bufflen(srb));
481 TRACE_RET(chip, TRANSPORT_ERROR);
483 if (MS_FORMATTER_ENABLED(chip) && (get_lun2card(chip, lun) & MS_CARD)) {
484 if (!card || (card == MS_CARD))
485 pro_formatter_flag = 1;
488 if (pro_formatter_flag) {
489 if (scsi_bufflen(srb) < 56)
490 sendbytes = (unsigned char)(scsi_bufflen(srb));
494 if (scsi_bufflen(srb) < 36)
495 sendbytes = (unsigned char)(scsi_bufflen(srb));
501 memcpy(buf, inquiry_buf, 8);
502 memcpy(buf + 8, inquiry_string, sendbytes - 8);
503 if (pro_formatter_flag)
504 buf[4] = 0x33; /* Additional Length */
506 memcpy(buf, inquiry_buf, sendbytes);
509 if (pro_formatter_flag) {
511 memcpy(buf + 36, formatter_inquiry_str, sendbytes - 36);
514 scsi_set_resid(srb, 0);
516 rts51x_set_xfer_buf(buf, scsi_bufflen(srb), srb);
519 return TRANSPORT_GOOD;
522 static int start_stop_unit(struct scsi_cmnd *srb, struct rts51x_chip *chip)
524 unsigned int lun = SCSI_LUN(srb);
526 scsi_set_resid(srb, scsi_bufflen(srb));
528 if (srb->cmnd[1] == 1)
529 return TRANSPORT_GOOD;
531 switch (srb->cmnd[0x4]) {
534 return TRANSPORT_GOOD;
537 /* Media shall be unload */
538 if (check_card_ready(chip, lun))
539 eject_card(chip, lun);
540 return TRANSPORT_GOOD;
542 case MAKE_MEDIUM_READY:
544 if (check_card_ready(chip, lun)) {
545 return TRANSPORT_GOOD;
547 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
548 TRACE_RET(chip, TRANSPORT_FAILED);
554 TRACE_RET(chip, TRANSPORT_ERROR);
557 static int allow_medium_removal(struct scsi_cmnd *srb, struct rts51x_chip *chip)
561 prevent = srb->cmnd[4] & 0x1;
563 scsi_set_resid(srb, 0);
566 set_sense_type(chip, SCSI_LUN(srb),
567 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
568 TRACE_RET(chip, TRANSPORT_FAILED);
571 return TRANSPORT_GOOD;
574 static void ms_mode_sense(struct rts51x_chip *chip, u8 cmd,
575 int lun, u8 *buf, int buf_len)
577 struct ms_info *ms_card = &(chip->ms_card);
579 int data_size = buf_len;
580 int support_format = 0;
583 if (cmd == MODE_SENSE) {
585 if (data_size > 0x68)
587 buf[i++] = 0x67; /* Mode Data Length */
589 sys_info_offset = 12;
590 if (data_size > 0x6C)
592 buf[i++] = 0x00; /* Mode Data Length (MSB) */
593 buf[i++] = 0x6A; /* Mode Data Length (LSB) */
596 /* Medium Type Code */
597 if (check_card_ready(chip, lun)) {
598 if (CHK_MSXC(ms_card)) {
601 } else if (CHK_MSPRO(ms_card)) {
609 if (check_card_wp(chip, lun))
614 buf[i++] = 0x00; /* MediaType */
615 buf[i++] = 0x00; /* WP */
618 buf[i++] = 0x00; /* Reserved */
620 if (cmd == MODE_SENSE_10) {
621 buf[i++] = 0x00; /* Reserved */
622 buf[i++] = 0x00; /* Block descriptor length(MSB) */
623 buf[i++] = 0x00; /* Block descriptor length(LSB) */
625 /* The Following Data is the content of "Page 0x20" */
627 buf[i++] = 0x20; /* Page Code */
629 buf[i++] = 0x62; /* Page Length */
631 buf[i++] = 0x00; /* No Access Control */
632 if (data_size >= 12) {
634 buf[i++] = 0xC0; /* SF, SGM */
639 /* The Following Data is the content of "Page 0x20" */
641 buf[i++] = 0x20; /* Page Code */
643 buf[i++] = 0x62; /* Page Length */
645 buf[i++] = 0x00; /* No Access Control */
646 if (data_size >= 8) {
648 buf[i++] = 0xC0; /* SF, SGM */
654 if (data_size > sys_info_offset) {
655 /* 96 Bytes Attribute Data */
656 int len = data_size - sys_info_offset;
657 len = (len < 96) ? len : 96;
659 memcpy(buf + sys_info_offset, ms_card->raw_sys_info, len);
663 static int mode_sense(struct scsi_cmnd *srb, struct rts51x_chip *chip)
665 unsigned int lun = SCSI_LUN(srb);
666 unsigned int dataSize;
668 int pro_formatter_flag;
669 unsigned char pageCode, *buf;
670 u8 card = get_lun_card(chip, lun);
672 if (!check_card_ready(chip, lun)) {
673 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
674 scsi_set_resid(srb, scsi_bufflen(srb));
675 TRACE_RET(chip, TRANSPORT_FAILED);
678 pro_formatter_flag = 0;
680 /* In Combo mode, device responses ModeSense command as a MS LUN
681 * when no card is inserted */
682 if ((get_lun2card(chip, lun) & MS_CARD)) {
683 if (!card || (card == MS_CARD)) {
685 if (chip->option.mspro_formatter_enable)
686 pro_formatter_flag = 1;
690 buf = kmalloc(dataSize, GFP_KERNEL);
692 TRACE_RET(chip, TRANSPORT_ERROR);
694 pageCode = srb->cmnd[2] & 0x3f;
696 if ((pageCode == 0x3F) || (pageCode == 0x1C) ||
697 (pageCode == 0x00) || (pro_formatter_flag && (pageCode == 0x20))) {
698 if (srb->cmnd[0] == MODE_SENSE) {
699 if ((pageCode == 0x3F) || (pageCode == 0x20)) {
700 ms_mode_sense(chip, srb->cmnd[0], lun, buf,
706 if (check_card_wp(chip, lun))
712 if ((pageCode == 0x3F) || (pageCode == 0x20)) {
713 ms_mode_sense(chip, srb->cmnd[0], lun, buf,
720 if (check_card_wp(chip, lun))
730 status = TRANSPORT_GOOD;
732 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
733 scsi_set_resid(srb, scsi_bufflen(srb));
734 status = TRANSPORT_FAILED;
737 if (status == TRANSPORT_GOOD) {
738 unsigned int len = min(scsi_bufflen(srb), dataSize);
739 rts51x_set_xfer_buf(buf, len, srb);
740 scsi_set_resid(srb, scsi_bufflen(srb) - len);
747 static int request_sense(struct scsi_cmnd *srb, struct rts51x_chip *chip)
749 struct sense_data_t *sense;
750 unsigned int lun = SCSI_LUN(srb);
751 struct ms_info *ms_card = &(chip->ms_card);
752 unsigned char *tmp, *buf;
754 sense = &(chip->sense_buffer[lun]);
756 if ((get_lun_card(chip, lun) == MS_CARD)
757 && PRO_UNDER_FORMATTING(ms_card)) {
758 mspro_format_sense(chip, lun);
761 buf = vmalloc(scsi_bufflen(srb));
763 TRACE_RET(chip, TRANSPORT_ERROR);
765 tmp = (unsigned char *)sense;
766 memcpy(buf, tmp, scsi_bufflen(srb));
768 rts51x_set_xfer_buf(buf, scsi_bufflen(srb), srb);
771 scsi_set_resid(srb, 0);
772 /* Reset Sense Data */
773 set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
774 return TRANSPORT_GOOD;
777 static int read_write(struct scsi_cmnd *srb, struct rts51x_chip *chip)
779 unsigned int lun = SCSI_LUN(srb);
784 if (!check_card_ready(chip, lun) || (chip->capacity[lun] == 0)) {
785 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
786 TRACE_RET(chip, TRANSPORT_FAILED);
789 if (!check_lun_mc(chip, lun)) {
790 set_lun_mc(chip, lun);
791 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
792 return TRANSPORT_FAILED;
795 rts51x_prepare_run(chip);
796 RTS51X_SET_STAT(chip, STAT_RUN);
798 if ((srb->cmnd[0] == READ_10) || (srb->cmnd[0] == WRITE_10)) {
800 ((u32) srb->cmnd[2] << 24) |
801 ((u32) srb->cmnd[3] << 16) |
802 ((u32) srb->cmnd[4] << 8) |
803 ((u32) srb->cmnd[5]);
804 sec_cnt = ((u16) (srb->cmnd[7]) << 8) | srb->cmnd[8];
805 } else if ((srb->cmnd[0] == READ_6) || (srb->cmnd[0] == WRITE_6)) {
806 start_sec = ((u32) (srb->cmnd[1] & 0x1F) << 16) |
807 ((u32) srb->cmnd[2] << 8) | ((u32) srb->cmnd[3]);
808 sec_cnt = srb->cmnd[4];
809 } else if ((srb->cmnd[0] == VENDOR_CMND) &&
810 (srb->cmnd[1] == SCSI_APP_CMD) &&
811 ((srb->cmnd[2] == PP_READ10) ||
812 (srb->cmnd[2] == PP_WRITE10))) {
813 start_sec = ((u32) srb->cmnd[4] << 24) |
814 ((u32) srb->cmnd[5] << 16) |
815 ((u32) srb->cmnd[6] << 8) |
816 ((u32) srb->cmnd[7]);
817 sec_cnt = ((u16) (srb->cmnd[9]) << 8) | srb->cmnd[10];
819 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
820 TRACE_RET(chip, TRANSPORT_FAILED);
823 if ((start_sec > chip->capacity[lun]) ||
824 ((start_sec + sec_cnt) > chip->capacity[lun])) {
825 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LBA_OVER_RANGE);
826 TRACE_RET(chip, TRANSPORT_FAILED);
830 scsi_set_resid(srb, 0);
831 return TRANSPORT_GOOD;
834 if ((srb->sc_data_direction == DMA_TO_DEVICE)
835 && check_card_wp(chip, lun)) {
836 RTS51X_DEBUGP("Write protected card!\n");
837 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_PROTECT);
838 TRACE_RET(chip, TRANSPORT_FAILED);
841 retval = card_rw(srb, chip, start_sec, sec_cnt);
842 if (retval != STATUS_SUCCESS) {
843 if (srb->sc_data_direction == DMA_FROM_DEVICE) {
844 set_sense_type(chip, lun,
845 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
847 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_ERR);
849 TRACE_RET(chip, TRANSPORT_FAILED);
852 scsi_set_resid(srb, 0);
854 return TRANSPORT_GOOD;
857 static int read_format_capacity(struct scsi_cmnd *srb, struct rts51x_chip *chip)
860 unsigned int lun = SCSI_LUN(srb);
861 unsigned int buf_len;
862 u8 card = get_lun_card(chip, lun);
866 if (!check_card_ready(chip, lun)) {
867 if (!chip->option.mspro_formatter_enable) {
868 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
869 TRACE_RET(chip, TRANSPORT_FAILED);
873 buf_len = (scsi_bufflen(srb) > 12) ? 0x14 : 12;
875 buf = kmalloc(buf_len, GFP_KERNEL);
877 TRACE_RET(chip, TRANSPORT_ERROR);
883 /* Capacity List Length */
884 if ((buf_len > 12) && chip->option.mspro_formatter_enable &&
885 (chip->lun2card[lun] & MS_CARD) && (!card || (card == MS_CARD))) {
894 if (check_card_ready(chip, lun)) {
895 buf[i++] = (unsigned char)((chip->capacity[lun]) >> 24);
896 buf[i++] = (unsigned char)((chip->capacity[lun]) >> 16);
897 buf[i++] = (unsigned char)((chip->capacity[lun]) >> 8);
898 buf[i++] = (unsigned char)(chip->capacity[lun]);
901 /* Byte[8]: Descriptor Type: Formatted medium */
904 buf[i++] = 0; /* Byte[16] */
912 /* Byte[8]: Descriptor Type: No medium */
915 buf[i++] = 0; /*Byte[16] */
925 buf_len = min(scsi_bufflen(srb), buf_len);
926 rts51x_set_xfer_buf(buf, buf_len, srb);
929 scsi_set_resid(srb, scsi_bufflen(srb) - buf_len);
931 return TRANSPORT_GOOD;
934 static int read_capacity(struct scsi_cmnd *srb, struct rts51x_chip *chip)
937 unsigned int lun = SCSI_LUN(srb);
939 if (!check_card_ready(chip, lun)) {
940 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
941 TRACE_RET(chip, TRANSPORT_FAILED);
944 if (!check_lun_mc(chip, lun)) {
945 set_lun_mc(chip, lun);
946 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
947 return TRANSPORT_FAILED;
950 buf = kmalloc(8, GFP_KERNEL);
952 TRACE_RET(chip, TRANSPORT_ERROR);
954 buf[0] = (unsigned char)((chip->capacity[lun] - 1) >> 24);
955 buf[1] = (unsigned char)((chip->capacity[lun] - 1) >> 16);
956 buf[2] = (unsigned char)((chip->capacity[lun] - 1) >> 8);
957 buf[3] = (unsigned char)(chip->capacity[lun] - 1);
964 rts51x_set_xfer_buf(buf, scsi_bufflen(srb), srb);
967 scsi_set_resid(srb, 0);
969 return TRANSPORT_GOOD;
972 static int get_dev_status(struct scsi_cmnd *srb, struct rts51x_chip *chip)
974 unsigned int lun = SCSI_LUN(srb);
975 unsigned int buf_len;
976 u8 status[32] = { 0 };
978 rts51x_pp_status(chip, lun, status, 32);
980 buf_len = min(scsi_bufflen(srb), (unsigned int)sizeof(status));
981 rts51x_set_xfer_buf(status, buf_len, srb);
982 scsi_set_resid(srb, scsi_bufflen(srb) - buf_len);
984 return TRANSPORT_GOOD;
987 static int read_status(struct scsi_cmnd *srb, struct rts51x_chip *chip)
989 u8 rts51x_status[16];
990 unsigned int buf_len;
991 unsigned int lun = SCSI_LUN(srb);
993 rts51x_read_status(chip, lun, rts51x_status, 16);
995 buf_len = min(scsi_bufflen(srb), (unsigned int)sizeof(rts51x_status));
996 rts51x_set_xfer_buf(rts51x_status, buf_len, srb);
997 scsi_set_resid(srb, scsi_bufflen(srb) - buf_len);
999 return TRANSPORT_GOOD;
1002 static int read_mem(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1004 unsigned int lun = SCSI_LUN(srb);
1005 unsigned short addr, len, i;
1009 rts51x_prepare_run(chip);
1010 RTS51X_SET_STAT(chip, STAT_RUN);
1012 addr = ((u16) srb->cmnd[2] << 8) | srb->cmnd[3];
1013 len = ((u16) srb->cmnd[4] << 8) | srb->cmnd[5];
1015 if (addr < 0xe000) {
1016 RTS51X_DEBUGP("filter!addr=0x%x\n", addr);
1017 return TRANSPORT_GOOD;
1022 TRACE_RET(chip, TRANSPORT_ERROR);
1024 for (i = 0; i < len; i++) {
1025 retval = rts51x_ep0_read_register(chip, addr + i, buf + i);
1026 if (retval != STATUS_SUCCESS) {
1028 set_sense_type(chip, lun,
1029 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1030 TRACE_RET(chip, TRANSPORT_FAILED);
1034 len = (unsigned short)min(scsi_bufflen(srb), (unsigned int)len);
1035 rts51x_set_xfer_buf(buf, len, srb);
1036 scsi_set_resid(srb, scsi_bufflen(srb) - len);
1040 return TRANSPORT_GOOD;
1043 static int write_mem(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1045 unsigned int lun = SCSI_LUN(srb);
1046 unsigned short addr, len, i;
1050 rts51x_prepare_run(chip);
1051 RTS51X_SET_STAT(chip, STAT_RUN);
1053 addr = ((u16) srb->cmnd[2] << 8) | srb->cmnd[3];
1054 len = ((u16) srb->cmnd[4] << 8) | srb->cmnd[5];
1056 if (addr < 0xe000) {
1057 RTS51X_DEBUGP("filter!addr=0x%x\n", addr);
1058 return TRANSPORT_GOOD;
1061 len = (unsigned short)min(scsi_bufflen(srb), (unsigned int)len);
1064 TRACE_RET(chip, TRANSPORT_ERROR);
1066 rts51x_get_xfer_buf(buf, len, srb);
1068 for (i = 0; i < len; i++) {
1070 rts51x_ep0_write_register(chip, addr + i, 0xFF, buf[i]);
1071 if (retval != STATUS_SUCCESS) {
1073 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_ERR);
1074 TRACE_RET(chip, TRANSPORT_FAILED);
1079 scsi_set_resid(srb, scsi_bufflen(srb) - len);
1081 return TRANSPORT_GOOD;
1084 static int get_sd_csd(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1086 struct sd_info *sd_card = &(chip->sd_card);
1087 unsigned int lun = SCSI_LUN(srb);
1089 if (!check_card_ready(chip, lun)) {
1090 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
1091 TRACE_RET(chip, TRANSPORT_FAILED);
1094 if (get_lun_card(chip, lun) != SD_CARD) {
1095 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1096 TRACE_RET(chip, TRANSPORT_FAILED);
1099 scsi_set_resid(srb, 0);
1100 rts51x_set_xfer_buf(sd_card->raw_csd, scsi_bufflen(srb), srb);
1102 return TRANSPORT_GOOD;
1105 static int read_phy_register(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1111 rts51x_prepare_run(chip);
1112 RTS51X_SET_STAT(chip, STAT_RUN);
1114 addr = srb->cmnd[5];
1120 TRACE_RET(chip, TRANSPORT_ERROR);
1122 for (i = 0; i < len; i++) {
1124 rts51x_read_phy_register(chip, addr + i, buf + i);
1125 if (retval != STATUS_SUCCESS) {
1127 set_sense_type(chip, SCSI_LUN(srb),
1128 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1129 TRACE_RET(chip, TRANSPORT_FAILED);
1133 len = min(scsi_bufflen(srb), (unsigned int)len);
1134 rts51x_set_xfer_buf(buf, len, srb);
1135 scsi_set_resid(srb, scsi_bufflen(srb) - len);
1140 return TRANSPORT_GOOD;
1143 static int write_phy_register(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1149 rts51x_prepare_run(chip);
1150 RTS51X_SET_STAT(chip, STAT_RUN);
1152 addr = srb->cmnd[5];
1156 len = min(scsi_bufflen(srb), (unsigned int)len);
1160 TRACE_RET(chip, TRANSPORT_ERROR);
1162 rts51x_get_xfer_buf(buf, len, srb);
1163 scsi_set_resid(srb, scsi_bufflen(srb) - len);
1165 for (i = 0; i < len; i++) {
1167 rts51x_write_phy_register(chip, addr + i, buf[i]);
1168 if (retval != STATUS_SUCCESS) {
1170 set_sense_type(chip, SCSI_LUN(srb),
1171 SENSE_TYPE_MEDIA_WRITE_ERR);
1172 TRACE_RET(chip, TRANSPORT_FAILED);
1179 return TRANSPORT_GOOD;
1182 static int get_card_bus_width(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1184 unsigned int lun = SCSI_LUN(srb);
1187 if (!check_card_ready(chip, lun)) {
1188 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
1189 TRACE_RET(chip, TRANSPORT_FAILED);
1192 card = get_lun_card(chip, lun);
1193 if ((card == SD_CARD) || (card == MS_CARD)) {
1194 bus_width = chip->card_bus_width[lun];
1196 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1197 TRACE_RET(chip, TRANSPORT_FAILED);
1200 scsi_set_resid(srb, 0);
1201 rts51x_set_xfer_buf(&bus_width, scsi_bufflen(srb), srb);
1203 return TRANSPORT_GOOD;
1207 static int trace_msg_cmd(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1209 unsigned char *buf = NULL;
1211 unsigned int buf_len;
1215 ((2 + MSG_FUNC_LEN + MSG_FILE_LEN + TIME_VAL_LEN) * TRACE_ITEM_CNT);
1217 if ((scsi_bufflen(srb) < buf_len) || (scsi_sglist(srb) == NULL)) {
1218 set_sense_type(chip, SCSI_LUN(srb),
1219 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1220 TRACE_RET(chip, TRANSPORT_FAILED);
1223 clear = srb->cmnd[2];
1225 buf = vmalloc(scsi_bufflen(srb));
1227 TRACE_RET(chip, TRANSPORT_ERROR);
1229 rts51x_trace_msg(chip, buf, clear);
1231 rts51x_set_xfer_buf(buf, scsi_bufflen(srb), srb);
1234 scsi_set_resid(srb, 0);
1235 return TRANSPORT_GOOD;
1239 static int rw_mem_cmd_buf(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1241 int retval = STATUS_SUCCESS;
1242 unsigned int lun = SCSI_LUN(srb);
1243 u8 cmd_type, mask, value, idx, mode, len;
1247 rts51x_prepare_run(chip);
1248 RTS51X_SET_STAT(chip, STAT_RUN);
1250 switch (srb->cmnd[3]) {
1252 rts51x_init_cmd(chip);
1256 cmd_type = srb->cmnd[4];
1258 set_sense_type(chip, lun,
1259 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1260 TRACE_RET(chip, TRANSPORT_FAILED);
1262 addr = (srb->cmnd[5] << 8) | srb->cmnd[6];
1263 mask = srb->cmnd[7];
1264 value = srb->cmnd[8];
1265 rts51x_add_cmd(chip, cmd_type, addr, mask, value);
1269 mode = srb->cmnd[4];
1272 ((u32) srb->cmnd[6] << 24) | ((u32) srb->
1273 cmnd[7] << 16) | ((u32) srb->
1279 retval = rts51x_send_cmd(chip, mode, 1000);
1280 if (retval != STATUS_SUCCESS) {
1281 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_ERR);
1282 TRACE_RET(chip, TRANSPORT_FAILED);
1284 if (mode & STAGE_R) {
1285 retval = rts51x_get_rsp(chip, len, timeout);
1286 if (retval != STATUS_SUCCESS) {
1287 set_sense_type(chip, lun,
1288 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1289 TRACE_RET(chip, TRANSPORT_FAILED);
1296 value = chip->rsp_buf[idx];
1297 if (scsi_bufflen(srb) < 1) {
1298 set_sense_type(chip, lun,
1299 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1300 TRACE_RET(chip, TRANSPORT_FAILED);
1302 rts51x_set_xfer_buf(&value, 1, srb);
1303 scsi_set_resid(srb, 0);
1307 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1308 TRACE_RET(chip, TRANSPORT_FAILED);
1311 if (retval != STATUS_SUCCESS) {
1312 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_ERR);
1313 TRACE_RET(chip, TRANSPORT_FAILED);
1316 return TRANSPORT_GOOD;
1319 static int suit_cmd(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1323 switch (srb->cmnd[3]) {
1328 result = rw_mem_cmd_buf(srb, chip);
1331 result = TRANSPORT_ERROR;
1337 static int app_cmd(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1341 switch (srb->cmnd[2]) {
1344 result = read_write(srb, chip);
1348 result = suit_cmd(srb, chip);
1352 result = read_phy_register(srb, chip);
1356 result = write_phy_register(srb, chip);
1359 case GET_DEV_STATUS:
1360 result = get_dev_status(srb, chip);
1364 set_sense_type(chip, SCSI_LUN(srb),
1365 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1366 TRACE_RET(chip, TRANSPORT_FAILED);
1372 static int vendor_cmnd(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1374 int result = TRANSPORT_GOOD;
1376 switch (srb->cmnd[1]) {
1378 result = read_status(srb, chip);
1382 result = read_mem(srb, chip);
1386 result = write_mem(srb, chip);
1390 result = get_card_bus_width(srb, chip);
1394 result = get_sd_csd(srb, chip);
1399 result = trace_msg_cmd(srb, chip);
1404 result = app_cmd(srb, chip);
1408 set_sense_type(chip, SCSI_LUN(srb),
1409 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1410 TRACE_RET(chip, TRANSPORT_FAILED);
1416 static int ms_format_cmnd(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1418 struct ms_info *ms_card = &(chip->ms_card);
1419 unsigned int lun = SCSI_LUN(srb);
1420 int retval, quick_format;
1422 if (get_lun_card(chip, lun) != MS_CARD) {
1423 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
1424 TRACE_RET(chip, TRANSPORT_FAILED);
1427 if ((srb->cmnd[3] != 0x4D) || (srb->cmnd[4] != 0x47)
1428 || (srb->cmnd[5] != 0x66) || (srb->cmnd[6] != 0x6D)
1429 || (srb->cmnd[7] != 0x74)) {
1430 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1431 TRACE_RET(chip, TRANSPORT_FAILED);
1434 if (srb->cmnd[8] & 0x01)
1439 if (!(chip->card_ready & MS_CARD)) {
1440 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
1441 TRACE_RET(chip, TRANSPORT_FAILED);
1444 if (chip->card_wp & MS_CARD) {
1445 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_PROTECT);
1446 TRACE_RET(chip, TRANSPORT_FAILED);
1449 if (!CHK_MSPRO(ms_card)) {
1450 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
1451 TRACE_RET(chip, TRANSPORT_FAILED);
1454 rts51x_prepare_run(chip);
1455 RTS51X_SET_STAT(chip, STAT_RUN);
1457 retval = mspro_format(srb, chip, MS_SHORT_DATA_LEN, quick_format);
1458 if (retval != STATUS_SUCCESS) {
1459 set_sense_type(chip, lun, SENSE_TYPE_FORMAT_CMD_FAILED);
1460 TRACE_RET(chip, TRANSPORT_FAILED);
1463 scsi_set_resid(srb, 0);
1464 return TRANSPORT_GOOD;
1467 #ifdef SUPPORT_PCGL_1P18
1468 int get_ms_information(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1470 struct ms_info *ms_card = &(chip->ms_card);
1471 unsigned int lun = SCSI_LUN(srb);
1472 u8 dev_info_id, data_len;
1474 unsigned int buf_len;
1477 if (!check_card_ready(chip, lun)) {
1478 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
1479 TRACE_RET(chip, TRANSPORT_FAILED);
1481 if ((get_lun_card(chip, lun) != MS_CARD)) {
1482 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
1483 TRACE_RET(chip, TRANSPORT_FAILED);
1486 if ((srb->cmnd[2] != 0xB0) || (srb->cmnd[4] != 0x4D) ||
1487 (srb->cmnd[5] != 0x53) || (srb->cmnd[6] != 0x49) ||
1488 (srb->cmnd[7] != 0x44)) {
1489 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1490 TRACE_RET(chip, TRANSPORT_FAILED);
1493 dev_info_id = srb->cmnd[3];
1494 if ((CHK_MSXC(ms_card) && (dev_info_id == 0x10)) ||
1495 (!CHK_MSXC(ms_card) && (dev_info_id == 0x13)) ||
1496 !CHK_MSPRO(ms_card)) {
1497 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1498 TRACE_RET(chip, TRANSPORT_FAILED);
1501 if (dev_info_id == 0x15)
1502 buf_len = data_len = 0x3A;
1504 buf_len = data_len = 0x6A;
1506 buf = kmalloc(buf_len, GFP_KERNEL);
1508 TRACE_RET(chip, TRANSPORT_ERROR);
1511 /* GET Memory Stick Media Information Response Header */
1512 buf[i++] = 0x00; /* Data length MSB */
1513 buf[i++] = data_len; /* Data length LSB */
1514 /* Device Information Type Code */
1515 if (CHK_MSXC(ms_card))
1525 /* Number of Device Information */
1528 /* Device Information Body
1529 * Device Information ID Number */
1530 buf[i++] = dev_info_id;
1531 /* Device Information Length */
1532 if (dev_info_id == 0x15)
1536 buf[i++] = 0x00; /* Data length MSB */
1537 buf[i++] = data_len; /* Data length LSB */
1540 if ((dev_info_id == 0x10) || (dev_info_id == 0x13)) {
1541 /* System Information */
1542 memcpy(buf + i, ms_card->raw_sys_info, 96);
1545 memcpy(buf + i, ms_card->raw_model_name, 48);
1548 rts51x_set_xfer_buf(buf, buf_len, srb);
1550 if (dev_info_id == 0x15)
1551 scsi_set_resid(srb, scsi_bufflen(srb) - 0x3C);
1553 scsi_set_resid(srb, scsi_bufflen(srb) - 0x6C);
1556 return STATUS_SUCCESS;
1560 static int ms_sp_cmnd(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1562 int retval = TRANSPORT_ERROR;
1564 if (srb->cmnd[2] == MS_FORMAT)
1565 retval = ms_format_cmnd(srb, chip);
1566 #ifdef SUPPORT_PCGL_1P18
1567 else if (srb->cmnd[2] == GET_MS_INFORMATION)
1568 retval = get_ms_information(srb, chip);
1575 static int sd_extention_cmnd(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1577 unsigned int lun = SCSI_LUN(srb);
1580 rts51x_prepare_run(chip);
1581 RTS51X_SET_STAT(chip, STAT_RUN);
1583 sd_cleanup_work(chip);
1585 if (!check_card_ready(chip, lun)) {
1586 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
1587 TRACE_RET(chip, TRANSPORT_FAILED);
1589 if ((get_lun_card(chip, lun) != SD_CARD)) {
1590 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
1591 TRACE_RET(chip, TRANSPORT_FAILED);
1594 switch (srb->cmnd[0]) {
1595 case SD_PASS_THRU_MODE:
1596 result = sd_pass_thru_mode(srb, chip);
1599 case SD_EXECUTE_NO_DATA:
1600 result = sd_execute_no_data(srb, chip);
1603 case SD_EXECUTE_READ:
1604 result = sd_execute_read_data(srb, chip);
1607 case SD_EXECUTE_WRITE:
1608 result = sd_execute_write_data(srb, chip);
1612 result = sd_get_cmd_rsp(srb, chip);
1616 result = sd_hw_rst(srb, chip);
1620 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1621 TRACE_RET(chip, TRANSPORT_FAILED);
1628 #ifdef SUPPORT_MAGIC_GATE
1629 int mg_report_key(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1631 struct ms_info *ms_card = &(chip->ms_card);
1632 unsigned int lun = SCSI_LUN(srb);
1636 rts51x_prepare_run(chip);
1637 RTS51X_SET_STAT(chip, STAT_RUN);
1639 ms_cleanup_work(chip);
1641 if (!check_card_ready(chip, lun)) {
1642 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
1643 TRACE_RET(chip, TRANSPORT_FAILED);
1645 if ((get_lun_card(chip, lun) != MS_CARD)) {
1646 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
1647 TRACE_RET(chip, TRANSPORT_FAILED);
1650 if (srb->cmnd[7] != KC_MG_R_PRO) {
1651 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1652 TRACE_RET(chip, TRANSPORT_FAILED);
1655 if (!CHK_MSPRO(ms_card)) {
1656 set_sense_type(chip, lun, SENSE_TYPE_MG_INCOMPATIBLE_MEDIUM);
1657 TRACE_RET(chip, TRANSPORT_FAILED);
1660 key_format = srb->cmnd[10] & 0x3F;
1662 switch (key_format) {
1663 case KF_GET_LOC_EKB:
1664 if ((scsi_bufflen(srb) == 0x41C) &&
1665 (srb->cmnd[8] == 0x04) && (srb->cmnd[9] == 0x1C)) {
1666 retval = mg_get_local_EKB(srb, chip);
1667 if (retval != STATUS_SUCCESS)
1668 TRACE_RET(chip, TRANSPORT_FAILED);
1670 set_sense_type(chip, lun,
1671 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1672 TRACE_RET(chip, TRANSPORT_FAILED);
1677 if ((scsi_bufflen(srb) == 0x24) &&
1678 (srb->cmnd[8] == 0x00) && (srb->cmnd[9] == 0x24)) {
1679 retval = mg_get_rsp_chg(srb, chip);
1680 if (retval != STATUS_SUCCESS)
1681 TRACE_RET(chip, TRANSPORT_FAILED);
1683 set_sense_type(chip, lun,
1684 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1685 TRACE_RET(chip, TRANSPORT_FAILED);
1690 ms_card->mg_entry_num = srb->cmnd[5];
1691 if ((scsi_bufflen(srb) == 0x404) &&
1692 (srb->cmnd[8] == 0x04) &&
1693 (srb->cmnd[9] == 0x04) &&
1694 (srb->cmnd[2] == 0x00) &&
1695 (srb->cmnd[3] == 0x00) &&
1696 (srb->cmnd[4] == 0x00) && (srb->cmnd[5] < 32)) {
1697 retval = mg_get_ICV(srb, chip);
1698 if (retval != STATUS_SUCCESS)
1699 TRACE_RET(chip, TRANSPORT_FAILED);
1701 set_sense_type(chip, lun,
1702 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1703 TRACE_RET(chip, TRANSPORT_FAILED);
1708 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1709 TRACE_RET(chip, TRANSPORT_FAILED);
1712 scsi_set_resid(srb, 0);
1713 return TRANSPORT_GOOD;
1716 int mg_send_key(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1718 struct ms_info *ms_card = &(chip->ms_card);
1719 unsigned int lun = SCSI_LUN(srb);
1723 rts51x_prepare_run(chip);
1724 RTS51X_SET_STAT(chip, STAT_RUN);
1726 ms_cleanup_work(chip);
1728 if (!check_card_ready(chip, lun)) {
1729 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
1730 TRACE_RET(chip, TRANSPORT_FAILED);
1732 if (check_card_wp(chip, lun)) {
1733 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_PROTECT);
1734 TRACE_RET(chip, TRANSPORT_FAILED);
1736 if ((get_lun_card(chip, lun) != MS_CARD)) {
1737 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
1738 TRACE_RET(chip, TRANSPORT_FAILED);
1741 if (srb->cmnd[7] != KC_MG_R_PRO) {
1742 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1743 TRACE_RET(chip, TRANSPORT_FAILED);
1746 if (!CHK_MSPRO(ms_card)) {
1747 set_sense_type(chip, lun, SENSE_TYPE_MG_INCOMPATIBLE_MEDIUM);
1748 TRACE_RET(chip, TRANSPORT_FAILED);
1751 key_format = srb->cmnd[10] & 0x3F;
1753 switch (key_format) {
1754 case KF_SET_LEAF_ID:
1755 if ((scsi_bufflen(srb) == 0x0C) &&
1756 (srb->cmnd[8] == 0x00) && (srb->cmnd[9] == 0x0C)) {
1757 retval = mg_set_leaf_id(srb, chip);
1758 if (retval != STATUS_SUCCESS)
1759 TRACE_RET(chip, TRANSPORT_FAILED);
1761 set_sense_type(chip, lun,
1762 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1763 TRACE_RET(chip, TRANSPORT_FAILED);
1768 if ((scsi_bufflen(srb) == 0x0C) &&
1769 (srb->cmnd[8] == 0x00) && (srb->cmnd[9] == 0x0C)) {
1770 retval = mg_chg(srb, chip);
1771 if (retval != STATUS_SUCCESS)
1772 TRACE_RET(chip, TRANSPORT_FAILED);
1774 set_sense_type(chip, lun,
1775 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1776 TRACE_RET(chip, TRANSPORT_FAILED);
1781 if ((scsi_bufflen(srb) == 0x0C) &&
1782 (srb->cmnd[8] == 0x00) && (srb->cmnd[9] == 0x0C)) {
1783 retval = mg_rsp(srb, chip);
1784 if (retval != STATUS_SUCCESS)
1785 TRACE_RET(chip, TRANSPORT_FAILED);
1787 set_sense_type(chip, lun,
1788 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1789 TRACE_RET(chip, TRANSPORT_FAILED);
1794 ms_card->mg_entry_num = srb->cmnd[5];
1795 if ((scsi_bufflen(srb) == 0x404) &&
1796 (srb->cmnd[8] == 0x04) &&
1797 (srb->cmnd[9] == 0x04) &&
1798 (srb->cmnd[2] == 0x00) &&
1799 (srb->cmnd[3] == 0x00) &&
1800 (srb->cmnd[4] == 0x00) && (srb->cmnd[5] < 32)) {
1801 retval = mg_set_ICV(srb, chip);
1802 if (retval != STATUS_SUCCESS)
1803 TRACE_RET(chip, TRANSPORT_FAILED);
1805 set_sense_type(chip, lun,
1806 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1807 TRACE_RET(chip, TRANSPORT_FAILED);
1812 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1813 TRACE_RET(chip, TRANSPORT_FAILED);
1816 scsi_set_resid(srb, 0);
1817 return TRANSPORT_GOOD;
1821 int rts51x_scsi_handler(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1823 struct ms_info *ms_card = &(chip->ms_card);
1824 unsigned int lun = SCSI_LUN(srb);
1825 int result = TRANSPORT_GOOD;
1827 if ((get_lun_card(chip, lun) == MS_CARD) &&
1828 (ms_card->format_status == FORMAT_IN_PROGRESS)) {
1829 if ((srb->cmnd[0] != REQUEST_SENSE)
1830 && (srb->cmnd[0] != INQUIRY)) {
1831 /* Logical Unit Not Ready Format in Progress */
1832 set_sense_data(chip, lun, CUR_ERR, 0x02, 0, 0x04, 0x04,
1833 0, (u16) (ms_card->progress));
1834 TRACE_RET(chip, TRANSPORT_FAILED);
1838 switch (srb->cmnd[0]) {
1843 result = read_write(srb, chip);
1846 case TEST_UNIT_READY:
1847 result = test_unit_ready(srb, chip);
1851 result = inquiry(srb, chip);
1855 result = read_capacity(srb, chip);
1859 result = start_stop_unit(srb, chip);
1862 case ALLOW_MEDIUM_REMOVAL:
1863 result = allow_medium_removal(srb, chip);
1867 result = request_sense(srb, chip);
1872 result = mode_sense(srb, chip);
1876 result = read_format_capacity(srb, chip);
1880 result = vendor_cmnd(srb, chip);
1884 result = ms_sp_cmnd(srb, chip);
1888 case SD_PASS_THRU_MODE:
1889 case SD_EXECUTE_NO_DATA:
1890 case SD_EXECUTE_READ:
1891 case SD_EXECUTE_WRITE:
1894 result = sd_extention_cmnd(srb, chip);
1898 #ifdef SUPPORT_MAGIC_GATE
1899 case CMD_MSPRO_MG_RKEY:
1900 result = mg_report_key(srb, chip);
1903 case CMD_MSPRO_MG_SKEY:
1904 result = mg_send_key(srb, chip);
1911 result = TRANSPORT_GOOD;
1915 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1916 result = TRANSPORT_FAILED;
1922 /***********************************************************************
1924 ***********************************************************************/
1926 const char *host_info(struct Scsi_Host *host)
1928 return "SCSI emulation for RTS51xx USB driver-based card reader";
1931 int slave_alloc(struct scsi_device *sdev)
1934 * Set the INQUIRY transfer length to 36. We don't use any of
1935 * the extra data and many devices choke if asked for more or
1936 * less than 36 bytes.
1938 sdev->inquiry_len = 36;
1942 int slave_configure(struct scsi_device *sdev)
1944 /* Scatter-gather buffers (all but the last) must have a length
1945 * divisible by the bulk maxpacket size. Otherwise a data packet
1946 * would end up being short, causing a premature end to the data
1947 * transfer. Since high-speed bulk pipes have a maxpacket size
1948 * of 512, we'll use that as the scsi device queue's DMA alignment
1949 * mask. Guaranteeing proper alignment of the first buffer will
1950 * have the desired effect because, except at the beginning and
1951 * the end, scatter-gather buffers follow page boundaries. */
1952 blk_queue_dma_alignment(sdev->request_queue, (512 - 1));
1954 /* Set the SCSI level to at least 2. We'll leave it at 3 if that's
1955 * what is originally reported. We need this to avoid confusing
1956 * the SCSI layer with devices that report 0 or 1, but need 10-byte
1957 * commands (ala ATAPI devices behind certain bridges, or devices
1958 * which simply have broken INQUIRY data).
1960 * NOTE: This means /dev/sg programs (ala cdrecord) will get the
1961 * actual information. This seems to be the preference for
1962 * programs like that.
1964 * NOTE: This also means that /proc/scsi/scsi and sysfs may report
1965 * the actual value or the modified one, depending on where the
1968 if (sdev->scsi_level < SCSI_2)
1969 sdev->scsi_level = sdev->sdev_target->scsi_level = SCSI_2;
1974 /***********************************************************************
1975 * /proc/scsi/ functions
1976 ***********************************************************************/
1978 /* we use this macro to help us write into the buffer */
1980 #define SPRINTF(args...) \
1981 do { if (pos < buffer+length) pos += sprintf(pos, ## args); } while (0)
1983 int proc_info(struct Scsi_Host *host, char *buffer,
1984 char **start, off_t offset, int length, int inout)
1988 /* if someone is sending us data, just throw it away */
1992 /* print the controller name */
1993 SPRINTF(" Host scsi%d: %s\n", host->host_no, RTS51X_NAME);
1995 /* print product, vendor, and driver version strings */
1996 SPRINTF(" Vendor: Realtek Corp.\n");
1997 SPRINTF(" Product: RTS51xx USB Card Reader\n");
1998 SPRINTF(" Version: %s\n", DRIVER_VERSION);
1999 SPRINTF(" Build: %s\n", __TIME__);
2002 * Calculate start of next buffer, and return value.
2004 *start = buffer + offset;
2006 if ((pos - buffer) < offset)
2008 else if ((pos - buffer - offset) < length)
2009 return pos - buffer - offset;
2014 /* queue a command */
2015 /* This is always called with scsi_lock(host) held */
2016 int queuecommand_lck(struct scsi_cmnd *srb, void (*done) (struct scsi_cmnd *))
2018 struct rts51x_chip *chip = host_to_rts51x(srb->device->host);
2020 /* check for state-transition errors */
2021 if (chip->srb != NULL) {
2022 RTS51X_DEBUGP("Error in %s: chip->srb = %p\n",
2023 __func__, chip->srb);
2024 return SCSI_MLQUEUE_HOST_BUSY;
2027 /* fail the command if we are disconnecting */
2028 if (test_bit(FLIDX_DISCONNECTING, &chip->usb->dflags)) {
2029 RTS51X_DEBUGP("Fail command during disconnect\n");
2030 srb->result = DID_NO_CONNECT << 16;
2035 /* enqueue the command and wake up the control thread */
2036 srb->scsi_done = done;
2038 complete(&chip->usb->cmnd_ready);
2043 DEF_SCSI_QCMD(queuecommand)
2044 /***********************************************************************
2045 * Error handling functions
2046 ***********************************************************************/
2047 /* Command timeout and abort */
2048 int command_abort(struct scsi_cmnd *srb)
2050 struct rts51x_chip *chip = host_to_rts51x(srb->device->host);
2052 RTS51X_DEBUGP("%s called\n", __func__);
2054 /* us->srb together with the TIMED_OUT, RESETTING, and ABORTING
2055 * bits are protected by the host lock. */
2056 scsi_lock(rts51x_to_host(chip));
2058 /* Is this command still active? */
2059 if (chip->srb != srb) {
2060 scsi_unlock(rts51x_to_host(chip));
2061 RTS51X_DEBUGP("-- nothing to abort\n");
2065 /* Set the TIMED_OUT bit. Also set the ABORTING bit, but only if
2066 * a device reset isn't already in progress (to avoid interfering
2067 * with the reset). Note that we must retain the host lock while
2068 * calling usb_stor_stop_transport(); otherwise it might interfere
2069 * with an auto-reset that begins as soon as we release the lock. */
2070 set_bit(FLIDX_TIMED_OUT, &chip->usb->dflags);
2071 if (!test_bit(FLIDX_RESETTING, &chip->usb->dflags)) {
2072 set_bit(FLIDX_ABORTING, &chip->usb->dflags);
2073 /* rts51x_stop_transport(us); */
2075 scsi_unlock(rts51x_to_host(chip));
2077 /* Wait for the aborted command to finish */
2078 wait_for_completion(&chip->usb->notify);
2082 /* This invokes the transport reset mechanism to reset the state of the
2084 int device_reset(struct scsi_cmnd *srb)
2088 RTS51X_DEBUGP("%s called\n", __func__);
2090 return result < 0 ? FAILED : SUCCESS;
2093 /* Simulate a SCSI bus reset by resetting the device's USB port. */
2094 int bus_reset(struct scsi_cmnd *srb)
2098 RTS51X_DEBUGP("%s called\n", __func__);
2100 return result < 0 ? FAILED : SUCCESS;
2103 static const char *rts5139_info(struct Scsi_Host *host)
2105 return "SCSI emulation for RTS5139 USB card reader";
2108 struct scsi_host_template rts51x_host_template = {
2109 /* basic userland interface stuff */
2110 .name = RTS51X_NAME,
2111 .proc_name = RTS51X_NAME,
2112 .proc_info = proc_info,
2113 .info = rts5139_info,
2115 /* command interface -- queued only */
2116 .queuecommand = queuecommand,
2118 /* error and abort handlers */
2119 .eh_abort_handler = command_abort,
2120 .eh_device_reset_handler = device_reset,
2121 .eh_bus_reset_handler = bus_reset,
2123 /* queue commands only, only one command per LUN */
2127 /* unknown initiator id */
2130 .slave_alloc = slave_alloc,
2131 .slave_configure = slave_configure,
2133 /* lots of sg segments can be handled */
2134 .sg_tablesize = SG_ALL,
2136 /* limit the total size of a transfer to 120 KB */
2139 /* merge commands... this seems to help performance, but
2140 * periodically someone should test to see which setting is more
2143 .use_clustering = 1,
2148 /* we do our own delay after a device or bus reset */
2149 .skip_settle_delay = 1,
2151 /* sysfs device attributes */
2152 /* .sdev_attrs = sysfs_device_attr_list, */
2154 /* module management */
2155 .module = THIS_MODULE