Sound Open Firmware
Loading...
Searching...
No Matches
msg.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: BSD-3-Clause
2 *
3 * Copyright(c) 2016 Intel Corporation. All rights reserved.
4 *
5 * Author: Liam Girdwood <liam.r.girdwood@linux.intel.com>
6 * Keyon Jie <yang.jie@linux.intel.com>
7 */
8
9#ifndef __SOF_IPC_MSG_H__
10#define __SOF_IPC_MSG_H__
11
12#include <sof/audio/buffer.h>
13#include <sof/audio/component.h>
14#include <sof/audio/pipeline.h>
15#include <rtos/alloc.h>
16#include <sof/lib/memory.h>
17#include <sof/list.h>
18#include <sof/platform.h>
19#include <rtos/task.h>
20#include <rtos/sof.h>
21#include <rtos/spinlock.h>
22#include <sof/trace/trace.h>
23#include <sof/ipc/common.h>
24#include <ipc/trace.h>
25
26#include <stdbool.h>
27#include <stdint.h>
28
29struct dai_config;
30struct dma;
32struct k_heap;
33
34struct ipc_msg {
35 uint32_t header; /* specific to platform */
36 uint32_t extension; /* extension specific to platform */
37 uint32_t tx_size; /* payload size in bytes */
38 void *tx_data; /* pointer to payload data, must be in a non-cached memory */
40 void (*callback)(struct ipc_msg *msg); /* Function called after sending the message */
41};
42
51struct ipc_msg *ipc_msg_w_ext_init(struct k_heap *heap, uint32_t header,
52 uint32_t extension, uint32_t size);
53
61static inline struct ipc_msg *ipc_msg_init(struct k_heap *heap,
62 uint32_t header, uint32_t size)
63{
64 return ipc_msg_w_ext_init(heap, header, 0, size);
65}
66
75#if defined(__ZEPHYR__) && defined(CONFIG_SOF_FULL_ZEPHYR_APPLICATION)
76__syscall void ipc_msg_list_remove(struct ipc_msg *msg);
77#include <zephyr/syscalls/msg.h>
78#else
79void z_impl_ipc_msg_list_remove(struct ipc_msg *msg);
80#define ipc_msg_list_remove z_impl_ipc_msg_list_remove
81#endif
82
87static inline void ipc_msg_free(struct ipc_msg *msg)
88{
89 if (!msg)
90 return;
91
93 rfree(msg->tx_data);
94 rfree(msg);
95}
96
101
108#if defined(__ZEPHYR__) && defined(CONFIG_SOF_FULL_ZEPHYR_APPLICATION)
109__syscall void ipc_msg_send(struct ipc_msg *msg, void *data,
110 bool high_priority);
111#include <zephyr/syscalls/msg.h>
112#else
113void z_impl_ipc_msg_send(struct ipc_msg *msg, void *data,
114 bool high_priority);
115#define ipc_msg_send z_impl_ipc_msg_send
116#endif
117
123void ipc_msg_send_direct(struct ipc_msg *msg, void *data);
124
132 uint32_t id);
133
140void ipc_build_comp_event(struct sof_ipc_comp_event *event, uint32_t type,
141 uint32_t id);
142
147bool ipc_trigger_trace_xfer(uint32_t avail);
148
154
155#endif
Memory allocation API, zones, heaps, and alignment utilities.
Component interconnect buffer allocation and stream handling.
Component API definition.
void rfree(void *ptr)
Free memory block allocated by SOF RTOS allocators.
int dai_config(struct dai_data *dd, struct comp_dev *dev, struct ipc_config_dai *common_cfg, const void *spec_cfg)
Configure DAI physical interface.
uint8_t data[0]
Binary byte payload for raw controls.
Definition header.h:5
union @28 extension
uint32_t type
Message type, symmetric to the incoming request.
Definition header.h:8
Memory attributes, cold/hot execution paths, and platform memory inclusions.
bool ipc_trigger_trace_xfer(uint32_t avail)
Check if trace buffer is ready for transmission.
void ipc_msg_send(struct ipc_msg *msg, void *data, bool high_priority)
Queues an IPC message for transmission.
void ipc_msg_list_remove(struct ipc_msg *msg)
Remove an IPC message from the send queue.
void ipc_build_comp_event(struct sof_ipc_comp_event *event, uint32_t type, uint32_t id)
Build component event IPC message.
void ipc_build_trace_posn(struct sof_ipc_dma_trace_posn *posn)
Build trace position IPC message.
void ipc_send_queued_msg(void)
Sends the next message in the IPC message queue.
struct ipc_msg * ipc_msg_w_ext_init(struct k_heap *heap, uint32_t header, uint32_t extension, uint32_t size)
Initialize a new IPC message using a specific heap.
void ipc_build_stream_posn(struct sof_ipc_stream_posn *posn, uint32_t type, uint32_t id)
Build stream position IPC message.
static void ipc_msg_free(struct ipc_msg *msg)
Frees IPC message header and data.
Definition msg.h:87
static struct ipc_msg * ipc_msg_init(struct k_heap *heap, uint32_t header, uint32_t size)
Initialize a new IPC message using a specific heap.
Definition msg.h:61
void ipc_msg_send_direct(struct ipc_msg *msg, void *data)
Send an IPC message directly for emergency.
Platform API definition.
Audio pipeline management, graph scheduling, and execution control.
Sound Open Firmware global runtime context.
RTOS spinlock primitives and initialization.
Host-DSP IPC trace DMA configuration, filtering, and panic descriptors.
SG elem array.
Definition dma.h:155
Definition dma.h:209
Definition msg.h:34
uint32_t tx_size
Definition msg.h:37
uint32_t extension
Definition msg.h:36
struct list_item list
Definition msg.h:39
uint32_t header
Definition msg.h:35
void * tx_data
Definition msg.h:38
void(* callback)(struct ipc_msg *msg)
Definition msg.h:40
Definition list.h:16
Generic notification data.
Definition control.h:168
DMA trace circular buffer position report sent to host (SOF_IPC_TRACE_DMA_POSITION).
Definition trace.h:52
Definition stream.h:134
Core task descriptor, task operations, and task execution state machine.