/**
 * @file   mst_secdrv.h
 * @brief  MST function definitions
 *
 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
 *
 * This software is proprietary of Samsung Electronics.
 * No part of this software, either material or conceptual may be copied
 * or distributed, transmitted, transcribed, stored in a retrieval system
 * or translated into any human or computer language in any form by any means,
 * electronic, mechanical, manual or otherwise, or disclosed to third parties
 * without the express written permission of Samsung Electronics.
 */


#include "drStd.h"
#include "DrApi/DrApiFastCall.h"
#include "DrApi/DrApiMcSystem.h"

/* MST dedicated headers */
#include "mst_secdrv.h"

#include "drLog.h"

uint32_t mst_transmit(char *mst_track_data, uint64_t mstPhysAddr)
{
	uint32_t ret = 0;
#if defined(CONFIG_MT6768)
	atfCallRegCtx_t regs;
#else
	uint32_t regs[4];
#endif

#if defined(CONFIG_MT6768)
	regs.r[0] = MTK_SIP_TEE_MST_TRANSMIT_AARCH32;
	regs.r[1] = 1;
	regs.r[2] = (mstPhysAddr & 0xFFFFFFFF00000000) >> 32;
	regs.r[3] = (mstPhysAddr & 0x00000000FFFFFFFF);

	drApiCallTrustedFirmware(&regs);
	ret = regs.r[0];
#else
	memset(regs, 0, sizeof(regs));
	regs[0] = MC_FC_MST_CONTROL;
	regs[1] = 1;
	regs[2] = (mstPhysAddr & 0xFFFFFFFF00000000) >> 32;
	regs[3] = (mstPhysAddr & 0x00000000FFFFFFFF);

	drApiFastCall(regs,sizeof(regs));
	ret = regs[0];
#endif
	if(ret == SMC_RET_OK){
		TTY_LOG("mst_transmit: Driver:: mst_transmit() done");
	}else{
		TTY_LOG("mst_transmit: Driver:: smc call failed: %ld", ret);
	}
	return ret;
}

