[Feature]Upload Modem source code

Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/interface/middleware/hif/usbc_custom.h b/mcu/interface/middleware/hif/usbc_custom.h
new file mode 100644
index 0000000..24e9291
--- /dev/null
+++ b/mcu/interface/middleware/hif/usbc_custom.h
@@ -0,0 +1,344 @@
+/*****************************************************************************
+*  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:
+ * ---------
+ *    usbc_custom.h
+ *
+ * Project:
+ * --------
+ *   MOLY
+ *
+ * Description:
+ * ------------
+ *    This file intends for usb customization parameter definition
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef _USBC_CUSTOM_H_
+#define _USBC_CUSTOM_H_
+
+#include "usbc_custom_def.h"
+#include "kal_general_types.h"
+
+/*     
+       Sample Diagram to illustrate the combination of USB Dev Param
+
+       USB Dev Param
+             |
+             |-- USB Mode 1 (MSD)
+             |      |
+             |      |-- USB Cfg1
+             |             |
+             |             |-- USB class 1 (MS)
+             |
+             |-- USB Mode 2
+             |     ...
+             |
+             |-- USB Mode 3
+             |      |
+             |      |-- USB Cfg 1
+             |      |      |
+             |      |      |-- USB class 1 (MS)
+             |      |      |         
+             |      |      |-- USB class 2 (ACM2)
+             |      |      |
+             |      |      |-- USB class 3 (RNDIS)
+             |      |
+             |      |-- USB Cfg 2
+             |      |
+             |      |-- USB Cfg 3
+             |
+             |-- USB Mode 4
+             |
+             |-- USB Mode 5
+             ...
+                     
+ */
+
+#define USB_MAX_CLASS_NUM          16
+#define USB_MAX_CFG_NUM            8
+
+
+typedef enum {
+    USB_OS_WIN8 = 0,
+    USB_OS_WIN,  // non-win8 windows
+    USB_OS_LINUX,
+    USB_OS_MAC,
+    USB_OS_OTHERS,
+
+    USB_OS_NUM
+} usb_os_type_e;
+
+typedef enum {
+    USB_CLASS_MS = 0,
+#ifdef __USB_ACM_SUPPORT__
+    USB_CLASS_ACM1,  /* 1T1R, 1 interface */
+    USB_CLASS_ACM2,  /* 2T1R, 2 interface, IAD */
+    USB_CLASS_ACM3,  /* 2T1R, 1 interface */
+#endif
+#ifdef __USB_MBIM_SUPPORT__
+    USB_CLASS_MBIM,
+#endif
+#ifdef __USB_RNDIS_SUPPORT__
+    USB_CLASS_RNDIS,
+#endif
+#ifdef __USB_ECM_SUPPORT__
+    USB_CLASS_ECM,
+#endif
+    USB_CLASS_ADB,
+    USB_CLASS_NUM
+} usb_class_type_e;
+
+typedef enum{
+	USB_CLASS_OWNER_MD = 0,
+	USB_CLASS_OWNER_AP,
+	USB_CLASS_OWNER_NONE,
+	USB_CLASS_OWNER_NUM
+}usb_class_owner_e;
+
+typedef enum{
+    USB_NETWORK_CLASS_RNDIS = 0,
+    USB_NETWORK_CLASS_MBIM,
+    USB_NETWORK_CLASS_ECM,
+    USB_NETWORK_CLASS_MAX
+}usb_network_class_type_e;
+
+// definition for double FIFO enabling of bulk endpoint
+#define USB_CLASS_GET_DATA_IN_FIFO_N(n) (n & 0xf)
+#define USB_CLASS_GET_DATA_OUT_FIFO_N(n) ((n & 0xf0) >> 4)
+
+#define USB_MODE_MORPHING_CFG1	1
+#define USB_MODE_MORPHING_CFG2	2
+
+typedef struct {
+    kal_uint32             class_num;
+    usb_class_type_e       class_type[USB_MAX_CLASS_NUM];
+    /* device mapping for each function. ex. ACM->port, RNDIS/MBIM->network interface id */
+    void                   *class_ctxt[USB_MAX_CLASS_NUM];
+
+    /* The 8-bit is used to describe the num of Bulk FIFO, [0...3]IN, [4..7]OUT. */
+    kal_uint8              bulk_fifo_n[USB_MAX_CLASS_NUM];
+	/*usb port ownership, 0 for modem, 1 for AP, ...*/
+	usb_class_owner_e      class_owner[USB_MAX_CLASS_NUM];
+} usb_cfg_param_t;
+
+typedef struct {
+    kal_uint16             vendor_id;          /* idVendor */
+    kal_uint16             product_id;         /* idProduct */
+    kal_uint8              device_class;       /* bDeviceClass */
+    kal_uint8              device_sub_class;   /* bDeviceSubClass */
+    kal_uint8              device_protocol;    /* bDeviceProtocol */
+    kal_uint8              cfg_num;
+    usb_cfg_param_t        cfg_param[USB_MAX_CFG_NUM];
+    usb_mode_owner_e       mode_owner;
+    kal_uint32             mode_index;
+} usb_mode_param_t;
+
+/* custom parameter for usb device */
+typedef struct {
+    kal_uint16             bcd_device;         /* bcdDevice */
+    kal_uint16             *manufacture_string;
+    kal_uint8              manufacture_string_size;
+    kal_uint16             *product_string;
+    kal_uint8              product_string_size;
+    kal_uint16             *serial_number;
+    kal_uint8              serial_number_size;
+    kal_uint8              morphing_sub_id;
+    usb_mode_param_t       mode_param[USB_MODE_MAX];
+    /* USB Mode which each USB OS corresponds to */
+    usb_mode_e             usb_mode[USB_OS_NUM];
+} usb_dev_param_t;
+
+typedef struct {
+    usb_class_type_e class_type;
+    kal_uint32 uart_port;
+    kal_uint32 bulk_fifo_n;
+    usb_class_owner_e  class_owner;
+} usb_current_cfg_param_t;
+
+/* custom parameter for each class type */
+typedef struct
+{
+    kal_uint16             *interface_string;
+    kal_uint8              interface_string_size;
+} usb_class_acm1_param_t;
+
+typedef struct
+{
+    kal_uint16             *comm_interface_string;
+    kal_uint8              comm_interface_string_size;
+    kal_uint16             *data_interface_string;
+    kal_uint8              data_interface_string_size;
+    kal_uint16             *iad_string;
+    kal_uint8              iad_string_size;
+} usb_class_acm2_param_t;
+
+typedef struct
+{
+    kal_uint16             *interface_string;
+    kal_uint8              interface_string_size;
+} usb_class_acm3_param_t;
+
+typedef struct
+{
+    kal_uint16             *comm_interface_string;
+    kal_uint8              comm_interface_string_size;
+    kal_uint16             *null_data_interface_string;
+    kal_uint8              null_data_interface_string_size;
+    kal_uint16             *data_interface_string;
+    kal_uint8              data_interface_string_size;
+    kal_uint16             *iad_string;
+    kal_uint8              iad_string_size;
+} usb_class_mbim_param_t;
+
+typedef struct
+{
+    kal_uint16             *comm_interface_string;
+    kal_uint8              comm_interface_string_size;
+    kal_uint16             *data_interface_string;
+    kal_uint8              data_interface_string_size;
+    kal_uint16             *iad_string;
+    kal_uint8              iad_string_size;
+} usb_class_rndis_param_t;
+
+typedef struct
+{
+    kal_uint16             *comm_interface_string;
+    kal_uint8              comm_interface_string_size;
+    kal_uint16             *null_data_interface_string;
+    kal_uint8              null_data_interface_string_size;    
+    kal_uint16             *data_interface_string;
+    kal_uint8              data_interface_string_size;
+    kal_uint16             *iad_string;
+    kal_uint8              iad_string_size;
+    kal_uint16             *mac_addr_string[3];// max is 3
+    kal_uint8              mac_addr_string_size[3];// max is 3
+} usb_class_ecm_param_t;
+
+typedef struct
+{
+    kal_uint16             *interface_string;
+    kal_uint8              interface_string_size;
+} usb_class_adb_param_t;
+
+typedef struct
+{
+    kal_uint16             *interface_string;
+    kal_uint8              interface_string_size;
+} usb_class_ms_param_t;
+
+#if 0
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+
+/* get parameter function pointer */
+typedef const usb_dev_param_t*           (*usb_get_device_param_f)(void);
+
+#if 0
+/* under construction !*/
+#endif
+typedef const usb_class_ms_param_t*     (*usb_get_ms_param_f)(void);
+
+typedef const usb_class_acm1_param_t*    (*usb_get_acm1_param_f)(void);
+typedef const usb_class_acm2_param_t*    (*usb_get_acm2_param_f)(void);
+typedef const usb_class_acm3_param_t*    (*usb_get_acm3_param_f)(void);
+typedef const usb_class_mbim_param_t*    (*usb_get_mbim_param_f)(void);
+typedef const usb_class_rndis_param_t*   (*usb_get_rndis_param_f)(void);
+typedef const usb_class_ecm_param_t*     (*usb_get_ecm_param_f)(void);
+typedef const usb_class_adb_param_t*     (*usb_get_adb_param_f)(void);
+
+/* get parameter functions*/
+typedef struct 
+{
+    usb_get_device_param_f       get_device_param_func;
+    usb_get_ms_param_f           get_ms_param_func;
+    usb_get_acm1_param_f         get_acm1_param_func;
+    usb_get_acm2_param_f         get_acm2_param_func;
+    usb_get_acm3_param_f         get_acm3_param_func;
+    usb_get_mbim_param_f         get_mbim_param_func;
+    usb_get_rndis_param_f        get_rndis_param_func;
+    usb_get_ecm_param_f          get_ecm_param_func;    
+    usb_get_adb_param_f          get_adb_param_func;
+} usb_custom_func_t;
+
+
+extern const usb_custom_func_t* usb_get_custom_func(void);
+void usb_register_mode_param(usb_mode_param_t *mode_param);
+void usb_replace_mode_param(usb_mode_param_t *mode_param, kal_uint8 index);
+void usb_mode_qeznk_register();
+void usb_mode_inusj_register();
+void usb_mode_ufpm_register();
+void usb_mode_base_register();
+void usb_mode_customization_register();
+void usb_mode_replace_metadbg_mode(kal_uint8 index);
+void usb_mode_factory_register();
+kal_uint16 usb_get_factory_mode_pid();
+kal_bool usb_get_factory_mode_support();
+usb_network_class_type_e usbc_get_network_type();
+
+
+#endif /* _USBC_CUSTOM_H_ */
+