/**
 * @file   error.h
 * @brief  Error lists for secure driver
 *
 * Copyright (c) 2015 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.
 */

#ifndef __SECDRV_ERROR_H__
#define __SECDRV_ERROR_H__

enum secDrvResult_t {
	SECDRV_OK				= 0x00000,
	/* Error lists for common driver */
	E_SECDRV_NOT_MAPPED			= 0x10001,
	E_SECDRV_CHUNK_NUMBER_MATCH		= 0x10002,
	E_SECDRV_WRONG_REGION_NAME		= 0x10003,
	E_SECDRV_VIRTUAL_ADDRESS_MAPPING	= 0x10004,
	E_SECDRV_MFC_FW_DATA			= 0x10005,
	E_SECDRV_INVALID_ADDR_ALIGN		= 0x10006,
	E_SECDRV_INVALID_SIZE_ALIGN		= 0x10007,
	E_SECDRV_INVALID_MEMCPY_LENGTH		= 0x10008,
	E_SECDRV_ADDR_OUT_OF_DRAM		= 0x10009,
	E_SECDRV_ADDR_OUT_OF_SECMEM		= 0x1000A,
	E_SECDRV_ADDR_VIRT2PHYS			= 0x1000B,
	E_SECDRV_INVALID_ADDR			= 0x1000C,
	E_SECDRV_INVALID_OEM_FLAG_ADDR		= 0x1000D,
	E_SECDRV_INVALID_CMD			= 0x1000E,

	/* Error lists for sss driver */
	E_SECDRV_SSS_IN_ADDR_CHECK		= 0x20002,
	E_SECDRV_SSS_OUT_ADDR_CHECK		= 0x20003,
	E_SECDRV_SSS_AES_BUSY			= 0x20004,
	E_SECDRV_SSS_AES_INVALID_MODE		= 0x20005,
	E_SECDRV_SSS_INVALID_CIPHER_MODE	= 0x20006,
	E_SECDRV_SSS_INVALID_KEY_LENGTH		= 0x20007,
	E_SECDRV_SSS_ADDR_OUT_OF_DRAM		= 0x20008,
	E_SECDRV_SSS_ADDR_OUT_OF_SECMEM		= 0x20009,
	E_SECDRV_SSS_AES_CTR_BLOCK		= 0x2000A,
	E_SECDRV_SSS_START_THREAD		= 0x2000B,
	E_SECDRV_SSS_STOP_THREAD		= 0x2000C,
	E_SECDRV_SSS_INVALID_FLAG		= 0x2000D,

	/* Error lists for sysmmu driver */
	E_SECDRV_SMMU_INVALID_LV1_PGBASE	= 0x30001,
	E_SECDRV_SMMU_INVALID_LV2_PGBASE	= 0x30002,
	E_SECDRV_SMMU_INVALID_SIZE		= 0x30003,
	E_SECDRV_SMMU_INVALID_LIMIT		= 0x30004,
	E_SECDRV_SMMU_BAD_MAP			= 0x30005,
	E_SECDRV_SMMU_INVALID_ADDR		= 0x30006,
	E_SECDRV_SMMU_INVALID_PG_TYPE		= 0x30007,

	/* Error lists for TZASC driver */
	E_SECDRV_TZASC_ALIGN_CHECK		= 0x40001,
	E_SECDRV_TZASC_CONTIG_CHECK		= 0x40002,
	E_SECDRV_TZASC_GET_ORDER		= 0x40003,
	E_SECDRV_TZASC_INVALID_INDEX		= 0x40004,
	E_SECDRV_TZASC_INVALID_ENABLED		= 0x40005,
	E_SECDRV_TZASC_NOT_PROTECTED		= 0x40006,

	/* Erorr lists for media driver */
	E_SECDRV_MEDIA_CHECK_POWER		= 0x50001,
	E_SECDRV_MEDIA_CHECK_CLOCK		= 0x50002,
	E_SECDRV_MEDIA_CHECK_SMMU_CLOCK		= 0x50003,
	E_SECDRV_MEDIA_CHECK_SMMU_ENABLED	= 0x50004,
	E_SECDRV_WB_CHECK_FAILED		= 0x50005,
	E_SECDRV_HDMI_WITH_NO_HDCP_FAILED	= 0x50006,
	E_SECDRV_MSCL_LOCAL_PATH_FAILED		= 0x50007,
	E_SECDRV_HDMI_POWER_OFF			= 0x50008,
	E_SECDRV_HDMI_CLOCK_OFF			= 0x50009,
	E_SECDRV_INVALID_REFCOUNT		= 0x5000A,

	/* Error lists for g2d driver */
	E_SECDRV_G2D_INVALID_PARAM		= 0x60001,
	E_SECDRV_G2D_BLIT_TIMEOUT		= 0x60002,

	/* Error lists for RTC driver */
	E_SECDRV_GET_RTC_TIME			= 0x70001,
	E_SECDRV_SET_RTC_TIME			= 0x70002,
	E_SECDRV_GET_RTC_TICK_TIME		= 0x70003,
	E_SECDRV_SET_RTC_TICK_TIME		= 0x70004,

	E_SECDRV_SFW_ERROR			= 0x80001,
};

/* Error list for SW crypto driver */
enum swCryptoResult_t {
	SW_CRYPTO_OK				= 0x00000,
	E_SW_CRYPTO_INVALID_OFFSET		= 0x60001,
	E_SW_CRYPTO_INVALID_LENGTH		= 0x60002,
	E_SW_CRYPTO_INVAILD_IV_LEN		= 0x60003,
	E_SW_CRYPTO_INVAILD_KEY_LEN		= 0x60004,
	E_SW_CRYPTO_INVAILD_DATA		= 0x60005,
	E_SW_CRYPTO_AES_SET_ALGO		= 0x60006,
	E_SW_CRYPTO_AES_ECB_INIT		= 0x60007,
	E_SW_CRYPTO_AES_ECB_UPDATE		= 0x60008,
	E_SW_CRYPTO_AES_ECB_FINAL		= 0x60009,
	E_SW_CRYPTO_AES_CBC_INIT		= 0x6000A,
	E_SW_CRYPTO_AES_CBC_UPDATE		= 0x6000B,
	E_SW_CRYPTO_AES_CBC_FINAL		= 0x6000C,
	E_SW_CRYPTO_AES_CTR			= 0x6000D,
	E_SW_CRYPTO_ENCRYPT			= 0x6000E,
	E_SW_CRYPTO_DECRYPT			= 0x6000F,
};

/* Error list for CP inteface */
enum secDrvCpResult_t {
	E_CP_NO_ERROR				= 0x0,
	E_CP_NOT_ALIGN_64KB			= 0x1,
	E_CP_MEM_TOO_BIG			= 0x2,
	E_CP_FLAG_OUT_RANGE			= 0x3,
	E_CP_WRONG_TZASC_REGION_NUM		= 0x4,
	E_CP_WRONG_BL_SIZE			= 0x5,
	E_CP_MEM_OUT_OF_RANGE			= 0x6,
	E_CP_NOT_ALIGN_16B			= 0x7,
	E_CP_NOT_WORKING			= 0x8,
};

/* Error list for SecureBoot */
enum secBootResult_t {
	E_NO_ERROR				= 0x0,
	E_MAPPING_ERROR				= 0xFEED00,
	E_BOOT_SIGNATURE_CHECK_FAIL		= 0xFEED02,
	E_MAIN_SIGNATURE_CHECK_FAIL		= 0xFEED04,
	E_ANTI_ROLLBACK_CHECK_FAIL		= 0xFEED20,
};

#if defined(CONFIG_SRPMB)
/* Error list for SRPMB */
enum RpmbResult_t {
	SRPMB_OK				= 0x0,
	E_RPMB_DRV_MEM_INPUT_LENGTH_TOO_BIG	= 0x1001,
	E_RPMB_INVALID_IPC_PARAM		= 0x1002,
	E_RPMB_TRANSLATE_INPUT_FAIL		= 0x1003,
	E_RPMB_TRANSLATE_OUTPUT_FAIL		= 0x1004,
	E_RPMB_ADDR_V2P_INPUT_FAIL		= 0x1005,
	E_RPMB_CACHE_CLEAN_INPUT_FAIL		= 0x1006,
	E_RPMB_CACHE_CLEAN_INVALIDATE_OUTPUT_FAIL = 0x1007,
};
#endif

#endif /* __SECDRV_ERROR_H__ */

/** @} */
