1 /* Driver for Realtek PCI-Express card reader
3 * Copyright(c) 2009-2013 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 * Wei WANG (wei_wang@realsil.com.cn)
20 * Micky Ching (micky_ching@realsil.com.cn)
23 #include <linux/blkdev.h>
24 #include <linux/kthread.h>
25 #include <linux/sched.h>
26 #include <linux/vmalloc.h>
33 void scsi_show_command(struct rtsx_chip *chip)
35 struct scsi_cmnd *srb = chip->srb;
37 bool unknown_cmd = false;
40 switch (srb->cmnd[0]) {
42 what = "TEST_UNIT_READY";
48 what = "REQUEST_SENSE";
53 case READ_BLOCK_LIMITS:
54 what = "READ_BLOCK_LIMITS";
57 what = "REASSIGN_BLOCKS";
69 what = "READ_REVERSE";
72 what = "WRITE_FILEMARKS";
80 case RECOVER_BUFFERED_DATA:
81 what = "RECOVER_BUFFERED_DATA";
104 case RECEIVE_DIAGNOSTIC:
105 what = "RECEIVE_DIAGNOSTIC";
107 case SEND_DIAGNOSTIC:
108 what = "SEND_DIAGNOSTIC";
110 case ALLOW_MEDIUM_REMOVAL:
111 what = "ALLOW_MEDIUM_REMOVAL";
117 what = "READ_CAPACITY";
129 what = "WRITE_VERIFY";
135 what = "SEARCH_HIGH";
138 what = "SEARCH_EQUAL";
147 what = "READ_POSITION";
149 case SYNCHRONIZE_CACHE:
150 what = "SYNCHRONIZE_CACHE";
152 case LOCK_UNLOCK_CACHE:
153 what = "LOCK_UNLOCK_CACHE";
155 case READ_DEFECT_DATA:
156 what = "READ_DEFECT_DATA";
159 what = "MEDIUM_SCAN";
165 what = "COPY_VERIFY";
168 what = "WRITE_BUFFER";
171 what = "READ_BUFFER";
174 what = "UPDATE_BLOCK";
182 case CHANGE_DEFINITION:
183 what = "CHANGE_DEFINITION";
188 case GPCMD_READ_SUBCHANNEL:
189 what = "READ SUBCHANNEL";
194 case GPCMD_READ_HEADER:
195 what = "READ HEADER";
197 case GPCMD_PLAY_AUDIO_10:
198 what = "PLAY AUDIO (10)";
200 case GPCMD_PLAY_AUDIO_MSF:
201 what = "PLAY AUDIO MSF";
203 case GPCMD_GET_EVENT_STATUS_NOTIFICATION:
204 what = "GET EVENT/STATUS NOTIFICATION";
206 case GPCMD_PAUSE_RESUME:
207 what = "PAUSE/RESUME";
215 case GPCMD_STOP_PLAY_SCAN:
216 what = "STOP PLAY/SCAN";
218 case GPCMD_READ_DISC_INFO:
219 what = "READ DISC INFORMATION";
221 case GPCMD_READ_TRACK_RZONE_INFO:
222 what = "READ TRACK INFORMATION";
224 case GPCMD_RESERVE_RZONE_TRACK:
225 what = "RESERVE TRACK";
231 what = "MODE_SELECT_10";
233 case GPCMD_REPAIR_RZONE_TRACK:
234 what = "REPAIR TRACK";
237 what = "READ MASTER CUE";
240 what = "MODE_SENSE_10";
242 case GPCMD_CLOSE_TRACK:
243 what = "CLOSE TRACK/SESSION";
246 what = "READ BUFFER CAPACITY";
249 what = "SEND CUE SHEET";
255 what = "REPORT LUNS";
258 what = "MOVE_MEDIUM or PLAY AUDIO (12)";
266 case WRITE_VERIFY_12:
267 what = "WRITE_VERIFY_12";
270 what = "SEARCH_HIGH_12";
272 case SEARCH_EQUAL_12:
273 what = "SEARCH_EQUAL_12";
276 what = "SEARCH_LOW_12";
278 case SEND_VOLUME_TAG:
279 what = "SEND_VOLUME_TAG";
281 case READ_ELEMENT_STATUS:
282 what = "READ_ELEMENT_STATUS";
284 case GPCMD_READ_CD_MSF:
285 what = "READ CD MSF";
290 case GPCMD_SET_SPEED:
291 what = "SET CD SPEED";
293 case GPCMD_MECHANISM_STATUS:
294 what = "MECHANISM STATUS";
300 what = "WRITE CONTINUE";
303 what = "WRITE_LONG_2";
306 what = "Realtek's vendor command";
309 what = "(unknown command)";
314 if (srb->cmnd[0] != TEST_UNIT_READY)
315 dev_dbg(rtsx_dev(chip), "Command %s (%d bytes)\n",
319 len = min_t(unsigned short, srb->cmd_len, 16);
320 dev_dbg(rtsx_dev(chip), "%*ph\n", len, srb->cmnd);
324 void set_sense_type(struct rtsx_chip *chip, unsigned int lun, int sense_type)
326 switch (sense_type) {
327 case SENSE_TYPE_MEDIA_CHANGE:
328 set_sense_data(chip, lun, CUR_ERR, 0x06, 0, 0x28, 0, 0, 0);
331 case SENSE_TYPE_MEDIA_NOT_PRESENT:
332 set_sense_data(chip, lun, CUR_ERR, 0x02, 0, 0x3A, 0, 0, 0);
335 case SENSE_TYPE_MEDIA_LBA_OVER_RANGE:
336 set_sense_data(chip, lun, CUR_ERR, 0x05, 0, 0x21, 0, 0, 0);
339 case SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT:
340 set_sense_data(chip, lun, CUR_ERR, 0x05, 0, 0x25, 0, 0, 0);
343 case SENSE_TYPE_MEDIA_WRITE_PROTECT:
344 set_sense_data(chip, lun, CUR_ERR, 0x07, 0, 0x27, 0, 0, 0);
347 case SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR:
348 set_sense_data(chip, lun, CUR_ERR, 0x03, 0, 0x11, 0, 0, 0);
351 case SENSE_TYPE_MEDIA_WRITE_ERR:
352 set_sense_data(chip, lun, CUR_ERR, 0x03, 0, 0x0C, 0x02, 0, 0);
355 case SENSE_TYPE_MEDIA_INVALID_CMD_FIELD:
356 set_sense_data(chip, lun, CUR_ERR, ILGAL_REQ, 0,
357 ASC_INVLD_CDB, ASCQ_INVLD_CDB, CDB_ILLEGAL, 1);
360 case SENSE_TYPE_FORMAT_IN_PROGRESS:
361 set_sense_data(chip, lun, CUR_ERR, 0x02, 0, 0x04, 0x04, 0, 0);
364 case SENSE_TYPE_FORMAT_CMD_FAILED:
365 set_sense_data(chip, lun, CUR_ERR, 0x03, 0, 0x31, 0x01, 0, 0);
368 #ifdef SUPPORT_MAGIC_GATE
369 case SENSE_TYPE_MG_KEY_FAIL_NOT_ESTAB:
370 set_sense_data(chip, lun, CUR_ERR, 0x05, 0, 0x6F, 0x02, 0, 0);
373 case SENSE_TYPE_MG_KEY_FAIL_NOT_AUTHEN:
374 set_sense_data(chip, lun, CUR_ERR, 0x05, 0, 0x6F, 0x00, 0, 0);
377 case SENSE_TYPE_MG_INCOMPATIBLE_MEDIUM:
378 set_sense_data(chip, lun, CUR_ERR, 0x02, 0, 0x30, 0x00, 0, 0);
381 case SENSE_TYPE_MG_WRITE_ERR:
382 set_sense_data(chip, lun, CUR_ERR, 0x03, 0, 0x0C, 0x00, 0, 0);
386 #ifdef SUPPORT_SD_LOCK
387 case SENSE_TYPE_MEDIA_READ_FORBIDDEN:
388 set_sense_data(chip, lun, CUR_ERR, 0x07, 0, 0x11, 0x13, 0, 0);
392 case SENSE_TYPE_NO_SENSE:
394 set_sense_data(chip, lun, CUR_ERR, 0, 0, 0, 0, 0, 0);
399 void set_sense_data(struct rtsx_chip *chip, unsigned int lun, u8 err_code,
400 u8 sense_key, u32 info, u8 asc, u8 ascq, u8 sns_key_info0,
403 struct sense_data_t *sense = &(chip->sense_buffer[lun]);
405 sense->err_code = err_code;
406 sense->sense_key = sense_key;
407 sense->info[0] = (u8)(info >> 24);
408 sense->info[1] = (u8)(info >> 16);
409 sense->info[2] = (u8)(info >> 8);
410 sense->info[3] = (u8)info;
412 sense->ad_sense_len = sizeof(struct sense_data_t) - 8;
415 if (sns_key_info0 != 0) {
416 sense->sns_key_info[0] = SKSV | sns_key_info0;
417 sense->sns_key_info[1] = (sns_key_info1 & 0xf0) >> 8;
418 sense->sns_key_info[2] = sns_key_info1 & 0x0f;
422 static int test_unit_ready(struct scsi_cmnd *srb, struct rtsx_chip *chip)
424 unsigned int lun = SCSI_LUN(srb);
426 if (!check_card_ready(chip, lun)) {
427 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
428 return TRANSPORT_FAILED;
431 if (!(CHK_BIT(chip->lun_mc, lun))) {
432 SET_BIT(chip->lun_mc, lun);
433 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
434 return TRANSPORT_FAILED;
437 #ifdef SUPPORT_SD_LOCK
438 if (get_lun_card(chip, SCSI_LUN(srb)) == SD_CARD) {
439 struct sd_info *sd_card = &(chip->sd_card);
441 if (sd_card->sd_lock_notify) {
442 sd_card->sd_lock_notify = 0;
443 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
444 return TRANSPORT_FAILED;
445 } else if (sd_card->sd_lock_status & SD_LOCKED) {
446 set_sense_type(chip, lun,
447 SENSE_TYPE_MEDIA_READ_FORBIDDEN);
448 return TRANSPORT_FAILED;
453 return TRANSPORT_GOOD;
456 static unsigned char formatter_inquiry_str[20] = {
457 'M', 'E', 'M', 'O', 'R', 'Y', 'S', 'T', 'I', 'C', 'K',
458 #ifdef SUPPORT_MAGIC_GATE
459 '-', 'M', 'G', /* Byte[47:49] */
461 0x20, 0x20, 0x20, /* Byte[47:49] */
464 #ifdef SUPPORT_MAGIC_GATE
465 0x0B, /* Byte[50]: MG, MS, MSPro, MSXC */
467 0x09, /* Byte[50]: MS, MSPro, MSXC */
469 0x00, /* Byte[51]: Category Specific Commands */
470 0x00, /* Byte[52]: Access Control and feature */
471 0x20, 0x20, 0x20, /* Byte[53:55] */
474 static int inquiry(struct scsi_cmnd *srb, struct rtsx_chip *chip)
476 unsigned int lun = SCSI_LUN(srb);
477 char *inquiry_default = (char *)"Generic-xD/SD/M.S. 1.00 ";
478 char *inquiry_sdms = (char *)"Generic-SD/MemoryStick 1.00 ";
479 char *inquiry_sd = (char *)"Generic-SD/MMC 1.00 ";
480 char *inquiry_ms = (char *)"Generic-MemoryStick 1.00 ";
481 char *inquiry_string;
482 unsigned char sendbytes;
484 u8 card = get_lun_card(chip, lun);
485 bool pro_formatter_flag = false;
486 unsigned char inquiry_buf[] = {
487 QULIFIRE | DRCT_ACCESS_DEV,
494 REL_ADR | WBUS_32 | WBUS_16 | SYNC | LINKED | CMD_QUE | SFT_RE,
497 if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
498 if (chip->lun2card[lun] == SD_CARD)
499 inquiry_string = inquiry_sd;
501 inquiry_string = inquiry_ms;
503 } else if (CHECK_LUN_MODE(chip, SD_MS_1LUN)) {
504 inquiry_string = inquiry_sdms;
506 inquiry_string = inquiry_default;
509 buf = vmalloc(scsi_bufflen(srb));
512 return TRANSPORT_ERROR;
515 #ifdef SUPPORT_MAGIC_GATE
516 if ((chip->mspro_formatter_enable) &&
517 (chip->lun2card[lun] & MS_CARD))
519 if (chip->mspro_formatter_enable)
521 if (!card || (card == MS_CARD))
522 pro_formatter_flag = true;
524 if (pro_formatter_flag) {
525 if (scsi_bufflen(srb) < 56)
526 sendbytes = (unsigned char)(scsi_bufflen(srb));
531 if (scsi_bufflen(srb) < 36)
532 sendbytes = (unsigned char)(scsi_bufflen(srb));
538 memcpy(buf, inquiry_buf, 8);
539 memcpy(buf + 8, inquiry_string, sendbytes - 8);
540 if (pro_formatter_flag) {
541 /* Additional Length */
545 memcpy(buf, inquiry_buf, sendbytes);
548 if (pro_formatter_flag) {
550 memcpy(buf + 36, formatter_inquiry_str, sendbytes - 36);
553 scsi_set_resid(srb, 0);
555 rtsx_stor_set_xfer_buf(buf, scsi_bufflen(srb), srb);
558 return TRANSPORT_GOOD;
561 static int start_stop_unit(struct scsi_cmnd *srb, struct rtsx_chip *chip)
563 unsigned int lun = SCSI_LUN(srb);
565 scsi_set_resid(srb, scsi_bufflen(srb));
567 if (srb->cmnd[1] == 1)
568 return TRANSPORT_GOOD;
570 switch (srb->cmnd[0x4]) {
573 return TRANSPORT_GOOD;
576 /* Media shall be unload */
577 if (check_card_ready(chip, lun))
578 eject_card(chip, lun);
579 return TRANSPORT_GOOD;
581 case MAKE_MEDIUM_READY:
583 if (check_card_ready(chip, lun))
584 return TRANSPORT_GOOD;
585 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
587 return TRANSPORT_FAILED;
593 return TRANSPORT_ERROR;
596 static int allow_medium_removal(struct scsi_cmnd *srb, struct rtsx_chip *chip)
600 prevent = srb->cmnd[4] & 0x1;
602 scsi_set_resid(srb, 0);
605 set_sense_type(chip, SCSI_LUN(srb),
606 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
608 return TRANSPORT_FAILED;
611 return TRANSPORT_GOOD;
614 static int request_sense(struct scsi_cmnd *srb, struct rtsx_chip *chip)
616 struct sense_data_t *sense;
617 unsigned int lun = SCSI_LUN(srb);
618 struct ms_info *ms_card = &(chip->ms_card);
619 unsigned char *tmp, *buf;
621 sense = &(chip->sense_buffer[lun]);
623 if ((get_lun_card(chip, lun) == MS_CARD) &&
624 ms_card->pro_under_formatting) {
625 if (ms_card->format_status == FORMAT_SUCCESS) {
626 set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
627 ms_card->pro_under_formatting = 0;
628 ms_card->progress = 0;
629 } else if (ms_card->format_status == FORMAT_IN_PROGRESS) {
630 /* Logical Unit Not Ready Format in Progress */
631 set_sense_data(chip, lun, CUR_ERR, 0x02, 0, 0x04, 0x04,
632 0, (u16)(ms_card->progress));
634 /* Format Command Failed */
635 set_sense_type(chip, lun, SENSE_TYPE_FORMAT_CMD_FAILED);
636 ms_card->pro_under_formatting = 0;
637 ms_card->progress = 0;
640 rtsx_set_stat(chip, RTSX_STAT_RUN);
643 buf = vmalloc(scsi_bufflen(srb));
646 return TRANSPORT_ERROR;
649 tmp = (unsigned char *)sense;
650 memcpy(buf, tmp, scsi_bufflen(srb));
652 rtsx_stor_set_xfer_buf(buf, scsi_bufflen(srb), srb);
655 scsi_set_resid(srb, 0);
656 /* Reset Sense Data */
657 set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
658 return TRANSPORT_GOOD;
661 static void ms_mode_sense(struct rtsx_chip *chip, u8 cmd,
662 int lun, u8 *buf, int buf_len)
664 struct ms_info *ms_card = &(chip->ms_card);
666 int data_size = buf_len;
667 bool support_format = false;
670 if (cmd == MODE_SENSE) {
672 if (data_size > 0x68)
675 buf[i++] = 0x67; /* Mode Data Length */
677 sys_info_offset = 12;
678 if (data_size > 0x6C)
681 buf[i++] = 0x00; /* Mode Data Length (MSB) */
682 buf[i++] = 0x6A; /* Mode Data Length (LSB) */
685 /* Medium Type Code */
686 if (check_card_ready(chip, lun)) {
687 if (CHK_MSXC(ms_card)) {
688 support_format = true;
690 } else if (CHK_MSPRO(ms_card)) {
691 support_format = true;
698 if (check_card_wp(chip, lun))
704 buf[i++] = 0x00; /* MediaType */
705 buf[i++] = 0x00; /* WP */
708 buf[i++] = 0x00; /* Reserved */
710 if (cmd == MODE_SENSE_10) {
711 buf[i++] = 0x00; /* Reserved */
712 buf[i++] = 0x00; /* Block descriptor length(MSB) */
713 buf[i++] = 0x00; /* Block descriptor length(LSB) */
715 /* The Following Data is the content of "Page 0x20" */
717 buf[i++] = 0x20; /* Page Code */
719 buf[i++] = 0x62; /* Page Length */
721 buf[i++] = 0x00; /* No Access Control */
722 if (data_size >= 12) {
724 buf[i++] = 0xC0; /* SF, SGM */
729 /* The Following Data is the content of "Page 0x20" */
731 buf[i++] = 0x20; /* Page Code */
733 buf[i++] = 0x62; /* Page Length */
735 buf[i++] = 0x00; /* No Access Control */
736 if (data_size >= 8) {
738 buf[i++] = 0xC0; /* SF, SGM */
744 if (data_size > sys_info_offset) {
745 /* 96 Bytes Attribute Data */
746 int len = data_size - sys_info_offset;
748 len = (len < 96) ? len : 96;
750 memcpy(buf + sys_info_offset, ms_card->raw_sys_info, len);
754 static int mode_sense(struct scsi_cmnd *srb, struct rtsx_chip *chip)
756 unsigned int lun = SCSI_LUN(srb);
757 unsigned int dataSize;
759 bool pro_formatter_flag;
760 unsigned char pageCode, *buf;
761 u8 card = get_lun_card(chip, lun);
763 #ifndef SUPPORT_MAGIC_GATE
764 if (!check_card_ready(chip, lun)) {
765 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
766 scsi_set_resid(srb, scsi_bufflen(srb));
768 return TRANSPORT_FAILED;
772 pro_formatter_flag = false;
774 #ifdef SUPPORT_MAGIC_GATE
775 if ((chip->lun2card[lun] & MS_CARD)) {
776 if (!card || (card == MS_CARD)) {
778 if (chip->mspro_formatter_enable)
779 pro_formatter_flag = true;
783 if (card == MS_CARD) {
784 if (chip->mspro_formatter_enable) {
785 pro_formatter_flag = true;
791 buf = kmalloc(dataSize, GFP_KERNEL);
794 return TRANSPORT_ERROR;
797 pageCode = srb->cmnd[2] & 0x3f;
799 if ((pageCode == 0x3F) || (pageCode == 0x1C) ||
800 (pageCode == 0x00) ||
801 (pro_formatter_flag && (pageCode == 0x20))) {
802 if (srb->cmnd[0] == MODE_SENSE) {
803 if ((pageCode == 0x3F) || (pageCode == 0x20)) {
804 ms_mode_sense(chip, srb->cmnd[0],
810 if (check_card_wp(chip, lun))
818 if ((pageCode == 0x3F) || (pageCode == 0x20)) {
819 ms_mode_sense(chip, srb->cmnd[0],
826 if (check_card_wp(chip, lun))
836 status = TRANSPORT_GOOD;
838 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
839 scsi_set_resid(srb, scsi_bufflen(srb));
840 status = TRANSPORT_FAILED;
843 if (status == TRANSPORT_GOOD) {
844 unsigned int len = min_t(unsigned int, scsi_bufflen(srb),
846 rtsx_stor_set_xfer_buf(buf, len, srb);
847 scsi_set_resid(srb, scsi_bufflen(srb) - len);
854 static int read_write(struct scsi_cmnd *srb, struct rtsx_chip *chip)
856 #ifdef SUPPORT_SD_LOCK
857 struct sd_info *sd_card = &(chip->sd_card);
859 unsigned int lun = SCSI_LUN(srb);
864 rtsx_disable_aspm(chip);
866 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
870 rtsx_set_stat(chip, RTSX_STAT_RUN);
872 if (!check_card_ready(chip, lun) || (get_card_size(chip, lun) == 0)) {
873 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
875 return TRANSPORT_FAILED;
878 if (!(CHK_BIT(chip->lun_mc, lun))) {
879 SET_BIT(chip->lun_mc, lun);
880 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
881 return TRANSPORT_FAILED;
884 #ifdef SUPPORT_SD_LOCK
885 if (sd_card->sd_erase_status) {
886 /* Accessing to any card is forbidden
887 * until the erase procedure of SD is completed
889 dev_dbg(rtsx_dev(chip), "SD card being erased!\n");
890 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_READ_FORBIDDEN);
892 return TRANSPORT_FAILED;
895 if (get_lun_card(chip, lun) == SD_CARD) {
896 if (sd_card->sd_lock_status & SD_LOCKED) {
897 dev_dbg(rtsx_dev(chip), "SD card locked!\n");
898 set_sense_type(chip, lun,
899 SENSE_TYPE_MEDIA_READ_FORBIDDEN);
901 return TRANSPORT_FAILED;
906 if ((srb->cmnd[0] == READ_10) || (srb->cmnd[0] == WRITE_10)) {
907 start_sec = ((u32)srb->cmnd[2] << 24) |
908 ((u32)srb->cmnd[3] << 16) |
909 ((u32)srb->cmnd[4] << 8) | ((u32)srb->cmnd[5]);
910 sec_cnt = ((u16)(srb->cmnd[7]) << 8) | srb->cmnd[8];
911 } else if ((srb->cmnd[0] == READ_6) || (srb->cmnd[0] == WRITE_6)) {
912 start_sec = ((u32)(srb->cmnd[1] & 0x1F) << 16) |
913 ((u32)srb->cmnd[2] << 8) | ((u32)srb->cmnd[3]);
914 sec_cnt = srb->cmnd[4];
917 } else if ((srb->cmnd[0] == VENDOR_CMND) &&
918 (srb->cmnd[1] == SCSI_APP_CMD) &&
919 ((srb->cmnd[2] == PP_READ10) || (srb->cmnd[2] == PP_WRITE10))) {
920 start_sec = ((u32)srb->cmnd[4] << 24) |
921 ((u32)srb->cmnd[5] << 16) |
922 ((u32)srb->cmnd[6] << 8) | ((u32)srb->cmnd[7]);
923 sec_cnt = ((u16)(srb->cmnd[9]) << 8) | srb->cmnd[10];
925 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
927 return TRANSPORT_FAILED;
930 /* In some test, we will receive a start_sec like 0xFFFFFFFF.
931 * In this situation, start_sec + sec_cnt will overflow, so we
932 * need to judge start_sec at first
934 if ((start_sec > get_card_size(chip, lun)) ||
935 ((start_sec + sec_cnt) > get_card_size(chip, lun))) {
936 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LBA_OVER_RANGE);
938 return TRANSPORT_FAILED;
942 scsi_set_resid(srb, 0);
943 return TRANSPORT_GOOD;
946 if (chip->rw_fail_cnt[lun] == 3) {
947 dev_dbg(rtsx_dev(chip), "read/write fail three times in succession\n");
948 if (srb->sc_data_direction == DMA_FROM_DEVICE)
949 set_sense_type(chip, lun,
950 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
952 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_ERR);
955 return TRANSPORT_FAILED;
958 if (srb->sc_data_direction == DMA_TO_DEVICE) {
959 if (check_card_wp(chip, lun)) {
960 dev_dbg(rtsx_dev(chip), "Write protected card!\n");
961 set_sense_type(chip, lun,
962 SENSE_TYPE_MEDIA_WRITE_PROTECT);
964 return TRANSPORT_FAILED;
968 retval = card_rw(srb, chip, start_sec, sec_cnt);
969 if (retval != STATUS_SUCCESS) {
970 if (chip->need_release & chip->lun2card[lun]) {
971 chip->rw_fail_cnt[lun] = 0;
972 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
974 chip->rw_fail_cnt[lun]++;
975 if (srb->sc_data_direction == DMA_FROM_DEVICE)
976 set_sense_type(chip, lun,
977 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
979 set_sense_type(chip, lun,
980 SENSE_TYPE_MEDIA_WRITE_ERR);
982 retval = TRANSPORT_FAILED;
986 chip->rw_fail_cnt[lun] = 0;
987 retval = TRANSPORT_GOOD;
990 scsi_set_resid(srb, 0);
996 static int read_format_capacity(struct scsi_cmnd *srb, struct rtsx_chip *chip)
999 unsigned int lun = SCSI_LUN(srb);
1000 unsigned int buf_len;
1001 u8 card = get_lun_card(chip, lun);
1006 if (!check_card_ready(chip, lun)) {
1007 if (!chip->mspro_formatter_enable) {
1008 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
1010 return TRANSPORT_FAILED;
1014 buf_len = (scsi_bufflen(srb) > 12) ? 0x14 : 12;
1016 buf = kmalloc(buf_len, GFP_KERNEL);
1019 return TRANSPORT_ERROR;
1026 /* Capacity List Length */
1027 if ((buf_len > 12) && chip->mspro_formatter_enable &&
1028 (chip->lun2card[lun] & MS_CARD) &&
1029 (!card || (card == MS_CARD))) {
1038 if (check_card_ready(chip, lun)) {
1039 card_size = get_card_size(chip, lun);
1040 buf[i++] = (unsigned char)(card_size >> 24);
1041 buf[i++] = (unsigned char)(card_size >> 16);
1042 buf[i++] = (unsigned char)(card_size >> 8);
1043 buf[i++] = (unsigned char)card_size;
1068 buf_len = min_t(unsigned int, scsi_bufflen(srb), buf_len);
1069 rtsx_stor_set_xfer_buf(buf, buf_len, srb);
1072 scsi_set_resid(srb, scsi_bufflen(srb) - buf_len);
1074 return TRANSPORT_GOOD;
1077 static int read_capacity(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1080 unsigned int lun = SCSI_LUN(srb);
1083 if (!check_card_ready(chip, lun)) {
1084 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
1086 return TRANSPORT_FAILED;
1089 if (!(CHK_BIT(chip->lun_mc, lun))) {
1090 SET_BIT(chip->lun_mc, lun);
1091 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
1092 return TRANSPORT_FAILED;
1095 buf = kmalloc(8, GFP_KERNEL);
1098 return TRANSPORT_ERROR;
1101 card_size = get_card_size(chip, lun);
1102 buf[0] = (unsigned char)((card_size - 1) >> 24);
1103 buf[1] = (unsigned char)((card_size - 1) >> 16);
1104 buf[2] = (unsigned char)((card_size - 1) >> 8);
1105 buf[3] = (unsigned char)(card_size - 1);
1112 rtsx_stor_set_xfer_buf(buf, scsi_bufflen(srb), srb);
1115 scsi_set_resid(srb, 0);
1117 return TRANSPORT_GOOD;
1120 static int read_eeprom(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1122 unsigned short len, i;
1126 rtsx_disable_aspm(chip);
1128 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1132 rtsx_set_stat(chip, RTSX_STAT_RUN);
1134 len = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5];
1139 return TRANSPORT_ERROR;
1142 retval = rtsx_force_power_on(chip, SSC_PDCTL);
1143 if (retval != STATUS_SUCCESS) {
1145 set_sense_type(chip, SCSI_LUN(srb),
1146 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1148 return TRANSPORT_FAILED;
1151 for (i = 0; i < len; i++) {
1152 retval = spi_read_eeprom(chip, i, buf + i);
1153 if (retval != STATUS_SUCCESS) {
1155 set_sense_type(chip, SCSI_LUN(srb),
1156 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1158 return TRANSPORT_FAILED;
1162 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb), len);
1163 rtsx_stor_set_xfer_buf(buf, len, srb);
1164 scsi_set_resid(srb, scsi_bufflen(srb) - len);
1168 return TRANSPORT_GOOD;
1171 static int write_eeprom(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1173 unsigned short len, i;
1177 rtsx_disable_aspm(chip);
1179 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1183 rtsx_set_stat(chip, RTSX_STAT_RUN);
1185 len = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5];
1187 retval = rtsx_force_power_on(chip, SSC_PDCTL);
1188 if (retval != STATUS_SUCCESS) {
1189 set_sense_type(chip, SCSI_LUN(srb), SENSE_TYPE_MEDIA_WRITE_ERR);
1191 return TRANSPORT_FAILED;
1195 retval = spi_erase_eeprom_chip(chip);
1196 if (retval != STATUS_SUCCESS) {
1197 set_sense_type(chip, SCSI_LUN(srb),
1198 SENSE_TYPE_MEDIA_WRITE_ERR);
1200 return TRANSPORT_FAILED;
1203 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb),
1208 return TRANSPORT_ERROR;
1211 rtsx_stor_get_xfer_buf(buf, len, srb);
1212 scsi_set_resid(srb, scsi_bufflen(srb) - len);
1214 for (i = 0; i < len; i++) {
1215 retval = spi_write_eeprom(chip, i, buf[i]);
1216 if (retval != STATUS_SUCCESS) {
1218 set_sense_type(chip, SCSI_LUN(srb),
1219 SENSE_TYPE_MEDIA_WRITE_ERR);
1221 return TRANSPORT_FAILED;
1228 return TRANSPORT_GOOD;
1231 static int read_mem(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1233 unsigned short addr, len, i;
1237 rtsx_disable_aspm(chip);
1239 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1243 rtsx_set_stat(chip, RTSX_STAT_RUN);
1245 addr = ((u16)srb->cmnd[2] << 8) | srb->cmnd[3];
1246 len = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5];
1248 if (addr < 0xFC00) {
1249 set_sense_type(chip, SCSI_LUN(srb),
1250 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1252 return TRANSPORT_FAILED;
1258 return TRANSPORT_ERROR;
1261 retval = rtsx_force_power_on(chip, SSC_PDCTL);
1262 if (retval != STATUS_SUCCESS) {
1264 set_sense_type(chip, SCSI_LUN(srb), SENSE_TYPE_MEDIA_WRITE_ERR);
1266 return TRANSPORT_FAILED;
1269 for (i = 0; i < len; i++) {
1270 retval = rtsx_read_register(chip, addr + i, buf + i);
1271 if (retval != STATUS_SUCCESS) {
1273 set_sense_type(chip, SCSI_LUN(srb),
1274 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1276 return TRANSPORT_FAILED;
1280 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb), len);
1281 rtsx_stor_set_xfer_buf(buf, len, srb);
1282 scsi_set_resid(srb, scsi_bufflen(srb) - len);
1286 return TRANSPORT_GOOD;
1289 static int write_mem(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1291 unsigned short addr, len, i;
1295 rtsx_disable_aspm(chip);
1297 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1301 rtsx_set_stat(chip, RTSX_STAT_RUN);
1303 addr = ((u16)srb->cmnd[2] << 8) | srb->cmnd[3];
1304 len = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5];
1306 if (addr < 0xFC00) {
1307 set_sense_type(chip, SCSI_LUN(srb),
1308 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1310 return TRANSPORT_FAILED;
1313 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb), len);
1317 return TRANSPORT_ERROR;
1320 rtsx_stor_get_xfer_buf(buf, len, srb);
1321 scsi_set_resid(srb, scsi_bufflen(srb) - len);
1323 retval = rtsx_force_power_on(chip, SSC_PDCTL);
1324 if (retval != STATUS_SUCCESS) {
1326 set_sense_type(chip, SCSI_LUN(srb), SENSE_TYPE_MEDIA_WRITE_ERR);
1328 return TRANSPORT_FAILED;
1331 for (i = 0; i < len; i++) {
1332 retval = rtsx_write_register(chip, addr + i, 0xFF, buf[i]);
1333 if (retval != STATUS_SUCCESS) {
1335 set_sense_type(chip, SCSI_LUN(srb),
1336 SENSE_TYPE_MEDIA_WRITE_ERR);
1338 return TRANSPORT_FAILED;
1344 return TRANSPORT_GOOD;
1347 static int get_sd_csd(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1349 struct sd_info *sd_card = &(chip->sd_card);
1350 unsigned int lun = SCSI_LUN(srb);
1352 if (!check_card_ready(chip, lun)) {
1353 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
1355 return TRANSPORT_FAILED;
1358 if (get_lun_card(chip, lun) != SD_CARD) {
1359 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1361 return TRANSPORT_FAILED;
1364 scsi_set_resid(srb, 0);
1365 rtsx_stor_set_xfer_buf(sd_card->raw_csd, scsi_bufflen(srb), srb);
1367 return TRANSPORT_GOOD;
1370 static int toggle_gpio_cmd(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1372 u8 gpio = srb->cmnd[2];
1374 rtsx_disable_aspm(chip);
1376 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1380 rtsx_set_stat(chip, RTSX_STAT_RUN);
1384 toggle_gpio(chip, gpio);
1386 return TRANSPORT_GOOD;
1390 static int trace_msg_cmd(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1392 unsigned char *ptr, *buf = NULL;
1395 unsigned int buf_len;
1397 buf_len = 4 + ((2 + MSG_FUNC_LEN + MSG_FILE_LEN + TIME_VAL_LEN) *
1400 if ((scsi_bufflen(srb) < buf_len) || !scsi_sglist(srb)) {
1401 set_sense_type(chip, SCSI_LUN(srb),
1402 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1404 return TRANSPORT_FAILED;
1407 clear = srb->cmnd[2];
1409 buf = vmalloc(scsi_bufflen(srb));
1412 return TRANSPORT_ERROR;
1416 if (chip->trace_msg[chip->msg_idx].valid)
1417 msg_cnt = TRACE_ITEM_CNT;
1419 msg_cnt = chip->msg_idx;
1421 *(ptr++) = (u8)(msg_cnt >> 24);
1422 *(ptr++) = (u8)(msg_cnt >> 16);
1423 *(ptr++) = (u8)(msg_cnt >> 8);
1424 *(ptr++) = (u8)msg_cnt;
1425 dev_dbg(rtsx_dev(chip), "Trace message count is %d\n", msg_cnt);
1427 for (i = 1; i <= msg_cnt; i++) {
1430 idx = chip->msg_idx - i;
1432 idx += TRACE_ITEM_CNT;
1434 *(ptr++) = (u8)(chip->trace_msg[idx].line >> 8);
1435 *(ptr++) = (u8)(chip->trace_msg[idx].line);
1436 for (j = 0; j < MSG_FUNC_LEN; j++)
1437 *(ptr++) = chip->trace_msg[idx].func[j];
1439 for (j = 0; j < MSG_FILE_LEN; j++)
1440 *(ptr++) = chip->trace_msg[idx].file[j];
1442 for (j = 0; j < TIME_VAL_LEN; j++)
1443 *(ptr++) = chip->trace_msg[idx].timeval_buf[j];
1446 rtsx_stor_set_xfer_buf(buf, scsi_bufflen(srb), srb);
1451 for (i = 0; i < TRACE_ITEM_CNT; i++)
1452 chip->trace_msg[i].valid = 0;
1455 scsi_set_resid(srb, 0);
1456 return TRANSPORT_GOOD;
1460 static int read_host_reg(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1466 rtsx_disable_aspm(chip);
1468 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1472 rtsx_set_stat(chip, RTSX_STAT_RUN);
1474 addr = srb->cmnd[4];
1476 val = rtsx_readl(chip, addr);
1477 dev_dbg(rtsx_dev(chip), "Host register (0x%x): 0x%x\n", addr, val);
1479 buf[0] = (u8)(val >> 24);
1480 buf[1] = (u8)(val >> 16);
1481 buf[2] = (u8)(val >> 8);
1484 len = min_t(unsigned int, scsi_bufflen(srb), 4);
1485 rtsx_stor_set_xfer_buf(buf, len, srb);
1486 scsi_set_resid(srb, scsi_bufflen(srb) - len);
1488 return TRANSPORT_GOOD;
1491 static int write_host_reg(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1497 rtsx_disable_aspm(chip);
1499 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1503 rtsx_set_stat(chip, RTSX_STAT_RUN);
1505 addr = srb->cmnd[4];
1507 len = min_t(unsigned int, scsi_bufflen(srb), 4);
1508 rtsx_stor_get_xfer_buf(buf, len, srb);
1509 scsi_set_resid(srb, scsi_bufflen(srb) - len);
1511 val = ((u32)buf[0] << 24) | ((u32)buf[1] << 16) | ((u32)buf[2]
1514 rtsx_writel(chip, addr, val);
1516 return TRANSPORT_GOOD;
1519 static int set_variable(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1521 unsigned int lun = SCSI_LUN(srb);
1523 if (srb->cmnd[3] == 1) {
1524 /* Variable Clock */
1525 struct xd_info *xd_card = &(chip->xd_card);
1526 struct sd_info *sd_card = &(chip->sd_card);
1527 struct ms_info *ms_card = &(chip->ms_card);
1529 switch (srb->cmnd[4]) {
1531 xd_card->xd_clock = srb->cmnd[5];
1535 sd_card->sd_clock = srb->cmnd[5];
1539 ms_card->ms_clock = srb->cmnd[5];
1543 set_sense_type(chip, lun,
1544 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1546 return TRANSPORT_FAILED;
1548 } else if (srb->cmnd[3] == 2) {
1550 chip->blink_led = 1;
1554 chip->blink_led = 0;
1556 rtsx_disable_aspm(chip);
1559 (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1563 rtsx_set_stat(chip, RTSX_STAT_RUN);
1565 retval = rtsx_force_power_on(chip, SSC_PDCTL);
1566 if (retval != STATUS_SUCCESS) {
1567 set_sense_type(chip, SCSI_LUN(srb),
1568 SENSE_TYPE_MEDIA_WRITE_ERR);
1570 return TRANSPORT_FAILED;
1573 turn_off_led(chip, LED_GPIO);
1576 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1578 return TRANSPORT_FAILED;
1581 return TRANSPORT_GOOD;
1584 static int get_variable(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1586 unsigned int lun = SCSI_LUN(srb);
1588 if (srb->cmnd[3] == 1) {
1589 struct xd_info *xd_card = &(chip->xd_card);
1590 struct sd_info *sd_card = &(chip->sd_card);
1591 struct ms_info *ms_card = &(chip->ms_card);
1594 switch (srb->cmnd[4]) {
1596 tmp = (u8)(xd_card->xd_clock);
1600 tmp = (u8)(sd_card->sd_clock);
1604 tmp = (u8)(ms_card->ms_clock);
1608 set_sense_type(chip, lun,
1609 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1611 return TRANSPORT_FAILED;
1614 rtsx_stor_set_xfer_buf(&tmp, 1, srb);
1615 } else if (srb->cmnd[3] == 2) {
1616 u8 tmp = chip->blink_led;
1618 rtsx_stor_set_xfer_buf(&tmp, 1, srb);
1620 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1622 return TRANSPORT_FAILED;
1625 return TRANSPORT_GOOD;
1628 static int dma_access_ring_buffer(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1631 unsigned int lun = SCSI_LUN(srb);
1634 rtsx_disable_aspm(chip);
1636 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1640 rtsx_set_stat(chip, RTSX_STAT_RUN);
1642 len = ((u16)(srb->cmnd[4]) << 8) | srb->cmnd[5];
1643 len = min_t(u16, len, scsi_bufflen(srb));
1645 if (srb->sc_data_direction == DMA_FROM_DEVICE)
1646 dev_dbg(rtsx_dev(chip), "Read from device\n");
1648 dev_dbg(rtsx_dev(chip), "Write to device\n");
1650 retval = rtsx_transfer_data(chip, 0, scsi_sglist(srb), len,
1651 scsi_sg_count(srb), srb->sc_data_direction, 1000);
1653 if (srb->sc_data_direction == DMA_FROM_DEVICE)
1654 set_sense_type(chip, lun,
1655 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1657 set_sense_type(chip, lun,
1658 SENSE_TYPE_MEDIA_WRITE_ERR);
1661 return TRANSPORT_FAILED;
1663 scsi_set_resid(srb, 0);
1665 return TRANSPORT_GOOD;
1668 static int get_dev_status(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1670 struct sd_info *sd_card = &(chip->sd_card);
1671 struct ms_info *ms_card = &(chip->ms_card);
1673 unsigned int lun = SCSI_LUN(srb);
1674 u8 card = get_lun_card(chip, lun);
1677 u8 oc_now_mask = 0, oc_ever_mask = 0;
1680 memset(status, 0, 32);
1682 status[0] = (u8)(chip->product_id);
1683 status[1] = chip->ic_version;
1685 if (chip->auto_delink_en)
1702 if (CHECK_LUN_MODE(chip,
1703 SD_MS_2LUN) && (chip->lun2card[lun] == MS_CARD)) {
1704 oc_now_mask = MS_OC_NOW;
1705 oc_ever_mask = MS_OC_EVER;
1707 oc_now_mask = SD_OC_NOW;
1708 oc_ever_mask = SD_OC_EVER;
1711 if (chip->ocp_stat & oc_now_mask)
1714 if (chip->ocp_stat & oc_ever_mask)
1718 if (card == SD_CARD) {
1719 if (CHK_SD(sd_card)) {
1720 if (CHK_SD_HCXC(sd_card)) {
1721 if (sd_card->capacity > 0x4000000)
1722 status[0x0E] = 0x02;
1724 status[0x0E] = 0x01;
1726 status[0x0E] = 0x00;
1729 if (CHK_SD_SDR104(sd_card))
1730 status[0x0F] = 0x03;
1731 else if (CHK_SD_DDR50(sd_card))
1732 status[0x0F] = 0x04;
1733 else if (CHK_SD_SDR50(sd_card))
1734 status[0x0F] = 0x02;
1735 else if (CHK_SD_HS(sd_card))
1736 status[0x0F] = 0x01;
1738 status[0x0F] = 0x00;
1740 if (CHK_MMC_SECTOR_MODE(sd_card))
1741 status[0x0E] = 0x01;
1743 status[0x0E] = 0x00;
1745 if (CHK_MMC_DDR52(sd_card))
1746 status[0x0F] = 0x03;
1747 else if (CHK_MMC_52M(sd_card))
1748 status[0x0F] = 0x02;
1749 else if (CHK_MMC_26M(sd_card))
1750 status[0x0F] = 0x01;
1752 status[0x0F] = 0x00;
1754 } else if (card == MS_CARD) {
1755 if (CHK_MSPRO(ms_card)) {
1756 if (CHK_MSXC(ms_card))
1757 status[0x0E] = 0x01;
1759 status[0x0E] = 0x00;
1761 if (CHK_HG8BIT(ms_card))
1762 status[0x0F] = 0x01;
1764 status[0x0F] = 0x00;
1768 #ifdef SUPPORT_SD_LOCK
1769 if (card == SD_CARD) {
1770 status[0x17] = 0x80;
1771 if (sd_card->sd_erase_status)
1772 status[0x17] |= 0x01;
1773 if (sd_card->sd_lock_status & SD_LOCKED) {
1774 status[0x17] |= 0x02;
1775 status[0x07] |= 0x40;
1777 if (sd_card->sd_lock_status & SD_PWD_EXIST)
1778 status[0x17] |= 0x04;
1780 status[0x17] = 0x00;
1783 dev_dbg(rtsx_dev(chip), "status[0x17] = 0x%x\n", status[0x17]);
1786 status[0x18] = 0x8A;
1787 status[0x1A] = 0x28;
1788 #ifdef SUPPORT_SD_LOCK
1789 status[0x1F] = 0x01;
1792 buf_len = min_t(unsigned int, scsi_bufflen(srb), sizeof(status));
1793 rtsx_stor_set_xfer_buf(status, buf_len, srb);
1794 scsi_set_resid(srb, scsi_bufflen(srb) - buf_len);
1796 return TRANSPORT_GOOD;
1799 static int set_chip_mode(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1805 if (!CHECK_PID(chip, 0x5208)) {
1806 set_sense_type(chip, SCSI_LUN(srb),
1807 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1809 return TRANSPORT_FAILED;
1812 phy_debug_mode = (int)(srb->cmnd[3]);
1814 if (phy_debug_mode) {
1815 chip->phy_debug_mode = 1;
1816 retval = rtsx_write_register(chip, CDRESUMECTL, 0x77, 0);
1817 if (retval != STATUS_SUCCESS) {
1819 return TRANSPORT_FAILED;
1822 rtsx_disable_bus_int(chip);
1824 retval = rtsx_read_phy_register(chip, 0x1C, ®);
1825 if (retval != STATUS_SUCCESS) {
1827 return TRANSPORT_FAILED;
1831 retval = rtsx_write_phy_register(chip, 0x1C, reg);
1832 if (retval != STATUS_SUCCESS) {
1834 return TRANSPORT_FAILED;
1837 chip->phy_debug_mode = 0;
1838 retval = rtsx_write_register(chip, CDRESUMECTL, 0x77, 0x77);
1839 if (retval != STATUS_SUCCESS) {
1841 return TRANSPORT_FAILED;
1844 rtsx_enable_bus_int(chip);
1846 retval = rtsx_read_phy_register(chip, 0x1C, ®);
1847 if (retval != STATUS_SUCCESS) {
1849 return TRANSPORT_FAILED;
1853 retval = rtsx_write_phy_register(chip, 0x1C, reg);
1854 if (retval != STATUS_SUCCESS) {
1856 return TRANSPORT_FAILED;
1860 return TRANSPORT_GOOD;
1863 static int rw_mem_cmd_buf(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1865 int retval = STATUS_SUCCESS;
1866 unsigned int lun = SCSI_LUN(srb);
1867 u8 cmd_type, mask, value, idx;
1870 rtsx_disable_aspm(chip);
1872 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1876 rtsx_set_stat(chip, RTSX_STAT_RUN);
1878 switch (srb->cmnd[3]) {
1880 rtsx_init_cmd(chip);
1884 cmd_type = srb->cmnd[4];
1886 set_sense_type(chip, lun,
1887 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1889 return TRANSPORT_FAILED;
1891 addr = (srb->cmnd[5] << 8) | srb->cmnd[6];
1892 mask = srb->cmnd[7];
1893 value = srb->cmnd[8];
1894 rtsx_add_cmd(chip, cmd_type, addr, mask, value);
1898 retval = rtsx_send_cmd(chip, 0, 1000);
1903 value = *(rtsx_get_cmd_data(chip) + idx);
1904 if (scsi_bufflen(srb) < 1) {
1905 set_sense_type(chip, lun,
1906 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1908 return TRANSPORT_FAILED;
1910 rtsx_stor_set_xfer_buf(&value, 1, srb);
1911 scsi_set_resid(srb, 0);
1915 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1917 return TRANSPORT_FAILED;
1920 if (retval != STATUS_SUCCESS) {
1921 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_ERR);
1923 return TRANSPORT_FAILED;
1926 return TRANSPORT_GOOD;
1929 static int suit_cmd(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1931 switch (srb->cmnd[3]) {
1936 return rw_mem_cmd_buf(srb, chip);
1938 return TRANSPORT_ERROR;
1942 static int read_phy_register(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1944 unsigned short addr, len, i;
1949 rtsx_disable_aspm(chip);
1951 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1955 rtsx_set_stat(chip, RTSX_STAT_RUN);
1957 addr = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5];
1958 len = ((u16)srb->cmnd[6] << 8) | srb->cmnd[7];
1967 return TRANSPORT_ERROR;
1970 retval = rtsx_force_power_on(chip, SSC_PDCTL);
1971 if (retval != STATUS_SUCCESS) {
1973 set_sense_type(chip, SCSI_LUN(srb),
1974 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1976 return TRANSPORT_FAILED;
1979 for (i = 0; i < len / 2; i++) {
1980 retval = rtsx_read_phy_register(chip, addr + i, &val);
1981 if (retval != STATUS_SUCCESS) {
1983 set_sense_type(chip, SCSI_LUN(srb),
1984 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1986 return TRANSPORT_FAILED;
1989 buf[2 * i] = (u8)(val >> 8);
1990 buf[2 * i + 1] = (u8)val;
1993 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb),
1995 rtsx_stor_set_xfer_buf(buf, len, srb);
1996 scsi_set_resid(srb, scsi_bufflen(srb) - len);
2001 return TRANSPORT_GOOD;
2004 static int write_phy_register(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2006 unsigned short addr, len, i;
2011 rtsx_disable_aspm(chip);
2013 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
2017 rtsx_set_stat(chip, RTSX_STAT_RUN);
2019 addr = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5];
2020 len = ((u16)srb->cmnd[6] << 8) | srb->cmnd[7];
2026 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb),
2032 return TRANSPORT_ERROR;
2035 rtsx_stor_get_xfer_buf(buf, len, srb);
2036 scsi_set_resid(srb, scsi_bufflen(srb) - len);
2038 retval = rtsx_force_power_on(chip, SSC_PDCTL);
2039 if (retval != STATUS_SUCCESS) {
2041 set_sense_type(chip, SCSI_LUN(srb),
2042 SENSE_TYPE_MEDIA_WRITE_ERR);
2044 return TRANSPORT_FAILED;
2047 for (i = 0; i < len / 2; i++) {
2048 val = ((u16)buf[2 * i] << 8) | buf[2 * i + 1];
2049 retval = rtsx_write_phy_register(chip, addr + i, val);
2050 if (retval != STATUS_SUCCESS) {
2052 set_sense_type(chip, SCSI_LUN(srb),
2053 SENSE_TYPE_MEDIA_WRITE_ERR);
2055 return TRANSPORT_FAILED;
2062 return TRANSPORT_GOOD;
2065 static int erase_eeprom2(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2067 unsigned short addr;
2071 rtsx_disable_aspm(chip);
2073 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
2077 rtsx_set_stat(chip, RTSX_STAT_RUN);
2079 retval = rtsx_force_power_on(chip, SSC_PDCTL);
2080 if (retval != STATUS_SUCCESS) {
2081 set_sense_type(chip, SCSI_LUN(srb), SENSE_TYPE_MEDIA_WRITE_ERR);
2083 return TRANSPORT_FAILED;
2086 mode = srb->cmnd[3];
2087 addr = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5];
2090 retval = spi_erase_eeprom_chip(chip);
2091 if (retval != STATUS_SUCCESS) {
2092 set_sense_type(chip, SCSI_LUN(srb),
2093 SENSE_TYPE_MEDIA_WRITE_ERR);
2095 return TRANSPORT_FAILED;
2097 } else if (mode == 1) {
2098 retval = spi_erase_eeprom_byte(chip, addr);
2099 if (retval != STATUS_SUCCESS) {
2100 set_sense_type(chip, SCSI_LUN(srb),
2101 SENSE_TYPE_MEDIA_WRITE_ERR);
2103 return TRANSPORT_FAILED;
2106 set_sense_type(chip, SCSI_LUN(srb),
2107 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2109 return TRANSPORT_FAILED;
2112 return TRANSPORT_GOOD;
2115 static int read_eeprom2(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2117 unsigned short addr, len, i;
2121 rtsx_disable_aspm(chip);
2123 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
2127 rtsx_set_stat(chip, RTSX_STAT_RUN);
2129 addr = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5];
2130 len = ((u16)srb->cmnd[6] << 8) | srb->cmnd[7];
2135 return TRANSPORT_ERROR;
2138 retval = rtsx_force_power_on(chip, SSC_PDCTL);
2139 if (retval != STATUS_SUCCESS) {
2141 set_sense_type(chip, SCSI_LUN(srb),
2142 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
2144 return TRANSPORT_FAILED;
2147 for (i = 0; i < len; i++) {
2148 retval = spi_read_eeprom(chip, addr + i, buf + i);
2149 if (retval != STATUS_SUCCESS) {
2151 set_sense_type(chip, SCSI_LUN(srb),
2152 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
2154 return TRANSPORT_FAILED;
2158 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb), len);
2159 rtsx_stor_set_xfer_buf(buf, len, srb);
2160 scsi_set_resid(srb, scsi_bufflen(srb) - len);
2164 return TRANSPORT_GOOD;
2167 static int write_eeprom2(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2169 unsigned short addr, len, i;
2173 rtsx_disable_aspm(chip);
2175 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
2179 rtsx_set_stat(chip, RTSX_STAT_RUN);
2181 addr = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5];
2182 len = ((u16)srb->cmnd[6] << 8) | srb->cmnd[7];
2184 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb), len);
2188 return TRANSPORT_ERROR;
2191 rtsx_stor_get_xfer_buf(buf, len, srb);
2192 scsi_set_resid(srb, scsi_bufflen(srb) - len);
2194 retval = rtsx_force_power_on(chip, SSC_PDCTL);
2195 if (retval != STATUS_SUCCESS) {
2197 set_sense_type(chip, SCSI_LUN(srb), SENSE_TYPE_MEDIA_WRITE_ERR);
2199 return TRANSPORT_FAILED;
2202 for (i = 0; i < len; i++) {
2203 retval = spi_write_eeprom(chip, addr + i, buf[i]);
2204 if (retval != STATUS_SUCCESS) {
2206 set_sense_type(chip, SCSI_LUN(srb),
2207 SENSE_TYPE_MEDIA_WRITE_ERR);
2209 return TRANSPORT_FAILED;
2215 return TRANSPORT_GOOD;
2218 static int read_efuse(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2224 rtsx_disable_aspm(chip);
2226 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
2230 rtsx_set_stat(chip, RTSX_STAT_RUN);
2232 addr = srb->cmnd[4];
2238 return TRANSPORT_ERROR;
2241 retval = rtsx_force_power_on(chip, SSC_PDCTL);
2242 if (retval != STATUS_SUCCESS) {
2244 set_sense_type(chip, SCSI_LUN(srb),
2245 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
2247 return TRANSPORT_FAILED;
2250 for (i = 0; i < len; i++) {
2251 retval = rtsx_read_efuse(chip, addr + i, buf + i);
2252 if (retval != STATUS_SUCCESS) {
2254 set_sense_type(chip, SCSI_LUN(srb),
2255 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
2257 return TRANSPORT_FAILED;
2261 len = (u8)min_t(unsigned int, scsi_bufflen(srb), len);
2262 rtsx_stor_set_xfer_buf(buf, len, srb);
2263 scsi_set_resid(srb, scsi_bufflen(srb) - len);
2267 return TRANSPORT_GOOD;
2270 static int write_efuse(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2272 int retval, result = TRANSPORT_GOOD;
2277 rtsx_disable_aspm(chip);
2279 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
2283 rtsx_set_stat(chip, RTSX_STAT_RUN);
2285 addr = srb->cmnd[4];
2288 len = (u8)min_t(unsigned int, scsi_bufflen(srb), len);
2292 return TRANSPORT_ERROR;
2295 rtsx_stor_get_xfer_buf(buf, len, srb);
2296 scsi_set_resid(srb, scsi_bufflen(srb) - len);
2298 retval = rtsx_force_power_on(chip, SSC_PDCTL);
2299 if (retval != STATUS_SUCCESS) {
2302 return TRANSPORT_ERROR;
2305 if (chip->asic_code) {
2306 retval = rtsx_read_phy_register(chip, 0x08, &val);
2307 if (retval != STATUS_SUCCESS) {
2310 return TRANSPORT_ERROR;
2313 retval = rtsx_write_register(chip, PWR_GATE_CTRL,
2314 LDO3318_PWR_MASK, LDO_OFF);
2315 if (retval != STATUS_SUCCESS) {
2318 return TRANSPORT_ERROR;
2323 retval = rtsx_write_phy_register(chip, 0x08,
2324 0x4C00 | chip->phy_voltage);
2325 if (retval != STATUS_SUCCESS) {
2328 return TRANSPORT_ERROR;
2331 retval = rtsx_write_register(chip, PWR_GATE_CTRL,
2332 LDO3318_PWR_MASK, LDO_ON);
2333 if (retval != STATUS_SUCCESS) {
2336 return TRANSPORT_ERROR;
2342 retval = card_power_on(chip, SPI_CARD);
2343 if (retval != STATUS_SUCCESS) {
2346 return TRANSPORT_ERROR;
2351 for (i = 0; i < len; i++) {
2352 retval = rtsx_write_efuse(chip, addr + i, buf[i]);
2353 if (retval != STATUS_SUCCESS) {
2354 set_sense_type(chip, SCSI_LUN(srb),
2355 SENSE_TYPE_MEDIA_WRITE_ERR);
2356 result = TRANSPORT_FAILED;
2365 retval = card_power_off(chip, SPI_CARD);
2366 if (retval != STATUS_SUCCESS) {
2368 return TRANSPORT_ERROR;
2371 if (chip->asic_code) {
2372 retval = rtsx_write_register(chip, PWR_GATE_CTRL,
2373 LDO3318_PWR_MASK, LDO_OFF);
2374 if (retval != STATUS_SUCCESS) {
2376 return TRANSPORT_ERROR;
2381 retval = rtsx_write_phy_register(chip, 0x08, val);
2382 if (retval != STATUS_SUCCESS) {
2384 return TRANSPORT_ERROR;
2387 retval = rtsx_write_register(chip, PWR_GATE_CTRL,
2388 LDO3318_PWR_MASK, LDO_ON);
2389 if (retval != STATUS_SUCCESS) {
2391 return TRANSPORT_ERROR;
2398 static int read_cfg_byte(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2406 rtsx_disable_aspm(chip);
2408 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
2412 rtsx_set_stat(chip, RTSX_STAT_RUN);
2414 func = srb->cmnd[3];
2415 addr = ((u16)(srb->cmnd[4]) << 8) | srb->cmnd[5];
2416 len = ((u16)(srb->cmnd[6]) << 8) | srb->cmnd[7];
2418 dev_dbg(rtsx_dev(chip), "%s: func = %d, addr = 0x%x, len = %d\n",
2419 __func__, func, addr, len);
2421 if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip))
2426 if (func > func_max) {
2427 set_sense_type(chip, SCSI_LUN(srb),
2428 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2430 return TRANSPORT_FAILED;
2436 return TRANSPORT_ERROR;
2439 retval = rtsx_read_cfg_seq(chip, func, addr, buf, len);
2440 if (retval != STATUS_SUCCESS) {
2441 set_sense_type(chip, SCSI_LUN(srb),
2442 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
2445 return TRANSPORT_FAILED;
2448 len = (u16)min_t(unsigned int, scsi_bufflen(srb), len);
2449 rtsx_stor_set_xfer_buf(buf, len, srb);
2450 scsi_set_resid(srb, scsi_bufflen(srb) - len);
2454 return TRANSPORT_GOOD;
2457 static int write_cfg_byte(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2465 rtsx_disable_aspm(chip);
2467 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
2471 rtsx_set_stat(chip, RTSX_STAT_RUN);
2473 func = srb->cmnd[3];
2474 addr = ((u16)(srb->cmnd[4]) << 8) | srb->cmnd[5];
2475 len = ((u16)(srb->cmnd[6]) << 8) | srb->cmnd[7];
2477 dev_dbg(rtsx_dev(chip), "%s: func = %d, addr = 0x%x\n",
2478 __func__, func, addr);
2480 if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip))
2485 if (func > func_max) {
2486 set_sense_type(chip, SCSI_LUN(srb),
2487 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2489 return TRANSPORT_FAILED;
2492 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb), len);
2496 return TRANSPORT_ERROR;
2499 rtsx_stor_get_xfer_buf(buf, len, srb);
2500 scsi_set_resid(srb, scsi_bufflen(srb) - len);
2502 retval = rtsx_write_cfg_seq(chip, func, addr, buf, len);
2503 if (retval != STATUS_SUCCESS) {
2504 set_sense_type(chip, SCSI_LUN(srb), SENSE_TYPE_MEDIA_WRITE_ERR);
2507 return TRANSPORT_FAILED;
2512 return TRANSPORT_GOOD;
2515 static int app_cmd(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2519 switch (srb->cmnd[2]) {
2522 result = read_write(srb, chip);
2526 result = read_host_reg(srb, chip);
2529 case WRITE_HOST_REG:
2530 result = write_host_reg(srb, chip);
2534 result = get_variable(srb, chip);
2538 result = set_variable(srb, chip);
2543 result = dma_access_ring_buffer(srb, chip);
2547 result = read_phy_register(srb, chip);
2551 result = write_phy_register(srb, chip);
2555 result = erase_eeprom2(srb, chip);
2559 result = read_eeprom2(srb, chip);
2563 result = write_eeprom2(srb, chip);
2567 result = read_efuse(srb, chip);
2571 result = write_efuse(srb, chip);
2575 result = read_cfg_byte(srb, chip);
2579 result = write_cfg_byte(srb, chip);
2583 result = set_chip_mode(srb, chip);
2587 result = suit_cmd(srb, chip);
2590 case GET_DEV_STATUS:
2591 result = get_dev_status(srb, chip);
2595 set_sense_type(chip, SCSI_LUN(srb),
2596 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2598 return TRANSPORT_FAILED;
2604 static int read_status(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2608 unsigned int lun = SCSI_LUN(srb);
2610 rtsx_status[0] = (u8)(chip->vendor_id >> 8);
2611 rtsx_status[1] = (u8)(chip->vendor_id);
2613 rtsx_status[2] = (u8)(chip->product_id >> 8);
2614 rtsx_status[3] = (u8)(chip->product_id);
2616 rtsx_status[4] = (u8)lun;
2618 if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
2619 if (chip->lun2card[lun] == SD_CARD)
2624 if (chip->card_exist) {
2625 if (chip->card_exist & XD_CARD)
2627 else if (chip->card_exist & SD_CARD)
2629 else if (chip->card_exist & MS_CARD)
2638 if (CHECK_LUN_MODE(chip, SD_MS_2LUN))
2643 rtsx_status[7] = (u8)(chip->product_id);
2644 rtsx_status[8] = chip->ic_version;
2646 if (check_card_exist(chip, lun))
2651 if (CHECK_LUN_MODE(chip, SD_MS_2LUN))
2652 rtsx_status[10] = 0;
2654 rtsx_status[10] = 1;
2656 if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
2657 if (chip->lun2card[lun] == SD_CARD)
2658 rtsx_status[11] = SD_CARD;
2660 rtsx_status[11] = MS_CARD;
2662 rtsx_status[11] = XD_CARD | SD_CARD | MS_CARD;
2665 if (check_card_ready(chip, lun))
2666 rtsx_status[12] = 1;
2668 rtsx_status[12] = 0;
2670 if (get_lun_card(chip, lun) == XD_CARD) {
2671 rtsx_status[13] = 0x40;
2672 } else if (get_lun_card(chip, lun) == SD_CARD) {
2673 struct sd_info *sd_card = &(chip->sd_card);
2675 rtsx_status[13] = 0x20;
2676 if (CHK_SD(sd_card)) {
2677 if (CHK_SD_HCXC(sd_card))
2678 rtsx_status[13] |= 0x04;
2679 if (CHK_SD_HS(sd_card))
2680 rtsx_status[13] |= 0x02;
2682 rtsx_status[13] |= 0x08;
2683 if (CHK_MMC_52M(sd_card))
2684 rtsx_status[13] |= 0x02;
2685 if (CHK_MMC_SECTOR_MODE(sd_card))
2686 rtsx_status[13] |= 0x04;
2688 } else if (get_lun_card(chip, lun) == MS_CARD) {
2689 struct ms_info *ms_card = &(chip->ms_card);
2691 if (CHK_MSPRO(ms_card)) {
2692 rtsx_status[13] = 0x38;
2693 if (CHK_HG8BIT(ms_card))
2694 rtsx_status[13] |= 0x04;
2696 if (CHK_MSXC(ms_card))
2697 rtsx_status[13] |= 0x01;
2700 rtsx_status[13] = 0x30;
2703 if (CHECK_LUN_MODE(chip, DEFAULT_SINGLE)) {
2705 if (chip->sd_io && chip->sd_int)
2706 rtsx_status[13] = 0x60;
2708 rtsx_status[13] = 0x70;
2710 rtsx_status[13] = 0x70;
2713 if (chip->lun2card[lun] == SD_CARD)
2714 rtsx_status[13] = 0x20;
2716 rtsx_status[13] = 0x30;
2720 rtsx_status[14] = 0x78;
2721 if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip))
2722 rtsx_status[15] = 0x83;
2724 rtsx_status[15] = 0x82;
2726 buf_len = min_t(unsigned int, scsi_bufflen(srb), sizeof(rtsx_status));
2727 rtsx_stor_set_xfer_buf(rtsx_status, buf_len, srb);
2728 scsi_set_resid(srb, scsi_bufflen(srb) - buf_len);
2730 return TRANSPORT_GOOD;
2733 static int get_card_bus_width(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2735 unsigned int lun = SCSI_LUN(srb);
2738 if (!check_card_ready(chip, lun)) {
2739 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
2741 return TRANSPORT_FAILED;
2744 card = get_lun_card(chip, lun);
2745 if ((card == SD_CARD) || (card == MS_CARD)) {
2746 bus_width = chip->card_bus_width[lun];
2748 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
2750 return TRANSPORT_FAILED;
2753 scsi_set_resid(srb, 0);
2754 rtsx_stor_set_xfer_buf(&bus_width, scsi_bufflen(srb), srb);
2756 return TRANSPORT_GOOD;
2759 static int spi_vendor_cmd(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2762 unsigned int lun = SCSI_LUN(srb);
2765 if (CHECK_PID(chip, 0x5208) || CHECK_PID(chip, 0x5288)) {
2766 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2768 return TRANSPORT_FAILED;
2771 rtsx_disable_aspm(chip);
2773 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
2777 rtsx_set_stat(chip, RTSX_STAT_RUN);
2779 rtsx_force_power_on(chip, SSC_PDCTL);
2781 rtsx_read_register(chip, CARD_GPIO_DIR, &gpio_dir);
2782 rtsx_write_register(chip, CARD_GPIO_DIR, 0x07, gpio_dir & 0x06);
2784 switch (srb->cmnd[2]) {
2785 case SCSI_SPI_GETSTATUS:
2786 result = spi_get_status(srb, chip);
2789 case SCSI_SPI_SETPARAMETER:
2790 result = spi_set_parameter(srb, chip);
2793 case SCSI_SPI_READFALSHID:
2794 result = spi_read_flash_id(srb, chip);
2797 case SCSI_SPI_READFLASH:
2798 result = spi_read_flash(srb, chip);
2801 case SCSI_SPI_WRITEFLASH:
2802 result = spi_write_flash(srb, chip);
2805 case SCSI_SPI_WRITEFLASHSTATUS:
2806 result = spi_write_flash_status(srb, chip);
2809 case SCSI_SPI_ERASEFLASH:
2810 result = spi_erase_flash(srb, chip);
2814 rtsx_write_register(chip, CARD_GPIO_DIR, 0x07, gpio_dir);
2816 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2818 return TRANSPORT_FAILED;
2821 rtsx_write_register(chip, CARD_GPIO_DIR, 0x07, gpio_dir);
2823 if (result != STATUS_SUCCESS) {
2825 return TRANSPORT_FAILED;
2828 return TRANSPORT_GOOD;
2831 static int vendor_cmnd(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2835 switch (srb->cmnd[1]) {
2837 result = read_status(srb, chip);
2841 result = read_mem(srb, chip);
2845 result = write_mem(srb, chip);
2849 result = read_eeprom(srb, chip);
2853 result = write_eeprom(srb, chip);
2857 result = toggle_gpio_cmd(srb, chip);
2861 result = get_sd_csd(srb, chip);
2865 result = get_card_bus_width(srb, chip);
2870 result = trace_msg_cmd(srb, chip);
2875 result = app_cmd(srb, chip);
2878 case SPI_VENDOR_COMMAND:
2879 result = spi_vendor_cmd(srb, chip);
2883 set_sense_type(chip, SCSI_LUN(srb),
2884 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2886 return TRANSPORT_FAILED;
2892 #if !defined(LED_AUTO_BLINK) && !defined(REGULAR_BLINK)
2893 void led_shine(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2895 unsigned int lun = SCSI_LUN(srb);
2898 if ((srb->cmnd[0] == READ_10) || (srb->cmnd[0] == WRITE_10))
2899 sec_cnt = ((u16)(srb->cmnd[7]) << 8) | srb->cmnd[8];
2900 else if ((srb->cmnd[0] == READ_6) || (srb->cmnd[0] == WRITE_6)) {
2901 sec_cnt = srb->cmnd[4];
2907 if (chip->rw_cap[lun] >= GPIO_TOGGLE_THRESHOLD) {
2908 toggle_gpio(chip, LED_GPIO);
2909 chip->rw_cap[lun] = 0;
2911 chip->rw_cap[lun] += sec_cnt;
2916 static int ms_format_cmnd(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2918 struct ms_info *ms_card = &(chip->ms_card);
2919 unsigned int lun = SCSI_LUN(srb);
2923 if (get_lun_card(chip, lun) != MS_CARD) {
2924 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
2926 return TRANSPORT_FAILED;
2929 if ((srb->cmnd[3] != 0x4D) || (srb->cmnd[4] != 0x47) ||
2930 (srb->cmnd[5] != 0x66) || (srb->cmnd[6] != 0x6D) ||
2931 (srb->cmnd[7] != 0x74)) {
2932 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2934 return TRANSPORT_FAILED;
2937 rtsx_disable_aspm(chip);
2939 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
2943 if (!check_card_ready(chip, lun) ||
2944 (get_card_size(chip, lun) == 0)) {
2945 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
2947 return TRANSPORT_FAILED;
2950 rtsx_set_stat(chip, RTSX_STAT_RUN);
2952 if (srb->cmnd[8] & 0x01)
2953 quick_format = false;
2955 quick_format = true;
2957 if (!(chip->card_ready & MS_CARD)) {
2958 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
2960 return TRANSPORT_FAILED;
2963 if (chip->card_wp & MS_CARD) {
2964 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_PROTECT);
2966 return TRANSPORT_FAILED;
2969 if (!CHK_MSPRO(ms_card)) {
2970 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
2972 return TRANSPORT_FAILED;
2975 retval = mspro_format(srb, chip, MS_SHORT_DATA_LEN, quick_format);
2976 if (retval != STATUS_SUCCESS) {
2977 set_sense_type(chip, lun, SENSE_TYPE_FORMAT_CMD_FAILED);
2979 return TRANSPORT_FAILED;
2982 scsi_set_resid(srb, 0);
2983 return TRANSPORT_GOOD;
2986 #ifdef SUPPORT_PCGL_1P18
2987 static int get_ms_information(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2989 struct ms_info *ms_card = &(chip->ms_card);
2990 unsigned int lun = SCSI_LUN(srb);
2991 u8 dev_info_id, data_len;
2993 unsigned int buf_len;
2996 if (!check_card_ready(chip, lun)) {
2997 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
2999 return TRANSPORT_FAILED;
3001 if (get_lun_card(chip, lun) != MS_CARD) {
3002 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
3004 return TRANSPORT_FAILED;
3007 if ((srb->cmnd[2] != 0xB0) || (srb->cmnd[4] != 0x4D) ||
3008 (srb->cmnd[5] != 0x53) || (srb->cmnd[6] != 0x49) ||
3009 (srb->cmnd[7] != 0x44)) {
3010 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3012 return TRANSPORT_FAILED;
3015 dev_info_id = srb->cmnd[3];
3016 if ((CHK_MSXC(ms_card) && (dev_info_id == 0x10)) ||
3017 (!CHK_MSXC(ms_card) && (dev_info_id == 0x13)) ||
3018 !CHK_MSPRO(ms_card)) {
3019 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3021 return TRANSPORT_FAILED;
3024 if (dev_info_id == 0x15)
3025 buf_len = data_len = 0x3A;
3027 buf_len = data_len = 0x6A;
3029 buf = kmalloc(buf_len, GFP_KERNEL);
3032 return TRANSPORT_ERROR;
3036 /* GET Memory Stick Media Information Response Header */
3037 buf[i++] = 0x00; /* Data length MSB */
3038 buf[i++] = data_len; /* Data length LSB */
3039 /* Device Information Type Code */
3040 if (CHK_MSXC(ms_card))
3051 /* Number of Device Information */
3054 /* Device Information Body */
3056 /* Device Information ID Number */
3057 buf[i++] = dev_info_id;
3058 /* Device Information Length */
3059 if (dev_info_id == 0x15)
3064 buf[i++] = 0x00; /* Data length MSB */
3065 buf[i++] = data_len; /* Data length LSB */
3068 if ((dev_info_id == 0x10) || (dev_info_id == 0x13)) {
3069 /* System Information */
3070 memcpy(buf + i, ms_card->raw_sys_info, 96);
3073 memcpy(buf + i, ms_card->raw_model_name, 48);
3076 rtsx_stor_set_xfer_buf(buf, buf_len, srb);
3078 if (dev_info_id == 0x15)
3079 scsi_set_resid(srb, scsi_bufflen(srb) - 0x3C);
3081 scsi_set_resid(srb, scsi_bufflen(srb) - 0x6C);
3084 return STATUS_SUCCESS;
3088 static int ms_sp_cmnd(struct scsi_cmnd *srb, struct rtsx_chip *chip)
3090 int retval = TRANSPORT_ERROR;
3092 if (srb->cmnd[2] == MS_FORMAT)
3093 retval = ms_format_cmnd(srb, chip);
3094 #ifdef SUPPORT_PCGL_1P18
3095 else if (srb->cmnd[2] == GET_MS_INFORMATION)
3096 retval = get_ms_information(srb, chip);
3103 static int sd_extention_cmnd(struct scsi_cmnd *srb, struct rtsx_chip *chip)
3105 unsigned int lun = SCSI_LUN(srb);
3108 rtsx_disable_aspm(chip);
3110 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
3114 rtsx_set_stat(chip, RTSX_STAT_RUN);
3116 sd_cleanup_work(chip);
3118 if (!check_card_ready(chip, lun)) {
3119 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
3121 return TRANSPORT_FAILED;
3123 if (get_lun_card(chip, lun) != SD_CARD) {
3124 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
3126 return TRANSPORT_FAILED;
3129 switch (srb->cmnd[0]) {
3130 case SD_PASS_THRU_MODE:
3131 result = sd_pass_thru_mode(srb, chip);
3134 case SD_EXECUTE_NO_DATA:
3135 result = sd_execute_no_data(srb, chip);
3138 case SD_EXECUTE_READ:
3139 result = sd_execute_read_data(srb, chip);
3142 case SD_EXECUTE_WRITE:
3143 result = sd_execute_write_data(srb, chip);
3147 result = sd_get_cmd_rsp(srb, chip);
3151 result = sd_hw_rst(srb, chip);
3155 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3157 return TRANSPORT_FAILED;
3164 #ifdef SUPPORT_MAGIC_GATE
3165 static int mg_report_key(struct scsi_cmnd *srb, struct rtsx_chip *chip)
3167 struct ms_info *ms_card = &(chip->ms_card);
3168 unsigned int lun = SCSI_LUN(srb);
3172 rtsx_disable_aspm(chip);
3174 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
3178 rtsx_set_stat(chip, RTSX_STAT_RUN);
3180 ms_cleanup_work(chip);
3182 if (!check_card_ready(chip, lun)) {
3183 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
3185 return TRANSPORT_FAILED;
3187 if (get_lun_card(chip, lun) != MS_CARD) {
3188 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
3190 return TRANSPORT_FAILED;
3193 if (srb->cmnd[7] != KC_MG_R_PRO) {
3194 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3196 return TRANSPORT_FAILED;
3199 if (!CHK_MSPRO(ms_card)) {
3200 set_sense_type(chip, lun, SENSE_TYPE_MG_INCOMPATIBLE_MEDIUM);
3202 return TRANSPORT_FAILED;
3205 key_format = srb->cmnd[10] & 0x3F;
3206 dev_dbg(rtsx_dev(chip), "key_format = 0x%x\n", key_format);
3208 switch (key_format) {
3209 case KF_GET_LOC_EKB:
3210 if ((scsi_bufflen(srb) == 0x41C) &&
3211 (srb->cmnd[8] == 0x04) &&
3212 (srb->cmnd[9] == 0x1C)) {
3213 retval = mg_get_local_EKB(srb, chip);
3214 if (retval != STATUS_SUCCESS) {
3216 return TRANSPORT_FAILED;
3220 set_sense_type(chip, lun,
3221 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3223 return TRANSPORT_FAILED;
3228 if ((scsi_bufflen(srb) == 0x24) &&
3229 (srb->cmnd[8] == 0x00) &&
3230 (srb->cmnd[9] == 0x24)) {
3231 retval = mg_get_rsp_chg(srb, chip);
3232 if (retval != STATUS_SUCCESS) {
3234 return TRANSPORT_FAILED;
3238 set_sense_type(chip, lun,
3239 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3241 return TRANSPORT_FAILED;
3246 ms_card->mg_entry_num = srb->cmnd[5];
3247 if ((scsi_bufflen(srb) == 0x404) &&
3248 (srb->cmnd[8] == 0x04) &&
3249 (srb->cmnd[9] == 0x04) &&
3250 (srb->cmnd[2] == 0x00) &&
3251 (srb->cmnd[3] == 0x00) &&
3252 (srb->cmnd[4] == 0x00) &&
3253 (srb->cmnd[5] < 32)) {
3254 retval = mg_get_ICV(srb, chip);
3255 if (retval != STATUS_SUCCESS) {
3257 return TRANSPORT_FAILED;
3261 set_sense_type(chip, lun,
3262 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3264 return TRANSPORT_FAILED;
3269 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3271 return TRANSPORT_FAILED;
3274 scsi_set_resid(srb, 0);
3275 return TRANSPORT_GOOD;
3278 static int mg_send_key(struct scsi_cmnd *srb, struct rtsx_chip *chip)
3280 struct ms_info *ms_card = &(chip->ms_card);
3281 unsigned int lun = SCSI_LUN(srb);
3285 rtsx_disable_aspm(chip);
3287 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
3291 rtsx_set_stat(chip, RTSX_STAT_RUN);
3293 ms_cleanup_work(chip);
3295 if (!check_card_ready(chip, lun)) {
3296 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
3298 return TRANSPORT_FAILED;
3300 if (check_card_wp(chip, lun)) {
3301 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_PROTECT);
3303 return TRANSPORT_FAILED;
3305 if (get_lun_card(chip, lun) != MS_CARD) {
3306 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
3308 return TRANSPORT_FAILED;
3311 if (srb->cmnd[7] != KC_MG_R_PRO) {
3312 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3314 return TRANSPORT_FAILED;
3317 if (!CHK_MSPRO(ms_card)) {
3318 set_sense_type(chip, lun, SENSE_TYPE_MG_INCOMPATIBLE_MEDIUM);
3320 return TRANSPORT_FAILED;
3323 key_format = srb->cmnd[10] & 0x3F;
3324 dev_dbg(rtsx_dev(chip), "key_format = 0x%x\n", key_format);
3326 switch (key_format) {
3327 case KF_SET_LEAF_ID:
3328 if ((scsi_bufflen(srb) == 0x0C) &&
3329 (srb->cmnd[8] == 0x00) &&
3330 (srb->cmnd[9] == 0x0C)) {
3331 retval = mg_set_leaf_id(srb, chip);
3332 if (retval != STATUS_SUCCESS) {
3334 return TRANSPORT_FAILED;
3338 set_sense_type(chip, lun,
3339 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3341 return TRANSPORT_FAILED;
3346 if ((scsi_bufflen(srb) == 0x0C) &&
3347 (srb->cmnd[8] == 0x00) &&
3348 (srb->cmnd[9] == 0x0C)) {
3349 retval = mg_chg(srb, chip);
3350 if (retval != STATUS_SUCCESS) {
3352 return TRANSPORT_FAILED;
3356 set_sense_type(chip, lun,
3357 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3359 return TRANSPORT_FAILED;
3364 if ((scsi_bufflen(srb) == 0x0C) &&
3365 (srb->cmnd[8] == 0x00) &&
3366 (srb->cmnd[9] == 0x0C)) {
3367 retval = mg_rsp(srb, chip);
3368 if (retval != STATUS_SUCCESS) {
3370 return TRANSPORT_FAILED;
3374 set_sense_type(chip, lun,
3375 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3377 return TRANSPORT_FAILED;
3382 ms_card->mg_entry_num = srb->cmnd[5];
3383 if ((scsi_bufflen(srb) == 0x404) &&
3384 (srb->cmnd[8] == 0x04) &&
3385 (srb->cmnd[9] == 0x04) &&
3386 (srb->cmnd[2] == 0x00) &&
3387 (srb->cmnd[3] == 0x00) &&
3388 (srb->cmnd[4] == 0x00) &&
3389 (srb->cmnd[5] < 32)) {
3390 retval = mg_set_ICV(srb, chip);
3391 if (retval != STATUS_SUCCESS) {
3393 return TRANSPORT_FAILED;
3397 set_sense_type(chip, lun,
3398 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3400 return TRANSPORT_FAILED;
3405 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3407 return TRANSPORT_FAILED;
3410 scsi_set_resid(srb, 0);
3411 return TRANSPORT_GOOD;
3415 int rtsx_scsi_handler(struct scsi_cmnd *srb, struct rtsx_chip *chip)
3417 #ifdef SUPPORT_SD_LOCK
3418 struct sd_info *sd_card = &(chip->sd_card);
3420 struct ms_info *ms_card = &(chip->ms_card);
3421 unsigned int lun = SCSI_LUN(srb);
3424 #ifdef SUPPORT_SD_LOCK
3425 if (sd_card->sd_erase_status) {
3426 /* Block all SCSI command except for
3427 * REQUEST_SENSE and rs_ppstatus
3429 if (!((srb->cmnd[0] == VENDOR_CMND) &&
3430 (srb->cmnd[1] == SCSI_APP_CMD) &&
3431 (srb->cmnd[2] == GET_DEV_STATUS)) &&
3432 (srb->cmnd[0] != REQUEST_SENSE)) {
3433 /* Logical Unit Not Ready Format in Progress */
3434 set_sense_data(chip, lun, CUR_ERR,
3435 0x02, 0, 0x04, 0x04, 0, 0);
3437 return TRANSPORT_FAILED;
3442 if ((get_lun_card(chip, lun) == MS_CARD) &&
3443 (ms_card->format_status == FORMAT_IN_PROGRESS)) {
3444 if ((srb->cmnd[0] != REQUEST_SENSE) &&
3445 (srb->cmnd[0] != INQUIRY)) {
3446 /* Logical Unit Not Ready Format in Progress */
3447 set_sense_data(chip, lun, CUR_ERR, 0x02, 0, 0x04, 0x04,
3448 0, (u16)(ms_card->progress));
3450 return TRANSPORT_FAILED;
3454 switch (srb->cmnd[0]) {
3459 result = read_write(srb, chip);
3460 #if !defined(LED_AUTO_BLINK) && !defined(REGULAR_BLINK)
3461 led_shine(srb, chip);
3465 case TEST_UNIT_READY:
3466 result = test_unit_ready(srb, chip);
3470 result = inquiry(srb, chip);
3474 result = read_capacity(srb, chip);
3478 result = start_stop_unit(srb, chip);
3481 case ALLOW_MEDIUM_REMOVAL:
3482 result = allow_medium_removal(srb, chip);
3486 result = request_sense(srb, chip);
3491 result = mode_sense(srb, chip);
3495 result = read_format_capacity(srb, chip);
3499 result = vendor_cmnd(srb, chip);
3503 result = ms_sp_cmnd(srb, chip);
3507 case SD_PASS_THRU_MODE:
3508 case SD_EXECUTE_NO_DATA:
3509 case SD_EXECUTE_READ:
3510 case SD_EXECUTE_WRITE:
3513 result = sd_extention_cmnd(srb, chip);
3517 #ifdef SUPPORT_MAGIC_GATE
3518 case CMD_MSPRO_MG_RKEY:
3519 result = mg_report_key(srb, chip);
3522 case CMD_MSPRO_MG_SKEY:
3523 result = mg_send_key(srb, chip);
3530 result = TRANSPORT_GOOD;
3534 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3535 result = TRANSPORT_FAILED;