| <title>DVB CA Device</title> | |
| <para>The DVB CA device controls the conditional access hardware. It can be accessed through | |
| <emphasis role="tt">/dev/dvb/adapter0/ca0</emphasis>. Data types and and ioctl definitions can be accessed by | |
| including <emphasis role="tt">linux/dvb/ca.h</emphasis> in your application. | |
| </para> | |
| <section id="ca_data_types"> | |
| <title>CA Data Types</title> | |
| <section id="ca-slot-info"> | |
| <title>ca_slot_info_t</title> | |
| <programlisting> | |
| typedef struct ca_slot_info { | |
| int num; /⋆ slot number ⋆/ | |
| int type; /⋆ CA interface this slot supports ⋆/ | |
| #define CA_CI 1 /⋆ CI high level interface ⋆/ | |
| #define CA_CI_LINK 2 /⋆ CI link layer level interface ⋆/ | |
| #define CA_CI_PHYS 4 /⋆ CI physical layer level interface ⋆/ | |
| #define CA_DESCR 8 /⋆ built-in descrambler ⋆/ | |
| #define CA_SC 128 /⋆ simple smart card interface ⋆/ | |
| unsigned int flags; | |
| #define CA_CI_MODULE_PRESENT 1 /⋆ module (or card) inserted ⋆/ | |
| #define CA_CI_MODULE_READY 2 | |
| } ca_slot_info_t; | |
| </programlisting> | |
| </section> | |
| <section id="ca-descr-info"> | |
| <title>ca_descr_info_t</title> | |
| <programlisting> | |
| typedef struct ca_descr_info { | |
| unsigned int num; /⋆ number of available descramblers (keys) ⋆/ | |
| unsigned int type; /⋆ type of supported scrambling system ⋆/ | |
| #define CA_ECD 1 | |
| #define CA_NDS 2 | |
| #define CA_DSS 4 | |
| } ca_descr_info_t; | |
| </programlisting> | |
| </section> | |
| <section id="ca-caps"> | |
| <title>ca_caps_t</title> | |
| <programlisting> | |
| typedef struct ca_caps { | |
| unsigned int slot_num; /⋆ total number of CA card and module slots ⋆/ | |
| unsigned int slot_type; /⋆ OR of all supported types ⋆/ | |
| unsigned int descr_num; /⋆ total number of descrambler slots (keys) ⋆/ | |
| unsigned int descr_type;/⋆ OR of all supported types ⋆/ | |
| } ca_cap_t; | |
| </programlisting> | |
| </section> | |
| <section id="ca-msg"> | |
| <title>ca_msg_t</title> | |
| <programlisting> | |
| /⋆ a message to/from a CI-CAM ⋆/ | |
| typedef struct ca_msg { | |
| unsigned int index; | |
| unsigned int type; | |
| unsigned int length; | |
| unsigned char msg[256]; | |
| } ca_msg_t; | |
| </programlisting> | |
| </section> | |
| <section id="ca-descr"> | |
| <title>ca_descr_t</title> | |
| <programlisting> | |
| typedef struct ca_descr { | |
| unsigned int index; | |
| unsigned int parity; | |
| unsigned char cw[8]; | |
| } ca_descr_t; | |
| </programlisting> | |
| </section> | |
| <section id="ca-pid"> | |
| <title>ca-pid</title> | |
| <programlisting> | |
| typedef struct ca_pid { | |
| unsigned int pid; | |
| int index; /⋆ -1 == disable⋆/ | |
| } ca_pid_t; | |
| </programlisting> | |
| </section></section> | |
| <section id="ca_function_calls"> | |
| <title>CA Function Calls</title> | |
| <section id="ca_fopen"> | |
| <title>open()</title> | |
| <para>DESCRIPTION | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>This system call opens a named ca device (e.g. /dev/ost/ca) for subsequent use.</para> | |
| <para>When an open() call has succeeded, the device will be ready for use. | |
| The significance of blocking or non-blocking mode is described in the | |
| documentation for functions where there is a difference. It does not affect the | |
| semantics of the open() call itself. A device opened in blocking mode can later | |
| be put into non-blocking mode (and vice versa) using the F_SETFL command | |
| of the fcntl system call. This is a standard system call, documented in the Linux | |
| manual page for fcntl. Only one user can open the CA Device in O_RDWR | |
| mode. All other attempts to open the device in this mode will fail, and an error | |
| code will be returned.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>SYNOPSIS | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>int open(const char ⋆deviceName, int flags);</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>PARAMETERS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>const char | |
| *deviceName</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Name of specific video device.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>int flags</para> | |
| </entry><entry | |
| align="char"> | |
| <para>A bit-wise OR of the following flags:</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| </entry><entry | |
| align="char"> | |
| <para>O_RDONLY read-only access</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| </entry><entry | |
| align="char"> | |
| <para>O_RDWR read/write access</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| </entry><entry | |
| align="char"> | |
| <para>O_NONBLOCK open in non-blocking mode</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| </entry><entry | |
| align="char"> | |
| <para>(blocking mode is the default)</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>RETURN VALUE</para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>ENODEV</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Device driver not loaded/available.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EINTERNAL</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Internal error.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EBUSY</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Device or resource busy.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>EINVAL</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Invalid argument.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| </section> | |
| <section id="ca_fclose"> | |
| <title>close()</title> | |
| <para>DESCRIPTION | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>This system call closes a previously opened audio device.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>SYNOPSIS | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>int close(int fd);</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>PARAMETERS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>int fd</para> | |
| </entry><entry | |
| align="char"> | |
| <para>File descriptor returned by a previous call to open().</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>RETURN VALUE</para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>EBADF</para> | |
| </entry><entry | |
| align="char"> | |
| <para>fd is not a valid open file descriptor.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| </section> | |
| <section id="CA_RESET" | |
| role="subsection"><title>CA_RESET</title> | |
| <para>DESCRIPTION | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>This ioctl is undocumented. Documentation is welcome.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>SYNOPSIS | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>int ioctl(fd, int request = CA_RESET); | |
| </para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>PARAMETERS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>int fd</para> | |
| </entry><entry | |
| align="char"> | |
| <para>File descriptor returned by a previous call to open().</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>int request</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Equals CA_RESET for this command.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| &return-value-dvb; | |
| </section> | |
| <section id="CA_GET_CAP" | |
| role="subsection"><title>CA_GET_CAP</title> | |
| <para>DESCRIPTION | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>This ioctl is undocumented. Documentation is welcome.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>SYNOPSIS | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>int ioctl(fd, int request = CA_GET_CAP, | |
| ca_caps_t *);</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>PARAMETERS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>int fd</para> | |
| </entry><entry | |
| align="char"> | |
| <para>File descriptor returned by a previous call to open().</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>int request</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Equals CA_GET_CAP for this command.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>ca_caps_t * | |
| </para> | |
| </entry><entry | |
| align="char"> | |
| <para>Undocumented.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| &return-value-dvb; | |
| </section> | |
| <section id="CA_GET_SLOT_INFO" | |
| role="subsection"><title>CA_GET_SLOT_INFO</title> | |
| <para>DESCRIPTION | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>This ioctl is undocumented. Documentation is welcome.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>SYNOPSIS | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>int ioctl(fd, int request = CA_GET_SLOT_INFO, | |
| ca_slot_info_t *);</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>PARAMETERS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>int fd</para> | |
| </entry><entry | |
| align="char"> | |
| <para>File descriptor returned by a previous call to open().</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>int request</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Equals CA_GET_SLOT_INFO for this command.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>ca_slot_info_t * | |
| </para> | |
| </entry><entry | |
| align="char"> | |
| <para>Undocumented.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| &return-value-dvb; | |
| </section> | |
| <section id="CA_GET_DESCR_INFO" | |
| role="subsection"><title>CA_GET_DESCR_INFO</title> | |
| <para>DESCRIPTION | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>This ioctl is undocumented. Documentation is welcome.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>SYNOPSIS | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>int ioctl(fd, int request = CA_GET_DESCR_INFO, | |
| ca_descr_info_t *);</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>PARAMETERS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>int fd</para> | |
| </entry><entry | |
| align="char"> | |
| <para>File descriptor returned by a previous call to open().</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>int request</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Equals CA_GET_DESCR_INFO for this command.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>ca_descr_info_t * | |
| </para> | |
| </entry><entry | |
| align="char"> | |
| <para>Undocumented.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| &return-value-dvb; | |
| </section> | |
| <section id="CA_GET_MSG" | |
| role="subsection"><title>CA_GET_MSG</title> | |
| <para>DESCRIPTION | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>This ioctl is undocumented. Documentation is welcome.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>SYNOPSIS | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>int ioctl(fd, int request = CA_GET_MSG, | |
| ca_msg_t *);</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>PARAMETERS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>int fd</para> | |
| </entry><entry | |
| align="char"> | |
| <para>File descriptor returned by a previous call to open().</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>int request</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Equals CA_GET_MSG for this command.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>ca_msg_t * | |
| </para> | |
| </entry><entry | |
| align="char"> | |
| <para>Undocumented.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| &return-value-dvb; | |
| </section> | |
| <section id="CA_SEND_MSG" | |
| role="subsection"><title>CA_SEND_MSG</title> | |
| <para>DESCRIPTION | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>This ioctl is undocumented. Documentation is welcome.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>SYNOPSIS | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>int ioctl(fd, int request = CA_SEND_MSG, | |
| ca_msg_t *);</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>PARAMETERS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>int fd</para> | |
| </entry><entry | |
| align="char"> | |
| <para>File descriptor returned by a previous call to open().</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>int request</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Equals CA_SEND_MSG for this command.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>ca_msg_t * | |
| </para> | |
| </entry><entry | |
| align="char"> | |
| <para>Undocumented.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| &return-value-dvb; | |
| </section> | |
| <section id="CA_SET_DESCR" | |
| role="subsection"><title>CA_SET_DESCR</title> | |
| <para>DESCRIPTION | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>This ioctl is undocumented. Documentation is welcome.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>SYNOPSIS | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>int ioctl(fd, int request = CA_SET_DESCR, | |
| ca_descr_t *);</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>PARAMETERS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>int fd</para> | |
| </entry><entry | |
| align="char"> | |
| <para>File descriptor returned by a previous call to open().</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>int request</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Equals CA_SET_DESCR for this command.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>ca_descr_t * | |
| </para> | |
| </entry><entry | |
| align="char"> | |
| <para>Undocumented.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| &return-value-dvb; | |
| </section> | |
| <section id="CA_SET_PID" | |
| role="subsection"><title>CA_SET_PID</title> | |
| <para>DESCRIPTION | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>This ioctl is undocumented. Documentation is welcome.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>SYNOPSIS | |
| </para> | |
| <informaltable><tgroup cols="1"><tbody><row><entry | |
| align="char"> | |
| <para>int ioctl(fd, int request = CA_SET_PID, | |
| ca_pid_t *);</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| <para>PARAMETERS | |
| </para> | |
| <informaltable><tgroup cols="2"><tbody><row><entry | |
| align="char"> | |
| <para>int fd</para> | |
| </entry><entry | |
| align="char"> | |
| <para>File descriptor returned by a previous call to open().</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>int request</para> | |
| </entry><entry | |
| align="char"> | |
| <para>Equals CA_SET_PID for this command.</para> | |
| </entry> | |
| </row><row><entry | |
| align="char"> | |
| <para>ca_pid_t * | |
| </para> | |
| </entry><entry | |
| align="char"> | |
| <para>Undocumented.</para> | |
| </entry> | |
| </row></tbody></tgroup></informaltable> | |
| &return-value-dvb; | |
| </section> | |
| </section> |