Lines Matching refs:graph

43 	struct audioreach_graph *graph;
47 graph = idr_find(&apm->graph_idr, graph_id);
50 if (graph) {
51 kref_get(&graph->refcount);
52 return graph;
60 graph = kzalloc(sizeof(*graph), GFP_KERNEL);
61 if (!graph)
64 graph->apm = apm;
65 graph->info = info;
66 graph->id = graph_id;
68 graph->graph = audioreach_alloc_graph_pkt(apm, info);
69 if (IS_ERR(graph->graph)) {
70 void *err = graph->graph;
72 kfree(graph);
77 id = idr_alloc(&apm->graph_idr, graph, graph_id, graph_id + 1, GFP_KERNEL);
79 dev_err(apm->dev, "Unable to allocate graph id (%d)\n", graph_id);
80 kfree(graph->graph);
81 kfree(graph);
87 kref_init(&graph->refcount);
89 q6apm_send_cmd_sync(apm, graph->graph, 0);
91 return graph;
94 static int audioreach_graph_mgmt_cmd(struct audioreach_graph *graph, uint32_t opcode)
96 struct audioreach_graph_info *info = graph->info;
101 struct q6apm *apm = graph->apm;
132 struct audioreach_graph *graph;
135 graph = container_of(ref, struct audioreach_graph, refcount);
136 apm = graph->apm;
138 audioreach_graph_mgmt_cmd(graph, APM_CMD_GRAPH_CLOSE);
141 graph = idr_remove(&apm->graph_idr, graph->id);
144 kfree(graph->graph);
145 kfree(graph);
193 int q6apm_graph_media_format_shmem(struct q6apm_graph *graph,
199 module = q6apm_find_module_by_mid(graph, MODULE_ID_RD_SHARED_MEM_EP);
201 module = q6apm_find_module_by_mid(graph, MODULE_ID_WR_SHARED_MEM_EP);
206 audioreach_set_media_format(graph, module, cfg);
213 int q6apm_map_memory_regions(struct q6apm_graph *graph, unsigned int dir, phys_addr_t phys,
222 data = &graph->rx_data;
224 data = &graph->tx_data;
226 mutex_lock(&graph->lock);
229 mutex_unlock(&graph->lock);
235 mutex_unlock(&graph->lock);
240 data = &graph->rx_data;
242 data = &graph->tx_data;
257 mutex_unlock(&graph->lock);
259 rc = audioreach_map_memory_regions(graph, dir, period_sz, periods, 1);
261 dev_err(graph->dev, "Memory_map_regions failed\n");
262 audioreach_graph_free_buf(graph);
269 int q6apm_unmap_memory_regions(struct q6apm_graph *graph, unsigned int dir)
277 data = &graph->rx_data;
279 data = &graph->tx_data;
285 graph->port->id);
292 rc = audioreach_graph_send_cmd_sync(graph, pkt, APM_CMD_SHARED_MEM_UNMAP_REGIONS);
295 audioreach_graph_free_buf(graph);
301 int q6apm_remove_initial_silence(struct device *dev, struct q6apm_graph *graph, uint32_t samples)
305 module = q6apm_find_module_by_mid(graph, MODULE_ID_PLACEHOLDER_DECODER);
309 return audioreach_send_u32_param(graph, module, PARAM_ID_REMOVE_INITIAL_SILENCE, samples);
313 int q6apm_remove_trailing_silence(struct device *dev, struct q6apm_graph *graph, uint32_t samples)
317 module = q6apm_find_module_by_mid(graph, MODULE_ID_PLACEHOLDER_DECODER);
321 return audioreach_send_u32_param(graph, module, PARAM_ID_REMOVE_TRAILING_SILENCE, samples);
325 int q6apm_enable_compress_module(struct device *dev, struct q6apm_graph *graph, bool en)
329 module = q6apm_find_module_by_mid(graph, MODULE_ID_PLACEHOLDER_DECODER);
333 return audioreach_send_u32_param(graph, module, PARAM_ID_MODULE_ENABLE, en);
337 int q6apm_set_real_module_id(struct device *dev, struct q6apm_graph *graph,
343 module = q6apm_find_module_by_mid(graph, MODULE_ID_PLACEHOLDER_DECODER);
361 return audioreach_send_u32_param(graph, module, PARAM_ID_REAL_MODULE_ID,
366 int q6apm_graph_media_format_pcm(struct q6apm_graph *graph, struct audioreach_module_config *cfg)
368 struct audioreach_graph_info *info = graph->info;
380 audioreach_set_media_format(graph, module, cfg);
390 static int q6apm_graph_get_tx_shmem_module_iid(struct q6apm_graph *graph)
394 module = q6apm_find_module_by_mid(graph, MODULE_ID_RD_SHARED_MEM_EP);
402 int q6apm_graph_get_rx_shmem_module_iid(struct q6apm_graph *graph)
406 module = q6apm_find_module_by_mid(graph, MODULE_ID_WR_SHARED_MEM_EP);
415 int q6apm_write_async(struct q6apm_graph *graph, uint32_t len, uint32_t msw_ts,
423 iid = q6apm_graph_get_rx_shmem_module_iid(graph);
425 graph->rx_data.dsp_buf | (len << APM_WRITE_TOKEN_LEN_SHIFT),
426 graph->port->id, iid);
432 mutex_lock(&graph->lock);
433 ab = &graph->rx_data.buf[graph->rx_data.dsp_buf];
440 write_buffer->mem_map_handle = graph->rx_data.mem_map_handle;
443 graph->rx_data.dsp_buf++;
445 if (graph->rx_data.dsp_buf >= graph->rx_data.num_periods)
446 graph->rx_data.dsp_buf = 0;
448 mutex_unlock(&graph->lock);
450 rc = gpr_send_port_pkt(graph->port, pkt);
458 int q6apm_read(struct q6apm_graph *graph)
466 iid = q6apm_graph_get_tx_shmem_module_iid(graph);
468 graph->tx_data.dsp_buf, graph->port->id, iid);
474 mutex_lock(&graph->lock);
475 port = &graph->tx_data;
488 mutex_unlock(&graph->lock);
490 rc = gpr_send_port_pkt(graph->port, pkt);
503 struct q6apm_graph *graph = priv;
505 struct device *dev = graph->dev;
514 if (!graph->ar_graph)
517 mutex_lock(&graph->lock);
521 phys = graph->rx_data.buf[token].phys;
522 mutex_unlock(&graph->lock);
526 graph->result.opcode = hdr->opcode;
527 graph->result.status = done->status;
528 if (graph->cb)
529 graph->cb(client_event, hdr->token, data->payload, graph->priv);
537 graph->result.opcode = hdr->opcode;
538 graph->result.status = 0;
542 graph->rx_data.mem_map_handle = rsp->mem_map_handle;
544 graph->tx_data.mem_map_handle = rsp->mem_map_handle;
546 wake_up(&graph->cmd_wait);
549 if (!graph->ar_graph)
552 mutex_lock(&graph->lock);
554 phys = graph->tx_data.buf[hdr->token].phys;
555 mutex_unlock(&graph->lock);
559 graph->result.opcode = hdr->opcode;
560 graph->result.status = rd_done->status;
561 if (graph->cb)
562 graph->cb(client_event, hdr->token, data->payload, graph->priv);
570 if (graph->cb)
571 graph->cb(client_event, hdr->token, data->payload, graph->priv);
576 graph->result.opcode = result->opcode;
577 graph->result.status = 0;
579 graph->rx_data.mem_map_handle = 0;
581 graph->tx_data.mem_map_handle = 0;
583 wake_up(&graph->cmd_wait);
588 graph->result.opcode = result->opcode;
589 graph->result.status = result->status;
593 wake_up(&graph->cmd_wait);
610 struct q6apm_graph *graph;
615 dev_err(dev, "No graph found with id %d\n", graph_id);
619 graph = kzalloc(sizeof(*graph), GFP_KERNEL);
620 if (!graph) {
625 graph->apm = apm;
626 graph->priv = priv;
627 graph->cb = cb;
628 graph->info = ar_graph->info;
629 graph->ar_graph = ar_graph;
630 graph->id = ar_graph->id;
631 graph->dev = dev;
633 mutex_init(&graph->lock);
634 init_waitqueue_head(&graph->cmd_wait);
636 graph->port = gpr_alloc_port(apm->gdev, dev, graph_callback, graph);
637 if (IS_ERR(graph->port)) {
638 ret = PTR_ERR(graph->port);
642 return graph;
645 kfree(graph);
652 int q6apm_graph_close(struct q6apm_graph *graph)
654 struct audioreach_graph *ar_graph = graph->ar_graph;
656 graph->ar_graph = NULL;
658 gpr_free_port(graph->port);
659 kfree(graph);
665 int q6apm_graph_prepare(struct q6apm_graph *graph)
667 return audioreach_graph_mgmt_cmd(graph->ar_graph, APM_CMD_GRAPH_PREPARE);
671 int q6apm_graph_start(struct q6apm_graph *graph)
673 struct audioreach_graph *ar_graph = graph->ar_graph;
685 int q6apm_graph_stop(struct q6apm_graph *graph)
687 struct audioreach_graph *ar_graph = graph->ar_graph;
696 int q6apm_graph_flush(struct q6apm_graph *graph)
698 return audioreach_graph_mgmt_cmd(graph->ar_graph, APM_CMD_GRAPH_FLUSH);
759 struct audioreach_module *q6apm_find_module_by_mid(struct q6apm_graph *graph, uint32_t mid)
761 struct audioreach_graph_info *info = graph->info;
762 struct q6apm *apm = graph->apm;