firesat.h 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. /*
  2. * FireSAT DVB driver
  3. *
  4. * Copyright (c) ?
  5. * Copyright (c) 2008 Henrik Kurelid <henrik@kurelid.se>
  6. *
  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.
  11. */
  12. #ifndef __FIRESAT_H
  13. #define __FIRESAT_H
  14. #include "dvb_frontend.h"
  15. #include "dmxdev.h"
  16. #include "dvb_demux.h"
  17. #include "dvb_net.h"
  18. #include <linux/version.h>
  19. #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 25)
  20. #include <linux/semaphore.h>
  21. #endif
  22. #include <linux/dvb/frontend.h>
  23. #include <linux/dvb/dmx.h>
  24. #include <iso.h>
  25. #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 25)
  26. #define DVB_REGISTER_ADAPTER(x, y, z, w, v) dvb_register_adapter(x, y, z, w, v)
  27. #else
  28. #define DVB_REGISTER_ADAPTER(x, y, z, w, v) dvb_register_adapter(x, y, z, w)
  29. #define DVB_DEFINE_MOD_OPT_ADAPTER_NR(x)
  30. #endif
  31. /*****************************************************************
  32. * CA message command constants from en50221_app_tags.h of libdvb
  33. *****************************************************************/
  34. /* Resource Manager */
  35. #define TAG_PROFILE_ENQUIRY 0x9f8010
  36. #define TAG_PROFILE 0x9f8011
  37. #define TAG_PROFILE_CHANGE 0x9f8012
  38. /* Application Info */
  39. #define TAG_APP_INFO_ENQUIRY 0x9f8020
  40. #define TAG_APP_INFO 0x9f8021
  41. #define TAG_ENTER_MENU 0x9f8022
  42. /* CA Support */
  43. #define TAG_CA_INFO_ENQUIRY 0x9f8030
  44. #define TAG_CA_INFO 0x9f8031
  45. #define TAG_CA_PMT 0x9f8032
  46. #define TAG_CA_PMT_REPLY 0x9f8033
  47. /* Host Control */
  48. #define TAG_TUNE 0x9f8400
  49. #define TAG_REPLACE 0x9f8401
  50. #define TAG_CLEAR_REPLACE 0x9f8402
  51. #define TAG_ASK_RELEASE 0x9f8403
  52. /* Date and Time */
  53. #define TAG_DATE_TIME_ENQUIRY 0x9f8440
  54. #define TAG_DATE_TIME 0x9f8441
  55. /* Man Machine Interface (MMI) */
  56. #define TAG_CLOSE_MMI 0x9f8800
  57. #define TAG_DISPLAY_CONTROL 0x9f8801
  58. #define TAG_DISPLAY_REPLY 0x9f8802
  59. #define TAG_TEXT_LAST 0x9f8803
  60. #define TAG_TEXT_MORE 0x9f8804
  61. #define TAG_KEYPAD_CONTROL 0x9f8805
  62. #define TAG_KEYPRESS 0x9f8806
  63. #define TAG_ENQUIRY 0x9f8807
  64. #define TAG_ANSWER 0x9f8808
  65. #define TAG_MENU_LAST 0x9f8809
  66. #define TAG_MENU_MORE 0x9f880a
  67. #define TAG_MENU_ANSWER 0x9f880b
  68. #define TAG_LIST_LAST 0x9f880c
  69. #define TAG_LIST_MORE 0x9f880d
  70. #define TAG_SUBTITLE_SEGMENT_LAST 0x9f880e
  71. #define TAG_SUBTITLE_SEGMENT_MORE 0x9f880f
  72. #define TAG_DISPLAY_MESSAGE 0x9f8810
  73. #define TAG_SCENE_END_MARK 0x9f8811
  74. #define TAG_SCENE_DONE 0x9f8812
  75. #define TAG_SCENE_CONTROL 0x9f8813
  76. #define TAG_SUBTITLE_DOWNLOAD_LAST 0x9f8814
  77. #define TAG_SUBTITLE_DOWNLOAD_MORE 0x9f8815
  78. #define TAG_FLUSH_DOWNLOAD 0x9f8816
  79. #define TAG_DOWNLOAD_REPLY 0x9f8817
  80. /* Low Speed Communications */
  81. #define TAG_COMMS_COMMAND 0x9f8c00
  82. #define TAG_CONNECTION_DESCRIPTOR 0x9f8c01
  83. #define TAG_COMMS_REPLY 0x9f8c02
  84. #define TAG_COMMS_SEND_LAST 0x9f8c03
  85. #define TAG_COMMS_SEND_MORE 0x9f8c04
  86. #define TAG_COMMS_RECV_LAST 0x9f8c05
  87. #define TAG_COMMS_RECV_MORE 0x9f8c06
  88. /* Authentication */
  89. #define TAG_AUTH_REQ 0x9f8200
  90. #define TAG_AUTH_RESP 0x9f8201
  91. /* Teletext */
  92. #define TAG_TELETEXT_EBU 0x9f9000
  93. /* Smartcard */
  94. #define TAG_SMARTCARD_COMMAND 0x9f8e00
  95. #define TAG_SMARTCARD_REPLY 0x9f8e01
  96. #define TAG_SMARTCARD_SEND 0x9f8e02
  97. #define TAG_SMARTCARD_RCV 0x9f8e03
  98. /* EPG */
  99. #define TAG_EPG_ENQUIRY 0x9f8f00
  100. #define TAG_EPG_REPLY 0x9f8f01
  101. enum model_type {
  102. FireSAT_DVB_S = 1,
  103. FireSAT_DVB_C = 2,
  104. FireSAT_DVB_T = 3,
  105. FireSAT_DVB_S2 = 4
  106. };
  107. struct firesat {
  108. struct dvb_demux dvb_demux;
  109. char *model_name;
  110. /* DVB bits */
  111. struct dvb_adapter *adapter;
  112. struct dmxdev dmxdev;
  113. struct dvb_demux demux;
  114. struct dmx_frontend frontend;
  115. struct dvb_net dvbnet;
  116. struct dvb_frontend_info *frontend_info;
  117. struct dvb_frontend *fe;
  118. struct dvb_device *cadev;
  119. int ca_last_command;
  120. int ca_time_interval;
  121. struct semaphore avc_sem;
  122. atomic_t avc_reply_received;
  123. atomic_t reschedule_remotecontrol;
  124. struct firesat_channel {
  125. struct firesat *firesat;
  126. struct dvb_demux_feed *dvbdmxfeed;
  127. int active;
  128. int id;
  129. int pid;
  130. int type; /* 1 - TS, 2 - Filter */
  131. } channel[16];
  132. struct semaphore demux_sem;
  133. /* needed by avc_api */
  134. void *respfrm;
  135. int resp_length;
  136. struct hpsb_host *host;
  137. u64 guid; /* GUID of this node */
  138. u32 guid_vendor_id; /* Top 24bits of guid */
  139. struct node_entry *nodeentry;
  140. enum model_type type;
  141. char subunit;
  142. fe_sec_voltage_t voltage;
  143. fe_sec_tone_mode_t tone;
  144. int isochannel;
  145. struct hpsb_iso *iso_handle;
  146. struct list_head list;
  147. };
  148. struct firewireheader {
  149. union {
  150. struct {
  151. __u8 tcode:4;
  152. __u8 sy:4;
  153. __u8 tag:2;
  154. __u8 channel:6;
  155. __u8 length_l;
  156. __u8 length_h;
  157. } hdr;
  158. __u32 val;
  159. };
  160. };
  161. struct CIPHeader {
  162. union {
  163. struct {
  164. __u8 syncbits:2;
  165. __u8 sid:6;
  166. __u8 dbs;
  167. __u8 fn:2;
  168. __u8 qpc:3;
  169. __u8 sph:1;
  170. __u8 rsv:2;
  171. __u8 dbc;
  172. __u8 syncbits2:2;
  173. __u8 fmt:6;
  174. __u32 fdf:24;
  175. } cip;
  176. __u64 val;
  177. };
  178. };
  179. extern struct list_head firesat_list;
  180. extern spinlock_t firesat_list_lock;
  181. /* firesat_dvb.c */
  182. extern int firesat_start_feed(struct dvb_demux_feed *dvbdmxfeed);
  183. extern int firesat_stop_feed(struct dvb_demux_feed *dvbdmxfeed);
  184. extern int firesat_dvbdev_init(struct firesat *firesat,
  185. struct device *dev,
  186. struct dvb_frontend *fe);
  187. /* firesat_fe.c */
  188. extern int firesat_frontend_attach(struct firesat *firesat,
  189. struct dvb_frontend *fe);
  190. /* firesat_iso.c */
  191. extern int setup_iso_channel(struct firesat *firesat);
  192. extern void tear_down_iso_channel(struct firesat *firesat);
  193. #endif