14483151eSLiam Girdwood /* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) */ 24483151eSLiam Girdwood /* 34483151eSLiam Girdwood * This file is provided under a dual BSD/GPLv2 license. When using or 44483151eSLiam Girdwood * redistributing this file, you may do so under either license. 54483151eSLiam Girdwood * 64483151eSLiam Girdwood * Copyright(c) 2018 Intel Corporation. All rights reserved. 74483151eSLiam Girdwood */ 84483151eSLiam Girdwood 94483151eSLiam Girdwood /* 104483151eSLiam Girdwood * Firmware file format . 114483151eSLiam Girdwood */ 124483151eSLiam Girdwood 134483151eSLiam Girdwood #ifndef __INCLUDE_UAPI_SOF_FW_H__ 144483151eSLiam Girdwood #define __INCLUDE_UAPI_SOF_FW_H__ 154483151eSLiam Girdwood 16*62ec3d13SMasahiro Yamada #include <linux/types.h> 17*62ec3d13SMasahiro Yamada 184483151eSLiam Girdwood #define SND_SOF_FW_SIG_SIZE 4 194483151eSLiam Girdwood #define SND_SOF_FW_ABI 1 204483151eSLiam Girdwood #define SND_SOF_FW_SIG "Reef" 214483151eSLiam Girdwood 224483151eSLiam Girdwood /* 234483151eSLiam Girdwood * Firmware module is made up of 1 . N blocks of different types. The 244483151eSLiam Girdwood * Block header is used to determine where and how block is to be copied in the 254483151eSLiam Girdwood * DSP/host memory space. 264483151eSLiam Girdwood */ 274483151eSLiam Girdwood enum snd_sof_fw_blk_type { 284483151eSLiam Girdwood SOF_FW_BLK_TYPE_INVALID = -1, 294483151eSLiam Girdwood SOF_FW_BLK_TYPE_START = 0, 304483151eSLiam Girdwood SOF_FW_BLK_TYPE_RSRVD0 = SOF_FW_BLK_TYPE_START, 314483151eSLiam Girdwood SOF_FW_BLK_TYPE_IRAM = 1, /* local instruction RAM */ 324483151eSLiam Girdwood SOF_FW_BLK_TYPE_DRAM = 2, /* local data RAM */ 334483151eSLiam Girdwood SOF_FW_BLK_TYPE_SRAM = 3, /* system RAM */ 344483151eSLiam Girdwood SOF_FW_BLK_TYPE_ROM = 4, 354483151eSLiam Girdwood SOF_FW_BLK_TYPE_IMR = 5, 364483151eSLiam Girdwood SOF_FW_BLK_TYPE_RSRVD6 = 6, 374483151eSLiam Girdwood SOF_FW_BLK_TYPE_RSRVD7 = 7, 384483151eSLiam Girdwood SOF_FW_BLK_TYPE_RSRVD8 = 8, 394483151eSLiam Girdwood SOF_FW_BLK_TYPE_RSRVD9 = 9, 404483151eSLiam Girdwood SOF_FW_BLK_TYPE_RSRVD10 = 10, 414483151eSLiam Girdwood SOF_FW_BLK_TYPE_RSRVD11 = 11, 424483151eSLiam Girdwood SOF_FW_BLK_TYPE_RSRVD12 = 12, 434483151eSLiam Girdwood SOF_FW_BLK_TYPE_RSRVD13 = 13, 444483151eSLiam Girdwood SOF_FW_BLK_TYPE_RSRVD14 = 14, 454483151eSLiam Girdwood /* use SOF_FW_BLK_TYPE_RSVRDX for new block types */ 464483151eSLiam Girdwood SOF_FW_BLK_TYPE_NUM 474483151eSLiam Girdwood }; 484483151eSLiam Girdwood 494483151eSLiam Girdwood struct snd_sof_blk_hdr { 504483151eSLiam Girdwood enum snd_sof_fw_blk_type type; 51*62ec3d13SMasahiro Yamada __u32 size; /* bytes minus this header */ 52*62ec3d13SMasahiro Yamada __u32 offset; /* offset from base */ 534483151eSLiam Girdwood } __packed; 544483151eSLiam Girdwood 554483151eSLiam Girdwood /* 564483151eSLiam Girdwood * Firmware file is made up of 1 .. N different modules types. The module 574483151eSLiam Girdwood * type is used to determine how to load and parse the module. 584483151eSLiam Girdwood */ 594483151eSLiam Girdwood enum snd_sof_fw_mod_type { 604483151eSLiam Girdwood SOF_FW_BASE = 0, /* base firmware image */ 614483151eSLiam Girdwood SOF_FW_MODULE = 1, /* firmware module */ 624483151eSLiam Girdwood }; 634483151eSLiam Girdwood 644483151eSLiam Girdwood struct snd_sof_mod_hdr { 654483151eSLiam Girdwood enum snd_sof_fw_mod_type type; 66*62ec3d13SMasahiro Yamada __u32 size; /* bytes minus this header */ 67*62ec3d13SMasahiro Yamada __u32 num_blocks; /* number of blocks */ 684483151eSLiam Girdwood } __packed; 694483151eSLiam Girdwood 704483151eSLiam Girdwood /* 714483151eSLiam Girdwood * Firmware file header. 724483151eSLiam Girdwood */ 734483151eSLiam Girdwood struct snd_sof_fw_header { 744483151eSLiam Girdwood unsigned char sig[SND_SOF_FW_SIG_SIZE]; /* "Reef" */ 75*62ec3d13SMasahiro Yamada __u32 file_size; /* size of file minus this header */ 76*62ec3d13SMasahiro Yamada __u32 num_modules; /* number of modules */ 77*62ec3d13SMasahiro Yamada __u32 abi; /* version of header format */ 784483151eSLiam Girdwood } __packed; 794483151eSLiam Girdwood 804483151eSLiam Girdwood #endif 81