blob: 74f93d0c4956a4fa21ea730e49cfc2deb045ec30 [file] [log] [blame] [edit]
/*
* 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 <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#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;
}