From 6386e78c5b6c7717805dae786f09d8988b362c64 Mon Sep 17 00:00:00 2001 From: pvvx Date: Tue, 11 Jul 2017 14:51:06 +0300 Subject: [PATCH] update --- .cproject | 2 +- .../sdio/realtek/sdio_host/src/sdio_host.c | 3 +- .../file_system/fatfs/disk_if/inc/sdcard.h | 2 +- .../file_system/fatfs/disk_if/inc/usbdisk.h | 2 +- .../soc/realtek/8195a/fwlib/bitband_io.h | 7 + .../soc/realtek/8195a/fwlib/hal_sdio_host.h | 36 +- .../8195a/fwlib/rtl8195a/rtl8195a_sdio_host.h | 16 +- .../fwlib/rtl8195a/src/rtl8195a_sdio_host.c | 955 +++++++++--------- .../misc/bsp/lib/common/GCC/lib_sdcard.a | Bin 77138 -> 148954 bytes .../misc/bsp/lib/common/GCC/lib_sdcard_v2.a | Bin 150004 -> 77174 bytes USDK/sdkset.mk | 5 +- project.mk | 11 +- project/src/console/sd_fat.c | 70 +- 13 files changed, 596 insertions(+), 513 deletions(-) diff --git a/.cproject b/.cproject index 23d9a73..8f85a2c 100644 --- a/.cproject +++ b/.cproject @@ -644,7 +644,7 @@ mingw32-make.exe - -s -j 4 + -s -j 2 all true false diff --git a/USDK/component/common/drivers/sdio/realtek/sdio_host/src/sdio_host.c b/USDK/component/common/drivers/sdio/realtek/sdio_host/src/sdio_host.c index 8e05b4b..59ae1d7 100644 --- a/USDK/component/common/drivers/sdio/realtek/sdio_host/src/sdio_host.c +++ b/USDK/component/common/drivers/sdio/realtek/sdio_host/src/sdio_host.c @@ -235,6 +235,7 @@ s8 sdio_sd_init(void) { } sdio_status = SDIO_SD_OK; if (HalSdioHostOp.HalSdioHostChangeSdClock(&SdioHostAdapter, +// SD_CLK_20_8MHZ) != HAL_OK) SD_CLK_41_6MHZ) != HAL_OK) DBG_SDIO_INFO("SD card does not support high speed.\n"); } @@ -259,7 +260,7 @@ s8 sdio_sd_setClock(SD_CLK_FREQUENCY SDCLK) { DBG_SDIO_ERR("Malloc ADMA2 table fail.\n"); return -1; } - DBG_SDIO_INFO("SD card set CLK %d Hz\n", PLATFORM_CLOCK/(4<<(SD_CLK_41_6MHZ-SDCLK))); + DBG_SDIO_INFO("SD card set CLK %d Hz\n", PLATFORM_CLOCK/(2 << (SD_CLK_41_6MHZ - SDCLK))); sta = HalSdioHostOp.HalSdioHostChangeSdClock(&SdioHostAdapter, SDCLK); rtw_mfree(padma, sizeof(ADMA2_DESC_FMT)); if (sta) diff --git a/USDK/component/common/file_system/fatfs/disk_if/inc/sdcard.h b/USDK/component/common/file_system/fatfs/disk_if/inc/sdcard.h index a9ed1d8..e4340f9 100644 --- a/USDK/component/common/file_system/fatfs/disk_if/inc/sdcard.h +++ b/USDK/component/common/file_system/fatfs/disk_if/inc/sdcard.h @@ -1,6 +1,6 @@ #ifndef _SDCARD_H_ #define _SDCARD_H_ -#include "fatfs_ext/inc/ff_driver.h" +#include "ff_driver.h" extern ll_diskio_drv SD_disk_Driver; #endif diff --git a/USDK/component/common/file_system/fatfs/disk_if/inc/usbdisk.h b/USDK/component/common/file_system/fatfs/disk_if/inc/usbdisk.h index 023616b..0bd79a6 100644 --- a/USDK/component/common/file_system/fatfs/disk_if/inc/usbdisk.h +++ b/USDK/component/common/file_system/fatfs/disk_if/inc/usbdisk.h @@ -1,7 +1,7 @@ #ifndef _USBDISK_H_ #define _USBDISK_H_ -#include "fatfs_ext/inc/ff_driver.h" +#include "ff_driver.h" extern ll_diskio_drv USB_disk_Driver; #endif diff --git a/USDK/component/soc/realtek/8195a/fwlib/bitband_io.h b/USDK/component/soc/realtek/8195a/fwlib/bitband_io.h index 3fb4c60..45d75c3 100644 --- a/USDK/component/soc/realtek/8195a/fwlib/bitband_io.h +++ b/USDK/component/soc/realtek/8195a/fwlib/bitband_io.h @@ -1,6 +1,7 @@ #ifndef _BITBAND_IO_H_ #define _BITBAND_IO_H_ +#include "PinNames.h" #include "hal_platform.h" #include "hal_api.h" #include "hal_gpio.h" @@ -143,4 +144,10 @@ #define BITBAND_K5 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,25) //Port = 2, bit = 25, K5 #define BITBAND_K6 ucBITBAND_PERI(GPIO_REG_BASE+GPIO_PORTC_DR,26) //Port = 2, bit = 26, K6 +volatile uint8_t * BitBandAddr(void *addr, uint8_t bit); +volatile uint8_t * BitBandPeriAddr(void *addr, uint8_t bit); +volatile uint8_t * GetOutPinBitBandAddr(PinName pin); +volatile uint8_t * GetInPinBitBandAddr(PinName pin); +volatile uint8_t * HardSetPin(PinName pin, HAL_GPIO_PIN_MODE pmode, uint8_t val); + #endif // _BITBAND_IO_H_ diff --git a/USDK/component/soc/realtek/8195a/fwlib/hal_sdio_host.h b/USDK/component/soc/realtek/8195a/fwlib/hal_sdio_host.h index f4f3106..1603e31 100644 --- a/USDK/component/soc/realtek/8195a/fwlib/hal_sdio_host.h +++ b/USDK/component/soc/realtek/8195a/fwlib/hal_sdio_host.h @@ -46,24 +46,24 @@ typedef enum _SDIO_XFER_TYPE_{ }SDIO_XFER_TYPE; typedef struct _HAL_SDIO_HOST_ADAPTER_{ - IRQ_HANDLE IrqHandle; //+0..6(u32) Irq Handler - ADMA2_DESC_FMT *AdmaDescTbl; //+7(u32) - u32 Response[4]; //+8..11(u32) - u32 CardOCR; //+12 - u32 CardStatus; //+13 - u32 IsWriteProtect; //+14 - u8 SdStatus[SD_STATUS_LEN]; //+15.. - u8 Csd[CSD_REG_LEN]; //+31 - volatile u8 CmdCompleteFlg; //+128(u8) - volatile u8 XferCompleteFlg; //+129(u8) - volatile u8 ErrIntFlg; - volatile u8 CardCurState; - u8 IsSdhc; - u8 CurrSdClk; //+133? - u16 RCA; - u16 SdSpecVer; - SDIO_ERR_TYPE errType; - SDIO_XFER_TYPE XferType; + IRQ_HANDLE IrqHandle; //+0.. + ADMA2_DESC_FMT *AdmaDescTbl; //+16 + u32 Response[4]; //+20,24,28,32 + u32 CardOCR; //+36 + u32 CardStatus; //+40 + u32 IsWriteProtect; //+44 + u8 SdStatus[SD_STATUS_LEN]; //+48.. + u8 Csd[CSD_REG_LEN]; //+112.. + volatile u8 CmdCompleteFlg; //+128 + volatile u8 XferCompleteFlg; //+129 + volatile u8 ErrIntFlg; //+130 + volatile u8 CardCurState; //+131 + u8 IsSdhc; //+132 + u8 CurrSdClk; //+133 + u16 RCA; //+134 + u16 SdSpecVer; //+136 + SDIO_ERR_TYPE errType; //+140 + SDIO_XFER_TYPE XferType; //+144 VOID (*XferCompCallback)(VOID *pAdapter); VOID *XferCompCbPara; VOID (*ErrorCallback)(VOID *pAdapter); diff --git a/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sdio_host.h b/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sdio_host.h index 7b3039e..82d3f26 100644 --- a/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sdio_host.h +++ b/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/rtl8195a_sdio_host.h @@ -425,14 +425,14 @@ typedef struct _ADMA2_DESC_FMT_ /* 0x0E */ typedef struct _SDIO_HOST_CMD_FMT_ { - u16 RespType:2; - u16 Rsvd0:1; - u16 CmdCrcChkEn:1; - u16 CmdIdxChkEn:1; - u16 DataPresent:1; - u16 CmdType:2; - u16 CmdIdx:6; - u16 Rsvd1:2; + u16 RespType:2; //bit:0..1 + u16 Rsvd0:1; //bit:2 + u16 CmdCrcChkEn:1; //bit:3 + u16 CmdIdxChkEn:1; //bit:4 + u16 DataPresent:1; //bit:5 + u16 CmdType:2; //bit:6..7 + u16 CmdIdx:6; //bit:8..13 + u16 Rsvd1:2; //bit:14..15 }SDIO_HOST_CMD_FMT, *PSDIO_HOST_CMD_FMT; typedef struct _SDIO_HOST_CMD_ diff --git a/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/src/rtl8195a_sdio_host.c b/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/src/rtl8195a_sdio_host.c index 318be6e..31b22a0 100644 --- a/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/src/rtl8195a_sdio_host.c +++ b/USDK/component/soc/realtek/8195a/fwlib/rtl8195a/src/rtl8195a_sdio_host.c @@ -1,6 +1,7 @@ /* */ #include "rtl8195a.h" +#include "hal_sdio_host.h" #include "rtl8195a_sdio_host.h" //------------------------------------------------------------------------- // Function declarations @@ -11,7 +12,7 @@ void SdioHostSdBusPwrCtrl(uint8_t En, int a2); int SdioHostSdClkCtrl(void *Data, int En, int Divisor); int SdioHostChkDataLineActive(uint32_t Timeout); - int SdioHostChkCmdInhibitCMD(uint32_t Timeout); + int SdioHostChkCmdInhibitCMD(void); //uint32_t Timeout); int SdioHostChkCmdInhibitDAT(uint32_t Timeout); uint32_t SdioHostIsrHandle(void *Data); int HalSdioHostDeInitRtl8195a(void *Data); @@ -69,15 +70,13 @@ HAL_Status SdioHostIsTimeout(u32 StartCount, u32 TimeoutCnt) { //----- SdioHostSendCmd(PSDIO_HOST_CMD) void SdioHostSendCmd(PSDIO_HOST_CMD Cmd) { - u16 reg_cmd = ((*(u8 *) &Cmd->CmdFmt & 0x3B) | (*(u8 *) &Cmd->CmdFmt & 0xC0) - | ((*((u8 *) &Cmd->CmdFmt + 1) & 0x3F) << 8)); HAL_SDIOH_REG32(REG_SDIO_HOST_ARG) = Cmd->Arg; // 40058008 = Cmd->Arg - HAL_SDIOH_REG16(REG_SDIO_HOST_CMD) = reg_cmd; // 4005800E = reg_cmd + HAL_SDIOH_REG16(REG_SDIO_HOST_CMD) = *(u16 *) &Cmd->CmdFmt; // & 0x3FFB; } //----- HAL_Status SdioHostGetResponse(void *Data, int RspType) { - PHAL_SDIO_HOST_ADAPTER psha = Data; + PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; HAL_Status result; if (psha) { @@ -115,7 +114,7 @@ void SdioHostSdBusPwrCtrl(void) { //----- HAL_Status SdioHostSdClkCtrl(void *Data, int En, u8 Divisor) { // SD_CLK_DIVISOR - PHAL_SDIO_HOST_ADAPTER psha = Data; // u8 *v3; // r3@1 v3 = Data; + PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; if (HAL_SDIOH_REG32(REG_SDIO_HOST_PRESENT_STATE) & (PRES_STATE_CMD_INHIBIT_CMD | PRES_STATE_CMD_INHIBIT_DAT)) { return HAL_BUSY; @@ -163,131 +162,52 @@ HAL_Status SdioHostSdClkCtrl(void *Data, int En, u8 Divisor) { // SD_CLK_DIVISOR return HAL_OK; } -//----- SdioHostChkDataLineActive(uint32_t Timeout) -HAL_Status SdioHostChkDataLineActive(uint32_t Timeout) { +#define SD_CHK_TIMEOUT 3225 + +//----- SdioHostChkDataLineActive +HAL_Status SdioHostChkDataLineActive(void) { HAL_Status result; u32 t1 = HalTimerOp.HalTimerReadCount(1); do { if ((HAL_SDIOH_REG32(REG_SDIO_HOST_PRESENT_STATE) & PRES_STATE_DAT_LINE_ACTIVE) == 0) break; - result = SdioHostIsTimeout(t1, 3225); + result = SdioHostIsTimeout(t1, SD_CHK_TIMEOUT); } while (result != HAL_TIMEOUT); return result; } -//----- SdioHostChkCmdInhibitCMD(uint32_t Timeout) -HAL_Status SdioHostChkCmdInhibitCMD(uint32_t Timeout) { +//----- SdioHostChkCmdInhibitCMD +HAL_Status SdioHostChkCmdInhibitCMD(void) { HAL_Status result; u32 t1 = HalTimerOp.HalTimerReadCount(1); do { if ((HAL_SDIOH_REG32(REG_SDIO_HOST_PRESENT_STATE) & PRES_STATE_CMD_INHIBIT_CMD) == 0) break; - result = SdioHostIsTimeout(t1, 3225); + result = SdioHostIsTimeout(t1, SD_CHK_TIMEOUT); } while (result != HAL_TIMEOUT); return result; } -//----- SdioHostChkCmdInhibitDAT(uint32_t Timeout) -int SdioHostChkCmdInhibitDAT(uint32_t Timeout) { +//----- SdioHostChkCmdInhibitDAT +int SdioHostChkCmdInhibitDAT(void) { HAL_Status result; u32 t1 = HalTimerOp.HalTimerReadCount(1); do { if ((HAL_SDIOH_REG32(REG_SDIO_HOST_PRESENT_STATE) & PRES_STATE_CMD_INHIBIT_DAT) == 0) break; - result = SdioHostIsTimeout(t1, 3225); + result = SdioHostIsTimeout(t1, SD_CHK_TIMEOUT); } while (result != HAL_TIMEOUT); return result; } -//----- (0000028C) -------------------------------------------------------- -void SdioHostIsrHandle(void *Data) { - PHAL_SDIO_HOST_ADAPTER psha = Data; - u16 status = HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_STATUS);// v40058030; - - HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_SIG_EN) = 0; - if (status) { - if (status & NOR_INT_STAT_CMD_COMP) - psha->CmdCompleteFlg = 1; - if (status & NOR_INT_STAT_XFER_COMP) { - psha->XferCompleteFlg = 1; - if ((status & NOR_INT_STAT_ERR_INT) == 0) { - if (psha->XferCompCallback) - psha->XferCompCallback(psha->XferCompCbPara); - - } else if (HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) & - ( ERR_INT_STAT_DATA_TIMEOUT - | ERR_INT_STAT_DATA_CRC - | ERR_INT_STAT_DATA_END_BIT)) { -/* - DBG_SDIO_ERR("\r[SDIO Err]XFER CP with ErrIntVal: 0x%04X /0x%04X -- TYPE 0x%02X\n", - status, - HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS), - psha->CmdCompleteFlg?); -*/ - psha->errType = SDIO_ERR_DAT_CRC; - if (psha->ErrorCallback) - psha->ErrorCallback(psha->ErrorCbPara); - } - - } - if (status & NOR_INT_STAT_CARD_INSERT) // 0x40 - { - SdioHostSdClkCtrl(psha, 1, BASE_CLK_DIVIDED_BY_128); // BASE_CLK_DIVIDED_BY_128 - SdioHostSdBusPwrCtrl(); - if (psha->CardInsertCallBack) - psha->CardInsertCallBack(psha->CardInsertCbPara); - } - if (status & NOR_INT_STAT_CARD_REMOVAL) // 0x80 - { - HAL_SDIOH_REG8(REG_SDIO_HOST_PWR_CTRL) &= ~PWR_CTRL_SD_BUS_PWR; - SdioHostSdClkCtrl(psha, 0, BASE_CLK); // BASE_CLK - if (psha->CardRemoveCallBack) - psha->CardRemoveCallBack(psha->CardRemoveCbPara); - } - if (status & NOR_INT_STAT_CARD_INT) // 0x100 ) - { - u16 val = HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_STATUS_EN); - HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_STATUS_EN) = val & (~NOR_INT_STAT_EN_CARD_INT); - DBG_SDIO_ERR("CARD INT: 0x%04X\n", status); - HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_STATUS_EN) = val; - - } - if (status & NOR_INT_STAT_ERR_INT) // 0x8000 ) - { - HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_SIG_EN) = 0; - u16 err = HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS); -/* - DBG_SDIO_ERR("\r[SDIO Err]XFER CP with ErrIntVal: 0x%04X /0x%04X -- TYPE 0x%02X\n", - status, - err, - psha->CmdCompleteFlg?); -*/ - if (psha->CmdCompleteFlg) { - SdioHostErrIntRecovery(psha); - goto ir_end; - } - DiagPrintf("\r[SDIO Err]Read/Write command Error\n"); - - psha->ErrIntFlg = 1; - } - } -ir_end: - HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_SIG_EN) - = NOR_INT_SIG_EN_CMD_COMP - | NOR_INT_SIG_EN_XFER_COMP - | NOR_INT_SIG_EN_CARD_REMOVAL - | NOR_INT_SIG_EN_CARD_INT; // 195; -} - -//----- (00000328) -------------------------------------------------------- +//----- HalSdioHostDeInitRtl8195a HAL_Status HalSdioHostDeInitRtl8195a(IN VOID *Data) { - void *v1; // r5@1 HAL_Status ret; // r4@1 - PHAL_SDIO_HOST_ADAPTER psha = Data; + PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; HAL_SDIOH_REG8(REG_SDIO_HOST_PWR_CTRL) &= ~PWR_CTRL_SD_BUS_PWR; ret = SdioHostSdClkCtrl(psha, 0, BASE_CLK); if (ret == HAL_OK) { @@ -307,13 +227,11 @@ HAL_Status HalSdioHostDeInitRtl8195a(IN VOID *Data) { } return ret; } -// 23DC: using guessed type int VectorIrqDisRtl8195A(u32); -// 23E0: using guessed type int VectorIrqUnRegisterRtl8195A(u32); -// 23E4: using guessed type int HalPinCtrlRtl8195A(u32, u32, u32); -//----- (000003C0) -------------------------------------------------------- +//----- HalSdioHostEnableRtl8195a HAL_Status HalSdioHostEnableRtl8195a(IN VOID *Data) // // PHAL_SDIO_HOST_ADAPTER Data { +// PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; ACTCK_SDIOH_CCTRL(ON); SLPCK_SDIOH_CCTRL(ON); HAL_SDIOH_REG16(REG_SDIO_HOST_CLK_CTRL) |= CLK_CTRL_INTERAL_CLK_EN; @@ -321,7 +239,7 @@ HAL_Status HalSdioHostEnableRtl8195a(IN VOID *Data) // // PHAL_SDIO_HOST_ADAPTER return SdioHostSdClkCtrl(Data, 1, BASE_CLK_DIVIDED_BY_2); } -//----- (000003F8) -------------------------------------------------------- +//----- HalSdioHostDisableRtl8195a HAL_Status HalSdioHostDisableRtl8195a(IN VOID *Data) { int result; // r0@1 @@ -354,7 +272,7 @@ HAL_Status HalSdioHostIrqInitRtl8195a(IN VOID *Data) // PIRQ_HANDLE Data //----- HalSdioHostInitHostRtl8195a HAL_Status HalSdioHostInitHostRtl8195a(IN VOID *Data) { - PHAL_SDIO_HOST_ADAPTER psha = Data; + PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; HAL_WRITE32(PERI_ON_BASE, REG_PESOC_HCI_CLK_CTRL0, HAL_READ32(PERI_ON_BASE, REG_PESOC_HCI_CLK_CTRL0) & (~BIT_SOC_ACTCK_SDIO_DEV_EN)); @@ -406,41 +324,40 @@ HAL_Status HalSdioHostInitHostRtl8195a(IN VOID *Data) { return HAL_TIMEOUT; } } - HAL_SDIOH_REG32(0x1000) |= 0x400); // 40059000 |= 0x400; + HAL_SDIOH_REG32(0x1000) |= 0x400; // 40059000 |= 0x400; if (HAL_SDIOH_REG32(REG_SDIO_HOST_CAPABILITIES) & CAPA_ADMA2_SUPPORT) HAL_SDIOH_REG16(REG_SDIO_HOST_HOST_CTRL) = 0x10; // 32-bit Address ADMA2 is selected HAL_SDIOH_REG8(REG_SDIO_HOST_TIMEOUT_CTRL) = 0x0E; // TMCLK x 2^27 return HAL_OK; } -//----- (00000578) -------------------------------------------------------- +//----- HalSdioHostStopTransferRtl8195a HAL_Status HalSdioHostStopTransferRtl8195a(IN VOID *Data) { - u8 *v2; // r4@1 - int result; // r0@2 - char v4; // r2@4 - uint32_t v5; // r1@4 - signed int v6; // r2@4 - SDIO_HOST_CMD Cmd; // [sp+0h] [bp-10h]@1 + HAL_Status result; + SDIO_HOST_CMD Cmd; + PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; - *(u32 *) &Cmd.CmdFmt = Data; - Cmd.Arg = a2; - PHAL_SDIO_HOST_ADAPTER psha = Data; // v2 = Data; if (psha) { - result = SdioHostChkCmdInhibitCMD((uint32_t) Data); + result = SdioHostChkCmdInhibitCMD(); //(uint32_t) Data); if (result == HAL_OK) { - result = SdioHostChkCmdInhibitDAT(0); + result = SdioHostChkCmdInhibitDAT(); if (result == HAL_OK) { - Cmd.CmdFmt = (SDIO_HOST_CMD_FMT) ((*(u8 *) &Cmd.CmdFmt | 0x1B) - & 0xDF | 0xC0); - v4 = *((u8 *) &Cmd.CmdFmt + 1); - v2[128] = 0; - v2[129] = 0; + + psha->CmdCompleteFlg = 0; + psha->XferType = SDIO_XFER_NOR; + psha->XferCompleteFlg = 0; + + Cmd.CmdFmt.RespType = RSP_LEN_48_CHK_BUSY; + Cmd.CmdFmt.Rsvd0 = 0; + Cmd.CmdFmt.CmdCrcChkEn = 1; + Cmd.CmdFmt.CmdIdxChkEn = 0; + Cmd.CmdFmt.DataPresent = NO_DATA; + Cmd.CmdFmt.CmdType = ABORT; + Cmd.CmdFmt.CmdIdx = CMD_STOP_TRANSMISSION; + Cmd.CmdFmt.Rsvd1 = 0; Cmd.Arg = 0; - *((u8 *) &Cmd.CmdFmt + 1) = v4 & 0xC0 | 0xC; + SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(v2, v5); - if (result == HAL_OK) - result = SdioHostChkXferComplete(v2, 0x1388u, v6); } } } else { @@ -449,13 +366,13 @@ HAL_Status HalSdioHostStopTransferRtl8195a(IN VOID *Data) { return result; } -//----- (000005D8) -------------------------------------------------------- -HAL_Status SdioHostErrIntRecovery(void *Data, int a2, signed int a3) { - PHAL_SDIO_HOST_ADAPTER psha = Data; +//----- SdioHostErrIntRecovery +HAL_Status SdioHostErrIntRecovery(void *Data) { + PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; int t; if (!psha) return HAL_ERR_PARA; - DBG_SDIO_ERR("Recovering error interrupt...\n", a2, a3); + DBG_SDIO_ERR("Recovering error interrupt...\n"); u16 ierr = HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS); // v40058032; if (HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) @@ -522,200 +439,360 @@ HAL_Status SdioHostErrIntRecovery(void *Data, int a2, signed int a3) { DBG_SDIO_ERR("Stop transmission error!\n"); return HAL_ERR_UNKNOWN; } -// 23D4: using guessed type int DiagPrintf(const char *, ...); -// 23F0: using guessed type int HalDelayUs(u32); -//----- (00000748) -------------------------------------------------------- -signed int SdioHostChkXferComplete(void *Data, uint32_t Timeout, signed int a3) { - uint32_t v3; // r6@1 - u8 *v4; // r4@1 - uint32_t v5; // r5@3 - uint32_t v6; // r7@3 - signed int result; // r0@9 +//----- (0000028C) -------------------------------------------------------- +void SdioHostIsrHandle(void *Data) { + PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; + u16 status = HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_STATUS);// v40058030; - v3 = Timeout; - v4 = Data; - if (Data) { - if (Timeout - 1 > 0xFFFFFFFD) { - v6 = 0; - v5 = 0; - } else { - v5 = 1000 * Timeout / 0x1F; - v6 = (*((int (**)(u32)) &HalTimerOp + 2))(1); - } - do { - while (1) { - if (v4[129] && v40058024 & 0x100000) - return 0; - if (v4[130]) - return SdioHostErrIntRecovery(v4, Timeout, a3); - if (!v5) - break; - result = SdioHostIsTimeout(v6, v5); - if (result == 2) - return result; + HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_SIG_EN) = 0; + if (status) { + if (status & NOR_INT_STAT_CMD_COMP) + psha->CmdCompleteFlg = 1; + if (status & NOR_INT_STAT_XFER_COMP) { + psha->XferCompleteFlg = 1; + if ((status & NOR_INT_STAT_ERR_INT) == 0) { + if (psha->XferCompCallback) + psha->XferCompCallback(psha->XferCompCbPara); + + } else if (HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) & + ( ERR_INT_STAT_DATA_TIMEOUT + | ERR_INT_STAT_DATA_CRC + | ERR_INT_STAT_DATA_END_BIT)) { + DBG_SDIO_ERR("\r[SDIO Err]XFER CP with ErrIntVal: 0x%04X /0x%04X -- TYPE 0x%02X\n", + status, + HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS), + psha->XferType); + psha->errType = SDIO_ERR_DAT_CRC; + if (psha->ErrorCallback) + psha->ErrorCallback(psha->ErrorCbPara); } - } while (v3); - result = 1; + + } + if (status & NOR_INT_STAT_CARD_INSERT) // 0x40 + { + SdioHostSdClkCtrl(psha, 1, BASE_CLK_DIVIDED_BY_128); // BASE_CLK_DIVIDED_BY_128 + SdioHostSdBusPwrCtrl(); + if (psha->CardInsertCallBack) + psha->CardInsertCallBack(psha->CardInsertCbPara); + } + if (status & NOR_INT_STAT_CARD_REMOVAL) // 0x80 + { + HAL_SDIOH_REG8(REG_SDIO_HOST_PWR_CTRL) &= ~PWR_CTRL_SD_BUS_PWR; + SdioHostSdClkCtrl(psha, 0, BASE_CLK); // BASE_CLK + if (psha->CardRemoveCallBack) + psha->CardRemoveCallBack(psha->CardRemoveCbPara); + } + if (status & NOR_INT_STAT_CARD_INT) // 0x100 ) + { + u16 val = HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_STATUS_EN); + HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_STATUS_EN) = val & (~NOR_INT_STAT_EN_CARD_INT); + DBG_SDIO_ERR("CARD INT: 0x%04X\n", status); + HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_STATUS_EN) = val; + + } + if (status & NOR_INT_STAT_ERR_INT) // 0x8000 ) + { + HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_SIG_EN) = 0; + u16 err = HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS); + + DBG_SDIO_ERR("\r[SDIO Err]XFER CP with ErrIntVal: 0x%04X /0x%04X -- TYPE 0x%02X\n", + status, + err, + psha->CmdCompleteFlg); + + if (psha->CmdCompleteFlg) { + SdioHostErrIntRecovery(psha); + goto ir_end; + } + DiagPrintf("\r[SDIO Err]Read/Write command Error\n"); + + psha->ErrIntFlg = 1; + } + } +ir_end: + HAL_SDIOH_REG16(REG_SDIO_HOST_NORMAL_INT_SIG_EN) + = NOR_INT_SIG_EN_CMD_COMP + | NOR_INT_SIG_EN_XFER_COMP + | NOR_INT_SIG_EN_CARD_REMOVAL + | NOR_INT_SIG_EN_CARD_INT; // 195; +} + +//----- SdioHostChkCmdComplete +HAL_Status SdioHostChkCmdComplete(void *Data, uint32_t Timeout) { +{ + PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; + uint32_t TimeoutCnt; + uint32_t StartCount; + HAL_Status result; + + + if (psha) { + if (Timeout == SDIO_HOST_WAIT_FOREVER) { + StartCount = 0; + TimeoutCnt = 0; + } else { + TimeoutCnt = 1000 * Timeout / 31; + StartCount = HalTimerOp.HalTimerReadCount(1); // v6 = (*((int (**)(u32)) &HalTimerOp + 2))(1); + } + while(psha->CmdCompleteFlg == 0) { + if(psha->ErrIntFlg) + return SdioHostErrIntRecovery(psha); + if(TimeoutCnt) { + result = SdioHostIsTimeout(StartCount, TimeoutCnt); + if (result == HAL_TIMEOUT) + return result; + } else if(Timeout == 0) { + result = HAL_BUSY; + return result; + } + } + result = HAL_OK; + } else + result = HAL_ERR_PARA; + return result; +} + +//----- SdioHostGetCSD +HAL_Status SdioHostGetCSD(void *Data) +{ + PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; + HAL_Status result; + SDIO_HOST_CMD Cmd; + + if (psha) { + result = SdioHostChkCmdInhibitCMD(); + if (result == HAL_OK) { + + Cmd.CmdFmt.RespType = RSP_LEN_136; + Cmd.CmdFmt.Rsvd0 = 0; + Cmd.CmdFmt.CmdCrcChkEn = 1; + Cmd.CmdFmt.CmdIdxChkEn = 0; + Cmd.CmdFmt.DataPresent = NO_DATA; + Cmd.CmdFmt.CmdType = NORMAL; + Cmd.CmdFmt.CmdIdx = CMD_SEND_CSD; + Cmd.CmdFmt.Rsvd1 = 0; + Cmd.Arg = psha->RCA << 16; + + psha->CmdCompleteFlg = 0; + psha->XferType = 0; + + SdioHostSendCmd(&Cmd); + result = SdioHostChkCmdComplete(psha, 50); + if(result == HAL_OK) { + SdioHostGetResponse(psha, Cmd.CmdFmt.RespType); + psha->Csd[15] = 1; + uint32 x = psha->Response[3]; + psha->Csd[0] = x >> 16; + psha->Csd[1] = x >> 8; + psha->Csd[2] = x; + x = psha->Response[2]; + psha->Csd[3] = x >> 24; + psha->Csd[4] = x >> 16; + psha->Csd[5] = x >> 8; + psha->Csd[6] = x; + x = psha->Response[1]; + psha->Csd[7] = x >> 24; + psha->Csd[8] = x >> 16; + psha->Csd[9] = x >> 8; + psha->Csd[10] = x; + x = psha->Response[0]; + psha->Csd[11] = x >> 24; + psha->Csd[12] = x >> 16; + psha->Csd[13] = x >> 8; + psha->Csd[14] = x; + } + } + } else + result = HAL_ERR_PARA; + return result; +} + +//----- SdioHostChkXferComplete +HAL_Status SdioHostChkXferComplete(void *Data) +{ + PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; + uint32_t StartCount; + HAL_Status result; + if (psha) { + StartCount = HalTimerOp.HalTimerReadCount(1); + while(psha->XferCompleteFlg == 0 + && (HAL_SDIOH_REG32(REG_SDIO_HOST_PRESENT_STATE) + & PRES_STATE_DAT0_SIGNAL_LEVEL) == 0) { + if(psha->ErrIntFlg) + return SdioHostErrIntRecovery(psha); + result = SdioHostIsTimeout(StartCount, 161290); + if (result == HAL_TIMEOUT) + return result; + } + result = HAL_OK; } else { - result = 3; + result = HAL_ERR_PARA; } return result; } -//----- (000007C4) -------------------------------------------------------- -signed int SdioHostChkCmdComplete(void *Data, uint32_t Timeout) { - void *v2; // r4@1 - int v3; // r1@2 - signed int v4; // r2@2 - uint32_t v5; // r5@2 - signed int result; // r0@5 - - v2 = Data; - if (Data) { - v5 = (*((int (**)(u32, u32)) &HalTimerOp + 2))(1, Timeout); - while (!*((u8 *) v2 + 128)) { - if (*((u8 *) v2 + 130)) - return SdioHostErrIntRecovery(v2, v3, v4); - result = SdioHostIsTimeout(v5, 1612); - if (result == 2) - return result; - } - result = 0; - } else - result = 3; - - return result; -} - -//----- (0000080C) -------------------------------------------------------- -int SdioHostCardSelection(void *Data, int Select, int a3) { - u8 *v3; // r4@1 - int result; // r0@3 - char v5; // r3@5 - int v6; // r3@5 - uint32_t v7; // r1@5 - signed int v8; // r2@5 - signed int v9; // r5@6 - char v10; // r3@11 - uint32_t v11; // r1@11 +//----- SdioHostCardSelection +HAL_Status SdioHostCardSelection(void *Data, int Select) { + PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; + HAL_Status result; SDIO_HOST_CMD Cmd; // [sp+0h] [bp-18h]@1 - int v13; // [sp+8h] [bp-10h]@1 - *(u32 *) &Cmd.CmdFmt = Data; - Cmd.Arg = Select; - v13 = a3; - v3 = Data; - if (Data) { - if (Select == 1) { - result = SdioHostChkCmdInhibitCMD((uint32_t) Data); - if (!result) { + if (psha) { + result = SdioHostChkCmdInhibitCMD(); + if (result == HAL_OK) { + psha->CmdCompleteFlg = 0; + psha->XferType = SDIO_XFER_NOR; + psha->XferCompleteFlg = 0; + + if (Select == 1) { result = SdioHostChkCmdInhibitDAT(0); - if (!result) { - Cmd.CmdFmt = (SDIO_HOST_CMD_FMT) ((*(u8 *) &Cmd.CmdFmt - | 0x1B) & 0x1F); - v5 = *((u8 *) &Cmd.CmdFmt + 1); - v3[128] = 0; - *((u8 *) &Cmd.CmdFmt + 1) = v5 & 0xC0 | 7; - v6 = *((u16 *) v3 + 67); - v3[129] = 0; - Cmd.Arg = v6 << 16; + if (result == HAL_OK) { + + Cmd.CmdFmt.RespType = RSP_LEN_48_CHK_BUSY; + Cmd.CmdFmt.Rsvd0 = 0; + Cmd.CmdFmt.CmdCrcChkEn = 1; + Cmd.CmdFmt.CmdIdxChkEn = 1; + Cmd.CmdFmt.DataPresent = NO_DATA; + Cmd.CmdFmt.CmdType = NORMAL; + Cmd.CmdFmt.CmdIdx = CMD_SELECT_DESELECT_CARD; + Cmd.CmdFmt.Rsvd1 = 0; + Cmd.Arg = psha->RCA << 16; + + SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(v3, v7); - if (!result) { - v9 = SdioHostChkXferComplete(v3, 0x1388u, v8); - if (v9 - || (SdioHostGetResponse(v3, - *(u8 *) &Cmd.CmdFmt & 3), v3[24] == 7)) { - result = v9; - } else { + result = SdioHostChkCmdComplete(psha, 50); + if(result == HAL_OK) { + result = SdioHostChkXferComplete(psha); + if(result != HAL_OK) return result; + result = SdioHostGetResponse(psha, Cmd.CmdFmt.RespType); + if(result != HAL_OK) return result; + if((uint8)psha->Response[1] != 7) return result; + else { DBG_SDIO_ERR("Command index error!\n"); - result = 238; + result = HAL_ERR_UNKNOWN; } } } - } - } else { - result = SdioHostChkCmdInhibitCMD((uint32_t) Data); - if (!result) { - *(u8 *) &Cmd.CmdFmt &= 4u; - v10 = *((u8 *) &Cmd.CmdFmt + 1); - v3[128] = 0; - Cmd.Arg = 0; - *((u8 *) &Cmd.CmdFmt + 1) = v10 & 0xC0 | 7; + } else { + + Cmd.CmdFmt.RespType = NO_RSP; + Cmd.CmdFmt.Rsvd0 = 0; + Cmd.CmdFmt.CmdCrcChkEn = 0; + Cmd.CmdFmt.CmdIdxChkEn = 0; + Cmd.CmdFmt.DataPresent = NO_DATA; + Cmd.CmdFmt.CmdType = NORMAL; + Cmd.CmdFmt.CmdIdx = CMD_SELECT_DESELECT_CARD; + Cmd.CmdFmt.Rsvd1 = 0; + Cmd.Arg = psha->RCA << 16; + + SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(v3, v11); + result = SdioHostChkCmdComplete(psha, 50); } } - } else { + } else result = HAL_ERR_PARA; + return result; +} + + + + + + + + + + + + + + + + + + + + + +//----- (00000D34) -------------------------------------------------------- +HAL_Status SdioHostSwitchFunction(void *Data, int Mode, int Fn2Sel, int Fn1Sel, + uint8_t *StatusBuf) +{ + PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; + HAL_Status result; // r0@3 + SDIO_HOST_CMD Cmd; // [sp+0h] [bp-20h]@1 + + u8 *v5; // r4@1 + uint32_t v6; // r0@1 + int v7; // r5@1 + int v8; // r6@1 + char v9; // r7@3 + char v11; // r3@5 + uint32_t v12; // r1@5 + signed int v13; // r2@6 + uint32_t v14; // r1@6 + + + int v16; // [sp+8h] [bp-18h]@1 + + *(u32 *) &Cmd.CmdFmt = Data; + Cmd.Arg = Mode; + v16 = Fn2Sel; + v5 = Data; + v6 = *((u32 *) Data + 4); + v7 = Mode; + v8 = Fn2Sel; + if (!v6 || ((u8) Fn1Sel | (u8) v6) & 3) { result = 3; + } else { + HAL_SDIOH_REG32(REG_SDIO_HOST_ADMA_SYS_ADDR) = (uint32)psha->AdmaDescTbl; // v40058058 = v6; + HAL_SDIOH_REG16(REG_SDIO_HOST_BLK_SIZE) = 64; // v40058004 = 64; + HAL_SDIOH_REG32(REG_SDIO_HOST_XFER_MODE) = XFER_MODE_DATA_XFER_DIR | XFER_MODE_DMA_EN; // v4005800C = 17; + + v9 = *(u8 *) v6; + *(u16 *) (v6 + 2) = 64; + *(u8 *) v6 = ((v9 | 3) & 0xFB | 4 * ((Fn1Sel | v6) & 1)) & 0xEF + | 16 * ((Fn1Sel | v6) & 1) | 0x20; + *(u32 *) (v6 + 4) = Fn1Sel; + result = SdioHostChkCmdInhibitCMD();//v6); + if (!result) { + result = SdioHostChkDataLineActive(); + if (result == HAL_OK) { + Cmd.CmdFmt = (SDIO_HOST_CMD_FMT) ((*(u8 *) &Cmd.CmdFmt & 0xF4 + | 0x3A) & 0x3F); + v11 = *((u8 *) &Cmd.CmdFmt + 1); + v5[128] = 0; + *((u8 *) &Cmd.CmdFmt + 1) = v11 & 0xC0 | 6; + v5[129] = 0; + Cmd.Arg = v8 | 0xFFFFF0 | (v7 << 31); + SdioHostSendCmd(&Cmd); + result = SdioHostChkCmdComplete(v5);//, v12); + if (!result) { + SdioHostGetResponse(v5, *(u8 *) &Cmd.CmdFmt & 3); + result = SdioHostChkXferComplete(v5, 0x1388u, v13); + if (result) { + if (result != 16) { + if (HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) & ERR_INT_STAT_ADMA) { + HAL_SDIOH_REG16(REG_SDIO_HOST_ERROR_INT_STATUS) = ERR_INT_STAT_ADMA; + if (HalSdioHostStopTransferRtl8195a(psha)) { + DBG_SDIO_ERR("Stop transmission error!\n"); + } + } + } + result = 238; + } + } + } + } } return result; } -// 23D4: using guessed type int DiagPrintf(const char *, ...); -//----- (000008FC) -------------------------------------------------------- -int SdioHostGetCSD(void *Data, uint32_t a2) { - void *v2; // r4@1 - int result; // r0@2 - int v4; // r3@3 - uint32_t v5; // r1@3 - signed int v6; // r6@3 - unsigned int v7; // r3@4 - unsigned int v8; // r2@4 - unsigned int v9; // r3@4 - unsigned int v10; // r2@4 - unsigned int v11; // r3@4 - unsigned int v12; // r2@4 - unsigned int v13; // r3@4 - SDIO_HOST_CMD Cmd; // [sp+0h] [bp-18h]@1 - *(u32 *) &Cmd.CmdFmt = Data; - Cmd.Arg = a2; - v2 = Data; - if (Data) { - result = SdioHostChkCmdInhibitCMD((uint32_t) Data); - if (!result) { - Cmd.CmdFmt = (SDIO_HOST_CMD_FMT) ((*(u8 *) &Cmd.CmdFmt & 0xFC | 9) - & 0xF); - *((u8 *) &Cmd.CmdFmt + 1) = *((u8 *) &Cmd.CmdFmt + 1) & 0xC0 | 9; - v4 = *((u16 *) v2 + 67); - *((u8 *) v2 + 128) = 0; - Cmd.Arg = v4 << 16; - SdioHostSendCmd(&Cmd); - v6 = SdioHostChkCmdComplete(v2, v5); - if (!v6) { - SdioHostGetResponse(v2, *(u8 *) &Cmd.CmdFmt & 3); - v7 = *((u32 *) v2 + 8); - *((u8 *) v2 + 127) = 1; - *((u8 *) v2 + 112) = v7 >> 16; - *((u8 *) v2 + 114) = v7; - v8 = v7 >> 8; - v9 = *((u32 *) v2 + 7); - *((u8 *) v2 + 113) = v8; - *((u8 *) v2 + 115) = BYTE3(v9); - *((u8 *) v2 + 116) = v9 >> 16; - *((u8 *) v2 + 118) = v9; - v10 = v9 >> 8; - v11 = *((u32 *) v2 + 6); - *((u8 *) v2 + 117) = v10; - *((u8 *) v2 + 119) = BYTE3(v11); - *((u8 *) v2 + 120) = v11 >> 16; - *((u8 *) v2 + 122) = v11; - v12 = v11 >> 8; - v13 = *((u32 *) v2 + 5); - *((u8 *) v2 + 121) = v12; - *((u8 *) v2 + 123) = BYTE3(v13); - *((u8 *) v2 + 124) = v13 >> 16; - *((u8 *) v2 + 125) = BYTE1(v13); - *((u8 *) v2 + 126) = v13; - } - result = v6; - } else - result = 3; - return result; - } -} + + + //----- (000009CC) -------------------------------------------------------- HAL_Status HalSdioHostReadBlocksDmaRtl8195a(IN VOID *Data, IN u64 ReadAddr, IN u32 BlockCnt) { @@ -755,7 +832,7 @@ IN u32 BlockCnt) { if (BlockCnt != 1) break; v4005800C = 17; - LABEL_18: result = SdioHostChkCmdInhibitCMD(result); + LABEL_18: result = SdioHostChkCmdInhibitCMD();//result); if (result) return result; result = SdioHostChkDataLineActive(0); @@ -770,7 +847,7 @@ IN u32 BlockCnt) { *((u8 *) &Cmd.CmdFmt + 1) = v12 & 0xC0 | 0x11; Cmd.Arg = v4; SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete((void *) v5, v13); + result = SdioHostChkCmdComplete((void *) v5);//, v13); if (result) goto LABEL_21; SdioHostGetResponse((void *) v5, *(u8 *) &Cmd.CmdFmt & 3); @@ -794,7 +871,7 @@ IN u32 BlockCnt) { v4005800C = 55; if (BlockCnta <= 1) goto LABEL_18; - result = SdioHostChkCmdInhibitCMD(result); + result = SdioHostChkCmdInhibitCMD();//result); if (result) return result; result = SdioHostChkDataLineActive(0); @@ -809,7 +886,7 @@ IN u32 BlockCnt) { *((u8 *) &Cmd.CmdFmt + 1) = v7 & 0xC0 | 0x12; Cmd.Arg = v4; SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete((void *) v5, v8); + result = SdioHostChkCmdComplete((void *) v5);//, v8); if (!result) { SdioHostGetResponse((void *) v5, *(u8 *) &Cmd.CmdFmt & 3); result = SdioHostChkXferComplete((void *) v5, 0x1388u, v9); @@ -834,7 +911,7 @@ IN u32 BlockCnt) { HAL_Status HalSdioHostWriteBlocksDmaRtl8195a(IN VOID *Data, IN u64 WriteAddr, IN u32 BlockCnt) { - + PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; PHAL_SDIO_HOST_ADAPTER pSdioHostAdapter = (PHAL_SDIO_HOST_ADAPTER) Data; //int v5; // r6@1 uint32_t sec_count; // v4; // r4@1 @@ -886,7 +963,7 @@ IN u32 BlockCnt) { if (BlockCnt > 1) break; - LABEL_23: result = SdioHostChkCmdInhibitCMD(result); + LABEL_23: result = SdioHostChkCmdInhibitCMD();//result); if (result != HAL_OK) return result; result = SdioHostChkDataLineActive(0); @@ -901,7 +978,7 @@ IN u32 BlockCnt) { *((u8 *) &Cmd.CmdFmt + 1) = v10 & 0xC0 | 0x18; Cmd.Arg = sec_count; SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete((void *) v5, v11); + result = SdioHostChkCmdComplete((void *) v5);//, v11); if (result) goto LABEL_26; SdioHostGetResponse((void *) pSdioHostAdapter, @@ -928,7 +1005,7 @@ IN u32 BlockCnt) { return 238; } } - result = SdioHostChkCmdInhibitCMD(result); + result = SdioHostChkCmdInhibitCMD();//result); if (result != HAL_OK) return result; result = SdioHostChkDataLineActive(0); @@ -943,7 +1020,7 @@ IN u32 BlockCnt) { *((u8 *) &Cmd.CmdFmt + 1) = v7 & 0xC0 | 0x19; Cmd.Arg = sec_count; SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete((void *) v5, v8); + result = SdioHostChkCmdComplete((void *) v5);//, v8); if (!result) { SdioHostGetResponse((void *) pSdioHostAdapter, *(u8 *) &Cmd.CmdFmt & 3); @@ -969,73 +1046,6 @@ IN u32 BlockCnt) { } // 23D4: using guessed type int DiagPrintf(const char *, ...); -//----- (00000D34) -------------------------------------------------------- -int SdioHostSwitchFunction(void *Data, int Mode, int Fn2Sel, int Fn1Sel, - uint8_t *StatusBuf) { - u8 *v5; // r4@1 - uint32_t v6; // r0@1 - int v7; // r5@1 - int v8; // r6@1 - char v9; // r7@3 - int result; // r0@3 - char v11; // r3@5 - uint32_t v12; // r1@5 - signed int v13; // r2@6 - uint32_t v14; // r1@6 - SDIO_HOST_CMD Cmd; // [sp+0h] [bp-20h]@1 - int v16; // [sp+8h] [bp-18h]@1 - - *(u32 *) &Cmd.CmdFmt = Data; - Cmd.Arg = Mode; - v16 = Fn2Sel; - v5 = Data; - v6 = *((u32 *) Data + 4); - v7 = Mode; - v8 = Fn2Sel; - if (!v6 || ((u8) Fn1Sel | (u8) v6) & 3) { - result = 3; - } else { - v40058058 = v6; - v40058004 = 64; - v4005800C = 17; - v9 = *(u8 *) v6; - *(u16 *) (v6 + 2) = 64; - *(u8 *) v6 = ((v9 | 3) & 0xFB | 4 * ((Fn1Sel | v6) & 1)) & 0xEF - | 16 * ((Fn1Sel | v6) & 1) | 0x20; - *(u32 *) (v6 + 4) = Fn1Sel; - result = SdioHostChkCmdInhibitCMD(v6); - if (!result) { - result = SdioHostChkDataLineActive(0); - if (!result) { - Cmd.CmdFmt = (SDIO_HOST_CMD_FMT) ((*(u8 *) &Cmd.CmdFmt & 0xF4 - | 0x3A) & 0x3F); - v11 = *((u8 *) &Cmd.CmdFmt + 1); - v5[128] = 0; - *((u8 *) &Cmd.CmdFmt + 1) = v11 & 0xC0 | 6; - v5[129] = 0; - Cmd.Arg = v8 | 0xFFFFF0 | (v7 << 31); - SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(v5, v12); - if (!result) { - SdioHostGetResponse(v5, *(u8 *) &Cmd.CmdFmt & 3); - result = SdioHostChkXferComplete(v5, 0x1388u, v13); - if (result) { - if (result != 16) { - if (v40058032 & 0x200) { - v40058032 = 512; - if (HalSdioHostStopTransferRtl8195a(v5, v14)) { - DBG_SDIO_ERR("Stop transmission error!\n"); - } - } - } - result = 238; - } - } - } - } - } - return result; -} // 23D4: using guessed type int DiagPrintf(const char *, ...); //----- (00000E34) -------------------------------------------------------- @@ -1055,7 +1065,7 @@ HAL_Status HalSdioHostGetCardStatusRtl8195a(IN VOID *Data) { v3 = Data; if (!Data) return 3; - result = SdioHostChkCmdInhibitCMD((uint32_t) Data); + result = SdioHostChkCmdInhibitCMD();//(uint32_t) Data); if (result) return result; Cmd.CmdFmt = @@ -1065,7 +1075,7 @@ HAL_Status HalSdioHostGetCardStatusRtl8195a(IN VOID *Data) { *((u8 *) &Cmd.CmdFmt + 1) = v5 & 0xC0 | 0xD; Cmd.Arg = *((u16 *) v3 + 67) << 16; SdioHostSendCmd(&Cmd); - v7 = SdioHostChkCmdComplete(v3, v6); + v7 = SdioHostChkCmdComplete(v3);//, v6); if (v7) return v7; SdioHostGetResponse(v3, *(u8 *) &Cmd.CmdFmt & 3); @@ -1142,7 +1152,7 @@ HAL_Status HalSdioHostInitCardRtl8195a(IN VOID *Data) { v7 = 3; goto LABEL_115; }; - v4 = SdioHostChkCmdInhibitCMD((uint32_t) Data); + v4 = SdioHostChkCmdInhibitCMD();//(uint32_t) Data); if (!v4) { v5 = (char) v52; v3[128] = 0; @@ -1150,7 +1160,7 @@ HAL_Status HalSdioHostInitCardRtl8195a(IN VOID *Data) { v53 = 0; BYTE1(v52) &= 0xC0u; SdioHostSendCmd((SDIO_HOST_CMD *) &v52); - v4 = SdioHostChkCmdComplete(v3, v6); + v4 = SdioHostChkCmdComplete(v3);//, v6); }; v7 = v4; if (v4) { @@ -1159,12 +1169,12 @@ HAL_Status HalSdioHostInitCardRtl8195a(IN VOID *Data) { }; goto LABEL_115; - v9 = SdioHostChkCmdInhibitCMD(0); + v9 = SdioHostChkCmdInhibitCMD();//0); if (v9 || (LOBYTE(v52) = (((u8) v52 & 0xF4 | 0x1A) & 0xDF | 32 * (v7 & 1)) & 0x3F | ((v7 & 3) << 6), BYTE1(v52) = BYTE1(v52) & 0xC0 | 8, v3[128] = v7, v53 = 426, SdioHostSendCmd( - (SDIO_HOST_CMD *) &v52), (v9 = SdioHostChkCmdComplete(v3, + (SDIO_HOST_CMD *) &v52), (v9 = SdioHostChkCmdComplete(v3);//, v10)) != 0)) { v7 = v9; if (v9) @@ -1199,7 +1209,7 @@ HAL_Status HalSdioHostInitCardRtl8195a(IN VOID *Data) { goto LABEL_115; } } - v13 = SdioHostChkCmdInhibitCMD(v9); + v13 = SdioHostChkCmdInhibitCMD();//v9); if (v13) goto LABEL_63; LOBYTE (v52) = ((u8) v52 & 0xFC | 0x1A) & 0x1F; @@ -1208,7 +1218,7 @@ HAL_Status HalSdioHostInitCardRtl8195a(IN VOID *Data) { BYTE1 (v52) = v14; v53 = v7; SdioHostSendCmd((SDIO_HOST_CMD *) &v52); - v13 = SdioHostChkCmdComplete(v3, v15); + v13 = SdioHostChkCmdComplete(v3);//, v15); if (v13) goto LABEL_63; v16 = SdioHostGetResponse(v3, (u8) v52 & 3); @@ -1229,12 +1239,11 @@ HAL_Status HalSdioHostInitCardRtl8195a(IN VOID *Data) { LABEL_57: v7 = 238; goto LABEL_60; }; - v13 = SdioHostChkCmdInhibitCMD(v16); + v13 = SdioHostChkCmdInhibitCMD();//v16); if (v13 || (LOBYTE(v52) = ((u8) v52 & 0xFC | 2) & 7, v18 = BYTE1(v52) & 0xC0 | 0x29, v3[128] = v7, BYTE1(v52) = v18, v53 = v7, SdioHostSendCmd( - (SDIO_HOST_CMD *) &v52), (v13 = SdioHostChkCmdComplete(v3, - v19)) != 0)) { + (SDIO_HOST_CMD *) &v52), (v13 = SdioHostChkCmdComplete(v3)) != 0)) { LABEL_63: v7 = v13; if (!v13) goto LABEL_64; @@ -1251,7 +1260,7 @@ HAL_Status HalSdioHostInitCardRtl8195a(IN VOID *Data) { v22 = __CFADD__(v21--, -1); if (!v22) goto LABEL_51; - v13 = SdioHostChkCmdInhibitCMD(v20); + v13 = SdioHostChkCmdInhibitCMD();//v20); if (v13) goto LABEL_63; LOBYTE (v52) = ((u8) v52 & 0xFC | 0x1A) & 0x1F; @@ -1260,7 +1269,7 @@ HAL_Status HalSdioHostInitCardRtl8195a(IN VOID *Data) { v53 = 0; BYTE1 (v52) = v23 & 0xC0 | 0x37; SdioHostSendCmd((SDIO_HOST_CMD *) &v52); - v13 = SdioHostChkCmdComplete(v3, v24); + v13 = SdioHostChkCmdComplete(v3);//, v24); if (v13) goto LABEL_63; v25 = SdioHostGetResponse(v3, (u8) v52 & 3); @@ -1280,7 +1289,7 @@ HAL_Status HalSdioHostInitCardRtl8195a(IN VOID *Data) { LABEL_62: v13 = 238; goto LABEL_63; } - v13 = SdioHostChkCmdInhibitCMD(v25); + v13 = SdioHostChkCmdInhibitCMD();//v25); if (v13) goto LABEL_63; LOBYTE (v52) = ((u8) v52 & 0xFC | 2) & 7; @@ -1289,7 +1298,7 @@ HAL_Status HalSdioHostInitCardRtl8195a(IN VOID *Data) { BYTE1 (v52) = v27 & 0xC0 | 0x29; v53 = 1077673984; SdioHostSendCmd((SDIO_HOST_CMD *) &v52); - v13 = SdioHostChkCmdComplete(v3, v28); + v13 = SdioHostChkCmdComplete(v3);//, v28); if (v13) goto LABEL_63; SdioHostGetResponse(v3, (u8) v52 & 3); @@ -1314,12 +1323,11 @@ HAL_Status HalSdioHostInitCardRtl8195a(IN VOID *Data) { } DiagPrintf(v29); LABEL_64: v30 = HalDelayUs(20); - v31 = SdioHostChkCmdInhibitCMD(v30); + v31 = SdioHostChkCmdInhibitCMD();//v30); if (v31 || (LOBYTE(v52) = ((u8) v52 & 0xF4 | 9) & 0xF, v32 = BYTE1(v52) & 0xC0 | 2, v3[128] = v7, BYTE1(v52) = v32, v53 = v7, SdioHostSendCmd( - (SDIO_HOST_CMD *) &v52), (v31 = SdioHostChkCmdComplete(v3, - v33)) != 0)) { + (SDIO_HOST_CMD *) &v52), (v31 = SdioHostChkCmdComplete(v3)) != 0)) { v7 = v31; if (!v31) goto LABEL_70; @@ -1330,12 +1338,11 @@ HAL_Status HalSdioHostInitCardRtl8195a(IN VOID *Data) { goto LABEL_115; } v31 = SdioHostGetResponse(v3, (u8) v52 & 3); - LABEL_70: v34 = SdioHostChkCmdInhibitCMD(v31); + LABEL_70: v34 = SdioHostChkCmdInhibitCMD();//v31); if (v34 || (LOBYTE(v52) = ((u8) v52 & 0xF4 | 0x1A) & 0x1F, v35 = BYTE1(v52) & 0xC0 | 3, v3[128] = v7, BYTE1(v52) = v35, v53 = v7, SdioHostSendCmd( - (SDIO_HOST_CMD *) &v52), (v34 = SdioHostChkCmdComplete(v3, - v36)) != 0)) { + (SDIO_HOST_CMD *) &v52), (v34 = SdioHostChkCmdComplete(v3)) != 0)) { v7 = v34; if (v34) goto LABEL_79; @@ -1372,7 +1379,7 @@ HAL_Status HalSdioHostInitCardRtl8195a(IN VOID *Data) { LABEL_108: DiagPrintf(v41, v40); goto LABEL_113; } - v42 = SdioHostChkCmdInhibitCMD(0); + v42 = SdioHostChkCmdInhibitCMD();//0); if (v42) goto LABEL_120; LOBYTE (v52) = ((u8) v52 & 0xFC | 0x1A) & 0x1F; @@ -1381,7 +1388,7 @@ HAL_Status HalSdioHostInitCardRtl8195a(IN VOID *Data) { v3[128] = v7; v53 = v45; SdioHostSendCmd((SDIO_HOST_CMD *) &v52); - v42 = SdioHostChkCmdComplete(v3, v46); + v42 = SdioHostChkCmdComplete(v3);//, v46); if (v42) goto LABEL_120; v47 = SdioHostGetResponse(v3, (u8) v52 & 3); @@ -1394,12 +1401,11 @@ HAL_Status HalSdioHostInitCardRtl8195a(IN VOID *Data) { } goto LABEL_96; } - v42 = SdioHostChkCmdInhibitCMD(v47); + v42 = SdioHostChkCmdInhibitCMD();//v47); if (v42 || (LOBYTE(v52) = ((u8) v52 & 0xFC | 0x1A) & 0x1F, v49 = BYTE1(v52) & 0xC0 | 6, v3[128] = v7, BYTE1(v52) = v49, v53 = 2, SdioHostSendCmd( - (SDIO_HOST_CMD *) &v52), (v42 = SdioHostChkCmdComplete(v3, - v50)) != 0)) { + (SDIO_HOST_CMD *) &v52), (v42 = SdioHostChkCmdComplete(v3)) != 0)) { LABEL_120: v7 = v42; if (v42) goto LABEL_102; @@ -1477,7 +1483,7 @@ HAL_Status HalSdioHostGetSdStatusRtl8195a(IN VOID *Data) { v6 = (u8) ((v5 | 3) & 0xEB) | 0x20; *(u8 *) v3 = v6; *(u32 *) (v3 + 4) = v4 + 48; - result = SdioHostChkCmdInhibitCMD(v6); + result = SdioHostChkCmdInhibitCMD();//v6); if (!result) { Cmd.CmdFmt = (SDIO_HOST_CMD_FMT) ((*(u8 *) &Cmd.CmdFmt & 0xFC | 0x1A) @@ -1487,7 +1493,7 @@ HAL_Status HalSdioHostGetSdStatusRtl8195a(IN VOID *Data) { v4[128] = 0; Cmd.Arg = v8 << 16; SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(v4, v9); + result = SdioHostChkCmdComplete(v4); if (!result) { SdioHostGetResponse(v4, *(u8 *) &Cmd.CmdFmt & 3); if (v4[24] != 55) { @@ -1506,7 +1512,7 @@ HAL_Status HalSdioHostGetSdStatusRtl8195a(IN VOID *Data) { } return 238; } - result = SdioHostChkCmdInhibitCMD(*((u32 *) v4 + 5) << 26); + result = SdioHostChkCmdInhibitCMD();//*((u32 *) v4 + 5) << 26); if (!result) { result = SdioHostChkDataLineActive(0); if (!result) { @@ -1518,7 +1524,7 @@ HAL_Status HalSdioHostGetSdStatusRtl8195a(IN VOID *Data) { Cmd.Arg = 0; *((u8 *) &Cmd.CmdFmt + 1) = v12 & 0xC0 | 0xD; SdioHostSendCmd(&Cmd); - result = SdioHostChkCmdComplete(v4, v13); + result = SdioHostChkCmdComplete(v4);//, v13); if (!result) { SdioHostGetResponse(v4, *(u8 *) &Cmd.CmdFmt & 3); v15 = SdioHostChkXferComplete(v4, 0x1388u, v14); @@ -1546,11 +1552,11 @@ HAL_Status HalSdioHostGetSdStatusRtl8195a(IN VOID *Data) { // 23D4: using guessed type int DiagPrintf(const char *, ...); //----- (00001668) -------------------------------------------------------- +// SD_CLK_FREQUENCY Frequency HAL_Status HalSdioHostChangeSdClockRtl8195a(IN VOID *Data, IN u8 Frequency) { - PHAL_SDIO_HOST_ADAPTER v2 /*pSdioHostAdapter*/= - (PHAL_SDIO_HOST_ADAPTER) Data; - u8 * v2; // r5@1 - int v3; // r4@6 + PHAL_SDIO_HOST_ADAPTER pSdioHostAdapter = (PHAL_SDIO_HOST_ADAPTER) Data; // v2 = Data; u8 * v2; // r5@1 + PHAL_SDIO_HOST_ADAPTER psha = (PHAL_SDIO_HOST_ADAPTER)Data; + HAL_Status ret = HAL_ERR_PARA; // int v3; // r4@6 int v4; // r2@8 int v5; // r0@10 int v6; // r0@10 @@ -1567,65 +1573,65 @@ HAL_Status HalSdioHostChangeSdClockRtl8195a(IN VOID *Data, IN u8 Frequency) { int v17; // r0@34 int v18; // r0@36 const char *v19; // r0@40 - int v20; // r2@52 - char v22; // [sp+0h] [bp-58h]@11 + u8 Divisor; // int v20; // r2@52 + char v22; // SDIO_HOST_CMD [sp+0h] [bp-58h]@11 char v23; // [sp+1h] [bp-57h]@11 int v24; // [sp+4h] [bp-54h]@11 + uint8_t StatusData[64]; // [sp+8h] [bp-50h]@8 - v2 = Data; - if (!Data || (unsigned int) (Frequency - 5) > 3) - return 3; - if (v2.CurrSdClk == Frequency) { - DBG_SDIO_WARN( - "Current SDCLK frequency is already the specified value...\n"); - return 0; + + if (!psha || Frequency > SD_CLK_41_6MHZ) + return ret; + if (psha->CurrSdClk == Frequency) { + DBG_SDIO_WARN("Current SDCLK frequency is already the specified value...\n"); + ret = HAL_OK; + return ret; } - if (Frequency != SD_CLK_41_6MHZ) { // SD_CLK_41_6MHZ - if (Frequency == SD_CLK_10_4MHZ) // SD_CLK_10_4MHZ - v20 = BASE_CLK_DIVIDED_BY_4; - else if (Frequency == SD_CLK_20_8MHZ) // SD_CLK_20_8MHZ - v20 = BASE_CLK_DIVIDED_BY_2; - else if (Frequency != SD_CLK_5_2MHZ) { // SD_CLK_5_2MHZ + if (Frequency != SD_CLK_41_6MHZ) { + if (Frequency == SD_CLK_10_4MHZ) + Divisor = BASE_CLK_DIVIDED_BY_4; // 10.4 MHz + else if (Frequency == SD_CLK_20_8MHZ) + Divisor = BASE_CLK_DIVIDED_BY_2; // 20.8 MHz + else if (Frequency != SD_CLK_5_2MHZ) { DBG_SDIO_ERR("Unsupported SDCLK frequency!\n"); - v3 = 3; - goto LABEL_60; + return ret; } - v20 = BASE_CLK_DIVIDED_BY_8; + Divisor = BASE_CLK_DIVIDED_BY_8; // 5.2 MHZ } - v3 = SdioHostSdClkCtrl(Data, 1, v20); - if (!v3) - return 0; - LABEL_60: if (!(ConfigDebugErr & 0x400)) { - return v3; - v19 = "\r[SDIO Err]Host changes clock fail!\n"; // DBG_SDIO_ERR(" - goto LABEL_62; - } - v4 = *((u32 *) Data + 4); + ret = SdioHostSdClkCtrl(psha, 1, Divisor); + if (ret == HAL_OK) return ret; + DBG_SDIO_ERR("Host changes clock fail!\n"); + return ret; + *(u32 *) StatusData = 0; *(u32 *) &StatusData[4] = 0; - if (!v4 || v4 & 3) - return 3; - v40058058 = v4; - v40058004 = 8; - v4005800C = 17; - v5 = (u8) ((*(u8 *) v4 | 3) & 0xEB) | 0x20; - *(u8 *) v4 = v5; - *(u16 *) (v4 + 2) = 8; - *(u32 *) (v4 + 4) = StatusData; - v6 = SdioHostChkCmdInhibitCMD(v5); - if (v6) - goto LABEL_70; - v22 = (v22 & 0xF4 | 0x1A) & 0x1F; - v7 = v23; - v2[128] = 0; - v23 = v7 & 0xC0 | 0x37; - v24 = *((u16 *) v2 + 67) << 16; - SdioHostSendCmd((SDIO_HOST_CMD *) &v22); - v6 = SdioHostChkCmdComplete(v2, v8); - if (v6) - goto LABEL_70; - v9 = SdioHostGetResponse(v2, v22 & 3); + + PADMA2_DESC_FMT pAdmaDescTbl = psha->AdmaDescTbl; + if (pAdmaDescTbl == NULL || ((uint32)(pAdmaDescTbl) & 3)) { + ret = HAL_ERR_PARA; + return ret; + } + HAL_SDIOH_REG32(REG_SDIO_HOST_ADMA_SYS_ADDR) = psha->AdmaDescTbl; // v40058058 = v4; + HAL_SDIOH_REG16(REG_SDIO_HOST_BLK_SIZE) = 8; // v40058004 = 8; + HAL_SDIOH_REG16(REG_SDIO_HOST_XFER_MODE) = XFER_MODE_DMA_EN | XFER_MODE_DATA_XFER_DIR; // v4005800C = 17; + // v5 = (u8) ((*(u8 *) v4 | 3) & 0xEB) | 0x20; + // *(u8 *) v4 = v5; + pAdmaDescTbl->Attrib1.Int = 0; + pAdmaDescTbl->Attrib1.Act1 = 1; + pAdmaDescTbl->Len1 = 8; // *(u16 *) (v4 + 2) = 8; + pAdmaDescTbl->Addr2 = &StatusData; // *(u32 *) (v4 + 4) = StatusData; + ret = SdioHostChkCmdInhibitCMD();//v5); + if (ret != HAL_OK) return ret; + SDIO_HOST_CMD sdhcmd; + sdhcmd.CmdFmt.CmdCrcChkEn = 1; // v22 = (v22 & 0xF4 | 0x1A) & 0x1F; + sdhcmd.CmdFmt.CmdIdx = 0x37; // v23 = v7 & 0xC0 | 0x37; + pSdioHostAdapter->CmdCompleteFlg = 0; // v2[128] = 0; + sdhcmd.Arg = pSdioHostAdapter->Csd[?] << 16; // v24 = *((u16 *) v2 + 67) << 16; + SdioHostSendCmd((SDIO_HOST_CMD *) &sdhcmd); + ret = SdioHostChkCmdComplete(psha);//, v8); + if (ret != HAL_OK) return ret; + v9 = SdioHostGetResponse(psha, v22 & 3); if (v2[24] != 55) { if (!(ConfigDebugErr & 0x400)) return 238; @@ -1639,18 +1645,17 @@ HAL_Status HalSdioHostChangeSdClockRtl8195a(IN VOID *Data, IN u8 Frequency) { v10 = "\r[SDIO Err]ACMD isn't expected!\n"; goto LABEL_15; } - v6 = SdioHostChkCmdInhibitCMD(v9); + v6 = SdioHostChkCmdInhibitCMD();//v9); if (v6 || (v6 = SdioHostChkDataLineActive(0)) != 0 - || (v22 = (v22 & 0xF4 | 0x3A) & 0x3F, v11 = v23, v2[128] = 0, v2[129] = + || (v22 = (v22 & 0xF4 | 0x3A) & 0x3F, v11 = v23, psha v2[128] = 0, v2[129] = 0, v24 = 0, v23 = v11 & 0xC0 | 0x33, SdioHostSendCmd( - (SDIO_HOST_CMD *) &v22), (v6 = SdioHostChkCmdComplete(v2, - v12)) != 0)) { + (SDIO_HOST_CMD *) &v22), (v6 = SdioHostChkCmdComplete(psha)) != 0)) { LABEL_70: v3 = v6; if (v6) return v3; } else { SdioHostGetResponse(v2, v22 & 3); - v14 = SdioHostChkXferComplete(v2, 0x1388u, v13); + v14 = SdioHostChkXferComplete(psha, 0x1388u, v13); if (v14) { if (v14 == 16) return 238; @@ -1658,7 +1663,7 @@ HAL_Status HalSdioHostChangeSdClockRtl8195a(IN VOID *Data, IN u8 Frequency) { if (!(v40058032 & 0x200)) return 238; v40058032 = 512; - if (!HalSdioHostStopTransferRtl8195a(v2, v15) + if (!HalSdioHostStopTransferRtl8195a(psha, v15) || !(ConfigDebugErr & 0x400)) return 238; v10 = "\r[SDIO Err]Stop transmission error!\n"; @@ -1668,12 +1673,12 @@ HAL_Status HalSdioHostChangeSdClockRtl8195a(IN VOID *Data, IN u8 Frequency) { *((u16 *) v2 + 68) = StatusData[0] & 0xF; } if (*((u16 *) v2 + 68)) { - v16 = SdioHostSwitchFunction(v2, 0, 15, (int) StatusData, + v16 = SdioHostSwitchFunction(psha, 0, 15, (int) StatusData, *(uint8_t **) &v22); if (v16) return v16; if (StatusData[13] & 2) { - v17 = SdioHostSwitchFunction(v2, v16, 1, (int) StatusData, + v17 = SdioHostSwitchFunction(psha, v16, 1, (int) StatusData, *(uint8_t **) &v22); if (v17) return v17; @@ -1693,7 +1698,7 @@ HAL_Status HalSdioHostChangeSdClockRtl8195a(IN VOID *Data, IN u8 Frequency) { v10 = "\r[SDIO Err]Card changes to High-Speed fail!\n"; goto LABEL_15; } - v3 = SdioHostSdClkCtrl(v2, 1, v18); + v3 = SdioHostSdClkCtrl(psha, 1, v18); if (v3) { if (!(ConfigDebugErr & 0x400)) return v3; @@ -1744,7 +1749,7 @@ IN u64 EndAddr) { v4 = a2 >> 9; v3 = EndAddra >> 9; } - result = SdioHostChkCmdInhibitCMD(EndAddr); + result = SdioHostChkCmdInhibitCMD();//EndAddr); if (!result) { v16.CmdFmt = (SDIO_HOST_CMD_FMT) ((*(u8 *) &v16.CmdFmt & 0xFC | 0x1A) & 0x1F); @@ -1753,12 +1758,12 @@ IN u64 EndAddr) { *((u8 *) &v16.CmdFmt + 1) = v7 & 0xC0 | 0x20; v16.Arg = v4; SdioHostSendCmd(&v16); - result = SdioHostChkCmdComplete((void *) v5, v8); + result = SdioHostChkCmdComplete((void *) v5); if (!result) { v9 = SdioHostGetResponse((void *) v5, *(u8 *) &v16.CmdFmt & 3); if (*(u8 *) (v5 + 24) != 32) goto LABEL_20; - result = SdioHostChkCmdInhibitCMD(v9); + result = SdioHostChkCmdInhibitCMD();//v9); if (result) return result; v16.CmdFmt = @@ -1769,7 +1774,7 @@ IN u64 EndAddr) { *((u8 *) &v16.CmdFmt + 1) = v10 & 0xC0 | 0x21; v16.Arg = v3; SdioHostSendCmd(&v16); - result = SdioHostChkCmdComplete((void *) v5, v11); + result = SdioHostChkCmdComplete((void *) v5); if (result) return result; v12 = SdioHostGetResponse((void *) v5, *(u8 *) &v16.CmdFmt & 3); @@ -1778,7 +1783,7 @@ IN u64 EndAddr) { DBG_SDIO_ERR("Command index error!\n"); result = 238; } else { - result = SdioHostChkCmdInhibitCMD(v12); + result = SdioHostChkCmdInhibitCMD();//v12); if (!result) { result = SdioHostChkCmdInhibitDAT(0); if (!result) { @@ -1790,7 +1795,7 @@ IN u64 EndAddr) { v16.Arg = 0; *((u8 *) &v16.CmdFmt + 1) = v13 & 0xC0 | 0x26; SdioHostSendCmd(&v16); - result = SdioHostChkCmdComplete((void *) v5, v14); + result = SdioHostChkCmdComplete((void *) v5); if (!result) result = SdioHostChkXferComplete((void *) v5, 0x1388u, v15); @@ -1904,7 +1909,7 @@ HAL_Status HalSdioHostSetWriteProtectRtl8195a(IN VOID *Data, IN u8 Setting) { *(u16 *) (v2 + 2) = 16; *(u8 *) v2 = v10 & 0xC8 | 0x23; *(u32 *) (v2 + 4) = tmp; - result = SdioHostChkCmdInhibitCMD(1u); + result = SdioHostChkCmdInhibitCMD();//1u); if (!result) { result = SdioHostChkDataLineActive(0); if (!result) { @@ -1915,7 +1920,7 @@ HAL_Status HalSdioHostSetWriteProtectRtl8195a(IN VOID *Data, IN u8 Setting) { ret = 0; v17 = v12 & 0xC0 | 0x1B; SdioHostSendCmd((SDIO_HOST_CMD *) &v16); - result = SdioHostChkCmdComplete(v3, v13); + result = SdioHostChkCmdComplete(v3); if (!result) { SdioHostGetResponse(v3, v16 & 3); if (*((u32 *) v3 + 5) & 0x4000000) { diff --git a/USDK/component/soc/realtek/8195a/misc/bsp/lib/common/GCC/lib_sdcard.a b/USDK/component/soc/realtek/8195a/misc/bsp/lib/common/GCC/lib_sdcard.a index a4e51c77f6cfcfe4c5fdbccffe743661b6669dda..32634f1cf0198a39f9d6119f99f85a6a445489f1 100644 GIT binary patch literal 148954 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

XIc{Mq00zW_r?H!uNZ*X?4!x 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 As{jB1 delta 5056 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 1 + && argv[1] != NULL + && (sdir = (u8 *) malloc(strlen(argv[1]) + 4)) != NULL ) + strcpy(strcpy(sdir, logical_drv) + 3, argv[1]); + else sdir = logical_drv; + if (f_opendir(&dir, sdir) == FR_OK) { + while (f_readdir(&dir, &fno) == FR_OK && fno.fname[0] != 0) { + if ((fno.fattrib & AM_VOL)==0 && fno.fsize > 0) { + if (*fno.lfname) { + strcpy(strcpy(buf, logical_drv) + 3, fno.lfname); + } else { + strcpy(strcpy(buf, logical_drv) + 3, fno.fname); + } + TickType_t t1 = xTaskGetTickCount(); + read_file_test(buf); + t1 = xTaskGetTickCount() - t1; + if(t1 == 0) t1 = 1; + printf("%u kbytes/sec\t%s\n", t1, buf); + } + } + } else + printf("FATFS: Open dir fail!\n"); + free(pbuf); + if(sdir != logical_drv) free(sdir); + } + } + sd_unmount(fs); + +} /* Test SD */ LOCAL void fATHS(int argc, char *argv[]) { // HalPinCtrlRtl8195A(UART0,0,0); @@ -311,8 +376,9 @@ LOCAL void fATHS(int argc, char *argv[]) { } -MON_RAM_TAB_SECTION COMMAND_TABLE console_commands_spitst[] = { - {"ATHS", 0, fATHS, ": SD test"} +MON_RAM_TAB_SECTION COMMAND_TABLE console_commands_dscard[] = { + {"ATHS", 0, fATHS, ": SD test"}, + {"ATHF", 0, fATHF, ": SD file read"} }; #endif // CONFIG_SDIO_HOST_EN