[Sound-open-firmware] [PATCH 2/5] topology: builder: Add support pipeline scheduling to topology

Liam Girdwood liam.r.girdwood at linux.intel.com
Wed Aug 9 16:02:14 CEST 2017


Allow topology pipelines to define their scheduling.

Signed-off-by: Liam Girdwood <liam.r.girdwood at linux.intel.com>
---
 topology/m4/build.m4 |  96 +++++++++++---
 topology/m4/local.m4 | 359 +++++++++++++++++++++++++++++++++++++++++++++------
 2 files changed, 392 insertions(+), 63 deletions(-)

diff --git a/topology/m4/build.m4 b/topology/m4/build.m4
index 0c40e4e..66f6562 100644
--- a/topology/m4/build.m4
+++ b/topology/m4/build.m4
@@ -1,44 +1,100 @@
-#"PIPELINE_PCM_ADD(pipeline, id, pcm, pcm_buf, int_buf, frames, deadline)
+divert(-1)
+
+dnl PIPELINE_PCM_ADD(pipeline, id, pcm, max channels, format, frames, deadline, priority, core)
 define(`PIPELINE_PCM_ADD',
 `undefine(`PCM_ID')'
 `undefine(`PIPELINE_ID')'
-`undefine(`BUF_PCM_SIZE')'
-`undefine(`BUF_INT_SIZE')'
+`undefine(`PIPELINE_CHANNELS')'
+`undefine(`PIPELINE_FORMAT')'
 `undefine(`SCHEDULE_FRAMES')'
 `undefine(`SCHEDULE_DEADLINE')'
+`undefine(`SCHEDULE_PRIORITY')'
+`undefine(`SCHEDULE_CORE')'
+`undefine(`PIPELINE_DMAC')'
+`undefine(`PIPELINE_DMAC_CHAN')'
+`define(`PIPELINE_ID', $2)'
 `define(`PCM_ID', $3)'
+`define(`PIPELINE_CHANNELS', $4)'
+`define(`PIPELINE_FORMAT', $5)'
+`define(`SCHEDULE_FRAMES', $6)'
+`define(`SCHEDULE_DEADLINE', $7)'
+`define(`SCHEDULE_PRIORITY', $8)'
+`define(`SCHEDULE_CORE', $9)'
+`define(`PIPELINE_DMAC', $10)'
+`define(`PIPELINE_DMAC_CHAN', $11)'
+`include($1)'
+)
+
+dnl PIPELINE_PCM_DAI_ADD(pipeline, id, pcm, max channels, format, frames,
+dnl     deadline, priority, core, dai type, dai_index, stream_name, periods)
+define(`PIPELINE_PCM_DAI_ADD',
+`undefine(`PCM_ID')'
+`undefine(`PIPELINE_ID')'
+`undefine(`PIPELINE_CHANNELS')'
+`undefine(`PIPELINE_FORMAT')'
+`undefine(`SCHEDULE_FRAMES')'
+`undefine(`SCHEDULE_DEADLINE')'
+`undefine(`SCHEDULE_PRIORITY')'
+`undefine(`SCHEDULE_CORE')'
+`undefine(`PIPELINE_DMAC')'
+`undefine(`PIPELINE_DMAC_CHAN')'
+`undefine(`DAI_TYPE')'
+`undefine(`DAI_INDEX')'
+`undefine(`DAI_SNAME')'
+`undefine(`DAI_PERIODS')'
 `define(`PIPELINE_ID', $2)'
-`define(`BUF_PCM_SIZE', STR($4))'
-`define(`BUF_INT_SIZE', STR($5))'
-`define(`SCHEDULE_FRAMES', STR($6))'
-`define(`SCHEDULE_DEADLINE', STR($7))'
+`define(`PCM_ID', $3)'
+`define(`PIPELINE_CHANNELS', $4)'
+`define(`PIPELINE_FORMAT', $5)'
+`define(`SCHEDULE_FRAMES', $6)'
+`define(`SCHEDULE_DEADLINE', $7)'
+`define(`SCHEDULE_PRIORITY', $8)'
+`define(`SCHEDULE_CORE', $9)'
+`define(`PIPELINE_DMAC', $10)'
+`define(`PIPELINE_DMAC_CHAN', $11)'
+`define(`DAI_TYPE', STR($12))'
+`define(`DAI_INDEX', STR($13))'
+`define(`DAI_SNAME', $14)'
+`define(`DAI_PERIODS', $15)'
+`define(`DAI_NAME', $12$13)'
 `include($1)'
 )
 
-#PIPELINE_ADD(pipeline, id), int_buf, frames, deadline)
+dnl PIPELINE_ADD(pipeline, id, max channels, format, frames, deadline, priority, core)
 define(`PIPELINE_ADD',
 `undefine(`PIPELINE_ID')'
-`undefine(`BUF_INT_SIZE')'
+`undefine(`PIPELINE_CHANNELS')'
+`undefine(`PIPELINE_FORMAT')'
 `undefine(`SCHEDULE_FRAMES')'
 `undefine(`SCHEDULE_DEADLINE')'
+`undefine(`SCHEDULE_PRIORITY')'
+`undefine(`SCHEDULE_CORE')'
 `define(`PIPELINE_ID', $2)'
-`define(`BUF_INT_SIZE', STR($3))'
-`define(`SCHEDULE_FRAMES', STR($4))'
-`define(`SCHEDULE_DEADLINE', STR($5))'
+`define(`PIPELINE_CHANNELS', $3)'
+`define(`PIPELINE_FORMAT', $4)'
+`define(`SCHEDULE_FRAMES', $5)'
+`define(`SCHEDULE_DEADLINE', $6)'
+`define(`SCHEDULE_PRIORITY', $7)'
+`define(`SCHEDULE_CORE', $8)'
 `include($1)'
 )
 
-#DAI_ADD(pipeline, dai_name, stream_name, win, wout))
+dnl DAI_ADD(pipeline, dai type, dai_index, stream_name, buffer, periods)
 define(`DAI_ADD',
 `undefine(`PIPELINE_ID')'
-`undefine(`DAI_NAME')'
+`undefine(`DAI_TYPE')'
+`undefine(`DAI_INDEX')'
 `undefine(`DAI_SNAME')'
-`undefine(`IN_BUF')'
-`undefine(`OUT_BUF')'
+`undefine(`DAI_BUF')'
+`undefine(`DAI_PERIODS')'
 `define(`PIPELINE_ID', 0)'
-`define(`DAI_NAME', $2)'
-`define(`DAI_SNAME', $3)'
-`define(`IN_BUF', $4)'
-`define(`OUT_BUF', $5)'
+`define(`DAI_TYPE', STR($2))'
+`define(`DAI_INDEX', STR($3))'
+`define(`DAI_SNAME', $4)'
+`define(`DAI_BUF', $5)'
+`define(`DAI_NAME', $2$3)'
+`define(`DAI_PERIODS', $6)'
 `include($1)'
 )
+
+divert(0)dnl
diff --git a/topology/m4/local.m4 b/topology/m4/local.m4
index 2408830..a888438 100644
--- a/topology/m4/local.m4
+++ b/topology/m4/local.m4
@@ -1,32 +1,57 @@
+divert(-1)
+
 define(`concat',`$1$2')
 
 define(`STR', `"'$1`"')
 
-#create direct DAPM/pipeline link between 2 widgets)
+dnl create direct DAPM/pipeline link between 2 widgets)
 define(`dapm', `"$1, , $2"')
 
-#SRC name)
+dnl SRC name)
 define(`N_SRC', `SRC'PIPELINE_ID`.'$1)
 
-#W_SRC(name, data))
-define(`W_SRC', `SectionWidget."'N_SRC($1)`" {'
+dnl W_SRC(name, format, periods_sink, periods_source, data, preload)
+define(`W_SRC',
+`SectionVendorTuples."'N_SRC($1)`_tuples_w" {'
+`	tokens "sof_comp_tokens"'
+`	tuples."word" {'
+`		SOF_TKN_COMP_PERIOD_SINK_COUNT'		STR($3)
+`		SOF_TKN_COMP_PERIOD_SOURCE_COUNT'	STR($4)
+`		SOF_TKN_COMP_PRELOAD_COUNT'		STR($5)
+`	}'
+`}'
+`SectionData."'N_SRC($1)`_data_w" {'
+`	tuples "'N_SRC($1)`_tuples_w"'
+`}'
+`SectionVendorTuples."'N_SRC($1)`_tuples_str" {'
+`	tokens "sof_comp_tokens"'
+`	tuples."string" {'
+`		SOF_TKN_COMP_FORMAT'	STR($2)
+`	}'
+`}'
+`SectionData."'N_SRC($1)`_data_str" {'
+`	tuples "'N_SRC($1)`_tuples_str"'
+`}'
+`SectionWidget."'N_SRC($1)`" {'
 `	index "'PIPELINE_ID`"'
 `	type "src"'
 `	no_pm "true"'
 `	data ['
+`		"'N_SRC($1)`_data_w"'
+`		"'N_SRC($1)`_data_str"'
 `		"'$2`"'
 `	]'
 `}')
 
-#Buffer name)
+dnl Buffer name)
 define(`N_BUFFER', `BUF'PIPELINE_ID`.'$1)
 
-#W_BUFFER(name, size))
+dnl W_BUFFER(name, size)
 define(`W_BUFFER',
 `SectionVendorTuples."'N_BUFFER($1)`_tuples" {'
 `	tokens "sof_buffer_tokens"'
 `	tuples."word" {'
-`		SOF_TKN_BUF_SIZE'	$2
+`		SOF_TKN_BUF_SIZE'	STR($2)
 `	}'
 `}'
 `SectionData."'N_BUFFER($1)`_data" {'
@@ -41,119 +66,367 @@ define(`W_BUFFER',
 `	]'
 `}')
 
-#PCM name)
+dnl PCM name)
 define(`N_PCM', `PCM'PCM_ID)
 
-#W_PCM_PLAYBACK(stream))
-define(`W_PCM_PLAYBACK', `SectionWidget."'N_PCM`" {'
+dnl W_PCM_PLAYBACK(stream, dmac, dmac_chan, periods_sink, periods_source, preload)
+dnl  PCM platform configuration
+define(`W_PCM_PLAYBACK',
+`SectionVendorTuples."'N_PCM($1)`_tuples_w_comp" {'
+`	tokens "sof_comp_tokens"'
+`	tuples."word" {'
+`		SOF_TKN_COMP_PERIOD_SINK_COUNT'		STR($4)
+`		SOF_TKN_COMP_PERIOD_SOURCE_COUNT'	STR($5)
+`		SOF_TKN_COMP_PRELOAD_COUNT'		STR($6)
+`	}'
+`}'
+`SectionData."'N_PCM($1)`_data_w_comp" {'
+`	tuples "'N_PCM($1)`_tuples_w_comp"'
+`}'
+`SectionVendorTuples."'N_PCM($1)`_tuples" {'
+`	tokens "sof_pcm_tokens"'
+`	tuples."word" {'
+`		SOF_TKN_PCM_DMAC'	STR($2)
+`		SOF_TKN_PCM_DMAC_CHAN'	STR($3)
+`	}'
+`}'
+`SectionData."'N_PCM($1)`_data" {'
+`	tuples "'N_PCM($1)`_tuples"'
+`}'
+`SectionWidget."'N_PCM`" {'
 `	index "'PIPELINE_ID`"'
 `	type "aif_out"'
 `	no_pm "true"'
 `	stream_name "'$1`"'
+`	data ['
+`		"'N_PCM($1)`_data"'
+`		"'N_PCM($1)`_data_w_comp"'
+`	]'
 `}')
 
 
-#W_PCM_CAPTURE(stream))
-define(`W_PCM_CAPTURE', `SectionWidget."'N_PCM`" {'
+dnl W_PCM_PLAYBACK(stream, dmac, dmac_chan, periods_sink, periods_source, preload)
+define(`W_PCM_CAPTURE',
+`SectionVendorTuples."'N_PCM($1)`_tuples_w_comp" {'
+`	tokens "sof_comp_tokens"'
+`	tuples."word" {'
+`		SOF_TKN_COMP_PERIOD_SINK_COUNT'		STR($4)
+`		SOF_TKN_COMP_PERIOD_SOURCE_COUNT'	STR($5)
+`		SOF_TKN_COMP_PRELOAD_COUNT'		STR($6)
+`	}'
+`}'
+`SectionData."'N_PCM($1)`_data_w_comp" {'
+`	tuples "'N_PCM($1)`_tuples_w_comp"'
+`}'
+`SectionVendorTuples."'N_PCM($1)`_tuples" {'
+`	tokens "sof_pcm_tokens"'
+`	tuples."word" {'
+`		SOF_TKN_PCM_DMAC'	STR($2)
+`		SOF_TKN_PCM_DMAC_CHAN'	STR($3)
+`	}'
+`}'
+`SectionData."'N_PCM($1)`_data" {'
+`	tuples "'N_PCM($1)`_tuples"'
+`}'
+`SectionWidget."'N_PCM`" {'
 `	index "'PIPELINE_ID`"'
 `	type "aif_out"'
 `	no_pm "true"'
 `	stream_name "'$1`"'
+`	data ['
+`		"'N_PCM($1)`_data"'
+`		"'N_PCM($1)`_data_w_comp"'
+`	]'
 `}')
 
-#PGA name)
+dnl PGA name)
 define(`N_PGA', `PGA'PIPELINE_ID`.'$1)
 
-#W_PGA(name))
-define(`W_PGA', `SectionWidget."'N_PGA($1)`" {'
+dnl W_PGA(name, format, periods_sink, periods_source, preload)
+define(`W_PGA',
+`SectionVendorTuples."'N_PGA($1)`_tuples_w" {'
+`	tokens "sof_comp_tokens"'
+`	tuples."word" {'
+`		SOF_TKN_COMP_PERIOD_SINK_COUNT'		STR($3)
+`		SOF_TKN_COMP_PERIOD_SOURCE_COUNT'	STR($4)
+`		SOF_TKN_COMP_PRELOAD_COUNT'		STR($5)
+`	}'
+`}'
+`SectionData."'N_PGA($1)`_data_w" {'
+`	tuples "'N_PGA($1)`_tuples_w"'
+`}'
+`SectionVendorTuples."'N_PGA($1)`_tuples_str" {'
+`	tokens "sof_comp_tokens"'
+`	tuples."string" {'
+`		SOF_TKN_COMP_FORMAT'	STR($2)
+`	}'
+`}'
+`SectionData."'N_PGA($1)`_data_str" {'
+`	tuples "'N_PGA($1)`_tuples_str"'
+`}'
+`SectionWidget."'N_PGA($1)`" {'
 `	index "'PIPELINE_ID`"'
 `	type "pga"'
 `	no_pm "true"'
+`	data ['
+`		"'N_PGA($1)`_data_w"'
+`		"'N_PGA($1)`_data_str"'
+`	]'
 `}')
 
-#Mixer Name)
+dnl Mixer Name)
 define(`N_MIXER', `MIXER'PIPELINE_ID`.'$1)
 
-#Pipe Buffer name in pipeline (pipeline, buffer)
+dnl Pipe Buffer name in pipeline (pipeline, buffer)
 define(`NPIPELINE_MIXER', `MIXER'$1`.'$2)
 
-#W_MIXER(name))
-define(`W_MIXER', `SectionWidget."'N_MIXER($1)`" {'
+dnl W_MIXER(name, format, periods_sink, periods_source, preload)
+define(`W_MIXER',
+`SectionVendorTuples."'N_MIXER($1)`_tuples_w" {'
+`	tokens "sof_comp_tokens"'
+`	tuples."word" {'
+`		SOF_TKN_COMP_PERIOD_SINK_COUNT'		STR($3)
+`		SOF_TKN_COMP_PERIOD_SOURCE_COUNT'	STR($4)
+`		SOF_TKN_COMP_PRELOAD_COUNT'		STR($5)
+`	}'
+`}'
+`SectionData."'N_MIXER($1)`_data_w" {'
+`	tuples "'N_MIXER($1)`_tuples_w"'
+`}'
+`SectionVendorTuples."'N_MIXER($1)`_tuples_str" {'
+`	tokens "sof_comp_tokens"'
+`	tuples."string" {'
+`		SOF_TKN_COMP_FORMAT'	STR($2)
+`	}'
+`}'
+`SectionData."'N_MIXER($1)`_data_str" {'
+`	tuples "'N_MIXER($1)`_tuples_str"'
+`}'
+`SectionWidget."'N_MIXER($1)`" {'
 `	index "'PIPELINE_ID`"'
 `	type "mixer"'
 `	no_pm "true"'
+`	data ['
+`		"'N_MIXER($1)`_data_w"'
+`		"'N_MIXER($1)`_data_str"'
+`	]'
 `}')
 
 
-#Tone name)
+dnl Tone name)
 define(`N_TONE', `TONE'PIPELINE_ID`.'$1)
 
-#W_TONE(name))
-define(`W_TONE', `SectionWidget."'N_TONE($1)`" {'
+dnl W_TONE(name, format, periods_sink, periods_source, preload)
+define(`W_TONE',
+`SectionVendorTuples."'N_TONE($1)`_tuples_w" {'
+`	tokens "sof_comp_tokens"'
+`	tuples."word" {'
+`		SOF_TKN_COMP_PERIOD_SINK_COUNT'		STR($3)
+`		SOF_TKN_COMP_PERIOD_SOURCE_COUNT'	STR($4)
+`		SOF_TKN_COMP_PRELOAD_COUNT'		STR($5)
+`	}'
+`}'
+`SectionData."'N_TONE($1)`_data_w" {'
+`	tuples "'N_TONE($1)`_tuples_w"'
+`}'
+`SectionVendorTuples."'N_TONE($1)`_tuples_str" {'
+`	tokens "sof_comp_tokens"'
+`	tuples."string" {'
+`		SOF_TKN_COMP_FORMAT'	STR($2)
+`	}'
+`}'
+`SectionData."'N_TONE($1)`_data_str" {'
+`	tuples "'N_TONE($1)`_tuples_str"'
+`}'
+`SectionWidget."'N_TONE($1)`" {'
 `	index "'PIPELINE_ID`"'
 `	type "siggen"'
 `	no_pm "true"'
+`	data ['
+`		"'N_TONE($1)`_data_w"'
+`		"'N_TONE($1)`_data_str"'
+`	]'
 `}')
 
-#DAI name)
+dnl DAI name)
 define(`N_DAI', DAI_NAME)
 define(`N_DAI_OUT', DAI_NAME`.OUT')
 define(`N_DAI_IN', DAI_NAME`.IN')
 
-#W_DAI_OUT(stream, data))
-define(`W_DAI_OUT', `SectionWidget."'N_DAI_OUT`" {'
+dnl W_DAI_OUT(stream, type, index, data, periods_sink, periods_source, preload)
+define(`W_DAI_OUT',
+`SectionVendorTuples."'N_DAI_IN($1)`_tuples_w_comp" {'
+`	tokens "sof_comp_tokens"'
+`	tuples."word" {'
+`		SOF_TKN_COMP_PERIOD_SINK_COUNT'		STR($5)
+`		SOF_TKN_COMP_PERIOD_SOURCE_COUNT'	STR($6)
+`		SOF_TKN_COMP_PRELOAD_COUNT'		STR($7)
+`	}'
+`}'
+`SectionData."'N_DAI_IN($1)`_data_w_comp" {'
+`	tuples "'N_DAI_IN($1)`_tuples_w_comp"'
+`}'
+`SectionVendorTuples."'N_DAI_OUT($1)`_tuples_w" {'
+`	tokens "sof_dai_tokens"'
+`	tuples."word" {'
+`		SOF_TKN_DAI_INDEX'	$3
+`	}'
+`}'
+`SectionData."'N_DAI_OUT($1)`_data_w" {'
+`	tuples "'N_DAI_OUT($1)`_tuples_w"'
+`}'
+`SectionVendorTuples."'N_DAI_OUT($1)`_tuples_str" {'
+`	tokens "sof_dai_tokens"'
+`	tuples."string" {'
+`		SOF_TKN_DAI_TYPE'	$2
+`	}'
+`}'
+`SectionData."'N_DAI_OUT($1)`_data_str" {'
+`	tuples "'N_DAI_OUT($1)`_tuples_str"'
+`}'
+`SectionWidget."'N_DAI_OUT`" {'
 `	index "'PIPELINE_ID`"'
-`	type "dai_out"'
+`	type "dai_in"'
 `	no_pm "true"'
 `	stream_name "'$1`"'
 `	data ['
-`		"'$2`"'
+`		"'N_DAI_OUT($1)`_data_w"'
+`		"'N_DAI_IN($1)`_data_w_comp"'
+`		"'N_DAI_OUT($1)`_data_str"'
+`		"'$4`"'
 `	]'
 `}')
 
-#W_DAI_IN(stream, data))
-define(`W_DAI_IN', `SectionWidget."'N_DAI_IN`" {'
+dnl W_DAI_IN(stream, type, index, data, periods_sink, periods_source, preload)
+define(`W_DAI_IN',
+`SectionVendorTuples."'N_DAI_IN($1)`_tuples_w_comp" {'
+`	tokens "sof_comp_tokens"'
+`	tuples."word" {'
+`		SOF_TKN_COMP_PERIOD_SINK_COUNT'		STR($5)
+`		SOF_TKN_COMP_PERIOD_SOURCE_COUNT'	STR($6)
+`		SOF_TKN_COMP_PRELOAD_COUNT'		STR($7)
+`	}'
+`}'
+`SectionData."'N_DAI_IN($1)`_data_w_comp" {'
+`	tuples "'N_DAI_IN($1)`_tuples_w_comp"'
+`}'
+`SectionVendorTuples."'N_DAI_IN($1)`_tuples_w" {'
+`	tokens "sof_dai_tokens"'
+`	tuples."word" {'
+`		SOF_TKN_DAI_INDEX'	$3
+`	}'
+`}'
+`SectionData."'N_DAI_IN($1)`_data_w" {'
+`	tuples "'N_DAI_IN($1)`_tuples_w"'
+`}'
+`SectionVendorTuples."'N_DAI_IN($1)`_tuples_str" {'
+`	tokens "sof_dai_tokens"'
+`	tuples."string" {'
+`		SOF_TKN_DAI_TYPE'	$2
+`	}'
+`}'
+`SectionData."'N_DAI_IN($1)`_data_str" {'
+`	tuples "'N_DAI_IN($1)`_tuples_str"'
+`}'
+`SectionWidget."'N_DAI_IN`" {'
 `	index "'PIPELINE_ID`"'
-`	type "dai_in"'
+`	type "dai_out"'
 `	no_pm "true"'
 `	stream_name "'$1`"'
 `	data ['
-`		"'$2`"'
+`		"'N_DAI_IN($1)`_data_w"'
+`		"'N_DAI_IN($1)`_data_w_comp"'
+`		"'N_DAI_IN($1)`_data_str"'
+`		"'$4`"'
 `	]'
 `}')
 
-#Pipe Buffer name in pipeline (pipeline, buffer)
+dnl Pipe Buffer name in pipeline (pipeline, buffer)
 define(`NPIPELINE_BUFFER', `BUF'$1`.'$2)
 
-#Pipeline name)
-define(`N_PIPELINE', `PIPELINE.'PIPELINE_ID)
+dnl Pipeline name)
+define(`N_PIPELINE', `PIPELINE.'PIPELINE_ID`.'$1)
 
-#W_PIPELINE(stream, deadline, platform))
+dnl W_PIPELINE(stream, deadline, priority, frames, core, platform)
 define(`W_PIPELINE',
-`SectionVendorTuples."'N_PIPELINE`_tuples" {'
+`SectionVendorTuples."'N_PIPELINE($1)`_tuples" {'
 `	tokens "sof_sched_tokens"'
 `	tuples."word" {'
-`		SOF_TKN_SCHED_DEADLINE'		$2
+`		SOF_TKN_SCHED_DEADLINE'		STR($2)
+`		SOF_TKN_SCHED_PRIORITY'		STR($3)
+`		SOF_TKN_SCHED_CORE'		STR($5)
+`		SOF_TKN_SCHED_FRAMES'		STR($4)
 `	}'
 `}'
-`SectionData."'N_PIPELINE`_data" {'
-`	tuples "'N_PIPELINE`_tuples"'
+`SectionData."'N_PIPELINE($1)`_data" {'
+`	tuples "'N_PIPELINE($1)`_tuples"'
 `}'
-`SectionWidget."'N_PIPELINE`" {'
+`SectionWidget."'N_PIPELINE($1)`" {'
 `	index "'PIPELINE_ID`"'
 `	type "scheduler"'
 `	no_pm "true"'
 `	stream_name "'$1`"'
 `	data ['
-`		"'N_PIPELINE`_data"'
-`		"'$3`"'
+`		"'N_PIPELINE($1)`_data"'
+`		"'$6`"'
 `	]'
 `}')
 
-#D_DAI(id, playback, capture, data))
+dnl D_DAI(id, playback, capture, data))
 define(`D_DAI', `SectionDAI."'N_DAI`" {'
 `	index "'PIPELINE_ID`"'
 `	id "'$1`"'
 `	playback "'$2`"'
 `	capture "'$3`"'
 `}')
+
+dnl DAI_CLOCK(clock, freq, codec_master)
+define(`DAI_CLOCK',
+	$1		STR($3)
+	$1_freq	STR($2))
+
+
+dnl DAI_TDM(slots, width, tx_mask, rx_mask)
+define(`DAI_TDM',
+`	tdm_slots	'STR($1)
+`	tdm_slot_width	'STR($2)
+`	tx_slots	'STR($3)
+`	rx_slots	'STR($4)
+)
+
+dnl DAI_CONFIG(type, idx, name, sname, format, mclk, bclk, fsync, tdm)
+define(`DAI_CONFIG',
+`SectionHWConfig."'$1$2`" {'
+`'
+`	id		"'$2`"'
+`	format		"'$5`"'
+`'
+`	'$6
+`	'$7
+`	'$8
+`	'$9
+`}'
+`'
+`SectionBE."'$3`" {'
+`	index "0"'
+`'
+`	stream_name "'$4`"'
+`	hw_configs ['
+`		"'$1$2`"'
+`	]'
+`}')
+
+dnl COMP_SAMPLE_SIZE(FMT)
+define(`COMP_SAMPLE_SIZE',
+`ifelse(
+	$1, `s16le', `2',
+	$1, `s24_4le', `4',
+	$1, `s32le', `4',
+	`4')')
+
+
+dnl COMP_BUFFER_SIZE( num_periods, sample_size, channels, fmames)
+define(`COMP_BUFFER_SIZE', `eval(`$1 * $2 * $3 * $4')')
+
+
+divert(0) dnl
-- 
2.11.0



More information about the Sound-open-firmware mailing list