# HG changeset patch # User Michael Spacefalcon # Date 1399840483 0 # Node ID fd015570cacccad00f892b5df61cd2ccaebb59b5 # Parent 5bc6a8f8b4a8bfbacae41eb1067e779f864176a4 os_com_fl.c: os_FindSuspendingQueue() and os_DestroyQueue() done diff -r 5bc6a8f8b4a8 -r fd015570cacc gsm-fw/gpf/osl/os_com_fl.c --- a/gsm-fw/gpf/osl/os_com_fl.c Thu May 08 07:55:06 2014 +0000 +++ b/gsm-fw/gpf/osl/os_com_fl.c Sun May 11 20:34:43 2014 +0000 @@ -142,3 +142,64 @@ p++; return(OS_OK); } + +GLOBAL unsigned char * +os_FindSuspendingQueue(unsigned int *tcb) +{ + USHORT i; + SM_SUSPEND *susp, *susp2; + + for (i = 1; i <= MaxCommunications; i++) { + if (!ComTable[i].Name[0]) + continue; + if (susp = ComTable[i].FreeSemCB.sm_suspension_list) { + if (susp->sm_suspended_task == (NU_TASK*)tcb) + return(ComTable[i].FreeSemCB.sm_name + 1); + susp = (SM_SUSPEND *) susp->sm_suspend_link.cs_next; + for (susp2 = susp; ; ) { + if (susp2->sm_suspended_task == (NU_TASK*)tcb) + return(ComTable[i].FreeSemCB.sm_name+1); + susp2 = (SM_SUSPEND *) + susp2->sm_suspend_link.cs_next; + if (susp2 == susp) + break; + } + } + if (susp = ComTable[i].UsedSemCB.sm_suspension_list) { + if (susp->sm_suspended_task == (NU_TASK*)tcb) + return(ComTable[i].UsedSemCB.sm_name + 1); + susp = (SM_SUSPEND *) susp->sm_suspend_link.cs_next; + for (susp2 = susp; ; ) { + if (susp2->sm_suspended_task == (NU_TASK*)tcb) + return(ComTable[i].UsedSemCB.sm_name+1); + susp2 = (SM_SUSPEND *) + susp2->sm_suspend_link.cs_next; + if (susp2 == susp) + break; + } + } + } + return(0); +} + +GLOBAL LONG +os_DestroyQueue(OS_HANDLE TaskHandle, OS_HANDLE ComHandle) +{ + STATUS sts; + + sts = NU_Obtain_Semaphore(&ComSemCB, NU_SUSPEND); + if (NU_Delete_Semaphore(&ComTable[ComHandle].FreeSemCB) != NU_SUCCESS) { +return_error: if (sts == NU_SUCCESS) + NU_Release_Semaphore(&ComSemCB); + return(OS_ERROR); + } + if (NU_Delete_Semaphore(&ComTable[ComHandle].UsedSemCB) != NU_SUCCESS) + goto return_error; + if (os_DeallocateMemory(TaskHandle, ComTable[ComHandle].QueueData) + == OS_ERROR) + goto return_error; + ComTable[ComHandle].Name[0] = 0; + if (sts == NU_SUCCESS) + NU_Release_Semaphore(&ComSemCB); + return(OS_OK); +}