#include "tlStd.h"
#include "TlApi/TlApiCommon.h"
#include "TlApiDrTimaCommon.h"
#include "TlApiMarshalDrTima.h"
#include "TlApiDriver.h"
//#include "dbg.h"
#include "TlApiDrTima.h"
#include "log.h"
//#include "dashboard.h"
//#include "mst_secdrv.h"

char g_log_msg[LOG_MSG_SIZE];

/**
 * Tima Driver Physical Memory To TL Copy
 *
 * phys2TLData: pointer for physical and TL addresses and data length
 *
 * @return : tlApiResult_t
 *	@TLAPI_OK : physical memory is accessed digest is generated and passed to TL
 */
_TLAPI_EXTERN_C tlApiResult_t tlApiTimaDriverPhysMemAccess(
	struct physMemAccessData_t *physMemAccessData
)
{
	tlApiResult_t ret;
	TimaMarshalingParam_t marParam = {
		.functionId = TIMA_DRIVER_PHYS_MEM_ACCESS_COPY,
		.payload = {
			    .pPhysMemAccessData = physMemAccessData}
	};

#if TBASE_API_LEVEL >= 8
	tlApi_callDriverEx(TIMA_DRV_ID, &marParam, sizeof(marParam));
#else
	tlApi_callDriver(TIMA_DRV_ID, &marParam);
#endif
	ret = marParam.payload.retVal;
	return ret;
}

/**
 * Tima Driver Generate Digest
 *
 * @digestData: pointer for data, data length, and digest buffer address
 *
 * @return : tlApiResult_t
 *	@TLAPI_OK : physical memory is accessed digest is generated and passed to TL
 */
_TLAPI_EXTERN_C tlApiResult_t tlApiTimaDriverGenerateDigest(
	struct digestData_t * digestData
)
{
	tlApiResult_t ret;
	TimaMarshalingParam_t marParam = {
		.functionId = TIMA_DRIVER_GENERATE_DIGEST,
		.payload = {
			    .pDigestData = digestData}
	};

#if TBASE_API_LEVEL >= 8
	tlApi_callDriverEx(TIMA_DRV_ID, &marParam, sizeof(marParam));
#else
	tlApi_callDriver(TIMA_DRV_ID, &marParam);
#endif
	ret = marParam.payload.retVal;
	return ret;
}

_TLAPI_EXTERN_C tlApiResult_t tlApiTimaDriverLogDbgMsg(
	char *msg
)
{
	TimaMarshalingParam_t marParam = {
		.functionId = TIMA_DRIVER_DBG_LOG,
	};
	strncpy(marParam.payload.log_msg, msg, LOG_MSG_SIZE);
#if TBASE_API_LEVEL >= 8
	tlApi_callDriverEx(TIMA_DRV_ID, &marParam, sizeof(marParam));
#else
	tlApi_callDriver(TIMA_DRV_ID, &marParam);
#endif
	return TLAPI_OK;
}

/*
_TLAPI_EXTERN_C tlApiResult_t tlApiTimaDriverLogSecMsg(
	sec_entry_t type
)
{
	TimaMarshalingParam_t marParam = {
		.functionId = TIMA_DRIVER_SEC_LOG,
	};
	marParam.payload.dashboard_entry_type = type;
#if TBASE_API_LEVEL >= 8
	tlApi_callDriverEx(TIMA_DRV_ID, &marParam, sizeof(marParam));
#else
	tlApi_callDriver(TIMA_DRV_ID, &marParam);
#endif
	return TLAPI_OK;
}


_TLAPI_EXTERN_C tlApiResult_t tlApiTimaDriverMST(
	char *input
)
{
	TimaMarshalingParam_t marParam = {
		.functionId = TIMA_DRIVER_MST,
	};
	memcpy(marParam.payload.mst_track_data, input,TRACK_DATA_SIZE
);
#if TBASE_API_LEVEL >= 8
	tlApi_callDriverEx(TIMA_DRV_ID, &marParam, sizeof(marParam));
#else
	tlApi_callDriver(TIMA_DRV_ID, &marParam);
#endif
	return TLAPI_OK;
}
*/

_TLAPI_EXTERN_C tlApiResult_t tlApiTimaDriverSecureBootStatus(
)
{
	tlApiResult_t ret;
	TimaMarshalingParam_t marParam = {
		.functionId = TIMA_DRIVER_GET_SECURE_BOOT_STATUS,
	};
#if TBASE_API_LEVEL >= 8
	tlApi_callDriverEx(TIMA_DRV_ID, &marParam, sizeof(marParam));
#else
	tlApi_callDriver(TIMA_DRV_ID, &marParam);
#endif
	ret = marParam.payload.retVal;
	return ret;
}

_TLAPI_EXTERN_C tlApiResult_t tlApiTimaDriverSCrypto(
	struct scrypto_t * pSCrypto
)
{
	tlApiResult_t ret;
	TimaMarshalingParam_t marParam = {
		.functionId = TIMA_DRIVER_SCRYPTO,
		.payload = {
			    .pSCrypto = pSCrypto}
	};

#if TBASE_API_LEVEL >= 8
	tlApi_callDriverEx(TIMA_DRV_ID, &marParam, sizeof(marParam));
#else
	tlApi_callDriver(TIMA_DRV_ID, &marParam);
#endif
	ret = marParam.payload.retVal;
	return ret;
}

_TLAPI_EXTERN_C tlApiResult_t tlApiTimaDriverWhitelist(
	struct update_whitelist_t * wl
)
{
	tlApiResult_t ret;
	TimaMarshalingParam_t marParam = {
		.functionId = TIMA_DRIVER_WHITELIST,
		.payload = {
			    .wl = wl}
	};

#if TBASE_API_LEVEL >= 8
	tlApi_callDriverEx(TIMA_DRV_ID, &marParam, sizeof(marParam));
#else
	tlApi_callDriver(TIMA_DRV_ID, &marParam);
#endif
	ret = marParam.payload.retVal;
	return ret;
}

_TLAPI_EXTERN_C tlApiResult_t tlApiTimaDriverSetHdmPolicy(
	struct set_hdm_policy_t * policy
)
{
	tlApiResult_t ret;
	TimaMarshalingParam_t marParam = {
		.functionId = TIMA_DRIVER_SET_HDM_POLICY,
		.payload = {
			    .policy = policy}
	};

#if TBASE_API_LEVEL >= 8
	tlApi_callDriverEx(TIMA_DRV_ID, &marParam, sizeof(marParam));
#else
	tlApi_callDriver(TIMA_DRV_ID, &marParam);
#endif
	ret = marParam.payload.retVal;
	return ret;
}
/** @} */
