[Sound-open-firmware] [RFC PATCH v2 03/29] Add trace level variable and set function for SOF modules.
yan.wang at linux.intel.com
yan.wang at linux.intel.com
Fri May 11 08:35:45 CEST 2018
From: Yan Wang <yan.wang at linux.intel.com>
SOF modules include comp_dev, comp_buffer and pipeline.
For trace level control based on modules, need add one variable
for every module type and set function.
Signed-off-by: Yan Wang <yan.wang at linux.intel.com>
---
Test with:
CNL nocodec
SOF master: c1f2682c210201bbbc96fce7b382b25b90d19775
SOF-Tool master: 86fe688a2b4f68a1ce87e0951686be12a00f1a3c
https://github.com/plbossart/sound/tree/topic/sof-v4.14:
d09db67c5a9d6dfc85f700669fa2e43c678c8d51
---
src/audio/buffer.c | 1 +
src/audio/component.c | 1 +
src/audio/pipeline.c | 1 +
src/include/sof/audio/buffer.h | 3 +++
src/include/sof/audio/component.h | 3 +++
src/include/sof/audio/pipeline.h | 3 +++
src/include/sof/ipc.h | 5 +++++
src/ipc/ipc.c | 34 ++++++++++++++++++++++++++++++++++
8 files changed, 51 insertions(+)
diff --git a/src/audio/buffer.c b/src/audio/buffer.c
index a4cb3dc..6aeb6a4 100644
--- a/src/audio/buffer.c
+++ b/src/audio/buffer.c
@@ -83,6 +83,7 @@ struct comp_buffer *buffer_new(struct sof_ipc_buffer *desc)
buffer->free = buffer->ipc_buffer.size;
buffer->avail = 0;
buffer->connected = 0;
+ buffer->trace_level = 1;
spinlock_init(&buffer->lock);
diff --git a/src/audio/component.c b/src/audio/component.c
index 319b401..15760b2 100644
--- a/src/audio/component.c
+++ b/src/audio/component.c
@@ -93,6 +93,7 @@ struct comp_dev *comp_new(struct sof_ipc_comp *comp)
/* init component */
memcpy(&cdev->comp, comp, sizeof(*comp));
cdev->drv = drv;
+ cdev->trace_level = 1;
spinlock_init(&cdev->lock);
list_init(&cdev->bsource_list);
list_init(&cdev->bsink_list);
diff --git a/src/audio/pipeline.c b/src/audio/pipeline.c
index 28243fc..0ed6b95 100644
--- a/src/audio/pipeline.c
+++ b/src/audio/pipeline.c
@@ -256,6 +256,7 @@ struct pipeline *pipeline_new(struct sof_ipc_pipe_new *pipe_desc,
list_init(&p->buffer_list);
spinlock_init(&p->lock);
memcpy(&p->ipc_pipe, pipe_desc, sizeof(*pipe_desc));
+ p->trace_level = 1;
return p;
}
diff --git a/src/include/sof/audio/buffer.h b/src/include/sof/audio/buffer.h
index 9193a78..171f0a4 100644
--- a/src/include/sof/audio/buffer.h
+++ b/src/include/sof/audio/buffer.h
@@ -61,6 +61,9 @@ struct comp_buffer {
void *addr; /* buffer base address */
void *end_addr; /* buffer end address */
+ /* trace level */
+ uint32_t trace_level;
+
/* IPC configuration */
struct sof_ipc_buffer ipc_buffer;
diff --git a/src/include/sof/audio/component.h b/src/include/sof/audio/component.h
index 35ed618..80a72d9 100644
--- a/src/include/sof/audio/component.h
+++ b/src/include/sof/audio/component.h
@@ -181,6 +181,9 @@ struct comp_dev {
uint32_t frame_bytes; /* frames size copied to sink in bytes */
struct pipeline *pipeline; /* pipeline we belong to */
+ /* trace level */
+ uint32_t trace_level;
+
/* common runtime configuration for downstream/upstream */
struct sof_ipc_stream_params params;
diff --git a/src/include/sof/audio/pipeline.h b/src/include/sof/audio/pipeline.h
index 57d2488..1ef53e5 100644
--- a/src/include/sof/audio/pipeline.h
+++ b/src/include/sof/audio/pipeline.h
@@ -57,6 +57,9 @@ struct pipeline {
spinlock_t lock;
struct sof_ipc_pipe_new ipc_pipe;
+ /* trace level */
+ uint32_t trace_level;
+
/* runtime status */
int32_t xrun_bytes; /* last xrun length */
uint32_t status; /* pipeline status */
diff --git a/src/include/sof/ipc.h b/src/include/sof/ipc.h
index 06425b3..67cf25f 100644
--- a/src/include/sof/ipc.h
+++ b/src/include/sof/ipc.h
@@ -172,6 +172,11 @@ int ipc_comp_connect(struct ipc *ipc,
*/
struct ipc_comp_dev *ipc_get_comp(struct ipc *ipc, uint32_t id);
+/*
+ * Set trace level for component.
+ */
+int ipc_set_comp_level(struct ipc *ipc, uint32_t id, uint32_t level);
+
/*
* Configure all DAI components attached to DAI.
*/
diff --git a/src/ipc/ipc.c b/src/ipc/ipc.c
index fbb1be6..d613d1f 100644
--- a/src/ipc/ipc.c
+++ b/src/ipc/ipc.c
@@ -78,6 +78,40 @@ struct ipc_comp_dev *ipc_get_comp(struct ipc *ipc, uint32_t id)
return NULL;
}
+int ipc_set_comp_level(struct ipc *ipc, uint32_t id, uint32_t level)
+{
+ struct ipc_comp_dev *icd;
+ struct list_item *clist;
+
+ list_for_item(clist, &ipc->comp_list) {
+ icd = container_of(clist, struct ipc_comp_dev, list);
+ switch (icd->type) {
+ case COMP_TYPE_COMPONENT:
+ if (icd->cd->comp.id == id) {
+ icd->cd->trace_level = level;
+ return 0;
+ }
+ break;
+ case COMP_TYPE_BUFFER:
+ if (icd->cb->ipc_buffer.comp.id == id) {
+ icd->cb->trace_level = level;
+ return 0;
+ }
+ break;
+ case COMP_TYPE_PIPELINE:
+ if (icd->pipeline->ipc_pipe.comp_id == id) {
+ icd->pipeline->trace_level = level;
+ return 0;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ return -EINVAL;
+}
+
int ipc_get_posn_offset(struct ipc *ipc, struct pipeline *pipe)
{
int i;
--
2.14.3
More information about the Sound-open-firmware
mailing list