Subversion Repositories freemyipod

Rev

Rev 738 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 738 Rev 813
Line 22... Line 22...
22
#include "thread.h"
22
#include "thread.h"
23
#include "disk.h"
23
#include "disk.h"
24
#include "storage.h"
24
#include "storage.h"
25
#include "storage_ata-target.h"
25
#include "storage_ata-target.h"
26
#include "timer.h"
26
#include "timer.h"
-
 
27
#include "malloc.h"
27
#include "constants/mmc.h"
28
#include "constants/mmc.h"
28
#include "../ipodnano3g/s5l8702.h"
29
#include "../ipodnano3g/s5l8702.h"
29
 
30
 
30
 
31
 
31
#ifndef ATA_RETRIES
32
#ifndef ATA_RETRIES
Line 472... Line 473...
472
    if (write)
473
    if (write)
473
    {
474
    {
474
        cmdtype = SDCI_CMD_CMD_TYPE_ADTC | SDCI_CMD_CMD_RD_WR;
475
        cmdtype = SDCI_CMD_CMD_TYPE_ADTC | SDCI_CMD_CMD_RD_WR;
475
        responsetype = SDCI_CMD_RES_TYPE_R1 | SDCI_CMD_RES_BUSY;
476
        responsetype = SDCI_CMD_RES_TYPE_R1 | SDCI_CMD_RES_BUSY;
476
        direction = MMC_CMD_CEATA_RW_MULTIPLE_BLOCK_DIRECTION_WRITE;
477
        direction = MMC_CMD_CEATA_RW_MULTIPLE_BLOCK_DIRECTION_WRITE;
-
 
478
        clean_dcache();
477
    }
479
    }
478
    else
480
    else
479
    {
481
    {
480
        cmdtype = SDCI_CMD_CMD_TYPE_ADTC;
482
        cmdtype = SDCI_CMD_CMD_TYPE_ADTC;
481
        responsetype = SDCI_CMD_RES_TYPE_R1;
483
        responsetype = SDCI_CMD_RES_TYPE_R1;
482
        direction = MMC_CMD_CEATA_RW_MULTIPLE_BLOCK_DIRECTION_READ;
484
        direction = MMC_CMD_CEATA_RW_MULTIPLE_BLOCK_DIRECTION_READ;
-
 
485
        invalidate_dcache();
483
    }
486
    }
484
    SDCI_DMASIZE = 0x200;
487
    SDCI_DMASIZE = 0x200;
485
    SDCI_DMAADDR = buf;
488
    SDCI_DMAADDR = buf;
486
    SDCI_DMACOUNT = count;
489
    SDCI_DMACOUNT = count;
487
    SDCI_DCTRL = SDCI_DCTRL_TXFIFORST | SDCI_DCTRL_RXFIFORST;
490
    SDCI_DCTRL = SDCI_DCTRL_TXFIFORST | SDCI_DCTRL_RXFIFORST;
488
    invalidate_dcache();
-
 
489
    PASS_RC(mmc_send_command(SDCI_CMD_CMD_NUM(MMC_CMD_CEATA_RW_MULTIPLE_BLOCK)
491
    PASS_RC(mmc_send_command(SDCI_CMD_CMD_NUM(MMC_CMD_CEATA_RW_MULTIPLE_BLOCK)
490
                           | SDCI_CMD_CMD_TYPE_ADTC | cmdtype | responsetype
492
                           | SDCI_CMD_CMD_TYPE_ADTC | cmdtype | responsetype
491
                           | SDCI_CMD_RES_SIZE_48 | SDCI_CMD_NCR_NID_NCR,
493
                           | SDCI_CMD_RES_SIZE_48 | SDCI_CMD_NCR_NID_NCR,
492
                             direction | MMC_CMD_CEATA_RW_MULTIPLE_BLOCK_COUNT(count),
494
                             direction | MMC_CMD_CEATA_RW_MULTIPLE_BLOCK_COUNT(count),
493
                             NULL, CEATA_COMMAND_TIMEOUT), 4, 0);
495
                             NULL, CEATA_COMMAND_TIMEOUT), 4, 0);
Line 744... Line 746...
744
        if (ata_dma)
746
        if (ata_dma)
745
        {
747
        {
746
            PASS_RC(ata_wait_for_start_of_transfer(500000), 2, 1);
748
            PASS_RC(ata_wait_for_start_of_transfer(500000), 2, 1);
747
            if (write)
749
            if (write)
748
            {
750
            {
-
 
751
                clean_dcache();
749
                ATA_SBUF_START = buffer;
752
                ATA_SBUF_START = buffer;
750
                ATA_SBUF_SIZE = SECTOR_SIZE * cnt;
753
                ATA_SBUF_SIZE = SECTOR_SIZE * cnt;
751
                ATA_CFG |= BIT(4);
754
                ATA_CFG |= BIT(4);
752
            }
755
            }
753
            else
756
            else
754
            {
757
            {
-
 
758
                invalidate_dcache();
755
                ATA_TBUF_START = buffer;
759
                ATA_TBUF_START = buffer;
756
                ATA_TBUF_SIZE = SECTOR_SIZE * cnt;
760
                ATA_TBUF_SIZE = SECTOR_SIZE * cnt;
757
                ATA_CFG &= ~BIT(4);
761
                ATA_CFG &= ~BIT(4);
758
            }
762
            }
759
            ATA_XFR_NUM = SECTOR_SIZE * cnt - 1;
763
            ATA_XFR_NUM = SECTOR_SIZE * cnt - 1;