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) >> 4;
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));
511 return TRANSPORT_ERROR;
513 #ifdef SUPPORT_MAGIC_GATE
514 if ((chip->mspro_formatter_enable) &&
515 (chip->lun2card[lun] & MS_CARD))
517 if (chip->mspro_formatter_enable)
519 if (!card || (card == MS_CARD))
520 pro_formatter_flag = true;
522 if (pro_formatter_flag) {
523 if (scsi_bufflen(srb) < 56)
524 sendbytes = (unsigned char)(scsi_bufflen(srb));
529 if (scsi_bufflen(srb) < 36)
530 sendbytes = (unsigned char)(scsi_bufflen(srb));
536 memcpy(buf, inquiry_buf, 8);
537 strncpy(buf + 8, inquiry_string, sendbytes - 8);
538 if (pro_formatter_flag) {
539 /* Additional Length */
543 memcpy(buf, inquiry_buf, sendbytes);
546 if (pro_formatter_flag) {
548 memcpy(buf + 36, formatter_inquiry_str, sendbytes - 36);
551 scsi_set_resid(srb, 0);
553 rtsx_stor_set_xfer_buf(buf, scsi_bufflen(srb), srb);
556 return TRANSPORT_GOOD;
559 static int start_stop_unit(struct scsi_cmnd *srb, struct rtsx_chip *chip)
561 unsigned int lun = SCSI_LUN(srb);
563 scsi_set_resid(srb, scsi_bufflen(srb));
565 if (srb->cmnd[1] == 1)
566 return TRANSPORT_GOOD;
568 switch (srb->cmnd[0x4]) {
571 return TRANSPORT_GOOD;
574 /* Media shall be unload */
575 if (check_card_ready(chip, lun))
576 eject_card(chip, lun);
577 return TRANSPORT_GOOD;
579 case MAKE_MEDIUM_READY:
581 if (check_card_ready(chip, lun))
582 return TRANSPORT_GOOD;
583 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
584 return TRANSPORT_FAILED;
589 return TRANSPORT_ERROR;
592 static int allow_medium_removal(struct scsi_cmnd *srb, struct rtsx_chip *chip)
596 prevent = srb->cmnd[4] & 0x1;
598 scsi_set_resid(srb, 0);
601 set_sense_type(chip, SCSI_LUN(srb),
602 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
603 return TRANSPORT_FAILED;
606 return TRANSPORT_GOOD;
609 static int request_sense(struct scsi_cmnd *srb, struct rtsx_chip *chip)
611 struct sense_data_t *sense;
612 unsigned int lun = SCSI_LUN(srb);
613 struct ms_info *ms_card = &chip->ms_card;
614 unsigned char *tmp, *buf;
616 sense = &chip->sense_buffer[lun];
618 if ((get_lun_card(chip, lun) == MS_CARD) &&
619 ms_card->pro_under_formatting) {
620 if (ms_card->format_status == FORMAT_SUCCESS) {
621 set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
622 ms_card->pro_under_formatting = 0;
623 ms_card->progress = 0;
624 } else if (ms_card->format_status == FORMAT_IN_PROGRESS) {
625 /* Logical Unit Not Ready Format in Progress */
626 set_sense_data(chip, lun, CUR_ERR, 0x02, 0, 0x04, 0x04,
627 0, (u16)(ms_card->progress));
629 /* Format Command Failed */
630 set_sense_type(chip, lun, SENSE_TYPE_FORMAT_CMD_FAILED);
631 ms_card->pro_under_formatting = 0;
632 ms_card->progress = 0;
635 rtsx_set_stat(chip, RTSX_STAT_RUN);
638 buf = vmalloc(scsi_bufflen(srb));
640 return TRANSPORT_ERROR;
642 tmp = (unsigned char *)sense;
643 memcpy(buf, tmp, scsi_bufflen(srb));
645 rtsx_stor_set_xfer_buf(buf, scsi_bufflen(srb), srb);
648 scsi_set_resid(srb, 0);
649 /* Reset Sense Data */
650 set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE);
651 return TRANSPORT_GOOD;
654 static void ms_mode_sense(struct rtsx_chip *chip, u8 cmd,
655 int lun, u8 *buf, int buf_len)
657 struct ms_info *ms_card = &chip->ms_card;
659 int data_size = buf_len;
660 bool support_format = false;
663 if (cmd == MODE_SENSE) {
665 if (data_size > 0x68)
668 buf[i++] = 0x67; /* Mode Data Length */
670 sys_info_offset = 12;
671 if (data_size > 0x6C)
674 buf[i++] = 0x00; /* Mode Data Length (MSB) */
675 buf[i++] = 0x6A; /* Mode Data Length (LSB) */
678 /* Medium Type Code */
679 if (check_card_ready(chip, lun)) {
680 if (CHK_MSXC(ms_card)) {
681 support_format = true;
683 } else if (CHK_MSPRO(ms_card)) {
684 support_format = true;
691 if (check_card_wp(chip, lun))
697 buf[i++] = 0x00; /* MediaType */
698 buf[i++] = 0x00; /* WP */
701 buf[i++] = 0x00; /* Reserved */
703 if (cmd == MODE_SENSE_10) {
704 buf[i++] = 0x00; /* Reserved */
705 buf[i++] = 0x00; /* Block descriptor length(MSB) */
706 buf[i++] = 0x00; /* Block descriptor length(LSB) */
708 /* The Following Data is the content of "Page 0x20" */
710 buf[i++] = 0x20; /* Page Code */
712 buf[i++] = 0x62; /* Page Length */
714 buf[i++] = 0x00; /* No Access Control */
715 if (data_size >= 12) {
717 buf[i++] = 0xC0; /* SF, SGM */
722 /* The Following Data is the content of "Page 0x20" */
724 buf[i++] = 0x20; /* Page Code */
726 buf[i++] = 0x62; /* Page Length */
728 buf[i++] = 0x00; /* No Access Control */
729 if (data_size >= 8) {
731 buf[i++] = 0xC0; /* SF, SGM */
737 if (data_size > sys_info_offset) {
738 /* 96 Bytes Attribute Data */
739 int len = data_size - sys_info_offset;
741 len = (len < 96) ? len : 96;
743 memcpy(buf + sys_info_offset, ms_card->raw_sys_info, len);
747 static int mode_sense(struct scsi_cmnd *srb, struct rtsx_chip *chip)
749 unsigned int lun = SCSI_LUN(srb);
750 unsigned int data_size;
752 bool pro_formatter_flag;
753 unsigned char page_code, *buf;
754 u8 card = get_lun_card(chip, lun);
756 #ifndef SUPPORT_MAGIC_GATE
757 if (!check_card_ready(chip, lun)) {
758 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
759 scsi_set_resid(srb, scsi_bufflen(srb));
760 return TRANSPORT_FAILED;
764 pro_formatter_flag = false;
766 #ifdef SUPPORT_MAGIC_GATE
767 if ((chip->lun2card[lun] & MS_CARD)) {
768 if (!card || (card == MS_CARD)) {
770 if (chip->mspro_formatter_enable)
771 pro_formatter_flag = true;
775 if (card == MS_CARD) {
776 if (chip->mspro_formatter_enable) {
777 pro_formatter_flag = true;
783 buf = kmalloc(data_size, GFP_KERNEL);
785 return TRANSPORT_ERROR;
787 page_code = srb->cmnd[2] & 0x3f;
789 if ((page_code == 0x3F) || (page_code == 0x1C) ||
790 (page_code == 0x00) ||
791 (pro_formatter_flag && (page_code == 0x20))) {
792 if (srb->cmnd[0] == MODE_SENSE) {
793 if ((page_code == 0x3F) || (page_code == 0x20)) {
794 ms_mode_sense(chip, srb->cmnd[0],
795 lun, buf, data_size);
800 if (check_card_wp(chip, lun))
808 if ((page_code == 0x3F) || (page_code == 0x20)) {
809 ms_mode_sense(chip, srb->cmnd[0],
810 lun, buf, data_size);
816 if (check_card_wp(chip, lun))
826 status = TRANSPORT_GOOD;
828 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
829 scsi_set_resid(srb, scsi_bufflen(srb));
830 status = TRANSPORT_FAILED;
833 if (status == TRANSPORT_GOOD) {
834 unsigned int len = min_t(unsigned int, scsi_bufflen(srb),
836 rtsx_stor_set_xfer_buf(buf, len, srb);
837 scsi_set_resid(srb, scsi_bufflen(srb) - len);
844 static int read_write(struct scsi_cmnd *srb, struct rtsx_chip *chip)
846 #ifdef SUPPORT_SD_LOCK
847 struct sd_info *sd_card = &chip->sd_card;
849 unsigned int lun = SCSI_LUN(srb);
854 rtsx_disable_aspm(chip);
856 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
860 rtsx_set_stat(chip, RTSX_STAT_RUN);
862 if (!check_card_ready(chip, lun) || (get_card_size(chip, lun) == 0)) {
863 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
864 return TRANSPORT_FAILED;
867 if (!(CHK_BIT(chip->lun_mc, lun))) {
868 SET_BIT(chip->lun_mc, lun);
869 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
870 return TRANSPORT_FAILED;
873 #ifdef SUPPORT_SD_LOCK
874 if (sd_card->sd_erase_status) {
875 /* Accessing to any card is forbidden
876 * until the erase procedure of SD is completed
878 dev_dbg(rtsx_dev(chip), "SD card being erased!\n");
879 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_READ_FORBIDDEN);
880 return TRANSPORT_FAILED;
883 if (get_lun_card(chip, lun) == SD_CARD) {
884 if (sd_card->sd_lock_status & SD_LOCKED) {
885 dev_dbg(rtsx_dev(chip), "SD card locked!\n");
886 set_sense_type(chip, lun,
887 SENSE_TYPE_MEDIA_READ_FORBIDDEN);
888 return TRANSPORT_FAILED;
893 if ((srb->cmnd[0] == READ_10) || (srb->cmnd[0] == WRITE_10)) {
894 start_sec = ((u32)srb->cmnd[2] << 24) |
895 ((u32)srb->cmnd[3] << 16) |
896 ((u32)srb->cmnd[4] << 8) | ((u32)srb->cmnd[5]);
897 sec_cnt = ((u16)(srb->cmnd[7]) << 8) | srb->cmnd[8];
898 } else if ((srb->cmnd[0] == READ_6) || (srb->cmnd[0] == WRITE_6)) {
899 start_sec = ((u32)(srb->cmnd[1] & 0x1F) << 16) |
900 ((u32)srb->cmnd[2] << 8) | ((u32)srb->cmnd[3]);
901 sec_cnt = srb->cmnd[4];
904 } else if ((srb->cmnd[0] == VENDOR_CMND) &&
905 (srb->cmnd[1] == SCSI_APP_CMD) &&
906 ((srb->cmnd[2] == PP_READ10) || (srb->cmnd[2] == PP_WRITE10))) {
907 start_sec = ((u32)srb->cmnd[4] << 24) |
908 ((u32)srb->cmnd[5] << 16) |
909 ((u32)srb->cmnd[6] << 8) | ((u32)srb->cmnd[7]);
910 sec_cnt = ((u16)(srb->cmnd[9]) << 8) | srb->cmnd[10];
912 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
913 return TRANSPORT_FAILED;
916 /* In some test, we will receive a start_sec like 0xFFFFFFFF.
917 * In this situation, start_sec + sec_cnt will overflow, so we
918 * need to judge start_sec at first
920 if ((start_sec > get_card_size(chip, lun)) ||
921 ((start_sec + sec_cnt) > get_card_size(chip, lun))) {
922 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LBA_OVER_RANGE);
923 return TRANSPORT_FAILED;
927 scsi_set_resid(srb, 0);
928 return TRANSPORT_GOOD;
931 if (chip->rw_fail_cnt[lun] == 3) {
932 dev_dbg(rtsx_dev(chip), "read/write fail three times in succession\n");
933 if (srb->sc_data_direction == DMA_FROM_DEVICE)
934 set_sense_type(chip, lun,
935 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
937 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_ERR);
939 return TRANSPORT_FAILED;
942 if (srb->sc_data_direction == DMA_TO_DEVICE) {
943 if (check_card_wp(chip, lun)) {
944 dev_dbg(rtsx_dev(chip), "Write protected card!\n");
945 set_sense_type(chip, lun,
946 SENSE_TYPE_MEDIA_WRITE_PROTECT);
947 return TRANSPORT_FAILED;
951 retval = card_rw(srb, chip, start_sec, sec_cnt);
952 if (retval != STATUS_SUCCESS) {
953 if (chip->need_release & chip->lun2card[lun]) {
954 chip->rw_fail_cnt[lun] = 0;
955 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
957 chip->rw_fail_cnt[lun]++;
958 if (srb->sc_data_direction == DMA_FROM_DEVICE)
961 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
963 set_sense_type(chip, lun,
964 SENSE_TYPE_MEDIA_WRITE_ERR);
966 retval = TRANSPORT_FAILED;
969 chip->rw_fail_cnt[lun] = 0;
970 retval = TRANSPORT_GOOD;
973 scsi_set_resid(srb, 0);
979 static int read_format_capacity(struct scsi_cmnd *srb, struct rtsx_chip *chip)
982 unsigned int lun = SCSI_LUN(srb);
983 unsigned int buf_len;
984 u8 card = get_lun_card(chip, lun);
989 if (!check_card_ready(chip, lun)) {
990 if (!chip->mspro_formatter_enable) {
991 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
992 return TRANSPORT_FAILED;
996 buf_len = (scsi_bufflen(srb) > 12) ? 0x14 : 12;
998 buf = kmalloc(buf_len, GFP_KERNEL);
1000 return TRANSPORT_ERROR;
1006 /* Capacity List Length */
1007 if ((buf_len > 12) && chip->mspro_formatter_enable &&
1008 (chip->lun2card[lun] & MS_CARD) &&
1009 (!card || (card == MS_CARD))) {
1018 if (check_card_ready(chip, lun)) {
1019 card_size = get_card_size(chip, lun);
1020 buf[i++] = (unsigned char)(card_size >> 24);
1021 buf[i++] = (unsigned char)(card_size >> 16);
1022 buf[i++] = (unsigned char)(card_size >> 8);
1023 buf[i++] = (unsigned char)card_size;
1048 buf_len = min_t(unsigned int, scsi_bufflen(srb), buf_len);
1049 rtsx_stor_set_xfer_buf(buf, buf_len, srb);
1052 scsi_set_resid(srb, scsi_bufflen(srb) - buf_len);
1054 return TRANSPORT_GOOD;
1057 static int read_capacity(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1060 unsigned int lun = SCSI_LUN(srb);
1063 if (!check_card_ready(chip, lun)) {
1064 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
1065 return TRANSPORT_FAILED;
1068 if (!(CHK_BIT(chip->lun_mc, lun))) {
1069 SET_BIT(chip->lun_mc, lun);
1070 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE);
1071 return TRANSPORT_FAILED;
1074 buf = kmalloc(8, GFP_KERNEL);
1076 return TRANSPORT_ERROR;
1078 card_size = get_card_size(chip, lun);
1079 buf[0] = (unsigned char)((card_size - 1) >> 24);
1080 buf[1] = (unsigned char)((card_size - 1) >> 16);
1081 buf[2] = (unsigned char)((card_size - 1) >> 8);
1082 buf[3] = (unsigned char)(card_size - 1);
1089 rtsx_stor_set_xfer_buf(buf, scsi_bufflen(srb), srb);
1092 scsi_set_resid(srb, 0);
1094 return TRANSPORT_GOOD;
1097 static int read_eeprom(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1099 unsigned short len, i;
1103 rtsx_disable_aspm(chip);
1105 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1109 rtsx_set_stat(chip, RTSX_STAT_RUN);
1111 len = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5];
1115 return TRANSPORT_ERROR;
1117 retval = rtsx_force_power_on(chip, SSC_PDCTL);
1118 if (retval != STATUS_SUCCESS) {
1120 set_sense_type(chip, SCSI_LUN(srb),
1121 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1122 return TRANSPORT_FAILED;
1125 for (i = 0; i < len; i++) {
1126 retval = spi_read_eeprom(chip, i, buf + i);
1127 if (retval != STATUS_SUCCESS) {
1129 set_sense_type(chip, SCSI_LUN(srb),
1130 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1131 return TRANSPORT_FAILED;
1135 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb), len);
1136 rtsx_stor_set_xfer_buf(buf, len, srb);
1137 scsi_set_resid(srb, scsi_bufflen(srb) - len);
1141 return TRANSPORT_GOOD;
1144 static int write_eeprom(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1146 unsigned short len, i;
1150 rtsx_disable_aspm(chip);
1152 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1156 rtsx_set_stat(chip, RTSX_STAT_RUN);
1158 len = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5];
1160 retval = rtsx_force_power_on(chip, SSC_PDCTL);
1161 if (retval != STATUS_SUCCESS) {
1162 set_sense_type(chip, SCSI_LUN(srb), SENSE_TYPE_MEDIA_WRITE_ERR);
1163 return TRANSPORT_FAILED;
1167 retval = spi_erase_eeprom_chip(chip);
1168 if (retval != STATUS_SUCCESS) {
1169 set_sense_type(chip, SCSI_LUN(srb),
1170 SENSE_TYPE_MEDIA_WRITE_ERR);
1171 return TRANSPORT_FAILED;
1174 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb),
1178 return TRANSPORT_ERROR;
1180 rtsx_stor_get_xfer_buf(buf, len, srb);
1181 scsi_set_resid(srb, scsi_bufflen(srb) - len);
1183 for (i = 0; i < len; i++) {
1184 retval = spi_write_eeprom(chip, i, buf[i]);
1185 if (retval != STATUS_SUCCESS) {
1187 set_sense_type(chip, SCSI_LUN(srb),
1188 SENSE_TYPE_MEDIA_WRITE_ERR);
1189 return TRANSPORT_FAILED;
1196 return TRANSPORT_GOOD;
1199 static int read_mem(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1201 unsigned short addr, len, i;
1205 rtsx_disable_aspm(chip);
1207 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1211 rtsx_set_stat(chip, RTSX_STAT_RUN);
1213 addr = ((u16)srb->cmnd[2] << 8) | srb->cmnd[3];
1214 len = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5];
1216 if (addr < 0xFC00) {
1217 set_sense_type(chip, SCSI_LUN(srb),
1218 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1219 return TRANSPORT_FAILED;
1224 return TRANSPORT_ERROR;
1226 retval = rtsx_force_power_on(chip, SSC_PDCTL);
1227 if (retval != STATUS_SUCCESS) {
1229 set_sense_type(chip, SCSI_LUN(srb), SENSE_TYPE_MEDIA_WRITE_ERR);
1230 return TRANSPORT_FAILED;
1233 for (i = 0; i < len; i++) {
1234 retval = rtsx_read_register(chip, addr + i, buf + i);
1235 if (retval != STATUS_SUCCESS) {
1237 set_sense_type(chip, SCSI_LUN(srb),
1238 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1239 return TRANSPORT_FAILED;
1243 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb), len);
1244 rtsx_stor_set_xfer_buf(buf, len, srb);
1245 scsi_set_resid(srb, scsi_bufflen(srb) - len);
1249 return TRANSPORT_GOOD;
1252 static int write_mem(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1254 unsigned short addr, len, i;
1258 rtsx_disable_aspm(chip);
1260 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1264 rtsx_set_stat(chip, RTSX_STAT_RUN);
1266 addr = ((u16)srb->cmnd[2] << 8) | srb->cmnd[3];
1267 len = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5];
1269 if (addr < 0xFC00) {
1270 set_sense_type(chip, SCSI_LUN(srb),
1271 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1272 return TRANSPORT_FAILED;
1275 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb), len);
1278 return TRANSPORT_ERROR;
1280 rtsx_stor_get_xfer_buf(buf, len, srb);
1281 scsi_set_resid(srb, scsi_bufflen(srb) - len);
1283 retval = rtsx_force_power_on(chip, SSC_PDCTL);
1284 if (retval != STATUS_SUCCESS) {
1286 set_sense_type(chip, SCSI_LUN(srb), SENSE_TYPE_MEDIA_WRITE_ERR);
1287 return TRANSPORT_FAILED;
1290 for (i = 0; i < len; i++) {
1291 retval = rtsx_write_register(chip, addr + i, 0xFF, buf[i]);
1292 if (retval != STATUS_SUCCESS) {
1294 set_sense_type(chip, SCSI_LUN(srb),
1295 SENSE_TYPE_MEDIA_WRITE_ERR);
1296 return TRANSPORT_FAILED;
1302 return TRANSPORT_GOOD;
1305 static int get_sd_csd(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1307 struct sd_info *sd_card = &chip->sd_card;
1308 unsigned int lun = SCSI_LUN(srb);
1310 if (!check_card_ready(chip, lun)) {
1311 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
1312 return TRANSPORT_FAILED;
1315 if (get_lun_card(chip, lun) != SD_CARD) {
1316 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1317 return TRANSPORT_FAILED;
1320 scsi_set_resid(srb, 0);
1321 rtsx_stor_set_xfer_buf(sd_card->raw_csd, scsi_bufflen(srb), srb);
1323 return TRANSPORT_GOOD;
1326 static int toggle_gpio_cmd(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1328 u8 gpio = srb->cmnd[2];
1330 rtsx_disable_aspm(chip);
1332 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1336 rtsx_set_stat(chip, RTSX_STAT_RUN);
1340 toggle_gpio(chip, gpio);
1342 return TRANSPORT_GOOD;
1345 static int read_host_reg(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1351 rtsx_disable_aspm(chip);
1353 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1357 rtsx_set_stat(chip, RTSX_STAT_RUN);
1359 addr = srb->cmnd[4];
1361 val = rtsx_readl(chip, addr);
1362 dev_dbg(rtsx_dev(chip), "Host register (0x%x): 0x%x\n", addr, val);
1364 buf[0] = (u8)(val >> 24);
1365 buf[1] = (u8)(val >> 16);
1366 buf[2] = (u8)(val >> 8);
1369 len = min_t(unsigned int, scsi_bufflen(srb), 4);
1370 rtsx_stor_set_xfer_buf(buf, len, srb);
1371 scsi_set_resid(srb, scsi_bufflen(srb) - len);
1373 return TRANSPORT_GOOD;
1376 static int write_host_reg(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1382 rtsx_disable_aspm(chip);
1384 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1388 rtsx_set_stat(chip, RTSX_STAT_RUN);
1390 addr = srb->cmnd[4];
1392 len = min_t(unsigned int, scsi_bufflen(srb), 4);
1393 rtsx_stor_get_xfer_buf(buf, len, srb);
1394 scsi_set_resid(srb, scsi_bufflen(srb) - len);
1396 val = ((u32)buf[0] << 24) | ((u32)buf[1] << 16) | ((u32)buf[2]
1399 rtsx_writel(chip, addr, val);
1401 return TRANSPORT_GOOD;
1404 static int set_variable(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1406 unsigned int lun = SCSI_LUN(srb);
1408 if (srb->cmnd[3] == 1) {
1409 /* Variable Clock */
1410 struct xd_info *xd_card = &chip->xd_card;
1411 struct sd_info *sd_card = &chip->sd_card;
1412 struct ms_info *ms_card = &chip->ms_card;
1414 switch (srb->cmnd[4]) {
1416 xd_card->xd_clock = srb->cmnd[5];
1420 sd_card->sd_clock = srb->cmnd[5];
1424 ms_card->ms_clock = srb->cmnd[5];
1428 set_sense_type(chip, lun,
1429 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1430 return TRANSPORT_FAILED;
1432 } else if (srb->cmnd[3] == 2) {
1434 chip->blink_led = 1;
1438 chip->blink_led = 0;
1440 rtsx_disable_aspm(chip);
1443 (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1447 rtsx_set_stat(chip, RTSX_STAT_RUN);
1449 retval = rtsx_force_power_on(chip, SSC_PDCTL);
1450 if (retval != STATUS_SUCCESS) {
1451 set_sense_type(chip, SCSI_LUN(srb),
1452 SENSE_TYPE_MEDIA_WRITE_ERR);
1453 return TRANSPORT_FAILED;
1456 turn_off_led(chip, LED_GPIO);
1459 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1460 return TRANSPORT_FAILED;
1463 return TRANSPORT_GOOD;
1466 static int get_variable(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1468 unsigned int lun = SCSI_LUN(srb);
1470 if (srb->cmnd[3] == 1) {
1471 struct xd_info *xd_card = &chip->xd_card;
1472 struct sd_info *sd_card = &chip->sd_card;
1473 struct ms_info *ms_card = &chip->ms_card;
1476 switch (srb->cmnd[4]) {
1478 tmp = (u8)(xd_card->xd_clock);
1482 tmp = (u8)(sd_card->sd_clock);
1486 tmp = (u8)(ms_card->ms_clock);
1490 set_sense_type(chip, lun,
1491 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1492 return TRANSPORT_FAILED;
1495 rtsx_stor_set_xfer_buf(&tmp, 1, srb);
1496 } else if (srb->cmnd[3] == 2) {
1497 u8 tmp = chip->blink_led;
1499 rtsx_stor_set_xfer_buf(&tmp, 1, srb);
1501 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1502 return TRANSPORT_FAILED;
1505 return TRANSPORT_GOOD;
1508 static int dma_access_ring_buffer(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1511 unsigned int lun = SCSI_LUN(srb);
1514 rtsx_disable_aspm(chip);
1516 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1520 rtsx_set_stat(chip, RTSX_STAT_RUN);
1522 len = ((u16)(srb->cmnd[4]) << 8) | srb->cmnd[5];
1523 len = min_t(u16, len, scsi_bufflen(srb));
1525 if (srb->sc_data_direction == DMA_FROM_DEVICE)
1526 dev_dbg(rtsx_dev(chip), "Read from device\n");
1528 dev_dbg(rtsx_dev(chip), "Write to device\n");
1530 retval = rtsx_transfer_data(chip, 0, scsi_sglist(srb), len,
1531 scsi_sg_count(srb), srb->sc_data_direction,
1534 if (srb->sc_data_direction == DMA_FROM_DEVICE)
1535 set_sense_type(chip, lun,
1536 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1538 set_sense_type(chip, lun,
1539 SENSE_TYPE_MEDIA_WRITE_ERR);
1541 return TRANSPORT_FAILED;
1543 scsi_set_resid(srb, 0);
1545 return TRANSPORT_GOOD;
1548 static int get_dev_status(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1550 struct sd_info *sd_card = &chip->sd_card;
1551 struct ms_info *ms_card = &chip->ms_card;
1553 unsigned int lun = SCSI_LUN(srb);
1554 u8 card = get_lun_card(chip, lun);
1557 u8 oc_now_mask = 0, oc_ever_mask = 0;
1560 memset(status, 0, 32);
1562 status[0] = (u8)(chip->product_id);
1563 status[1] = chip->ic_version;
1565 if (chip->auto_delink_en)
1582 if (CHECK_LUN_MODE(chip, SD_MS_2LUN) &&
1583 (chip->lun2card[lun] == MS_CARD)) {
1584 oc_now_mask = MS_OC_NOW;
1585 oc_ever_mask = MS_OC_EVER;
1587 oc_now_mask = SD_OC_NOW;
1588 oc_ever_mask = SD_OC_EVER;
1591 if (chip->ocp_stat & oc_now_mask)
1594 if (chip->ocp_stat & oc_ever_mask)
1598 if (card == SD_CARD) {
1599 if (CHK_SD(sd_card)) {
1600 if (CHK_SD_HCXC(sd_card)) {
1601 if (sd_card->capacity > 0x4000000)
1602 status[0x0E] = 0x02;
1604 status[0x0E] = 0x01;
1606 status[0x0E] = 0x00;
1609 if (CHK_SD_SDR104(sd_card))
1610 status[0x0F] = 0x03;
1611 else if (CHK_SD_DDR50(sd_card))
1612 status[0x0F] = 0x04;
1613 else if (CHK_SD_SDR50(sd_card))
1614 status[0x0F] = 0x02;
1615 else if (CHK_SD_HS(sd_card))
1616 status[0x0F] = 0x01;
1618 status[0x0F] = 0x00;
1620 if (CHK_MMC_SECTOR_MODE(sd_card))
1621 status[0x0E] = 0x01;
1623 status[0x0E] = 0x00;
1625 if (CHK_MMC_DDR52(sd_card))
1626 status[0x0F] = 0x03;
1627 else if (CHK_MMC_52M(sd_card))
1628 status[0x0F] = 0x02;
1629 else if (CHK_MMC_26M(sd_card))
1630 status[0x0F] = 0x01;
1632 status[0x0F] = 0x00;
1634 } else if (card == MS_CARD) {
1635 if (CHK_MSPRO(ms_card)) {
1636 if (CHK_MSXC(ms_card))
1637 status[0x0E] = 0x01;
1639 status[0x0E] = 0x00;
1641 if (CHK_HG8BIT(ms_card))
1642 status[0x0F] = 0x01;
1644 status[0x0F] = 0x00;
1648 #ifdef SUPPORT_SD_LOCK
1649 if (card == SD_CARD) {
1650 status[0x17] = 0x80;
1651 if (sd_card->sd_erase_status)
1652 status[0x17] |= 0x01;
1653 if (sd_card->sd_lock_status & SD_LOCKED) {
1654 status[0x17] |= 0x02;
1655 status[0x07] |= 0x40;
1657 if (sd_card->sd_lock_status & SD_PWD_EXIST)
1658 status[0x17] |= 0x04;
1660 status[0x17] = 0x00;
1663 dev_dbg(rtsx_dev(chip), "status[0x17] = 0x%x\n", status[0x17]);
1666 status[0x18] = 0x8A;
1667 status[0x1A] = 0x28;
1668 #ifdef SUPPORT_SD_LOCK
1669 status[0x1F] = 0x01;
1672 buf_len = min_t(unsigned int, scsi_bufflen(srb), sizeof(status));
1673 rtsx_stor_set_xfer_buf(status, buf_len, srb);
1674 scsi_set_resid(srb, scsi_bufflen(srb) - buf_len);
1676 return TRANSPORT_GOOD;
1679 static int set_chip_mode(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1685 if (!CHECK_PID(chip, 0x5208)) {
1686 set_sense_type(chip, SCSI_LUN(srb),
1687 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1688 return TRANSPORT_FAILED;
1691 phy_debug_mode = (int)(srb->cmnd[3]);
1693 if (phy_debug_mode) {
1694 chip->phy_debug_mode = 1;
1695 retval = rtsx_write_register(chip, CDRESUMECTL, 0x77, 0);
1696 if (retval != STATUS_SUCCESS)
1697 return TRANSPORT_FAILED;
1699 rtsx_disable_bus_int(chip);
1701 retval = rtsx_read_phy_register(chip, 0x1C, ®);
1702 if (retval != STATUS_SUCCESS)
1703 return TRANSPORT_FAILED;
1706 retval = rtsx_write_phy_register(chip, 0x1C, reg);
1707 if (retval != STATUS_SUCCESS)
1708 return TRANSPORT_FAILED;
1710 chip->phy_debug_mode = 0;
1711 retval = rtsx_write_register(chip, CDRESUMECTL, 0x77, 0x77);
1712 if (retval != STATUS_SUCCESS)
1713 return TRANSPORT_FAILED;
1715 rtsx_enable_bus_int(chip);
1717 retval = rtsx_read_phy_register(chip, 0x1C, ®);
1718 if (retval != STATUS_SUCCESS)
1719 return TRANSPORT_FAILED;
1722 retval = rtsx_write_phy_register(chip, 0x1C, reg);
1723 if (retval != STATUS_SUCCESS)
1724 return TRANSPORT_FAILED;
1727 return TRANSPORT_GOOD;
1730 static int rw_mem_cmd_buf(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1732 int retval = STATUS_SUCCESS;
1733 unsigned int lun = SCSI_LUN(srb);
1734 u8 cmd_type, mask, value, idx;
1737 rtsx_disable_aspm(chip);
1739 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1743 rtsx_set_stat(chip, RTSX_STAT_RUN);
1745 switch (srb->cmnd[3]) {
1747 rtsx_init_cmd(chip);
1751 cmd_type = srb->cmnd[4];
1753 set_sense_type(chip, lun,
1754 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1755 return TRANSPORT_FAILED;
1757 addr = (srb->cmnd[5] << 8) | srb->cmnd[6];
1758 mask = srb->cmnd[7];
1759 value = srb->cmnd[8];
1760 rtsx_add_cmd(chip, cmd_type, addr, mask, value);
1764 retval = rtsx_send_cmd(chip, 0, 1000);
1769 value = *(rtsx_get_cmd_data(chip) + idx);
1770 if (scsi_bufflen(srb) < 1) {
1771 set_sense_type(chip, lun,
1772 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1773 return TRANSPORT_FAILED;
1775 rtsx_stor_set_xfer_buf(&value, 1, srb);
1776 scsi_set_resid(srb, 0);
1780 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1781 return TRANSPORT_FAILED;
1784 if (retval != STATUS_SUCCESS) {
1785 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_ERR);
1786 return TRANSPORT_FAILED;
1789 return TRANSPORT_GOOD;
1792 static int suit_cmd(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1794 switch (srb->cmnd[3]) {
1799 return rw_mem_cmd_buf(srb, chip);
1801 return TRANSPORT_ERROR;
1805 static int read_phy_register(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1807 unsigned short addr, len, i;
1812 rtsx_disable_aspm(chip);
1814 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1818 rtsx_set_stat(chip, RTSX_STAT_RUN);
1820 addr = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5];
1821 len = ((u16)srb->cmnd[6] << 8) | srb->cmnd[7];
1829 return TRANSPORT_ERROR;
1831 retval = rtsx_force_power_on(chip, SSC_PDCTL);
1832 if (retval != STATUS_SUCCESS) {
1834 set_sense_type(chip, SCSI_LUN(srb),
1835 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1836 return TRANSPORT_FAILED;
1839 for (i = 0; i < len / 2; i++) {
1840 retval = rtsx_read_phy_register(chip, addr + i, &val);
1841 if (retval != STATUS_SUCCESS) {
1844 (chip, SCSI_LUN(srb),
1845 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1846 return TRANSPORT_FAILED;
1849 buf[2 * i] = (u8)(val >> 8);
1850 buf[2 * i + 1] = (u8)val;
1853 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb),
1855 rtsx_stor_set_xfer_buf(buf, len, srb);
1856 scsi_set_resid(srb, scsi_bufflen(srb) - len);
1861 return TRANSPORT_GOOD;
1864 static int write_phy_register(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1866 unsigned short addr, len, i;
1871 rtsx_disable_aspm(chip);
1873 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1877 rtsx_set_stat(chip, RTSX_STAT_RUN);
1879 addr = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5];
1880 len = ((u16)srb->cmnd[6] << 8) | srb->cmnd[7];
1886 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb),
1891 return TRANSPORT_ERROR;
1893 rtsx_stor_get_xfer_buf(buf, len, srb);
1894 scsi_set_resid(srb, scsi_bufflen(srb) - len);
1896 retval = rtsx_force_power_on(chip, SSC_PDCTL);
1897 if (retval != STATUS_SUCCESS) {
1899 set_sense_type(chip, SCSI_LUN(srb),
1900 SENSE_TYPE_MEDIA_WRITE_ERR);
1901 return TRANSPORT_FAILED;
1904 for (i = 0; i < len / 2; i++) {
1905 val = ((u16)buf[2 * i] << 8) | buf[2 * i + 1];
1906 retval = rtsx_write_phy_register(chip, addr + i, val);
1907 if (retval != STATUS_SUCCESS) {
1909 set_sense_type(chip, SCSI_LUN(srb),
1910 SENSE_TYPE_MEDIA_WRITE_ERR);
1911 return TRANSPORT_FAILED;
1918 return TRANSPORT_GOOD;
1921 static int erase_eeprom2(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1923 unsigned short addr;
1927 rtsx_disable_aspm(chip);
1929 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1933 rtsx_set_stat(chip, RTSX_STAT_RUN);
1935 retval = rtsx_force_power_on(chip, SSC_PDCTL);
1936 if (retval != STATUS_SUCCESS) {
1937 set_sense_type(chip, SCSI_LUN(srb), SENSE_TYPE_MEDIA_WRITE_ERR);
1938 return TRANSPORT_FAILED;
1941 mode = srb->cmnd[3];
1942 addr = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5];
1945 retval = spi_erase_eeprom_chip(chip);
1946 if (retval != STATUS_SUCCESS) {
1947 set_sense_type(chip, SCSI_LUN(srb),
1948 SENSE_TYPE_MEDIA_WRITE_ERR);
1949 return TRANSPORT_FAILED;
1951 } else if (mode == 1) {
1952 retval = spi_erase_eeprom_byte(chip, addr);
1953 if (retval != STATUS_SUCCESS) {
1954 set_sense_type(chip, SCSI_LUN(srb),
1955 SENSE_TYPE_MEDIA_WRITE_ERR);
1956 return TRANSPORT_FAILED;
1959 set_sense_type(chip, SCSI_LUN(srb),
1960 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
1961 return TRANSPORT_FAILED;
1964 return TRANSPORT_GOOD;
1967 static int read_eeprom2(struct scsi_cmnd *srb, struct rtsx_chip *chip)
1969 unsigned short addr, len, i;
1973 rtsx_disable_aspm(chip);
1975 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
1979 rtsx_set_stat(chip, RTSX_STAT_RUN);
1981 addr = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5];
1982 len = ((u16)srb->cmnd[6] << 8) | srb->cmnd[7];
1986 return TRANSPORT_ERROR;
1988 retval = rtsx_force_power_on(chip, SSC_PDCTL);
1989 if (retval != STATUS_SUCCESS) {
1991 set_sense_type(chip, SCSI_LUN(srb),
1992 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
1993 return TRANSPORT_FAILED;
1996 for (i = 0; i < len; i++) {
1997 retval = spi_read_eeprom(chip, addr + i, buf + i);
1998 if (retval != STATUS_SUCCESS) {
2000 set_sense_type(chip, SCSI_LUN(srb),
2001 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
2002 return TRANSPORT_FAILED;
2006 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb), len);
2007 rtsx_stor_set_xfer_buf(buf, len, srb);
2008 scsi_set_resid(srb, scsi_bufflen(srb) - len);
2012 return TRANSPORT_GOOD;
2015 static int write_eeprom2(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2017 unsigned short addr, len, i;
2021 rtsx_disable_aspm(chip);
2023 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
2027 rtsx_set_stat(chip, RTSX_STAT_RUN);
2029 addr = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5];
2030 len = ((u16)srb->cmnd[6] << 8) | srb->cmnd[7];
2032 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb), len);
2035 return TRANSPORT_ERROR;
2037 rtsx_stor_get_xfer_buf(buf, len, srb);
2038 scsi_set_resid(srb, scsi_bufflen(srb) - len);
2040 retval = rtsx_force_power_on(chip, SSC_PDCTL);
2041 if (retval != STATUS_SUCCESS) {
2043 set_sense_type(chip, SCSI_LUN(srb), SENSE_TYPE_MEDIA_WRITE_ERR);
2044 return TRANSPORT_FAILED;
2047 for (i = 0; i < len; i++) {
2048 retval = spi_write_eeprom(chip, addr + i, buf[i]);
2049 if (retval != STATUS_SUCCESS) {
2051 set_sense_type(chip, SCSI_LUN(srb),
2052 SENSE_TYPE_MEDIA_WRITE_ERR);
2053 return TRANSPORT_FAILED;
2059 return TRANSPORT_GOOD;
2062 static int read_efuse(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2068 rtsx_disable_aspm(chip);
2070 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
2074 rtsx_set_stat(chip, RTSX_STAT_RUN);
2076 addr = srb->cmnd[4];
2081 return TRANSPORT_ERROR;
2083 retval = rtsx_force_power_on(chip, SSC_PDCTL);
2084 if (retval != STATUS_SUCCESS) {
2086 set_sense_type(chip, SCSI_LUN(srb),
2087 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
2088 return TRANSPORT_FAILED;
2091 for (i = 0; i < len; i++) {
2092 retval = rtsx_read_efuse(chip, addr + i, buf + i);
2093 if (retval != STATUS_SUCCESS) {
2095 set_sense_type(chip, SCSI_LUN(srb),
2096 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
2097 return TRANSPORT_FAILED;
2101 len = (u8)min_t(unsigned int, scsi_bufflen(srb), len);
2102 rtsx_stor_set_xfer_buf(buf, len, srb);
2103 scsi_set_resid(srb, scsi_bufflen(srb) - len);
2107 return TRANSPORT_GOOD;
2110 static int write_efuse(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2112 int retval, result = TRANSPORT_GOOD;
2117 rtsx_disable_aspm(chip);
2119 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
2123 rtsx_set_stat(chip, RTSX_STAT_RUN);
2125 addr = srb->cmnd[4];
2128 len = (u8)min_t(unsigned int, scsi_bufflen(srb), len);
2131 return TRANSPORT_ERROR;
2133 rtsx_stor_get_xfer_buf(buf, len, srb);
2134 scsi_set_resid(srb, scsi_bufflen(srb) - len);
2136 retval = rtsx_force_power_on(chip, SSC_PDCTL);
2137 if (retval != STATUS_SUCCESS) {
2139 return TRANSPORT_ERROR;
2142 if (chip->asic_code) {
2143 retval = rtsx_read_phy_register(chip, 0x08, &val);
2144 if (retval != STATUS_SUCCESS) {
2146 return TRANSPORT_ERROR;
2149 retval = rtsx_write_register(chip, PWR_GATE_CTRL,
2150 LDO3318_PWR_MASK, LDO_OFF);
2151 if (retval != STATUS_SUCCESS) {
2153 return TRANSPORT_ERROR;
2158 retval = rtsx_write_phy_register(chip, 0x08,
2159 0x4C00 | chip->phy_voltage);
2160 if (retval != STATUS_SUCCESS) {
2162 return TRANSPORT_ERROR;
2165 retval = rtsx_write_register(chip, PWR_GATE_CTRL,
2166 LDO3318_PWR_MASK, LDO_ON);
2167 if (retval != STATUS_SUCCESS) {
2169 return TRANSPORT_ERROR;
2175 retval = card_power_on(chip, SPI_CARD);
2176 if (retval != STATUS_SUCCESS) {
2178 return TRANSPORT_ERROR;
2183 for (i = 0; i < len; i++) {
2184 retval = rtsx_write_efuse(chip, addr + i, buf[i]);
2185 if (retval != STATUS_SUCCESS) {
2186 set_sense_type(chip, SCSI_LUN(srb),
2187 SENSE_TYPE_MEDIA_WRITE_ERR);
2188 result = TRANSPORT_FAILED;
2196 retval = card_power_off(chip, SPI_CARD);
2197 if (retval != STATUS_SUCCESS)
2198 return TRANSPORT_ERROR;
2200 if (chip->asic_code) {
2201 retval = rtsx_write_register(chip, PWR_GATE_CTRL,
2202 LDO3318_PWR_MASK, LDO_OFF);
2203 if (retval != STATUS_SUCCESS)
2204 return TRANSPORT_ERROR;
2208 retval = rtsx_write_phy_register(chip, 0x08, val);
2209 if (retval != STATUS_SUCCESS)
2210 return TRANSPORT_ERROR;
2212 retval = rtsx_write_register(chip, PWR_GATE_CTRL,
2213 LDO3318_PWR_MASK, LDO_ON);
2214 if (retval != STATUS_SUCCESS)
2215 return TRANSPORT_ERROR;
2221 static int read_cfg_byte(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2229 rtsx_disable_aspm(chip);
2231 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
2235 rtsx_set_stat(chip, RTSX_STAT_RUN);
2237 func = srb->cmnd[3];
2238 addr = ((u16)(srb->cmnd[4]) << 8) | srb->cmnd[5];
2239 len = ((u16)(srb->cmnd[6]) << 8) | srb->cmnd[7];
2241 dev_dbg(rtsx_dev(chip), "%s: func = %d, addr = 0x%x, len = %d\n",
2242 __func__, func, addr, len);
2244 if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip))
2249 if (func > func_max) {
2250 set_sense_type(chip, SCSI_LUN(srb),
2251 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2252 return TRANSPORT_FAILED;
2257 return TRANSPORT_ERROR;
2259 retval = rtsx_read_cfg_seq(chip, func, addr, buf, len);
2260 if (retval != STATUS_SUCCESS) {
2261 set_sense_type(chip, SCSI_LUN(srb),
2262 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
2264 return TRANSPORT_FAILED;
2267 len = (u16)min_t(unsigned int, scsi_bufflen(srb), len);
2268 rtsx_stor_set_xfer_buf(buf, len, srb);
2269 scsi_set_resid(srb, scsi_bufflen(srb) - len);
2273 return TRANSPORT_GOOD;
2276 static int write_cfg_byte(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2284 rtsx_disable_aspm(chip);
2286 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
2290 rtsx_set_stat(chip, RTSX_STAT_RUN);
2292 func = srb->cmnd[3];
2293 addr = ((u16)(srb->cmnd[4]) << 8) | srb->cmnd[5];
2294 len = ((u16)(srb->cmnd[6]) << 8) | srb->cmnd[7];
2296 dev_dbg(rtsx_dev(chip), "%s: func = %d, addr = 0x%x\n",
2297 __func__, func, addr);
2299 if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip))
2304 if (func > func_max) {
2305 set_sense_type(chip, SCSI_LUN(srb),
2306 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2307 return TRANSPORT_FAILED;
2310 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb), len);
2313 return TRANSPORT_ERROR;
2315 rtsx_stor_get_xfer_buf(buf, len, srb);
2316 scsi_set_resid(srb, scsi_bufflen(srb) - len);
2318 retval = rtsx_write_cfg_seq(chip, func, addr, buf, len);
2319 if (retval != STATUS_SUCCESS) {
2320 set_sense_type(chip, SCSI_LUN(srb), SENSE_TYPE_MEDIA_WRITE_ERR);
2322 return TRANSPORT_FAILED;
2327 return TRANSPORT_GOOD;
2330 static int app_cmd(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2334 switch (srb->cmnd[2]) {
2337 result = read_write(srb, chip);
2341 result = read_host_reg(srb, chip);
2344 case WRITE_HOST_REG:
2345 result = write_host_reg(srb, chip);
2349 result = get_variable(srb, chip);
2353 result = set_variable(srb, chip);
2358 result = dma_access_ring_buffer(srb, chip);
2362 result = read_phy_register(srb, chip);
2366 result = write_phy_register(srb, chip);
2370 result = erase_eeprom2(srb, chip);
2374 result = read_eeprom2(srb, chip);
2378 result = write_eeprom2(srb, chip);
2382 result = read_efuse(srb, chip);
2386 result = write_efuse(srb, chip);
2390 result = read_cfg_byte(srb, chip);
2394 result = write_cfg_byte(srb, chip);
2398 result = set_chip_mode(srb, chip);
2402 result = suit_cmd(srb, chip);
2405 case GET_DEV_STATUS:
2406 result = get_dev_status(srb, chip);
2410 set_sense_type(chip, SCSI_LUN(srb),
2411 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2412 return TRANSPORT_FAILED;
2418 static int read_status(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2422 unsigned int lun = SCSI_LUN(srb);
2424 rtsx_status[0] = (u8)(chip->vendor_id >> 8);
2425 rtsx_status[1] = (u8)(chip->vendor_id);
2427 rtsx_status[2] = (u8)(chip->product_id >> 8);
2428 rtsx_status[3] = (u8)(chip->product_id);
2430 rtsx_status[4] = (u8)lun;
2432 if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
2433 if (chip->lun2card[lun] == SD_CARD)
2438 if (chip->card_exist) {
2439 if (chip->card_exist & XD_CARD)
2441 else if (chip->card_exist & SD_CARD)
2443 else if (chip->card_exist & MS_CARD)
2452 if (CHECK_LUN_MODE(chip, SD_MS_2LUN))
2457 rtsx_status[7] = (u8)(chip->product_id);
2458 rtsx_status[8] = chip->ic_version;
2460 if (check_card_exist(chip, lun))
2465 if (CHECK_LUN_MODE(chip, SD_MS_2LUN))
2466 rtsx_status[10] = 0;
2468 rtsx_status[10] = 1;
2470 if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) {
2471 if (chip->lun2card[lun] == SD_CARD)
2472 rtsx_status[11] = SD_CARD;
2474 rtsx_status[11] = MS_CARD;
2476 rtsx_status[11] = XD_CARD | SD_CARD | MS_CARD;
2479 if (check_card_ready(chip, lun))
2480 rtsx_status[12] = 1;
2482 rtsx_status[12] = 0;
2484 if (get_lun_card(chip, lun) == XD_CARD) {
2485 rtsx_status[13] = 0x40;
2486 } else if (get_lun_card(chip, lun) == SD_CARD) {
2487 struct sd_info *sd_card = &chip->sd_card;
2489 rtsx_status[13] = 0x20;
2490 if (CHK_SD(sd_card)) {
2491 if (CHK_SD_HCXC(sd_card))
2492 rtsx_status[13] |= 0x04;
2493 if (CHK_SD_HS(sd_card))
2494 rtsx_status[13] |= 0x02;
2496 rtsx_status[13] |= 0x08;
2497 if (CHK_MMC_52M(sd_card))
2498 rtsx_status[13] |= 0x02;
2499 if (CHK_MMC_SECTOR_MODE(sd_card))
2500 rtsx_status[13] |= 0x04;
2502 } else if (get_lun_card(chip, lun) == MS_CARD) {
2503 struct ms_info *ms_card = &chip->ms_card;
2505 if (CHK_MSPRO(ms_card)) {
2506 rtsx_status[13] = 0x38;
2507 if (CHK_HG8BIT(ms_card))
2508 rtsx_status[13] |= 0x04;
2510 if (CHK_MSXC(ms_card))
2511 rtsx_status[13] |= 0x01;
2514 rtsx_status[13] = 0x30;
2517 if (CHECK_LUN_MODE(chip, DEFAULT_SINGLE)) {
2519 if (chip->sd_io && chip->sd_int)
2520 rtsx_status[13] = 0x60;
2522 rtsx_status[13] = 0x70;
2524 rtsx_status[13] = 0x70;
2527 if (chip->lun2card[lun] == SD_CARD)
2528 rtsx_status[13] = 0x20;
2530 rtsx_status[13] = 0x30;
2534 rtsx_status[14] = 0x78;
2535 if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip))
2536 rtsx_status[15] = 0x83;
2538 rtsx_status[15] = 0x82;
2540 buf_len = min_t(unsigned int, scsi_bufflen(srb), sizeof(rtsx_status));
2541 rtsx_stor_set_xfer_buf(rtsx_status, buf_len, srb);
2542 scsi_set_resid(srb, scsi_bufflen(srb) - buf_len);
2544 return TRANSPORT_GOOD;
2547 static int get_card_bus_width(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2549 unsigned int lun = SCSI_LUN(srb);
2552 if (!check_card_ready(chip, lun)) {
2553 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
2554 return TRANSPORT_FAILED;
2557 card = get_lun_card(chip, lun);
2558 if ((card == SD_CARD) || (card == MS_CARD)) {
2559 bus_width = chip->card_bus_width[lun];
2561 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
2562 return TRANSPORT_FAILED;
2565 scsi_set_resid(srb, 0);
2566 rtsx_stor_set_xfer_buf(&bus_width, scsi_bufflen(srb), srb);
2568 return TRANSPORT_GOOD;
2571 static int spi_vendor_cmd(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2574 unsigned int lun = SCSI_LUN(srb);
2577 if (CHECK_PID(chip, 0x5208) || CHECK_PID(chip, 0x5288)) {
2578 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2579 return TRANSPORT_FAILED;
2582 rtsx_disable_aspm(chip);
2584 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
2588 rtsx_set_stat(chip, RTSX_STAT_RUN);
2590 rtsx_force_power_on(chip, SSC_PDCTL);
2592 rtsx_read_register(chip, CARD_GPIO_DIR, &gpio_dir);
2593 rtsx_write_register(chip, CARD_GPIO_DIR, 0x07, gpio_dir & 0x06);
2595 switch (srb->cmnd[2]) {
2596 case SCSI_SPI_GETSTATUS:
2597 result = spi_get_status(srb, chip);
2600 case SCSI_SPI_SETPARAMETER:
2601 result = spi_set_parameter(srb, chip);
2604 case SCSI_SPI_READFALSHID:
2605 result = spi_read_flash_id(srb, chip);
2608 case SCSI_SPI_READFLASH:
2609 result = spi_read_flash(srb, chip);
2612 case SCSI_SPI_WRITEFLASH:
2613 result = spi_write_flash(srb, chip);
2616 case SCSI_SPI_WRITEFLASHSTATUS:
2617 result = spi_write_flash_status(srb, chip);
2620 case SCSI_SPI_ERASEFLASH:
2621 result = spi_erase_flash(srb, chip);
2625 rtsx_write_register(chip, CARD_GPIO_DIR, 0x07, gpio_dir);
2627 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2628 return TRANSPORT_FAILED;
2631 rtsx_write_register(chip, CARD_GPIO_DIR, 0x07, gpio_dir);
2633 if (result != STATUS_SUCCESS)
2634 return TRANSPORT_FAILED;
2636 return TRANSPORT_GOOD;
2639 static int vendor_cmnd(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2643 switch (srb->cmnd[1]) {
2645 result = read_status(srb, chip);
2649 result = read_mem(srb, chip);
2653 result = write_mem(srb, chip);
2657 result = read_eeprom(srb, chip);
2661 result = write_eeprom(srb, chip);
2665 result = toggle_gpio_cmd(srb, chip);
2669 result = get_sd_csd(srb, chip);
2673 result = get_card_bus_width(srb, chip);
2677 result = app_cmd(srb, chip);
2680 case SPI_VENDOR_COMMAND:
2681 result = spi_vendor_cmd(srb, chip);
2685 set_sense_type(chip, SCSI_LUN(srb),
2686 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2687 return TRANSPORT_FAILED;
2693 #if !defined(LED_AUTO_BLINK) && !defined(REGULAR_BLINK)
2694 void led_shine(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2696 unsigned int lun = SCSI_LUN(srb);
2699 if ((srb->cmnd[0] == READ_10) || (srb->cmnd[0] == WRITE_10)) {
2700 sec_cnt = ((u16)(srb->cmnd[7]) << 8) | srb->cmnd[8];
2701 } else if ((srb->cmnd[0] == READ_6) || (srb->cmnd[0] == WRITE_6)) {
2702 sec_cnt = srb->cmnd[4];
2709 if (chip->rw_cap[lun] >= GPIO_TOGGLE_THRESHOLD) {
2710 toggle_gpio(chip, LED_GPIO);
2711 chip->rw_cap[lun] = 0;
2713 chip->rw_cap[lun] += sec_cnt;
2718 static int ms_format_cmnd(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2720 struct ms_info *ms_card = &chip->ms_card;
2721 unsigned int lun = SCSI_LUN(srb);
2725 if (get_lun_card(chip, lun) != MS_CARD) {
2726 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
2727 return TRANSPORT_FAILED;
2730 if ((srb->cmnd[3] != 0x4D) || (srb->cmnd[4] != 0x47) ||
2731 (srb->cmnd[5] != 0x66) || (srb->cmnd[6] != 0x6D) ||
2732 (srb->cmnd[7] != 0x74)) {
2733 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2734 return TRANSPORT_FAILED;
2737 rtsx_disable_aspm(chip);
2739 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
2743 if (!check_card_ready(chip, lun) ||
2744 (get_card_size(chip, lun) == 0)) {
2745 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
2746 return TRANSPORT_FAILED;
2749 rtsx_set_stat(chip, RTSX_STAT_RUN);
2751 if (srb->cmnd[8] & 0x01)
2752 quick_format = false;
2754 quick_format = true;
2756 if (!(chip->card_ready & MS_CARD)) {
2757 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
2758 return TRANSPORT_FAILED;
2761 if (chip->card_wp & MS_CARD) {
2762 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_PROTECT);
2763 return TRANSPORT_FAILED;
2766 if (!CHK_MSPRO(ms_card)) {
2767 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
2768 return TRANSPORT_FAILED;
2771 retval = mspro_format(srb, chip, MS_SHORT_DATA_LEN, quick_format);
2772 if (retval != STATUS_SUCCESS) {
2773 set_sense_type(chip, lun, SENSE_TYPE_FORMAT_CMD_FAILED);
2774 return TRANSPORT_FAILED;
2777 scsi_set_resid(srb, 0);
2778 return TRANSPORT_GOOD;
2781 #ifdef SUPPORT_PCGL_1P18
2782 static int get_ms_information(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2784 struct ms_info *ms_card = &chip->ms_card;
2785 unsigned int lun = SCSI_LUN(srb);
2786 u8 dev_info_id, data_len;
2788 unsigned int buf_len;
2791 if (!check_card_ready(chip, lun)) {
2792 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
2793 return TRANSPORT_FAILED;
2795 if (get_lun_card(chip, lun) != MS_CARD) {
2796 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
2797 return TRANSPORT_FAILED;
2800 if ((srb->cmnd[2] != 0xB0) || (srb->cmnd[4] != 0x4D) ||
2801 (srb->cmnd[5] != 0x53) || (srb->cmnd[6] != 0x49) ||
2802 (srb->cmnd[7] != 0x44)) {
2803 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2804 return TRANSPORT_FAILED;
2807 dev_info_id = srb->cmnd[3];
2808 if ((CHK_MSXC(ms_card) && (dev_info_id == 0x10)) ||
2809 (!CHK_MSXC(ms_card) && (dev_info_id == 0x13)) ||
2810 !CHK_MSPRO(ms_card)) {
2811 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2812 return TRANSPORT_FAILED;
2815 if (dev_info_id == 0x15) {
2823 buf = kmalloc(buf_len, GFP_KERNEL);
2825 return TRANSPORT_ERROR;
2828 /* GET Memory Stick Media Information Response Header */
2829 buf[i++] = 0x00; /* Data length MSB */
2830 buf[i++] = data_len; /* Data length LSB */
2831 /* Device Information Type Code */
2832 if (CHK_MSXC(ms_card))
2843 /* Number of Device Information */
2846 /* Device Information Body */
2848 /* Device Information ID Number */
2849 buf[i++] = dev_info_id;
2850 /* Device Information Length */
2851 if (dev_info_id == 0x15)
2856 buf[i++] = 0x00; /* Data length MSB */
2857 buf[i++] = data_len; /* Data length LSB */
2860 if ((dev_info_id == 0x10) || (dev_info_id == 0x13)) {
2861 /* System Information */
2862 memcpy(buf + i, ms_card->raw_sys_info, 96);
2865 memcpy(buf + i, ms_card->raw_model_name, 48);
2868 rtsx_stor_set_xfer_buf(buf, buf_len, srb);
2870 if (dev_info_id == 0x15)
2871 scsi_set_resid(srb, scsi_bufflen(srb) - 0x3C);
2873 scsi_set_resid(srb, scsi_bufflen(srb) - 0x6C);
2876 return STATUS_SUCCESS;
2880 static int ms_sp_cmnd(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2882 int retval = TRANSPORT_ERROR;
2884 if (srb->cmnd[2] == MS_FORMAT)
2885 retval = ms_format_cmnd(srb, chip);
2886 #ifdef SUPPORT_PCGL_1P18
2887 else if (srb->cmnd[2] == GET_MS_INFORMATION)
2888 retval = get_ms_information(srb, chip);
2895 static int sd_extension_cmnd(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2897 unsigned int lun = SCSI_LUN(srb);
2900 rtsx_disable_aspm(chip);
2902 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
2906 rtsx_set_stat(chip, RTSX_STAT_RUN);
2908 sd_cleanup_work(chip);
2910 if (!check_card_ready(chip, lun)) {
2911 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
2912 return TRANSPORT_FAILED;
2914 if (get_lun_card(chip, lun) != SD_CARD) {
2915 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
2916 return TRANSPORT_FAILED;
2919 switch (srb->cmnd[0]) {
2920 case SD_PASS_THRU_MODE:
2921 result = sd_pass_thru_mode(srb, chip);
2924 case SD_EXECUTE_NO_DATA:
2925 result = sd_execute_no_data(srb, chip);
2928 case SD_EXECUTE_READ:
2929 result = sd_execute_read_data(srb, chip);
2932 case SD_EXECUTE_WRITE:
2933 result = sd_execute_write_data(srb, chip);
2937 result = sd_get_cmd_rsp(srb, chip);
2941 result = sd_hw_rst(srb, chip);
2945 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2946 return TRANSPORT_FAILED;
2953 #ifdef SUPPORT_MAGIC_GATE
2954 static int mg_report_key(struct scsi_cmnd *srb, struct rtsx_chip *chip)
2956 struct ms_info *ms_card = &chip->ms_card;
2957 unsigned int lun = SCSI_LUN(srb);
2961 rtsx_disable_aspm(chip);
2963 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
2967 rtsx_set_stat(chip, RTSX_STAT_RUN);
2969 ms_cleanup_work(chip);
2971 if (!check_card_ready(chip, lun)) {
2972 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
2973 return TRANSPORT_FAILED;
2975 if (get_lun_card(chip, lun) != MS_CARD) {
2976 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
2977 return TRANSPORT_FAILED;
2980 if (srb->cmnd[7] != KC_MG_R_PRO) {
2981 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
2982 return TRANSPORT_FAILED;
2985 if (!CHK_MSPRO(ms_card)) {
2986 set_sense_type(chip, lun, SENSE_TYPE_MG_INCOMPATIBLE_MEDIUM);
2987 return TRANSPORT_FAILED;
2990 key_format = srb->cmnd[10] & 0x3F;
2991 dev_dbg(rtsx_dev(chip), "key_format = 0x%x\n", key_format);
2993 switch (key_format) {
2994 case KF_GET_LOC_EKB:
2995 if ((scsi_bufflen(srb) == 0x41C) &&
2996 (srb->cmnd[8] == 0x04) &&
2997 (srb->cmnd[9] == 0x1C)) {
2998 retval = mg_get_local_EKB(srb, chip);
2999 if (retval != STATUS_SUCCESS)
3000 return TRANSPORT_FAILED;
3003 set_sense_type(chip, lun,
3004 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3005 return TRANSPORT_FAILED;
3010 if ((scsi_bufflen(srb) == 0x24) &&
3011 (srb->cmnd[8] == 0x00) &&
3012 (srb->cmnd[9] == 0x24)) {
3013 retval = mg_get_rsp_chg(srb, chip);
3014 if (retval != STATUS_SUCCESS)
3015 return TRANSPORT_FAILED;
3018 set_sense_type(chip, lun,
3019 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3020 return TRANSPORT_FAILED;
3025 ms_card->mg_entry_num = srb->cmnd[5];
3026 if ((scsi_bufflen(srb) == 0x404) &&
3027 (srb->cmnd[8] == 0x04) &&
3028 (srb->cmnd[9] == 0x04) &&
3029 (srb->cmnd[2] == 0x00) &&
3030 (srb->cmnd[3] == 0x00) &&
3031 (srb->cmnd[4] == 0x00) &&
3032 (srb->cmnd[5] < 32)) {
3033 retval = mg_get_ICV(srb, chip);
3034 if (retval != STATUS_SUCCESS)
3035 return TRANSPORT_FAILED;
3038 set_sense_type(chip, lun,
3039 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3040 return TRANSPORT_FAILED;
3045 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3046 return TRANSPORT_FAILED;
3049 scsi_set_resid(srb, 0);
3050 return TRANSPORT_GOOD;
3053 static int mg_send_key(struct scsi_cmnd *srb, struct rtsx_chip *chip)
3055 struct ms_info *ms_card = &chip->ms_card;
3056 unsigned int lun = SCSI_LUN(srb);
3060 rtsx_disable_aspm(chip);
3062 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) {
3066 rtsx_set_stat(chip, RTSX_STAT_RUN);
3068 ms_cleanup_work(chip);
3070 if (!check_card_ready(chip, lun)) {
3071 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
3072 return TRANSPORT_FAILED;
3074 if (check_card_wp(chip, lun)) {
3075 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_PROTECT);
3076 return TRANSPORT_FAILED;
3078 if (get_lun_card(chip, lun) != MS_CARD) {
3079 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT);
3080 return TRANSPORT_FAILED;
3083 if (srb->cmnd[7] != KC_MG_R_PRO) {
3084 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3085 return TRANSPORT_FAILED;
3088 if (!CHK_MSPRO(ms_card)) {
3089 set_sense_type(chip, lun, SENSE_TYPE_MG_INCOMPATIBLE_MEDIUM);
3090 return TRANSPORT_FAILED;
3093 key_format = srb->cmnd[10] & 0x3F;
3094 dev_dbg(rtsx_dev(chip), "key_format = 0x%x\n", key_format);
3096 switch (key_format) {
3097 case KF_SET_LEAF_ID:
3098 if ((scsi_bufflen(srb) == 0x0C) &&
3099 (srb->cmnd[8] == 0x00) &&
3100 (srb->cmnd[9] == 0x0C)) {
3101 retval = mg_set_leaf_id(srb, chip);
3102 if (retval != STATUS_SUCCESS)
3103 return TRANSPORT_FAILED;
3106 set_sense_type(chip, lun,
3107 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3108 return TRANSPORT_FAILED;
3113 if ((scsi_bufflen(srb) == 0x0C) &&
3114 (srb->cmnd[8] == 0x00) &&
3115 (srb->cmnd[9] == 0x0C)) {
3116 retval = mg_chg(srb, chip);
3117 if (retval != STATUS_SUCCESS)
3118 return TRANSPORT_FAILED;
3121 set_sense_type(chip, lun,
3122 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3123 return TRANSPORT_FAILED;
3128 if ((scsi_bufflen(srb) == 0x0C) &&
3129 (srb->cmnd[8] == 0x00) &&
3130 (srb->cmnd[9] == 0x0C)) {
3131 retval = mg_rsp(srb, chip);
3132 if (retval != STATUS_SUCCESS)
3133 return TRANSPORT_FAILED;
3136 set_sense_type(chip, lun,
3137 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3138 return TRANSPORT_FAILED;
3143 ms_card->mg_entry_num = srb->cmnd[5];
3144 if ((scsi_bufflen(srb) == 0x404) &&
3145 (srb->cmnd[8] == 0x04) &&
3146 (srb->cmnd[9] == 0x04) &&
3147 (srb->cmnd[2] == 0x00) &&
3148 (srb->cmnd[3] == 0x00) &&
3149 (srb->cmnd[4] == 0x00) &&
3150 (srb->cmnd[5] < 32)) {
3151 retval = mg_set_ICV(srb, chip);
3152 if (retval != STATUS_SUCCESS)
3153 return TRANSPORT_FAILED;
3156 set_sense_type(chip, lun,
3157 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3158 return TRANSPORT_FAILED;
3163 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3164 return TRANSPORT_FAILED;
3167 scsi_set_resid(srb, 0);
3168 return TRANSPORT_GOOD;
3172 int rtsx_scsi_handler(struct scsi_cmnd *srb, struct rtsx_chip *chip)
3174 #ifdef SUPPORT_SD_LOCK
3175 struct sd_info *sd_card = &chip->sd_card;
3177 struct ms_info *ms_card = &chip->ms_card;
3178 unsigned int lun = SCSI_LUN(srb);
3181 #ifdef SUPPORT_SD_LOCK
3182 if (sd_card->sd_erase_status) {
3183 /* Block all SCSI command except for
3184 * REQUEST_SENSE and rs_ppstatus
3186 if (!((srb->cmnd[0] == VENDOR_CMND) &&
3187 (srb->cmnd[1] == SCSI_APP_CMD) &&
3188 (srb->cmnd[2] == GET_DEV_STATUS)) &&
3189 (srb->cmnd[0] != REQUEST_SENSE)) {
3190 /* Logical Unit Not Ready Format in Progress */
3191 set_sense_data(chip, lun, CUR_ERR,
3192 0x02, 0, 0x04, 0x04, 0, 0);
3193 return TRANSPORT_FAILED;
3198 if ((get_lun_card(chip, lun) == MS_CARD) &&
3199 (ms_card->format_status == FORMAT_IN_PROGRESS)) {
3200 if ((srb->cmnd[0] != REQUEST_SENSE) &&
3201 (srb->cmnd[0] != INQUIRY)) {
3202 /* Logical Unit Not Ready Format in Progress */
3203 set_sense_data(chip, lun, CUR_ERR, 0x02, 0, 0x04, 0x04,
3204 0, (u16)(ms_card->progress));
3205 return TRANSPORT_FAILED;
3209 switch (srb->cmnd[0]) {
3214 result = read_write(srb, chip);
3215 #if !defined(LED_AUTO_BLINK) && !defined(REGULAR_BLINK)
3216 led_shine(srb, chip);
3220 case TEST_UNIT_READY:
3221 result = test_unit_ready(srb, chip);
3225 result = inquiry(srb, chip);
3229 result = read_capacity(srb, chip);
3233 result = start_stop_unit(srb, chip);
3236 case ALLOW_MEDIUM_REMOVAL:
3237 result = allow_medium_removal(srb, chip);
3241 result = request_sense(srb, chip);
3246 result = mode_sense(srb, chip);
3250 result = read_format_capacity(srb, chip);
3254 result = vendor_cmnd(srb, chip);
3258 result = ms_sp_cmnd(srb, chip);
3262 case SD_PASS_THRU_MODE:
3263 case SD_EXECUTE_NO_DATA:
3264 case SD_EXECUTE_READ:
3265 case SD_EXECUTE_WRITE:
3268 result = sd_extension_cmnd(srb, chip);
3272 #ifdef SUPPORT_MAGIC_GATE
3273 case CMD_MSPRO_MG_RKEY:
3274 result = mg_report_key(srb, chip);
3277 case CMD_MSPRO_MG_SKEY:
3278 result = mg_send_key(srb, chip);
3285 result = TRANSPORT_GOOD;
3289 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD);
3290 result = TRANSPORT_FAILED;