in optee/ffa_abi.c [637:670]
static bool optee_ffa_api_is_compatbile(struct ffa_device *ffa_dev,
const struct ffa_dev_ops *ops)
{
struct ffa_send_direct_data data = { OPTEE_FFA_GET_API_VERSION };
int rc;
ops->mode_32bit_set(ffa_dev);
rc = ops->sync_send_receive(ffa_dev, &data);
if (rc) {
pr_err("Unexpected error %d\n", rc);
return false;
}
if (data.data0 != OPTEE_FFA_VERSION_MAJOR ||
data.data1 < OPTEE_FFA_VERSION_MINOR) {
pr_err("Incompatible OP-TEE API version %lu.%lu",
data.data0, data.data1);
return false;
}
data = (struct ffa_send_direct_data){ OPTEE_FFA_GET_OS_VERSION };
rc = ops->sync_send_receive(ffa_dev, &data);
if (rc) {
pr_err("Unexpected error %d\n", rc);
return false;
}
if (data.data2)
pr_info("revision %lu.%lu (%08lx)",
data.data0, data.data1, data.data2);
else
pr_info("revision %lu.%lu", data.data0, data.data1);
return true;
}