]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - keystone-rtos/rm-lld.git/blobdiff - src/rm_transport.c
Added pre-main capabilities, cleaned up services and NameServer modules
[keystone-rtos/rm-lld.git] / src / rm_transport.c
index 9864eae679a78ed33991a4d10a8b8b8488d05976..de5a60b74aac245877a3235d882741f5c8acdbce 100644 (file)
@@ -206,7 +206,7 @@ Rm_TransportResult Rm_transportNodeDelete(Rm_Inst *rmInst, Rm_TransportHandle tr
     else\r
     {\r
         /* Delete the transport node */\r
-        if ((prevNode == NULL) && transportNode->nextNode)\r
+        if (prevNode == NULL)\r
         {\r
             /* Node to be deleted exists at start of route map.  Map second\r
              * node to be start of route map as long as there are more than\r
@@ -257,31 +257,25 @@ Rm_Packet *Rm_transportCreateResourceReqPkt(Rm_Inst *rmInst, Rm_TransportNode *d
     resourceReqPkt = (Rm_ResourceRequestPkt *) rmPkt->data;\r
     /* Populate the resource request packet using the transaction information */\r
     resourceReqPkt->requestId = transaction->localId;\r
-    if (transaction->type == Rm_service_RESOURCE_ALLOCATE)\r
+    if (transaction->type == Rm_service_RESOURCE_ALLOCATE_INIT)\r
     {\r
-        resourceReqPkt->resourceReqType = Rm_resReqPktType_ALLOCATE;\r
+        resourceReqPkt->resourceReqType = Rm_resReqPktType_ALLOCATE_INIT;\r
     }\r
-    else if (transaction->type == Rm_service_RESOURCE_BLOCK_ALLOCATE)\r
+    else if (transaction->type == Rm_service_RESOURCE_ALLOCATE_USE)\r
     {\r
-        resourceReqPkt->resourceReqType = Rm_resReqPktType_BLOCK_ALLOCATE;\r
-    }\r
-    else if (transaction->type == Rm_service_RESOURCE_ALLOCATE_BY_NAME)\r
-    {\r
-        resourceReqPkt->resourceReqType = Rm_resReqPktType_ALLOCATE_NAMED;\r
-    }\r
+        resourceReqPkt->resourceReqType = Rm_resReqPktType_ALLOCATE_USE;\r
+    }    \r
     else if (transaction->type == Rm_service_RESOURCE_FREE)\r
     {\r
         resourceReqPkt->resourceReqType = Rm_resReqPktType_FREE;\r
     }\r
-    else if (transaction->type == Rm_service_RESOURCE_BLOCK_FREE)\r
-    {\r
-        resourceReqPkt->resourceReqType = Rm_resReqPktType_BLOCK_FREE;\r
-    }\r
-    else if (transaction->type == Rm_service_RESOURCE_FREE_BY_NAME)\r
+    else if (transaction->type == Rm_service_RESOURCE_GET_BY_NAME)\r
     {\r
-        resourceReqPkt->resourceReqType = Rm_resReqPktType_FREE_NAMED;\r
+        resourceReqPkt->resourceReqType = Rm_resReqPktType_GET_NAMED;\r
     }\r
-    strcpy(&(resourceReqPkt->instName)[0], rmInst->name);\r
+    /* Pass along the packet source and service source information */\r
+    strcpy(resourceReqPkt->pktSrcInstName, rmInst->instName);\r
+    strcpy(resourceReqPkt->serviceSrcInstName, transaction->serviceSrcInstName);\r
     /* Copy the resource data */\r
     memcpy ((void *)&(resourceReqPkt->resourceInfo), (void *)&(transaction->resourceInfo),\r
             sizeof(Rm_ResourceInfo));\r
@@ -365,7 +359,9 @@ Rm_Packet *Rm_transportCreateNsRequestPkt(Rm_Inst *rmInst, Rm_TransportNode *dst
     {\r
         nsReqPkt->nsRequestType = Rm_nsReqPktType_UNMAP_RESOURCE;\r
     }\r
-    strcpy(&(nsReqPkt->instName)[0], rmInst->name);\r
+    /* Pass along the packet source and service source information */\r
+    strcpy(nsReqPkt->pktSrcInstName, rmInst->instName);\r
+    strcpy(nsReqPkt->serviceSrcInstName, transaction->serviceSrcInstName);\r
     /* Copy the NameServer request data */\r
     memcpy ((void *)&(nsReqPkt->resourceInfo), (void *)&(transaction->resourceInfo),\r
             sizeof(Rm_ResourceInfo));\r
@@ -549,32 +545,25 @@ int32_t Rm_receivePktIsr(Rm_TransportHandle transportHandle, Rm_Packet *pkt)
             transaction->remoteOriginatingId = resourceReqPkt->requestId;\r
 \r
             /* Transfer the rest of the data into the transaction */\r
-            if (resourceReqPkt->resourceReqType == Rm_resReqPktType_ALLOCATE)\r
+            if (resourceReqPkt->resourceReqType == Rm_resReqPktType_ALLOCATE_INIT)\r
             {\r
-                transaction->type = Rm_service_RESOURCE_ALLOCATE;\r
+                transaction->type = Rm_service_RESOURCE_ALLOCATE_INIT;\r
             }\r
-            else if (resourceReqPkt->resourceReqType == Rm_resReqPktType_BLOCK_ALLOCATE)\r
+            else if (resourceReqPkt->resourceReqType == Rm_resReqPktType_ALLOCATE_USE)\r
             {\r
-                transaction->type = Rm_service_RESOURCE_BLOCK_ALLOCATE;\r
-            }\r
-            else if (resourceReqPkt->resourceReqType == Rm_resReqPktType_ALLOCATE_NAMED)\r
-            {\r
-                transaction->type = Rm_service_RESOURCE_ALLOCATE_BY_NAME;\r
-            }\r
+                transaction->type = Rm_service_RESOURCE_ALLOCATE_USE;\r
+            }            \r
             else if (resourceReqPkt->resourceReqType == Rm_resReqPktType_FREE)\r
             {\r
                 transaction->type = Rm_service_RESOURCE_FREE;\r
             }\r
-            else if (resourceReqPkt->resourceReqType == Rm_resReqPktType_BLOCK_FREE)\r
+            else if (resourceReqPkt->resourceReqType == Rm_resReqPktType_GET_NAMED)\r
             {\r
-                transaction->type = Rm_service_RESOURCE_BLOCK_FREE;\r
-            }\r
-            else if (resourceReqPkt->resourceReqType == Rm_resReqPktType_FREE_NAMED)\r
-            {\r
-                transaction->type = Rm_service_RESOURCE_FREE_BY_NAME;\r
-            }\r
+                transaction->type = Rm_service_RESOURCE_GET_BY_NAME;\r
+            }            \r
 \r
-            strcpy(transaction->sourceInstName, resourceReqPkt->instName);\r
+            strcpy(transaction->pktSrcInstName, resourceReqPkt->pktSrcInstName);\r
+            strcpy(transaction->serviceSrcInstName, resourceReqPkt->serviceSrcInstName);\r
             transaction->state = RM_SERVICE_PROCESSING;\r
             memcpy ((void *)&(transaction->resourceInfo), (void *)&(resourceReqPkt->resourceInfo),\r
                     sizeof(Rm_ResourceInfo));\r
@@ -593,10 +582,10 @@ int32_t Rm_receivePktIsr(Rm_TransportHandle transportHandle, Rm_Packet *pkt)
                 /* Transfer the result of the request to the transaction */\r
                 transaction->state = resourceRespPkt->requestState;\r
 \r
-                if ((transaction->state == RM_SERVICE_APPROVED) &&\r
-                    ((transaction->type == Rm_service_RESOURCE_ALLOCATE) ||\r
-                     (transaction->type == Rm_service_RESOURCE_BLOCK_ALLOCATE) ||\r
-                     (transaction->type == Rm_service_RESOURCE_ALLOCATE_BY_NAME)))\r
+                if ((transaction->state == RM_SERVICE_APPROVED_AND_COMPLETED) &&\r
+                    ((transaction->type == Rm_service_RESOURCE_ALLOCATE_INIT) ||\r
+                     (transaction->type == Rm_service_RESOURCE_ALLOCATE_USE) ||\r
+                     (transaction->type == Rm_service_RESOURCE_GET_BY_NAME)))\r
                 {\r
                     /* Copy resources from request for allocations since an allocation\r
                      * can be specified as unknown.  If the request resources were unspecified\r
@@ -631,8 +620,9 @@ int32_t Rm_receivePktIsr(Rm_TransportHandle transportHandle, Rm_Packet *pkt)
                 transaction->type = Rm_service_RESOURCE_UNMAP_NAME;\r
             }\r
 \r
-            strcpy(transaction->sourceInstName, nsRequestPkt->instName);\r
-            transaction->state = Rm_transactionState_PROCESSING;\r
+            strcpy(transaction->pktSrcInstName, nsRequestPkt->pktSrcInstName);\r
+            strcpy(transaction->serviceSrcInstName, nsRequestPkt->serviceSrcInstName);\r
+            transaction->state = RM_SERVICE_PROCESSING;\r
             memcpy ((void *)&(transaction->resourceInfo), (void *)&(nsRequestPkt->resourceInfo),\r
                     sizeof(Rm_ResourceInfo));\r
 \r
@@ -713,30 +703,34 @@ int32_t Rm_receivePktPolling(Rm_TransportHandle transportHandle)
     int32_t retVal = RM_TRANSPORT_OK_BASE;\r
 \r
     /* Make sure the transport handle is registered with the provided RM instance */\r
-    if (Rm_transportNodeFindTransportHandle(rmInst, transportHandle) == NULL)\r
-    {\r
-        /* Transport is not registered with the RM instance.  Return an error.\r
-         * The packet cannot be freed since the transport handle is not valid. */\r
-        return (RM_TRANSPORT_ERROR_HANDLE_HAS_NOT_BEEN_REGISTERED);\r
-    }\r
-\r
-    /* Check to see if any RM packets are available.  Process any available packets. */\r
-    while (rmInst->transport.rmNumPktsReceived(transportHandle) > 0)\r
+    if (Rm_transportNodeFindTransportHandle(rmInst, transportHandle) != NULL)\r
     {\r
-        pkt = rmInst->transport.rmReceive(transportHandle);\r
-\r
-        if (pkt == NULL)\r
+        /* Check to see if any RM packets are available.  Process any available packets. */\r
+        while (rmInst->transport.rmNumPktsReceived(transportHandle) > 0)\r
         {\r
-            return (RM_TRANSPORT_ERROR_PACKET_RECEPTION_ERROR);\r
-        }\r
+            pkt = rmInst->transport.rmReceive(transportHandle);\r
 \r
-        /* Pass the packet to RM.  The packet will be freed within the PktIsr API */\r
-        if (retVal = Rm_receivePktIsr(transportHandle, pkt) <= RM_SERVICE_ERROR_BASE)\r
-        {\r
-            /* Return if an error is encountered */\r
-            return (retVal);\r
+            if (pkt == NULL)\r
+            {\r
+                retVal = RM_TRANSPORT_ERROR_PACKET_RECEPTION_ERROR;\r
+                break;\r
+            }\r
+\r
+            /* Pass the packet to RM.  The packet will be freed within the PktIsr API */\r
+            if (retVal = Rm_receivePktIsr(transportHandle, pkt) <= RM_SERVICE_ERROR_BASE)\r
+            {\r
+                /* Return if an error is encountered */\r
+                break;\r
+            }\r
         }\r
     }\r
+    else\r
+    {\r
+        /* Transport is not registered with the RM instance.  Return an error.\r
+         * The packet cannot be freed since the transport handle is not valid. */\r
+        retVal = RM_TRANSPORT_ERROR_HANDLE_HAS_NOT_BEEN_REGISTERED;\r
+    }\r
+\r
     return (retVal); \r
 }\r
 \r