/*!
 * \file    spay_init_msg.h
 * \brief   header file for the payload msg structure
 * \author  Shyam Prasad
 * \date    11/15/2013
 *
 * <hr>
 * \section LICENSE
 * Copyright Samsung Electronics, Co. Ltd. B2B TIMA team. 2013 04
 * <hr>
 */
#ifndef TZ_SPAY_INIT_MSG_H_
#define TZ_SPAY_INIT_MSG_H_

#include "stdint.h"
#include "tz_msg.h"
#include "ta_log.h"
#include "TZ_Vendor_Tui_common_tl.h"

#define CMD_SPAY_INIT                          0x7FFFFFF1

#define TZ_SPAY_TIMA_MSR_MAX_SIZE		1024
#define TZ_SPAY_MAX_ERROR_STR_LEN		TA_MAX_ERROR_STR_LEN

#define TZ_SPAY_INIT_OK                        0x00000000
#define TZ_SPAY_INIT_ERROR                     0x0001000A
#define TZ_SPAY_INIT_UNINITIALIZED_SECURE_MEM  0x0001000B
#define TZ_SPAY_INIT_ERROR_TAMPER_FUSE_FAIL    0x0001000C
#define TZ_SPAY_INIT_MSR_MISMATCH              0x0001000D
#define TZ_SPAY_INIT_MSR_MODIFIED              0x0001000E
#define TZ_SPAY_INIT_ICCC_OPERATION_FAILED     0x0001000F
#define TZ_SPAY_INIT_INTEGRITY_CHECK_FAILED    0x00010010

PACK(
typedef struct {
    uint32_t len;
    uint8_t blob[TZ_SPAY_TIMA_MSR_MAX_SIZE];
}) secure_boot_measurement_t;

PACK(
typedef struct tz_spay_init_msg_cmd {
    secure_boot_measurement_t measurement;
} ) tz_spay_init_msg_cmd_t;

PACK(
typedef struct tz_spay_init_msg_resp {
    uint32_t return_code;
	PACK(
    struct {
    	uint32_t len;
	uint8_t data[TZ_SPAY_MAX_ERROR_STR_LEN];
    } ) error_msg;
} ) tz_spay_init_msg_resp_t;

PACK(
typedef struct tz_spay_init_msg_payload {
	PACK(
    union {
        tz_spay_init_msg_cmd_t cmd;
        tz_spay_init_msg_resp_t resp;
    } ) payload;
} ) tz_spay_init_msg_payload_t;

#endif /* TZ_SPAY_INIT_MSG_H_ */
