/*
  @file loadalgo.h
  @brief This file contains all the structures and defines used by loadalgo TA

*/
/*===========================================================================
  Copyright (c) 2019 by Qualcomm Technologies, Incorporated.  All Rights Reserved.
  ===========================================================================*/

/*===========================================================================

  EDIT HISTORY FOR FILE
  $Header:
  $DateTime:
  $Author: vikarthi

  # when       who     what, where, why
  # --------   ---     ---------------------------------------------------------
  # 05/14/19     vi      Initial version
  ===========================================================================*/

#ifndef LOADALGOTA_H
#define LOADALGOTA_H

#include <stdint.h>
#include "dsc_api.h"

#define NUM_VMIDS 2
#define NUM_ELEMS(x)    (sizeof(x) / sizeof((x)[0]))

#define FEATURE_ID 2
#define ANTI_ROLLBACK_VERSION 0

typedef struct send_cmd_struct {
    uint32_t  cmd_id;
    uint64_t  secureBuf;
    uint32_t  secureBufsize;
    uint32_t  type;
    uint64_t  nonSecureBuf;
    uint32_t  nonSecureBufsize;
}__attribute__ ((packed)) send_cmd_t;

enum commands {
    REGISTER_BUFFER = 0,
    DEREGISTER_BUFFER,
    DECRYPT_BUFFER,
    COPYNONSECURE_TO_SECURE,
	SEC_MATCH_RESULT,
	SEC_INPUT_BUFFER_INIT
};

/*
	buf_type_t:
	Buffer types registered in Secure channel
*/

typedef enum buffer_type {
    MODEL = 1,
    AUTH = 2,
    CAMERA = 3,
    ALGO = 4,
	HEAP = 5,
	POOL = 6,
	DATA = 7
} buf_type_t;

/*
	state_type_t:
	Different states of the secure channel between TA and CDSP
*/

typedef enum state_type {
    RESET = 0,
    INIT,
    LOADED,
    DONE,
    PASS,
    ERROR,
} state_type_t;

/*
    loadalgota_err_type:
    Error codes used by TA.	
*/
typedef enum loadalgota_err_type {
    LOADALGO_SUCCESS = 0,
    LOADALGO_INVALID_POINTER = -1,
    LOADALGO_NOT_SECURE_TAGGED = -2,
    LOADALGO_NOT_NONSECURE_RANGE = -3,
    LOADALGO_NO_VMLIST = -4,
    LOADALGO_INSUFFICIENT_LEN = -5,
    LOADALGO_INVALID_HANDLE = -6,
    LOADALGO_ALLOCFAILED = -7,
    LOADALGO_FAILURE = -8
} loadalgota_err_type_t;

typedef struct buffer_vmid_perms {
    buf_type_t buf_type;
    IAccessControl_vmidPermission vmid_perms[NUM_VMIDS];
    uint32_t num_vmid_perms;
} buffer_vmid_perms_t;

#endif
