162306a36Sopenharmony_ci/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * This file is provided under a dual BSD/GPLv2 license. When using or 462306a36Sopenharmony_ci * redistributing this file, you may do so under either license. 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * Copyright(c) 2018 Intel Corporation. All rights reserved. 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci/* 1062306a36Sopenharmony_ci * Firmware file format . 1162306a36Sopenharmony_ci */ 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#ifndef __INCLUDE_UAPI_SOF_FW_H__ 1462306a36Sopenharmony_ci#define __INCLUDE_UAPI_SOF_FW_H__ 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci#include <linux/types.h> 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci#define SND_SOF_FW_SIG_SIZE 4 1962306a36Sopenharmony_ci#define SND_SOF_FW_ABI 1 2062306a36Sopenharmony_ci#define SND_SOF_FW_SIG "Reef" 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci/* 2362306a36Sopenharmony_ci * Firmware module is made up of 1 . N blocks of different types. The 2462306a36Sopenharmony_ci * Block header is used to determine where and how block is to be copied in the 2562306a36Sopenharmony_ci * DSP/host memory space. 2662306a36Sopenharmony_ci */ 2762306a36Sopenharmony_cienum snd_sof_fw_blk_type { 2862306a36Sopenharmony_ci SOF_FW_BLK_TYPE_INVALID = -1, 2962306a36Sopenharmony_ci SOF_FW_BLK_TYPE_START = 0, 3062306a36Sopenharmony_ci SOF_FW_BLK_TYPE_RSRVD0 = SOF_FW_BLK_TYPE_START, 3162306a36Sopenharmony_ci SOF_FW_BLK_TYPE_IRAM = 1, /* local instruction RAM */ 3262306a36Sopenharmony_ci SOF_FW_BLK_TYPE_DRAM = 2, /* local data RAM */ 3362306a36Sopenharmony_ci SOF_FW_BLK_TYPE_SRAM = 3, /* system RAM */ 3462306a36Sopenharmony_ci SOF_FW_BLK_TYPE_ROM = 4, 3562306a36Sopenharmony_ci SOF_FW_BLK_TYPE_IMR = 5, 3662306a36Sopenharmony_ci SOF_FW_BLK_TYPE_RSRVD6 = 6, 3762306a36Sopenharmony_ci SOF_FW_BLK_TYPE_RSRVD7 = 7, 3862306a36Sopenharmony_ci SOF_FW_BLK_TYPE_RSRVD8 = 8, 3962306a36Sopenharmony_ci SOF_FW_BLK_TYPE_RSRVD9 = 9, 4062306a36Sopenharmony_ci SOF_FW_BLK_TYPE_RSRVD10 = 10, 4162306a36Sopenharmony_ci SOF_FW_BLK_TYPE_RSRVD11 = 11, 4262306a36Sopenharmony_ci SOF_FW_BLK_TYPE_RSRVD12 = 12, 4362306a36Sopenharmony_ci SOF_FW_BLK_TYPE_RSRVD13 = 13, 4462306a36Sopenharmony_ci SOF_FW_BLK_TYPE_RSRVD14 = 14, 4562306a36Sopenharmony_ci /* use SOF_FW_BLK_TYPE_RSVRDX for new block types */ 4662306a36Sopenharmony_ci SOF_FW_BLK_TYPE_NUM 4762306a36Sopenharmony_ci}; 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_cistruct snd_sof_blk_hdr { 5062306a36Sopenharmony_ci enum snd_sof_fw_blk_type type; 5162306a36Sopenharmony_ci __u32 size; /* bytes minus this header */ 5262306a36Sopenharmony_ci __u32 offset; /* offset from base */ 5362306a36Sopenharmony_ci} __packed; 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci/* 5662306a36Sopenharmony_ci * Firmware file is made up of 1 .. N different modules types. The module 5762306a36Sopenharmony_ci * type is used to determine how to load and parse the module. 5862306a36Sopenharmony_ci */ 5962306a36Sopenharmony_cienum snd_sof_fw_mod_type { 6062306a36Sopenharmony_ci SOF_FW_BASE = 0, /* base firmware image */ 6162306a36Sopenharmony_ci SOF_FW_MODULE = 1, /* firmware module */ 6262306a36Sopenharmony_ci}; 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_cistruct snd_sof_mod_hdr { 6562306a36Sopenharmony_ci enum snd_sof_fw_mod_type type; 6662306a36Sopenharmony_ci __u32 size; /* bytes minus this header */ 6762306a36Sopenharmony_ci __u32 num_blocks; /* number of blocks */ 6862306a36Sopenharmony_ci} __packed; 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci/* 7162306a36Sopenharmony_ci * Firmware file header. 7262306a36Sopenharmony_ci */ 7362306a36Sopenharmony_cistruct snd_sof_fw_header { 7462306a36Sopenharmony_ci unsigned char sig[SND_SOF_FW_SIG_SIZE]; /* "Reef" */ 7562306a36Sopenharmony_ci __u32 file_size; /* size of file minus this header */ 7662306a36Sopenharmony_ci __u32 num_modules; /* number of modules */ 7762306a36Sopenharmony_ci __u32 abi; /* version of header format */ 7862306a36Sopenharmony_ci} __packed; 7962306a36Sopenharmony_ci 8062306a36Sopenharmony_ci#endif 81