Revision 775616c3 hw/sd.c

b/hw/sd.c
87 87
    int pwd_len;
88 88
    int function_group[6];
89 89

  
90
    int spi;
90 91
    int current_cmd;
91 92
    int blk_written;
92 93
    uint32_t data_start;
......
395 396
    }
396 397
}
397 398

  
398
SDState *sd_init(BlockDriverState *bs)
399
/* We do not model the chip select pin, so allow the board to select
400
   whether card should be in SSI ot MMC/SD mode.  It is also up to the
401
   board to ensure that ssi transfers only occur when the chip select
402
   is asserted.  */
403
SDState *sd_init(BlockDriverState *bs, int is_spi)
399 404
{
400 405
    SDState *sd;
401 406

  
402 407
    sd = (SDState *) qemu_mallocz(sizeof(SDState));
408
    sd->spi = is_spi;
403 409
    sd_reset(sd, bs);
404 410
    bdrv_set_change_cb(sd->bdrv, sd_cardchange, sd);
405 411
    return sd;
......
567 573
    case 0:	/* CMD0:   GO_IDLE_STATE */
568 574
        switch (sd->state) {
569 575
        case sd_inactive_state:
570
            return sd_r0;
576
            return sd->spi ? sd_r1 : sd_r0;
571 577

  
572 578
        default:
573 579
            sd->state = sd_idle_state;
574 580
            sd_reset(sd, sd->bdrv);
575
            return sd_r0;
581
            return sd->spi ? sd_r1 : sd_r0;
576 582
        }
577 583
        break;
578 584

  
585
    case 1:	/* CMD1:   SEND_OP_CMD */
586
        if (!sd->spi)
587
            goto bad_cmd;
588

  
589
        sd->state = sd_transfer_state;
590
        return sd_r1;
591

  
579 592
    case 2:	/* CMD2:   ALL_SEND_CID */
593
        if (sd->spi)
594
            goto bad_cmd;
580 595
        switch (sd->state) {
581 596
        case sd_ready_state:
582 597
            sd->state = sd_identification_state;
......
588 603
        break;
589 604

  
590 605
    case 3:	/* CMD3:   SEND_RELATIVE_ADDR */
606
        if (sd->spi)
607
            goto bad_cmd;
591 608
        switch (sd->state) {
592 609
        case sd_identification_state:
593 610
        case sd_standby_state:
......
601 618
        break;
602 619

  
603 620
    case 4:	/* CMD4:   SEND_DSR */
621
        if (sd->spi)
622
            goto bad_cmd;
604 623
        switch (sd->state) {
605 624
        case sd_standby_state:
606 625
            break;
......
611 630
        break;
612 631

  
613 632
    case 6:	/* CMD6:   SWITCH_FUNCTION */
633
        if (sd->spi)
634
            goto bad_cmd;
614 635
        switch (sd->mode) {
615 636
        case sd_data_transfer_mode:
616 637
            sd_function_switch(sd, req.arg);
......
625 646
        break;
626 647

  
627 648
    case 7:	/* CMD7:   SELECT/DESELECT_CARD */
649
        if (sd->spi)
650
            goto bad_cmd;
628 651
        switch (sd->state) {
629 652
        case sd_standby_state:
630 653
            if (sd->rca != rca)
......
668 691

  
669 692
            return sd_r2_s;
670 693

  
694
        case sd_transfer_state:
695
            if (!sd->spi)
696
                break;
697
            sd->state = sd_sendingdata_state;
698
            memcpy(sd->data, sd->csd, 16);
699
            sd->data_start = req.arg;
700
            sd->data_offset = 0;
701
            return sd_r1;
702

  
671 703
        default:
672 704
            break;
673 705
        }
......
681 713

  
682 714
            return sd_r2_i;
683 715

  
716
        case sd_transfer_state:
717
            if (!sd->spi)
718
                break;
719
            sd->state = sd_sendingdata_state;
720
            memcpy(sd->data, sd->cid, 16);
721
            sd->data_start = req.arg;
722
            sd->data_offset = 0;
723
            return sd_r1;
724

  
684 725
        default:
685 726
            break;
686 727
        }
687 728
        break;
688 729

  
689 730
    case 11:	/* CMD11:  READ_DAT_UNTIL_STOP */
731
        if (sd->spi)
732
            goto bad_cmd;
690 733
        switch (sd->state) {
691 734
        case sd_transfer_state:
692 735
            sd->state = sd_sendingdata_state;
......
733 776
        break;
734 777

  
735 778
    case 15:	/* CMD15:  GO_INACTIVE_STATE */
779
        if (sd->spi)
780
            goto bad_cmd;
736 781
        switch (sd->mode) {
737 782
        case sd_data_transfer_mode:
738 783
            if (sd->rca != rca)
......
796 841

  
797 842
    /* Block write commands (Class 4) */
798 843
    case 24:	/* CMD24:  WRITE_SINGLE_BLOCK */
844
        if (sd->spi)
845
            goto unimplemented_cmd;
799 846
        switch (sd->state) {
800 847
        case sd_transfer_state:
848
            /* Writing in SPI mode not implemented.  */
849
            if (sd->spi)
850
                break;
801 851
            sd->state = sd_receivingdata_state;
802 852
            sd->data_start = req.arg;
803 853
            sd->data_offset = 0;
......
817 867
        break;
818 868

  
819 869
    case 25:	/* CMD25:  WRITE_MULTIPLE_BLOCK */
870
        if (sd->spi)
871
            goto unimplemented_cmd;
820 872
        switch (sd->state) {
821 873
        case sd_transfer_state:
874
            /* Writing in SPI mode not implemented.  */
875
            if (sd->spi)
876
                break;
822 877
            sd->state = sd_receivingdata_state;
823 878
            sd->data_start = req.arg;
824 879
            sd->data_offset = 0;
......
838 893
        break;
839 894

  
840 895
    case 26:	/* CMD26:  PROGRAM_CID */
896
        if (sd->spi)
897
            goto bad_cmd;
841 898
        switch (sd->state) {
842 899
        case sd_transfer_state:
843 900
            sd->state = sd_receivingdata_state;
......
851 908
        break;
852 909

  
853 910
    case 27:	/* CMD27:  PROGRAM_CSD */
911
        if (sd->spi)
912
            goto unimplemented_cmd;
854 913
        switch (sd->state) {
855 914
        case sd_transfer_state:
856 915
            sd->state = sd_receivingdata_state;
......
962 1021

  
963 1022
    /* Lock card commands (Class 7) */
964 1023
    case 42:	/* CMD42:  LOCK_UNLOCK */
1024
        if (sd->spi)
1025
            goto unimplemented_cmd;
965 1026
        switch (sd->state) {
966 1027
        case sd_transfer_state:
967 1028
            sd->state = sd_receivingdata_state;
......
1000 1061
        break;
1001 1062

  
1002 1063
    default:
1064
    bad_cmd:
1003 1065
        sd->card_status |= ILLEGAL_COMMAND;
1004 1066

  
1005 1067
        printf("SD: Unknown CMD%i\n", req.cmd);
1006 1068
        return sd_r0;
1069

  
1070
    unimplemented_cmd:
1071
        /* Commands that are recognised but not yet implemented in SPI mode.  */
1072
        sd->card_status |= ILLEGAL_COMMAND;
1073
        printf ("SD: CMD%i not implemented in SPI mode\n", req.cmd);
1074
        return sd_r0;
1007 1075
    }
1008 1076

  
1009 1077
    sd->card_status |= ILLEGAL_COMMAND;
......
1069 1137
        break;
1070 1138

  
1071 1139
    case 41:	/* ACMD41: SD_APP_OP_COND */
1140
        if (sd->spi) {
1141
            /* SEND_OP_CMD */
1142
            sd->state = sd_transfer_state;
1143
            return sd_r1;
1144
        }
1072 1145
        switch (sd->state) {
1073 1146
        case sd_idle_state:
1074 1147
            /* We accept any voltage.  10000 V is nothing.  */
......
1414 1487
            sd->state = sd_transfer_state;
1415 1488
        break;
1416 1489

  
1490
    case 9:	/* CMD9:   SEND_CSD */
1491
    case 10:	/* CMD10:  SEND_CID */
1492
        ret = sd->data[sd->data_offset ++];
1493

  
1494
        if (sd->data_offset >= 16)
1495
            sd->state = sd_transfer_state;
1496
        break;
1497

  
1417 1498
    case 11:	/* CMD11:  READ_DAT_UNTIL_STOP */
1418 1499
        if (sd->data_offset == 0)
1419 1500
            BLK_READ_BLOCK(sd->data_start, sd->blk_len);

Also available in: Unified diff