/***************************************************************************** 函 数 名 : hifi_misc_async_write 功能描述 : Hifi MISC 设备异步发送接口,将异步消息发给Hifi,非阻塞接口 输入参数 : unsigned char *arg :需要下发的数据buff指针 unsigned int len :下发的数据长度 输出参数 : 无 返 回 值 : int 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2012年8月1日 作 者 : 夏青 00195127 修改内容 : 新生成函数 *****************************************************************************/ int hifi_misc_async_write(unsigned char *arg, unsigned int len) { int ret =0; IN_FUNCTION; if ( arg==NULL ) { loge("input arg is NULL\n"); return ERROR; } logd("len=%d, arg=0x%p\n", len, arg); /*调用核间通信接口发送数据*/ ret = DRV_MAILBOX_SENDMAIL(MAILBOX_MAILCODE_ACPU_TO_HIFI_MISC, arg, len); if ( OK != ret ) { loge("msg send to hifi fail,ret is %d\n", ret); return ERROR; } logd("SendMail ret=%d\n", ret); OUT_FUNCTION; return OK; }
s32 send_msg_to_hifi(DRV_RESET_CALLCBFUN_MOMENT stage) { s32 ret = RESET_ERROR; AP_HIFI_CCPU_RESET_REQ_STRU hifi_mailbox = {0}; reset_print_debug("(%d) stage%d,ID_AP_HIFI_CCPU_RESET_REQ=%d\n", ++g_reset_debug.main_stage, (s32)stage, (s32)ID_AP_HIFI_CCPU_RESET_REQ); if (DRV_RESET_CALLCBFUN_RESET_BEFORE == stage) { /*消息ID*/ hifi_mailbox.uhwMsgId = ID_AP_HIFI_CCPU_RESET_REQ; ret = DRV_MAILBOX_SENDMAIL(MAILBOX_MAILCODE_ACPU_TO_HIFI_CCORE_RESET_ID, (void *)(&hifi_mailbox), sizeof(hifi_mailbox)); /*lint !e713 */ if(MAILBOX_OK != ret) { reset_print_err("fail to send msg to hifi\n"); return RESET_ERROR; } } /* 如果有必要,其他阶段也通知hifi */ return RESET_OK; }
ret = down_trylock(&g_misc_data.sync_sem); if (!ret){ loge("some msg need to be cleaned enter\n"); spin_lock_bh(&g_misc_data.recv_sync_lock); while(!list_empty(&recv_sync_work_queue_head)){ recv = list_entry(recv_sync_work_queue_head.next, struct recv_request, recv_node); list_del(&recv->recv_node); kfree(recv->rev_msg.mail_buff); kfree(recv); recv = NULL; } spin_unlock_bh(&g_misc_data.recv_sync_lock); loge("some msg need to be cleaned exist\n"); } /*调用核间通信接口发送数据,得到返回值ret*/ ret = DRV_MAILBOX_SENDMAIL(MAILBOX_MAILCODE_ACPU_TO_HIFI_MISC, buff, len); if ( OK != ret ) { loge("msg send to hifi fail,ret is %d\n", ret); return ERROR; } logd("sendmail ret=%d\n", ret); logd("down_timeout B, mb_ret=%d\n", ret); /*等待同步信号量*/ ret = down_timeout(&g_misc_data.sync_sem, msecs_to_jiffies(2000)); logd("down_timeout L, down_ret=%d\n", ret); g_misc_data.sn++; if (unlikely(g_misc_data.sn & 0x10000000)){