diff --git a/src/support/bootctrl/Makefile.am b/src/support/bootctrl/Makefile.am
new file mode 100644
index 0000000..900a7f8
--- /dev/null
+++ b/src/support/bootctrl/Makefile.am
@@ -0,0 +1,3 @@
+SUBDIRS = \
+  include \
+  mediatek/bootctrl
\ No newline at end of file
diff --git a/src/support/bootctrl/configure.ac b/src/support/bootctrl/configure.ac
new file mode 100644
index 0000000..ddac88c
--- /dev/null
+++ b/src/support/bootctrl/configure.ac
@@ -0,0 +1,11 @@
+AC_INIT([bootctrl], [1.0])
+AM_INIT_AUTOMAKE([foreign subdir-objects])
+AC_PROG_CXX
+AM_PROG_AS
+LT_INIT
+AC_CONFIG_FILES([
+  Makefile
+  include/Makefile
+  mediatek/bootctrl/Makefile
+])
+AC_OUTPUT
diff --git a/src/support/bootctrl/include/Makefile.am b/src/support/bootctrl/include/Makefile.am
new file mode 100644
index 0000000..41115f0
--- /dev/null
+++ b/src/support/bootctrl/include/Makefile.am
@@ -0,0 +1,3 @@
+nobase_include_HEADERS = \
+	hardware/boot_control.h \
+	hardware/hardware.h
diff --git a/src/support/bootctrl/mediatek/bootctrl/Makefile.am b/src/support/bootctrl/mediatek/bootctrl/Makefile.am
new file mode 100644
index 0000000..676c581
--- /dev/null
+++ b/src/support/bootctrl/mediatek/bootctrl/Makefile.am
@@ -0,0 +1,12 @@
+lib_LIBRARIES = libbootctrl.a
+
+libbootctrl_a_SOURCES = \
+	bootctrl.cpp \
+	avb/libavb/avb_util.c \
+	avb/libavb/avb_crc32.c
+
+libbootctrl_a_CFLAGS = -Wall \
+		       -Werror
+
+libbootctrl_a_CPPFLAGS = \
+	-I$(top_srcdir)/include
diff --git a/src/support/bootctrl/mediatek/bootctrl/bootctrl.cpp b/src/support/bootctrl/mediatek/bootctrl/bootctrl.cpp
new file mode 100644
index 0000000..8f0e948
--- /dev/null
+++ b/src/support/bootctrl/mediatek/bootctrl/bootctrl.cpp
@@ -0,0 +1,530 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein is
+ * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
+ * the prior written permission of MediaTek inc. and/or its licensors, any
+ * reproduction, modification, use or disclosure of MediaTek Software, and
+ * information contained herein, in whole or in part, shall be strictly
+ * prohibited.
+ *
+ * SPDX-License-Identifier: MediaTekProprietary
+ * MediaTek Inc. (C) 2016. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ * 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 RECEIVER AGREES
+ * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+ * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+ * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
+ * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+ * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'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 RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek
+ * Software") have been modified by MediaTek Inc. All revisions are subject to
+ * any receiver's applicable license agreements with MediaTek Inc.
+ */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <hardware/hardware.h>
+#include <hardware/boot_control.h>
+//#include <android-base/logging.h>
+//#include <cutils/properties.h>
+#define LOG_TAG "bootctrlHAL"
+//#include <log/log.h>
+//#include <utils/Log.h>
+
+#include "bootctrl.h"
+#if !defined(ARCH_X86)
+#include "sd_misc.h"
+#endif
+//#include <fstab/fstab.h>
+#include "avb/libavb/avb_util.h"
+
+#if MTK_BOOTDEV_TYPE == BOOTDEV_TYPE_NAND
+extern "C"{
+    #include "mtk_device_wrap.h"
+}
+#endif
+
+#define FSTAB_SUPPORT 0
+// Debug for update_engine_sideload
+#define ALOGE printf
+#define ALOGI printf
+static struct fstab* fstab = NULL;
+static char *blk_dev_path = "/dev/disk/by-partlabel/misc";
+#if FSTAB_SUPPORT
+static void free_fstab(void)
+{
+    fs_mgr_free_fstab(fstab);
+}
+
+
+static char *get_device_path(const char *mount_point)
+{
+    struct fstab_rec *rec = NULL;
+    char *source = NULL;
+
+    rec = fs_mgr_get_entry_for_mount_point(fstab, mount_point);
+    if (!rec) {
+        ALOGE("%s failed to get entry for %s \n", __func__ , mount_point);
+        return NULL;
+    }
+
+    source = strdup(rec->blk_device);
+    return source;
+}
+#endif
+static int bootctrl_read_metadata(AvbABData *bctrl)
+{
+    int fd, err;
+    ssize_t sz, size;
+    char *buf = (char *)bctrl;
+
+#if MTK_BOOTDEV_TYPE == BOOTDEV_TYPE_NAND
+    fd = mtk_device_wrap_open(blk_dev_path, O_RDONLY);
+#else
+    fd = open(blk_dev_path, O_RDONLY);
+#endif
+
+    if (fd < 0) {
+        err = errno;
+        ALOGE("%s Error opening metadata file: %s\n", __func__ ,strerror(errno));
+        return -err;
+    }
+#if MTK_BOOTDEV_TYPE == BOOTDEV_TYPE_NAND
+    if (mtk_device_wrap_seek(fd, OFFSETOF_SLOT_SUFFIX, SEEK_SET) < 0)
+#else
+    if (lseek(fd, OFFSETOF_SLOT_SUFFIX, SEEK_SET) < 0)
+#endif
+    {
+        err = errno;
+        ALOGE("%s Error seeking to metadata offset: %s\n", __func__ ,strerror(errno));
+#if MTK_BOOTDEV_TYPE == BOOTDEV_TYPE_NAND
+        mtk_device_wrap_close(fd);
+#else
+        close(fd);
+#endif
+        return -err;
+    }
+    size = sizeof(AvbABData);
+    do {
+#if MTK_BOOTDEV_TYPE == BOOTDEV_TYPE_NAND
+        sz = mtk_device_wrap_read(fd, buf, size);
+#else
+        sz = read(fd, buf, size);
+#endif
+        if (sz == 0) {
+            break;
+        } else if (sz < 0) {
+            if (errno == EINTR) {
+                continue;
+            }
+            err = -errno;
+            ALOGE("%s Error reading metadata file\n", __func__);
+#if MTK_BOOTDEV_TYPE == BOOTDEV_TYPE_NAND
+            mtk_device_wrap_close(fd);
+#else
+            close(fd);
+#endif
+            return err;
+        }
+        size -= sz;
+        buf += sz;
+    } while(size > 0);
+
+#if MTK_BOOTDEV_TYPE == BOOTDEV_TYPE_NAND
+    mtk_device_wrap_close(fd);
+#else
+    close(fd);
+#endif
+
+    /* Check bootctrl magic number */
+    if (memcmp(bctrl->magic , AVB_AB_MAGIC, AVB_AB_MAGIC_LEN) != 0) {
+        ALOGE("metadata is not initialised or corrupted %s.\n", bctrl->magic);
+        return -EIO;
+    }
+    return 0;
+}
+
+static int bootctrl_write_metadata(AvbABData *bctrl)
+{
+    int fd, err;
+    ssize_t sz, size;
+    char *buf = (char *)bctrl;
+#if MTK_BOOTDEV_TYPE == BOOTDEV_TYPE_NAND
+    char *tmpbuf = NULL;
+#endif
+
+    ALOGI("Enter in bootctrl: bootctrl_write_metadata \n");
+
+#if MTK_BOOTDEV_TYPE == BOOTDEV_TYPE_NAND
+    fd = mtk_device_wrap_open(blk_dev_path, O_RDWR);
+#else
+    fd = open(blk_dev_path, O_RDWR);
+#endif
+    if (fd < 0) {
+        err = errno;
+        ALOGE("%s Error opening metadata file: %s\n", __func__,strerror(errno));
+        return -err;
+    }
+
+#if MTK_BOOTDEV_TYPE == BOOTDEV_TYPE_NAND
+    if (mtk_device_wrap_seek(fd, OFFSETOF_SLOT_SUFFIX, SEEK_SET) < 0)
+#else
+    if (lseek(fd, OFFSETOF_SLOT_SUFFIX, SEEK_SET) < 0)
+#endif
+    {
+        err = errno;
+        ALOGE("%s Error seeking to metadata offset: %s\n", __func__ ,strerror(errno));
+#if MTK_BOOTDEV_TYPE == BOOTDEV_TYPE_NAND
+        mtk_device_wrap_close(fd);
+#else
+        close(fd);
+#endif
+        return -err;
+    }
+
+    bctrl->crc32 = avb_htobe32(
+             avb_crc32((const uint8_t*)bctrl, sizeof(AvbABData) - sizeof(uint32_t)));
+
+    size = sizeof(AvbABData);
+#if MTK_BOOTDEV_TYPE == BOOTDEV_TYPE_NAND
+    tmpbuf = (char *)malloc(sizeof(char)* OFFSETOF_SLOT_SUFFIX);
+    if (tmpbuf == NULL){
+        ALOGE("Error Writing metadata: malloc tmpbuf failed\n");
+        mtk_device_wrap_close(fd);
+        err = -errno;
+        return err;
+    }
+#endif
+
+    do {
+#if MTK_BOOTDEV_TYPE == BOOTDEV_TYPE_NAND
+        memset(tmpbuf, 0xFF, OFFSETOF_SLOT_SUFFIX);
+        if (mtk_device_wrap_seek(fd, 0, SEEK_SET) < 0){
+            err = errno;
+            ALOGE("%s Error seeking to metadata offset: %s\n", __func__ ,strerror(errno));
+            mtk_device_wrap_close(fd);
+            free(tmpbuf);
+            return -err;
+        }
+        if (mtk_device_wrap_write_force(fd, tmpbuf, OFFSETOF_SLOT_SUFFIX) < 0){
+            err = -errno;
+            ALOGE("%s Error Writing metadata file\n",__func__);
+            mtk_device_wrap_close(fd);
+            free(tmpbuf);
+            return err;
+        }
+        memcpy(tmpbuf, bctrl, size);
+        sz = mtk_device_wrap_write_force(fd, tmpbuf, sizeof(char)* OFFSETOF_SLOT_SUFFIX);
+#else
+        sz = write(fd, buf, size);
+#endif
+        if (sz == 0) {
+            break;
+        } else if (sz < 0) {
+            if (errno == EINTR) {
+                continue;
+            }
+            err = -errno;
+            ALOGE("%s Error Writing metadata file\n",__func__);
+#if MTK_BOOTDEV_TYPE == BOOTDEV_TYPE_NAND
+            mtk_device_wrap_close(fd);
+            free(tmpbuf);
+#else
+            close(fd);
+#endif
+            return err;
+        }
+        size -= sz;
+        buf += sz;
+    } while(size > 0);
+
+#if MTK_BOOTDEV_TYPE == BOOTDEV_TYPE_NAND
+    free(tmpbuf);
+    mtk_device_wrap_close(fd);
+#else
+    close(fd);
+#endif
+
+    return 0;
+}
+
+void bootctrl_init(boot_control_module_t  *module )
+{
+    ALOGI("boot control HAL init");
+
+    if(blk_dev_path == NULL) {
+#if FSTAB_SUPPORT
+        /* Initial read fstab */
+        fstab = fs_mgr_read_fstab_default();
+        if (!fstab) {
+            ALOGE("failed to read default fstab");
+        }
+        blk_dev_path = get_device_path("/misc");
+
+        /* Free fstab */
+        free_fstab();
+#endif
+    }
+
+    ALOGI("%s misc blk device path = %s\n", __func__ ,blk_dev_path);
+}
+
+unsigned bootctrl_get_number_slots(boot_control_module_t  *module )
+{
+    return 2;
+}
+
+int bootctrl_get_active_slot()
+{
+    int fd, err, slot;
+    ssize_t size = COMMAND_LINE_SIZE, sz;
+    char *buf, *ptr;
+    char *str;
+
+    fd = open(COMMAND_LINE_PATH, O_RDONLY);
+
+    if (fd < 0) {
+        err = -errno;
+        ALOGE("%s error reading commandline\n", __func__);
+        return err;
+    }
+    ptr = buf = (char *)malloc(size);
+    if (!buf) {
+        err = -errno;
+        ALOGE("%s Error allocating memory\n", __func__);
+        close(fd);
+        return err;
+    }
+    do {
+        sz = read(fd, buf, size);
+        if (sz == 0) {
+            break;
+        } else if (sz < 0) {
+            if (errno == EINTR) {
+                continue;
+            }
+            err = -errno;
+            ALOGE("%s Error reading file\n",__func__);
+            free(ptr);
+            close(fd);
+            return err;
+        }
+        size -= sz;
+        buf += sz;
+    } while(size > 0);
+    str = strstr((char *)ptr, SLOT_SUFFIX_STR);
+    if (!str) {
+        err = -EIO;
+        ALOGE("%s cannot find %s in kernel commandline.\n", __func__ , SLOT_SUFFIX_STR);
+        free(ptr);
+        close(fd);
+        return err;
+    }
+    str += strlen(SLOT_SUFFIX_STR) + 1;
+    //str += strlen(SLOT_SUFFIX_STR);
+    slot = (*str == 'a') ? 0 : 1;
+    free(ptr);
+    close(fd);
+    return slot;
+}
+
+
+uint32_t bootctrl_get_current_slot(boot_control_module_t  *module )
+{
+    ALOGI("boot control bootctrl_get_current_slot\n");
+
+    uint32_t slot = 0;
+
+    slot = bootctrl_get_active_slot();
+
+    ALOGI("bootctrl_get_current_slot %d\n", slot);
+    return slot;
+}
+
+int bootctrl_mark_boot_successful(boot_control_module_t  *module )
+{
+    ALOGI("boot control bootctrl_mark_boot_successful\n");
+    int ret;
+    int slot = 0;
+    AvbABData metadata;
+    AvbABSlotData *slotp;
+
+    ret = bootctrl_read_metadata(&metadata);
+    if (ret < 0) {
+        return ret;
+    }
+
+    slot = bootctrl_get_active_slot();
+    if (slot < 0) {
+        ALOGE("bootctrl_mark_boot_successful fail , slot = \n");
+        return slot;
+    }
+    slotp = &metadata.slots[slot];
+    slotp->successful_boot = 1;
+    slotp->tries_remaining = 0;
+
+    return bootctrl_write_metadata(&metadata);
+}
+
+int bootctrl_set_active_boot_slot(boot_control_module_t  *module ,
+    unsigned slot)
+{
+    ALOGI("boot control bootctrl_set_active_boot_slot , slot is %d\n", slot);
+    int ret, slot2;
+    AvbABData metadata;
+    AvbABSlotData *slotp;
+
+    if (slot >= 2) {
+        ALOGE("%s Wrong Slot value %u\n", __func__ , slot);
+        return -EINVAL;
+    }
+    ret = bootctrl_read_metadata(&metadata);
+    if (ret < 0) {
+        return ret;
+    }
+    /* Set highest priority and reset retry count */
+    slotp = &metadata.slots[slot];
+    slotp->successful_boot = 0;
+    slotp->priority = AVB_AB_MAX_PRIORITY;
+    slotp->tries_remaining = AVB_AB_MAX_TRIES_REMAINING;
+
+    /* Ensure other slot doesn't have as high a priority. */
+    slot2 = (slot == 0) ? 1 : 0;
+    slotp = &metadata.slots[slot2];
+    if(slotp->priority == AVB_AB_MAX_PRIORITY)
+        slotp->priority = AVB_AB_MAX_PRIORITY - 1;
+    ret = bootctrl_write_metadata(&metadata);
+    if (ret < 0) {
+        return ret;
+    }
+
+    return 0;
+}
+
+int bootctrl_set_slot_as_unbootable(boot_control_module_t  *module ,
+    unsigned slot)
+{
+    ALOGI("boot control bootctrl_set_slot_as_unbootable\n");
+    int ret;
+    AvbABData metadata;
+    AvbABSlotData *slotp;
+
+    if (slot >= 2) {
+        ALOGE("%s Wrong Slot value %u\n", __func__ , slot);
+        return -EINVAL;
+    }
+    ret = bootctrl_read_metadata(&metadata);
+    if (ret < 0) {
+        return ret;
+    }
+    /* Set zero to priority ,successful_boot and tries_remaining */
+    slotp = &metadata.slots[slot];
+    slotp->successful_boot = 0;
+    slotp->priority = 0;
+    slotp->tries_remaining = 0;
+    ret = bootctrl_write_metadata(&metadata);
+    if (ret < 0) {
+        return ret;
+    }
+
+    return 0;
+}
+
+int bootctrl_is_slot_bootable(boot_control_module_t  *module ,
+    unsigned slot)
+{
+    ALOGI("boot control bootctrl_is_slot_bootable\n");
+    int ret;
+    AvbABData metadata;
+
+    /* slot 0 is A , slot 1 is B */
+    if (slot >= 2) {
+        ALOGE("%s Wrong slot value %u\n", __func__,slot);
+        return -EINVAL;
+    }
+    ret = bootctrl_read_metadata(&metadata);
+    if (ret < 0) {
+        return ret;
+    }
+
+    return (metadata.slots[slot].priority != 0);
+}
+
+int bootctrl_get_bootup_status(boot_control_module_t  *module ,
+    unsigned slot)
+{
+    ALOGI("bootctrl bootctrl_get_bootup_status\n");
+    int ret = -1;
+    AvbABSlotData *slotp;
+    AvbABData metadata;
+
+    if(slot >= 2) {
+        ALOGE("%s Wrong slot value %u\n", __func__,slot);
+        return -1;
+    }
+
+    ret = bootctrl_read_metadata(&metadata);
+    if (ret < 0) {
+        return ret;
+    }
+
+    slotp = &metadata.slots[slot];
+
+    ALOGI("bootctrl bootctrl_get_bootup_status = %d\n", slotp->successful_boot);
+    return slotp->successful_boot;
+}
+
+const char *bootctrl_get_suffix(boot_control_module_t  *module ,
+    unsigned slot)
+{
+    ALOGI("boot control bootctrl_get_suffix %d\n",slot);
+    static const char* suffix[2] = {BOOTCTRL_SUFFIX_A, BOOTCTRL_SUFFIX_B};
+    if (slot >= 2)
+        return NULL;
+    return suffix[slot];
+}
+
+static struct hw_module_methods_t bootctrl_methods = {
+    .open  = NULL,
+};
+
+/* Boot Control Module implementation */
+boot_control_module_t HAL_MODULE_INFO_SYM = {
+    .common = {
+        .tag                 = HARDWARE_MODULE_TAG,
+        .module_api_version  = BOOT_CONTROL_MODULE_API_VERSION_0_1,
+        .hal_api_version     = HARDWARE_HAL_API_VERSION,
+        .id                  = BOOT_CONTROL_HARDWARE_MODULE_ID,
+        .name                = "boot_control HAL",
+        .author              = "Mediatek Corporation",
+        .methods             = &bootctrl_methods,
+    },
+    .init                 = bootctrl_init,
+    .getNumberSlots       = bootctrl_get_number_slots,
+    .getCurrentSlot       = bootctrl_get_current_slot,
+    .markBootSuccessful   =  bootctrl_mark_boot_successful,
+    .setActiveBootSlot    = bootctrl_set_active_boot_slot,
+    .setSlotAsUnbootable  = bootctrl_set_slot_as_unbootable,
+    .isSlotBootable       = bootctrl_is_slot_bootable,
+	  .getSuffix            = bootctrl_get_suffix,
+    .isSlotMarkedSuccessful = bootctrl_get_bootup_status,
+};
diff --git a/src/support/bootctrl/mediatek/bootctrl/bootctrl.h b/src/support/bootctrl/mediatek/bootctrl/bootctrl.h
new file mode 100644
index 0000000..b2a5c51
--- /dev/null
+++ b/src/support/bootctrl/mediatek/bootctrl/bootctrl.h
@@ -0,0 +1,131 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein is
+ * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
+ * the prior written permission of MediaTek inc. and/or its licensors, any
+ * reproduction, modification, use or disclosure of MediaTek Software, and
+ * information contained herein, in whole or in part, shall be strictly
+ * prohibited.
+ *
+ * SPDX-License-Identifier: MediaTekProprietary
+ * MediaTek Inc. (C) 2016. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ * 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 RECEIVER AGREES
+ * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+ * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+ * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
+ * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+ * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'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 RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek
+ * Software") have been modified by MediaTek Inc. All revisions are subject to
+ * any receiver's applicable license agreements with MediaTek Inc.
+ */
+
+
+/* THE HAL BOOTCTRL HEADER MUST BE IN SYNC WITH THE UBOOT BOOTCTRL HEADER */
+
+#ifndef _BOOTCTRL_H_
+#define _BOOTCTRL_H_
+
+#include <stdint.h>
+
+/* struct boot_ctrl occupies the slot_suffix field of
+ * struct bootloader_message */
+
+#define BOOTCTRL_SUFFIX_A           "_a"
+#define BOOTCTRL_SUFFIX_B           "_b"
+#define BOOT_CONTROL_VERSION    1
+
+#define BOOTCTRL_PROPERTY "ro.boot.slot_suffix"
+#define SLOT_SUFFIX_STR "androidboot.slot_suffix="
+#define COMMAND_LINE_PATH "/proc/cmdline"
+#define COMMAND_LINE_SIZE 2048
+
+/* AVB20 */
+/* Magic for the A/B struct when serialized. */
+#define AVB_AB_MAGIC "\0AB0"
+#define AVB_AB_MAGIC_LEN 4
+
+/* Versioning for the on-disk A/B metadata - keep in sync with avbtool. */
+#define AVB_AB_MAJOR_VERSION 1
+#define AVB_AB_MINOR_VERSION 0
+
+/* Size of AvbABData struct. */
+#define AVB_AB_DATA_SIZE 32
+
+/* Maximum values for slot data */
+#define AVB_AB_MAX_PRIORITY 15
+#define AVB_AB_MAX_TRIES_REMAINING 7
+
+#define BOOTDEV_TYPE_NAND 1
+#define BOOTDEV_TYPE_EMMC 2
+
+#define OFFSETOF_SLOT_SUFFIX 2048
+
+/* Struct used for recording per-slot metadata.
+ *
+ * When serialized, data is stored in network byte-order.
+ */
+typedef struct AvbABSlotData {
+  /* Slot priority. Valid values range from 0 to AVB_AB_MAX_PRIORITY,
+   * both inclusive with 1 being the lowest and AVB_AB_MAX_PRIORITY
+   * being the highest. The special value 0 is used to indicate the
+   * slot is unbootable.
+   */
+  uint8_t priority;
+
+  /* Number of times left attempting to boot this slot ranging from 0
+   * to AVB_AB_MAX_TRIES_REMAINING.
+   */
+  uint8_t tries_remaining;
+
+  /* Non-zero if this slot has booted successfully, 0 otherwise. */
+  uint8_t successful_boot;
+  /* For lk anti rollback*/
+  uint8_t efuse_write;
+  uint8_t bl_ver;
+  /* Reserved for future use. */
+  uint8_t reserved[3];
+
+} AvbABSlotData;
+
+/* Struct used for recording A/B metadata.
+ *
+ * When serialized, data is stored in network byte-order.
+ */
+typedef struct AvbABData {
+  /* Magic number used for identification - see AVB_AB_MAGIC. */
+  uint8_t magic[AVB_AB_MAGIC_LEN];
+
+  /* Version of on-disk struct - see AVB_AB_{MAJOR,MINOR}_VERSION. */
+  uint8_t version_major;
+  uint8_t version_minor;
+
+  /* Padding to ensure |slots| field start eight bytes in. */
+  uint8_t reserved1[2];
+
+  /* Per-slot metadata. */
+  AvbABSlotData slots[2];
+
+  /* Reserved for future use. */
+  uint8_t reserved2[12];
+
+  /* CRC32 of all 28 bytes preceding this field. */
+  uint32_t crc32;
+} AvbABData;
+#endif /* _BOOTCTRL_H_ */
diff --git a/src/support/bootctrl/mediatek/bootctrl/sd_misc.h b/src/support/bootctrl/mediatek/bootctrl/sd_misc.h
new file mode 100644
index 0000000..8dfc5d3
--- /dev/null
+++ b/src/support/bootctrl/mediatek/bootctrl/sd_misc.h
@@ -0,0 +1,239 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein is
+ * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
+ * the prior written permission of MediaTek inc. and/or its licensors, any
+ * reproduction, modification, use or disclosure of MediaTek Software, and
+ * information contained herein, in whole or in part, shall be strictly
+ * prohibited.
+ *
+ * SPDX-License-Identifier: MediaTekProprietary
+ * MediaTek Inc. (C) 2016. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ * 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 RECEIVER AGREES
+ * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+ * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+ * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
+ * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+ * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'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 RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek
+ * Software") have been modified by MediaTek Inc. All revisions are subject to
+ * any receiver's applicable license agreements with MediaTek Inc.
+ */
+
+#ifndef SD_MISC_H
+#define SD_MISC_H
+
+#ifdef __KERNEL__
+#include <linux/bitops.h>
+#include <linux/mmc/host.h>
+#include <linux/mmc/card.h>
+#include <linux/mmc/core.h>
+#include <linux/mmc/mmc.h>
+#include <linux/mmc/sd.h>
+#endif
+
+
+
+struct msdc_ioctl {
+    int opcode;
+    int host_num;
+    int iswrite;
+    int trans_type;
+    unsigned int total_size;
+    unsigned int address;
+    unsigned int *buffer;
+    int cmd_pu_driving;
+    int cmd_pd_driving;
+    int dat_pu_driving;
+    int dat_pd_driving;
+    int clk_pu_driving;
+    int clk_pd_driving;
+    int ds_pu_driving;
+    int ds_pd_driving;
+    int rst_pu_driving;
+    int rst_pd_driving;
+    int clock_freq;
+    int partition;
+    int hopping_bit;
+    int hopping_time;
+    int result;
+    int sd30_mode;
+    int sd30_max_current;
+    int sd30_drive;
+    int sd30_power_control;
+};
+
+/**************for msdc_ssc***********************/
+#define AUDPLL_CTL_REG12                   (0xF0007070)
+#define AUDPLL_CTL_REG01                   (0xF00071E0)
+#define AUDPLL_CTL_REG02                   (0xF100000C)
+
+#define AUDPLL_TSEL_MASK                   (1792)   /* MASK = 00000111 00000000 */
+#define AUDPLL_TSEL_RESULT1                (0)  /* REG = 00000000 00000000   30.5us */
+#define AUDPLL_TSEL_RESULT2                (256)    /* REG = 00000001 00000000   61.0us */
+#define AUDPLL_TSEL_RESULT3                (512)    /* REG = 00000010 00000000   122.1us */
+#define AUDPLL_TSEL_RESULT4                (768)    /* REG = 00000011 00000000   244.1us */
+#define AUDPLL_TSEL_RESULT5                (1024)   /* REG = 00000100 00000000   448.3us */
+
+#define AUDPLL_BSEL_MASK                   (7)  /* MASK = 00000000 00000111 */
+#define AUDPLL_BSEL_RESULT0                (0)  /* REG = 00000000 00000000   REG init val */
+#define AUDPLL_BSEL_RESULT1                (1)  /* REG = 00000000 00000001   2.26MHz */
+#define AUDPLL_BSEL_RESULT2                (2)  /* REG = 00000000 00000010   4.52MHz */
+#define AUDPLL_BSEL_RESULT3                (4)  /* REG = 00000000 00000100   9.04MHz */
+
+#define SET_HOP_BIT_NONE                   (0)
+#define SET_HOP_BIT1                       (1)
+#define SET_HOP_BIT2                       (2)
+#define SET_HOP_BIT3                       (3)
+
+#define SET_HOP_TIME0                      (0)
+#define SET_HOP_TIME1                      (1)
+#define SET_HOP_TIME2                      (2)
+#define SET_HOP_TIME3                      (3)
+#define SET_HOP_TIME4                      (4)
+
+
+/**************for msdc_ssc***********************/
+
+#define MSDC_DRIVING_SETTING                (0)
+#define MSDC_CLOCK_FREQUENCY                (1)
+#define MSDC_SINGLE_READ_WRITE              (2)
+#define MSDC_MULTIPLE_READ_WRITE            (3)
+#define MSDC_GET_CID                        (4)
+#define MSDC_GET_CSD                        (5)
+#define MSDC_GET_EXCSD                      (6)
+#define MSDC_ERASE_PARTITION                (7)
+#define MSDC_HOPPING_SETTING                (8)
+
+#define MSDC_REINIT_SDCARD            _IOW('r', 9, int)
+
+#define MSDC_SD30_MODE_SWITCH               (10)
+#define MSDC_GET_BOOTPART                   (11)
+#define MSDC_SET_BOOTPART                   (12)
+#define MSDC_GET_PARTSIZE                   (13)
+#define MSDC_ERASE_SELECTED_AREA            (0x20)
+#define MSDC_CARD_DUNM_FUNC                 (0xff)
+
+typedef enum {
+    USER_PARTITION = 0,
+    BOOT_PARTITION_1,
+    BOOT_PARTITION_2,
+    RPMB_PARTITION,
+    GP_PARTITION_1,
+    GP_PARTITION_2,
+    GP_PARTITION_3,
+    GP_PARTITION_4,
+} PARTITON_ACCESS_T;
+
+typedef enum {
+    SDHC_HIGHSPEED = 0, /* 0 Host supports HS mode */
+    UHS_SDR12,      /* 1 Host supports UHS SDR12 mode */
+    UHS_SDR25,      /* 2 Host supports UHS SDR25 mode */
+    UHS_SDR50,      /* 3 Host supports UHS SDR50 mode */
+    UHS_SDR104,     /* 4 Host supports UHS SDR104 mode */
+    UHS_DDR50,      /* 5 Host supports UHS DDR50 mode */
+} SD3_MODE;
+
+typedef enum {
+    DRIVER_TYPE_A = 0,  /* 0 Host supports Driver Type A */
+    DRIVER_TYPE_B,      /* 1 Host supports Driver Type B */
+    DRIVER_TYPE_C,      /* 2 Host supports Driver Type C */
+    DRIVER_TYPE_D,      /* 3 Host supports Driver Type D */
+} SD3_DRIVE;
+
+typedef enum {
+    MAX_CURRENT_200 = 0,    /* 0 Host max current limit is 200mA */
+    MAX_CURRENT_400,    /* 1 Host max current limit is 400mA */
+    MAX_CURRENT_600,    /* 2 Host max current limit is 600mA */
+    MAX_CURRENT_800,    /* 3 Host max current limit is 800mA */
+} SD3_MAX_CURRENT;
+
+typedef enum {
+    SDXC_NO_POWER_CONTROL = 0,  /* 0  Host not supports >150mA current at 3.3V /3.0V/1.8V */
+    SDXC_POWER_CONTROL, /* 1 Host supports >150mA current at 3.3V /3.0V/1.8V */
+} SD3_POWER_CONTROL;
+
+typedef enum {
+    DUMP_INTO_BOOT_CARD_IPANIC = 0,
+    DUMP_INTO_BOOT_CARD_KDUMP = 1,
+    DUMP_INTO_EXTERN_CARD = 2,
+} DUMP_STORAGE_TYPE;
+
+typedef enum {
+    EMMC_CARD_BOOT = 0,
+    SD_CARD_BOOT,
+    EMMC_CARD,
+    SD_CARD,
+} STORAGE_TPYE;
+
+#define EXT_CSD_BOOT_SIZE_MULT           (226) /* R */
+#define EXT_CSD_HC_ERASE_GRP_SIZE        (224) /* RO */
+#define EXT_CSD_HC_WP_GPR_SIZE           (221) /* RO */
+#define EXT_CSD_RPMB_SIZE_MULT           (168) /* R */
+#define EXT_CSD_GP1_SIZE_MULT            (143) /* R/W 3 bytes */
+#define EXT_CSD_GP2_SIZE_MULT            (146) /* R/W 3 bytes */
+#define EXT_CSD_GP3_SIZE_MULT            (149) /* R/W 3 bytes */
+#define EXT_CSD_GP4_SIZE_MULT            (152) /* R/W 3 bytes */
+#define EXT_CSD_PART_CFG                 (179) /* R/W/E & R/W/E_P */
+#define EXT_CSD_CACHE_FLUSH              (32)
+#define EXT_CSD_CACHE_CTRL               (33)
+#define CAPACITY_2G                      (2 * 1024 * 1024 * 1024ULL)
+
+typedef enum {
+    EMMC_BOOT_NO_EN = 0,
+    EMMC_BOOT1_EN,
+    EMMC_BOOT2_EN,
+    EMMC_BOOT_USER = 7,
+    EMMC_BOOT_END
+} BOOT_PARTITION_EN;
+
+#ifdef CONFIG_MTK_GPT_SCHEME_SUPPORT
+typedef enum {
+    EMMC_PART_UNKNOWN=0
+    ,EMMC_PART_BOOT1
+    ,EMMC_PART_BOOT2
+    ,EMMC_PART_RPMB
+    ,EMMC_PART_GP1
+    ,EMMC_PART_GP2
+    ,EMMC_PART_GP3
+    ,EMMC_PART_GP4
+    ,EMMC_PART_USER
+    ,EMMC_PART_END
+} Region;
+#endif
+
+typedef enum {
+    CARD_INFO = 0,
+    DISK_INFO,
+    EMMC_USER_CAPACITY,
+    EMMC_CAPACITY,
+    EMMC_RESERVE,
+} GET_STORAGE_INFO;
+
+struct storage_info {
+    struct mmc_card *card;
+    struct gendisk *disk;
+    unsigned long long emmc_user_capacity;
+    unsigned long long emmc_capacity;
+    int emmc_reserve;
+};
+
+int msdc_get_info(STORAGE_TPYE storage_type, GET_STORAGE_INFO info_type, struct storage_info *info);
+
+#endif              /* end of SD_MISC_H */
