145 lines · c
1/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */2/*3 * This file is provided under a dual BSD/GPLv2 license. When using or4 * redistributing this file, you may do so under either license.5 *6 * Copyright(c) 2018 Intel Corporation7 */8 9#ifndef __INCLUDE_SOUND_SOF_INFO_H__10#define __INCLUDE_SOUND_SOF_INFO_H__11 12#include <sound/sof/header.h>13#include <sound/sof/stream.h>14 15/*16 * Firmware boot and version17 */18 19#define SOF_IPC_MAX_ELEMS 1620 21/*22 * Firmware boot info flag bits (64-bit)23 */24#define SOF_IPC_INFO_BUILD BIT(0)25#define SOF_IPC_INFO_LOCKS BIT(1)26#define SOF_IPC_INFO_LOCKSV BIT(2)27#define SOF_IPC_INFO_GDB BIT(3)28#define SOF_IPC_INFO_D3_PERSISTENT BIT(4)29 30/* extended data types that can be appended onto end of sof_ipc_fw_ready */31enum sof_ipc_ext_data {32 SOF_IPC_EXT_UNUSED = 0,33 SOF_IPC_EXT_WINDOW = 1,34 SOF_IPC_EXT_CC_INFO = 2,35 SOF_IPC_EXT_PROBE_INFO = 3,36 SOF_IPC_EXT_USER_ABI_INFO = 4,37};38 39/* Build u32 number in format MMmmmppp */40#define SOF_FW_VER(MAJOR, MINOR, PATCH) ((uint32_t)( \41 ((MAJOR) << 24) | ((MINOR) << 12) | (PATCH)))42 43/* FW version - SOF_IPC_GLB_VERSION */44struct sof_ipc_fw_version {45 struct sof_ipc_hdr hdr;46 uint16_t major;47 uint16_t minor;48 uint16_t micro;49 uint16_t build;50 uint8_t date[12];51 uint8_t time[10];52 uint8_t tag[6];53 uint32_t abi_version;54 /* used to check FW and ldc file compatibility, reproducible value */55 uint32_t src_hash;56 57 /* reserved for future use */58 uint32_t reserved[3];59} __packed;60 61/* FW ready Message - sent by firmware when boot has completed */62struct sof_ipc_fw_ready {63 struct sof_ipc_cmd_hdr hdr;64 uint32_t dspbox_offset; /* dsp initiated IPC mailbox */65 uint32_t hostbox_offset; /* host initiated IPC mailbox */66 uint32_t dspbox_size;67 uint32_t hostbox_size;68 struct sof_ipc_fw_version version;69 70 /* Miscellaneous flags */71 uint64_t flags;72 73 /* reserved for future use */74 uint32_t reserved[4];75} __packed;76 77/*78 * Extended Firmware data. All optional, depends on platform/arch.79 */80enum sof_ipc_region {81 SOF_IPC_REGION_DOWNBOX = 0,82 SOF_IPC_REGION_UPBOX,83 SOF_IPC_REGION_TRACE,84 SOF_IPC_REGION_DEBUG,85 SOF_IPC_REGION_STREAM,86 SOF_IPC_REGION_REGS,87 SOF_IPC_REGION_EXCEPTION,88};89 90struct sof_ipc_ext_data_hdr {91 struct sof_ipc_cmd_hdr hdr;92 uint32_t type; /**< SOF_IPC_EXT_ */93} __packed;94 95struct sof_ipc_window_elem {96 struct sof_ipc_hdr hdr;97 uint32_t type; /**< SOF_IPC_REGION_ */98 uint32_t id; /**< platform specific - used to map to host memory */99 uint32_t flags; /**< R, W, RW, etc - to define */100 uint32_t size; /**< size of region in bytes */101 /* offset in window region as windows can be partitioned */102 uint32_t offset;103} __packed;104 105/* extended data memory windows for IPC, trace and debug */106struct sof_ipc_window {107 struct sof_ipc_ext_data_hdr ext_hdr;108 uint32_t num_windows;109 struct sof_ipc_window_elem window[SOF_IPC_MAX_ELEMS];110} __packed;111 112struct sof_ipc_cc_version {113 struct sof_ipc_ext_data_hdr ext_hdr;114 uint32_t major;115 uint32_t minor;116 uint32_t micro;117 118 /* reserved for future use */119 uint32_t reserved[4];120 121 uint8_t name[16]; /* null terminated compiler name */122 uint8_t optim[4]; /* null terminated compiler -O flag value */123 uint8_t desc[32]; /* null terminated compiler description */124} __packed;125 126/* extended data: Probe setup */127struct sof_ipc_probe_support {128 struct sof_ipc_ext_data_hdr ext_hdr;129 130 uint32_t probe_points_max;131 uint32_t injection_dmas_max;132 133 /* reserved for future use */134 uint32_t reserved[2];135} __packed;136 137/* extended data: user abi version(s) */138struct sof_ipc_user_abi_version {139 struct sof_ipc_ext_data_hdr ext_hdr;140 141 uint32_t abi_dbg_version;142} __packed;143 144#endif145