AST_HIF_HW_RESULT ast_hif_hw_read(AST_HIF_HW_TYPE type, kal_uint32 addr, kal_uint32 size, AST_HIF_HW_CALLBACK fCB) { HIF_RESULT result = HIF_RESULT_OK; switch (type) { case AST_HIF_HW_TYPE_A0H_CPU: #if defined(MT6255) result = hif_mcu_read_fast(ast_hif_hw_handle, HIF_TYPE_A0H_CPU, addr, size); #else result = hif_read(ast_hif_hw_handle, HIF_TYPE_A0H_CPU, addr, size, fCB); #endif break; case AST_HIF_HW_TYPE_A0H_DMA: result = hif_read(ast_hif_hw_handle, HIF_TYPE_A0H_DMA, addr, size, fCB); break; case AST_HIF_HW_TYPE_A0L_CPU: #if defined(MT6255) result = hif_mcu_read_fast(ast_hif_hw_handle, HIF_TYPE_A0L_CPU, addr, size); #else result = hif_read(ast_hif_hw_handle, HIF_TYPE_A0L_CPU, addr, size, fCB); #endif break; case AST_HIF_HW_TYPE_A0L_DMA: result = hif_read(ast_hif_hw_handle, HIF_TYPE_A0L_DMA, addr, size, fCB); break; default: ASSERT(0); break; } return (AST_HIF_HW_RESULT)result; }
HIF_RESULT hif_read(HIF_HANDLE handle, HIF_TYPE type, kal_uint32 addr, kal_uint32 size, HIF_CALLBACK fCB) { HIF_RESULT result = HIF_RESULT_OK; HIF_INTERNAL_HANDLE_T* pHandle = (HIF_INTERNAL_HANDLE_T*) handle; #if defined (MT6255) kal_bool cb_en = KAL_FALSE; if(SW_SEC_0 == chip_version) { if ((type == HIF_TYPE_A0H_DMA)||(type == HIF_TYPE_A0L_DMA)) { type --; // change from DMA to CPU if(fCB) cb_en = KAL_TRUE; } } #endif if ((type == HIF_TYPE_A0H_DMA) || (type == HIF_TYPE_A0L_DMA)) { SLA_CustomLogging("H_R",2);//set for debug } //ASSERT(pHandle != NULL); //ASSERT(pHandle->user != 0); if((pHandle == NULL)||(pHandle->user == 0)) return HIF_RESULT_INVALID_HANDLE; //ASSERT(size != 0); //ASSERT((pHandle->config.hif_bus_width==8)? 1 : (size%2==0)); if ((size == 0) || (!((pHandle->config.hif_bus_width==8)? 1 : (size%2==0)))) return HIF_RESULT_INVALID_ARGUMENT; if (hif_power_on[pHandle->engine_id] == KAL_FALSE) return HIF_RESULT_HIF_NOT_POWER_ON; //check if DMA is busy,to avoid re-entry DMA mode. if ((type == HIF_TYPE_A0H_DMA)||(type == HIF_TYPE_A0L_DMA)) { ASSERT(!pHandle->DMA_BUSY); ASSERT(fCB); } //On HIF ECO Chip, blocking DMA mode is not allowed if(hif_eco_support) { if(type == HIF_TYPE_A0H_DMA||type == HIF_TYPE_A0L_DMA) ASSERT(fCB); } if(type == HIF_TYPE_A0H_CPU||type == HIF_TYPE_A0L_CPU) result = hif_mcu_read_fast(handle, type, addr, size); else if(type == HIF_TYPE_A0H_DMA||type == HIF_TYPE_A0L_DMA) result = hif_dma_read_internal( handle, type, addr, size, fCB); #if defined (MT6255) if(SW_SEC_0 == chip_version) { if((result == HIF_RESULT_OK) && (cb_en)) fCB(); } #endif return result; }