blob: 35f33f1f9e2af369bd3a38dc2b636dea52c9fb0e [file] [log] [blame]
Mauro Carvalho Chehabf2ac8ce2018-08-30 10:20:04 -04001.. SPDX-License-Identifier: GPL-2.0
2
Mauro Carvalho Chehabc1eaa6c2016-07-17 12:48:43 -03003Digital TV Conditional Access Interface (CI API)
4================================================
5
6
7.. note::
8
9 This documentation is outdated.
10
11This document describes the usage of the high level CI API as
Johannes Stezenbach50b215a2005-05-16 21:54:41 -070012in accordance to the Linux DVB API. This is a not a documentation for the,
13existing low level CI API.
Johannes Stezenbach50b215a2005-05-16 21:54:41 -070014
Mauro Carvalho Chehabc1eaa6c2016-07-17 12:48:43 -030015.. note::
Johannes Stezenbach50b215a2005-05-16 21:54:41 -070016
Mauro Carvalho Chehabc1eaa6c2016-07-17 12:48:43 -030017 For the Twinhan/Twinhan clones, the dst_ca module handles the CI
18 hardware handling.This module is loaded automatically if a CI
19 (Common Interface, that holds the CAM (Conditional Access Module)
20 is detected.
Johannes Stezenbach50b215a2005-05-16 21:54:41 -070021
Mauro Carvalho Chehabc1eaa6c2016-07-17 12:48:43 -030022ca_zap
23~~~~~~
24
Masahiro Yamada9332ef92017-02-27 14:28:47 -080025A userspace application, like ``ca_zap`` is required to handle encrypted
Mauro Carvalho Chehabc1eaa6c2016-07-17 12:48:43 -030026MPEG-TS streams.
27
28The ``ca_zap`` userland application is in charge of sending the
29descrambling related information to the Conditional Access Module (CAM).
Johannes Stezenbach50b215a2005-05-16 21:54:41 -070030
31This application requires the following to function properly as of now.
32
Mauro Carvalho Chehabc1eaa6c2016-07-17 12:48:43 -030033a) Tune to a valid channel, with szap.
Johannes Stezenbach50b215a2005-05-16 21:54:41 -070034
Mauro Carvalho Chehabc1eaa6c2016-07-17 12:48:43 -030035 eg: $ szap -c channels.conf -r "TMC" -x
Johannes Stezenbach50b215a2005-05-16 21:54:41 -070036
Mauro Carvalho Chehabc1eaa6c2016-07-17 12:48:43 -030037b) a channels.conf containing a valid PMT PID
Johannes Stezenbach50b215a2005-05-16 21:54:41 -070038
Mauro Carvalho Chehabc1eaa6c2016-07-17 12:48:43 -030039 eg: TMC:11996:h:0:27500:278:512:650:321
Johannes Stezenbach50b215a2005-05-16 21:54:41 -070040
Mauro Carvalho Chehabc1eaa6c2016-07-17 12:48:43 -030041 here 278 is a valid PMT PID. the rest of the values are the
42 same ones that szap uses.
Johannes Stezenbach50b215a2005-05-16 21:54:41 -070043
Mauro Carvalho Chehabc1eaa6c2016-07-17 12:48:43 -030044c) after running a szap, you have to run ca_zap, for the
45 descrambler to function,
46
47 eg: $ ca_zap channels.conf "TMC"
48
49d) Hopefully enjoy your favourite subscribed channel as you do with
50 a FTA card.
51
52.. note::
53
54 Currently ca_zap, and dst_test, both are meant for demonstration
Johannes Stezenbach50b215a2005-05-16 21:54:41 -070055 purposes only, they can become full fledged applications if necessary.
56
57
Mauro Carvalho Chehabc1eaa6c2016-07-17 12:48:43 -030058Cards that fall in this category
59~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
60
Francis Galieguea33f3222010-04-23 00:08:02 +020061At present the cards that fall in this category are the Twinhan and its
Johannes Stezenbach50b215a2005-05-16 21:54:41 -070062clones, these cards are available as VVMER, Tomato, Hercules, Orange and
63so on.
64
Mauro Carvalho Chehabc1eaa6c2016-07-17 12:48:43 -030065CI modules that are supported
66~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67
Lucas De Marchi25985ed2011-03-30 22:57:33 -030068The CI module support is largely dependent upon the firmware on the cards
Johannes Stezenbach50b215a2005-05-16 21:54:41 -070069Some cards do support almost all of the available CI modules. There is
70nothing much that can be done in order to make additional CI modules
71working with these cards.
72
73Modules that have been tested by this driver at present are
74
75(1) Irdeto 1 and 2 from SCM
76(2) Viaccess from SCM
77(3) Dragoncam
78
Mauro Carvalho Chehabc1eaa6c2016-07-17 12:48:43 -030079The High level CI API
80~~~~~~~~~~~~~~~~~~~~~
Johannes Stezenbach50b215a2005-05-16 21:54:41 -070081
Mauro Carvalho Chehabc1eaa6c2016-07-17 12:48:43 -030082For the programmer
83^^^^^^^^^^^^^^^^^^
84
Johannes Stezenbach50b215a2005-05-16 21:54:41 -070085With the High Level CI approach any new card with almost any random
86architecture can be implemented with this style, the definitions
Matt LaPlante2fe0ae72006-10-03 22:50:39 +020087inside the switch statement can be easily adapted for any card, thereby
Johannes Stezenbach50b215a2005-05-16 21:54:41 -070088eliminating the need for any additional ioctls.
89
90The disadvantage is that the driver/hardware has to manage the rest. For
91the application programmer it would be as simple as sending/receiving an
92array to/from the CI ioctls as defined in the Linux DVB API. No changes
Matt LaPlante4ae0edc2006-11-30 04:58:40 +010093have been made in the API to accommodate this feature.
Johannes Stezenbach50b215a2005-05-16 21:54:41 -070094
95
Mauro Carvalho Chehabc1eaa6c2016-07-17 12:48:43 -030096Why the need for another CI interface?
97~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
98
Johannes Stezenbach50b215a2005-05-16 21:54:41 -070099This is one of the most commonly asked question. Well a nice question.
100Strictly speaking this is not a new interface.
101
Mauro Carvalho Chehabc1eaa6c2016-07-17 12:48:43 -0300102The CI interface is defined in the DVB API in ca.h as:
Johannes Stezenbach50b215a2005-05-16 21:54:41 -0700103
Mauro Carvalho Chehabc1eaa6c2016-07-17 12:48:43 -0300104.. code-block:: c
Johannes Stezenbach50b215a2005-05-16 21:54:41 -0700105
Mauro Carvalho Chehabc1eaa6c2016-07-17 12:48:43 -0300106 typedef struct ca_slot_info {
107 int num; /* slot number */
Johannes Stezenbach50b215a2005-05-16 21:54:41 -0700108
Mauro Carvalho Chehabc1eaa6c2016-07-17 12:48:43 -0300109 int type; /* CA interface this slot supports */
110 #define CA_CI 1 /* CI high level interface */
111 #define CA_CI_LINK 2 /* CI link layer level interface */
112 #define CA_CI_PHYS 4 /* CI physical layer level interface */
113 #define CA_DESCR 8 /* built-in descrambler */
114 #define CA_SC 128 /* simple smart card interface */
Johannes Stezenbach50b215a2005-05-16 21:54:41 -0700115
Mauro Carvalho Chehabc1eaa6c2016-07-17 12:48:43 -0300116 unsigned int flags;
117 #define CA_CI_MODULE_PRESENT 1 /* module (or card) inserted */
118 #define CA_CI_MODULE_READY 2
119 } ca_slot_info_t;
Johannes Stezenbach50b215a2005-05-16 21:54:41 -0700120
121This CI interface follows the CI high level interface, which is not
122implemented by most applications. Hence this area is revisited.
123
124This CI interface is quite different in the case that it tries to
Matt LaPlante4ae0edc2006-11-30 04:58:40 +0100125accommodate all other CI based devices, that fall into the other categories.
Johannes Stezenbach50b215a2005-05-16 21:54:41 -0700126
127This means that this CI interface handles the EN50221 style tags in the
128Application layer only and no session management is taken care of by the
129application. The driver/hardware will take care of all that.
130
131This interface is purely an EN50221 interface exchanging APDU's. This
132means that no session management, link layer or a transport layer do
133exist in this case in the application to driver communication. It is
134as simple as that. The driver/hardware has to take care of that.
135
Johannes Stezenbach50b215a2005-05-16 21:54:41 -0700136With this High Level CI interface, the interface can be defined with the
137regular ioctls.
138
139All these ioctls are also valid for the High level CI interface
140
141#define CA_RESET _IO('o', 128)
142#define CA_GET_CAP _IOR('o', 129, ca_caps_t)
143#define CA_GET_SLOT_INFO _IOR('o', 130, ca_slot_info_t)
144#define CA_GET_DESCR_INFO _IOR('o', 131, ca_descr_info_t)
145#define CA_GET_MSG _IOR('o', 132, ca_msg_t)
146#define CA_SEND_MSG _IOW('o', 133, ca_msg_t)
147#define CA_SET_DESCR _IOW('o', 134, ca_descr_t)
Johannes Stezenbach50b215a2005-05-16 21:54:41 -0700148
149
Mauro Carvalho Chehabc1eaa6c2016-07-17 12:48:43 -0300150On querying the device, the device yields information thus:
Johannes Stezenbach50b215a2005-05-16 21:54:41 -0700151
Mauro Carvalho Chehabc1eaa6c2016-07-17 12:48:43 -0300152.. code-block:: none
Johannes Stezenbach50b215a2005-05-16 21:54:41 -0700153
Mauro Carvalho Chehabc1eaa6c2016-07-17 12:48:43 -0300154 CA_GET_SLOT_INFO
155 ----------------------------
156 Command = [info]
157 APP: Number=[1]
158 APP: Type=[1]
159 APP: flags=[1]
160 APP: CI High level interface
161 APP: CA/CI Module Present
Johannes Stezenbach50b215a2005-05-16 21:54:41 -0700162
Mauro Carvalho Chehabc1eaa6c2016-07-17 12:48:43 -0300163 CA_GET_CAP
164 ----------------------------
165 Command = [caps]
166 APP: Slots=[1]
167 APP: Type=[1]
168 APP: Descrambler keys=[16]
169 APP: Type=[1]
Johannes Stezenbach50b215a2005-05-16 21:54:41 -0700170
Mauro Carvalho Chehabc1eaa6c2016-07-17 12:48:43 -0300171 CA_SEND_MSG
172 ----------------------------
173 Descriptors(Program Level)=[ 09 06 06 04 05 50 ff f1]
174 Found CA descriptor @ program level
175
176 (20) ES type=[2] ES pid=[201] ES length =[0 (0x0)]
177 (25) ES type=[4] ES pid=[301] ES length =[0 (0x0)]
178 ca_message length is 25 (0x19) bytes
179 EN50221 CA MSG=[ 9f 80 32 19 03 01 2d d1 f0 08 01 09 06 06 04 05 50 ff f1 02 e0 c9 00 00 04 e1 2d 00 00]
Johannes Stezenbach50b215a2005-05-16 21:54:41 -0700180
181
182Not all ioctl's are implemented in the driver from the API, the other
183features of the hardware that cannot be implemented by the API are achieved
184using the CA_GET_MSG and CA_SEND_MSG ioctls. An EN50221 style wrapper is
185used to exchange the data to maintain compatibility with other hardware.
186
Mauro Carvalho Chehabc1eaa6c2016-07-17 12:48:43 -0300187.. code-block:: c
Johannes Stezenbach50b215a2005-05-16 21:54:41 -0700188
Mauro Carvalho Chehabc1eaa6c2016-07-17 12:48:43 -0300189 /* a message to/from a CI-CAM */
190 typedef struct ca_msg {
191 unsigned int index;
192 unsigned int type;
193 unsigned int length;
194 unsigned char msg[256];
195 } ca_msg_t;
Johannes Stezenbach50b215a2005-05-16 21:54:41 -0700196
197
198The flow of data can be described thus,
199
Mauro Carvalho Chehabc1eaa6c2016-07-17 12:48:43 -0300200.. code-block:: none
Johannes Stezenbach50b215a2005-05-16 21:54:41 -0700201
202 App (User)
203 -----
204 parse
205 |
206 |
207 v
208 en50221 APDU (package)
209 --------------------------------------
210 | | | High Level CI driver
211 | | |
212 | v |
213 | en50221 APDU (unpackage) |
214 | | |
215 | | |
216 | v |
217 | sanity checks |
218 | | |
219 | | |
220 | v |
221 | do (H/W dep) |
222 --------------------------------------
223 | Hardware
224 |
225 v
226
227
228
229
230The High Level CI interface uses the EN50221 DVB standard, following a
231standard ensures futureproofness.