in optee/ffa_abi.c [155:187]
static int optee_ffa_from_msg_param(struct optee *optee,
struct tee_param *params, size_t num_params,
const struct optee_msg_param *msg_params)
{
size_t n;
for (n = 0; n < num_params; n++) {
struct tee_param *p = params + n;
const struct optee_msg_param *mp = msg_params + n;
u32 attr = mp->attr & OPTEE_MSG_ATTR_TYPE_MASK;
switch (attr) {
case OPTEE_MSG_ATTR_TYPE_NONE:
p->attr = TEE_IOCTL_PARAM_ATTR_TYPE_NONE;
memset(&p->u, 0, sizeof(p->u));
break;
case OPTEE_MSG_ATTR_TYPE_VALUE_INPUT:
case OPTEE_MSG_ATTR_TYPE_VALUE_OUTPUT:
case OPTEE_MSG_ATTR_TYPE_VALUE_INOUT:
optee_from_msg_param_value(p, attr, mp);
break;
case OPTEE_MSG_ATTR_TYPE_FMEM_INPUT:
case OPTEE_MSG_ATTR_TYPE_FMEM_OUTPUT:
case OPTEE_MSG_ATTR_TYPE_FMEM_INOUT:
from_msg_param_ffa_mem(optee, p, attr, mp);
break;
default:
return -EINVAL;
}
}
return 0;
}