#===============================================================================
#
# Secure camera tz and hyp implementation
#
# GENERAL DESCRIPTION
#    build script
#
# Copyright (c) 2017-2020 by Qualcomm Technologies, Inc.
# All Rights Reserved.
# QUALCOMM Proprietary/GTDR
#
#-------------------------------------------------------------------------------

#                      EDIT HISTORY FOR FILE
#
#  This section contains comments describing changes made to the module.
#  Notice that changes are listed in reverse chronological order.
#
# when       who     what, where, why
# --------   ---     ---------------------------------------------------------
# 07/01/17    dr     Initial commit
#===============================================================================
Import('env')


#-------------------------------------------------------------------------------
# Load sub scripts
#-------------------------------------------------------------------------------
env = env.Clone()

SECCAMPATH = "${BUILD_ROOT}/ssg/securemsm/seccam/"

env.VariantDir('${BUILDPATH}', SECCAMPATH, duplicate=0)


#-------------------------------------------------------------------------------
# Internal depends within CoreBSP
#-------------------------------------------------------------------------------
CBSP_APIS = [
   'DAL',
   'SERVICES',
   'SYSTEMDRIVERS',
   'KERNEL_API',
   'KERNEL',
]

env.RequirePublicApi(CBSP_APIS, area='core')

SSG_API = [
   'AC',
   'SECUREMSM',
   'MINK',
   'KERNEL',
   'TZCRYPTO',
   'SSGPLATFORM',
   'TZCHIPSET',
]

env.RequirePublicApi(SSG_API, area='ssg')
env.RequireRestrictedApi(SSG_API)

if env['CHIPSET'] in ['nicobar', 'agatti']:
    env.Replace(SC_CAMERA_MODULE = 'camss')
    env.Append(CCFLAGS = ' -DCSID_PROTECTION_ENABLE ')
else:
    if env['CHIPSET'] in ['kamorta']:
        env.Replace(SC_CAMERA_MODULE = 'spectra')
    else:
        env.Replace(SC_CAMERA_MODULE = 'titan')

INC_PATH = [
    SECCAMPATH + "inc",
    SECCAMPATH + "src",
    SECCAMPATH + "hw/${MSM_ID}/inc",
    ]
env.Append(CPPPATH = INC_PATH)


#check if the target is supported, if not in list just exit the sconscript file
if env['CHIPSET'] in ['mdm9205']:
  env.PrintWarning("Secure camera is not implemented for this target.")
  Return();

if not env['MSM_ID'] in ['855', '845', '670' ,'7150' ,'6150', '8250', 'nicobar', 'saipan','kamorta','agatti', 'bitra']:
  env.PrintWarning("Secure camera is not implemented for this target.")
  INC_PATH2 = [SECCAMPATH + "hw/other/inc",]
  env.Append(CPPPATH = INC_PATH2)
  env.AddBinaryLibrary(['TZOS_IMAGE'], '${BUILDPATH}/src/seccam_tz', '${BUILDPATH}/src/seccam_tz.c')
  Return();


#-------------------------------------------------------------------------------
# Common Sources (shared between tz and hyp)
#-------------------------------------------------------------------------------

COMMON_SOURCES = [
  '${BUILDPATH}/src/seccam_cfg.c',
]

#-------------------------------------------------------------------------------
# TZBSP Sources, libraries
#-------------------------------------------------------------------------------
COMMON_TZ_SOURCES = [
  '${BUILDPATH}/src/smc_camerass_tz.c',
  '${BUILDPATH}/src/seccam_tz.c',
  '${BUILDPATH}/src/${SC_CAMERA_MODULE}/seccam_arch_tz.c',
]



env.AddBinaryLibrary(['TZOS_IMAGE'], '${BUILDPATH}/src/seccam_tz', COMMON_SOURCES + COMMON_TZ_SOURCES)

env.AddTZBSPSyscalls('TZOS_IMAGE',
  [
  env.SyscallEntry('MINK_SERVICE_SYSCALL_ID',
                   'TZ_SVC_CAMERASS_DYNAMIC_PHY_PROTECT',
                   'TZ_SVC_CAMERASS_DYNAMIC_PHY_PROTECT_PARAM_ID', '0',
                   'tz_CameraSS_DynamicPHYProtect'),

  env.SyscallEntry('MINK_SERVICE_SYSCALL_ID',
                   'TZ_SVC_CAMERASS_DYNAMIC_PHY_PROTECT_LANES',
                   'TZ_SVC_CAMERASS_DYNAMIC_PHY_PROTECT_LANES_PARAM_ID', '0',
                   'tz_CameraSS_DynamicPHYProtectLanes'),

  env.SyscallEntry('MINK_SERVICE_SYSCALL_ID',
                   'TZ_SVC_CAMERASS_SET_TOPOLOGY',
                   'TZ_SVC_CAMERASS_SET_TOPOLOGY_PARAM_ID', '0',
                   'tz_CameraSS_SetTopology'),

  env.SyscallEntry('MINK_SERVICE_SYSCALL_ID',
                   'TZ_SVC_CAMERASS_NOTIFY_STREAM_STATUS',
                   'TZ_SVC_CAMERASS_NOTIFY_STREAM_STATUS_PARAM_ID', '0',
                   'tz_CameraSS_NotifyStreamStatus'),

  ])

#-------------------------------------------------------------------------------
# HYP Sources, libraries
#-------------------------------------------------------------------------------

HYP_SOURCES = [
  '${BUILDPATH}/src/smc_camerass_hyp.c',
  '${BUILDPATH}/src/seccam_hyp.c',
]

if env['CHIPSET'] in ['nicobar', 'agatti']:
  HYP_SOURCES = [HYP_SOURCES + ['${BUILDPATH}/src/${SC_CAMERA_MODULE}/seccam_arch_hyp.c',]]

HYP_SMC_SOURCES = [
  '${BUILDPATH}/src/seccam_syscall_def_hyp.c',
]

env.AddBinaryLibrary(['HYPERVISOR_IMAGE'], '${BUILDPATH}/seccam_hyp', COMMON_SOURCES + HYP_SOURCES)
env.AddBinaryObject(['HYPERVISOR_IMAGE'], HYP_SMC_SOURCES)
#add support for third party hypervisor
env.AddBinaryObject(['QHEEBSP_IMAGE'], HYP_SOURCES + HYP_SMC_SOURCES)

if env.has_key('HYPERVISOR_IMAGE') or env.has_key('QHEEBSP_IMAGE'):
  env.Append(CCFLAGS = ' -DSC_HYP_IMAGE ')

#-------------------------------------------------------------------------------
# devcfg HYP and TZ
#-------------------------------------------------------------------------------

#Add devcfg configuration for secure camera feature
SECURE_CAMERA_CONFIG = 'secure_camera_config.xml'
SECURE_CAMERA_CONFIG_FILE_XML = env.GlobFiles('../hw/${MSM_ID}/inc/'+SECURE_CAMERA_CONFIG, posix=True)
SECURE_CAMERA_CONFIG_FILE_XML = ', '.join(SECURE_CAMERA_CONFIG_FILE_XML) #convert list to string

if 'USES_DEVCFG' in env:
  DEVCFG_IMG = ['DAL_DEVCFG_OEM_QSEE_IMG']
  env.AddDevCfgInfo(DEVCFG_IMG,
    {
        'devcfg_xml' : [SECURE_CAMERA_CONFIG_FILE_XML]
    }
  )

  if env['TARGET_FAMILY'] != 'bear':
    DEVCFG_IMG = ['DAL_DEVCFG_OEM_HYP_IMG']
    env.AddDevCfgInfo(DEVCFG_IMG,
      {
          'devcfg_xml' : [SECURE_CAMERA_CONFIG_FILE_XML]
      }
    )

env.Deploy('SConscript')

if 'USES_RCINIT' in env:
  RCINIT_IMGS = ['CTZL64_IMAGE', 'TZOS_IMAGE', 'CTZL_IMAGE']
  if env['CHIPSET'] in ['sdm855', 'sdm845','sm6150','sm7150','sm8250','nicobar', 'saipan','kamorta','agatti', 'bitra']:
   env.AddRCInitFunc(
    RCINIT_IMGS,
    {
      'sequence_group'             : 'RCINIT_GROUP_2',
      'init_name'                  : 'seccam_init',
      'init_function'              : 'seccam_tz_init',
      'dependencies'               : ['ac_init', 'clock_init'],
      'policy_optin'               : ['default']
    })

