| 214 | } |
| 215 | |
| 216 | static ft_error_t FsdCtrl_privateSendCmd(FT_INOUT FtsdCtrl_t *pFtsdCtrl, FT_IN pFtsdCtrl_delayTimer_t pDelayTimer_fun, FT_IN u32 cmd, FT_IN u32 respType, FT_IN u32 arg) |
| 217 | { |
| 218 | u32 temp; |
| 219 | u32 sd_cmd; |
| 220 | u32 sd_arg; |
| 221 | FSdCtrl_Config_t *pConfig; |
| 222 | Ft_assertNonvoid(FT_NULL != pFtsdCtrl); |
| 223 | pConfig = &pFtsdCtrl->config; |
| 224 | |
| 225 | /* enable cmd finished irq */ |
| 226 | Ft_out32(pConfig->baseAddress + NORMAL_INT_STATUS_REG, NORMAL_INT_EN_ECC); |
| 227 | Ft_out32(pConfig->baseAddress + NORMAL_INT_STATUS_REG, 0); |
| 228 | |
| 229 | Ft_out32(pConfig->baseAddress + ERROR_INT_STATUS_REG, BD_ISR_EN_ETRS); |
| 230 | Ft_out32(pConfig->baseAddress + ERROR_INT_STATUS_REG, 0); |
| 231 | |
| 232 | /* prepare cmd msg, along with arg */ |
| 233 | sd_cmd = FSdCtrl_PrepareCmdRaw(cmd, respType); |
| 234 | sd_arg = arg; |
| 235 | |
| 236 | /* send cmd and arg */ |
| 237 | Ft_out32(pConfig->baseAddress + CMD_SETTING_REG_OFFSET, sd_cmd); |
| 238 | Ft_out32(pConfig->baseAddress + ARGUMENT_REG_OFFSET, sd_arg); |
| 239 | |
| 240 | if (pConfig->workMode & FTSDCTRL_CMD_IRQ_MASK) |
| 241 | { |
| 242 | if (pFtsdCtrl->cmdWaitCallback) |
| 243 | { |
| 244 | /* if irq is enabled and call back registered, enter call back procedure */ |
| 245 | return pFtsdCtrl->cmdWaitCallback(pFtsdCtrl); |
| 246 | } |
| 247 | else |
| 248 | { |
| 249 | return FTSDC_INVALID_PARAM; |
| 250 | } |
| 251 | } |
| 252 | else |
| 253 | { |
| 254 | temp = Ft_in32(pConfig->baseAddress + NORMAL_INT_STATUS_REG); |
| 255 | /* polling wait for cmd-finished response */ |
| 256 | while (NORMAL_INT_STATUS_CC != (temp & NORMAL_INT_STATUS_CC)) |
| 257 | { |
| 258 | temp = Ft_in32(pConfig->baseAddress + NORMAL_INT_STATUS_REG); |
| 259 | pDelayTimer_fun(1); |
| 260 | } |
| 261 | } |
| 262 | |
| 263 | return FTSDC_SUCCESS; |
| 264 | } |
| 265 | |
| 266 | ft_error_t FSdCtrl_WaitWriteDataEnd(FT_INOUT FtsdCtrl_t *pFtsdCtrl, |
| 267 | FT_IN pFtsdCtrl_delayTimer_t pDelayTimer_fun, |
no test coverage detected