summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: c745e96)
raw | patch | inline | side by side (parent: c745e96)
author | Ramsey Harris <ramsey@ti.com> | |
Wed, 28 Aug 2013 22:06:36 +0000 (15:06 -0700) | ||
committer | Chris Ring <cring@ti.com> | |
Wed, 28 Aug 2013 23:46:53 +0000 (16:46 -0700) |
Fixed the offset calculation for embedded pointers by allowing
the caller to specify encoded base value. Enhanced some comments.
Code cleanup.
the caller to specify encoded base value. Enhanced some comments.
Code cleanup.
packages/ti/ipc/mm/MmRpc.c | patch | blob | history | |
packages/ti/ipc/mm/MmRpc.h | patch | blob | history | |
packages/ti/ipc/tests/Mx.c | patch | blob | history |
index fab40675bf810f21df7f23b18376e70f0439d1c1..e6f0c119671eb9cf3b32b086e53bdb1b7a49071a 100644 (file)
int len;
int i;
- /* Combine function parameters and translation array into one contiguous
- * message. TODO, modify driver to accept two separate buffers in order
- * to eliminate this step. */
+ /* combine params and translation array into one contiguous message */
len = sizeof(struct rppc_function) +
(ctx->num_xlts * sizeof(struct rppc_param_translation));
msg = (void *)calloc(len, sizeof(char));
rpfxn->params[i].reserved = param->param.offPtr.handle;
break;
-#if 0 /* TBD */
- case MmRpc_ParamType_Elem:
- rpfxn->params[i].type = RPPC_PARAM_TYPE_PTR;
- rpfxn->params[i].size = param->param.elem.size;
- rpfxn->params[i].data = param->param.elem.offset;
- rpfxn->params[i].base = param->param.elem.base;
- rpfxn->params[i].reserved = param->param.elem.handle;
- break;
-#endif
default:
printf("MmRpc_call: Error: invalid parameter type\n");
status = MmRpc_E_INVALIDPARAM;
rpfxn->num_translations = ctx->num_xlts;
for (i = 0; i < ctx->num_xlts; i++) {
- uint32_t index;
- size_t ptr;
-
- /* compute base value */
- index = ctx->xltAry[i].index;
- ptr = rpfxn->params[index].base + ctx->xltAry[i].offset;
-
/* pack the pointer translation entry */
- rpfxn->translations[i].index = index;
+ rpfxn->translations[i].index = ctx->xltAry[i].index;
rpfxn->translations[i].offset = ctx->xltAry[i].offset;
- rpfxn->translations[i].base = (size_t)(*(void **)ptr);
+ rpfxn->translations[i].base = ctx->xltAry[i].base;
rpfxn->translations[i].reserved = ctx->xltAry[i].handle;
}
index ed8f000e50c699e7853d677142d1ee5b9707fd48..2ad16ac82b3bc0fdd8827f431e1fe31111edaecd 100644 (file)
} ptr;
struct {
- size_t size; /*!< size (bytes) of memory block */
- size_t base; /*!< base address of memory block */
- size_t offset; /*!< offset (bytes) from base to data */
+ size_t size; /*!< size (bytes) of param structure */
+ size_t base; /*!< param address */
+ size_t offset; /*!< offset within param */
size_t handle; /*!< memory allocator handle */
} offPtr;
-#if 0 /* TBD */
- struct {
- size_t size; /*!< size of the array element */
- size_t offset; /*!< offset to current array element */
- size_t base; /*!< base address of array */
- size_t handle; /*!< memory allocator handle */
- } elem;
-#endif
} param;
} MmRpc_Param;
typedef struct {
uint32_t index; /*!< parameter index to base pointer */
- ptrdiff_t offset; /*!< offset from the base address to pointer */
+ ptrdiff_t offset; /*!< offset to embedded pointer
+ *
+ * If param type is MmRpc_ParamType_Ptr, offset
+ * to embedded pointer from addr. If param type
+ * is MmRpc_ParamType_OffPtr, offset to embedded
+ * pointer from base+offset.
+ */
+ size_t base; /*!< addr or file descriptor [+ data offset]
+ *
+ * If param type is MmRpc_ParamType_Ptr, the
+ * value of the embedded pointer. If param type
+ * is MmRpc_ParamType_OffPtr, the file descriptor
+ * of the block referenced by the embedded pointer
+ * plus an optional data offset.
+ */
size_t handle; /*!< memory allocator handle */
} MmRpc_Xlt;
index 17208a82252dc571980dae60d7fd02f249d04b6c..a0e8a6d603a495b5ee9b7cb61a3b45241c97d49e 100644 (file)
fxnCtx->xltAry[0].index = 0;
fxnCtx->xltAry[0].offset = MmRpc_OFFSET(compute, &compute->inBuf);
+ fxnCtx->xltAry[0].base = (size_t)compute->inBuf;
#if defined(SYSLINK_BUILDOS_QNX)
fxnCtx->xltAry[0].handle = NULL;
#else
fxnCtx->xltAry[1].index = 0;
fxnCtx->xltAry[1].offset = MmRpc_OFFSET(compute, &compute->outBuf);
+ fxnCtx->xltAry[1].base = (size_t)compute->outBuf;
#if defined(SYSLINK_BUILDOS_QNX)
fxnCtx->xltAry[1].handle = NULL;
#else