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"
43 #include "rts51x_sys.h"
48 void scsi_show_command(struct scsi_cmnd *srb)
51 int i, unknown_cmd = 0;
53 switch (srb->cmnd[0]) {
55 what = (char *)"TEST_UNIT_READY";
58 what = (char *)"REZERO_UNIT";
61 what = (char *)"REQUEST_SENSE";
64 what = (char *)"FORMAT_UNIT";
66 case READ_BLOCK_LIMITS:
67 what = (char *)"READ_BLOCK_LIMITS";
70 what = (char *)"REASSIGN_BLOCKS";
73 what = (char *)"READ_6";
76 what = (char *)"WRITE_6";
79 what = (char *)"SEEK_6";
82 what = (char *)"READ_REVERSE";
85 what = (char *)"WRITE_FILEMARKS";
88 what = (char *)"SPACE";
91 what = (char *)"INQUIRY";
93 case RECOVER_BUFFERED_DATA:
94 what = (char *)"RECOVER_BUFFERED_DATA";
97 what = (char *)"MODE_SELECT";
100 what = (char *)"RESERVE";
103 what = (char *)"RELEASE";
106 what = (char *)"COPY";
109 what = (char *)"ERASE";
112 what = (char *)"MODE_SENSE";
115 what = (char *)"START_STOP";
117 case RECEIVE_DIAGNOSTIC:
118 what = (char *)"RECEIVE_DIAGNOSTIC";
120 case SEND_DIAGNOSTIC:
121 what = (char *)"SEND_DIAGNOSTIC";
123 case ALLOW_MEDIUM_REMOVAL:
124 what = (char *)"ALLOW_MEDIUM_REMOVAL";
127 what = (char *)"SET_WINDOW";
130 what = (char *)"READ_CAPACITY";
133 what = (char *)"READ_10";
136 what = (char *)"WRITE_10";
139 what = (char *)"SEEK_10";
142 what = (char *)"WRITE_VERIFY";
145 what = (char *)"VERIFY";
148 what = (char *)"SEARCH_HIGH";
151 what = (char *)"SEARCH_EQUAL";
154 what = (char *)"SEARCH_LOW";
157 what = (char *)"SET_LIMITS";
160 what = (char *)"READ_POSITION";
162 case SYNCHRONIZE_CACHE:
163 what = (char *)"SYNCHRONIZE_CACHE";
165 case LOCK_UNLOCK_CACHE:
166 what = (char *)"LOCK_UNLOCK_CACHE";
168 case READ_DEFECT_DATA:
169 what = (char *)"READ_DEFECT_DATA";
172 what = (char *)"MEDIUM_SCAN";
175 what = (char *)"COMPARE";
178 what = (char *)"COPY_VERIFY";
181 what = (char *)"WRITE_BUFFER";
184 what = (char *)"READ_BUFFER";
187 what = (char *)"UPDATE_BLOCK";
190 what = (char *)"READ_LONG";
193 what = (char *)"WRITE_LONG";
195 case CHANGE_DEFINITION:
196 what = (char *)"CHANGE_DEFINITION";
199 what = (char *)"WRITE_SAME";
201 case GPCMD_READ_SUBCHANNEL:
202 what = (char *)"READ SUBCHANNEL";
205 what = (char *)"READ_TOC";
207 case GPCMD_READ_HEADER:
208 what = (char *)"READ HEADER";
210 case GPCMD_PLAY_AUDIO_10:
211 what = (char *)"PLAY AUDIO (10)";
213 case GPCMD_PLAY_AUDIO_MSF:
214 what = (char *)"PLAY AUDIO MSF";
216 case GPCMD_GET_EVENT_STATUS_NOTIFICATION:
217 what = (char *)"GET EVENT/STATUS NOTIFICATION";
219 case GPCMD_PAUSE_RESUME:
220 what = (char *)"PAUSE/RESUME";
223 what = (char *)"LOG_SELECT";
226 what = (char *)"LOG_SENSE";
228 case GPCMD_STOP_PLAY_SCAN:
229 what = (char *)"STOP PLAY/SCAN";
231 case GPCMD_READ_DISC_INFO:
232 what = (char *)"READ DISC INFORMATION";
234 case GPCMD_READ_TRACK_RZONE_INFO:
235 what = (char *)"READ TRACK INFORMATION";
237 case GPCMD_RESERVE_RZONE_TRACK:
238 what = (char *)"RESERVE TRACK";
241 what = (char *)"SEND OPC";
244 what = (char *)"MODE_SELECT_10";
246 case GPCMD_REPAIR_RZONE_TRACK:
247 what = (char *)"REPAIR TRACK";
250 what = (char *)"READ MASTER CUE";
253 what = (char *)"MODE_SENSE_10";
255 case GPCMD_CLOSE_TRACK:
256 what = (char *)"CLOSE TRACK/SESSION";
259 what = (char *)"READ BUFFER CAPACITY";
262 what = (char *)"SEND CUE SHEET";
265 what = (char *)"BLANK";
268 what = (char *)"REPORT LUNS";
271 what = (char *)"MOVE_MEDIUM or PLAY AUDIO (12)";
274 what = (char *)"READ_12";
277 what = (char *)"WRITE_12";
279 case WRITE_VERIFY_12:
280 what = (char *)"WRITE_VERIFY_12";
283 what = (char *)"SEARCH_HIGH_12";
285 case SEARCH_EQUAL_12:
286 what = (char *)"SEARCH_EQUAL_12";
289 what = (char *)"SEARCH_LOW_12";
291 case SEND_VOLUME_TAG:
292 what = (char *)"SEND_VOLUME_TAG";
294 case READ_ELEMENT_STATUS:
295 what = (char *)"READ_ELEMENT_STATUS";
297 case GPCMD_READ_CD_MSF:
298 what = (char *)"READ CD MSF";
301 what = (char *)"SCAN";
303 case GPCMD_SET_SPEED:
304 what = (char *)"SET CD SPEED";
306 case GPCMD_MECHANISM_STATUS:
307 what = (char *)"MECHANISM STATUS";
310 what = (char *)"READ CD";
313 what = (char *)"WRITE CONTINUE";
316 what = (char *)"WRITE_LONG_2";
319 what = (char *)"Realtek's vendor command";
322 what = (char *)"(unknown command)";
327 if (srb->cmnd[0] != TEST_UNIT_READY)
328 RTS51X_DEBUGP("Command %s (%d bytes)\n", what, srb->cmd_len);
331 for (i = 0; i < srb->cmd_len && i < 16; i++)
332 RTS51X_DEBUGPN(" %02x", srb->cmnd[i]);
333 RTS51X_DEBUGPN("\n");
337 void set_sense_type(struct rts51x_chip *chip, unsigned int lun, int sense_type)
339 switch (sense_type) {
340 case SENSE_TYPE_MEDIA_CHANGE:
341 set_sense_data(chip, lun, CUR_ERR, 0x06, 0, 0x28, 0, 0, 0);
344 case SENSE_TYPE_MEDIA_NOT_PRESENT:
345 set_sense_data(chip, lun, CUR_ERR, 0x02, 0, 0x3A, 0, 0, 0);
348 case SENSE_TYPE_MEDIA_LBA_OVER_RANGE:
349 set_sense_data(chip, lun, CUR_ERR, 0x05, 0, 0x21, 0, 0, 0);
352 case SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT:
353 set_sense_data(chip, lun, CUR_ERR, 0x05, 0, 0x25, 0, 0, 0);
356 case SENSE_TYPE_MEDIA_WRITE_PROTECT:
357 set_sense_data(chip, lun, CUR_ERR, 0x07, 0, 0x27, 0, 0, 0);
360 case SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR:
361 set_sense_data(chip, lun, CUR_ERR, 0x03, 0, 0x11, 0, 0, 0);
364 case SENSE_TYPE_MEDIA_WRITE_ERR:
365 set_sense_data(chip, lun, CUR_ERR, 0x03, 0, 0x0C, 0x02, 0, 0);
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);
373 case SENSE_TYPE_FORMAT_IN_PROGRESS:
374 set_sense_data(chip, lun, CUR_ERR, 0x02, 0, 0x04, 0x04, 0, 0);
377 case SENSE_TYPE_FORMAT_CMD_FAILED:
378 set_sense_data(chip, lun, CUR_ERR, 0x03, 0, 0x31, 0x01, 0, 0);
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);
386 case SENSE_TYPE_MG_KEY_FAIL_NOT_AUTHEN:
387 set_sense_data(chip, lun, CUR_ERR, 0x05, 0, 0x6F, 0x00, 0, 0);
390 case SENSE_TYPE_MG_INCOMPATIBLE_MEDIUM:
391 set_sense_data(chip, lun, CUR_ERR, 0x02, 0, 0x30, 0x00, 0, 0);
394 case SENSE_TYPE_MG_WRITE_ERR:
395 set_sense_data(chip, lun, CUR_ERR, 0x03, 0, 0x0C, 0x00, 0, 0);
399 case SENSE_TYPE_NO_SENSE:
401 set_sense_data(chip, lun, CUR_ERR, 0, 0, 0, 0, 0, 0);
406 void set_sense_data(struct rts51x_chip *chip, unsigned int lun, u8 err_code,
407 u8 sense_key, u32 info, u8 asc, u8 ascq, u8 sns_key_info0,
410 struct sense_data_t *sense = &(chip->sense_buffer[lun]);
412 sense->err_code = err_code;
413 sense->sense_key = sense_key;
414 sense->info[0] = (u8) (info >> 24);
415 sense->info[1] = (u8) (info >> 16);
416 sense->info[2] = (u8) (info >> 8);
417 sense->info[3] = (u8) info;
419 sense->ad_sense_len = sizeof(struct sense_data_t) - 8;
422 if (sns_key_info0 != 0) {
423 sense->sns_key_info[0] = SKSV | sns_key_info0;
424 sense->sns_key_info[1] = (sns_key_info1 & 0xf0) >> 8;
425 sense->sns_key_info[2] = sns_key_info1 & 0x0f;
429 static int test_unit_ready(struct scsi_cmnd *srb, struct rts51x_chip *chip)
431 unsigned int lun = SCSI_LUN(srb);
433 rts51x_init_cards(chip);
435 if (!check_card_ready(chip, lun)) {
436 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
437 return TRANSPORT_FAILED;
440 if (!check_lun_mc(chip, lun)) {
441 set_lun_mc(chip, lun);
442 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
443 return TRANSPORT_FAILED;
446 return TRANSPORT_GOOD;
449 unsigned char formatter_inquiry_str[20] = {
450 'M', 'E', 'M', 'O', 'R', 'Y', 'S', 'T', 'I', 'C', 'K',
451 '-', 'M', 'G', /* Byte[47:49] */
452 0x0B, /* Byte[50]: MG, MS, MSPro, MSXC */
453 0x00, /* Byte[51]: Category Specific Commands */
454 0x00, /* Byte[52]: Access Control and feature */
455 0x20, 0x20, 0x20, /* Byte[53:55] */
458 static int inquiry(struct scsi_cmnd *srb, struct rts51x_chip *chip)
460 unsigned int lun = SCSI_LUN(srb);
461 char *inquiry_default = (char *)"Generic-xD/SD/M.S. 1.00 ";
462 char *inquiry_string;
463 unsigned char sendbytes;
465 u8 card = get_lun_card(chip, lun);
466 int pro_formatter_flag = 0;
467 unsigned char inquiry_buf[] = {
468 QULIFIRE | DRCT_ACCESS_DEV,
475 REL_ADR | WBUS_32 | WBUS_16 | SYNC | LINKED | CMD_QUE | SFT_RE,
478 inquiry_string = inquiry_default;
480 buf = vmalloc(scsi_bufflen(srb));
482 TRACE_RET(chip, TRANSPORT_ERROR);
484 if (MS_FORMATTER_ENABLED(chip) && (get_lun2card(chip, lun) & MS_CARD)) {
485 if (!card || (card == MS_CARD))
486 pro_formatter_flag = 1;
489 if (pro_formatter_flag) {
490 if (scsi_bufflen(srb) < 56)
491 sendbytes = (unsigned char)(scsi_bufflen(srb));
495 if (scsi_bufflen(srb) < 36)
496 sendbytes = (unsigned char)(scsi_bufflen(srb));
502 memcpy(buf, inquiry_buf, 8);
503 memcpy(buf + 8, inquiry_string, sendbytes - 8);
504 if (pro_formatter_flag)
505 buf[4] = 0x33; /* Additional Length */
507 memcpy(buf, inquiry_buf, sendbytes);
510 if (pro_formatter_flag) {
512 memcpy(buf + 36, formatter_inquiry_str, sendbytes - 36);
515 scsi_set_resid(srb, 0);
517 rts51x_set_xfer_buf(buf, scsi_bufflen(srb), srb);
520 return TRANSPORT_GOOD;
523 static int start_stop_unit(struct scsi_cmnd *srb, struct rts51x_chip *chip)
525 unsigned int lun = SCSI_LUN(srb);
527 scsi_set_resid(srb, scsi_bufflen(srb));
529 if (srb->cmnd[1] == 1)
530 return TRANSPORT_GOOD;
532 switch (srb->cmnd[0x4]) {
535 return TRANSPORT_GOOD;
538 /* Media shall be unload */
539 if (check_card_ready(chip, lun))
540 eject_card(chip, lun);
541 return TRANSPORT_GOOD;
543 case MAKE_MEDIUM_READY:
545 if (check_card_ready(chip, lun)) {
546 return TRANSPORT_GOOD;
548 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
549 TRACE_RET(chip, TRANSPORT_FAILED);
555 TRACE_RET(chip, TRANSPORT_ERROR);
558 static int allow_medium_removal(struct scsi_cmnd *srb, struct rts51x_chip *chip)
562 prevent = srb->cmnd[4] & 0x1;
564 scsi_set_resid(srb, 0);
567 set_sense_type(chip, SCSI_LUN(srb),
568 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
569 TRACE_RET(chip, TRANSPORT_FAILED);
572 return TRANSPORT_GOOD;
575 static void ms_mode_sense(struct rts51x_chip *chip, u8 cmd,
576 int lun, u8 *buf, int buf_len)
578 struct ms_info *ms_card = &(chip->ms_card);
580 int data_size = buf_len;
581 int support_format = 0;
584 if (cmd == MODE_SENSE) {
586 if (data_size > 0x68)
588 buf[i++] = 0x67; /* Mode Data Length */
590 sys_info_offset = 12;
591 if (data_size > 0x6C)
593 buf[i++] = 0x00; /* Mode Data Length (MSB) */
594 buf[i++] = 0x6A; /* Mode Data Length (LSB) */
597 /* Medium Type Code */
598 if (check_card_ready(chip, lun)) {
599 if (CHK_MSXC(ms_card)) {
602 } else if (CHK_MSPRO(ms_card)) {
610 if (check_card_wp(chip, lun))
615 buf[i++] = 0x00; /* MediaType */
616 buf[i++] = 0x00; /* WP */
619 buf[i++] = 0x00; /* Reserved */
621 if (cmd == MODE_SENSE_10) {
622 buf[i++] = 0x00; /* Reserved */
623 buf[i++] = 0x00; /* Block descriptor length(MSB) */
624 buf[i++] = 0x00; /* Block descriptor length(LSB) */
626 /* The Following Data is the content of "Page 0x20" */
628 buf[i++] = 0x20; /* Page Code */
630 buf[i++] = 0x62; /* Page Length */
632 buf[i++] = 0x00; /* No Access Control */
633 if (data_size >= 12) {
635 buf[i++] = 0xC0; /* SF, SGM */
640 /* The Following Data is the content of "Page 0x20" */
642 buf[i++] = 0x20; /* Page Code */
644 buf[i++] = 0x62; /* Page Length */
646 buf[i++] = 0x00; /* No Access Control */
647 if (data_size >= 8) {
649 buf[i++] = 0xC0; /* SF, SGM */
655 if (data_size > sys_info_offset) {
656 /* 96 Bytes Attribute Data */
657 int len = data_size - sys_info_offset;
658 len = (len < 96) ? len : 96;
660 memcpy(buf + sys_info_offset, ms_card->raw_sys_info, len);
664 static int mode_sense(struct scsi_cmnd *srb, struct rts51x_chip *chip)
666 unsigned int lun = SCSI_LUN(srb);
667 unsigned int dataSize;
669 int pro_formatter_flag;
670 unsigned char pageCode, *buf;
671 u8 card = get_lun_card(chip, lun);
673 if (!check_card_ready(chip, lun)) {
674 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
675 scsi_set_resid(srb, scsi_bufflen(srb));
676 TRACE_RET(chip, TRANSPORT_FAILED);
679 pro_formatter_flag = 0;
681 /* In Combo mode, device responses ModeSense command as a MS LUN
682 * when no card is inserted */
683 if ((get_lun2card(chip, lun) & MS_CARD)) {
684 if (!card || (card == MS_CARD)) {
686 if (chip->option.mspro_formatter_enable)
687 pro_formatter_flag = 1;
691 buf = kmalloc(dataSize, GFP_KERNEL);
693 TRACE_RET(chip, TRANSPORT_ERROR);
695 pageCode = srb->cmnd[2] & 0x3f;
697 if ((pageCode == 0x3F) || (pageCode == 0x1C) ||
698 (pageCode == 0x00) || (pro_formatter_flag && (pageCode == 0x20))) {
699 if (srb->cmnd[0] == MODE_SENSE) {
700 if ((pageCode == 0x3F) || (pageCode == 0x20)) {
701 ms_mode_sense(chip, srb->cmnd[0], lun, buf,
707 if (check_card_wp(chip, lun))
713 if ((pageCode == 0x3F) || (pageCode == 0x20)) {
714 ms_mode_sense(chip, srb->cmnd[0], lun, buf,
721 if (check_card_wp(chip, lun))
731 status = TRANSPORT_GOOD;
733 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
734 scsi_set_resid(srb, scsi_bufflen(srb));
735 status = TRANSPORT_FAILED;
738 if (status == TRANSPORT_GOOD) {
739 unsigned int len = min(scsi_bufflen(srb), dataSize);
740 rts51x_set_xfer_buf(buf, len, srb);
741 scsi_set_resid(srb, scsi_bufflen(srb) - len);
748 static int request_sense(struct scsi_cmnd *srb, struct rts51x_chip *chip)
750 struct sense_data_t *sense;
751 unsigned int lun = SCSI_LUN(srb);
752 struct ms_info *ms_card = &(chip->ms_card);
753 unsigned char *tmp, *buf;
755 sense = &(chip->sense_buffer[lun]);
757 if ((get_lun_card(chip, lun) == MS_CARD)
758 && PRO_UNDER_FORMATTING(ms_card)) {
759 mspro_format_sense(chip, lun);
762 buf = vmalloc(scsi_bufflen(srb));
764 TRACE_RET(chip, TRANSPORT_ERROR);
766 tmp = (unsigned char *)sense;
767 memcpy(buf, tmp, scsi_bufflen(srb));
769 rts51x_set_xfer_buf(buf, scsi_bufflen(srb), srb);
772 scsi_set_resid(srb, 0);
773 /* Reset Sense Data */
774 set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
775 return TRANSPORT_GOOD;
778 static int read_write(struct scsi_cmnd *srb, struct rts51x_chip *chip)
780 unsigned int lun = SCSI_LUN(srb);
785 if (!check_card_ready(chip, lun) || (chip->capacity[lun] == 0)) {
786 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
787 TRACE_RET(chip, TRANSPORT_FAILED);
790 if (!check_lun_mc(chip, lun)) {
791 set_lun_mc(chip, lun);
792 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
793 return TRANSPORT_FAILED;
796 rts51x_prepare_run(chip);
797 RTS51X_SET_STAT(chip, STAT_RUN);
799 if ((srb->cmnd[0] == READ_10) || (srb->cmnd[0] == WRITE_10)) {
801 ((u32) srb->cmnd[2] << 24) |
802 ((u32) srb->cmnd[3] << 16) |
803 ((u32) srb->cmnd[4] << 8) |
804 ((u32) srb->cmnd[5]);
805 sec_cnt = ((u16) (srb->cmnd[7]) << 8) | srb->cmnd[8];
806 } else if ((srb->cmnd[0] == READ_6) || (srb->cmnd[0] == WRITE_6)) {
807 start_sec = ((u32) (srb->cmnd[1] & 0x1F) << 16) |
808 ((u32) srb->cmnd[2] << 8) | ((u32) srb->cmnd[3]);
809 sec_cnt = srb->cmnd[4];
810 } else if ((srb->cmnd[0] == VENDOR_CMND) &&
811 (srb->cmnd[1] == SCSI_APP_CMD) &&
812 ((srb->cmnd[2] == PP_READ10) ||
813 (srb->cmnd[2] == PP_WRITE10))) {
814 start_sec = ((u32) srb->cmnd[4] << 24) |
815 ((u32) srb->cmnd[5] << 16) |
816 ((u32) srb->cmnd[6] << 8) |
817 ((u32) srb->cmnd[7]);
818 sec_cnt = ((u16) (srb->cmnd[9]) << 8) | srb->cmnd[10];
820 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
821 TRACE_RET(chip, TRANSPORT_FAILED);
824 if ((start_sec > chip->capacity[lun]) ||
825 ((start_sec + sec_cnt) > chip->capacity[lun])) {
826 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LBA_OVER_RANGE);
827 TRACE_RET(chip, TRANSPORT_FAILED);
831 scsi_set_resid(srb, 0);
832 return TRANSPORT_GOOD;
835 if ((srb->sc_data_direction == DMA_TO_DEVICE)
836 && check_card_wp(chip, lun)) {
837 RTS51X_DEBUGP("Write protected card!\n");
838 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_PROTECT);
839 TRACE_RET(chip, TRANSPORT_FAILED);
842 retval = card_rw(srb, chip, start_sec, sec_cnt);
843 if (retval != STATUS_SUCCESS) {
844 if (srb->sc_data_direction == DMA_FROM_DEVICE) {
845 set_sense_type(chip, lun,
846 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
848 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_ERR);
850 TRACE_RET(chip, TRANSPORT_FAILED);
853 scsi_set_resid(srb, 0);
855 return TRANSPORT_GOOD;
858 static int read_format_capacity(struct scsi_cmnd *srb, struct rts51x_chip *chip)
861 unsigned int lun = SCSI_LUN(srb);
862 unsigned int buf_len;
863 u8 card = get_lun_card(chip, lun);
867 if (!check_card_ready(chip, lun)) {
868 if (!chip->option.mspro_formatter_enable) {
869 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
870 TRACE_RET(chip, TRANSPORT_FAILED);
874 buf_len = (scsi_bufflen(srb) > 12) ? 0x14 : 12;
876 buf = kmalloc(buf_len, GFP_KERNEL);
878 TRACE_RET(chip, TRANSPORT_ERROR);
884 /* Capacity List Length */
885 if ((buf_len > 12) && chip->option.mspro_formatter_enable &&
886 (chip->lun2card[lun] & MS_CARD) && (!card || (card == MS_CARD))) {
895 if (check_card_ready(chip, lun)) {
896 buf[i++] = (unsigned char)((chip->capacity[lun]) >> 24);
897 buf[i++] = (unsigned char)((chip->capacity[lun]) >> 16);
898 buf[i++] = (unsigned char)((chip->capacity[lun]) >> 8);
899 buf[i++] = (unsigned char)(chip->capacity[lun]);
902 /* Byte[8]: Descriptor Type: Formatted medium */
905 buf[i++] = 0; /* Byte[16] */
913 /* Byte[8]: Descriptor Type: No medium */
916 buf[i++] = 0; /*Byte[16] */
926 buf_len = min(scsi_bufflen(srb), buf_len);
927 rts51x_set_xfer_buf(buf, buf_len, srb);
930 scsi_set_resid(srb, scsi_bufflen(srb) - buf_len);
932 return TRANSPORT_GOOD;
935 static int read_capacity(struct scsi_cmnd *srb, struct rts51x_chip *chip)
938 unsigned int lun = SCSI_LUN(srb);
940 if (!check_card_ready(chip, lun)) {
941 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
942 TRACE_RET(chip, TRANSPORT_FAILED);
945 if (!check_lun_mc(chip, lun)) {
946 set_lun_mc(chip, lun);
947 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
948 return TRANSPORT_FAILED;
951 buf = kmalloc(8, GFP_KERNEL);
953 TRACE_RET(chip, TRANSPORT_ERROR);
955 buf[0] = (unsigned char)((chip->capacity[lun] - 1) >> 24);
956 buf[1] = (unsigned char)((chip->capacity[lun] - 1) >> 16);
957 buf[2] = (unsigned char)((chip->capacity[lun] - 1) >> 8);
958 buf[3] = (unsigned char)(chip->capacity[lun] - 1);
965 rts51x_set_xfer_buf(buf, scsi_bufflen(srb), srb);
968 scsi_set_resid(srb, 0);
970 return TRANSPORT_GOOD;
973 static int get_dev_status(struct scsi_cmnd *srb, struct rts51x_chip *chip)
975 unsigned int lun = SCSI_LUN(srb);
976 unsigned int buf_len;
977 u8 status[32] = { 0 };
979 rts51x_pp_status(chip, lun, status, 32);
981 buf_len = min(scsi_bufflen(srb), (unsigned int)sizeof(status));
982 rts51x_set_xfer_buf(status, buf_len, srb);
983 scsi_set_resid(srb, scsi_bufflen(srb) - buf_len);
985 return TRANSPORT_GOOD;
988 static int read_status(struct scsi_cmnd *srb, struct rts51x_chip *chip)
990 u8 rts51x_status[16];
991 unsigned int buf_len;
992 unsigned int lun = SCSI_LUN(srb);
994 rts51x_read_status(chip, lun, rts51x_status, 16);
996 buf_len = min(scsi_bufflen(srb), (unsigned int)sizeof(rts51x_status));
997 rts51x_set_xfer_buf(rts51x_status, buf_len, srb);
998 scsi_set_resid(srb, scsi_bufflen(srb) - buf_len);
1000 return TRANSPORT_GOOD;
1003 static int read_mem(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1005 unsigned int lun = SCSI_LUN(srb);
1006 unsigned short addr, len, i;
1010 rts51x_prepare_run(chip);
1011 RTS51X_SET_STAT(chip, STAT_RUN);
1013 addr = ((u16) srb->cmnd[2] << 8) | srb->cmnd[3];
1014 len = ((u16) srb->cmnd[4] << 8) | srb->cmnd[5];
1016 if (addr < 0xe000) {
1017 RTS51X_DEBUGP("filter!addr=0x%x\n", addr);
1018 return TRANSPORT_GOOD;
1023 TRACE_RET(chip, TRANSPORT_ERROR);
1025 for (i = 0; i < len; i++) {
1026 retval = rts51x_ep0_read_register(chip, addr + i, buf + i);
1027 if (retval != STATUS_SUCCESS) {
1029 set_sense_type(chip, lun,
1030 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1031 TRACE_RET(chip, TRANSPORT_FAILED);
1035 len = (unsigned short)min(scsi_bufflen(srb), (unsigned int)len);
1036 rts51x_set_xfer_buf(buf, len, srb);
1037 scsi_set_resid(srb, scsi_bufflen(srb) - len);
1041 return TRANSPORT_GOOD;
1044 static int write_mem(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1046 unsigned int lun = SCSI_LUN(srb);
1047 unsigned short addr, len, i;
1051 rts51x_prepare_run(chip);
1052 RTS51X_SET_STAT(chip, STAT_RUN);
1054 addr = ((u16) srb->cmnd[2] << 8) | srb->cmnd[3];
1055 len = ((u16) srb->cmnd[4] << 8) | srb->cmnd[5];
1057 if (addr < 0xe000) {
1058 RTS51X_DEBUGP("filter!addr=0x%x\n", addr);
1059 return TRANSPORT_GOOD;
1062 len = (unsigned short)min(scsi_bufflen(srb), (unsigned int)len);
1065 TRACE_RET(chip, TRANSPORT_ERROR);
1067 rts51x_get_xfer_buf(buf, len, srb);
1069 for (i = 0; i < len; i++) {
1071 rts51x_ep0_write_register(chip, addr + i, 0xFF, buf[i]);
1072 if (retval != STATUS_SUCCESS) {
1074 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_ERR);
1075 TRACE_RET(chip, TRANSPORT_FAILED);
1080 scsi_set_resid(srb, scsi_bufflen(srb) - len);
1082 return TRANSPORT_GOOD;
1085 static int get_sd_csd(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1087 struct sd_info *sd_card = &(chip->sd_card);
1088 unsigned int lun = SCSI_LUN(srb);
1090 if (!check_card_ready(chip, lun)) {
1091 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
1092 TRACE_RET(chip, TRANSPORT_FAILED);
1095 if (get_lun_card(chip, lun) != SD_CARD) {
1096 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1097 TRACE_RET(chip, TRANSPORT_FAILED);
1100 scsi_set_resid(srb, 0);
1101 rts51x_set_xfer_buf(sd_card->raw_csd, scsi_bufflen(srb), srb);
1103 return TRANSPORT_GOOD;
1106 static int read_phy_register(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1112 rts51x_prepare_run(chip);
1113 RTS51X_SET_STAT(chip, STAT_RUN);
1115 addr = srb->cmnd[5];
1121 TRACE_RET(chip, TRANSPORT_ERROR);
1123 for (i = 0; i < len; i++) {
1125 rts51x_read_phy_register(chip, addr + i, buf + i);
1126 if (retval != STATUS_SUCCESS) {
1128 set_sense_type(chip, SCSI_LUN(srb),
1129 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1130 TRACE_RET(chip, TRANSPORT_FAILED);
1134 len = min(scsi_bufflen(srb), (unsigned int)len);
1135 rts51x_set_xfer_buf(buf, len, srb);
1136 scsi_set_resid(srb, scsi_bufflen(srb) - len);
1141 return TRANSPORT_GOOD;
1144 static int write_phy_register(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1150 rts51x_prepare_run(chip);
1151 RTS51X_SET_STAT(chip, STAT_RUN);
1153 addr = srb->cmnd[5];
1157 len = min(scsi_bufflen(srb), (unsigned int)len);
1161 TRACE_RET(chip, TRANSPORT_ERROR);
1163 rts51x_get_xfer_buf(buf, len, srb);
1164 scsi_set_resid(srb, scsi_bufflen(srb) - len);
1166 for (i = 0; i < len; i++) {
1168 rts51x_write_phy_register(chip, addr + i, buf[i]);
1169 if (retval != STATUS_SUCCESS) {
1171 set_sense_type(chip, SCSI_LUN(srb),
1172 SENSE_TYPE_MEDIA_WRITE_ERR);
1173 TRACE_RET(chip, TRANSPORT_FAILED);
1180 return TRANSPORT_GOOD;
1183 static int get_card_bus_width(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1185 unsigned int lun = SCSI_LUN(srb);
1188 if (!check_card_ready(chip, lun)) {
1189 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
1190 TRACE_RET(chip, TRANSPORT_FAILED);
1193 card = get_lun_card(chip, lun);
1194 if ((card == SD_CARD) || (card == MS_CARD)) {
1195 bus_width = chip->card_bus_width[lun];
1197 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1198 TRACE_RET(chip, TRANSPORT_FAILED);
1201 scsi_set_resid(srb, 0);
1202 rts51x_set_xfer_buf(&bus_width, scsi_bufflen(srb), srb);
1204 return TRANSPORT_GOOD;
1208 static int trace_msg_cmd(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1210 unsigned char *buf = NULL;
1212 unsigned int buf_len;
1216 ((2 + MSG_FUNC_LEN + MSG_FILE_LEN + TIME_VAL_LEN) * TRACE_ITEM_CNT);
1218 if ((scsi_bufflen(srb) < buf_len) || (scsi_sglist(srb) == NULL)) {
1219 set_sense_type(chip, SCSI_LUN(srb),
1220 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1221 TRACE_RET(chip, TRANSPORT_FAILED);
1224 clear = srb->cmnd[2];
1226 buf = vmalloc(scsi_bufflen(srb));
1228 TRACE_RET(chip, TRANSPORT_ERROR);
1230 rts51x_trace_msg(chip, buf, clear);
1232 rts51x_set_xfer_buf(buf, scsi_bufflen(srb), srb);
1235 scsi_set_resid(srb, 0);
1236 return TRANSPORT_GOOD;
1240 static int rw_mem_cmd_buf(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1242 int retval = STATUS_SUCCESS;
1243 unsigned int lun = SCSI_LUN(srb);
1244 u8 cmd_type, mask, value, idx, mode, len;
1248 rts51x_prepare_run(chip);
1249 RTS51X_SET_STAT(chip, STAT_RUN);
1251 switch (srb->cmnd[3]) {
1253 rts51x_init_cmd(chip);
1257 cmd_type = srb->cmnd[4];
1259 set_sense_type(chip, lun,
1260 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1261 TRACE_RET(chip, TRANSPORT_FAILED);
1263 addr = (srb->cmnd[5] << 8) | srb->cmnd[6];
1264 mask = srb->cmnd[7];
1265 value = srb->cmnd[8];
1266 rts51x_add_cmd(chip, cmd_type, addr, mask, value);
1270 mode = srb->cmnd[4];
1273 ((u32) srb->cmnd[6] << 24) | ((u32) srb->
1274 cmnd[7] << 16) | ((u32) srb->
1280 retval = rts51x_send_cmd(chip, mode, 1000);
1281 if (retval != STATUS_SUCCESS) {
1282 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_ERR);
1283 TRACE_RET(chip, TRANSPORT_FAILED);
1285 if (mode & STAGE_R) {
1286 retval = rts51x_get_rsp(chip, len, timeout);
1287 if (retval != STATUS_SUCCESS) {
1288 set_sense_type(chip, lun,
1289 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1290 TRACE_RET(chip, TRANSPORT_FAILED);
1297 value = chip->rsp_buf[idx];
1298 if (scsi_bufflen(srb) < 1) {
1299 set_sense_type(chip, lun,
1300 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1301 TRACE_RET(chip, TRANSPORT_FAILED);
1303 rts51x_set_xfer_buf(&value, 1, srb);
1304 scsi_set_resid(srb, 0);
1308 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1309 TRACE_RET(chip, TRANSPORT_FAILED);
1312 if (retval != STATUS_SUCCESS) {
1313 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_ERR);
1314 TRACE_RET(chip, TRANSPORT_FAILED);
1317 return TRANSPORT_GOOD;
1320 static int suit_cmd(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1324 switch (srb->cmnd[3]) {
1329 result = rw_mem_cmd_buf(srb, chip);
1332 result = TRANSPORT_ERROR;
1338 static int app_cmd(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1342 switch (srb->cmnd[2]) {
1345 result = read_write(srb, chip);
1349 result = suit_cmd(srb, chip);
1353 result = read_phy_register(srb, chip);
1357 result = write_phy_register(srb, chip);
1360 case GET_DEV_STATUS:
1361 result = get_dev_status(srb, chip);
1365 set_sense_type(chip, SCSI_LUN(srb),
1366 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1367 TRACE_RET(chip, TRANSPORT_FAILED);
1373 static int vendor_cmnd(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1375 int result = TRANSPORT_GOOD;
1377 switch (srb->cmnd[1]) {
1379 result = read_status(srb, chip);
1383 result = read_mem(srb, chip);
1387 result = write_mem(srb, chip);
1391 result = get_card_bus_width(srb, chip);
1395 result = get_sd_csd(srb, chip);
1400 result = trace_msg_cmd(srb, chip);
1405 result = app_cmd(srb, chip);
1409 set_sense_type(chip, SCSI_LUN(srb),
1410 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1411 TRACE_RET(chip, TRANSPORT_FAILED);
1417 static int ms_format_cmnd(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1419 struct ms_info *ms_card = &(chip->ms_card);
1420 unsigned int lun = SCSI_LUN(srb);
1421 int retval, quick_format;
1423 if (get_lun_card(chip, lun) != MS_CARD) {
1424 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
1425 TRACE_RET(chip, TRANSPORT_FAILED);
1428 if ((srb->cmnd[3] != 0x4D) || (srb->cmnd[4] != 0x47)
1429 || (srb->cmnd[5] != 0x66) || (srb->cmnd[6] != 0x6D)
1430 || (srb->cmnd[7] != 0x74)) {
1431 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1432 TRACE_RET(chip, TRANSPORT_FAILED);
1435 if (srb->cmnd[8] & 0x01)
1440 if (!(chip->card_ready & MS_CARD)) {
1441 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
1442 TRACE_RET(chip, TRANSPORT_FAILED);
1445 if (chip->card_wp & MS_CARD) {
1446 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_PROTECT);
1447 TRACE_RET(chip, TRANSPORT_FAILED);
1450 if (!CHK_MSPRO(ms_card)) {
1451 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
1452 TRACE_RET(chip, TRANSPORT_FAILED);
1455 rts51x_prepare_run(chip);
1456 RTS51X_SET_STAT(chip, STAT_RUN);
1458 retval = mspro_format(srb, chip, MS_SHORT_DATA_LEN, quick_format);
1459 if (retval != STATUS_SUCCESS) {
1460 set_sense_type(chip, lun, SENSE_TYPE_FORMAT_CMD_FAILED);
1461 TRACE_RET(chip, TRANSPORT_FAILED);
1464 scsi_set_resid(srb, 0);
1465 return TRANSPORT_GOOD;
1468 #ifdef SUPPORT_PCGL_1P18
1469 int get_ms_information(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1471 struct ms_info *ms_card = &(chip->ms_card);
1472 unsigned int lun = SCSI_LUN(srb);
1473 u8 dev_info_id, data_len;
1475 unsigned int buf_len;
1478 if (!check_card_ready(chip, lun)) {
1479 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
1480 TRACE_RET(chip, TRANSPORT_FAILED);
1482 if ((get_lun_card(chip, lun) != MS_CARD)) {
1483 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
1484 TRACE_RET(chip, TRANSPORT_FAILED);
1487 if ((srb->cmnd[2] != 0xB0) || (srb->cmnd[4] != 0x4D) ||
1488 (srb->cmnd[5] != 0x53) || (srb->cmnd[6] != 0x49) ||
1489 (srb->cmnd[7] != 0x44)) {
1490 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1491 TRACE_RET(chip, TRANSPORT_FAILED);
1494 dev_info_id = srb->cmnd[3];
1495 if ((CHK_MSXC(ms_card) && (dev_info_id == 0x10)) ||
1496 (!CHK_MSXC(ms_card) && (dev_info_id == 0x13)) ||
1497 !CHK_MSPRO(ms_card)) {
1498 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1499 TRACE_RET(chip, TRANSPORT_FAILED);
1502 if (dev_info_id == 0x15)
1503 buf_len = data_len = 0x3A;
1505 buf_len = data_len = 0x6A;
1507 buf = kmalloc(buf_len, GFP_KERNEL);
1509 TRACE_RET(chip, TRANSPORT_ERROR);
1512 /* GET Memory Stick Media Information Response Header */
1513 buf[i++] = 0x00; /* Data length MSB */
1514 buf[i++] = data_len; /* Data length LSB */
1515 /* Device Information Type Code */
1516 if (CHK_MSXC(ms_card))
1526 /* Number of Device Information */
1529 /* Device Information Body
1530 * Device Information ID Number */
1531 buf[i++] = dev_info_id;
1532 /* Device Information Length */
1533 if (dev_info_id == 0x15)
1537 buf[i++] = 0x00; /* Data length MSB */
1538 buf[i++] = data_len; /* Data length LSB */
1541 if ((dev_info_id == 0x10) || (dev_info_id == 0x13)) {
1542 /* System Information */
1543 memcpy(buf + i, ms_card->raw_sys_info, 96);
1546 memcpy(buf + i, ms_card->raw_model_name, 48);
1549 rts51x_set_xfer_buf(buf, buf_len, srb);
1551 if (dev_info_id == 0x15)
1552 scsi_set_resid(srb, scsi_bufflen(srb) - 0x3C);
1554 scsi_set_resid(srb, scsi_bufflen(srb) - 0x6C);
1557 return STATUS_SUCCESS;
1561 static int ms_sp_cmnd(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1563 int retval = TRANSPORT_ERROR;
1565 if (srb->cmnd[2] == MS_FORMAT)
1566 retval = ms_format_cmnd(srb, chip);
1567 #ifdef SUPPORT_PCGL_1P18
1568 else if (srb->cmnd[2] == GET_MS_INFORMATION)
1569 retval = get_ms_information(srb, chip);
1576 static int sd_extention_cmnd(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1578 unsigned int lun = SCSI_LUN(srb);
1581 rts51x_prepare_run(chip);
1582 RTS51X_SET_STAT(chip, STAT_RUN);
1584 sd_cleanup_work(chip);
1586 if (!check_card_ready(chip, lun)) {
1587 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
1588 TRACE_RET(chip, TRANSPORT_FAILED);
1590 if ((get_lun_card(chip, lun) != SD_CARD)) {
1591 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
1592 TRACE_RET(chip, TRANSPORT_FAILED);
1595 switch (srb->cmnd[0]) {
1596 case SD_PASS_THRU_MODE:
1597 result = sd_pass_thru_mode(srb, chip);
1600 case SD_EXECUTE_NO_DATA:
1601 result = sd_execute_no_data(srb, chip);
1604 case SD_EXECUTE_READ:
1605 result = sd_execute_read_data(srb, chip);
1608 case SD_EXECUTE_WRITE:
1609 result = sd_execute_write_data(srb, chip);
1613 result = sd_get_cmd_rsp(srb, chip);
1617 result = sd_hw_rst(srb, chip);
1621 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1622 TRACE_RET(chip, TRANSPORT_FAILED);
1629 #ifdef SUPPORT_MAGIC_GATE
1630 int mg_report_key(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1632 struct ms_info *ms_card = &(chip->ms_card);
1633 unsigned int lun = SCSI_LUN(srb);
1637 rts51x_prepare_run(chip);
1638 RTS51X_SET_STAT(chip, STAT_RUN);
1640 ms_cleanup_work(chip);
1642 if (!check_card_ready(chip, lun)) {
1643 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
1644 TRACE_RET(chip, TRANSPORT_FAILED);
1646 if ((get_lun_card(chip, lun) != MS_CARD)) {
1647 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
1648 TRACE_RET(chip, TRANSPORT_FAILED);
1651 if (srb->cmnd[7] != KC_MG_R_PRO) {
1652 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1653 TRACE_RET(chip, TRANSPORT_FAILED);
1656 if (!CHK_MSPRO(ms_card)) {
1657 set_sense_type(chip, lun, SENSE_TYPE_MG_INCOMPATIBLE_MEDIUM);
1658 TRACE_RET(chip, TRANSPORT_FAILED);
1661 key_format = srb->cmnd[10] & 0x3F;
1663 switch (key_format) {
1664 case KF_GET_LOC_EKB:
1665 if ((scsi_bufflen(srb) == 0x41C) &&
1666 (srb->cmnd[8] == 0x04) && (srb->cmnd[9] == 0x1C)) {
1667 retval = mg_get_local_EKB(srb, chip);
1668 if (retval != STATUS_SUCCESS)
1669 TRACE_RET(chip, TRANSPORT_FAILED);
1671 set_sense_type(chip, lun,
1672 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1673 TRACE_RET(chip, TRANSPORT_FAILED);
1678 if ((scsi_bufflen(srb) == 0x24) &&
1679 (srb->cmnd[8] == 0x00) && (srb->cmnd[9] == 0x24)) {
1680 retval = mg_get_rsp_chg(srb, chip);
1681 if (retval != STATUS_SUCCESS)
1682 TRACE_RET(chip, TRANSPORT_FAILED);
1684 set_sense_type(chip, lun,
1685 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1686 TRACE_RET(chip, TRANSPORT_FAILED);
1691 ms_card->mg_entry_num = srb->cmnd[5];
1692 if ((scsi_bufflen(srb) == 0x404) &&
1693 (srb->cmnd[8] == 0x04) &&
1694 (srb->cmnd[9] == 0x04) &&
1695 (srb->cmnd[2] == 0x00) &&
1696 (srb->cmnd[3] == 0x00) &&
1697 (srb->cmnd[4] == 0x00) && (srb->cmnd[5] < 32)) {
1698 retval = mg_get_ICV(srb, chip);
1699 if (retval != STATUS_SUCCESS)
1700 TRACE_RET(chip, TRANSPORT_FAILED);
1702 set_sense_type(chip, lun,
1703 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1704 TRACE_RET(chip, TRANSPORT_FAILED);
1709 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1710 TRACE_RET(chip, TRANSPORT_FAILED);
1713 scsi_set_resid(srb, 0);
1714 return TRANSPORT_GOOD;
1717 int mg_send_key(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1719 struct ms_info *ms_card = &(chip->ms_card);
1720 unsigned int lun = SCSI_LUN(srb);
1724 rts51x_prepare_run(chip);
1725 RTS51X_SET_STAT(chip, STAT_RUN);
1727 ms_cleanup_work(chip);
1729 if (!check_card_ready(chip, lun)) {
1730 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
1731 TRACE_RET(chip, TRANSPORT_FAILED);
1733 if (check_card_wp(chip, lun)) {
1734 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_PROTECT);
1735 TRACE_RET(chip, TRANSPORT_FAILED);
1737 if ((get_lun_card(chip, lun) != MS_CARD)) {
1738 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
1739 TRACE_RET(chip, TRANSPORT_FAILED);
1742 if (srb->cmnd[7] != KC_MG_R_PRO) {
1743 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1744 TRACE_RET(chip, TRANSPORT_FAILED);
1747 if (!CHK_MSPRO(ms_card)) {
1748 set_sense_type(chip, lun, SENSE_TYPE_MG_INCOMPATIBLE_MEDIUM);
1749 TRACE_RET(chip, TRANSPORT_FAILED);
1752 key_format = srb->cmnd[10] & 0x3F;
1754 switch (key_format) {
1755 case KF_SET_LEAF_ID:
1756 if ((scsi_bufflen(srb) == 0x0C) &&
1757 (srb->cmnd[8] == 0x00) && (srb->cmnd[9] == 0x0C)) {
1758 retval = mg_set_leaf_id(srb, chip);
1759 if (retval != STATUS_SUCCESS)
1760 TRACE_RET(chip, TRANSPORT_FAILED);
1762 set_sense_type(chip, lun,
1763 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1764 TRACE_RET(chip, TRANSPORT_FAILED);
1769 if ((scsi_bufflen(srb) == 0x0C) &&
1770 (srb->cmnd[8] == 0x00) && (srb->cmnd[9] == 0x0C)) {
1771 retval = mg_chg(srb, chip);
1772 if (retval != STATUS_SUCCESS)
1773 TRACE_RET(chip, TRANSPORT_FAILED);
1775 set_sense_type(chip, lun,
1776 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1777 TRACE_RET(chip, TRANSPORT_FAILED);
1782 if ((scsi_bufflen(srb) == 0x0C) &&
1783 (srb->cmnd[8] == 0x00) && (srb->cmnd[9] == 0x0C)) {
1784 retval = mg_rsp(srb, chip);
1785 if (retval != STATUS_SUCCESS)
1786 TRACE_RET(chip, TRANSPORT_FAILED);
1788 set_sense_type(chip, lun,
1789 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1790 TRACE_RET(chip, TRANSPORT_FAILED);
1795 ms_card->mg_entry_num = srb->cmnd[5];
1796 if ((scsi_bufflen(srb) == 0x404) &&
1797 (srb->cmnd[8] == 0x04) &&
1798 (srb->cmnd[9] == 0x04) &&
1799 (srb->cmnd[2] == 0x00) &&
1800 (srb->cmnd[3] == 0x00) &&
1801 (srb->cmnd[4] == 0x00) && (srb->cmnd[5] < 32)) {
1802 retval = mg_set_ICV(srb, chip);
1803 if (retval != STATUS_SUCCESS)
1804 TRACE_RET(chip, TRANSPORT_FAILED);
1806 set_sense_type(chip, lun,
1807 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1808 TRACE_RET(chip, TRANSPORT_FAILED);
1813 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1814 TRACE_RET(chip, TRANSPORT_FAILED);
1817 scsi_set_resid(srb, 0);
1818 return TRANSPORT_GOOD;
1822 int rts51x_scsi_handler(struct scsi_cmnd *srb, struct rts51x_chip *chip)
1824 struct ms_info *ms_card = &(chip->ms_card);
1825 unsigned int lun = SCSI_LUN(srb);
1826 int result = TRANSPORT_GOOD;
1828 if ((get_lun_card(chip, lun) == MS_CARD) &&
1829 (ms_card->format_status == FORMAT_IN_PROGRESS)) {
1830 if ((srb->cmnd[0] != REQUEST_SENSE)
1831 && (srb->cmnd[0] != INQUIRY)) {
1832 /* Logical Unit Not Ready Format in Progress */
1833 set_sense_data(chip, lun, CUR_ERR, 0x02, 0, 0x04, 0x04,
1834 0, (u16) (ms_card->progress));
1835 TRACE_RET(chip, TRANSPORT_FAILED);
1839 switch (srb->cmnd[0]) {
1844 result = read_write(srb, chip);
1847 case TEST_UNIT_READY:
1848 result = test_unit_ready(srb, chip);
1852 result = inquiry(srb, chip);
1856 result = read_capacity(srb, chip);
1860 result = start_stop_unit(srb, chip);
1863 case ALLOW_MEDIUM_REMOVAL:
1864 result = allow_medium_removal(srb, chip);
1868 result = request_sense(srb, chip);
1873 result = mode_sense(srb, chip);
1877 result = read_format_capacity(srb, chip);
1881 result = vendor_cmnd(srb, chip);
1885 result = ms_sp_cmnd(srb, chip);
1889 case SD_PASS_THRU_MODE:
1890 case SD_EXECUTE_NO_DATA:
1891 case SD_EXECUTE_READ:
1892 case SD_EXECUTE_WRITE:
1895 result = sd_extention_cmnd(srb, chip);
1899 #ifdef SUPPORT_MAGIC_GATE
1900 case CMD_MSPRO_MG_RKEY:
1901 result = mg_report_key(srb, chip);
1904 case CMD_MSPRO_MG_SKEY:
1905 result = mg_send_key(srb, chip);
1912 result = TRANSPORT_GOOD;
1916 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1917 result = TRANSPORT_FAILED;
1923 /***********************************************************************
1925 ***********************************************************************/
1927 const char *host_info(struct Scsi_Host *host)
1929 return "SCSI emulation for RTS51xx USB driver-based card reader";
1932 int slave_alloc(struct scsi_device *sdev)
1935 * Set the INQUIRY transfer length to 36. We don't use any of
1936 * the extra data and many devices choke if asked for more or
1937 * less than 36 bytes.
1939 sdev->inquiry_len = 36;
1943 int slave_configure(struct scsi_device *sdev)
1945 /* Scatter-gather buffers (all but the last) must have a length
1946 * divisible by the bulk maxpacket size. Otherwise a data packet
1947 * would end up being short, causing a premature end to the data
1948 * transfer. Since high-speed bulk pipes have a maxpacket size
1949 * of 512, we'll use that as the scsi device queue's DMA alignment
1950 * mask. Guaranteeing proper alignment of the first buffer will
1951 * have the desired effect because, except at the beginning and
1952 * the end, scatter-gather buffers follow page boundaries. */
1953 blk_queue_dma_alignment(sdev->request_queue, (512 - 1));
1955 /* Set the SCSI level to at least 2. We'll leave it at 3 if that's
1956 * what is originally reported. We need this to avoid confusing
1957 * the SCSI layer with devices that report 0 or 1, but need 10-byte
1958 * commands (ala ATAPI devices behind certain bridges, or devices
1959 * which simply have broken INQUIRY data).
1961 * NOTE: This means /dev/sg programs (ala cdrecord) will get the
1962 * actual information. This seems to be the preference for
1963 * programs like that.
1965 * NOTE: This also means that /proc/scsi/scsi and sysfs may report
1966 * the actual value or the modified one, depending on where the
1969 if (sdev->scsi_level < SCSI_2)
1970 sdev->scsi_level = sdev->sdev_target->scsi_level = SCSI_2;
1975 /***********************************************************************
1976 * /proc/scsi/ functions
1977 ***********************************************************************/
1979 /* we use this macro to help us write into the buffer */
1981 #define SPRINTF(args...) \
1982 do { if (pos < buffer+length) pos += sprintf(pos, ## args); } while (0)
1984 int proc_info(struct Scsi_Host *host, char *buffer,
1985 char **start, off_t offset, int length, int inout)
1989 /* if someone is sending us data, just throw it away */
1993 /* print the controller name */
1994 SPRINTF(" Host scsi%d: %s\n", host->host_no, RTS51X_NAME);
1996 /* print product, vendor, and driver version strings */
1997 SPRINTF(" Vendor: Realtek Corp.\n");
1998 SPRINTF(" Product: RTS51xx USB Card Reader\n");
1999 SPRINTF(" Version: %s\n", DRIVER_VERSION);
2000 SPRINTF(" Build: %s\n", __TIME__);
2003 * Calculate start of next buffer, and return value.
2005 *start = buffer + offset;
2007 if ((pos - buffer) < offset)
2009 else if ((pos - buffer - offset) < length)
2010 return pos - buffer - offset;
2015 /* queue a command */
2016 /* This is always called with scsi_lock(host) held */
2017 int queuecommand_lck(struct scsi_cmnd *srb, void (*done) (struct scsi_cmnd *))
2019 struct rts51x_chip *chip = host_to_rts51x(srb->device->host);
2021 /* check for state-transition errors */
2022 if (chip->srb != NULL) {
2023 RTS51X_DEBUGP("Error in %s: chip->srb = %p\n",
2024 __func__, chip->srb);
2025 return SCSI_MLQUEUE_HOST_BUSY;
2028 /* fail the command if we are disconnecting */
2029 if (test_bit(FLIDX_DISCONNECTING, &chip->usb->dflags)) {
2030 RTS51X_DEBUGP("Fail command during disconnect\n");
2031 srb->result = DID_NO_CONNECT << 16;
2036 /* enqueue the command and wake up the control thread */
2037 srb->scsi_done = done;
2039 complete(&chip->usb->cmnd_ready);
2044 DEF_SCSI_QCMD(queuecommand)
2045 /***********************************************************************
2046 * Error handling functions
2047 ***********************************************************************/
2048 /* Command timeout and abort */
2049 int command_abort(struct scsi_cmnd *srb)
2051 struct rts51x_chip *chip = host_to_rts51x(srb->device->host);
2053 RTS51X_DEBUGP("%s called\n", __func__);
2055 /* us->srb together with the TIMED_OUT, RESETTING, and ABORTING
2056 * bits are protected by the host lock. */
2057 scsi_lock(rts51x_to_host(chip));
2059 /* Is this command still active? */
2060 if (chip->srb != srb) {
2061 scsi_unlock(rts51x_to_host(chip));
2062 RTS51X_DEBUGP("-- nothing to abort\n");
2066 /* Set the TIMED_OUT bit. Also set the ABORTING bit, but only if
2067 * a device reset isn't already in progress (to avoid interfering
2068 * with the reset). Note that we must retain the host lock while
2069 * calling usb_stor_stop_transport(); otherwise it might interfere
2070 * with an auto-reset that begins as soon as we release the lock. */
2071 set_bit(FLIDX_TIMED_OUT, &chip->usb->dflags);
2072 if (!test_bit(FLIDX_RESETTING, &chip->usb->dflags)) {
2073 set_bit(FLIDX_ABORTING, &chip->usb->dflags);
2074 /* rts51x_stop_transport(us); */
2076 scsi_unlock(rts51x_to_host(chip));
2078 /* Wait for the aborted command to finish */
2079 wait_for_completion(&chip->usb->notify);
2083 /* This invokes the transport reset mechanism to reset the state of the
2085 int device_reset(struct scsi_cmnd *srb)
2089 RTS51X_DEBUGP("%s called\n", __func__);
2091 return result < 0 ? FAILED : SUCCESS;
2094 /* Simulate a SCSI bus reset by resetting the device's USB port. */
2095 int bus_reset(struct scsi_cmnd *srb)
2099 RTS51X_DEBUGP("%s called\n", __func__);
2101 return result < 0 ? FAILED : SUCCESS;
2104 static const char *rts5139_info(struct Scsi_Host *host)
2106 return "SCSI emulation for RTS5139 USB card reader";
2109 struct scsi_host_template rts51x_host_template = {
2110 /* basic userland interface stuff */
2111 .name = RTS51X_NAME,
2112 .proc_name = RTS51X_NAME,
2113 .proc_info = proc_info,
2114 .info = rts5139_info,
2116 /* command interface -- queued only */
2117 .queuecommand = queuecommand,
2119 /* error and abort handlers */
2120 .eh_abort_handler = command_abort,
2121 .eh_device_reset_handler = device_reset,
2122 .eh_bus_reset_handler = bus_reset,
2124 /* queue commands only, only one command per LUN */
2128 /* unknown initiator id */
2131 .slave_alloc = slave_alloc,
2132 .slave_configure = slave_configure,
2134 /* lots of sg segments can be handled */
2135 .sg_tablesize = SG_ALL,
2137 /* limit the total size of a transfer to 120 KB */
2140 /* merge commands... this seems to help performance, but
2141 * periodically someone should test to see which setting is more
2144 .use_clustering = 1,
2149 /* we do our own delay after a device or bus reset */
2150 .skip_settle_delay = 1,
2152 /* sysfs device attributes */
2153 /* .sdev_attrs = sysfs_device_attr_list, */
2155 /* module management */
2156 .module = THIS_MODULE