/* * Copyright (c) 2019 Amlogic, Inc. All rights reserved. * * This source code is subject to the terms and conditions defined in the * file 'LICENSE' which is part of this source code package. * * Description: */ #include #include #include #include "secmem.h" #include "secmem_ca.h" static void* sec_sess; int secmem_init() { unsigned int ret; ret = Secure_V2_SessionCreate(&sec_sess); if (ret) { printf("Secure_V2_SessionCreate fail %x\n", ret); return -1; } ret = Secure_V2_Init(sec_sess, 1, 1, 0, 0); if (ret) { Secure_V2_SessionDestroy(sec_sess); printf("Secure_V2_Init fail %x\n", ret); return -1; } return 0; } void secmem_destroy() { if (sec_sess) Secure_V2_SessionDestroy(&sec_sess); sec_sess = NULL; } struct secmem* secmem_alloc(uint32_t size) { struct secmem* mem = calloc(1, sizeof(*mem)); if (mem) { unsigned int ret; uint32_t maxsize; ret = Secure_V2_MemCreate(sec_sess, &mem->handle); if (ret) { printf("Secure_V2_MemCreate fail %x\n", ret); goto error; } ret = Secure_V2_MemAlloc(sec_sess, mem->handle, size, &mem->phyaddr); if (ret) { printf("Secure_V2_MemAlloc failed %x\n",ret); goto error2; } ret = Secure_V2_MemExport(sec_sess, mem->handle, &mem->fd, &maxsize); if (ret) { printf("Secure_V2_MemExport failed %x\n",ret); goto error3; } } return mem; error3: Secure_V2_MemFree(sec_sess, mem->handle); error2: Secure_V2_MemRelease(sec_sess, mem->handle); error: free(mem); return NULL; } void secmem_free(struct secmem * mem) { unsigned int ret; close(mem->fd); ret = Secure_V2_MemFree(sec_sess, mem->handle); if (ret) printf("Secure_V2_MemFree fail %x\n", ret); ret = Secure_V2_MemRelease(sec_sess, mem->handle); if (ret) printf("Secure_V2_MemRelease fail %x\n", ret); free(mem); } int secmem_fill(struct secmem* mem, uint8_t* buf, uint32_t offset, uint32_t size) { unsigned int ret = 0; ret = Secure_V2_MemFill(sec_sess, mem->handle, offset, buf, size); if (ret) { printf("Secure_V2_MemFill fail %x\n", ret); return -1; } return ret; }