{"mailboxTasklet",  MAILBOX_RECV_TASKLET_HI,     0,  0, },

    /*中断方式的邮件数据处理*/
    {"mailboxInt",      MAILBOX_RECV_INT_IRQ,     0,  0, },

    /*请在此后新增处理方式项目,否则会影响UT用例*/

    /*结束*/
};

/*A核的邮箱通道资源与平台系统资源对应关系配置表*/
MAILBOX_LOCAL struct mb_local_cfg g_mb_local_cfg_tbl[] =
{
    /*接收通道的配置*/
    /*ChannelID*/                                   /*通道属性*/             
    {MAILBOX_MAILCODE_RESERVED(MCU,  ACPU, MSG),    MAILBOX_RECV_TASKLET_HI,     0    },
    {MAILBOX_MAILCODE_RESERVED(HIFI, ACPU, MSG),    MAILBOX_RECV_TASKLET_HI,     0    },
    {MAILBOX_MAILCODE_RESERVED(CCPU, ACPU, MSG),    MAILBOX_RECV_TASKLET_HI,     0    },
    {MAILBOX_MAILCODE_RESERVED(CCPU, ACPU, IFC),    MAILBOX_RECV_TASK_NORMAL,   0    },
    {MAILBOX_MAILCODE_RESERVED(MCU, ACPU, IFC),     MAILBOX_RECV_TASK_HIGH,   0    },

    /*发送通道配置*/
    /*ChannelID*/                                   /*通道属性*/                
    {MAILBOX_MAILCODE_RESERVED( ACPU, MCU,  MSG),   MAILBOX_SEND | MAILBOX_LOCK_SPINLOCK,   0    },
    {MAILBOX_MAILCODE_RESERVED( ACPU, HIFI, MSG),   MAILBOX_SEND | MAILBOX_LOCK_SPINLOCK,   0    },

    {MAILBOX_MAILCODE_RESERVED( ACPU, CCPU, MSG),   MAILBOX_SEND |
     MAILBOX_LOCK_SEMAPHORE /*如果消息通道作为IFC的返回通道,且这个IFC执行方的
                               函数有睡眠动作,此消息通道就只能用信号量来保护*/
    ,   0    },
    
VOS_UINT32 DRV_MAILBOX_Read(
                IPC_MSG_BLK_STRU       *pstMsgBlk,
                DRV_MAILBOX_QUEUE_STRU *pstQueue)
{
    MsgBlock                               *pstSndOsaMsg;
    VOS_UINT32                              uwMsgPriority;
    VOS_UINT32                              uwCpuId;

    /* 根据邮编进行相应处理 */
    switch (pstMsgBlk->stMsgHead.ulMailCode)
    {
        case MAILBOX_MAILCODE_ACPU_TO_HIFI_VOS_MSG_NORMAL :
        case MAILBOX_MAILCODE_CCPU_TO_HIFI_VOS_MSG_NORMAL :
        case MAILBOX_MAILCODE_BBE16_TO_HIFI_VOS_MSG_NORMAL:
        {
            uwMsgPriority = VOS_NORMAL_PRIORITY_MSG;

            /* 读出消息头信息中的VOS头(需要知道PID) */
            DRV_MAILBOX_ReadQueue(pstQueue,
                                  (VOS_UCHAR*)&pstMsgBlk->ulSenderCpuId,
                                  sizeof(VOS_MSG_HEADER_STRU));
            break;
        }

        case MAILBOX_MAILCODE_ACPU_TO_HIFI_VOS_MSG_URGENT :
        case MAILBOX_MAILCODE_CCPU_TO_HIFI_VOS_MSG_URGENT :
        case MAILBOX_MAILCODE_BBE16_TO_HIFI_VOS_MSG_URGENT:
        {
            uwMsgPriority = VOS_EMERGENT_PRIORITY_MSG;

            /* 读出消息头信息中的VOS头(需要知道PID) */
            DRV_MAILBOX_ReadQueue(pstQueue,
                                  (VOS_UCHAR*)&pstMsgBlk->ulSenderCpuId,
                                  sizeof(VOS_MSG_HEADER_STRU));
            break;
        }

        case MAILBOX_MAILCODE_ACPU_TO_HIFI_AUDIO :
        case MAILBOX_MAILCODE_ACPU_TO_HIFI_MISC:
        {
            uwMsgPriority = VOS_NORMAL_PRIORITY_MSG;

            /* 若非VOS消息,则自行填充VOS头 */
            pstMsgBlk->ulSenderCpuId  = (pstMsgBlk->stMsgHead.ulMailCode>>MAILBOX_ID_SRC_CPU_OFFSET)&0xff;
            pstMsgBlk->ulSenderPid    = UEPS_PID_DL;                          /* 此处填写AP侧DRV对应的PID,,待定 */
            pstMsgBlk->ulReceiverCpuId= VOS_CPU_ID_MEDDSP;
            pstMsgBlk->ulReceiverPid  = DSP_PID_AUDIO_RT;                     /* 目前默认为这两个通道的消息均为需实时响应的消息 */
            pstMsgBlk->ulLength       = pstMsgBlk->stMsgHead.ulMsgLength;
            pstMsgBlk->stMsgHead.ulMsgLength += sizeof(VOS_MSG_HEADER_STRU);
            break;
        }
        /* C核复位A核通知hifi C核复位channel */
        case MAILBOX_MAILCODE_ACPU_TO_HIFI_CCORE_RESET_ID:
        {
            uwMsgPriority = VOS_NORMAL_PRIORITY_MSG;

            /* 若非VOS消息,则自行填充VOS头 */
            pstMsgBlk->ulSenderCpuId  = (pstMsgBlk->stMsgHead.ulMailCode>>MAILBOX_ID_SRC_CPU_OFFSET)&0xff;
            pstMsgBlk->ulSenderPid    = UEPS_PID_DL;                            /* 此处填写AP侧DRV对应的PID,,待定 */
            pstMsgBlk->ulReceiverCpuId= VOS_CPU_ID_MEDDSP;
            pstMsgBlk->ulReceiverPid  = DSP_PID_VOICE;                          /* 目前默认为这两个通道的消息均为需实时响应的消息 */
            pstMsgBlk->ulLength       = pstMsgBlk->stMsgHead.ulMsgLength;
            pstMsgBlk->stMsgHead.ulMsgLength += sizeof(VOS_MSG_HEADER_STRU);
            break;
        }
        case MAILBOX_MAILCODE_RESERVED(CCPU, HIFI, MSG) :
        {
            uwCpuId = VOS_CPU_ID_CCPU;

            DRV_MAILBOX_Write(DRV_MAILBOX_GetMailBoxTx(uwCpuId),
                              DRV_MAILBOX_GetTargetCpu(uwCpuId),
                              VOS_NORMAL_PRIORITY_MSG,
                              (VOS_UCHAR *)pstQueue->uwRear,
                              pstMsgBlk->stMsgHead.ulMsgLength,
                              MAILBOX_MAILCODE_RESERVED(HIFI, CCPU, MSG));

            /*向目标CPU触发IPC中断*/
            DRV_IPC_TrigInt(DRV_MAILBOX_GetTargetCpu(uwCpuId),
                            DRV_MAILBOX_GetIntrSrc(uwCpuId));

            return VOS_OK;
        }
        case MAILBOX_MAILCODE_RESERVED(ACPU, HIFI, MSG):
        {
            uwCpuId = VOS_CPU_ID_ACPU;

            DRV_MAILBOX_Write(DRV_MAILBOX_GetMailBoxTx(uwCpuId),
                              DRV_MAILBOX_GetTargetCpu(uwCpuId),
                              VOS_NORMAL_PRIORITY_MSG,
                              (VOS_UCHAR *)pstQueue->uwRear,
                              pstMsgBlk->stMsgHead.ulMsgLength,
                              MAILBOX_MAILCODE_RESERVED(HIFI, ACPU, MSG));

            /*向目标CPU触发IPC中断*/
            DRV_IPC_TrigInt(DRV_MAILBOX_GetTargetCpu(uwCpuId),
                            DRV_MAILBOX_GetIntrSrc(uwCpuId));

            return VOS_OK;
        }
        default:
        {
            /*上报异常,MailCode异常*/
            OM_LogError1(OM_MAILBOX_RecieveMsg_MsgChannelIdErr, pstMsgBlk->stMsgHead.ulMailCode);
            return VOS_ERR;
        }

    }


    /*申请OSA消息缓存pMsg*/
    pstSndOsaMsg    = (MsgBlock*)VOS_AllocMsg(pstMsgBlk->ulSenderPid, pstMsgBlk->ulLength);

    /*若内存不足,释放互斥,直接返回*/
    if (VOS_NULL == pstSndOsaMsg)
    {
        OM_LogError(OM_MAILBOX_SendMsg_AllocFail);

        /* 复位 */
        OM_LogFatalAndReset(OM_MAILBOX_SendMsg_AllocFail);

        return VOS_ERR;
    }

    /* 将VOS_HEADER内容拷贝入消息中 */
    UCOM_MemCpy(pstSndOsaMsg,
                (VOS_VOID *)(&(pstMsgBlk->ulSenderCpuId)),
                sizeof(VOS_MSG_HEADER_STRU));

    /*从邮箱内容中读出消息内容(不含VOS头),并更新队列状态记录临时结构体*/
    DRV_MAILBOX_ReadQueue(pstQueue,
                          (VOS_UCHAR*)pstSndOsaMsg->aucValue,
                          pstMsgBlk->ulLength);

    /*根据消息优先级发送OSA消息*/
    if (VOS_EMERGENT_PRIORITY_MSG == uwMsgPriority)
    {
        return VOS_SendUrgentMsg(pstMsgBlk->ulSenderPid, pstSndOsaMsg, DRV_MAILBOX_CHANNEL_VOS_CH);
    }
    else
    {
        return VOS_SendMsg(pstMsgBlk->ulSenderPid, pstSndOsaMsg, DRV_MAILBOX_CHANNEL_VOS_CH);
    }

}
    /*中断方式的邮件数据处理*/
    {"mailboxInt"   ,MAILBOX_VXWORKS_PROC_STYLE_INT_NORMAL,     0,          0         },

    /*请在此后新增处理方式项目,否则会影响UT用例*/

    /*结束*/
};

/*C核的邮箱通道资源与平台系统资源对应关系配置表*/
MAILBOX_LOCAL struct mb_vx_cfg g_mailbox_vx_cfg_tbl[] =
{
#if 0
    /*接收通道的配置*/
    /*ChannelID*/                                       /*通道处理方式ID号*/
    {MAILBOX_MAILCODE_RESERVED(MCU,  CCPU, MSG),    MAILBOX_VXWORKS_PROC_STYLE_TASK_MSG      },
    {MAILBOX_MAILCODE_RESERVED(HIFI, CCPU, MSG),    MAILBOX_VXWORKS_PROC_STYLE_TASK_MSG      },
    {MAILBOX_MAILCODE_RESERVED(ACPU, CCPU, MSG),    MAILBOX_VXWORKS_PROC_STYLE_TASK_MSG      },
    {MAILBOX_MAILCODE_RESERVED(ACPU, CCPU, IFC),    MAILBOX_VXWORKS_PROC_STYLE_TASK_IFC      },
    {MAILBOX_MAILCODE_RESERVED(MCU,  CCPU, IFC),    MAILBOX_VXWORKS_PROC_STYLE_TASK_IFC      },
    /*发送通道配置*/
    /*ChannelID*/                                       /*通道处理方式ID号*/
    {MAILBOX_MAILCODE_RESERVED( CCPU, MCU,  MSG),   MAILBOX_VXWORKS_PROC_STYLE_SEND_RESERVED    },
    {MAILBOX_MAILCODE_RESERVED( CCPU, HIFI, MSG),   MAILBOX_VXWORKS_PROC_STYLE_SEND_RESERVED    },
    {MAILBOX_MAILCODE_RESERVED( CCPU, ACPU, MSG),   MAILBOX_VXWORKS_PROC_STYLE_SEND_RESERVED    },
    {MAILBOX_MAILCODE_RESERVED( CCPU, ACPU, IFC),   MAILBOX_VXWORKS_PROC_STYLE_SEND_RESERVED    },
    {MAILBOX_MAILCODE_RESERVED( CCPU, MCU, IFC),    MAILBOX_VXWORKS_PROC_STYLE_SEND_RESERVED    },
#else
    /*接收通道的配置*/
    /*ChannelID*/                                       /*通道处理方式ID号*/
    {MAILBOX_MAILCODE_RESERVED(HIFI, CCPU, MSG),    MAILBOX_VXWORKS_PROC_STYLE_TASK_MSG      },
    CPUn的通道0邮编,通道1邮编,通道2邮编,通道0邮编,
    说明: 邮编为VOS_NULL_DWORD表示对应的通道邮编不存在, 即与该CPU不支持该通道跨核消息; */
VOS_UINT32 g_uwDrvMailCodeTbl[VOS_CPU_ID_BUTT][DRV_MAILBOX_CHANNEL_BUTT] =
{
    {MAILBOX_MAILCODE_HIFI_TO_CCPU_VOS_MSG_NORMAL,
     MAILBOX_MAILCODE_HIFI_TO_CCPU_VOS_MSG_URGENT,
     VOS_NULL_DWORD,
     VOS_NULL_DWORD,
     VOS_NULL_DWORD,
     VOS_NULL_DWORD},
    {MAILBOX_MAILCODE_HIFI_TO_ACPU_VOS_MSG_NORMAL,
     MAILBOX_MAILCODE_HIFI_TO_ACPU_VOS_MSG_URGENT,
     MAILBOX_MAILCODE_HIFI_TO_ACPU_AUDIO,
     MAILBOX_MAILCODE_HIFI_TO_ACPU_MISC,
     MAILBOX_MAILCODE_HIFI_TO_ACPU_CCORE_RESET_ID,
     MAILBOX_MAILCODE_RESERVED(ACPU, HIFI, MSG)},
    {VOS_NULL_DWORD,
     VOS_NULL_DWORD,
     VOS_NULL_DWORD,
     VOS_NULL_DWORD,
     VOS_NULL_DWORD,
     VOS_NULL_DWORD},
    {VOS_NULL_DWORD,
     VOS_NULL_DWORD,
     VOS_NULL_DWORD,
     VOS_NULL_DWORD,
     VOS_NULL_DWORD,
     VOS_NULL_DWORD},
    {VOS_NULL_DWORD,
     VOS_NULL_DWORD,
     VOS_NULL_DWORD,