
Adapted the latest IClientEnv adci and other interface methods from QTEE. Change-Id: I05730e56d656977fbc53a2d3dedb04426474be1c
160 line
3.9 KiB
C
160 line
3.9 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
|
|
/*
|
|
*
|
|
* Copyright (c) 2021 The Linux Foundation. All rights reserved.
|
|
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
|
*/
|
|
|
|
#define IClientEnv_OP_open 0
|
|
#define IClientEnv_OP_registerLegacy 1
|
|
#define IClientEnv_OP_register 2
|
|
#define IClientEnv_OP_registerWithWhitelist 3
|
|
#define IClientEnv_OP_notifyDomainChange 4
|
|
#define IClientEnv_OP_registerWithCredentials 5
|
|
#define IClientEnv_OP_loadCmnlibFromBuffer 6
|
|
#define IClientEnv_OP_configTaRegion 7
|
|
#define IClientEnv_OP_adciAccept 8
|
|
#define IClientEnv_OP_adciShutdown 9
|
|
|
|
#include "smcinvoke_object.h"
|
|
|
|
static inline int32_t
|
|
IClientEnv_release(struct Object self)
|
|
{
|
|
return Object_invoke(self, Object_OP_release, 0, 0);
|
|
}
|
|
|
|
static inline int32_t
|
|
IClientEnv_retain(struct Object self)
|
|
{
|
|
return Object_invoke(self, Object_OP_retain, 0, 0);
|
|
}
|
|
|
|
static inline int32_t
|
|
IClientEnv_open(struct Object self, uint32_t uid_val, struct Object *obj_ptr)
|
|
{
|
|
union ObjectArg a[2];
|
|
int32_t result;
|
|
|
|
a[0].b = (struct ObjectBuf) { &uid_val, sizeof(uint32_t) };
|
|
|
|
result = Object_invoke(self, IClientEnv_OP_open, a, ObjectCounts_pack(1, 0, 0, 1));
|
|
|
|
*obj_ptr = a[1].o;
|
|
|
|
return result;
|
|
}
|
|
|
|
static inline int32_t
|
|
IClientEnv_registerLegacy(struct Object self, const void *credentials_ptr, size_t credentials_len,
|
|
struct Object *clientEnv_ptr)
|
|
{
|
|
union ObjectArg a[2];
|
|
int32_t result;
|
|
|
|
a[0].bi = (struct ObjectBufIn) { credentials_ptr, credentials_len * 1 };
|
|
|
|
result = Object_invoke(self, IClientEnv_OP_registerLegacy, a,
|
|
ObjectCounts_pack(1, 0, 0, 1));
|
|
|
|
*clientEnv_ptr = a[1].o;
|
|
|
|
return result;
|
|
}
|
|
|
|
static inline int32_t
|
|
IClientEnv_register(struct Object self, struct Object credentials_val,
|
|
struct Object *clientEnv_ptr)
|
|
{
|
|
union ObjectArg a[2];
|
|
int32_t result;
|
|
|
|
a[0].o = credentials_val;
|
|
|
|
result = Object_invoke(self, IClientEnv_OP_register, a,
|
|
ObjectCounts_pack(0, 0, 1, 1));
|
|
|
|
*clientEnv_ptr = a[1].o;
|
|
|
|
return result;
|
|
}
|
|
|
|
static inline int32_t
|
|
IClientEnv_registerWithWhitelist(struct Object self,
|
|
struct Object credentials_val, const uint32_t *uids_ptr,
|
|
size_t uids_len, struct Object *clientEnv_ptr)
|
|
{
|
|
union ObjectArg a[3];
|
|
int32_t result;
|
|
|
|
a[1].o = credentials_val;
|
|
a[0].bi = (struct ObjectBufIn) { uids_ptr, uids_len *
|
|
sizeof(uint32_t) };
|
|
|
|
result = Object_invoke(self, IClientEnv_OP_registerWithWhitelist, a,
|
|
ObjectCounts_pack(1, 0, 1, 1));
|
|
|
|
*clientEnv_ptr = a[2].o;
|
|
|
|
return result;
|
|
}
|
|
|
|
static inline int32_t
|
|
IClientEnv_notifyDomainChange(struct Object self)
|
|
{
|
|
return Object_invoke(self, IClientEnv_OP_notifyDomainChange, 0, 0);
|
|
}
|
|
|
|
static inline int32_t
|
|
IClientEnv_registerWithCredentials(struct Object self, struct Object
|
|
credentials_val, struct Object *clientEnv_ptr)
|
|
{
|
|
union ObjectArg a[2]={{{0,0}}};
|
|
int32_t result;
|
|
|
|
a[0].o = credentials_val;
|
|
|
|
result = Object_invoke(self, IClientEnv_OP_registerWithCredentials, a,
|
|
ObjectCounts_pack(0, 0, 1, 1));
|
|
|
|
*clientEnv_ptr = a[1].o;
|
|
|
|
return result;
|
|
}
|
|
|
|
static inline int32_t
|
|
IClientEnv_loadCmnlibFromBuffer(struct Object self, const void *cmnlibElf_ptr, size_t cmnlibElf_len)
|
|
{
|
|
union ObjectArg a[1]={{{0,0}}};
|
|
a[0].bi = (struct ObjectBufIn) { cmnlibElf_ptr, cmnlibElf_len * 1 };
|
|
|
|
return Object_invoke(self, IClientEnv_OP_loadCmnlibFromBuffer, a, ObjectCounts_pack(1, 0, 0, 0));
|
|
}
|
|
|
|
static inline int32_t
|
|
IClientEnv_configTaRegion(struct Object self, uint64_t appRgnAddr_val, uint32_t appRgnSize_val)
|
|
{
|
|
union ObjectArg a[1]={{{0,0}}};
|
|
struct {
|
|
uint64_t m_appRgnAddr;
|
|
uint32_t m_appRgnSize;
|
|
} i;
|
|
a[0].b = (struct ObjectBuf) { &i, 12 };
|
|
i.m_appRgnAddr = appRgnAddr_val;
|
|
i.m_appRgnSize = appRgnSize_val;
|
|
|
|
return Object_invoke(self, IClientEnv_OP_configTaRegion, a, ObjectCounts_pack(1, 0, 0, 0));
|
|
}
|
|
|
|
static inline int32_t
|
|
IClientEnv_adciAccept(struct Object self)
|
|
{
|
|
return Object_invoke(self, IClientEnv_OP_adciAccept, 0, 0);
|
|
}
|
|
|
|
static inline int32_t
|
|
IClientEnv_adciShutdown(struct Object self)
|
|
{
|
|
return Object_invoke(self, IClientEnv_OP_adciShutdown, 0, 0);
|
|
}
|