1 /* 2 * Media entity 3 * 4 * Copyright (C) 2010 Nokia Corporation 5 * 6 * Contacts: Laurent Pinchart <laurent.pinchart@ideasonboard.com> 7 * Sakari Ailus <sakari.ailus@iki.fi> 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License version 2 as 11 * published by the Free Software Foundation. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 */ 18 19 #ifndef _MEDIA_ENTITY_H 20 #define _MEDIA_ENTITY_H 21 22 #include <linux/bitmap.h> 23 #include <linux/bug.h> 24 #include <linux/fwnode.h> 25 #include <linux/kernel.h> 26 #include <linux/list.h> 27 #include <linux/media.h> 28 29 /* Enums used internally at the media controller to represent graphs */ 30 31 /** 32 * enum media_gobj_type - type of a graph object 33 * 34 * @MEDIA_GRAPH_ENTITY: Identify a media entity 35 * @MEDIA_GRAPH_PAD: Identify a media pad 36 * @MEDIA_GRAPH_LINK: Identify a media link 37 * @MEDIA_GRAPH_INTF_DEVNODE: Identify a media Kernel API interface via 38 * a device node 39 */ 40 enum media_gobj_type { 41 MEDIA_GRAPH_ENTITY, 42 MEDIA_GRAPH_PAD, 43 MEDIA_GRAPH_LINK, 44 MEDIA_GRAPH_INTF_DEVNODE, 45 }; 46 47 #define MEDIA_BITS_PER_TYPE 8 48 #define MEDIA_BITS_PER_ID (32 - MEDIA_BITS_PER_TYPE) 49 #define MEDIA_ID_MASK GENMASK_ULL(MEDIA_BITS_PER_ID - 1, 0) 50 51 /* Structs to represent the objects that belong to a media graph */ 52 53 /** 54 * struct media_gobj - Define a graph object. 55 * 56 * @mdev: Pointer to the struct &media_device that owns the object 57 * @id: Non-zero object ID identifier. The ID should be unique 58 * inside a media_device, as it is composed by 59 * %MEDIA_BITS_PER_TYPE to store the type plus 60 * %MEDIA_BITS_PER_ID to store the ID 61 * @list: List entry stored in one of the per-type mdev object lists 62 * 63 * All objects on the media graph should have this struct embedded 64 */ 65 struct media_gobj { 66 struct media_device *mdev; 67 u32 id; 68 struct list_head list; 69 }; 70 71 #define MEDIA_ENTITY_ENUM_MAX_DEPTH 16 72 73 /** 74 * struct media_entity_enum - An enumeration of media entities. 75 * 76 * @bmap: Bit map in which each bit represents one entity at struct 77 * media_entity->internal_idx. 78 * @idx_max: Number of bits in bmap 79 */ 80 struct media_entity_enum { 81 unsigned long *bmap; 82 int idx_max; 83 }; 84 85 /** 86 * struct media_graph - Media graph traversal state 87 * 88 * @stack: Graph traversal stack; the stack contains information 89 * on the path the media entities to be walked and the 90 * links through which they were reached. 91 * @stack.entity: pointer to &struct media_entity at the graph. 92 * @stack.link: pointer to &struct list_head. 93 * @ent_enum: Visited entities 94 * @top: The top of the stack 95 */ 96 struct media_graph { 97 struct { 98 struct media_entity *entity; 99 struct list_head *link; 100 } stack[MEDIA_ENTITY_ENUM_MAX_DEPTH]; 101 102 struct media_entity_enum ent_enum; 103 int top; 104 }; 105 106 /** 107 * struct media_pipeline - Media pipeline related information 108 * 109 * @streaming_count: Streaming start count - streaming stop count 110 * @graph: Media graph walk during pipeline start / stop 111 */ 112 struct media_pipeline { 113 int streaming_count; 114 struct media_graph graph; 115 }; 116 117 /** 118 * struct media_link - A link object part of a media graph. 119 * 120 * @graph_obj: Embedded structure containing the media object common data 121 * @list: Linked list associated with an entity or an interface that 122 * owns the link. 123 * @gobj0: Part of a union. Used to get the pointer for the first 124 * graph_object of the link. 125 * @source: Part of a union. Used only if the first object (gobj0) is 126 * a pad. In that case, it represents the source pad. 127 * @intf: Part of a union. Used only if the first object (gobj0) is 128 * an interface. 129 * @gobj1: Part of a union. Used to get the pointer for the second 130 * graph_object of the link. 131 * @sink: Part of a union. Used only if the second object (gobj1) is 132 * a pad. In that case, it represents the sink pad. 133 * @entity: Part of a union. Used only if the second object (gobj1) is 134 * an entity. 135 * @reverse: Pointer to the link for the reverse direction of a pad to pad 136 * link. 137 * @flags: Link flags, as defined in uapi/media.h (MEDIA_LNK_FL_*) 138 * @is_backlink: Indicate if the link is a backlink. 139 */ 140 struct media_link { 141 struct media_gobj graph_obj; 142 struct list_head list; 143 union { 144 struct media_gobj *gobj0; 145 struct media_pad *source; 146 struct media_interface *intf; 147 }; 148 union { 149 struct media_gobj *gobj1; 150 struct media_pad *sink; 151 struct media_entity *entity; 152 }; 153 struct media_link *reverse; 154 unsigned long flags; 155 bool is_backlink; 156 }; 157 158 /** 159 * struct media_pad - A media pad graph object. 160 * 161 * @graph_obj: Embedded structure containing the media object common data 162 * @entity: Entity this pad belongs to 163 * @index: Pad index in the entity pads array, numbered from 0 to n 164 * @flags: Pad flags, as defined in 165 * :ref:`include/uapi/linux/media.h <media_header>` 166 * (seek for ``MEDIA_PAD_FL_*``) 167 */ 168 struct media_pad { 169 struct media_gobj graph_obj; /* must be first field in struct */ 170 struct media_entity *entity; 171 u16 index; 172 unsigned long flags; 173 }; 174 175 /** 176 * struct media_entity_operations - Media entity operations 177 * @get_fwnode_pad: Return the pad number based on a fwnode endpoint or 178 * a negative value on error. This operation can be used 179 * to map a fwnode to a media pad number. Optional. 180 * @link_setup: Notify the entity of link changes. The operation can 181 * return an error, in which case link setup will be 182 * cancelled. Optional. 183 * @link_validate: Return whether a link is valid from the entity point of 184 * view. The media_pipeline_start() function 185 * validates all links by calling this operation. Optional. 186 * 187 * .. note:: 188 * 189 * Those these callbacks are called with struct &media_device.graph_mutex 190 * mutex held. 191 */ 192 struct media_entity_operations { 193 int (*get_fwnode_pad)(struct fwnode_endpoint *endpoint); 194 int (*link_setup)(struct media_entity *entity, 195 const struct media_pad *local, 196 const struct media_pad *remote, u32 flags); 197 int (*link_validate)(struct media_link *link); 198 }; 199 200 /** 201 * enum media_entity_type - Media entity type 202 * 203 * @MEDIA_ENTITY_TYPE_BASE: 204 * The entity isn't embedded in another subsystem structure. 205 * @MEDIA_ENTITY_TYPE_VIDEO_DEVICE: 206 * The entity is embedded in a struct video_device instance. 207 * @MEDIA_ENTITY_TYPE_V4L2_SUBDEV: 208 * The entity is embedded in a struct v4l2_subdev instance. 209 * 210 * Media entity objects are often not instantiated directly, but the media 211 * entity structure is inherited by (through embedding) other subsystem-specific 212 * structures. The media entity type identifies the type of the subclass 213 * structure that implements a media entity instance. 214 * 215 * This allows runtime type identification of media entities and safe casting to 216 * the correct object type. For instance, a media entity structure instance 217 * embedded in a v4l2_subdev structure instance will have the type 218 * %MEDIA_ENTITY_TYPE_V4L2_SUBDEV and can safely be cast to a &v4l2_subdev 219 * structure using the container_of() macro. 220 */ 221 enum media_entity_type { 222 MEDIA_ENTITY_TYPE_BASE, 223 MEDIA_ENTITY_TYPE_VIDEO_DEVICE, 224 MEDIA_ENTITY_TYPE_V4L2_SUBDEV, 225 }; 226 227 /** 228 * struct media_entity - A media entity graph object. 229 * 230 * @graph_obj: Embedded structure containing the media object common data. 231 * @name: Entity name. 232 * @obj_type: Type of the object that implements the media_entity. 233 * @function: Entity main function, as defined in 234 * :ref:`include/uapi/linux/media.h <media_header>` 235 * (seek for ``MEDIA_ENT_F_*``) 236 * @flags: Entity flags, as defined in 237 * :ref:`include/uapi/linux/media.h <media_header>` 238 * (seek for ``MEDIA_ENT_FL_*``) 239 * @num_pads: Number of sink and source pads. 240 * @num_links: Total number of links, forward and back, enabled and disabled. 241 * @num_backlinks: Number of backlinks 242 * @internal_idx: An unique internal entity specific number. The numbers are 243 * re-used if entities are unregistered or registered again. 244 * @pads: Pads array with the size defined by @num_pads. 245 * @links: List of data links. 246 * @ops: Entity operations. 247 * @stream_count: Stream count for the entity. 248 * @use_count: Use count for the entity. 249 * @pipe: Pipeline this entity belongs to. 250 * @info: Union with devnode information. Kept just for backward 251 * compatibility. 252 * @info.dev: Contains device major and minor info. 253 * @info.dev.major: device node major, if the device is a devnode. 254 * @info.dev.minor: device node minor, if the device is a devnode. 255 * @major: Devnode major number (zero if not applicable). Kept just 256 * for backward compatibility. 257 * @minor: Devnode minor number (zero if not applicable). Kept just 258 * for backward compatibility. 259 * 260 * .. note:: 261 * 262 * @stream_count and @use_count reference counts must never be 263 * negative, but are signed integers on purpose: a simple ``WARN_ON(<0)`` 264 * check can be used to detect reference count bugs that would make them 265 * negative. 266 */ 267 struct media_entity { 268 struct media_gobj graph_obj; /* must be first field in struct */ 269 const char *name; 270 enum media_entity_type obj_type; 271 u32 function; 272 unsigned long flags; 273 274 u16 num_pads; 275 u16 num_links; 276 u16 num_backlinks; 277 int internal_idx; 278 279 struct media_pad *pads; 280 struct list_head links; 281 282 const struct media_entity_operations *ops; 283 284 int stream_count; 285 int use_count; 286 287 struct media_pipeline *pipe; 288 289 union { 290 struct { 291 u32 major; 292 u32 minor; 293 } dev; 294 } info; 295 }; 296 297 /** 298 * struct media_interface - A media interface graph object. 299 * 300 * @graph_obj: embedded graph object 301 * @links: List of links pointing to graph entities 302 * @type: Type of the interface as defined in 303 * :ref:`include/uapi/linux/media.h <media_header>` 304 * (seek for ``MEDIA_INTF_T_*``) 305 * @flags: Interface flags as defined in 306 * :ref:`include/uapi/linux/media.h <media_header>` 307 * (seek for ``MEDIA_INTF_FL_*``) 308 * 309 * .. note:: 310 * 311 * Currently, no flags for &media_interface is defined. 312 */ 313 struct media_interface { 314 struct media_gobj graph_obj; 315 struct list_head links; 316 u32 type; 317 u32 flags; 318 }; 319 320 /** 321 * struct media_intf_devnode - A media interface via a device node. 322 * 323 * @intf: embedded interface object 324 * @major: Major number of a device node 325 * @minor: Minor number of a device node 326 */ 327 struct media_intf_devnode { 328 struct media_interface intf; 329 330 /* Should match the fields at media_v2_intf_devnode */ 331 u32 major; 332 u32 minor; 333 }; 334 335 /** 336 * media_entity_id() - return the media entity graph object id 337 * 338 * @entity: pointer to &media_entity 339 */ 340 static inline u32 media_entity_id(struct media_entity *entity) 341 { 342 return entity->graph_obj.id; 343 } 344 345 /** 346 * media_type() - return the media object type 347 * 348 * @gobj: Pointer to the struct &media_gobj graph object 349 */ 350 static inline enum media_gobj_type media_type(struct media_gobj *gobj) 351 { 352 return gobj->id >> MEDIA_BITS_PER_ID; 353 } 354 355 /** 356 * media_id() - return the media object ID 357 * 358 * @gobj: Pointer to the struct &media_gobj graph object 359 */ 360 static inline u32 media_id(struct media_gobj *gobj) 361 { 362 return gobj->id & MEDIA_ID_MASK; 363 } 364 365 /** 366 * media_gobj_gen_id() - encapsulates type and ID on at the object ID 367 * 368 * @type: object type as define at enum &media_gobj_type. 369 * @local_id: next ID, from struct &media_device.id. 370 */ 371 static inline u32 media_gobj_gen_id(enum media_gobj_type type, u64 local_id) 372 { 373 u32 id; 374 375 id = type << MEDIA_BITS_PER_ID; 376 id |= local_id & MEDIA_ID_MASK; 377 378 return id; 379 } 380 381 /** 382 * is_media_entity_v4l2_video_device() - Check if the entity is a video_device 383 * @entity: pointer to entity 384 * 385 * Return: %true if the entity is an instance of a video_device object and can 386 * safely be cast to a struct video_device using the container_of() macro, or 387 * %false otherwise. 388 */ 389 static inline bool is_media_entity_v4l2_video_device(struct media_entity *entity) 390 { 391 return entity && entity->obj_type == MEDIA_ENTITY_TYPE_VIDEO_DEVICE; 392 } 393 394 /** 395 * is_media_entity_v4l2_subdev() - Check if the entity is a v4l2_subdev 396 * @entity: pointer to entity 397 * 398 * Return: %true if the entity is an instance of a &v4l2_subdev object and can 399 * safely be cast to a struct &v4l2_subdev using the container_of() macro, or 400 * %false otherwise. 401 */ 402 static inline bool is_media_entity_v4l2_subdev(struct media_entity *entity) 403 { 404 return entity && entity->obj_type == MEDIA_ENTITY_TYPE_V4L2_SUBDEV; 405 } 406 407 /** 408 * __media_entity_enum_init - Initialise an entity enumeration 409 * 410 * @ent_enum: Entity enumeration to be initialised 411 * @idx_max: Maximum number of entities in the enumeration 412 * 413 * Return: Returns zero on success or a negative error code. 414 */ 415 __must_check int __media_entity_enum_init(struct media_entity_enum *ent_enum, 416 int idx_max); 417 418 /** 419 * media_entity_enum_cleanup - Release resources of an entity enumeration 420 * 421 * @ent_enum: Entity enumeration to be released 422 */ 423 void media_entity_enum_cleanup(struct media_entity_enum *ent_enum); 424 425 /** 426 * media_entity_enum_zero - Clear the entire enum 427 * 428 * @ent_enum: Entity enumeration to be cleared 429 */ 430 static inline void media_entity_enum_zero(struct media_entity_enum *ent_enum) 431 { 432 bitmap_zero(ent_enum->bmap, ent_enum->idx_max); 433 } 434 435 /** 436 * media_entity_enum_set - Mark a single entity in the enum 437 * 438 * @ent_enum: Entity enumeration 439 * @entity: Entity to be marked 440 */ 441 static inline void media_entity_enum_set(struct media_entity_enum *ent_enum, 442 struct media_entity *entity) 443 { 444 if (WARN_ON(entity->internal_idx >= ent_enum->idx_max)) 445 return; 446 447 __set_bit(entity->internal_idx, ent_enum->bmap); 448 } 449 450 /** 451 * media_entity_enum_clear - Unmark a single entity in the enum 452 * 453 * @ent_enum: Entity enumeration 454 * @entity: Entity to be unmarked 455 */ 456 static inline void media_entity_enum_clear(struct media_entity_enum *ent_enum, 457 struct media_entity *entity) 458 { 459 if (WARN_ON(entity->internal_idx >= ent_enum->idx_max)) 460 return; 461 462 __clear_bit(entity->internal_idx, ent_enum->bmap); 463 } 464 465 /** 466 * media_entity_enum_test - Test whether the entity is marked 467 * 468 * @ent_enum: Entity enumeration 469 * @entity: Entity to be tested 470 * 471 * Returns %true if the entity was marked. 472 */ 473 static inline bool media_entity_enum_test(struct media_entity_enum *ent_enum, 474 struct media_entity *entity) 475 { 476 if (WARN_ON(entity->internal_idx >= ent_enum->idx_max)) 477 return true; 478 479 return test_bit(entity->internal_idx, ent_enum->bmap); 480 } 481 482 /** 483 * media_entity_enum_test_and_set - Test whether the entity is marked, 484 * and mark it 485 * 486 * @ent_enum: Entity enumeration 487 * @entity: Entity to be tested 488 * 489 * Returns %true if the entity was marked, and mark it before doing so. 490 */ 491 static inline bool 492 media_entity_enum_test_and_set(struct media_entity_enum *ent_enum, 493 struct media_entity *entity) 494 { 495 if (WARN_ON(entity->internal_idx >= ent_enum->idx_max)) 496 return true; 497 498 return __test_and_set_bit(entity->internal_idx, ent_enum->bmap); 499 } 500 501 /** 502 * media_entity_enum_empty - Test whether the entire enum is empty 503 * 504 * @ent_enum: Entity enumeration 505 * 506 * Return: %true if the entity was empty. 507 */ 508 static inline bool media_entity_enum_empty(struct media_entity_enum *ent_enum) 509 { 510 return bitmap_empty(ent_enum->bmap, ent_enum->idx_max); 511 } 512 513 /** 514 * media_entity_enum_intersects - Test whether two enums intersect 515 * 516 * @ent_enum1: First entity enumeration 517 * @ent_enum2: Second entity enumeration 518 * 519 * Return: %true if entity enumerations @ent_enum1 and @ent_enum2 intersect, 520 * otherwise %false. 521 */ 522 static inline bool media_entity_enum_intersects( 523 struct media_entity_enum *ent_enum1, 524 struct media_entity_enum *ent_enum2) 525 { 526 WARN_ON(ent_enum1->idx_max != ent_enum2->idx_max); 527 528 return bitmap_intersects(ent_enum1->bmap, ent_enum2->bmap, 529 min(ent_enum1->idx_max, ent_enum2->idx_max)); 530 } 531 532 /** 533 * gobj_to_entity - returns the struct &media_entity pointer from the 534 * @gobj contained on it. 535 * 536 * @gobj: Pointer to the struct &media_gobj graph object 537 */ 538 #define gobj_to_entity(gobj) \ 539 container_of(gobj, struct media_entity, graph_obj) 540 541 /** 542 * gobj_to_pad - returns the struct &media_pad pointer from the 543 * @gobj contained on it. 544 * 545 * @gobj: Pointer to the struct &media_gobj graph object 546 */ 547 #define gobj_to_pad(gobj) \ 548 container_of(gobj, struct media_pad, graph_obj) 549 550 /** 551 * gobj_to_link - returns the struct &media_link pointer from the 552 * @gobj contained on it. 553 * 554 * @gobj: Pointer to the struct &media_gobj graph object 555 */ 556 #define gobj_to_link(gobj) \ 557 container_of(gobj, struct media_link, graph_obj) 558 559 /** 560 * gobj_to_intf - returns the struct &media_interface pointer from the 561 * @gobj contained on it. 562 * 563 * @gobj: Pointer to the struct &media_gobj graph object 564 */ 565 #define gobj_to_intf(gobj) \ 566 container_of(gobj, struct media_interface, graph_obj) 567 568 /** 569 * intf_to_devnode - returns the struct media_intf_devnode pointer from the 570 * @intf contained on it. 571 * 572 * @intf: Pointer to struct &media_intf_devnode 573 */ 574 #define intf_to_devnode(intf) \ 575 container_of(intf, struct media_intf_devnode, intf) 576 577 /** 578 * media_gobj_create - Initialize a graph object 579 * 580 * @mdev: Pointer to the &media_device that contains the object 581 * @type: Type of the object 582 * @gobj: Pointer to the struct &media_gobj graph object 583 * 584 * This routine initializes the embedded struct &media_gobj inside a 585 * media graph object. It is called automatically if ``media_*_create`` 586 * function calls are used. However, if the object (entity, link, pad, 587 * interface) is embedded on some other object, this function should be 588 * called before registering the object at the media controller. 589 */ 590 void media_gobj_create(struct media_device *mdev, 591 enum media_gobj_type type, 592 struct media_gobj *gobj); 593 594 /** 595 * media_gobj_destroy - Stop using a graph object on a media device 596 * 597 * @gobj: Pointer to the struct &media_gobj graph object 598 * 599 * This should be called by all routines like media_device_unregister() 600 * that remove/destroy media graph objects. 601 */ 602 void media_gobj_destroy(struct media_gobj *gobj); 603 604 /** 605 * media_entity_pads_init() - Initialize the entity pads 606 * 607 * @entity: entity where the pads belong 608 * @num_pads: total number of sink and source pads 609 * @pads: Array of @num_pads pads. 610 * 611 * The pads array is managed by the entity driver and passed to 612 * media_entity_pads_init() where its pointer will be stored in the 613 * &media_entity structure. 614 * 615 * If no pads are needed, drivers could either directly fill 616 * &media_entity->num_pads with 0 and &media_entity->pads with %NULL or call 617 * this function that will do the same. 618 * 619 * As the number of pads is known in advance, the pads array is not allocated 620 * dynamically but is managed by the entity driver. Most drivers will embed the 621 * pads array in a driver-specific structure, avoiding dynamic allocation. 622 * 623 * Drivers must set the direction of every pad in the pads array before calling 624 * media_entity_pads_init(). The function will initialize the other pads fields. 625 */ 626 int media_entity_pads_init(struct media_entity *entity, u16 num_pads, 627 struct media_pad *pads); 628 629 /** 630 * media_entity_cleanup() - free resources associated with an entity 631 * 632 * @entity: entity where the pads belong 633 * 634 * This function must be called during the cleanup phase after unregistering 635 * the entity (currently, it does nothing). 636 */ 637 static inline void media_entity_cleanup(struct media_entity *entity) {}; 638 639 /** 640 * media_create_pad_link() - creates a link between two entities. 641 * 642 * @source: pointer to &media_entity of the source pad. 643 * @source_pad: number of the source pad in the pads array 644 * @sink: pointer to &media_entity of the sink pad. 645 * @sink_pad: number of the sink pad in the pads array. 646 * @flags: Link flags, as defined in 647 * :ref:`include/uapi/linux/media.h <media_header>` 648 * ( seek for ``MEDIA_LNK_FL_*``) 649 * 650 * Valid values for flags: 651 * 652 * %MEDIA_LNK_FL_ENABLED 653 * Indicates that the link is enabled and can be used to transfer media data. 654 * When two or more links target a sink pad, only one of them can be 655 * enabled at a time. 656 * 657 * %MEDIA_LNK_FL_IMMUTABLE 658 * Indicates that the link enabled state can't be modified at runtime. If 659 * %MEDIA_LNK_FL_IMMUTABLE is set, then %MEDIA_LNK_FL_ENABLED must also be 660 * set, since an immutable link is always enabled. 661 * 662 * .. note:: 663 * 664 * Before calling this function, media_entity_pads_init() and 665 * media_device_register_entity() should be called previously for both ends. 666 */ 667 __must_check int media_create_pad_link(struct media_entity *source, 668 u16 source_pad, struct media_entity *sink, 669 u16 sink_pad, u32 flags); 670 671 /** 672 * media_create_pad_links() - creates a link between two entities. 673 * 674 * @mdev: Pointer to the media_device that contains the object 675 * @source_function: Function of the source entities. Used only if @source is 676 * NULL. 677 * @source: pointer to &media_entity of the source pad. If NULL, it will use 678 * all entities that matches the @sink_function. 679 * @source_pad: number of the source pad in the pads array 680 * @sink_function: Function of the sink entities. Used only if @sink is NULL. 681 * @sink: pointer to &media_entity of the sink pad. If NULL, it will use 682 * all entities that matches the @sink_function. 683 * @sink_pad: number of the sink pad in the pads array. 684 * @flags: Link flags, as defined in include/uapi/linux/media.h. 685 * @allow_both_undefined: if %true, then both @source and @sink can be NULL. 686 * In such case, it will create a crossbar between all entities that 687 * matches @source_function to all entities that matches @sink_function. 688 * If %false, it will return 0 and won't create any link if both @source 689 * and @sink are NULL. 690 * 691 * Valid values for flags: 692 * 693 * A %MEDIA_LNK_FL_ENABLED flag indicates that the link is enabled and can be 694 * used to transfer media data. If multiple links are created and this 695 * flag is passed as an argument, only the first created link will have 696 * this flag. 697 * 698 * A %MEDIA_LNK_FL_IMMUTABLE flag indicates that the link enabled state can't 699 * be modified at runtime. If %MEDIA_LNK_FL_IMMUTABLE is set, then 700 * %MEDIA_LNK_FL_ENABLED must also be set since an immutable link is 701 * always enabled. 702 * 703 * It is common for some devices to have multiple source and/or sink entities 704 * of the same type that should be linked. While media_create_pad_link() 705 * creates link by link, this function is meant to allow 1:n, n:1 and even 706 * cross-bar (n:n) links. 707 * 708 * .. note:: 709 * 710 * Before calling this function, media_entity_pads_init() and 711 * media_device_register_entity() should be called previously for the 712 * entities to be linked. 713 */ 714 int media_create_pad_links(const struct media_device *mdev, 715 const u32 source_function, 716 struct media_entity *source, 717 const u16 source_pad, 718 const u32 sink_function, 719 struct media_entity *sink, 720 const u16 sink_pad, 721 u32 flags, 722 const bool allow_both_undefined); 723 724 void __media_entity_remove_links(struct media_entity *entity); 725 726 /** 727 * media_entity_remove_links() - remove all links associated with an entity 728 * 729 * @entity: pointer to &media_entity 730 * 731 * .. note:: 732 * 733 * This is called automatically when an entity is unregistered via 734 * media_device_register_entity(). 735 */ 736 void media_entity_remove_links(struct media_entity *entity); 737 738 /** 739 * __media_entity_setup_link - Configure a media link without locking 740 * @link: The link being configured 741 * @flags: Link configuration flags 742 * 743 * The bulk of link setup is handled by the two entities connected through the 744 * link. This function notifies both entities of the link configuration change. 745 * 746 * If the link is immutable or if the current and new configuration are 747 * identical, return immediately. 748 * 749 * The user is expected to hold link->source->parent->mutex. If not, 750 * media_entity_setup_link() should be used instead. 751 */ 752 int __media_entity_setup_link(struct media_link *link, u32 flags); 753 754 /** 755 * media_entity_setup_link() - changes the link flags properties in runtime 756 * 757 * @link: pointer to &media_link 758 * @flags: the requested new link flags 759 * 760 * The only configurable property is the %MEDIA_LNK_FL_ENABLED link flag 761 * flag to enable/disable a link. Links marked with the 762 * %MEDIA_LNK_FL_IMMUTABLE link flag can not be enabled or disabled. 763 * 764 * When a link is enabled or disabled, the media framework calls the 765 * link_setup operation for the two entities at the source and sink of the 766 * link, in that order. If the second link_setup call fails, another 767 * link_setup call is made on the first entity to restore the original link 768 * flags. 769 * 770 * Media device drivers can be notified of link setup operations by setting the 771 * &media_device.link_notify pointer to a callback function. If provided, the 772 * notification callback will be called before enabling and after disabling 773 * links. 774 * 775 * Entity drivers must implement the link_setup operation if any of their links 776 * is non-immutable. The operation must either configure the hardware or store 777 * the configuration information to be applied later. 778 * 779 * Link configuration must not have any side effect on other links. If an 780 * enabled link at a sink pad prevents another link at the same pad from 781 * being enabled, the link_setup operation must return %-EBUSY and can't 782 * implicitly disable the first enabled link. 783 * 784 * .. note:: 785 * 786 * The valid values of the flags for the link is the same as described 787 * on media_create_pad_link(), for pad to pad links or the same as described 788 * on media_create_intf_link(), for interface to entity links. 789 */ 790 int media_entity_setup_link(struct media_link *link, u32 flags); 791 792 /** 793 * media_entity_find_link - Find a link between two pads 794 * @source: Source pad 795 * @sink: Sink pad 796 * 797 * Return: returns a pointer to the link between the two entities. If no 798 * such link exists, return %NULL. 799 */ 800 struct media_link *media_entity_find_link(struct media_pad *source, 801 struct media_pad *sink); 802 803 /** 804 * media_entity_remote_pad - Find the pad at the remote end of a link 805 * @pad: Pad at the local end of the link 806 * 807 * Search for a remote pad connected to the given pad by iterating over all 808 * links originating or terminating at that pad until an enabled link is found. 809 * 810 * Return: returns a pointer to the pad at the remote end of the first found 811 * enabled link, or %NULL if no enabled link has been found. 812 */ 813 struct media_pad *media_entity_remote_pad(const struct media_pad *pad); 814 815 /** 816 * media_entity_get - Get a reference to the parent module 817 * 818 * @entity: The entity 819 * 820 * Get a reference to the parent media device module. 821 * 822 * The function will return immediately if @entity is %NULL. 823 * 824 * Return: returns a pointer to the entity on success or %NULL on failure. 825 */ 826 struct media_entity *media_entity_get(struct media_entity *entity); 827 828 /** 829 * media_entity_get_fwnode_pad - Get pad number from fwnode 830 * 831 * @entity: The entity 832 * @fwnode: Pointer to the fwnode_handle which should be used to find the pad 833 * @direction_flags: Expected direction of the pad, as defined in 834 * :ref:`include/uapi/linux/media.h <media_header>` 835 * (seek for ``MEDIA_PAD_FL_*``) 836 * 837 * This function can be used to resolve the media pad number from 838 * a fwnode. This is useful for devices which use more complex 839 * mappings of media pads. 840 * 841 * If the entity dose not implement the get_fwnode_pad() operation 842 * then this function searches the entity for the first pad that 843 * matches the @direction_flags. 844 * 845 * Return: returns the pad number on success or a negative error code. 846 */ 847 int media_entity_get_fwnode_pad(struct media_entity *entity, 848 struct fwnode_handle *fwnode, 849 unsigned long direction_flags); 850 851 /** 852 * media_graph_walk_init - Allocate resources used by graph walk. 853 * 854 * @graph: Media graph structure that will be used to walk the graph 855 * @mdev: Pointer to the &media_device that contains the object 856 */ 857 __must_check int media_graph_walk_init( 858 struct media_graph *graph, struct media_device *mdev); 859 860 /** 861 * media_graph_walk_cleanup - Release resources used by graph walk. 862 * 863 * @graph: Media graph structure that will be used to walk the graph 864 */ 865 void media_graph_walk_cleanup(struct media_graph *graph); 866 867 /** 868 * media_entity_put - Release the reference to the parent module 869 * 870 * @entity: The entity 871 * 872 * Release the reference count acquired by media_entity_get(). 873 * 874 * The function will return immediately if @entity is %NULL. 875 */ 876 void media_entity_put(struct media_entity *entity); 877 878 /** 879 * media_graph_walk_start - Start walking the media graph at a 880 * given entity 881 * 882 * @graph: Media graph structure that will be used to walk the graph 883 * @entity: Starting entity 884 * 885 * Before using this function, media_graph_walk_init() must be 886 * used to allocate resources used for walking the graph. This 887 * function initializes the graph traversal structure to walk the 888 * entities graph starting at the given entity. The traversal 889 * structure must not be modified by the caller during graph 890 * traversal. After the graph walk, the resources must be released 891 * using media_graph_walk_cleanup(). 892 */ 893 void media_graph_walk_start(struct media_graph *graph, 894 struct media_entity *entity); 895 896 /** 897 * media_graph_walk_next - Get the next entity in the graph 898 * @graph: Media graph structure 899 * 900 * Perform a depth-first traversal of the given media entities graph. 901 * 902 * The graph structure must have been previously initialized with a call to 903 * media_graph_walk_start(). 904 * 905 * Return: returns the next entity in the graph or %NULL if the whole graph 906 * have been traversed. 907 */ 908 struct media_entity *media_graph_walk_next(struct media_graph *graph); 909 910 /** 911 * media_pipeline_start - Mark a pipeline as streaming 912 * @entity: Starting entity 913 * @pipe: Media pipeline to be assigned to all entities in the pipeline. 914 * 915 * Mark all entities connected to a given entity through enabled links, either 916 * directly or indirectly, as streaming. The given pipeline object is assigned 917 * to every entity in the pipeline and stored in the media_entity pipe field. 918 * 919 * Calls to this function can be nested, in which case the same number of 920 * media_pipeline_stop() calls will be required to stop streaming. The 921 * pipeline pointer must be identical for all nested calls to 922 * media_pipeline_start(). 923 */ 924 __must_check int media_pipeline_start(struct media_entity *entity, 925 struct media_pipeline *pipe); 926 /** 927 * __media_pipeline_start - Mark a pipeline as streaming 928 * 929 * @entity: Starting entity 930 * @pipe: Media pipeline to be assigned to all entities in the pipeline. 931 * 932 * ..note:: This is the non-locking version of media_pipeline_start() 933 */ 934 __must_check int __media_pipeline_start(struct media_entity *entity, 935 struct media_pipeline *pipe); 936 937 /** 938 * media_pipeline_stop - Mark a pipeline as not streaming 939 * @entity: Starting entity 940 * 941 * Mark all entities connected to a given entity through enabled links, either 942 * directly or indirectly, as not streaming. The media_entity pipe field is 943 * reset to %NULL. 944 * 945 * If multiple calls to media_pipeline_start() have been made, the same 946 * number of calls to this function are required to mark the pipeline as not 947 * streaming. 948 */ 949 void media_pipeline_stop(struct media_entity *entity); 950 951 /** 952 * __media_pipeline_stop - Mark a pipeline as not streaming 953 * 954 * @entity: Starting entity 955 * 956 * .. note:: This is the non-locking version of media_pipeline_stop() 957 */ 958 void __media_pipeline_stop(struct media_entity *entity); 959 960 /** 961 * media_devnode_create() - creates and initializes a device node interface 962 * 963 * @mdev: pointer to struct &media_device 964 * @type: type of the interface, as given by 965 * :ref:`include/uapi/linux/media.h <media_header>` 966 * ( seek for ``MEDIA_INTF_T_*``) macros. 967 * @flags: Interface flags, as defined in 968 * :ref:`include/uapi/linux/media.h <media_header>` 969 * ( seek for ``MEDIA_INTF_FL_*``) 970 * @major: Device node major number. 971 * @minor: Device node minor number. 972 * 973 * Return: if succeeded, returns a pointer to the newly allocated 974 * &media_intf_devnode pointer. 975 * 976 * .. note:: 977 * 978 * Currently, no flags for &media_interface is defined. 979 */ 980 struct media_intf_devnode * 981 __must_check media_devnode_create(struct media_device *mdev, 982 u32 type, u32 flags, 983 u32 major, u32 minor); 984 /** 985 * media_devnode_remove() - removes a device node interface 986 * 987 * @devnode: pointer to &media_intf_devnode to be freed. 988 * 989 * When a device node interface is removed, all links to it are automatically 990 * removed. 991 */ 992 void media_devnode_remove(struct media_intf_devnode *devnode); 993 struct media_link * 994 995 /** 996 * media_create_intf_link() - creates a link between an entity and an interface 997 * 998 * @entity: pointer to %media_entity 999 * @intf: pointer to %media_interface 1000 * @flags: Link flags, as defined in 1001 * :ref:`include/uapi/linux/media.h <media_header>` 1002 * ( seek for ``MEDIA_LNK_FL_*``) 1003 * 1004 * 1005 * Valid values for flags: 1006 * 1007 * %MEDIA_LNK_FL_ENABLED 1008 * Indicates that the interface is connected to the entity hardware. 1009 * That's the default value for interfaces. An interface may be disabled if 1010 * the hardware is busy due to the usage of some other interface that it is 1011 * currently controlling the hardware. 1012 * 1013 * A typical example is an hybrid TV device that handle only one type of 1014 * stream on a given time. So, when the digital TV is streaming, 1015 * the V4L2 interfaces won't be enabled, as such device is not able to 1016 * also stream analog TV or radio. 1017 * 1018 * .. note:: 1019 * 1020 * Before calling this function, media_devnode_create() should be called for 1021 * the interface and media_device_register_entity() should be called for the 1022 * interface that will be part of the link. 1023 */ 1024 __must_check media_create_intf_link(struct media_entity *entity, 1025 struct media_interface *intf, 1026 u32 flags); 1027 /** 1028 * __media_remove_intf_link() - remove a single interface link 1029 * 1030 * @link: pointer to &media_link. 1031 * 1032 * .. note:: This is an unlocked version of media_remove_intf_link() 1033 */ 1034 void __media_remove_intf_link(struct media_link *link); 1035 1036 /** 1037 * media_remove_intf_link() - remove a single interface link 1038 * 1039 * @link: pointer to &media_link. 1040 * 1041 * .. note:: Prefer to use this one, instead of __media_remove_intf_link() 1042 */ 1043 void media_remove_intf_link(struct media_link *link); 1044 1045 /** 1046 * __media_remove_intf_links() - remove all links associated with an interface 1047 * 1048 * @intf: pointer to &media_interface 1049 * 1050 * .. note:: This is an unlocked version of media_remove_intf_links(). 1051 */ 1052 void __media_remove_intf_links(struct media_interface *intf); 1053 1054 /** 1055 * media_remove_intf_links() - remove all links associated with an interface 1056 * 1057 * @intf: pointer to &media_interface 1058 * 1059 * .. note:: 1060 * 1061 * #) This is called automatically when an entity is unregistered via 1062 * media_device_register_entity() and by media_devnode_remove(). 1063 * 1064 * #) Prefer to use this one, instead of __media_remove_intf_links(). 1065 */ 1066 void media_remove_intf_links(struct media_interface *intf); 1067 1068 /** 1069 * media_entity_call - Calls a struct media_entity_operations operation on 1070 * an entity 1071 * 1072 * @entity: entity where the @operation will be called 1073 * @operation: type of the operation. Should be the name of a member of 1074 * struct &media_entity_operations. 1075 * 1076 * This helper function will check if @operation is not %NULL. On such case, 1077 * it will issue a call to @operation\(@entity, @args\). 1078 */ 1079 1080 #define media_entity_call(entity, operation, args...) \ 1081 (((entity)->ops && (entity)->ops->operation) ? \ 1082 (entity)->ops->operation((entity) , ##args) : -ENOIOCTLCMD) 1083 1084 #endif 1085