Lines Matching full:graph

228  * Graph traversal
241 static void stack_push(struct media_graph *graph, in stack_push() argument
244 if (graph->top == MEDIA_ENTITY_ENUM_MAX_DEPTH - 1) { in stack_push()
248 graph->top++; in stack_push()
249 graph->stack[graph->top].link = entity->links.next; in stack_push()
250 graph->stack[graph->top].entity = entity; in stack_push()
253 static struct media_entity *stack_pop(struct media_graph *graph) in stack_pop() argument
257 entity = graph->stack[graph->top].entity; in stack_pop()
258 graph->top--; in stack_pop()
267 * media_graph_walk_init - Allocate resources for graph walk
268 * @graph: Media graph structure that will be used to walk the graph
271 * Reserve resources for graph walk in media device's current
278 struct media_graph *graph, struct media_device *mdev) in media_graph_walk_init() argument
280 return media_entity_enum_init(&graph->ent_enum, mdev); in media_graph_walk_init()
285 * media_graph_walk_cleanup - Release resources related to graph walking
286 * @graph: Media graph structure that was used to walk the graph
288 void media_graph_walk_cleanup(struct media_graph *graph) in media_graph_walk_cleanup() argument
290 media_entity_enum_cleanup(&graph->ent_enum); in media_graph_walk_cleanup()
294 void media_graph_walk_start(struct media_graph *graph, in media_graph_walk_start() argument
297 media_entity_enum_zero(&graph->ent_enum); in media_graph_walk_start()
298 media_entity_enum_set(&graph->ent_enum, entity); in media_graph_walk_start()
300 graph->top = 0; in media_graph_walk_start()
301 graph->stack[graph->top].entity = NULL; in media_graph_walk_start()
302 stack_push(graph, entity); in media_graph_walk_start()
304 "begin graph walk at '%s'\n", entity->name); in media_graph_walk_start()
308 static void media_graph_walk_iter(struct media_graph *graph) in media_graph_walk_iter() argument
310 struct media_entity *entity = stack_top(graph); in media_graph_walk_iter()
314 link = list_entry(link_top(graph), typeof(*link), list); in media_graph_walk_iter()
318 link_top(graph) = link_top(graph)->next; in media_graph_walk_iter()
330 if (media_entity_enum_test_and_set(&graph->ent_enum, next)) { in media_graph_walk_iter()
331 link_top(graph) = link_top(graph)->next; in media_graph_walk_iter()
339 link_top(graph) = link_top(graph)->next; in media_graph_walk_iter()
340 stack_push(graph, next); in media_graph_walk_iter()
345 struct media_entity *media_graph_walk_next(struct media_graph *graph) in media_graph_walk_next() argument
349 if (stack_top(graph) == NULL) in media_graph_walk_next()
357 while (link_top(graph) != &stack_top(graph)->links) in media_graph_walk_next()
358 media_graph_walk_iter(graph); in media_graph_walk_next()
360 entity = stack_pop(graph); in media_graph_walk_next()
411 struct media_graph *graph = &pipe->graph; in __media_pipeline_start() local
417 ret = media_graph_walk_init(&pipe->graph, mdev); in __media_pipeline_start()
422 media_graph_walk_start(&pipe->graph, entity); in __media_pipeline_start()
424 while ((entity = media_graph_walk_next(graph))) { in __media_pipeline_start()
503 * Link validation on graph failed. We revert what we did and in __media_pipeline_start()
506 media_graph_walk_start(graph, entity_err); in __media_pipeline_start()
508 while ((entity_err = media_graph_walk_next(graph))) { in __media_pipeline_start()
526 media_graph_walk_cleanup(graph); in __media_pipeline_start()
547 struct media_graph *graph = &entity->pipe->graph; in __media_pipeline_stop() local
557 media_graph_walk_start(graph, entity); in __media_pipeline_stop()
559 while ((entity = media_graph_walk_next(graph))) { in __media_pipeline_stop()
569 media_graph_walk_cleanup(graph); in __media_pipeline_stop()
682 /* Initialize graph object embedded at the new link */ in media_create_pad_link()
686 /* Create the backlink. Backlinks are used to help graph traversal and in media_create_pad_link()
700 /* Initialize graph object embedded at the new link */ in media_create_pad_link()
981 /* Initialize graph object embedded at the new link */ in media_create_intf_link()