1 /* Driver for Realtek PCI-Express card reader 2 * 3 * Copyright(c) 2009-2013 Realtek Semiconductor Corp. All rights reserved. 4 * 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 8 * later version. 9 * 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. 14 * 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/>. 17 * 18 * Author: 19 * Wei WANG (wei_wang@realsil.com.cn) 20 * Micky Ching (micky_ching@realsil.com.cn) 21 */ 22 23 #include <linux/blkdev.h> 24 #include <linux/kthread.h> 25 #include <linux/sched.h> 26 #include <linux/vmalloc.h> 27 28 #include "rtsx.h" 29 #include "sd.h" 30 #include "ms.h" 31 #include "spi.h" 32 33 void scsi_show_command(struct rtsx_chip *chip) 34 { 35 struct scsi_cmnd *srb = chip->srb; 36 char *what = NULL; 37 bool unknown_cmd = false; 38 int len; 39 40 switch (srb->cmnd[0]) { 41 case TEST_UNIT_READY: 42 what = "TEST_UNIT_READY"; 43 break; 44 case REZERO_UNIT: 45 what = "REZERO_UNIT"; 46 break; 47 case REQUEST_SENSE: 48 what = "REQUEST_SENSE"; 49 break; 50 case FORMAT_UNIT: 51 what = "FORMAT_UNIT"; 52 break; 53 case READ_BLOCK_LIMITS: 54 what = "READ_BLOCK_LIMITS"; 55 break; 56 case REASSIGN_BLOCKS: 57 what = "REASSIGN_BLOCKS"; 58 break; 59 case READ_6: 60 what = "READ_6"; 61 break; 62 case WRITE_6: 63 what = "WRITE_6"; 64 break; 65 case SEEK_6: 66 what = "SEEK_6"; 67 break; 68 case READ_REVERSE: 69 what = "READ_REVERSE"; 70 break; 71 case WRITE_FILEMARKS: 72 what = "WRITE_FILEMARKS"; 73 break; 74 case SPACE: 75 what = "SPACE"; 76 break; 77 case INQUIRY: 78 what = "INQUIRY"; 79 break; 80 case RECOVER_BUFFERED_DATA: 81 what = "RECOVER_BUFFERED_DATA"; 82 break; 83 case MODE_SELECT: 84 what = "MODE_SELECT"; 85 break; 86 case RESERVE: 87 what = "RESERVE"; 88 break; 89 case RELEASE: 90 what = "RELEASE"; 91 break; 92 case COPY: 93 what = "COPY"; 94 break; 95 case ERASE: 96 what = "ERASE"; 97 break; 98 case MODE_SENSE: 99 what = "MODE_SENSE"; 100 break; 101 case START_STOP: 102 what = "START_STOP"; 103 break; 104 case RECEIVE_DIAGNOSTIC: 105 what = "RECEIVE_DIAGNOSTIC"; 106 break; 107 case SEND_DIAGNOSTIC: 108 what = "SEND_DIAGNOSTIC"; 109 break; 110 case ALLOW_MEDIUM_REMOVAL: 111 what = "ALLOW_MEDIUM_REMOVAL"; 112 break; 113 case SET_WINDOW: 114 what = "SET_WINDOW"; 115 break; 116 case READ_CAPACITY: 117 what = "READ_CAPACITY"; 118 break; 119 case READ_10: 120 what = "READ_10"; 121 break; 122 case WRITE_10: 123 what = "WRITE_10"; 124 break; 125 case SEEK_10: 126 what = "SEEK_10"; 127 break; 128 case WRITE_VERIFY: 129 what = "WRITE_VERIFY"; 130 break; 131 case VERIFY: 132 what = "VERIFY"; 133 break; 134 case SEARCH_HIGH: 135 what = "SEARCH_HIGH"; 136 break; 137 case SEARCH_EQUAL: 138 what = "SEARCH_EQUAL"; 139 break; 140 case SEARCH_LOW: 141 what = "SEARCH_LOW"; 142 break; 143 case SET_LIMITS: 144 what = "SET_LIMITS"; 145 break; 146 case READ_POSITION: 147 what = "READ_POSITION"; 148 break; 149 case SYNCHRONIZE_CACHE: 150 what = "SYNCHRONIZE_CACHE"; 151 break; 152 case LOCK_UNLOCK_CACHE: 153 what = "LOCK_UNLOCK_CACHE"; 154 break; 155 case READ_DEFECT_DATA: 156 what = "READ_DEFECT_DATA"; 157 break; 158 case MEDIUM_SCAN: 159 what = "MEDIUM_SCAN"; 160 break; 161 case COMPARE: 162 what = "COMPARE"; 163 break; 164 case COPY_VERIFY: 165 what = "COPY_VERIFY"; 166 break; 167 case WRITE_BUFFER: 168 what = "WRITE_BUFFER"; 169 break; 170 case READ_BUFFER: 171 what = "READ_BUFFER"; 172 break; 173 case UPDATE_BLOCK: 174 what = "UPDATE_BLOCK"; 175 break; 176 case READ_LONG: 177 what = "READ_LONG"; 178 break; 179 case WRITE_LONG: 180 what = "WRITE_LONG"; 181 break; 182 case CHANGE_DEFINITION: 183 what = "CHANGE_DEFINITION"; 184 break; 185 case WRITE_SAME: 186 what = "WRITE_SAME"; 187 break; 188 case GPCMD_READ_SUBCHANNEL: 189 what = "READ SUBCHANNEL"; 190 break; 191 case READ_TOC: 192 what = "READ_TOC"; 193 break; 194 case GPCMD_READ_HEADER: 195 what = "READ HEADER"; 196 break; 197 case GPCMD_PLAY_AUDIO_10: 198 what = "PLAY AUDIO (10)"; 199 break; 200 case GPCMD_PLAY_AUDIO_MSF: 201 what = "PLAY AUDIO MSF"; 202 break; 203 case GPCMD_GET_EVENT_STATUS_NOTIFICATION: 204 what = "GET EVENT/STATUS NOTIFICATION"; 205 break; 206 case GPCMD_PAUSE_RESUME: 207 what = "PAUSE/RESUME"; 208 break; 209 case LOG_SELECT: 210 what = "LOG_SELECT"; 211 break; 212 case LOG_SENSE: 213 what = "LOG_SENSE"; 214 break; 215 case GPCMD_STOP_PLAY_SCAN: 216 what = "STOP PLAY/SCAN"; 217 break; 218 case GPCMD_READ_DISC_INFO: 219 what = "READ DISC INFORMATION"; 220 break; 221 case GPCMD_READ_TRACK_RZONE_INFO: 222 what = "READ TRACK INFORMATION"; 223 break; 224 case GPCMD_RESERVE_RZONE_TRACK: 225 what = "RESERVE TRACK"; 226 break; 227 case GPCMD_SEND_OPC: 228 what = "SEND OPC"; 229 break; 230 case MODE_SELECT_10: 231 what = "MODE_SELECT_10"; 232 break; 233 case GPCMD_REPAIR_RZONE_TRACK: 234 what = "REPAIR TRACK"; 235 break; 236 case 0x59: 237 what = "READ MASTER CUE"; 238 break; 239 case MODE_SENSE_10: 240 what = "MODE_SENSE_10"; 241 break; 242 case GPCMD_CLOSE_TRACK: 243 what = "CLOSE TRACK/SESSION"; 244 break; 245 case 0x5C: 246 what = "READ BUFFER CAPACITY"; 247 break; 248 case 0x5D: 249 what = "SEND CUE SHEET"; 250 break; 251 case GPCMD_BLANK: 252 what = "BLANK"; 253 break; 254 case REPORT_LUNS: 255 what = "REPORT LUNS"; 256 break; 257 case MOVE_MEDIUM: 258 what = "MOVE_MEDIUM or PLAY AUDIO (12)"; 259 break; 260 case READ_12: 261 what = "READ_12"; 262 break; 263 case WRITE_12: 264 what = "WRITE_12"; 265 break; 266 case WRITE_VERIFY_12: 267 what = "WRITE_VERIFY_12"; 268 break; 269 case SEARCH_HIGH_12: 270 what = "SEARCH_HIGH_12"; 271 break; 272 case SEARCH_EQUAL_12: 273 what = "SEARCH_EQUAL_12"; 274 break; 275 case SEARCH_LOW_12: 276 what = "SEARCH_LOW_12"; 277 break; 278 case SEND_VOLUME_TAG: 279 what = "SEND_VOLUME_TAG"; 280 break; 281 case READ_ELEMENT_STATUS: 282 what = "READ_ELEMENT_STATUS"; 283 break; 284 case GPCMD_READ_CD_MSF: 285 what = "READ CD MSF"; 286 break; 287 case GPCMD_SCAN: 288 what = "SCAN"; 289 break; 290 case GPCMD_SET_SPEED: 291 what = "SET CD SPEED"; 292 break; 293 case GPCMD_MECHANISM_STATUS: 294 what = "MECHANISM STATUS"; 295 break; 296 case GPCMD_READ_CD: 297 what = "READ CD"; 298 break; 299 case 0xE1: 300 what = "WRITE CONTINUE"; 301 break; 302 case WRITE_LONG_2: 303 what = "WRITE_LONG_2"; 304 break; 305 case VENDOR_CMND: 306 what = "Realtek's vendor command"; 307 break; 308 default: 309 what = "(unknown command)"; 310 unknown_cmd = true; 311 break; 312 } 313 314 if (srb->cmnd[0] != TEST_UNIT_READY) 315 dev_dbg(rtsx_dev(chip), "Command %s (%d bytes)\n", 316 what, srb->cmd_len); 317 318 if (unknown_cmd) { 319 len = min_t(unsigned short, srb->cmd_len, 16); 320 dev_dbg(rtsx_dev(chip), "%*ph\n", len, srb->cmnd); 321 } 322 } 323 324 void set_sense_type(struct rtsx_chip *chip, unsigned int lun, int sense_type) 325 { 326 switch (sense_type) { 327 case SENSE_TYPE_MEDIA_CHANGE: 328 set_sense_data(chip, lun, CUR_ERR, 0x06, 0, 0x28, 0, 0, 0); 329 break; 330 331 case SENSE_TYPE_MEDIA_NOT_PRESENT: 332 set_sense_data(chip, lun, CUR_ERR, 0x02, 0, 0x3A, 0, 0, 0); 333 break; 334 335 case SENSE_TYPE_MEDIA_LBA_OVER_RANGE: 336 set_sense_data(chip, lun, CUR_ERR, 0x05, 0, 0x21, 0, 0, 0); 337 break; 338 339 case SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT: 340 set_sense_data(chip, lun, CUR_ERR, 0x05, 0, 0x25, 0, 0, 0); 341 break; 342 343 case SENSE_TYPE_MEDIA_WRITE_PROTECT: 344 set_sense_data(chip, lun, CUR_ERR, 0x07, 0, 0x27, 0, 0, 0); 345 break; 346 347 case SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR: 348 set_sense_data(chip, lun, CUR_ERR, 0x03, 0, 0x11, 0, 0, 0); 349 break; 350 351 case SENSE_TYPE_MEDIA_WRITE_ERR: 352 set_sense_data(chip, lun, CUR_ERR, 0x03, 0, 0x0C, 0x02, 0, 0); 353 break; 354 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); 358 break; 359 360 case SENSE_TYPE_FORMAT_IN_PROGRESS: 361 set_sense_data(chip, lun, CUR_ERR, 0x02, 0, 0x04, 0x04, 0, 0); 362 break; 363 364 case SENSE_TYPE_FORMAT_CMD_FAILED: 365 set_sense_data(chip, lun, CUR_ERR, 0x03, 0, 0x31, 0x01, 0, 0); 366 break; 367 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); 371 break; 372 373 case SENSE_TYPE_MG_KEY_FAIL_NOT_AUTHEN: 374 set_sense_data(chip, lun, CUR_ERR, 0x05, 0, 0x6F, 0x00, 0, 0); 375 break; 376 377 case SENSE_TYPE_MG_INCOMPATIBLE_MEDIUM: 378 set_sense_data(chip, lun, CUR_ERR, 0x02, 0, 0x30, 0x00, 0, 0); 379 break; 380 381 case SENSE_TYPE_MG_WRITE_ERR: 382 set_sense_data(chip, lun, CUR_ERR, 0x03, 0, 0x0C, 0x00, 0, 0); 383 break; 384 #endif 385 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); 389 break; 390 #endif 391 392 case SENSE_TYPE_NO_SENSE: 393 default: 394 set_sense_data(chip, lun, CUR_ERR, 0, 0, 0, 0, 0, 0); 395 break; 396 } 397 } 398 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, 401 u16 sns_key_info1) 402 { 403 struct sense_data_t *sense = &chip->sense_buffer[lun]; 404 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; 411 412 sense->ad_sense_len = sizeof(struct sense_data_t) - 8; 413 sense->asc = asc; 414 sense->ascq = ascq; 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; 419 } 420 } 421 422 static int test_unit_ready(struct scsi_cmnd *srb, struct rtsx_chip *chip) 423 { 424 unsigned int lun = SCSI_LUN(srb); 425 426 if (!check_card_ready(chip, lun)) { 427 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT); 428 return TRANSPORT_FAILED; 429 } 430 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; 435 } 436 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; 440 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; 449 } 450 } 451 #endif 452 453 return TRANSPORT_GOOD; 454 } 455 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] */ 460 #else 461 0x20, 0x20, 0x20, /* Byte[47:49] */ 462 #endif 463 464 #ifdef SUPPORT_MAGIC_GATE 465 0x0B, /* Byte[50]: MG, MS, MSPro, MSXC */ 466 #else 467 0x09, /* Byte[50]: MS, MSPro, MSXC */ 468 #endif 469 0x00, /* Byte[51]: Category Specific Commands */ 470 0x00, /* Byte[52]: Access Control and feature */ 471 0x20, 0x20, 0x20, /* Byte[53:55] */ 472 }; 473 474 static int inquiry(struct scsi_cmnd *srb, struct rtsx_chip *chip) 475 { 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; 483 unsigned char *buf; 484 u8 card = get_lun_card(chip, lun); 485 bool pro_formatter_flag = false; 486 unsigned char inquiry_buf[] = { 487 QULIFIRE | DRCT_ACCESS_DEV, 488 RMB_DISC | 0x0D, 489 0x00, 490 0x01, 491 0x1f, 492 0x02, 493 0, 494 REL_ADR | WBUS_32 | WBUS_16 | SYNC | LINKED | CMD_QUE | SFT_RE, 495 }; 496 497 if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) { 498 if (chip->lun2card[lun] == SD_CARD) 499 inquiry_string = inquiry_sd; 500 else 501 inquiry_string = inquiry_ms; 502 503 } else if (CHECK_LUN_MODE(chip, SD_MS_1LUN)) { 504 inquiry_string = inquiry_sdms; 505 } else { 506 inquiry_string = inquiry_default; 507 } 508 509 buf = vmalloc(scsi_bufflen(srb)); 510 if (!buf) { 511 rtsx_trace(chip); 512 return TRANSPORT_ERROR; 513 } 514 515 #ifdef SUPPORT_MAGIC_GATE 516 if ((chip->mspro_formatter_enable) && 517 (chip->lun2card[lun] & MS_CARD)) 518 #else 519 if (chip->mspro_formatter_enable) 520 #endif 521 if (!card || (card == MS_CARD)) 522 pro_formatter_flag = true; 523 524 if (pro_formatter_flag) { 525 if (scsi_bufflen(srb) < 56) 526 sendbytes = (unsigned char)(scsi_bufflen(srb)); 527 else 528 sendbytes = 56; 529 530 } else { 531 if (scsi_bufflen(srb) < 36) 532 sendbytes = (unsigned char)(scsi_bufflen(srb)); 533 else 534 sendbytes = 36; 535 } 536 537 if (sendbytes > 8) { 538 memcpy(buf, inquiry_buf, 8); 539 strncpy(buf + 8, inquiry_string, sendbytes - 8); 540 if (pro_formatter_flag) { 541 /* Additional Length */ 542 buf[4] = 0x33; 543 } 544 } else { 545 memcpy(buf, inquiry_buf, sendbytes); 546 } 547 548 if (pro_formatter_flag) { 549 if (sendbytes > 36) 550 memcpy(buf + 36, formatter_inquiry_str, sendbytes - 36); 551 } 552 553 scsi_set_resid(srb, 0); 554 555 rtsx_stor_set_xfer_buf(buf, scsi_bufflen(srb), srb); 556 vfree(buf); 557 558 return TRANSPORT_GOOD; 559 } 560 561 static int start_stop_unit(struct scsi_cmnd *srb, struct rtsx_chip *chip) 562 { 563 unsigned int lun = SCSI_LUN(srb); 564 565 scsi_set_resid(srb, scsi_bufflen(srb)); 566 567 if (srb->cmnd[1] == 1) 568 return TRANSPORT_GOOD; 569 570 switch (srb->cmnd[0x4]) { 571 case STOP_MEDIUM: 572 /* Media disabled */ 573 return TRANSPORT_GOOD; 574 575 case UNLOAD_MEDIUM: 576 /* Media shall be unload */ 577 if (check_card_ready(chip, lun)) 578 eject_card(chip, lun); 579 return TRANSPORT_GOOD; 580 581 case MAKE_MEDIUM_READY: 582 case LOAD_MEDIUM: 583 if (check_card_ready(chip, lun)) 584 return TRANSPORT_GOOD; 585 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT); 586 rtsx_trace(chip); 587 return TRANSPORT_FAILED; 588 589 break; 590 } 591 592 rtsx_trace(chip); 593 return TRANSPORT_ERROR; 594 } 595 596 static int allow_medium_removal(struct scsi_cmnd *srb, struct rtsx_chip *chip) 597 { 598 int prevent; 599 600 prevent = srb->cmnd[4] & 0x1; 601 602 scsi_set_resid(srb, 0); 603 604 if (prevent) { 605 set_sense_type(chip, SCSI_LUN(srb), 606 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 607 rtsx_trace(chip); 608 return TRANSPORT_FAILED; 609 } 610 611 return TRANSPORT_GOOD; 612 } 613 614 static int request_sense(struct scsi_cmnd *srb, struct rtsx_chip *chip) 615 { 616 struct sense_data_t *sense; 617 unsigned int lun = SCSI_LUN(srb); 618 struct ms_info *ms_card = &chip->ms_card; 619 unsigned char *tmp, *buf; 620 621 sense = &chip->sense_buffer[lun]; 622 623 if ((get_lun_card(chip, lun) == MS_CARD) && 624 ms_card->pro_under_formatting) { 625 if (ms_card->format_status == FORMAT_SUCCESS) { 626 set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE); 627 ms_card->pro_under_formatting = 0; 628 ms_card->progress = 0; 629 } else if (ms_card->format_status == FORMAT_IN_PROGRESS) { 630 /* Logical Unit Not Ready Format in Progress */ 631 set_sense_data(chip, lun, CUR_ERR, 0x02, 0, 0x04, 0x04, 632 0, (u16)(ms_card->progress)); 633 } else { 634 /* Format Command Failed */ 635 set_sense_type(chip, lun, SENSE_TYPE_FORMAT_CMD_FAILED); 636 ms_card->pro_under_formatting = 0; 637 ms_card->progress = 0; 638 } 639 640 rtsx_set_stat(chip, RTSX_STAT_RUN); 641 } 642 643 buf = vmalloc(scsi_bufflen(srb)); 644 if (!buf) { 645 rtsx_trace(chip); 646 return TRANSPORT_ERROR; 647 } 648 649 tmp = (unsigned char *)sense; 650 memcpy(buf, tmp, scsi_bufflen(srb)); 651 652 rtsx_stor_set_xfer_buf(buf, scsi_bufflen(srb), srb); 653 vfree(buf); 654 655 scsi_set_resid(srb, 0); 656 /* Reset Sense Data */ 657 set_sense_type(chip, lun, SENSE_TYPE_NO_SENSE); 658 return TRANSPORT_GOOD; 659 } 660 661 static void ms_mode_sense(struct rtsx_chip *chip, u8 cmd, 662 int lun, u8 *buf, int buf_len) 663 { 664 struct ms_info *ms_card = &chip->ms_card; 665 int sys_info_offset; 666 int data_size = buf_len; 667 bool support_format = false; 668 int i = 0; 669 670 if (cmd == MODE_SENSE) { 671 sys_info_offset = 8; 672 if (data_size > 0x68) 673 data_size = 0x68; 674 675 buf[i++] = 0x67; /* Mode Data Length */ 676 } else { 677 sys_info_offset = 12; 678 if (data_size > 0x6C) 679 data_size = 0x6C; 680 681 buf[i++] = 0x00; /* Mode Data Length (MSB) */ 682 buf[i++] = 0x6A; /* Mode Data Length (LSB) */ 683 } 684 685 /* Medium Type Code */ 686 if (check_card_ready(chip, lun)) { 687 if (CHK_MSXC(ms_card)) { 688 support_format = true; 689 buf[i++] = 0x40; 690 } else if (CHK_MSPRO(ms_card)) { 691 support_format = true; 692 buf[i++] = 0x20; 693 } else { 694 buf[i++] = 0x10; 695 } 696 697 /* WP */ 698 if (check_card_wp(chip, lun)) 699 buf[i++] = 0x80; 700 else 701 buf[i++] = 0x00; 702 703 } else { 704 buf[i++] = 0x00; /* MediaType */ 705 buf[i++] = 0x00; /* WP */ 706 } 707 708 buf[i++] = 0x00; /* Reserved */ 709 710 if (cmd == MODE_SENSE_10) { 711 buf[i++] = 0x00; /* Reserved */ 712 buf[i++] = 0x00; /* Block descriptor length(MSB) */ 713 buf[i++] = 0x00; /* Block descriptor length(LSB) */ 714 715 /* The Following Data is the content of "Page 0x20" */ 716 if (data_size >= 9) 717 buf[i++] = 0x20; /* Page Code */ 718 if (data_size >= 10) 719 buf[i++] = 0x62; /* Page Length */ 720 if (data_size >= 11) 721 buf[i++] = 0x00; /* No Access Control */ 722 if (data_size >= 12) { 723 if (support_format) 724 buf[i++] = 0xC0; /* SF, SGM */ 725 else 726 buf[i++] = 0x00; 727 } 728 } else { 729 /* The Following Data is the content of "Page 0x20" */ 730 if (data_size >= 5) 731 buf[i++] = 0x20; /* Page Code */ 732 if (data_size >= 6) 733 buf[i++] = 0x62; /* Page Length */ 734 if (data_size >= 7) 735 buf[i++] = 0x00; /* No Access Control */ 736 if (data_size >= 8) { 737 if (support_format) 738 buf[i++] = 0xC0; /* SF, SGM */ 739 else 740 buf[i++] = 0x00; 741 } 742 } 743 744 if (data_size > sys_info_offset) { 745 /* 96 Bytes Attribute Data */ 746 int len = data_size - sys_info_offset; 747 748 len = (len < 96) ? len : 96; 749 750 memcpy(buf + sys_info_offset, ms_card->raw_sys_info, len); 751 } 752 } 753 754 static int mode_sense(struct scsi_cmnd *srb, struct rtsx_chip *chip) 755 { 756 unsigned int lun = SCSI_LUN(srb); 757 unsigned int data_size; 758 int status; 759 bool pro_formatter_flag; 760 unsigned char page_code, *buf; 761 u8 card = get_lun_card(chip, lun); 762 763 #ifndef SUPPORT_MAGIC_GATE 764 if (!check_card_ready(chip, lun)) { 765 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT); 766 scsi_set_resid(srb, scsi_bufflen(srb)); 767 rtsx_trace(chip); 768 return TRANSPORT_FAILED; 769 } 770 #endif 771 772 pro_formatter_flag = false; 773 data_size = 8; 774 #ifdef SUPPORT_MAGIC_GATE 775 if ((chip->lun2card[lun] & MS_CARD)) { 776 if (!card || (card == MS_CARD)) { 777 data_size = 108; 778 if (chip->mspro_formatter_enable) 779 pro_formatter_flag = true; 780 } 781 } 782 #else 783 if (card == MS_CARD) { 784 if (chip->mspro_formatter_enable) { 785 pro_formatter_flag = true; 786 data_size = 108; 787 } 788 } 789 #endif 790 791 buf = kmalloc(data_size, GFP_KERNEL); 792 if (!buf) { 793 rtsx_trace(chip); 794 return TRANSPORT_ERROR; 795 } 796 797 page_code = srb->cmnd[2] & 0x3f; 798 799 if ((page_code == 0x3F) || (page_code == 0x1C) || 800 (page_code == 0x00) || 801 (pro_formatter_flag && (page_code == 0x20))) { 802 if (srb->cmnd[0] == MODE_SENSE) { 803 if ((page_code == 0x3F) || (page_code == 0x20)) { 804 ms_mode_sense(chip, srb->cmnd[0], 805 lun, buf, data_size); 806 } else { 807 data_size = 4; 808 buf[0] = 0x03; 809 buf[1] = 0x00; 810 if (check_card_wp(chip, lun)) 811 buf[2] = 0x80; 812 else 813 buf[2] = 0x00; 814 815 buf[3] = 0x00; 816 } 817 } else { 818 if ((page_code == 0x3F) || (page_code == 0x20)) { 819 ms_mode_sense(chip, srb->cmnd[0], 820 lun, buf, data_size); 821 } else { 822 data_size = 8; 823 buf[0] = 0x00; 824 buf[1] = 0x06; 825 buf[2] = 0x00; 826 if (check_card_wp(chip, lun)) 827 buf[3] = 0x80; 828 else 829 buf[3] = 0x00; 830 buf[4] = 0x00; 831 buf[5] = 0x00; 832 buf[6] = 0x00; 833 buf[7] = 0x00; 834 } 835 } 836 status = TRANSPORT_GOOD; 837 } else { 838 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 839 scsi_set_resid(srb, scsi_bufflen(srb)); 840 status = TRANSPORT_FAILED; 841 } 842 843 if (status == TRANSPORT_GOOD) { 844 unsigned int len = min_t(unsigned int, scsi_bufflen(srb), 845 data_size); 846 rtsx_stor_set_xfer_buf(buf, len, srb); 847 scsi_set_resid(srb, scsi_bufflen(srb) - len); 848 } 849 kfree(buf); 850 851 return status; 852 } 853 854 static int read_write(struct scsi_cmnd *srb, struct rtsx_chip *chip) 855 { 856 #ifdef SUPPORT_SD_LOCK 857 struct sd_info *sd_card = &chip->sd_card; 858 #endif 859 unsigned int lun = SCSI_LUN(srb); 860 int retval; 861 u32 start_sec; 862 u16 sec_cnt; 863 864 rtsx_disable_aspm(chip); 865 866 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) { 867 rtsx_exit_ss(chip); 868 wait_timeout(100); 869 } 870 rtsx_set_stat(chip, RTSX_STAT_RUN); 871 872 if (!check_card_ready(chip, lun) || (get_card_size(chip, lun) == 0)) { 873 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT); 874 rtsx_trace(chip); 875 return TRANSPORT_FAILED; 876 } 877 878 if (!(CHK_BIT(chip->lun_mc, lun))) { 879 SET_BIT(chip->lun_mc, lun); 880 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE); 881 return TRANSPORT_FAILED; 882 } 883 884 #ifdef SUPPORT_SD_LOCK 885 if (sd_card->sd_erase_status) { 886 /* Accessing to any card is forbidden 887 * until the erase procedure of SD is completed 888 */ 889 dev_dbg(rtsx_dev(chip), "SD card being erased!\n"); 890 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_READ_FORBIDDEN); 891 rtsx_trace(chip); 892 return TRANSPORT_FAILED; 893 } 894 895 if (get_lun_card(chip, lun) == SD_CARD) { 896 if (sd_card->sd_lock_status & SD_LOCKED) { 897 dev_dbg(rtsx_dev(chip), "SD card locked!\n"); 898 set_sense_type(chip, lun, 899 SENSE_TYPE_MEDIA_READ_FORBIDDEN); 900 rtsx_trace(chip); 901 return TRANSPORT_FAILED; 902 } 903 } 904 #endif 905 906 if ((srb->cmnd[0] == READ_10) || (srb->cmnd[0] == WRITE_10)) { 907 start_sec = ((u32)srb->cmnd[2] << 24) | 908 ((u32)srb->cmnd[3] << 16) | 909 ((u32)srb->cmnd[4] << 8) | ((u32)srb->cmnd[5]); 910 sec_cnt = ((u16)(srb->cmnd[7]) << 8) | srb->cmnd[8]; 911 } else if ((srb->cmnd[0] == READ_6) || (srb->cmnd[0] == WRITE_6)) { 912 start_sec = ((u32)(srb->cmnd[1] & 0x1F) << 16) | 913 ((u32)srb->cmnd[2] << 8) | ((u32)srb->cmnd[3]); 914 sec_cnt = srb->cmnd[4]; 915 if (sec_cnt == 0) 916 sec_cnt = 256; 917 } else if ((srb->cmnd[0] == VENDOR_CMND) && 918 (srb->cmnd[1] == SCSI_APP_CMD) && 919 ((srb->cmnd[2] == PP_READ10) || (srb->cmnd[2] == PP_WRITE10))) { 920 start_sec = ((u32)srb->cmnd[4] << 24) | 921 ((u32)srb->cmnd[5] << 16) | 922 ((u32)srb->cmnd[6] << 8) | ((u32)srb->cmnd[7]); 923 sec_cnt = ((u16)(srb->cmnd[9]) << 8) | srb->cmnd[10]; 924 } else { 925 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 926 rtsx_trace(chip); 927 return TRANSPORT_FAILED; 928 } 929 930 /* In some test, we will receive a start_sec like 0xFFFFFFFF. 931 * In this situation, start_sec + sec_cnt will overflow, so we 932 * need to judge start_sec at first 933 */ 934 if ((start_sec > get_card_size(chip, lun)) || 935 ((start_sec + sec_cnt) > get_card_size(chip, lun))) { 936 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LBA_OVER_RANGE); 937 rtsx_trace(chip); 938 return TRANSPORT_FAILED; 939 } 940 941 if (sec_cnt == 0) { 942 scsi_set_resid(srb, 0); 943 return TRANSPORT_GOOD; 944 } 945 946 if (chip->rw_fail_cnt[lun] == 3) { 947 dev_dbg(rtsx_dev(chip), "read/write fail three times in succession\n"); 948 if (srb->sc_data_direction == DMA_FROM_DEVICE) 949 set_sense_type(chip, lun, 950 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR); 951 else 952 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_ERR); 953 954 rtsx_trace(chip); 955 return TRANSPORT_FAILED; 956 } 957 958 if (srb->sc_data_direction == DMA_TO_DEVICE) { 959 if (check_card_wp(chip, lun)) { 960 dev_dbg(rtsx_dev(chip), "Write protected card!\n"); 961 set_sense_type(chip, lun, 962 SENSE_TYPE_MEDIA_WRITE_PROTECT); 963 rtsx_trace(chip); 964 return TRANSPORT_FAILED; 965 } 966 } 967 968 retval = card_rw(srb, chip, start_sec, sec_cnt); 969 if (retval != STATUS_SUCCESS) { 970 if (chip->need_release & chip->lun2card[lun]) { 971 chip->rw_fail_cnt[lun] = 0; 972 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT); 973 } else { 974 chip->rw_fail_cnt[lun]++; 975 if (srb->sc_data_direction == DMA_FROM_DEVICE) 976 set_sense_type 977 (chip, lun, 978 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR); 979 else 980 set_sense_type(chip, lun, 981 SENSE_TYPE_MEDIA_WRITE_ERR); 982 } 983 retval = TRANSPORT_FAILED; 984 rtsx_trace(chip); 985 goto exit; 986 } else { 987 chip->rw_fail_cnt[lun] = 0; 988 retval = TRANSPORT_GOOD; 989 } 990 991 scsi_set_resid(srb, 0); 992 993 exit: 994 return retval; 995 } 996 997 static int read_format_capacity(struct scsi_cmnd *srb, struct rtsx_chip *chip) 998 { 999 unsigned char *buf; 1000 unsigned int lun = SCSI_LUN(srb); 1001 unsigned int buf_len; 1002 u8 card = get_lun_card(chip, lun); 1003 u32 card_size; 1004 int desc_cnt; 1005 int i = 0; 1006 1007 if (!check_card_ready(chip, lun)) { 1008 if (!chip->mspro_formatter_enable) { 1009 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT); 1010 rtsx_trace(chip); 1011 return TRANSPORT_FAILED; 1012 } 1013 } 1014 1015 buf_len = (scsi_bufflen(srb) > 12) ? 0x14 : 12; 1016 1017 buf = kmalloc(buf_len, GFP_KERNEL); 1018 if (!buf) { 1019 rtsx_trace(chip); 1020 return TRANSPORT_ERROR; 1021 } 1022 1023 buf[i++] = 0; 1024 buf[i++] = 0; 1025 buf[i++] = 0; 1026 1027 /* Capacity List Length */ 1028 if ((buf_len > 12) && chip->mspro_formatter_enable && 1029 (chip->lun2card[lun] & MS_CARD) && 1030 (!card || (card == MS_CARD))) { 1031 buf[i++] = 0x10; 1032 desc_cnt = 2; 1033 } else { 1034 buf[i++] = 0x08; 1035 desc_cnt = 1; 1036 } 1037 1038 while (desc_cnt) { 1039 if (check_card_ready(chip, lun)) { 1040 card_size = get_card_size(chip, lun); 1041 buf[i++] = (unsigned char)(card_size >> 24); 1042 buf[i++] = (unsigned char)(card_size >> 16); 1043 buf[i++] = (unsigned char)(card_size >> 8); 1044 buf[i++] = (unsigned char)card_size; 1045 1046 if (desc_cnt == 2) 1047 buf[i++] = 2; 1048 else 1049 buf[i++] = 0; 1050 } else { 1051 buf[i++] = 0xFF; 1052 buf[i++] = 0xFF; 1053 buf[i++] = 0xFF; 1054 buf[i++] = 0xFF; 1055 1056 if (desc_cnt == 2) 1057 buf[i++] = 3; 1058 else 1059 buf[i++] = 0; 1060 } 1061 1062 buf[i++] = 0x00; 1063 buf[i++] = 0x02; 1064 buf[i++] = 0x00; 1065 1066 desc_cnt--; 1067 } 1068 1069 buf_len = min_t(unsigned int, scsi_bufflen(srb), buf_len); 1070 rtsx_stor_set_xfer_buf(buf, buf_len, srb); 1071 kfree(buf); 1072 1073 scsi_set_resid(srb, scsi_bufflen(srb) - buf_len); 1074 1075 return TRANSPORT_GOOD; 1076 } 1077 1078 static int read_capacity(struct scsi_cmnd *srb, struct rtsx_chip *chip) 1079 { 1080 unsigned char *buf; 1081 unsigned int lun = SCSI_LUN(srb); 1082 u32 card_size; 1083 1084 if (!check_card_ready(chip, lun)) { 1085 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT); 1086 rtsx_trace(chip); 1087 return TRANSPORT_FAILED; 1088 } 1089 1090 if (!(CHK_BIT(chip->lun_mc, lun))) { 1091 SET_BIT(chip->lun_mc, lun); 1092 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_CHANGE); 1093 return TRANSPORT_FAILED; 1094 } 1095 1096 buf = kmalloc(8, GFP_KERNEL); 1097 if (!buf) { 1098 rtsx_trace(chip); 1099 return TRANSPORT_ERROR; 1100 } 1101 1102 card_size = get_card_size(chip, lun); 1103 buf[0] = (unsigned char)((card_size - 1) >> 24); 1104 buf[1] = (unsigned char)((card_size - 1) >> 16); 1105 buf[2] = (unsigned char)((card_size - 1) >> 8); 1106 buf[3] = (unsigned char)(card_size - 1); 1107 1108 buf[4] = 0x00; 1109 buf[5] = 0x00; 1110 buf[6] = 0x02; 1111 buf[7] = 0x00; 1112 1113 rtsx_stor_set_xfer_buf(buf, scsi_bufflen(srb), srb); 1114 kfree(buf); 1115 1116 scsi_set_resid(srb, 0); 1117 1118 return TRANSPORT_GOOD; 1119 } 1120 1121 static int read_eeprom(struct scsi_cmnd *srb, struct rtsx_chip *chip) 1122 { 1123 unsigned short len, i; 1124 int retval; 1125 u8 *buf; 1126 1127 rtsx_disable_aspm(chip); 1128 1129 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) { 1130 rtsx_exit_ss(chip); 1131 wait_timeout(100); 1132 } 1133 rtsx_set_stat(chip, RTSX_STAT_RUN); 1134 1135 len = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5]; 1136 1137 buf = vmalloc(len); 1138 if (!buf) { 1139 rtsx_trace(chip); 1140 return TRANSPORT_ERROR; 1141 } 1142 1143 retval = rtsx_force_power_on(chip, SSC_PDCTL); 1144 if (retval != STATUS_SUCCESS) { 1145 vfree(buf); 1146 set_sense_type(chip, SCSI_LUN(srb), 1147 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR); 1148 rtsx_trace(chip); 1149 return TRANSPORT_FAILED; 1150 } 1151 1152 for (i = 0; i < len; i++) { 1153 retval = spi_read_eeprom(chip, i, buf + i); 1154 if (retval != STATUS_SUCCESS) { 1155 vfree(buf); 1156 set_sense_type(chip, SCSI_LUN(srb), 1157 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR); 1158 rtsx_trace(chip); 1159 return TRANSPORT_FAILED; 1160 } 1161 } 1162 1163 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb), len); 1164 rtsx_stor_set_xfer_buf(buf, len, srb); 1165 scsi_set_resid(srb, scsi_bufflen(srb) - len); 1166 1167 vfree(buf); 1168 1169 return TRANSPORT_GOOD; 1170 } 1171 1172 static int write_eeprom(struct scsi_cmnd *srb, struct rtsx_chip *chip) 1173 { 1174 unsigned short len, i; 1175 int retval; 1176 u8 *buf; 1177 1178 rtsx_disable_aspm(chip); 1179 1180 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) { 1181 rtsx_exit_ss(chip); 1182 wait_timeout(100); 1183 } 1184 rtsx_set_stat(chip, RTSX_STAT_RUN); 1185 1186 len = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5]; 1187 1188 retval = rtsx_force_power_on(chip, SSC_PDCTL); 1189 if (retval != STATUS_SUCCESS) { 1190 set_sense_type(chip, SCSI_LUN(srb), SENSE_TYPE_MEDIA_WRITE_ERR); 1191 rtsx_trace(chip); 1192 return TRANSPORT_FAILED; 1193 } 1194 1195 if (len == 511) { 1196 retval = spi_erase_eeprom_chip(chip); 1197 if (retval != STATUS_SUCCESS) { 1198 set_sense_type(chip, SCSI_LUN(srb), 1199 SENSE_TYPE_MEDIA_WRITE_ERR); 1200 rtsx_trace(chip); 1201 return TRANSPORT_FAILED; 1202 } 1203 } else { 1204 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb), 1205 len); 1206 buf = vmalloc(len); 1207 if (!buf) { 1208 rtsx_trace(chip); 1209 return TRANSPORT_ERROR; 1210 } 1211 1212 rtsx_stor_get_xfer_buf(buf, len, srb); 1213 scsi_set_resid(srb, scsi_bufflen(srb) - len); 1214 1215 for (i = 0; i < len; i++) { 1216 retval = spi_write_eeprom(chip, i, buf[i]); 1217 if (retval != STATUS_SUCCESS) { 1218 vfree(buf); 1219 set_sense_type(chip, SCSI_LUN(srb), 1220 SENSE_TYPE_MEDIA_WRITE_ERR); 1221 rtsx_trace(chip); 1222 return TRANSPORT_FAILED; 1223 } 1224 } 1225 1226 vfree(buf); 1227 } 1228 1229 return TRANSPORT_GOOD; 1230 } 1231 1232 static int read_mem(struct scsi_cmnd *srb, struct rtsx_chip *chip) 1233 { 1234 unsigned short addr, len, i; 1235 int retval; 1236 u8 *buf; 1237 1238 rtsx_disable_aspm(chip); 1239 1240 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) { 1241 rtsx_exit_ss(chip); 1242 wait_timeout(100); 1243 } 1244 rtsx_set_stat(chip, RTSX_STAT_RUN); 1245 1246 addr = ((u16)srb->cmnd[2] << 8) | srb->cmnd[3]; 1247 len = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5]; 1248 1249 if (addr < 0xFC00) { 1250 set_sense_type(chip, SCSI_LUN(srb), 1251 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 1252 rtsx_trace(chip); 1253 return TRANSPORT_FAILED; 1254 } 1255 1256 buf = vmalloc(len); 1257 if (!buf) { 1258 rtsx_trace(chip); 1259 return TRANSPORT_ERROR; 1260 } 1261 1262 retval = rtsx_force_power_on(chip, SSC_PDCTL); 1263 if (retval != STATUS_SUCCESS) { 1264 vfree(buf); 1265 set_sense_type(chip, SCSI_LUN(srb), SENSE_TYPE_MEDIA_WRITE_ERR); 1266 rtsx_trace(chip); 1267 return TRANSPORT_FAILED; 1268 } 1269 1270 for (i = 0; i < len; i++) { 1271 retval = rtsx_read_register(chip, addr + i, buf + i); 1272 if (retval != STATUS_SUCCESS) { 1273 vfree(buf); 1274 set_sense_type(chip, SCSI_LUN(srb), 1275 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR); 1276 rtsx_trace(chip); 1277 return TRANSPORT_FAILED; 1278 } 1279 } 1280 1281 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb), len); 1282 rtsx_stor_set_xfer_buf(buf, len, srb); 1283 scsi_set_resid(srb, scsi_bufflen(srb) - len); 1284 1285 vfree(buf); 1286 1287 return TRANSPORT_GOOD; 1288 } 1289 1290 static int write_mem(struct scsi_cmnd *srb, struct rtsx_chip *chip) 1291 { 1292 unsigned short addr, len, i; 1293 int retval; 1294 u8 *buf; 1295 1296 rtsx_disable_aspm(chip); 1297 1298 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) { 1299 rtsx_exit_ss(chip); 1300 wait_timeout(100); 1301 } 1302 rtsx_set_stat(chip, RTSX_STAT_RUN); 1303 1304 addr = ((u16)srb->cmnd[2] << 8) | srb->cmnd[3]; 1305 len = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5]; 1306 1307 if (addr < 0xFC00) { 1308 set_sense_type(chip, SCSI_LUN(srb), 1309 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 1310 rtsx_trace(chip); 1311 return TRANSPORT_FAILED; 1312 } 1313 1314 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb), len); 1315 buf = vmalloc(len); 1316 if (!buf) { 1317 rtsx_trace(chip); 1318 return TRANSPORT_ERROR; 1319 } 1320 1321 rtsx_stor_get_xfer_buf(buf, len, srb); 1322 scsi_set_resid(srb, scsi_bufflen(srb) - len); 1323 1324 retval = rtsx_force_power_on(chip, SSC_PDCTL); 1325 if (retval != STATUS_SUCCESS) { 1326 vfree(buf); 1327 set_sense_type(chip, SCSI_LUN(srb), SENSE_TYPE_MEDIA_WRITE_ERR); 1328 rtsx_trace(chip); 1329 return TRANSPORT_FAILED; 1330 } 1331 1332 for (i = 0; i < len; i++) { 1333 retval = rtsx_write_register(chip, addr + i, 0xFF, buf[i]); 1334 if (retval != STATUS_SUCCESS) { 1335 vfree(buf); 1336 set_sense_type(chip, SCSI_LUN(srb), 1337 SENSE_TYPE_MEDIA_WRITE_ERR); 1338 rtsx_trace(chip); 1339 return TRANSPORT_FAILED; 1340 } 1341 } 1342 1343 vfree(buf); 1344 1345 return TRANSPORT_GOOD; 1346 } 1347 1348 static int get_sd_csd(struct scsi_cmnd *srb, struct rtsx_chip *chip) 1349 { 1350 struct sd_info *sd_card = &chip->sd_card; 1351 unsigned int lun = SCSI_LUN(srb); 1352 1353 if (!check_card_ready(chip, lun)) { 1354 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT); 1355 rtsx_trace(chip); 1356 return TRANSPORT_FAILED; 1357 } 1358 1359 if (get_lun_card(chip, lun) != SD_CARD) { 1360 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR); 1361 rtsx_trace(chip); 1362 return TRANSPORT_FAILED; 1363 } 1364 1365 scsi_set_resid(srb, 0); 1366 rtsx_stor_set_xfer_buf(sd_card->raw_csd, scsi_bufflen(srb), srb); 1367 1368 return TRANSPORT_GOOD; 1369 } 1370 1371 static int toggle_gpio_cmd(struct scsi_cmnd *srb, struct rtsx_chip *chip) 1372 { 1373 u8 gpio = srb->cmnd[2]; 1374 1375 rtsx_disable_aspm(chip); 1376 1377 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) { 1378 rtsx_exit_ss(chip); 1379 wait_timeout(100); 1380 } 1381 rtsx_set_stat(chip, RTSX_STAT_RUN); 1382 1383 if (gpio > 3) 1384 gpio = 1; 1385 toggle_gpio(chip, gpio); 1386 1387 return TRANSPORT_GOOD; 1388 } 1389 1390 #ifdef _MSG_TRACE 1391 static int trace_msg_cmd(struct scsi_cmnd *srb, struct rtsx_chip *chip) 1392 { 1393 unsigned char *ptr, *buf = NULL; 1394 int i, msg_cnt; 1395 u8 clear; 1396 unsigned int buf_len; 1397 1398 buf_len = 4 + ((2 + MSG_FUNC_LEN + MSG_FILE_LEN + TIME_VAL_LEN) * 1399 TRACE_ITEM_CNT); 1400 1401 if ((scsi_bufflen(srb) < buf_len) || !scsi_sglist(srb)) { 1402 set_sense_type(chip, SCSI_LUN(srb), 1403 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR); 1404 rtsx_trace(chip); 1405 return TRANSPORT_FAILED; 1406 } 1407 1408 clear = srb->cmnd[2]; 1409 1410 buf = vmalloc(scsi_bufflen(srb)); 1411 if (!buf) { 1412 rtsx_trace(chip); 1413 return TRANSPORT_ERROR; 1414 } 1415 ptr = buf; 1416 1417 if (chip->trace_msg[chip->msg_idx].valid) 1418 msg_cnt = TRACE_ITEM_CNT; 1419 else 1420 msg_cnt = chip->msg_idx; 1421 1422 *(ptr++) = (u8)(msg_cnt >> 24); 1423 *(ptr++) = (u8)(msg_cnt >> 16); 1424 *(ptr++) = (u8)(msg_cnt >> 8); 1425 *(ptr++) = (u8)msg_cnt; 1426 dev_dbg(rtsx_dev(chip), "Trace message count is %d\n", msg_cnt); 1427 1428 for (i = 1; i <= msg_cnt; i++) { 1429 int j, idx; 1430 1431 idx = chip->msg_idx - i; 1432 if (idx < 0) 1433 idx += TRACE_ITEM_CNT; 1434 1435 *(ptr++) = (u8)(chip->trace_msg[idx].line >> 8); 1436 *(ptr++) = (u8)(chip->trace_msg[idx].line); 1437 for (j = 0; j < MSG_FUNC_LEN; j++) 1438 *(ptr++) = chip->trace_msg[idx].func[j]; 1439 1440 for (j = 0; j < MSG_FILE_LEN; j++) 1441 *(ptr++) = chip->trace_msg[idx].file[j]; 1442 1443 for (j = 0; j < TIME_VAL_LEN; j++) 1444 *(ptr++) = chip->trace_msg[idx].timeval_buf[j]; 1445 } 1446 1447 rtsx_stor_set_xfer_buf(buf, scsi_bufflen(srb), srb); 1448 vfree(buf); 1449 1450 if (clear) { 1451 chip->msg_idx = 0; 1452 for (i = 0; i < TRACE_ITEM_CNT; i++) 1453 chip->trace_msg[i].valid = 0; 1454 } 1455 1456 scsi_set_resid(srb, 0); 1457 return TRANSPORT_GOOD; 1458 } 1459 #endif 1460 1461 static int read_host_reg(struct scsi_cmnd *srb, struct rtsx_chip *chip) 1462 { 1463 u8 addr, buf[4]; 1464 u32 val; 1465 unsigned int len; 1466 1467 rtsx_disable_aspm(chip); 1468 1469 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) { 1470 rtsx_exit_ss(chip); 1471 wait_timeout(100); 1472 } 1473 rtsx_set_stat(chip, RTSX_STAT_RUN); 1474 1475 addr = srb->cmnd[4]; 1476 1477 val = rtsx_readl(chip, addr); 1478 dev_dbg(rtsx_dev(chip), "Host register (0x%x): 0x%x\n", addr, val); 1479 1480 buf[0] = (u8)(val >> 24); 1481 buf[1] = (u8)(val >> 16); 1482 buf[2] = (u8)(val >> 8); 1483 buf[3] = (u8)val; 1484 1485 len = min_t(unsigned int, scsi_bufflen(srb), 4); 1486 rtsx_stor_set_xfer_buf(buf, len, srb); 1487 scsi_set_resid(srb, scsi_bufflen(srb) - len); 1488 1489 return TRANSPORT_GOOD; 1490 } 1491 1492 static int write_host_reg(struct scsi_cmnd *srb, struct rtsx_chip *chip) 1493 { 1494 u8 addr, buf[4]; 1495 u32 val; 1496 unsigned int len; 1497 1498 rtsx_disable_aspm(chip); 1499 1500 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) { 1501 rtsx_exit_ss(chip); 1502 wait_timeout(100); 1503 } 1504 rtsx_set_stat(chip, RTSX_STAT_RUN); 1505 1506 addr = srb->cmnd[4]; 1507 1508 len = min_t(unsigned int, scsi_bufflen(srb), 4); 1509 rtsx_stor_get_xfer_buf(buf, len, srb); 1510 scsi_set_resid(srb, scsi_bufflen(srb) - len); 1511 1512 val = ((u32)buf[0] << 24) | ((u32)buf[1] << 16) | ((u32)buf[2] 1513 << 8) | buf[3]; 1514 1515 rtsx_writel(chip, addr, val); 1516 1517 return TRANSPORT_GOOD; 1518 } 1519 1520 static int set_variable(struct scsi_cmnd *srb, struct rtsx_chip *chip) 1521 { 1522 unsigned int lun = SCSI_LUN(srb); 1523 1524 if (srb->cmnd[3] == 1) { 1525 /* Variable Clock */ 1526 struct xd_info *xd_card = &chip->xd_card; 1527 struct sd_info *sd_card = &chip->sd_card; 1528 struct ms_info *ms_card = &chip->ms_card; 1529 1530 switch (srb->cmnd[4]) { 1531 case XD_CARD: 1532 xd_card->xd_clock = srb->cmnd[5]; 1533 break; 1534 1535 case SD_CARD: 1536 sd_card->sd_clock = srb->cmnd[5]; 1537 break; 1538 1539 case MS_CARD: 1540 ms_card->ms_clock = srb->cmnd[5]; 1541 break; 1542 1543 default: 1544 set_sense_type(chip, lun, 1545 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 1546 rtsx_trace(chip); 1547 return TRANSPORT_FAILED; 1548 } 1549 } else if (srb->cmnd[3] == 2) { 1550 if (srb->cmnd[4]) { 1551 chip->blink_led = 1; 1552 } else { 1553 int retval; 1554 1555 chip->blink_led = 0; 1556 1557 rtsx_disable_aspm(chip); 1558 1559 if (chip->ss_en && 1560 (rtsx_get_stat(chip) == RTSX_STAT_SS)) { 1561 rtsx_exit_ss(chip); 1562 wait_timeout(100); 1563 } 1564 rtsx_set_stat(chip, RTSX_STAT_RUN); 1565 1566 retval = rtsx_force_power_on(chip, SSC_PDCTL); 1567 if (retval != STATUS_SUCCESS) { 1568 set_sense_type(chip, SCSI_LUN(srb), 1569 SENSE_TYPE_MEDIA_WRITE_ERR); 1570 rtsx_trace(chip); 1571 return TRANSPORT_FAILED; 1572 } 1573 1574 turn_off_led(chip, LED_GPIO); 1575 } 1576 } else { 1577 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 1578 rtsx_trace(chip); 1579 return TRANSPORT_FAILED; 1580 } 1581 1582 return TRANSPORT_GOOD; 1583 } 1584 1585 static int get_variable(struct scsi_cmnd *srb, struct rtsx_chip *chip) 1586 { 1587 unsigned int lun = SCSI_LUN(srb); 1588 1589 if (srb->cmnd[3] == 1) { 1590 struct xd_info *xd_card = &chip->xd_card; 1591 struct sd_info *sd_card = &chip->sd_card; 1592 struct ms_info *ms_card = &chip->ms_card; 1593 u8 tmp; 1594 1595 switch (srb->cmnd[4]) { 1596 case XD_CARD: 1597 tmp = (u8)(xd_card->xd_clock); 1598 break; 1599 1600 case SD_CARD: 1601 tmp = (u8)(sd_card->sd_clock); 1602 break; 1603 1604 case MS_CARD: 1605 tmp = (u8)(ms_card->ms_clock); 1606 break; 1607 1608 default: 1609 set_sense_type(chip, lun, 1610 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 1611 rtsx_trace(chip); 1612 return TRANSPORT_FAILED; 1613 } 1614 1615 rtsx_stor_set_xfer_buf(&tmp, 1, srb); 1616 } else if (srb->cmnd[3] == 2) { 1617 u8 tmp = chip->blink_led; 1618 1619 rtsx_stor_set_xfer_buf(&tmp, 1, srb); 1620 } else { 1621 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 1622 rtsx_trace(chip); 1623 return TRANSPORT_FAILED; 1624 } 1625 1626 return TRANSPORT_GOOD; 1627 } 1628 1629 static int dma_access_ring_buffer(struct scsi_cmnd *srb, struct rtsx_chip *chip) 1630 { 1631 int retval; 1632 unsigned int lun = SCSI_LUN(srb); 1633 u16 len; 1634 1635 rtsx_disable_aspm(chip); 1636 1637 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) { 1638 rtsx_exit_ss(chip); 1639 wait_timeout(100); 1640 } 1641 rtsx_set_stat(chip, RTSX_STAT_RUN); 1642 1643 len = ((u16)(srb->cmnd[4]) << 8) | srb->cmnd[5]; 1644 len = min_t(u16, len, scsi_bufflen(srb)); 1645 1646 if (srb->sc_data_direction == DMA_FROM_DEVICE) 1647 dev_dbg(rtsx_dev(chip), "Read from device\n"); 1648 else 1649 dev_dbg(rtsx_dev(chip), "Write to device\n"); 1650 1651 retval = rtsx_transfer_data(chip, 0, scsi_sglist(srb), len, 1652 scsi_sg_count(srb), srb->sc_data_direction, 1653 1000); 1654 if (retval < 0) { 1655 if (srb->sc_data_direction == DMA_FROM_DEVICE) 1656 set_sense_type(chip, lun, 1657 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR); 1658 else 1659 set_sense_type(chip, lun, 1660 SENSE_TYPE_MEDIA_WRITE_ERR); 1661 1662 rtsx_trace(chip); 1663 return TRANSPORT_FAILED; 1664 } 1665 scsi_set_resid(srb, 0); 1666 1667 return TRANSPORT_GOOD; 1668 } 1669 1670 static int get_dev_status(struct scsi_cmnd *srb, struct rtsx_chip *chip) 1671 { 1672 struct sd_info *sd_card = &chip->sd_card; 1673 struct ms_info *ms_card = &chip->ms_card; 1674 int buf_len; 1675 unsigned int lun = SCSI_LUN(srb); 1676 u8 card = get_lun_card(chip, lun); 1677 u8 status[32]; 1678 #ifdef SUPPORT_OCP 1679 u8 oc_now_mask = 0, oc_ever_mask = 0; 1680 #endif 1681 1682 memset(status, 0, 32); 1683 1684 status[0] = (u8)(chip->product_id); 1685 status[1] = chip->ic_version; 1686 1687 if (chip->auto_delink_en) 1688 status[2] = 0x10; 1689 else 1690 status[2] = 0x00; 1691 1692 status[3] = 20; 1693 status[4] = 10; 1694 status[5] = 05; 1695 status[6] = 21; 1696 1697 if (chip->card_wp) 1698 status[7] = 0x20; 1699 else 1700 status[7] = 0x00; 1701 1702 #ifdef SUPPORT_OCP 1703 status[8] = 0; 1704 if (CHECK_LUN_MODE(chip, SD_MS_2LUN) && 1705 (chip->lun2card[lun] == MS_CARD)) { 1706 oc_now_mask = MS_OC_NOW; 1707 oc_ever_mask = MS_OC_EVER; 1708 } else { 1709 oc_now_mask = SD_OC_NOW; 1710 oc_ever_mask = SD_OC_EVER; 1711 } 1712 1713 if (chip->ocp_stat & oc_now_mask) 1714 status[8] |= 0x02; 1715 1716 if (chip->ocp_stat & oc_ever_mask) 1717 status[8] |= 0x01; 1718 #endif 1719 1720 if (card == SD_CARD) { 1721 if (CHK_SD(sd_card)) { 1722 if (CHK_SD_HCXC(sd_card)) { 1723 if (sd_card->capacity > 0x4000000) 1724 status[0x0E] = 0x02; 1725 else 1726 status[0x0E] = 0x01; 1727 } else { 1728 status[0x0E] = 0x00; 1729 } 1730 1731 if (CHK_SD_SDR104(sd_card)) 1732 status[0x0F] = 0x03; 1733 else if (CHK_SD_DDR50(sd_card)) 1734 status[0x0F] = 0x04; 1735 else if (CHK_SD_SDR50(sd_card)) 1736 status[0x0F] = 0x02; 1737 else if (CHK_SD_HS(sd_card)) 1738 status[0x0F] = 0x01; 1739 else 1740 status[0x0F] = 0x00; 1741 } else { 1742 if (CHK_MMC_SECTOR_MODE(sd_card)) 1743 status[0x0E] = 0x01; 1744 else 1745 status[0x0E] = 0x00; 1746 1747 if (CHK_MMC_DDR52(sd_card)) 1748 status[0x0F] = 0x03; 1749 else if (CHK_MMC_52M(sd_card)) 1750 status[0x0F] = 0x02; 1751 else if (CHK_MMC_26M(sd_card)) 1752 status[0x0F] = 0x01; 1753 else 1754 status[0x0F] = 0x00; 1755 } 1756 } else if (card == MS_CARD) { 1757 if (CHK_MSPRO(ms_card)) { 1758 if (CHK_MSXC(ms_card)) 1759 status[0x0E] = 0x01; 1760 else 1761 status[0x0E] = 0x00; 1762 1763 if (CHK_HG8BIT(ms_card)) 1764 status[0x0F] = 0x01; 1765 else 1766 status[0x0F] = 0x00; 1767 } 1768 } 1769 1770 #ifdef SUPPORT_SD_LOCK 1771 if (card == SD_CARD) { 1772 status[0x17] = 0x80; 1773 if (sd_card->sd_erase_status) 1774 status[0x17] |= 0x01; 1775 if (sd_card->sd_lock_status & SD_LOCKED) { 1776 status[0x17] |= 0x02; 1777 status[0x07] |= 0x40; 1778 } 1779 if (sd_card->sd_lock_status & SD_PWD_EXIST) 1780 status[0x17] |= 0x04; 1781 } else { 1782 status[0x17] = 0x00; 1783 } 1784 1785 dev_dbg(rtsx_dev(chip), "status[0x17] = 0x%x\n", status[0x17]); 1786 #endif 1787 1788 status[0x18] = 0x8A; 1789 status[0x1A] = 0x28; 1790 #ifdef SUPPORT_SD_LOCK 1791 status[0x1F] = 0x01; 1792 #endif 1793 1794 buf_len = min_t(unsigned int, scsi_bufflen(srb), sizeof(status)); 1795 rtsx_stor_set_xfer_buf(status, buf_len, srb); 1796 scsi_set_resid(srb, scsi_bufflen(srb) - buf_len); 1797 1798 return TRANSPORT_GOOD; 1799 } 1800 1801 static int set_chip_mode(struct scsi_cmnd *srb, struct rtsx_chip *chip) 1802 { 1803 int phy_debug_mode; 1804 int retval; 1805 u16 reg; 1806 1807 if (!CHECK_PID(chip, 0x5208)) { 1808 set_sense_type(chip, SCSI_LUN(srb), 1809 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 1810 rtsx_trace(chip); 1811 return TRANSPORT_FAILED; 1812 } 1813 1814 phy_debug_mode = (int)(srb->cmnd[3]); 1815 1816 if (phy_debug_mode) { 1817 chip->phy_debug_mode = 1; 1818 retval = rtsx_write_register(chip, CDRESUMECTL, 0x77, 0); 1819 if (retval != STATUS_SUCCESS) { 1820 rtsx_trace(chip); 1821 return TRANSPORT_FAILED; 1822 } 1823 1824 rtsx_disable_bus_int(chip); 1825 1826 retval = rtsx_read_phy_register(chip, 0x1C, ®); 1827 if (retval != STATUS_SUCCESS) { 1828 rtsx_trace(chip); 1829 return TRANSPORT_FAILED; 1830 } 1831 1832 reg |= 0x0001; 1833 retval = rtsx_write_phy_register(chip, 0x1C, reg); 1834 if (retval != STATUS_SUCCESS) { 1835 rtsx_trace(chip); 1836 return TRANSPORT_FAILED; 1837 } 1838 } else { 1839 chip->phy_debug_mode = 0; 1840 retval = rtsx_write_register(chip, CDRESUMECTL, 0x77, 0x77); 1841 if (retval != STATUS_SUCCESS) { 1842 rtsx_trace(chip); 1843 return TRANSPORT_FAILED; 1844 } 1845 1846 rtsx_enable_bus_int(chip); 1847 1848 retval = rtsx_read_phy_register(chip, 0x1C, ®); 1849 if (retval != STATUS_SUCCESS) { 1850 rtsx_trace(chip); 1851 return TRANSPORT_FAILED; 1852 } 1853 1854 reg &= 0xFFFE; 1855 retval = rtsx_write_phy_register(chip, 0x1C, reg); 1856 if (retval != STATUS_SUCCESS) { 1857 rtsx_trace(chip); 1858 return TRANSPORT_FAILED; 1859 } 1860 } 1861 1862 return TRANSPORT_GOOD; 1863 } 1864 1865 static int rw_mem_cmd_buf(struct scsi_cmnd *srb, struct rtsx_chip *chip) 1866 { 1867 int retval = STATUS_SUCCESS; 1868 unsigned int lun = SCSI_LUN(srb); 1869 u8 cmd_type, mask, value, idx; 1870 u16 addr; 1871 1872 rtsx_disable_aspm(chip); 1873 1874 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) { 1875 rtsx_exit_ss(chip); 1876 wait_timeout(100); 1877 } 1878 rtsx_set_stat(chip, RTSX_STAT_RUN); 1879 1880 switch (srb->cmnd[3]) { 1881 case INIT_BATCHCMD: 1882 rtsx_init_cmd(chip); 1883 break; 1884 1885 case ADD_BATCHCMD: 1886 cmd_type = srb->cmnd[4]; 1887 if (cmd_type > 2) { 1888 set_sense_type(chip, lun, 1889 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 1890 rtsx_trace(chip); 1891 return TRANSPORT_FAILED; 1892 } 1893 addr = (srb->cmnd[5] << 8) | srb->cmnd[6]; 1894 mask = srb->cmnd[7]; 1895 value = srb->cmnd[8]; 1896 rtsx_add_cmd(chip, cmd_type, addr, mask, value); 1897 break; 1898 1899 case SEND_BATCHCMD: 1900 retval = rtsx_send_cmd(chip, 0, 1000); 1901 break; 1902 1903 case GET_BATCHRSP: 1904 idx = srb->cmnd[4]; 1905 value = *(rtsx_get_cmd_data(chip) + idx); 1906 if (scsi_bufflen(srb) < 1) { 1907 set_sense_type(chip, lun, 1908 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 1909 rtsx_trace(chip); 1910 return TRANSPORT_FAILED; 1911 } 1912 rtsx_stor_set_xfer_buf(&value, 1, srb); 1913 scsi_set_resid(srb, 0); 1914 break; 1915 1916 default: 1917 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 1918 rtsx_trace(chip); 1919 return TRANSPORT_FAILED; 1920 } 1921 1922 if (retval != STATUS_SUCCESS) { 1923 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_ERR); 1924 rtsx_trace(chip); 1925 return TRANSPORT_FAILED; 1926 } 1927 1928 return TRANSPORT_GOOD; 1929 } 1930 1931 static int suit_cmd(struct scsi_cmnd *srb, struct rtsx_chip *chip) 1932 { 1933 switch (srb->cmnd[3]) { 1934 case INIT_BATCHCMD: 1935 case ADD_BATCHCMD: 1936 case SEND_BATCHCMD: 1937 case GET_BATCHRSP: 1938 return rw_mem_cmd_buf(srb, chip); 1939 default: 1940 return TRANSPORT_ERROR; 1941 } 1942 } 1943 1944 static int read_phy_register(struct scsi_cmnd *srb, struct rtsx_chip *chip) 1945 { 1946 unsigned short addr, len, i; 1947 int retval; 1948 u8 *buf; 1949 u16 val; 1950 1951 rtsx_disable_aspm(chip); 1952 1953 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) { 1954 rtsx_exit_ss(chip); 1955 wait_timeout(100); 1956 } 1957 rtsx_set_stat(chip, RTSX_STAT_RUN); 1958 1959 addr = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5]; 1960 len = ((u16)srb->cmnd[6] << 8) | srb->cmnd[7]; 1961 1962 if (len % 2) 1963 len -= len % 2; 1964 1965 if (len) { 1966 buf = vmalloc(len); 1967 if (!buf) { 1968 rtsx_trace(chip); 1969 return TRANSPORT_ERROR; 1970 } 1971 1972 retval = rtsx_force_power_on(chip, SSC_PDCTL); 1973 if (retval != STATUS_SUCCESS) { 1974 vfree(buf); 1975 set_sense_type(chip, SCSI_LUN(srb), 1976 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR); 1977 rtsx_trace(chip); 1978 return TRANSPORT_FAILED; 1979 } 1980 1981 for (i = 0; i < len / 2; i++) { 1982 retval = rtsx_read_phy_register(chip, addr + i, &val); 1983 if (retval != STATUS_SUCCESS) { 1984 vfree(buf); 1985 set_sense_type 1986 (chip, SCSI_LUN(srb), 1987 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR); 1988 rtsx_trace(chip); 1989 return TRANSPORT_FAILED; 1990 } 1991 1992 buf[2 * i] = (u8)(val >> 8); 1993 buf[2 * i + 1] = (u8)val; 1994 } 1995 1996 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb), 1997 len); 1998 rtsx_stor_set_xfer_buf(buf, len, srb); 1999 scsi_set_resid(srb, scsi_bufflen(srb) - len); 2000 2001 vfree(buf); 2002 } 2003 2004 return TRANSPORT_GOOD; 2005 } 2006 2007 static int write_phy_register(struct scsi_cmnd *srb, struct rtsx_chip *chip) 2008 { 2009 unsigned short addr, len, i; 2010 int retval; 2011 u8 *buf; 2012 u16 val; 2013 2014 rtsx_disable_aspm(chip); 2015 2016 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) { 2017 rtsx_exit_ss(chip); 2018 wait_timeout(100); 2019 } 2020 rtsx_set_stat(chip, RTSX_STAT_RUN); 2021 2022 addr = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5]; 2023 len = ((u16)srb->cmnd[6] << 8) | srb->cmnd[7]; 2024 2025 if (len % 2) 2026 len -= len % 2; 2027 2028 if (len) { 2029 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb), 2030 len); 2031 2032 buf = vmalloc(len); 2033 if (!buf) { 2034 rtsx_trace(chip); 2035 return TRANSPORT_ERROR; 2036 } 2037 2038 rtsx_stor_get_xfer_buf(buf, len, srb); 2039 scsi_set_resid(srb, scsi_bufflen(srb) - len); 2040 2041 retval = rtsx_force_power_on(chip, SSC_PDCTL); 2042 if (retval != STATUS_SUCCESS) { 2043 vfree(buf); 2044 set_sense_type(chip, SCSI_LUN(srb), 2045 SENSE_TYPE_MEDIA_WRITE_ERR); 2046 rtsx_trace(chip); 2047 return TRANSPORT_FAILED; 2048 } 2049 2050 for (i = 0; i < len / 2; i++) { 2051 val = ((u16)buf[2 * i] << 8) | buf[2 * i + 1]; 2052 retval = rtsx_write_phy_register(chip, addr + i, val); 2053 if (retval != STATUS_SUCCESS) { 2054 vfree(buf); 2055 set_sense_type(chip, SCSI_LUN(srb), 2056 SENSE_TYPE_MEDIA_WRITE_ERR); 2057 rtsx_trace(chip); 2058 return TRANSPORT_FAILED; 2059 } 2060 } 2061 2062 vfree(buf); 2063 } 2064 2065 return TRANSPORT_GOOD; 2066 } 2067 2068 static int erase_eeprom2(struct scsi_cmnd *srb, struct rtsx_chip *chip) 2069 { 2070 unsigned short addr; 2071 int retval; 2072 u8 mode; 2073 2074 rtsx_disable_aspm(chip); 2075 2076 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) { 2077 rtsx_exit_ss(chip); 2078 wait_timeout(100); 2079 } 2080 rtsx_set_stat(chip, RTSX_STAT_RUN); 2081 2082 retval = rtsx_force_power_on(chip, SSC_PDCTL); 2083 if (retval != STATUS_SUCCESS) { 2084 set_sense_type(chip, SCSI_LUN(srb), SENSE_TYPE_MEDIA_WRITE_ERR); 2085 rtsx_trace(chip); 2086 return TRANSPORT_FAILED; 2087 } 2088 2089 mode = srb->cmnd[3]; 2090 addr = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5]; 2091 2092 if (mode == 0) { 2093 retval = spi_erase_eeprom_chip(chip); 2094 if (retval != STATUS_SUCCESS) { 2095 set_sense_type(chip, SCSI_LUN(srb), 2096 SENSE_TYPE_MEDIA_WRITE_ERR); 2097 rtsx_trace(chip); 2098 return TRANSPORT_FAILED; 2099 } 2100 } else if (mode == 1) { 2101 retval = spi_erase_eeprom_byte(chip, addr); 2102 if (retval != STATUS_SUCCESS) { 2103 set_sense_type(chip, SCSI_LUN(srb), 2104 SENSE_TYPE_MEDIA_WRITE_ERR); 2105 rtsx_trace(chip); 2106 return TRANSPORT_FAILED; 2107 } 2108 } else { 2109 set_sense_type(chip, SCSI_LUN(srb), 2110 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 2111 rtsx_trace(chip); 2112 return TRANSPORT_FAILED; 2113 } 2114 2115 return TRANSPORT_GOOD; 2116 } 2117 2118 static int read_eeprom2(struct scsi_cmnd *srb, struct rtsx_chip *chip) 2119 { 2120 unsigned short addr, len, i; 2121 int retval; 2122 u8 *buf; 2123 2124 rtsx_disable_aspm(chip); 2125 2126 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) { 2127 rtsx_exit_ss(chip); 2128 wait_timeout(100); 2129 } 2130 rtsx_set_stat(chip, RTSX_STAT_RUN); 2131 2132 addr = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5]; 2133 len = ((u16)srb->cmnd[6] << 8) | srb->cmnd[7]; 2134 2135 buf = vmalloc(len); 2136 if (!buf) { 2137 rtsx_trace(chip); 2138 return TRANSPORT_ERROR; 2139 } 2140 2141 retval = rtsx_force_power_on(chip, SSC_PDCTL); 2142 if (retval != STATUS_SUCCESS) { 2143 vfree(buf); 2144 set_sense_type(chip, SCSI_LUN(srb), 2145 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR); 2146 rtsx_trace(chip); 2147 return TRANSPORT_FAILED; 2148 } 2149 2150 for (i = 0; i < len; i++) { 2151 retval = spi_read_eeprom(chip, addr + i, buf + i); 2152 if (retval != STATUS_SUCCESS) { 2153 vfree(buf); 2154 set_sense_type(chip, SCSI_LUN(srb), 2155 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR); 2156 rtsx_trace(chip); 2157 return TRANSPORT_FAILED; 2158 } 2159 } 2160 2161 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb), len); 2162 rtsx_stor_set_xfer_buf(buf, len, srb); 2163 scsi_set_resid(srb, scsi_bufflen(srb) - len); 2164 2165 vfree(buf); 2166 2167 return TRANSPORT_GOOD; 2168 } 2169 2170 static int write_eeprom2(struct scsi_cmnd *srb, struct rtsx_chip *chip) 2171 { 2172 unsigned short addr, len, i; 2173 int retval; 2174 u8 *buf; 2175 2176 rtsx_disable_aspm(chip); 2177 2178 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) { 2179 rtsx_exit_ss(chip); 2180 wait_timeout(100); 2181 } 2182 rtsx_set_stat(chip, RTSX_STAT_RUN); 2183 2184 addr = ((u16)srb->cmnd[4] << 8) | srb->cmnd[5]; 2185 len = ((u16)srb->cmnd[6] << 8) | srb->cmnd[7]; 2186 2187 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb), len); 2188 buf = vmalloc(len); 2189 if (!buf) { 2190 rtsx_trace(chip); 2191 return TRANSPORT_ERROR; 2192 } 2193 2194 rtsx_stor_get_xfer_buf(buf, len, srb); 2195 scsi_set_resid(srb, scsi_bufflen(srb) - len); 2196 2197 retval = rtsx_force_power_on(chip, SSC_PDCTL); 2198 if (retval != STATUS_SUCCESS) { 2199 vfree(buf); 2200 set_sense_type(chip, SCSI_LUN(srb), SENSE_TYPE_MEDIA_WRITE_ERR); 2201 rtsx_trace(chip); 2202 return TRANSPORT_FAILED; 2203 } 2204 2205 for (i = 0; i < len; i++) { 2206 retval = spi_write_eeprom(chip, addr + i, buf[i]); 2207 if (retval != STATUS_SUCCESS) { 2208 vfree(buf); 2209 set_sense_type(chip, SCSI_LUN(srb), 2210 SENSE_TYPE_MEDIA_WRITE_ERR); 2211 rtsx_trace(chip); 2212 return TRANSPORT_FAILED; 2213 } 2214 } 2215 2216 vfree(buf); 2217 2218 return TRANSPORT_GOOD; 2219 } 2220 2221 static int read_efuse(struct scsi_cmnd *srb, struct rtsx_chip *chip) 2222 { 2223 int retval; 2224 u8 addr, len, i; 2225 u8 *buf; 2226 2227 rtsx_disable_aspm(chip); 2228 2229 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) { 2230 rtsx_exit_ss(chip); 2231 wait_timeout(100); 2232 } 2233 rtsx_set_stat(chip, RTSX_STAT_RUN); 2234 2235 addr = srb->cmnd[4]; 2236 len = srb->cmnd[5]; 2237 2238 buf = vmalloc(len); 2239 if (!buf) { 2240 rtsx_trace(chip); 2241 return TRANSPORT_ERROR; 2242 } 2243 2244 retval = rtsx_force_power_on(chip, SSC_PDCTL); 2245 if (retval != STATUS_SUCCESS) { 2246 vfree(buf); 2247 set_sense_type(chip, SCSI_LUN(srb), 2248 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR); 2249 rtsx_trace(chip); 2250 return TRANSPORT_FAILED; 2251 } 2252 2253 for (i = 0; i < len; i++) { 2254 retval = rtsx_read_efuse(chip, addr + i, buf + i); 2255 if (retval != STATUS_SUCCESS) { 2256 vfree(buf); 2257 set_sense_type(chip, SCSI_LUN(srb), 2258 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR); 2259 rtsx_trace(chip); 2260 return TRANSPORT_FAILED; 2261 } 2262 } 2263 2264 len = (u8)min_t(unsigned int, scsi_bufflen(srb), len); 2265 rtsx_stor_set_xfer_buf(buf, len, srb); 2266 scsi_set_resid(srb, scsi_bufflen(srb) - len); 2267 2268 vfree(buf); 2269 2270 return TRANSPORT_GOOD; 2271 } 2272 2273 static int write_efuse(struct scsi_cmnd *srb, struct rtsx_chip *chip) 2274 { 2275 int retval, result = TRANSPORT_GOOD; 2276 u16 val; 2277 u8 addr, len, i; 2278 u8 *buf; 2279 2280 rtsx_disable_aspm(chip); 2281 2282 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) { 2283 rtsx_exit_ss(chip); 2284 wait_timeout(100); 2285 } 2286 rtsx_set_stat(chip, RTSX_STAT_RUN); 2287 2288 addr = srb->cmnd[4]; 2289 len = srb->cmnd[5]; 2290 2291 len = (u8)min_t(unsigned int, scsi_bufflen(srb), len); 2292 buf = vmalloc(len); 2293 if (!buf) { 2294 rtsx_trace(chip); 2295 return TRANSPORT_ERROR; 2296 } 2297 2298 rtsx_stor_get_xfer_buf(buf, len, srb); 2299 scsi_set_resid(srb, scsi_bufflen(srb) - len); 2300 2301 retval = rtsx_force_power_on(chip, SSC_PDCTL); 2302 if (retval != STATUS_SUCCESS) { 2303 vfree(buf); 2304 rtsx_trace(chip); 2305 return TRANSPORT_ERROR; 2306 } 2307 2308 if (chip->asic_code) { 2309 retval = rtsx_read_phy_register(chip, 0x08, &val); 2310 if (retval != STATUS_SUCCESS) { 2311 vfree(buf); 2312 rtsx_trace(chip); 2313 return TRANSPORT_ERROR; 2314 } 2315 2316 retval = rtsx_write_register(chip, PWR_GATE_CTRL, 2317 LDO3318_PWR_MASK, LDO_OFF); 2318 if (retval != STATUS_SUCCESS) { 2319 vfree(buf); 2320 rtsx_trace(chip); 2321 return TRANSPORT_ERROR; 2322 } 2323 2324 wait_timeout(600); 2325 2326 retval = rtsx_write_phy_register(chip, 0x08, 2327 0x4C00 | chip->phy_voltage); 2328 if (retval != STATUS_SUCCESS) { 2329 vfree(buf); 2330 rtsx_trace(chip); 2331 return TRANSPORT_ERROR; 2332 } 2333 2334 retval = rtsx_write_register(chip, PWR_GATE_CTRL, 2335 LDO3318_PWR_MASK, LDO_ON); 2336 if (retval != STATUS_SUCCESS) { 2337 vfree(buf); 2338 rtsx_trace(chip); 2339 return TRANSPORT_ERROR; 2340 } 2341 2342 wait_timeout(600); 2343 } 2344 2345 retval = card_power_on(chip, SPI_CARD); 2346 if (retval != STATUS_SUCCESS) { 2347 vfree(buf); 2348 rtsx_trace(chip); 2349 return TRANSPORT_ERROR; 2350 } 2351 2352 wait_timeout(50); 2353 2354 for (i = 0; i < len; i++) { 2355 retval = rtsx_write_efuse(chip, addr + i, buf[i]); 2356 if (retval != STATUS_SUCCESS) { 2357 set_sense_type(chip, SCSI_LUN(srb), 2358 SENSE_TYPE_MEDIA_WRITE_ERR); 2359 result = TRANSPORT_FAILED; 2360 rtsx_trace(chip); 2361 goto exit; 2362 } 2363 } 2364 2365 exit: 2366 vfree(buf); 2367 2368 retval = card_power_off(chip, SPI_CARD); 2369 if (retval != STATUS_SUCCESS) { 2370 rtsx_trace(chip); 2371 return TRANSPORT_ERROR; 2372 } 2373 2374 if (chip->asic_code) { 2375 retval = rtsx_write_register(chip, PWR_GATE_CTRL, 2376 LDO3318_PWR_MASK, LDO_OFF); 2377 if (retval != STATUS_SUCCESS) { 2378 rtsx_trace(chip); 2379 return TRANSPORT_ERROR; 2380 } 2381 2382 wait_timeout(600); 2383 2384 retval = rtsx_write_phy_register(chip, 0x08, val); 2385 if (retval != STATUS_SUCCESS) { 2386 rtsx_trace(chip); 2387 return TRANSPORT_ERROR; 2388 } 2389 2390 retval = rtsx_write_register(chip, PWR_GATE_CTRL, 2391 LDO3318_PWR_MASK, LDO_ON); 2392 if (retval != STATUS_SUCCESS) { 2393 rtsx_trace(chip); 2394 return TRANSPORT_ERROR; 2395 } 2396 } 2397 2398 return result; 2399 } 2400 2401 static int read_cfg_byte(struct scsi_cmnd *srb, struct rtsx_chip *chip) 2402 { 2403 int retval; 2404 bool func_max; 2405 u8 func; 2406 u16 addr, len; 2407 u8 *buf; 2408 2409 rtsx_disable_aspm(chip); 2410 2411 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) { 2412 rtsx_exit_ss(chip); 2413 wait_timeout(100); 2414 } 2415 rtsx_set_stat(chip, RTSX_STAT_RUN); 2416 2417 func = srb->cmnd[3]; 2418 addr = ((u16)(srb->cmnd[4]) << 8) | srb->cmnd[5]; 2419 len = ((u16)(srb->cmnd[6]) << 8) | srb->cmnd[7]; 2420 2421 dev_dbg(rtsx_dev(chip), "%s: func = %d, addr = 0x%x, len = %d\n", 2422 __func__, func, addr, len); 2423 2424 if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip)) 2425 func_max = true; 2426 else 2427 func_max = false; 2428 2429 if (func > func_max) { 2430 set_sense_type(chip, SCSI_LUN(srb), 2431 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 2432 rtsx_trace(chip); 2433 return TRANSPORT_FAILED; 2434 } 2435 2436 buf = vmalloc(len); 2437 if (!buf) { 2438 rtsx_trace(chip); 2439 return TRANSPORT_ERROR; 2440 } 2441 2442 retval = rtsx_read_cfg_seq(chip, func, addr, buf, len); 2443 if (retval != STATUS_SUCCESS) { 2444 set_sense_type(chip, SCSI_LUN(srb), 2445 SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR); 2446 vfree(buf); 2447 rtsx_trace(chip); 2448 return TRANSPORT_FAILED; 2449 } 2450 2451 len = (u16)min_t(unsigned int, scsi_bufflen(srb), len); 2452 rtsx_stor_set_xfer_buf(buf, len, srb); 2453 scsi_set_resid(srb, scsi_bufflen(srb) - len); 2454 2455 vfree(buf); 2456 2457 return TRANSPORT_GOOD; 2458 } 2459 2460 static int write_cfg_byte(struct scsi_cmnd *srb, struct rtsx_chip *chip) 2461 { 2462 int retval; 2463 bool func_max; 2464 u8 func; 2465 u16 addr, len; 2466 u8 *buf; 2467 2468 rtsx_disable_aspm(chip); 2469 2470 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) { 2471 rtsx_exit_ss(chip); 2472 wait_timeout(100); 2473 } 2474 rtsx_set_stat(chip, RTSX_STAT_RUN); 2475 2476 func = srb->cmnd[3]; 2477 addr = ((u16)(srb->cmnd[4]) << 8) | srb->cmnd[5]; 2478 len = ((u16)(srb->cmnd[6]) << 8) | srb->cmnd[7]; 2479 2480 dev_dbg(rtsx_dev(chip), "%s: func = %d, addr = 0x%x\n", 2481 __func__, func, addr); 2482 2483 if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip)) 2484 func_max = true; 2485 else 2486 func_max = false; 2487 2488 if (func > func_max) { 2489 set_sense_type(chip, SCSI_LUN(srb), 2490 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 2491 rtsx_trace(chip); 2492 return TRANSPORT_FAILED; 2493 } 2494 2495 len = (unsigned short)min_t(unsigned int, scsi_bufflen(srb), len); 2496 buf = vmalloc(len); 2497 if (!buf) { 2498 rtsx_trace(chip); 2499 return TRANSPORT_ERROR; 2500 } 2501 2502 rtsx_stor_get_xfer_buf(buf, len, srb); 2503 scsi_set_resid(srb, scsi_bufflen(srb) - len); 2504 2505 retval = rtsx_write_cfg_seq(chip, func, addr, buf, len); 2506 if (retval != STATUS_SUCCESS) { 2507 set_sense_type(chip, SCSI_LUN(srb), SENSE_TYPE_MEDIA_WRITE_ERR); 2508 vfree(buf); 2509 rtsx_trace(chip); 2510 return TRANSPORT_FAILED; 2511 } 2512 2513 vfree(buf); 2514 2515 return TRANSPORT_GOOD; 2516 } 2517 2518 static int app_cmd(struct scsi_cmnd *srb, struct rtsx_chip *chip) 2519 { 2520 int result; 2521 2522 switch (srb->cmnd[2]) { 2523 case PP_READ10: 2524 case PP_WRITE10: 2525 result = read_write(srb, chip); 2526 break; 2527 2528 case READ_HOST_REG: 2529 result = read_host_reg(srb, chip); 2530 break; 2531 2532 case WRITE_HOST_REG: 2533 result = write_host_reg(srb, chip); 2534 break; 2535 2536 case GET_VAR: 2537 result = get_variable(srb, chip); 2538 break; 2539 2540 case SET_VAR: 2541 result = set_variable(srb, chip); 2542 break; 2543 2544 case DMA_READ: 2545 case DMA_WRITE: 2546 result = dma_access_ring_buffer(srb, chip); 2547 break; 2548 2549 case READ_PHY: 2550 result = read_phy_register(srb, chip); 2551 break; 2552 2553 case WRITE_PHY: 2554 result = write_phy_register(srb, chip); 2555 break; 2556 2557 case ERASE_EEPROM2: 2558 result = erase_eeprom2(srb, chip); 2559 break; 2560 2561 case READ_EEPROM2: 2562 result = read_eeprom2(srb, chip); 2563 break; 2564 2565 case WRITE_EEPROM2: 2566 result = write_eeprom2(srb, chip); 2567 break; 2568 2569 case READ_EFUSE: 2570 result = read_efuse(srb, chip); 2571 break; 2572 2573 case WRITE_EFUSE: 2574 result = write_efuse(srb, chip); 2575 break; 2576 2577 case READ_CFG: 2578 result = read_cfg_byte(srb, chip); 2579 break; 2580 2581 case WRITE_CFG: 2582 result = write_cfg_byte(srb, chip); 2583 break; 2584 2585 case SET_CHIP_MODE: 2586 result = set_chip_mode(srb, chip); 2587 break; 2588 2589 case SUIT_CMD: 2590 result = suit_cmd(srb, chip); 2591 break; 2592 2593 case GET_DEV_STATUS: 2594 result = get_dev_status(srb, chip); 2595 break; 2596 2597 default: 2598 set_sense_type(chip, SCSI_LUN(srb), 2599 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 2600 rtsx_trace(chip); 2601 return TRANSPORT_FAILED; 2602 } 2603 2604 return result; 2605 } 2606 2607 static int read_status(struct scsi_cmnd *srb, struct rtsx_chip *chip) 2608 { 2609 u8 rtsx_status[16]; 2610 int buf_len; 2611 unsigned int lun = SCSI_LUN(srb); 2612 2613 rtsx_status[0] = (u8)(chip->vendor_id >> 8); 2614 rtsx_status[1] = (u8)(chip->vendor_id); 2615 2616 rtsx_status[2] = (u8)(chip->product_id >> 8); 2617 rtsx_status[3] = (u8)(chip->product_id); 2618 2619 rtsx_status[4] = (u8)lun; 2620 2621 if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) { 2622 if (chip->lun2card[lun] == SD_CARD) 2623 rtsx_status[5] = 2; 2624 else 2625 rtsx_status[5] = 3; 2626 } else { 2627 if (chip->card_exist) { 2628 if (chip->card_exist & XD_CARD) 2629 rtsx_status[5] = 4; 2630 else if (chip->card_exist & SD_CARD) 2631 rtsx_status[5] = 2; 2632 else if (chip->card_exist & MS_CARD) 2633 rtsx_status[5] = 3; 2634 else 2635 rtsx_status[5] = 7; 2636 } else { 2637 rtsx_status[5] = 7; 2638 } 2639 } 2640 2641 if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) 2642 rtsx_status[6] = 2; 2643 else 2644 rtsx_status[6] = 1; 2645 2646 rtsx_status[7] = (u8)(chip->product_id); 2647 rtsx_status[8] = chip->ic_version; 2648 2649 if (check_card_exist(chip, lun)) 2650 rtsx_status[9] = 1; 2651 else 2652 rtsx_status[9] = 0; 2653 2654 if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) 2655 rtsx_status[10] = 0; 2656 else 2657 rtsx_status[10] = 1; 2658 2659 if (CHECK_LUN_MODE(chip, SD_MS_2LUN)) { 2660 if (chip->lun2card[lun] == SD_CARD) 2661 rtsx_status[11] = SD_CARD; 2662 else 2663 rtsx_status[11] = MS_CARD; 2664 } else { 2665 rtsx_status[11] = XD_CARD | SD_CARD | MS_CARD; 2666 } 2667 2668 if (check_card_ready(chip, lun)) 2669 rtsx_status[12] = 1; 2670 else 2671 rtsx_status[12] = 0; 2672 2673 if (get_lun_card(chip, lun) == XD_CARD) { 2674 rtsx_status[13] = 0x40; 2675 } else if (get_lun_card(chip, lun) == SD_CARD) { 2676 struct sd_info *sd_card = &chip->sd_card; 2677 2678 rtsx_status[13] = 0x20; 2679 if (CHK_SD(sd_card)) { 2680 if (CHK_SD_HCXC(sd_card)) 2681 rtsx_status[13] |= 0x04; 2682 if (CHK_SD_HS(sd_card)) 2683 rtsx_status[13] |= 0x02; 2684 } else { 2685 rtsx_status[13] |= 0x08; 2686 if (CHK_MMC_52M(sd_card)) 2687 rtsx_status[13] |= 0x02; 2688 if (CHK_MMC_SECTOR_MODE(sd_card)) 2689 rtsx_status[13] |= 0x04; 2690 } 2691 } else if (get_lun_card(chip, lun) == MS_CARD) { 2692 struct ms_info *ms_card = &chip->ms_card; 2693 2694 if (CHK_MSPRO(ms_card)) { 2695 rtsx_status[13] = 0x38; 2696 if (CHK_HG8BIT(ms_card)) 2697 rtsx_status[13] |= 0x04; 2698 #ifdef SUPPORT_MSXC 2699 if (CHK_MSXC(ms_card)) 2700 rtsx_status[13] |= 0x01; 2701 #endif 2702 } else { 2703 rtsx_status[13] = 0x30; 2704 } 2705 } else { 2706 if (CHECK_LUN_MODE(chip, DEFAULT_SINGLE)) { 2707 #ifdef SUPPORT_SDIO 2708 if (chip->sd_io && chip->sd_int) 2709 rtsx_status[13] = 0x60; 2710 else 2711 rtsx_status[13] = 0x70; 2712 #else 2713 rtsx_status[13] = 0x70; 2714 #endif 2715 } else { 2716 if (chip->lun2card[lun] == SD_CARD) 2717 rtsx_status[13] = 0x20; 2718 else 2719 rtsx_status[13] = 0x30; 2720 } 2721 } 2722 2723 rtsx_status[14] = 0x78; 2724 if (CHK_SDIO_EXIST(chip) && !CHK_SDIO_IGNORED(chip)) 2725 rtsx_status[15] = 0x83; 2726 else 2727 rtsx_status[15] = 0x82; 2728 2729 buf_len = min_t(unsigned int, scsi_bufflen(srb), sizeof(rtsx_status)); 2730 rtsx_stor_set_xfer_buf(rtsx_status, buf_len, srb); 2731 scsi_set_resid(srb, scsi_bufflen(srb) - buf_len); 2732 2733 return TRANSPORT_GOOD; 2734 } 2735 2736 static int get_card_bus_width(struct scsi_cmnd *srb, struct rtsx_chip *chip) 2737 { 2738 unsigned int lun = SCSI_LUN(srb); 2739 u8 card, bus_width; 2740 2741 if (!check_card_ready(chip, lun)) { 2742 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT); 2743 rtsx_trace(chip); 2744 return TRANSPORT_FAILED; 2745 } 2746 2747 card = get_lun_card(chip, lun); 2748 if ((card == SD_CARD) || (card == MS_CARD)) { 2749 bus_width = chip->card_bus_width[lun]; 2750 } else { 2751 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR); 2752 rtsx_trace(chip); 2753 return TRANSPORT_FAILED; 2754 } 2755 2756 scsi_set_resid(srb, 0); 2757 rtsx_stor_set_xfer_buf(&bus_width, scsi_bufflen(srb), srb); 2758 2759 return TRANSPORT_GOOD; 2760 } 2761 2762 static int spi_vendor_cmd(struct scsi_cmnd *srb, struct rtsx_chip *chip) 2763 { 2764 int result; 2765 unsigned int lun = SCSI_LUN(srb); 2766 u8 gpio_dir; 2767 2768 if (CHECK_PID(chip, 0x5208) || CHECK_PID(chip, 0x5288)) { 2769 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 2770 rtsx_trace(chip); 2771 return TRANSPORT_FAILED; 2772 } 2773 2774 rtsx_disable_aspm(chip); 2775 2776 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) { 2777 rtsx_exit_ss(chip); 2778 wait_timeout(100); 2779 } 2780 rtsx_set_stat(chip, RTSX_STAT_RUN); 2781 2782 rtsx_force_power_on(chip, SSC_PDCTL); 2783 2784 rtsx_read_register(chip, CARD_GPIO_DIR, &gpio_dir); 2785 rtsx_write_register(chip, CARD_GPIO_DIR, 0x07, gpio_dir & 0x06); 2786 2787 switch (srb->cmnd[2]) { 2788 case SCSI_SPI_GETSTATUS: 2789 result = spi_get_status(srb, chip); 2790 break; 2791 2792 case SCSI_SPI_SETPARAMETER: 2793 result = spi_set_parameter(srb, chip); 2794 break; 2795 2796 case SCSI_SPI_READFALSHID: 2797 result = spi_read_flash_id(srb, chip); 2798 break; 2799 2800 case SCSI_SPI_READFLASH: 2801 result = spi_read_flash(srb, chip); 2802 break; 2803 2804 case SCSI_SPI_WRITEFLASH: 2805 result = spi_write_flash(srb, chip); 2806 break; 2807 2808 case SCSI_SPI_WRITEFLASHSTATUS: 2809 result = spi_write_flash_status(srb, chip); 2810 break; 2811 2812 case SCSI_SPI_ERASEFLASH: 2813 result = spi_erase_flash(srb, chip); 2814 break; 2815 2816 default: 2817 rtsx_write_register(chip, CARD_GPIO_DIR, 0x07, gpio_dir); 2818 2819 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 2820 rtsx_trace(chip); 2821 return TRANSPORT_FAILED; 2822 } 2823 2824 rtsx_write_register(chip, CARD_GPIO_DIR, 0x07, gpio_dir); 2825 2826 if (result != STATUS_SUCCESS) { 2827 rtsx_trace(chip); 2828 return TRANSPORT_FAILED; 2829 } 2830 2831 return TRANSPORT_GOOD; 2832 } 2833 2834 static int vendor_cmnd(struct scsi_cmnd *srb, struct rtsx_chip *chip) 2835 { 2836 int result; 2837 2838 switch (srb->cmnd[1]) { 2839 case READ_STATUS: 2840 result = read_status(srb, chip); 2841 break; 2842 2843 case READ_MEM: 2844 result = read_mem(srb, chip); 2845 break; 2846 2847 case WRITE_MEM: 2848 result = write_mem(srb, chip); 2849 break; 2850 2851 case READ_EEPROM: 2852 result = read_eeprom(srb, chip); 2853 break; 2854 2855 case WRITE_EEPROM: 2856 result = write_eeprom(srb, chip); 2857 break; 2858 2859 case TOGGLE_GPIO: 2860 result = toggle_gpio_cmd(srb, chip); 2861 break; 2862 2863 case GET_SD_CSD: 2864 result = get_sd_csd(srb, chip); 2865 break; 2866 2867 case GET_BUS_WIDTH: 2868 result = get_card_bus_width(srb, chip); 2869 break; 2870 2871 #ifdef _MSG_TRACE 2872 case TRACE_MSG: 2873 result = trace_msg_cmd(srb, chip); 2874 break; 2875 #endif 2876 2877 case SCSI_APP_CMD: 2878 result = app_cmd(srb, chip); 2879 break; 2880 2881 case SPI_VENDOR_COMMAND: 2882 result = spi_vendor_cmd(srb, chip); 2883 break; 2884 2885 default: 2886 set_sense_type(chip, SCSI_LUN(srb), 2887 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 2888 rtsx_trace(chip); 2889 return TRANSPORT_FAILED; 2890 } 2891 2892 return result; 2893 } 2894 2895 #if !defined(LED_AUTO_BLINK) && !defined(REGULAR_BLINK) 2896 void led_shine(struct scsi_cmnd *srb, struct rtsx_chip *chip) 2897 { 2898 unsigned int lun = SCSI_LUN(srb); 2899 u16 sec_cnt; 2900 2901 if ((srb->cmnd[0] == READ_10) || (srb->cmnd[0] == WRITE_10)) { 2902 sec_cnt = ((u16)(srb->cmnd[7]) << 8) | srb->cmnd[8]; 2903 } else if ((srb->cmnd[0] == READ_6) || (srb->cmnd[0] == WRITE_6)) { 2904 sec_cnt = srb->cmnd[4]; 2905 if (sec_cnt == 0) 2906 sec_cnt = 256; 2907 } else { 2908 return; 2909 } 2910 2911 if (chip->rw_cap[lun] >= GPIO_TOGGLE_THRESHOLD) { 2912 toggle_gpio(chip, LED_GPIO); 2913 chip->rw_cap[lun] = 0; 2914 } else { 2915 chip->rw_cap[lun] += sec_cnt; 2916 } 2917 } 2918 #endif 2919 2920 static int ms_format_cmnd(struct scsi_cmnd *srb, struct rtsx_chip *chip) 2921 { 2922 struct ms_info *ms_card = &chip->ms_card; 2923 unsigned int lun = SCSI_LUN(srb); 2924 bool quick_format; 2925 int retval; 2926 2927 if (get_lun_card(chip, lun) != MS_CARD) { 2928 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT); 2929 rtsx_trace(chip); 2930 return TRANSPORT_FAILED; 2931 } 2932 2933 if ((srb->cmnd[3] != 0x4D) || (srb->cmnd[4] != 0x47) || 2934 (srb->cmnd[5] != 0x66) || (srb->cmnd[6] != 0x6D) || 2935 (srb->cmnd[7] != 0x74)) { 2936 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 2937 rtsx_trace(chip); 2938 return TRANSPORT_FAILED; 2939 } 2940 2941 rtsx_disable_aspm(chip); 2942 2943 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) { 2944 rtsx_exit_ss(chip); 2945 wait_timeout(100); 2946 2947 if (!check_card_ready(chip, lun) || 2948 (get_card_size(chip, lun) == 0)) { 2949 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT); 2950 rtsx_trace(chip); 2951 return TRANSPORT_FAILED; 2952 } 2953 } 2954 rtsx_set_stat(chip, RTSX_STAT_RUN); 2955 2956 if (srb->cmnd[8] & 0x01) 2957 quick_format = false; 2958 else 2959 quick_format = true; 2960 2961 if (!(chip->card_ready & MS_CARD)) { 2962 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT); 2963 rtsx_trace(chip); 2964 return TRANSPORT_FAILED; 2965 } 2966 2967 if (chip->card_wp & MS_CARD) { 2968 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_PROTECT); 2969 rtsx_trace(chip); 2970 return TRANSPORT_FAILED; 2971 } 2972 2973 if (!CHK_MSPRO(ms_card)) { 2974 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT); 2975 rtsx_trace(chip); 2976 return TRANSPORT_FAILED; 2977 } 2978 2979 retval = mspro_format(srb, chip, MS_SHORT_DATA_LEN, quick_format); 2980 if (retval != STATUS_SUCCESS) { 2981 set_sense_type(chip, lun, SENSE_TYPE_FORMAT_CMD_FAILED); 2982 rtsx_trace(chip); 2983 return TRANSPORT_FAILED; 2984 } 2985 2986 scsi_set_resid(srb, 0); 2987 return TRANSPORT_GOOD; 2988 } 2989 2990 #ifdef SUPPORT_PCGL_1P18 2991 static int get_ms_information(struct scsi_cmnd *srb, struct rtsx_chip *chip) 2992 { 2993 struct ms_info *ms_card = &chip->ms_card; 2994 unsigned int lun = SCSI_LUN(srb); 2995 u8 dev_info_id, data_len; 2996 u8 *buf; 2997 unsigned int buf_len; 2998 int i; 2999 3000 if (!check_card_ready(chip, lun)) { 3001 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT); 3002 rtsx_trace(chip); 3003 return TRANSPORT_FAILED; 3004 } 3005 if (get_lun_card(chip, lun) != MS_CARD) { 3006 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT); 3007 rtsx_trace(chip); 3008 return TRANSPORT_FAILED; 3009 } 3010 3011 if ((srb->cmnd[2] != 0xB0) || (srb->cmnd[4] != 0x4D) || 3012 (srb->cmnd[5] != 0x53) || (srb->cmnd[6] != 0x49) || 3013 (srb->cmnd[7] != 0x44)) { 3014 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 3015 rtsx_trace(chip); 3016 return TRANSPORT_FAILED; 3017 } 3018 3019 dev_info_id = srb->cmnd[3]; 3020 if ((CHK_MSXC(ms_card) && (dev_info_id == 0x10)) || 3021 (!CHK_MSXC(ms_card) && (dev_info_id == 0x13)) || 3022 !CHK_MSPRO(ms_card)) { 3023 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 3024 rtsx_trace(chip); 3025 return TRANSPORT_FAILED; 3026 } 3027 3028 if (dev_info_id == 0x15) { 3029 buf_len = 0x3A; 3030 data_len = 0x3A; 3031 } else { 3032 buf_len = 0x6A; 3033 data_len = 0x6A; 3034 } 3035 3036 buf = kmalloc(buf_len, GFP_KERNEL); 3037 if (!buf) { 3038 rtsx_trace(chip); 3039 return TRANSPORT_ERROR; 3040 } 3041 3042 i = 0; 3043 /* GET Memory Stick Media Information Response Header */ 3044 buf[i++] = 0x00; /* Data length MSB */ 3045 buf[i++] = data_len; /* Data length LSB */ 3046 /* Device Information Type Code */ 3047 if (CHK_MSXC(ms_card)) 3048 buf[i++] = 0x03; 3049 else 3050 buf[i++] = 0x02; 3051 3052 /* SGM bit */ 3053 buf[i++] = 0x01; 3054 /* Reserved */ 3055 buf[i++] = 0x00; 3056 buf[i++] = 0x00; 3057 buf[i++] = 0x00; 3058 /* Number of Device Information */ 3059 buf[i++] = 0x01; 3060 3061 /* Device Information Body */ 3062 3063 /* Device Information ID Number */ 3064 buf[i++] = dev_info_id; 3065 /* Device Information Length */ 3066 if (dev_info_id == 0x15) 3067 data_len = 0x31; 3068 else 3069 data_len = 0x61; 3070 3071 buf[i++] = 0x00; /* Data length MSB */ 3072 buf[i++] = data_len; /* Data length LSB */ 3073 /* Valid Bit */ 3074 buf[i++] = 0x80; 3075 if ((dev_info_id == 0x10) || (dev_info_id == 0x13)) { 3076 /* System Information */ 3077 memcpy(buf + i, ms_card->raw_sys_info, 96); 3078 } else { 3079 /* Model Name */ 3080 memcpy(buf + i, ms_card->raw_model_name, 48); 3081 } 3082 3083 rtsx_stor_set_xfer_buf(buf, buf_len, srb); 3084 3085 if (dev_info_id == 0x15) 3086 scsi_set_resid(srb, scsi_bufflen(srb) - 0x3C); 3087 else 3088 scsi_set_resid(srb, scsi_bufflen(srb) - 0x6C); 3089 3090 kfree(buf); 3091 return STATUS_SUCCESS; 3092 } 3093 #endif 3094 3095 static int ms_sp_cmnd(struct scsi_cmnd *srb, struct rtsx_chip *chip) 3096 { 3097 int retval = TRANSPORT_ERROR; 3098 3099 if (srb->cmnd[2] == MS_FORMAT) 3100 retval = ms_format_cmnd(srb, chip); 3101 #ifdef SUPPORT_PCGL_1P18 3102 else if (srb->cmnd[2] == GET_MS_INFORMATION) 3103 retval = get_ms_information(srb, chip); 3104 #endif 3105 3106 return retval; 3107 } 3108 3109 #ifdef SUPPORT_CPRM 3110 static int sd_extension_cmnd(struct scsi_cmnd *srb, struct rtsx_chip *chip) 3111 { 3112 unsigned int lun = SCSI_LUN(srb); 3113 int result; 3114 3115 rtsx_disable_aspm(chip); 3116 3117 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) { 3118 rtsx_exit_ss(chip); 3119 wait_timeout(100); 3120 } 3121 rtsx_set_stat(chip, RTSX_STAT_RUN); 3122 3123 sd_cleanup_work(chip); 3124 3125 if (!check_card_ready(chip, lun)) { 3126 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT); 3127 rtsx_trace(chip); 3128 return TRANSPORT_FAILED; 3129 } 3130 if (get_lun_card(chip, lun) != SD_CARD) { 3131 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT); 3132 rtsx_trace(chip); 3133 return TRANSPORT_FAILED; 3134 } 3135 3136 switch (srb->cmnd[0]) { 3137 case SD_PASS_THRU_MODE: 3138 result = sd_pass_thru_mode(srb, chip); 3139 break; 3140 3141 case SD_EXECUTE_NO_DATA: 3142 result = sd_execute_no_data(srb, chip); 3143 break; 3144 3145 case SD_EXECUTE_READ: 3146 result = sd_execute_read_data(srb, chip); 3147 break; 3148 3149 case SD_EXECUTE_WRITE: 3150 result = sd_execute_write_data(srb, chip); 3151 break; 3152 3153 case SD_GET_RSP: 3154 result = sd_get_cmd_rsp(srb, chip); 3155 break; 3156 3157 case SD_HW_RST: 3158 result = sd_hw_rst(srb, chip); 3159 break; 3160 3161 default: 3162 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 3163 rtsx_trace(chip); 3164 return TRANSPORT_FAILED; 3165 } 3166 3167 return result; 3168 } 3169 #endif 3170 3171 #ifdef SUPPORT_MAGIC_GATE 3172 static int mg_report_key(struct scsi_cmnd *srb, struct rtsx_chip *chip) 3173 { 3174 struct ms_info *ms_card = &chip->ms_card; 3175 unsigned int lun = SCSI_LUN(srb); 3176 int retval; 3177 u8 key_format; 3178 3179 rtsx_disable_aspm(chip); 3180 3181 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) { 3182 rtsx_exit_ss(chip); 3183 wait_timeout(100); 3184 } 3185 rtsx_set_stat(chip, RTSX_STAT_RUN); 3186 3187 ms_cleanup_work(chip); 3188 3189 if (!check_card_ready(chip, lun)) { 3190 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT); 3191 rtsx_trace(chip); 3192 return TRANSPORT_FAILED; 3193 } 3194 if (get_lun_card(chip, lun) != MS_CARD) { 3195 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT); 3196 rtsx_trace(chip); 3197 return TRANSPORT_FAILED; 3198 } 3199 3200 if (srb->cmnd[7] != KC_MG_R_PRO) { 3201 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 3202 rtsx_trace(chip); 3203 return TRANSPORT_FAILED; 3204 } 3205 3206 if (!CHK_MSPRO(ms_card)) { 3207 set_sense_type(chip, lun, SENSE_TYPE_MG_INCOMPATIBLE_MEDIUM); 3208 rtsx_trace(chip); 3209 return TRANSPORT_FAILED; 3210 } 3211 3212 key_format = srb->cmnd[10] & 0x3F; 3213 dev_dbg(rtsx_dev(chip), "key_format = 0x%x\n", key_format); 3214 3215 switch (key_format) { 3216 case KF_GET_LOC_EKB: 3217 if ((scsi_bufflen(srb) == 0x41C) && 3218 (srb->cmnd[8] == 0x04) && 3219 (srb->cmnd[9] == 0x1C)) { 3220 retval = mg_get_local_EKB(srb, chip); 3221 if (retval != STATUS_SUCCESS) { 3222 rtsx_trace(chip); 3223 return TRANSPORT_FAILED; 3224 } 3225 3226 } else { 3227 set_sense_type(chip, lun, 3228 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 3229 rtsx_trace(chip); 3230 return TRANSPORT_FAILED; 3231 } 3232 break; 3233 3234 case KF_RSP_CHG: 3235 if ((scsi_bufflen(srb) == 0x24) && 3236 (srb->cmnd[8] == 0x00) && 3237 (srb->cmnd[9] == 0x24)) { 3238 retval = mg_get_rsp_chg(srb, chip); 3239 if (retval != STATUS_SUCCESS) { 3240 rtsx_trace(chip); 3241 return TRANSPORT_FAILED; 3242 } 3243 3244 } else { 3245 set_sense_type(chip, lun, 3246 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 3247 rtsx_trace(chip); 3248 return TRANSPORT_FAILED; 3249 } 3250 break; 3251 3252 case KF_GET_ICV: 3253 ms_card->mg_entry_num = srb->cmnd[5]; 3254 if ((scsi_bufflen(srb) == 0x404) && 3255 (srb->cmnd[8] == 0x04) && 3256 (srb->cmnd[9] == 0x04) && 3257 (srb->cmnd[2] == 0x00) && 3258 (srb->cmnd[3] == 0x00) && 3259 (srb->cmnd[4] == 0x00) && 3260 (srb->cmnd[5] < 32)) { 3261 retval = mg_get_ICV(srb, chip); 3262 if (retval != STATUS_SUCCESS) { 3263 rtsx_trace(chip); 3264 return TRANSPORT_FAILED; 3265 } 3266 3267 } else { 3268 set_sense_type(chip, lun, 3269 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 3270 rtsx_trace(chip); 3271 return TRANSPORT_FAILED; 3272 } 3273 break; 3274 3275 default: 3276 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 3277 rtsx_trace(chip); 3278 return TRANSPORT_FAILED; 3279 } 3280 3281 scsi_set_resid(srb, 0); 3282 return TRANSPORT_GOOD; 3283 } 3284 3285 static int mg_send_key(struct scsi_cmnd *srb, struct rtsx_chip *chip) 3286 { 3287 struct ms_info *ms_card = &chip->ms_card; 3288 unsigned int lun = SCSI_LUN(srb); 3289 int retval; 3290 u8 key_format; 3291 3292 rtsx_disable_aspm(chip); 3293 3294 if (chip->ss_en && (rtsx_get_stat(chip) == RTSX_STAT_SS)) { 3295 rtsx_exit_ss(chip); 3296 wait_timeout(100); 3297 } 3298 rtsx_set_stat(chip, RTSX_STAT_RUN); 3299 3300 ms_cleanup_work(chip); 3301 3302 if (!check_card_ready(chip, lun)) { 3303 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT); 3304 rtsx_trace(chip); 3305 return TRANSPORT_FAILED; 3306 } 3307 if (check_card_wp(chip, lun)) { 3308 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_WRITE_PROTECT); 3309 rtsx_trace(chip); 3310 return TRANSPORT_FAILED; 3311 } 3312 if (get_lun_card(chip, lun) != MS_CARD) { 3313 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_LUN_NOT_SUPPORT); 3314 rtsx_trace(chip); 3315 return TRANSPORT_FAILED; 3316 } 3317 3318 if (srb->cmnd[7] != KC_MG_R_PRO) { 3319 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 3320 rtsx_trace(chip); 3321 return TRANSPORT_FAILED; 3322 } 3323 3324 if (!CHK_MSPRO(ms_card)) { 3325 set_sense_type(chip, lun, SENSE_TYPE_MG_INCOMPATIBLE_MEDIUM); 3326 rtsx_trace(chip); 3327 return TRANSPORT_FAILED; 3328 } 3329 3330 key_format = srb->cmnd[10] & 0x3F; 3331 dev_dbg(rtsx_dev(chip), "key_format = 0x%x\n", key_format); 3332 3333 switch (key_format) { 3334 case KF_SET_LEAF_ID: 3335 if ((scsi_bufflen(srb) == 0x0C) && 3336 (srb->cmnd[8] == 0x00) && 3337 (srb->cmnd[9] == 0x0C)) { 3338 retval = mg_set_leaf_id(srb, chip); 3339 if (retval != STATUS_SUCCESS) { 3340 rtsx_trace(chip); 3341 return TRANSPORT_FAILED; 3342 } 3343 3344 } else { 3345 set_sense_type(chip, lun, 3346 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 3347 rtsx_trace(chip); 3348 return TRANSPORT_FAILED; 3349 } 3350 break; 3351 3352 case KF_CHG_HOST: 3353 if ((scsi_bufflen(srb) == 0x0C) && 3354 (srb->cmnd[8] == 0x00) && 3355 (srb->cmnd[9] == 0x0C)) { 3356 retval = mg_chg(srb, chip); 3357 if (retval != STATUS_SUCCESS) { 3358 rtsx_trace(chip); 3359 return TRANSPORT_FAILED; 3360 } 3361 3362 } else { 3363 set_sense_type(chip, lun, 3364 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 3365 rtsx_trace(chip); 3366 return TRANSPORT_FAILED; 3367 } 3368 break; 3369 3370 case KF_RSP_HOST: 3371 if ((scsi_bufflen(srb) == 0x0C) && 3372 (srb->cmnd[8] == 0x00) && 3373 (srb->cmnd[9] == 0x0C)) { 3374 retval = mg_rsp(srb, chip); 3375 if (retval != STATUS_SUCCESS) { 3376 rtsx_trace(chip); 3377 return TRANSPORT_FAILED; 3378 } 3379 3380 } else { 3381 set_sense_type(chip, lun, 3382 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 3383 rtsx_trace(chip); 3384 return TRANSPORT_FAILED; 3385 } 3386 break; 3387 3388 case KF_SET_ICV: 3389 ms_card->mg_entry_num = srb->cmnd[5]; 3390 if ((scsi_bufflen(srb) == 0x404) && 3391 (srb->cmnd[8] == 0x04) && 3392 (srb->cmnd[9] == 0x04) && 3393 (srb->cmnd[2] == 0x00) && 3394 (srb->cmnd[3] == 0x00) && 3395 (srb->cmnd[4] == 0x00) && 3396 (srb->cmnd[5] < 32)) { 3397 retval = mg_set_ICV(srb, chip); 3398 if (retval != STATUS_SUCCESS) { 3399 rtsx_trace(chip); 3400 return TRANSPORT_FAILED; 3401 } 3402 3403 } else { 3404 set_sense_type(chip, lun, 3405 SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 3406 rtsx_trace(chip); 3407 return TRANSPORT_FAILED; 3408 } 3409 break; 3410 3411 default: 3412 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 3413 rtsx_trace(chip); 3414 return TRANSPORT_FAILED; 3415 } 3416 3417 scsi_set_resid(srb, 0); 3418 return TRANSPORT_GOOD; 3419 } 3420 #endif 3421 3422 int rtsx_scsi_handler(struct scsi_cmnd *srb, struct rtsx_chip *chip) 3423 { 3424 #ifdef SUPPORT_SD_LOCK 3425 struct sd_info *sd_card = &chip->sd_card; 3426 #endif 3427 struct ms_info *ms_card = &chip->ms_card; 3428 unsigned int lun = SCSI_LUN(srb); 3429 int result; 3430 3431 #ifdef SUPPORT_SD_LOCK 3432 if (sd_card->sd_erase_status) { 3433 /* Block all SCSI command except for 3434 * REQUEST_SENSE and rs_ppstatus 3435 */ 3436 if (!((srb->cmnd[0] == VENDOR_CMND) && 3437 (srb->cmnd[1] == SCSI_APP_CMD) && 3438 (srb->cmnd[2] == GET_DEV_STATUS)) && 3439 (srb->cmnd[0] != REQUEST_SENSE)) { 3440 /* Logical Unit Not Ready Format in Progress */ 3441 set_sense_data(chip, lun, CUR_ERR, 3442 0x02, 0, 0x04, 0x04, 0, 0); 3443 rtsx_trace(chip); 3444 return TRANSPORT_FAILED; 3445 } 3446 } 3447 #endif 3448 3449 if ((get_lun_card(chip, lun) == MS_CARD) && 3450 (ms_card->format_status == FORMAT_IN_PROGRESS)) { 3451 if ((srb->cmnd[0] != REQUEST_SENSE) && 3452 (srb->cmnd[0] != INQUIRY)) { 3453 /* Logical Unit Not Ready Format in Progress */ 3454 set_sense_data(chip, lun, CUR_ERR, 0x02, 0, 0x04, 0x04, 3455 0, (u16)(ms_card->progress)); 3456 rtsx_trace(chip); 3457 return TRANSPORT_FAILED; 3458 } 3459 } 3460 3461 switch (srb->cmnd[0]) { 3462 case READ_10: 3463 case WRITE_10: 3464 case READ_6: 3465 case WRITE_6: 3466 result = read_write(srb, chip); 3467 #if !defined(LED_AUTO_BLINK) && !defined(REGULAR_BLINK) 3468 led_shine(srb, chip); 3469 #endif 3470 break; 3471 3472 case TEST_UNIT_READY: 3473 result = test_unit_ready(srb, chip); 3474 break; 3475 3476 case INQUIRY: 3477 result = inquiry(srb, chip); 3478 break; 3479 3480 case READ_CAPACITY: 3481 result = read_capacity(srb, chip); 3482 break; 3483 3484 case START_STOP: 3485 result = start_stop_unit(srb, chip); 3486 break; 3487 3488 case ALLOW_MEDIUM_REMOVAL: 3489 result = allow_medium_removal(srb, chip); 3490 break; 3491 3492 case REQUEST_SENSE: 3493 result = request_sense(srb, chip); 3494 break; 3495 3496 case MODE_SENSE: 3497 case MODE_SENSE_10: 3498 result = mode_sense(srb, chip); 3499 break; 3500 3501 case 0x23: 3502 result = read_format_capacity(srb, chip); 3503 break; 3504 3505 case VENDOR_CMND: 3506 result = vendor_cmnd(srb, chip); 3507 break; 3508 3509 case MS_SP_CMND: 3510 result = ms_sp_cmnd(srb, chip); 3511 break; 3512 3513 #ifdef SUPPORT_CPRM 3514 case SD_PASS_THRU_MODE: 3515 case SD_EXECUTE_NO_DATA: 3516 case SD_EXECUTE_READ: 3517 case SD_EXECUTE_WRITE: 3518 case SD_GET_RSP: 3519 case SD_HW_RST: 3520 result = sd_extension_cmnd(srb, chip); 3521 break; 3522 #endif 3523 3524 #ifdef SUPPORT_MAGIC_GATE 3525 case CMD_MSPRO_MG_RKEY: 3526 result = mg_report_key(srb, chip); 3527 break; 3528 3529 case CMD_MSPRO_MG_SKEY: 3530 result = mg_send_key(srb, chip); 3531 break; 3532 #endif 3533 3534 case FORMAT_UNIT: 3535 case MODE_SELECT: 3536 case VERIFY: 3537 result = TRANSPORT_GOOD; 3538 break; 3539 3540 default: 3541 set_sense_type(chip, lun, SENSE_TYPE_MEDIA_INVALID_CMD_FIELD); 3542 result = TRANSPORT_FAILED; 3543 } 3544 3545 return result; 3546 } 3547