1*53ee8cc1Swenshuai.xi /* 2*53ee8cc1Swenshuai.xi * ca.h 3*53ee8cc1Swenshuai.xi * 4*53ee8cc1Swenshuai.xi * Copyright (C) 2000 Ralph Metzler <ralph@convergence.de> 5*53ee8cc1Swenshuai.xi * & Marcus Metzler <marcus@convergence.de> 6*53ee8cc1Swenshuai.xi * for convergence integrated media GmbH 7*53ee8cc1Swenshuai.xi * 8*53ee8cc1Swenshuai.xi * This program is free software; you can redistribute it and/or 9*53ee8cc1Swenshuai.xi * modify it under the terms of the GNU General Lesser Public License 10*53ee8cc1Swenshuai.xi * as published by the Free Software Foundation; either version 2.1 11*53ee8cc1Swenshuai.xi * of the License, or (at your option) any later version. 12*53ee8cc1Swenshuai.xi * 13*53ee8cc1Swenshuai.xi * This program is distributed in the hope that it will be useful, 14*53ee8cc1Swenshuai.xi * but WITHOUT ANY WARRANTY; without even the implied warranty of 15*53ee8cc1Swenshuai.xi * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16*53ee8cc1Swenshuai.xi * GNU General Public License for more details. 17*53ee8cc1Swenshuai.xi * 18*53ee8cc1Swenshuai.xi * You should have received a copy of the GNU Lesser General Public License 19*53ee8cc1Swenshuai.xi * along with this program; if not, write to the Free Software 20*53ee8cc1Swenshuai.xi * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 21*53ee8cc1Swenshuai.xi * 22*53ee8cc1Swenshuai.xi */ 23*53ee8cc1Swenshuai.xi 24*53ee8cc1Swenshuai.xi #ifndef _DVBCA_H_ 25*53ee8cc1Swenshuai.xi #define _DVBCA_H_ 26*53ee8cc1Swenshuai.xi 27*53ee8cc1Swenshuai.xi /* slot interface types and info */ 28*53ee8cc1Swenshuai.xi 29*53ee8cc1Swenshuai.xi typedef struct ca_slot_info { 30*53ee8cc1Swenshuai.xi int num; /* slot number */ 31*53ee8cc1Swenshuai.xi 32*53ee8cc1Swenshuai.xi int type; /* CA interface this slot supports */ 33*53ee8cc1Swenshuai.xi #define CA_CI 1 /* CI high level interface */ 34*53ee8cc1Swenshuai.xi #define CA_CI_LINK 2 /* CI link layer level interface */ 35*53ee8cc1Swenshuai.xi #define CA_CI_PHYS 4 /* CI physical layer level interface */ 36*53ee8cc1Swenshuai.xi #define CA_DESCR 8 /* built-in descrambler */ 37*53ee8cc1Swenshuai.xi #define CA_SC 128 /* simple smart card interface */ 38*53ee8cc1Swenshuai.xi 39*53ee8cc1Swenshuai.xi unsigned int flags; 40*53ee8cc1Swenshuai.xi #define CA_CI_MODULE_PRESENT 1 /* module (or card) inserted */ 41*53ee8cc1Swenshuai.xi #define CA_CI_MODULE_READY 2 42*53ee8cc1Swenshuai.xi } ca_slot_info_t; 43*53ee8cc1Swenshuai.xi 44*53ee8cc1Swenshuai.xi 45*53ee8cc1Swenshuai.xi /* descrambler types and info */ 46*53ee8cc1Swenshuai.xi 47*53ee8cc1Swenshuai.xi typedef struct ca_descr_info { 48*53ee8cc1Swenshuai.xi unsigned int num; /* number of available descramblers (keys) */ 49*53ee8cc1Swenshuai.xi unsigned int type; /* type of supported scrambling system */ 50*53ee8cc1Swenshuai.xi #define CA_ECD 1 51*53ee8cc1Swenshuai.xi #define CA_NDS 2 52*53ee8cc1Swenshuai.xi #define CA_DSS 4 53*53ee8cc1Swenshuai.xi } ca_descr_info_t; 54*53ee8cc1Swenshuai.xi 55*53ee8cc1Swenshuai.xi typedef struct ca_caps { 56*53ee8cc1Swenshuai.xi unsigned int slot_num; /* total number of CA card and module slots */ 57*53ee8cc1Swenshuai.xi unsigned int slot_type; /* OR of all supported types */ 58*53ee8cc1Swenshuai.xi unsigned int descr_num; /* total number of descrambler slots (keys) */ 59*53ee8cc1Swenshuai.xi unsigned int descr_type; /* OR of all supported types */ 60*53ee8cc1Swenshuai.xi } ca_caps_t; 61*53ee8cc1Swenshuai.xi 62*53ee8cc1Swenshuai.xi /* a message to/from a CI-CAM */ 63*53ee8cc1Swenshuai.xi typedef struct ca_msg { 64*53ee8cc1Swenshuai.xi unsigned int index; 65*53ee8cc1Swenshuai.xi unsigned int type; 66*53ee8cc1Swenshuai.xi unsigned int length; 67*53ee8cc1Swenshuai.xi unsigned char msg[256]; 68*53ee8cc1Swenshuai.xi } ca_msg_t; 69*53ee8cc1Swenshuai.xi 70*53ee8cc1Swenshuai.xi typedef struct ca_descr { 71*53ee8cc1Swenshuai.xi unsigned int index; 72*53ee8cc1Swenshuai.xi unsigned int parity; /* 0 == even, 1 == odd */ 73*53ee8cc1Swenshuai.xi unsigned char cw[8]; 74*53ee8cc1Swenshuai.xi } ca_descr_t; 75*53ee8cc1Swenshuai.xi 76*53ee8cc1Swenshuai.xi typedef struct ca_pid { 77*53ee8cc1Swenshuai.xi unsigned int pid; 78*53ee8cc1Swenshuai.xi int index; /* -1 == disable*/ 79*53ee8cc1Swenshuai.xi } ca_pid_t; 80*53ee8cc1Swenshuai.xi 81*53ee8cc1Swenshuai.xi #define CA_RESET _IO('o', 128) 82*53ee8cc1Swenshuai.xi #define CA_GET_CAP _IOR('o', 129, ca_caps_t) 83*53ee8cc1Swenshuai.xi #define CA_GET_SLOT_INFO _IOR('o', 130, ca_slot_info_t) 84*53ee8cc1Swenshuai.xi #define CA_GET_DESCR_INFO _IOR('o', 131, ca_descr_info_t) 85*53ee8cc1Swenshuai.xi #define CA_GET_MSG _IOR('o', 132, ca_msg_t) 86*53ee8cc1Swenshuai.xi #define CA_SEND_MSG _IOW('o', 133, ca_msg_t) 87*53ee8cc1Swenshuai.xi #define CA_SET_DESCR _IOW('o', 134, ca_descr_t) 88*53ee8cc1Swenshuai.xi #define CA_SET_PID _IOW('o', 135, ca_pid_t) 89*53ee8cc1Swenshuai.xi 90*53ee8cc1Swenshuai.xi #endif 91