linux/include/uapi/sound/sof/fw.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) */
   2/*
   3 * This file is provided under a dual BSD/GPLv2 license.  When using or
   4 * redistributing this file, you may do so under either license.
   5 *
   6 * Copyright(c) 2018 Intel Corporation. All rights reserved.
   7 */
   8
   9/*
  10 * Firmware file format .
  11 */
  12
  13#ifndef __INCLUDE_UAPI_SOF_FW_H__
  14#define __INCLUDE_UAPI_SOF_FW_H__
  15
  16#include <linux/types.h>
  17
  18#define SND_SOF_FW_SIG_SIZE     4
  19#define SND_SOF_FW_ABI          1
  20#define SND_SOF_FW_SIG          "Reef"
  21
  22/*
  23 * Firmware module is made up of 1 . N blocks of different types. The
  24 * Block header is used to determine where and how block is to be copied in the
  25 * DSP/host memory space.
  26 */
  27enum snd_sof_fw_blk_type {
  28        SOF_FW_BLK_TYPE_INVALID = -1,
  29        SOF_FW_BLK_TYPE_START   = 0,
  30        SOF_FW_BLK_TYPE_RSRVD0  = SOF_FW_BLK_TYPE_START,
  31        SOF_FW_BLK_TYPE_IRAM    = 1,    /* local instruction RAM */
  32        SOF_FW_BLK_TYPE_DRAM    = 2,    /* local data RAM */
  33        SOF_FW_BLK_TYPE_SRAM    = 3,    /* system RAM */
  34        SOF_FW_BLK_TYPE_ROM     = 4,
  35        SOF_FW_BLK_TYPE_IMR     = 5,
  36        SOF_FW_BLK_TYPE_RSRVD6  = 6,
  37        SOF_FW_BLK_TYPE_RSRVD7  = 7,
  38        SOF_FW_BLK_TYPE_RSRVD8  = 8,
  39        SOF_FW_BLK_TYPE_RSRVD9  = 9,
  40        SOF_FW_BLK_TYPE_RSRVD10 = 10,
  41        SOF_FW_BLK_TYPE_RSRVD11 = 11,
  42        SOF_FW_BLK_TYPE_RSRVD12 = 12,
  43        SOF_FW_BLK_TYPE_RSRVD13 = 13,
  44        SOF_FW_BLK_TYPE_RSRVD14 = 14,
  45        /* use SOF_FW_BLK_TYPE_RSVRDX for new block types */
  46        SOF_FW_BLK_TYPE_NUM
  47};
  48
  49struct snd_sof_blk_hdr {
  50        enum snd_sof_fw_blk_type type;
  51        __u32 size;             /* bytes minus this header */
  52        __u32 offset;           /* offset from base */
  53} __packed;
  54
  55/*
  56 * Firmware file is made up of 1 .. N different modules types. The module
  57 * type is used to determine how to load and parse the module.
  58 */
  59enum snd_sof_fw_mod_type {
  60        SOF_FW_BASE     = 0,    /* base firmware image */
  61        SOF_FW_MODULE   = 1,    /* firmware module */
  62};
  63
  64struct snd_sof_mod_hdr {
  65        enum snd_sof_fw_mod_type type;
  66        __u32 size;             /* bytes minus this header */
  67        __u32 num_blocks;       /* number of blocks */
  68} __packed;
  69
  70/*
  71 * Firmware file header.
  72 */
  73struct snd_sof_fw_header {
  74        unsigned char sig[SND_SOF_FW_SIG_SIZE]; /* "Reef" */
  75        __u32 file_size;        /* size of file minus this header */
  76        __u32 num_modules;      /* number of modules */
  77        __u32 abi;              /* version of header format */
  78} __packed;
  79
  80#endif
  81