/*
 * Copyright (c) 2017, Intel Corporation.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms and conditions of the GNU General Public License,
 * version 2, as published by the Free Software Foundation.
 *
 * This program is distributed in the hope it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 */

#include "css.h"
#include "cse.h"
#include "plat_auth.h"
#include "manifest.h"
#include <config.h>
#include <version.h>

/* manifest template */
struct fw_image_manifest cnl_manifest = {

	.cse_partition_dir_header = {
		.header_marker = CSE_HEADER_MAKER,
		.nb_entries = MAN_CSE_PARTS,
		.header_version = 1,
		.entry_version = 1,
		.header_length = sizeof(struct CsePartitionDirHeader),
		.partition_name = "ADSP",
	},

	.cse_partition_dir_entry = {
		{
			/* CssHeader + platformFirmwareAuthenticationExtension - padding */
			.entry_name = "ADSP.man",
			.offset = MAN_CSS_HDR_OFFSET,
			.length = sizeof(struct css_header) +
				PLAT_AUTH_SIZE,
		},
		{	/* ADSPMetadataFileExtension */
			.entry_name = "cavs0015.met",
			.offset = MAN_META_EXT_OFFSET,
			.length = sizeof(struct sof_man_adsp_meta_file_ext),
		},
		{	/* AdspFwBinaryDesc */
			.entry_name = "cavs0015",
			.offset = MAN_FW_DESC_OFFSET,
			.length = 0,	/* calculated by rimage - */
		},

	},

	.css = {
		.header_type	= MAN_CSS_MOD_TYPE,
		.header_len	= MAN_CSS_HDR_SIZE,
		.header_version	= MAN_CSS_HDR_VERSION,
		.module_vendor	= MAN_CSS_MOD_VENDOR,
		.size		= 222,
		.header_id	= MAN_CSS_HDR_ID,
		.padding	= 0,
		.version = {
			.major_version	= SOF_MAJOR,
			.minor_version	= SOF_MINOR,
			.hotfix_version = 0,
			.build_version	= SOF_BUILD,
		},
		.modulus_size	= MAN_CSS_MOD_SIZE,
		.exponent_size	= MAN_CSS_EXP_SIZE,
	},

	.signed_pkg = {
		.ext_type	= SIGN_PKG_EXT_TYPE,
		.ext_len	= sizeof(struct signed_pkg_info_ext),
		.name		= "ADSP",
		.vcn		= 0,
		.bitmap		= {0, 0, 0, 0, 8},

		.module[0]	= {
			.name		= "cavs0015.met",
			.meta_size	= 96,
			.type		= 0x03,
			.hash_algo	= 0x02, /* SHA 256 */
			.hash_size	= 0x20,
		},
	},

	.partition_info = {

		.ext_type	= PART_INFO_EXT_TYPE,
		.ext_len	= sizeof(struct partition_info_ext),

		.name		= "ADSP",
		.length		= 0,	/* calculated by rimage - rounded up to nearest PAGE */
		.part_version	= 0x10000000,
		.instance_id	= 1,
		.reserved[0 ... 19]	= 0xff,

		.module[0]	= {
			.name		= "cavs0015.met",
			.meta_size	= 96,
			.type		= 0x03,
			.reserved	= {0x00, 0xff, 0xff},
		},

	},

	.cse_padding[0 ... 47]	= 0xff,

	.adsp_file_ext = {
		.ext_type = 17,
		.ext_len	= sizeof(struct sof_man_adsp_meta_file_ext),
		.imr_type = 3,
		.comp_desc[0] = {
			.version = 0,
			.base_offset = MAN_DESC_OFFSET,
			.limit_offset = 0, /* calculated length + MAN_DESC_OFFSET */
		},

	},

	.reserved[0 ... 31]	= 0xff,

	.desc = {
		.header = {
			.header_id	= SOF_MAN_FW_HDR_ID,
			.header_len	= sizeof(struct sof_man_fw_header),
			.name		= SOF_MAN_FW_HDR_NAME,
			.preload_page_count	= 0,	/* size in pages from $CPD */
			.fw_image_flags	= SOF_MAN_FW_HDR_FLAGS,
			.feature_mask	= SOF_MAN_FW_HDR_FEATURES,
			.major_version	= SOF_MAJOR,
			.minor_version	= SOF_MINOR,
			.hotfix_version	= 0,
			.build_version	= SOF_BUILD,
			.load_offset	= 0x30000,
		},
	},
};
