[Feature]Upload Modem source code

Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/driver/devdrv/us_counter/src/uscounter.c b/mcu/driver/devdrv/us_counter/src/uscounter.c
new file mode 100644
index 0000000..3fd8f4e
--- /dev/null
+++ b/mcu/driver/devdrv/us_counter/src/uscounter.c
@@ -0,0 +1,246 @@
+/*****************************************************************************
+*  Copyright Statement:
+*  --------------------
+*  This software is protected by Copyright and the information contained
+*  herein is confidential. The software may not be copied and the information
+*  contained herein may not be used or disclosed except with the written
+*  permission of MediaTek Inc. (C) 2001
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ *   uscounter.c
+ *
+ * Project:
+ * --------
+ *   UMOLYA
+ *
+ * Description:
+ * ------------
+ *   This function implements uscounter.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+/*******************************************************************************
+ * Include header files
+ *******************************************************************************/
+
+#include "kal_public_api.h"
+#include "mips_ia_utils.h" /* need update makefle to include this header */
+#include "reg_base.h"
+#include "us_timer.h"
+#include "md2g_drv.h"
+//#include "kal_general_types.h"
+#include "sleepdrv_interface.h"
+#include "intrCtrl.h"       /* for SaveAndSetIRQMask */
+#include "kal_iram_section_defs.h"      /* for section declaration */
+#include "init_comm.h"
+
+#if defined(__HW_US_TIMER_SUPPORT__)
+
+/*************************************************************************
+* FUNCTION
+*  USC_Start
+*
+* DESCRIPTION
+*  This function starts the uscounter.
+*
+* PARAMETERS
+*  none
+*
+* RETURNS
+*  none
+*
+*************************************************************************/
+void USC_Start()
+{
+
+#ifdef ESIM_BUILD_CONFIG
+    HW_WRITE(USCNT_CON, 1);
+#else /* ESIM_BUILD_CONFIG */
+    /* In real target, FRC is inited in "ENABLE_FRC" of bootarm_gcc.S, we don't re-init again here. 
+       "ENABLE_FRC" is an assembly macro in MD_TOPSM_private.h */
+    //MD_TOPSM_EnableFRC();
+#endif
+
+}
+
+/*************************************************************************
+* FUNCTION
+*  USC_Stop
+*
+* DESCRIPTION
+*  This function stops the uscounter.
+*
+* PARAMETERS
+*  none
+*
+* RETURNS
+*  none
+*
+*************************************************************************/
+void USC_Stop()
+{
+#ifdef ESIM_BUILD_CONFIG
+   HW_WRITE(USCNT_CON, 1);
+#else
+   kal_uint32 SHOULD_NOT_STOP_US_COUNTER = 0;
+   ASSERT(SHOULD_NOT_STOP_US_COUNTER);
+
+#endif   
+}
+
+/*************************************************************************
+* FUNCTION
+*  USC_Get_TimeStamp
+*
+* DESCRIPTION
+*  This function calculate the frame number.
+*
+* PARAMETERS
+*  none
+*
+* RETURNS
+*  Frame number since system power up
+*
+*************************************************************************/
+kal_uint32 USC_Get_TimeStamp(void)
+{
+    /* Get OS timer(unit: 1ms) from FMA or OSTD source */
+    return ust_get_os_timer();
+}
+
+#if defined(MT6297) || defined(MT6885) || defined(MT6873) || defined(MT6853) || defined(CHIP10992)/* APOLLO or PETRUS or MARGAUX or MOUTON or COLGIN */
+void ust_us_busyloop(kal_uint32 us)
+{
+    kal_uint32 t1, t2, t3, zerocount = 0xFFFFF; 
+    
+    if ((us) == 0) {return;}  
+    
+    t1 = ust_get_current_time_source();   
+
+    do{
+        do {                                                      
+            t2 = ust_get_current_time();                          
+            if (t1 == t2) { zerocount--; }                        
+            else if (ust_us_duration(t1, t2) >= (us)) { break; } 
+            else
+            {
+        #if defined(__MD93__)||defined(__MD95__)||defined(MT6297_IA)
+            /* IA keep old design. */
+        #else            
+                miu_relinquish();/*Release Pipeline*/    
+        #endif    
+            }
+        } while (zerocount);      
+        
+        if(0==zerocount)                                          
+        {                                                         
+            kal_uint32 FRC_IS_NOT_INIT = 0;                       
+            ASSERT(FRC_IS_NOT_INIT);                              
+        } 
+
+        t3 = ust_get_current_time_source();
+    }while (ust_us_duration(t1, t3) < (us));  
+    
+}
+#else /* PALMER and later */
+void ust_us_busyloop(kal_uint32 us)
+{
+    kal_uint32 t1, t2, zerocount = 0xFFFFF; 
+    
+    if ((us) == 0) {return;}  
+    
+    t1 = ust_get_current_time();   
+    
+    do {                                                      
+        t2 = ust_get_current_time();                          
+        if (t1 == t2) { zerocount--; }                        
+        else if (ust_us_duration(t1, t2) >= (us)) { break; } 
+        else
+        {
+    #if defined(__MD93__)||defined(__MD95__)||defined(MT6297_IA)
+        /* IA keep old design. */
+    #else            
+            miu_relinquish();/*Release Pipeline*/    
+    #endif    
+        }
+    } while (zerocount);      
+    
+    if(0==zerocount)                                          
+    {                                                         
+        kal_uint32 FRC_IS_NOT_INIT = 0;                       
+        ASSERT(FRC_IS_NOT_INIT);                              
+    }                                                         
+}
+#endif
+
+#endif //__HW_US_TIMER_SUPPORT__
+