diff options
author | Pascal Brand <pascal.brand@st.com> | 2014-06-12 15:56:20 +0200 |
---|---|---|
committer | Pascal Brand <pascal.brand@st.com> | 2014-06-12 15:56:20 +0200 |
commit | b01047730e77127c23a36591643eeb8bb0487d68 (patch) | |
tree | c6460d72a0f05fb1b9655b3fb0b434ff8c7be053 /core/tee/tee_obj.c |
Open-source the TEE Core
Signed-off-by: Pascal Brand <pascal.brand@st.com>
Diffstat (limited to 'core/tee/tee_obj.c')
-rw-r--r-- | core/tee/tee_obj.c | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/core/tee/tee_obj.c b/core/tee/tee_obj.c new file mode 100644 index 00000000..7a381ca7 --- /dev/null +++ b/core/tee/tee_obj.c @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2014, STMicroelectronics International N.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include <tee/tee_obj.h> + +#include <stdlib.h> +#include <tee_api_defines.h> +#include <mm/tee_mmu.h> +#include <tee/tee_fs.h> +#include <tee/tee_pobj.h> + +void tee_obj_add(struct tee_ta_ctx *ctx, struct tee_obj *o) +{ + TAILQ_INSERT_TAIL(&ctx->objects, o, link); +} + +TEE_Result tee_obj_get(struct tee_ta_ctx *ctx, uint32_t obj_id, + struct tee_obj **obj) +{ + struct tee_obj *o; + + TAILQ_FOREACH(o, &ctx->objects, link) { + if (obj_id == (uint32_t) o) { + *obj = o; + return TEE_SUCCESS; + } + } + return TEE_ERROR_BAD_PARAMETERS; +} + +void tee_obj_close(struct tee_ta_ctx *ctx, struct tee_obj *o) +{ + TAILQ_REMOVE(&ctx->objects, o, link); + + if ((o->info.handleFlags & TEE_HANDLE_FLAG_PERSISTENT) && o->fd) { + tee_fs_close(o->fd); + tee_pobj_release(o->pobj); + } + + free(o->data); + free(o); +} + +void tee_obj_close_all(struct tee_ta_ctx *ctx) +{ + struct tee_obj_head *objects = &ctx->objects; + + while (!TAILQ_EMPTY(objects)) + tee_obj_close(ctx, TAILQ_FIRST(objects)); +} |