22#ifndef __IPC4_MODULE_H__
23#define __IPC4_MODULE_H__
30#define IPC4_MAX_SUPPORTED_LIBRARIES 16
33#define IPC4_MAX_MODULE_COUNT 128
36#define SOF_IPC4_DST_QUEUE_ID_BITFIELD_SIZE 3
38#define SOF_IPC4_SRC_QUEUE_ID_BITFIELD_SIZE 3
41#define VENDOR_CONFIG_PARAM 0xFF
72} __attribute__((packed, aligned(4)));
102} __attribute__((packed, aligned(4)));
112} __attribute__((packed, aligned(4)));
126} __attribute__((packed, aligned(4)));
135} __attribute__((packed, aligned(4)));
145} __attribute__((packed, aligned(4)));
153} __attribute__((packed, aligned(4)));
156#define IPC4_INVALID_PIPELINE_ID 0xFF
198} __attribute__((packed, aligned(4)));
240} __attribute__((packed, aligned(4)));
268} __attribute__((packed, aligned(4)));
295} __attribute__((packed, aligned(4)));
333} __attribute__((packed, aligned(4)));
363} __attribute__((packed, aligned(4)));
391} __attribute__((packed, aligned(4)));
423} __attribute__((packed, aligned(4)));
433} __attribute__((packed, aligned(4)));
461} __attribute__((packed, aligned(4)));
491} __attribute__((packed, aligned(4)));
494#define IPC4_COMP_ID(x, y) ((y) << 16 | (x))
496#define IPC4_MOD_ID(x) (IS_ENABLED(CONFIG_IPC_MAJOR_4) ? ((x) & 0xffff) : 0)
498#define IPC4_INST_ID(x) ((x) >> 16)
500#define IPC4_SRC_QUEUE_ID(x) ((x) & 0xffff)
502#define IPC4_SINK_QUEUE_ID(x) (((x) >> 16) & 0xffff)
IPC4 status codes, error codes, and IXC return values.
#define IPC4_IXC_STATUS_BITS
Number of bits allocated for processing status in the Primary reply DWORD (24 bits).
Definition error_status.h:25
sof_ipc4_module_type
Module message command opcodes (5-bit opcode in Primary DWORD when msg_tgt == MODULE_MSG).
Definition module.h:47
ipc4_mod_init_data_glb_id
Global object type identifiers for extended initialization payloads.
Definition module.h:87
@ SOF_IPC4_MOD_LARGE_CONFIG_SET
Send multi-block configuration or filter coefficients to module.
Definition module.h:52
@ SOF_IPC4_MOD_UNBIND
Disconnect a runtime binding between two module instances.
Definition module.h:54
@ SOF_IPC4_MOD_ENTER_MODULE_RESTORE
Notify module to prepare for context restoration after wake.
Definition module.h:57
@ SOF_IPC4_MOD_LARGE_CONFIG_GET
Retrieve multi-block configuration or state data from module.
Definition module.h:51
@ SOF_IPC4_MOD_CONFIG_SET
Set a short 16-bit module parameter packed in header.
Definition module.h:50
@ SOF_IPC4_MOD_INIT_INSTANCE
Instantiate a new module object and attach to a pipeline.
Definition module.h:48
@ SOF_IPC4_MOD_DELETE_INSTANCE
Destroy module instance and release allocated memory.
Definition module.h:59
@ SOF_IPC4_MOD_BIND
Connect a source pin of this module to a destination pin.
Definition module.h:53
@ SOF_IPC4_MOD_SET_DX
Request core power state transition (D0/D3).
Definition module.h:55
@ SOF_IPC4_MOD_EXIT_MODULE_RESTORE
Signal completion of module state restoration.
Definition module.h:58
@ SOF_IPC4_MOD_SET_D0IX
Request Base FW or module to enter low-power D0ix state.
Definition module.h:56
@ SOF_IPC4_MOD_CONFIG_GET
Retrieve a short 16-bit module parameter packed in header.
Definition module.h:49
@ IPC4_MOD_INIT_DATA_ID_MODULE_DATA
Module-specific bespoke initialization data.
Definition module.h:90
@ IPC4_MOD_INIT_DATA_ID_DP_DATA
Data Processing (DP) thread stack and heap requirements.
Definition module.h:89
@ IPC4_MOD_INIT_DATA_ID_INVALID
Invalid initialization object identifier.
Definition module.h:88
@ IPC4_MOD_INIT_DATA_ID_MAX
Maximum supported object identifier.
Definition module.h:91
#define SOF_IPC4_DST_QUEUE_ID_BITFIELD_SIZE
Number of bits allocated for destination queue/pin ID in bind commands (3 bits, supporting pins 0....
Definition module.h:36
#define SOF_IPC4_SRC_QUEUE_ID_BITFIELD_SIZE
Number of bits allocated for source queue/pin ID in bind commands (3 bits, supporting pins 0....
Definition module.h:38
DSP core power state bitmask descriptor.
Definition module.h:429
uint32_t core_mask
Bitmask indicating which DSP cores are subject to state change.
Definition module.h:430
uint32_t dx_mask
Target state bitmask: bit[core_id] = 0 -> put to D3, bit[core_id] = 1 -> put to D0.
Definition module.h:432
Module pin binding and unbinding command structure (SOF_IPC4_MOD_BIND / UNBIND).
Definition module.h:206
uint32_t instance_id
Source module instance identifier.
Definition module.h:214
uint32_t dat
Raw 32-bit Primary register value.
Definition module.h:208
union ipc4_module_bind_unbind::@41 extension
uint32_t _reserved_0
Reserved hardware control bit.
Definition module.h:221
uint32_t dst_instance_id
Destination module instance identifier.
Definition module.h:232
union ipc4_module_bind_unbind::@40 primary
uint32_t msg_tgt
Target: 1 for module message (SOF_IPC4_MESSAGE_TARGET_MODULE_MSG).
Definition module.h:220
uint32_t module_id
Source module class identifier.
Definition module.h:212
struct ipc4_module_bind_unbind::@40::@42 r
uint32_t dst_module_id
Destination module class identifier.
Definition module.h:230
uint32_t rsp
Direction: 0 for request (SOF_IPC4_MESSAGE_DIR_MSG_REQUEST).
Definition module.h:218
uint32_t dst_queue
Destination input queue/pin index (0..7).
Definition module.h:234
uint32_t type
Opcode: SOF_IPC4_MOD_BIND (5) or SOF_IPC4_MOD_UNBIND (6).
Definition module.h:216
uint32_t src_queue
Source output queue/pin index (0..7).
Definition module.h:236
uint32_t _reserved_2
Reserved hardware control bits.
Definition module.h:237
Reply structure for small parameter query (SOF_IPC4_MOD_CONFIG_GET).
Definition module.h:274
uint32_t msg_tgt
1 for module message.
Definition module.h:282
struct ipc4_module_config_reply::@48::@50 r
union ipc4_module_config_reply::@49 extension
uint32_t _reserved_0
Reserved bit.
Definition module.h:283
uint32_t type
Opcode: SOF_IPC4_MOD_CONFIG_GET.
Definition module.h:280
uint32_t _reserved_2
Reserved bits.
Definition module.h:292
union ipc4_module_config_reply::@48 primary
uint32_t rsp
1 for reply.
Definition module.h:281
uint32_t param_id_data
Returned parameter value if fitting in 30 bits.
Definition module.h:291
uint32_t status
Command processing status (enum ipc4_status).
Definition module.h:279
uint32_t dat
Raw 32-bit Primary register value.
Definition module.h:276
Small parameter configuration command structure (SOF_IPC4_MOD_CONFIG_GET / SET).
Definition module.h:246
union ipc4_module_config::@45 extension
uint32_t param_id_data
Packed 16-bit parameter data and 14-bit parameter ID.
Definition module.h:264
uint32_t instance_id
Target module instance ID.
Definition module.h:252
uint32_t _reserved_0
Reserved bit.
Definition module.h:256
struct ipc4_module_config::@44::@46 r
uint32_t type
Opcode: SOF_IPC4_MOD_CONFIG_GET or SET.
Definition module.h:253
uint32_t dat
Raw 32-bit Primary register value.
Definition module.h:248
uint32_t msg_tgt
1 for module message.
Definition module.h:255
uint32_t module_id
Target module class ID.
Definition module.h:251
uint32_t rsp
0 for request.
Definition module.h:254
union ipc4_module_config::@44 primary
uint32_t _reserved_2
Reserved bits.
Definition module.h:265
Module instance deletion command structure (SOF_IPC4_MOD_DELETE_INSTANCE).
Definition module.h:369
uint32_t type
Opcode: SOF_IPC4_MOD_DELETE_INSTANCE (11).
Definition module.h:376
uint32_t instance_id
Instance ID to destroy.
Definition module.h:375
union ipc4_module_delete_instance::@61 extension
uint32_t msg_tgt
1 for module target.
Definition module.h:378
uint32_t rsvd
Reserved padding.
Definition module.h:387
struct ipc4_module_delete_instance::@60::@62 r
uint32_t _reserved_0
Reserved bit.
Definition module.h:379
uint32_t rsp
0 for request.
Definition module.h:377
union ipc4_module_delete_instance::@60 primary
uint32_t _reserved_1
Reserved bits.
Definition module.h:388
uint32_t dat
Raw 32-bit Primary register value.
Definition module.h:371
uint32_t module_id
Module class ID of instance to destroy.
Definition module.h:374
Module initialization payload buffer.
Definition module.h:151
uint32_t param_data[0]
Configuration payload words (sized by param_block_size).
Definition module.h:152
Extended module initialization container.
Definition module.h:132
struct ipc4_module_init_ext_init extended_init
Extended flags.
Definition module.h:133
uint32_t param_data[]
Module configuration payload words.
Definition module.h:134
Extended initialization flags and coprocessor requirements.
Definition module.h:118
uint32_t rtos_domain
If set to 1, proc_domain is ignored and processing domain is RTOS scheduling.
Definition module.h:120
uint32_t data_obj_array
1 if followed by struct ipc4_module_init_ext_object array.
Definition module.h:123
uint32_t rsvd_1[2]
Reserved padding words.
Definition module.h:125
uint32_t rsvd_0
Reserved bits.
Definition module.h:124
uint32_t gna_used
Indicates that GNA coprocessor is used by module and gna_config follows.
Definition module.h:122
Memory requirements for Data Processing (DP) module threads.
Definition module.h:108
uint32_t stack_bytes
Required thread stack size in bytes.
Definition module.h:110
uint32_t domain_id
Userspace domain identifier.
Definition module.h:109
uint32_t heap_bytes
Required thread heap allocation size in bytes.
Definition module.h:111
Header for extended initialization data objects.
Definition module.h:98
uint32_t object_words
Payload size in 32-bit DWORDs following this header.
Definition module.h:101
uint32_t last_object
Set to 1 if this is the terminating object in the array.
Definition module.h:99
uint32_t object_id
Unique object identifier (one of enum ipc4_mod_init_data_glb_id).
Definition module.h:100
Neural network accelerator (GNA) compute cycle configuration.
Definition module.h:141
uint32_t rsvd
Reserved padding.
Definition module.h:144
uint32_t gna_cpc
Number of GNA cycles required to process one input frame.
Definition module.h:143
Module instance creation command structure (SOF_IPC4_MOD_INIT_INSTANCE).
Definition module.h:162
uint32_t param_block_size
Size of initialization payload in 32-bit DWORDs.
Definition module.h:186
uint32_t proc_domain
Processing domain (0 = Low-Latency LL, 1 = Data Processing DP).
Definition module.h:192
uint32_t ppl_instance_id
ID of parent pipeline, or IPC4_INVALID_PIPELINE_ID.
Definition module.h:188
uint32_t msg_tgt
Target: 1 for module message (SOF_IPC4_MESSAGE_TARGET_MODULE_MSG).
Definition module.h:176
uint32_t module_id
Module class ID index from the FW manifest.
Definition module.h:168
union ipc4_module_init_instance::@37 extension
uint32_t instance_id
Module instance ID unique within the module class (0..max_instances-1).
Definition module.h:170
uint32_t rsp
Direction: 0 for request (SOF_IPC4_MESSAGE_DIR_MSG_REQUEST).
Definition module.h:174
uint32_t _reserved_0
Reserved hardware control bit.
Definition module.h:177
union ipc4_module_init_instance::@36 primary
uint32_t type
Opcode: SOF_IPC4_MOD_INIT_INSTANCE (0).
Definition module.h:172
uint32_t _hw_reserved_2
Reserved hardware bits.
Definition module.h:195
struct ipc4_module_init_instance::@36::@38 r
uint32_t core_id
Target DSP core ID on which this instance will execute (platform-dependent, 0..CONFIG_CORE_COUNT - 1)...
Definition module.h:190
uint32_t extended_init
1 if extended initialization structures follow.
Definition module.h:194
uint32_t dat
Raw 32-bit Primary register value.
Definition module.h:164
Reply structure for large configuration transfer.
Definition module.h:339
union ipc4_module_large_config_reply::@56 primary
struct ipc4_module_large_config_reply::@56::@58 r
uint32_t final_block
1 if final block processed.
Definition module.h:358
union ipc4_module_large_config_reply::@57 extension
uint32_t large_param_id
Parameter type ID.
Definition module.h:357
uint32_t rsp
1 for reply.
Definition module.h:346
uint32_t type
Symmetric opcode.
Definition module.h:345
uint32_t init_block
1 if first block processed.
Definition module.h:359
uint32_t dat
Raw 32-bit Primary register value.
Definition module.h:341
uint32_t data_off_size
Processed byte size or offset.
Definition module.h:356
uint32_t msg_tgt
Symmetric target.
Definition module.h:347
uint32_t _reserved_0
Reserved bit.
Definition module.h:348
uint32_t _reserved_2
Reserved bits.
Definition module.h:360
uint32_t status
Processing status (enum ipc4_status).
Definition module.h:344
Large configuration parameter transfer envelope (SOF_IPC4_MOD_LARGE_CONFIG_GET / SET).
Definition module.h:304
uint32_t data_off_size
Chunk byte size (single block) or cumulative byte offset (multi-block).
Definition module.h:323
union ipc4_module_large_config::@53 extension
uint32_t final_block
Set to 1 on the terminating chunk of a multi-block transfer.
Definition module.h:327
struct ipc4_module_large_config::@52::@54 r
uint32_t type
LARGE_CONFIG_GET (3) or LARGE_CONFIG_SET (4).
Definition module.h:311
uint32_t init_block
Set to 1 on the initial chunk of a multi-block transfer.
Definition module.h:329
uint32_t _reserved_2
Reserved bits.
Definition module.h:330
uint32_t large_param_id
Parameter type identifier (module-specific or VENDOR_CONFIG_PARAM).
Definition module.h:325
union ipc4_module_large_config::@52 primary
uint32_t module_id
Target module class ID.
Definition module.h:309
uint32_t rsp
0 for request, 1 for reply.
Definition module.h:312
uint32_t msg_tgt
1 for module target.
Definition module.h:313
uint32_t instance_id
Target module instance ID.
Definition module.h:310
uint32_t _reserved_0
Reserved bit.
Definition module.h:314
uint32_t dat
Raw 32-bit Primary register value.
Definition module.h:306
Dynamic library loading command structure (SOF_IPC4_GLB_LOAD_LIBRARY).
Definition module.h:467
uint32_t rsvd1
Reserved padding.
Definition module.h:475
uint32_t msg_tgt
0 for global firmware message.
Definition module.h:478
uint32_t dat
Raw 32-bit Primary register value.
Definition module.h:469
uint32_t load_offset
Load offset into host DMA buffer.
Definition module.h:487
union ipc4_module_load_library::@73 data
struct ipc4_module_load_library::@72::@74 r
uint32_t rsp
0 for request.
Definition module.h:477
uint32_t type
Opcode: SOF_IPC4_GLB_LOAD_LIBRARY (24).
Definition module.h:476
uint32_t _reserved_0
Reserved bit.
Definition module.h:479
union ipc4_module_load_library::@72 header
uint32_t rsvd0
Reserved padding.
Definition module.h:473
uint32_t dma_id
ID of Host Output DMA used to load code.
Definition module.h:472
uint32_t _reserved_2
Reserved bits.
Definition module.h:488
uint32_t lib_id
Dynamic library container ID (0..15).
Definition module.h:474
Module D0ix low-power state entry command (SOF_IPC4_MOD_SET_D0IX).
Definition module.h:397
uint32_t type
Opcode: SOF_IPC4_MOD_SET_D0IX (8).
Definition module.h:404
uint32_t module_id
Module ID (must be 0 for Base FW).
Definition module.h:402
uint32_t _reserved_0
Reserved bit.
Definition module.h:407
union ipc4_module_set_d0ix::@64 primary
uint32_t rsvd1
Reserved padding.
Definition module.h:419
uint32_t wake
Legacy wake type flag.
Definition module.h:415
uint32_t streaming
Active audio streaming indicator.
Definition module.h:416
uint32_t instance_id
Instance ID (must be 0 for core 0).
Definition module.h:403
uint32_t dat
Raw 32-bit Primary register value.
Definition module.h:399
uint32_t msg_tgt
1 for module message.
Definition module.h:406
struct ipc4_module_set_d0ix::@64::@66 r
uint32_t prevent_local_clock_gating
Set to 1 to inhibit local clock gating.
Definition module.h:418
uint32_t _reserved_2
Reserved bits.
Definition module.h:420
uint32_t rsp
0 for request.
Definition module.h:405
uint32_t prevent_power_gating
Set to 1 to inhibit DSP core power gating.
Definition module.h:417
union ipc4_module_set_d0ix::@65 extension
Core DX power state transition command structure (SOF_IPC4_MOD_SET_DX).
Definition module.h:439
union ipc4_module_set_dx::@68 primary
uint32_t msg_tgt
1 for module message.
Definition module.h:448
uint32_t instance_id
Instance ID (0 for Core 0).
Definition module.h:445
struct ipc4_module_set_dx::@68::@70 r
uint32_t rsvd
Reserved padding.
Definition module.h:457
uint32_t type
Opcode: SOF_IPC4_MOD_SET_DX (7).
Definition module.h:446
union ipc4_module_set_dx::@69 extension
uint32_t _reserved_2
Reserved bits.
Definition module.h:458
uint32_t module_id
Module ID (0 for Base FW).
Definition module.h:444
uint32_t rsp
0 for request.
Definition module.h:447
uint32_t _reserved_0
Reserved bit.
Definition module.h:449
uint32_t dat
Raw 32-bit Primary register value.
Definition module.h:441
Vendor error reporting payload structure.
Definition module.h:78
uint32_t err_code
Vendor-specific or hardware error code.
Definition module.h:80
uint32_t param_idx
Index of the failed parameter in vendor configuration list.
Definition module.h:79
Compound parameter identifier encoding type and instance index.
Definition module.h:66
struct ipc4_extended_param_id::@35 part
uint32_t full
Full 32-bit parameter identifier.
Definition module.h:67
uint32_t parameter_instance
Parameter instance index.
Definition module.h:70
uint32_t parameter_type
Parameter type identifier.
Definition module.h:69