/*
 * src/storage.h
 *
 * Copyright (C) 2013, Samsung Electronics Co., Ltd.
 *
 * TEE storage support
 */

#ifndef _STORAGE_H
#define _STORAGE_H

#include <tee_internal_api.h>

#define MAX_ATTRIBUTE_NUMBER 8

#ifndef max
#define max(a,b) (((a) > (b)) ? (a) : (b))
#endif
#ifndef min
#define min(a,b) (((a) < (b)) ? (a) : (b))
#endif

struct __TEE_Attributees
{
	int attr_number;
	TEE_Attribute attr_array[MAX_ATTRIBUTE_NUMBER];
	uint32_t buf_len;
	void * buffer;
};


struct TransientObject
{
	TEE_ObjectInfo info;
	struct __TEE_Attributees attr;
};

struct PersistentObject
{
	struct TransientObject tr_obj;
	int drv_hndl;
	uint32_t seq_no;
	uint8_t id[TEE_OBJECT_ID_MAX_LEN];
	uint32_t id_len;
};

struct __TEE_ObjectEnumHandle
{
	uint32_t data_len;
	uint32_t po_count;
	uint8_t *data_buffer;
	uint8_t *current_ptr;
};

struct __TEE_ObjectHandle
{
	struct TransientObject tr;
};

extern TEE_Result allocate_transient_object(struct TransientObject* tr,
                                            uint32_t objectType,
                                            uint32_t maxKeySize);

extern void free_transient_object(TEE_ObjectHandle object);

extern void close_persistent_object(struct PersistentObject *po);

#endif /* _STORAGE_H */
