[Feature][Modem]Update MTK MODEM V1.6 baseline version: MOLY.NR15.R3.MD700.IVT.MP1MR3.MP.V1.6
MTK modem version: MT2735_IVT_MOLY.NR15.R3.MD700.IVT.MP1MR3.MP.V1.6.tar.gz
RF modem version: NA
Change-Id: I45a4c2752fa9d1a618beacd5d40737fb39ab64fb
diff --git a/mcu/custom/middleware/common/usbc_custom.c b/mcu/custom/middleware/common/usbc_custom.c
new file mode 100644
index 0000000..ddf638d
--- /dev/null
+++ b/mcu/custom/middleware/common/usbc_custom.c
@@ -0,0 +1,713 @@
+/*****************************************************************************
+* 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.c
+ *
+ * Project:
+ * --------
+ * MOLY
+ *
+ * Description:
+ * ------------
+ * This file implements usb customer support
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifdef __HIF_USB_SUPPORT__
+
+#include "usbc_custom.h"
+#include "dcl.h"
+#include "usbc_custom_def.h"
+#include "kal_public_api.h"
+
+static kal_uint16 usb_manufacturer_string[] =
+{
+ 0x031c, /* bDescriptorType:0x03, bLength:0x1c */
+ 'M',
+ 'e',
+ 'd',
+ 'i',
+ 'a',
+ 'T',
+ 'e',
+ 'k',
+ ' ',
+ 'I',
+ 'n',
+ 'c',
+ '.'
+};
+
+static kal_uint16 usb_product_string[] =
+{
+#if defined(MT6880)
+ 0x031c,
+ 'U',
+ 'S',
+ 'B',
+ ' ',
+ 'D',
+ 'A',
+ 'T',
+ 'A',
+ ' ',
+ 'C',
+ 'A',
+ 'R',
+ 'D'
+#else
+ 0x031a,
+ 'L',
+ 'T',
+ 'E',
+ ' ',
+ 'U',
+ 'S',
+ 'B',
+ ' ',
+ 'C',
+ 'A',
+ 'R',
+ 'D'
+#endif
+};
+
+static kal_uint16 usb_serial_num[] =
+{
+#ifdef __PRODUCTION_RELEASE__
+ 0x0320,
+ '0',
+ '0',
+ '0',
+ '0',
+ '0',
+ '0',
+ '0',
+ '0',
+ '0',
+ '0',
+ '0',
+ '0',
+ '0',
+ '0',
+ '0'
+#else
+/* 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
+};
+
+static usb_dev_param_t usb_dev_param =
+{
+ 0x0001, /* bcdDevice */
+
+ usb_manufacturer_string,
+ sizeof(usb_manufacturer_string)/sizeof(kal_uint16),
+ usb_product_string,
+ sizeof(usb_product_string)/sizeof(kal_uint16),
+ usb_serial_num,
+ sizeof(usb_serial_num)/sizeof(kal_uint16),
+
+ 2, // morphing sub id
+
+ /* Mode Parameter: each mode is defined in a file of usbc_custom_mode folder */
+ /* And each mode will register to this structure array.*/
+ /* ========================================================== */
+ {{0}},
+
+ {
+ #ifdef BTT_STANDALONE_MODE
+ USB_MODE_BTT_STANDALONE, //USB_OS_WIN8
+ USB_MODE_BTT_STANDALONE, //USB_OS_WIN
+ USB_MODE_BTT_STANDALONE, //USB_OS_LINUX
+ USB_MODE_BTT_STANDALONE, //USB_OS_MAC
+ USB_MODE_BTT_STANDALONE //USB_OS_OTHERS
+ #else // #ifdef BTT_STANDALONE_MODE
+ USB_MODE_DEFAULT, //USB_OS_WIN8
+ USB_MODE_DEFAULT, //USB_OS_WIN
+ USB_MODE_DEFAULT, //USB_OS_LINUX
+ USB_MODE_DEFAULT, //USB_OS_MAC
+ USB_MODE_DEFAULT //USB_OS_OTHERS
+ #endif // #ifdef BTT_STANDALONE_MODE
+ }
+};
+
+//
+// ACM1 String Descriptor
+//
+static kal_uint16 acm1_string_descr_interface[] =
+{
+ 0x031A, /* bDescriptorType:0x03, bLength:0x1A */
+ 'U', 'S', 'B', ' ',
+ 'C', 'O', 'M', ' ',
+ 'P', 'o', 'r', 't',
+};
+static const usb_class_acm1_param_t usb_class_acm1_param_c =
+{
+ acm1_string_descr_interface, // interface_string;
+ sizeof(acm1_string_descr_interface)/sizeof(kal_uint16), // interface_string_size;
+};
+
+//
+// ACM2 String Descriptor
+//
+static kal_uint16 acm2_string_descr_comm_interface[] =
+{
+ 0x0340, /* bDescriptorType:0x03, bLength:0x40 */
+ 'U', 'S', 'B', ' ',
+ 'C', 'O', 'M', ' ',
+ 'C', 'o', 'm', 'm', 'u', 'n', 'i', 'c', 'a', 't', 'i', 'o', 'n', ' ',
+ 'I', 'n', 't', 'e', 'r', 'f', 'a', 'c', 'e',
+};
+static kal_uint16 acm2_string_descr_data_interface[] =
+{
+ 0x032E, /* bDescriptorType:0x03, bLength:0x2E */
+ 'U', 'S', 'B', ' ',
+ 'C', 'O', 'M', ' ',
+ 'D', 'a', 't', 'a', ' ',
+ 'I', 'n', 't', 'e', 'r', 'f', 'a', 'c', 'e',
+};
+static kal_uint16 acm2_string_descr_iad[] =
+{
+ 0x031A, /* bDescriptorType:0x03, bLength:0x1A */
+ 'U', 'S', 'B', ' ',
+ 'C', 'O', 'M', ' ',
+ 'P', 'o', 'r', 't',
+};
+static const usb_class_acm2_param_t usb_class_acm2_param_c =
+{
+ acm2_string_descr_comm_interface, // comm_interface_string;
+ sizeof(acm2_string_descr_comm_interface)/sizeof(kal_uint16), // comm_interface_string_size;
+ acm2_string_descr_data_interface, // data_interface_string;
+ sizeof(acm2_string_descr_data_interface)/sizeof(kal_uint16), // data_interface_string_size;
+ acm2_string_descr_iad, // iad_string;
+ sizeof(acm2_string_descr_iad)/sizeof(kal_uint16), // iad_string_size;
+};
+
+//
+// ACM3 String Descriptor
+//
+static kal_uint16 acm3_string_descr_interface[] =
+{
+ 0x031A, /* bDescriptorType:0x03, bLength:0x1A */
+ 'U', 'S', 'B', ' ',
+ 'C', 'O', 'M', ' ',
+ 'P', 'o', 'r', 't',
+};
+static const usb_class_acm3_param_t usb_class_acm3_param_c =
+{
+ acm3_string_descr_interface, // interface_string;
+ sizeof(acm3_string_descr_interface)/sizeof(kal_uint16), // interface_string_size;
+};
+
+//
+// RNDIS String Descriptor
+//
+static kal_uint16 rndis_string_descr_comm_interface[] =
+{
+ 0x033C, /* bDescriptorType:0x03, bLength:0x3C */
+ 'R', 'N', 'D', 'I', 'S', ' ',
+ 'C', 'o', 'm', 'm', 'u', 'n', 'i', 'c', 'a', 't', 'i', 'o', 'n', ' ',
+ 'I', 'n', 't', 'e', 'r', 'f', 'a', 'c', 'e',
+};
+static kal_uint16 rndis_string_descr_data_interface[] =
+{
+ 0x032A, /* bDescriptorType:0x03, bLength:0x2A */
+ 'R', 'N', 'D', 'I', 'S', ' ',
+ 'D', 'a', 't', 'a', ' ',
+ 'I', 'n', 't', 'e', 'r', 'f', 'a', 'c', 'e',
+};
+static kal_uint16 rndis_string_descr_iad[] =
+{
+ 0x0326, /* bDescriptorType:0x03, bLength:0x26 */
+ 'R', 'E', 'M', 'O', 'T', 'E', ' ',
+ 'N', 'D', 'I', 'S', ' ',
+ 'D', 'e', 'v', 'i', 'c', 'e',
+};
+static const usb_class_rndis_param_t usb_class_rndis_param_c =
+{
+ rndis_string_descr_comm_interface, // comm_interface_string;
+ sizeof(rndis_string_descr_comm_interface)/sizeof(kal_uint16), // comm_interface_string_size;
+ rndis_string_descr_data_interface, // data_interface_string;
+ sizeof(rndis_string_descr_data_interface)/sizeof(kal_uint16), // data_interface_string_size;
+ rndis_string_descr_iad, // iad_string;
+ sizeof(rndis_string_descr_iad)/sizeof(kal_uint16), // iad_string_size;
+};
+
+//
+// ECM String Descriptor
+//
+static kal_uint16 ecm_string_descr_comm_interface[] =
+{
+ 0x033A, /* bDescriptorType:0x03, bLength:0x3A */
+ 'E', 'C', 'M', ' ',
+ 'C', 'o', 'm', 'm', 'u', 'n', 'i', 'c', 'a', 't', 'i', 'o', 'n', ' ',
+ 'I', 'n', 't', 'e', 'r', 'f', 'a', 'c', 'e',
+};
+static kal_uint16 ecm_string_descr_null_data_interface[] =
+{
+ 0x0330, /* bDescriptorType:0x03, bLength:0x30 */
+ 'E', 'C', 'M', ' ',
+ 'N', 'U', 'L', 'L', ' ',
+ 'D', 'a', 't', 'a', ' ',
+ 'I', 'n', 't', 'e', 'r', 'f', 'a', 'c', 'e',
+};
+
+static kal_uint16 ecm_string_descr_data_interface[] =
+{
+ 0x0326, /* bDescriptorType:0x03, bLength:0x26 */
+ 'E', 'C', 'M', ' ',
+ 'D', 'a', 't', 'a', ' ',
+ 'I', 'n', 't', 'e', 'r', 'f', 'a', 'c', 'e',
+};
+static kal_uint16 ecm_string_descr_iad[] =
+{
+ 0x0328, /* bDescriptorType:0x03, bLength:0x28 */
+ 'U', 'S', 'B', ' ',
+ 'E', 't', 'h', 'e', 'r', 'n', 'e', 't', ' ',
+ 'D', 'e', 'v', 'i', 'c', 'e',
+};
+static kal_uint16 ecm_string_descr_mac_addr[3][13] =
+{
+ {0x031A, /* bDescriptorType:0x03, bLength:0x1A */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
+
+ {0x031A, /* bDescriptorType:0x03, bLength:0x1A */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
+
+ {0x031A, /* bDescriptorType:0x03, bLength:0x1A */
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000},
+};
+static const usb_class_ecm_param_t usb_class_ecm_param_c =
+{
+ ecm_string_descr_comm_interface, // comm_interface_string;
+ sizeof(ecm_string_descr_comm_interface)/sizeof(kal_uint16), // comm_interface_string_size;
+ ecm_string_descr_null_data_interface, // null_data_interface_string; -- Disable data interface
+ sizeof(ecm_string_descr_null_data_interface)/sizeof(kal_uint16), // null_data_interface_string_size;
+ ecm_string_descr_data_interface, // data_interface_string; -- Enable data interface
+ sizeof(ecm_string_descr_data_interface)/sizeof(kal_uint16), // data_interface_string_size;
+ ecm_string_descr_iad, // iad_string;
+ sizeof(ecm_string_descr_iad)/sizeof(kal_uint16), // iad_string_size;
+ // mac_addr_string;
+ { ecm_string_descr_mac_addr[0], ecm_string_descr_mac_addr[1], ecm_string_descr_mac_addr[2] },
+ // mac_addr_string_size;
+ { sizeof(ecm_string_descr_mac_addr[0])/sizeof(kal_uint16), sizeof(ecm_string_descr_mac_addr[1])/sizeof(kal_uint16), sizeof(ecm_string_descr_mac_addr[2])/sizeof(kal_uint16) },
+};
+
+
+//
+// MBIM String Descriptor
+//
+static kal_uint16 mbim_string_descr_comm_interface[] =
+{
+ 0x033A, /* bDescriptorType:0x03, bLength:0x3A */
+ 'M', 'B', 'I', 'M', ' ',
+ 'C', 'o', 'm', 'm', 'u', 'n', 'i', 'c', 'a', 't', 'i', 'o', 'n', ' ',
+ 'I', 'n', 't', 'e', 'r', 'f', 'a', 'c', 'e',
+};
+static kal_uint16 mbim_string_descr_null_data_interface[] =
+{
+ 0x0332, /* bDescriptorType:0x03, bLength:0x32 */
+ 'M', 'B', 'I', 'M', ' ',
+ 'N', 'U', 'L', 'L', ' ',
+ 'D', 'a', 't', 'a', ' ',
+ 'I', 'n', 't', 'e', 'r', 'f', 'a', 'c', 'e',
+};
+static kal_uint16 mbim_string_descr_data_interface[] =
+{
+ 0x0328, /* bDescriptorType:0x03, bLength:0x28 */
+ 'M', 'B', 'I', 'M', ' ',
+ 'D', 'a', 't', 'a', ' ',
+ 'I', 'n', 't', 'e', 'r', 'f', 'a', 'c', 'e',
+};
+static kal_uint16 mbim_string_descr_iad[] =
+{
+ 0x0330, /* bDescriptorType:0x03, bLength:0x30 */
+ 'M', 'o', 'b', 'i', 'l', 'e', ' ',
+ 'B', 'r', 'o', 'a', 'd', 'b', 'a', 'n', 'd', ' ',
+ 'D', 'e', 'v', 'i', 'c', 'e',
+};
+static const usb_class_mbim_param_t usb_class_mbim_param_c =
+{
+ mbim_string_descr_comm_interface, // comm_interface_string;
+ sizeof(mbim_string_descr_comm_interface)/sizeof(kal_uint16), // comm_interface_string_size;
+ mbim_string_descr_null_data_interface, // null_data_interface_string; -- Disable data interface
+ sizeof(mbim_string_descr_null_data_interface)/sizeof(kal_uint16), // null_data_interface_string_size;
+ mbim_string_descr_data_interface, // data_interface_string; -- Enable data interface
+ sizeof(mbim_string_descr_data_interface)/sizeof(kal_uint16), // data_interface_string_size;
+ mbim_string_descr_iad, // iad_string;
+ sizeof(mbim_string_descr_iad)/sizeof(kal_uint16), // iad_string_size;
+};
+
+//
+// ADB String Descriptor
+//
+static kal_uint16 adb_string_descr_interface[] =
+{
+ 0x031C, /* bDescriptorType:0x03, bLength:0x1A */
+ 'A', 'D', 'B', ' ',
+ 'I', 'n', 't', 'e',
+ 'r', 'f', 'a', 'c', 'e'
+};
+static const usb_class_adb_param_t usb_class_adb_param_c =
+{
+ adb_string_descr_interface, // interface_string;
+ sizeof(adb_string_descr_interface)/sizeof(kal_uint16), // interface_string_size;
+};
+
+static kal_uint16 ms_string_descr_interface[] =
+{
+ 0x031c,
+ 'M',
+ 'a',
+ 's',
+ 's',
+ ' ',
+ 'S',
+ 't',
+ 'o',
+ 'r',
+ 'a',
+ 'g',
+ 'e',
+ ' '
+};
+static const usb_class_ms_param_t usb_class_ms_param_c =
+{
+ ms_string_descr_interface, // interface_string;
+ sizeof(ms_string_descr_interface)/sizeof(kal_uint16), // interface_string_size;
+};
+#if 0
+/* under construction !*/
+/* under construction !*/
+#if defined(__MTK_TARGET__)
+/* under construction !*/
+#else
+/* under construction !*/
+#endif
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#if defined(__MTK_TARGET__)
+ #if defined(__MSDC_SD_MMC__)
+/* under construction !*/
+ #endif
+/* under construction !*/
+#else
+/* under construction !*/
+#endif
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#if defined(__MTK_TARGET__)
+ #if defined(__MSDC_SD_MMC__)
+/* under construction !*/
+ #endif
+/* under construction !*/
+#else
+/* under construction !*/
+#endif
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#if defined(__MTK_TARGET__)
+ #if defined(__MSDC_SD_MMC__)
+/* under construction !*/
+ #endif
+/* under construction !*/
+#else
+/* under construction !*/
+#endif
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#if defined(__MTK_TARGET__)
+ #if defined(__MSDC_SD_MMC__)
+/* under construction !*/
+ #endif
+/* under construction !*/
+#else
+/* under construction !*/
+#endif
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#if defined(__MTK_TARGET__)
+/* under construction !*/
+#else
+/* under construction !*/
+#endif
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#if defined(__MTK_TARGET__)
+ #if defined(__MSDC_SD_MMC__)
+/* under construction !*/
+ #endif
+/* under construction !*/
+#else
+/* under construction !*/
+#endif
+/* 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 !*/
+/* 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 !*/
+/* 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 !*/
+/* 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 !*/
+/* 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 !*/
+/* 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
+
+/*
+ * Public Function
+ */
+const usb_dev_param_t *usb_get_device_param(void)
+{
+ return (&usb_dev_param);
+}
+
+const usb_class_acm1_param_t *usb_get_acm1_param(void)
+{
+ return &usb_class_acm1_param_c;
+}
+
+const usb_class_acm2_param_t *usb_get_acm2_param(void)
+{
+ return &usb_class_acm2_param_c;
+}
+
+const usb_class_acm3_param_t *usb_get_acm3_param(void)
+{
+ return &usb_class_acm3_param_c;
+}
+
+const usb_class_mbim_param_t *usb_get_mbim_param(void)
+{
+ return &usb_class_mbim_param_c;
+}
+
+const usb_class_rndis_param_t *usb_get_rndis_param(void)
+{
+ return &usb_class_rndis_param_c;
+}
+
+const usb_class_ecm_param_t *usb_get_ecm_param(void)
+{
+ return &usb_class_ecm_param_c;
+}
+
+const usb_class_adb_param_t *usb_get_adb_param(void)
+{
+ return &usb_class_adb_param_c;
+}
+
+const usb_class_ms_param_t *usb_get_ms_param(void)
+{
+ return &usb_class_ms_param_c;
+}
+
+/* get USB custom parameter function*/
+static const usb_custom_func_t usb_custom_func =
+{
+ usb_get_device_param,
+ usb_get_ms_param,
+ usb_get_acm1_param,
+ usb_get_acm2_param,
+ usb_get_acm3_param,
+ usb_get_mbim_param,
+ usb_get_rndis_param,
+ usb_get_ecm_param,
+ usb_get_adb_param,
+};
+
+const usb_custom_func_t *usb_get_custom_func(void)
+{
+ return(&usb_custom_func);
+}
+
+kal_uint32 usb_mode_register_index = 0;
+void usb_register_mode_param(usb_mode_param_t *mode_param)
+{
+ if(mode_param != NULL && usb_mode_register_index < (USB_MODE_MAX -1))
+ kal_mem_cpy(&(usb_dev_param.mode_param[usb_mode_register_index++]), mode_param, sizeof(usb_mode_param_t));
+
+ return;
+}
+
+void usb_replace_mode_param(usb_mode_param_t *mode_param, kal_uint8 index)
+{
+ if(mode_param != NULL && index < (USB_MODE_MAX -1))
+ {
+ kal_mem_cpy(&(usb_dev_param.mode_param[index]), mode_param, sizeof(usb_mode_param_t));
+ }
+ return;
+}
+#endif /* __HIF_USB_SUPPORT__ */