5 * Copyright (c) 2008 Henrik Kurelid <henrik@kurelid.se>
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License as
9 * published by the Free Software Foundation; either version 2 of
10 * the License, or (at your option) any later version.
16 #include "dvb_frontend.h"
18 #include "dvb_demux.h"
21 #include <linux/version.h>
22 #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 25)
23 #include <linux/semaphore.h>
25 #include <linux/dvb/frontend.h>
26 #include <linux/dvb/dmx.h>
29 #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 25)
30 #define DVB_REGISTER_ADAPTER(x, y, z, w, v) dvb_register_adapter(x, y, z, w, v)
32 #define DVB_REGISTER_ADAPTER(x, y, z, w, v) dvb_register_adapter(x, y, z, w)
33 #define DVB_DEFINE_MOD_OPT_ADAPTER_NR(x)
36 /*****************************************************************
37 * CA message command constants from en50221_app_tags.h of libdvb
38 *****************************************************************/
39 /* Resource Manager */
40 #define TAG_PROFILE_ENQUIRY 0x9f8010
41 #define TAG_PROFILE 0x9f8011
42 #define TAG_PROFILE_CHANGE 0x9f8012
44 /* Application Info */
45 #define TAG_APP_INFO_ENQUIRY 0x9f8020
46 #define TAG_APP_INFO 0x9f8021
47 #define TAG_ENTER_MENU 0x9f8022
50 #define TAG_CA_INFO_ENQUIRY 0x9f8030
51 #define TAG_CA_INFO 0x9f8031
52 #define TAG_CA_PMT 0x9f8032
53 #define TAG_CA_PMT_REPLY 0x9f8033
56 #define TAG_TUNE 0x9f8400
57 #define TAG_REPLACE 0x9f8401
58 #define TAG_CLEAR_REPLACE 0x9f8402
59 #define TAG_ASK_RELEASE 0x9f8403
62 #define TAG_DATE_TIME_ENQUIRY 0x9f8440
63 #define TAG_DATE_TIME 0x9f8441
65 /* Man Machine Interface (MMI) */
66 #define TAG_CLOSE_MMI 0x9f8800
67 #define TAG_DISPLAY_CONTROL 0x9f8801
68 #define TAG_DISPLAY_REPLY 0x9f8802
69 #define TAG_TEXT_LAST 0x9f8803
70 #define TAG_TEXT_MORE 0x9f8804
71 #define TAG_KEYPAD_CONTROL 0x9f8805
72 #define TAG_KEYPRESS 0x9f8806
73 #define TAG_ENQUIRY 0x9f8807
74 #define TAG_ANSWER 0x9f8808
75 #define TAG_MENU_LAST 0x9f8809
76 #define TAG_MENU_MORE 0x9f880a
77 #define TAG_MENU_ANSWER 0x9f880b
78 #define TAG_LIST_LAST 0x9f880c
79 #define TAG_LIST_MORE 0x9f880d
80 #define TAG_SUBTITLE_SEGMENT_LAST 0x9f880e
81 #define TAG_SUBTITLE_SEGMENT_MORE 0x9f880f
82 #define TAG_DISPLAY_MESSAGE 0x9f8810
83 #define TAG_SCENE_END_MARK 0x9f8811
84 #define TAG_SCENE_DONE 0x9f8812
85 #define TAG_SCENE_CONTROL 0x9f8813
86 #define TAG_SUBTITLE_DOWNLOAD_LAST 0x9f8814
87 #define TAG_SUBTITLE_DOWNLOAD_MORE 0x9f8815
88 #define TAG_FLUSH_DOWNLOAD 0x9f8816
89 #define TAG_DOWNLOAD_REPLY 0x9f8817
91 /* Low Speed Communications */
92 #define TAG_COMMS_COMMAND 0x9f8c00
93 #define TAG_CONNECTION_DESCRIPTOR 0x9f8c01
94 #define TAG_COMMS_REPLY 0x9f8c02
95 #define TAG_COMMS_SEND_LAST 0x9f8c03
96 #define TAG_COMMS_SEND_MORE 0x9f8c04
97 #define TAG_COMMS_RECV_LAST 0x9f8c05
98 #define TAG_COMMS_RECV_MORE 0x9f8c06
101 #define TAG_AUTH_REQ 0x9f8200
102 #define TAG_AUTH_RESP 0x9f8201
105 #define TAG_TELETEXT_EBU 0x9f9000
108 #define TAG_SMARTCARD_COMMAND 0x9f8e00
109 #define TAG_SMARTCARD_REPLY 0x9f8e01
110 #define TAG_SMARTCARD_SEND 0x9f8e02
111 #define TAG_SMARTCARD_RCV 0x9f8e03
114 #define TAG_EPG_ENQUIRY 0x9f8f00
115 #define TAG_EPG_REPLY 0x9f8f01
126 struct dvb_demux dvb_demux;
130 struct dvb_adapter *adapter;
131 struct dmxdev dmxdev;
132 struct dvb_demux demux;
133 struct dmx_frontend frontend;
134 struct dvb_net dvbnet;
135 struct dvb_frontend_info *frontend_info;
136 struct dvb_frontend *fe;
138 struct dvb_device *cadev;
140 int ca_time_interval;
142 struct semaphore avc_sem;
143 atomic_t avc_reply_received;
145 atomic_t reschedule_remotecontrol;
147 struct firesat_channel {
148 struct firesat *firesat;
149 struct dvb_demux_feed *dvbdmxfeed;
154 int type; /* 1 - TS, 2 - Filter */
156 struct semaphore demux_sem;
158 /* needed by avc_api */
162 struct hpsb_host *host;
163 u64 guid; /* GUID of this node */
164 u32 guid_vendor_id; /* Top 24bits of guid */
165 struct node_entry *nodeentry;
167 enum model_type type;
169 fe_sec_voltage_t voltage;
170 fe_sec_tone_mode_t tone;
173 struct hpsb_iso *iso_handle;
175 struct list_head list;
178 struct firewireheader {
212 extern struct list_head firesat_list;
213 extern spinlock_t firesat_list_lock;
216 extern int firesat_start_feed(struct dvb_demux_feed *dvbdmxfeed);
217 extern int firesat_stop_feed(struct dvb_demux_feed *dvbdmxfeed);
218 extern int firesat_dvbdev_init(struct firesat *firesat,
220 struct dvb_frontend *fe);
223 extern int firesat_frontend_attach(struct firesat *firesat,
224 struct dvb_frontend *fe);
227 extern int setup_iso_channel(struct firesat *firesat);
228 extern void tear_down_iso_channel(struct firesat *firesat);