/* ------------------------------------------
 * Copyright (c) 2016, Synopsys, Inc. All rights reserved.

 * Redistribution and use in source and binary forms, with or without modification,
 * are permitted provided that the following conditions are met:

 * 1) Redistributions of source code must retain the above copyright notice, this
 * list of conditions and the following disclaimer.

 * 2) Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation and/or
 * other materials provided with the distribution.

 * 3) Neither the name of the Synopsys, Inc., nor the names of its contributors may
 * be used to endorse or promote products derived from this software without
 * specific prior written permission.

 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * \version 2016.05
 * \date 2016-09-08
 * \author Huaqi Fang(Huaqi.Fang@synopsys.com)
--------------------------------------------- */

/**
 * \file
 * \ingroup ARC_HAL_MISC
 * \brief header file for arc feature configuration
 */

/**
 * \addtogroup ARC_HAL_MISC
 * @{
 */

#ifndef _ARC_FEATURE_CONFIG_H_
#define _ARC_FEATURE_CONFIG_H_

// Enable core_config.h in EMSK OSP
//#ifdef EMBARC_TCF_GENERATED
#include "arc_core_config.h"
//#endif

/** ARC baseline instruction set version number */
#if !defined(_ARCVER)
#if defined(core_config_cir_identity_arcver)
#define _ARCVER             core_config_cir_identity_arcver
#else
#define _ARCVER             0x42
#endif
#endif

/** ARC CPU Clock Frequency in Hz unit */
#if !defined(ARC_FEATURE_CPU_CLOCK_FREQ)
#if defined(core_config_clock_speed)
#define ARC_FEATURE_CPU_CLOCK_FREQ  (core_config_clock_speed*1000000)
#endif
#endif

/** ARC PC size */
#if !defined(ARC_FEATURE_PC_SIZE)
#if defined(core_config_pc_size)
#define ARC_FEATURE_PC_SIZE     core_config_pc_size
#else
#define ARC_FEATURE_PC_SIZE     32
#endif
#endif

/** ARC LPC size */
#if !defined(ARC_FEATURE_LPC_SIZE)
#if defined(core_config_lpc_size)
#define ARC_FEATURE_LPC_SIZE        core_config_lpc_size
#else
#define ARC_FEATURE_LPC_SIZE        32
#endif
#endif

/** ARC Addr size */
#if !defined(ARC_FEATURE_ADDR_SIZE)
#if defined(core_config_addr_size)
#define ARC_FEATURE_ADDR_SIZE       core_config_addr_size
#else
#define ARC_FEATURE_ADDR_SIZE       32
#endif
#endif

/** ARC Endian/Byte Order */
#define ARC_FEATURE_LITTLE_ENDIAN   1234
#define ARC_FEATURE_BIG_ENDIAN      4321

#if !defined(ARC_FEATURE_BYTE_ORDER)
#if defined(core_config_bcr_isa_config_b)
#if core_config_bcr_isa_config_b == 0
#define ARC_FEATURE_BYTE_ORDER      ARC_FEATURE_LITTLE_ENDIAN
#else
#define ARC_FEATURE_BYTE_ORDER      ARC_FEATURE_BIG_ENDIAN
#endif
#else
#define ARC_FEATURE_BYTE_ORDER      ARC_FEATURE_LITTLE_ENDIAN
#endif
#endif

/** Reduced register option, if enabled, ARC_FEATURE_RF16 will be defined */
#if !defined(ARC_FEATURE_RF16)
#if defined(core_config_bcr_rf_build_e) && core_config_bcr_rf_build_e == 1
#define ARC_FEATURE_RF16
#endif
#endif

/** Unaligned access option, if enabled, ARC_FEATURE_UNALIGNED will be defined */
#if !defined(ARC_FEATURE_UNALIGNED)
#if defined(core_config_unaligned) && core_config_unaligned == 1
#define ARC_FEATURE_UNALIGNED
#endif
#endif


/** Code density option, if enabled, ARC_FEATURE_CODE_DENSITY will be defined */
#if !defined(ARC_FEATURE_CODE_DENSITY)
#if defined(core_config_code_density) && core_config_code_density == 1
#define ARC_FEATURE_CODE_DENSITY
#endif
#endif

/** The number of register file banks */
#if !defined(ARC_FEATURE_RGF_NUM_BANKS)
#if defined(core_config_rgf_num_banks)
#define ARC_FEATURE_RGF_NUM_BANKS   core_config_rgf_num_banks
#else
#define ARC_FEATURE_RGF_NUM_BANKS   1
#endif
#endif

/** The number of registers replicated per register bank */
#if !defined(ARC_FEATURE_RGF_BANKED_REGS)
#if defined(core_config_rgf_banked_regs)
#define ARC_FEATURE_RGF_BANKED_REGS core_config_rgf_banked_regs
#endif
#endif

/** Interrupt unit presence */
#if !defined(ARC_FEATURE_INTERRUPTS_PRESENT)
#if defined(core_config_interrupts_present)
#define ARC_FEATURE_INTERRUPTS_PRESENT  core_config_interrupts_present
#endif
#endif

/** FIRQ_OPTION configuration option, 1 for enabled, 0 for disabled */
#if !defined(ARC_FEATURE_FIRQ)
#if defined(core_config_bcr_irq_build_f)
#define ARC_FEATURE_FIRQ        core_config_bcr_irq_build_f
#else
#define ARC_FEATURE_FIRQ        0
#endif
#endif

/** The number of interrupts */
#if !defined(NUM_EXC_INT)
#if defined(core_config_interrupts_number)
#define NUM_EXC_INT         core_config_interrupts_number
#endif
#endif

/** The number of external interrupts */
#if !defined(NUM_EXC_EXT_INT)
#if defined(core_config_interrupts_externals)
#define NUM_EXC_EXT_INT         core_config_interrupts_externals
#endif
#endif

/** The interrupt priority levels */
#if !defined(INT_PRI_MIN)
#if defined(core_config_interrupts_priorities)
#define INT_PRI_MIN         (-core_config_interrupts_priorities)
#endif
#endif

// ARC TIMER_BUILD
/** Timer0 present or not */
#if !defined(ARC_FEATURE_TIMER0_PRESENT)
#if defined(core_config_timer0)
#define ARC_FEATURE_TIMER0_PRESENT  core_config_timer0
#define ARC_FEATURE_TIMER0_LEVEL    (core_config_timer0_level-core_config_interrupts_priorities)
#define ARC_FEATURE_TIMER0_VECTOR   core_config_timer0_vector
#endif
#endif

/** Timer1 present or not */
#if !defined(ARC_FEATURE_TIMER1_PRESENT)
#if defined(core_config_timer1)
#define ARC_FEATURE_TIMER1_PRESENT  core_config_timer1
#define ARC_FEATURE_TIMER1_LEVEL    (core_config_timer1_level-core_config_interrupts_priorities)
#define ARC_FEATURE_TIMER1_VECTOR   core_config_timer1_vector
#endif
#endif

/** Secure Timer0 present or not */
#if !defined(ARC_FEATURE_SEC_TIMER0_PRESENT)
#if defined(core_config_sec_timer0)
#define ARC_FEATURE_SEC_TIMER0_PRESENT  core_config_sec_timer0
#define ARC_FEATURE_SEC_TIMER0_LEVEL    (core_config_sec_timer0_level-core_config_interrupts_priorities)
#define ARC_FEATURE_SEC_TIMER0_VECTOR   20
#endif
#endif

/** Secure Timer1 present or not */
#if !defined(ARC_FEATURE_SEC_TIMER1_PRESENT)
#if defined(core_config_sec_timer1)
#define ARC_FEATURE_SEC_TIMER1_PRESENT  core_config_sec_timer1
#define ARC_FEATURE_SEC_TIMER1_LEVEL    (core_config_sec_timer1_level-core_config_interrupts_priorities)
#define ARC_FEATURE_SEC_TIMER1_VECTOR   21
#endif
#endif


/** 64bit RTC present or not */
#if !defined(ARC_FEATURE_RTC_PRESENT)
#if defined(core_config_rtc)
#define ARC_FEATURE_RTC_PRESENT     core_config_rtc
#endif
#endif

// Memory related definitions
/** ICCM Presence, base address and size */
#if !defined(ARC_FEATURE_ICCM_PRESENT)
#if defined(core_config_iccm_present) && core_config_iccm_present == 1
#define ARC_FEATURE_ICCM_PRESENT    1
#define ARC_FEATURE_ICCM_BASE       core_config_iccm_base
#define ARC_FEATURE_ICCM_SIZE       core_config_iccm_size
#endif
#endif

/** ICCM0 Presence, base address and size */
#if !defined(ARC_FEATURE_ICCM0_PRESENT)
#if defined(core_config_iccm0_present) && core_config_iccm0_present == 1
#define ARC_FEATURE_ICCM0_PRESENT   1
#define ARC_FEATURE_ICCM0_BASE      core_config_iccm0_base
#define ARC_FEATURE_ICCM0_SIZE      core_config_iccm0_size
#endif
#endif

/** ICCM1 Presence, base address and size */
#if !defined(ARC_FEATURE_ICCM1_PRESENT)
#if defined(core_config_iccm1_present) && core_config_iccm1_present == 1
#define ARC_FEATURE_ICCM1_PRESENT   1
#define ARC_FEATURE_ICCM1_BASE      core_config_iccm1_base
#define ARC_FEATURE_ICCM1_SIZE      core_config_iccm1_size
#endif
#endif

/** DCCM Presence, base address and size */
#if !defined(ARC_FEATURE_DCCM_PRESENT)
#if defined(core_config_dccm_present) && core_config_dccm_present == 1
#define ARC_FEATURE_DCCM_PRESENT    1
#define ARC_FEATURE_DCCM_BASE       core_config_dccm_base
#define ARC_FEATURE_DCCM_SIZE       core_config_dccm_size
#ifdef core_config_dccm_interleave
#define ARC_FEATURE_DCCM_INTERLEAVE core_config_dccm_interleave
#endif
#endif
#endif

/** Peripheral memory region(DMP) base address, if dmp configured, this macro will be defined as base address */
#if !defined(ARC_FEATURE_DMP_PERIPHERAL)
#if defined(core_config_cir_dmp_peripheral)
#define ARC_FEATURE_DMP_PERIPHERAL  core_config_cir_dmp_peripheral
#endif
#endif

/** MPU options */
#if !defined(ARC_FEATURE_MPU_PRESENT)
#if defined(core_config_mpu_present) && core_config_mpu_present == 1
#define ARC_FEATURE_MPU_PRESENT     1
#define ARC_FEATURE_MPU_VERSION     core_config_bcr_mpu_build_version
#define ARC_FEATURE_MPU_REGIONS     core_config_mpu_regions
#ifdef core_config_bcr_mpu_build_i
#define ARC_FEATURE_MPU_BUILD_I     core_config_bcr_mpu_build_i
#endif
#ifdef core_config_bcr_mpu_build_s
#define ARC_FEATURE_MPU_BUILD_S     core_config_bcr_mpu_build_s
#endif
#endif
#endif

/** Secure BCR SEC_BUILD BCR */
#if !defined(ARC_FEATURE_SEC_PRESENT)
#if defined(core_config_bcr_sec_build)
#define ARC_FEATURE_SEC_PRESENT     1
#define ARC_FEATURE_SEC_VERSION     core_config_bcr_sec_build_version
#define ARC_FEATURE_SEC_BUILD_DSM   core_config_bcr_sec_build_dsm
#define ARC_FEATURE_SEC_BUILD_NSM   core_config_bcr_sec_build_nsm
#define ARC_FEATURE_SEC_BUILD_I1SM  core_config_bcr_sec_build_i1sm
#define ARC_FEATURE_SEC_BUILD_I0SM  core_config_bcr_sec_build_i0sm
#define ARC_FEATURE_SEC_BUILD_S     core_config_bcr_sec_build_s
#define ARC_FEATURE_SEC_BUILD_EI    core_config_bcr_sec_build_ei
#define ARC_FEATURE_SEC_BUILD_ED    core_config_bcr_sec_build_ed
#endif
#endif

#if !defined(ARC_FEATURE_SEC_MODES)
#if defined(core_config_sec_modes)
#define ARC_FEATURE_SEC_MODES       core_config_sec_modes
#endif
#endif

/** Data Cache options */
#if !defined(ARC_FEATURE_DCACHE_PRESENT)
#if defined(core_config_dcache_present) && core_config_dcache_present == 1
#define ARC_FEATURE_DCACHE_PRESENT      1
#define ARC_FEATURE_DCACHE_BUILD        core_config_bcr_d_cache_build
#define ARC_FEATURE_DCACHE_BUILD_VERSION    core_config_bcr_d_cache_build_version
#define ARC_FEATURE_DCACHE_BUILD_ASSOC      core_config_bcr_d_cache_build_assoc
#define ARC_FEATURE_DCACHE_BUILD_CAPACITY   core_config_bcr_d_cache_build_capacity
#define ARC_FEATURE_DCACHE_BUILD_BSIZE      core_config_bcr_d_cache_build_bsize
#define ARC_FEATURE_DCACHE_BUILD_FL     core_config_bcr_d_cache_build_fl
#define ARC_FEATURE_DCACHE_BUILD_U      core_config_bcr_d_cache_build_u
#define ARC_FEATURE_DCACHE_SIZE         core_config_dcache_size
#define ARC_FEATURE_DCACHE_LINE_SIZE        core_config_dcache_line_size
#define ARC_FEATURE_DCACHE_WAYS         core_config_dcache_ways
#define ARC_FEATURE_DCACHE_FEATURE      core_config_dcache_feature
#endif
#endif

/** Instruction Cache options */
#if !defined(ARC_FEATURE_ICACHE_PRESENT)
#if defined(core_config_icache_present) && core_config_icache_present == 1
#define ARC_FEATURE_ICACHE_PRESENT      1
#define ARC_FEATURE_ICACHE_BUILD        core_config_bcr_i_cache_build
#define ARC_FEATURE_ICACHE_BUILD_VERSION    core_config_bcr_i_cache_build_version
#define ARC_FEATURE_ICACHE_BUILD_ASSOC      core_config_bcr_i_cache_build_assoc
#define ARC_FEATURE_ICACHE_BUILD_CAPACITY   core_config_bcr_i_cache_build_capacity
#define ARC_FEATURE_ICACHE_BUILD_BSIZE      core_config_bcr_i_cache_build_bsize
#define ARC_FEATURE_ICACHE_BUILD_FL     core_config_bcr_i_cache_build_fl
#define ARC_FEATURE_ICACHE_BUILD_D      core_config_bcr_i_cache_build_d
#define ARC_FEATURE_ICACHE_SIZE         core_config_icache_size
#define ARC_FEATURE_ICACHE_LINE_SIZE        core_config_icache_line_size
#define ARC_FEATURE_ICACHE_WAYS         core_config_icache_ways
#define ARC_FEATURE_ICACHE_FEATURE      core_config_icache_feature
#endif
#endif

/** ARC uDMA options */
#if !defined(ARC_FEATURE_DMAC)
#if defined(core_config_dmac)
#define ARC_FEATURE_DMAC        core_config_dmac
#define CORE_DMAC_CHANNELS      core_config_dmac_channels
#define CORE_DMAC_REGISTERS     core_config_dmac_registers
#if core_config_bcr_dmac_build_int_cfg == 2 && core_config_bcr_dmac_build_int_cfg == 4
#define DMA_MULTI_IRQ           1
#else
#define DMA_MULTI_IRQ           0
#endif
#define ARC_FEATURE_DMAC_PRESENT    core_config_dmac
#define ARC_FEATURE_DMAC_VERSION    core_config_bcr_dmac_build_version
#define ARC_FEATURE_DMAC_CHANNELS   core_config_dmac_channels
#define ARC_FEATURE_DMAC_REGISTERS  core_config_dmac_registers
#define ARC_FEATURE_DMAC_INT_CFG    core_config_bcr_dmac_build_int_cfg
#define ARC_FEATURE_DMAC_FIFO_DEPTH core_config_dmac_fifo_depth

#ifdef ARC_FEATURE_SEC_TIMER0_PRESENT
#define DMA_IRQ_NUM_START       22
#define ARC_FEATURE_DMAC_VECTOR_START   22
#else
#define DMA_IRQ_NUM_START       20
#define ARC_FEATURE_DMAC_VECTOR_START   20
#endif

#endif
#endif


#ifdef __cplusplus
extern "C" {
#endif

#ifdef ARC_FEATURE_UNALIGNED
#define STATUS32_RESET_VALUE        (1<<19)
#else
#define STATUS32_RESET_VALUE        (0)
#endif

#ifdef __cplusplus
}
#endif

#endif /* _ARC_FEATURE_CONFIG_H_ */

/** @} */
