mirror of
https://github.com/torvalds/linux.git
synced 2024-12-18 17:12:55 +00:00
f3b433e469
Add all required types and methods to support each and every request that driver could sent to firmware. Probe is one of SOF firmware features which allows for data extraction and injection directly from or to DMA stream. Exposes eight IPCs: - addition and removal of injection DMAs - addition and removal of probe points - info retrieval of injection DMAs and probe points - probe initialization and cleanup Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com> Acked-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Link: https://lore.kernel.org/r/20200218143924.10565-5-cezary.rojewski@intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
200 lines
6.6 KiB
C
200 lines
6.6 KiB
C
/* SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) */
|
|
/*
|
|
* This file is provided under a dual BSD/GPLv2 license. When using or
|
|
* redistributing this file, you may do so under either license.
|
|
*
|
|
* Copyright(c) 2018 Intel Corporation. All rights reserved.
|
|
*/
|
|
|
|
#ifndef __INCLUDE_SOUND_SOF_HEADER_H__
|
|
#define __INCLUDE_SOUND_SOF_HEADER_H__
|
|
|
|
#include <linux/types.h>
|
|
#include <uapi/sound/sof/abi.h>
|
|
|
|
/** \addtogroup sof_uapi uAPI
|
|
* SOF uAPI specification.
|
|
* @{
|
|
*/
|
|
|
|
/*
|
|
* IPC messages have a prefixed 32 bit identifier made up as follows :-
|
|
*
|
|
* 0xGCCCNNNN where
|
|
* G is global cmd type (4 bits)
|
|
* C is command type (12 bits)
|
|
* I is the ID number (16 bits) - monotonic and overflows
|
|
*
|
|
* This is sent at the start of the IPM message in the mailbox. Messages should
|
|
* not be sent in the doorbell (special exceptions for firmware .
|
|
*/
|
|
|
|
/* Global Message - Generic */
|
|
#define SOF_GLB_TYPE_SHIFT 28
|
|
#define SOF_GLB_TYPE_MASK (0xf << SOF_GLB_TYPE_SHIFT)
|
|
#define SOF_GLB_TYPE(x) ((x) << SOF_GLB_TYPE_SHIFT)
|
|
|
|
/* Command Message - Generic */
|
|
#define SOF_CMD_TYPE_SHIFT 16
|
|
#define SOF_CMD_TYPE_MASK (0xfff << SOF_CMD_TYPE_SHIFT)
|
|
#define SOF_CMD_TYPE(x) ((x) << SOF_CMD_TYPE_SHIFT)
|
|
|
|
/* Global Message Types */
|
|
#define SOF_IPC_GLB_REPLY SOF_GLB_TYPE(0x1U)
|
|
#define SOF_IPC_GLB_COMPOUND SOF_GLB_TYPE(0x2U)
|
|
#define SOF_IPC_GLB_TPLG_MSG SOF_GLB_TYPE(0x3U)
|
|
#define SOF_IPC_GLB_PM_MSG SOF_GLB_TYPE(0x4U)
|
|
#define SOF_IPC_GLB_COMP_MSG SOF_GLB_TYPE(0x5U)
|
|
#define SOF_IPC_GLB_STREAM_MSG SOF_GLB_TYPE(0x6U)
|
|
#define SOF_IPC_FW_READY SOF_GLB_TYPE(0x7U)
|
|
#define SOF_IPC_GLB_DAI_MSG SOF_GLB_TYPE(0x8U)
|
|
#define SOF_IPC_GLB_TRACE_MSG SOF_GLB_TYPE(0x9U)
|
|
#define SOF_IPC_GLB_GDB_DEBUG SOF_GLB_TYPE(0xAU)
|
|
#define SOF_IPC_GLB_TEST_MSG SOF_GLB_TYPE(0xBU)
|
|
#define SOF_IPC_GLB_PROBE SOF_GLB_TYPE(0xCU)
|
|
|
|
/*
|
|
* DSP Command Message Types
|
|
*/
|
|
|
|
/* topology */
|
|
#define SOF_IPC_TPLG_COMP_NEW SOF_CMD_TYPE(0x001)
|
|
#define SOF_IPC_TPLG_COMP_FREE SOF_CMD_TYPE(0x002)
|
|
#define SOF_IPC_TPLG_COMP_CONNECT SOF_CMD_TYPE(0x003)
|
|
#define SOF_IPC_TPLG_PIPE_NEW SOF_CMD_TYPE(0x010)
|
|
#define SOF_IPC_TPLG_PIPE_FREE SOF_CMD_TYPE(0x011)
|
|
#define SOF_IPC_TPLG_PIPE_CONNECT SOF_CMD_TYPE(0x012)
|
|
#define SOF_IPC_TPLG_PIPE_COMPLETE SOF_CMD_TYPE(0x013)
|
|
#define SOF_IPC_TPLG_BUFFER_NEW SOF_CMD_TYPE(0x020)
|
|
#define SOF_IPC_TPLG_BUFFER_FREE SOF_CMD_TYPE(0x021)
|
|
|
|
/* PM */
|
|
#define SOF_IPC_PM_CTX_SAVE SOF_CMD_TYPE(0x001)
|
|
#define SOF_IPC_PM_CTX_RESTORE SOF_CMD_TYPE(0x002)
|
|
#define SOF_IPC_PM_CTX_SIZE SOF_CMD_TYPE(0x003)
|
|
#define SOF_IPC_PM_CLK_SET SOF_CMD_TYPE(0x004)
|
|
#define SOF_IPC_PM_CLK_GET SOF_CMD_TYPE(0x005)
|
|
#define SOF_IPC_PM_CLK_REQ SOF_CMD_TYPE(0x006)
|
|
#define SOF_IPC_PM_CORE_ENABLE SOF_CMD_TYPE(0x007)
|
|
#define SOF_IPC_PM_GATE SOF_CMD_TYPE(0x008)
|
|
|
|
/* component runtime config - multiple different types */
|
|
#define SOF_IPC_COMP_SET_VALUE SOF_CMD_TYPE(0x001)
|
|
#define SOF_IPC_COMP_GET_VALUE SOF_CMD_TYPE(0x002)
|
|
#define SOF_IPC_COMP_SET_DATA SOF_CMD_TYPE(0x003)
|
|
#define SOF_IPC_COMP_GET_DATA SOF_CMD_TYPE(0x004)
|
|
#define SOF_IPC_COMP_NOTIFICATION SOF_CMD_TYPE(0x005)
|
|
|
|
/* DAI messages */
|
|
#define SOF_IPC_DAI_CONFIG SOF_CMD_TYPE(0x001)
|
|
#define SOF_IPC_DAI_LOOPBACK SOF_CMD_TYPE(0x002)
|
|
|
|
/* stream */
|
|
#define SOF_IPC_STREAM_PCM_PARAMS SOF_CMD_TYPE(0x001)
|
|
#define SOF_IPC_STREAM_PCM_PARAMS_REPLY SOF_CMD_TYPE(0x002)
|
|
#define SOF_IPC_STREAM_PCM_FREE SOF_CMD_TYPE(0x003)
|
|
#define SOF_IPC_STREAM_TRIG_START SOF_CMD_TYPE(0x004)
|
|
#define SOF_IPC_STREAM_TRIG_STOP SOF_CMD_TYPE(0x005)
|
|
#define SOF_IPC_STREAM_TRIG_PAUSE SOF_CMD_TYPE(0x006)
|
|
#define SOF_IPC_STREAM_TRIG_RELEASE SOF_CMD_TYPE(0x007)
|
|
#define SOF_IPC_STREAM_TRIG_DRAIN SOF_CMD_TYPE(0x008)
|
|
#define SOF_IPC_STREAM_TRIG_XRUN SOF_CMD_TYPE(0x009)
|
|
#define SOF_IPC_STREAM_POSITION SOF_CMD_TYPE(0x00a)
|
|
#define SOF_IPC_STREAM_VORBIS_PARAMS SOF_CMD_TYPE(0x010)
|
|
#define SOF_IPC_STREAM_VORBIS_FREE SOF_CMD_TYPE(0x011)
|
|
|
|
/* probe */
|
|
#define SOF_IPC_PROBE_INIT SOF_CMD_TYPE(0x001)
|
|
#define SOF_IPC_PROBE_DEINIT SOF_CMD_TYPE(0x002)
|
|
#define SOF_IPC_PROBE_DMA_ADD SOF_CMD_TYPE(0x003)
|
|
#define SOF_IPC_PROBE_DMA_INFO SOF_CMD_TYPE(0x004)
|
|
#define SOF_IPC_PROBE_DMA_REMOVE SOF_CMD_TYPE(0x005)
|
|
#define SOF_IPC_PROBE_POINT_ADD SOF_CMD_TYPE(0x006)
|
|
#define SOF_IPC_PROBE_POINT_INFO SOF_CMD_TYPE(0x007)
|
|
#define SOF_IPC_PROBE_POINT_REMOVE SOF_CMD_TYPE(0x008)
|
|
|
|
/* trace */
|
|
#define SOF_IPC_TRACE_DMA_PARAMS SOF_CMD_TYPE(0x001)
|
|
#define SOF_IPC_TRACE_DMA_POSITION SOF_CMD_TYPE(0x002)
|
|
#define SOF_IPC_TRACE_DMA_PARAMS_EXT SOF_CMD_TYPE(0x003)
|
|
|
|
/* debug */
|
|
#define SOF_IPC_TEST_IPC_FLOOD SOF_CMD_TYPE(0x001)
|
|
|
|
/* Get message component id */
|
|
#define SOF_IPC_MESSAGE_ID(x) ((x) & 0xffff)
|
|
|
|
/* maximum message size for mailbox Tx/Rx */
|
|
#define SOF_IPC_MSG_MAX_SIZE 384
|
|
|
|
/*
|
|
* Structure Header - Header for all IPC structures except command structs.
|
|
* The size can be greater than the structure size and that means there is
|
|
* extended bespoke data beyond the end of the structure including variable
|
|
* arrays.
|
|
*/
|
|
|
|
struct sof_ipc_hdr {
|
|
uint32_t size; /**< size of structure */
|
|
} __packed;
|
|
|
|
/*
|
|
* Command Header - Header for all IPC commands. Identifies IPC message.
|
|
* The size can be greater than the structure size and that means there is
|
|
* extended bespoke data beyond the end of the structure including variable
|
|
* arrays.
|
|
*/
|
|
|
|
struct sof_ipc_cmd_hdr {
|
|
uint32_t size; /**< size of structure */
|
|
uint32_t cmd; /**< SOF_IPC_GLB_ + cmd */
|
|
} __packed;
|
|
|
|
/*
|
|
* Generic reply message. Some commands override this with their own reply
|
|
* types that must include this at start.
|
|
*/
|
|
struct sof_ipc_reply {
|
|
struct sof_ipc_cmd_hdr hdr;
|
|
int32_t error; /**< negative error numbers */
|
|
} __packed;
|
|
|
|
/*
|
|
* Compound commands - SOF_IPC_GLB_COMPOUND.
|
|
*
|
|
* Compound commands are sent to the DSP as a single IPC operation. The
|
|
* commands are split into blocks and each block has a header. This header
|
|
* identifies the command type and the number of commands before the next
|
|
* header.
|
|
*/
|
|
|
|
struct sof_ipc_compound_hdr {
|
|
struct sof_ipc_cmd_hdr hdr;
|
|
uint32_t count; /**< count of 0 means end of compound sequence */
|
|
} __packed;
|
|
|
|
/**
|
|
* OOPS header architecture specific data.
|
|
*/
|
|
struct sof_ipc_dsp_oops_arch_hdr {
|
|
uint32_t arch; /* Identifier of architecture */
|
|
uint32_t totalsize; /* Total size of oops message */
|
|
} __packed;
|
|
|
|
/**
|
|
* OOPS header platform specific data.
|
|
*/
|
|
struct sof_ipc_dsp_oops_plat_hdr {
|
|
uint32_t configidhi; /* ConfigID hi 32bits */
|
|
uint32_t configidlo; /* ConfigID lo 32bits */
|
|
uint32_t numaregs; /* Special regs num */
|
|
uint32_t stackoffset; /* Offset to stack pointer from beginning of
|
|
* oops message
|
|
*/
|
|
uint32_t stackptr; /* Stack ptr */
|
|
} __packed;
|
|
|
|
/** @}*/
|
|
|
|
#endif
|