static void mmc_write_to_cmd_buffer(unsigned char mmcreplay_cmd_char) { /* Check for 0xff sync byte */ if (mmc_cmd_buffer_pointer == 0) { if (mmcreplay_cmd_char < 0xff) { /*LOG(("SPI: NOT write to buffer 1: %04x %02x",mmc_cmd_buffer_pointer,mmcreplay_cmd_char)); */ /* yuck! hack! hack1 */ if (mmcreplay_cmd_char == 0x51) { mmc_cmd_buffer[0] = 0xff; mmc_cmd_buffer_pointer++; } else { return; } } } /* Check for one 0xff sync byte too much */ if (mmc_cmd_buffer_pointer == 1) { if (mmcreplay_cmd_char == 0xff) { mmc_cmd_buffer_pointer = 0; return; } } /*LOG(("SPI: write to buffer: %04x %02x",mmc_cmd_buffer_pointer,mmcreplay_cmd_char));*/ /* Write byte to buffer */ mmc_cmd_buffer[mmc_cmd_buffer_pointer] = mmcreplay_cmd_char; mmc_cmd_buffer_pointer++; #if 0 LOG(("SPI: buffer: %02x %02x %02x %02x %02x %02x %02x %02x", mmc_cmd_buffer[0], mmc_cmd_buffer[1], mmc_cmd_buffer[2], mmc_cmd_buffer[3], mmc_cmd_buffer[4], mmc_cmd_buffer[5], mmc_cmd_buffer[6], mmc_cmd_buffer[7], mmc_cmd_buffer[8], mmc_cmd_buffer[9] )); #endif /* If the buffer is full, execute the buffer and clear it */ if ((mmc_cmd_buffer_pointer > 9) || /* if ((mmc_cmd_buffer_pointer > 8) || */ (mmc_cmd_buffer_pointer > 7 && mmc_cmd_buffer[1] == 0x40) || /* cmd0 */ (mmc_cmd_buffer_pointer > 8 && mmc_cmd_buffer[1] == 0x48) || /* cmd8 */ (mmc_cmd_buffer_pointer > 8 && mmc_cmd_buffer[1] == 0x49) || /* cmd9 */ (mmc_cmd_buffer_pointer > 8 && mmc_cmd_buffer[1] == 0x4a) || /* cmd10 */ (mmc_cmd_buffer_pointer > 8 && mmc_cmd_buffer[1] == 0x50) /* cmd16 */ /* || (mmc_cmd_buffer_pointer > 8 && mmc_cmd_buffer[1] == 0x51) */ /* cmd17 */ ) { mmc_execute_cmd(); mmc_clear_cmd_buffer(); } }
/* Resets the card */ static void mmc_reset_card(void) { spi_mmc_trigger_mode_write(0); spi_mmc_card_selected_write(0); /* mmcreplay_cport = 0; */ /* mmcreplay_speed = 0; */ mmc_card_reset_count = 0; mmc_image_pointer = 0; mmc_block_size = 512; mmc_clear_cmd_buffer(); }