[Feature]Upload Modem source code
Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/service/nvram/src/nvram_cache_queue.c b/mcu/service/nvram/src/nvram_cache_queue.c
new file mode 100644
index 0000000..6d50d18
--- /dev/null
+++ b/mcu/service/nvram/src/nvram_cache_queue.c
@@ -0,0 +1,266 @@
+/*****************************************************************************
+* 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) 2005
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+/*
+ * Include
+ */
+
+#include "nvram_cache_interface.h"
+#include "nvram_cache_info.h"
+#include "us_timer.h"
+#include "ex_public.h"
+
+/*******************************************************
+ * External Function
+ *******************************************************/
+ extern module_type stack_get_active_module_id( void );
+
+
+/*******************************************************
+ * Define
+ *******************************************************/
+
+
+/*******************************************************
+ * Typedef
+ *******************************************************/
+
+
+/*******************************************************
+ * Global Variable
+ *******************************************************/
+nvram_cache_write_queue cache_write_queue;
+extern nvram_ee_info_type* nvram_ee_info;
+extern kal_char nvram_trace_dump_temp_buffer[];
+extern kal_char nvram_trace_dump_buffer[];
+extern kal_mutexid g_nvram_dump_trace_mutex;
+extern kal_wchar nvram_trace_filename[];
+extern FS_HANDLE nvram_trace_file_hdl;
+extern kal_uint32 nvram_trace_dump_buffer_offset;
+
+
+/*******************************************************
+ * Local Function
+ *******************************************************/
+
+
+/*******************************************************
+ * Local Variable
+ *******************************************************/
+
+/*****************************************************************************
+ * FUNCTION
+ * nvram_cache_queue_usage_rates
+ * DESCRIPTION
+ * get nvram cache queue usage rates
+ * PARAMETERS
+ * cache_queue_ldi [OUT]
+ * RETURNS
+ * success or fail
+ *****************************************************************************/
+kal_int32 nvram_cache_queue_usage_rates(void)
+{
+ kal_int32 length = 0;
+
+ length = ((CACHE_QUEUE_SIZE + cache_write_queue.rear - cache_write_queue.front)% CACHE_QUEUE_SIZE);
+
+ return length;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ * nvram_cache_queue_full
+ * DESCRIPTION
+ * nvram cache queue whether full
+ * PARAMETERS
+ * cache_queue_ldi [OUT]
+ * RETURNS
+ * success or fail
+ *****************************************************************************/
+kal_bool nvram_cache_queue_full(void)
+{
+ kal_bool full_flag = KAL_FALSE;
+
+ if((cache_write_queue.rear +1)%CACHE_QUEUE_SIZE == cache_write_queue.front) {
+ full_flag = KAL_TRUE;
+ }
+
+ return full_flag;
+
+}
+
+/*****************************************************************************
+ * FUNCTION
+ * nvram_cache_queue_empty
+ * DESCRIPTION
+ * nvram cache queue whether empty
+ * PARAMETERS
+ * cache_queue_ldi [OUT]
+ * RETURNS
+ * success or fail
+ *****************************************************************************/
+kal_bool nvram_cache_queue_empty(void)
+{
+ kal_bool empty_flag = KAL_FALSE;
+
+ if(cache_write_queue.front == cache_write_queue.rear) {
+ empty_flag = KAL_TRUE;
+ }
+
+ return empty_flag;
+
+}
+
+/*****************************************************************************
+ * FUNCTION
+ * nvram_cache_queue_search_lid
+ * DESCRIPTION
+ * nvram cache queue whether full
+ * PARAMETERS
+ * cache_queue_ldi [OUT]
+ * RETURNS
+ * success or fail
+ *****************************************************************************/
+kal_bool nvram_cache_queue_search_lid(nvram_lid_enum LID)
+{
+ kal_uint16 front;
+ kal_bool search_flag = KAL_FALSE;
+
+ if(nvram_cache_queue_empty()) {
+ return KAL_FALSE;
+ }
+
+ front = cache_write_queue.front;
+ while(front != cache_write_queue.rear) {
+ if(cache_write_queue.queue_array[front].ldi->LID == LID) {
+ search_flag = KAL_TRUE;
+ break;
+ }
+ front = (front+1)%CACHE_QUEUE_SIZE;
+ }
+
+ return search_flag;
+
+}
+
+/*****************************************************************************
+ * FUNCTION
+ * nvram_cache_enqueue
+ * DESCRIPTION
+ * NVRAM write option push to cache queue
+ * PARAMETERS
+ * ldi [IN]
+ * rec_index [IN]
+ * rec_amount [IN]
+ * RETURNS
+ * success or fail
+ *****************************************************************************/
+kal_bool nvram_cache_enqueue(nvram_ltable_entry_struct* ldi, kal_uint16 rec_index, kal_uint16 rec_amount, kal_uint32 openOption)
+{
+ kal_bool result;
+ nvram_util_take_mutex(g_nvram_cache_mutex);
+ if ((cache_write_queue.rear +1)%CACHE_QUEUE_SIZE == cache_write_queue.front) {
+ if (!(result = nvram_cache_queue_search_lid(ldi->LID))) {
+ nvram_util_give_mutex(g_nvram_cache_mutex);
+ NVRAM_EXT_ASSERT(KAL_FALSE, (kal_uint32)result, NVRAM_ERROR_LOC_NVCACHE_ERRNO_QUEUE_FULL, ldi->LID);
+ return KAL_FALSE;//assert
+ }else {
+ nvram_util_give_mutex(g_nvram_cache_mutex);
+ return KAL_TRUE;
+ }
+ }
+
+ if (!nvram_cache_queue_search_lid(ldi->LID)) {
+
+ cache_write_queue.queue_array[cache_write_queue.rear].ldi = ldi;
+ cache_write_queue.queue_array[cache_write_queue.rear].rec_index = rec_index;
+ cache_write_queue.queue_array[cache_write_queue.rear].rec_amount = rec_amount;
+ cache_write_queue.queue_array[cache_write_queue.rear].openoption = openOption;
+ cache_write_queue.rear = (cache_write_queue.rear +1)%CACHE_QUEUE_SIZE;
+ }
+ nvram_util_give_mutex(g_nvram_cache_mutex);
+ return KAL_TRUE;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ * nvram_cache_dequeue
+ * DESCRIPTION
+ * pop the write option for flsuh data to file
+ * PARAMETERS
+ * cache_queue_ldi [OUT]
+ * RETURNS
+ * success or fail
+ *****************************************************************************/
+kal_bool nvram_cache_dequeue(nvram_cache_write_item *cache_queue_ldi)
+{
+ nvram_util_take_mutex(g_nvram_cache_mutex);
+ if(cache_write_queue.front == cache_write_queue.rear) {
+ nvram_util_give_mutex(g_nvram_cache_mutex);
+ return KAL_FALSE;
+ }
+
+ cache_queue_ldi->ldi = cache_write_queue.queue_array[cache_write_queue.front].ldi;
+ cache_queue_ldi->rec_index = cache_write_queue.queue_array[cache_write_queue.front].rec_index;
+ cache_queue_ldi->rec_amount = cache_write_queue.queue_array[cache_write_queue.front].rec_amount;
+ cache_queue_ldi->openoption = cache_write_queue.queue_array[cache_write_queue.front].openoption;
+
+ cache_write_queue.front = (cache_write_queue.front+1)%CACHE_QUEUE_SIZE;
+ nvram_util_give_mutex(g_nvram_cache_mutex);
+ return KAL_TRUE;
+}
+
+/*****************************************************************************
+ * FUNCTION
+ * nvram_cache_queue_init
+ * DESCRIPTION
+ * nvram cacge queue initialize
+ * PARAMETERS
+ * ldi [IN]
+ * rec_index [IN]
+ * rec_amount [IN]
+ * RETURNS
+ * success or fail
+ *****************************************************************************/
+kal_bool nvram_cache_queue_init(void)
+{
+ cache_write_queue.front = 0;
+ cache_write_queue.rear = 0;
+ cache_write_queue.count = 0;
+ #if defined (__NVRAM_UT_TEST__)
+ kal_mem_set(cache_write_queue.queue_array,0,sizeof(cache_write_queue.queue_array[0])*CACHE_QUEUE_SIZE);
+ #endif
+ return KAL_TRUE;
+}
+