blob: 7690bf84cfcd8aa1122ed9279a658d821a22b0d3 [file] [log] [blame]
/*******************************************************************************
* Copyright by ZTE Corporation.
*
* File Name:
* File Mark:
* Description:
* Others:
* Version: 0.1
* Author: zhangdongdong
* Date: 2015-10-21
* History 1:
* Date:
* Version:
* Author:
* Modification:
* History 2:
********************************************************************************/
#ifndef _DRVS_RPMSG_H
#define _DRVS_RPMSG_H
/*******************************************************************************
* Include files *
*******************************************************************************/
#include "ram_config.h"
/*******************************************************************************
* Macro *
*******************************************************************************/
#define RPMSG_WRITE_INT (0x1)
#define RPMSG_READ_POLL (0x1<<1)
#define CHANNEL_FLAG 0x1
#define M0AP_CHANNEL_MAXID 10
/*******************************************************************************
* Types *
*******************************************************************************/
/*-----------------------[Begin] [used by normal]-----------------------------*/
/*channels definition*/
#define DRIVER channel_0
#define PSM channel_1
#define USB_ADB channel_2
#define WAN1 channel_3
#define WAN2 channel_4
#define WAN3 channel_5
#define WAN4 channel_6
#define DTMF channel_7
#define DEV_BUFFREE channel_8
#define AMT channel_9
#define RAMDUMP channel_10
#define VSIM channel_11
#define ISMS channel_12
#define IPSEC1 channel_13
#define IPSEC2 channel_14
#define IPSEC3 channel_15
#define IPSEC4 channel_16
typedef enum _T_ZDrvRpMsg_MsgActor
{
#ifdef _OS_TOS
ICP_MSG_ACTOR_A9,
#endif
ICP_MSG_ACTOR_ZSP,
ICP_RPMSG_ACTOR_M0,
MAX_RPMSG_ACTOR
} T_ZDrvRpMsg_MsgActor;
typedef enum _T_ZDrvRpMsg_ChID
{
CHANNEL_BASEID,
channel_0 = CHANNEL_BASEID, //driver just for AP<->PS
channel_1, //PSM
channel_2, //USB_DETCT
channel_3, //USB_ADB
channel_4, //WAN
channel_5, //LAN1
channel_6, //LAN2
channel_7, //DEV_BUFMALLOC
channel_8, //DEV_BUFFREE
channel_9, //AT
CHANNEL_PS2M0_MAXID,
channel_10 = CHANNEL_PS2M0_MAXID, //AMT
channel_11, //LOG
channel_12, //FOTA
channel_13,
channel_14,
channel_15,
channel_16,
channel_17,
channel_18,
channel_19,
channel_20,
channel_21,
channel_22,
channel_23,
channel_24,
channel_25,
channel_26,
channel_27,
channel_28,
channel_29,
channel_30,
channel_31,
channel_32,
channel_33,
channel_34,
channel_35,
channel_36,
channel_37,
channel_38,
channel_39,
channel_40,
channel_41,
channel_42,
channel_43,
channel_44,
channel_45,
channel_46,
channel_47,
channel_48,
channel_49,
channel_50,
channel_51,
channel_52,
channel_53,
channel_54,
channel_55,
channel_56,
channel_57,
channel_58,
channel_59,
channel_60,
channel_61,
channel_62,
channel_63,
PSAP_CHANNEL_MAXID
}T_ZDrvRpMsg_ChID;
typedef struct _T_ZDrvRpMsg_Msg
{
T_ZDrvRpMsg_MsgActor actorID;
T_ZDrvRpMsg_ChID chID;
UINT32 flag; /*bit0:is need send icp int 1:y; 0:n*/
/*bit1: read mode 1:poll; 0:semaphore*/
VOID *buf;
UINT32 len;
} T_ZDrvRpMsg_Msg;
typedef enum _T_ZDrvRpMsg_ErrCode
{
RPMSG_INVALID_PARAMETER = -101, //²ÎÊý²»ÕýÈ·
RPMSG_SPACE_NOT_ENOUGH = -102, //¿Õ¼ä²»×ã¹»
RPMSG_CHANNEL_ALREADY_EXIST = -103, //ͨµÀÒѾ­´æÔÚ
RPMSG_CHANNEL_INEXISTANCE = -104, //ͨµÀ²»´æÔÚ
RPMSG_CHANNEL_MSG_ERR = -105, //ͨµÀÖÐÏûÏ¢´íÎó
RPMSG_CHANNEL_NOMSG = -107, //ͨµÀÖÐûÓÐÏûÏ¢
}
T_ZDrvRpMsg_ErrCode;
typedef VOID (*T_ZDrvRpMsg_CallbackFunction)(VOID *buf, UINT32 len);/*for normal*/
/*******************************************************************************
* Function Prototypes *
*******************************************************************************/
/*******************************************************************************
* Function: zDrvRpMsg_CreateChannel
* Description: This function is used for create channel to send message;
* Parameters:
* Input:
* actorID:remote cpu
* chID: ID of channel
* size: size of channel
* Output:None
*
* Returns:
* DRV_SUCCESS: successfully .
* DRV_ERROR: fail .
*
* Others:
********************************************************************************/
SINT32 zDrvRpMsg_CreateChannel (T_ZDrvRpMsg_MsgActor actorID, T_ZDrvRpMsg_ChID chID, UINT32 size);
/*******************************************************************************
* Function: zDrvRpMsg_RegCallBack
* Description: This function is used for registing callback functions;
* Parameters:
* Input:
* actor: core id.
* chID : channel id
* callback: callback function
* Output:None
*
* Returns:
* DRV_SUCCESS: successfully .
* other: fail .
*
*
* Others:
********************************************************************************/
SINT32 zDrvRpMsg_RegCallBack(T_ZDrvRpMsg_MsgActor actorID, T_ZDrvRpMsg_ChID chID, T_ZDrvRpMsg_CallbackFunction callback);
/*******************************************************************************
* Function: zDrvRpMsg_MaskInt
* Description: This function is used for mask ICP interrupt from another core;
* Parameters:
* Input:
* actor: which core.
* bit_map: which interrupts will be masked.
* Output:None
*
* Returns:
* None
*
*
* Others:
********************************************************************************/
SINT32 zDrvRpMsg_MaskInt(T_ZDrvRpMsg_MsgActor actorID, T_ZDrvRpMsg_ChID chID);
/*******************************************************************************
* Function: zDrvRpMsg_UnmaskInt
* Description: This function is used for unmask ICP interrupt from another core;
* Parameters:
* Input:
* actor: which core.
* bit_map: which interrupts will be unmasked.
* Output:None
*
* Returns:
* None
*
*
* Others:
********************************************************************************/
SINT32 zDrvRpMsg_UnmaskInt(T_ZDrvRpMsg_MsgActor actorID, T_ZDrvRpMsg_ChID chID);
/*******************************************************************************
* Function: zDrvRpMsg_Write
* Description: This function is used for sending message to remote cpu, mutex;
* Parameters:
* Input:
* pMsg: the msg which will be sent
* Output:None
*
* Returns:
* DRV_SUCCESS: successfully send msg.
* other: fail to send msg.
*
*
* Others:
********************************************************************************/
SINT32 zDrvRpMsg_Write(const T_ZDrvRpMsg_Msg *pMsg);
/*******************************************************************************
* Function: zDrvRpMsg_WriteWithId
* Description: This function is used for ps&phy to send msg to remote cpu.
* Parameters:
* Input:
* msgId:msg id that ps will put into the ring buffer
* pMsg: the msg which will be sent
* Output:None
*
* Returns:
* DRV_SUCCESS: successfully send msg.
* other: fail to send msg.
*
*
* Others:
********************************************************************************/
SINT32 zDrvRpMsg_WriteWithId(UINT32 msgId, const T_ZDrvRpMsg_Msg *pMsg);
/*******************************************************************************
* Function: zDrvRpMsg_WriteLockIrq
* Description: This function is used for sending message to remote cpu, no mutex;
* Parameters:
* Input:
* pMsg: the msg which will be sent
* Output:None
*
* Returns:
* DRV_SUCCESS: successfully send msg.
* other: fail to send msg.
*
*
* Others:
********************************************************************************/
SINT32 zDrvRpMsg_WriteLockIrq(const T_ZDrvRpMsg_Msg *pMsg);
/*******************************************************************************
* Function: zDrvRpMsg_Read
* Description: This function is used for reading message;
* Parameters:
* Input:
* pMsg:message which will be read
* Output:
* pMsg
*
* Returns:
* DRV_SUCCESS: successfully .
* other: fail .
*
* Others:
********************************************************************************/
SINT32 zDrvRpMsg_Read(const T_ZDrvRpMsg_Msg *pMsg);
/*******************************************************************************
* Function: zDrvRpMsg_ReadWithId
* Description: This function is used for ps&phy to read message from remote cpu;
* Parameters:
* Input:
* pMsgId:msg id that ps will get from the ring buffer
* pMsg:message which will be read
* Output:
* pMsg
*
* Returns:
* DRV_SUCCESS: successfully .
* other: fail .
*
* Others:
********************************************************************************/
SINT32 zDrvRpMsg_ReadWithId(UINT32 *pMsgId, const T_ZDrvRpMsg_Msg *pMsg);
/*******************************************************************************
* Function: zDrvRpMsg_ReadWithIdLockIrq
* Description: This function is used for reading message;
* Parameters:
* Input:
* pMsgId:msg id that ps will get from the ring buffer
* pMsg:message which will be read
* Output:
* pMsg
*
* Returns:
* DRV_SUCCESS: successfully .
* other: fail .
*
* Others:
********************************************************************************/
SINT32 zDrvRpMsg_ReadWithIdLockIrq(UINT32 *pMsgId, const T_ZDrvRpMsg_Msg *pMsg);
/*******************************************************************************
* Function: zDrvRpMsg_ReadLockIrq
* Description: This function is used for reading message;
* Parameters:
* Input:
* pMsg:message which will be read
* Output:
* pMsg
*
* Returns:
* DRV_SUCCESS: successfully .
* other: fail .
*
* Others:
********************************************************************************/
SINT32 zDrvRpMsg_ReadLockIrq(const T_ZDrvRpMsg_Msg *pMsg);
/*******************************************************************************
* Function: zDrvRpMsg_ChIsEmpty
* Description: This function is used for checking the channel used to receive message is empty or not;
* Parameters:
* Input:
* actorID:remote cpu
* chID:channel id
* Output:None
*
* Returns:
* TRUE: channel is empty .
* FALSE: channel is not empty .
*
* Others:
********************************************************************************/
BOOL zDrvRpMsg_ChIsEmpty(T_ZDrvRpMsg_MsgActor actorID, T_ZDrvRpMsg_ChID chID);
/*******************************************************************************
* Function: zDrvRpMsg_WriteChIsEmpty
* Description: This function is used for checking the channel used to send message is empty or not;
* Parameters:
* Input:
* actorID:remote cpu
* chID:channel id
* Output:None
*
* Returns:
* TRUE: channel is empty .
* FALSE: channel is not empty .
*
* Others:
********************************************************************************/
BOOL zDrvRpMsg_WriteChIsEmpty(T_ZDrvRpMsg_MsgActor actorID, T_ZDrvRpMsg_ChID chID);
/*******************************************************************************
* Function: zDrvRpMsg_CreateBlock
* Description: This function is used for create block channel to send message;
* Parameters:
* Input:
* actorID:remote cpu
* chID: ID of channel
* blkSize: size of block, 4 bytes reserve at leaset
* blkNums: numbers of block
* memtype: 0:iram 1:ddr
* Output:None
*
* Returns:
* DRV_SUCCESS: successfully .
* DRV_ERROR: fail .
*
* Others:
********************************************************************************/
SINT32 zDrvRpMsg_CreateBlock(T_ZDrvRpMsg_MsgActor actorID, T_ZDrvRpMsg_ChID chID, UINT32 blkSize, UINT32 blkNums, UINT32 memType);
/*******************************************************************************
* Function: zDrvRpMsg_GetWriteAddr
* Description: This function is used for getting write addr;
* Parameters:
* Input:
* actorID:remote processor id
* chID:channel id
* Output:
* wrAddr:addr for write
*
* Returns:
* positive: success
* negative: fail .
*
* Others:
********************************************************************************/
SINT32 zDrvRpMsg_GetWriteAddr(T_ZDrvRpMsg_MsgActor actorID, T_ZDrvRpMsg_ChID chID, VOID **wrAddr);
/*******************************************************************************
* Function: zDrvRpMsg_WriteUpdate
* Description: This function is used for reading message;
* Parameters:
* Input:
* actorID:remote processor id
* chID:channel id
* addr:addr for update
* len:update len
* intFlag: 0:without icp int 1:with icp int
* Output:
* NULL
*
* Returns:
* positive: len
* negative: fail .
*
* Others:
********************************************************************************/
SINT32 zDrvRpMsg_WriteUpdate(T_ZDrvRpMsg_MsgActor actorID, T_ZDrvRpMsg_ChID chID, UINT32 addr, UINT32 len, BOOL intFlag);
/*******************************************************************************
* Function: zDrvRpMsg_GetReadAddr
* Description: This function is used for getting read addr;
* Parameters:
* Input:
* actorID:remote processor id
* chID:channel id
* Output:
* rdAddr:addr for read
*
* Returns:
* positive: len
* negative: fail .
*
* Others:
********************************************************************************/
SINT32 zDrvRpMsg_GetReadAddr(T_ZDrvRpMsg_MsgActor actorID, T_ZDrvRpMsg_ChID chID, VOID **rdAddr);
/*******************************************************************************
* Function: zDrvRpMsg_ReadUpdate
* Description: This function is used for reading message;
* Parameters:
* Input:
* actorID:remote processor id
* chID:channel id
* addr:update addr
* Output:
* NULL
*
* Returns:
* positive: len
* negative: fail .
*
* Others:
********************************************************************************/
SINT32 zDrvRpMsg_ReadUpdate(T_ZDrvRpMsg_MsgActor actorID, T_ZDrvRpMsg_ChID chID, UINT32 addr);
/*******************************************************************************
* Function: zDrvRpMsg_Initiate
* Description: This function is used to init rpmsg module;
* Parameters:
* Input:
* null
*
* Output:None
*
* Returns:
* DRV_SUCCESS: successfully .
* other: fail .
*
*
* Others:
********************************************************************************/
SINT32 zDrvRpMsg_Initiate (VOID);
/*******************************************************************************
* Function: zDrvRpMsg_ReadExit
* Description: This function is used to exit from the block read func,for ctrm;
* Parameters:
* Input:
* null
*
* Output:None
*
* Returns:
* null .
*
*
*
* Others:
********************************************************************************/
VOID zDrvRpMsg_ReadExit(T_ZDrvRpMsg_MsgActor actor, T_ZDrvRpMsg_ChID chID);
#endif