in amdtee/core.c [340:380]
int amdtee_map_shmem(struct tee_shm *shm)
{
struct amdtee_context_data *ctxdata;
struct amdtee_shm_data *shmnode;
struct shmem_desc shmem;
int rc, count;
u32 buf_id;
if (!shm)
return -EINVAL;
shmnode = kmalloc(sizeof(*shmnode), GFP_KERNEL);
if (!shmnode)
return -ENOMEM;
count = 1;
shmem.kaddr = shm->kaddr;
shmem.size = shm->size;
/*
* Send a MAP command to TEE and get the corresponding
* buffer Id
*/
rc = handle_map_shmem(count, &shmem, &buf_id);
if (rc) {
pr_err("map_shmem failed: ret = %d\n", rc);
kfree(shmnode);
return rc;
}
shmnode->kaddr = shm->kaddr;
shmnode->buf_id = buf_id;
ctxdata = shm->ctx->data;
mutex_lock(&ctxdata->shm_mutex);
list_add(&shmnode->shm_node, &ctxdata->shm_list);
mutex_unlock(&ctxdata->shm_mutex);
pr_debug("buf_id :[%x] kaddr[%p]\n", shmnode->buf_id, shmnode->kaddr);
return 0;
}