[Sound-open-firmware] [PATCH 3/6] topology: Add M4 topology pre-processor macros
Liam Girdwood
liam.r.girdwood at linux.intel.com
Thu Jul 6 17:53:02 CEST 2017
Add initial macros to simplify the construction of topology components and
pipelines.
Signed-off-by: Liam Girdwood <liam.r.girdwood at linux.intel.com>
---
topology/m4/build.m4 | 44 ++++++++++++++
topology/m4/local.m4 | 159 +++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 203 insertions(+)
create mode 100644 topology/m4/build.m4
create mode 100644 topology/m4/local.m4
diff --git a/topology/m4/build.m4 b/topology/m4/build.m4
new file mode 100644
index 0000000..0c40e4e
--- /dev/null
+++ b/topology/m4/build.m4
@@ -0,0 +1,44 @@
+#"PIPELINE_PCM_ADD(pipeline, id, pcm, pcm_buf, int_buf, frames, deadline)
+define(`PIPELINE_PCM_ADD',
+`undefine(`PCM_ID')'
+`undefine(`PIPELINE_ID')'
+`undefine(`BUF_PCM_SIZE')'
+`undefine(`BUF_INT_SIZE')'
+`undefine(`SCHEDULE_FRAMES')'
+`undefine(`SCHEDULE_DEADLINE')'
+`define(`PCM_ID', $3)'
+`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))'
+`include($1)'
+)
+
+#PIPELINE_ADD(pipeline, id), int_buf, frames, deadline)
+define(`PIPELINE_ADD',
+`undefine(`PIPELINE_ID')'
+`undefine(`BUF_INT_SIZE')'
+`undefine(`SCHEDULE_FRAMES')'
+`undefine(`SCHEDULE_DEADLINE')'
+`define(`PIPELINE_ID', $2)'
+`define(`BUF_INT_SIZE', STR($3))'
+`define(`SCHEDULE_FRAMES', STR($4))'
+`define(`SCHEDULE_DEADLINE', STR($5))'
+`include($1)'
+)
+
+#DAI_ADD(pipeline, dai_name, stream_name, win, wout))
+define(`DAI_ADD',
+`undefine(`PIPELINE_ID')'
+`undefine(`DAI_NAME')'
+`undefine(`DAI_SNAME')'
+`undefine(`IN_BUF')'
+`undefine(`OUT_BUF')'
+`define(`PIPELINE_ID', 0)'
+`define(`DAI_NAME', $2)'
+`define(`DAI_SNAME', $3)'
+`define(`IN_BUF', $4)'
+`define(`OUT_BUF', $5)'
+`include($1)'
+)
diff --git a/topology/m4/local.m4 b/topology/m4/local.m4
new file mode 100644
index 0000000..2408830
--- /dev/null
+++ b/topology/m4/local.m4
@@ -0,0 +1,159 @@
+define(`concat',`$1$2')
+
+define(`STR', `"'$1`"')
+
+#create direct DAPM/pipeline link between 2 widgets)
+define(`dapm', `"$1, , $2"')
+
+#SRC name)
+define(`N_SRC', `SRC'PIPELINE_ID`.'$1)
+
+#W_SRC(name, data))
+define(`W_SRC', `SectionWidget."'N_SRC($1)`" {'
+` index "'PIPELINE_ID`"'
+` type "src"'
+` no_pm "true"'
+` data ['
+` "'$2`"'
+` ]'
+`}')
+
+#Buffer name)
+define(`N_BUFFER', `BUF'PIPELINE_ID`.'$1)
+
+#W_BUFFER(name, size))
+define(`W_BUFFER',
+`SectionVendorTuples."'N_BUFFER($1)`_tuples" {'
+` tokens "sof_buffer_tokens"'
+` tuples."word" {'
+` SOF_TKN_BUF_SIZE' $2
+` }'
+`}'
+`SectionData."'N_BUFFER($1)`_data" {'
+` tuples "'N_BUFFER($1)`_tuples"'
+`}'
+`SectionWidget."'N_BUFFER($1)`" {'
+` index "'PIPELINE_ID`"'
+` type "buffer"'
+` no_pm "true"'
+` data ['
+` "'N_BUFFER($1)`_data"'
+` ]'
+`}')
+
+#PCM name)
+define(`N_PCM', `PCM'PCM_ID)
+
+#W_PCM_PLAYBACK(stream))
+define(`W_PCM_PLAYBACK', `SectionWidget."'N_PCM`" {'
+` index "'PIPELINE_ID`"'
+` type "aif_out"'
+` no_pm "true"'
+` stream_name "'$1`"'
+`}')
+
+
+#W_PCM_CAPTURE(stream))
+define(`W_PCM_CAPTURE', `SectionWidget."'N_PCM`" {'
+` index "'PIPELINE_ID`"'
+` type "aif_out"'
+` no_pm "true"'
+` stream_name "'$1`"'
+`}')
+
+#PGA name)
+define(`N_PGA', `PGA'PIPELINE_ID`.'$1)
+
+#W_PGA(name))
+define(`W_PGA', `SectionWidget."'N_PGA($1)`" {'
+` index "'PIPELINE_ID`"'
+` type "pga"'
+` no_pm "true"'
+`}')
+
+#Mixer Name)
+define(`N_MIXER', `MIXER'PIPELINE_ID`.'$1)
+
+#Pipe Buffer name in pipeline (pipeline, buffer)
+define(`NPIPELINE_MIXER', `MIXER'$1`.'$2)
+
+#W_MIXER(name))
+define(`W_MIXER', `SectionWidget."'N_MIXER($1)`" {'
+` index "'PIPELINE_ID`"'
+` type "mixer"'
+` no_pm "true"'
+`}')
+
+
+#Tone name)
+define(`N_TONE', `TONE'PIPELINE_ID`.'$1)
+
+#W_TONE(name))
+define(`W_TONE', `SectionWidget."'N_TONE($1)`" {'
+` index "'PIPELINE_ID`"'
+` type "siggen"'
+` no_pm "true"'
+`}')
+
+#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`" {'
+` index "'PIPELINE_ID`"'
+` type "dai_out"'
+` no_pm "true"'
+` stream_name "'$1`"'
+` data ['
+` "'$2`"'
+` ]'
+`}')
+
+#W_DAI_IN(stream, data))
+define(`W_DAI_IN', `SectionWidget."'N_DAI_IN`" {'
+` index "'PIPELINE_ID`"'
+` type "dai_in"'
+` no_pm "true"'
+` stream_name "'$1`"'
+` data ['
+` "'$2`"'
+` ]'
+`}')
+
+#Pipe Buffer name in pipeline (pipeline, buffer)
+define(`NPIPELINE_BUFFER', `BUF'$1`.'$2)
+
+#Pipeline name)
+define(`N_PIPELINE', `PIPELINE.'PIPELINE_ID)
+
+#W_PIPELINE(stream, deadline, platform))
+define(`W_PIPELINE',
+`SectionVendorTuples."'N_PIPELINE`_tuples" {'
+` tokens "sof_sched_tokens"'
+` tuples."word" {'
+` SOF_TKN_SCHED_DEADLINE' $2
+` }'
+`}'
+`SectionData."'N_PIPELINE`_data" {'
+` tuples "'N_PIPELINE`_tuples"'
+`}'
+`SectionWidget."'N_PIPELINE`" {'
+` index "'PIPELINE_ID`"'
+` type "scheduler"'
+` no_pm "true"'
+` stream_name "'$1`"'
+` data ['
+` "'N_PIPELINE`_data"'
+` "'$3`"'
+` ]'
+`}')
+
+#D_DAI(id, playback, capture, data))
+define(`D_DAI', `SectionDAI."'N_DAI`" {'
+` index "'PIPELINE_ID`"'
+` id "'$1`"'
+` playback "'$2`"'
+` capture "'$3`"'
+`}')
--
2.11.0
More information about the Sound-open-firmware
mailing list