Add toolchain and mbtk source

Change-Id: Ie12546301367ea59240bf23d5e184ad7e36e40b3
diff --git a/mbtk/include/ql/ql_gpio.h b/mbtk/include/ql/ql_gpio.h
new file mode 100755
index 0000000..74402e9
--- /dev/null
+++ b/mbtk/include/ql/ql_gpio.h
@@ -0,0 +1,376 @@
+/*****************************************************************************
+*  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 Quectel Co., Ltd. 2019
+*
+*****************************************************************************/
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ *   ql_gpio.h 
+ *
+ * Project:
+ * --------
+ *   OpenLinux
+ *
+ * Description:
+ * ------------
+ *   GPIO API defines.
+ *
+ *
+ *============================================================================
+ *             HISTORY
+ *----------------------------------------------------------------------------
+ * WHO            WHEN                WHAT
+ *----------------------------------------------------------------------------
+ * Carola.Zhang   16/07/2019		  Create.
+ ****************************************************************************/
+
+#ifndef __QL_GPIO_H__
+#define __QL_GPIO_H__
+
+typedef enum{
+    /*Invalid*/  PINNAME_BEGIN = -1,
+	/*PIN-1*/    PINNAME_GPIO1 = 1,
+	/*PIN-2*/    PINNAME_GPIO2 = 2,
+	/*PIN-3*/    PINNAME_GPIO3 = 3,
+	/*PIN-4*/    PINNAME_GPIO4 = 4,
+	/*PIN-5*/    PINNAME_GPIO5 = 5,
+    /*PIN-6*/    PINNAME_NET_STATUS = 6,
+    /*PIN-11*/   PINNAME_DBG_RXD = 11,
+    /*PIN-12*/   PINNAME_DBG_TXD = 12,
+    /*PIN-13*/   PINNAME_USIM_PRESENCE = 13,
+    /*PIN-23*/   PINNAME_SD_INT_DET = 23,
+    /*PIN-24*/   PINNAME_PCM_IN = 24,
+    /*PIN-25*/   PINNAME_PCM_OUT = 25,
+    /*PIN-26*/   PINNAME_PCM_SYNC = 26,
+    /*PIN-27*/   PINNAME_PCM_CLK = 27,
+    /*PIN-28*/   PINNAME_SDC2_DATA3 = 28,
+    /*PIN-29*/   PINNAME_SDC2_DATA2 = 29,
+    /*PIN-30*/   PINNAME_SDC2_DATA1 = 30,
+    /*PIN-31*/   PINNAME_SDC2_DATA0 = 31,
+    /*PIN-32*/   PINNAME_SDC2_CLK = 32,
+    /*PIN-33*/   PINNAME_SDC2_CMD = 33,
+    /*PIN-37*/   PINNAME_SPI_CS_N = 37,
+    /*PIN-38*/   PINNAME_SPI_MOSI = 38,
+    /*PIN-39*/   PINNAME_SPI_MISO = 39,
+    /*PIN-40*/   PINNAME_SPI_CLK = 40,
+    /*PIN-41*/   PINNAME_I2C_SCL = 41,
+    /*PIN-42*/   PINNAME_I2C_SDA = 42,
+    /*PIN-62*/   PINNAME_GPIO6 = 62,
+    /*PIN-63*/   PINNAME_DCD = 63,
+    /*PIN-66*/   PINNAME_DTR = 66,
+    /*PIN-64*/   PINNAME_MAIN_CTS = 64,
+    /*PIN-65*/   PINNAME_MAIN_RTS = 65,
+    /*PIN-67*/   PINNAME_MAIN_TXD = 67,
+    /*PIN-68*/   PINNAME_MAIN_RXD = 68,
+    /*PIN-73*/   PINNAME_RMII_RXD1 = 73,
+    /*PIN-74*/   PINNAME_RMII_RXCL = 74,
+    /*PIN-75*/   PINNAME_RMII_CLK = 75,
+    /*PIN-76*/   PINNAME_RMII_RXD0 = 76,
+    /*PIN-77*/   PINNAME_RMII_TXD0 = 77,
+    /*PIN-78*/   PINNAME_RMII_TXD1 = 78,
+    /*PIN-79*/   PINNAME_RMII_RXD2 = 79,
+    /*PIN-80*/   PINNAME_RMII_TXD2 = 80,
+    /*PIN-81*/   PINNAME_RMII_TX_CTRL = 81,
+    /*PIN-82*/   PINNAME_RMII_RXD3 = 82,
+    /*PIN-83*/   PINNAME_RMII_TXCL = 83,
+    /*PIN-84*/   PINNAME_RMII_TXD3 = 84,
+    /*PIN-118*/  PINNAME_WLAN_SLP_CLK = 118,
+    /*PIN-119*/  PINNAME_RMII_RST = 119,
+    /*PIN-120*/  PINNAME_RMII_INT = 120,
+    /*PIN-121*/  PINNAME_RMII_MDIO = 121,
+    /*PIN-122*/  PINNAME_RMII_MDC = 122,
+    /*PIN-127*/  PINNAME_WLAN_PER_EN = 127,
+    /*PIN-135*/  PINNAME_WLAN_WAKE = 135,
+    /*PIN-136*/  PINNAME_WLAN_EN = 136,
+    /*PIN-139*/  PINNAME_GPIO8 = 139,
+    PINNAME_END
+}Enum_PinName;
+
+/****************************************************************************
+ * Error Code Definition
+ ***************************************************************************/
+enum {
+        RES_OK = 0,
+        RES_BAD_PARAMETER  = -1,     ///< Parameter is invalid.
+        RES_IO_NOT_SUPPORT = -2,
+        RES_IO_ERROR = -3,
+        RES_NOT_IMPLEMENTED = -4
+};
+
+typedef enum{
+    PINDIRECTION_IN  = 0,
+    PINDIRECTION_OUT = 1
+}Enum_PinDirection;
+
+typedef enum{
+    PINLEVEL_LOW  = 0,
+    PINLEVEL_HIGH = 1
+}Enum_PinLevel;
+
+typedef enum{
+    PINPULLSEL_DISABLE  = (0<<13),    // Disable pull selection
+    PINPULLSEL_PULLDOWN = (5<<13),    // Pull-down 
+    PINPULLSEL_PULLUP   = (6<<13)     // Pull-up 
+}Enum_PinPullSel;
+
+/****************************************************************************
+ * GPIO Config Items
+ ***************************************************************************/
+typedef struct{
+    Enum_PinName           pin_name;
+    Enum_PinDirection      pinDirection;  
+    Enum_PinLevel          pinLevel;
+    Enum_PinPullSel       pinPullSel;
+}ST_GPIOConfig;
+
+//------------------------------------------------------------------------------
+/**
+ * The type of GPIO Edge Sensivity.
+ */
+//------------------------------------------------------------------------------
+typedef enum {
+    EINT_SENSE_NONE,       // pin is input, but no an interrupt pin.
+    EINT_SENSE_RISING,
+    EINT_SENSE_FALLING,
+    EINT_SENSE_BOTH
+}Enum_EintType;
+
+/*****************************************************************
+* Function:     Ql_GPIO_Init 
+* 
+* Description:
+*               This function enables the GPIO function of the specified pin,
+*               and initialize the configurations, including direction,
+*               level and pull selection.
+*
+* Parameters:
+*               pin_name:
+*                   Pin name, one value of Enum_PinName.
+*               dir:
+*                   The initial direction of GPIO, one value of Enum_PinDirection.
+*               level:
+*                   The initial level of GPIO, one value of Enum_PinLevel. 
+*               pull_sel:
+*                   Pull selection, one value of Enum_PinPullSel.
+* Return:        
+*               RES_OK, this function succeeds.
+*               RES_IO_NOT_SUPPORT, the input GPIO is invalid. 
+*               RES_IO_ERR, the function failed
+*               other place. For example this GPIO has been using as EINT.
+*****************************************************************/
+int Ql_GPIO_Init(Enum_PinName       pin_name, 
+                 Enum_PinDirection  dir, 
+                 Enum_PinLevel      level, 
+                 Enum_PinPullSel    pull_sel
+                 );
+
+/*****************************************************************
+* Function:     Ql_GPIO_Base_Init 
+* 
+* Description:
+*               This function enables the GPIO function of the specified pin.
+*
+* Parameters:
+*               pin_name:
+*                   Pin name, one value of Enum_PinName.
+*            
+* Return:        
+*               RES_OK, this function succeeds.
+*               RES_IO_NOT_SUPPORT, the input GPIO is invalid. 
+*               RES_IO_ERR, the function failed
+*****************************************************************/
+int Ql_GPIO_Base_Init(Enum_PinName pin_name );
+
+/*****************************************************************
+* Function:     Ql_GPIO_SetLevel 
+* 
+* Description:
+*               This function sets the level of the specified GPIO.
+*
+* Parameters:
+*               pin_name:
+*                   Pin name, one value of Enum_PinName.
+*               level:
+*                   The initial level of GPIO, one value of Enum_PinLevel. 
+* Return:        
+*               RES_OK, this function succeeds.
+*               RES_IO_NOT_SUPPORT, the input GPIO is invalid. 
+*               RES_IO_ERR, the function failed
+*               other place. For example this GPIO has been using as EINT.
+*****************************************************************/
+int Ql_GPIO_SetLevel(Enum_PinName pin_name, Enum_PinLevel level);
+
+/*****************************************************************
+* Function:     Ql_GPIO_GetLevel 
+* 
+* Description:
+*               This function gets the level of the specified GPIO.
+*
+* Parameters:
+*               pin_name:
+*                   Pin name, one value of Enum_PinName.
+* Return:        
+*               The level value of the specified GPIO, which is 
+*               nonnegative integer.
+*               RES_IO_NOT_SUPPORT, the input GPIO is invalid.
+*****************************************************************/
+int Ql_GPIO_GetLevel(Enum_PinName pin_name);
+
+/*****************************************************************
+* Function:     Ql_GPIO_SetDirection 
+* 
+* Description:
+*               This function sets the direction of the specified GPIO.
+*
+* Parameters:
+*               pin_name:
+*                   Pin name, one value of Enum_PinName.
+*               dir:
+*                   The initial direction of GPIO, one value of Enum_PinDirection.
+* Return:        
+*               RES_OK, this function succeeds.
+*               RES_IO_NOT_SUPPORT, the input GPIO is invalid. 
+*               RES_IO_ERR, the function failed
+*               other place. For example this GPIO has been using as EINT.
+*****************************************************************/
+int Ql_GPIO_SetDirection(Enum_PinName pin_name, Enum_PinDirection dir);
+
+/*****************************************************************
+* Function:     Ql_GPIO_GetDirection 
+* 
+* Description:
+*               This function gets the direction of the specified GPIO.
+*
+* Parameters:
+*               pin_name:
+*                   Pin name, one value of Enum_PinName.
+* Return:        
+*               0  INPUT
+*               1  OUTPUT
+*               RES_IO_NOT_SUPPORT, the input GPIO is invalid. 
+*               other place. For example this GPIO has been using as EINT.
+*****************************************************************/
+int Ql_GPIO_GetDirection(Enum_PinName pin_name);
+
+/*****************************************************************
+* Function:     Ql_GPIO_SetPullSelection 
+* 
+* Description:
+*               This function sets the pull selection of the specified GPIO.
+*
+* Parameters:
+*               pin_name:
+*                   Pin name, one value of Enum_PinName.
+*               Enum_PinPullSel:
+*                   Pull selection, one value of Enum_PinPullSel.
+* Return:        
+*               RES_OK, this function succeeds.
+*               RES_IO_NOT_SUPPORT, the input GPIO is invalid. 
+*               RES_IO_ERR, the function failed
+*               other place. For example this GPIO has been using as EINT.
+*****************************************************************/
+int Ql_GPIO_SetPullSelection(Enum_PinName pin_name, Enum_PinPullSel pull_sel);
+
+/*****************************************************************
+* Function:     ql_gpio_get_pull_selection 
+* 
+* Description:
+*               This function gets the pull selection of the specified GPIO.
+*
+* Parameters:
+*               pin_name:
+*                   Pin name, one value of Enum_PinName.
+* Return:        
+*               0<<13   no pull
+*               5<<13   pull down
+*               6<<13   pull up
+*****************************************************************/
+int Ql_GPIO_GetPullSelection(Enum_PinName pin_name);
+
+/*****************************************************************
+* Function:     Ql_GPIO_Uninit 
+* 
+* Description:
+*               This function releases the specified GPIO that was 
+*               initialized by calling Ql_GPIO_Init() previously.
+*               After releasing, the GPIO can be used for other purpose.
+* Parameters:
+*               pin_name:
+*                   Pin name, one value of Enum_PinName.
+* Return:        
+*               RES_OK, this function succeeds.
+*               RES_IO_NOT_SUPPORT, the input GPIO is invalid. 
+*               RES_IO_ERR, the function failed
+*               other place. For example this GPIO has been using as EINT.
+*****************************************************************/
+int Ql_GPIO_Uninit(Enum_PinName pin_name);
+
+//------------------------------------------------------------------------------
+/*
+* Description:
+*     Definition for EINT callback function.
+* 
+* Parameters:
+*     PinName:
+*         EINT pin name, one value of Enum_PinName.
+*
+*     level:
+*         The EINT level value, one value of Enum_PinLevel. 
+*         0 or 1
+*/
+//------------------------------------------------------------------------------
+typedef void (*Ql_EINT_Callback)(Enum_PinName eint_pin_name, int level);
+
+//------------------------------------------------------------------------------
+/*
+* Function:     Ql_EINT_Enable 
+* 
+* Description:
+*               Set the interrupt sense mode, and enable interrupt. 
+*
+* Parameters:
+*               eint_pin_name:
+*                   EINT pin name, one value of Enum_PinName that has 
+*                   the interrupt function.
+*
+*               eint_type:
+*                   Interrupt type, level-triggered or edge-triggered.
+*                   Now, only edge-triggered interrupt is supported.
+*
+*               eint_callback:
+*                   call back function
+*
+* Return:        
+*               RES_OK, this function succeeds.
+*               else failed to execute the function. 
+*/
+//------------------------------------------------------------------------------
+int Ql_EINT_Enable(Enum_PinName eint_pin_name, Enum_EintType eint_type, Ql_EINT_Callback eint_callback);
+
+
+//------------------------------------------------------------------------------
+/*
+* Function:     Ql_EINT_Disable 
+* 
+* Description:
+*               Disable the interrupt sense. 
+*
+* Parameters:
+*               eint_pin_name:
+*                   EINT pin name, one value of Enum_PinName that has 
+*                   the interrupt function.
+*
+* Return:        
+*               RES_OK, this function succeeds.
+*               else failed to execute the function. 
+*/
+//------------------------------------------------------------------------------
+int Ql_EINT_Disable(Enum_PinName eint_pin_name);
+
+#endif  // __QL_GPIO_H__