1 // SPDX-License-Identifier: GPL-2.0+
3 * Driver for Realtek PCI-Express card reader
5 * Copyright(c) 2009-2013 Realtek Semiconductor Corp. All rights reserved.
12 #include <linux/blkdev.h>
13 #include <linux/kthread.h>
14 #include <linux/sched.h>
15 #include <linux/vmalloc.h>
22 void scsi_show_command(struct rtsx_chip *chip)
24 struct scsi_cmnd *srb = chip->srb;
26 bool unknown_cmd = false;
29 switch (srb->cmnd[0]) {
31 what = "TEST_UNIT_READY";
37 what = "REQUEST_SENSE";
42 case READ_BLOCK_LIMITS:
43 what = "READ_BLOCK_LIMITS";
46 what = "REASSIGN_BLOCKS";
58 what = "READ_REVERSE";
61 what = "WRITE_FILEMARKS";
69 case RECOVER_BUFFERED_DATA:
70 what = "RECOVER_BUFFERED_DATA";
93 case RECEIVE_DIAGNOSTIC:
94 what = "RECEIVE_DIAGNOSTIC";
97 what = "SEND_DIAGNOSTIC";
99 case ALLOW_MEDIUM_REMOVAL:
100 what = "ALLOW_MEDIUM_REMOVAL";
106 what = "READ_CAPACITY";
118 what = "WRITE_VERIFY";
124 what = "SEARCH_HIGH";
127 what = "SEARCH_EQUAL";
136 what = "READ_POSITION";
138 case SYNCHRONIZE_CACHE:
139 what = "SYNCHRONIZE_CACHE";
141 case LOCK_UNLOCK_CACHE:
142 what = "LOCK_UNLOCK_CACHE";
144 case READ_DEFECT_DATA:
145 what = "READ_DEFECT_DATA";
148 what = "MEDIUM_SCAN";
154 what = "COPY_VERIFY";
157 what = "WRITE_BUFFER";
160 what = "READ_BUFFER";
163 what = "UPDATE_BLOCK";
171 case CHANGE_DEFINITION:
172 what = "CHANGE_DEFINITION";
177 case GPCMD_READ_SUBCHANNEL:
178 what = "READ SUBCHANNEL";
183 case GPCMD_READ_HEADER:
184 what = "READ HEADER";
186 case GPCMD_PLAY_AUDIO_10:
187 what = "PLAY AUDIO (10)";
189 case GPCMD_PLAY_AUDIO_MSF:
190 what = "PLAY AUDIO MSF";
192 case GPCMD_GET_EVENT_STATUS_NOTIFICATION:
193 what = "GET EVENT/STATUS NOTIFICATION";
195 case GPCMD_PAUSE_RESUME:
196 what = "PAUSE/RESUME";
204 case GPCMD_STOP_PLAY_SCAN:
205 what = "STOP PLAY/SCAN";
207 case GPCMD_READ_DISC_INFO:
208 what = "READ DISC INFORMATION";
210 case GPCMD_READ_TRACK_RZONE_INFO:
211 what = "READ TRACK INFORMATION";
213 case GPCMD_RESERVE_RZONE_TRACK:
214 what = "RESERVE TRACK";
220 what = "MODE_SELECT_10";
222 case GPCMD_REPAIR_RZONE_TRACK:
223 what = "REPAIR TRACK";
226 what = "READ MASTER CUE";
229 what = "MODE_SENSE_10";
231 case GPCMD_CLOSE_TRACK:
232 what = "CLOSE TRACK/SESSION";
235 what = "READ BUFFER CAPACITY";
238 what = "SEND CUE SHEET";
244 what = "REPORT LUNS";
247 what = "MOVE_MEDIUM or PLAY AUDIO (12)";
255 case WRITE_VERIFY_12:
256 what = "WRITE_VERIFY_12";
259 what = "SEARCH_HIGH_12";
261 case SEARCH_EQUAL_12:
262 what = "SEARCH_EQUAL_12";
265 what = "SEARCH_LOW_12";
267 case SEND_VOLUME_TAG:
268 what = "SEND_VOLUME_TAG";
270 case READ_ELEMENT_STATUS:
271 what = "READ_ELEMENT_STATUS";
273 case GPCMD_READ_CD_MSF:
274 what = "READ CD MSF";
279 case GPCMD_SET_SPEED:
280 what = "SET CD SPEED";
282 case GPCMD_MECHANISM_STATUS:
283 what = "MECHANISM STATUS";
289 what = "WRITE CONTINUE";
292 what = "WRITE_LONG_2";
295 what = "Realtek's vendor command";
298 what = "(unknown command)";
303 if (srb->cmnd[0] != TEST_UNIT_READY)
304 dev_dbg(rtsx_dev(chip), "Command %s (%d bytes)\n",
308 len = min_t(unsigned short, srb->cmd_len, 16);
309 dev_dbg(rtsx_dev(chip), "%*ph\n", len, srb->cmnd);
313 void set_sense_type(struct rtsx_chip *chip, unsigned int lun, int sense_type)
315 switch (sense_type) {
316 case SENSE_TYPE_MEDIA_CHANGE:
317 set_sense_data(chip, lun, CUR_ERR, 0x06, 0, 0x28, 0, 0, 0);
320 case SENSE_TYPE_MEDIA_NOT_PRESENT:
321 set_sense_data(chip, lun, CUR_ERR, 0x02, 0, 0x3A, 0, 0, 0);
324 case SENSE_TYPE_MEDIA_LBA_OVER_RANGE:
325 set_sense_data(chip, lun, CUR_ERR, 0x05, 0, 0x21, 0, 0, 0);
328 case SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT:
329 set_sense_data(chip, lun, CUR_ERR, 0x05, 0, 0x25, 0, 0, 0);
332 case SENSE_TYPE_MEDIA_WRITE_PROTECT:
333 set_sense_data(chip, lun, CUR_ERR, 0x07, 0, 0x27, 0, 0, 0);
336 case SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR:
337 set_sense_data(chip, lun, CUR_ERR, 0x03, 0, 0x11, 0, 0, 0);
340 case SENSE_TYPE_MEDIA_WRITE_ERR:
341 set_sense_data(chip, lun, CUR_ERR, 0x03, 0, 0x0C, 0x02, 0, 0);
344 case SENSE_TYPE_MEDIA_INVALID_CMD_FIELD:
345 set_sense_data(chip, lun, CUR_ERR, ILGAL_REQ, 0,
346 ASC_INVLD_CDB, ASCQ_INVLD_CDB, CDB_ILLEGAL, 1);
349 case SENSE_TYPE_FORMAT_IN_PROGRESS:
350 set_sense_data(chip, lun, CUR_ERR, 0x02, 0, 0x04, 0x04, 0, 0);
353 case SENSE_TYPE_FORMAT_CMD_FAILED:
354 set_sense_data(chip, lun, CUR_ERR, 0x03, 0, 0x31, 0x01, 0, 0);
357 #ifdef SUPPORT_MAGIC_GATE
358 case SENSE_TYPE_MG_KEY_FAIL_NOT_ESTAB:
359 set_sense_data(chip, lun, CUR_ERR, 0x05, 0, 0x6F, 0x02, 0, 0);
362 case SENSE_TYPE_MG_KEY_FAIL_NOT_AUTHEN:
363 set_sense_data(chip, lun, CUR_ERR, 0x05, 0, 0x6F, 0x00, 0, 0);
366 case SENSE_TYPE_MG_INCOMPATIBLE_MEDIUM:
367 set_sense_data(chip, lun, CUR_ERR, 0x02, 0, 0x30, 0x00, 0, 0);
370 case SENSE_TYPE_MG_WRITE_ERR:
371 set_sense_data(chip, lun, CUR_ERR, 0x03, 0, 0x0C, 0x00, 0, 0);
375 #ifdef SUPPORT_SD_LOCK
376 case SENSE_TYPE_MEDIA_READ_FORBIDDEN:
377 set_sense_data(chip, lun, CUR_ERR, 0x07, 0, 0x11, 0x13, 0, 0);
381 case SENSE_TYPE_NO_SENSE:
383 set_sense_data(chip, lun, CUR_ERR, 0, 0, 0, 0, 0, 0);
388 void set_sense_data(struct rtsx_chip *chip, unsigned int lun, u8 err_code,
389 u8 sense_key, u32 info, u8 asc, u8 ascq, u8 sns_key_info0,
392 struct sense_data_t *sense = &chip->sense_buffer[lun];
394 sense->err_code = err_code;
395 sense->sense_key = sense_key;
396 sense->info[0] = (u8)(info >> 24);
397 sense->info[1] = (u8)(info >> 16);
398 sense->info[2] = (u8)(info >> 8);
399 sense->info[3] = (u8)info;
401 sense->ad_sense_len = sizeof(struct sense_data_t) - 8;
404 if (sns_key_info0 != 0) {
405 sense->sns_key_info[0] = SKSV | sns_key_info0;
406 sense->sns_key_info[1] = (sns_key_info1 & 0xf0) >> 4;
407 sense->sns_key_info[2] = sns_key_info1 & 0x0f;
411 static int test_unit_ready(struct scsi_cmnd *srb, struct rtsx_chip *chip)
413 unsigned int lun = SCSI_LUN(srb);
415 if (!check_card_ready(chip, lun)) {
416 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
417 return TRANSPORT_FAILED;
420 if (!(CHK_BIT(chip->lun_mc, lun))) {
421 SET_BIT(chip->lun_mc, lun);
422 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
423 return TRANSPORT_FAILED;
426 #ifdef SUPPORT_SD_LOCK
427 if (get_lun_card(chip, SCSI_LUN(srb)) == SD_CARD) {
428 struct sd_info *sd_card = &chip->sd_card;
430 if (sd_card->sd_lock_notify) {
431 sd_card->sd_lock_notify = 0;
432 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
433 return TRANSPORT_FAILED;
434 } else if (sd_card->sd_lock_status & SD_LOCKED) {
435 set_sense_type(chip, lun,
436 SENSE_TYPE_MEDIA_READ_FORBIDDEN);
437 return TRANSPORT_FAILED;
442 return TRANSPORT_GOOD;
445 static unsigned char formatter_inquiry_str[20] = {
446 'M', 'E', 'M', 'O', 'R', 'Y', 'S', 'T', 'I', 'C', 'K',
447 #ifdef SUPPORT_MAGIC_GATE
448 '-', 'M', 'G', /* Byte[47:49] */
450 0x20, 0x20, 0x20, /* Byte[47:49] */
453 #ifdef SUPPORT_MAGIC_GATE
454 0x0B, /* Byte[50]: MG, MS, MSPro, MSXC */
456 0x09, /* Byte[50]: MS, MSPro, MSXC */
458 0x00, /* Byte[51]: Category Specific Commands */
459 0x00, /* Byte[52]: Access Control and feature */
460 0x20, 0x20, 0x20, /* Byte[53:55] */
463 static int inquiry(struct scsi_cmnd *srb, struct rtsx_chip *chip)
465 unsigned int lun = SCSI_LUN(srb);
466 char *inquiry_default = (char *)"Generic-xD/SD/M.S. 1.00 ";
467 char *inquiry_sdms = (char *)"Generic-SD/MemoryStick 1.00 ";
468 char *inquiry_sd = (char *)"Generic-SD/MMC 1.00 ";
469 char *inquiry_ms = (char *)"Generic-MemoryStick 1.00 ";
470 char *inquiry_string;
471 unsigned char sendbytes;
473 u8 card = get_lun_card(chip, lun);
474 bool pro_formatter_flag = false;
475 unsigned char inquiry_buf[] = {
476 QULIFIRE | DRCT_ACCESS_DEV,
483 REL_ADR | WBUS_32 | WBUS_16 | SYNC | LINKED | CMD_QUE | SFT_RE,
486 if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
487 if (chip->lun2card[lun] == SD_CARD)
488 inquiry_string = inquiry_sd;
490 inquiry_string = inquiry_ms;
492 } else if (CHECK_LUN_MODE(chip, SD_MS_1LUN)) {
493 inquiry_string = inquiry_sdms;
495 inquiry_string = inquiry_default;
498 buf = vmalloc(scsi_bufflen(srb));
500 return TRANSPORT_ERROR;
502 #ifdef SUPPORT_MAGIC_GATE
503 if ((chip->mspro_formatter_enable) &&
504 (chip->lun2card[lun] & MS_CARD))
506 if (chip->mspro_formatter_enable)
508 if (!card || (card == MS_CARD))
509 pro_formatter_flag = true;
511 if (pro_formatter_flag) {
512 if (scsi_bufflen(srb) < 56)
513 sendbytes = (unsigned char)(scsi_bufflen(srb));
518 if (scsi_bufflen(srb) < 36)
519 sendbytes = (unsigned char)(scsi_bufflen(srb));
525 memcpy(buf, inquiry_buf, 8);
526 strncpy(buf + 8, inquiry_string, sendbytes - 8);
527 if (pro_formatter_flag) {
528 /* Additional Length */
532 memcpy(buf, inquiry_buf, sendbytes);
535 if (pro_formatter_flag) {
537 memcpy(buf + 36, formatter_inquiry_str, sendbytes - 36);
540 scsi_set_resid(srb, 0);
542 rtsx_stor_set_xfer_buf(buf, scsi_bufflen(srb), srb);
545 return TRANSPORT_GOOD;
548 static int start_stop_unit(struct scsi_cmnd *srb, struct rtsx_chip *chip)
550 unsigned int lun = SCSI_LUN(srb);
552 scsi_set_resid(srb, scsi_bufflen(srb));
554 if (srb->cmnd[1] == 1)
555 return TRANSPORT_GOOD;
557 switch (srb->cmnd[0x4]) {
560 return TRANSPORT_GOOD;
563 /* Media shall be unload */
564 if (check_card_ready(chip, lun))
565 eject_card(chip, lun);
566 return TRANSPORT_GOOD;
568 case MAKE_MEDIUM_READY:
570 if (check_card_ready(chip, lun))
571 return TRANSPORT_GOOD;
572 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
573 return TRANSPORT_FAILED;
578 return TRANSPORT_ERROR;
581 static int allow_medium_removal(struct scsi_cmnd *srb, struct rtsx_chip *chip)
585 prevent = srb->cmnd[4] & 0x1;
587 scsi_set_resid(srb, 0);
590 set_sense_type(chip, SCSI_LUN(srb),
591 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
592 return TRANSPORT_FAILED;
595 return TRANSPORT_GOOD;
598 static int request_sense(struct scsi_cmnd *srb, struct rtsx_chip *chip)
600 struct sense_data_t *sense;
601 unsigned int lun = SCSI_LUN(srb);
602 struct ms_info *ms_card = &chip->ms_card;
603 unsigned char *tmp, *buf;
605 sense = &chip->sense_buffer[lun];
607 if ((get_lun_card(chip, lun) == MS_CARD) &&
608 ms_card->pro_under_formatting) {
609 if (ms_card->format_status == FORMAT_SUCCESS) {
610 set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
611 ms_card->pro_under_formatting = 0;
612 ms_card->progress = 0;
613 } else if (ms_card->format_status == FORMAT_IN_PROGRESS) {
614 /* Logical Unit Not Ready Format in Progress */
615 set_sense_data(chip, lun, CUR_ERR, 0x02, 0, 0x04, 0x04,
616 0, (u16)(ms_card->progress));
618 /* Format Command Failed */
619 set_sense_type(chip, lun, SENSE_TYPE_FORMAT_CMD_FAILED);
620 ms_card->pro_under_formatting = 0;
621 ms_card->progress = 0;
624 rtsx_set_stat(chip, RTSX_STAT_RUN);
627 buf = vmalloc(scsi_bufflen(srb));
629 return TRANSPORT_ERROR;
631 tmp = (unsigned char *)sense;
632 memcpy(buf, tmp, scsi_bufflen(srb));
634 rtsx_stor_set_xfer_buf(buf, scsi_bufflen(srb), srb);
637 scsi_set_resid(srb, 0);
638 /* Reset Sense Data */
639 set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
640 return TRANSPORT_GOOD;
643 static void ms_mode_sense(struct rtsx_chip *chip, u8 cmd,
644 int lun, u8 *buf, int buf_len)
646 struct ms_info *ms_card = &chip->ms_card;
648 int data_size = buf_len;
649 bool support_format = false;
652 if (cmd == MODE_SENSE) {
654 if (data_size > 0x68)
657 buf[i++] = 0x67; /* Mode Data Length */
659 sys_info_offset = 12;
660 if (data_size > 0x6C)
663 buf[i++] = 0x00; /* Mode Data Length (MSB) */
664 buf[i++] = 0x6A; /* Mode Data Length (LSB) */
667 /* Medium Type Code */
668 if (check_card_ready(chip, lun)) {
669 if (CHK_MSXC(ms_card)) {
670 support_format = true;
672 } else if (CHK_MSPRO(ms_card)) {
673 support_format = true;
680 if (check_card_wp(chip, lun))
686 buf[i++] = 0x00; /* MediaType */
687 buf[i++] = 0x00; /* WP */
690 buf[i++] = 0x00; /* Reserved */
692 if (cmd == MODE_SENSE_10) {
693 buf[i++] = 0x00; /* Reserved */
694 buf[i++] = 0x00; /* Block descriptor length(MSB) */
695 buf[i++] = 0x00; /* Block descriptor length(LSB) */
697 /* The Following Data is the content of "Page 0x20" */
699 buf[i++] = 0x20; /* Page Code */
701 buf[i++] = 0x62; /* Page Length */
703 buf[i++] = 0x00; /* No Access Control */
704 if (data_size >= 12) {
706 buf[i++] = 0xC0; /* SF, SGM */
711 /* The Following Data is the content of "Page 0x20" */
713 buf[i++] = 0x20; /* Page Code */
715 buf[i++] = 0x62; /* Page Length */
717 buf[i++] = 0x00; /* No Access Control */
718 if (data_size >= 8) {
720 buf[i++] = 0xC0; /* SF, SGM */
726 if (data_size > sys_info_offset) {
727 /* 96 Bytes Attribute Data */
728 int len = data_size - sys_info_offset;
730 len = (len < 96) ? len : 96;
732 memcpy(buf + sys_info_offset, ms_card->raw_sys_info, len);
736 static int mode_sense(struct scsi_cmnd *srb, struct rtsx_chip *chip)
738 unsigned int lun = SCSI_LUN(srb);
739 unsigned int data_size;
741 bool pro_formatter_flag;
742 unsigned char page_code, *buf;
743 u8 card = get_lun_card(chip, lun);
745 #ifndef SUPPORT_MAGIC_GATE
746 if (!check_card_ready(chip, lun)) {
747 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
748 scsi_set_resid(srb, scsi_bufflen(srb));
749 return TRANSPORT_FAILED;
753 pro_formatter_flag = false;
755 #ifdef SUPPORT_MAGIC_GATE
756 if ((chip->lun2card[lun] & MS_CARD)) {
757 if (!card || (card == MS_CARD)) {
759 if (chip->mspro_formatter_enable)
760 pro_formatter_flag = true;
764 if (card == MS_CARD) {
765 if (chip->mspro_formatter_enable) {
766 pro_formatter_flag = true;
772 buf = kmalloc(data_size, GFP_KERNEL);
774 return TRANSPORT_ERROR;
776 page_code = srb->cmnd[2] & 0x3f;
778 if ((page_code == 0x3F) || (page_code == 0x1C) ||
779 (page_code == 0x00) ||
780 (pro_formatter_flag && (page_code == 0x20))) {
781 if (srb->cmnd[0] == MODE_SENSE) {
782 if ((page_code == 0x3F) || (page_code == 0x20)) {
783 ms_mode_sense(chip, srb->cmnd[0],
784 lun, buf, data_size);
789 if (check_card_wp(chip, lun))
797 if ((page_code == 0x3F) || (page_code == 0x20)) {
798 ms_mode_sense(chip, srb->cmnd[0],
799 lun, buf, data_size);
805 if (check_card_wp(chip, lun))
815 status = TRANSPORT_GOOD;
817 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
818 scsi_set_resid(srb, scsi_bufflen(srb));
819 status = TRANSPORT_FAILED;
822 if (status == TRANSPORT_GOOD) {
823 unsigned int len = min_t(unsigned int, scsi_bufflen(srb),
825 rtsx_stor_set_xfer_buf(buf, len, srb);
826 scsi_set_resid(srb, scsi_bufflen(srb) - len);
833 static int read_write(struct scsi_cmnd *srb, struct rtsx_chip *chip)
835 #ifdef SUPPORT_SD_LOCK
836 struct sd_info *sd_card = &chip->sd_card;
838 unsigned int lun = SCSI_LUN(srb);
843 rtsx_disable_aspm(chip);
845 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
849 rtsx_set_stat(chip, RTSX_STAT_RUN);
851 if (!check_card_ready(chip, lun) || (get_card_size(chip, lun) == 0)) {
852 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
853 return TRANSPORT_FAILED;
856 if (!(CHK_BIT(chip->lun_mc, lun))) {
857 SET_BIT(chip->lun_mc, lun);
858 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
859 return TRANSPORT_FAILED;
862 #ifdef SUPPORT_SD_LOCK
863 if (sd_card->sd_erase_status) {
864 /* Accessing to any card is forbidden
865 * until the erase procedure of SD is completed
867 dev_dbg(rtsx_dev(chip), "SD card being erased!\n");
868 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_READ_FORBIDDEN);
869 return TRANSPORT_FAILED;
872 if (get_lun_card(chip, lun) == SD_CARD) {
873 if (sd_card->sd_lock_status & SD_LOCKED) {
874 dev_dbg(rtsx_dev(chip), "SD card locked!\n");
875 set_sense_type(chip, lun,
876 SENSE_TYPE_MEDIA_READ_FORBIDDEN);
877 return TRANSPORT_FAILED;
882 if ((srb->cmnd[0] == READ_10) || (srb->cmnd[0] == WRITE_10)) {
883 start_sec = ((u32)srb->cmnd[2] << 24) |
884 ((u32)srb->cmnd[3] << 16) |
885 ((u32)srb->cmnd[4] << 8) | ((u32)srb->cmnd[5]);
886 sec_cnt = ((u16)(srb->cmnd[7]) << 8) | srb->cmnd[8];
887 } else if ((srb->cmnd[0] == READ_6) || (srb->cmnd[0] == WRITE_6)) {
888 start_sec = ((u32)(srb->cmnd[1] & 0x1F) << 16) |
889 ((u32)srb->cmnd[2] << 8) | ((u32)srb->cmnd[3]);
890 sec_cnt = srb->cmnd[4];
893 } else if ((srb->cmnd[0] == VENDOR_CMND) &&
894 (srb->cmnd[1] == SCSI_APP_CMD) &&
895 ((srb->cmnd[2] == PP_READ10) || (srb->cmnd[2] == PP_WRITE10))) {
896 start_sec = ((u32)srb->cmnd[4] << 24) |
897 ((u32)srb->cmnd[5] << 16) |
898 ((u32)srb->cmnd[6] << 8) | ((u32)srb->cmnd[7]);
899 sec_cnt = ((u16)(srb->cmnd[9]) << 8) | srb->cmnd[10];
901 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
902 return TRANSPORT_FAILED;
905 /* In some test, we will receive a start_sec like 0xFFFFFFFF.
906 * In this situation, start_sec + sec_cnt will overflow, so we
907 * need to judge start_sec at first
909 if ((start_sec > get_card_size(chip, lun)) ||
910 ((start_sec + sec_cnt) > get_card_size(chip, lun))) {
911 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LBA_OVER_RANGE);
912 return TRANSPORT_FAILED;
916 scsi_set_resid(srb, 0);
917 return TRANSPORT_GOOD;
920 if (chip->rw_fail_cnt[lun] == 3) {
921 dev_dbg(rtsx_dev(chip), "read/write fail three times in succession\n");
922 if (srb->sc_data_direction == DMA_FROM_DEVICE)
923 set_sense_type(chip, lun,
924 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
926 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_ERR);
928 return TRANSPORT_FAILED;
931 if (srb->sc_data_direction == DMA_TO_DEVICE) {
932 if (check_card_wp(chip, lun)) {
933 dev_dbg(rtsx_dev(chip), "Write protected card!\n");
934 set_sense_type(chip, lun,
935 SENSE_TYPE_MEDIA_WRITE_PROTECT);
936 return TRANSPORT_FAILED;
940 retval = card_rw(srb, chip, start_sec, sec_cnt);
941 if (retval != STATUS_SUCCESS) {
942 if (chip->need_release & chip->lun2card[lun]) {
943 chip->rw_fail_cnt[lun] = 0;
944 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
946 chip->rw_fail_cnt[lun]++;
947 if (srb->sc_data_direction == DMA_FROM_DEVICE)
950 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
952 set_sense_type(chip, lun,
953 SENSE_TYPE_MEDIA_WRITE_ERR);
955 retval = TRANSPORT_FAILED;
958 chip->rw_fail_cnt[lun] = 0;
959 retval = TRANSPORT_GOOD;
962 scsi_set_resid(srb, 0);
968 static int read_format_capacity(struct scsi_cmnd *srb, struct rtsx_chip *chip)
971 unsigned int lun = SCSI_LUN(srb);
972 unsigned int buf_len;
973 u8 card = get_lun_card(chip, lun);
978 if (!check_card_ready(chip, lun)) {
979 if (!chip->mspro_formatter_enable) {
980 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
981 return TRANSPORT_FAILED;
985 buf_len = (scsi_bufflen(srb) > 12) ? 0x14 : 12;
987 buf = kmalloc(buf_len, GFP_KERNEL);
989 return TRANSPORT_ERROR;
995 /* Capacity List Length */
996 if ((buf_len > 12) && chip->mspro_formatter_enable &&
997 (chip->lun2card[lun] & MS_CARD) &&
998 (!card || (card == MS_CARD))) {
1007 if (check_card_ready(chip, lun)) {
1008 card_size = get_card_size(chip, lun);
1009 buf[i++] = (unsigned char)(card_size >> 24);
1010 buf[i++] = (unsigned char)(card_size >> 16);
1011 buf[i++] = (unsigned char)(card_size >> 8);
1012 buf[i++] = (unsigned char)card_size;
1037 buf_len = min_t(unsigned int, scsi_bufflen(srb), buf_len);
1038 rtsx_stor_set_xfer_buf(buf, buf_len, srb);
1041 scsi_set_resid(srb, scsi_bufflen(srb) - buf_len);
1043 return TRANSPORT_GOOD;
1046 static int read_capacity(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1049 unsigned int lun = SCSI_LUN(srb);
1052 if (!check_card_ready(chip, lun)) {
1053 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
1054 return TRANSPORT_FAILED;
1057 if (!(CHK_BIT(chip->lun_mc, lun))) {
1058 SET_BIT(chip->lun_mc, lun);
1059 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
1060 return TRANSPORT_FAILED;
1063 buf = kmalloc(8, GFP_KERNEL);
1065 return TRANSPORT_ERROR;
1067 card_size = get_card_size(chip, lun);
1068 buf[0] = (unsigned char)((card_size - 1) >> 24);
1069 buf[1] = (unsigned char)((card_size - 1) >> 16);
1070 buf[2] = (unsigned char)((card_size - 1) >> 8);
1071 buf[3] = (unsigned char)(card_size - 1);
1078 rtsx_stor_set_xfer_buf(buf, scsi_bufflen(srb), srb);
1081 scsi_set_resid(srb, 0);
1083 return TRANSPORT_GOOD;
1086 static int read_eeprom(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1088 unsigned short len, i;
1092 rtsx_disable_aspm(chip);
1094 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1098 rtsx_set_stat(chip, RTSX_STAT_RUN);
1100 len = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5];
1104 return TRANSPORT_ERROR;
1106 retval = rtsx_force_power_on(chip, SSC_PDCTL);
1107 if (retval != STATUS_SUCCESS) {
1109 set_sense_type(chip, SCSI_LUN(srb),
1110 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1111 return TRANSPORT_FAILED;
1114 for (i = 0; i < len; i++) {
1115 retval = spi_read_eeprom(chip, i, buf + i);
1116 if (retval != STATUS_SUCCESS) {
1118 set_sense_type(chip, SCSI_LUN(srb),
1119 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1120 return TRANSPORT_FAILED;
1124 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb), len);
1125 rtsx_stor_set_xfer_buf(buf, len, srb);
1126 scsi_set_resid(srb, scsi_bufflen(srb) - len);
1130 return TRANSPORT_GOOD;
1133 static int write_eeprom(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1135 unsigned short len, i;
1139 rtsx_disable_aspm(chip);
1141 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1145 rtsx_set_stat(chip, RTSX_STAT_RUN);
1147 len = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5];
1149 retval = rtsx_force_power_on(chip, SSC_PDCTL);
1150 if (retval != STATUS_SUCCESS) {
1151 set_sense_type(chip, SCSI_LUN(srb), SENSE_TYPE_MEDIA_WRITE_ERR);
1152 return TRANSPORT_FAILED;
1156 retval = spi_erase_eeprom_chip(chip);
1157 if (retval != STATUS_SUCCESS) {
1158 set_sense_type(chip, SCSI_LUN(srb),
1159 SENSE_TYPE_MEDIA_WRITE_ERR);
1160 return TRANSPORT_FAILED;
1163 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb),
1167 return TRANSPORT_ERROR;
1169 rtsx_stor_get_xfer_buf(buf, len, srb);
1170 scsi_set_resid(srb, scsi_bufflen(srb) - len);
1172 for (i = 0; i < len; i++) {
1173 retval = spi_write_eeprom(chip, i, buf[i]);
1174 if (retval != STATUS_SUCCESS) {
1176 set_sense_type(chip, SCSI_LUN(srb),
1177 SENSE_TYPE_MEDIA_WRITE_ERR);
1178 return TRANSPORT_FAILED;
1185 return TRANSPORT_GOOD;
1188 static int read_mem(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1190 unsigned short addr, len, i;
1194 rtsx_disable_aspm(chip);
1196 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1200 rtsx_set_stat(chip, RTSX_STAT_RUN);
1202 addr = ((u16)srb->cmnd[2] << 8) | srb->cmnd[3];
1203 len = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5];
1205 if (addr < 0xFC00) {
1206 set_sense_type(chip, SCSI_LUN(srb),
1207 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1208 return TRANSPORT_FAILED;
1213 return TRANSPORT_ERROR;
1215 retval = rtsx_force_power_on(chip, SSC_PDCTL);
1216 if (retval != STATUS_SUCCESS) {
1218 set_sense_type(chip, SCSI_LUN(srb), SENSE_TYPE_MEDIA_WRITE_ERR);
1219 return TRANSPORT_FAILED;
1222 for (i = 0; i < len; i++) {
1223 retval = rtsx_read_register(chip, addr + i, buf + i);
1224 if (retval != STATUS_SUCCESS) {
1226 set_sense_type(chip, SCSI_LUN(srb),
1227 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1228 return TRANSPORT_FAILED;
1232 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb), len);
1233 rtsx_stor_set_xfer_buf(buf, len, srb);
1234 scsi_set_resid(srb, scsi_bufflen(srb) - len);
1238 return TRANSPORT_GOOD;
1241 static int write_mem(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1243 unsigned short addr, len, i;
1247 rtsx_disable_aspm(chip);
1249 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1253 rtsx_set_stat(chip, RTSX_STAT_RUN);
1255 addr = ((u16)srb->cmnd[2] << 8) | srb->cmnd[3];
1256 len = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5];
1258 if (addr < 0xFC00) {
1259 set_sense_type(chip, SCSI_LUN(srb),
1260 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1261 return TRANSPORT_FAILED;
1264 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb), len);
1267 return TRANSPORT_ERROR;
1269 rtsx_stor_get_xfer_buf(buf, len, srb);
1270 scsi_set_resid(srb, scsi_bufflen(srb) - len);
1272 retval = rtsx_force_power_on(chip, SSC_PDCTL);
1273 if (retval != STATUS_SUCCESS) {
1275 set_sense_type(chip, SCSI_LUN(srb), SENSE_TYPE_MEDIA_WRITE_ERR);
1276 return TRANSPORT_FAILED;
1279 for (i = 0; i < len; i++) {
1280 retval = rtsx_write_register(chip, addr + i, 0xFF, buf[i]);
1281 if (retval != STATUS_SUCCESS) {
1283 set_sense_type(chip, SCSI_LUN(srb),
1284 SENSE_TYPE_MEDIA_WRITE_ERR);
1285 return TRANSPORT_FAILED;
1291 return TRANSPORT_GOOD;
1294 static int get_sd_csd(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1296 struct sd_info *sd_card = &chip->sd_card;
1297 unsigned int lun = SCSI_LUN(srb);
1299 if (!check_card_ready(chip, lun)) {
1300 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
1301 return TRANSPORT_FAILED;
1304 if (get_lun_card(chip, lun) != SD_CARD) {
1305 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1306 return TRANSPORT_FAILED;
1309 scsi_set_resid(srb, 0);
1310 rtsx_stor_set_xfer_buf(sd_card->raw_csd, scsi_bufflen(srb), srb);
1312 return TRANSPORT_GOOD;
1315 static int toggle_gpio_cmd(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1317 u8 gpio = srb->cmnd[2];
1319 rtsx_disable_aspm(chip);
1321 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1325 rtsx_set_stat(chip, RTSX_STAT_RUN);
1329 toggle_gpio(chip, gpio);
1331 return TRANSPORT_GOOD;
1334 static int read_host_reg(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1340 rtsx_disable_aspm(chip);
1342 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1346 rtsx_set_stat(chip, RTSX_STAT_RUN);
1348 addr = srb->cmnd[4];
1350 val = rtsx_readl(chip, addr);
1351 dev_dbg(rtsx_dev(chip), "Host register (0x%x): 0x%x\n", addr, val);
1353 buf[0] = (u8)(val >> 24);
1354 buf[1] = (u8)(val >> 16);
1355 buf[2] = (u8)(val >> 8);
1358 len = min_t(unsigned int, scsi_bufflen(srb), 4);
1359 rtsx_stor_set_xfer_buf(buf, len, srb);
1360 scsi_set_resid(srb, scsi_bufflen(srb) - len);
1362 return TRANSPORT_GOOD;
1365 static int write_host_reg(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1371 rtsx_disable_aspm(chip);
1373 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1377 rtsx_set_stat(chip, RTSX_STAT_RUN);
1379 addr = srb->cmnd[4];
1381 len = min_t(unsigned int, scsi_bufflen(srb), 4);
1382 rtsx_stor_get_xfer_buf(buf, len, srb);
1383 scsi_set_resid(srb, scsi_bufflen(srb) - len);
1385 val = ((u32)buf[0] << 24) | ((u32)buf[1] << 16) | ((u32)buf[2]
1388 rtsx_writel(chip, addr, val);
1390 return TRANSPORT_GOOD;
1393 static int set_variable(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1395 unsigned int lun = SCSI_LUN(srb);
1397 if (srb->cmnd[3] == 1) {
1398 /* Variable Clock */
1399 struct xd_info *xd_card = &chip->xd_card;
1400 struct sd_info *sd_card = &chip->sd_card;
1401 struct ms_info *ms_card = &chip->ms_card;
1403 switch (srb->cmnd[4]) {
1405 xd_card->xd_clock = srb->cmnd[5];
1409 sd_card->sd_clock = srb->cmnd[5];
1413 ms_card->ms_clock = srb->cmnd[5];
1417 set_sense_type(chip, lun,
1418 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1419 return TRANSPORT_FAILED;
1421 } else if (srb->cmnd[3] == 2) {
1423 chip->blink_led = 1;
1427 chip->blink_led = 0;
1429 rtsx_disable_aspm(chip);
1432 (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1436 rtsx_set_stat(chip, RTSX_STAT_RUN);
1438 retval = rtsx_force_power_on(chip, SSC_PDCTL);
1439 if (retval != STATUS_SUCCESS) {
1440 set_sense_type(chip, SCSI_LUN(srb),
1441 SENSE_TYPE_MEDIA_WRITE_ERR);
1442 return TRANSPORT_FAILED;
1445 turn_off_led(chip, LED_GPIO);
1448 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1449 return TRANSPORT_FAILED;
1452 return TRANSPORT_GOOD;
1455 static int get_variable(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1457 unsigned int lun = SCSI_LUN(srb);
1459 if (srb->cmnd[3] == 1) {
1460 struct xd_info *xd_card = &chip->xd_card;
1461 struct sd_info *sd_card = &chip->sd_card;
1462 struct ms_info *ms_card = &chip->ms_card;
1465 switch (srb->cmnd[4]) {
1467 tmp = (u8)(xd_card->xd_clock);
1471 tmp = (u8)(sd_card->sd_clock);
1475 tmp = (u8)(ms_card->ms_clock);
1479 set_sense_type(chip, lun,
1480 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1481 return TRANSPORT_FAILED;
1484 rtsx_stor_set_xfer_buf(&tmp, 1, srb);
1485 } else if (srb->cmnd[3] == 2) {
1486 u8 tmp = chip->blink_led;
1488 rtsx_stor_set_xfer_buf(&tmp, 1, srb);
1490 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1491 return TRANSPORT_FAILED;
1494 return TRANSPORT_GOOD;
1497 static int dma_access_ring_buffer(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1500 unsigned int lun = SCSI_LUN(srb);
1503 rtsx_disable_aspm(chip);
1505 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1509 rtsx_set_stat(chip, RTSX_STAT_RUN);
1511 len = ((u16)(srb->cmnd[4]) << 8) | srb->cmnd[5];
1512 len = min_t(u16, len, scsi_bufflen(srb));
1514 if (srb->sc_data_direction == DMA_FROM_DEVICE)
1515 dev_dbg(rtsx_dev(chip), "Read from device\n");
1517 dev_dbg(rtsx_dev(chip), "Write to device\n");
1519 retval = rtsx_transfer_data(chip, 0, scsi_sglist(srb), len,
1520 scsi_sg_count(srb), srb->sc_data_direction,
1523 if (srb->sc_data_direction == DMA_FROM_DEVICE)
1524 set_sense_type(chip, lun,
1525 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1527 set_sense_type(chip, lun,
1528 SENSE_TYPE_MEDIA_WRITE_ERR);
1530 return TRANSPORT_FAILED;
1532 scsi_set_resid(srb, 0);
1534 return TRANSPORT_GOOD;
1537 static int get_dev_status(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1539 struct sd_info *sd_card = &chip->sd_card;
1540 struct ms_info *ms_card = &chip->ms_card;
1542 unsigned int lun = SCSI_LUN(srb);
1543 u8 card = get_lun_card(chip, lun);
1546 u8 oc_now_mask = 0, oc_ever_mask = 0;
1549 memset(status, 0, 32);
1551 status[0] = (u8)(chip->product_id);
1552 status[1] = chip->ic_version;
1554 if (chip->auto_delink_en)
1571 if (CHECK_LUN_MODE(chip, SD_MS_2LUN) &&
1572 (chip->lun2card[lun] == MS_CARD)) {
1573 oc_now_mask = MS_OC_NOW;
1574 oc_ever_mask = MS_OC_EVER;
1576 oc_now_mask = SD_OC_NOW;
1577 oc_ever_mask = SD_OC_EVER;
1580 if (chip->ocp_stat & oc_now_mask)
1583 if (chip->ocp_stat & oc_ever_mask)
1587 if (card == SD_CARD) {
1588 if (CHK_SD(sd_card)) {
1589 if (CHK_SD_HCXC(sd_card)) {
1590 if (sd_card->capacity > 0x4000000)
1591 status[0x0E] = 0x02;
1593 status[0x0E] = 0x01;
1595 status[0x0E] = 0x00;
1598 if (CHK_SD_SDR104(sd_card))
1599 status[0x0F] = 0x03;
1600 else if (CHK_SD_DDR50(sd_card))
1601 status[0x0F] = 0x04;
1602 else if (CHK_SD_SDR50(sd_card))
1603 status[0x0F] = 0x02;
1604 else if (CHK_SD_HS(sd_card))
1605 status[0x0F] = 0x01;
1607 status[0x0F] = 0x00;
1609 if (CHK_MMC_SECTOR_MODE(sd_card))
1610 status[0x0E] = 0x01;
1612 status[0x0E] = 0x00;
1614 if (CHK_MMC_DDR52(sd_card))
1615 status[0x0F] = 0x03;
1616 else if (CHK_MMC_52M(sd_card))
1617 status[0x0F] = 0x02;
1618 else if (CHK_MMC_26M(sd_card))
1619 status[0x0F] = 0x01;
1621 status[0x0F] = 0x00;
1623 } else if (card == MS_CARD) {
1624 if (CHK_MSPRO(ms_card)) {
1625 if (CHK_MSXC(ms_card))
1626 status[0x0E] = 0x01;
1628 status[0x0E] = 0x00;
1630 if (CHK_HG8BIT(ms_card))
1631 status[0x0F] = 0x01;
1633 status[0x0F] = 0x00;
1637 #ifdef SUPPORT_SD_LOCK
1638 if (card == SD_CARD) {
1639 status[0x17] = 0x80;
1640 if (sd_card->sd_erase_status)
1641 status[0x17] |= 0x01;
1642 if (sd_card->sd_lock_status & SD_LOCKED) {
1643 status[0x17] |= 0x02;
1644 status[0x07] |= 0x40;
1646 if (sd_card->sd_lock_status & SD_PWD_EXIST)
1647 status[0x17] |= 0x04;
1649 status[0x17] = 0x00;
1652 dev_dbg(rtsx_dev(chip), "status[0x17] = 0x%x\n", status[0x17]);
1655 status[0x18] = 0x8A;
1656 status[0x1A] = 0x28;
1657 #ifdef SUPPORT_SD_LOCK
1658 status[0x1F] = 0x01;
1661 buf_len = min_t(unsigned int, scsi_bufflen(srb), sizeof(status));
1662 rtsx_stor_set_xfer_buf(status, buf_len, srb);
1663 scsi_set_resid(srb, scsi_bufflen(srb) - buf_len);
1665 return TRANSPORT_GOOD;
1668 static int set_chip_mode(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1674 if (!CHECK_PID(chip, 0x5208)) {
1675 set_sense_type(chip, SCSI_LUN(srb),
1676 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1677 return TRANSPORT_FAILED;
1680 phy_debug_mode = (int)(srb->cmnd[3]);
1682 if (phy_debug_mode) {
1683 chip->phy_debug_mode = 1;
1684 retval = rtsx_write_register(chip, CDRESUMECTL, 0x77, 0);
1685 if (retval != STATUS_SUCCESS)
1686 return TRANSPORT_FAILED;
1688 rtsx_disable_bus_int(chip);
1690 retval = rtsx_read_phy_register(chip, 0x1C, ®);
1691 if (retval != STATUS_SUCCESS)
1692 return TRANSPORT_FAILED;
1695 retval = rtsx_write_phy_register(chip, 0x1C, reg);
1696 if (retval != STATUS_SUCCESS)
1697 return TRANSPORT_FAILED;
1699 chip->phy_debug_mode = 0;
1700 retval = rtsx_write_register(chip, CDRESUMECTL, 0x77, 0x77);
1701 if (retval != STATUS_SUCCESS)
1702 return TRANSPORT_FAILED;
1704 rtsx_enable_bus_int(chip);
1706 retval = rtsx_read_phy_register(chip, 0x1C, ®);
1707 if (retval != STATUS_SUCCESS)
1708 return TRANSPORT_FAILED;
1711 retval = rtsx_write_phy_register(chip, 0x1C, reg);
1712 if (retval != STATUS_SUCCESS)
1713 return TRANSPORT_FAILED;
1716 return TRANSPORT_GOOD;
1719 static int rw_mem_cmd_buf(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1721 int retval = STATUS_SUCCESS;
1722 unsigned int lun = SCSI_LUN(srb);
1723 u8 cmd_type, mask, value, idx;
1726 rtsx_disable_aspm(chip);
1728 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1732 rtsx_set_stat(chip, RTSX_STAT_RUN);
1734 switch (srb->cmnd[3]) {
1736 rtsx_init_cmd(chip);
1740 cmd_type = srb->cmnd[4];
1742 set_sense_type(chip, lun,
1743 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1744 return TRANSPORT_FAILED;
1746 addr = (srb->cmnd[5] << 8) | srb->cmnd[6];
1747 mask = srb->cmnd[7];
1748 value = srb->cmnd[8];
1749 rtsx_add_cmd(chip, cmd_type, addr, mask, value);
1753 retval = rtsx_send_cmd(chip, 0, 1000);
1758 value = *(rtsx_get_cmd_data(chip) + idx);
1759 if (scsi_bufflen(srb) < 1) {
1760 set_sense_type(chip, lun,
1761 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1762 return TRANSPORT_FAILED;
1764 rtsx_stor_set_xfer_buf(&value, 1, srb);
1765 scsi_set_resid(srb, 0);
1769 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1770 return TRANSPORT_FAILED;
1773 if (retval != STATUS_SUCCESS) {
1774 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_ERR);
1775 return TRANSPORT_FAILED;
1778 return TRANSPORT_GOOD;
1781 static int suit_cmd(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1783 switch (srb->cmnd[3]) {
1788 return rw_mem_cmd_buf(srb, chip);
1790 return TRANSPORT_ERROR;
1794 static int read_phy_register(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1796 unsigned short addr, len, i;
1801 rtsx_disable_aspm(chip);
1803 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1807 rtsx_set_stat(chip, RTSX_STAT_RUN);
1809 addr = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5];
1810 len = ((u16)srb->cmnd[6] << 8) | srb->cmnd[7];
1818 return TRANSPORT_ERROR;
1820 retval = rtsx_force_power_on(chip, SSC_PDCTL);
1821 if (retval != STATUS_SUCCESS) {
1823 set_sense_type(chip, SCSI_LUN(srb),
1824 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1825 return TRANSPORT_FAILED;
1828 for (i = 0; i < len / 2; i++) {
1829 retval = rtsx_read_phy_register(chip, addr + i, &val);
1830 if (retval != STATUS_SUCCESS) {
1833 (chip, SCSI_LUN(srb),
1834 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1835 return TRANSPORT_FAILED;
1838 buf[2 * i] = (u8)(val >> 8);
1839 buf[2 * i + 1] = (u8)val;
1842 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb),
1844 rtsx_stor_set_xfer_buf(buf, len, srb);
1845 scsi_set_resid(srb, scsi_bufflen(srb) - len);
1850 return TRANSPORT_GOOD;
1853 static int write_phy_register(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1855 unsigned short addr, len, i;
1860 rtsx_disable_aspm(chip);
1862 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1866 rtsx_set_stat(chip, RTSX_STAT_RUN);
1868 addr = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5];
1869 len = ((u16)srb->cmnd[6] << 8) | srb->cmnd[7];
1875 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb),
1880 return TRANSPORT_ERROR;
1882 rtsx_stor_get_xfer_buf(buf, len, srb);
1883 scsi_set_resid(srb, scsi_bufflen(srb) - len);
1885 retval = rtsx_force_power_on(chip, SSC_PDCTL);
1886 if (retval != STATUS_SUCCESS) {
1888 set_sense_type(chip, SCSI_LUN(srb),
1889 SENSE_TYPE_MEDIA_WRITE_ERR);
1890 return TRANSPORT_FAILED;
1893 for (i = 0; i < len / 2; i++) {
1894 val = ((u16)buf[2 * i] << 8) | buf[2 * i + 1];
1895 retval = rtsx_write_phy_register(chip, addr + i, val);
1896 if (retval != STATUS_SUCCESS) {
1898 set_sense_type(chip, SCSI_LUN(srb),
1899 SENSE_TYPE_MEDIA_WRITE_ERR);
1900 return TRANSPORT_FAILED;
1907 return TRANSPORT_GOOD;
1910 static int erase_eeprom2(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1912 unsigned short addr;
1916 rtsx_disable_aspm(chip);
1918 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1922 rtsx_set_stat(chip, RTSX_STAT_RUN);
1924 retval = rtsx_force_power_on(chip, SSC_PDCTL);
1925 if (retval != STATUS_SUCCESS) {
1926 set_sense_type(chip, SCSI_LUN(srb), SENSE_TYPE_MEDIA_WRITE_ERR);
1927 return TRANSPORT_FAILED;
1930 mode = srb->cmnd[3];
1931 addr = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5];
1934 retval = spi_erase_eeprom_chip(chip);
1935 if (retval != STATUS_SUCCESS) {
1936 set_sense_type(chip, SCSI_LUN(srb),
1937 SENSE_TYPE_MEDIA_WRITE_ERR);
1938 return TRANSPORT_FAILED;
1940 } else if (mode == 1) {
1941 retval = spi_erase_eeprom_byte(chip, addr);
1942 if (retval != STATUS_SUCCESS) {
1943 set_sense_type(chip, SCSI_LUN(srb),
1944 SENSE_TYPE_MEDIA_WRITE_ERR);
1945 return TRANSPORT_FAILED;
1948 set_sense_type(chip, SCSI_LUN(srb),
1949 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1950 return TRANSPORT_FAILED;
1953 return TRANSPORT_GOOD;
1956 static int read_eeprom2(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1958 unsigned short addr, len, i;
1962 rtsx_disable_aspm(chip);
1964 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1968 rtsx_set_stat(chip, RTSX_STAT_RUN);
1970 addr = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5];
1971 len = ((u16)srb->cmnd[6] << 8) | srb->cmnd[7];
1975 return TRANSPORT_ERROR;
1977 retval = rtsx_force_power_on(chip, SSC_PDCTL);
1978 if (retval != STATUS_SUCCESS) {
1980 set_sense_type(chip, SCSI_LUN(srb),
1981 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1982 return TRANSPORT_FAILED;
1985 for (i = 0; i < len; i++) {
1986 retval = spi_read_eeprom(chip, addr + i, buf + i);
1987 if (retval != STATUS_SUCCESS) {
1989 set_sense_type(chip, SCSI_LUN(srb),
1990 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1991 return TRANSPORT_FAILED;
1995 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb), len);
1996 rtsx_stor_set_xfer_buf(buf, len, srb);
1997 scsi_set_resid(srb, scsi_bufflen(srb) - len);
2001 return TRANSPORT_GOOD;
2004 static int write_eeprom2(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2006 unsigned short addr, len, i;
2010 rtsx_disable_aspm(chip);
2012 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
2016 rtsx_set_stat(chip, RTSX_STAT_RUN);
2018 addr = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5];
2019 len = ((u16)srb->cmnd[6] << 8) | srb->cmnd[7];
2021 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb), len);
2024 return TRANSPORT_ERROR;
2026 rtsx_stor_get_xfer_buf(buf, len, srb);
2027 scsi_set_resid(srb, scsi_bufflen(srb) - len);
2029 retval = rtsx_force_power_on(chip, SSC_PDCTL);
2030 if (retval != STATUS_SUCCESS) {
2032 set_sense_type(chip, SCSI_LUN(srb), SENSE_TYPE_MEDIA_WRITE_ERR);
2033 return TRANSPORT_FAILED;
2036 for (i = 0; i < len; i++) {
2037 retval = spi_write_eeprom(chip, addr + i, buf[i]);
2038 if (retval != STATUS_SUCCESS) {
2040 set_sense_type(chip, SCSI_LUN(srb),
2041 SENSE_TYPE_MEDIA_WRITE_ERR);
2042 return TRANSPORT_FAILED;
2048 return TRANSPORT_GOOD;
2051 static int read_efuse(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2057 rtsx_disable_aspm(chip);
2059 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
2063 rtsx_set_stat(chip, RTSX_STAT_RUN);
2065 addr = srb->cmnd[4];
2070 return TRANSPORT_ERROR;
2072 retval = rtsx_force_power_on(chip, SSC_PDCTL);
2073 if (retval != STATUS_SUCCESS) {
2075 set_sense_type(chip, SCSI_LUN(srb),
2076 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
2077 return TRANSPORT_FAILED;
2080 for (i = 0; i < len; i++) {
2081 retval = rtsx_read_efuse(chip, addr + i, buf + i);
2082 if (retval != STATUS_SUCCESS) {
2084 set_sense_type(chip, SCSI_LUN(srb),
2085 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
2086 return TRANSPORT_FAILED;
2090 len = (u8)min_t(unsigned int, scsi_bufflen(srb), len);
2091 rtsx_stor_set_xfer_buf(buf, len, srb);
2092 scsi_set_resid(srb, scsi_bufflen(srb) - len);
2096 return TRANSPORT_GOOD;
2099 static int write_efuse(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2101 int retval, result = TRANSPORT_GOOD;
2106 rtsx_disable_aspm(chip);
2108 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
2112 rtsx_set_stat(chip, RTSX_STAT_RUN);
2114 addr = srb->cmnd[4];
2117 len = (u8)min_t(unsigned int, scsi_bufflen(srb), len);
2120 return TRANSPORT_ERROR;
2122 rtsx_stor_get_xfer_buf(buf, len, srb);
2123 scsi_set_resid(srb, scsi_bufflen(srb) - len);
2125 retval = rtsx_force_power_on(chip, SSC_PDCTL);
2126 if (retval != STATUS_SUCCESS) {
2128 return TRANSPORT_ERROR;
2131 if (chip->asic_code) {
2132 retval = rtsx_read_phy_register(chip, 0x08, &val);
2133 if (retval != STATUS_SUCCESS) {
2135 return TRANSPORT_ERROR;
2138 retval = rtsx_write_register(chip, PWR_GATE_CTRL,
2139 LDO3318_PWR_MASK, LDO_OFF);
2140 if (retval != STATUS_SUCCESS) {
2142 return TRANSPORT_ERROR;
2147 retval = rtsx_write_phy_register(chip, 0x08,
2148 0x4C00 | chip->phy_voltage);
2149 if (retval != STATUS_SUCCESS) {
2151 return TRANSPORT_ERROR;
2154 retval = rtsx_write_register(chip, PWR_GATE_CTRL,
2155 LDO3318_PWR_MASK, LDO_ON);
2156 if (retval != STATUS_SUCCESS) {
2158 return TRANSPORT_ERROR;
2164 retval = card_power_on(chip, SPI_CARD);
2165 if (retval != STATUS_SUCCESS) {
2167 return TRANSPORT_ERROR;
2172 for (i = 0; i < len; i++) {
2173 retval = rtsx_write_efuse(chip, addr + i, buf[i]);
2174 if (retval != STATUS_SUCCESS) {
2175 set_sense_type(chip, SCSI_LUN(srb),
2176 SENSE_TYPE_MEDIA_WRITE_ERR);
2177 result = TRANSPORT_FAILED;
2185 retval = card_power_off(chip, SPI_CARD);
2186 if (retval != STATUS_SUCCESS)
2187 return TRANSPORT_ERROR;
2189 if (chip->asic_code) {
2190 retval = rtsx_write_register(chip, PWR_GATE_CTRL,
2191 LDO3318_PWR_MASK, LDO_OFF);
2192 if (retval != STATUS_SUCCESS)
2193 return TRANSPORT_ERROR;
2197 retval = rtsx_write_phy_register(chip, 0x08, val);
2198 if (retval != STATUS_SUCCESS)
2199 return TRANSPORT_ERROR;
2201 retval = rtsx_write_register(chip, PWR_GATE_CTRL,
2202 LDO3318_PWR_MASK, LDO_ON);
2203 if (retval != STATUS_SUCCESS)
2204 return TRANSPORT_ERROR;
2210 static int read_cfg_byte(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2218 rtsx_disable_aspm(chip);
2220 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
2224 rtsx_set_stat(chip, RTSX_STAT_RUN);
2226 func = srb->cmnd[3];
2227 addr = ((u16)(srb->cmnd[4]) << 8) | srb->cmnd[5];
2228 len = ((u16)(srb->cmnd[6]) << 8) | srb->cmnd[7];
2230 dev_dbg(rtsx_dev(chip), "%s: func = %d, addr = 0x%x, len = %d\n",
2231 __func__, func, addr, len);
2233 if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip))
2238 if (func > func_max) {
2239 set_sense_type(chip, SCSI_LUN(srb),
2240 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2241 return TRANSPORT_FAILED;
2246 return TRANSPORT_ERROR;
2248 retval = rtsx_read_cfg_seq(chip, func, addr, buf, len);
2249 if (retval != STATUS_SUCCESS) {
2250 set_sense_type(chip, SCSI_LUN(srb),
2251 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
2253 return TRANSPORT_FAILED;
2256 len = (u16)min_t(unsigned int, scsi_bufflen(srb), len);
2257 rtsx_stor_set_xfer_buf(buf, len, srb);
2258 scsi_set_resid(srb, scsi_bufflen(srb) - len);
2262 return TRANSPORT_GOOD;
2265 static int write_cfg_byte(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2273 rtsx_disable_aspm(chip);
2275 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
2279 rtsx_set_stat(chip, RTSX_STAT_RUN);
2281 func = srb->cmnd[3];
2282 addr = ((u16)(srb->cmnd[4]) << 8) | srb->cmnd[5];
2283 len = ((u16)(srb->cmnd[6]) << 8) | srb->cmnd[7];
2285 dev_dbg(rtsx_dev(chip), "%s: func = %d, addr = 0x%x\n",
2286 __func__, func, addr);
2288 if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip))
2293 if (func > func_max) {
2294 set_sense_type(chip, SCSI_LUN(srb),
2295 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2296 return TRANSPORT_FAILED;
2299 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb), len);
2302 return TRANSPORT_ERROR;
2304 rtsx_stor_get_xfer_buf(buf, len, srb);
2305 scsi_set_resid(srb, scsi_bufflen(srb) - len);
2307 retval = rtsx_write_cfg_seq(chip, func, addr, buf, len);
2308 if (retval != STATUS_SUCCESS) {
2309 set_sense_type(chip, SCSI_LUN(srb), SENSE_TYPE_MEDIA_WRITE_ERR);
2311 return TRANSPORT_FAILED;
2316 return TRANSPORT_GOOD;
2319 static int app_cmd(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2323 switch (srb->cmnd[2]) {
2326 result = read_write(srb, chip);
2330 result = read_host_reg(srb, chip);
2333 case WRITE_HOST_REG:
2334 result = write_host_reg(srb, chip);
2338 result = get_variable(srb, chip);
2342 result = set_variable(srb, chip);
2347 result = dma_access_ring_buffer(srb, chip);
2351 result = read_phy_register(srb, chip);
2355 result = write_phy_register(srb, chip);
2359 result = erase_eeprom2(srb, chip);
2363 result = read_eeprom2(srb, chip);
2367 result = write_eeprom2(srb, chip);
2371 result = read_efuse(srb, chip);
2375 result = write_efuse(srb, chip);
2379 result = read_cfg_byte(srb, chip);
2383 result = write_cfg_byte(srb, chip);
2387 result = set_chip_mode(srb, chip);
2391 result = suit_cmd(srb, chip);
2394 case GET_DEV_STATUS:
2395 result = get_dev_status(srb, chip);
2399 set_sense_type(chip, SCSI_LUN(srb),
2400 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2401 return TRANSPORT_FAILED;
2407 static int read_status(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2411 unsigned int lun = SCSI_LUN(srb);
2413 rtsx_status[0] = (u8)(chip->vendor_id >> 8);
2414 rtsx_status[1] = (u8)(chip->vendor_id);
2416 rtsx_status[2] = (u8)(chip->product_id >> 8);
2417 rtsx_status[3] = (u8)(chip->product_id);
2419 rtsx_status[4] = (u8)lun;
2421 if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
2422 if (chip->lun2card[lun] == SD_CARD)
2427 if (chip->card_exist) {
2428 if (chip->card_exist & XD_CARD)
2430 else if (chip->card_exist & SD_CARD)
2432 else if (chip->card_exist & MS_CARD)
2441 if (CHECK_LUN_MODE(chip, SD_MS_2LUN))
2446 rtsx_status[7] = (u8)(chip->product_id);
2447 rtsx_status[8] = chip->ic_version;
2449 if (check_card_exist(chip, lun))
2454 if (CHECK_LUN_MODE(chip, SD_MS_2LUN))
2455 rtsx_status[10] = 0;
2457 rtsx_status[10] = 1;
2459 if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
2460 if (chip->lun2card[lun] == SD_CARD)
2461 rtsx_status[11] = SD_CARD;
2463 rtsx_status[11] = MS_CARD;
2465 rtsx_status[11] = XD_CARD | SD_CARD | MS_CARD;
2468 if (check_card_ready(chip, lun))
2469 rtsx_status[12] = 1;
2471 rtsx_status[12] = 0;
2473 if (get_lun_card(chip, lun) == XD_CARD) {
2474 rtsx_status[13] = 0x40;
2475 } else if (get_lun_card(chip, lun) == SD_CARD) {
2476 struct sd_info *sd_card = &chip->sd_card;
2478 rtsx_status[13] = 0x20;
2479 if (CHK_SD(sd_card)) {
2480 if (CHK_SD_HCXC(sd_card))
2481 rtsx_status[13] |= 0x04;
2482 if (CHK_SD_HS(sd_card))
2483 rtsx_status[13] |= 0x02;
2485 rtsx_status[13] |= 0x08;
2486 if (CHK_MMC_52M(sd_card))
2487 rtsx_status[13] |= 0x02;
2488 if (CHK_MMC_SECTOR_MODE(sd_card))
2489 rtsx_status[13] |= 0x04;
2491 } else if (get_lun_card(chip, lun) == MS_CARD) {
2492 struct ms_info *ms_card = &chip->ms_card;
2494 if (CHK_MSPRO(ms_card)) {
2495 rtsx_status[13] = 0x38;
2496 if (CHK_HG8BIT(ms_card))
2497 rtsx_status[13] |= 0x04;
2499 if (CHK_MSXC(ms_card))
2500 rtsx_status[13] |= 0x01;
2503 rtsx_status[13] = 0x30;
2506 if (CHECK_LUN_MODE(chip, DEFAULT_SINGLE)) {
2508 if (chip->sd_io && chip->sd_int)
2509 rtsx_status[13] = 0x60;
2511 rtsx_status[13] = 0x70;
2513 rtsx_status[13] = 0x70;
2516 if (chip->lun2card[lun] == SD_CARD)
2517 rtsx_status[13] = 0x20;
2519 rtsx_status[13] = 0x30;
2523 rtsx_status[14] = 0x78;
2524 if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip))
2525 rtsx_status[15] = 0x83;
2527 rtsx_status[15] = 0x82;
2529 buf_len = min_t(unsigned int, scsi_bufflen(srb), sizeof(rtsx_status));
2530 rtsx_stor_set_xfer_buf(rtsx_status, buf_len, srb);
2531 scsi_set_resid(srb, scsi_bufflen(srb) - buf_len);
2533 return TRANSPORT_GOOD;
2536 static int get_card_bus_width(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2538 unsigned int lun = SCSI_LUN(srb);
2541 if (!check_card_ready(chip, lun)) {
2542 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
2543 return TRANSPORT_FAILED;
2546 card = get_lun_card(chip, lun);
2547 if ((card == SD_CARD) || (card == MS_CARD)) {
2548 bus_width = chip->card_bus_width[lun];
2550 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
2551 return TRANSPORT_FAILED;
2554 scsi_set_resid(srb, 0);
2555 rtsx_stor_set_xfer_buf(&bus_width, scsi_bufflen(srb), srb);
2557 return TRANSPORT_GOOD;
2560 static int spi_vendor_cmd(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2563 unsigned int lun = SCSI_LUN(srb);
2566 if (CHECK_PID(chip, 0x5208) || CHECK_PID(chip, 0x5288)) {
2567 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2568 return TRANSPORT_FAILED;
2571 rtsx_disable_aspm(chip);
2573 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
2577 rtsx_set_stat(chip, RTSX_STAT_RUN);
2579 rtsx_force_power_on(chip, SSC_PDCTL);
2581 rtsx_read_register(chip, CARD_GPIO_DIR, &gpio_dir);
2582 rtsx_write_register(chip, CARD_GPIO_DIR, 0x07, gpio_dir & 0x06);
2584 switch (srb->cmnd[2]) {
2585 case SCSI_SPI_GETSTATUS:
2586 result = spi_get_status(srb, chip);
2589 case SCSI_SPI_SETPARAMETER:
2590 result = spi_set_parameter(srb, chip);
2593 case SCSI_SPI_READFALSHID:
2594 result = spi_read_flash_id(srb, chip);
2597 case SCSI_SPI_READFLASH:
2598 result = spi_read_flash(srb, chip);
2601 case SCSI_SPI_WRITEFLASH:
2602 result = spi_write_flash(srb, chip);
2605 case SCSI_SPI_WRITEFLASHSTATUS:
2606 result = spi_write_flash_status(srb, chip);
2609 case SCSI_SPI_ERASEFLASH:
2610 result = spi_erase_flash(srb, chip);
2614 rtsx_write_register(chip, CARD_GPIO_DIR, 0x07, gpio_dir);
2616 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2617 return TRANSPORT_FAILED;
2620 rtsx_write_register(chip, CARD_GPIO_DIR, 0x07, gpio_dir);
2622 if (result != STATUS_SUCCESS)
2623 return TRANSPORT_FAILED;
2625 return TRANSPORT_GOOD;
2628 static int vendor_cmnd(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2632 switch (srb->cmnd[1]) {
2634 result = read_status(srb, chip);
2638 result = read_mem(srb, chip);
2642 result = write_mem(srb, chip);
2646 result = read_eeprom(srb, chip);
2650 result = write_eeprom(srb, chip);
2654 result = toggle_gpio_cmd(srb, chip);
2658 result = get_sd_csd(srb, chip);
2662 result = get_card_bus_width(srb, chip);
2666 result = app_cmd(srb, chip);
2669 case SPI_VENDOR_COMMAND:
2670 result = spi_vendor_cmd(srb, chip);
2674 set_sense_type(chip, SCSI_LUN(srb),
2675 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2676 return TRANSPORT_FAILED;
2682 #if !defined(LED_AUTO_BLINK) && !defined(REGULAR_BLINK)
2683 void led_shine(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2685 unsigned int lun = SCSI_LUN(srb);
2688 if ((srb->cmnd[0] == READ_10) || (srb->cmnd[0] == WRITE_10)) {
2689 sec_cnt = ((u16)(srb->cmnd[7]) << 8) | srb->cmnd[8];
2690 } else if ((srb->cmnd[0] == READ_6) || (srb->cmnd[0] == WRITE_6)) {
2691 sec_cnt = srb->cmnd[4];
2698 if (chip->rw_cap[lun] >= GPIO_TOGGLE_THRESHOLD) {
2699 toggle_gpio(chip, LED_GPIO);
2700 chip->rw_cap[lun] = 0;
2702 chip->rw_cap[lun] += sec_cnt;
2707 static int ms_format_cmnd(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2709 struct ms_info *ms_card = &chip->ms_card;
2710 unsigned int lun = SCSI_LUN(srb);
2714 if (get_lun_card(chip, lun) != MS_CARD) {
2715 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
2716 return TRANSPORT_FAILED;
2719 if ((srb->cmnd[3] != 0x4D) || (srb->cmnd[4] != 0x47) ||
2720 (srb->cmnd[5] != 0x66) || (srb->cmnd[6] != 0x6D) ||
2721 (srb->cmnd[7] != 0x74)) {
2722 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2723 return TRANSPORT_FAILED;
2726 rtsx_disable_aspm(chip);
2728 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
2732 if (!check_card_ready(chip, lun) ||
2733 (get_card_size(chip, lun) == 0)) {
2734 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
2735 return TRANSPORT_FAILED;
2738 rtsx_set_stat(chip, RTSX_STAT_RUN);
2740 if (srb->cmnd[8] & 0x01)
2741 quick_format = false;
2743 quick_format = true;
2745 if (!(chip->card_ready & MS_CARD)) {
2746 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
2747 return TRANSPORT_FAILED;
2750 if (chip->card_wp & MS_CARD) {
2751 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_PROTECT);
2752 return TRANSPORT_FAILED;
2755 if (!CHK_MSPRO(ms_card)) {
2756 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
2757 return TRANSPORT_FAILED;
2760 retval = mspro_format(srb, chip, MS_SHORT_DATA_LEN, quick_format);
2761 if (retval != STATUS_SUCCESS) {
2762 set_sense_type(chip, lun, SENSE_TYPE_FORMAT_CMD_FAILED);
2763 return TRANSPORT_FAILED;
2766 scsi_set_resid(srb, 0);
2767 return TRANSPORT_GOOD;
2770 #ifdef SUPPORT_PCGL_1P18
2771 static int get_ms_information(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2773 struct ms_info *ms_card = &chip->ms_card;
2774 unsigned int lun = SCSI_LUN(srb);
2775 u8 dev_info_id, data_len;
2777 unsigned int buf_len;
2780 if (!check_card_ready(chip, lun)) {
2781 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
2782 return TRANSPORT_FAILED;
2784 if (get_lun_card(chip, lun) != MS_CARD) {
2785 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
2786 return TRANSPORT_FAILED;
2789 if ((srb->cmnd[2] != 0xB0) || (srb->cmnd[4] != 0x4D) ||
2790 (srb->cmnd[5] != 0x53) || (srb->cmnd[6] != 0x49) ||
2791 (srb->cmnd[7] != 0x44)) {
2792 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2793 return TRANSPORT_FAILED;
2796 dev_info_id = srb->cmnd[3];
2797 if ((CHK_MSXC(ms_card) && (dev_info_id == 0x10)) ||
2798 (!CHK_MSXC(ms_card) && (dev_info_id == 0x13)) ||
2799 !CHK_MSPRO(ms_card)) {
2800 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2801 return TRANSPORT_FAILED;
2804 if (dev_info_id == 0x15) {
2812 buf = kmalloc(buf_len, GFP_KERNEL);
2814 return TRANSPORT_ERROR;
2817 /* GET Memory Stick Media Information Response Header */
2818 buf[i++] = 0x00; /* Data length MSB */
2819 buf[i++] = data_len; /* Data length LSB */
2820 /* Device Information Type Code */
2821 if (CHK_MSXC(ms_card))
2832 /* Number of Device Information */
2835 /* Device Information Body */
2837 /* Device Information ID Number */
2838 buf[i++] = dev_info_id;
2839 /* Device Information Length */
2840 if (dev_info_id == 0x15)
2845 buf[i++] = 0x00; /* Data length MSB */
2846 buf[i++] = data_len; /* Data length LSB */
2849 if ((dev_info_id == 0x10) || (dev_info_id == 0x13)) {
2850 /* System Information */
2851 memcpy(buf + i, ms_card->raw_sys_info, 96);
2854 memcpy(buf + i, ms_card->raw_model_name, 48);
2857 rtsx_stor_set_xfer_buf(buf, buf_len, srb);
2859 if (dev_info_id == 0x15)
2860 scsi_set_resid(srb, scsi_bufflen(srb) - 0x3C);
2862 scsi_set_resid(srb, scsi_bufflen(srb) - 0x6C);
2865 return STATUS_SUCCESS;
2869 static int ms_sp_cmnd(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2871 int retval = TRANSPORT_ERROR;
2873 if (srb->cmnd[2] == MS_FORMAT)
2874 retval = ms_format_cmnd(srb, chip);
2875 #ifdef SUPPORT_PCGL_1P18
2876 else if (srb->cmnd[2] == GET_MS_INFORMATION)
2877 retval = get_ms_information(srb, chip);
2884 static int sd_extension_cmnd(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2886 unsigned int lun = SCSI_LUN(srb);
2889 rtsx_disable_aspm(chip);
2891 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
2895 rtsx_set_stat(chip, RTSX_STAT_RUN);
2897 sd_cleanup_work(chip);
2899 if (!check_card_ready(chip, lun)) {
2900 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
2901 return TRANSPORT_FAILED;
2903 if (get_lun_card(chip, lun) != SD_CARD) {
2904 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
2905 return TRANSPORT_FAILED;
2908 switch (srb->cmnd[0]) {
2909 case SD_PASS_THRU_MODE:
2910 result = sd_pass_thru_mode(srb, chip);
2913 case SD_EXECUTE_NO_DATA:
2914 result = sd_execute_no_data(srb, chip);
2917 case SD_EXECUTE_READ:
2918 result = sd_execute_read_data(srb, chip);
2921 case SD_EXECUTE_WRITE:
2922 result = sd_execute_write_data(srb, chip);
2926 result = sd_get_cmd_rsp(srb, chip);
2930 result = sd_hw_rst(srb, chip);
2934 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2935 return TRANSPORT_FAILED;
2942 #ifdef SUPPORT_MAGIC_GATE
2943 static int mg_report_key(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2945 struct ms_info *ms_card = &chip->ms_card;
2946 unsigned int lun = SCSI_LUN(srb);
2950 rtsx_disable_aspm(chip);
2952 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
2956 rtsx_set_stat(chip, RTSX_STAT_RUN);
2958 ms_cleanup_work(chip);
2960 if (!check_card_ready(chip, lun)) {
2961 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
2962 return TRANSPORT_FAILED;
2964 if (get_lun_card(chip, lun) != MS_CARD) {
2965 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
2966 return TRANSPORT_FAILED;
2969 if (srb->cmnd[7] != KC_MG_R_PRO) {
2970 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2971 return TRANSPORT_FAILED;
2974 if (!CHK_MSPRO(ms_card)) {
2975 set_sense_type(chip, lun, SENSE_TYPE_MG_INCOMPATIBLE_MEDIUM);
2976 return TRANSPORT_FAILED;
2979 key_format = srb->cmnd[10] & 0x3F;
2980 dev_dbg(rtsx_dev(chip), "key_format = 0x%x\n", key_format);
2982 switch (key_format) {
2983 case KF_GET_LOC_EKB:
2984 if ((scsi_bufflen(srb) == 0x41C) &&
2985 (srb->cmnd[8] == 0x04) &&
2986 (srb->cmnd[9] == 0x1C)) {
2987 retval = mg_get_local_EKB(srb, chip);
2988 if (retval != STATUS_SUCCESS)
2989 return TRANSPORT_FAILED;
2992 set_sense_type(chip, lun,
2993 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2994 return TRANSPORT_FAILED;
2999 if ((scsi_bufflen(srb) == 0x24) &&
3000 (srb->cmnd[8] == 0x00) &&
3001 (srb->cmnd[9] == 0x24)) {
3002 retval = mg_get_rsp_chg(srb, chip);
3003 if (retval != STATUS_SUCCESS)
3004 return TRANSPORT_FAILED;
3007 set_sense_type(chip, lun,
3008 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3009 return TRANSPORT_FAILED;
3014 ms_card->mg_entry_num = srb->cmnd[5];
3015 if ((scsi_bufflen(srb) == 0x404) &&
3016 (srb->cmnd[8] == 0x04) &&
3017 (srb->cmnd[9] == 0x04) &&
3018 (srb->cmnd[2] == 0x00) &&
3019 (srb->cmnd[3] == 0x00) &&
3020 (srb->cmnd[4] == 0x00) &&
3021 (srb->cmnd[5] < 32)) {
3022 retval = mg_get_ICV(srb, chip);
3023 if (retval != STATUS_SUCCESS)
3024 return TRANSPORT_FAILED;
3027 set_sense_type(chip, lun,
3028 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3029 return TRANSPORT_FAILED;
3034 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3035 return TRANSPORT_FAILED;
3038 scsi_set_resid(srb, 0);
3039 return TRANSPORT_GOOD;
3042 static int mg_send_key(struct scsi_cmnd *srb, struct rtsx_chip *chip)
3044 struct ms_info *ms_card = &chip->ms_card;
3045 unsigned int lun = SCSI_LUN(srb);
3049 rtsx_disable_aspm(chip);
3051 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
3055 rtsx_set_stat(chip, RTSX_STAT_RUN);
3057 ms_cleanup_work(chip);
3059 if (!check_card_ready(chip, lun)) {
3060 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
3061 return TRANSPORT_FAILED;
3063 if (check_card_wp(chip, lun)) {
3064 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_PROTECT);
3065 return TRANSPORT_FAILED;
3067 if (get_lun_card(chip, lun) != MS_CARD) {
3068 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
3069 return TRANSPORT_FAILED;
3072 if (srb->cmnd[7] != KC_MG_R_PRO) {
3073 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3074 return TRANSPORT_FAILED;
3077 if (!CHK_MSPRO(ms_card)) {
3078 set_sense_type(chip, lun, SENSE_TYPE_MG_INCOMPATIBLE_MEDIUM);
3079 return TRANSPORT_FAILED;
3082 key_format = srb->cmnd[10] & 0x3F;
3083 dev_dbg(rtsx_dev(chip), "key_format = 0x%x\n", key_format);
3085 switch (key_format) {
3086 case KF_SET_LEAF_ID:
3087 if ((scsi_bufflen(srb) == 0x0C) &&
3088 (srb->cmnd[8] == 0x00) &&
3089 (srb->cmnd[9] == 0x0C)) {
3090 retval = mg_set_leaf_id(srb, chip);
3091 if (retval != STATUS_SUCCESS)
3092 return TRANSPORT_FAILED;
3095 set_sense_type(chip, lun,
3096 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3097 return TRANSPORT_FAILED;
3102 if ((scsi_bufflen(srb) == 0x0C) &&
3103 (srb->cmnd[8] == 0x00) &&
3104 (srb->cmnd[9] == 0x0C)) {
3105 retval = mg_chg(srb, chip);
3106 if (retval != STATUS_SUCCESS)
3107 return TRANSPORT_FAILED;
3110 set_sense_type(chip, lun,
3111 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3112 return TRANSPORT_FAILED;
3117 if ((scsi_bufflen(srb) == 0x0C) &&
3118 (srb->cmnd[8] == 0x00) &&
3119 (srb->cmnd[9] == 0x0C)) {
3120 retval = mg_rsp(srb, chip);
3121 if (retval != STATUS_SUCCESS)
3122 return TRANSPORT_FAILED;
3125 set_sense_type(chip, lun,
3126 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3127 return TRANSPORT_FAILED;
3132 ms_card->mg_entry_num = srb->cmnd[5];
3133 if ((scsi_bufflen(srb) == 0x404) &&
3134 (srb->cmnd[8] == 0x04) &&
3135 (srb->cmnd[9] == 0x04) &&
3136 (srb->cmnd[2] == 0x00) &&
3137 (srb->cmnd[3] == 0x00) &&
3138 (srb->cmnd[4] == 0x00) &&
3139 (srb->cmnd[5] < 32)) {
3140 retval = mg_set_ICV(srb, chip);
3141 if (retval != STATUS_SUCCESS)
3142 return TRANSPORT_FAILED;
3145 set_sense_type(chip, lun,
3146 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3147 return TRANSPORT_FAILED;
3152 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3153 return TRANSPORT_FAILED;
3156 scsi_set_resid(srb, 0);
3157 return TRANSPORT_GOOD;
3161 int rtsx_scsi_handler(struct scsi_cmnd *srb, struct rtsx_chip *chip)
3163 #ifdef SUPPORT_SD_LOCK
3164 struct sd_info *sd_card = &chip->sd_card;
3166 struct ms_info *ms_card = &chip->ms_card;
3167 unsigned int lun = SCSI_LUN(srb);
3170 #ifdef SUPPORT_SD_LOCK
3171 if (sd_card->sd_erase_status) {
3172 /* Block all SCSI command except for
3173 * REQUEST_SENSE and rs_ppstatus
3175 if (!((srb->cmnd[0] == VENDOR_CMND) &&
3176 (srb->cmnd[1] == SCSI_APP_CMD) &&
3177 (srb->cmnd[2] == GET_DEV_STATUS)) &&
3178 (srb->cmnd[0] != REQUEST_SENSE)) {
3179 /* Logical Unit Not Ready Format in Progress */
3180 set_sense_data(chip, lun, CUR_ERR,
3181 0x02, 0, 0x04, 0x04, 0, 0);
3182 return TRANSPORT_FAILED;
3187 if ((get_lun_card(chip, lun) == MS_CARD) &&
3188 (ms_card->format_status == FORMAT_IN_PROGRESS)) {
3189 if ((srb->cmnd[0] != REQUEST_SENSE) &&
3190 (srb->cmnd[0] != INQUIRY)) {
3191 /* Logical Unit Not Ready Format in Progress */
3192 set_sense_data(chip, lun, CUR_ERR, 0x02, 0, 0x04, 0x04,
3193 0, (u16)(ms_card->progress));
3194 return TRANSPORT_FAILED;
3198 switch (srb->cmnd[0]) {
3203 result = read_write(srb, chip);
3204 #if !defined(LED_AUTO_BLINK) && !defined(REGULAR_BLINK)
3205 led_shine(srb, chip);
3209 case TEST_UNIT_READY:
3210 result = test_unit_ready(srb, chip);
3214 result = inquiry(srb, chip);
3218 result = read_capacity(srb, chip);
3222 result = start_stop_unit(srb, chip);
3225 case ALLOW_MEDIUM_REMOVAL:
3226 result = allow_medium_removal(srb, chip);
3230 result = request_sense(srb, chip);
3235 result = mode_sense(srb, chip);
3239 result = read_format_capacity(srb, chip);
3243 result = vendor_cmnd(srb, chip);
3247 result = ms_sp_cmnd(srb, chip);
3251 case SD_PASS_THRU_MODE:
3252 case SD_EXECUTE_NO_DATA:
3253 case SD_EXECUTE_READ:
3254 case SD_EXECUTE_WRITE:
3257 result = sd_extension_cmnd(srb, chip);
3261 #ifdef SUPPORT_MAGIC_GATE
3262 case CMD_MSPRO_MG_RKEY:
3263 result = mg_report_key(srb, chip);
3266 case CMD_MSPRO_MG_SKEY:
3267 result = mg_send_key(srb, chip);
3274 result = TRANSPORT_GOOD;
3278 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3279 result = TRANSPORT_FAILED;