mirror of
https://github.com/edk2-porting/edk2-msm
synced 2025-05-14 15:32:18 +00:00
6120 lines
192 KiB
C
Executable File
6120 lines
192 KiB
C
Executable File
/* Copyright (c) 2017 - 2019, The Linux Foundation. All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are
|
|
* met:
|
|
* * Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* * 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.
|
|
* * Neither the name of The Linux Foundation 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 "AS IS" AND ANY EXPRESS OR IMPLIED
|
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER 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.
|
|
*/
|
|
|
|
#ifndef SCM_SIP_INTERFACE_H
|
|
#define SCM_SIP_INTERFACE_H
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* Include Files
|
|
* -------------------------------------------------------------------------*/
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* Documentation
|
|
* -------------------------------------------------------------------------*/
|
|
|
|
/* ARMV8 SMC ID bit layout
|
|
___________________________________________________
|
|
| | | | | | |
|
|
| 31 | 30 |29----24|23------16|15-------8|7-------0|
|
|
|IRQ |AARCH| Owner | Reserved |Service ID| Func # |
|
|
|____|_____|________|__________|__________|_________|
|
|
\_________ _________/
|
|
\/
|
|
Command ID
|
|
*/
|
|
|
|
/* Parameter ID bit layout
|
|
___________________________________________________________________________
|
|
| | | | | | | | | | | | |
|
|
|31------24|23-22|21-20|19-18|17-16|15-14|13-12|11-10|9--8|7--6|5--4|3-----0|
|
|
| Reserved | p10 | p9 | p8 | p7 | p6 | p5 | p4 | p3 | p2 | p1 | nargs |
|
|
| |type |type |type |type |type |type |type |type|type|type| |
|
|
|__________|_____|_____|_____|_____|_____|_____|_____|____|____|____|_______|
|
|
|
|
*/
|
|
|
|
/** @addtogroup tz_macros_constants
|
|
@{ */
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* Preprocessor Definitions and Constants
|
|
* -------------------------------------------------------------------------*/
|
|
/** @name Helper Macros
|
|
@{ */
|
|
/** General helper macro to create a bitmask from bits low to high. */
|
|
#define TZ_MASK_BITS(h,l) ((0xffffffff >> (32 - ((h - l) + 1))) << l)
|
|
|
|
/** Helper macro to extract the IRQ settings from SMC ID. */
|
|
#define TZ_SYSCALL_IRQ(r0) ((r0 & TZ_MASK_BITS(31,31)) >> 31)
|
|
/** Helper macro to extract the AArch used from SMC ID. */
|
|
#define TZ_SYSCALL_AARCH(r0) ((r0 & TZ_MASK_BITS(30,30)) >> 30)
|
|
/** Helper macro to extract the Owning entity from SMC ID. */
|
|
#define TZ_SYSCALL_OWNER_ID(r0) ((r0 & TZ_MASK_BITS(29,24)) >> 24)
|
|
/** Helper macro to extract the reserved bits from SMC ID. */
|
|
#define TZ_SYSCALL_RESERVED(r0) ((r0 & TZ_MASK_BITS(23,16)) >> 16)
|
|
/** Helper macro to extract the function ID from SMC ID. */
|
|
#define TZ_SYSCALL_FUNC_ID(r0) (r0 & TZ_MASK_BITS(15,0))
|
|
/** Helper macro to extract the app ID from SMC ID */
|
|
#define TZ_SYSCALL_APP_ID(r0) ((r0 & TZ_MASK_BITS(15,8)) >> 8)
|
|
/** Helper macro to extract SVC ID from function id in SMC ID */
|
|
#define TZ_SYSCALL_SVC_ID(r0) ((r0 & TZ_MASK_BITS(15,8)) >> 8)
|
|
|
|
/** Helper macro to extract the number of arguments from Param ID */
|
|
#define TZ_SYSCALL_NUM_ARGS(r1) (r1 & TZ_MASK_BITS(3,0))
|
|
/** Helper macro to extract an arg type from Param ID. 10 args max */
|
|
#define TZ_SYSCALL_ARG_TYPE(r1, n) \
|
|
((n<10)?((r1 & TZ_MASK_BITS(((n*2)+5),((n*2)+4))) >> ((n * 2) + 4)):0xFFFFFFFF)
|
|
|
|
/** Helper macro for checking if an owning entity is of type Trusted OS */
|
|
#define IS_OWNER_TRUSTED_OS(owner_id) \
|
|
(((owner_id >= 50) && (owner_id <= 63))?TRUE:FALSE)
|
|
/** Helper macro for checking if an owning entity is of type TZ APPS */
|
|
#define IS_OWNER_TRUSTED_TEE(owner_id) \
|
|
(((owner_id == 51))?TRUE:FALSE)
|
|
#define IS_OWNER_TZ_APPS(owner_id) \
|
|
(((owner_id >= 48) && (owner_id <= 49))?TRUE:FALSE)
|
|
|
|
/**
|
|
Macro used to define an SMC ID based on the owner ID,
|
|
service ID, and function number.
|
|
*/
|
|
#define TZ_SYSCALL_CREATE_SMC_ID(o, s, f) \
|
|
((UINT32)((((o & 0x3f) << 24 ) | (s & 0xff) << 8) | (f & 0xff)))
|
|
|
|
#define TZ_SYSCALL_PARAM_NARGS_MASK TZ_MASK_BITS(3,0)
|
|
#define TZ_SYSCALL_PARAM_TYPE_MASK TZ_MASK_BITS(1,0)
|
|
|
|
#define _TZ_SYSCALL_CREATE_PARAM_ID(nargs, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) \
|
|
((nargs&TZ_SYSCALL_PARAM_NARGS_MASK)+ \
|
|
((p1&TZ_SYSCALL_PARAM_TYPE_MASK)<<4)+ \
|
|
((p2&TZ_SYSCALL_PARAM_TYPE_MASK)<<6)+ \
|
|
((p3&TZ_SYSCALL_PARAM_TYPE_MASK)<<8)+ \
|
|
((p4&TZ_SYSCALL_PARAM_TYPE_MASK)<<10)+ \
|
|
((p5&TZ_SYSCALL_PARAM_TYPE_MASK)<<12)+ \
|
|
((p6&TZ_SYSCALL_PARAM_TYPE_MASK)<<14)+ \
|
|
((p7&TZ_SYSCALL_PARAM_TYPE_MASK)<<16)+ \
|
|
((p8&TZ_SYSCALL_PARAM_TYPE_MASK)<<18)+ \
|
|
((p9&TZ_SYSCALL_PARAM_TYPE_MASK)<<20)+ \
|
|
((p10&TZ_SYSCALL_PARAM_TYPE_MASK)<<22))
|
|
|
|
/**
|
|
Macros used to create the Parameter ID associated with the syscall
|
|
*/
|
|
#define TZ_SYSCALL_CREATE_PARAM_ID_0 0
|
|
#define TZ_SYSCALL_CREATE_PARAM_ID_1(p1) \
|
|
_TZ_SYSCALL_CREATE_PARAM_ID(1, p1, 0, 0, 0, 0, 0, 0, 0, 0, 0)
|
|
#define TZ_SYSCALL_CREATE_PARAM_ID_2(p1, p2) \
|
|
_TZ_SYSCALL_CREATE_PARAM_ID(2, p1, p2, 0, 0, 0, 0, 0, 0, 0, 0)
|
|
#define TZ_SYSCALL_CREATE_PARAM_ID_3(p1, p2, p3) \
|
|
_TZ_SYSCALL_CREATE_PARAM_ID(3, p1, p2, p3, 0, 0, 0, 0, 0, 0, 0)
|
|
#define TZ_SYSCALL_CREATE_PARAM_ID_4(p1, p2, p3, p4) \
|
|
_TZ_SYSCALL_CREATE_PARAM_ID(4, p1, p2, p3, p4, 0, 0, 0, 0, 0, 0)
|
|
#define TZ_SYSCALL_CREATE_PARAM_ID_5(p1, p2, p3, p4, p5) \
|
|
_TZ_SYSCALL_CREATE_PARAM_ID(5, p1, p2, p3, p4, p5, 0, 0, 0, 0, 0)
|
|
#define TZ_SYSCALL_CREATE_PARAM_ID_6(p1, p2, p3, p4, p5, p6) \
|
|
_TZ_SYSCALL_CREATE_PARAM_ID(6, p1, p2, p3, p4, p5, p6, 0, 0, 0, 0)
|
|
#define TZ_SYSCALL_CREATE_PARAM_ID_7(p1, p2, p3, p4, p5, p6, p7) \
|
|
_TZ_SYSCALL_CREATE_PARAM_ID(7, p1, p2, p3, p4, p5, p6, p7, 0, 0, 0)
|
|
#define TZ_SYSCALL_CREATE_PARAM_ID_8(p1, p2, p3, p4, p5, p6, p7, p8) \
|
|
_TZ_SYSCALL_CREATE_PARAM_ID(8, p1, p2, p3, p4, p5, p6, p7, p8, 0, 0)
|
|
#define TZ_SYSCALL_CREATE_PARAM_ID_9(p1, p2, p3, p4, p5, p6, p7, p8, p9) \
|
|
_TZ_SYSCALL_CREATE_PARAM_ID(9, p1, p2, p3, p4, p5, p6, p7, p8, p9, 0)
|
|
#define TZ_SYSCALL_CREATE_PARAM_ID_10(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) \
|
|
_TZ_SYSCALL_CREATE_PARAM_ID(10, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10)
|
|
|
|
#define TZBSP_GET_NARGS(param_id) (param_id & 0xF)
|
|
|
|
/** @} */ /* end_namegroup Helper Macros */
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* Parameter ID values
|
|
* -------------------------------------------------------------------------*/
|
|
/** @name Parameter ID values
|
|
@{ */
|
|
|
|
/** A parameter of type value */
|
|
#define TZ_SYSCALL_PARAM_TYPE_VAL 0x0
|
|
/** A parameter of type buffer read-only */
|
|
#define TZ_SYSCALL_PARAM_TYPE_BUF_RO 0x1
|
|
/** A parameter of type buffer read-write */
|
|
#define TZ_SYSCALL_PARAM_TYPE_BUF_RW 0x2
|
|
|
|
/** @} */ /* end_namegroup Parameter ID values */
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* Owning Entity IDs (defined by ARM SMC doc)
|
|
* -------------------------------------------------------------------------*/
|
|
|
|
/** @name Owning Entity IDs
|
|
@{ */
|
|
|
|
/** ARM Architecture call ID */
|
|
#define TZ_OWNER_ARM 0
|
|
/** CPU service call ID */
|
|
#define TZ_OWNER_CPU 1
|
|
/** SIP service call ID */
|
|
#define TZ_OWNER_SIP 2
|
|
/** OEM service call ID */
|
|
#define TZ_OWNER_OEM 3
|
|
/** Standard service call ID */
|
|
#define TZ_OWNER_STD 4
|
|
|
|
/** Values 5-47 are reserved for future use */
|
|
|
|
/** Trusted Application call IDs */
|
|
#define TZ_OWNER_TZ_APPS 48
|
|
#define TZ_OWNER_TZ_APPS_RESERVED 49
|
|
/** Trusted OS Call IDs */
|
|
#define TZ_OWNER_QSEE_OS 50
|
|
#define TZ_OWNER_MOBI_OS 51
|
|
#define TZ_OWNER_OS_RESERVED_3 52
|
|
#define TZ_OWNER_OS_RESERVED_4 53
|
|
#define TZ_OWNER_OS_RESERVED_5 54
|
|
#define TZ_OWNER_OS_RESERVED_6 55
|
|
#define TZ_OWNER_OS_RESERVED_7 56
|
|
#define TZ_OWNER_OS_RESERVED_8 57
|
|
#define TZ_OWNER_OS_RESERVED_9 58
|
|
#define TZ_OWNER_OS_RESERVED_10 59
|
|
#define TZ_OWNER_OS_RESERVED_11 60
|
|
#define TZ_OWNER_OS_RESERVED_12 61
|
|
#define TZ_OWNER_OS_RESERVED_13 62
|
|
#define TZ_OWNER_OS_RESERVED_14 63
|
|
|
|
/** @} */ /* end_namegroup Owning Entity IDs */
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* Service IDs
|
|
* -------------------------------------------------------------------------*/
|
|
|
|
/** @name Service IDs
|
|
@{ */
|
|
|
|
#define TZ_SVC_INFO_CALL_ID 255
|
|
|
|
/** ARM Architecture call groups */
|
|
#define TZ_SVC_ARM_INFO TZ_SVC_INFO_CALL_ID /* ARM syscall info */
|
|
|
|
/** CPU service call groups */
|
|
#define TZ_SVC_CPU_INFO TZ_SVC_INFO_CALL_ID /* CPU syscall info */
|
|
|
|
/** SIP service call groups */
|
|
#define TZ_SVC_BOOT 1 /* Boot (cold boot/warm boot). */
|
|
#define TZ_SVC_PIL 2 /* Peripheral image loading. */
|
|
#define TZ_SVC_DUMP 3 /* Memory dumping. */
|
|
#define TZ_SVC_RES_LOCKING 4 /* Resource locking. */
|
|
#define TZ_SVC_IO_ACCESS 5 /* I/O protection. */
|
|
#define TZ_SVC_INFO 6 /* Misc. information services. */
|
|
#define TZ_SVC_SSD 7 /* SSD services. */
|
|
#define TZ_SVC_FUSE 8 /* Fuse services. */
|
|
#define TZ_SVC_POWER 9 /* Power related services. */
|
|
#define TZ_SVC_CRYPTO 10 /* Crypto services. */
|
|
#define TZ_SVC_SC_KEY_EXCHANGE 11 /* Secure channel key exchange. */
|
|
#define TZ_SVC_MEMORY_PROTECTION 12 /* Memory protection service. */
|
|
#define TZ_SVC_RESERVED_0 13 /* Reserved service ID. */
|
|
#define TZ_SVC_NS_DEBUG_FIQ 14 /* Nonsecure debug FIQ. */
|
|
#define TZ_SVC_OCMEM 15 /* OCMEM service. */
|
|
#define TZ_SVC_ES 16 /* Enterprise-Security service */
|
|
#define TZ_SVC_HDCP 17 /* HDCP service. */
|
|
#define TZ_SVC_MDTP 18 /* MDTP service. */
|
|
#define TZ_SVC_LMH 19 /* LMh Private driver */
|
|
#define TZ_SVC_READ_DBG_POLICY 20 /* dbg_policy content retrieval */
|
|
#define TZ_SVC_SMMU_PROGRAM 21 /* SMMU services. */
|
|
#define TZ_SVC_STORAGE 26 /* Storage Service. */
|
|
#define TZ_SVC_TPM_INFO 32 /* TPM INFO service ID */
|
|
#define TZ_SVC_TEST_1 253 /* TZT calls (continued) */
|
|
#define TZ_SVC_TEST_0 254 /* TZT calls */
|
|
#define TZ_SVC_SIP_INFO TZ_SVC_INFO_CALL_ID /* SIP syscall info */
|
|
|
|
/** OEM service call groups */
|
|
#define TZ_SVC_OEM_INFO TZ_SVC_INFO_CALL_ID /* OEM syscall info */
|
|
|
|
/** Standards call groups */
|
|
#define TZ_SVC_STANDARD_INFO TZ_SVC_INFO_CALL_ID /* Standard info */
|
|
|
|
/** Trusted OS: QSEE call groups */
|
|
#define TZ_SVC_APP_MGR 1 /* Application management */
|
|
#define TZ_SVC_LISTENER 2 /* Listener service management */
|
|
#define TZ_SVC_EXTERNAL 3 /* External image loading */
|
|
#define TZ_SVC_RPMB 4 /* Replay Protected Memory Block */
|
|
#define TZ_SVC_KEYSTORE 5 /* Keystore management */
|
|
#define TZ_SVC_QSEE_OS_INFO TZ_SVC_INFO_CALL_ID /* Trusted OS info */
|
|
|
|
/** Trusted OS: Mobicore call groups */
|
|
#define TZ_SVC_EXECUTIVE_EXT 250 /* Third party OS */
|
|
#define TZ_SVC_MOBI_OS_INFO TZ_SVC_INFO_CALL_ID /* Trusted OS info */
|
|
|
|
/** Trusted Application call groups */
|
|
#define TZ_SVC_APP_ID_PLACEHOLDER 0 /* SVC bits will be empty */
|
|
|
|
/** @} */ /* end_namegroup Service IDs */
|
|
|
|
/** @} */ /* end_addtogroup tz_macros_constants */
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* Command IDs
|
|
* -------------------------------------------------------------------------*/
|
|
|
|
/*----------------------------------------------------------------------------
|
|
PSCI Command IDs: Do not reuse
|
|
* -------------------------------------------------------------------------*/
|
|
#define PSCI_VERSION_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_STD, 0x0, 0x0)
|
|
#define CPU_SUSPEND_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_STD, 0x0, 0x1)
|
|
#define CPU_OFF_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_STD, 0x0, 0x2)
|
|
#define CPU_ON_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_STD, 0x0, 0x3)
|
|
#define AFFINITY_INFO_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_STD, 0x0, 0x4)
|
|
#define MIGRATE_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_STD, 0x0, 0x5)
|
|
#define MIGRATE_INFO_TYPE_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_STD, 0x0, 0x6)
|
|
#define MIGRATE_INFO_UP_CPU_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_STD, 0x0, 0x7)
|
|
#define SYSTEM_OFF_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_STD, 0x0, 0x8)
|
|
#define SYSTEM_RESET_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_STD, 0x0, 0x9)
|
|
#define CPU_FREEZE \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_STD, 0x0, 0xB)
|
|
#define CPU_DEFAULT_SUSPEND \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_STD, 0x0, 0xC)
|
|
|
|
|
|
/*----------------------------------------------------------------------------
|
|
Deprecated Command IDs: Do not reuse
|
|
* -------------------------------------------------------------------------*/
|
|
#define TZ_SET_BOOT_ADDR_OLD_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_BOOT, 0x01)
|
|
|
|
/**
|
|
@ingroup terminate_pwr_collapse
|
|
|
|
Called to terminate power collapse. The QSEE configures the
|
|
processor, then issues the Wait For Interrupt (WFI) instruction.
|
|
|
|
@note1hang Implementation takes place entirely in Monitor mode.
|
|
|
|
@smc_id
|
|
0x02000102
|
|
|
|
@param_id
|
|
0x00000001
|
|
|
|
@return
|
|
None.
|
|
*/
|
|
#define TZ_POWER_COLLAPSE_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_BOOT, 0x02)
|
|
|
|
#define TZ_POWER_COLLAPSE_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_1( TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
|
|
|
|
/*----------------------------------------------------------------------------
|
|
Deprecated Command IDs: Do not reuse
|
|
* -------------------------------------------------------------------------*/
|
|
#define TZ_BOOT_DEPRECATED_0 \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_BOOT, 0x03)
|
|
|
|
/**
|
|
@ingroup krait_errata_21_workaround_enable
|
|
|
|
Monitor call to enable the Krait errata #21 workaround. This
|
|
workaround sets BPCR[FBHTD]=1 and does the required branch
|
|
predictor maintenance.
|
|
|
|
@note1hang Implementation takes place entirely in Monitor mode.
|
|
|
|
@smc_id
|
|
0x02000104
|
|
|
|
@param_id
|
|
0x00000000
|
|
|
|
@return
|
|
E_SUCCESS (always).
|
|
*/
|
|
#define TZ_KRAIT_ERRATA_21_WORKAROUND_ENABLE_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_BOOT, 0x04)
|
|
|
|
#define TZ_KRAIT_ERRATA_21_WORKAROUND_ENABLE_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_0
|
|
|
|
/**
|
|
@ingroup cpu_config
|
|
|
|
Cold and warm boot time CPU configuration service.
|
|
|
|
@smc_id
|
|
0x02000105
|
|
|
|
@param_id
|
|
0x00000004
|
|
|
|
@sys_call_params{tz_cpu_config_req_s}
|
|
@table{weak__tz__cpu__config__req__s}
|
|
|
|
@return
|
|
Zero on success; a negative value on failure.
|
|
*/
|
|
#define TZ_CPU_CONFIG_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_BOOT, 0x05)
|
|
|
|
#define TZ_CPU_CONFIG_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_4( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup cpu_config_query
|
|
|
|
Service for querying CPU configuration.
|
|
|
|
@smc_id
|
|
0x02000106
|
|
|
|
@param_id
|
|
0x00002004
|
|
|
|
@sys_call_req_params{tz_cpu_config_query_req_s}
|
|
@table{weak__tz__cpu__config__query__req__s}
|
|
|
|
@sys_call_rsp_params{tz_cpu_config_query_rsp_s}
|
|
@table{weak__tz__cpu__config__query__rsp__s}
|
|
|
|
@return
|
|
Zero on success; a negative value on failure.
|
|
*/
|
|
#define TZ_CPU_CONFIG_QUERY_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_BOOT, 0x06)
|
|
|
|
#define TZ_CPU_CONFIG_QUERY_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_4( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup secure_wdog_disable
|
|
|
|
Subroutine used by the HLOS to disable, or enable, the secure watchdog.
|
|
This call is a NOP when debug functionality is disabled.
|
|
|
|
@smc_id
|
|
0x02000107
|
|
|
|
@param_id
|
|
0x00000001
|
|
|
|
@sys_call_params{tz_secure_wdog_disable_req_s}
|
|
@table{weak__tz__secure__wdog__disable__req__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_SECURE_WDOG_DISABLE_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_BOOT, 0x07)
|
|
|
|
#define TZ_SECURE_WDOG_DISABLE_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_1( TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup secure_wdog_trigger
|
|
|
|
Subroutine used by the HLOS to trigger a secure watchdog and reset
|
|
the device. This call is a NOP when debug functionality is
|
|
disabled.
|
|
|
|
@smc_id
|
|
0x02000108
|
|
|
|
@param_id
|
|
0x00000001
|
|
|
|
@sys_call_params{tz_secure_wdog_trigger_req_s}
|
|
@table{weak__tz__secure__wdog__trigger__req__s}
|
|
|
|
@return
|
|
An error code if parameters are invalid or watchdog
|
|
reset is not permitted; does not return otherwise.
|
|
*/
|
|
#define TZ_SECURE_WDOG_TRIGGER_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_BOOT, 0x08)
|
|
|
|
#define TZ_SECURE_WDOG_TRIGGER_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_1( TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup config_hw_for_offline_ram_dump
|
|
|
|
Subroutine used by the HLOS to configure hardware registers
|
|
BOOT_PARTITION_SELECT and WDOG_DEBUG_EN for an offline RAM dump.
|
|
|
|
@smc_id
|
|
0x02000109
|
|
|
|
@param_id
|
|
0x00000002
|
|
|
|
@sys_call_params{tz_config_hw_for_ram_dump_req_s}
|
|
@table{weak__tz__config__hw__for__ram__dump__req__s}
|
|
|
|
@return
|
|
Zero on success; an error code if parameters are invalid or if xPU
|
|
reconfiguration is not permitted.
|
|
*/
|
|
#define TZ_CONFIG_HW_FOR_RAM_DUMP_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_BOOT, 0x09)
|
|
|
|
#define TZ_CONFIG_HW_FOR_RAM_DUMP_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup video_cpu_set_state
|
|
|
|
Controls changing the state of the Venus core (e.g. suspend/resume),
|
|
without full subsystem restarts
|
|
|
|
@smc_id
|
|
0x0200010a
|
|
|
|
@param_id
|
|
0x00000002
|
|
|
|
@sys_call_params{tz_video_set_state_req_s}
|
|
@table{weak__tz__video__set__state__req__s}
|
|
|
|
@sys_call_params{tz_video_set_state_rsp_s}
|
|
@table{weak__tz__video__set__state__rsp__s}
|
|
|
|
@return
|
|
Zero on success; negative value on failure.
|
|
*/
|
|
#define TZ_VIDEO_SET_STATE_ID TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_BOOT, 0x0A)
|
|
|
|
#define TZ_VIDEO_SET_STATE_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup lock_xpu_peripheral
|
|
|
|
Subroutine used by external bootloaders to request TZ to lock
|
|
peripheral image area
|
|
|
|
@smc_id
|
|
0x0200010b
|
|
|
|
@param_id
|
|
0x00000003
|
|
|
|
@sys_call_params{tz_lock_xpu_s}
|
|
@table{weak__tz__lock__xpu__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_XPU_LOCK_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_BOOT, 0x0b)
|
|
|
|
/* TODO Syscall does not exist */
|
|
#define TZ_XPU_LOCK_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_3( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup spin_with_irqs_fiqs_disabled
|
|
|
|
If secure watchdog debug is allowed, calling this syscall masks IRQs and
|
|
FIQs and starts spinning in TZ and won't return. If secure watchdog debug is
|
|
not allowed, the call will return without side effects.
|
|
|
|
@smc_id
|
|
0x0200010D
|
|
|
|
@param_id
|
|
0x00000001
|
|
|
|
@sys_call_params{tz_spin_with_irqs_fiqs_disabled_s}
|
|
@table{weak__tz__spin__with__irqs__fiqs__disabled__s}
|
|
|
|
@return
|
|
Zero on success; an error code if parameters are invalid or if xPU
|
|
reconfiguration is not permitted.
|
|
*/
|
|
|
|
#define TZ_SPIN_WITH_IRQS_FIQS_DISABLED_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_BOOT, 0x0D)
|
|
|
|
#define TZ_SPIN_WITH_IRQS_FIQS_DISABLED_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_1( TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup set_milestone
|
|
|
|
Subroutine used by external bootloaders to indicate the end
|
|
of the bootloading stage, which is the beginning of HLOS booting.
|
|
|
|
@smc_id
|
|
0x0200010E
|
|
|
|
@param_id
|
|
0x00000003
|
|
|
|
@sys_call_params{tz_set_milestone_s}
|
|
@table{weak__tz__set__milestone__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_MILESTONE_SET_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_BOOT, 0x0E)
|
|
|
|
#define TZ_MILESTONE_SET_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_3( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup Do mode switch
|
|
|
|
Used by Apps BL to switch EL1 mode to A64
|
|
|
|
@smc_id
|
|
0x0000010F
|
|
|
|
@param_id
|
|
0x00000012
|
|
|
|
@sys_call_params{tz_do_modeswitch_s}
|
|
@table{weak__tz__do__modeswitch__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_DO_MODE_SWITCH \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_BOOT, 0x0F)
|
|
|
|
#define TZ_DO_MODE_SWITCH_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RO, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/*----------------------------------------------------------------------------
|
|
Deprecated Command IDs: Do not reuse
|
|
* -------------------------------------------------------------------------*/
|
|
/* Functionality moved to Secure IO syscall for atomicity */
|
|
#define TZ_FORCE_DLOAD_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_BOOT, 0x10)
|
|
|
|
#define TZ_FORCE_DLOAD_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup set_boot_addr
|
|
|
|
Sets the address of execution for the nonsecure execution
|
|
environment after a CPU is brought out of reset.
|
|
|
|
@smc_id
|
|
0x02000111
|
|
|
|
@param_id
|
|
0x00000006
|
|
|
|
@sys_call_params{tz_set_boot_addr_s}
|
|
@table{weak__tz__set__boot__addr__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_SET_BOOT_ADDR_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_BOOT, 0x11)
|
|
|
|
#define TZ_SET_BOOT_ADDR_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_6( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@weakgroup weak_tz_get_ablfv_entry_point_rsp_s
|
|
@{
|
|
*/
|
|
/**
|
|
@ingroup get_ablfv_entry_point
|
|
|
|
Get the entry point of the Apps Boot Loader Firmware Volume
|
|
(ABL.FV) image for UEFI. Can only be called once per cold boot.
|
|
|
|
@smc_id
|
|
0x02000113
|
|
|
|
@param_id
|
|
0x00000000
|
|
|
|
@sys_call_params{tz_get_ablfv_entry_point_rsp_s}
|
|
@table{weak__tz__get__ablfv__entry__point__rsp__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_GET_IMAGE_ENTRY_POINT_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_BOOT, 0x13)
|
|
|
|
#define TZ_GET_IMAGE_ENTRY_POINT_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_0
|
|
|
|
/**
|
|
@ingroup init_image_syscall
|
|
|
|
Verifies whether the memory at the specified Executable and Linkable
|
|
Format (ELF) header pointer is a valid ELF file. Once that has been
|
|
verified, the QSEE copies the ELF header, program header, and hash
|
|
segment into secure memory.
|
|
|
|
@smc_id
|
|
0x02000201
|
|
|
|
@param_id
|
|
0x00000082
|
|
|
|
@sys_call_params{tz_pil_init_req_s}
|
|
@table{weak__tz__pil__init__req__s}
|
|
|
|
@return
|
|
Zero on success; a negative value on failure.
|
|
*/
|
|
#define TZ_PIL_INIT_ID TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_PIL, 0x01)
|
|
|
|
#define TZ_PIL_INIT_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_BUF_RW )
|
|
|
|
/**
|
|
@ingroup get_pil_mem_usage
|
|
|
|
Confirms whether the memory region used to load the specified
|
|
peripheral image matches the static region that the QSEE supports
|
|
for the specified region, and that the region is appropriate for the
|
|
ELF header specified in the secure Peripheral Image Loader (PIL)
|
|
initialization call.
|
|
|
|
@smc_id
|
|
0x02000202
|
|
|
|
@param_id
|
|
0x00000003
|
|
|
|
@sys_call_params{tz_pil_mem_req_s}
|
|
@table{weak__tz__pil__mem__req__s}
|
|
|
|
@return
|
|
Zero on success; a negative value on failure.
|
|
*/
|
|
#define TZ_PIL_MEM_ID TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_PIL, 0x02)
|
|
|
|
#define TZ_PIL_MEM_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_3( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/** @cond */
|
|
|
|
/*----------------------------------------------------------------------------
|
|
Deprecated Command IDs: Do not reuse
|
|
* -------------------------------------------------------------------------*/
|
|
#define TZ_PIL_DEPRECATED_0 TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_PIL, 0x03)
|
|
#define TZ_PIL_DEPRECATED_1 TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_PIL, 0x04)
|
|
/** @endcond */
|
|
|
|
/**
|
|
@ingroup auth_reset
|
|
|
|
Authenticates and releases the specified peripheral from reset.
|
|
The QSEE also protects the memory region for the specified
|
|
peripheral image with a Memory Protection Unit (MPU).
|
|
|
|
@smc_id
|
|
0x02000205
|
|
|
|
@param_id
|
|
0x00000001
|
|
|
|
@sys_call_params{tz_pil_auth_reset_req_s}
|
|
@table{weak__tz__pil__auth__reset__req__s}
|
|
|
|
@return
|
|
Zero on success; a negative value on failure.
|
|
*/
|
|
#define TZ_PIL_AUTH_RESET_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_PIL, 0x05)
|
|
|
|
#define TZ_PIL_AUTH_RESET_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_1( TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup unlock_xpu
|
|
|
|
Stops the specified peripheral, then clears the peripheral image
|
|
location and unlocks the memory area occupied by that region.
|
|
|
|
@smc_id
|
|
0x02000206
|
|
|
|
@param_id
|
|
0x00000001
|
|
|
|
@sys_call_params{tz_pil_unlock_req_s}
|
|
@table{weak__tz__pil__unlock__req__s}
|
|
|
|
@return
|
|
Zero on success; a negative value on failure.
|
|
*/
|
|
#define TZ_PIL_UNLOCK_XPU_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_PIL, 0x06)
|
|
|
|
#define TZ_PIL_UNLOCK_XPU_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_1( TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup is_subsys_supported
|
|
|
|
Queries whether the QSEE supports secure PIL for a specified
|
|
subsystem.
|
|
|
|
@smc_id
|
|
0x02000207
|
|
|
|
@param_id
|
|
0x00000001
|
|
|
|
@sys_call_req_params{tz_pil_subsystem_query_req_s}
|
|
@table{weak__tz__pil__subsystem__query__req__s}
|
|
|
|
@sys_call_rsp_params{tz_pil_subsystem_query_rsp_s}
|
|
@table{weak__tz__pil__subsystem__query__rsp__s}
|
|
|
|
@return
|
|
E_SUCCESS if the request was successful; an error code otherwise.
|
|
*/
|
|
#define TZ_PIL_IS_SUBSYS_SUPPORTED_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_PIL, 0x07)
|
|
|
|
#define TZ_PIL_IS_SUBSYS_SUPPORTED_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_1( TZ_SYSCALL_PARAM_TYPE_VAL)
|
|
|
|
/**
|
|
@ingroup is_subsys_mandated
|
|
|
|
Queries whether QSEE security settings make it secure to the point
|
|
where a PIL is required for the specified subsystem.
|
|
|
|
@smc_id
|
|
0x02000208
|
|
|
|
@param_id
|
|
0x00000001
|
|
|
|
@sys_call_params
|
|
Same request and response parameters as for
|
|
#TZ_PIL_IS_SUBSYS_SUPPORTED_ID.
|
|
|
|
@return
|
|
E_SUCCESS if the request was successful; an error code otherwise.
|
|
*/
|
|
#define TZ_PIL_IS_SUBSYS_MANDATED_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_PIL, 0x08)
|
|
|
|
#define TZ_PIL_IS_SUBSYS_MANDATED_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_1( TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup get_mem_area
|
|
|
|
Queries the start and end addresses in which subsystems are allowed
|
|
to be loaded.
|
|
|
|
@smc_id
|
|
0x02000209
|
|
|
|
@param_id
|
|
0x00000001
|
|
|
|
@sys_call_req_params{tz_pil_mem_area_query_req_s}
|
|
@table{weak__tz__pil__mem__area__query__req__s}
|
|
|
|
@sys_call_rsp_params{tz_pil_mem_area_query_rsp_s}
|
|
@table{weak__tz__pil__mem__area__query__rsp__s}
|
|
|
|
@return
|
|
E_SUCCESS if the request was successful; error code otherwise.
|
|
*/
|
|
#define TZ_PIL_GET_MEM_AREA_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_PIL, 0x09)
|
|
|
|
#define TZ_PIL_GET_MEM_AREA_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_1( TZ_SYSCALL_PARAM_TYPE_VAL)
|
|
|
|
/**
|
|
@ingroup tzbsp_pil_modem_restart
|
|
|
|
System call for modem start and stop. This is 8916
|
|
specific but added in pil group on HLOS request.
|
|
|
|
@smc_id
|
|
0x0200020A
|
|
|
|
@param_id
|
|
0x00000002
|
|
|
|
@sys_call_params{tz_pil_modem_restart_req_s}
|
|
@table{weak__tz__pil__modem__restart__req__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; a negative value on failure.
|
|
*/
|
|
|
|
#define TZ_PIL_MSS_RESTART_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_PIL, 0x0A)
|
|
|
|
#define TZ_PIL_MSS_RESTART_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
|
|
/**
|
|
@ingroup share_memory
|
|
|
|
Configures xPUs to share/unshare HLOS memory with a specified subsystem.
|
|
|
|
@smc_id
|
|
0x0200020B
|
|
|
|
@param_id
|
|
0x00000004
|
|
|
|
@sys_call_params{tz_pil_share_memory_s}
|
|
@table{weak__tz__pil__share_memory__req__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; a negative value on failure.
|
|
*/
|
|
#define TZ_PIL_SHARE_MEMORY_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_PIL, 0x0B)
|
|
|
|
#define TZ_PIL_SHARE_MEMORY_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_4( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/*
|
|
Deprecated: This command is no longer supported.
|
|
*/
|
|
#define TZ_DUMP_WRITE_LPASS_QDSP6_NMI_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_DUMP, 0x01)
|
|
|
|
/**
|
|
@ingroup set_wdt_buff_addr
|
|
|
|
System call for the nonsecure side to set the Watchdog Timer (WDT)
|
|
reset context dump buffer address.
|
|
|
|
@smc_id
|
|
0x02000302
|
|
|
|
@param_id
|
|
0x00000022
|
|
|
|
@sys_call_params{tz_dump_set_cpu_ctx_buf_req_s}
|
|
@table{weak__tz__dump__set__cpu__ctx__buf__req__s}
|
|
|
|
@return
|
|
E_SUCCESS if the call succeeded; an error code otherwise.
|
|
*/
|
|
#define TZ_DUMP_SET_CPU_CTX_BUF_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_DUMP, 0x02)
|
|
|
|
#define TZ_DUMP_SET_CPU_CTX_BUF_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/*
|
|
Deprecated: Use of this command is no longer supported
|
|
*/
|
|
#define TZ_DUMP_WRITE_MSS_QDSP6_NMI_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_DUMP, 0x03)
|
|
|
|
/**
|
|
@ingroup set_l1_dump_buffer
|
|
|
|
System call for the nonsecure side to set the L1 dump buffer address.
|
|
|
|
@smc_id
|
|
0x02000304
|
|
|
|
@param_id
|
|
0x00000022
|
|
|
|
@sys_call_params{tz_dump_set_cache_buf_req_s}
|
|
@table{weak__tz__dump__set__cache__buf__req__s}
|
|
|
|
@return
|
|
E_SUCCESS if the call succeeded; an error code otherwise.
|
|
*/
|
|
#define TZ_DUMP_SET_L1_DUMP_BUF_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_DUMP, 0x04)
|
|
|
|
#define TZ_DUMP_SET_L1_DUMP_BUF_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup cache_dump_request
|
|
|
|
Monitor call to request L0/L1/L2 cache dumping. Cache
|
|
dumping is ignored if fuse settings indicate that secure boot
|
|
is enabled or debug is disabled.
|
|
|
|
A request to dump L0/L1 is assumed to indicate a fatal error condition
|
|
in the nonsecure side. D-caches are not cleared before resetting the
|
|
device. Entry to Download mode is controlled by the Download mode
|
|
magic numbers that are controlled by the HLOS.
|
|
|
|
@note1hang Implementation takes place entirely in Monitor mode. \n
|
|
@note1hang This command uses a register-based QSEE interface.
|
|
|
|
@smc_id
|
|
0x02000305
|
|
|
|
@param_id
|
|
0x00000001
|
|
|
|
@param[in] 0 -- Handle an L1 dump request similar to a WDT bark,
|
|
resulting in an L0/L1 cache dump, CPU context dumps
|
|
and a device reset. \n
|
|
1 -- Dump the L1 cache and return to the HLOS only after
|
|
the dump is done. \n
|
|
2 -- Only dump the L2 cache and return to HLOS after the
|
|
dump is done. \n
|
|
Any other value for r2 returns -4 (E_NOT_SUPPORTED).
|
|
|
|
@return
|
|
E_SUCCESS if the call succeeded; an error code otherwise.
|
|
*/
|
|
#define TZ_DUMP_REQUEST_CACHE_DUMP_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_DUMP, 0x05)
|
|
|
|
#define TZ_DUMP_REQUEST_CACHE_DUMP_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_1( TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup query_l1_buffer_size
|
|
|
|
System call for the nonsecure side to query the L1 dump buffer size.
|
|
|
|
@smc_id
|
|
0x02000306
|
|
|
|
@param_id
|
|
0x00000083
|
|
|
|
@sys_call_req_params{tz_dump_query_cache_buf_size_req_s}
|
|
@table{weak__tz__dump__query__cache__buf__size__req__s}
|
|
|
|
@sys_call_rsp_params{tz_dump_query_cache_buf_size_rsp_s}
|
|
@table{weak__tz__dump__query__cache__buf__size__rsp__s}
|
|
|
|
@return
|
|
E_SUCCESS if the call succeeded; an error code otherwise.
|
|
*/
|
|
#define TZ_DUMP_QUERY_L1_DUMP_BUF_SIZE_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_DUMP, 0x06)
|
|
|
|
#define TZ_DUMP_QUERY_L1_DUMP_BUF_SIZE_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_3( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_BUF_RW, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup set_l2_dump_buffer
|
|
|
|
System call for for the nonsecure side to set the L2 dump buffer address.
|
|
|
|
@smc_id
|
|
0x02000307
|
|
|
|
@param_id
|
|
0x00000002
|
|
|
|
@sys_call_params{tz_dump_set_cache_buf_req_s}
|
|
@table{weak__tz__dump__set__cache__buf__req__s}
|
|
|
|
@return
|
|
E_SUCCESS if the call succeeded; an error code otherwise.
|
|
*/
|
|
#define TZ_DUMP_SET_L2_DUMP_BUF_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_DUMP, 0x07)
|
|
|
|
#define TZ_DUMP_SET_L2_DUMP_BUF_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup query_l2_buffer_size
|
|
|
|
System call for the nonsecure side to query the L2 dump buffer size.
|
|
|
|
@smc_id
|
|
0x02000308
|
|
|
|
@param_id
|
|
0x00000083
|
|
|
|
@sys_call_req_params{tz_dump_query_cache_buf_size_req_s}
|
|
@table{weak__tz__dump__query__cache__buf__size__req__s}
|
|
|
|
@sys_call_rsp_params{tz_dump_query_cache_buf_size_rsp_s}
|
|
@table{weak__tz__dump__query__cache__buf__size__rsp__s}
|
|
|
|
@return
|
|
SUCCESS if the call succeeded; an error code otherwise.
|
|
*/
|
|
#define TZ_DUMP_QUERY_L2_DUMP_BUF_SIZE_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_DUMP, 0x08)
|
|
|
|
#define TZ_DUMP_QUERY_L2_DUMP_BUF_SIZE_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_3( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_BUF_RW, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup set_ocmem_dump_buf
|
|
|
|
System call for the nonsecure side to set the OCMEM dump buffer address.
|
|
|
|
@smc_id
|
|
0x02000309
|
|
|
|
@param_id
|
|
0x00000022
|
|
|
|
@sys_call_req_params{tz_dump_set_ocmem_buf_req_s}
|
|
@table{weak__tz__dump__set__ocmem__buf__req__s}
|
|
|
|
@return
|
|
SUCCESS if the call succeeded; an error code otherwise.
|
|
*/
|
|
#define TZ_DUMP_SET_OCMEM_DUMP_BUF_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_DUMP, 0x09)
|
|
|
|
#define TZ_DUMP_SET_OCMEM_DUMP_BUF_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup query_ocmem_dump_buf_size
|
|
|
|
System call for the nonsecure side to query the OCMEM dump buffer size.
|
|
|
|
@smc_id
|
|
0x0200030A
|
|
|
|
@param_id
|
|
0x00000083
|
|
|
|
@sys_call_req_params{tz_dump_query_ocmem_buf_size_req_s}
|
|
@table{weak__tz__dump__query__ocmem__buf__size__req__s}
|
|
|
|
@sys_call_rsp_params{tz_dump_query_ocmem_buf_size_rsp_s}
|
|
@table{weak__tz__dump__query__ocmem__buf__size__rsp__s}
|
|
|
|
@return
|
|
SUCCESS if the call succeeded; an error code otherwise.
|
|
*/
|
|
#define TZ_DUMP_QUERY_OCMEM_DUMP_BUF_SIZE_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_DUMP, 0x0A)
|
|
|
|
#define TZ_DUMP_QUERY_OCMEM_DUMP_BUF_SIZE_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_3( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_BUF_RW, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup security_allows_mem_dump
|
|
|
|
System call for the SBL to determine whether memory dumping
|
|
(i.e., DLOAD mode) is allowed.
|
|
|
|
@smc_id
|
|
0x0200030b
|
|
|
|
@param_id
|
|
0x00000022
|
|
|
|
@sys_call_req_params{tz_security_allows_mem_dump_legacy_req_s}
|
|
@table{weak__tz__security__allows__mem__dump__legacy__req__s}
|
|
|
|
@return
|
|
SUCCESS if the call succeeded; an error code otherwise.
|
|
*/
|
|
#define TZ_DUMP_SECURITY_ALLOWS_MEM_DUMP_LEGACY_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_DUMP, 0x0B)
|
|
|
|
#define TZ_DUMP_SECURITY_ALLOWS_MEM_DUMP_LEGACY_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup smmu_dump_fault_syndrome
|
|
|
|
System call for dumping the SMMU fault syndrome registers.
|
|
|
|
@note1hang
|
|
SMMU clocks must be ON.
|
|
|
|
@smc_id
|
|
0x0200030c
|
|
|
|
@param_id
|
|
0x00000204
|
|
|
|
@sys_call_req_params{tz_smmu_fault_regs_dump_req_s}
|
|
@table{weak__tzbsp__smmu__fault__regs__dump__req__s}
|
|
|
|
@return
|
|
SUCCESS if the call succeeded; error code otherwise.
|
|
*/
|
|
#define TZ_DUMP_SMMU_FAULT_REGS_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_DUMP, 0x0C)
|
|
|
|
#define TZ_DUMP_SMMU_FAULT_REGS_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_4( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup security_is_retail_unlock
|
|
|
|
System call for the SBL to determine whether retail unlock is enable.
|
|
|
|
@smc_id
|
|
0x0200030d
|
|
|
|
@param_id
|
|
0x00000022
|
|
|
|
@sys_call_req_params{tz_security_is_retail_unlock_req_s}
|
|
@table{weak__tz__security__is__retail__unlock__req__s}
|
|
|
|
@return
|
|
SUCCESS if the call succeeded; an error code otherwise.
|
|
*/
|
|
#define TZ_DUMP_IS_RETAIL_UNLOCK_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_DUMP, 0x0D)
|
|
|
|
#define TZ_DUMP_IS_RETAIL_UNLOCK_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup
|
|
|
|
System call for UEFI to dump the TZ diag.
|
|
|
|
@smc_id
|
|
0x0200030e
|
|
|
|
@param_id
|
|
0x00000002
|
|
|
|
@sys_call_req_params{tz_set_address_to_dump_tz_diag_for_uefi_req_s}
|
|
@table{weak__tz__set__address__to__dump__tz__diag__for__uefi__req__s}
|
|
|
|
@return
|
|
SUCCESS if the call succeeded; an error code otherwise.
|
|
*/
|
|
|
|
#define TZ_DUMP_SET_ADDRESS_TO_DUMP_TZ_DIAG_FOR_UEFI \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_DUMP, 0x0E)
|
|
|
|
#define TZ_DUMP_SET_ADDRESS_TO_DUMP_TZ_DIAG_FOR_UEFI_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup tzbsp_rpm_online_dump
|
|
|
|
Notification to RPM to make its memory available to read by HLOS
|
|
without resetting the device.
|
|
|
|
@smc_id
|
|
0x02000c0f
|
|
|
|
@param_id
|
|
0x00000001
|
|
|
|
@sys_call_req_params{tz_rpm_online_dump_req_s}
|
|
@table{weak__tz__rpm__online__dump__req__s}
|
|
|
|
@return
|
|
SUCCESS if the call succeeded; an error code otherwise.
|
|
*/
|
|
#define TZ_DUMP_RPM_ONLINE_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_DUMP, 0x0F)
|
|
|
|
#define TZ_DUMP_RPM_ONLINE_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_1( TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup security_allows_mem_dump
|
|
|
|
System call for the SBL to determine whether memory dumping
|
|
(i.e., DLOAD mode) is allowed.
|
|
|
|
@smc_id
|
|
0x0200030f
|
|
|
|
@param_id
|
|
0x00000000
|
|
|
|
@sys_call_rsp_params{tz_security_allows_mem_dump_rsp_s}
|
|
@table{weak__tz__security__allows__mem__dump__rsp__s}
|
|
|
|
@return
|
|
SUCCESS if the call succeeded; an error code otherwise.
|
|
*/
|
|
#define TZ_DUMP_SECURITY_ALLOWS_MEM_DUMP_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_DUMP, 0x10)
|
|
|
|
#define TZ_DUMP_SECURITY_ALLOWS_MEM_DUMP_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_0
|
|
|
|
|
|
/**
|
|
@ingroup lock_shared_resource
|
|
|
|
Locks a shared hardware resource.
|
|
|
|
@smc_id
|
|
0x02000401
|
|
|
|
@param_id
|
|
0x00000000
|
|
|
|
@sys_call_req_params{tz_lock_resource_req_s}
|
|
@table{weak__tz__lock__resource__req__s}
|
|
|
|
@sys_call_rsp_params{tz_lock_resource_rsp_s}
|
|
@table{weak__tz__lock__resource__rsp__s}
|
|
|
|
@return
|
|
Zero if the return code status is filled. \n
|
|
E_BAD_ADDRESS if the return parameter address is bad or wrong. \n
|
|
E_NOT_SUPPORTED if the wrong resource type is passed. \n
|
|
E_INVALID_ARG if the lock is not a value of 0 or 1.
|
|
*/
|
|
#define TZ_RESOURCE_LOCK_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_RES_LOCKING, 0x01)
|
|
|
|
/* TODO Syscall does not exist */
|
|
#define TZ_RESOURCE_LOCK_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_0
|
|
|
|
/**
|
|
@ingroup change_resource_config
|
|
|
|
System call to change resource configuration dynamically.
|
|
|
|
@smc_id
|
|
0x02000402
|
|
|
|
@param_id
|
|
0x00000002
|
|
|
|
@sys_call_params{tz_config_resource_req_s}
|
|
@table{weak__tz__config__resource__req__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_RESOURCE_CONFIG_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_RES_LOCKING, 0x02)
|
|
|
|
#define TZ_RESOURCE_CONFIG_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup blsp_modify_ownership
|
|
|
|
@smc_id
|
|
0x02000403
|
|
|
|
@param_id
|
|
0x00000002
|
|
|
|
@sys_call_req_params{tz_modify_ownership_req_s}
|
|
@table{weak__tz__modify__ownership__req__s}
|
|
|
|
@return
|
|
E_SUCCESS if success; else error code.
|
|
*/
|
|
#define TZ_BLSP_MODIFY_OWNERSHIP_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_RES_LOCKING, 0x03)
|
|
|
|
#define TZ_BLSP_MODIFY_OWNERSHIP_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup unlock_debug_register
|
|
|
|
System call to unlock debug register for QDSS
|
|
|
|
@note1hang TZ will keep a persistent vote on QDSS clocks after calling this API
|
|
|
|
@smc_id
|
|
0x02001004
|
|
|
|
@param_id
|
|
0x00000000
|
|
|
|
@return
|
|
E_SUCCESS on success
|
|
*/
|
|
#define TZ_UNLOCK_DBG_REG \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_RES_LOCKING, 0x04)
|
|
|
|
#define TZ_UNLOCK_DBG_REG_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_0
|
|
|
|
|
|
/**
|
|
@ingroup io_access_read
|
|
|
|
Allows reading of memory areas that fall under Memory/Area/Register
|
|
Protection Unit (xPU) protection but do not need to be secured.
|
|
|
|
@note1hang Implementation takes place entirely in Monitor mode. \n
|
|
|
|
@smc_id
|
|
0x02000501
|
|
|
|
@param_id
|
|
0x00000001
|
|
|
|
@param[in] Address to be read.
|
|
@param[out] Value at that address.
|
|
|
|
@return
|
|
Zero on success, negative otherwise.
|
|
*/
|
|
#define TZ_IO_ACCESS_READ_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_IO_ACCESS, 0x01)
|
|
|
|
#define TZ_IO_ACCESS_READ_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_1( TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup io_access_write
|
|
|
|
Allows writing to memory areas that fall under xPU protection
|
|
but do not need to be secured.
|
|
|
|
@note1hang Implementation takes place entirely in Monitor mode. \n
|
|
|
|
@smc_id
|
|
0x02000502
|
|
|
|
@param_id
|
|
0x00000002
|
|
|
|
@param[in] Address to be written.
|
|
@param[in] Value to write to address.
|
|
|
|
@return
|
|
E_INVALID_ARG on failure; zero otherwise.
|
|
*/
|
|
#define TZ_IO_ACCESS_WRITE_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_IO_ACCESS, 0x02)
|
|
|
|
#define TZ_IO_ACCESS_WRITE_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/*
|
|
* Reserved ID.
|
|
*/
|
|
#define TZ_IO_ACCESS_RESERVED_3_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_IO_ACCESS, 0x03)
|
|
|
|
/*
|
|
* Reserved ID.
|
|
*/
|
|
#define TZ_IO_ACCESS_RESERVED_4_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_IO_ACCESS, 0x04)
|
|
|
|
/**
|
|
@ingroup is_svc_avail
|
|
|
|
Checks if a system call is available.
|
|
|
|
@smc_id
|
|
0x02000601
|
|
|
|
@param_id
|
|
0x00000001
|
|
|
|
@sys_call_req_params{tz_info_is_svc_available_req_s}
|
|
@table{weak__tz__info__is__svc__available__req__s}
|
|
|
|
@sys_call_rsp_params{tz_info_is_svc_available_rsp_s}
|
|
@table{weak__tz__info__is__svc__available__rsp__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_INFO_IS_SVC_AVAILABLE_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_INFO, 0x01)
|
|
|
|
#define TZ_INFO_IS_SVC_AVAILABLE_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_1(TZ_SYSCALL_PARAM_TYPE_VAL)
|
|
|
|
/**
|
|
@ingroup get_diag_info
|
|
|
|
Copies the QSEE software diagnostic region into the specified buffer.
|
|
|
|
@smc_id
|
|
0x02000602
|
|
|
|
@param_id
|
|
0x00000022
|
|
|
|
@sys_call_params{tz_info_get_diag_req_s}
|
|
@table{weak__tz__info__get__diag__req__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_INFO_GET_DIAG_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_INFO, 0x02)
|
|
|
|
#define TZ_INFO_GET_DIAG_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup get_feature_ver
|
|
|
|
Returns the current version of a specified QSEE feature.
|
|
|
|
@smc_id
|
|
0x02000603
|
|
|
|
@param_id
|
|
0x00000001
|
|
|
|
@sys_call_req_params{tz_feature_version_req_s}
|
|
@table{weak__tz__feature__version__req__s}
|
|
|
|
@sys_call_rsp_params{tz_feature_version_rsp_s}
|
|
@table{weak__tz__feature__version__rsp__s}
|
|
|
|
@returns
|
|
E_SUCCESS on success; a negative value on failure.
|
|
*/
|
|
#define TZ_INFO_GET_FEATURE_VERSION_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_INFO, 0x03)
|
|
|
|
#define TZ_INFO_GET_FEATURE_VERSION_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_1(TZ_SYSCALL_PARAM_TYPE_VAL)
|
|
|
|
|
|
/**
|
|
@ingroup tzos_register_log_buffer
|
|
|
|
Register the secure application log buffer.
|
|
|
|
@smc_id
|
|
0x32000106
|
|
|
|
@param_id
|
|
0x00000022
|
|
|
|
@sys_call_params{tz_os_register_log_buffer_req_s}
|
|
@table{weak__tz__os__register__log__buffer__req__s}
|
|
|
|
@sys_call_params{tz_os_rsp_s}
|
|
@table{weak__tz__os__rsp__s}
|
|
|
|
@return
|
|
Zero on success, negative value on failure.
|
|
*/
|
|
#define TZ_OS_REGISTER_LOG_BUFFER_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_QSEE_OS, TZ_SVC_APP_MGR, 0x06)
|
|
|
|
#define TZ_OS_REGISTER_LOG_BUFFER_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup tzos_deregister_log_buffer
|
|
|
|
Register the secure application log buffer.
|
|
|
|
@smc_id
|
|
0x3200010E
|
|
|
|
@param_id
|
|
0x00000000
|
|
|
|
@sys_call_params{tz_os_deregister_log_buffer_req_s}
|
|
@table{weak__tz__os__register__log__buffer__req__s}
|
|
|
|
@sys_call_params{tz_os_rsp_s}
|
|
@table{weak__tz__os__rsp__s}
|
|
|
|
@return
|
|
Zero on success, negative value on failure.
|
|
*/
|
|
#define TZ_OS_DEREGISTER_LOG_BUFFER_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_QSEE_OS, TZ_SVC_APP_MGR, 0x0E)
|
|
|
|
#define TZ_OS_DEREGISTER_LOG_BUFFER_ID_PARAM_ID TZ_SYSCALL_CREATE_PARAM_ID_0
|
|
|
|
/**
|
|
@ingroup get_secure_state
|
|
|
|
System call to check the security status of the system
|
|
|
|
@smc_id
|
|
0x02000604
|
|
|
|
@param_id
|
|
0x00000000
|
|
|
|
@sys_call_params{tz_get_secure_state_rsp_s}
|
|
@table{weak__tz__get__secure__state__rsp__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; a negative value on failure.
|
|
*/
|
|
#define TZ_INFO_GET_SECURE_STATE \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_INFO, 0x4)
|
|
|
|
#define TZ_INFO_GET_SECURE_STATE_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_0
|
|
|
|
/** TODO: Shifted to SVC_PIL. Remove this ID once APPS changes are promoted.
|
|
Changed ID from TZ_MSS_RESTART to TZBSP_MSS_RESTART to avoid compiler error.
|
|
@ingroup tzbsp_modem_restart
|
|
System call for modem start and stop. as this is 8916
|
|
specific, adding in miscellaneous group.
|
|
|
|
@smc_id
|
|
0x02000605
|
|
|
|
@param_id
|
|
0x00000002
|
|
|
|
@sys_call_params{tz_modem_restart_req_s}
|
|
@table{weak__tz__modem__restart__req__s}
|
|
|
|
@com_struct
|
|
tz_syscall_rsp_s
|
|
|
|
@return
|
|
E_SUCCESS on success; a negative value on failure.
|
|
*/
|
|
#define TZBSP_MSS_RESTART_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_INFO, 0x5)
|
|
|
|
#define TZBSP_MSS_RESTART_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL)
|
|
|
|
/**
|
|
@ingroup get_secure_state_legacy
|
|
|
|
System call to check the security status of the system.
|
|
|
|
@smc_id
|
|
0x02000604
|
|
|
|
@param_id
|
|
0x00000022
|
|
|
|
@sys_call_params{tz_get_secure_state_legacy_req_s}
|
|
@table{weak__tz__get__secure__state__legacy__req__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; a negative value on failure.
|
|
*/
|
|
#define TZ_INFO_GET_SECURE_STATE_LEGACY \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_INFO, 0x6)
|
|
|
|
#define TZ_INFO_GET_SECURE_STATE_LEGACY_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL)
|
|
|
|
/**
|
|
@ingroup decrypt_image
|
|
|
|
Parses the XML in the encrypted bootloader image and
|
|
decrypts the data in place.
|
|
|
|
@smc_id
|
|
0x02000701
|
|
|
|
@param_id
|
|
0x000000A2
|
|
|
|
@sys_call_params{tz_ssd_decrypt_img_req_s}
|
|
@table{weak__tz__ssd__decrypt__img__req__s}
|
|
|
|
@return
|
|
Zero on success; a negative value on failure.
|
|
*/
|
|
#define TZ_SSD_DECRYPT_IMG_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_SSD, 0x01)
|
|
|
|
#define TZ_SSD_DECRYPT_IMG_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_BUF_RW)
|
|
|
|
/**
|
|
@ingroup encrypt_keystore
|
|
|
|
Encrypts the keystore with a key derived from the Crypto Engine (CE)
|
|
hardware key.
|
|
|
|
@smc_id
|
|
0x02000702
|
|
|
|
@param_id
|
|
0x000000A2
|
|
|
|
@sys_call_params{tz_ssd_encrypt_keystore_req_s}
|
|
@table{weak__tz__ssd__encrypt__keystore__req__s}
|
|
|
|
@return
|
|
Zero on success; a negative value on failure.
|
|
*/
|
|
#define TZ_SSD_ENCRYPT_KEY_STORE_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_SSD, 0x02)
|
|
|
|
#define TZ_SSD_ENCRYPT_KEY_STORE_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_BUF_RW)
|
|
|
|
/*----------------------------------------------------------------------------
|
|
Deprecated Command ID: Do not reuse
|
|
* -------------------------------------------------------------------------*/
|
|
#define TZ_SSD_DEPRECATED_0 \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_SSD, 0x03)
|
|
|
|
/*----------------------------------------------------------------------------
|
|
Deprecated Command ID: Do not reuse
|
|
* -------------------------------------------------------------------------*/
|
|
#define TZ_SSD_DEPRECATED_1 \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_SSD, 0x04)
|
|
|
|
/**
|
|
@ingroup protect_keystore
|
|
|
|
Loads the Secure Software Download (SSD) keystore into the QSEE
|
|
software for future use.
|
|
|
|
@smc_id
|
|
0x02000705
|
|
|
|
@param_id
|
|
0x00000022
|
|
|
|
@sys_call_req_params{tz_ssd_protect_keystore_req_s}
|
|
@table{weak__tz__ssd__protect__keystore__req__s}
|
|
|
|
@sys_call_rsp_params{tz_ssd_protect_keystore_rsp_s}
|
|
@table{weak__tz__ssd__protect__keystore__rsp__s}
|
|
|
|
@return
|
|
Zero on success; a negative value on failure.
|
|
*/
|
|
#define TZ_SSD_PROTECT_KEYSTORE_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_SSD, 0x05)
|
|
|
|
#define TZ_SSD_PROTECT_KEYSTORE_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL)
|
|
|
|
/**
|
|
@ingroup parse_md
|
|
|
|
Parses the SSD XML header in a given encrypted image and stores the
|
|
resulting metadata to use for subsequent calls to decrypt image
|
|
fragments.
|
|
|
|
@smc_id
|
|
0x02000706
|
|
|
|
@param_id
|
|
0x00000082
|
|
|
|
@sys_call_req_params{tz_ssd_parse_md_req_s}
|
|
@table{weak__tz__ssd__parse__md__req__s}
|
|
|
|
@sys_call_rsp_params{tz_ssd_parse_md_rsp_info_s}
|
|
@table{weak__tz__ssd__parse__md__rsp__info__s}
|
|
|
|
@par Parse MD response structure (tz_ssd_parse_md_rsp_info_s)
|
|
@table{weak__tz__ssd__parse__md__rsp__info__s}
|
|
|
|
@return
|
|
Zero on success; a negative value on failure.
|
|
*/
|
|
#define TZ_SSD_PARSE_MD_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_SSD, 0x06)
|
|
|
|
#define TZ_SSD_PARSE_MD_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_BUF_RW )
|
|
|
|
/**
|
|
@ingroup decrypt_img_frag
|
|
|
|
Decrypts the data in place for a specified fragment of an encrypted image.
|
|
|
|
@smc_id
|
|
0x02000707
|
|
|
|
@param_id
|
|
0x00000804
|
|
|
|
@sys_call_req_params{tz_ssd_decrypt_img_frag_req_s}
|
|
@table{weak__tz__ssd__decrypt__img__frag__req__s}
|
|
|
|
@sys_call_rsp_params{tz_ssd_decrypt_frag_rsp_s}
|
|
@table{weak__tz__ssd__decrypt__frag__rsp__s}
|
|
|
|
@return
|
|
Zero on success; a negative value on failure.
|
|
*/
|
|
#define TZ_SSD_DECRYPT_IMG_FRAG_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_SSD, 0x07)
|
|
|
|
#define TZ_SSD_DECRYPT_IMG_FRAG_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_4( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_BUF_RW )
|
|
|
|
/**
|
|
@ingroup decrypt_elf_seg_frag
|
|
|
|
Decrypts the data in place for a specified ELF segment from an
|
|
encrypted image.
|
|
|
|
@sys_call_req_params{tz_ssd_decrypt_elf_seg_frag_req_s}
|
|
@table{weak__tz__ssd__decrypt__elf__seg__frag__req__s}
|
|
|
|
@sys_call_rsp_params{tz_ssd_decrypt_frag_rsp_s}
|
|
@table{weak__tz__ssd__decrypt__frag__rsp__s}
|
|
|
|
@smc_id
|
|
0x02000708
|
|
|
|
@param_id
|
|
0x00008006
|
|
|
|
@return
|
|
Zero on success; a negative value on failure.
|
|
*/
|
|
#define TZ_SSD_DECRYPT_ELF_SEG_FRAG_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_SSD, 0x08)
|
|
|
|
#define TZ_SSD_DECRYPT_ELF_SEG_FRAG_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_6( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_BUF_RW )
|
|
|
|
/**
|
|
@ingroup blow_sw_fuse
|
|
|
|
Changes the state of the software fuse.
|
|
|
|
@smc_id
|
|
0x02000801
|
|
|
|
@param_id
|
|
0x00000001
|
|
|
|
@sys_call_params{tz_sw_fuse_req_s}
|
|
@table{weak__tz__sw__fuse__req__s}
|
|
|
|
@com_struct
|
|
See #TZ_IS_SW_FUSE_BLOWN_ID for the response structure.
|
|
|
|
@return
|
|
Zero on success; a negative value on failure.
|
|
*/
|
|
#define TZ_BLOW_SW_FUSE_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_FUSE, 0x01)
|
|
|
|
#define TZ_BLOW_SW_FUSE_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_1( TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup is_sw_fuse_blown
|
|
|
|
Queries whether the specified software fuse has been blown.
|
|
|
|
@caution1hang This call is not thread safe.
|
|
|
|
@smc_id
|
|
0x02000802
|
|
|
|
@param_id
|
|
0x00000001
|
|
|
|
@sys_call_params{tz_sw_fuse_rsp_s}
|
|
@table{weak__tz__sw__fuse__rsp__s}
|
|
|
|
@com_struct
|
|
See #TZ_BLOW_SW_FUSE_ID for the request structure.
|
|
|
|
@return
|
|
Zero on success; a negative value on failure.
|
|
*/
|
|
#define TZ_IS_SW_FUSE_BLOWN_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_FUSE, 0x02)
|
|
|
|
#define TZ_IS_SW_FUSE_BLOWN_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_1( TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup write_qfprom_fuse
|
|
|
|
Writes a Qualcomm Field Programmable Read Only Memory (QFPROM) fuse row.
|
|
|
|
@smc_id
|
|
0x02000803
|
|
|
|
@param_id
|
|
0x00000884
|
|
|
|
@sys_call_params{tz_qfprom_write_row_s}
|
|
@table{weak__tz__qfprom__write__row__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; a negative value on failure.
|
|
*/
|
|
#define TZ_QFPROM_WRITE_ROW_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_FUSE, 0x03)
|
|
|
|
#define TZ_QFPROM_WRITE_ROW_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_4( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_BUF_RW, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_BUF_RW )
|
|
|
|
/**
|
|
@ingroup write_mult_qfprom_rows
|
|
|
|
Writes multiple rows of QFPROM fuses.
|
|
|
|
@note1hang This call is only available prior to a
|
|
#TZ_MILESTONE_SET_ID call.
|
|
|
|
@smc_id
|
|
0x02000804
|
|
|
|
@param_id
|
|
0x00000824
|
|
|
|
@sys_call_params{tz_qfprom_write_multiple_rows_s}
|
|
@table{weak__tz__qfprom__write__multiple__rows__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; a negative value on failure.
|
|
*/
|
|
#define TZ_QFPROM_WRITE_MULTIPLE_ROWS_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_FUSE, 0x04)
|
|
|
|
#define TZ_QFPROM_WRITE_MULTIPLE_ROWS_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_4( \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_BUF_RW )
|
|
|
|
/**
|
|
@ingroup read_qfprom_fuse
|
|
|
|
Reads QFPROM fuses.
|
|
|
|
@smc_id
|
|
0x02000805
|
|
|
|
@param_id
|
|
0x00000A04
|
|
|
|
@sys_call_params{tz_qfprom_read_row_s}
|
|
@table{weak__tz__qfprom__read__row__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; a negative value on failure.
|
|
*/
|
|
#define TZ_QFPROM_READ_ROW_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_FUSE, 0x05)
|
|
|
|
#define TZ_QFPROM_READ_ROW_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_4( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_BUF_RW )
|
|
|
|
/**
|
|
@ingroup write_rollback_qfprom_fuse
|
|
|
|
Write rollback-specific QFPROM fuses.
|
|
|
|
@note1hang This call is only available prior to a
|
|
#TZ_MILESTONE_SET_ID call.
|
|
|
|
@smc_id
|
|
0x02000806
|
|
|
|
@param_id
|
|
0x00000884
|
|
|
|
@sys_call_params{tz_qfprom_rollback_write_row_s}
|
|
@table{weak__tz__qfprom__rollback__write__row__s}
|
|
|
|
@com_struct
|
|
tz_syscall_rsp_s
|
|
|
|
@return
|
|
E_SUCCESS on success; a negative value on failure.
|
|
*/
|
|
#define TZ_QFPROM_ROLLBACK_WRITE_ROW_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_FUSE, 0x06)
|
|
|
|
#define TZ_QFPROM_ROLLBACK_WRITE_ROW_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_4( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_BUF_RW, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_BUF_RW )
|
|
|
|
|
|
/*----------------------------------------------------------------------------
|
|
Deprecated Command IDs: Do not reuse
|
|
* -------------------------------------------------------------------------*/
|
|
#define TZ_POWER_SPMI_DISABLE_BUS_DEPRECATED_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_POWER, 0x01)
|
|
|
|
/**
|
|
@ingroup spmi_disable_bus
|
|
|
|
Disables SPMI bus to allow clean shutdowns then deasserts PS_HOLD.
|
|
|
|
@note1hang Implementation takes place entirely in Monitor mode. \n
|
|
@note1hang This command uses a register-based QSEE interface.
|
|
|
|
@smc_id
|
|
0x02000902
|
|
|
|
@param_id
|
|
0x00000001
|
|
|
|
@param[in] Reserved/spare, should be zero.
|
|
|
|
@return
|
|
E_SUCCESS if the call succeeded; an error code otherwise.
|
|
*/
|
|
#define TZ_POWER_SPMI_DISABLE_BUS_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_POWER, 0x02)
|
|
|
|
#define TZ_POWER_SPMI_DISABLE_BUS_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_1( TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup get_prng_data
|
|
|
|
Retrieve random data from the Pseudo-Random Number Generator (PRNG)
|
|
hardware.
|
|
|
|
@smc_id
|
|
0x02000A01
|
|
|
|
@param_id
|
|
0x00000022
|
|
|
|
@sys_call_params{tz_get_prng_data_s}
|
|
@table{weak__tz__get__prng__data__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; a negative value on failure.
|
|
*/
|
|
#define TZ_PRNG_GETDATA_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_CRYPTO, 0x01)
|
|
|
|
#define TZ_PRNG_GETDATA_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup init_secure_channel
|
|
|
|
Writes the key material to the specified address.
|
|
|
|
This function returns E_ALREADY_DONE if the keys are already written.
|
|
|
|
@smc_id
|
|
0x02000B01
|
|
|
|
@param_id
|
|
0x00000000
|
|
|
|
@sys_call_params{tz_sc_init_s}
|
|
@table{weak__tz__sc__init__s}
|
|
|
|
@return
|
|
E_SUCCESS -- Function was successful. \n
|
|
E_FAILURE -- Secure channel could not be initialized. \n
|
|
E_ALREADY_DONE -- Secure channel is already established.
|
|
*/
|
|
#define TZ_SECURE_CHANNEL_INIT_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_SC_KEY_EXCHANGE, 0x01)
|
|
|
|
/* TODO Syscall does not exist */
|
|
#define TZ_SECURE_CHANNEL_INIT_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_0
|
|
|
|
/**
|
|
@ingroup deinit_secure_channel
|
|
|
|
Clears the keys and resets the channel state.
|
|
|
|
@smc_id
|
|
0x02000B02
|
|
|
|
@param_id
|
|
0x00000000
|
|
|
|
@sys_call_params{tz_sc_deinit_s}
|
|
@table{weak__tz__sc__deinit__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; E_FAILURE otherwise.
|
|
*/
|
|
#define TZ_SECURE_CHANNEL_DEINIT_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_SC_KEY_EXCHANGE, 0x02)
|
|
|
|
/* TODO Syscall does not exist */
|
|
#define TZ_SECURE_CHANNEL_DEINIT_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_0
|
|
|
|
/**
|
|
@ingroup protect_memory
|
|
|
|
Protects/unprotects a memory range with an MPU.
|
|
|
|
@smc_id
|
|
0x02000C01
|
|
|
|
@param_id
|
|
0x00000005
|
|
|
|
@sys_call_params{tz_protect_memory_s}
|
|
@table{weak__tz__protect__memory__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; error code otherwise.
|
|
*/
|
|
#define TZ_PROTECT_MEMORY \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_MEMORY_PROTECTION, 0x01)
|
|
|
|
#define TZ_PROTECT_MEMORY_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_5( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup install_nonsecure_debug_fiq
|
|
|
|
Installs a nonsecure debug FIQ handler.
|
|
|
|
@smc_id
|
|
0x02000E01
|
|
|
|
@param_id
|
|
0x00000256
|
|
|
|
@sys_call_params{tz_config_ns_debug_fiq_req_s}
|
|
@table{weak__tz__config__ns__debug__fiq__req__s}
|
|
|
|
@return
|
|
E_SUCCESS if the nonsecure debug FIQ handler and context were
|
|
installed successfully; error code otherwise.
|
|
*/
|
|
#define TZ_NS_DEBUG_FIQ_CONFIG_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_NS_DEBUG_FIQ, 0x01)
|
|
|
|
#define TZ_NS_DEBUG_FIQ_CONFIG_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_6( \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RO, TZ_SYSCALL_PARAM_TYPE_BUF_RO, \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup query_nonsecure_debug_fiq_ctx_buf
|
|
|
|
Queries the minimum size of a nonsecure debug FIQ context buffer. A pointer
|
|
to the context buffer is passed to the nonsecure handler in register r0.
|
|
|
|
@smc_id
|
|
0x02000E02
|
|
|
|
@param_id
|
|
0x00000022
|
|
|
|
@sys_call_params{tz_config_ns_debug_fiq_ctx_size_req_s}
|
|
@table{weak__tz__config__ns__debug__fiq__ctx__size__req__s}
|
|
|
|
@return
|
|
E_SUCCESS if the context buffer size query was successful; error
|
|
code otherwise.
|
|
*/
|
|
#define TZ_NS_DEBUG_FIQ_CTX_SIZE_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_NS_DEBUG_FIQ, 0x02)
|
|
|
|
#define TZ_NS_DEBUG_FIQ_CTX_SIZE_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup query_nonsecure_debug_fiq_int
|
|
|
|
Queries whether an interrupt is allowed to be configured as a nonsecure
|
|
debug FIQ. The QSEE only allows a limited set of chipset-specific interrupts
|
|
to be used for this purpose.
|
|
|
|
@smc_id
|
|
0x02000E03
|
|
|
|
@param_id
|
|
0x00000083
|
|
|
|
@sys_call_params{tz_config_ns_debug_fiq_int_ok_req_s}
|
|
@table{weak__tz__config__ns__debug__fiq__int__ok__req__s}
|
|
|
|
@sys_call_params{tz_config_ns_debug_fiq_int_ok_rsp_s}
|
|
@table{weak__tz__config__ns__debug__fiq__int__ok__rsp__s}
|
|
|
|
@return
|
|
E_SUCCESS if the context buffer size query was successfull; error
|
|
code otherwise.
|
|
*/
|
|
#define TZ_NS_DEBUG_FIQ_INT_OK_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_NS_DEBUG_FIQ, 0x03)
|
|
|
|
#define TZ_NS_DEBUG_FIQ_INT_OK_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_3( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_BUF_RW, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup restore_sec_cfg
|
|
|
|
Restores VMIDMT/xPU/SMMU configuration of a device's System Memory
|
|
Management Unit (SMMU) global space.
|
|
|
|
@note1hang SMMU clocks must be ON.
|
|
|
|
@smc_id
|
|
0x02000C02
|
|
|
|
@param_id
|
|
0x00000002
|
|
|
|
@sys_call_params{tz_restore_sec_cfg_req_s}
|
|
@table{weak__tz__restore__sec__cfg__req__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_RESTORE_SEC_CFG TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_MEMORY_PROTECTION, 0x02)
|
|
|
|
#define TZ_RESTORE_SEC_CFG_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup mem_protect_get_ptbl_mem_size
|
|
|
|
Queries the memory size requirement for multimedia SMMU page
|
|
tables.
|
|
|
|
@smc_id
|
|
0x02000C03
|
|
|
|
@param_id
|
|
0x00000001
|
|
|
|
@sys_call_req_params{tz_memprot_ptbl_mem_size_req_s}
|
|
@table{weak__tz__memprot__ptbl__mem__size__req__s}
|
|
|
|
@sys_call_rsp_params{tz_memprot_ptbl_mem_size_rsp_s}
|
|
@table{weak__tz__memprot__ptbl__mem__size__rsp__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_MEM_PROTECT_GET_PTBL_MEM_SIZE TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_MEMORY_PROTECTION, 0x03)
|
|
|
|
#define TZ_MEM_PROTECT_GET_PTBL_MEM_SIZE_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_1( TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup mem_protect_ptbl_mem_init
|
|
|
|
Provides memory used for page tables by multimedia SMMU
|
|
devices involved in content protection.
|
|
|
|
@smc_id
|
|
0x02000C04
|
|
|
|
@param_id
|
|
0x00000023
|
|
|
|
@sys_call_params{tz_memprot_ptbl_mem_init_req_s}
|
|
@table{weak__tz__memprot__ptbl__mem__init__req__s}
|
|
|
|
@sys_call_rsp_params{tz_memprot_rsp_s}
|
|
@table{weak__tz__memprot__rsp__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_MEM_PROTECT_PTBL_MEM_INIT TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_MEMORY_PROTECTION, 0x04)
|
|
|
|
#define TZ_MEM_PROTECT_PTBL_MEM_INIT_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_3( \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL)
|
|
|
|
/**
|
|
@ingroup mem_protect_set_cp_pool_size
|
|
|
|
Provide the CP pool size to calculate translation table
|
|
requirement
|
|
|
|
@smc_id
|
|
0x02000C05
|
|
|
|
@param_id
|
|
0x00000002
|
|
|
|
@sys_call_params{tz_memprot_set_cp_pool_size_req_s}
|
|
@table{weak__tz__memprot__set__cp__pool__size__req__s}
|
|
|
|
@sys_call_rsp_params{tz_memprot_rsp_s}
|
|
@table{weak__tz__memprot__rsp__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_MEM_PROTECT_SET_CP_POOL_SIZE TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_MEMORY_PROTECTION, 0x05)
|
|
|
|
#define TZ_MEM_PROTECT_SET_CP_POOL_SIZE_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup mem_protect_video_var
|
|
|
|
Sets secure Virtual Address Ranges (VAR) in the video device's
|
|
virtual address map.
|
|
|
|
@smc_id
|
|
0x02000C08
|
|
|
|
@param_id
|
|
0x00000004
|
|
|
|
@sys_call_params{tz_memprot_video_var_req_s}
|
|
@table{weak__tz__memprot__video__var__req__s}
|
|
|
|
@sys_call_rsp_params{tz_memprot_rsp_s}
|
|
@table{weak__tz__memprot__rsp__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_MEM_PROTECT_VIDEO_VAR TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_MEMORY_PROTECTION, 0x08)
|
|
|
|
#define TZ_MEM_PROTECT_VIDEO_VAR_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_4( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup vmidmt_set_memtype
|
|
|
|
Sets the memtype attribute for a Virtual Machine ID Mapping Table (VMIDMT)
|
|
associated with a given device.
|
|
|
|
@smc_id
|
|
0x02000C09
|
|
|
|
@param_id
|
|
0x00000003
|
|
|
|
@sys_call_params{tz_set_vmidmt_memtype_req_s}
|
|
@table{weak__tz__set__vmidmt__memtype__req__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_VMIDMT_SET_MEMTYPE TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_MEMORY_PROTECTION, 0x09)
|
|
|
|
#define TZ_VMIDMT_SET_MEMTYPE_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_3( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup disable_mmss_sec
|
|
|
|
Disable the QRIB security for the MMSS subsystems
|
|
|
|
@smc_id
|
|
0x02000C20
|
|
|
|
@param_id
|
|
0x00000000
|
|
|
|
@return
|
|
\c E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_DISABLE_MMSS_SEC TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_MEMORY_PROTECTION, 0x20)
|
|
|
|
#define TZ_DISABLE_MMSS_SEC_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_0
|
|
|
|
/**
|
|
@ingroup prepare_smmu_ctx_bank_atos_operation
|
|
|
|
Prepare SMMU context bank ATOS operation
|
|
|
|
@smc_id
|
|
0x02000C21
|
|
|
|
@param_id
|
|
0x00000003
|
|
|
|
@param[in] r0 Command ID.
|
|
@param[in] r1 Token ID.
|
|
@param[in] r2 SMMU instance/SMMU device ID.
|
|
@param[in] r3 Context bank number.
|
|
@param[in] r4 ATOS operation start (non-zero value) or end (zero value).
|
|
|
|
@com_struct
|
|
tz_syscall_req_s \n
|
|
tz_syscall_rsp_s
|
|
|
|
@return
|
|
\c E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define HYP_PREPARE_SMMU_CTX_BANK_ATOS_OPERATION \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_MEMORY_PROTECTION, 0x21)
|
|
|
|
#define HYP_PREPARE_SMMU_CTX_BANK_ATOS_OPERATION_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_3( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup mem_protect_lock2
|
|
|
|
Protects or removes protection from a list of memory chunks.
|
|
|
|
@smc_id
|
|
0x02000C0A
|
|
|
|
@param_id
|
|
0x00000024
|
|
|
|
@sys_call_params{tz_memprot_lock2_legacy_req_s}
|
|
@table{weak__tz__memprot__lock2__legacy__req__s}
|
|
|
|
@sys_call_rsp_params{tz_memprot_rsp_s}
|
|
@table{weak__tz__memprot__rsp__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_MEM_PROTECT_LOCK2_LEGACY TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_MEMORY_PROTECTION, 0x0A)
|
|
|
|
#define TZ_MEM_PROTECT_LOCK2_LEGACY_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_4( \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup mem_protect_map2
|
|
|
|
Maps a list of memory chunks (sets up VA to PA mapping) on a
|
|
QSEE-managed context bank.
|
|
|
|
@smc_id
|
|
0x02000C0B
|
|
|
|
@param_id
|
|
0x000000A3
|
|
|
|
@sys_call_params{tz_memprot_map2_legacy_req_s}
|
|
@table{weak__tz__memprot__map2__legacy__req__s}
|
|
|
|
@sys_call_rsp_params{tz_memprot_rsp_s}
|
|
@table{weak__tz__memprot__rsp__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_MEM_PROTECT_MAP2_LEGACY TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_MEMORY_PROTECTION, 0x0B)
|
|
|
|
#define TZ_MEM_PROTECT_MAP2_LEGACY_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_3( \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_BUF_RW, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup mem_protect_unmap2
|
|
|
|
Removes VA to PA mapping on a QSEE-managed context bank.
|
|
|
|
@smc_id
|
|
0x02000C0C
|
|
|
|
@param_id
|
|
0x00000022
|
|
|
|
@sys_call_params{tz_memprot_unmap2_legacy_req_s}
|
|
@table{weak__tz__memprot__unmap2__legacy__req__s}
|
|
|
|
@sys_call_rsp_params{tz_memprot_rsp_s}
|
|
@table{weak__tz__memprot__rsp__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_MEM_PROTECT_UNMAP2_LEGACY TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_MEMORY_PROTECTION, 0x0C)
|
|
|
|
#define TZ_MEM_PROTECT_UNMAP2_LEGACY_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup mem_protect_tlbinval
|
|
|
|
Invalidates Translation Lookaside Buffer (TLB) entries associated with a
|
|
QSEE-managed context bank.
|
|
|
|
@smc_id
|
|
0x02000C0D
|
|
|
|
@param_id
|
|
0x00000004
|
|
|
|
@sys_call_params{tz_memprot_tlbinval_req_s}
|
|
@table{weak__tz__memprot__tlbinval__req__s}
|
|
|
|
@sys_call_rsp_params{tz_memprot_rsp_s}
|
|
@table{weak__tz__memprot__rsp__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_MEM_PROTECT_TLBINVALIDATE TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_MEMORY_PROTECTION, 0x0D)
|
|
|
|
#define TZ_MEM_PROTECT_TLBINVALIDATE_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_4( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup config_xpu_violation_err_fatal
|
|
|
|
Subroutine used by the HLOS to enable/disable xPU violations becoming fatal
|
|
errors. This can also be used to check whether xPU violations are currently
|
|
fatal errors by sending TZ_XPU_VIOLATION_ERR_FATAL_NOOP as the parameter.
|
|
|
|
The TZ may choose to force enable/disable xPU violations as fatal errors by
|
|
default. It may also choose to disallow the HLOS from overriding this
|
|
configuration. So, the HLOS must always check the output parameter (enabled)
|
|
to see the current behavior and the return code to see if it was allowed to
|
|
carry out the operation (-E_NOT_SUPPORTED is returned if the HLOS is not
|
|
allowed to change the behavior).
|
|
|
|
@smc_id
|
|
0x02000C0E
|
|
|
|
@param_id
|
|
0x00000002
|
|
|
|
@sys_call_req_params{tz_xpu_violation_err_fatal_req_s}
|
|
@table{weak__tz__xpu__violation__err__fatal__req__s}
|
|
|
|
@sys_call_rsp_params{tz_xpu_violation_err_fatal_rsp_s}
|
|
@table{weak__tz__pil__subsystem__query__rsp__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_CONFIG_XPU_VIOLATION_ERR_FATAL \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_MEMORY_PROTECTION, 0x0E)
|
|
|
|
#define TZ_CONFIG_XPU_VIOLATION_ERR_FATAL_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/** Deprecated syscall - Do not reuse */
|
|
#define TZ_MEM_PROTECT_SD_CTRL_DEPRECATED \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_MEMORY_PROTECTION, 0x0F)
|
|
|
|
/**
|
|
@ingroup mem_protect_lock2
|
|
|
|
Protects or removes protection from a list of memory chunks.
|
|
|
|
@smc_id
|
|
0x02000C11
|
|
|
|
@param_id
|
|
0x00000026
|
|
|
|
@sys_call_params{tz_memprot_lock2_req_s}
|
|
@table{weak__tz__memprot__lock2__req__s}
|
|
|
|
@sys_call_rsp_params{tz_memprot_rsp_s}
|
|
@table{weak__tz__memprot__rsp__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_MEM_PROTECT_LOCK2 TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_MEMORY_PROTECTION, 0x11)
|
|
|
|
#define TZ_MEM_PROTECT_LOCK2_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_6( \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup mem_protect_map2
|
|
|
|
Maps a list of memory chunks (sets up VA to PA mapping) on a
|
|
QSEE-managed context bank.
|
|
|
|
@smc_id
|
|
0x02000C12
|
|
|
|
@param_id
|
|
0x00000028
|
|
|
|
@sys_call_params{tz_memprot_map2_req_s}
|
|
@table{weak__tz__memprot__map2__req__s}
|
|
|
|
@sys_call_rsp_params{tz_memprot_rsp_s}
|
|
@table{weak__tz__memprot__rsp__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_MEM_PROTECT_MAP2 TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_MEMORY_PROTECTION, 0x12)
|
|
|
|
#define TZ_MEM_PROTECT_MAP2_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_8( \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup mem_protect_unmap2
|
|
|
|
Removes VA to PA mapping on a QSEE-managed context bank.
|
|
|
|
@smc_id
|
|
0x02000C13
|
|
|
|
@param_id
|
|
0x00000005
|
|
|
|
@sys_call_params{tz_memprot_unmap2_req_s}
|
|
@table{weak__tz__memprot__unmap2__req__s}
|
|
|
|
@sys_call_rsp_params{tz_memprot_rsp_s}
|
|
@table{weak__tz__memprot__rsp__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_MEM_PROTECT_UNMAP2 TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_MEMORY_PROTECTION, 0x13)
|
|
|
|
#define TZ_MEM_PROTECT_UNMAP2_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_5( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup secure_display_ctrl
|
|
|
|
Enable/disable the secure display
|
|
|
|
@smc_id
|
|
0x02000C14
|
|
|
|
@param_id
|
|
0x00000001
|
|
|
|
@sys_call_params{tz_memprot_sd_ctrl_req_s}
|
|
@table{weak__tz__memprot__sd__ctrl__req__s}
|
|
|
|
@sys_call_rsp_params{tz_memprot_rsp_s}
|
|
@table{weak__tz__memprot__rsp__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; error code otherwise.
|
|
*/
|
|
#define TZ_MEM_PROTECT_SD_CTRL \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_MEMORY_PROTECTION, 0x14)
|
|
|
|
#define TZ_MEM_PROTECT_SD_CTRL_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_1( TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup mem_protect_dev_var
|
|
|
|
Sets secure Virtual Address Ranges (VAR) in the requested
|
|
device's virtual address map in an specific device.
|
|
|
|
@smc_id
|
|
0x02000C15
|
|
|
|
@param_id
|
|
0x00000000
|
|
|
|
@sys_call_params{tz_memprot_dev_var_req_s}
|
|
@table{weak__tz__memprot__dev__var__req__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_MEM_PROTECT_DEVICE_VAR \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_MEMORY_PROTECTION, 0x15)
|
|
|
|
/* TODO Syscall does not exist */
|
|
#define TZ_MEM_PROTECT_DEVICE_VAR_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_0
|
|
|
|
/**
|
|
@ingroup mem_protect_assign
|
|
|
|
Assigns a list of Intermediate PA's from
|
|
Source Virtual Machine(VM) to destination VM
|
|
|
|
@smc_id
|
|
0x02000C16
|
|
|
|
@param_id
|
|
0x00001117
|
|
|
|
@sys_call_params{hyp_memprot_assign_s}
|
|
@table{weak__hyp__memprot__assign__s}
|
|
|
|
@com_struct
|
|
tz_common_rsp_s
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define HYP_MEM_PROTECT_ASSIGN \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_MEMORY_PROTECTION, 0x16)
|
|
|
|
#define HYP_MEM_PROTECT_ASSIGN_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_7( \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RO, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RO, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RO, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL)
|
|
|
|
/**
|
|
@ingroup mem_protect_tag
|
|
|
|
Memory that is assigned using HYP_MEM_PROTECT_ASSIGN for
|
|
CPZ usecase is tagged in TZ using TZ_MEM_PROTECT_TAGVM
|
|
for apps to know if memory is tagged
|
|
|
|
@smc_id
|
|
0x02000C17
|
|
|
|
@param_id
|
|
0x00000225
|
|
|
|
@sys_call_params{tz_memprot_tagVM_s}
|
|
@table{weak__tz__memprot__tagVM__s}
|
|
|
|
@com_struct
|
|
tz_common_rsp_s
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_MEM_PROTECT_TAGVM \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_MEMORY_PROTECTION, 0x17)
|
|
|
|
#define TZ_MEM_PROTECT_TAGVM_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_5( \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL)
|
|
|
|
|
|
/**
|
|
@ingroup smmuv3_paravirtualization
|
|
|
|
Paravirtualization API for EL1 to configure the SMMUv3
|
|
|
|
@smc_id
|
|
0x02001506
|
|
|
|
@param_id
|
|
0x0022200A
|
|
|
|
@com_struct
|
|
tz_common_rsp_s
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_MEM_PROTECT_SMMUV3_PARAVIRT \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_SMMU_PROGRAM, 0x6)
|
|
|
|
#define TZ_MEM_PROTECT_SMMUV3_PARAVIRT_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_10( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL)
|
|
|
|
/**
|
|
@ingroup ocmem_lock_region
|
|
|
|
System call to lock an OCMEM region.
|
|
|
|
@smc_id
|
|
0x02000F01
|
|
|
|
@param_id
|
|
0x00000004
|
|
|
|
@sys_call_params{tz_ocmem_lock_region_req_s}
|
|
@table{weak__tz__ocmem__lock__region__req__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_OCMEM_LOCK_REGION TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_OCMEM, 0x1)
|
|
|
|
#define TZ_OCMEM_LOCK_REGION_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_4( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup ocmem_unlock_region
|
|
|
|
System call to unlock an OCMEM region.
|
|
|
|
@smc_id
|
|
0x02000F02
|
|
|
|
@param_id
|
|
0x00000003
|
|
|
|
@sys_call_params{tz_ocmem_unlock_region_req_s}
|
|
@table{weak__tz__ocmem__unlock__region__req__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_OCMEM_UNLOCK_REGION TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_OCMEM, 0x2)
|
|
|
|
#define TZ_OCMEM_UNLOCK_REGION_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_3( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup ocmem_enable_mem_dump
|
|
|
|
System call to enable memory dumping for an OCMEM region.
|
|
|
|
@smc_id
|
|
0x02000F03
|
|
|
|
@param_id
|
|
0x00000003
|
|
|
|
@sys_call_params{tz_ocmem_enable_mem_dump_req_s}
|
|
@table{weak__tz__ocmem__enable__mem__dump__req__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_OCMEM_ENABLE_MEM_DUMP TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_OCMEM, 0x3)
|
|
|
|
#define TZ_OCMEM_ENABLE_MEM_DUMP_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_3( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup ocmem_disable_mem_dump
|
|
|
|
System call to disable memory dumping for an OCMEM region.
|
|
|
|
@smc_id
|
|
0x02000F04
|
|
|
|
@param_id
|
|
0x00000003
|
|
|
|
@sys_call_params{tz_ocmem_disable_mem_dump_req_s}
|
|
@table{weak__tz__ocmem__disable__mem__dump__req__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; an error code otherwise.
|
|
*/
|
|
#define TZ_OCMEM_DISABLE_MEM_DUMP TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_OCMEM, 0x4)
|
|
|
|
#define TZ_OCMEM_DISABLE_MEM_DUMP_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_3( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup tz_es_save_partition_hash
|
|
|
|
Saves the eMMC partition kernel/system hash (SHA-256).
|
|
This service is used by the LK to save the kernel partition hash
|
|
and by the HLOS to save the system partition hash.
|
|
|
|
@smc_id
|
|
0x02001001
|
|
|
|
@param_id
|
|
0x000000082
|
|
|
|
@sys_call_req_params{tz_es_save_partition_hash_req_s}
|
|
@table{weak__tz__es__save__partition__hash__req__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; negative value on failure.
|
|
*/
|
|
#define TZ_ES_SAVE_PARTITION_HASH_ID TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_ES, 0x1)
|
|
|
|
#define TZ_ES_SAVE_PARTITION_HASH_ID_PARAM_ID TZ_SYSCALL_CREATE_PARAM_ID_3( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_BUF_RW, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup tz_hdcp_write_registers
|
|
|
|
This service is used to write registers in the
|
|
HDCP HDMI Secure resource group. Additionally, whenever this syscall
|
|
is invoked, TZ will attempt to update the MMSS_HDMI_HDCP_CTRL2 register
|
|
to reflect if HDCP HDMI ecryption is to be enforced.
|
|
|
|
Five registers can be written to with one invocation of this syscall.
|
|
Note that the order in which these registers are written is not guanenteed,
|
|
so the caller should take care to invoke this syscall multiple times if
|
|
a certain order is required (as may be the case with the HWIO_MMSS_HDMI_HDCP_SHA_CTRL
|
|
and HWIO_MMSS_HDMI_HDCP_SHA_DATA registers).
|
|
|
|
@smc_id
|
|
0x02001101
|
|
|
|
@param_id
|
|
0x0000000A
|
|
|
|
@sys_call_req_params{tz_hdcp_write_registers_req_s}
|
|
@table{weak__tz__hdcp__write__registers__req__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; negative value on failure.
|
|
*/
|
|
#define TZ_HDCP_WRITE_REGISTERS TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_HDCP, 0x1)
|
|
|
|
#define TZ_HDCP_WRITE_REGISTERS_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_10( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup tz_mdtp_cipher_dip
|
|
|
|
Encrypt or Decrypt a DIP structure using a HW derived key.
|
|
This API is called from HLOS via QSEE.
|
|
|
|
This service is used by the LK at boot time.
|
|
|
|
@smc_id
|
|
0x02001201
|
|
|
|
@param_id
|
|
0x00000215
|
|
|
|
@sys_call_req_params{tz_mdtp_cipher_dip_req_s}
|
|
@table{weak__tz__mdtp__cipher__dip__req__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; negative value on failure.
|
|
*/
|
|
#define TZ_MDTP_CIPHER_DIP_ID TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_MDTP, 0x1)
|
|
|
|
#define TZ_MDTP_CIPHER_DIP_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_5( \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RO, TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL)
|
|
|
|
/**
|
|
LMH function stuff
|
|
*/
|
|
|
|
/**
|
|
@ingroup tzbsp_lmh_change_profile
|
|
|
|
System call to change the current LMH profile.
|
|
|
|
@smc_id
|
|
0x02001301
|
|
|
|
@param_id
|
|
0x00000001
|
|
|
|
@sys_call_req_params{tzbsp_lmh_change_profile_req_s}
|
|
@table{weak__tzbsp__lmh__change__profile__req__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; negative value on failure.
|
|
*/
|
|
#define TZ_LMH_CHANGE_PROFILE_ID TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_LMH, 0x1)
|
|
|
|
#define TZ_LMH_CHANGE_PROFILE_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_1( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL \
|
|
)
|
|
|
|
/**
|
|
@ingroup tzbsp_lmh_get_profiles
|
|
|
|
System call to get a list of profile ids supported by LMH.
|
|
Up to ten profiles are reported. 'start' argument tells the
|
|
private driver where to start reporting.
|
|
Returns the total number of profiles.
|
|
|
|
@smc_id
|
|
0x02001302
|
|
|
|
@param_id
|
|
0x00000023
|
|
|
|
@sys_call_req_params{tzbsp_lmh_get_profiles_req_s}
|
|
@table{weak__tzbsp__lmh__get__profiles__req__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; negative value on failure.
|
|
*/
|
|
#define TZ_LMH_GET_PROFILES_ID TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_LMH, 0x2)
|
|
|
|
#define TZ_LMH_GET_PROFILES_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_3( \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL \
|
|
)
|
|
|
|
/**
|
|
@ingroup tzbsp_lmh_enable_qpmda
|
|
|
|
System call to enable/disable the qpmda hw debug interface for LMH.
|
|
|
|
@smc_id
|
|
0x02001303
|
|
|
|
@param_id
|
|
0x00000002
|
|
|
|
@sys_call_req_params{tzbsp_lmh_enable_qpmda_req_s}
|
|
@table{weak__tzbsp__lmh__enable__qpmda__req__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; negative value on failure.
|
|
*/
|
|
#define TZ_LMH_ENABLE_QPMDA_ID TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_LMH, 0x3)
|
|
|
|
#define TZ_LMH_ENABLE_QPMDA_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL \
|
|
)
|
|
|
|
/**
|
|
@ingroup tzbsp_lmh_trim_error
|
|
|
|
System call to notify LMH private driver of a periodic trim failure.
|
|
|
|
@smc_id
|
|
0x02001304
|
|
|
|
@param_id
|
|
0x00000000
|
|
|
|
@return
|
|
E_SUCCESS on success; negative value on failure.
|
|
*/
|
|
#define TZ_LMH_TRIM_ERROR_ID TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_LMH, 0x4)
|
|
|
|
#define TZ_LMH_TRIM_ERROR_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_0
|
|
|
|
/**
|
|
@ingroup tzbsp_lmh_set_current_limit
|
|
|
|
System call to change the current limit in an LMH profile.
|
|
Profile is defined by type and id.
|
|
Limit is only updated if limit is less than existing limit
|
|
This API may only be called from SBL.
|
|
|
|
@smc_id
|
|
0x02001305
|
|
|
|
@param_id
|
|
0x00000003
|
|
|
|
@sys_call_req_params{tzbsp_lmh_set_current_limit_req_s}
|
|
@table{weak__tzbsp__lmh__set__current__limit__req__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; negative value on failure.
|
|
*/
|
|
#define TZ_LMH_SET_CURRENT_LIMIT_ID TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_LMH, 0x5)
|
|
|
|
#define TZ_LMH_SET_CURRENT_LIMIT_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_3( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL \
|
|
)
|
|
|
|
/**
|
|
@ingroup tz_lmh_intensity
|
|
|
|
System call to get a list of throttling nodes.
|
|
Returns the ten highest throttling nodes, if fewer than ten nodes are
|
|
throttling, only those are returned. Total number of nodes throttling
|
|
is also returned.
|
|
|
|
@smc_id
|
|
0x02001306
|
|
|
|
@param_id
|
|
0x00000022
|
|
|
|
@sys_call_req_params{tz_lmh_intensity_req_s}
|
|
@table{weak__tz__lmh__intensity__req__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; negative value on failure.
|
|
*/
|
|
#define TZ_LMH_INTENSITY_ID TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_LMH, 0x6)
|
|
|
|
#define TZ_LMH_INTENSITY_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL \
|
|
)
|
|
|
|
/**
|
|
@ingroup tz_lmh_get_sensor_list
|
|
|
|
System call to get list of sensor node available on this device.
|
|
Up to ten nodes and their parameters are reported, starting at
|
|
packet->count.
|
|
Total number of nodes is reported by replacing packet->count.
|
|
|
|
@smc_id
|
|
0x00001307
|
|
|
|
@param_id
|
|
0x00000022
|
|
|
|
@sys_call_req_params{tz_lmh_get_sensor_list_req_s}
|
|
@table{weak__tz__lmh__get__sensor__list__req__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; negative value on failure.
|
|
*/
|
|
#define TZ_LMH_GET_SENSOR_LIST_ID TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_LMH, 0x7)
|
|
|
|
#define TZ_LMH_GET_SENSOR_LIST_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL \
|
|
)
|
|
|
|
/**
|
|
@ingroup tzbsp_lmh_sensor_init
|
|
|
|
System call to init sensor specified sensor on this device.
|
|
|
|
@smc_id
|
|
0x02001311
|
|
|
|
@param_id
|
|
0x00000006
|
|
|
|
@sys_call_req_params{tzbsp_lmh_sensor_init_req_s}
|
|
@table{weak__tzbsp__lmh__sensor__init__req__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; negative value on failure.
|
|
*/
|
|
|
|
|
|
/**
|
|
@ingroup tzos_load_external_image
|
|
|
|
Load an extenal image into memory.
|
|
|
|
@smc_id
|
|
0x32000301
|
|
|
|
@param_id
|
|
0x00000003
|
|
|
|
@sys_call_params{tz_os_load_external_image_req_s}
|
|
@table{weak__tz__os__load__external__image__req__s}
|
|
|
|
@sys_call_params{tz_os_rsp_s}
|
|
@table{weak__tz__os__rsp__s}
|
|
|
|
@return
|
|
Zero on success, negative value on failure.
|
|
*/
|
|
#define TZ_OS_LOAD_EXTERNAL_IMAGE_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_QSEE_OS, TZ_SVC_EXTERNAL, 0x01)
|
|
|
|
#define TZ_OS_LOAD_EXTERNAL_IMAGE_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_3( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup tzos_unload_external_image
|
|
|
|
Unload an external image.
|
|
|
|
@smc_id
|
|
0x32000302
|
|
|
|
@param_id
|
|
0x00000000
|
|
|
|
@sys_call_params{tz_os_rsp_s}
|
|
@table{weak__tz__os__rsp__s}
|
|
|
|
@return
|
|
Zero on success, negative value on failure.
|
|
*/
|
|
#define TZ_OS_UNLOAD_EXTERNAL_IMAGE_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_QSEE_OS, TZ_SVC_EXTERNAL, 0x02)
|
|
|
|
#define TZ_OS_UNLOAD_EXTERNAL_IMAGE_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_0
|
|
|
|
|
|
#define TZ_LMH_SENSOR_INIT_ID TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_LMH, 0x11)
|
|
|
|
#define TZ_LMH_SENSOR_INIT_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_6( \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL \
|
|
)
|
|
|
|
/**
|
|
@ingroup TZ_SVC_READ_DBG_POLICY_MEM
|
|
|
|
If loaded by boot, the debug policy is maintained in secure memory. This service is
|
|
used to expose a copy of the debug policy with the caller.
|
|
|
|
@smc_id
|
|
0x00001101
|
|
|
|
@param_id
|
|
0x00000022
|
|
|
|
@sys_call_rsp_params{tz_read_debug_policy_content_rsp_t}
|
|
@table{weak__tz__read__debug__policy__rsp__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; negative value on failure.
|
|
*/
|
|
#define TZ_READ_DEBUG_POLICY_CONTENT TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_READ_DBG_POLICY, 0x1)
|
|
|
|
#define TZ_READ_DEBUG_POLICY_CONTENT_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_2( \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RW, TZ_SYSCALL_PARAM_TYPE_VAL )
|
|
|
|
/**
|
|
@ingroup send_qspinor_cmd
|
|
|
|
Sends the commands to storage devices.
|
|
|
|
@return
|
|
Zero on success; a negative value on failure.
|
|
*/
|
|
#define TZ_SEND_STORAGE_CMD_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_STORAGE, 0x01)
|
|
|
|
#define TZ_SEND_STORAGE_CMD_ID_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_4(TZ_SYSCALL_PARAM_TYPE_BUF_RO,TZ_SYSCALL_PARAM_TYPE_VAL,TZ_SYSCALL_PARAM_TYPE_BUF_RW,TZ_SYSCALL_PARAM_TYPE_VAL)
|
|
|
|
/**
|
|
@ingroup query_tpm_type
|
|
syetem call to query tpm type
|
|
|
|
@smc_id
|
|
0x02003201
|
|
|
|
@param_id
|
|
0x00000000
|
|
|
|
@return
|
|
None
|
|
*/
|
|
#define TZ_QUERY_TPM_TYPE_ID \
|
|
TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_TPM_INFO, 0x01)
|
|
|
|
#define TZ_QUERY_TPM_TYPE_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_0
|
|
|
|
|
|
/** @addtogroup tz_datatypes
|
|
@{ */
|
|
|
|
/**
|
|
Common system call response header used in all system calls that
|
|
have responses.
|
|
*/
|
|
typedef struct tz_syscall_rsp_s
|
|
{
|
|
INT64 status; /**< Status of the syscall_req
|
|
executed: \n
|
|
0 means the command was not completed \n
|
|
1 means the command was completed */
|
|
} __attribute__ ((packed)) tz_syscall_rsp_t;
|
|
|
|
/**
|
|
VA range structure in set VA range API.
|
|
*/
|
|
typedef struct tz_va_range_s
|
|
{
|
|
UINT64 va_start; /**< VA Start Address. */
|
|
UINT64 va_size; /**< VA range size. */
|
|
}tz_va_range_t;
|
|
|
|
/** @} */ /* end_addtogroup tz_datatypes */
|
|
/*----------------------------------------------------------------------------
|
|
* Control Class Structures
|
|
* -------------------------------------------------------------------------*/
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* BOOT Service Structures
|
|
* -------------------------------------------------------------------------*/
|
|
|
|
/** @addtogroup tz_macros_constants
|
|
@{ */
|
|
|
|
/**
|
|
@name HLOS Start Address Slots
|
|
HLOS start address slots provided by Core service
|
|
TZ_CORE_SVC_START_ADDR_REQ_ID.
|
|
@{
|
|
*/
|
|
/** CPU address is AArch64. */
|
|
#define TZ_BOOT_ADDR_AARCH64 0x00000001
|
|
/** CPU initial boot. */
|
|
#define TZ_BOOT_ADDR_COLD 0x00000002
|
|
/** CPU subsequent boots/resets. */
|
|
#define TZ_BOOT_ADDR_WARM 0x00000004
|
|
|
|
/** @} */ /* end_name_group HLOS Start Address Slots */
|
|
|
|
/** @} */ /* end_addtogroup tz_macros_constants */
|
|
|
|
|
|
|
|
/**
|
|
@weakgroup weak_tz_set_boot_addr_s
|
|
@{
|
|
*/
|
|
typedef struct tz_set_boot_addr_s
|
|
{
|
|
UINT64 boot_addr; /**< The address to which the QSEE
|
|
is to jump after CPU
|
|
initialization. It must be a
|
|
physical address, but can be
|
|
NULL. Addresses in the secure
|
|
memory are not accepted and
|
|
cause the service to return
|
|
E_BAD_ADDRESS. */
|
|
UINT64 affl0_bmsk; /**< A bitmask of the CPUs
|
|
identified by the AFFL0 field
|
|
of the MPIDR. A value of zero
|
|
is not allowed.*/
|
|
UINT64 affl1_bmsk; /**< A bitmask of the CPUs
|
|
identified by the AFFL1 field
|
|
of the MPIDR. A value of zero
|
|
is not allowed. */
|
|
UINT64 affl2_bmsk; /**< A bitmask of the CPUs
|
|
identified by the AFFL2 field
|
|
of the MPIDR. A value of zero
|
|
is not allowed. */
|
|
UINT64 affl3_bmsk; /**< A bitmask of the CPUs
|
|
identified by the AFFL3 field
|
|
of the MPIDR. A value of zero
|
|
is not allowed. */
|
|
UINT64 flags; /**< Combination of TZ_BOOT_ADDR_*
|
|
values. The same address can
|
|
be set to multiple HLOS start
|
|
address slots by bitwise ORing
|
|
the values. Unused bits are
|
|
ignored and must be kept at
|
|
zero. A value of zero is not
|
|
allowed. */
|
|
} __attribute__ ((packed)) tz_set_boot_addr_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_set_milestone_s
|
|
@{
|
|
*/
|
|
typedef struct tz_set_milestone_s
|
|
{
|
|
UINT64 e_entry; /**< Address to which the QSEE
|
|
is to jump after the milestone call.
|
|
It must be a physical address.
|
|
Addresses in the secure memory are
|
|
not accepted and cause the service
|
|
to return E_BAD_ADDRESS. */
|
|
UINT64 mode; /**< Used on targets that support
|
|
flashless boot to provide boot
|
|
mode information. */
|
|
UINT64 ei_class; /**< Info from ELF header of image
|
|
to jump to after the milestone
|
|
call. */
|
|
|
|
} __attribute__ ((packed)) tz_set_milestone_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_do_modeswitch_s
|
|
@{
|
|
*/
|
|
|
|
typedef struct hlos_boot_params_s
|
|
{
|
|
UINT64 el1_x0;
|
|
UINT64 el1_x1;
|
|
UINT64 el1_x2;
|
|
UINT64 el1_x3;
|
|
UINT64 el1_x4;
|
|
UINT64 el1_x5;
|
|
UINT64 el1_x6;
|
|
UINT64 el1_x7;
|
|
UINT64 el1_x8;
|
|
UINT64 el1_elr;
|
|
} __attribute__ ((packed)) hlos_boot_params_t;
|
|
|
|
typedef struct tz_do_modeswitch_s
|
|
{
|
|
hlos_boot_params_t hlos_boot_info;
|
|
/**< hlos boot info. */
|
|
} __attribute__ ((packed)) tz_do_modeswitch_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_secure_wdog_disable_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_secure_wdog_disable_req_s
|
|
{
|
|
BOOLEAN disable; /**< If TRUE, the secure WDOG is
|
|
disabled; enabled otherwise. */
|
|
} __attribute__ ((packed)) tz_secure_wdog_disable_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_secure_wdog_trigger_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_secure_wdog_trigger_req_s
|
|
{
|
|
BOOLEAN disable_debug; /**< If TRUE, the watchdog debug image
|
|
is disabled (i.e., it will not run
|
|
after a watchdog reset). */
|
|
} __attribute__ ((packed)) tz_secure_wdog_trigger_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_lock_xpu_s
|
|
@{
|
|
*/
|
|
typedef struct tz_lock_xpu_s
|
|
{
|
|
UINT64 elf_header_addr; /**< Address to which the QSEE will
|
|
extract elf header associated with
|
|
proc id given as second argument. */
|
|
UINT64 program_header;
|
|
|
|
UINT64 proc_id; /**< Proc id associated with elf header */
|
|
|
|
UINT64 dummy;
|
|
} __attribute__ ((packed)) tz_lock_xpu_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_config_hw_for_ram_dump_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_config_hw_for_ram_dump_req_s
|
|
{
|
|
UINT64 disable_wd_dbg; /**< If TRUE, the watchdog debug image
|
|
is disabled (i.e., it will not run
|
|
after a watchdog reset). */
|
|
|
|
UINT64 boot_partition_sel; /**< Value programmed into the
|
|
BOOT_PARTION_SELECT register. */
|
|
} __attribute__ ((packed)) tz_config_hw_for_ram_dump_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_force_dload_mode_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_force_dload_mode_req_s
|
|
{
|
|
UINT64 config; /**< Value programmed into the
|
|
TCSR_BOOT_MISC_DETECT register. */
|
|
|
|
UINT64 spare; /**< Spare */
|
|
} __attribute__ ((packed)) tz_force_dload_mode_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/** @addtogroup tz_datatypes
|
|
@{ */
|
|
|
|
/** Video Core State. */
|
|
typedef enum
|
|
{
|
|
TZ_VIDEO_STATE_SUSPEND = 0, /**< Assert reset to the video core. */
|
|
TZ_VIDEO_STATE_RESUME, /**< Re-initialize video HW, if required,
|
|
and de-assert video core reset. */
|
|
} tz_video_state_e_type;
|
|
|
|
/** @} */ /* end_addtogroup tz_datatypes */
|
|
|
|
/**
|
|
@weakgroup weak_tz_video_set_state_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_video_set_state_req_s
|
|
{
|
|
UINT64 state; /**< Requested video state, one
|
|
of #tz_video_state_e_type*/
|
|
|
|
UINT64 spare; /**< Reserved for future use.
|
|
Should be zero */
|
|
} __attribute__ ((packed)) tz_video_set_state_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_video_set_state_rsp_s
|
|
@{
|
|
*/
|
|
typedef struct tz_video_set_state_rsp_s
|
|
{
|
|
UINT64 status; /**< Syscall status return val. */
|
|
} __attribute__ ((packed)) tz_video_set_state_rsp_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_config_hw_for_ram_dump_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_spin_with_irqs_fiqs_disabled_s
|
|
{
|
|
UINT64 spare; /**< Reserved for future use. */
|
|
} __attribute__ ((packed)) tz_spin_with_irqs_fiqs_disabled_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
|
|
/** @addtogroup tz_datatypes
|
|
@{ */
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* PIL Service Structures
|
|
* -------------------------------------------------------------------------*/
|
|
/**
|
|
Peripheral types.
|
|
*/
|
|
typedef enum
|
|
{
|
|
TZ_PIL_AUTH_MODEM_PROC, /**< This enum member is deprecated.
|
|
Use #TZ_PIL_AUTH_MODEM_FW_PROC. */
|
|
TZ_PIL_AUTH_QDSP6_PROC, /**< LPASS Hexagon@tm processor. */
|
|
TZ_PIL_AUTH_SPS_PROC, /**< This enum member is deprecated. */
|
|
TZ_PIL_AUTH_EXEC, /**< QSEE generic executive image. */
|
|
TZ_PIL_AUTH_MODEM_SW_PROC, /**< Modem software processor. */
|
|
TZ_PIL_AUTH_MODEM_FW_PROC, /**< Modem firmware processor. */
|
|
TZ_PIL_AUTH_WLAN_PROC, /**< Riva processor. */
|
|
TZ_PIL_AUTH_SEC_APP, /**< QSEE software secure applications. */
|
|
TZ_PIL_AUTH_GNSS_PROC, /**< GNSS processor. */
|
|
TZ_PIL_AUTH_VIDEO_PROC, /**< Video processor. */
|
|
TZ_PIL_AUTH_VPU_PROC, /**< VPU processor. */
|
|
TZ_PIL_AUTH_BCSS_PROC, /**< BCSS processor. */
|
|
TZ_PIL_AUTH_SSC_PROC, /**< SSC Hexagon@tm processor. */
|
|
TZ_PIL_AUTH_GPU_UCODE_PROC, /**< GPU Microcode. */
|
|
TZ_PIL_AUTH_SPSS_PROC, /**< Secure processor. */
|
|
TZ_PIL_AUTH_IPA_GSI_PROC, /**< IPA GSI Firmware. */
|
|
TZ_PIL_AUTH_SEC_TEE, /**< QSEE software secure TEE. */
|
|
TZ_PIL_AUTH_SEC_LIB, /**< QSEE software secure library. */
|
|
TZ_PIL_AUTH_CDSP_PROC, /**< CDSP processor. */
|
|
TZ_PIL_AUTH_GSI_QUP_PROC, /**< Firmware for the GSI/QUP. */
|
|
TZ_PIL_AUTH_UEFIFV_PROC, /**< UEFI Firmware Volumes. */
|
|
TZ_PIL_AUTH_ABLFV_PROC, /**< ABL (LinuxLoader). */
|
|
TZ_PIL_AUTH_ACPI, /**< ACPI Tables. */
|
|
TZ_PIL_AUTH_NPU_PROC, /**< NPU Firmware. */
|
|
TZ_PIL_AUTH_EXT_DSP_PROC, /**< External DSP Firmware. */
|
|
TZ_PIL_AUTH_DAM_APP_PROC, /**< Downloadable App Module (non-sec apps used in TX alone). */
|
|
TZ_PIL_AUTH_CVP_PROC, /**< CVP Firmware. */
|
|
TZ_PIL_AUTH_IPA_UC_PROC, /**< IPA uC Firmware. */
|
|
TZ_PIL_AUTH_GUEST_OS_VM, /** GUEST OS VM */
|
|
TZ_PIL_AUTH_EXT_DSP_FWU_PROC, /**< External DSP Firmware Update. */
|
|
TZ_PIL_AUTH_CDSP1_PROC, /**< CDSP1 processor. Some target will have 2 different CDSP subsystem, ex: Makena Auto */
|
|
TZ_PIL_AUTH_UNSUPPORTED_PROC /**< Processor not supported. */
|
|
} tz_pil_proc_e_type;
|
|
|
|
/** @} */ /* end_addtogroup tz_datatypes */
|
|
|
|
/**
|
|
@weakgroup weak_tz_pil_init_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_pil_init_req_s
|
|
{
|
|
UINT64 proc; /**< Processor identifier for
|
|
the current operation.
|
|
See #tz_pil_proc_e_type. */
|
|
UINT64 image_hdr_ptr; /**< Pointer to the physical
|
|
address location of the
|
|
ELF header for the given
|
|
processor identifier. */
|
|
} __attribute__ ((packed)) tz_pil_init_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_pil_mem_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_pil_mem_req_s
|
|
{
|
|
UINT64 proc; /**< Processor identifier for the
|
|
current operation. See
|
|
#tz_pil_proc_e_type. */
|
|
|
|
UINT64 start_addr; /**< The HLOS can load the image
|
|
in any memory location, so
|
|
this is used to take the
|
|
difference between the
|
|
program header addresses and
|
|
start_addr. */
|
|
|
|
UINT64 image_len; /**< Total length of the image in
|
|
memory. */
|
|
} __attribute__ ((packed)) tz_pil_mem_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_pil_auth_reset_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_pil_auth_reset_req_s
|
|
{
|
|
UINT64 proc; /**< Processor identifier for the
|
|
current operation. See
|
|
#tz_pil_proc_e_type. */
|
|
} __attribute__ ((packed)) tz_pil_auth_reset_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_pil_unlock_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_pil_unlock_req_s
|
|
{
|
|
UINT64 proc; /**< Processor ientifier for the
|
|
current operation. See
|
|
#tz_pil_proc_e_type. */
|
|
} __attribute__ ((packed)) tz_pil_unlock_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_pil_subsystem_query_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_pil_subsystem_query_req_s
|
|
{
|
|
UINT64 proc; /** Processor/subsystem
|
|
identifier. See
|
|
#tz_pil_proc_e_type. */
|
|
|
|
} __attribute__ ((packed)) tz_pil_subsystem_query_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_pil_subsystem_query_rsp_s
|
|
@{
|
|
*/
|
|
typedef struct tz_pil_subsystem_query_rsp_s
|
|
{
|
|
tz_syscall_rsp_t common_rsp; /**< Common response structure */
|
|
UINT64 verdict; /**< TRUE (1) if the answer to
|
|
the query is true; FALSE
|
|
(0) otherwise. */
|
|
} __attribute__ ((packed)) tz_pil_subsystem_query_rsp_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_pil_mem_area_query_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_pil_mem_area_query_req_s
|
|
{
|
|
UINT64 spare; /**< Unused; should be zero. */
|
|
|
|
} __attribute__ ((packed)) tz_pil_mem_area_query_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_pil_mem_area_query_rsp_s
|
|
@{
|
|
*/
|
|
typedef struct tz_pil_mem_area_query_rsp_s
|
|
{
|
|
tz_syscall_rsp_t common_rsp; /**< Common response structure */
|
|
UINT64 start; /**< Start address of relocatable
|
|
PIL region (inclusive). */
|
|
|
|
UINT64 end; /**< End address of relocatable
|
|
PIL region (exclusive). */
|
|
} __attribute__ ((packed)) tz_pil_mem_area_query_rsp_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_pil_modem_restart_s
|
|
@{
|
|
*/
|
|
typedef struct tz_pil_modem_restart_s
|
|
{
|
|
UINT64 config; /**< Value programmed into the
|
|
MSS_RESTART register. */
|
|
|
|
UINT64 spare; /**< Spare */
|
|
} __attribute__ ((packed)) tz_pil_modem_restart_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
|
|
|
|
/**
|
|
@weakgroup weak_ tz_pil_share_memory_s
|
|
@{
|
|
*/
|
|
typedef struct tz_pil_share_memory_s
|
|
{
|
|
UINT64 start; /**< Start address of the memory. start=0 and size=0 means share full HLOS memory */
|
|
UINT64 size; /**< length of the memory. start=0 and size=0 means share full HLOS memory */
|
|
UINT64 proc; /**< Processor identifier for the current operation. See #tz_pil_proc_e_type. */
|
|
UINT64 share_type; /**< a bitwise OR of the TZ_PIL_SHARE_TYPE_* definitions.
|
|
Zero to revoke sharing of previously shared memory. */
|
|
} __attribute__ ((packed)) tz_pil_share_memory_t;
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
#define TZ_PIL_SHARE_TYPE_READ 0x1
|
|
#define TZ_PIL_SHARE_TYPE_WRITE 0x2
|
|
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* DUMP Service Structures
|
|
* -------------------------------------------------------------------------*/
|
|
/** @addtogroup tz_datatypes
|
|
@{ */
|
|
|
|
/**
|
|
* Memory protection-related device types.
|
|
*/
|
|
typedef enum
|
|
{
|
|
TZ_DEVICE_VIDEO = 0, /**< Video subsystem. */
|
|
TZ_DEVICE_MDSS = 1, /**< MDSS subsystem. */
|
|
TZ_DEVICE_LPASS = 2, /**< Low-power audio subsystem. */
|
|
TZ_DEVICE_MDSS_BOOT = 3, /**< MDSS subsystem at cold boot. */
|
|
TZ_DEVICE_USB1_HS = 4, /**< High speed USB. */
|
|
TZ_DEVICE_OCMEM = 5, /**< OCMEM registers. @newpage */
|
|
TZ_DEVICE_LPASS_CORE = 6,
|
|
TZ_DEVICE_VPU = 7,
|
|
TZ_DEVICE_COPSS_SMMU = 8,
|
|
TZ_DEVICE_USB3_0 = 9,
|
|
TZ_DEVICE_USB3_1 = 10,
|
|
TZ_DEVICE_PCIE_0 = 11,
|
|
TZ_DEVICE_PCIE_1 = 12,
|
|
TZ_DEVICE_BCSS = 13,
|
|
TZ_DEVICE_VCAP = 14,
|
|
TZ_DEVICE_PCIE20 = 15,
|
|
TZ_DEVICE_IPA = 16,
|
|
TZ_DEVICE_APPS = 17,
|
|
TZ_DEVICE_GPU = 18,
|
|
TZ_DEVICE_UFS = 19,
|
|
TZ_DEVICE_ICE = 20,
|
|
TZ_DEVICE_COUNT,
|
|
TZ_DEVICE_MAX = 0x7FFFFFFF,
|
|
}tz_device_e_type;
|
|
|
|
/** @} */ /* end_addtogroup tz_datatypes */
|
|
|
|
/**
|
|
@weakgroup weak_tz_pil_qdsp6_nmi_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_pil_qdsp6_nmi_req_s
|
|
{
|
|
UINT64 val; /**< Value for the LPASS Hexagon
|
|
NMI register. Bits other
|
|
than the least significant
|
|
one are ignored by the
|
|
call. */
|
|
} __attribute__ ((packed)) tz_pil_qdsp6_nmi_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_dump_set_cpu_ctx_buf_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_dump_set_cpu_ctx_buf_req_s
|
|
{
|
|
UINT64 addr; /**< Address of the WDT reset
|
|
context dump buffer. When a
|
|
nonsecure WDT expires, the
|
|
CPU contexts are saved to
|
|
this buffer. The entire
|
|
buffer must be in nonsecure
|
|
memory. */
|
|
|
|
UINT64 size; /**< Size of the WDT reset context
|
|
dump buffer in bytes. */
|
|
} __attribute__ ((packed)) tz_dump_set_cpu_ctx_buf_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_dump_set_cache_buf_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_dump_set_cache_buf_req_s
|
|
{
|
|
UINT64 addr; /**< Address of L1 or L2 dump buffer.
|
|
|
|
When a nonsecure WDT that is
|
|
configured as a Fast Interrupt
|
|
Request (FIQ) expires, or if the
|
|
nonsecure side requests L1 dumping,
|
|
L1 caches are saved to this buffer.
|
|
|
|
The entire buffer must be in nonsecure
|
|
memory and must be 4 KB aligned.
|
|
L2 is dumped only on a nonsecure
|
|
side request. */
|
|
|
|
UINT64 size; /**< Size of the L1 dump buffer in
|
|
bytes. */
|
|
} __attribute__ ((packed)) tz_dump_set_cache_buf_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_dump_query_cache_buf_size_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_dump_query_cache_buf_size_req_s
|
|
{
|
|
UINT64 spare; /**< Spare field for future use;
|
|
must be zero. */
|
|
} __attribute__ ((packed)) tz_dump_query_cache_buf_size_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_dump_query_cache_buf_size_rsp_s
|
|
@{
|
|
*/
|
|
typedef struct tz_dump_query_cache_buf_size_rsp_s
|
|
{
|
|
struct tz_syscall_rsp_s common_rsp;
|
|
UINT64 size; /**< After a successfull call, the L1/L2
|
|
dump size in bytes is stored
|
|
here. */
|
|
} __attribute__ ((packed)) tz_dump_query_cache_buf_size_rsp_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_dump_set_ocmem_buf_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_dump_set_ocmem_buf_req_s
|
|
{
|
|
UINT64 addr;
|
|
/**< Address of OCMEM dump buffer. When a nonsecure WDT as an FIQ
|
|
expires, or if the nonsecure side requests OCMEM dumping, OCMEM
|
|
data is saved to this buffer.
|
|
|
|
The entire buffer must be in nonsecure memory and must be 4KB aligned. */
|
|
|
|
UINT64 size;
|
|
/**< Size of the dump buffer in bytes. */
|
|
} __attribute__ ((packed)) tz_dump_set_ocmem_buf_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_dump_query_ocmem_buf_size_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_dump_query_ocmem_buf_size_req_s
|
|
{
|
|
UINT64 spare; /**< Spare field for future use;
|
|
must be zero. */
|
|
} __attribute__ ((packed)) tz_dump_query_ocmem_buf_size_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_dump_query_ocmem_buf_size_rsp_s
|
|
@{
|
|
*/
|
|
typedef struct tz_dump_query_ocmem_buf_size_rsp_s
|
|
{
|
|
tz_syscall_rsp_t common_rsp; /**< Common response structure */
|
|
UINT64 size; /**< After a successfull call, the
|
|
OCMEM dump size in bytes is
|
|
stored here. */
|
|
} __attribute__ ((packed)) tz_dump_query_ocmem_buf_size_rsp_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_security_allows_mem_dump_legacy_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_security_allows_mem_dump_legacy_req_s
|
|
{
|
|
UINT64 rsp;
|
|
/**< If non-zero, the security policy
|
|
permits dumping memory for
|
|
debugging. */
|
|
UINT64 rsp_len;
|
|
} __attribute__ ((packed)) tz_security_allows_mem_dump_legacy_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup tz_dump_smmu_fault_regs_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_dump_smmu_fault_regs_req_s
|
|
{
|
|
UINT64 deviceid; /**< SMMU ID see #tz_device_e_type. */
|
|
UINT64 cb_number; /**< CB # */
|
|
UINT64 addr; /**< Address of Fault regs dump buffer. */
|
|
UINT64 size; /**< Size of the Fault regs dump buffer. */
|
|
} __attribute__ ((packed)) tz_dump_smmu_fault_regs_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
|
|
/**
|
|
@weakgroup weak_tz_security_is_retail_unlock_rsp_s
|
|
@{
|
|
*/
|
|
typedef struct tz_security_is_retail_unlock_rsp_s
|
|
{
|
|
tz_syscall_rsp_t common_rsp; /**< Common response structure */
|
|
UINT64 enabled;
|
|
/**< If non-zero, the retail unlock
|
|
is enable. */
|
|
} __attribute__ ((packed)) tz_security_is_retail_unlock_rsp_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_set_address_to_dump_tz_diag_for_uefi_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_set_address_to_dump_tz_diag_for_uefi_req_s
|
|
{
|
|
UINT64 addr; /**< Address to dump TZ diag at. */
|
|
|
|
UINT64 size; /**< Size of memory to dump. */
|
|
} __attribute__ ((packed)) tz_set_address_to_dump_tz_diag_for_uefi_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_rpm_online_dump_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_rpm_online_dump_req_s
|
|
{
|
|
UINT64 unused; /**< Unused. */
|
|
} __attribute__ ((packed)) tz_rpm_online_dump_req_s;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_security_allows_mem_dump_rsp_s
|
|
@{
|
|
*/
|
|
typedef struct tz_security_allows_mem_dump_rsp_s
|
|
{
|
|
tz_syscall_rsp_t common_rsp; /**< Common response structure */
|
|
UINT64 allowed;
|
|
/**< If non-zero, the security policy
|
|
permits dumping memory for
|
|
debugging. */
|
|
} __attribute__ ((packed)) tz_security_allows_mem_dump_rsp_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_dump_rpm_online_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_dump_rpm_online_req_s
|
|
{
|
|
UINT64 spare; /**< spare argument for future use */
|
|
} tz_dump_rpm_online_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* RES_LOCKING Service Structures
|
|
* -------------------------------------------------------------------------*/
|
|
|
|
/** @addtogroup tz_datatypes
|
|
@{ */
|
|
|
|
/**
|
|
Hardware resources available for configuration and locking by
|
|
the QSEE.
|
|
|
|
@note1hang The CE numbering is logical and does not map to actual
|
|
hardware CE naming directly.
|
|
*/
|
|
typedef enum
|
|
{
|
|
TZ_RESOURCE_CE1 = 1, /**< @deprecated This enum member is deprecated.
|
|
Use TZ_RESOURCE_CE_MSS. */
|
|
TZ_RESOURCE_CE_MSS = 1, /**< Modem CE resource. */
|
|
TZ_RESOURCE_CE2 = 2, /**< @deprecated This enum member is
|
|
deprecated. Use TZ_RESOURCE_CE_AP. */
|
|
TZ_RESOURCE_CE_AP = 2, /**< Application processor's CE resource. */
|
|
TZ_RESOURCE_RNG = 3 /**< Random number generator. */
|
|
} TZ_XPU_RESOURCE_ET;
|
|
|
|
/** @} */ /* end_addtogroup tz_datatypes */
|
|
|
|
/**
|
|
@weakgroup weak_tz_lock_resource_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_lock_resource_req_s
|
|
{
|
|
UINT64 res; /**< Resource to lock. See
|
|
#TZ_XPU_RESOURCE_ET. */
|
|
|
|
UINT64 lock; /**< Set to 1 to lock the resource
|
|
and 0 to unlock it. */
|
|
} __attribute__ ((packed)) tz_lock_resource_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_lock_resource_rsp_s
|
|
@{
|
|
*/
|
|
typedef struct tz_lock_resource_rsp_s
|
|
{
|
|
tz_syscall_rsp_t common_rsp; /**< Common response structure */
|
|
INT64 ret; /**< Return code: 0 means success;
|
|
E_BUSY means the resource is
|
|
locked; other negative
|
|
values mean failure. */
|
|
} __attribute__ ((packed)) tz_lock_resource_rsp_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
|
|
/** @addtogroup tz_macros_constants
|
|
@{ */
|
|
|
|
/** @name Crypto Engine Access Method
|
|
@{ */
|
|
|
|
/**
|
|
Application processor accesses the crypto engine using registers.
|
|
*/
|
|
#define TZ_RESCFG_AP_CE_REGISTER_USE 0
|
|
/**
|
|
Application processor accesses the crypto engine using the data mover.
|
|
*/
|
|
#define TZ_RESCFG_AP_CE_ADM_USE 1
|
|
|
|
/** @} */ /* end_namegroup Crypto Engine Access Method */
|
|
|
|
/** @} */ /* end_addtogroup tz_macros_constants */
|
|
|
|
|
|
/**
|
|
@weakgroup weak_tz_config_resource_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_config_resource_req_s
|
|
{
|
|
UINT64 res; /**< Resource to configure. See
|
|
#TZ_XPU_RESOURCE_ET. */
|
|
|
|
UINT64 arg; /**< Argument to the resource
|
|
configuration. */
|
|
} __attribute__ ((packed)) tz_config_resource_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/** @addtogroup tz_datatypes
|
|
@{ */
|
|
|
|
/**
|
|
List of software fuses supported by the QSEE.
|
|
*/
|
|
typedef enum
|
|
{
|
|
TZ_HLOS_IMG_TAMPER_FUSE = 0, /**< Used during boot to determine
|
|
if the HLOS image has successfully
|
|
been authenticated. */
|
|
TZ_WINSECAPP_LOADED_FUSE = 1, /**< Used by the WinSec application to
|
|
prevent reloading. */
|
|
TZ_UEFISECAPP_LOADED_FUSE = 2, /**< Used by UefiSecApp to prevent
|
|
reloading. */
|
|
TZ_OEM_FUSE_1 = 3, /**< Reserved fuse bit for OEMs. */
|
|
|
|
TZ_OEM_FUSE_2 = 4, /**< Reserved fuse bit for OEMs. */
|
|
|
|
TZ_OEM_FUSE_3 = 5, /**< Reserved fuse bit for OEMs. */
|
|
|
|
TZ_OEM_FUSE_4 = 6, /**< Reserved fuse bit for OEMs. */
|
|
|
|
TZ_OEM_FUSE_5 = 7, /**< Reserved fuse bit for OEMs. */
|
|
|
|
TZ_OEM_FUSE_6 = 8, /**< Reserved fuse bit for OEMs. */
|
|
|
|
TZ_OEM_FUSE_7 = 9, /**< Reserved fuse bit for OEMs. */
|
|
|
|
TZ_OEM_FUSE_8 = 10, /**< Reserved fuse bit for OEMs. */
|
|
|
|
TZ_OEM_FUSE_9 = 11, /**< Reserved fuse bit for OEMs. */
|
|
|
|
TZ_OEM_FUSE_10 = 12, /**< Reserved fuse bit for OEMs. */
|
|
|
|
TZ_OEM_FUSE_11 = 13, /**< Reserved fuse bit for OEMs. */
|
|
|
|
TZ_OEM_FUSE_12 = 14, /**< Reserved fuse bit for OEMs. */
|
|
|
|
TZ_MDTP_RECOVERY_MS_FUSE = 15, /**< Used by MDTP to prevent
|
|
access to Bootloader APIs. */
|
|
TZ_MDTP_HLOS_MS_FUSE = 16, /**< Used by MDTP to prevent
|
|
access to Bootloader & Recovery APIs. */
|
|
TZ_QCOM_RESERVED_FUSE_1 = 17, /**< Reserved fuse bit for QCOM. */
|
|
|
|
TZ_QCOM_RESERVED_FUSE_2 = 18, /**< Reserved fuse bit for QCOM. */
|
|
|
|
TZ_QCOM_RESERVED_FUSE_3 = 19, /**< Reserved fuse bit for QCOM. */
|
|
|
|
TZ_QCOM_RESERVED_FUSE_4 = 20, /**< Reserved fuse bit for QCOM. */
|
|
|
|
TZ_QCOM_RESERVED_FUSE_5 = 21, /**< Reserved fuse bit for QCOM. */
|
|
|
|
TZ_HLOS_BL_MILESTONE_FUSE = 22, /**< Used to notify the bootloader milestone call.*/
|
|
|
|
TZ_HLOS_TAMPER_NOTIFY_FUSE = 23, /**< Used to notify TZ that HLOS has been tampered.*/
|
|
|
|
TZ_NUM_SW_FUSES = 24 /**< Number of supported software fuses.
|
|
@newpage */
|
|
} tz_sw_fuse_t;
|
|
|
|
/* Enumerate BLSP subsystem owners */
|
|
typedef enum
|
|
{
|
|
tzbsp_blsp_owner_none = 0,
|
|
tzbsp_blsp_owner_apss = 1,
|
|
tzbsp_blsp_owner_adsp = 2
|
|
} tzbsp_blsp_owner_ss_type;
|
|
/** @} */ /* end_addtogroup tz_datatypes */
|
|
|
|
/**
|
|
@weakgroup weak_tz_modify_ownership_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_modify_blsp_ownership_req_s
|
|
{
|
|
UINT64 blsp_periph_num;
|
|
/* blsp peripheral number. */
|
|
UINT64 owner_ss;
|
|
/* Owner subsystem. See tzbsp_blsp_owner_ss_type */
|
|
} __attribute__ ((packed)) tz_modify_blsp_ownership_req_t;
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* INFO Service Structures
|
|
* -------------------------------------------------------------------------*/
|
|
/**
|
|
@weakgroup weak_tz_info_is_svc_available_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_info_is_svc_available_req_s
|
|
{
|
|
UINT64 id; /**< Command ID of the queried service. */
|
|
} __attribute__ ((packed)) tz_info_is_svc_available_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_info_is_svc_available_rsp_s
|
|
@{
|
|
*/
|
|
typedef struct tz_info_is_svc_available_rsp_s
|
|
{
|
|
tz_syscall_rsp_t common_rsp; /**< Common response structure */
|
|
BOOLEAN found; /**< If TRUE, the searched service
|
|
was found; FALSE otherwise. */
|
|
} __attribute__ ((packed)) tz_info_is_svc_available_rsp_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_info_get_diag_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_info_get_diag_req_s
|
|
{
|
|
UINT64 buffer; /**< Pointer to the buffer to where the
|
|
QSEE software copies the
|
|
diagnostic area. */
|
|
UINT64 buffer_size; /**< Size of the buffer in bytes.
|
|
This must be at least the
|
|
size of the diagnostic
|
|
area. If the buffer is larger
|
|
than the diagnostic area, the
|
|
remaining bytes are ignored
|
|
by the QSEE software. */
|
|
} __attribute__ ((packed)) tz_info_get_diag_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_feature_version_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_feature_version_req_s
|
|
{
|
|
UINT64 feature_id; /**< Feature for which to request
|
|
the version information.
|
|
See #tz_feature_t. */
|
|
} __attribute__ ((packed)) tz_feature_version_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_feature_version_rsp_s
|
|
@{
|
|
*/
|
|
typedef struct tz_feature_version_rsp_s
|
|
{
|
|
tz_syscall_rsp_t common_rsp; /**< Common response structure */
|
|
UINT64 version; /**< Version of the specified
|
|
feature, or zero if the
|
|
feature is undefined. */
|
|
} __attribute__ ((packed)) tz_feature_version_rsp_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_get_secure_state_rsp_s
|
|
@{
|
|
*/
|
|
typedef struct tz_get_secure_state_rsp_s
|
|
{
|
|
tz_syscall_rsp_t common_rsp; /**< Common response structure */
|
|
UINT64 status_0; /**< First half of the secure status. */
|
|
UINT64 status_1; /**< Second half of the secure status. */
|
|
}__attribute__ ((packed)) tz_get_secure_state_rsp_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_get_secure_state_legacy_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_get_secure_state_legacy_req_s
|
|
{
|
|
UINT64 status_ptr; /**< Pointer to the query status struct. */
|
|
UINT64 status_len; /**< Length of the query status struct. */
|
|
}__attribute__ ((packed)) tz_get_secure_state_legacy_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* SSD Service Structures
|
|
* -------------------------------------------------------------------------*/
|
|
/**
|
|
@weakgroup weak_tz_ssd_decrypt_img_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_ssd_decrypt_img_req_s
|
|
{
|
|
UINT64 img_ptr; /**< Double pointer to the image. */
|
|
UINT64 img_len_ptr; /**< Pointer to the length of the
|
|
image. */
|
|
} __attribute__ ((packed)) tz_ssd_decrypt_img_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_ssd_encrypt_keystore_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_ssd_encrypt_keystore_req_s
|
|
{
|
|
UINT64 keystore_ptr; /**< Double pointer to the
|
|
keystore. */
|
|
UINT64 keystore_len_ptr; /**< Pointer to the length
|
|
of the keystore. */
|
|
} __attribute__ ((packed)) tz_ssd_encrypt_keystore_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_ssd_protect_keystore_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_ssd_protect_keystore_req_s
|
|
{
|
|
UINT64 keystore_ptr; /**< Pointer to SSD keystore. */
|
|
UINT64 keystore_len; /**< Length of the keystore. */
|
|
} __attribute__ ((packed)) tz_ssd_protect_keystore_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/** @addtogroup tz_datatypes
|
|
@{ */
|
|
|
|
/**
|
|
Return types for the Load Keystore command.
|
|
*/
|
|
typedef enum
|
|
{
|
|
TZ_SSD_PKS_SUCCESS = 0, /**< Successful return. */
|
|
TZ_SSD_PKS_INVALID_PTR = 1, /**< Keystore pointer invalid. */
|
|
TZ_SSD_PKS_INVALID_LEN = 2, /**< Keystore length incorrect. */
|
|
TZ_SSD_PKS_UNALIGNED_PTR = 3, /**< Keystore pointer not word
|
|
aligned. */
|
|
TZ_SSD_PKS_PROTECT_MEM_FAILED = 4, /**< Failure when protecting
|
|
the keystore memory.*/
|
|
TZ_SSD_PKS_INVALID_NUM_KEYS = 5, /**< Unsupported number of
|
|
keys passed. If a valid
|
|
pointer to nonsecure
|
|
memory is passed that
|
|
is not a keystore, this is
|
|
a likely return code. */
|
|
TZ_SSD_PKS_DECRYPT_FAILED = 6 /**< Keystore could not be
|
|
decrypted. */
|
|
} tz_ssd_pks_return_type;
|
|
|
|
/** @} */ /* end_addtogroup tz_datatypes */
|
|
|
|
/**
|
|
@weakgroup weak_tz_ssd_protect_keystore_rsp_s
|
|
@{
|
|
*/
|
|
typedef struct tz_ssd_protect_keystore_rsp_s
|
|
{
|
|
tz_syscall_rsp_t common_rsp; /**< Common response structure */
|
|
UINT64 status; /**< Status of the load keystore
|
|
call. See
|
|
#tz_ssd_pks_return_type.
|
|
*/
|
|
} __attribute__ ((packed)) tz_ssd_protect_keystore_rsp_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_ssd_parse_md_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_ssd_parse_md_req_s
|
|
{
|
|
UINT64 md_len; /**< Length of the metadata. */
|
|
UINT64 md; /**< PoINTer to the metadata to
|
|
parse. The memory must be
|
|
word-aligned, as the type
|
|
implies. */
|
|
} __attribute__ ((packed)) tz_ssd_parse_md_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/** @addtogroup tz_datatypes
|
|
@{ */
|
|
|
|
/**
|
|
Return types for the parse metadata command.
|
|
*/
|
|
typedef enum
|
|
{
|
|
TZ_SSD_PMD_ENCRYPTED = 0, /**< Parsing was successful
|
|
and the image is
|
|
encrypted. */
|
|
TZ_SSD_PMD_NOT_ENCRYPTED = 1, /**< Parsing was successful
|
|
and the image is not
|
|
encrypted. */
|
|
TZ_SSD_PMD_NO_MD_FOUND = 3, /**< No SSD metadata
|
|
start tag was found
|
|
in the given
|
|
memory. This
|
|
proably indicates
|
|
that the image is
|
|
not encrypted. It
|
|
could also indicate
|
|
the start tag was
|
|
truncated. */
|
|
TZ_SSD_PMD_BUSY = 4, /**< Parsing was not attempted
|
|
because no parsing context
|
|
was available at this
|
|
time. */
|
|
TZ_SSD_PMD_BAD_MD_PTR_OR_LEN = 5, /**< Could not search the
|
|
memory because the
|
|
pointer or length was
|
|
bad. */
|
|
TZ_SSD_PMD_PARSING_INCOMPLETE = 6, /**< The parsed metadata
|
|
is incomplete. Call
|
|
again with a larger
|
|
buffer to scan. */
|
|
TZ_SSD_PMD_PARSING_FAILED = 7, /**< There was a parsing
|
|
error in the metadata. */
|
|
TZ_SSD_PMD_SETUP_CIPHER_FAILED = 8, /**< There was a problem
|
|
finding the correct key
|
|
in the keystore or
|
|
initializing the crypto
|
|
hardware. */
|
|
} tz_ssd_pmd_return_type;
|
|
|
|
/** @} */ /* end_addtogroup tz_datatypes */
|
|
|
|
|
|
/**
|
|
@weakgroup weak_tz_ssd_parse_md_rsp_info_s
|
|
@{
|
|
*/
|
|
typedef struct tz_ssd_parse_md_rsp_info_s
|
|
{
|
|
UINT64 status; /**< Status of request. See
|
|
#tz_ssd_pmd_return_type.
|
|
*/
|
|
UINT64 md_ctx_id; /**< Context ID to use for a
|
|
decrypt fragment call. */
|
|
UINT64 md_end_ptr; /**< Pointer to the first memory
|
|
after the SSD metadata.
|
|
This pointer is always
|
|
word-aligned. If the
|
|
image was encrypted all at
|
|
once, this is the
|
|
start of the encrypted
|
|
data. */
|
|
} __attribute__ ((packed)) tz_ssd_parse_md_rsp_info_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
|
|
/**
|
|
@weakgroup weak_tz_ssd_parse_md_rsp_s
|
|
@{
|
|
*/
|
|
typedef struct tz_ssd_parse_md_rsp_s
|
|
{
|
|
tz_syscall_rsp_t common_rsp; /**< Common response structure */
|
|
struct tz_ssd_parse_md_rsp_info_s rsp; /**< Parse MD response
|
|
structure. */
|
|
} __attribute__ ((packed)) tz_ssd_parse_md_rsp_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_ssd_decrypt_img_frag_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_ssd_decrypt_img_frag_req_s
|
|
{
|
|
UINT64 md_ctx_id; /**< Context ID given in the
|
|
parse metadata call. */
|
|
UINT64 last_frag; /**< Whether the passed
|
|
fragment is the
|
|
last one (1 = last
|
|
fragment). */
|
|
UINT64 frag_len; /**< Length of the
|
|
fragment. The
|
|
fragment length must
|
|
be a multiple of the
|
|
encryption block
|
|
size. */
|
|
UINT64 frag; /**< Encrypted fragment.
|
|
The fragment must
|
|
be word-aligned, as
|
|
noted by the
|
|
UINT32* type. */
|
|
} __attribute__ ((packed)) tz_ssd_decrypt_frag_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_ssd_decrypt_elf_seg_frag_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_ssd_decrypt_elf_seg_frag_req_s
|
|
{
|
|
UINT64 md_ctx_id; /**< Context ID given in the
|
|
parse metadata call. */
|
|
UINT64 segment_num; /**< ELF segment number
|
|
for the given
|
|
fragment. Note that
|
|
all the fragments
|
|
for a given ELF
|
|
segment must be
|
|
received before
|
|
going to the next
|
|
segment. */
|
|
UINT64 last_seg; /**< Whether the current
|
|
segment is the last
|
|
one (1 = last segment). */
|
|
UINT64 last_frag; /**< Whether the passed
|
|
fragment is the last
|
|
one for a given
|
|
segment_num (1 =
|
|
last fragment). */
|
|
UINT64 frag_len; /**< Length of the fragment.
|
|
The fragment length
|
|
must be a multiple of the
|
|
encryption block size
|
|
unless the last_frag flag
|
|
is passed. */
|
|
UINT64 frag; /**< Encrypted fragment.
|
|
The fragment must
|
|
be word-aligned, as
|
|
noted by the
|
|
UINT32* type. */
|
|
} __attribute__ ((packed)) tz_ssd_decrypt_elf_seg_frag_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
|
|
|
|
/** @addtogroup tz_datatypes
|
|
@{ */
|
|
|
|
/**
|
|
Return types for the Decrypt (image/ELF segment) Fragment command.
|
|
*/
|
|
typedef enum
|
|
{
|
|
TZ_SSD_DF_SUCCESS = 0, /**< Fragment decrypted
|
|
successfully. */
|
|
TZ_SSD_DF_BAD_FRAG_PTR_OR_LEN = 1, /**< Fragment pointer or
|
|
length incorrect. */
|
|
TZ_SSD_DF_CTX_NOT_FOUND = 2, /**< Fragment context
|
|
not found in
|
|
currently available
|
|
contexts. */
|
|
TZ_SSD_DF_LEN_ALIGNMENT_FAILED = 3, /**< Length alignment of the
|
|
fragment is incorrect. */
|
|
TZ_SSD_DF_DECRYPTION_FAILED = 4 /**< Problem with decryption. */
|
|
} tz_ssd_df_return_type;
|
|
|
|
/** @} */ /* end_addtogroup tz_datatypes */
|
|
|
|
|
|
/**
|
|
@weakgroup weak_tz_ssd_decrypt_frag_rsp_s
|
|
@{
|
|
*/
|
|
typedef struct tz_ssd_decrypt_frag_rsp_s
|
|
{
|
|
tz_syscall_rsp_t common_rsp; /**< Common response structure */
|
|
UINT64 status; /**< Status of the decrypt
|
|
request. See
|
|
#tz_ssd_df_return_type.
|
|
*/
|
|
} __attribute__ ((packed)) tz_ssd_decrypt_frag_rsp_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* FUSE Service Structures
|
|
* -------------------------------------------------------------------------*/
|
|
/**
|
|
@weakgroup weak_tz_sw_fuse_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_sw_fuse_req_s
|
|
{
|
|
UINT64 fuse_id; /**< Fuse ID. See
|
|
#tz_sw_fuse_t. */
|
|
} __attribute__ ((packed)) tz_sw_fuse_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_sw_fuse_rsp_s
|
|
@{
|
|
*/
|
|
typedef struct tz_sw_fuse_rsp_s
|
|
{
|
|
tz_syscall_rsp_t common_rsp; /**< Common response structure */
|
|
BOOLEAN fuse_blown; /**< If TRUE, the specified fuse
|
|
was blown; FALSE
|
|
otherwise. */
|
|
} __attribute__ ((packed)) tz_sw_fuse_rsp_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_qfprom_write_row_s
|
|
@{
|
|
*/
|
|
typedef struct tz_qfprom_write_row_s
|
|
{
|
|
UINT64 raw_row_address; /**< Raw row address of the fuse
|
|
to blow. */
|
|
UINT64 row_data; /**< Pointer to the data buffer. */
|
|
UINT64 bus_clk_khz; /**< Bus clock speed in KHz. */
|
|
UINT64 qfprom_api_status; /**< Status code from the QFPROM. */
|
|
} __attribute__ ((packed)) tz_qfprom_write_row_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_qfprom_write_multiple_rows_s
|
|
@{
|
|
*/
|
|
typedef struct tz_qfprom_write_multiple_rows_s
|
|
{
|
|
UINT64 row_array; /**< Row array. */
|
|
UINT64 row_array_size; /**< Size of the row array. */
|
|
UINT64 bus_clk_khz; /**< Bus clock in KHz. */
|
|
UINT64 qfprom_api_status; /**< Status code from the QFPROM. */
|
|
} __attribute__ ((packed)) tz_qfprom_write_multiple_rows_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_qfprom_read_row_s
|
|
@{
|
|
*/
|
|
typedef struct tz_qfprom_read_row_s
|
|
{
|
|
UINT64 row_address; /**< Row address of the fuse to
|
|
read. */
|
|
INT64 addr_type; /**< Indicates whether the address
|
|
is raw corrected. */
|
|
UINT64 row_data; /**< Pointer to the buffer that is
|
|
to hold the read data. */
|
|
UINT64 qfprom_api_status; /**< Status code from the QFPROM. */
|
|
} __attribute__ ((packed)) tz_qfprom_read_row_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_qfprom_rollback_write_row_s
|
|
@{
|
|
*/
|
|
typedef struct tz_qfprom_rollback_write_row_s
|
|
{
|
|
UINT64 raw_row_address; /**< Raw row address of the fuse
|
|
to blow. */
|
|
UINT64 row_data; /**< Pointer to the data buffer. */
|
|
UINT64 bus_clk_khz; /**< Bus clock in KHz. */
|
|
UINT64 qfprom_api_status; /**< Status code from the QFPROM. */
|
|
} __attribute__ ((packed)) tz_qfprom_rollback_write_row_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* CRYPTO Service Structures
|
|
* -------------------------------------------------------------------------*/
|
|
/**
|
|
@weakgroup weak_tz_get_prng_data_s
|
|
@{
|
|
*/
|
|
typedef struct tz_get_prng_data_s
|
|
{
|
|
UINT64 out_buf; /**< Pointer to the buffer to fill
|
|
with data from the PRNG. */
|
|
UINT64 out_buf_sz; /**< Size of the output buffer. */
|
|
} __attribute__ ((packed)) tz_get_prng_data_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* SC_KEY_EXCHANGE Service Structures
|
|
* -------------------------------------------------------------------------*/
|
|
/**
|
|
@weakgroup weak_tz_sc_init_s
|
|
@{
|
|
*/
|
|
typedef struct tz_sc_init_s
|
|
{
|
|
UINT64 ssid; /**< Subsystem ID. See
|
|
#tz_sc_ss_e_type. */
|
|
UINT64 address_ptr; /**< Pointer to the address location. */
|
|
UINT64 len; /**< Length of the allocated memory. */
|
|
INT64 status_ptr; /**< Return status. */
|
|
} __attribute__ ((packed)) tz_sc_init_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_sc_deinit_s
|
|
@{
|
|
*/
|
|
typedef struct tz_sc_deinit_s
|
|
{
|
|
UINT64 ssid; /**< Subsystem ID. */
|
|
INT64 status_ptr; /**< Return status. */
|
|
} __attribute__ ((packed)) tz_sc_deinit_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* MEMORY_PROTECTION Service Structures
|
|
* -------------------------------------------------------------------------*/
|
|
/** @addtogroup tz_datatypes
|
|
@{ */
|
|
|
|
/**
|
|
Enumerates memory usage hints.
|
|
*/
|
|
typedef enum
|
|
{
|
|
/** Memory used for video SMMU page tables */
|
|
TZBSP_MEM_MPU_USAGE_CP_PTBL = 0x1,
|
|
|
|
/** Memory used for QSEE Req/Rsp region */
|
|
TZBSP_MEM_MPU_USAGE_QSEE_REQRSP_REGION = 0x2,
|
|
|
|
/** Memory used for QSEE Secure Area region */
|
|
TZBSP_MEM_MPU_USAGE_QSEE_SA_REGION = 0x3,
|
|
|
|
/** Memory used for a variety of secure uses. */
|
|
TZBSP_MEM_MPU_USAGE_SDDR_REGION = 0x4,
|
|
|
|
/** Memory used for QSEE Shared Buffer region */
|
|
TZBSP_MEM_MPU_USAGE_QSEE_SB_REGION = 0x5,
|
|
|
|
/** Max value */
|
|
TZBSP_MEM_MPU_USAGE_MAX,
|
|
|
|
TZBSP_MEM_MPU_USAGE_UNKNOWN = 0x7fffffff
|
|
}tzbsp_mem_mpu_usage_e_type;
|
|
|
|
|
|
/** @} */ /* end_addtogroup tz_datatypes */
|
|
|
|
/**
|
|
@weakgroup weak_hyp_memprot_chunks_info_s
|
|
@{
|
|
*/
|
|
typedef struct hyp_memprot_ipa_info_s
|
|
{
|
|
UINT64 IPAaddr; /**< IPA address is 64-bit intermediate physical
|
|
address. */
|
|
|
|
UINT64 IPAsize; /**< sizes in bytes of IPA address */
|
|
|
|
} __attribute__ ((packed)) hyp_memprot_ipa_info_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/** @addtogroup tz_datatypes
|
|
@{ */
|
|
|
|
typedef enum
|
|
{
|
|
AC_VM_NONE,
|
|
AC_VM_TZ,
|
|
AC_VM_RPM, /* Single stage */
|
|
AC_VM_HLOS,
|
|
AC_VM_HYP,
|
|
AC_VM_SSC_Q6_ELF, /* Single */ /* IPA = PA */
|
|
AC_VM_ADSP_Q6_ELF, /* Single */
|
|
AC_VM_SSC_HLOS, /* ??, may be we combine this with other SSC one */
|
|
AC_VM_CP_TOUCH,
|
|
AC_VM_CP_BITSTREAM,
|
|
AC_VM_CP_PIXEL,
|
|
AC_VM_CP_NON_PIXEL,
|
|
AC_VM_VIDEO_FW,
|
|
AC_VM_CP_CAMERA,
|
|
AC_VM_HLOS_UNMAPPED, /* Memory owned by HLOS but not currently mapped in HLOS VM */
|
|
AC_VM_MSS_MSA, /* This is MSA=1 view */
|
|
AC_VM_MSS_NONMSA, /* IPA not equal PA */
|
|
AC_VM_CP_SPSS_SP = 0x1A,
|
|
AC_VM_CP_SPSS_SP_SHARED = 0x22,
|
|
AC_VM_CP_SPSS_HLOS_SHARED = 0x24,
|
|
AC_VM_MSS_NAV = 0x2B,
|
|
AC_VM_WLAN_DSP = 0x2C,
|
|
AC_VM_LAST,
|
|
AC_VM_MAX = 0x7FFFFFFF,
|
|
}ACVirtualMachineId;
|
|
|
|
#define VM_PERM_X 0x1
|
|
#define VM_PERM_W 0x2
|
|
#define VM_PERM_R 0x4
|
|
|
|
/** @} */ /* end_addtogroup tz_datatypes */
|
|
|
|
/**
|
|
@weakgroup weak_hyp_memprot_dstVM_perm_info_s
|
|
@{
|
|
*/
|
|
|
|
typedef struct hyp_memprot_dstVM_perm_info_s
|
|
{
|
|
UINT32 dstVM; /**< Destination VM defined by ACVirtualMachineId*/
|
|
|
|
UINT32 dstVMperm; /**< Permissions of IPA to be mapped to VM, bitwise OR of AC_PERM_* */
|
|
|
|
UINT64 ctx; /**< destination VM specific Context information */
|
|
|
|
UINT32 ctxsize; /**< size of ctx buffer in bytes */
|
|
|
|
} hyp_memprot_dstVM_perm_info_t;
|
|
|
|
|
|
/**
|
|
@weakgroup weak_hyp_memprot_assign_s
|
|
@{
|
|
*/
|
|
typedef struct hyp_memprot_assign_s
|
|
{
|
|
UINT64 IPAinfolist; /**< List of IPAinfo structures #hyp_memprot_ipa_info_t */
|
|
|
|
UINT64 IPAinfolistsize; /**< size in bytes of IPAinfolist entries*/
|
|
|
|
UINT64 sourceVMlist; /**< Source VMlist, defined by ACVirtualMachineId #UINT32 */
|
|
|
|
UINT64 srcVMlistsize; /**< Size of sourceVMlist in bytes*/
|
|
|
|
UINT64 destVMlist; /**< Defined by #hyp_memprot_dstVM_perm_info_t*/
|
|
|
|
UINT64 destVMlistsize; /**< size of destVMlistAndPerm in bytes*/
|
|
|
|
UINT64 spare; /**< Reserved for future use */
|
|
} __attribute__ ((packed)) hyp_memprot_assign_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
|
|
/**
|
|
@weakgroup weak_tz_memprot_tagVM_s
|
|
@{
|
|
*/
|
|
typedef struct tz_memprot_tagVM_t
|
|
{
|
|
UINT64 IPAinfolist; /**< List of IPAinfo structures #hyp_memprot_ipa_info_t */
|
|
|
|
UINT64 IPAinfolistsize; /**< size in bytes of IPAinfolist entries*/
|
|
|
|
UINT64 destVMlist; /**< Destination VMlist, defined by ACVirtualMachineId #UINT32 */
|
|
|
|
UINT64 dstVMlistsize; /**< Total number of entries of the destVMlist */
|
|
|
|
UINT64 flags; /**< Reserved for future use */
|
|
} __attribute__ ((packed)) tz_memprot_tagVM_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
|
|
/**
|
|
@weakgroup weak_tz_protect_memory_s
|
|
@{
|
|
*/
|
|
typedef struct tz_protect_memory_s
|
|
{
|
|
UINT64 start; /**< Start address of the range. */
|
|
UINT64 size; /**< Size of the region in bytes. */
|
|
UINT64 tag_id; /**< A tag that specifies this
|
|
region's usage #tzbsp_mem_mpu_usage_e_type */
|
|
UINT64 lock; /**< TRUE to protect; FALSE
|
|
to unprotect. */
|
|
UINT64 flags; /**< Optional Flags. */
|
|
} __attribute__ ((packed)) tz_protect_memory_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* Memory protection service structures
|
|
* -------------------------------------------------------------------------*/
|
|
|
|
/**
|
|
@weakgroup weak_tz_restore_sec_cfg_req_s
|
|
@{
|
|
*/
|
|
|
|
typedef struct tz_restore_sec_cfg_req_s
|
|
{
|
|
UINT64 device;
|
|
/**< Device to be restored;
|
|
see #tz_device_e_type. */
|
|
UINT64 spare; /**< Spare. */
|
|
} __attribute__ ((packed)) tz_restore_sec_cfg_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_set_vmidmt_memtype_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_set_vmidmt_memtype_req_s
|
|
{
|
|
UINT64 device;
|
|
/**< Device to be configured;
|
|
see #tz_device_e_type. */
|
|
UINT64 vmid_idx; /**< Index for the memtype to be set;
|
|
0xFF for all indecies. */
|
|
UINT64 memtype; /**< Memory type value to be set. */
|
|
} __attribute__ ((packed)) tz_set_vmidmt_memtype_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
|
|
/**
|
|
@weakgroup weak_tz_memprot_video_var_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_memprot_video_var_req_s
|
|
{
|
|
UINT64 cp_start;
|
|
/**< Start address of the secure memory (CP) range in the device's virtual
|
|
address space. */
|
|
UINT64 cp_size;
|
|
/**< Size of the secure memory range (CP) in the device's virtual address
|
|
space. The end address is calculated as: cp_end = [cp_start +
|
|
cp_size - 1]. */
|
|
UINT64 cp_nonpixel_start;
|
|
/**< Start address of nonpixel data in the device's virtual address space.
|
|
Set cp_start < cp_nonpixel_start < cp_end cp_nonpixel so that the
|
|
range does not overlap with the firmware image.*/
|
|
UINT64 cp_nonpixel_size;
|
|
/**< Size of nonpixel data in the device's virtual address space. The end
|
|
address is calculated as: cp_nonpixel_end = [cp_nonpixel_start +
|
|
cp_nonpixel_size - 1]. Also, set cp_nonpixel_start < cp_nonpixel_end
|
|
@le cp_end cp_nonpixel so that the range does not overlap with the
|
|
firmware image. */
|
|
} __attribute__ ((packed)) tz_memprot_video_var_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
|
|
/**
|
|
@weakgroup weak_tz_memprot_dev_var_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_memprot_dev_var_req_s
|
|
{
|
|
UINT64 device_id;
|
|
/**< ID of the device where this memory is to be mapped.
|
|
See #tz_device_e_type. */
|
|
UINT64 va_list;
|
|
/**< a list of start address and size of the secure memory ranges in the device's
|
|
virtual address space. */
|
|
UINT64 list_size;
|
|
/**< Size of VA range list. */
|
|
} __attribute__ ((packed)) tz_memprot_dev_var_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
|
|
/**
|
|
@weakgroup weak_tz_memprot_ptbl_mem_size_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_memprot_ptbl_mem_size_req_s
|
|
{
|
|
UINT64 spare; /**< Spare field for future use,
|
|
must be zero. */
|
|
} __attribute__ ((packed)) tz_memprot_ptbl_mem_size_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
|
|
/**
|
|
@weakgroup weak_tz_memprot_ptbl_mem_size_rsp_s
|
|
@{
|
|
*/
|
|
typedef struct tz_memprot_ptbl_mem_size_rsp_s
|
|
{
|
|
tz_syscall_rsp_t common_rsp; /**< Common response structure */
|
|
UINT64 mem_size; /**< Required size of the
|
|
page table memory
|
|
region in bytes. */
|
|
INT64 ret; /**< Extended return code; 0 for
|
|
success; negative values
|
|
mean failure. */
|
|
} __attribute__ ((packed)) tz_memprot_ptbl_mem_size_rsp_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
|
|
/**
|
|
@weakgroup weak_tz_memprot_ptbl_mem_init_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_memprot_ptbl_mem_init_req_s
|
|
{
|
|
UINT64 addr; /**< Start address of the page
|
|
table memory region
|
|
(16 KB aligned). */
|
|
UINT64 size; /**< Size of page table memory
|
|
region in bytes. */
|
|
UINT64 spare; /**< Spare field for future use;
|
|
must be zero. */
|
|
} __attribute__ ((packed)) tz_memprot_ptbl_mem_init_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_memprot_rsp_s
|
|
@{
|
|
*/
|
|
typedef struct tz_memprot_rsp_s
|
|
{
|
|
tz_syscall_rsp_t common_rsp; /**< Common response structure */
|
|
UINT64 rsp; /**< Result of this syscall. */
|
|
} __attribute__ ((packed)) tz_memprot_rsp_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
|
|
/**
|
|
@weakgroup weak_tz_memprot_set_cp_pool_size_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_memprot_set_cp_pool_size_req_s
|
|
{
|
|
UINT64 size; /**< CP pool size */
|
|
UINT64 spare; /**< Spare field for future use,
|
|
must be zero. */
|
|
} __attribute__ ((packed)) tz_memprot_set_cp_pool_size_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
|
|
/** @addtogroup tz_datatypes
|
|
@{ */
|
|
|
|
/** Enumerates memory usage. */
|
|
typedef enum
|
|
{
|
|
TZ_MEM_USAGE_CP_VIDEO_BITSTREAM = 0x1, /**< Memory used for video
|
|
bistream (compressed)
|
|
CP data. */
|
|
TZ_MEM_USAGE_CP_VIDEO_PIXEL = 0x2, /**< Memory used for video
|
|
pixel (uncompressed)
|
|
CP data. */
|
|
TZ_MEM_USAGE_CP_VIDEO_NONPIXEL = 0x3, /**< Memory used for video
|
|
nonpixel CP data. */
|
|
TZ_MEM_USAGE_CP_SD = 0x4, /**< Memory used for Secure
|
|
Display data. */
|
|
TZ_MEM_USAGE_CP_SC = 0x5, /**< Memory used for Secure
|
|
Camera data. */
|
|
TZ_MEM_USAGE_CP_APP = 0x6, /**< Memory used for appliction
|
|
data. */
|
|
TZ_MEM_USAGE_COUNT,
|
|
TZ_MEM_USAGE_UNKNOWN = 0x7fffffff
|
|
}tz_mem_usage_e_type;
|
|
|
|
/** @} */ /* end_addtogroup tz_datatypes */
|
|
|
|
/**
|
|
@weakgroup weak_tz_memprot_chunks_info_s
|
|
@{
|
|
*/
|
|
typedef struct tz_memprot_chunks_info_s
|
|
{
|
|
UINT64 chunk_list; /**< Array of chunk addresses. Each entry
|
|
is a 32-bit physical address.
|
|
chunk_list_size gives the number of
|
|
entries in the array. */
|
|
UINT64 chunk_list_size;/**< Number of chunks in the chunk
|
|
list.*/
|
|
UINT64 chunk_size; /**< Size of each memory chunk (in bytes)
|
|
in the chunk list. */
|
|
} __attribute__ ((packed)) tz_memprot_chunks_info_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
|
|
/**
|
|
@weakgroup weak_tz_memprot_map_info_s
|
|
@{
|
|
*/
|
|
typedef struct tz_memprot_map_info_s
|
|
{
|
|
UINT64 device_id; /**< ID of the device where this memory is
|
|
to be mapped. See #tz_device_e_type.
|
|
The usage hint provided while
|
|
protecting the memory can be used to
|
|
validate this request. */
|
|
UINT64 ctxt_bank_id; /**< Context bank ID where this memory
|
|
is to be (un)mapped. These
|
|
correspond to context bank numbers
|
|
and are unique only for the device.
|
|
Values start from 0, which corresponds
|
|
to CB0. */
|
|
UINT64 dva_start; /**< Start address in the device's virtual
|
|
address space to which to map. */
|
|
UINT64 size; /**< Size in bytes of the virtual address
|
|
range to map. The end address is:
|
|
dva_end = dva_start + size - 1. */
|
|
} __attribute__ ((packed)) tz_memprot_map_info_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/** @addtogroup tz_macros_constants
|
|
@{ */
|
|
|
|
|
|
/** @name Memory Protection Method Flags
|
|
@{ */
|
|
|
|
/**
|
|
TLB invalidate as part of a map/unmap operation.
|
|
*/
|
|
#define TZ_MEMPROT_FLAG_TLBINVALIDATE 0x00000001
|
|
|
|
/** @} */ /* end_namegroup Memory Protection Method Flags */
|
|
|
|
/** @} */ /* end_addtogroup tz_macros_constants */
|
|
|
|
/**
|
|
@weakgroup weak_tz_memprot_lock2_legacy_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_memprot_lock2_legacy_req_s
|
|
{
|
|
tz_memprot_chunks_info_t chunks; /**< Memory chunk list. */
|
|
UINT64 mem_usage; /**< Hint on the memory usage.
|
|
See #tz_mem_usage_e_type. */
|
|
UINT64 lock; /**< 1 (TRUE) to lock (protect);
|
|
0 (FALSE) to unlock (unprotect). */
|
|
UINT64 flags; /**< Flags field for future use;
|
|
must be zero when no flags are
|
|
set. */
|
|
} __attribute__ ((packed)) tz_memprot_lock2_legacy_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_memprot_map2_legacy_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_memprot_map2_legacy_req_s
|
|
{
|
|
tz_memprot_chunks_info_t chunks; /**< Memory chunk list. */
|
|
tz_memprot_map_info_t map; /**< Map-to information. */
|
|
UINT64 flags; /**< Flags field, which is a bitwise
|
|
OR of TZ_MEMPROT_FLAG_* flags.
|
|
Currently supported flags:
|
|
TLBINVALIDATE \n
|
|
Must be zero when no flags are
|
|
set. */
|
|
} __attribute__ ((packed)) tz_memprot_map2_legacy_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_memprot_unmap2_legacy_req_s
|
|
@{ */
|
|
typedef struct tz_memprot_unmap2_legacy_req_s
|
|
{
|
|
tz_memprot_map_info_t map; /**< Mapped-at information. */
|
|
UINT64 flags; /**< Flags field, which is a bitwise
|
|
OR of TZ_MEMPROT_FLAG_* flags.
|
|
Currently supported flags:
|
|
TLBINVALIDATE \n
|
|
Must be zero when no flags are
|
|
set. */
|
|
} __attribute__ ((packed)) tz_memprot_unmap2_legacy_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/** @addtogroup tz_datatypes
|
|
@{ */
|
|
|
|
/**
|
|
Common response type for QSEE blocking kernel layer system calls.
|
|
Individual system call headers indicate whether they use this response
|
|
structure.
|
|
*/
|
|
typedef struct tz_common_rsp_s
|
|
{
|
|
tz_syscall_rsp_t common_rsp; /**< Response header. */
|
|
INT64 ret; /**< Extended return
|
|
code; 0 for success;
|
|
negative values
|
|
mean failure. */
|
|
} __attribute__ ((packed)) tz_common_rsp_t;
|
|
|
|
/** @} */ /* end_addtogroup tz_datatypes */
|
|
|
|
/**
|
|
@weakgroup weak_tz_memprot_tlbinval_req_s
|
|
@{ */
|
|
typedef struct tz_memprot_tlbinval_req_s
|
|
{
|
|
UINT64 device_id; /**< ID of the device that is to have its
|
|
TLB invalidated.
|
|
See #tz_device_e_type. */
|
|
UINT64 ctxt_bank_id; /**< Context bank ID that is to have its
|
|
TLB invalidated. These correspond to
|
|
context bank numbers and are unique
|
|
only for the device. Values start
|
|
from 0, which corresponds to CB0. */
|
|
UINT64 flags; /**< Flags field for future use;
|
|
must be zero when no flags are set. */
|
|
UINT64 spare; /**< Spare field for future use;
|
|
must be zero. */
|
|
} __attribute__ ((packed)) tz_memprot_tlbinval_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/** @addtogroup tz_datatypes
|
|
@{ */
|
|
|
|
/** Configure whether xPU violations are to be error fatal. */
|
|
typedef enum
|
|
{
|
|
TZ_XPU_VIOLATION_ERR_FATAL_ENABLE = 0, /**< xPU violations are error fatal. */
|
|
TZ_XPU_VIOLATION_ERR_FATAL_DISABLE = 1, /**< xPU violations are not error
|
|
fatal. */
|
|
TZ_XPU_VIOLATION_ERR_FATAL_NOOP = 2, /**< No operation. */
|
|
} tz_xpu_violation_err_fatal_t;
|
|
|
|
/** @} */ /* end_addtogroup tz_datatypes */
|
|
|
|
/**
|
|
@weakgroup weak_tz_xpu_violation_err_fatal_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_xpu_violation_err_fatal_req_s
|
|
{
|
|
UINT64 config; /**< Enable, disable, or NOOP.
|
|
See tz_xpu_violation_err_fatal_t. */
|
|
UINT64 spare; /**< Unused. */
|
|
} __attribute__ ((packed)) tz_xpu_violation_err_fatal_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_xpu_violation_err_fatal_rsp_s
|
|
@{
|
|
*/
|
|
typedef struct tz_xpu_violation_err_fatal_rsp_s
|
|
{
|
|
tz_syscall_rsp_t common_rsp; /**< Common response structure */
|
|
UINT64 status ; /**< Enable or disable. */
|
|
} __attribute__ ((packed)) tz_xpu_violation_err_fatal_rsp_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_memprot_lock2_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_memprot_lock2_req_s
|
|
{
|
|
UINT64 chunk_list; /**< Array of chunk addresses. Each entry
|
|
is a 32-bit physical address.
|
|
chunk_list_size gives the number of
|
|
entries in the array. */
|
|
UINT64 chunk_list_size;/**< Number of chunks in the chunk
|
|
list.*/
|
|
UINT64 chunk_size; /**< Size of each memory chunk (in bytes)
|
|
in the chunk list. */
|
|
UINT64 mem_usage; /**< Hint on the memory usage.
|
|
See #tz_mem_usage_e_type. */
|
|
UINT64 lock; /**< 1 (TRUE) to lock (protect);
|
|
0 (FALSE) to unlock (unprotect). */
|
|
UINT64 flags; /**< Flags field for future use;
|
|
must be zero when no flags are
|
|
set. */
|
|
} __attribute__ ((packed)) tz_memprot_lock2_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_memprot_map2_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_memprot_map2_req_s
|
|
{
|
|
UINT64 chunk_list; /**< Array of chunk addresses. Each entry
|
|
is a 32-bit physical address.
|
|
chunk_list_size gives the number of
|
|
entries in the array. */
|
|
UINT64 chunk_list_size;/**< Number of chunks in the chunk
|
|
list.*/
|
|
UINT64 chunk_size; /**< Size of each memory chunk (in bytes)
|
|
in the chunk list. */
|
|
UINT64 device_id; /**< ID of the device where this memory is
|
|
to be mapped. See #tz_device_e_type.
|
|
The usage hint provided while
|
|
protecting the memory can be used to
|
|
validate this request. */
|
|
UINT64 ctxt_bank_id; /**< Context bank ID where this memory
|
|
is to be (un)mapped. These
|
|
correspond to context bank numbers
|
|
and are unique only for the device.
|
|
Values start from 0, which corresponds
|
|
to CB0. */
|
|
UINT64 dva_start; /**< Start address in the device's virtual
|
|
address space to which to map. */
|
|
UINT64 size; /**< Size in bytes of the virtual address
|
|
range to map. The end address is:
|
|
dva_end = dva_start + size - 1. */
|
|
UINT64 flags; /**< Flags field, which is a bitwise
|
|
OR of TZ_MEMPROT_FLAG_* flags.
|
|
Currently supported flags:
|
|
TLBINVALIDATE \n
|
|
Must be zero when no flags are
|
|
set. */
|
|
} __attribute__ ((packed)) tz_memprot_map2_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_memprot_unmap2_req_s
|
|
@{ */
|
|
typedef struct tz_memprot_unmap2_req_s
|
|
{
|
|
UINT64 device_id; /**< ID of the device where this memory is
|
|
to be mapped. See #tz_device_e_type.
|
|
The usage hint provided while
|
|
protecting the memory can be used to
|
|
validate this request. */
|
|
UINT64 ctxt_bank_id; /**< Context bank ID where this memory
|
|
is to be (un)mapped. These
|
|
correspond to context bank numbers
|
|
and are unique only for the device.
|
|
Values start from 0, which corresponds
|
|
to CB0. */
|
|
UINT64 dva_start; /**< Start address in the device's virtual
|
|
address space to which to map. */
|
|
UINT64 size; /**< Size in bytes of the virtual address
|
|
range to map. The end address is:
|
|
dva_end = dva_start + size - 1. */
|
|
UINT64 flags; /**< Flags field, which is a bitwise
|
|
OR of TZ_MEMPROT_FLAG_* flags.
|
|
Currently supported flags:
|
|
TLBINVALIDATE \n
|
|
Must be zero when no flags are
|
|
set. */
|
|
} __attribute__ ((packed)) tz_memprot_unmap2_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_memprot_sd_ctrl_req_s
|
|
@{ */
|
|
typedef struct tz_memprot_sd_ctrl_req_s
|
|
{
|
|
UINT64 enable; /**< 1 to enable, 0 to disable */
|
|
} __attribute__ ((packed)) tz_memprot_sd_ctrl_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* OCMEM commands
|
|
* -------------------------------------------------------------------------*/
|
|
|
|
/** @addtogroup tz_datatypes
|
|
@{ */
|
|
|
|
/** Enumerates OCMEM client IDs. */
|
|
typedef enum
|
|
{
|
|
TZ_OCMEM_CLNT_UNUSED, /**< Default client when unused. */
|
|
TZ_OCMEM_CLNT_GRAPHICS, /**< Maps to Oxili Virtual Machine ID (VMID). */
|
|
TZ_OCMEM_CLNT_VIDEO, /**< Maps to Venus CP_VMID. */
|
|
TZ_OCMEM_CLNT_LP_AUDIO, /**< Maps to ADSP_VMID. */
|
|
TZ_OCMEM_CLNT_SENSORS, /**< Maps to ADSP_VMID. */
|
|
TZ_OCMEM_CLNT_BLAST, /**< Maps to ADSP_VMID. */
|
|
TZ_OCMEM_CLNT_DEBUG, /**< Maps to HLOS_VMID; for debugging only. */
|
|
}tz_ocmem_client_e_type;
|
|
|
|
/** Enumerates the OCMEM operation mode. */
|
|
typedef enum
|
|
{
|
|
TZ_OCMEM_OP_MODE_WIDE, /**< Wide mode. */
|
|
TZ_OCMEM_OP_MODE_THIN, /**< Thin mode. */
|
|
TZ_OCMEM_OP_MODE_NOT_SET, /**< Operation mode not set. */
|
|
}tz_ocmem_op_mode_e_type;
|
|
|
|
/** @} */ /* end_addtogroup tz_datatypes */
|
|
|
|
/**
|
|
@weakgroup weak_tz_ocmem_lock_region_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_ocmem_lock_region_req_s
|
|
{
|
|
UINT64 client_id; /**< OCMEM client requesting the
|
|
memory region. See
|
|
#tz_ocmem_client_e_type. */
|
|
|
|
UINT64 offset; /**< Start offset of the memory
|
|
region in OCMEM. */
|
|
|
|
UINT64 size; /**< Size of the requested region. */
|
|
|
|
UINT64 mode; /**< Requested mode (wide or
|
|
narrow). See
|
|
#tz_ocmem_op_mode_e_type. */
|
|
}__attribute__ ((packed)) tz_ocmem_lock_region_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_ocmem_unlock_region_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_ocmem_unlock_region_req_s
|
|
{
|
|
UINT64 client_id; /**< OCMEM client that currently
|
|
owns the region. See
|
|
#tz_ocmem_client_e_type. */
|
|
|
|
UINT64 offset; /**< Start offset of the memory
|
|
region in OCMEM. */
|
|
|
|
UINT64 size; /**< Size of requested region. */
|
|
}__attribute__ ((packed)) tz_ocmem_unlock_region_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_ocmem_enable_mem_dump_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_ocmem_enable_mem_dump_req_s
|
|
{
|
|
UINT64 client_id; /**< OCMEM client that currently
|
|
has this region locked. See
|
|
#tz_ocmem_client_e_type. */
|
|
|
|
UINT64 offset; /**< Start offset of the memory
|
|
region in OCMEM. */
|
|
|
|
UINT64 size; /**< Size of the region. */
|
|
}__attribute__ ((packed)) tz_ocmem_enable_mem_dump_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_ocmem_disable_mem_dump_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_ocmem_disable_mem_dump_req_s
|
|
{
|
|
UINT64 client_id; /**< OCMEM client that currently
|
|
has this region locked. See
|
|
#tz_ocmem_client_e_type */
|
|
|
|
UINT64 offset; /**< Start offset of the memory
|
|
region in OCMEM. */
|
|
|
|
UINT64 size; /**< Size of the region. */
|
|
}__attribute__ ((packed)) tz_ocmem_disable_mem_dump_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/** @addtogroup tz_datatypes
|
|
@{ */
|
|
|
|
/** eMMC partition ID for the enterprise security servcie save hash. */
|
|
typedef enum
|
|
{
|
|
TZ_ES_PARTITION_ID_KERNEL = 0, /**< Kernel partition ID. */
|
|
TZ_ES_PARTITION_ID_SYSTEM = 1, /**< System partition ID. */
|
|
TZ_ES_PARTITION_ID_RECOVERY = 2, /**< Recovery partition ID. */
|
|
TZ_ES_MAX_PARTITIONS /**< Maximum number of partitions. */
|
|
}tz_partition_id_e_type;
|
|
|
|
/** @} */ /* end_addtogroup tz_datatypes */
|
|
|
|
/**
|
|
@weakgroup weak_tz_es_save_partition_hash_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_es_save_partition_hash_req_s
|
|
{
|
|
UINT64 partition_id;
|
|
/**< Partition ID (system, recovery, or kernel).
|
|
See tz_partition_id_e_type. */
|
|
|
|
UINT64 hash; /**< Hash digest for SHA-256. */
|
|
UINT64 hash_sz; /**< Size of hash digest. */
|
|
}__attribute__ ((packed)) tz_es_save_partition_hash_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_mdtp_cipher_dip_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_mdtp_cipher_dip_req_s
|
|
{
|
|
UINT64 in_buf; /**< IN buffer. */
|
|
UINT64 in_buf_size; /**< Size of IN buffer. */
|
|
UINT64 out_buf; /**< OUT buffer. */
|
|
UINT64 out_buf_size; /**< Size of OUT buffer. */
|
|
UINT64 direction; /**< Cipher direction. */
|
|
}__attribute__ ((packed)) tz_mdtp_cipher_dip_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* NS_FIQ_DEBUG Service Structures
|
|
* -------------------------------------------------------------------------*/
|
|
|
|
/** @addtogroup tz_macros_constants
|
|
@{ */
|
|
|
|
/** @name Nonsecure Debug FIQ Flags
|
|
@{ */
|
|
|
|
/** Nonsecure debug FIQ is level triggered. */
|
|
#define TZ_NS_DEBUG_FIQ_LEVEL_TRIGGERED 0x0
|
|
/** Nonsecure debug FIQ is edge triggered. */
|
|
#define TZ_NS_DEBUG_FIQ_EDGE_TRIGGERED 0x1
|
|
/** Nonsecure debug FIQ handler runs in the Thumb state. */
|
|
#define TZ_NS_DEBUG_FIQ_THUMB 0x2
|
|
|
|
/** @} */ /* end_namegroup Nonsecure Debug FIQ Flags */
|
|
|
|
/** @} */ /* end_addtogroup tz_macros_constants */
|
|
|
|
/**
|
|
@weakgroup weak_tz_config_ns_debug_fiq_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_config_ns_debug_fiq_req_s
|
|
{
|
|
UINT64 vector; /**< Base address of the nonsecure FIQ handler. The
|
|
handler executes in nonsecure SVC mode. */
|
|
UINT64 stack; /**< Stack for the nonsecure FIQ handler. The
|
|
QSEE software never modifies the stack. */
|
|
UINT64 ctx_buf; /**< Context buffer for the nonsecure FIQ handler. Passed
|
|
in to the handler via register r0. The TrustZone
|
|
software always modifies the entire context. */
|
|
UINT64 ctx_size; /**< Context buffer size in bytes. */
|
|
UINT64 intnum; /**< Number of the debug interrupt on the Qualcomm Generic
|
|
Interrupt Controller (QGIC). The QSEE software only
|
|
allows using designated interrupts as debug FIQs and
|
|
returns an error code if the interrupt is not one of
|
|
the supported ones. */
|
|
UINT64 flags; /**< Configuration flags; a bitwise OR of the
|
|
TZ_NS_FIQ_DEBUG_* definitions. The handler is assumed
|
|
to execute in ARM mode. For Thumb mode handlers, flag
|
|
TZ_NS_FIQ_DEBUG_THUMB must be set. */
|
|
} __attribute__ ((packed)) tz_config_ns_debug_fiq_t;
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_config_ns_debug_fiq_ctx_size_rsp_s
|
|
@{
|
|
*/
|
|
typedef struct tz_config_ns_debug_fiq_ctx_size_rsp_s
|
|
{
|
|
struct tz_syscall_rsp_s common_rsp; /**< Common response structure */
|
|
UINT64 size; /**< Context size in bytes. */
|
|
} __attribute__ ((packed)) tz_config_ns_debug_fiq_ctx_size_rsp_t;
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_config_ns_debug_fiq_int_ok_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_config_ns_debug_fiq_int_ok_req_s
|
|
{
|
|
UINT64 intnum; /**< QGIC interrupt number. */
|
|
} __attribute__ ((packed)) tz_config_ns_debug_fiq_int_ok_req_t;
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_config_ns_debug_fiq_int_ok_rsp_s
|
|
@{
|
|
*/
|
|
typedef struct tz_config_ns_debug_fiq_int_ok_rsp_s
|
|
{
|
|
struct tz_syscall_rsp_s common_rsp; /**< Common response structure. */
|
|
UINT64 verdict; /**< Contains 1 if the interrupt is supported as an FIQ
|
|
debug interrupt; 0 otherwise. */
|
|
} __attribute__ ((packed)) tz_config_ns_debug_fiq_int_ok_rsp_t;
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* CPU Configuration Service
|
|
* -------------------------------------------------------------------------*/
|
|
|
|
/**
|
|
@weakgroup weak_tz_cpu_config_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_cpu_config_req_s
|
|
{
|
|
UINT64 id; /**< ID of the configured item. */
|
|
UINT64 arg0; /**< Generic argument 0. */
|
|
UINT64 arg1; /**< Generic argument 1. */
|
|
UINT64 arg2; /**< Generic argument 2. */
|
|
} __attribute__ ((packed)) tz_cpu_config_req_t;
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_cpu_config_query_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_cpu_config_query_req_s
|
|
{
|
|
UINT64 id; /**< ID of the queried item. */
|
|
UINT64 arg0; /**< Generic argument 0. */
|
|
UINT64 arg1; /**< Generic argument 1. */
|
|
UINT64 arg2; /**< Generic argument 2. */
|
|
} __attribute__ ((packed)) tz_cpu_config_query_req_t;
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_cpu_config_query_rsp_s
|
|
@{
|
|
*/
|
|
typedef struct tz_cpu_config_query_rsp_s
|
|
{
|
|
tz_syscall_rsp_t common_rsp; /**< Common response structure */
|
|
UINT64 ret0; /**< Generic return value 0. */
|
|
UINT64 ret1; /**< Generic return value 1. */
|
|
UINT64 ret2; /**< Generic return value 2. */
|
|
} __attribute__ ((packed)) tz_cpu_config_query_rsp_t;
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_hdcp_write_registers_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_hdcp_write_registers_req_s
|
|
{
|
|
UINT64 addr1; /**< Address of register to write. */
|
|
UINT64 value1; /**< Value to be written. */
|
|
UINT64 addr2;
|
|
UINT64 value2;
|
|
UINT64 addr3;
|
|
UINT64 value3;
|
|
UINT64 addr4;
|
|
UINT64 value4;
|
|
UINT64 addr5;
|
|
UINT64 value5;
|
|
} __attribute__ ((packed)) tz_hdcp_write_registers_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* LMH Private Driver Structures
|
|
* -------------------------------------------------------------------------*/
|
|
|
|
#define LMH_PACKET_NODE_COUNT 10
|
|
|
|
/**
|
|
@weakgroup weak_tz_lmh_node_info_s
|
|
@{
|
|
*/
|
|
typedef struct tz_lmh_node_info_s
|
|
{
|
|
UINT32 node; /**< Node type (4-char string). */
|
|
UINT32 node_id; /**< Node id number. */
|
|
UINT32 intensity; /**< Current throttling intensity . */
|
|
UINT32 max_intensity; /**< Max throttling intensity. */
|
|
UINT32 type; /**< Sensor type. */
|
|
} __attribute__ ((packed)) tz_lmh_node_info_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_lmh_node_packet_s
|
|
@{
|
|
*/
|
|
typedef struct tz_lmh_node_packet_s
|
|
{
|
|
UINT32 count; /**< Number of nodes in packet. */
|
|
tz_lmh_node_info_t nodes[LMH_PACKET_NODE_COUNT];/**< Array of nodes. */
|
|
} __attribute__ ((packed)) tz_lmh_node_packet_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_lmh_change_profile_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_lmh_change_profile_req_s
|
|
{
|
|
UINT64 profile; /**< Profile id to switch to. */
|
|
} __attribute__ ((packed)) tz_lmh_change_profile_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_lmh_get_profiles_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_lmh_get_profiles_req_s
|
|
{
|
|
UINT64 profile_list_addr; /**< Array to return profile ids to. */
|
|
UINT64 size; /**< Size of profile_list array in bytes, must be 10*sizeof(UINT32). */
|
|
UINT64 start; /**< Number of profile_ids to skip before beginning list. */
|
|
} __attribute__ ((packed)) tz_lmh_get_profiles_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_lmh_enable_qpmda_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_tz_lmh_enable_qpmda_s
|
|
{
|
|
UINT64 enable; /**< Enable bitmask. */
|
|
UINT64 rate; /**< Timestamp request rate in XO-ticks. */
|
|
} __attribute__ ((packed)) tz_lmh_enable_qpmda_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_lmh_set_current_limit_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_lmh_set_current_limit_req_s
|
|
{
|
|
UINT64 limit; /**< Value to set. */
|
|
UINT64 limit_type; /**< Value type. */
|
|
UINT64 limit_id; /**< Limit profile to update. */
|
|
} __attribute__ ((packed)) tz_lmh_set_current_limit_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_lmh_intensity_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_lmh_intensity_req_s
|
|
{
|
|
UINT64 packet; /**< Packet buffer. #tz_lmh_node_packet_t */
|
|
UINT64 size; /**< Size of packet buffer in bytes. */
|
|
} __attribute__ ((packed)) tz_lmh_intensity_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tz_lmh_get_sensor_list_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_lmh_get_sensor_list_req_s
|
|
{
|
|
UINT64 packet; /**< Packet buffer. #tz_lmh_node_packet_t */
|
|
UINT64 size; /**< Size of packet buffer in bytes. */
|
|
} __attribute__ ((packed)) tz_lmh_get_sensor_list_req_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup weak_tzbsp_lmh_sensor_init_req_s
|
|
@{
|
|
*/
|
|
typedef struct tzbsp_lmh_sensor_init_req_s
|
|
{
|
|
UINT64 sensor_id; /**< Sensor id (8-character string). */
|
|
UINT64 cmd_id; /**< Sensor init cmd. */
|
|
UINT64 arg0; /**< Value to set. */
|
|
UINT64 arg1; /**< Value to set. */
|
|
UINT64 arg2; /**< Value to set. */
|
|
UINT64 arg3; /**< Value to set. */
|
|
} __attribute__ ((packed)) tzbsp_lmh_sensor_init_req_t;
|
|
|
|
#define DBG_POLICY_HASH_DIGEST_SIZE_SHA256 32 /**< SHA256 size in bytes */
|
|
#define DBG_POLICY_ID_ARRAY_SIZE 32 /**< The maximum number of image ids allowed */
|
|
#define DBG_POLICY_CERT_ARRAY_SIZE 8 /**< The maximum number of roots allowed */
|
|
|
|
/** The value of these flags must match the 'flags' element
|
|
* of debug_policy_t
|
|
*/
|
|
#define DBG_POLICY_ENABLE_ONLINE_CRASH_DUMPS 0 /**< Bit in dbg_policy_t.flags enables online crash dumps */
|
|
#define DBG_POLICY_ENABLE_OFFLINE_CRASH_DUMPS 1 /**< Bit in dbg_policy_t.flags enables offline crash dumps */
|
|
#define DBG_POLICY_DISABLE_AUTHENTICATION 2 /**< Bit in dbg_policy_t.flags disables image authentication */
|
|
#define DBG_POLICY_ENABLE_JTAG 3 /**< Bit in dbg_policy_t.flags enables jtag */
|
|
#define DBG_POLICY_ENABLE_LOGGING 4 /**< Bit in dbg_policy_t.flags enables tz kernel logging */
|
|
|
|
/**
|
|
@weakgroup weak_dbg_policy_t
|
|
@{
|
|
*/
|
|
typedef struct
|
|
{
|
|
CHAR8 magic[4]; /**< struct signature */
|
|
UINT32 size; /**< Size of this struct */
|
|
UINT32 revision; /**< Revision of this struct */
|
|
UINT32 serial_num_start; /**< Start of range to which this policy applies */
|
|
UINT32 serial_num_end; /**< End of range to which this policy applies */
|
|
UINT32 reserved; /**< Reserved, must be zero */
|
|
struct {
|
|
UINT32 reserved_bits : 16; /**< reserved for QCT, must be zero */
|
|
UINT32 oem_reserved_bits : 16; /**< reserved for OEM */
|
|
} flags2;
|
|
struct {
|
|
UINT32 enable_online_crash_dumps : 1; /**< See DBG_POLICY_ENABLE_ONLINE_CRASH_DUMPS */
|
|
UINT32 enable_offline_crash_dumps : 1; /**< See DBG_POLICY_ENABLE_OFFLINE_CRASH_DUMPS */
|
|
UINT32 disable_authentication : 1; /**< See DBG_POLICY_DISABLE_AUTHENTICATION */
|
|
UINT32 enable_jtag : 1; /**< See DBG_POLICY_ENABLE_JTAG */
|
|
UINT32 enable_logs : 1; /**< See DBG_POLICY_ENABLE_LOGGING */
|
|
UINT32 reserved_bits : 27; /**< reserved for QCT, must be zero */
|
|
} flags;
|
|
UINT32 image_id_count; /**< Count of valid values in image_id_array */
|
|
UINT32 image_id_array[DBG_POLICY_ID_ARRAY_SIZE]; /**< Image id values for which the policy is the ROT */
|
|
UINT32 root_cert_hash_count; /**< Count of valid certificate hash values in root_cert_hash_array */
|
|
UINT8 root_cert_hash_array[DBG_POLICY_CERT_ARRAY_SIZE][DBG_POLICY_HASH_DIGEST_SIZE_SHA256]; /**< Certificate hash values used as roots for authentication */
|
|
} __attribute__ ((packed)) dbg_policy_t;
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/* unique serial numbers that are allowed */
|
|
#define SEC_DBG_SERIAL_NUM_MAX_COUNT 200
|
|
|
|
/* The number of certificates that can be tried for testing/engineering */
|
|
#define SEC_DBG_CERT_ARRAY_SIZE 4
|
|
|
|
#define CEML_HASH_DIGEST_SIZE_SHA256 32
|
|
#define CEML_HASH_DIGEST_SIZE_SHA384 48
|
|
|
|
#define SEC_DBG_DEBUG_LEVEL_SUPPORT_VERSION 5
|
|
typedef struct __attribute__((__packed__))
|
|
{
|
|
UINT32 magic; /* Version of Debug Policy */
|
|
UINT32 size; /* Fixed size debug policy*/
|
|
UINT32 revision; /* Revision of the debug policy*/
|
|
struct {
|
|
UINT32 enable_online_crash_dumps : 1;
|
|
UINT32 enable_offline_crash_dumps : 1;
|
|
UINT32 enable_jtag : 1;
|
|
UINT32 enable_logs : 1;
|
|
UINT32 enable_modem_inv_debug : 1;
|
|
UINT32 enable_modem_ninv_debug : 1;
|
|
UINT32 enable_apps_inv_debug : 1;
|
|
UINT32 enable_debug_level_bit0 : 1;
|
|
UINT32 enable_debug_level_bit1 : 1;
|
|
UINT32 reserved_bits_with_serialnum : 15; // reserved for QCT, must be 0
|
|
UINT32 enable_nonsecure_crash_dumps : 1;
|
|
UINT32 enable_apps_encrypted_mini_dumps : 1;
|
|
UINT32 enable_mpss_encrypted_mini_dumps : 1;
|
|
UINT32 enable_lpass_encrypted_mini_dumps : 1;
|
|
UINT32 enable_css_encrypted_mini_dumps : 1;
|
|
UINT32 enable_adsp_encrypted_mini_dumps : 1;
|
|
UINT32 enable_cdsp_encrypted_mini_dumps : 1;
|
|
UINT32 reserved_bits_without_serialnum1 : 1; // reserved for QCT, must be 0
|
|
UINT32 reserved_bits_without_serialnum2 : 16; // reserved for QCT, must be 0
|
|
UINT32 oem_reserved_bits : 16; // reserved for OEM
|
|
} flags;
|
|
UINT32 image_id_bitmap; /* Image ID Bit Map */
|
|
UINT32 root_cert_hash_count; /* Root Cert Hash Count */
|
|
UINT8 root_cert_hash_array[SEC_DBG_CERT_ARRAY_SIZE][CEML_HASH_DIGEST_SIZE_SHA384]; /* Hash Array*/
|
|
UINT32 serial_num_count; /* Serial Number Count */
|
|
UINT32 serial_num_array[SEC_DBG_SERIAL_NUM_MAX_COUNT]; /* Serial Numbers */
|
|
UINT32 root_cert_hash_count_qc; /* Root Cert Hash Count */
|
|
UINT8 root_cert_hash_array_qc[SEC_DBG_CERT_ARRAY_SIZE][CEML_HASH_DIGEST_SIZE_SHA384]; /* Hash Array*/
|
|
} __attribute__((__packed__))sec_dbg_t;
|
|
|
|
/**
|
|
@weakgroup weak_tz_read_debug_policy_content_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_read_debug_policy_content_req_s
|
|
{
|
|
UINT64 debug_policy; /**< Buffer into which the debug policy will be copied type #dbg_policy_info_t */
|
|
UINT64 debug_policy_size;/**< Size of buffer into which the debug policy will be copied */
|
|
} __attribute__ ((packed)) tz_read_debug_policy_content_req_t;
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
/**
|
|
@weakgroup dbg_policy_override definition
|
|
@{
|
|
*/
|
|
typedef struct
|
|
{
|
|
CHAR8 magic[4]; /**< "DBGO" */
|
|
UINT32 revision; /**< must be 0 */
|
|
UINT32 override; /**< 0 = load debug policy; 1 = do not load debug policy */
|
|
} __attribute__((__packed__)) dbg_policy_override;
|
|
|
|
/**
|
|
@weakgroup weak_tz_get_ablfv_entry_point_rsp_s
|
|
@{
|
|
*/
|
|
|
|
typedef struct tz_get_ablfv_entry_point_rsp_s
|
|
{
|
|
tz_syscall_rsp_t common_rsp; /**< Common response structure */
|
|
UINT64 e_entry; /**< Image entry point. */
|
|
|
|
} __attribute__ ((packed)) tz_get_ablfv_entry_point_rsp_t;
|
|
|
|
/**
|
|
@ingroup tzbsp_lmh_dcvsh_config
|
|
|
|
System call to configure a dcvsh node.
|
|
|
|
@smc_id
|
|
0x02001310
|
|
|
|
@param_id
|
|
0x00000015
|
|
|
|
@sys_call_req_params{tzbsp_lmh_dcvsh_config_req_s}
|
|
@table{weak__tzbsp__lmh__dcvsh__config__req__s}
|
|
|
|
@return
|
|
E_SUCCESS on success; negative value on failure.
|
|
*/
|
|
#define TZ_LMH_DCVSH_CONFIG_ID TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_LMH, 0x10)
|
|
|
|
#define TZ_LMH_DCVSH_CONFIG_PARAM_ID \
|
|
TZ_SYSCALL_CREATE_PARAM_ID_5( \
|
|
TZ_SYSCALL_PARAM_TYPE_BUF_RO, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL, \
|
|
TZ_SYSCALL_PARAM_TYPE_VAL \
|
|
)
|
|
|
|
typedef enum
|
|
{
|
|
TZ_STORAGE_TYPE_NULL,
|
|
TZ_STORAGE_TYPE_SPINOR,
|
|
TZ_STORAGE_TYPE_MAX
|
|
} tz_storage_type;
|
|
|
|
typedef enum
|
|
{
|
|
TZ_STORAGE_INIT = 0x00,
|
|
TZ_STORAGE_READ = 0x01,
|
|
TZ_STORAGE_WRITE = 0x02,
|
|
TZ_STORAGE_ERASE = 0x03,
|
|
TZ_STORAGE_GET_INFO = 0x04,
|
|
TZ_STORAGE_DEINIT = 0x05,
|
|
TZ_STORAGE_CMD_MAX = 0x06,
|
|
} tz_storage_cmd;
|
|
|
|
/**
|
|
Storage response result values. Unlisted negative values indicate failure.
|
|
*/
|
|
typedef enum
|
|
{
|
|
STORAGE_CMD_RESULT_SUCCESS = 0,
|
|
STORAGE_CMD_RESULT_NO_MEMORY = 1,
|
|
STORAGE_CMD_RESULT_INVALID_PARAMETER = 2,
|
|
STORAGE_CMD_RESULT_STORAGE_ERROR = 3,
|
|
STORAGE_CMD_RESULT_ACCESS_DENIED = 4,
|
|
STORAGE_CMD_RESULT_NOT_SUPPORTED = 5,
|
|
STORAGE_CMD_RESULT_RESERVED = 0xFFFFFFFF /* Required to make the enum 4 bytes. */
|
|
}tz_storage_resp_result;
|
|
|
|
typedef struct tz_storage_info
|
|
{
|
|
UINT64 total_blocks; /* Total number of blocks */
|
|
UINT32 block_size; /* Size of a block in bytes. */
|
|
UINT32 page_size; /* Size of a page/sector in bytes. */
|
|
UINT32 num_physical; /* Number of physical partitions. */
|
|
UINT64 manufacturer_id; /* ID of the manufacturer. */
|
|
UINT64 serial_num; /* Serial number of the device. */
|
|
char fw_version[32]; /* String containing the firmware version, null terminated. */
|
|
char memory_type[5]; /* String containing the Memory type: NOR, UFS, eMMC, NAND. */
|
|
char product_name[32];
|
|
} __attribute__ ((packed)) tz_storage_info;
|
|
|
|
|
|
|
|
/**
|
|
SPINOR Sycall Command Structure
|
|
*/
|
|
typedef struct tz_stor_cmd
|
|
{
|
|
UINT64 storage_type; /* Type of Storage Device */
|
|
UINT64 slot_num; /* Hardware slot number */
|
|
UINT64 LUN; /* Storage LUN */
|
|
UINT64 GUID_ptr; /* Partition GUID Pointer */
|
|
UINT64 storage_cmd; /* Storage Command */
|
|
}__attribute__ ((packed)) tz_stor_cmd;
|
|
|
|
typedef struct tz_stor_cmd_details
|
|
{
|
|
UINT64 LBA; /* Start address for the command */
|
|
UINT64 length; /* Size of the storage transaction. */
|
|
UINT64 data_buffer_ptr;/* Address of the buffer */
|
|
UINT64 data_buffer_size;
|
|
}__attribute__ ((packed)) tz_stor_cmd_details;
|
|
|
|
/**
|
|
SPINOR Sycall response Structure
|
|
*/
|
|
typedef struct tz_stor_resp
|
|
{
|
|
UINT64 storage_cmd; /* Storage Command */
|
|
UINT64 data_buffer_ptr; /* Address of the buffer */
|
|
UINT64 data_buffer_size;/* size of the buffer */
|
|
}__attribute__ ((packed)) tz_stor_resp;
|
|
|
|
/**
|
|
@weakgroup weak_tz_send_storage_cmd_req_s
|
|
@{
|
|
*/
|
|
typedef struct tz_send_storage_cmd_req_s
|
|
{
|
|
tz_stor_cmd *cmd_metadata;/* tz_stor_cmd struct */
|
|
UINT64 cmd_metadata_size;
|
|
tz_stor_cmd_details *cmd_details;/*Pointer to the command details struct */
|
|
UINT64 cmd_details_size;
|
|
} __attribute__ ((packed)) tz_send_storage_cmd_req_t;
|
|
|
|
/**
|
|
@weakgroup weak_tz_send_storage_cmd_rsp_s
|
|
@{
|
|
*/
|
|
typedef struct tz_send_storage_cmd_rsp_s
|
|
{
|
|
tz_syscall_rsp_t common_rsp;/**< Common response structure */
|
|
tz_storage_resp_result result; /**< Status result of the operation performed by the command. */
|
|
tz_stor_resp *response_buffer;/**< Pointer to the tz_stor_resp structure **/
|
|
UINT64 response_buffer_size;/**< length of the tz_stor_resp structure **/
|
|
} __attribute__ ((packed)) tz_send_storage_cmd_rsp_t;
|
|
|
|
/**
|
|
@weakgroup weak_tz_query_tpm_type_rsp_s
|
|
@{
|
|
*/
|
|
typedef struct tz_query_tpm_type_rsp_s
|
|
{
|
|
tz_syscall_rsp_t common_rsp; /**< Common response structure */
|
|
UINT64 tpm_type;
|
|
} __attribute__ ((packed)) tz_query_tpm_type_rsp_t;
|
|
|
|
/** @} */ /* end_weakgroup */
|
|
|
|
#endif
|