[Feature]Upload Modem source code
Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/custom/driver/common/flash_opt.h b/mcu/custom/driver/common/flash_opt.h
new file mode 100644
index 0000000..f9253b9
--- /dev/null
+++ b/mcu/custom/driver/common/flash_opt.h
@@ -0,0 +1,603 @@
+/*****************************************************************************
+* 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) 2006
+*
+* 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:
+ * ---------
+ * flash_opt.h
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * NOR flash related options
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ * Memory Device database last modified on 2011/7/8
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#include "custom_MemoryDevice.h"
+#include "custom_FeatureConfig.h"
+#include "flash_opt_gen.h"
+#if defined(__SECURE_DATA_STORAGE__)
+#include "custom_secure_config.h"
+#endif
+
+/*
+ *******************************************************************************
+ PART 1:
+ FLASH CONFIG Options Definition here
+ *******************************************************************************
+*/
+
+/*
+ * RAM Disk is enabled and replaces any other flash-type (e.g., NOR or NAND) disk on smartphone moden-only load
+ * NOTE. __SMART_PHONE_PLATFORM__ should be defined before (e.g., defined in flash_opt_gen.h)
+ */
+#if !(defined(__FUE__) || defined(__UBL__) || defined(__EXT_BOOTLOADER__)) // RAM Disk module is not necessary in Bootloader and FUE environment
+ #if defined(__FS_RAMDISK__)
+ #if !defined(__SMART_PHONE_PLATFORM__)
+ #error "RAM Disk is allowed in SP modem-only project only! Please make sure __SMART_PHONE_PLATFORM__ is defined before!"
+ #endif
+ #define __RAMDISK__
+ #endif
+#endif
+
+/*
+ *******************************************************************************
+ PART 2:
+ FLASH FDM FEATURE CONFIG PARAMETERS translated from Manual custom_Memorydevice.h
+ *******************************************************************************
+*/
+ #ifndef NOR_PARAMETER_SYSTEM_DRIVE_RESERVED_BLOCK
+ #define NOR_SYSTEM_DRIVE_RESERVED_BLOCK (3)
+ #else
+ #define NOR_SYSTEM_DRIVE_RESERVED_BLOCK (NOR_PARAMETER_SYSTEM_DRIVE_RESERVED_BLOCK)
+ #endif
+
+
+
+/*
+ *******************************************************************************
+ PART 3:
+ FLASH GEOMETRY translated from MEMORY DEVICE DATABASE
+ *******************************************************************************
+*/
+
+
+/*
+ *******************************************************************************
+ PART 4:
+ FLASH FAT CONFIG translated from Manual custom_Memorydevice.h
+ *******************************************************************************
+*/
+#if defined(__NANDFDM_MULTI_INSTANCE__)
+#define NAND_DISK_NUM (NAND_BOOTING_NAND_FS_DISK_NUMBER)
+#else // defined(__NANDFDM_MULTI_INSTANCE__)
+#define NAND_DISK_NUM (0)
+#endif // defined(__NANDFDM_MULTI_INSTANCE__)
+#if defined(__RAMDISK__)
+ #include "ramdisk_gprot.h"
+ #ifndef RAM_FS_SIZE
+ #error "Error! Please assign RAM_FS_SIZE in ramdisk_gprot.h for RAM Disk!"
+ #else
+ #define RAM_FS_SIZE_INT (RAM_FS_SIZE)
+ #endif
+ #ifdef RAM_FS_FIRST_DRIVE_SECTORS
+ #define RAM_FS_FIRST_DRIVE_SECTORS_INT (RAM_FS_FIRST_DRIVE_SECTORS)
+ #else
+ #define RAM_FS_FIRST_DRIVE_SECTORS_INT (0)
+ #endif
+#endif // defined(__NANDFDM_MULTI_INSTANCE__)
+
+#if defined(__EMMC_BOOTING__)
+
+ #ifndef EMMC_BOOTING_GP1_PARTITION_SIZE
+ #error "custom\system\{project}\custom_MemoryDevice.h: Error! Please Manually Assign EMMC_BOOTING_GP1_PARTITION_SIZE in custom_Memorydevice.h for EMMC Booting!"
+ #else
+ #define EMMC_CODE_PARTITION_SIZE (EMMC_BOOTING_GP1_PARTITION_SIZE)
+ #endif /* !EMMC_BOOTING_GP1_PARTITION_SIZE */
+
+ #ifndef EMMC_BOOTING_UP_FS_BASE_ADDRESS
+ #error "custom\system\{project}\custom_MemoryDevice.h: Error! Please Manually Assign EMMC_BOOTING_UP_FS_BASE_ADDRESS in custom_Memorydevice.h for EMMC Booting!"
+ #else
+ #define EMMC_FS_BASE_ADDRESS (EMMC_BOOTING_UP_FS_BASE_ADDRESS)
+ #endif /* !EMMC_BOOTING_UP_FS_BASE_ADDRESS */
+
+ #ifndef EMMC_BOOTING_UP_FS_SIZE
+ #error "custom\system\{project}\custom_MemoryDevice.h: Error! Please Manually Assign EMMC_BOOTING_UP_FS_SIZE in custom_Memorydevice.h for EMMC Booting!"
+ #else
+ #define EMMC_FS_SIZE (EMMC_BOOTING_UP_FS_SIZE)
+ #endif /* !EMMC_BOOTING_UP_FS_SIZE */
+
+ #ifndef EMMC_BOOTING_UP_FS_SYSTEM_DRIVE_SIZE
+ #error "custom\system\{project}\custom_MemoryDevice.h: Error! Please Manually Assign EMMC_BOOTING_UP_FS_SYSTEM_DRIVE_SIZE in custom_Memorydevice.h for EMMC Booting!"
+ #else
+ #define EMMC_FS_SYSTEM_DRIVE_SIZE (EMMC_BOOTING_UP_FS_SYSTEM_DRIVE_SIZE)
+ #endif /* !EMMC_BOOTING_UP_FS_SYSTEM_DRIVE_SIZE */
+
+#elif defined(_NAND_FLASH_BOOTING_)
+
+
+ /*-----------------------------------------------------------------------------------------
+ * FS base address is automatically adjusted with update package storage size as
+ * NAND_BOOTING_NAND_FS_BASE_ADDRESS + FOTA_PACKAGE_STORAGE_SIZE (defined in custom_img_config.h)
+ *-----------------------------------------------------------------------------------------*/
+
+ #ifndef NAND_BOOTING_NAND_FS_BASE_ADDRESS
+ #error "custom\system\{project}\custom_MemoryDevice.h: Error! Please Manually Assign NAND_BOOTING_NAND_FS_BASE_ADDRESS in custom_Memorydevice.h for NAND-Flash Booting!"
+ #else
+ #define NAND_FLASH_BASE_ADDRESS (NAND_BOOTING_NAND_FS_BASE_ADDRESS + FOTA_DM_FS_OFFSET)
+ #endif /* !NAND_BOOTING_FLASH_BASE_ADDRESS */
+
+ /*-----------------------------------------------------------------------------------------
+ * FS size is automatically decreased by update package storage size as
+ * NAND_BOOTING_NAND_FS_SIZE - FOTA_PACKAGE_STORAGE_SIZE (defined in custom_img_config.h)
+ *-----------------------------------------------------------------------------------------*/
+
+ #ifndef NAND_BOOTING_NAND_FS_SIZE
+ #error "custom\system\{project}\custom_MemoryDevice.h: Error! Please Manually Assign NAND_BOOTING_NAND_FS_SIZE in custom_Memorydevice.h for NAND-Flash Booting!"
+ #else
+ #if defined(__SECURE_DATA_STORAGE__)
+ #define NAND_ALLOCATED_FAT_SPACE (NAND_BOOTING_NAND_FS_SIZE - FOTA_DM_FS_OFFSET - SDS_TOTAL_SIZE)
+ #else
+ #define NAND_ALLOCATED_FAT_SPACE (NAND_BOOTING_NAND_FS_SIZE - FOTA_DM_FS_OFFSET)
+ #endif
+ #endif /* !NAND_BOOTING_ALLOCATED_FAT_SPACE */
+
+ /*-----------------------------------------------------------------------------------------
+ * FS first drive size is automatically decreased by update package storage size as
+ * NAND_BOOTING_NAND_FS_FIRST_DRIVE_SECTORS - FOTA_PACKAGE_STORAGE_SIZE / 512 (defined in custom_img_config.h)
+ *-----------------------------------------------------------------------------------------*/
+
+ #ifndef NAND_BOOTING_NAND_FS_FIRST_DRIVE_SECTORS
+ #error "custom\system\{project}\custom_MemoryDevice.h: Error! Please Manually Assign NAND_BOOTING_NAND_FS_FIRST_DRIVE_SECTORS in custom_Memorydevice.h for NAND-Flash Booting!"
+ #else
+ #if defined(__NANDFDM_MULTI_INSTANCE__)
+ #define NAND_PARTITION_SECTORS (0)
+ #else /* __NANDFDM_MULTI_INSTANCE__ */
+ #define NAND_PARTITION_SECTORS (NAND_BOOTING_NAND_FS_FIRST_DRIVE_SECTORS - FOTA_DM_FS_SECTOR_OFFSET)
+ #endif /* __NANDFDM_MULTI_INSTANCE__ */
+ #endif /* !NAND_FAT_PARTITION_SECTORS */
+
+
+#elif defined(__FS_SYSDRV_ON_NAND__ )
+
+ #define NOR_FLASH_BASE_ADDRESS (NOR_FLASH_BASE_ADDRESS_DEFAULT)
+ #define NOR_ALLOCATED_FAT_SPACE (NOR_ALLOCATED_FAT_SPACE_DEFAULT)
+
+ /*-----------------------------------------------------------------------------------------
+ * FS base address is automatically adjusted with update package storage size as
+ * NOR_BOOTING_NAND_FS_BASE_ADDRESS + FOTA_PACKAGE_STORAGE_SIZE (defined in custom_img_config.h)
+ *-----------------------------------------------------------------------------------------*/
+
+ #ifndef NOR_BOOTING_NAND_FS_BASE_ADDRESS
+ #error "custom\system\{project}\custom_MemoryDevice.h: Error! Please Manually Assign NOR_BOOTING_NAND_FS_BASE_ADDRESS in custom_Memorydevice.h for System Drive on NAND!"
+ #else
+ #define NAND_FLASH_BASE_ADDRESS (NOR_BOOTING_NAND_FS_BASE_ADDRESS + FOTA_DM_FS_OFFSET)
+ #endif /* !NAND_BOOTING_FLASH_BASE_ADDRESS */
+
+ /*-----------------------------------------------------------------------------------------
+ * FS size is automatically decreased by update package storage size as
+ * NOR_BOOTING_NAND_FS_SIZE - FOTA_PACKAGE_STORAGE_SIZE (defined in custom_img_config.h)
+ *-----------------------------------------------------------------------------------------*/
+
+ #ifndef NOR_BOOTING_NAND_FS_SIZE
+ #error "custom\system\{project}\custom_MemoryDevice.h: Error! Please Manually Assign NOR_BOOTING_NAND_FS_SIZE in custom_Memorydevice.h for System Drive on NAND!"
+ #else
+ #define NAND_ALLOCATED_FAT_SPACE (NOR_BOOTING_NAND_FS_SIZE - FOTA_DM_FS_OFFSET)
+ #endif /* !NAND_BOOTING_ALLOCATED_FAT_SPACE */
+
+ /*-----------------------------------------------------------------------------------------
+ * FS first drive size is automatically decreased by update package storage size as
+ * NOR_BOOTING_NAND_FS_FIRST_DRIVE_SECTORS - FOTA_PACKAGE_STORAGE_SIZE / 512 (defined in custom_img_config.h)
+ *-----------------------------------------------------------------------------------------*/
+
+ #ifndef NOR_BOOTING_NAND_FS_FIRST_DRIVE_SECTORS
+ #error "custom\system\{project}\custom_MemoryDevice.h: Error! Please Manually Assign NOR_BOOTING_NAND_FS_FIRST_DRIVE_SECTORS in custom_Memorydevice.h for System Drive on NAND!"
+ #else
+ #if defined(__NANDFDM_MULTI_INSTANCE__)
+ #define NAND_PARTITION_SECTORS (0)
+ #else /* __NANDFDM_MULTI_INSTANCE__ */
+ #define NAND_PARTITION_SECTORS (NOR_BOOTING_NAND_FS_FIRST_DRIVE_SECTORS - FOTA_DM_FS_SECTOR_OFFSET)
+ #endif /* __NANDFDM_MULTI_INSTANCE__ */
+ #endif /* !NAND_FAT_PARTITION_SECTORS */
+
+#else /* Generic NOR-XIP Case */
+
+ #if defined(__UP_PKG_ON_NAND__) && defined(NAND_SUPPORT)
+
+ #ifndef NOR_BOOTING_NOR_FS_BASE_ADDRESS
+ #define NOR_FLASH_BASE_ADDRESS (NOR_FLASH_BASE_ADDRESS_DEFAULT)
+ #else
+ #define NOR_FLASH_BASE_ADDRESS (NOR_BOOTING_NOR_FS_BASE_ADDRESS)
+ #endif /* !NOR_FLASH_BASE_ADDRESS */
+
+ #ifndef NOR_BOOTING_NOR_FS_SIZE
+ #if defined(__SECURE_DATA_STORAGE__)
+ #define NOR_ALLOCATED_FAT_SPACE (NOR_ALLOCATED_FAT_SPACE_DEFAULT - SDS_TOTAL_SIZE)
+ #else
+ #define NOR_ALLOCATED_FAT_SPACE (NOR_ALLOCATED_FAT_SPACE_DEFAULT)
+ #endif
+ #else
+ #if defined(__SECURE_DATA_STORAGE__)
+ #define NOR_ALLOCATED_FAT_SPACE (NOR_BOOTING_NOR_FS_SIZE - SDS_TOTAL_SIZE)
+ #else
+ #define NOR_ALLOCATED_FAT_SPACE (NOR_BOOTING_NOR_FS_SIZE)
+ #endif
+ #endif /* !NOR_ALLOCATED_FAT_SPACE */
+
+ #ifndef NOR_BOOTING_NOR_FS_FIRST_DRIVE_SECTORS
+ #define NOR_PARTITION_SECTORS (0)
+ #else
+ #define NOR_PARTITION_SECTORS (NOR_BOOTING_NOR_FS_FIRST_DRIVE_SECTORS)
+ #endif /* !NOR_FAT_PARTITION_SECTORS */
+
+ /*-----------------------------------------------------------------------------------------
+ * FS base address is automatically adjusted with update package storage size as
+ * NOR_BOOTING_NAND_FS_BASE_ADDRESS + FOTA_PACKAGE_STORAGE_SIZE (defined in custom_img_config.h)
+ *-----------------------------------------------------------------------------------------*/
+
+ #ifndef NOR_BOOTING_NAND_FS_BASE_ADDRESS
+ #error "custom\system\{project}\custom_MemoryDevice.h: Error! Please Manually Assign NOR_BOOTING_NAND_FS_BASE_ADDRESS in custom_Memorydevice.h for FOTA Update Package on NAND!"
+ #else
+ #define NAND_FLASH_BASE_ADDRESS (NOR_BOOTING_NAND_FS_BASE_ADDRESS + FOTA_DM_FS_OFFSET)
+ #endif /* !NAND_BOOTING_FLASH_BASE_ADDRESS */
+
+ /*-----------------------------------------------------------------------------------------
+ * FS size is automatically decreased by update package storage size as
+ * NOR_BOOTING_NAND_FS_SIZE - FOTA_PACKAGE_STORAGE_SIZE (defined in custom_img_config.h)
+ *-----------------------------------------------------------------------------------------*/
+
+ #ifndef NOR_BOOTING_NAND_FS_SIZE
+ #error "custom\system\{project}\custom_MemoryDevice.h: Error! Please Manually Assign NOR_BOOTING_NAND_FS_SIZE in custom_Memorydevice.h for FOTA Update Package on NAND!"
+ #else
+ #define NAND_ALLOCATED_FAT_SPACE (NOR_BOOTING_NAND_FS_SIZE - FOTA_DM_FS_OFFSET)
+ #endif /* !NAND_BOOTING_ALLOCATED_FAT_SPACE */
+
+ /* All NAND flash space is treated as one public drive */
+ #define NAND_PARTITION_SECTORS (0)
+
+ #else /* !__UP_PKG_ON_NAND__ || !NAND_SUPPORT */
+
+ /*-----------------------------------------------------------------------------------------
+ * FS base address is automatically adjusted with update package storage size as
+ * NOR_BOOTING_NOR_FS_BASE_ADDRESS + FOTA_PACKAGE_STORAGE_SIZE (defined in custom_img_config.h)
+ *-----------------------------------------------------------------------------------------*/
+
+ #ifndef NOR_BOOTING_NOR_FS_BASE_ADDRESS
+ #define NOR_FLASH_BASE_ADDRESS (NOR_FLASH_BASE_ADDRESS_DEFAULT + FOTA_DM_FS_OFFSET)
+ #else
+ #define NOR_FLASH_BASE_ADDRESS (NOR_BOOTING_NOR_FS_BASE_ADDRESS + FOTA_DM_FS_OFFSET)
+ #endif /* !NOR_FLASH_BASE_ADDRESS */
+
+ /*-----------------------------------------------------------------------------------------
+ * FS size is automatically decreased by update package storage size as
+ * NOR_BOOTING_NOR_FS_SIZE - FOTA_PACKAGE_STORAGE_SIZE (defined in custom_img_config.h)
+ *-----------------------------------------------------------------------------------------*/
+
+ #ifndef NOR_BOOTING_NOR_FS_SIZE
+ #if defined(__SECURE_DATA_STORAGE__)
+ #define NOR_ALLOCATED_FAT_SPACE (NOR_ALLOCATED_FAT_SPACE_DEFAULT - FOTA_DM_FS_OFFSET - SDS_TOTAL_SIZE)
+ #else
+ #define NOR_ALLOCATED_FAT_SPACE (NOR_ALLOCATED_FAT_SPACE_DEFAULT - FOTA_DM_FS_OFFSET)
+ #endif
+ #else
+ #if defined(__SECURE_DATA_STORAGE__)
+ #define NOR_ALLOCATED_FAT_SPACE (NOR_BOOTING_NOR_FS_SIZE - FOTA_DM_FS_OFFSET - SDS_TOTAL_SIZE)
+ #else
+ #define NOR_ALLOCATED_FAT_SPACE (NOR_BOOTING_NOR_FS_SIZE - FOTA_DM_FS_OFFSET)
+ #endif
+ #endif /* !NOR_ALLOCATED_FAT_SPACE */
+
+ /*-----------------------------------------------------------------------------------------
+ * FS first drive size is automatically decreased by update package storage size as
+ * NOR_BOOTING_NOR_FS_FIRST_DRIVE_SECTORS - FOTA_PACKAGE_STORAGE_SIZE / 512 (defined in custom_img_config.h)
+ *-----------------------------------------------------------------------------------------*/
+
+ #ifndef NOR_BOOTING_NOR_FS_FIRST_DRIVE_SECTORS
+ #define NOR_PARTITION_SECTORS (0)
+ #else
+ #define NOR_PARTITION_SECTORS (NOR_BOOTING_NOR_FS_FIRST_DRIVE_SECTORS - FOTA_DM_FS_SECTOR_OFFSET)
+ #endif /* !NOR_FAT_PARTITION_SECTORS */
+
+ /* If NAND_SUPPORT is enabled, all NAND flash space is treated as one public drive */
+ #define NAND_PARTITION_SECTORS (0)
+
+ #endif /* __UP_PKG_ON_NAND__ && NAND_SUPPORT */
+
+
+#endif /* _NAND_FLASH_BOOTING_ || __EMMC_BOOTING__ */
+
+/*
+ * Define __PUBLIC_DRIVE_AVAILABLE__ if public drive is available.
+ * This definition will be referenced by File System. Please inform FS owner if any changes.
+ */
+#if defined(__NANDFDM_MULTI_INSTANCE__)
+ #ifndef __PUBLIC_DRIVE_AVAILABLE__
+ #define __PUBLIC_DRIVE_AVAILABLE__ // NAND FDM Multi-Instance always has public drive
+ #endif
+#endif
+
+#if defined(NOR_PARTITION_SECTORS) // NOR flash has public drive
+ #if (NOR_PARTITION_SECTORS > 0)
+ #if ((NOR_BOOTING_NOR_FS_FIRST_DRIVE_SECTORS - 0) < 21)
+ #error "custom\system\{project}\custom_MemoryDevice.h: NOR_BOOTING_NOR_FS_FIRST_DRIVE_SECTORS should be zero Or (NOR_BOOTING_NOR_FS_FIRST_DRIVE_SECTORS - 0) should be more than 20 sectors."
+ #endif
+
+ #ifndef __PUBLIC_DRIVE_AVAILABLE__
+ #define __PUBLIC_DRIVE_AVAILABLE__
+ #endif
+ #endif
+#endif
+
+#if defined(NAND_PARTITION_SECTORS) // NAND flash has public drive (including __FS_SYSDRV_ON_NAND__)
+ #if (NAND_PARTITION_SECTORS > 0)
+ #ifndef __PUBLIC_DRIVE_AVAILABLE__
+ #define __PUBLIC_DRIVE_AVAILABLE__
+ #endif
+ #endif
+#endif
+
+#if defined(__EMMC_BOOTING__) // EMMC has public drive
+ #ifndef __PUBLIC_DRIVE_AVAILABLE__
+ #define __PUBLIC_DRIVE_AVAILABLE__
+ #endif
+#endif
+
+#if !defined(_NAND_FLASH_BOOTING_) && !defined(__EMMC_BOOTING__) && !defined(__FS_SYSDRV_ON_NAND__) && defined(NAND_SUPPORT)
+ /*
+ * NOR booting / System drive on NOR / NAND flash is existed
+ * NAND_PARTITION_SECTORS is 0 but all NAND flash space is treated as one public drive
+ *
+ * Note. Please ensure NAND_SUPPORT is correctly DISABLED if NAND flash is NOT existed,
+ * otherwise __PUBLIC_DRIVE_AVAILABLE__ will be incorrectly defined but public drive is not existed!
+ */
+ #ifndef __PUBLIC_DRIVE_AVAILABLE__
+ #define __PUBLIC_DRIVE_AVAILABLE__
+ #endif
+
+ #ifndef __PUBLIC_DRIVE_2_AVAILABLE__
+ #define __PUBLIC_DRIVE_2_AVAILABLE__
+ #endif
+#endif
+
+/*
+ *******************************************************************************
+ PART 5:
+ FLASH TYPE CATEGORY below to configure flash memory command
+ *******************************************************************************
+*/
+#ifdef NOR_FLASH_TYPE_INTEL_SERIES
+#define __INTEL_SERIES_NOR__
+#endif
+
+#ifdef NOR_FLASH_TYPE_INTEL
+#define __INTEL_SERIES_NOR__
+#endif
+
+#ifdef NOR_FLASH_TYPE_RENESAS_SERIES
+#define __RENESAS_SERIES_NOR__
+#endif
+
+#ifdef NOR_FLASH_TYPE_RENESAS
+#define __RENESAS_SERIES_NOR__
+#endif
+
+#ifdef NOR_FLASH_TYPE_INTEL_SIBLEY
+#define __INTEL_SERIES_NOR__
+#define __INTEL_SIBLEY__
+
+#endif
+
+#ifdef NOR_FLASH_TYPE_SST
+#define __AMD_SERIES_NOR__
+#define __SST_NOR__
+#endif
+
+#ifdef NOR_FLASH_TYPE_ST_AMD_LIKE
+#define __AMD_SERIES_NOR__
+#endif
+
+#ifdef NOR_FLASH_TYPE_ST_INTEL_LIKE
+#define __INTEL_SERIES_NOR__
+#endif
+
+#ifdef NOR_FLASH_TYPE_AMD_SERIES
+#define __AMD_SERIES_NOR__
+#endif
+
+#ifdef NOR_FLASH_TYPE_SPANSION_PL_J
+#define __AMD_SERIES_NOR__
+#define NOR_SUSPEND_LATENCY (35)
+#endif
+
+#ifdef NOR_FLASH_TYPE_SPANSION_PL_N
+#define __AMD_SERIES_NOR__
+#define __SPANSION_PL_N__
+#define NOR_SUSPEND_LATENCY (20)
+#endif
+
+#ifdef NOR_FLASH_TYPE_SPANSION_WS_N
+#define __AMD_SERIES_NOR__
+#define __SPANSION_WS_N__
+#define __SPANSION_PL_N__
+#define NOR_SUSPEND_LATENCY (20)
+#endif
+
+#ifdef NOR_FLASH_TYPE_SPANSION_WS_P
+#define __AMD_SERIES_NOR__
+#define __SPANSION_WS_P__
+#define NOR_SUSPEND_LATENCY (40)
+#define NOR_RESUME_SUSPEND_INTERVAL (40)
+#endif
+
+#ifdef NOR_FLASH_TYPE_SPANSION_GL_A
+#define __AMD_SERIES_NOR__
+#define __SPANSION_GL_A__
+#endif
+
+#ifdef NOR_FLASH_TYPE_SPANSION_GL_N
+#define __AMD_SERIES_NOR__
+#define __SPANSION_GL_N__
+#define NOR_SUSPEND_LATENCY (20)
+#endif
+
+#ifdef NOR_FLASH_TYPE_SPANSION_NS_N
+#define __AMD_SERIES_NOR__
+#define __SPANSION_NS_N__
+#define NOR_SUSPEND_LATENCY (35)
+#define NOR_RESUME_SUSPEND_INTERVAL (30)
+#endif
+
+#ifdef NOR_FLASH_TYPE_SPANSION_NS_P
+#define __AMD_SERIES_NOR__
+#define __SPANSION_NS_N__
+#define NOR_SUSPEND_LATENCY (20)
+#define NOR_RESUME_SUSPEND_INTERVAL (30)
+#endif
+
+#ifdef NOR_FLASH_TYPE_SPANSION_NS_J
+#define __AMD_SERIES_NOR__
+#define __SPANSION_NS_J__
+#define NOR_SUSPEND_LATENCY (35)
+#endif
+
+#ifdef NOR_FLASH_TYPE_TOSHIBA
+#define __AMD_SERIES_NOR__
+#endif
+
+#ifdef NOR_FLASH_TYPE_TOSHIBA_TV
+#define __AMD_SERIES_NOR__
+#define __TOSHIBA_TV__
+#endif
+
+#ifdef NOR_FLASH_TYPE_TOSHIBA_TY
+#define __AMD_SERIES_NOR__
+#define __TOSHIBA_TY__
+#endif
+
+#ifdef NOR_FLASH_TYPE_SILICON7
+#define __RENESAS_SERIES_NOR__
+#endif
+
+#ifdef NOR_FLASH_TYPE_SAMSUNG_SPANSION_NS_J_LIKE
+#define __AMD_SERIES_NOR__
+#define __SAMSUNG_SPANSION_NS_J_LIKE__
+#define NOR_SUSPEND_LATENCY (20)
+#define NOR_RESUME_SUSPEND_INTERVAL (30)
+#endif
+
+#ifdef NOR_FLASH_TYPE_SPANSION_VS_R
+#define __AMD_SERIES_NOR__
+#define __SPANSION_VS_R__
+#define NOR_SUSPEND_LATENCY (30)
+#define NOR_RESUME_SUSPEND_INTERVAL (30)
+#define __NOR_FDM_4_FLIPPING_TOLERABLE__
+#endif
+
+#ifdef NOR_FLASH_TYPE_SPANSION_VS_R64
+#define __AMD_SERIES_NOR__
+#define __SPANSION_VS_R64__
+#define __SPANSION_NS_N__
+#define NOR_SUSPEND_LATENCY (30)
+#define __NOR_FDM_4_FLIPPING_TOLERABLE__
+#endif
+
+#ifdef NOR_FLASH_TYPE_SPANSION_WS_R
+#define __AMD_SERIES_NOR__
+#define __SPANSION_WS_R__
+#define NOR_SUSPEND_LATENCY (30)
+#define NOR_RESUME_SUSPEND_INTERVAL (30)
+#define __NOR_FDM_4_FLIPPING_TOLERABLE__
+#endif
+
+/*
+ *******************************************************************************
+ PART 6:
+ FOTA UPDATABLE FLASH AREA
+ *******************************************************************************
+*/
+#ifdef __FOTA_DM__
+ #ifndef CONFIG_FOTA_UE_FLASH_SPACE
+ #error "custom\system\{project}\custom_FeatureConfig.h: Error! Please define CONFIG_FOTA_UE_FLASH_SPACE in custom_FeatureConfig.h!"
+ #endif /* CONFIG_FOTA_UE_FLASH_SPACE */
+
+ #ifndef CONFIG_FOTA_PACKAGE_BLOCK_NUMBER
+ #error "custom\system\{project}\custom_FeatureConfig.h: Error! Please define CONFIG_FOTA_PACKAGE_BLOCK_NUMBER in custom_FeatureConfig.h!"
+ #endif /* CONFIG_FOTA_PACKAGE_BLOCK_NUMBER */
+#endif /* __FOTA_DM__ */
+
+