]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - ipc/ipcdev.git/blobdiff - packages/ti/ipc/rpmsg/RPMessage.c
SDOCM00118895 Missing access qualifier FAR in RPMessage module
[ipc/ipcdev.git] / packages / ti / ipc / rpmsg / RPMessage.c
index 894551596214faf20374ddb148309f4654df68b8..75d84dbe7521e697f344b167117395069aa823d7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011-2013, Texas Instruments Incorporated
+ * Copyright (c) 2011-2015 Texas Instruments Incorporated - http://www.ti.com
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
 
 /* Various arbitrary limits: */
 #define MAXMESSAGEQOBJECTS     256
-#define MAXMESSAGEBUFFERS      512
-#define MSGBUFFERSIZE          512   // Max payload + sizeof(ListElem)
-#define MAXHEAPSIZE            (MAXMESSAGEBUFFERS * MSGBUFFERSIZE)
-#define HEAPALIGNMENT          8
 
 /* The RPMessage Object */
 typedef struct RPMessage_Object {
@@ -172,6 +168,11 @@ typedef struct RPMessage_Transport  {
     Semaphore_Handle semHandle_toHost;
 } RPMessage_Transport;
 
+/* generated in RPMessage.xs: module$use() */
+extern __FAR__ const HeapBuf_Handle ti_ipc_rpmsg_RPMessage_heap;
+
+/* generated in template file RPMessage.xdt */
+extern __FAR__ const UInt ti_ipc_rpmsg_RPMessage_messageBufferSize;
 
 /* module diags mask */
 Registry_Desc Registry_CURDESC;
@@ -179,10 +180,6 @@ Registry_Desc Registry_CURDESC;
 static RPMessage_Module      module;
 static RPMessage_Transport   transport;
 
-/* We create a fixed size heap over this memory for copying received msgs */
-#pragma DATA_ALIGN (recv_buffers, HEAPALIGNMENT)
-static UInt8 recv_buffers[MAXHEAPSIZE];
-
 /* Module ref count: */
 static Int curInit = 0;
 
@@ -204,7 +201,7 @@ static Void RPMessage_swiFxn(UArg arg0, UArg arg1)
     while ((token = VirtQueue_getAvailBuf(transport.virtQueue_fromHost,
                                          (Void **)&msg, &len)) >= 0) {
 
-        Log_print3(Diags_INFO, FXNN": \n\tReceived msg: from: 0x%x, "
+        Log_print3(Diags_INFO, FXNN": Received msg from: 0x%x, "
                    "to: 0x%x, dataLen: %d",
                   (IArg)msg->srcAddr, (IArg)msg->dstAddr, (IArg)msg->dataLen);
 
@@ -259,7 +256,7 @@ static Void callback_availBufReady(VirtQueue_Handle vq)
 Void RPMessage_init(UInt16 remoteProcId)
 {
     GateHwi_Params gatePrms;
-    HeapBuf_Params prms;
+    Semaphore_Params semParams;
     int     i;
     Registry_Result result;
     Bool    isHost;
@@ -288,17 +285,12 @@ Void RPMessage_init(UInt16 remoteProcId)
        module.msgqObjects[i] = NULL;
     }
 
-    HeapBuf_Params_init(&prms);
-    prms.blockSize    = MSGBUFFERSIZE;
-    prms.numBlocks    = MAXMESSAGEBUFFERS;
-    prms.buf          = recv_buffers;
-    prms.bufSize      = MAXHEAPSIZE;
-    prms.align        = HEAPALIGNMENT;
-    module.heap       = HeapBuf_create(&prms, NULL);
-    if (module.heap == 0) {
-       System_abort("RPMessage_init: HeapBuf_create returned 0\n");
-    }
-    transport.semHandle_toHost = Semaphore_create(0, NULL, NULL);
+    /* store handle to heap created at config time */
+    module.heap = ti_ipc_rpmsg_RPMessage_heap;
+
+    Semaphore_Params_init(&semParams);
+    semParams.mode = Semaphore_Mode_BINARY;
+    transport.semHandle_toHost = Semaphore_create(0, &semParams, NULL);
 
     isHost = (MultiProc_self() == MultiProc_getId("HOST"));
 
@@ -310,17 +302,21 @@ Void RPMessage_init(UInt16 remoteProcId)
       Assert_isTrue(FALSE, NULL);
     }
     else {
+#if defined(OMAP5) || defined(VAYU)
       vqParams.callback = callback_availBufReady;
+#else
+      vqParams.callback = (xdc_Fxn)callback_availBufReady;
+#endif
     }
 
     /*
      * Create a pair VirtQueues (one for sending, one for receiving).
      * Note: First one gets an even, second gets odd vq ID.
      */
-    vqParams.vqId = ID_SELF_TO_A9;
+    vqParams.vqId = ID_SELF_TO_HOST;
     transport.virtQueue_toHost   = (Ptr)VirtQueue_create(remoteProcId,
                                                     &vqParams, NULL);
-    vqParams.vqId = ID_A9_TO_SELF;
+    vqParams.vqId = ID_HOST_TO_SELF;
     transport.virtQueue_fromHost = (Ptr)VirtQueue_create(remoteProcId,
                                                     &vqParams, NULL);
 
@@ -348,8 +344,6 @@ Void RPMessage_finalize()
     }
 
     /* Tear down Module */
-    HeapBuf_delete(&(module.heap));
-
     Swi_delete(&(transport.swiHandle));
 
     GateHwi_delete(&module.gateH);
@@ -463,7 +457,8 @@ Int RPMessage_delete(RPMessage_Handle *handlePtr)
 
            /* Free/discard all queued message buffers: */
            while ((payload = (Queue_elem *)List_get(obj->queue)) != NULL) {
-               HeapBuf_free(module.heap, (Ptr)payload, MSGBUFFERSIZE);
+               HeapBuf_free(module.heap, (Ptr)payload,
+                       ti_ipc_rpmsg_RPMessage_messageBufferSize);
            }
 
            List_delete(&(obj->queue));
@@ -523,7 +518,7 @@ Int RPMessage_recv(RPMessage_Handle handle, Ptr data, UInt16 *len,
     }
     else  {
        payload = (Queue_elem *)List_get(obj->queue);
-       Assert_isTrue((!payload), NULL);
+       Assert_isTrue((payload), NULL);
     }
 
     if (status == RPMessage_S_SUCCESS)  {
@@ -609,7 +604,7 @@ Int RPMessage_send(UInt16 dstProc,
         /* If callback registered, call it: */
         if (obj->cb) {
             Log_print2(Diags_INFO, FXNN": calling callback with data len: "
-                            "%d, from: %d\n", len, srcEndpt);
+                            "%d, from: %d", len, srcEndpt);
             obj->cb(obj, obj->arg, data, len, srcEndpt);
         }
         else {