Baseline update from LYNQ_SDK_ASR_T108_V05.03.01.00(kernel build error.)

Change-Id: I56fc72cd096e82c589920026553170e5cb9692eb
diff --git a/mbtk/include/gsw/gsw_at.h b/mbtk/include/gsw/gsw_at.h
new file mode 100755
index 0000000..5d9c486
--- /dev/null
+++ b/mbtk/include/gsw/gsw_at.h
@@ -0,0 +1,60 @@
+/**

+ * @brief AT registered callback function

+ * @param  [in] const char *input:atcmd command

+ * @param  [out] char *output:A cache of output command execution results

+ * @param  [in] out_max_size:Output cache size

+ * @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+ */

+typedef void(*AT_CALLBACK)(char input[],char output[],int out_max_size);

+

+typedef enum

+{

+ soc_max = 0,

+ cpu0,

+ cpu1,

+ cpu2,

+ cpu3,

+ gpu0,

+ gpu1,

+ dramc,

+ mmsys,

+ md_5g,

+ md_4g,

+ md_3g,

+ soc_dram_ntc,

+ pa_5g,

+ pa_4g,

+ rf_ntc,

+ pmic,

+ pmic_vcore,

+ pmic_vpro,

+ pmic_vgpu=19,

+}ZONE_NUM;

+

+

+

+

+

+/**

+* @brief Registration interface of AT

+* @param  [in] const char *atcmd

+* @param  [in] AT_CALLBACK func

+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+*/

+int32_t gsw_reg_atcmd(const char *atcmd,AT_CALLBACK func);

+

+/**

+ * @brief Initializes the at module in the sdk

+ * @param [in/out] None

+ * @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+ */

+int32_t gsw_sdk_at_init(void);

+

+/**

+* @brief get temperature of specify zone

+* @param  [in] ZONE_NUM num

+* @param  [out] int *temp

+* @retval RET_SUCCESS\RET_NORMAL_FAIL

+*/

+int32_t gsw_get_modem_temperture(ZONE_NUM num,int32_t *temp);

+

diff --git a/mbtk/include/gsw/gsw_gnss.h b/mbtk/include/gsw/gsw_gnss.h
new file mode 100755
index 0000000..90508f6
--- /dev/null
+++ b/mbtk/include/gsw/gsw_gnss.h
@@ -0,0 +1,184 @@
+#define MBTK_GNSS_IND_LOCATION (1)      // 1

+#define MBTK_GNSS_IND_NMEA (1 << 1)     // 2

+#define QSER_GNSS_TIMEOUT 5

+

+typedef enum{

+    GSW_SWITCH_DISABLE = 0,    /**< configuration switch disable :0 */

+    GSW_SWITCH_ENABLE          /**< configuration switch enable :1 */

+}GSW_GNSS_CONF_SWITCH;

+

+typedef enum{

+GSW_XTRA_STATE_MIN = 0,

+GSW_XTRA_STATE_DISBALE = GSW_XTRA_STATE_MIN,

+GSW_XTRA_STATE_ENABLE,

+GSW_XTRA_STATE_MAX

+}gsw_xtra_state_e;

+

+typedef enum{

+    GSW_FREQ_1HZ = 1,    /**< 1hZ */

+    GSW_FREQ_2HZ = 2,    /**< 2hZ */

+    GSW_FREQ_5HZ = 5,    /**< 5hZ */

+    GSW_FREQ_10HZ = 10,   /**< 10hZ */

+}GSW_FREQ_TYPE_T;

+

+

+

+typedef enum{

+    GSW_MODE_GPS = 1,                               /**< GPS only */

+    GSW_MODE_BEIDOU,                                /**< BEIDOU only*/

+    GSW_MODE_GPS_BEIDOU,                            /**< GPS+BEIDOU */

+    GSW_MODE_GLONASS,                               /**< GLONASS only */ /* The high-tech platform does not support this type */

+    GSW_MODE_GPS_GLONASS,                           /**< GPS+GLONASS */

+    GSW_MODE_GLONASS_BEIDOU,                        /**< GLONASS+BEIDOU */ /* The high-tech platform does not support this type */

+    GSW_MODE_GPS_GLONASS_BEIDOU,                    /**< GPS+GLONASS+BEIDOU */ /* The high-tech platform does not support this type */           

+    GSW_MODE_GALILEO,                               /**< GALILEO only */ 

+    GSW_MODE_GPS_GALILEO,                           /**< GPS+GALILEO */ 

+    GSW_MODE_BEIDOU_GALILEO,                        /**< BEIDOU+GALILEO */ 

+    GSW_MODE_GPS_BEIDOU_GALILEO,                    /**< GPS+BEIDOU+GALILEO */ 

+    GSW_MODE_GLONASS_GALILEO,                       /**< GLONASS+GALILEO */ 

+    GSW_MODE_GPS_GLONASS_GALILEO,                   /**< GPS+GLONASS+GALILEO */ 

+    GSW_MODE_BEIDOU_GLONASS_GALILEO,                /**< BEIDOU+GLONASS+GALILEO */ /* The high-tech platform does not support this type */

+}GSW_GNSS_MODE_CONFIGURATION;

+

+

+

+typedef struct

+{

+    /**< set to sizeof(GpsLocation) */

+    size_t       size;

+    /**< Contains GpsLocationFlags bits. */

+    unsigned short int     flags;

+    /**< Represents latitude in degrees. */

+    double      latitude;

+    /**< Represents longitude in degrees. */

+    double      longitude;

+    /**< Represents altitude in meters above the WGS 84 reference ellipsoid. */

+    double      altitude;

+    /**< Represents speed in meters per second. */

+    float        speed;

+    /**< Represents heading in degrees. */

+    float        bearing;

+    /**< Represents expected accuracy in meters. */

+    float        accuracy;

+    /**< Timestamp for the location fix. */

+    long long int      timestamp;

+}GSW_GNSS_LOCATION_T;

+

+typedef struct {

+    GSW_GNSS_LOCATION_T legacyLocation;

+    float           horizontalAccuracyMeters;

+    /**< Represents expected vertical position accuracy in meters

+    * (68% confidence).*/

+    float           verticalAccuracyMeters;

+    /**< Represents expected speed accuracy in meter per seconds

+    * (68% confidence).*/

+    float           speedAccuracyMetersPerSecond;

+    /**< Represents expected bearing accuracy in degrees

+    * (68% confidence).*/

+    float           bearingAccuracyDegrees;

+}GSW_GNSS_LOCATION_EXT_T;

+

+typedef void (*gsw_gnss_location_callback_ext)(GSW_GNSS_LOCATION_EXT_T* location);

+typedef void (*gsw_gnss_nmea_callback )(const char* nmea, int length);

+

+typedef struct{

+gsw_gnss_location_callback_ext gsw_location_cb;

+gsw_gnss_nmea_callback gsw_nmea_cb;

+}gsw_gnss_cb;

+

+typedef struct{

+GSW_GNSS_MODE_CONFIGURATION start_mode;

+GSW_FREQ_TYPE_T freq;

+gsw_gnss_cb callback;

+}gsw_gnss_init_configure_t;

+

+

+

+/**

+ * @brief SDK interface to set gnss sampling frequency, support 1Hz、2Hz、5Hz、10Hz

+ * @param  [in] freq

+ * @retval 0: success

+ * @retval other: fail

+ */

+int32_t gsw_gnss_set_freq(int32_t freq);

+

+/**

+ * @brief SDK interface to initialization gnss

+ * @param 

+ * @retval 0: success

+ * @retval other: fail

+ */

+int32_t gsw_gnss_init(void);

+

+/**

+ * @brief SDK interface to start gnss

+ * @param 

+ * @retval 0: success

+ * @retval other: fail

+ */

+int32_t gsw_gnss_start(void);

+

+/**

+ * @brief SDK interface to stop gnss

+ * @param 

+ * @retval 0: success

+ * @retval other: fail

+ */

+int32_t gsw_gnss_stop(void);

+

+/**

+ * @brief SDK interface to de initialization gnss

+ * @param 

+ * @retval 0: success

+ * @retval other: fail

+ */

+int32_t gsw_gnss_deinit(void);

+

+/**

+ * @brief SDK interface to set gnss start mode,specific mode refreence GSW_HAL_GNSS_MODE_CONFIGURATION

+ * @param  [in] start_mode 

+ * @retval 0: success

+ * @retval other: fail

+ */

+int32_t gsw_gnss_set_start_mode(GSW_GNSS_MODE_CONFIGURATION start_mode);

+

+/**

+ * @brief SDK interface to set EPO switch if open or close

+ * @param  [in] switch_op

+ * @retval 0: success

+ * @retval other: fail

+ */

+int32_t gsw_gnss_epo_switch(GSW_GNSS_CONF_SWITCH switch_op);  /* The high-tech platform does not support this type */

+

+/**

+ * @brief SDK interface to registered callback function

+ * @param [in] callback

+ * @retval 0: success

+ * @retval other: fail

+ */

+int32_t gsw_gnss_reg_cb_group(gsw_gnss_cb callback);

+

+/**

+ * @brief SDK interface to enable XTRA switch

+ * @param [in] state

+ * @retval 0: success

+ * @retval other: fail

+ */

+int32_t gsw_gnss_xtra_is_enable(gsw_xtra_state_e state);

+

+/**

+ * @brief SDK interface to delete aiding data,delete aiding data for cold start

+ * @param [in] switch_op

+ * @retval 0: success

+ * @retval other: fail

+ */

+int32_t gsw_gnss_delete_aiding_data(unsigned int flags);

+

+/**

+ * @brief init and configure gps

+ * @param [in] init_configure

+ * @retval 0: success

+ * @retval other: fail

+ */

+int32_t gsw_gnss_init_configure_gps(gsw_gnss_init_configure_t init_configure);

+

diff --git a/mbtk/include/gsw/gsw_gpio.h b/mbtk/include/gsw/gsw_gpio.h
new file mode 100755
index 0000000..e3737aa
--- /dev/null
+++ b/mbtk/include/gsw/gsw_gpio.h
@@ -0,0 +1,66 @@
+typedef enum{

+  GSW_HAL_PINDIR_IN,

+  GSW_HAL_PINDIR_OUT,

+}gsw_hal_pinDirection;

+

+typedef enum{

+  GSW_HAL_LEVEL_LOW,

+  GSW_HAL_LEVEL_HIGH,

+}gsw_hal_pinLevel;

+

+typedef enum{

+  GSW_HAL_PULL_NULL,

+  GSW_HAL_PULL_DOWN,

+  GSW_HAL_PULL_UP,

+}gsw_hal_pinPullSel;

+

+typedef enum{

+  GSW_HAL_USB_DISCONNECTED,

+  GSW_HAL_USB_CONNECTED,

+}gsw_hal_usbStatus;

+

+

+/**

+* @brief Gpio init

+* @param [in]uint32_t gpioNum

+* @param [in]gsw_hal_pinDirection dir

+* @param [in]gsw_hal_pinLevel level

+* @param [in]gsw_hal_pinPullSel pullsel

+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+*/

+int32_t gsw_gpio_Init(uint32_t gpioNum, gsw_hal_pinDirection dir, gsw_hal_pinLevel level);

+

+

+/**

+* @brief Gpio set direction

+* @param [in]uint32_t gpioNum

+* @param [in]gsw_hal_pinDirection dir

+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+*/

+int32_t gsw_gpio_SetDirection(uint32_t gpioNum, gsw_hal_pinDirection dir);

+/**

+* @brief Gpio set level

+* @param [in]uint32_t gpioNum

+* @param [in]gsw_hal_pinLevel level

+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+*/

+int32_t gsw_gpio_SetLevel(uint32_t gpioNum, gsw_hal_pinLevel level);

+

+/**

+* @brief Gpio get level

+* @param [in]uint32_t gpioNum

+* @retval gsw_hal_pinLevel

+*/

+gsw_hal_pinLevel gsw_gpio_GetLevel(uint32_t gpioNum);

+

+/**

+* @brief check whether the usb is connected

+* @retval gsw_hal_usbStatus

+*/

+gsw_hal_usbStatus gsw_hwpin_is_usb_connected(void);

+

+/**

+* @brief Wakeup_out set level

+* @retval int32_t

+*/

+int32_t gsw_setWakeupLevel(gsw_hal_pinLevel level);
\ No newline at end of file
diff --git a/mbtk/include/gsw/gsw_ota.h b/mbtk/include/gsw/gsw_ota.h
new file mode 100755
index 0000000..c36c91d
--- /dev/null
+++ b/mbtk/include/gsw/gsw_ota.h
@@ -0,0 +1,163 @@
+#ifndef __GSW_OTA_UA_INTERFACE_H_

+#define __GSW_OTA_UA_INTERFACE_H_

+

+#include <stdio.h>

+#include <stdint.h>

+#include <stdbool.h>

+

+#define GSW_HAL_SUCCESS                                 (0x0000)

+#define GSW_HAL_FAIL                                    (-0x0001)

+

+

+typedef enum 

+{

+    GSW_OTA_SUCCESS,

+    GSW_OTA_FAILURE,

+    GSW_OTA_TIMEOUT,

+    GSW_OTA_INPROCESS,

+    GSW_OTA_NO_TASK

+}E_GSW_OTA_RET;

+

+typedef enum _gsw_ota_ret

+{

+    GSW_OTA_SYSTEM_A,

+    GSW_OTA_SYSTEM_B,

+}E_GSW_OTA_SYSTEM;

+

+

+typedef enum

+{

+    GSW_UPDATE_SUCCEED = 0, //update succeed

+    GSW_UPDATE_INPROGRESS,  //update in progress

+    GSW_UPDATE_BACKUP,      //A/B partition sync in progress

+    GSW_UPDATE_FAILED,      //update failed

+    GSW_UPDATE_WAITEDONE,   //update in-active part finished,not switch update part.

+    GSW_UPDATE_NEEDSYNC,    //switch update part, need sync A/B part

+    GSW_UPDATE_CANCEL       //updata cancel success

+}gsw_update_state_t;

+

+typedef enum

+{

+    GSW_UPDATE_NOERROR=0,          //升级成功

+    GSW_UPDATE_ARGUMENTERROR,      //升级程序启动参数错误

+    GSW_UPDATE_SDCARDNOEXIST,      //未挂载外置FLASH等存储设备

+    GSW_UPDATE_PACKAGENOEXIST,     //升级包不存在

+    GSW_UPDATE_UNZIPFAILED,        //解压升级包出错

+    GSW_UPDATE_PARTITIONFLUSHERROR,//写入分区出错

+    GSW_UPDATE_XMLPARSEERROR,      //解析 fotaconfig.xml 文件出错

+    GSW_UPDATE_DIFFUBIUNATTACH,    //差分升级 UBI 分区挂载异常

+    GSW_UPDATE_NOSPACELEFT,        //空间不足

+    GSW_UPDATE_FILECHECKFAILED,    //MD5 值校验失败

+    GSW_UPDATE_BSPATCHFAILED,      //bspatch 合成新文件夹失败

+    GSW_UPDATE_NOFINDPARTITION,    //待升级分区不存在

+    GSW_UPDATE_UBIVOLUMEERROR,      //差分升级,待升级 UBI 卷不存在

+    GSW_UPDATE_NOFOTACONFIGFILE,   //升级包中无 fotaconfig.xml 文件

+    GSW_UPDATE_GETOLDSOFTWAREFAILED,//读取原始版本固件失败

+    GSW_UPDATE_FILENOTEXIST,       //文件不存在

+    GSW_UPDATE_UPGRADECANCELED,    //升级或分区同步被取消

+    GSW_UPDATE_NONEEDCANCEL,       //取消升级失败

+    GSW_UPDATE_NOGOING             //升级或分区同步正在进行,不可重复操作

+}gsw_update_exit_code_t;

+

+

+typedef struct

+{

+    unsigned int percentage; //update progress0-100

+    gsw_update_state_t update_state;

+    gsw_update_exit_code_t exit_code; 

+}gsw_update_info_s;

+

+typedef struct

+{

+    gsw_update_state_t update_state;

+    uint8_t is_damaged; //TURE: damaged FALSE:no damaged

+    uint8_t damaged_partname[16];

+}gsw_system_status_s;

+

+

+/**

+* @brief Start install modem software

+* @param  [in] void* file_path

+* @param  [out] NULL

+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+*/

+int32_t gsw_update_modem_start_autobackup(char* file_path);

+

+/**

+* @brief check the modem update condition

+* @param  [in] NULL

+* @param  [out] NULL

+* @retval TRUE/FALSE

+*/

+bool gsw_update_modem_check_condition(void);

+

+/**

+* @brief get update modem result

+* @param  [in] NULL

+* @param  [out] NULL

+* @retval E_GSW_OTA_RET

+*/

+E_GSW_OTA_RET gsw_update_modem_result_query(void);

+

+/**

+* @brief Start install modem software

+* @param  [in] void* file_path

+* @param  [out] NULL

+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+*/

+int32_t gsw_update_modem_start_nobackup(char* file_path);   

+

+/**

+* @brief get current system

+* @param  [in] NULL

+* @param  [out] NULL

+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+*/

+E_GSW_OTA_SYSTEM gsw_update_modem_get_system(void);

+

+/**

+* @brief cancel update

+* @param  [in] NULL

+* @param  [out] NULL

+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+*/

+int32_t gsw_update_modem_cancel(void);

+

+/**

+* @brief get modem update info

+* @param  [in] NULL

+* @param  [out] gsw_update_info_s 

+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+*/

+int32_t gsw_update_modem_get_info(gsw_update_info_s *update_info);

+

+/**

+* @brief get modem system status

+* @param  [in] NULL

+* @param  [out] gsw_system_status_s 

+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+*/

+int32_t gsw_update_modem_get_status(gsw_system_status_s *system_status);

+

+/**

+* @brief A/B system sync

+* @param  [in] NULL

+* @param  [out] NULL 

+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+*/

+int32_t gsw_update_modem_sync(void);

+

+/**

+* @brief A/B system switch

+* @param  [in] NULL

+* @param  [out] NULL 

+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+*/

+int32_t gsw_update_modem_switch(void);

+

+#endif

+

+

+

+

+

diff --git a/mbtk/include/gsw/gsw_pm.h b/mbtk/include/gsw/gsw_pm.h
new file mode 100755
index 0000000..9ff11cc
--- /dev/null
+++ b/mbtk/include/gsw/gsw_pm.h
@@ -0,0 +1,54 @@
+/**

+* @brief Modem wakeup callback

+* @param [in]int32_t wakeup_in

+* @retval void

+*/

+

+/* 0 -- Falling, Means wakeupin falling to wakeup the module, or wakeupout falling to wakeup mcu. */

+/* 1 -- Rising, Means  wakeupin rising to wakeup the module,  or wakeupout rising to wakeup  mcu. */

+typedef void (*GSW_PM_WAKEUPCALLBACK)(int32_t wakeup_in);

+

+

+/**

+* @brief Enable autosleep

+* @param void

+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+*/

+int32_t gsw_autosleep_enable(void);

+

+/**

+* @brief Disable autosleep

+* @param void

+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+*/

+int32_t gsw_autosleep_disenable(void);

+

+/**

+* @brief Init power manager module

+* @param [in]GSW_PM_WAKEUPCALLBACKHandler wakeup_callback

+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+*/

+int32_t gsw_pm_sdk_init(GSW_PM_WAKEUPCALLBACK wakeup_callback);

+

+

+

+/**

+* @brief Release wake lock, enter sleep

+* @param [in]int32_t wakeup_in

+* @retval int

+*/

+int32_t gsw_pm_enter_sleep(const char *gsw_wakelock_name);

+

+/**

+* @brief Creat wakeup lock

+* @param [in]int32_t wakeup_in

+* @retval int

+*/

+int32_t gsw_pm_exit_sleep(const char *gsw_wakelock_name);

+

+/**

+* @brief Module log disk drop, used when restarting or hibernating

+* @param [in]void

+* @retval void

+*/

+void gsw_modem_log_sync(void);
\ No newline at end of file
diff --git a/mbtk/include/gsw/gsw_sim.h b/mbtk/include/gsw/gsw_sim.h
new file mode 100755
index 0000000..5e19211
--- /dev/null
+++ b/mbtk/include/gsw/gsw_sim.h
@@ -0,0 +1,111 @@
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <stdbool.h>
+#include <stdio.h>
+//gsw include
+#define GSW_HAL_SUCCESS 0
+#define GSW_HAL_FAIL -1
+#define GSW_HAL_MEM_INVAILD -2
+#define GSW_SIM_ICCID_LENGTH 20+1 
+#define GSW_SIM_IMSI_LENGTH 20+1 
+#define GSW_SIM_MSISDN_LENGTH 20+1
+#define GSW_SIM_IMEI_LENGTH 20+1
+
+typedef enum sim_status
+{
+    SIM_STATUS_ABSENT = 0,   /**< sim absent*/
+    SIM_STATUS_PRESENT = 1,   /**< sim present mtk as ready*/
+    SIM_STATUS_ERROR = 2,   /**< sim error*/
+    SIM_STATUS_READY = 3,   /**< sim state ready mtk no this value*/
+    SIM_STATUS_PIN = 4,     /**< pinlock status*/
+} sim_status_e_type;
+
+
+
+/**
+ * @brief sim sdk init
+ * @param  [in] token usr id define by who use
+ * @retval 0: success
+ * @retval other: fail
+ */
+int gsw_sim_sdk_init(int32_t token);
+
+
+/**
+ * @brief sim sdk deinit
+ * @param 
+ * @retval 0: success
+ * @retval other: fail
+ */
+int gsw_sim_sdk_deinit(void);
+
+/**
+ * @brief get sim state
+ * @param  [out] sim_state sim status as sim_status_e_type
+ * @retval 0: success
+ * @retval other: fail
+ */
+int gsw_get_sim_status(int32_t *sim_state);
+
+/**
+ * @brief get iccid function
+ * @param  [in] len iccid length,max is 20
+ * @param  [out] iccid return iccid from this func
+ * @retval 0: success
+ * @retval other: fail
+ */
+int gsw_get_sim_iccid(int32_t len, int8_t *iccid);
+
+/**
+ * @brief get imsi function
+ * @param  [in] len imsi length,max is 20
+ * @param  [out] iccid return imsi from this func
+ * @retval 0: success
+ * @retval other: fail
+ */
+int gsw_get_sim_imsi(int32_t len, int8_t *imsi);
+
+/**
+ * @brief get sim msisdn function
+ * @param  [in] len msisdn length,max is 20
+ * @param  [out] msisdn msisdn length,max is 20
+ * @retval 0: success
+ * @retval other: fail
+ */
+int gsw_get_sim_msisdn(int32_t len, int8_t *msisdn);
+
+/**
+ * @brief get imei function
+ * @param  [in] len imei length,max is 20
+ * @param  [out] imei return imei from this func
+ * @retval 0: success
+ * @retval other: fail
+ */
+int gsw_get_imei(int32_t len, int8_t *imei);
+
+/**
+ * @brief set sim power down
+ * @param  
+ * @retval 0: success
+ * @retval other: fail
+ */
+int gsw_set_sim_power_down(void);
+
+/**
+ * @brief set sim power up
+ * @param 
+ * @retval 0: success
+ * @retval other: fail
+ */
+int gsw_set_sim_power_up(void);
+
+/**
+ * @brief reset modem stack only, notice: after use this method, all ril sdk
+ * need restart by app, means network, sim, sms, data need deinit then init!
+ * @param  
+ * @retval 0: success
+ * @retval other: fail
+ */
+int gsw_reset_modem(void);
+
diff --git a/mbtk/include/gsw/gsw_sms.h b/mbtk/include/gsw/gsw_sms.h
new file mode 100755
index 0000000..916110c
--- /dev/null
+++ b/mbtk/include/gsw/gsw_sms.h
@@ -0,0 +1,112 @@
+#include <stdlib.h>

+#include <stdint.h>

+#include <string.h>

+#include <stdbool.h>

+

+#define GSW_HAL_SMS_ADDRESS_LEN 16

+#define GSW_HAL_SMS_RECV_CONT_MAX 1024

+#define GSW_HAL_SMS_CONTENT_LEN 1024

+#define MIN_MSM_PARAM_NUM 4

+#define MIN_IMS_MSM_PARAM_NUM 6

+#define MIN_WRITMSM_PARAM_NUM 5

+#define MSG_MAX_LEN 1024

+#define TELEPHONNUM_LEN 64

+#define STORAGSMS_MAX_SIZE 128

+#define SMSC_MAX_LEN 22

+#define SMS_NUM_MAX 255

+#define MSM_NUMBER_MAX 1024+1

+#define RES_NUM_MIN 128

+

+// gsw include

+

+#define GSW_HAL_SUCCESS 0

+#define GSW_HAL_FAIL -1

+#define GSW_HAL_MEM_INVAILD -2

+

+typedef enum gsw_hal_sms_state

+{

+    GSW_SMS_FULL_FLG,               /**< sms full flag*/

+    GSW_SMS_RECEIVED_FLG,           /**<recv new sms flag*/

+} gsw_hal_sms_state_e;

+

+typedef enum gsw_hal_sms_format

+{

+    SMS_FORMAT_GSM_7BIT        = 0,   /**< 7bit econde*/

+    SMS_FORMAT_BINARY_DATA     = 1,   /**< 8bit binary encode*/

+    SMS_FORMAT_UCS2            = 2,   /**< ucs2 encode*/

+} gsw_hal_sms_format_e;

+

+typedef struct gsw_hal_sms_date

+{

+    uint8_t   year[5];            /**< year of date*/

+    uint8_t   month[3];           /**< month of date*/

+    uint8_t   day[3];             /**< day of date*/

+    uint8_t   hour[3];            /**< hour of  time*/

+    uint8_t   minutes[3];         /**< minute of  time*/

+    uint8_t   seconds[3];         /**< second of time*/

+    uint8_t   timezone[4];        /**< timezone*/

+} gsw_hal_sms_date_s;

+

+typedef struct gsw_hal_sms_msg_type

+{

+    int8_t                  src_num[GSW_HAL_SMS_ADDRESS_LEN+1];      /**< sms phone num send msg*/

+    int8_t                  dest_num[GSW_HAL_SMS_ADDRESS_LEN + 1];   /**< sms phone num recv msg*/

+    gsw_hal_sms_format_e    content_encode;                      /**< sms content is 7bit or 8bit or Ucs2 encode*/

+    uint32_t                content_len;                         /**< sms content size*/

+    int8_t                  content[GSW_HAL_SMS_RECV_CONT_MAX + 1];  /**< sms content*/

+    gsw_hal_sms_date_s      date;                                /**< message time*/

+} gsw_hal_sms_msg_type_s;

+

+typedef void (* GSW_HAL_SMS_CALLBACK_FUN)(gsw_hal_sms_state_e state, gsw_hal_sms_msg_type_s *report_info);

+

+/**

+ * @brief SDK interface to call back sms messages

+ * @param  [in] handle_ptr 

+ * @retval 0: success

+ * @retval other: fail

+ */

+int gsw_sms_reg_callback(GSW_HAL_SMS_CALLBACK_FUN handle_ptr);

+

+/**

+ * @brief sms sdk init

+ * @param  [in] token 

+ * @retval 0: success

+ * @retval other: fail

+ */

+int gsw_sms_sdk_init(int32_t token);

+

+/**

+ * @brief sms sdk deinit

+ * @param  

+ * @retval 0: success

+ * @retval other: fail

+ */

+int gsw_sms_sdk_deinit(void);

+

+/**

+ * @brief send sms fuction *

+ * @param  [in] phone_num dest phone num send sms

+ * @param  [in] char_set encode format for sms 0 7bit 1 binary 2 usc2

+ * @param  [in] msg sms content

+ * @param  [in] msg_len send sms length,max is 1024

+ * @retval 0: success

+ * @retval other: fail

+ */

+int gsw_send_sms(int8_t *phone_num, int32_t char_set, int8_t *msg, int32_t msg_len);

+

+/**

+ * @brief get smsc fuction *

+ * @param  [in] len input buf len for smsc,max is 32

+ * @param  [out] smsc address for smsc get from this func *

+ * @retval 0: success

+ * @retval other: fail

+ */

+int gsw_get_smsc_address(int32_t len, int8_t *smsc);

+

+/**

+ * @brief set smsc fuction

+ * @param  [out] smsc string value for smsc,max length is 32 *

+ * @retval 0: success

+ * @retval other: fail

+ */

+int gsw_set_smsc_address(const int8_t *smsc);
\ No newline at end of file
diff --git a/mbtk/include/gsw/gsw_uart.h b/mbtk/include/gsw/gsw_uart.h
new file mode 100755
index 0000000..137b80f
--- /dev/null
+++ b/mbtk/include/gsw/gsw_uart.h
@@ -0,0 +1,75 @@
+#define GSW_HAL_SUCCESS 0

+#define GSW_HAL_FAIL -1	//表示失败(通用性)

+#define GSW_HAL_MEM_INVAILD -2 //表示入参地址为NULL

+

+

+typedef enum{

+  GSW_HAL_BAUDRATE_1200=1200,

+  GSW_HAL_BAUDRATE_1800=1800,

+  GSW_HAL_BAUDRATE_4800=4800,

+  GSW_HAL_BAUDRATE_9600=9600,

+  GSW_HAL_BAUDRATE_19200=19200,

+  GSW_HAL_BAUDRATE_38400=38400,

+  GSW_HAL_BAUDRATE_57600=57600,

+  GSW_HAL_BAUDRATE_115200=115200,

+  GSW_HAL_BAUDRATE_230400=230400,

+  GSW_HAL_BAUDRATE_460800=460800,

+  GSW_HAL_BAUDRATE_500000=500000,

+  GSW_HAL_BAUDRATE_576000=576000,

+  GSW_HAL_BAUDRATE_921600=921600

+}gsw_hal_uart_baudrate;

+

+

+/**

+* @brief uart open

+* @param [in]int8_t *port

+* @param [in]gsw_hal_uart_baudrate baudrate

+* @param [in]uint32_t bits

+* @param [in]int8_t parity

+* @param [in]uint32_t stop

+* @retval int GSW_HAL_FAIL:fail other:success 

+*/

+int32_t gsw_uart_open_ex(int8_t *port, gsw_hal_uart_baudrate baudrate, uint32_t bits, int8_t parity, uint32_t stop);

+

+/**

+* @brief uart flush

+* @param [in]int32_t fd

+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+*/

+int32_t gsw_uart_flush(int32_t fd);

+

+/**

+* @brief uart close

+* @param [in]int32_t fd

+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+*/

+int32_t gsw_uart_close(int32_t fd);

+

+/**

+* @brief uart write

+* @param [in]int32_t fd

+* @param [in]const uint8_t *buffer

+* @param [in]uint32_t len

+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+*/

+int32_t gsw_uart_write(int32_t fd, const uint8_t *buffer, uint32_t len);

+

+/**

+* @brief uart read

+* @param [in]int32_t fd

+* @param [out]uint8_t *buffer

+* @param [in]uint32_t len

+* @param [in]int32_t timout_ms

+* @retval GSW_HAL_FAIL:fail 0~len:success

+*/

+int32_t gsw_uart_read(int32_t fd, uint8_t *buffer, uint32_t len, int32_t timeout_ms);

+

+/**

+* @brief uart ioctl

+* @param [in]int32_t fd

+* @param [in]uint32_t cmd

+* @param [in]void * pvalue

+* @retval GSW_HAL_FAIL:fail 0~len:success

+*/

+int32_t gsw_uart_ioctl(int32_t fd, uint32_t cmd, void *pvalue);

+

diff --git a/mbtk/include/gsw/gsw_voice.h b/mbtk/include/gsw/gsw_voice.h
new file mode 100755
index 0000000..ef465dc
--- /dev/null
+++ b/mbtk/include/gsw/gsw_voice.h
@@ -0,0 +1,131 @@
+#include <stdlib.h>

+#include <stdint.h>

+#include <string.h>

+#include <stdbool.h>

+#include <stdio.h>

+

+// GSW includes

+#define GSW_HAL_SUCCESS 0

+#define GSW_HAL_FAIL -1

+#define GSW_HAL_MEM_INVAILD -2

+

+

+typedef int CallHandle;

+typedef enum {

+    GSW_VOICE_CALL_HOLDING = 0,

+    GSW_VOICE_CALL_DIALING,

+    GSW_VOICE_CALL_ALERTING,

+    GSW_VOICE_CALL_CONNECTED,

+    GSW_VOICE_CALL_INCOMING,

+    GSW_VOICE_CALL_WAITING,

+    GSW_VOICE_CALL_END,

+}VoiceCallState;

+

+typedef enum{

+    GSW_AUDIO_MODE_CODEC = 0,

+    GSW_AUDIO_MODE_RTP = 1,

+}AudioMode;

+

+typedef enum {

+    GSW_RTP_CLIENT = 0,

+    GSW_RTP_SERVER,

+}RTPMode;

+

+typedef void (*CallStateInd)(CallHandle, VoiceCallState);

+

+/**

+* @brief init voice sdk,and  register the status indicated callback function

+* @param  [in] CallStateInd ind: status indicated callback function

+* @param  [out] None

+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+*/

+int32_t gsw_voice_sdk_init(CallStateInd ind);

+

+

+/**

+* @brief set speaker_volume

+* @param  [in] int32_t volume:1(Min)-7(Max)

+* @param  [out] None

+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+*/

+int32_t gsw_voice_set_speaker_volume(int32_t volume);

+

+

+/**

+* @brief set audio mode

+* @param  [in] AudioMode audioMode

+* @param  [out] None

+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+*/

+int32_t gsw_voice_set_audio_mode(AudioMode audioMode);

+

+/**

+* @brief start a voice call

+* @param  [in] char *callNumber

+* @param  [out] CallHandle *handle

+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+*/

+int32_t gsw_voice_normal_voice_start(CallHandle *handle, const char *callNumber);

+

+/**

+* @brief answer a voice call

+* @param  [in] CallHandle handle

+* @param  [out] None

+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+*/

+int32_t gsw_voice_answer(CallHandle handle);

+

+/**

+* @brief hangup a voice call

+* @param  [in] CallHandle handle

+* @param  [out] None

+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+*/

+int32_t gsw_voice_hangup(CallHandle handle);

+

+

+/**

+* @brief set auto answer mode

+* @param  [in] int32_t mode:0-1,  0:NO(close auto answer),  1:YES(auto answer)

+* @param  [out] None

+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+*/

+int32_t gsw_voice_set_auto_answer_mode(int32_t mode);

+

+/**

+* @brief set rtp ip address of remote

+* @param  [in] char *ip :ip address

+* @param  [in] int32_t len: length

+* @param  [out] None

+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+*/

+int32_t gsw_voice_set_remote_rtp_ip(const char *ip, int32_t len);

+

+

+/**

+* @brief set rtp vlan Noneme

+* @param  [in] char *interfaceNoneme:vlan Noneme

+* @param  [out] None

+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+*/

+int32_t gsw_voice_set_rtp_vlan_info(const char *interfaceNoneme);

+

+

+/**

+* @brief set rtp mode and port

+* @param  [in] RTPMode rtpMode: rtp mode

+* @param  [in] int32_t port:rtp port

+* @param  [out] None

+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+*/

+int32_t gsw_voice_set_rtp_port(RTPMode rtpMode, int32_t port);

+

+/**

+* @brief set rtp mode and port

+* @param  [in] int32_t clockRate: clock rate

+* @param  [in] int32_t channel:channel

+* @param  [in] int32_t latency:latency

+* @param  [out] None

+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL

+*/

+int32_t gsw_voice_set_rtp_param(int32_t clockRate, int32_t channel, int32_t latency);

diff --git a/mbtk/include/lynq/lynq_gnss.h b/mbtk/include/lynq/lynq_gnss.h
index 893f6a8..a7b738a 100755
--- a/mbtk/include/lynq/lynq_gnss.h
+++ b/mbtk/include/lynq/lynq_gnss.h
@@ -116,5 +116,6 @@
 
 int qser_Gnss_injectEphemeris(uint32_t h_gnss);
 
+int qser_Gnss_PZ90_switch(uint32_t h_gnss);
 
 #endif /* _QSER_GNSS_H */
diff --git a/mbtk/include/mbtk_device_info.h b/mbtk/include/mbtk_device_info.h
index f03303a..079990b 100755
--- a/mbtk/include/mbtk_device_info.h
+++ b/mbtk/include/mbtk_device_info.h
@@ -12,6 +12,6 @@
 
 #define MBTK_DEVICES_MODEL "LYNQ_T108"
 
-#define MBTK_DEVICES_REVISION "T108v05.04b01_V2.00"
+#define MBTK_DEVICES_REVISION "T108v05.04b01_4G.001"
 
 #endif /* MBTK_DEVICES_INFO_H */
diff --git a/mbtk/include/ql_v2/ql_tee_asymm_utils.h b/mbtk/include/ql_v2/ql_tee_asymm_utils.h
new file mode 100755
index 0000000..94d9d53
--- /dev/null
+++ b/mbtk/include/ql_v2/ql_tee_asymm_utils.h
@@ -0,0 +1,13 @@
+#ifndef QL_TEE_ASYMM_UTILS_H
+#define QL_TEE_ASYMM_UTILS_H
+
+#include "ql_tee_service.h"
+
+ql_tee_error_t ql_rsa_genkey_args(uint64_t exponent, uint32_t bits, ql_km_key_args_t *args);
+
+ql_tee_error_t ql_ec_genkey_args(ql_km_ec_curve_t curve, ql_km_key_args_t *args);
+
+ql_tee_error_t ql_rsa_operation_args(ql_km_purpose_t purpose, ql_km_rsa_padding_t padding,
+                                     ql_km_digest_t digest, ql_km_operation_args_t *args);
+
+#endif /* QL_TEE_ASYMM_UTILS_H */
\ No newline at end of file
diff --git a/mbtk/include/ql_v2/ql_tee_service.h b/mbtk/include/ql_v2/ql_tee_service.h
new file mode 100755
index 0000000..7b724c1
--- /dev/null
+++ b/mbtk/include/ql_v2/ql_tee_service.h
@@ -0,0 +1,306 @@
+#ifndef QL_TEE_SERVICE_H
+#define QL_TEE_SERVICE_H
+
+#include <stdint.h>
+#include <stddef.h>
+#include <stdbool.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif // __cplusplus
+
+
+#define SINGLE_OBJ_MAX_SIZE (512 * 1024)
+#define OPERATION_BUF_MAX_SIZE 4096
+
+
+typedef enum {
+    QL_TEE_OK = 0,
+
+    QL_KM_ERROR_ROOT_OF_TRUST_ALREADY_SET = -1,
+    QL_KM_ERROR_UNSUPPORTED_PURPOSE = -2,
+    QL_KM_ERROR_INCOMPATIBLE_PURPOSE = -3,
+    QL_KM_ERROR_UNSUPPORTED_ALGORITHM = -4,
+    QL_KM_ERROR_INCOMPATIBLE_ALGORITHM = -5,
+    QL_KM_ERROR_UNSUPPORTED_KEY_SIZE = -6,
+    QL_KM_ERROR_UNSUPPORTED_BLOCK_MODE = -7,
+    QL_KM_ERROR_INCOMPATIBLE_BLOCK_MODE = -8,
+    QL_KM_ERROR_UNSUPPORTED_MAC_LENGTH = -9,
+    QL_KM_ERROR_UNSUPPORTED_PADDING_MODE = -10,
+    QL_KM_ERROR_INCOMPATIBLE_PADDING_MODE = -11,
+    QL_KM_ERROR_UNSUPPORTED_DIGEST = -12,
+    QL_KM_ERROR_INCOMPATIBLE_DIGEST = -13,
+    QL_KM_ERROR_INVALID_EXPIRATION_TIME = -14,
+    QL_KM_ERROR_INVALID_USER_ID = -15,
+    QL_KM_ERROR_INVALID_AUTHORIZATION_TIMEOUT = -16,
+    QL_KM_ERROR_UNSUPPORTED_KEY_FORMAT = -17,
+    QL_KM_ERROR_INCOMPATIBLE_KEY_FORMAT = -18,
+    QL_KM_ERROR_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM = -19,   /* For PKCS8 & PKCS12 */
+    QL_KM_ERROR_UNSUPPORTED_KEY_VERIFICATION_ALGORITHM = -20, /* For PKCS8 & PKCS12 */
+    QL_KM_ERROR_INVALID_INPUT_LENGTH = -21,
+    QL_KM_ERROR_KEY_EXPORT_OPTIONS_INVALID = -22,
+    QL_KM_ERROR_DELEGATION_NOT_ALLOWED = -23,
+    QL_KM_ERROR_KEY_NOT_YET_VALID = -24,
+    QL_KM_ERROR_KEY_EXPIRED = -25,
+    QL_KM_ERROR_KEY_USER_NOT_AUTHENTICATED = -26,
+    QL_KM_ERROR_OUTPUT_PARAMETER_NULL = -27,
+    QL_KM_ERROR_INVALID_OPERATION_HANDLE = -28,
+    QL_KM_ERROR_INSUFFICIENT_BUFFER_SPACE = -29,
+    QL_KM_ERROR_VERIFICATION_FAILED = -30,
+    QL_KM_ERROR_TOO_MANY_OPERATIONS = -31,
+    QL_KM_ERROR_UNEXPECTED_NULL_POINTER = -32,
+    QL_KM_ERROR_INVALID_KEY_BLOB = -33,
+    QL_KM_ERROR_IMPORTED_KEY_NOT_ENCRYPTED = -34,
+    QL_KM_ERROR_IMPORTED_KEY_DECRYPTION_FAILED = -35,
+    QL_KM_ERROR_IMPORTED_KEY_NOT_SIGNED = -36,
+    QL_KM_ERROR_IMPORTED_KEY_VERIFICATION_FAILED = -37,
+    QL_KM_ERROR_INVALID_ARGUMENT = -38,
+    QL_KM_ERROR_UNSUPPORTED_TAG = -39,
+    QL_KM_ERROR_INVALID_TAG = -40,
+    QL_KM_ERROR_MEMORY_ALLOCATION_FAILED = -41,
+    QL_KM_ERROR_IMPORT_PARAMETER_MISMATCH = -44,
+    QL_KM_ERROR_SECURE_HW_ACCESS_DENIED = -45,
+    QL_KM_ERROR_OPERATION_CANCELLED = -46,
+    QL_KM_ERROR_CONCURRENT_ACCESS_CONFLICT = -47,
+    QL_KM_ERROR_SECURE_HW_BUSY = -48,
+    QL_KM_ERROR_SECURE_HW_COMMUNICATION_FAILED = -49,
+    QL_KM_ERROR_UNSUPPORTED_EC_FIELD = -50,
+    QL_KM_ERROR_MISSING_NONCE = -51,
+    QL_KM_ERROR_INVALID_NONCE = -52,
+    QL_KM_ERROR_MISSING_MAC_LENGTH = -53,
+    QL_KM_ERROR_KEY_RATE_LIMIT_EXCEEDED = -54,
+    QL_KM_ERROR_CALLER_NONCE_PROHIBITED = -55,
+    QL_KM_ERROR_KEY_MAX_OPS_EXCEEDED = -56,
+    QL_KM_ERROR_INVALID_MAC_LENGTH = -57,
+    QL_KM_ERROR_MISSING_MIN_MAC_LENGTH = -58,
+    QL_KM_ERROR_UNSUPPORTED_MIN_MAC_LENGTH = -59,
+    QL_KM_ERROR_UNSUPPORTED_KDF = -60,
+    QL_KM_ERROR_UNSUPPORTED_EC_CURVE = -61,
+    QL_KM_ERROR_KEY_REQUIRES_UPGRADE = -62,
+    QL_KM_ERROR_ATTESTATION_CHALLENGE_MISSING = -63,
+    QL_KM_ERROR_KEYMASTER_NOT_CONFIGURED = -64,
+    QL_KM_ERROR_ATTESTATION_APPLICATION_ID_MISSING = -65,
+
+    QL_KM_ERROR_UNIMPLEMENTED = -100,
+    QL_KM_ERROR_VERSION_MISMATCH = -101,
+
+    QL_KM_ERROR_UNKNOWN_ERROR = -1000,
+
+    QL_SS_ERROR_GENERIC = -200,
+    QL_SS_ERROR_ACCESS_DENIED = -201,
+    QL_SS_ERROR_CANCEL = -202,
+    QL_SS_ERROR_ACCESS_CONFLICT = -203,
+    QL_SS_ERROR_EXCESS_DATA = -204,
+    QL_SS_ERROR_BAD_FORMAT = -205,
+    QL_SS_ERROR_BAD_PARAMETERS = -206,
+    QL_SS_ERROR_BAD_STATE = -207,
+    QL_SS_ERROR_ITEM_NOT_FOUND = -208,
+    QL_SS_ERROR_NOT_IMPLEMENTED = -209,
+    QL_SS_ERROR_NOT_SUPPORTED = -210,
+    QL_SS_ERROR_NO_DATA = -211,
+    QL_SS_ERROR_OUT_OF_MEMORY = -212,
+    QL_SS_ERROR_BUSY = -213,
+    QL_SS_ERROR_COMMUNICATION = -214,
+    QL_SS_ERROR_SECURITY = -215,
+    QL_SS_ERROR_SHORT_BUFFER = -216,
+    QL_SS_ERROR_EXTERNAL_CANCEL = -217,
+
+    QL_SS_ERROR_TARGET_DEAD = -2000,
+    QL_SS_ERROR_UNKNOWN_ERROR = -2001,
+} ql_tee_error_t;
+
+
+typedef enum {
+    QL_SS_SEEK_SET = 0,
+    QL_SS_SEEK_CUR = 1,
+    QL_SS_SEEK_END = 2
+} ql_ss_whence_t;
+
+
+
+typedef enum {
+    QL_KM_ALGO_RSA = 1,
+    QL_KM_ALGO_EC = 3,
+    QL_KM_ALGO_AES = 32,
+} ql_km_algo_t;
+
+typedef enum {
+    QL_KM_MODE_ECB = 1,
+    QL_KM_MODE_CBC = 2,
+    QL_KM_MODE_CTR = 3,
+    QL_KM_MODE_GCM = 32,
+} ql_km_aes_mode_t;
+
+
+typedef enum {
+    QL_KM_PAD_RSA_NONE = 1, 
+    QL_KM_PAD_RSA_OAEP = 2,
+    QL_KM_PAD_RSA_PSS = 3,
+    QL_KM_PAD_RSA_PKCS1_1_5_ENCRYPT = 4,
+    QL_KM_PAD_RSA_PKCS1_1_5_SIGN = 5,
+} ql_km_rsa_padding_t;
+
+
+typedef enum {
+    QL_KM_DIGEST_NONE = 0,
+    QL_KM_DIGEST_MD5 = 1, 
+    QL_KM_DIGEST_SHA1 = 2,
+    QL_KM_DIGEST_SHA_2_224 = 3,
+    QL_KM_DIGEST_SHA_2_256 = 4,
+    QL_KM_DIGEST_SHA_2_384 = 5,
+    QL_KM_DIGEST_SHA_2_512 = 6,
+} ql_km_digest_t;
+
+
+typedef enum {
+    QL_KM_EC_CURVE_P_224 = 0,
+    QL_KM_EC_CURVE_P_256 = 1,
+    QL_KM_EC_CURVE_P_384 = 2,
+    QL_KM_EC_CURVE_P_521 = 3,
+} ql_km_ec_curve_t;
+
+
+typedef enum {
+	QL_KM_PURPOSE_ENCRYPT = 0,    /* Usable with RSA, EC and AES keys. */
+	QL_KM_PURPOSE_DECRYPT = 1,    /* Usable with RSA, EC and AES keys. */
+	QL_KM_PURPOSE_SIGN = 2,       /* Usable with RSA, EC keys. */
+	QL_KM_PURPOSE_VERIFY = 3,     /* Usable with RSA, EC keys. */
+} ql_km_purpose_t;
+
+
+typedef struct {
+    uint8_t *key_blob;
+    uint32_t key_blob_size;
+} ql_km_key_t;
+
+
+typedef struct {
+    ql_km_algo_t algo;
+    union {
+        struct {
+            ql_km_aes_mode_t mode;
+            uint32_t bits;
+            uint32_t min_mac_len;
+        } aes_args;
+        struct {
+            uint64_t exponent;
+            uint32_t bits;
+        } rsa_args;
+        struct {
+            ql_km_ec_curve_t curve;
+        } ec_args;
+    };
+} ql_km_key_args_t;
+
+
+typedef struct {
+    uint8_t *data;
+    uint32_t data_size;
+} ql_km_blob_t;
+
+
+typedef struct {
+    ql_km_algo_t algo;
+    ql_km_purpose_t purpose;
+    uint64_t handle;
+} ql_km_operation_handle_t;
+
+
+typedef struct {
+    ql_km_algo_t algo;
+    ql_km_purpose_t purpose;
+    union {
+        struct {
+            ql_km_aes_mode_t mode;
+            ql_km_blob_t iv;
+        } aes_args;
+        struct {
+            ql_km_rsa_padding_t padding;
+            ql_km_digest_t digest;
+        } rsa_args;
+    };
+} ql_km_operation_args_t;
+
+
+/*
+ * Secure Storage APIs
+ */
+ql_tee_error_t ql_ss_initialize();
+
+void ql_ss_deinitialize();
+
+ql_tee_error_t ql_ss_open(const void *id, uint32_t id_size, uint32_t *object);
+
+ql_tee_error_t ql_ss_create(const void *id, uint32_t id_size,
+                            void *data, uint32_t data_size,
+                            uint32_t *object, bool overwrite);
+
+ql_tee_error_t ql_ss_close(uint32_t object);
+
+ql_tee_error_t ql_ss_read(uint32_t object, void *data, uint32_t data_size, uint32_t *count);
+
+ql_tee_error_t ql_ss_write(uint32_t object, void *data, uint32_t data_size);
+
+ql_tee_error_t ql_ss_seek(uint32_t object, int32_t offset, ql_ss_whence_t whence);
+
+ql_tee_error_t ql_ss_unlink(uint32_t object);
+
+ql_tee_error_t ql_ss_trunc(uint32_t object, uint32_t len);
+
+ql_tee_error_t ql_ss_rename(uint32_t object, const void *id, uint32_t id_size);
+
+ql_tee_error_t ql_ss_get_info(uint32_t object, uint32_t *obj_size, uint32_t *cur_pos);
+
+
+/*
+ * Key Master APIs
+ */
+
+ql_tee_error_t ql_km_initialize();
+
+void ql_km_deinitialize();
+
+ql_tee_error_t ql_km_gen_key(const ql_km_key_args_t *key_args, ql_km_key_t *key);
+
+ql_tee_error_t ql_km_import_key(const ql_km_key_args_t *key_args, const ql_km_blob_t *rawkey, ql_km_key_t *key);
+
+ql_tee_error_t ql_km_destroy_key(ql_km_key_t *key);
+
+ql_tee_error_t ql_km_destroy_blob(ql_km_blob_t *blob);
+
+ql_tee_error_t ql_km_operation_begin(const ql_km_key_t *key, 
+                                     ql_km_operation_args_t *op_args,
+                                     ql_km_operation_handle_t *op_handle);
+
+
+ql_tee_error_t ql_km_operation_update(ql_km_operation_handle_t *op_handle, 
+                                      uint8_t *input, uint32_t input_size,
+                                      ql_km_blob_t *output, uint32_t *consumed);
+
+/*
+ * ql_tee_error_t ql_km_operation_finish(ql_km_operation_handle_t *op_handle, 
+ *                                       uint8_t *input, uint32_t input_size, 
+ *                                       ql_km_blob_t *output);
+ * 
+ * ql_tee_error_t ql_km_operation_finish(ql_km_operation_handle_t *op_handle, 
+ *                                       uint8_t *input, uint32_t input_size, 
+ *                                       ql_km_blob_t *output, uint8_t *signature, uint32_t sig_size);
+ * 
+ */
+ql_tee_error_t ql_km_operation_finish(ql_km_operation_handle_t *op_handle, 
+                                      uint8_t *input, uint32_t input_size, 
+                                      ql_km_blob_t *output, ...);
+
+
+ql_tee_error_t ql_km_export_key(ql_km_key_t *keypair, ql_km_blob_t *pubkey);
+
+
+ql_tee_error_t ql_km_get_key_algo(ql_km_key_t *keyblob, ql_km_algo_t *algo);
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* __cplusplus */
+
+#endif /* QL_TEE_SERVICE_H */
\ No newline at end of file
diff --git a/mbtk/include/ql_v2/ql_tee_symm_utils.h b/mbtk/include/ql_v2/ql_tee_symm_utils.h
new file mode 100755
index 0000000..741024d
--- /dev/null
+++ b/mbtk/include/ql_v2/ql_tee_symm_utils.h
@@ -0,0 +1,12 @@
+#ifndef QL_TEE_SYMM_UTILS_H
+#define QL_TEE_SYMM_UTILS_H
+
+#include "ql_tee_service.h"
+
+ql_tee_error_t ql_aes_genkey_args(ql_km_aes_mode_t mode, uint32_t bits, 
+                                  ql_km_key_args_t *args, ...);
+
+ql_tee_error_t ql_aes_operation_args(ql_km_purpose_t purpose, ql_km_aes_mode_t mode,
+                                     ql_km_blob_t *iv, ql_km_operation_args_t *args);
+
+#endif /* QL_TEE_SYMM_UTILS_H */
\ No newline at end of file