| <refentry id="media-ioc-enum-links"> |
| <refmeta> |
| <refentrytitle>ioctl MEDIA_IOC_ENUM_LINKS</refentrytitle> |
| &manvol; |
| </refmeta> |
| |
| <refnamediv> |
| <refname>MEDIA_IOC_ENUM_LINKS</refname> |
| <refpurpose>Enumerate all pads and links for a given entity</refpurpose> |
| </refnamediv> |
| |
| <refsynopsisdiv> |
| <funcsynopsis> |
| <funcprototype> |
| <funcdef>int <function>ioctl</function></funcdef> |
| <paramdef>int <parameter>fd</parameter></paramdef> |
| <paramdef>int <parameter>request</parameter></paramdef> |
| <paramdef>struct media_links_enum *<parameter>argp</parameter></paramdef> |
| </funcprototype> |
| </funcsynopsis> |
| </refsynopsisdiv> |
| |
| <refsect1> |
| <title>Arguments</title> |
| |
| <variablelist> |
| <varlistentry> |
| <term><parameter>fd</parameter></term> |
| <listitem> |
| <para>File descriptor returned by |
| <link linkend='media-func-open'><function>open()</function></link>.</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><parameter>request</parameter></term> |
| <listitem> |
| <para>MEDIA_IOC_ENUM_LINKS</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><parameter>argp</parameter></term> |
| <listitem> |
| <para></para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| </refsect1> |
| |
| <refsect1> |
| <title>Description</title> |
| |
| <para>To enumerate pads and/or links for a given entity, applications set |
| the entity field of a &media-links-enum; structure and initialize the |
| &media-pad-desc; and &media-link-desc; structure arrays pointed by the |
| <structfield>pads</structfield> and <structfield>links</structfield> fields. |
| They then call the MEDIA_IOC_ENUM_LINKS ioctl with a pointer to this |
| structure.</para> |
| <para>If the <structfield>pads</structfield> field is not NULL, the driver |
| fills the <structfield>pads</structfield> array with information about the |
| entity's pads. The array must have enough room to store all the entity's |
| pads. The number of pads can be retrieved with the &MEDIA-IOC-ENUM-ENTITIES; |
| ioctl.</para> |
| <para>If the <structfield>links</structfield> field is not NULL, the driver |
| fills the <structfield>links</structfield> array with information about the |
| entity's outbound links. The array must have enough room to store all the |
| entity's outbound links. The number of outbound links can be retrieved with |
| the &MEDIA-IOC-ENUM-ENTITIES; ioctl.</para> |
| <para>Only forward links that originate at one of the entity's source pads |
| are returned during the enumeration process.</para> |
| |
| <table pgwide="1" frame="none" id="media-links-enum"> |
| <title>struct <structname>media_links_enum</structname></title> |
| <tgroup cols="3"> |
| &cs-str; |
| <tbody valign="top"> |
| <row> |
| <entry>__u32</entry> |
| <entry><structfield>entity</structfield></entry> |
| <entry>Entity id, set by the application.</entry> |
| </row> |
| <row> |
| <entry>struct &media-pad-desc;</entry> |
| <entry>*<structfield>pads</structfield></entry> |
| <entry>Pointer to a pads array allocated by the application. Ignored |
| if NULL.</entry> |
| </row> |
| <row> |
| <entry>struct &media-link-desc;</entry> |
| <entry>*<structfield>links</structfield></entry> |
| <entry>Pointer to a links array allocated by the application. Ignored |
| if NULL.</entry> |
| </row> |
| </tbody> |
| </tgroup> |
| </table> |
| |
| <table pgwide="1" frame="none" id="media-pad-desc"> |
| <title>struct <structname>media_pad_desc</structname></title> |
| <tgroup cols="3"> |
| &cs-str; |
| <tbody valign="top"> |
| <row> |
| <entry>__u32</entry> |
| <entry><structfield>entity</structfield></entry> |
| <entry>ID of the entity this pad belongs to.</entry> |
| </row> |
| <row> |
| <entry>__u16</entry> |
| <entry><structfield>index</structfield></entry> |
| <entry>0-based pad index.</entry> |
| </row> |
| <row> |
| <entry>__u32</entry> |
| <entry><structfield>flags</structfield></entry> |
| <entry>Pad flags, see <xref linkend="media-pad-flag" /> for more details.</entry> |
| </row> |
| </tbody> |
| </tgroup> |
| </table> |
| |
| <table frame="none" pgwide="1" id="media-pad-flag"> |
| <title>Media pad flags</title> |
| <tgroup cols="2"> |
| <colspec colname="c1"/> |
| <colspec colname="c2"/> |
| <tbody valign="top"> |
| <row> |
| <entry><constant>MEDIA_PAD_FL_SINK</constant></entry> |
| <entry>Input pad, relative to the entity. Input pads sink data and |
| are targets of links.</entry> |
| </row> |
| <row> |
| <entry><constant>MEDIA_PAD_FL_SOURCE</constant></entry> |
| <entry>Output pad, relative to the entity. Output pads source data |
| and are origins of links.</entry> |
| </row> |
| <row> |
| <entry><constant>MEDIA_PAD_FL_MUST_CONNECT</constant></entry> |
| <entry>If this flag is set and the pad is linked to any other |
| pad, then at least one of those links must be enabled for the |
| entity to be able to stream. There could be temporary reasons |
| (e.g. device configuration dependent) for the pad to need |
| enabled links even when this flag isn't set; the absence of the |
| flag doesn't imply there is none.</entry> |
| </row> |
| </tbody> |
| </tgroup> |
| </table> |
| |
| <table pgwide="1" frame="none" id="media-link-desc"> |
| <title>struct <structname>media_link_desc</structname></title> |
| <tgroup cols="3"> |
| &cs-str; |
| <tbody valign="top"> |
| <row> |
| <entry>struct &media-pad-desc;</entry> |
| <entry><structfield>source</structfield></entry> |
| <entry>Pad at the origin of this link.</entry> |
| </row> |
| <row> |
| <entry>struct &media-pad-desc;</entry> |
| <entry><structfield>sink</structfield></entry> |
| <entry>Pad at the target of this link.</entry> |
| </row> |
| <row> |
| <entry>__u32</entry> |
| <entry><structfield>flags</structfield></entry> |
| <entry>Link flags, see <xref linkend="media-link-flag" /> for more details.</entry> |
| </row> |
| </tbody> |
| </tgroup> |
| </table> |
| |
| <table frame="none" pgwide="1" id="media-link-flag"> |
| <title>Media link flags</title> |
| <tgroup cols="2"> |
| <colspec colname="c1"/> |
| <colspec colname="c2"/> |
| <tbody valign="top"> |
| <row> |
| <entry><constant>MEDIA_LNK_FL_ENABLED</constant></entry> |
| <entry>The link is enabled and can be used to transfer media data. |
| When two or more links target a sink pad, only one of them can be |
| enabled at a time.</entry> |
| </row> |
| <row> |
| <entry><constant>MEDIA_LNK_FL_IMMUTABLE</constant></entry> |
| <entry>The link enabled state can't be modified at runtime. An |
| immutable link is always enabled.</entry> |
| </row> |
| <row> |
| <entry><constant>MEDIA_LNK_FL_DYNAMIC</constant></entry> |
| <entry>The link enabled state can be modified during streaming. This |
| flag is set by drivers and is read-only for applications.</entry> |
| </row> |
| </tbody> |
| </tgroup> |
| </table> |
| <para>One and only one of <constant>MEDIA_PAD_FL_SINK</constant> and |
| <constant>MEDIA_PAD_FL_SOURCE</constant> must be set for every pad.</para> |
| </refsect1> |
| |
| <refsect1> |
| &return-value; |
| |
| <variablelist> |
| <varlistentry> |
| <term><errorcode>EINVAL</errorcode></term> |
| <listitem> |
| <para>The &media-links-enum; <structfield>id</structfield> references |
| a non-existing entity.</para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| </refsect1> |
| </refentry> |