diff gsm-fw/L1/cust0/ind_os.c @ 518:ffbb71ee664c

gsm-fw/L1/cust0/ind_os.c: adopted MV100 version, started FC adaptation
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Thu, 10 Jul 2014 07:21:49 +0000
parents gsm-fw/L1/cust0/mv100/ind_os.c@eafadfee35b2
children ed6071292a5c
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gsm-fw/L1/cust0/ind_os.c	Thu Jul 10 07:21:49 2014 +0000
@@ -0,0 +1,160 @@
+/************* Revision Controle System Header *************
+ *                  GSM Layer 1 software 
+ * IND_OS.C
+ *
+ *        Filename ind_os.c
+ *        Version  1.1
+ *        Date     04/26/00
+ *
+ ************* Revision Controle System Header *************/
+
+#include "../../include/config.h"
+
+// Nucleus include files.
+#include "../../nucleus/nucleus.h"
+#include "../../nucleus/tc_defs.h"
+#include "../../include/sys_types.h"
+#include "ind_os.h"
+
+#include "../include/l1_confg.h"
+// Layer1 and debug include files.
+#include "../include/l1_types.h"
+#include "../include/l1_const.h"
+
+#if (L1_GTT == 1)
+  #include "l1gtt_const.h"
+  #include "l1gtt_defty.h"
+#endif
+
+/* the newer LoCosto cust1 version has these lines commented out */
+//#if ((ANALOG == 1) || (ANALOG == 2))
+//  #include "spi_drv.h"
+//#endif
+
+#if TESTMODE
+  #include "l1tm_defty.h"
+#endif
+
+#include "l1audio_const.h"
+#include "l1audio_cust.h"
+#include "l1audio_defty.h"
+#include "l1_defty.h"
+#include "l1_msgty.h"
+#include "l1_varex.h"
+
+#if (CHIPSET == 2 || CHIPSET == 3 || CHIPSET == 4 || CHIPSET == 5 || CHIPSET == 6 || CHIPSET == 7 || CHIPSET == 8 || CHIPSET == 10 || CHIPSET == 11 || CHIPSET == 12)
+  #include "ulpd.h"
+#endif
+
+extern UWORD32    TCD_Priority_Groups;
+extern TC_HCB     *TCD_Active_HISR_Heads[TC_HISR_PRIORITIES];
+extern VOID       *TCD_Current_Thread;
+extern TC_HCB     *TCD_Active_HISR_Tails[TC_HISR_PRIORITIES];
+extern INT        TMD_Timer_State;
+extern UWORD32    TMD_Timer;               // for big sleep 
+extern TC_PROTECT TCD_System_Protect;
+
+ 
+ /*-------------------------------------------------------*/
+ /* int ind_os_sleep()                                    */
+ /*-------------------------------------------------------*/ 
+ /* Parameters : none                                     */
+ /* Return     :                                          */     
+ /* Functionality : Suspend the thread an interval        */
+ /*                 of millisecs.                         */
+ /* Limitation :                                          */
+ /*-------------------------------------------------------*/
+
+ T_OS_RETURN  ind_os_sleep (SYS_UWORD32 millisecs)
+{
+  NU_Sleep ((SYS_UWORD32) millisecs);
+  return OS_OK;
+}
+
+
+ /*-------------------------------------------------------*/
+ /* int OS_get_inactivity_ticks()                          */
+ /*-------------------------------------------------------*/ 
+ /* Parameters : none                                     */
+ /* Return     : Number of ticks of inactivity            */
+ /*              0 means immediate activity planned       */
+ /*              -1 means no activity planned             */     
+ /* Functionality : Evaluates the OS activity planned     */
+ /*                 by looking at ready tasks, activated  */
+ /*                HISR and the elapsed time of the timers*/
+ /* Limitation : Must be protected from H/W interrupts    */
+ /*-------------------------------------------------------*/
+ int OS_get_inactivity_ticks(void)
+ {
+   int i;
+
+   // Returns immediate activity if a task is ready
+   if (TCD_Priority_Groups) 
+	return 0;
+	
+   //for all HISR priorities
+   for (i = 0; i < TC_HISR_PRIORITIES ; i++)
+   {	
+     // if no hisr of priority "i" ==> go to next priority
+     if (TCD_Active_HISR_Heads[i] == 0) 	
+       continue;
+	  			
+     // the first hisr is NOT the current one (frame hisr) so it may be
+     // with other priority ==> abort
+     if (TCD_Active_HISR_Heads[i] != TCD_Current_Thread) 
+       return 0;
+	  
+     // the last hisr is NOT the current one (frame hisr) so there is
+     // at least another hisr with same priority ==> abort
+     if (TCD_Active_HISR_Tails[i] != TCD_Current_Thread)
+       return 0;
+	  
+     // the first and last hisrs are the current one (frame hisr) but 
+     // there are several occurences of it ! ==> abort          
+     if (  (TCD_Active_HISR_Heads[i]->tc_activation_count != 1)) 
+       return 0;
+   }
+
+   // Returns remaining ticks number if any timer is active
+   if (TMD_Timer_State == TM_ACTIVE) 	// any active timer ?
+   {
+     if (TMD_Timer <= MIN_SLEEP_TIME) 
+        return(0);
+     else 	
+   	return TMD_Timer;
+   }
+	
+   // Returns not activity if no timer active
+   if (TMD_Timer_State == TM_NOT_ACTIVE) 
+   	return -1;
+   else				
+   // otherwise, returns immediate activity if a timer is expired (TM_EXPIRED)
+        return(0);
+ }
+
+ /*-------------------------------------------------------*/
+ /* int OS_system_protect()                               */
+ /*-------------------------------------------------------*/ 
+ /* Parameters : none                                     */
+ /* Return     : The Thread Control Block of the thread   */
+ /*              which already owns the protection or     */
+ /*              0 if no protection                       */
+ /* Functionality : Checks whether the system structures  */
+ /*                 are already protected or not          */
+ /*-------------------------------------------------------*/
+ void OS_system_protect (void)
+ {  
+   NU_Protect((NU_PROTECT*) &TCD_System_Protect);  
+ }
+
+ /*-------------------------------------------------------*/
+ /* int OS_system_Unprotect()                             */
+ /*-------------------------------------------------------*/ 
+ /* Parameters : none                                     */
+ /* Return     :                                          */
+ /* Functionality : unprotect the system structures       */
+ /*-------------------------------------------------------*/
+ void OS_system_Unprotect (void)
+ {  
+   NU_Unprotect();  
+ }