!76 使能独立驱动框架

Merge pull request !76 from suwanghw/master
This commit is contained in:
zhang-deyao
2024-08-20 12:30:54 +00:00
committed by Gitee
40 changed files with 409 additions and 206 deletions
+18 -4
View File
@@ -87,6 +87,10 @@ export OUTPUTDIR := $(TOPDIR)/output
export SDK_VER := tee-kernel-local-release
ifneq ($(PLATFORM),)
export PLATFORM_DRIVERS_PATH := $(DRIVERS_PATH)/platform/$(PLATFORM)
endif
PHONY += default
default: all
@@ -133,11 +137,20 @@ HDR_INSTALL_DIR:=$(HDR_L_DIR)
$(shell test -d $(HDR_INSTALL_DIR) || mkdir -p $(HDR_INSTALL_DIR))
endif
check_platform:
ifndef PLATFORM
$(error PLATFORM is not set)
endif
@echo "PLATFORM is set to $(PLATFORM)"
PHONY += check_platform
# default target
PHONY += libs $(drivers) $(frameworks) $(service) package
all: install_headers setup_links libs $(drivers) $(frameworks) $(service) package
tees: setup_links libs $(drivers) $(frameworks) $(service)
PHONY += libs $(drivers) $(platform_drivers) $(frameworks) $(service) package
all: install_headers setup_links libs $(drivers) $(platform_drivers) $(frameworks) $(service) package
tees: setup_links libs $(drivers) $(platform_drivers) $(frameworks) $(service)
$(drivers): setup_links libs link_libs
$(platform_drivers): check_platform setup_links libs link_libs
$(frameworks): setup_links libs link_libs
$(service): setup_links libs link_libs
package: check_sym
@@ -197,7 +210,8 @@ check_sym: $(product_apps)
echo " [ CHECK a64 SYMS ]: $$i" ;\
$(BUILD_TOOLS)/generate_img/check-syms.sh $$i \
$(PREBUILD_LIBS)/aarch64/libc_shared.so \
$(OUTPUTDIR)/aarch64/obj/aarch64/libtee_shared/libtee_shared.so; \
$(OUTPUTDIR)/aarch64/obj/aarch64/libtee_shared/libtee_shared.so \
$(OUTPUTDIR)/aarch64/obj/aarch64/libdrv_shared/libdrv_shared.so; \
done ; fi
$(BUILD_TOOLS)/generate_img/smart-strip.sh $(product_apps)
+6 -6
View File
@@ -10,9 +10,9 @@
# PURPOSE.
# See the Mulan PSL v2 for more details.
make TARGET_BOARD_PLATFORM=$1 FRAMEWORK_ELF_PATH=$2 TEE_COMPILER_DIR=$3 LLVM_BASEVER=$4 TOPDIR=$5 THIRDPARTY=$6 GEN_CONF_FILE -j
make TARGET_BOARD_PLATFORM=$1 FRAMEWORK_ELF_PATH=$2 TEE_COMPILER_DIR=$3 LLVM_BASEVER=$4 TOPDIR=$5 THIRDPARTY=$6 PREBUILD_OPENSSL -j
make TARGET_BOARD_PLATFORM=$1 FRAMEWORK_ELF_PATH=$2 TEE_COMPILER_DIR=$3 LLVM_BASEVER=$4 TOPDIR=$5 THIRDPARTY=$6 install_headers -j
make TARGET_BOARD_PLATFORM=$1 FRAMEWORK_ELF_PATH=$2 TEE_COMPILER_DIR=$3 LLVM_BASEVER=$4 TOPDIR=$5 THIRDPARTY=$6 libs -j
make TARGET_BOARD_PLATFORM=$1 FRAMEWORK_ELF_PATH=$2 TEE_COMPILER_DIR=$3 LLVM_BASEVER=$4 TOPDIR=$5 THIRDPARTY=$6 tees -j
make TARGET_BOARD_PLATFORM=$1 FRAMEWORK_ELF_PATH=$2 TEE_COMPILER_DIR=$3 LLVM_BASEVER=$4 TOPDIR=$5 THIRDPARTY=$6 package -j
make TARGET_BOARD_PLATFORM=$1 FRAMEWORK_ELF_PATH=$2 TEE_COMPILER_DIR=$3 LLVM_BASEVER=$4 TOPDIR=$5 THIRDPARTY=$6 PLATFORM=$7 GEN_CONF_FILE -j
make TARGET_BOARD_PLATFORM=$1 FRAMEWORK_ELF_PATH=$2 TEE_COMPILER_DIR=$3 LLVM_BASEVER=$4 TOPDIR=$5 THIRDPARTY=$6 PLATFORM=$7 PREBUILD_OPENSSL -j
make TARGET_BOARD_PLATFORM=$1 FRAMEWORK_ELF_PATH=$2 TEE_COMPILER_DIR=$3 LLVM_BASEVER=$4 TOPDIR=$5 THIRDPARTY=$6 PLATFORM=$7 install_headers -j
make TARGET_BOARD_PLATFORM=$1 FRAMEWORK_ELF_PATH=$2 TEE_COMPILER_DIR=$3 LLVM_BASEVER=$4 TOPDIR=$5 THIRDPARTY=$6 PLATFORM=$7 libs -j
make TARGET_BOARD_PLATFORM=$1 FRAMEWORK_ELF_PATH=$2 TEE_COMPILER_DIR=$3 LLVM_BASEVER=$4 TOPDIR=$5 THIRDPARTY=$6 PLATFORM=$7 tees -j
make TARGET_BOARD_PLATFORM=$1 FRAMEWORK_ELF_PATH=$2 TEE_COMPILER_DIR=$3 LLVM_BASEVER=$4 TOPDIR=$5 THIRDPARTY=$6 PLATFORM=$7 package -j
+1 -1
View File
@@ -36,7 +36,7 @@ endif
else #32bit
cfi-no-icall := libswcrypto_engine_a32.a tarunner_a32.elf libtimer_a32.a libcrypto_hal_a32.a libteeos_a32.a \
libpermission_service_a32.a libtaentry_a32.a libcrypto_a32.a libssa_a32.a #libdrv_frame_a32.a
libpermission_service_a32.a libtaentry_a32.a libcrypto_a32.a libssa_a32.a libdrv_frame_a32.a
no-cfi:= libopenssl${TARG}.a
+2 -2
View File
@@ -53,9 +53,9 @@ flags += -DTEE_SUPPORT_HUK_SERVICE_32BIT
endif
ifeq ($(CONFIG_DRVMGR_64BIT), true)
#flags += -DTEE_SUPPORT_DRV_SERVER_64BIT
flags += -DTEE_SUPPORT_DRV_SERVER_64BIT
endif
ifeq ($(CONFIG_DRVMGR_64BIT), false)
#flags += -DTEE_SUPPORT_DRV_SERVER_32BIT
flags += -DTEE_SUPPORT_DRV_SERVER_32BIT
endif
+16 -7
View File
@@ -19,16 +19,16 @@ include $(BUILD_CONFIG)/arch_config.mk
libtee_shared_a32: libteeconfig libtimer libteeagentcommon_client libcrypto_hal libswcrypto_engine $(crypto_lib) libteedynsrv libtee_stub
libtee_shared: libteeconfig libtimer libteeagentcommon_client libcrypto_hal libswcrypto_engine $(crypto_lib) libteedynsrv libtee_stub
libdrv_shared_a32: #libteeconfig_a32
libdrv_shared: #libteeconfig
libdrv_shared_a32: libteeconfig_a32
libdrv_shared: libteeconfig
teelib := libcrypto_hal libtimer libagent libagent_base libdrv libteeos libpermission_service \
libswcrypto_engine libtaentry libteeagentcommon_client libcrypto libteeconfig libteemem \
libssa libhuk libteedynsrv libopenssl libipc_hal libtee_stub
syslib := libelf_verify libspawn_common libelf_verify_key libdynconfmgr libdynconfbuilder
drvlib := #libdrv_frame
drvlib := libdrv_frame
libs: libtee_shared $(syslib) #libdrv_shared
libs: libtee_shared $(syslib) libdrv_shared
@echo "libsok"
$(teelib):
@@ -58,7 +58,7 @@ libdrv_shared: $(drvlib)
# compile drivers rules
frameworks := gtask teesmcmgr tarunner #drvmgr
frameworks := gtask teesmcmgr tarunner drvmgr
service := huk_service
ifdef CONFIG_SSA_64BIT
@@ -69,12 +69,21 @@ ifdef CONFIG_PERMSRV_64BIT
service += permission_service
endif
#drivers := crypto_mgr
drivers := crypto_mgr
platform_drivers :=
ifdef CONFIG_TEE_MISC_DRIVER_64BIT
#drivers += tee_misc_driver
drivers += tee_misc_driver
endif
ifdef CONFIG_HADRWARE_CRYPTO_ENABLE
platform_drivers += libhardware_crypto_drv
endif
$(platform_drivers):
@echo "building platform_drivers=$@ target path $(PLATFORM_DRIVERS_PATH)/$@"
$(VER) LDFLAGS= $(MAKE) -C $(PLATFORM_DRIVERS_PATH)/$@ ARCH=aarch64 -f $(PREBUILD_HEADER)/.config -f Makefile all
$(drivers):
@echo "building ARCH=arm driver=$@ target"
$(VER) LDFLAGS= $(MAKE) -C $(DRIVERS_PATH)/$@ ARCH=arm TARG=_a32 -f $(PREBUILD_HEADER)/.config -f Makefile all
+21 -16
View File
@@ -72,42 +72,42 @@ endif
ifneq ($(CONFIG_DRVMGR_64BIT),)
ifeq ($(CONFIG_SUPPORT_64BIT),)
#product_apps += $(OUTPUTDIR)/aarch64/obj/aarch64/libdrv_shared/libdrv_shared.so
#product_apps += $(OUTPUTDIR)/arm/obj/arm/libdrv_shared/libdrv_shared_a32.so
product_apps += $(OUTPUTDIR)/aarch64/obj/aarch64/libdrv_shared/libdrv_shared.so
product_apps += $(OUTPUTDIR)/arm/obj/arm/libdrv_shared/libdrv_shared_a32.so
else
ifeq ($(CONFIG_SUPPORT_64BIT), true)
#product_apps += $(OUTPUTDIR)/aarch64/obj/aarch64/libdrv_shared/libdrv_shared.so
product_apps += $(OUTPUTDIR)/aarch64/obj/aarch64/libdrv_shared/libdrv_shared.so
endif
ifeq ($(CONFIG_SUPPORT_64BIT), false)
#product_apps += $(OUTPUTDIR)/arm/obj/arm/libdrv_shared/libdrv_shared_a32.so
product_apps += $(OUTPUTDIR)/arm/obj/arm/libdrv_shared/libdrv_shared_a32.so
endif
endif
endif
ifeq ($(CONFIG_DRVMGR_64BIT), true)
#product_apps += $(OUTPUTDIR)/aarch64/drivers/drvmgr.elf
#check-a64-syms-y += $(OUTPUTDIR)/aarch64/drivers/drvmgr.elf
product_apps += $(OUTPUTDIR)/aarch64/drivers/drvmgr.elf
check-a64-syms-y += $(OUTPUTDIR)/aarch64/drivers/drvmgr.elf
ifeq ($(CONFIG_TEE_MISC_DRIVER_64BIT), true)
#product_apps += $(OUTPUTDIR)/aarch64/drivers/tee_misc_driver.elf
#check-s64-syms-y += $(OUTPUTDIR)/aarch64/drivers/tee_misc_driver.elf
product_apps += $(OUTPUTDIR)/aarch64/drivers/tee_misc_driver.elf
check-s64-syms-y += $(OUTPUTDIR)/aarch64/drivers/tee_misc_driver.elf
endif
endif
ifeq ($(CONFIG_DRVMGR_64BIT), false)
#product_apps += $(OUTPUTDIR)/arm/drivers/drvmgr.elf
#check-syms-y += $(OUTPUTDIR)/arm/drivers/drvmgr.elf
product_apps += $(OUTPUTDIR)/arm/drivers/drvmgr.elf
check-syms-y += $(OUTPUTDIR)/arm/drivers/drvmgr.elf
ifeq ($(CONFIG_TEE_MISC_DRIVER_64BIT), false)
#product_apps += $(OUTPUTDIR)/arm/drivers/tee_misc_driver.elf
#check-syms-y += $(OUTPUTDIR)/arm/drivers/tee_misc_driver.elf
product_apps += $(OUTPUTDIR)/arm/drivers/tee_misc_driver.elf
check-syms-y += $(OUTPUTDIR)/arm/drivers/tee_misc_driver.elf
endif
endif
ifeq ($(CONFIG_TEE_CRYPTO_MGR_SERVER_64BIT), true)
#product_apps += $(OUTPUTDIR)/aarch64/drivers/crypto_mgr.elf
#check-a64-syms-y += $(OUTPUTDIR)/aarch64/drivers/crypto_mgr.elf
product_apps += $(OUTPUTDIR)/aarch64/drivers/crypto_mgr.elf
check-a64-syms-y += $(OUTPUTDIR)/aarch64/drivers/crypto_mgr.elf
endif
ifeq ($(CONFIG_TEE_CRYPTO_MGR_SERVER_64BIT), false)
#product_apps += $(OUTPUTDIR)/arm/drivers/crypto_mgr.elf
#check-syms-y += $(OUTPUTDIR)/arm/drivers/crypto_mgr.elf
product_apps += $(OUTPUTDIR)/arm/drivers/crypto_mgr.elf
check-syms-y += $(OUTPUTDIR)/arm/drivers/crypto_mgr.elf
endif
ifeq ($(CONFIG_ARCH_AARCH64),y)
@@ -117,3 +117,8 @@ else
product_apps += $(OUTPUTDIR)/arm/apps/teesmcmgr.elf
check-syms-y += $(OUTPUTDIR)/arm/apps/teesmcmgr.elf
endif
ifdef CONFIG_HADRWARE_CRYPTO_ENABLE
product_apps += $(OUTPUTDIR)/aarch64/drivers/libhardware_crypto_drv.so
check-a64-syms-y += $(OUTPUTDIR)/aarch64/drivers/libhardware_crypto_drv.so
endif
@@ -46,6 +46,7 @@ CONFIG_APP_TEE_PERM=y
CONFIG_APP_TEE_HUK=y
CONFIG_OH_LOAD_KEY=y
CONFIG_DISABLE_PERM_STORAGE=y
CONFIG_DISABLE_MULTI_DRV=y
#
# lib
#
@@ -95,3 +96,7 @@ CONFIG_CC_STACKPROTECTOR_STRONG=y
# Log
#
TLOG_USE_TEE_PRINT=y
CRYPTO_MGR_SERVER_ENABLE=y
CONFIG_TEE_CRYPTO_MGR_SERVER_64BIT=true
CONFIG_HADRWARE_CRYPTO_ENABLE=y
@@ -31,7 +31,7 @@
#include "crypto_syscall_pm.h"
struct crypto_drv_ops_t *g_drv_entry = NULL;
#define DRV_NAME "/tafs/libhardware_crypto_drv.so"
#define DRV_NAME "libhardware_crypto_drv.so"
static int32_t load_drv_hardware(void)
{
+2 -1
View File
@@ -18,6 +18,7 @@
#include <tee_log.h>
#include "drv_random.h"
#include "crypto_driver_adaptor.h"
#include <securec.h>
const char *g_debug_prefix = "crypto_mgr";
uint8_t *g_src_ctx_buf = NULL;
@@ -50,7 +51,7 @@ static int32_t crypto_ioctl_alloc_ctx_buf(struct drv_data *drv, uint32_t cmd, un
tloge("Malloc ctx buffer failed, ctx size=%d\n", ctx_size);
return CRYPTO_OVERFLOW;
}
if (memset_s(ctx_buffer, (size_t)ctx_size, 0, (size_t)ctx_size) != EOK) {
if (memset_s(ctx_buffer, (size_t)ctx_size, 0, (size_t)ctx_size) != 0) {
tloge("memset ctx buffer failed\n");
free(ctx_buffer);
return CRYPTO_ERROR_SECURITY;
@@ -0,0 +1,31 @@
# Copyright (c) 2023 Institute of Parallel And Distributed Systems (IPADS), Shanghai Jiao Tong University (SJTU)
# Licensed under the Mulan PSL v2.
# You can use this software according to the terms and conditions of the Mulan PSL v2.
# You may obtain a copy of Mulan PSL v2 at:
# http://license.coscl.org.cn/MulanPSL2
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
# PURPOSE.
# See the Mulan PSL v2 for more details.
DRIVER := libhardware_crypto_drv.so
include $(BUILD_CONFIG)/var.mk
libhardware_crypto_drv_c_files += $(wildcard src/*.c)
inc-flags += -I$(FRAMEWORK_PATH)/drvmgr/src
inc-flags += -I$(DRIVERS_PATH)/include
inc-flags += -I$(DRVLIB)/common/libdrv_frame/include
inc-flags += -I$(DRVLIB)/libdrv_shared/include
inc-flags += -I$(DRIVERS_PATH)/crypto_mgr/src/crypto_ioctl/
inc-flags += -I$(TEELIB)/libcrypto_hal/include
inc-flags += -I$(TEELIB)/libteeos/include/tee
inc-flags += -I$(TEELIB)/libteeos/include/legacy
inc-flags += -I$(TEELIB)/libtimer/include
inc-flags += -I$(TEELIB)/libteemem/include
# Libraries
SVC_PARTITIAL_LINK = y
include $(BUILD_SERVICE)/svc-common.mk
@@ -0,0 +1,102 @@
/*
* Copyright (c) 2023 Institute of Parallel And Distributed Systems (IPADS), Shanghai Jiao Tong University (SJTU)
* Licensed under the Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
* PURPOSE.
* See the Mulan PSL v2 for more details.
*/
#include <crypto_driver_adaptor_ops.h>
#include <drv_io_share.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
#define MIN(x, y) ((x) < (y) ? (x) : (y))
#define BIT(x) (1 << (x))
#define TRNG_64_BIT_LEN (0 << 4)
#define TRNG_128_BIT_LEN (1 << 4)
#define TRNG_192_BIT_LEN (2 << 4)
#define TRNG_256_BIT_LEN (3 << 4)
#define TRNG_FATESY_SOC_RING (0 << 2)
#define TRNG_SLOWER_SOC_RING_0 (1 << 2)
#define TRNG_SLOWER_SOC_RING_1 (2 << 2)
#define TRNG_SLOWEST_SOC_RING (3 << 2)
#define TRNG_ENABLE BIT(1)
#define TRNG_START BIT(0)
#define TRNG_BASE (0xfe370000)
#define TRNG_SIZE (0x10000)
#define TRNG_RNG_CTL(addr) ((addr) + 0x0400)
#define TRNG_RST_CTL(addr) ((addr) + 0x0004)
#define TRNG_RNG_SAMPLE_CNT(addr) ((addr) + 0x0404)
#define TRNG_RNG_DOUT(addr, x) ((addr) + 0x0410 + 4 * (x))
static void put32(unsigned long addr, uint32_t val)
{
*(volatile uint32_t *)addr = val;
}
static uint32_t get32(unsigned long addr)
{
return *(volatile uint32_t *)addr;
}
static void set32(unsigned long addr, uint32_t set_mask)
{
put32(addr, get32(addr) | set_mask);
}
static unsigned long s_trng_vaddr;
int32_t init(void)
{
s_trng_vaddr = (unsigned long)ioremap((uintptr_t)TRNG_BASE, TRNG_SIZE, PROT_READ | PROT_WRITE);
if ((void *)s_trng_vaddr == NULL)
return -EFAULT;
return 0;
}
uint64_t hw_rng(void)
{
int reg = 0;
uint64_t rnd;
set32(TRNG_RNG_SAMPLE_CNT(s_trng_vaddr), 100);
reg |= TRNG_64_BIT_LEN;
reg |= TRNG_SLOWER_SOC_RING_0;
reg |= TRNG_ENABLE;
reg |= TRNG_START;
put32(TRNG_RNG_CTL(s_trng_vaddr), ((0xffff) | (reg)) << 16 | (reg));
set32(TRNG_RNG_CTL(s_trng_vaddr), 0b1);
while (get32(TRNG_RNG_CTL(s_trng_vaddr)) & 1);
rnd = ((uint64_t)get32(TRNG_RNG_DOUT(s_trng_vaddr, 0)) << 32) | (uint64_t)get32(TRNG_RNG_DOUT(s_trng_vaddr, 1));
put32(TRNG_RNG_CTL(s_trng_vaddr), (0xffff) << 16);
return rnd;
}
int32_t generate_random(void *buffer, size_t size)
{
size_t i;
int rnd;
for (i = 0; i < size; i += sizeof(uint64_t)) {
rnd = hw_rng();
memcpy(buffer + i, &rnd, MIN(sizeof(uint64_t), size - i));
}
return 0;
}
__attribute__((visibility("default"))) const struct crypto_drv_ops_t g_crypto_drv_ops = {
.init = init,
.generate_random = generate_random,
};
@@ -9,6 +9,7 @@
* PURPOSE.
* See the Mulan PSL v2 for more details.
*/
#define _GNU_SOURCE
#include "drv_sharedmem.h"
#include <securec.h>
#include "tee_log.h"
+1
View File
@@ -17,6 +17,7 @@
#include "target_type.h"
#include "tee_config.h"
#include "tee_log.h"
#include <securec.h>
const struct base_driver_node g_product_base_drv[] = {
#ifdef CRYPTO_MGR_SERVER_ENABLE
+8 -13
View File
@@ -9,6 +9,7 @@
* PURPOSE.
* See the Mulan PSL v2 for more details.
*/
#define _GNU_SOURCE
#include "drv_dispatch.h"
#include <stdint.h>
#include <inttypes.h>
@@ -37,7 +38,7 @@
#include <unistd.h>
static int32_t get_drv_params(struct tee_drv_param *params, const struct drv_req_msg_t *msg,
const struct cap_message_info *info)
const struct src_msginfo *info)
{
spawn_uuid_t uuid;
int32_t ret;
@@ -46,27 +47,21 @@ static int32_t get_drv_params(struct tee_drv_param *params, const struct drv_req
return -1;
}
uint32_t cnode_idx = info->src_cnode_idx;
if ((cnode_idx == 0) || (info->msg_size < sizeof(struct drv_req_msg_t))) {
tloge("invalid cnode or invalid msg size\n");
return -1;
}
ret = getuuid(info->src_cred.pid, &uuid);
ret = getuuid(info->src_pid, &uuid);
if (ret != 0) {
tloge("get pid:%u uuid failed\n", info->src_cred.pid);
tloge("get pid:%u uuid failed\n", info->src_pid);
return -1;
}
ret = memcpy_s(&(params->uuid), sizeof(params->uuid), &uuid.uuid, sizeof(uuid.uuid));
if (ret != 0) {
tloge("copy pid:%u uuid:0x%x to params failed\n", info->src_cred.pid, uuid.uuid.timeLow);
tloge("copy pid:%u uuid:0x%x to params failed\n", info->src_pid, uuid.uuid.timeLow);
return -1;
}
params->args = (uintptr_t)msg->args;
params->data = (uintptr_t)msg->data;
params->caller_pid = pid_to_taskid(TCBCREF2TID(info->src_tcb_cref), info->src_cred.pid);
params->caller_pid = pid_to_taskid(info->src_tid, info->src_pid);
return 0;
}
@@ -745,7 +740,7 @@ static void driver_reply_error_handle(int32_t swi_id, const struct tee_drv_param
driver_open_reply_error_callback(ret_val, params);
}
static int32_t driver_handle_message(const struct drv_req_msg_t *msg, const struct cap_message_info *info,
static int32_t driver_handle_message(const struct drv_req_msg_t *msg, const struct src_msginfo *info,
struct drv_reply_msg_t *rmsg, const cref_t *msg_hdl)
{
int64_t ret_val = -1;
@@ -791,7 +786,7 @@ static int32_t driver_handle_message(const struct drv_req_msg_t *msg, const stru
return ret;
}
intptr_t driver_dispatch(void *msg, cref_t *p_msg_hdl, struct cap_message_info *info)
intptr_t driver_dispatch(void *msg, cref_t *p_msg_hdl, struct src_msginfo *info)
{
int32_t ret;
struct drv_reply_msg_t reply_raw_buf;
+1
View File
@@ -166,6 +166,7 @@ static int32_t init_spawn_argv(const char *drv_name, uint32_t drv_name_len,
static void init_spawn_buffer(struct spawn_drv_buffer *buffer)
{
g_argv[ARGV_ELF_PATH_INDEX] = (char *)g_drv_loader;
g_argv[ARGV_TASK_NAME_INDEX] = buffer->argv.task_name;
g_argv[ARGV_TASK_PATH_INDEX] = buffer->argv.task_path;
g_argv[ARGV_UNCOMMIT_INDEX] = buffer->argv.uncommit;
+2 -1
View File
@@ -19,6 +19,7 @@
#include "drv_thread.h"
#include "drv_process_mgr.h"
#include "tee_log.h"
#include "cs.h"
const char *g_debug_prefix = "drvmgr";
@@ -33,7 +34,6 @@ int32_t main(int32_t argc __attribute__((unused)), char *argv[] __attribute__((u
{
static dispatch_fn_t dispatch_fns[] = {
[0] = driver_dispatch,
[HM_MSG_HEADER_CLASS_ACMGR_PUSH] = ac_dispatch,
};
tlogi("drvmgr main begin\n");
@@ -74,6 +74,7 @@ int32_t main(int32_t argc __attribute__((unused)), char *argv[] __attribute__((u
tloge("drv thread init fail\n");
exit(ret);
}
tlogi("%s: start server loop\n", drv_frame.name);
cs_server_loop(ch, dispatch_fns, ARRAY_SIZE(dispatch_fns), NULL, NULL);
+1 -1
View File
@@ -13,7 +13,6 @@
#include "task_mgr.h"
#include <tee_log.h>
#include <ipclib.h>
#include <ac_const.h>
#include <libdrv_frame.h>
#include <dyn_conf_dispatch_inf.h>
#include <target_type.h>
@@ -24,6 +23,7 @@
#include "drv_dyn_policy_mgr.h"
#include "drv_index_mgr.h"
#include "drv_dyn_conf_mgr.h"
#include <securec.h>
static struct dlist_node g_task_list = dlist_head_init(g_task_list);
static pthread_mutex_t g_task_mtx = PTHREAD_MUTEX_INITIALIZER;
-7
View File
@@ -130,13 +130,6 @@ static int32_t create_task_channel(const char *task_name, const struct env_param
}
tlogd("create drv:%s channel:0x%llx\n", task_name, (unsigned long long)(*drv_channel));
/* used for irq thread */
ret = ipc_create_channel(NULL, IPC_CHANNEL_NUM, NULL, reg_items);
if (ret != 0) {
tloge("create drv irq channel failed\n");
return -1;
}
} else {
/* Create 2 IPC channels */
ret = ipc_create_channel(task_name, IPC_CHANNEL_NUM, NULL, reg_items);
@@ -11,14 +11,19 @@
*/
#ifndef PLATDRV_DRV_THREAD_H
#define PLATDRV_DRV_THREAD_H
#include <alltypes.h>
#include <bits/alltypes.h>
#include <drv.h>
#include <spawn_ext.h>
#define DRV_CALL_OK 0
#define DRV_CALL_ERROR (-1)
intptr_t driver_dispatch(void *msg, cref_t *p_msg_hdl, struct hmcap_message_info *info);
intptr_t driver_dispatch(void *msg, cref_t *p_msg_hdl, struct src_msginfo *info);
#ifdef CONFIG_DISABLE_MULTI_DRV
#define DRV_THREAD_MAX 0
#else /* CONFIG_DISABLE_MULTI_DRV */
#define DRV_THREAD_MAX 8
#endif /* CONFIG_DISABLE_MULTI_DRV */
#define INVALID_CALLER_PID (-1)
#define TASK_MAX 20
#define REPLY_BUF_LEN 2048U
@@ -13,6 +13,7 @@
#define LIBDRV_FRAME_DRV_FRAME_H
#include <stdbool.h>
#include "ipclib.h"
typedef int32_t (*drv_frame_init_t)(void);
@@ -10,11 +10,12 @@
* See the Mulan PSL v2 for more details.
*/
#define _GNU_SOURCE
#include "drv_param_ops.h"
#include <stdio.h>
#include <unistd.h>
#include <drv_thread.h>
#include <tee_log.h>
#include <unistd.h>
#include <tee_sharemem_ops.h>
static int32_t get_drv_caller_taskid(uint32_t *taskid)
@@ -11,11 +11,14 @@
*/
#include "drv_thread.h"
#include <errno.h>
#include <securec.h>
#include <ipclib.h>
#include <tee_log.h>
#include <mem_page_ops.h>
#include <tee_drv_internal.h>
#include <ipclib_hal.h>
#include <semaphore.h>
#include "cs.h"
#define IPC_CHANNEL_NUM 2
static pthread_mutex_t g_drv_caller_info_mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -15,11 +15,8 @@
#include <dlfcn.h>
#include <unistd.h>
#include <ipclib.h>
#include <sys/kuapi.h>
#include <fileio.h>
#include <timer.h>
#include <irqmgr.h>
#include <tamgr_ext.h>
#include <tee_tag.h>
#include <tee_drv_internal.h>
#include <ipclib_hal.h>
@@ -71,7 +68,7 @@ static int32_t system_init(const char *name)
set_log_use_tid_flag();
ret = hm_tamgr_register(name);
ret = tamgr_register(name);
if (ret != 0) {
tloge("%s: tamgr registration for platdrv failed\n", name);
return -1;
@@ -90,7 +87,6 @@ int32_t register_drv_framework(const struct drv_frame_t *drv_frame, cref_t *ch,
}
print_drv_info(drv_frame->name);
_init();
ret = ipc_init(drv_frame->name, ch);
if (ret != 0)
+6 -1
View File
@@ -50,6 +50,11 @@ inc-flags += -I$(SYSLIB)/libspawn_common/include
inc-flags += -I$(TEELIB)/libteeconfig/include
endif
ifneq ($(CRYPTO_MGR_SERVER_ENABLE), )
inc-flags += -I$(TEELIB)/libcrypto_hal/include
inc-flags += -I$(TEELIB)/libcrypto/include
endif
include $(BUILD_CONFIG)/feature-macro.mk
MODULE_FILE = $(BUILD_DIR)/$(SONAME)
@@ -73,7 +78,7 @@ $(BUILD_DIR)/export.txt: export.txt
@${CC} ${flags} -P -E -o $@ -x c $<
ld-flags :=
ld-flags += -lhwi$(TARG) -lc_shared$(TARG) -lteemem$(TARG) -lteeconfig$(TARG) -lio$(TARG)
ld-flags += -lc_shared$(TARG) -lteemem$(TARG) -lteeconfig$(TARG)
ld-flags += -z separate-loadable-segments
@@ -1,20 +0,0 @@
/*
* Copyright (C) 2022 Huawei Technologies Co., Ltd.
* Licensed under the Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
* PURPOSE.
* See the Mulan PSL v2 for more details.
*/
#ifndef LIBDRV_IO_SHARED_H
#define LIBDRV_IO_SHARED_H
#include <stdint.h>
void *ioremap(uintptr_t phys_addr, unsigned long size, int32_t prot);
int32_t iounmap(uintptr_t pddr, const void *addr);
#endif
+6 -11
View File
@@ -9,6 +9,7 @@
* PURPOSE.
* See the Mulan PSL v2 for more details.
*/
#define _GNU_SOURCE
#include "drv_dispatch.h"
#include <stdint.h>
#include <inttypes.h>
@@ -26,23 +27,17 @@
#include <unistd.h>
static int32_t get_drv_params(struct tee_drv_param *params, const struct drv_req_msg_t *msg,
const struct hmcap_message_info *info)
const struct src_msginfo *info)
{
if (msg == NULL || info == NULL) {
tloge("invalid parameters\n");
return -1;
}
uint32_t cnode_idx = info->src_cnode_idx;
if ((cnode_idx == 0) || (info->msg_size < sizeof(struct drv_req_msg_t))) {
tloge("invalid cnode or invalid msg size\n");
return -1;
}
/* params uuid will set in open/ioctl/close function */
params->args = (uintptr_t)msg->args;
params->data = (uintptr_t)msg->data;
params->caller_pid = pid_to_taskid(TCBCREF2TID(info->src_tcb_cref), info->src_cred.pid);
params->caller_pid = pid_to_taskid(info->src_tid, info->src_pid);
return 0;
}
@@ -156,7 +151,7 @@ static int32_t driver_syscall_dispatch(int32_t swi_id, struct tee_drv_param *par
return ret;
}
static int32_t driver_syscall(const struct drv_req_msg_t *msg, const struct hmcap_message_info *info,
static int32_t driver_syscall(const struct drv_req_msg_t *msg, const struct src_msginfo *info,
struct tee_drv_param *params, int32_t swi_id, int64_t *ret_val)
{
int32_t ret;
@@ -204,7 +199,7 @@ static void driver_reply_error_handle(int32_t swi_id, const struct tee_drv_param
tloge("close fd:%" PRIx64 " failed in reply error handle\n", ret_val);
}
static int32_t driver_handle_message(const struct drv_req_msg_t *msg, const struct hmcap_message_info *info,
static int32_t driver_handle_message(const struct drv_req_msg_t *msg, const struct src_msginfo *info,
struct drv_reply_msg_t *rmsg, const cref_t *msg_hdl)
{
int64_t ret_val = -1;
@@ -230,7 +225,7 @@ static int32_t driver_handle_message(const struct drv_req_msg_t *msg, const stru
return ret;
}
intptr_t driver_dispatch(void *msg, cref_t *p_msg_hdl, struct hmcap_message_info *info)
intptr_t driver_dispatch(void *msg, cref_t *p_msg_hdl, struct src_msginfo *info)
{
struct drv_reply_msg_t reply_raw_buf;
int32_t ret;
+5 -40
View File
@@ -10,9 +10,7 @@
* See the Mulan PSL v2 for more details.
*/
#include "drv_random.h"
#include <rnd_seed.h>
#include <priorities.h>
#include <fileio.h>
#include "tee_log.h"
static crypto_drv_init g_rand = 0;
@@ -24,43 +22,10 @@ void register_crypto_rand_driver(crypto_drv_init fun, void *ops)
g_crypto_ops = ops;
}
static int32_t drv_push_random(struct hmcap_message_info *info)
intptr_t rand_update(void *msg, cref_t *p_msg_hdl, struct src_msginfo *info)
{
int32_t ret;
uint64_t rnd[PUSHED_RND_64_NUM] = { 0 };
if (info == NULL || g_rand == 0 || g_crypto_ops == NULL) {
tloge("invalid args or fun is not register\n");
return -1;
}
ret = g_rand(g_crypto_ops, rnd, sizeof(rnd));
if (ret != 0) {
tloge("gen random failed\n");
return ret;
}
return push_random(info, rnd, sizeof(rnd));
}
intptr_t rand_update(void *msg, cref_t *p_msg_hdl, struct hmcap_message_info *info)
{
int32_t ret;
if (p_msg_hdl == NULL || msg == NULL || info == NULL)
return -1;
cref_t msg_hdl = *p_msg_hdl;
msg_header *msg_hdr = (msg_header *)msg;
switch (msg_hdr->send.msg_id) {
case HM_MSG_ID_DRV_PUSHED_RANDOM:
ret = drv_push_random(info);
break;
default:
ret = reply_invalid_rand_request(msg_hdl);
break;
}
return (intptr_t)ret;
(void)msg;
(void)p_msg_hdl;
(void)info;
return 0;
}
+2 -1
View File
@@ -15,8 +15,9 @@
#include <stdint.h>
#include <tee_defines.h>
#include <errno.h>
#include <ipclib.h>
typedef int32_t (*crypto_drv_init) (const void *ops, void *buf, uint32_t buf_len);
void register_crypto_rand_driver(crypto_drv_init fun, void *ops);
intptr_t rand_update(void *msg, cref_t *p_msg_hdl, struct hmcap_message_info *info);
intptr_t rand_update(void *msg, cref_t *p_msg_hdl, struct src_msginfo *info);
#endif
-11
View File
@@ -14,19 +14,8 @@
#include <stdint.h>
#include "drv_io_share.h"
#include "drv_addr_share.h"
#include "iomgr_ext.h"
#include "drv_thread.h"
void *ioremap(uintptr_t phys_addr, unsigned long size, int32_t prot)
{
return hm_io_remap((uintptr_t)phys_addr, NULL, size, prot);
}
int32_t iounmap(uintptr_t pddr, const void *addr)
{
return hm_io_unmap(pddr, addr);
}
uint64_t drv_virt_to_phys(uintptr_t addr)
{
return virt_to_phys(addr);
+1 -46
View File
@@ -14,16 +14,15 @@
#include <inttypes.h>
#include <priorities.h>
#include <ipclib.h>
#include <irqmgr.h>
#include <spawn_init.h>
#include <tee_log.h>
#include "drv_dispatch.h"
#include "drv_thread.h"
#include "drv_operations.h"
#include "cs.h"
#ifdef CRYPTO_MGR_SERVER_ENABLE
#include "drv_random.h"
#include "crypto_manager.h"
#include <rnd_seed.h>
#endif
static taskid_t g_drv_mgr_pid;
@@ -56,32 +55,6 @@ uint32_t get_drv_index(void)
return g_drv_index;
}
static int32_t hwi_context_init(const char *drv_name)
{
cref_t hwi_ch = 0;
const int channel_index = 1;
int32_t ret = ipc_get_my_channel(channel_index, &hwi_ch);
if (ret != 0) {
tloge("drv %s get ipc channel for hwi fail:0x%x\n", drv_name, ret);
return -1;
}
ret = hwi_init(hwi_ch);
if (ret != 0) {
tloge("drv %s hwi init failed 0x%x\n", drv_name, ret);
return -1;
}
ret = hwi_create_irq_thread();
if (ret != 0) {
tloge("drv %s create hwi irq thread fail:0x%x\n", drv_name, ret);
return -1;
}
return 0;
}
static int32_t send_succ_msg_to_drvmgr(void)
{
cref_t ch = -1;
@@ -148,9 +121,6 @@ void tee_drv_entry(const struct tee_driver_module *drv_func, const char *drv_nam
{
static dispatch_fn_t dispatch_fns[] = {
[0] = driver_dispatch,
#ifdef CRYPTO_MGR_SERVER_ENABLE
[HM_MSG_HEADER_CLASS_UPDATE_RND] = rand_update,
#endif
};
int32_t ret = param_check(drv_func, drv_name, param);
@@ -159,24 +129,9 @@ void tee_drv_entry(const struct tee_driver_module *drv_func, const char *drv_nam
tlogi("%s begin thread_limit:%u drv_index:%u\n", drv_name, param->thread_limit, param->drv_index);
#ifdef CRYPTO_MGR_SERVER_ENABLE
if (strcmp(drv_name, TEE_CRYPTO_DRIVER_NAME) == 0) {
ret = ipc_register_ch_path(RAND_DRV_PATH, ch);
if (ret != 0) {
tloge("failed to register channel with name \"%s\":%d\n", RAND_DRV_PATH, ret);
return;
}
}
#endif
g_drv_func = drv_func;
g_drv_index = param->drv_index;
ret = hwi_context_init(drv_name);
if (ret != 0) {
tloge("drv:%s hwi init failed\n", drv_name);
return;
}
ret = hunt_drv_mgr_pid(&g_drv_mgr_pid);
if (ret != 0)
return;
@@ -1457,8 +1457,11 @@ void dump_drv_conf(void)
{
uint64_t args[] = {};
uint32_t lens[] = {};
#ifndef CONFIG_DISABLE_MULTI_DRV
(void)drv_call_new("drvmgr_multi", DUMP_DRV_CONF, args, lens, ARRAY_SIZE(args));
#else
(void)drv_call_new("drvmgr", DUMP_DRV_CONF, args, lens, ARRAY_SIZE(args));
#endif
}
static int32_t send_drv_service_name(const char *service_name, uint32_t name_size)
@@ -1472,8 +1475,11 @@ static int32_t send_drv_service_name(const char *service_name, uint32_t name_siz
name_size,
0,
};
#ifndef CONFIG_DISABLE_MULTI_DRV
return drv_call_new("drvmgr_multi", UNREGISTER_DRV_CONF, args, lens, ARRAY_SIZE(args));
#else
return drv_call_new("drvmgr", UNREGISTER_DRV_CONF, args, lens, ARRAY_SIZE(args));
#endif
}
void uninstall_drv_permission(const void *obj, uint32_t obj_size)
@@ -293,8 +293,11 @@ static int32_t send_drvcall_uuid(const struct tee_uuid *uuid, uint32_t uuid_size
uuid_size,
0,
};
#ifndef CONFIG_DISABLE_MULTI_DRV
return drv_call_new("drvmgr_multi", UNREGISTER_DRVCALL_CONF, args, lens, ARRAY_SIZE(args));
#else
return drv_call_new("drvmgr", UNREGISTER_DRVCALL_CONF, args, lens, ARRAY_SIZE(args));
#endif
}
void dump_drvcall_conf(void)
@@ -302,7 +305,11 @@ void dump_drvcall_conf(void)
uint64_t args[] = {};
uint32_t lens[] = {};
#ifndef CONFIG_DISABLE_MULTI_DRV
(void)drv_call_new("drvmgr_multi", DUMP_DRVCALL_CONF, args, lens, ARRAY_SIZE(args));
#else
(void)drv_call_new("drvmgr", DUMP_DRVCALL_CONF, args, lens, ARRAY_SIZE(args));
#endif
}
void uninstall_drvcall_permission(const void *obj, uint32_t obj_size)
+1
View File
@@ -10,6 +10,7 @@
MODULE := libipc_hal${TARG}.a
CPPFLAGS += -I$(TEELIB)/libipc_hal/include
CPPFLAGS += -I$(TEELIB)/libdrv/include
CPPFLAGS += -I$(TEELIB)/libteeos/include/tee
CPPFLAGS += -I$(PREBUILD_HEADER)/sys
# Source files required to build the target
+48
View File
@@ -0,0 +1,48 @@
/*
* Copyright (C) 2022 Huawei Technologies Co., Ltd.
* Licensed under the Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
* PURPOSE.
* See the Mulan PSL v2 for more details.
*/
#ifndef __CS_H
#define __CS_H
#include <tee_msg_type.h>
#include <ipclib.h>
#include <stdint.h>
#include <stddef.h>
#include <semaphore.h>
#define CS_SERVER_MAX_MSG_LEN 2048
struct cs_req_msg {
msg_header hdr;
char payload[];
} __attribute__((__packed__));
struct reply_cs_msg {
msg_header hdr;
} __attribute__((__packed__));
struct thread_init_info {
cref_t channel;
void *(*func)(void *arg);
uint32_t max_thread;
sem_t *thread_sem;
int32_t capid;
int32_t task_id;
int32_t shadow;
size_t stack_size;
void* args;
};
typedef intptr_t (*dispatch_fn_t)(void *msg, cref_t *p_msg_hdl, struct src_msginfo *info);
void cs_server_loop(cref_t channel, const dispatch_fn_t dispatch_fns[], unsigned n_dispatch_fns, int (*hook)(void), void *cur_thread);
#endif
+63
View File
@@ -0,0 +1,63 @@
/*
* Copyright (C) 2022 Huawei Technologies Co., Ltd.
* Licensed under the Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
* PURPOSE.
* See the Mulan PSL v2 for more details.
*/
#include <cs.h>
#include <ipclib_hal.h>
#include <tee_log.h>
#include <securec.h>
#include <drv.h>
static int do_deal_with_msg(const dispatch_fn_t dispatch_fns[], unsigned n_dispatch_fns, void *msg_buff,
struct src_msginfo *info, cref_t *msg_hdl)
{
msg_header *msg_hdr = (msg_header *)(uintptr_t)msg_buff;
uint8_t class = msg_hdr->send.msg_class;
struct reply_cs_msg rmsg;
int32_t ret = 0;
(void)memset_s(&rmsg, sizeof(rmsg), 0, sizeof(rmsg));
bool flag = (class >= n_dispatch_fns) || (dispatch_fns[class] == NULL);
if (flag) {
rmsg.hdr.reply.ret_val = -EINVAL;
if (info->msg_type == MSG_TYPE_CALL) {
ret = ipc_msg_reply(*msg_hdl, &rmsg, sizeof(rmsg));
if (ret != 0)
tloge("cs reply msg error %d\n", ret);
}
} else {
ret = dispatch_fns[class](msg_buff, msg_hdl, info);
}
return ret;
}
void cs_server_loop(cref_t channel, const dispatch_fn_t dispatch_fns[], unsigned n_dispatch_fns, int (*hook)(void), void *cur_thread)
{
(void)hook;
(void)cur_thread;
int32_t ret;
char msg_buf[SYSCAL_MSG_BUFFER_SIZE] = {0};
struct cs_req_msg *msg = (struct cs_req_msg *)msg_buf;
struct src_msginfo info = { 0 };
for (;;) {
cref_t msg_hdl = ipc_get_my_msghdl();
ret = ipc_msg_receive(channel, msg, sizeof(msg_buf), msg_hdl, &info, -1);
if (ret != 0) {
tloge("message receive failed, %llx\n", ret);
continue;
}
ret = do_deal_with_msg(dispatch_fns, n_dispatch_fns, msg, &info, &msg_hdl);
if (ret != 0) {
tloge("deal with msg error");
}
}
}
+3
View File
@@ -156,6 +156,9 @@ tee_ext_root_uuid_derive_key;
tee_hal_get_provision_key;
g_debug_prefix;
cs_server_loop;
get_valid_bit;
/* the following apis are exported for gtask dynamic link tee_shared library*/
BN_new;
BN_free;
+3
View File
@@ -155,6 +155,9 @@ tee_ext_root_uuid_derive_key;
tee_hal_get_provision_key;
g_debug_prefix;
cs_server_loop;
get_valid_bit;
/* the following apis are exported for gtask dynamic link tee_shared library*/
BN_new;
BN_free;
-2
View File
@@ -14,8 +14,6 @@ MODULE := libteeconfig$(TARG).a
flags += -fno-builtin
flags += -DCONFIG_TEE_DRV_STUB
ifeq ($(CONFIG_TEE_MISC_DRIVER_64BIT), false)
flags += -DCONFIG_TEE_MISC_DRIVER
endif
@@ -229,8 +229,11 @@ int64_t tee_drv_open(const char *drv_name, const void *param, uint32_t param_len
name_len,
0,
};
#ifndef CONFIG_DISABLE_MULTI_DRV
int64_t fd = drv_call_new("drvmgr_multi", DRV_GENERAL_CMD_ID, args, lens, ARRAY_SIZE(args));
#else
int64_t fd = drv_call_new("drvmgr", DRV_GENERAL_CMD_ID, args, lens, ARRAY_SIZE(args));
#endif
if (fd <= 0) {
tloge("alloc fd failed\n");
return fd;
@@ -316,7 +319,12 @@ static int64_t tee_drv_close_handle(int64_t fd)
(uint64_t)fd,
};
#ifndef CONFIG_DISABLE_MULTI_DRV
int64_t ret = drv_call_new("drvmgr_multi", DRV_GENERAL_CMD_ID, args, NULL, ARRAY_SIZE(args));
#else
int64_t ret = drv_call_new("drvmgr", DRV_GENERAL_CMD_ID, args, NULL, ARRAY_SIZE(args));
#endif
if (ret != 0)
tloge("close fd:0x%llx fail\n", fd);
@@ -357,14 +365,23 @@ void tee_drv_task_exit(uint32_t exit_pid)
exit_pid,
};
#ifndef CONFIG_DISABLE_MULTI_DRV
int64_t ret = drv_call_new("drvmgr_multi", DRV_EXCEPTION_CMD_ID, args, NULL, ARRAY_SIZE(args));
#else
int64_t ret = drv_call_new("drvmgr", DRV_EXCEPTION_CMD_ID, args, NULL, ARRAY_SIZE(args));
#endif
if (ret != 0)
tloge("call driver exception failed\n");
}
void tee_drv_task_dump(void)
{
#ifndef CONFIG_DISABLE_MULTI_DRV
int64_t ret = drv_call_new("drvmgr_multi", DRV_DUMP_CMD_ID, NULL, NULL, 0);
#else
int64_t ret = drv_call_new("drvmgr", DRV_DUMP_CMD_ID, NULL, NULL, 0);
#endif
if (ret != 0)
tloge("drv task dump drv call failed\n");
}
@@ -14,8 +14,10 @@
static struct drv_frame_info g_drv_frame_configs[] = {
#if defined(TEE_SUPPORT_DRV_SERVER_64BIT) || defined(TEE_SUPPORT_DRV_SERVER_32BIT)
{ "drvmgr", AC_SID_DRVMGR, 0, 0, 0, DRVMGR, true },
{ "drvmgr_multi", AC_SID_DRVMGR, 0, 0, 0, DRVMGR, false },
{ "drvmgr", 0, 0, 0, 0, DRVMGR, true },
#ifndef CONFIG_DISABLE_MULTI_DRV
{ "drvmgr_multi", 0, 0, 0, 0, DRVMGR, false },
#endif
#endif
};