Commit e1eddd55 authored by Arun Gopalakrishnan's avatar Arun Gopalakrishnan Committed by Hari Kanigeri

Syslink IPC ListMP, messageQ aligned with 2_00_00_08

This patch can be used to sync with the syslink drop 2.0.0.8 for
ListMP/ListMP Shared Mem and MessageQ Transport SHM modules

The changes are limited to
1.      parameter name changes
2.      error code changes
3.      addition of error function in MessageQ Transport SHM

No major functional change in any of the functions in above
modules.
Signed-off-by: default avatarArun M G <arunmg@ti.com>
parent 5716f65d
......@@ -150,7 +150,7 @@ struct listmp_elem {
struct listmp_params {
bool cache_flag;
/*!< Set to 1 by the open() call. No one else should touch this! */
struct mutex *lock_handle;
struct mutex *gate;
/*!< Lock used for critical region management of the list */
void *shared_addr;
/*!< shared memory address */
......@@ -158,7 +158,7 @@ struct listmp_params {
/*!< shared memory size */
char *name;
/*!< Name of the object */
int resourceId;
int resource_id;
/*!<
* resourceId Specifies the resource id number.
* Parameter is used only when type is set to Fast List
......
......@@ -168,7 +168,7 @@ struct listmp_sharedmemory_cmd_args {
struct listmp_params *params;
u32 name_len;
u32 shared_addr_srptr;
void *knl_lock_handle;
void *knl_gate;
} create;
struct {
......@@ -180,7 +180,7 @@ struct listmp_sharedmemory_cmd_args {
struct listmp_params *params;
u32 name_len;
u32 shared_addr_srptr;
void *knl_lock_handle;
void *knl_gate;
} open;
struct {
......
......@@ -120,6 +120,13 @@
#define MESSAGEQ_TRANSPORTSHM_E_HANDLE \
MESSAGEQ_TRANSPORTSHM_MAKE_FAILURE(8)
/*!
* @def MESSAGEQTRANSPORTSHM_E_NOTSUPPORTED
* @brief The specified operation is not supported.
*/
#define MESSAGEQTRANSPORTSHM_E_NOTSUPPORTED \
MESSAGEQ_TRANSPORTSHM_MAKE_FAILURE(9)
/*!
* @def MESSAGEQ_TRANSPORTSHM_SUCCESS
* @brief Operation successful.
......@@ -140,12 +147,45 @@
* Structures & Enums
* =============================================================================
*/
/*!
* @brief Structure defining the reason for error function being called
*/
enum MessageQTransportShm_Reason {
MessageQTransportShm_Reason_FAILEDPUT,
/*!< Failed to send the message. */
MessageQTransportShm_Reason_INTERNALERR,
/*!< An internal error occurred in the transport */
MessageQTransportShm_Reason_PHYSICALERR,
/*!< An error occurred in the physical link in the transport */
MessageQTransportShm_Reason_FAILEDALLOC
/*!< Failed to allocate a message. */
};
/*!
* @brief transport error callback function.
*
* First parameter: Why the error function is being called.
*
* Second parameter: Handle of transport that had the error. NULL denotes
* that it is a system error, not a specific transport.
*
* Third parameter: Pointer to the message. This is only valid for
* #MessageQTransportShm_Reason_FAILEDPUT.
*
* Fourth parameter: Transport specific information. Refer to individual
* transports for more details.
*/
/*!
* @brief Module configuration structure.
*/
struct messageq_transportshm_config {
u32 reserved;
/*!< Reserved value */
struct messageq_transportshm_config {
void (*err_fxn)(enum MessageQTransportShm_Reason reason,
void *handle,
void *msg,
u32 info);
/*!< Asynchronous error function for the transport module */
};
/*!
......@@ -153,6 +193,8 @@ struct messageq_transportshm_config {
* instances.
*/
struct messageq_transportshm_params {
u32 priority;
/*!< Priority of messages supported by this transport */
void *gate;
/*!< Gate used for critical region management of the shared memory */
void *shared_addr;
......@@ -165,8 +207,6 @@ struct messageq_transportshm_params {
/*!< Notify event number to be used by the transport */
void *notify_driver;
/*!< Notify driver to be used by the transport */
u32 priority;
/*!< Priority of messages supported by this transport */
};
/*!
......@@ -186,6 +226,7 @@ enum messageq_transportshm_status {
*/
};
/* =============================================================================
* APIs called by applications
* =============================================================================
......@@ -195,7 +236,7 @@ enum messageq_transportshm_status {
void messageq_transportshm_get_config(struct messageq_transportshm_config *cfg);
/* Function to setup the MessageQTransportShm module. */
int messageq_transportshm_setup(struct messageq_transportshm_config *cfg);
int messageq_transportshm_setup(const struct messageq_transportshm_config *cfg);
/* Function to destroy the MessageQTransportShm module. */
int messageq_transportshm_destroy(void);
......@@ -215,6 +256,15 @@ int messageq_transportshm_delete(void **mqtshm_handleptr);
u32 messageq_transportshm_shared_mem_req(const
struct messageq_transportshm_params *params);
/* Set the asynchronous error function for the transport module */
void messageq_transportshm_set_err_fxn(
void (*err_fxn)(
enum MessageQTransportShm_Reason reason,
void *handle,
void *msg,
u32 info));
/* =============================================================================
* APIs called internally by MessageQ module.
* =============================================================================
......@@ -223,7 +273,7 @@ u32 messageq_transportshm_shared_mem_req(const
int messageq_transportshm_put(void *mqtshm_handle, void *msg);
/* Control Function */
bool messageq_transportshm_control(void *mqtshm_handle, u32 cmd,
int messageq_transportshm_control(void *mqtshm_handle, u32 cmd,
u32 *cmd_arg);
/* Get current status of the MessageQTransportShm */
......
......@@ -178,8 +178,8 @@ static inline int listmp_sharedmemory_ioctl_create(
if (unlikely(params.shared_addr == NULL))
goto free_name;
/* Update lock_handle in params. */
params.lock_handle = cargs->args.create.knl_lock_handle;
/* Update gate in params. */
params.gate = cargs->args.create.knl_gate;
cargs->args.create.listmp_handle = listmp_sharedmemory_create(&params);
size = copy_to_user(cargs->args.create.params, &params,
......@@ -256,8 +256,8 @@ static inline int listmp_sharedmemory_ioctl_open(
if (unlikely(params.shared_addr == NULL))
goto free_name;
/* Update lock_handle in params. */
params.lock_handle = cargs->args.open.knl_lock_handle;
/* Update gate in params. */
params.gate = cargs->args.open.knl_gate;
status = listmp_sharedmemory_open(&listmp_handle, &params);
if (status)
goto free_name;
......
......@@ -124,7 +124,7 @@ struct messageq_transportshm_object {
*/
static struct messageq_transportshm_moduleobject messageq_transportshm_state = {
.gate_handle = NULL,
.def_cfg.reserved = 0,
.def_cfg.err_fxn = 0,
.def_inst_params.gate = NULL,
.def_inst_params.shared_addr = 0x0,
.def_inst_params.shared_addr_size = 0x0,
......@@ -206,7 +206,7 @@ exit:
* messageq_transportshm_setup with NULL parameters. The default
* parameters would get automatically used.
*/
int messageq_transportshm_setup(struct messageq_transportshm_config *cfg)
int messageq_transportshm_setup(const struct messageq_transportshm_config *cfg)
{
int status = MESSAGEQ_TRANSPORTSHM_SUCCESS;
struct messageq_transportshm_config tmpCfg;
......@@ -445,7 +445,7 @@ void *messageq_transportshm_create(u16 proc_id,
(2 * MESSAGEQ_TRANSPORTSHM_CACHESIZE));
listmp_params[0].shared_addr_size = \
listmp_sharedmemory_shared_memreq(&(listmp_params[0]));
listmp_params[0].lock_handle = params->gate;
listmp_params[0].gate = params->gate;
listmp_params[0].name = NULL;
listmp_params[0].list_type = listmp_type_SHARED;
......@@ -457,7 +457,7 @@ void *messageq_transportshm_create(u16 proc_id,
listmp_sharedmemory_shared_memreq(&(listmp_params[1]));
listmp_params[1].name = NULL;
listmp_params[1].list_type = listmp_type_SHARED;
listmp_params[1].lock_handle = params->gate;
listmp_params[1].gate = params->gate;
handle->my_listmp_handle = listmp_sharedmemory_create
(&(listmp_params[my_index]));
......@@ -680,7 +680,7 @@ exit:
* Purpose:
* Control Function
*/
bool messageq_transportshm_control(void *mqtshm_handle, u32 cmd, u32 *cmdArg)
int messageq_transportshm_control(void *mqtshm_handle, u32 cmd, u32 *cmdArg)
{
gt_3trace(mqtshm_debugmask, GT_ENTER, "messageq_transportshm_control",
mqtshm_handle, cmd, cmdArg);
......@@ -688,8 +688,8 @@ bool messageq_transportshm_control(void *mqtshm_handle, u32 cmd, u32 *cmdArg)
BUG_ON(mqtshm_handle == NULL);
gt_1trace(mqtshm_debugmask, GT_LEAVE, "messageq_transportshm_control",
false);
return false;
MESSAGEQTRANSPORTSHM_E_NOTSUPPORTED);
return MESSAGEQTRANSPORTSHM_E_NOTSUPPORTED;
}
/*
......@@ -784,3 +784,31 @@ exit:
gt_0trace(mqtshm_debugmask, GT_LEAVE,
"messageq_transportshm_notifyFxn");
}
/*
* ======== messageq_transportshm_delete ========
* Purpose:
* This will set the asynchronous error function for the transport module
*/
void messageq_transportshm_set_err_fxn(
void (*err_fxn)(
enum MessageQTransportShm_Reason reason,
void *handle,
void *msg,
u32 info))
{
u32 key;
key = mutex_lock_interruptible(messageq_transportshm_state.gate_handle);
if (key < 0)
goto exit;
messageq_transportshm_state.cfg.err_fxn = err_fxn;
mutex_unlock(messageq_transportshm_state.gate_handle);
exit:
return;
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment