14#ifndef __ZEPHYR_RTOS_IDC_H__
15#define __ZEPHYR_RTOS_IDC_H__
18#include <sof/trace/trace.h>
29#define IDC_NON_BLOCKING 1
35#define IDC_POWER_DOWN 3
38#define IDC_DEADLINE 100
41#define IDC_ROM_WAKE_VERSION 0x2
44#define IDC_TYPE_SHIFT 24
45#define IDC_TYPE_MASK 0x7f
46#define IDC_TYPE(x) (((x) & IDC_TYPE_MASK) << IDC_TYPE_SHIFT)
49#define IDC_HEADER_MASK 0xffffff
50#define IDC_HEADER(x) ((x) & IDC_HEADER_MASK)
53#define IDC_EXTENSION_MASK 0x3fffffff
54#define IDC_EXTENSION(x) ((x) & IDC_EXTENSION_MASK)
57#define IDC_MSG_POWER_UP (IDC_TYPE(0x1) | \
58 IDC_HEADER(IDC_ROM_WAKE_VERSION))
59#define IDC_MSG_POWER_UP_EXT IDC_EXTENSION(SOF_TEXT_START >> 2)
62#define IDC_MSG_POWER_DOWN IDC_TYPE(0x2)
63#define IDC_MSG_POWER_DOWN_EXT IDC_EXTENSION(0x0)
66#define IDC_MSG_NOTIFY IDC_TYPE(0x3)
67#define IDC_MSG_NOTIFY_EXT IDC_EXTENSION(0x0)
70#define IDC_MSG_IPC IDC_TYPE(0x4)
71#define IDC_MSG_IPC_EXT IDC_EXTENSION(0x0)
74#define IDC_MSG_PARAMS IDC_TYPE(0x5)
75#define IDC_MSG_PARAMS_EXT(x) IDC_EXTENSION(x)
78#define IDC_MSG_PREPARE IDC_TYPE(0x6)
79#define IDC_MSG_PREPARE_EXT(x) IDC_EXTENSION(x)
82#define IDC_MSG_TRIGGER IDC_TYPE(0x7)
83#define IDC_MSG_TRIGGER_EXT(x) IDC_EXTENSION(x)
86#define IDC_MSG_RESET IDC_TYPE(0x8)
87#define IDC_MSG_RESET_EXT(x) IDC_EXTENSION(x)
90#define IDC_MSG_PREPARE_D0ix IDC_TYPE(0x9)
91#define IDC_MSG_PREPARE_D0ix_EXT IDC_EXTENSION(0x0)
94#define IDC_MSG_SECONDARY_CORE_CRASHED IDC_TYPE(0xA)
95#define IDC_MSG_SECONDARY_CORE_CRASHED_EXT(x) IDC_EXTENSION(x)
98#define IDC_MSG_AMS IDC_TYPE(0xB)
99#define IDC_MSG_AMS_EXT IDC_EXTENSION(0x0)
101#define IDC_HEADER_TO_AMS_SLOT_MASK(x) (x & 0xFFFF)
103#define IDC_MSG_BIND IDC_TYPE(0xD)
104#define IDC_MSG_UNBIND IDC_TYPE(0xE)
105#define IDC_MSG_GET_ATTRIBUTE IDC_TYPE(0xF)
108#define IDC_MSG_FREE IDC_TYPE(0x10)
109#define IDC_MSG_FREE_EXT(x) IDC_EXTENSION(x)
112#define IDC_MSG_PPL_STATE IDC_TYPE(0xC)
113#define IDC_PPL_STATE_PPL_ID_SHIFT 0
114#define IDC_PPL_STATE_PPL_ID_MASK MASK(23, 0)
115#define IDC_PPL_STATE_PHASE_SHIFT 24
116#define IDC_PPL_STATE_PHASE_MASK MASK(27, 24)
117#define IDC_PPL_STATE_PHASE_SET(x) (((x) << IDC_PPL_STATE_PHASE_SHIFT) & \
118 IDC_PPL_STATE_PHASE_MASK)
119#define IDC_PPL_STATE_PHASE_GET(x) (((x) & IDC_PPL_STATE_PHASE_MASK) >> \
120 IDC_PPL_STATE_PHASE_SHIFT)
121#define IDC_PPL_STATE_PHASE_PREPARE BIT(0)
122#define IDC_PPL_STATE_PHASE_TRIGGER BIT(1)
123#define IDC_PPL_STATE_PHASE_ONESHOT (IDC_PPL_STATE_PHASE_PREPARE | \
124 IDC_PPL_STATE_PHASE_TRIGGER)
126#define IDC_MSG_PPL_STATE_EXT(_ppl_id, _action) \
127 IDC_EXTENSION(((_ppl_id) & IDC_PPL_STATE_PPL_ID_MASK) | \
128 IDC_PPL_STATE_PHASE_SET(_action))
131#define IDC_SCC_CORE_SHIFT 0
132#define IDC_SCC_CORE_MASK 0xff
133#define IDC_SCC_CORE(x) (((x) & IDC_SCC_CORE_MASK) << IDC_SCC_CORE_SHIFT)
135#define IDC_SCC_REASON_SHIFT 8
136#define IDC_SCC_REASON_MASK 0xff
137#define IDC_SCC_REASON(x) (((x) & IDC_SCC_REASON_MASK) << IDC_SCC_REASON_SHIFT)
140#define IDC_SCC_REASON_WATCHDOG 0x00
141#define IDC_SCC_REASON_EXCEPTION 0x01
144#define iTS(x) (((x) >> IDC_TYPE_SHIFT) & IDC_TYPE_MASK)
147#define IDC_MAX_PAYLOAD_SIZE (DCACHE_LINE_SIZE * 2)
150#define IDC_FREE_IRQ_ONLY BIT(0)
173#ifdef CONFIG_SOF_TELEMETRY_IO_PERFORMANCE_MEASUREMENTS
175 struct io_perf_data_item *io_perf_in_msg_count;
176 struct io_perf_data_item *io_perf_out_msg_count;
uint32_t data[]
Definition debug_stream_slot.h:2
int idc_send_msg(struct idc_msg *msg, uint32_t mode)
static struct idc_payload * idc_payload_get(struct idc *idc, uint32_t core)
Definition idc.h:183
int platform_idc_init(void)
#define IDC_MAX_PAYLOAD_SIZE
Max IDC message payload size in bytes.
Definition idc.h:147
void idc_init_thread(void)
void idc_enable_interrupts(int target_core, int source_core)
void idc_cmd(struct idc_msg *msg)
int idc_msg_status_get(uint32_t core)
int platform_idc_restore(void)
enum task_state idc_do_cmd(void *data)
void idc_free(uint32_t flags)
struct idc ** idc_get(void)
IDC message.
Definition idc.h:158
uint32_t header
header value
Definition idc.h:159
const void * payload
pointer to payload data
Definition idc.h:163
uint32_t size
payload size in bytes
Definition idc.h:162
uint32_t core
core id
Definition idc.h:161
uint32_t extension
extension value
Definition idc.h:160
IDC message payload.
Definition idc.h:153
uint8_t data[IDC_MAX_PAYLOAD_SIZE]
Definition idc.h:154
IDC data.
Definition idc.h:167
struct idc_payload * payload
Definition idc.h:171
uint32_t busy_bit_mask
busy interrupt mask
Definition idc.h:168
int irq
Definition idc.h:172
struct task idc_task
IDC processing task.
Definition idc.h:170
struct idc_msg received_msg
received message
Definition idc.h:169
Task used by schedulers.
Definition task.h:56
task_state
Task states.
Definition task.h:36