Lines Matching refs:graph

41 	struct audioreach_graph *graph;  in q6apm_get_audioreach_graph()  local
45 graph = idr_find(&apm->graph_idr, graph_id); in q6apm_get_audioreach_graph()
48 if (graph) { in q6apm_get_audioreach_graph()
49 kref_get(&graph->refcount); in q6apm_get_audioreach_graph()
50 return graph; in q6apm_get_audioreach_graph()
58 graph = kzalloc(sizeof(*graph), GFP_KERNEL); in q6apm_get_audioreach_graph()
59 if (!graph) in q6apm_get_audioreach_graph()
62 graph->apm = apm; in q6apm_get_audioreach_graph()
63 graph->info = info; in q6apm_get_audioreach_graph()
64 graph->id = graph_id; in q6apm_get_audioreach_graph()
66 graph->graph = audioreach_alloc_graph_pkt(apm, &info->sg_list, graph_id); in q6apm_get_audioreach_graph()
67 if (IS_ERR(graph->graph)) { in q6apm_get_audioreach_graph()
68 void *err = graph->graph; in q6apm_get_audioreach_graph()
70 kfree(graph); in q6apm_get_audioreach_graph()
75 id = idr_alloc(&apm->graph_idr, graph, graph_id, graph_id + 1, GFP_KERNEL); in q6apm_get_audioreach_graph()
78 kfree(graph); in q6apm_get_audioreach_graph()
84 kref_init(&graph->refcount); in q6apm_get_audioreach_graph()
86 q6apm_send_cmd_sync(apm, graph->graph, 0); in q6apm_get_audioreach_graph()
88 return graph; in q6apm_get_audioreach_graph()
91 static int audioreach_graph_mgmt_cmd(struct audioreach_graph *graph, uint32_t opcode) in audioreach_graph_mgmt_cmd() argument
93 struct audioreach_graph_info *info = graph->info; in audioreach_graph_mgmt_cmd()
98 struct q6apm *apm = graph->apm; in audioreach_graph_mgmt_cmd()
129 struct audioreach_graph *graph; in q6apm_put_audioreach_graph() local
132 graph = container_of(ref, struct audioreach_graph, refcount); in q6apm_put_audioreach_graph()
133 apm = graph->apm; in q6apm_put_audioreach_graph()
135 audioreach_graph_mgmt_cmd(graph, APM_CMD_GRAPH_CLOSE); in q6apm_put_audioreach_graph()
138 graph = idr_remove(&apm->graph_idr, graph->id); in q6apm_put_audioreach_graph()
141 kfree(graph->graph); in q6apm_put_audioreach_graph()
142 kfree(graph); in q6apm_put_audioreach_graph()
261 int q6apm_graph_media_format_shmem(struct q6apm_graph *graph, in q6apm_graph_media_format_shmem() argument
267 module = q6apm_find_module_by_mid(graph, MODULE_ID_RD_SHARED_MEM_EP); in q6apm_graph_media_format_shmem()
269 module = q6apm_find_module_by_mid(graph, MODULE_ID_WR_SHARED_MEM_EP); in q6apm_graph_media_format_shmem()
274 audioreach_set_media_format(graph, module, cfg); in q6apm_graph_media_format_shmem()
281 int q6apm_map_memory_regions(struct q6apm_graph *graph, unsigned int dir, phys_addr_t phys, in q6apm_map_memory_regions() argument
290 data = &graph->rx_data; in q6apm_map_memory_regions()
292 data = &graph->tx_data; in q6apm_map_memory_regions()
294 mutex_lock(&graph->lock); in q6apm_map_memory_regions()
297 mutex_unlock(&graph->lock); in q6apm_map_memory_regions()
303 mutex_unlock(&graph->lock); in q6apm_map_memory_regions()
308 data = &graph->rx_data; in q6apm_map_memory_regions()
310 data = &graph->tx_data; in q6apm_map_memory_regions()
325 mutex_unlock(&graph->lock); in q6apm_map_memory_regions()
327 rc = audioreach_map_memory_regions(graph, dir, period_sz, periods, 1); in q6apm_map_memory_regions()
329 dev_err(graph->dev, "Memory_map_regions failed\n"); in q6apm_map_memory_regions()
330 audioreach_graph_free_buf(graph); in q6apm_map_memory_regions()
337 int q6apm_unmap_memory_regions(struct q6apm_graph *graph, unsigned int dir) in q6apm_unmap_memory_regions() argument
345 data = &graph->rx_data; in q6apm_unmap_memory_regions()
347 data = &graph->tx_data; in q6apm_unmap_memory_regions()
353 graph->port->id); in q6apm_unmap_memory_regions()
360 rc = audioreach_graph_send_cmd_sync(graph, pkt, APM_CMD_SHARED_MEM_UNMAP_REGIONS); in q6apm_unmap_memory_regions()
363 audioreach_graph_free_buf(graph); in q6apm_unmap_memory_regions()
369 int q6apm_graph_media_format_pcm(struct q6apm_graph *graph, struct audioreach_module_config *cfg) in q6apm_graph_media_format_pcm() argument
371 struct audioreach_graph_info *info = graph->info; in q6apm_graph_media_format_pcm()
383 audioreach_set_media_format(graph, module, cfg); in q6apm_graph_media_format_pcm()
393 static int q6apm_graph_get_tx_shmem_module_iid(struct q6apm_graph *graph) in q6apm_graph_get_tx_shmem_module_iid() argument
397 module = q6apm_find_module_by_mid(graph, MODULE_ID_RD_SHARED_MEM_EP); in q6apm_graph_get_tx_shmem_module_iid()
405 int q6apm_graph_get_rx_shmem_module_iid(struct q6apm_graph *graph) in q6apm_graph_get_rx_shmem_module_iid() argument
409 module = q6apm_find_module_by_mid(graph, MODULE_ID_WR_SHARED_MEM_EP); in q6apm_graph_get_rx_shmem_module_iid()
418 int q6apm_write_async(struct q6apm_graph *graph, uint32_t len, uint32_t msw_ts, in q6apm_write_async() argument
426 iid = q6apm_graph_get_rx_shmem_module_iid(graph); in q6apm_write_async()
428 graph->rx_data.dsp_buf | (len << APM_WRITE_TOKEN_LEN_SHIFT), in q6apm_write_async()
429 graph->port->id, iid); in q6apm_write_async()
435 mutex_lock(&graph->lock); in q6apm_write_async()
436 ab = &graph->rx_data.buf[graph->rx_data.dsp_buf]; in q6apm_write_async()
443 write_buffer->mem_map_handle = graph->rx_data.mem_map_handle; in q6apm_write_async()
446 graph->rx_data.dsp_buf++; in q6apm_write_async()
448 if (graph->rx_data.dsp_buf >= graph->rx_data.num_periods) in q6apm_write_async()
449 graph->rx_data.dsp_buf = 0; in q6apm_write_async()
451 mutex_unlock(&graph->lock); in q6apm_write_async()
453 rc = gpr_send_port_pkt(graph->port, pkt); in q6apm_write_async()
461 int q6apm_read(struct q6apm_graph *graph) in q6apm_read() argument
469 iid = q6apm_graph_get_tx_shmem_module_iid(graph); in q6apm_read()
471 graph->tx_data.dsp_buf, graph->port->id, iid); in q6apm_read()
477 mutex_lock(&graph->lock); in q6apm_read()
478 port = &graph->tx_data; in q6apm_read()
491 mutex_unlock(&graph->lock); in q6apm_read()
493 rc = gpr_send_port_pkt(graph->port, pkt); in q6apm_read()
506 struct q6apm_graph *graph = priv; in graph_callback() local
508 struct device *dev = graph->dev; in graph_callback()
518 mutex_lock(&graph->lock); in graph_callback()
522 phys = graph->rx_data.buf[token].phys; in graph_callback()
523 mutex_unlock(&graph->lock); in graph_callback()
527 graph->result.opcode = hdr->opcode; in graph_callback()
528 graph->result.status = done->status; in graph_callback()
529 if (graph->cb) in graph_callback()
530 graph->cb(client_event, hdr->token, data->payload, graph->priv); in graph_callback()
538 graph->result.opcode = hdr->opcode; in graph_callback()
539 graph->result.status = 0; in graph_callback()
543 graph->rx_data.mem_map_handle = rsp->mem_map_handle; in graph_callback()
545 graph->tx_data.mem_map_handle = rsp->mem_map_handle; in graph_callback()
547 wake_up(&graph->cmd_wait); in graph_callback()
551 mutex_lock(&graph->lock); in graph_callback()
553 phys = graph->tx_data.buf[hdr->token].phys; in graph_callback()
554 mutex_unlock(&graph->lock); in graph_callback()
558 graph->result.opcode = hdr->opcode; in graph_callback()
559 graph->result.status = rd_done->status; in graph_callback()
560 if (graph->cb) in graph_callback()
561 graph->cb(client_event, hdr->token, data->payload, graph->priv); in graph_callback()
572 graph->result.opcode = result->opcode; in graph_callback()
573 graph->result.status = 0; in graph_callback()
575 graph->rx_data.mem_map_handle = 0; in graph_callback()
577 graph->tx_data.mem_map_handle = 0; in graph_callback()
579 wake_up(&graph->cmd_wait); in graph_callback()
584 graph->result.opcode = result->opcode; in graph_callback()
585 graph->result.status = result->status; in graph_callback()
589 wake_up(&graph->cmd_wait); in graph_callback()
606 struct q6apm_graph *graph; in q6apm_graph_open() local
615 graph = kzalloc(sizeof(*graph), GFP_KERNEL); in q6apm_graph_open()
616 if (!graph) { in q6apm_graph_open()
621 graph->apm = apm; in q6apm_graph_open()
622 graph->priv = priv; in q6apm_graph_open()
623 graph->cb = cb; in q6apm_graph_open()
624 graph->info = ar_graph->info; in q6apm_graph_open()
625 graph->ar_graph = ar_graph; in q6apm_graph_open()
626 graph->id = ar_graph->id; in q6apm_graph_open()
627 graph->dev = dev; in q6apm_graph_open()
629 mutex_init(&graph->lock); in q6apm_graph_open()
630 init_waitqueue_head(&graph->cmd_wait); in q6apm_graph_open()
632 graph->port = gpr_alloc_port(apm->gdev, dev, graph_callback, graph); in q6apm_graph_open()
633 if (!graph->port) { in q6apm_graph_open()
634 kfree(graph); in q6apm_graph_open()
639 return graph; in q6apm_graph_open()
646 int q6apm_graph_close(struct q6apm_graph *graph) in q6apm_graph_close() argument
648 struct audioreach_graph *ar_graph = graph->ar_graph; in q6apm_graph_close()
650 gpr_free_port(graph->port); in q6apm_graph_close()
652 kfree(graph); in q6apm_graph_close()
658 int q6apm_graph_prepare(struct q6apm_graph *graph) in q6apm_graph_prepare() argument
660 return audioreach_graph_mgmt_cmd(graph->ar_graph, APM_CMD_GRAPH_PREPARE); in q6apm_graph_prepare()
664 int q6apm_graph_start(struct q6apm_graph *graph) in q6apm_graph_start() argument
666 struct audioreach_graph *ar_graph = graph->ar_graph; in q6apm_graph_start()
678 int q6apm_graph_stop(struct q6apm_graph *graph) in q6apm_graph_stop() argument
680 struct audioreach_graph *ar_graph = graph->ar_graph; in q6apm_graph_stop()
689 int q6apm_graph_flush(struct q6apm_graph *graph) in q6apm_graph_flush() argument
691 return audioreach_graph_mgmt_cmd(graph->ar_graph, APM_CMD_GRAPH_FLUSH); in q6apm_graph_flush()
749 struct audioreach_module *q6apm_find_module_by_mid(struct q6apm_graph *graph, uint32_t mid) in q6apm_find_module_by_mid() argument
751 struct audioreach_graph_info *info = graph->info; in q6apm_find_module_by_mid()
752 struct q6apm *apm = graph->apm; in q6apm_find_module_by_mid()