@@ -353,6 +353,10 @@ struct sof_ipc4_base_module_cfg {
353353#define SOF_IPC4_MOD_EXT_DOMAIN_MASK BIT(28)
354354#define SOF_IPC4_MOD_EXT_DOMAIN (x ) ((x) << SOF_IPC4_MOD_EXT_DOMAIN_SHIFT)
355355
356+ #define SOF_IPC4_MOD_EXT_EXTENDED_INIT_SHIFT 29
357+ #define SOF_IPC4_MOD_EXT_EXTENDED_INIT_MASK BIT(29)
358+ #define SOF_IPC4_MOD_EXT_EXTENDED_INIT (x ) ((x) << SOF_IPC4_MOD_EXT_EXTENDED_SHIFT)
359+
356360/* bind/unbind module ipc msg */
357361#define SOF_IPC4_MOD_EXT_DST_MOD_ID_SHIFT 0
358362#define SOF_IPC4_MOD_EXT_DST_MOD_ID_MASK GENMASK(15, 0)
@@ -616,6 +620,77 @@ struct sof_ipc4_notify_module_data {
616620#define SOF_IPC4_NOTIFY_MODULE_EVENTID_ALSA_MAGIC_VAL 0xA15A0000
617621#define SOF_IPC4_NOTIFY_MODULE_EVENTID_ALSA_PARAMID_MASK GENMASK(15, 0)
618622
623+ /*
624+ * Macros for creating struct sof_ipc4_module_init_ext_init payload
625+ * with its associated data. ext_init payload should be the first
626+ * piece of payload following SOF_IPC4_MOD_INIT_INSTANCE msg, and its
627+ * existence is indicated with SOF_IPC4_MOD_EXT_EXTENDED-bit.
628+ *
629+ * The macros below apply to sof_ipc4_module_init_ext_init.word0
630+ */
631+ #define SOF_IPC4_MOD_INIT_EXT_RTOS_DOMAIN_SHIFT 0
632+ #define SOF_IPC4_MOD_INIT_EXT_RTOS_DOMAIN_MASK BIT(0)
633+ #define SOF_IPC4_MOD_INIT_EXT_RTOS_DOMAIN (x ) ((x) << SOF_IPC4_MOD_INIT_EXT_RTOS_DOMAIN_SHIFT)
634+
635+ #define SOF_IPC4_MOD_INIT_EXT_GNA_USED_SHIFT 1
636+ #define SOF_IPC4_MOD_INIT_EXT_GNA_USED_MASK BIT(1)
637+ #define SOF_IPC4_MOD_INIT_EXT_GNA_USED (x ) ((x) << SOF_IPC4_MOD_INIT_EXT_GNA_USED_SHIFT)
638+
639+ #define SOF_IPC4_MOD_INIT_EXT_OBJ_ARRAY_SHIFT 2
640+ #define SOF_IPC4_MOD_INIT_EXT_OBJ_ARRAY_MASK BIT(2)
641+ #define SOF_IPC4_MOD_INIT_EXT_DATA_ARRAY (x ) ((x) << SOF_IPC4_MOD_INIT_EXT_OBJ_ARRAY_SHIFT)
642+
643+ struct sof_ipc4_module_init_ext_init {
644+ u32 word0 ;
645+ u32 rsvd1 ;
646+ u32 rsvd2 ;
647+ } __packed __aligned (4 );
648+
649+ /*
650+ * SOF_IPC4_MOD_EXT_EXTENDED payload may be followed by arbitrary
651+ * number of object array objects. SOF_IPC4_MOD_INIT_EXT_DATA_ARRAY
652+ * -bit indicates that an array object follows struct
653+ * sof_ipc4_module_init_ext_init.
654+ *
655+ * The object header's SOF_IPC4_MOD_INIT_EXT_OBJ_LAST-bit in struct
656+ * sof_ipc4_module_init_ext_object indicates if the array is continued
657+ * with another object. The header has also fields to identify the
658+ * object, SOF_IPC4_MOD_INIT_EXT_OBJ_ID, and to indicate the object's
659+ * size in 32-bit words, SOF_IPC4_MOD_INIT_EXT_OBJ_WORDS, not
660+ * including the header itself.
661+ *
662+ * The macros below apply to sof_ipc4_module_init_ext_object.header
663+ */
664+ #define SOF_IPC4_MOD_INIT_EXT_OBJ_LAST_SHIFT 0
665+ #define SOF_IPC4_MOD_INIT_EXT_OBJ_LAST_MASK BIT(0)
666+ #define SOF_IPC4_MOD_INIT_EXT_OBJ_LAST (x ) ((x) << SOF_IPC4_MOD_INIT_EXT_OBJ_LAST_SHIFT)
667+
668+ #define SOF_IPC4_MOD_INIT_EXT_OBJ_ID_SHIFT 1
669+ #define SOF_IPC4_MOD_INIT_EXT_OBJ_ID_MASK GENMASK(15, 1)
670+ #define SOF_IPC4_MOD_INIT_EXT_OBJ_ID (x ) ((x) << SOF_IPC4_MOD_INIT_EXT_OBJ_ID_SHIFT)
671+
672+ #define SOF_IPC4_MOD_INIT_EXT_OBJ_WORDS_SHIFT 16
673+ #define SOF_IPC4_MOD_INIT_EXT_OBJ_WORDS_MASK GENMASK(31, 16)
674+ #define SOF_IPC4_MOD_INIT_EXT_OBJ_WORDS (x ) ((x) << SOF_IPC4_MOD_INIT_EXT_OBJ_WORDS_SHIFT)
675+
676+ struct sof_ipc4_module_init_ext_object {
677+ u32 header ;
678+ u32 data [];
679+ } __packed __aligned (4 );
680+
681+ enum sof_ipc4_mod_init_ext_obj_id {
682+ SOF_IPC4_MOD_INIT_DATA_ID_INVALID = 0 ,
683+ SOF_IPC4_MOD_INIT_DATA_ID_DP_DATA ,
684+ SOF_IPC4_MOD_INIT_DATA_ID_MAX = SOF_IPC4_MOD_INIT_DATA_ID_DP_DATA ,
685+ };
686+
687+ /* DP module memory configuration data object for ext_init object array */
688+ struct sof_ipc4_mod_init_ext_dp_memory_data {
689+ u32 domain_id ; /* userspace domain ID */
690+ u32 stack_bytes ; /* stack size in bytes, 0 means default size */
691+ u32 heap_bytes ; /* stack size in bytes, 0 means default size */
692+ } __packed __aligned (4 );
693+
619694/** @}*/
620695
621696#endif
0 commit comments