[Feature]Upload Modem source code

Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/interface/driver/peripheral/bmd.h b/mcu/interface/driver/peripheral/bmd.h
new file mode 100644
index 0000000..7e72532
--- /dev/null
+++ b/mcu/interface/driver/peripheral/bmd.h
@@ -0,0 +1,356 @@
+ /*****************************************************************************
+*  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).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ *    bmd.h
+ *
+ * Project:
+ * --------
+ *   Maui_Software
+ *
+ * Description:
+ * ------------
+ *   This file is intends for ring-buffer API.
+ *
+ * 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!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef BMD_H
+#define BMD_H
+
+#include "drv_comm.h"
+
+typedef struct __BUFFER_INFO
+{
+	volatile kal_uint16	Read;		/* @field Current Read index. */
+	volatile kal_uint16	Write;		/* @field Current Write index. */
+	volatile kal_uint16	Length;		/* @field Length of buffer */
+	volatile kal_uint8	*CharBuffer;		/* @field Start of buffer */
+}BUFFER_INFO;
+
+#define ResetFifo(Buffer)   		(Buffer.Write = Buffer.Read = 0)
+#define BWrite(Buffer)	   		(Buffer->Write)
+#define BRead(Buffer)		   	(Buffer->Read)
+#define BLength(Buffer)	   		(Buffer->Length)
+#define BStartAddr(Buffer)     (Buffer->CharBuffer)
+#define BuffWrite(Buffer)   		(Buffer->CharBuffer+Buffer->Write)
+#define BuffRead(Buffer)	   	(Buffer->CharBuffer+Buffer->Read)
+
+#define BWrite_addr(Buffer)	   (Buffer.Write)
+#define BRead_addr(Buffer)		   (Buffer.Read)
+#define BLength_addr(Buffer)	   (Buffer.Length)
+#define BuffWrite_addr(Buffer)   (Buffer.CharBuffer+Buffer.Write)
+#define BuffRead_addr(Buffer)	   (Buffer.CharBuffer+Buffer.Read)
+#define Buff_EndAddr(Buffer)     (Buffer.CharBuffer+Buffer.Length-1)
+#define Buff_StartAddr(Buffer)     (Buffer.CharBuffer)
+
+#define Buff_isEmpty	1
+#define Buff_notEmpty	0
+#define Buff_isFull	1
+#define Buff_notFull	0
+#define Buff_PushOK	0
+#define Buff_PushErr	1
+#define Buff_PopOK	0
+#define Buff_PopErr	1
+
+#define Buf_init(_Buffer,_Buffaddr,_uTotalSize) \
+{\
+   BUFFER_INFO *_Buf=_Buffer;\
+   _Buf->Read = 0;\
+	_Buf->Write = 0;\
+	_Buf->Length = _uTotalSize;\
+	_Buf->CharBuffer = _Buffaddr;\
+}\
+
+#define Buf_IsFull(_Buffer,_result)   \
+{\
+   BUFFER_INFO *_Buf=_Buffer;\
+	kal_uint16 _tmp = BRead(_Buf);\
+	if (_tmp == 0)\
+		_tmp = BLength(_Buf);\
+	if ( (_tmp-BWrite(_Buf)) == 1)\
+	{\
+		_result = Buff_isFull;\
+	}\
+	else\
+	{\
+		_result = Buff_notFull;\
+	}\
+}\
+
+#define Buf_GetRoomLeft(_Buffer,_RoomLeft)   \
+{\
+   BUFFER_INFO *_Buf=_Buffer;\
+   if ( BRead(_Buf) <= BWrite(_Buf) ) \
+	{\
+      _RoomLeft = BLength(_Buf) - BWrite(_Buf) + BRead(_Buf) - 1;\
+	}\
+	else\
+	{\
+		_RoomLeft = BRead(_Buf) - BWrite(_Buf) - 1;\
+	}\
+}\
+
+#define Buf_Push_Multi(_Buffer,_pushDataPointer,_multi,offset) \
+{\
+   BUFFER_INFO *_Buf=_Buffer;\
+   if( (BWrite(_Buf) + _multi) >= BLength(_Buf) ){\
+      kal_mem_cpy(BuffWrite(_Buf), _pushDataPointer + offset, (BLength(_Buf) - BWrite(_Buf))*sizeof(kal_uint8));\
+      kal_mem_cpy(BStartAddr(_Buf) , _pushDataPointer + offset + (BLength(_Buf) - BWrite(_Buf)), (_multi- (BLength(_Buf) - BWrite(_Buf)))*sizeof(kal_uint8));\
+      BWrite(_Buf) = (BWrite(_Buf) + _multi) - BLength(_Buf);\
+   }\
+   else{\
+   kal_mem_cpy(BuffWrite(_Buf), _pushDataPointer + offset, _multi*sizeof(kal_uint8));\
+         BWrite(_Buf) += _multi;\
+}\
+}\
+
+#define Buf_Push(_Buffer,_pushData) \
+{\
+   BUFFER_INFO *_Buf=_Buffer;\
+   *BuffWrite(_Buf) = _pushData;\
+   if(BWrite(_Buf) >= (BLength(_Buf) - 1))\
+   {\
+   	BWrite(_Buf) = 0;\
+   }\
+   else\
+   {\
+	BWrite(_Buf)++;\
+   }\
+}\
+
+#define Buf_GetBytesAvail(_Buffer,_BytesAvail) \
+{\
+   BUFFER_INFO *_Buf = _Buffer;\
+	_BytesAvail = 0;\
+	if (BWrite(_Buf) >= BRead(_Buf))\
+		_BytesAvail = BWrite(_Buf) - BRead(_Buf);\
+	else\
+		_BytesAvail = BLength(_Buf) - BRead(_Buf) + BWrite(_Buf);	\
+}\
+
+#define Buf_GetBytesAvail_DMA(_Buffer,_BytesAvail) \
+{\
+   BUFFER_INFO *_Buf = _Buffer;\
+	_BytesAvail = 0;\
+	if (BWrite(_Buf) >= BRead(_Buf))\
+		_BytesAvail = BWrite(_Buf) - BRead(_Buf);\
+	else\
+		_BytesAvail = BLength(_Buf) - BRead(_Buf);	\
+}\
+
+#define Buf_Pop_Multi(_Buffer,_popDataPointer,_multi,offset) \
+{\
+   BUFFER_INFO *_Buf=_Buffer;\
+   if( (BRead(_Buf) + _multi) >= BLength(_Buf) ){\
+   	kal_mem_cpy(_popDataPointer + offset, BuffRead(_Buf), (BLength(_Buf) - BRead(_Buf))*sizeof(kal_uint8));\
+   	kal_mem_cpy(_popDataPointer + offset + (BLength(_Buf) - BRead(_Buf)), BStartAddr(_Buf), (_multi- (BLength(_Buf) - BRead(_Buf)))*sizeof(kal_uint8));\
+         BRead(_Buf) = BRead(_Buf) + _multi - BLength(_Buf) ;)\
+   else{\
+   	 kal_mem_cpy(_popDataPointer + offset, BuffRead(_Buf), _multi);\
+         BRead(_Buf) += _multi;}\
+}\
+
+#define Buf_Pop(_Buffer,_popData)   \
+{\
+   BUFFER_INFO *_Buf = _Buffer;\
+	_popData= *BuffRead(_Buf);\
+	BRead(_Buf)++;\
+	if (BRead(_Buf) >= BLength(_Buf))\
+	{\
+		BRead(_Buf) -= BLength(_Buf);\
+	}\
+}\
+
+/* should be deleted */
+#define Buf_IsEmpty(_Buffer,_result)   \
+{\
+   BUFFER_INFO *_Buf = _Buffer;\
+	if ( BRead(_Buf) == BWrite(_Buf) ) \
+	{\
+		_result = Buff_isEmpty;\
+	}\
+	else\
+	{\
+		_result = Buff_notEmpty;\
+	}\
+}\
+
+/* void Get32FromBuff(BUFFER_INFO *Buf,kal_uint32 DATA) */
+#define Get32FromBuf(_Buffer,_DATA)    \
+{\
+   BUFFER_INFO *_Buf = _Buffer;\
+	kal_uint8	_tmp,_index;\
+	kal_uint32 	_tmp32;\
+	_DATA =0;\
+	for (_index =0;_index < 4;_index++)\
+	{\
+		Buff_Pop(_Buf,&_tmp);\
+		_tmp32 = (kal_uint32)_tmp;\
+		(_DATA) |= (_tmp32 << (8*_index));\
+	}\
+}\
+
+/*void Put32toBuff(BUFFER_INFO *Buf,kal_uint32 *DATA)*/
+#define Put32toBuf(_Buffer,_DATA)    \
+{\
+   BUFFER_INFO *_Buf = _Buffer;\
+	kal_uint8	_tmp,_index;\
+	kal_uint32 	_tmp32;\
+	for (_index =0;_index < 4;_index++)\
+	{\
+		_tmp32 = ((*_DATA) >> (8*_index));\
+		_tmp = (kal_uint8)_tmp32;\
+		Buff_Push(_Buf,&_tmp);\
+	}\
+}\
+
+#define Buf_Flush(_Buffer) \
+{\
+   BUFFER_INFO *_Buf = _Buffer;\
+	_Buf->Write = _Buf->Read = 0;\
+}
+
+#define Buf_look(_Buffer,_popData,_num)   \
+{\
+   BUFFER_INFO *_Buf = _Buffer;\
+   kal_uint8 _index;\
+   kal_uint16 _tmp;\
+   _tmp = BRead(Buf);\
+   for(_index=0;_index<_num;_index++)\
+   {\
+	   *_popData= *(Buf->CharBuffer+_tmp);\
+	   _tmp++;\
+	   if (_tmp >= BLength(Buf))\
+	   {\
+		   _tmp -= BLength(Buf);\
+	   }\
+	}\
+}
+
+// MoDIS parser skip start
+#if 1
+extern void Buff_init(BUFFER_INFO *Buf,kal_uint8 *Buffaddr, kal_uint16 uTotalSize);
+extern void Buff_Push(BUFFER_INFO *Buf,kal_uint8 *pushData);
+extern void Buff_Pop(BUFFER_INFO *Buf,kal_uint8 *popData);
+extern kal_uint8 Buff_IsEmpty(BUFFER_INFO *Buf);
+extern kal_uint8 Buff_IsFull (BUFFER_INFO *Buf);
+extern kal_uint16 Buff_GetRoomLeft (BUFFER_INFO *Buf);
+extern kal_uint16 Buff_GetBytesAvail (BUFFER_INFO *Buf);
+extern kal_uint16 Buff_GetLength(BUFFER_INFO *Buf);
+extern void Buff_Flush (BUFFER_INFO *Buf);
+extern void Buff_look(BUFFER_INFO *Buf,kal_uint8 *popData,kal_uint8 num);
+extern void Get32FromBuff(BUFFER_INFO *Buf,kal_uint32 *DATA);
+extern void Put32toBuff(BUFFER_INFO *Buf,kal_uint32 *DATA);
+extern void MemCPY(kal_uint8 *dst,kal_uint8 *src,kal_uint32 len);
+extern void MemSET(kal_uint8 *dst,kal_uint8 data,kal_uint32 len);
+#endif
+// MoDIS parser skip end
+
+#endif
+