skystar2.c 62 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644
  1. /*
  2. * skystar2.c - driver for the Technisat SkyStar2 PCI DVB card
  3. * based on the FlexCopII by B2C2,Inc.
  4. *
  5. * Copyright (C) 2003 Vadim Catana, skystar@moldova.cc
  6. *
  7. * FIX: DISEQC Tone Burst in flexcop_diseqc_ioctl()
  8. * FIX: FULL soft DiSEqC for skystar2 (FlexCopII rev 130) VP310 equipped
  9. * Vincenzo Di Massa, hawk.it at tiscalinet.it
  10. *
  11. * Converted to Linux coding style
  12. * Misc reorganization, polishing, restyling
  13. * Roberto Ragusa, skystar2-c5b8 at robertoragusa dot it
  14. *
  15. * Added hardware filtering support,
  16. * Niklas Peinecke, peinecke at gdv.uni-hannover.de
  17. *
  18. *
  19. * This program is free software; you can redistribute it and/or
  20. * modify it under the terms of the GNU Lesser General Public License
  21. * as published by the Free Software Foundation; either version 2.1
  22. * of the License, or (at your option) any later version.
  23. *
  24. * This program is distributed in the hope that it will be useful,
  25. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  26. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  27. * GNU General Public License for more details.
  28. *
  29. * You should have received a copy of the GNU Lesser General Public License
  30. * along with this program; if not, write to the Free Software
  31. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  32. */
  33. #include <linux/module.h>
  34. #include <linux/moduleparam.h>
  35. #include <linux/delay.h>
  36. #include <linux/pci.h>
  37. #include <linux/init.h>
  38. #include <linux/version.h>
  39. #include <asm/io.h>
  40. #include "dvb_frontend.h"
  41. #include <linux/dvb/frontend.h>
  42. #include <linux/dvb/dmx.h>
  43. #include "dvb_demux.h"
  44. #include "dmxdev.h"
  45. #include "dvb_filter.h"
  46. #include "dvbdev.h"
  47. #include "demux.h"
  48. #include "dvb_net.h"
  49. #include "stv0299.h"
  50. #include "mt352.h"
  51. #include "mt312.h"
  52. #include "nxt2002.h"
  53. static int debug;
  54. static int enable_hw_filters = 2;
  55. module_param(debug, int, 0644);
  56. MODULE_PARM_DESC(debug, "Set debugging level (0 = default, 1 = most messages, 2 = all messages).");
  57. module_param(enable_hw_filters, int, 0444);
  58. MODULE_PARM_DESC(enable_hw_filters, "enable hardware filters: supported values: 0 (none), 1, 2");
  59. #define dprintk(x...) do { if (debug>=1) printk(x); } while (0)
  60. #define ddprintk(x...) do { if (debug>=2) printk(x); } while (0)
  61. #define SIZE_OF_BUF_DMA1 0x3ac00
  62. #define SIZE_OF_BUF_DMA2 0x758
  63. #define MAX_N_HW_FILTERS (6+32)
  64. #define N_PID_SLOTS 256
  65. struct dmaq {
  66. u32 bus_addr;
  67. u32 head;
  68. u32 tail;
  69. u32 buffer_size;
  70. u8 *buffer;
  71. };
  72. #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,9)
  73. #define __iomem
  74. #endif
  75. struct adapter {
  76. struct pci_dev *pdev;
  77. u8 card_revision;
  78. u32 b2c2_revision;
  79. u32 pid_filter_max;
  80. u32 mac_filter_max;
  81. u32 irq;
  82. void __iomem *io_mem;
  83. unsigned long io_port;
  84. u8 mac_addr[8];
  85. u32 dw_sram_type;
  86. struct dvb_adapter dvb_adapter;
  87. struct dvb_demux demux;
  88. struct dmxdev dmxdev;
  89. struct dmx_frontend hw_frontend;
  90. struct dmx_frontend mem_frontend;
  91. struct i2c_adapter i2c_adap;
  92. struct dvb_net dvbnet;
  93. struct semaphore i2c_sem;
  94. struct dmaq dmaq1;
  95. struct dmaq dmaq2;
  96. u32 dma_ctrl;
  97. u32 dma_status;
  98. int capturing;
  99. spinlock_t lock;
  100. int useable_hw_filters;
  101. u16 hw_pids[MAX_N_HW_FILTERS];
  102. u16 pid_list[N_PID_SLOTS];
  103. int pid_rc[N_PID_SLOTS]; // ref counters for the pids
  104. int pid_count;
  105. int whole_bandwidth_count;
  106. u32 mac_filter;
  107. struct dvb_frontend* fe;
  108. int (*fe_sleep)(struct dvb_frontend* fe);
  109. };
  110. #define write_reg_dw(adapter,reg,value) writel(value, adapter->io_mem + reg)
  111. #define read_reg_dw(adapter,reg) readl(adapter->io_mem + reg)
  112. static void write_reg_bitfield(struct adapter *adapter, u32 reg, u32 zeromask, u32 orvalue)
  113. {
  114. u32 tmp;
  115. tmp = read_reg_dw(adapter, reg);
  116. tmp = (tmp & ~zeromask) | orvalue;
  117. write_reg_dw(adapter, reg, tmp);
  118. }
  119. /* i2c functions */
  120. static int i2c_main_write_for_flex2(struct adapter *adapter, u32 command, u8 *buf, int retries)
  121. {
  122. int i;
  123. u32 value;
  124. write_reg_dw(adapter, 0x100, 0);
  125. write_reg_dw(adapter, 0x100, command);
  126. for (i = 0; i < retries; i++) {
  127. value = read_reg_dw(adapter, 0x100);
  128. if ((value & 0x40000000) == 0) {
  129. if ((value & 0x81000000) == 0x80000000) {
  130. if (buf != 0)
  131. *buf = (value >> 0x10) & 0xff;
  132. return 1;
  133. }
  134. } else {
  135. write_reg_dw(adapter, 0x100, 0);
  136. write_reg_dw(adapter, 0x100, command);
  137. }
  138. }
  139. return 0;
  140. }
  141. /* device = 0x10000000 for tuner, 0x20000000 for eeprom */
  142. static void i2c_main_setup(u32 device, u32 chip_addr, u8 op, u8 addr, u32 value, u32 len, u32 *command)
  143. {
  144. *command = device | ((len - 1) << 26) | (value << 16) | (addr << 8) | chip_addr;
  145. if (op != 0)
  146. *command = *command | 0x03000000;
  147. else
  148. *command = *command | 0x01000000;
  149. }
  150. static int flex_i2c_read4(struct adapter *adapter, u32 device, u32 chip_addr, u16 addr, u8 *buf, u8 len)
  151. {
  152. u32 command;
  153. u32 value;
  154. int result, i;
  155. i2c_main_setup(device, chip_addr, 1, addr, 0, len, &command);
  156. result = i2c_main_write_for_flex2(adapter, command, buf, 100000);
  157. if ((result & 0xff) != 0) {
  158. if (len > 1) {
  159. value = read_reg_dw(adapter, 0x104);
  160. for (i = 1; i < len; i++) {
  161. buf[i] = value & 0xff;
  162. value = value >> 8;
  163. }
  164. }
  165. }
  166. return result;
  167. }
  168. static int flex_i2c_write4(struct adapter *adapter, u32 device, u32 chip_addr, u32 addr, u8 *buf, u8 len)
  169. {
  170. u32 command;
  171. u32 value;
  172. int i;
  173. if (len > 1) {
  174. value = 0;
  175. for (i = len; i > 1; i--) {
  176. value = value << 8;
  177. value = value | buf[i - 1];
  178. }
  179. write_reg_dw(adapter, 0x104, value);
  180. }
  181. i2c_main_setup(device, chip_addr, 0, addr, buf[0], len, &command);
  182. return i2c_main_write_for_flex2(adapter, command, NULL, 100000);
  183. }
  184. static void fixchipaddr(u32 device, u32 bus, u32 addr, u32 *ret)
  185. {
  186. if (device == 0x20000000)
  187. *ret = bus | ((addr >> 8) & 3);
  188. else
  189. *ret = bus;
  190. }
  191. static u32 flex_i2c_read(struct adapter *adapter, u32 device, u32 bus, u32 addr, u8 *buf, u32 len)
  192. {
  193. u32 chipaddr;
  194. u32 bytes_to_transfer;
  195. u8 *start;
  196. ddprintk("%s:\n", __FUNCTION__);
  197. start = buf;
  198. while (len != 0) {
  199. bytes_to_transfer = len;
  200. if (bytes_to_transfer > 4)
  201. bytes_to_transfer = 4;
  202. fixchipaddr(device, bus, addr, &chipaddr);
  203. if (flex_i2c_read4(adapter, device, chipaddr, addr, buf, bytes_to_transfer) == 0)
  204. return buf - start;
  205. buf = buf + bytes_to_transfer;
  206. addr = addr + bytes_to_transfer;
  207. len = len - bytes_to_transfer;
  208. };
  209. return buf - start;
  210. }
  211. static u32 flex_i2c_write(struct adapter *adapter, u32 device, u32 bus, u32 addr, u8 *buf, u32 len)
  212. {
  213. u32 chipaddr;
  214. u32 bytes_to_transfer;
  215. u8 *start;
  216. ddprintk("%s:\n", __FUNCTION__);
  217. start = buf;
  218. while (len != 0) {
  219. bytes_to_transfer = len;
  220. if (bytes_to_transfer > 4)
  221. bytes_to_transfer = 4;
  222. fixchipaddr(device, bus, addr, &chipaddr);
  223. if (flex_i2c_write4(adapter, device, chipaddr, addr, buf, bytes_to_transfer) == 0)
  224. return buf - start;
  225. buf = buf + bytes_to_transfer;
  226. addr = addr + bytes_to_transfer;
  227. len = len - bytes_to_transfer;
  228. }
  229. return buf - start;
  230. }
  231. static int master_xfer(struct i2c_adapter* adapter, struct i2c_msg *msgs, int num)
  232. {
  233. struct adapter *tmp = i2c_get_adapdata(adapter);
  234. int i, ret = 0;
  235. if (down_interruptible(&tmp->i2c_sem))
  236. return -ERESTARTSYS;
  237. ddprintk("%s: %d messages to transfer\n", __FUNCTION__, num);
  238. for (i = 0; i < num; i++) {
  239. ddprintk("message %d: flags=0x%x, addr=0x%x, buf=0x%x, len=%d \n", i,
  240. msgs[i].flags, msgs[i].addr, msgs[i].buf[0], msgs[i].len);
  241. }
  242. // read command
  243. if ((num == 2) && (msgs[0].flags == 0) && (msgs[1].flags == I2C_M_RD) && (msgs[0].buf != NULL) && (msgs[1].buf != NULL)) {
  244. ret = flex_i2c_read(tmp, 0x10000000, msgs[0].addr, msgs[0].buf[0], msgs[1].buf, msgs[1].len);
  245. up(&tmp->i2c_sem);
  246. if (ret != msgs[1].len) {
  247. dprintk("%s: read error !\n", __FUNCTION__);
  248. for (i = 0; i < 2; i++) {
  249. dprintk("message %d: flags=0x%x, addr=0x%x, buf=0x%x, len=%d \n", i,
  250. msgs[i].flags, msgs[i].addr, msgs[i].buf[0], msgs[i].len);
  251. }
  252. return -EREMOTEIO;
  253. }
  254. return num;
  255. }
  256. // write command
  257. for (i = 0; i < num; i++) {
  258. if ((msgs[i].flags != 0) || (msgs[i].buf == NULL) || (msgs[i].len < 2))
  259. return -EINVAL;
  260. ret = flex_i2c_write(tmp, 0x10000000, msgs[i].addr, msgs[i].buf[0], &msgs[i].buf[1], msgs[i].len - 1);
  261. up(&tmp->i2c_sem);
  262. if (ret != msgs[0].len - 1) {
  263. dprintk("%s: write error %i !\n", __FUNCTION__, ret);
  264. dprintk("message %d: flags=0x%x, addr=0x%x, buf[0]=0x%x, len=%d \n", i,
  265. msgs[i].flags, msgs[i].addr, msgs[i].buf[0], msgs[i].len);
  266. return -EREMOTEIO;
  267. }
  268. return num;
  269. }
  270. printk("%s: unknown command format !\n", __FUNCTION__);
  271. return -EINVAL;
  272. }
  273. /* SRAM (Skystar2 rev2.3 has one "ISSI IS61LV256" chip on board,
  274. but it seems that FlexCopII can work with more than one chip) */
  275. static void sram_set_net_dest(struct adapter *adapter, u8 dest)
  276. {
  277. u32 tmp;
  278. udelay(1000);
  279. tmp = (read_reg_dw(adapter, 0x714) & 0xfffffffc) | (dest & 3);
  280. udelay(1000);
  281. write_reg_dw(adapter, 0x714, tmp);
  282. write_reg_dw(adapter, 0x714, tmp);
  283. udelay(1000);
  284. /* return value is never used? */
  285. /* return tmp; */
  286. }
  287. static void sram_set_cai_dest(struct adapter *adapter, u8 dest)
  288. {
  289. u32 tmp;
  290. udelay(1000);
  291. tmp = (read_reg_dw(adapter, 0x714) & 0xfffffff3) | ((dest & 3) << 2);
  292. udelay(1000);
  293. udelay(1000);
  294. write_reg_dw(adapter, 0x714, tmp);
  295. write_reg_dw(adapter, 0x714, tmp);
  296. udelay(1000);
  297. /* return value is never used? */
  298. /* return tmp; */
  299. }
  300. static void sram_set_cao_dest(struct adapter *adapter, u8 dest)
  301. {
  302. u32 tmp;
  303. udelay(1000);
  304. tmp = (read_reg_dw(adapter, 0x714) & 0xffffffcf) | ((dest & 3) << 4);
  305. udelay(1000);
  306. udelay(1000);
  307. write_reg_dw(adapter, 0x714, tmp);
  308. write_reg_dw(adapter, 0x714, tmp);
  309. udelay(1000);
  310. /* return value is never used? */
  311. /* return tmp; */
  312. }
  313. static void sram_set_media_dest(struct adapter *adapter, u8 dest)
  314. {
  315. u32 tmp;
  316. udelay(1000);
  317. tmp = (read_reg_dw(adapter, 0x714) & 0xffffff3f) | ((dest & 3) << 6);
  318. udelay(1000);
  319. udelay(1000);
  320. write_reg_dw(adapter, 0x714, tmp);
  321. write_reg_dw(adapter, 0x714, tmp);
  322. udelay(1000);
  323. /* return value is never used? */
  324. /* return tmp; */
  325. }
  326. /* SRAM memory is accessed through a buffer register in the FlexCop
  327. chip (0x700). This register has the following structure:
  328. bits 0-14 : address
  329. bit 15 : read/write flag
  330. bits 16-23 : 8-bit word to write
  331. bits 24-27 : = 4
  332. bits 28-29 : memory bank selector
  333. bit 31 : busy flag
  334. */
  335. static void flex_sram_write(struct adapter *adapter, u32 bank, u32 addr, u8 *buf, u32 len)
  336. {
  337. int i, retries;
  338. u32 command;
  339. for (i = 0; i < len; i++) {
  340. command = bank | addr | 0x04000000 | (*buf << 0x10);
  341. retries = 2;
  342. while (((read_reg_dw(adapter, 0x700) & 0x80000000) != 0) && (retries > 0)) {
  343. mdelay(1);
  344. retries--;
  345. };
  346. if (retries == 0)
  347. printk("%s: SRAM timeout\n", __FUNCTION__);
  348. write_reg_dw(adapter, 0x700, command);
  349. buf++;
  350. addr++;
  351. }
  352. }
  353. static void flex_sram_read(struct adapter *adapter, u32 bank, u32 addr, u8 *buf, u32 len)
  354. {
  355. int i, retries;
  356. u32 command, value;
  357. for (i = 0; i < len; i++) {
  358. command = bank | addr | 0x04008000;
  359. retries = 10000;
  360. while (((read_reg_dw(adapter, 0x700) & 0x80000000) != 0) && (retries > 0)) {
  361. mdelay(1);
  362. retries--;
  363. };
  364. if (retries == 0)
  365. printk("%s: SRAM timeout\n", __FUNCTION__);
  366. write_reg_dw(adapter, 0x700, command);
  367. retries = 10000;
  368. while (((read_reg_dw(adapter, 0x700) & 0x80000000) != 0) && (retries > 0)) {
  369. mdelay(1);
  370. retries--;
  371. };
  372. if (retries == 0)
  373. printk("%s: SRAM timeout\n", __FUNCTION__);
  374. value = read_reg_dw(adapter, 0x700) >> 0x10;
  375. *buf = (value & 0xff);
  376. addr++;
  377. buf++;
  378. }
  379. }
  380. static void sram_write_chunk(struct adapter *adapter, u32 addr, u8 *buf, u16 len)
  381. {
  382. u32 bank;
  383. bank = 0;
  384. if (adapter->dw_sram_type == 0x20000) {
  385. bank = (addr & 0x18000) << 0x0d;
  386. }
  387. if (adapter->dw_sram_type == 0x00000) {
  388. if ((addr >> 0x0f) == 0)
  389. bank = 0x20000000;
  390. else
  391. bank = 0x10000000;
  392. }
  393. flex_sram_write(adapter, bank, addr & 0x7fff, buf, len);
  394. }
  395. static void sram_read_chunk(struct adapter *adapter, u32 addr, u8 *buf, u16 len)
  396. {
  397. u32 bank;
  398. bank = 0;
  399. if (adapter->dw_sram_type == 0x20000) {
  400. bank = (addr & 0x18000) << 0x0d;
  401. }
  402. if (adapter->dw_sram_type == 0x00000) {
  403. if ((addr >> 0x0f) == 0)
  404. bank = 0x20000000;
  405. else
  406. bank = 0x10000000;
  407. }
  408. flex_sram_read(adapter, bank, addr & 0x7fff, buf, len);
  409. }
  410. static void sram_read(struct adapter *adapter, u32 addr, u8 *buf, u32 len)
  411. {
  412. u32 length;
  413. while (len != 0) {
  414. length = len;
  415. // check if the address range belongs to the same
  416. // 32K memory chip. If not, the data is read from
  417. // one chip at a time.
  418. if ((addr >> 0x0f) != ((addr + len - 1) >> 0x0f)) {
  419. length = (((addr >> 0x0f) + 1) << 0x0f) - addr;
  420. }
  421. sram_read_chunk(adapter, addr, buf, length);
  422. addr = addr + length;
  423. buf = buf + length;
  424. len = len - length;
  425. }
  426. }
  427. static void sram_write(struct adapter *adapter, u32 addr, u8 *buf, u32 len)
  428. {
  429. u32 length;
  430. while (len != 0) {
  431. length = len;
  432. // check if the address range belongs to the same
  433. // 32K memory chip. If not, the data is written to
  434. // one chip at a time.
  435. if ((addr >> 0x0f) != ((addr + len - 1) >> 0x0f)) {
  436. length = (((addr >> 0x0f) + 1) << 0x0f) - addr;
  437. }
  438. sram_write_chunk(adapter, addr, buf, length);
  439. addr = addr + length;
  440. buf = buf + length;
  441. len = len - length;
  442. }
  443. }
  444. static void sram_set_size(struct adapter *adapter, u32 mask)
  445. {
  446. write_reg_dw(adapter, 0x71c, (mask | (~0x30000 & read_reg_dw(adapter, 0x71c))));
  447. }
  448. static void sram_init(struct adapter *adapter)
  449. {
  450. u32 tmp;
  451. tmp = read_reg_dw(adapter, 0x71c);
  452. write_reg_dw(adapter, 0x71c, 1);
  453. if (read_reg_dw(adapter, 0x71c) != 0) {
  454. write_reg_dw(adapter, 0x71c, tmp);
  455. adapter->dw_sram_type = tmp & 0x30000;
  456. ddprintk("%s: dw_sram_type = %x\n", __FUNCTION__, adapter->dw_sram_type);
  457. } else {
  458. adapter->dw_sram_type = 0x10000;
  459. ddprintk("%s: dw_sram_type = %x\n", __FUNCTION__, adapter->dw_sram_type);
  460. }
  461. /* return value is never used? */
  462. /* return adapter->dw_sram_type; */
  463. }
  464. static int sram_test_location(struct adapter *adapter, u32 mask, u32 addr)
  465. {
  466. u8 tmp1, tmp2;
  467. dprintk("%s: mask = %x, addr = %x\n", __FUNCTION__, mask, addr);
  468. sram_set_size(adapter, mask);
  469. sram_init(adapter);
  470. tmp2 = 0xa5;
  471. tmp1 = 0x4f;
  472. sram_write(adapter, addr, &tmp2, 1);
  473. sram_write(adapter, addr + 4, &tmp1, 1);
  474. tmp2 = 0;
  475. mdelay(20);
  476. sram_read(adapter, addr, &tmp2, 1);
  477. sram_read(adapter, addr, &tmp2, 1);
  478. dprintk("%s: wrote 0xa5, read 0x%2x\n", __FUNCTION__, tmp2);
  479. if (tmp2 != 0xa5)
  480. return 0;
  481. tmp2 = 0x5a;
  482. tmp1 = 0xf4;
  483. sram_write(adapter, addr, &tmp2, 1);
  484. sram_write(adapter, addr + 4, &tmp1, 1);
  485. tmp2 = 0;
  486. mdelay(20);
  487. sram_read(adapter, addr, &tmp2, 1);
  488. sram_read(adapter, addr, &tmp2, 1);
  489. dprintk("%s: wrote 0x5a, read 0x%2x\n", __FUNCTION__, tmp2);
  490. if (tmp2 != 0x5a)
  491. return 0;
  492. return 1;
  493. }
  494. static u32 sram_length(struct adapter *adapter)
  495. {
  496. if (adapter->dw_sram_type == 0x10000)
  497. return 32768; // 32K
  498. if (adapter->dw_sram_type == 0x00000)
  499. return 65536; // 64K
  500. if (adapter->dw_sram_type == 0x20000)
  501. return 131072; // 128K
  502. return 32768; // 32K
  503. }
  504. /* FlexcopII can work with 32K, 64K or 128K of external SRAM memory.
  505. - for 128K there are 4x32K chips at bank 0,1,2,3.
  506. - for 64K there are 2x32K chips at bank 1,2.
  507. - for 32K there is one 32K chip at bank 0.
  508. FlexCop works only with one bank at a time. The bank is selected
  509. by bits 28-29 of the 0x700 register.
  510. bank 0 covers addresses 0x00000-0x07fff
  511. bank 1 covers addresses 0x08000-0x0ffff
  512. bank 2 covers addresses 0x10000-0x17fff
  513. bank 3 covers addresses 0x18000-0x1ffff
  514. */
  515. static int sram_detect_for_flex2(struct adapter *adapter)
  516. {
  517. u32 tmp, tmp2, tmp3;
  518. dprintk("%s:\n", __FUNCTION__);
  519. tmp = read_reg_dw(adapter, 0x208);
  520. write_reg_dw(adapter, 0x208, 0);
  521. tmp2 = read_reg_dw(adapter, 0x71c);
  522. dprintk("%s: tmp2 = %x\n", __FUNCTION__, tmp2);
  523. write_reg_dw(adapter, 0x71c, 1);
  524. tmp3 = read_reg_dw(adapter, 0x71c);
  525. dprintk("%s: tmp3 = %x\n", __FUNCTION__, tmp3);
  526. write_reg_dw(adapter, 0x71c, tmp2);
  527. // check for internal SRAM ???
  528. tmp3--;
  529. if (tmp3 != 0) {
  530. sram_set_size(adapter, 0x10000);
  531. sram_init(adapter);
  532. write_reg_dw(adapter, 0x208, tmp);
  533. dprintk("%s: sram size = 32K\n", __FUNCTION__);
  534. return 32;
  535. }
  536. if (sram_test_location(adapter, 0x20000, 0x18000) != 0) {
  537. sram_set_size(adapter, 0x20000);
  538. sram_init(adapter);
  539. write_reg_dw(adapter, 0x208, tmp);
  540. dprintk("%s: sram size = 128K\n", __FUNCTION__);
  541. return 128;
  542. }
  543. if (sram_test_location(adapter, 0x00000, 0x10000) != 0) {
  544. sram_set_size(adapter, 0x00000);
  545. sram_init(adapter);
  546. write_reg_dw(adapter, 0x208, tmp);
  547. dprintk("%s: sram size = 64K\n", __FUNCTION__);
  548. return 64;
  549. }
  550. if (sram_test_location(adapter, 0x10000, 0x00000) != 0) {
  551. sram_set_size(adapter, 0x10000);
  552. sram_init(adapter);
  553. write_reg_dw(adapter, 0x208, tmp);
  554. dprintk("%s: sram size = 32K\n", __FUNCTION__);
  555. return 32;
  556. }
  557. sram_set_size(adapter, 0x10000);
  558. sram_init(adapter);
  559. write_reg_dw(adapter, 0x208, tmp);
  560. dprintk("%s: SRAM detection failed. Set to 32K \n", __FUNCTION__);
  561. return 0;
  562. }
  563. static void sll_detect_sram_size(struct adapter *adapter)
  564. {
  565. sram_detect_for_flex2(adapter);
  566. }
  567. /* EEPROM (Skystar2 has one "24LC08B" chip on board) */
  568. /*
  569. static int eeprom_write(struct adapter *adapter, u16 addr, u8 *buf, u16 len)
  570. {
  571. return flex_i2c_write(adapter, 0x20000000, 0x50, addr, buf, len);
  572. }
  573. */
  574. static int eeprom_read(struct adapter *adapter, u16 addr, u8 *buf, u16 len)
  575. {
  576. return flex_i2c_read(adapter, 0x20000000, 0x50, addr, buf, len);
  577. }
  578. static u8 calc_lrc(u8 *buf, int len)
  579. {
  580. int i;
  581. u8 sum;
  582. sum = 0;
  583. for (i = 0; i < len; i++)
  584. sum = sum ^ buf[i];
  585. return sum;
  586. }
  587. static int eeprom_lrc_read(struct adapter *adapter, u32 addr, u32 len, u8 *buf, int retries)
  588. {
  589. int i;
  590. for (i = 0; i < retries; i++) {
  591. if (eeprom_read(adapter, addr, buf, len) == len) {
  592. if (calc_lrc(buf, len - 1) == buf[len - 1])
  593. return 1;
  594. }
  595. }
  596. return 0;
  597. }
  598. /*
  599. static int eeprom_lrc_write(struct adapter *adapter, u32 addr, u32 len, u8 *wbuf, u8 *rbuf, int retries)
  600. {
  601. int i;
  602. for (i = 0; i < retries; i++) {
  603. if (eeprom_write(adapter, addr, wbuf, len) == len) {
  604. if (eeprom_lrc_read(adapter, addr, len, rbuf, retries) == 1)
  605. return 1;
  606. }
  607. }
  608. return 0;
  609. }
  610. */
  611. /* These functions could be used to unlock SkyStar2 cards. */
  612. /*
  613. static int eeprom_writeKey(struct adapter *adapter, u8 *key, u32 len)
  614. {
  615. u8 rbuf[20];
  616. u8 wbuf[20];
  617. if (len != 16)
  618. return 0;
  619. memcpy(wbuf, key, len);
  620. wbuf[16] = 0;
  621. wbuf[17] = 0;
  622. wbuf[18] = 0;
  623. wbuf[19] = calc_lrc(wbuf, 19);
  624. return eeprom_lrc_write(adapter, 0x3e4, 20, wbuf, rbuf, 4);
  625. }
  626. static int eeprom_readKey(struct adapter *adapter, u8 *key, u32 len)
  627. {
  628. u8 buf[20];
  629. if (len != 16)
  630. return 0;
  631. if (eeprom_lrc_read(adapter, 0x3e4, 20, buf, 4) == 0)
  632. return 0;
  633. memcpy(key, buf, len);
  634. return 1;
  635. }
  636. */
  637. static int eeprom_get_mac_addr(struct adapter *adapter, char type, u8 *mac)
  638. {
  639. u8 tmp[8];
  640. if (eeprom_lrc_read(adapter, 0x3f8, 8, tmp, 4) != 0) {
  641. if (type != 0) {
  642. mac[0] = tmp[0];
  643. mac[1] = tmp[1];
  644. mac[2] = tmp[2];
  645. mac[3] = 0xfe;
  646. mac[4] = 0xff;
  647. mac[5] = tmp[3];
  648. mac[6] = tmp[4];
  649. mac[7] = tmp[5];
  650. } else {
  651. mac[0] = tmp[0];
  652. mac[1] = tmp[1];
  653. mac[2] = tmp[2];
  654. mac[3] = tmp[3];
  655. mac[4] = tmp[4];
  656. mac[5] = tmp[5];
  657. }
  658. return 1;
  659. } else {
  660. if (type == 0) {
  661. memset(mac, 0, 6);
  662. } else {
  663. memset(mac, 0, 8);
  664. }
  665. return 0;
  666. }
  667. }
  668. /*
  669. static char eeprom_set_mac_addr(struct adapter *adapter, char type, u8 *mac)
  670. {
  671. u8 tmp[8];
  672. if (type != 0) {
  673. tmp[0] = mac[0];
  674. tmp[1] = mac[1];
  675. tmp[2] = mac[2];
  676. tmp[3] = mac[5];
  677. tmp[4] = mac[6];
  678. tmp[5] = mac[7];
  679. } else {
  680. tmp[0] = mac[0];
  681. tmp[1] = mac[1];
  682. tmp[2] = mac[2];
  683. tmp[3] = mac[3];
  684. tmp[4] = mac[4];
  685. tmp[5] = mac[5];
  686. }
  687. tmp[6] = 0;
  688. tmp[7] = calc_lrc(tmp, 7);
  689. if (eeprom_write(adapter, 0x3f8, tmp, 8) == 8)
  690. return 1;
  691. return 0;
  692. }
  693. */
  694. /* PID filter */
  695. /* every flexcop has 6 "lower" hw PID filters */
  696. /* these are enabled by setting bits 0-5 of 0x208 */
  697. /* for the 32 additional filters we have to select one */
  698. /* of them through 0x310 and modify through 0x314 */
  699. /* op: 0=disable, 1=enable */
  700. static void filter_enable_hw_filter(struct adapter *adapter, int id, u8 op)
  701. {
  702. dprintk("%s: id=%d op=%d\n", __FUNCTION__, id, op);
  703. if (id <= 5) {
  704. u32 mask = (0x00000001 << id);
  705. write_reg_bitfield(adapter, 0x208, mask, op ? mask : 0);
  706. } else {
  707. /* select */
  708. write_reg_bitfield(adapter, 0x310, 0x1f, (id - 6) & 0x1f);
  709. /* modify */
  710. write_reg_bitfield(adapter, 0x314, 0x00006000, op ? 0x00004000 : 0);
  711. }
  712. }
  713. /* this sets the PID that should pass the specified filter */
  714. static void pid_set_hw_pid(struct adapter *adapter, int id, u16 pid)
  715. {
  716. dprintk("%s: id=%d pid=%d\n", __FUNCTION__, id, pid);
  717. if (id <= 5) {
  718. u32 adr = 0x300 + ((id & 6) << 1);
  719. int shift = (id & 1) ? 16 : 0;
  720. dprintk("%s: id=%d addr=%x %c pid=%d\n", __FUNCTION__, id, adr, (id & 1) ? 'h' : 'l', pid);
  721. write_reg_bitfield(adapter, adr, (0x7fff) << shift, (pid & 0x1fff) << shift);
  722. } else {
  723. /* select */
  724. write_reg_bitfield(adapter, 0x310, 0x1f, (id - 6) & 0x1f);
  725. /* modify */
  726. write_reg_bitfield(adapter, 0x314, 0x1fff, pid & 0x1fff);
  727. }
  728. }
  729. /*
  730. static void filter_enable_null_filter(struct adapter *adapter, u32 op)
  731. {
  732. dprintk("%s: op=%x\n", __FUNCTION__, op);
  733. write_reg_bitfield(adapter, 0x208, 0x00000040, op?0x00000040:0);
  734. }
  735. */
  736. static void filter_enable_mask_filter(struct adapter *adapter, u32 op)
  737. {
  738. dprintk("%s: op=%x\n", __FUNCTION__, op);
  739. write_reg_bitfield(adapter, 0x208, 0x00000080, op ? 0x00000080 : 0);
  740. }
  741. static void ctrl_enable_mac(struct adapter *adapter, u32 op)
  742. {
  743. write_reg_bitfield(adapter, 0x208, 0x00004000, op ? 0x00004000 : 0);
  744. }
  745. static int ca_set_mac_dst_addr_filter(struct adapter *adapter, u8 *mac)
  746. {
  747. u32 tmp1, tmp2;
  748. tmp1 = (mac[3] << 0x18) | (mac[2] << 0x10) | (mac[1] << 0x08) | mac[0];
  749. tmp2 = (mac[5] << 0x08) | mac[4];
  750. write_reg_dw(adapter, 0x418, tmp1);
  751. write_reg_dw(adapter, 0x41c, tmp2);
  752. return 0;
  753. }
  754. /*
  755. static void set_ignore_mac_filter(struct adapter *adapter, u8 op)
  756. {
  757. if (op != 0) {
  758. write_reg_bitfield(adapter, 0x208, 0x00004000, 0);
  759. adapter->mac_filter = 1;
  760. } else {
  761. if (adapter->mac_filter != 0) {
  762. adapter->mac_filter = 0;
  763. write_reg_bitfield(adapter, 0x208, 0x00004000, 0x00004000);
  764. }
  765. }
  766. }
  767. */
  768. /*
  769. static void check_null_filter_enable(struct adapter *adapter)
  770. {
  771. filter_enable_null_filter(adapter, 1);
  772. filter_enable_mask_filter(adapter, 1);
  773. }
  774. */
  775. static void pid_set_group_pid(struct adapter *adapter, u16 pid)
  776. {
  777. u32 value;
  778. dprintk("%s: pid=%x\n", __FUNCTION__, pid);
  779. value = (pid & 0x3fff) | (read_reg_dw(adapter, 0x30c) & 0xffff0000);
  780. write_reg_dw(adapter, 0x30c, value);
  781. }
  782. static void pid_set_group_mask(struct adapter *adapter, u16 pid)
  783. {
  784. u32 value;
  785. dprintk("%s: pid=%x\n", __FUNCTION__, pid);
  786. value = ((pid & 0x3fff) << 0x10) | (read_reg_dw(adapter, 0x30c) & 0xffff);
  787. write_reg_dw(adapter, 0x30c, value);
  788. }
  789. /*
  790. static int pid_get_group_pid(struct adapter *adapter)
  791. {
  792. return read_reg_dw(adapter, 0x30c) & 0x00001fff;
  793. }
  794. static int pid_get_group_mask(struct adapter *adapter)
  795. {
  796. return (read_reg_dw(adapter, 0x30c) >> 0x10)& 0x00001fff;
  797. }
  798. */
  799. /*
  800. static void reset_hardware_pid_filter(struct adapter *adapter)
  801. {
  802. pid_set_stream1_pid(adapter, 0x1fff);
  803. pid_set_stream2_pid(adapter, 0x1fff);
  804. filter_enable_stream2_filter(adapter, 0);
  805. pid_set_pcr_pid(adapter, 0x1fff);
  806. filter_enable_pcr_filter(adapter, 0);
  807. pid_set_pmt_pid(adapter, 0x1fff);
  808. filter_enable_pmt_filter(adapter, 0);
  809. pid_set_ecm_pid(adapter, 0x1fff);
  810. filter_enable_ecm_filter(adapter, 0);
  811. pid_set_emm_pid(adapter, 0x1fff);
  812. filter_enable_emm_filter(adapter, 0);
  813. }
  814. */
  815. static void init_pids(struct adapter *adapter)
  816. {
  817. int i;
  818. adapter->pid_count = 0;
  819. adapter->whole_bandwidth_count = 0;
  820. for (i = 0; i < adapter->useable_hw_filters; i++) {
  821. dprintk("%s: setting filter %d to 0x1fff\n", __FUNCTION__, i);
  822. adapter->hw_pids[i] = 0x1fff;
  823. pid_set_hw_pid(adapter, i, 0x1fff);
  824. }
  825. pid_set_group_pid(adapter, 0);
  826. pid_set_group_mask(adapter, 0x1fe0);
  827. }
  828. static void open_whole_bandwidth(struct adapter *adapter)
  829. {
  830. dprintk("%s:\n", __FUNCTION__);
  831. pid_set_group_pid(adapter, 0);
  832. pid_set_group_mask(adapter, 0);
  833. /*
  834. filter_enable_mask_filter(adapter, 1);
  835. */
  836. }
  837. static void close_whole_bandwidth(struct adapter *adapter)
  838. {
  839. dprintk("%s:\n", __FUNCTION__);
  840. pid_set_group_pid(adapter, 0);
  841. pid_set_group_mask(adapter, 0x1fe0);
  842. /*
  843. filter_enable_mask_filter(adapter, 1);
  844. */
  845. }
  846. static void whole_bandwidth_inc(struct adapter *adapter)
  847. {
  848. if (adapter->whole_bandwidth_count++ == 0)
  849. open_whole_bandwidth(adapter);
  850. }
  851. static void whole_bandwidth_dec(struct adapter *adapter)
  852. {
  853. if (--adapter->whole_bandwidth_count <= 0)
  854. close_whole_bandwidth(adapter);
  855. }
  856. /* The specified PID has to be let through the
  857. hw filters.
  858. We try to allocate an hardware filter and open whole
  859. bandwidth when allocation is impossible.
  860. All pids<=0x1f pass through the group filter.
  861. Returns 1 on success, -1 on error */
  862. static int add_hw_pid(struct adapter *adapter, u16 pid)
  863. {
  864. int i;
  865. dprintk("%s: pid=%d\n", __FUNCTION__, pid);
  866. if (pid <= 0x1f)
  867. return 1;
  868. /* we can't use a filter for 0x2000, so no search */
  869. if (pid != 0x2000) {
  870. /* find an unused hardware filter */
  871. for (i = 0; i < adapter->useable_hw_filters; i++) {
  872. dprintk("%s: pid=%d searching slot=%d\n", __FUNCTION__, pid, i);
  873. if (adapter->hw_pids[i] == 0x1fff) {
  874. dprintk("%s: pid=%d slot=%d\n", __FUNCTION__, pid, i);
  875. adapter->hw_pids[i] = pid;
  876. pid_set_hw_pid(adapter, i, pid);
  877. filter_enable_hw_filter(adapter, i, 1);
  878. return 1;
  879. }
  880. }
  881. }
  882. /* if we have not used a filter, this pid depends on whole bandwidth */
  883. dprintk("%s: pid=%d whole_bandwidth\n", __FUNCTION__, pid);
  884. whole_bandwidth_inc(adapter);
  885. return 1;
  886. }
  887. /* returns -1 if the pid was not present in the filters */
  888. static int remove_hw_pid(struct adapter *adapter, u16 pid)
  889. {
  890. int i;
  891. dprintk("%s: pid=%d\n", __FUNCTION__, pid);
  892. if (pid <= 0x1f)
  893. return 1;
  894. /* we can't use a filter for 0x2000, so no search */
  895. if (pid != 0x2000) {
  896. for (i = 0; i < adapter->useable_hw_filters; i++) {
  897. dprintk("%s: pid=%d searching slot=%d\n", __FUNCTION__, pid, i);
  898. if (adapter->hw_pids[i] == pid) { // find the pid slot
  899. dprintk("%s: pid=%d slot=%d\n", __FUNCTION__, pid, i);
  900. adapter->hw_pids[i] = 0x1fff;
  901. pid_set_hw_pid(adapter, i, 0x1fff);
  902. filter_enable_hw_filter(adapter, i, 0);
  903. return 1;
  904. }
  905. }
  906. }
  907. /* if we have not used a filter, this pid depended on whole bandwith */
  908. dprintk("%s: pid=%d whole_bandwidth\n", __FUNCTION__, pid);
  909. whole_bandwidth_dec(adapter);
  910. return 1;
  911. }
  912. /* Adds a PID to the filters.
  913. Adding a pid more than once is possible, we keep reference counts.
  914. Whole stream available through pid==0x2000.
  915. Returns 1 on success, -1 on error */
  916. static int add_pid(struct adapter *adapter, u16 pid)
  917. {
  918. int i;
  919. dprintk("%s: pid=%d\n", __FUNCTION__, pid);
  920. if (pid > 0x1ffe && pid != 0x2000)
  921. return -1;
  922. // check if the pid is already present
  923. for (i = 0; i < adapter->pid_count; i++)
  924. if (adapter->pid_list[i] == pid) {
  925. adapter->pid_rc[i]++; // increment ref counter
  926. return 1;
  927. }
  928. if (adapter->pid_count == N_PID_SLOTS)
  929. return -1; // no more pids can be added
  930. adapter->pid_list[adapter->pid_count] = pid; // register pid
  931. adapter->pid_rc[adapter->pid_count] = 1;
  932. adapter->pid_count++;
  933. // hardware setting
  934. add_hw_pid(adapter, pid);
  935. return 1;
  936. }
  937. /* Removes a PID from the filters. */
  938. static int remove_pid(struct adapter *adapter, u16 pid)
  939. {
  940. int i;
  941. dprintk("%s: pid=%d\n", __FUNCTION__, pid);
  942. if (pid > 0x1ffe && pid != 0x2000)
  943. return -1;
  944. // check if the pid is present (it must be!)
  945. for (i = 0; i < adapter->pid_count; i++) {
  946. if (adapter->pid_list[i] == pid) {
  947. adapter->pid_rc[i]--;
  948. if (adapter->pid_rc[i] <= 0) {
  949. // remove from the list
  950. adapter->pid_count--;
  951. adapter->pid_list[i]=adapter->pid_list[adapter->pid_count];
  952. adapter->pid_rc[i] = adapter->pid_rc[adapter->pid_count];
  953. // hardware setting
  954. remove_hw_pid(adapter, pid);
  955. }
  956. return 1;
  957. }
  958. }
  959. return -1;
  960. }
  961. /* dma & irq */
  962. static void ctrl_enable_smc(struct adapter *adapter, u32 op)
  963. {
  964. write_reg_bitfield(adapter, 0x208, 0x00000800, op ? 0x00000800 : 0);
  965. }
  966. static void dma_enable_disable_irq(struct adapter *adapter, u32 flag1, u32 flag2, u32 flag3)
  967. {
  968. adapter->dma_ctrl = adapter->dma_ctrl & 0x000f0000;
  969. if (flag1 == 0) {
  970. if (flag2 == 0)
  971. adapter->dma_ctrl = adapter->dma_ctrl & ~0x00010000;
  972. else
  973. adapter->dma_ctrl = adapter->dma_ctrl | 0x00010000;
  974. if (flag3 == 0)
  975. adapter->dma_ctrl = adapter->dma_ctrl & ~0x00020000;
  976. else
  977. adapter->dma_ctrl = adapter->dma_ctrl | 0x00020000;
  978. } else {
  979. if (flag2 == 0)
  980. adapter->dma_ctrl = adapter->dma_ctrl & ~0x00040000;
  981. else
  982. adapter->dma_ctrl = adapter->dma_ctrl | 0x00040000;
  983. if (flag3 == 0)
  984. adapter->dma_ctrl = adapter->dma_ctrl & ~0x00080000;
  985. else
  986. adapter->dma_ctrl = adapter->dma_ctrl | 0x00080000;
  987. }
  988. }
  989. static void irq_dma_enable_disable_irq(struct adapter *adapter, u32 op)
  990. {
  991. u32 value;
  992. value = read_reg_dw(adapter, 0x208) & 0xfff0ffff;
  993. if (op != 0)
  994. value = value | (adapter->dma_ctrl & 0x000f0000);
  995. write_reg_dw(adapter, 0x208, value);
  996. }
  997. /* FlexCopII has 2 dma channels. DMA1 is used to transfer TS data to
  998. system memory.
  999. The DMA1 buffer is divided in 2 subbuffers of equal size.
  1000. FlexCopII will transfer TS data to one subbuffer, signal an interrupt
  1001. when the subbuffer is full and continue fillig the second subbuffer.
  1002. For DMA1:
  1003. subbuffer size in 32-bit words is stored in the first 24 bits of
  1004. register 0x004. The last 8 bits of register 0x004 contain the number
  1005. of subbuffers.
  1006. the first 30 bits of register 0x000 contain the address of the first
  1007. subbuffer. The last 2 bits contain 0, when dma1 is disabled and 1,
  1008. when dma1 is enabled.
  1009. the first 30 bits of register 0x00c contain the address of the second
  1010. subbuffer. the last 2 bits contain 1.
  1011. register 0x008 will contain the address of the subbuffer that was filled
  1012. with TS data, when FlexCopII will generate an interrupt.
  1013. For DMA2:
  1014. subbuffer size in 32-bit words is stored in the first 24 bits of
  1015. register 0x014. The last 8 bits of register 0x014 contain the number
  1016. of subbuffers.
  1017. the first 30 bits of register 0x010 contain the address of the first
  1018. subbuffer. The last 2 bits contain 0, when dma1 is disabled and 1,
  1019. when dma1 is enabled.
  1020. the first 30 bits of register 0x01c contain the address of the second
  1021. subbuffer. the last 2 bits contain 1.
  1022. register 0x018 contains the address of the subbuffer that was filled
  1023. with TS data, when FlexCopII generates an interrupt.
  1024. */
  1025. static int dma_init_dma(struct adapter *adapter, u32 dma_channel)
  1026. {
  1027. u32 subbuffers, subbufsize, subbuf0, subbuf1;
  1028. if (dma_channel == 0) {
  1029. dprintk("%s: Initializing DMA1 channel\n", __FUNCTION__);
  1030. subbuffers = 2;
  1031. subbufsize = (((adapter->dmaq1.buffer_size / 2) / 4) << 8) | subbuffers;
  1032. subbuf0 = adapter->dmaq1.bus_addr & 0xfffffffc;
  1033. subbuf1 = ((adapter->dmaq1.bus_addr + adapter->dmaq1.buffer_size / 2) & 0xfffffffc) | 1;
  1034. dprintk("%s: first subbuffer address = 0x%x\n", __FUNCTION__, subbuf0);
  1035. udelay(1000);
  1036. write_reg_dw(adapter, 0x000, subbuf0);
  1037. dprintk("%s: subbuffer size = 0x%x\n", __FUNCTION__, (subbufsize >> 8) * 4);
  1038. udelay(1000);
  1039. write_reg_dw(adapter, 0x004, subbufsize);
  1040. dprintk("%s: second subbuffer address = 0x%x\n", __FUNCTION__, subbuf1);
  1041. udelay(1000);
  1042. write_reg_dw(adapter, 0x00c, subbuf1);
  1043. dprintk("%s: counter = 0x%x\n", __FUNCTION__, adapter->dmaq1.bus_addr & 0xfffffffc);
  1044. write_reg_dw(adapter, 0x008, adapter->dmaq1.bus_addr & 0xfffffffc);
  1045. udelay(1000);
  1046. dma_enable_disable_irq(adapter, 0, 1, subbuffers ? 1 : 0);
  1047. irq_dma_enable_disable_irq(adapter, 1);
  1048. sram_set_media_dest(adapter, 1);
  1049. sram_set_net_dest(adapter, 1);
  1050. sram_set_cai_dest(adapter, 2);
  1051. sram_set_cao_dest(adapter, 2);
  1052. }
  1053. if (dma_channel == 1) {
  1054. dprintk("%s: Initializing DMA2 channel\n", __FUNCTION__);
  1055. subbuffers = 2;
  1056. subbufsize = (((adapter->dmaq2.buffer_size / 2) / 4) << 8) | subbuffers;
  1057. subbuf0 = adapter->dmaq2.bus_addr & 0xfffffffc;
  1058. subbuf1 = ((adapter->dmaq2.bus_addr + adapter->dmaq2.buffer_size / 2) & 0xfffffffc) | 1;
  1059. dprintk("%s: first subbuffer address = 0x%x\n", __FUNCTION__, subbuf0);
  1060. udelay(1000);
  1061. write_reg_dw(adapter, 0x010, subbuf0);
  1062. dprintk("%s: subbuffer size = 0x%x\n", __FUNCTION__, (subbufsize >> 8) * 4);
  1063. udelay(1000);
  1064. write_reg_dw(adapter, 0x014, subbufsize);
  1065. dprintk("%s: second buffer address = 0x%x\n", __FUNCTION__, subbuf1);
  1066. udelay(1000);
  1067. write_reg_dw(adapter, 0x01c, subbuf1);
  1068. sram_set_cai_dest(adapter, 2);
  1069. }
  1070. return 0;
  1071. }
  1072. static void ctrl_enable_receive_data(struct adapter *adapter, u32 op)
  1073. {
  1074. if (op == 0) {
  1075. write_reg_bitfield(adapter, 0x208, 0x00008000, 0);
  1076. adapter->dma_status = adapter->dma_status & ~0x00000004;
  1077. } else {
  1078. write_reg_bitfield(adapter, 0x208, 0x00008000, 0x00008000);
  1079. adapter->dma_status = adapter->dma_status | 0x00000004;
  1080. }
  1081. }
  1082. /* bit 0 of dma_mask is set to 1 if dma1 channel has to be enabled/disabled
  1083. bit 1 of dma_mask is set to 1 if dma2 channel has to be enabled/disabled
  1084. */
  1085. static void dma_start_stop(struct adapter *adapter, u32 dma_mask, int start_stop)
  1086. {
  1087. u32 dma_enable, dma1_enable, dma2_enable;
  1088. dprintk("%s: dma_mask=%x\n", __FUNCTION__, dma_mask);
  1089. if (start_stop == 1) {
  1090. dprintk("%s: starting dma\n", __FUNCTION__);
  1091. dma1_enable = 0;
  1092. dma2_enable = 0;
  1093. if (((dma_mask & 1) != 0) && ((adapter->dma_status & 1) == 0) && (adapter->dmaq1.bus_addr != 0)) {
  1094. adapter->dma_status = adapter->dma_status | 1;
  1095. dma1_enable = 1;
  1096. }
  1097. if (((dma_mask & 2) != 0) && ((adapter->dma_status & 2) == 0) && (adapter->dmaq2.bus_addr != 0)) {
  1098. adapter->dma_status = adapter->dma_status | 2;
  1099. dma2_enable = 1;
  1100. }
  1101. // enable dma1 and dma2
  1102. if ((dma1_enable == 1) && (dma2_enable == 1)) {
  1103. write_reg_dw(adapter, 0x000, adapter->dmaq1.bus_addr | 1);
  1104. write_reg_dw(adapter, 0x00c, (adapter->dmaq1.bus_addr + adapter->dmaq1.buffer_size / 2) | 1);
  1105. write_reg_dw(adapter, 0x010, adapter->dmaq2.bus_addr | 1);
  1106. ctrl_enable_receive_data(adapter, 1);
  1107. return;
  1108. }
  1109. // enable dma1
  1110. if ((dma1_enable == 1) && (dma2_enable == 0)) {
  1111. write_reg_dw(adapter, 0x000, adapter->dmaq1.bus_addr | 1);
  1112. write_reg_dw(adapter, 0x00c, (adapter->dmaq1.bus_addr + adapter->dmaq1.buffer_size / 2) | 1);
  1113. ctrl_enable_receive_data(adapter, 1);
  1114. return;
  1115. }
  1116. // enable dma2
  1117. if ((dma1_enable == 0) && (dma2_enable == 1)) {
  1118. write_reg_dw(adapter, 0x010, adapter->dmaq2.bus_addr | 1);
  1119. ctrl_enable_receive_data(adapter, 1);
  1120. return;
  1121. }
  1122. // start dma
  1123. if ((dma1_enable == 0) && (dma2_enable == 0)) {
  1124. ctrl_enable_receive_data(adapter, 1);
  1125. return;
  1126. }
  1127. } else {
  1128. dprintk("%s: stopping dma\n", __FUNCTION__);
  1129. dma_enable = adapter->dma_status & 0x00000003;
  1130. if (((dma_mask & 1) != 0) && ((adapter->dma_status & 1) != 0)) {
  1131. dma_enable = dma_enable & 0xfffffffe;
  1132. }
  1133. if (((dma_mask & 2) != 0) && ((adapter->dma_status & 2) != 0)) {
  1134. dma_enable = dma_enable & 0xfffffffd;
  1135. }
  1136. //stop dma
  1137. if ((dma_enable == 0) && ((adapter->dma_status & 4) != 0)) {
  1138. ctrl_enable_receive_data(adapter, 0);
  1139. udelay(3000);
  1140. }
  1141. //disable dma1
  1142. if (((dma_mask & 1) != 0) && ((adapter->dma_status & 1) != 0) && (adapter->dmaq1.bus_addr != 0)) {
  1143. write_reg_dw(adapter, 0x000, adapter->dmaq1.bus_addr);
  1144. write_reg_dw(adapter, 0x00c, (adapter->dmaq1.bus_addr + adapter->dmaq1.buffer_size / 2) | 1);
  1145. adapter->dma_status = adapter->dma_status & ~0x00000001;
  1146. }
  1147. //disable dma2
  1148. if (((dma_mask & 2) != 0) && ((adapter->dma_status & 2) != 0) && (adapter->dmaq2.bus_addr != 0)) {
  1149. write_reg_dw(adapter, 0x010, adapter->dmaq2.bus_addr);
  1150. adapter->dma_status = adapter->dma_status & ~0x00000002;
  1151. }
  1152. }
  1153. }
  1154. static void open_stream(struct adapter *adapter, u16 pid)
  1155. {
  1156. u32 dma_mask;
  1157. ++adapter->capturing;
  1158. filter_enable_mask_filter(adapter, 1);
  1159. add_pid(adapter, pid);
  1160. dprintk("%s: adapter->dma_status=%x\n", __FUNCTION__, adapter->dma_status);
  1161. if ((adapter->dma_status & 7) != 7) {
  1162. dma_mask = 0;
  1163. if (((adapter->dma_status & 0x10000000) != 0) && ((adapter->dma_status & 1) == 0)) {
  1164. dma_mask = dma_mask | 1;
  1165. adapter->dmaq1.head = 0;
  1166. adapter->dmaq1.tail = 0;
  1167. memset(adapter->dmaq1.buffer, 0, adapter->dmaq1.buffer_size);
  1168. }
  1169. if (((adapter->dma_status & 0x20000000) != 0) && ((adapter->dma_status & 2) == 0)) {
  1170. dma_mask = dma_mask | 2;
  1171. adapter->dmaq2.head = 0;
  1172. adapter->dmaq2.tail = 0;
  1173. }
  1174. if (dma_mask != 0) {
  1175. irq_dma_enable_disable_irq(adapter, 1);
  1176. dma_start_stop(adapter, dma_mask, 1);
  1177. }
  1178. }
  1179. }
  1180. static void close_stream(struct adapter *adapter, u16 pid)
  1181. {
  1182. if (adapter->capturing > 0)
  1183. --adapter->capturing;
  1184. dprintk("%s: dma_status=%x\n", __FUNCTION__, adapter->dma_status);
  1185. if (adapter->capturing == 0) {
  1186. u32 dma_mask = 0;
  1187. if ((adapter->dma_status & 1) != 0)
  1188. dma_mask = dma_mask | 0x00000001;
  1189. if ((adapter->dma_status & 2) != 0)
  1190. dma_mask = dma_mask | 0x00000002;
  1191. if (dma_mask != 0) {
  1192. dma_start_stop(adapter, dma_mask, 0);
  1193. }
  1194. }
  1195. remove_pid(adapter, pid);
  1196. }
  1197. static void interrupt_service_dma1(struct adapter *adapter)
  1198. {
  1199. struct dvb_demux *dvbdmx = &adapter->demux;
  1200. int n_cur_dma_counter;
  1201. u32 n_num_bytes_parsed;
  1202. u32 n_num_new_bytes_transferred;
  1203. u32 dw_default_packet_size = 188;
  1204. u8 gb_tmp_buffer[188];
  1205. u8 *pb_dma_buf_cur_pos;
  1206. n_cur_dma_counter = readl(adapter->io_mem + 0x008) - adapter->dmaq1.bus_addr;
  1207. n_cur_dma_counter = (n_cur_dma_counter / dw_default_packet_size) * dw_default_packet_size;
  1208. if ((n_cur_dma_counter < 0) || (n_cur_dma_counter > adapter->dmaq1.buffer_size)) {
  1209. dprintk("%s: dma counter outside dma buffer\n", __FUNCTION__);
  1210. return;
  1211. }
  1212. adapter->dmaq1.head = n_cur_dma_counter;
  1213. if (adapter->dmaq1.tail <= n_cur_dma_counter) {
  1214. n_num_new_bytes_transferred = n_cur_dma_counter - adapter->dmaq1.tail;
  1215. } else {
  1216. n_num_new_bytes_transferred = (adapter->dmaq1.buffer_size - adapter->dmaq1.tail) + n_cur_dma_counter;
  1217. }
  1218. ddprintk("%s: n_cur_dma_counter = %d\n", __FUNCTION__, n_cur_dma_counter);
  1219. ddprintk("%s: dmaq1.tail = %d\n", __FUNCTION__, adapter->dmaq1.tail);
  1220. ddprintk("%s: bytes_transferred = %d\n", __FUNCTION__, n_num_new_bytes_transferred);
  1221. if (n_num_new_bytes_transferred < dw_default_packet_size)
  1222. return;
  1223. n_num_bytes_parsed = 0;
  1224. while (n_num_bytes_parsed < n_num_new_bytes_transferred) {
  1225. pb_dma_buf_cur_pos = adapter->dmaq1.buffer + adapter->dmaq1.tail;
  1226. if (adapter->dmaq1.buffer + adapter->dmaq1.buffer_size < adapter->dmaq1.buffer + adapter->dmaq1.tail + 188) {
  1227. memcpy(gb_tmp_buffer, adapter->dmaq1.buffer + adapter->dmaq1.tail,
  1228. adapter->dmaq1.buffer_size - adapter->dmaq1.tail);
  1229. memcpy(gb_tmp_buffer + (adapter->dmaq1.buffer_size - adapter->dmaq1.tail), adapter->dmaq1.buffer,
  1230. (188 - (adapter->dmaq1.buffer_size - adapter->dmaq1.tail)));
  1231. pb_dma_buf_cur_pos = gb_tmp_buffer;
  1232. }
  1233. if (adapter->capturing != 0) {
  1234. dvb_dmx_swfilter_packets(dvbdmx, pb_dma_buf_cur_pos, dw_default_packet_size / 188);
  1235. }
  1236. n_num_bytes_parsed = n_num_bytes_parsed + dw_default_packet_size;
  1237. adapter->dmaq1.tail = adapter->dmaq1.tail + dw_default_packet_size;
  1238. if (adapter->dmaq1.tail >= adapter->dmaq1.buffer_size)
  1239. adapter->dmaq1.tail = adapter->dmaq1.tail - adapter->dmaq1.buffer_size;
  1240. };
  1241. }
  1242. static void interrupt_service_dma2(struct adapter *adapter)
  1243. {
  1244. printk("%s:\n", __FUNCTION__);
  1245. }
  1246. static irqreturn_t isr(int irq, void *dev_id, struct pt_regs *regs)
  1247. {
  1248. struct adapter *tmp = dev_id;
  1249. u32 value;
  1250. ddprintk("%s:\n", __FUNCTION__);
  1251. spin_lock_irq(&tmp->lock);
  1252. if (0 == ((value = read_reg_dw(tmp, 0x20c)) & 0x0f)) {
  1253. spin_unlock_irq(&tmp->lock);
  1254. return IRQ_NONE;
  1255. }
  1256. while (value != 0) {
  1257. if ((value & 0x03) != 0)
  1258. interrupt_service_dma1(tmp);
  1259. if ((value & 0x0c) != 0)
  1260. interrupt_service_dma2(tmp);
  1261. value = read_reg_dw(tmp, 0x20c) & 0x0f;
  1262. }
  1263. spin_unlock_irq(&tmp->lock);
  1264. return IRQ_HANDLED;
  1265. }
  1266. static int init_dma_queue_one(struct adapter *adapter, struct dmaq *dmaq,
  1267. int size, int dmaq_offset)
  1268. {
  1269. struct pci_dev *pdev = adapter->pdev;
  1270. dma_addr_t dma_addr;
  1271. dmaq->head = 0;
  1272. dmaq->tail = 0;
  1273. dmaq->buffer = pci_alloc_consistent(pdev, size + 0x80, &dma_addr);
  1274. if (!dmaq->buffer)
  1275. return -ENOMEM;
  1276. dmaq->bus_addr = dma_addr;
  1277. dmaq->buffer_size = size;
  1278. dma_init_dma(adapter, dmaq_offset);
  1279. ddprintk("%s: allocated dma buffer at 0x%p, length=%d\n",
  1280. __FUNCTION__, dmaq->buffer, size);
  1281. return 0;
  1282. }
  1283. static int init_dma_queue(struct adapter *adapter)
  1284. {
  1285. struct {
  1286. struct dmaq *dmaq;
  1287. u32 dma_status;
  1288. int size;
  1289. } dmaq_desc[] = {
  1290. { &adapter->dmaq1, 0x10000000, SIZE_OF_BUF_DMA1 },
  1291. { &adapter->dmaq2, 0x20000000, SIZE_OF_BUF_DMA2 }
  1292. }, *p = dmaq_desc;
  1293. int i;
  1294. for (i = 0; i < 2; i++, p++) {
  1295. if (init_dma_queue_one(adapter, p->dmaq, p->size, i) < 0)
  1296. adapter->dma_status &= ~p->dma_status;
  1297. else
  1298. adapter->dma_status |= p->dma_status;
  1299. }
  1300. return (adapter->dma_status & 0x30000000) ? 0 : -ENOMEM;
  1301. }
  1302. static void free_dma_queue_one(struct adapter *adapter, struct dmaq *dmaq)
  1303. {
  1304. if (dmaq->buffer) {
  1305. pci_free_consistent(adapter->pdev, dmaq->buffer_size + 0x80,
  1306. dmaq->buffer, dmaq->bus_addr);
  1307. memset(dmaq, 0, sizeof(*dmaq));
  1308. }
  1309. }
  1310. static void free_dma_queue(struct adapter *adapter)
  1311. {
  1312. struct dmaq *dmaq[] = {
  1313. &adapter->dmaq1,
  1314. &adapter->dmaq2,
  1315. NULL
  1316. }, **p;
  1317. for (p = dmaq; *p; p++)
  1318. free_dma_queue_one(adapter, *p);
  1319. }
  1320. static void release_adapter(struct adapter *adapter)
  1321. {
  1322. struct pci_dev *pdev = adapter->pdev;
  1323. iounmap(adapter->io_mem);
  1324. pci_disable_device(pdev);
  1325. pci_release_region(pdev, 0);
  1326. pci_release_region(pdev, 1);
  1327. }
  1328. static void free_adapter_object(struct adapter *adapter)
  1329. {
  1330. dprintk("%s:\n", __FUNCTION__);
  1331. close_stream(adapter, 0);
  1332. free_irq(adapter->irq, adapter);
  1333. free_dma_queue(adapter);
  1334. release_adapter(adapter);
  1335. kfree(adapter);
  1336. }
  1337. static struct pci_driver skystar2_pci_driver;
  1338. static int claim_adapter(struct adapter *adapter)
  1339. {
  1340. struct pci_dev *pdev = adapter->pdev;
  1341. u16 var;
  1342. int ret;
  1343. ret = pci_request_region(pdev, 1, skystar2_pci_driver.name);
  1344. if (ret < 0)
  1345. goto out;
  1346. ret = pci_request_region(pdev, 0, skystar2_pci_driver.name);
  1347. if (ret < 0)
  1348. goto err_pci_release_1;
  1349. pci_read_config_byte(pdev, PCI_CLASS_REVISION, &adapter->card_revision);
  1350. dprintk("%s: card revision %x \n", __FUNCTION__, adapter->card_revision);
  1351. ret = pci_enable_device(pdev);
  1352. if (ret < 0)
  1353. goto err_pci_release_0;
  1354. pci_read_config_word(pdev, 4, &var);
  1355. if ((var & 4) == 0)
  1356. pci_set_master(pdev);
  1357. adapter->io_port = pdev->resource[1].start;
  1358. adapter->io_mem = ioremap(pdev->resource[0].start, 0x800);
  1359. if (!adapter->io_mem) {
  1360. dprintk("%s: can not map io memory\n", __FUNCTION__);
  1361. ret = -EIO;
  1362. goto err_pci_disable;
  1363. }
  1364. dprintk("%s: io memory maped at %p\n", __FUNCTION__, adapter->io_mem);
  1365. ret = 1;
  1366. out:
  1367. return ret;
  1368. err_pci_disable:
  1369. pci_disable_device(pdev);
  1370. err_pci_release_0:
  1371. pci_release_region(pdev, 0);
  1372. err_pci_release_1:
  1373. pci_release_region(pdev, 1);
  1374. goto out;
  1375. }
  1376. /*
  1377. static int sll_reset_flexcop(struct adapter *adapter)
  1378. {
  1379. write_reg_dw(adapter, 0x208, 0);
  1380. write_reg_dw(adapter, 0x210, 0xb2ff);
  1381. return 0;
  1382. }
  1383. */
  1384. static void decide_how_many_hw_filters(struct adapter *adapter)
  1385. {
  1386. int hw_filters;
  1387. int mod_option_hw_filters;
  1388. // FlexCop IIb & III have 6+32 hw filters
  1389. // FlexCop II has 6 hw filters, every other should have at least 6
  1390. switch (adapter->b2c2_revision) {
  1391. case 0x82: /* II */
  1392. hw_filters = 6;
  1393. break;
  1394. case 0xc3: /* IIB */
  1395. hw_filters = 6 + 32;
  1396. break;
  1397. case 0xc0: /* III */
  1398. hw_filters = 6 + 32;
  1399. break;
  1400. default:
  1401. hw_filters = 6;
  1402. break;
  1403. }
  1404. printk("%s: the chip has %i hardware filters", __FILE__, hw_filters);
  1405. mod_option_hw_filters = 0;
  1406. if (enable_hw_filters >= 1)
  1407. mod_option_hw_filters += 6;
  1408. if (enable_hw_filters >= 2)
  1409. mod_option_hw_filters += 32;
  1410. if (mod_option_hw_filters >= hw_filters) {
  1411. adapter->useable_hw_filters = hw_filters;
  1412. } else {
  1413. adapter->useable_hw_filters = mod_option_hw_filters;
  1414. printk(", but only %d will be used because of module option", mod_option_hw_filters);
  1415. }
  1416. printk("\n");
  1417. dprintk("%s: useable_hardware_filters set to %i\n", __FILE__, adapter->useable_hw_filters);
  1418. }
  1419. static int driver_initialize(struct pci_dev *pdev)
  1420. {
  1421. struct adapter *adapter;
  1422. u32 tmp;
  1423. int ret = -ENOMEM;
  1424. adapter = kmalloc(sizeof(struct adapter), GFP_KERNEL);
  1425. if (!adapter) {
  1426. dprintk("%s: out of memory!\n", __FUNCTION__);
  1427. goto out;
  1428. }
  1429. memset(adapter, 0, sizeof(struct adapter));
  1430. pci_set_drvdata(pdev,adapter);
  1431. adapter->pdev = pdev;
  1432. adapter->irq = pdev->irq;
  1433. ret = claim_adapter(adapter);
  1434. if (ret < 0)
  1435. goto err_kfree;
  1436. irq_dma_enable_disable_irq(adapter, 0);
  1437. ret = request_irq(pdev->irq, isr, 0x4000000, "Skystar2", adapter);
  1438. if (ret < 0) {
  1439. dprintk("%s: unable to allocate irq=%d !\n", __FUNCTION__, pdev->irq);
  1440. goto err_release_adapter;
  1441. }
  1442. read_reg_dw(adapter, 0x208);
  1443. write_reg_dw(adapter, 0x208, 0);
  1444. write_reg_dw(adapter, 0x210, 0xb2ff);
  1445. write_reg_dw(adapter, 0x208, 0x40);
  1446. ret = init_dma_queue(adapter);
  1447. if (ret < 0)
  1448. goto err_free_irq;
  1449. adapter->b2c2_revision = (read_reg_dw(adapter, 0x204) >> 0x18);
  1450. switch (adapter->b2c2_revision) {
  1451. case 0x82:
  1452. printk("%s: FlexCopII(rev.130) chip found\n", __FILE__);
  1453. break;
  1454. case 0xc3:
  1455. printk("%s: FlexCopIIB(rev.195) chip found\n", __FILE__);
  1456. break;
  1457. case 0xc0:
  1458. printk("%s: FlexCopIII(rev.192) chip found\n", __FILE__);
  1459. break;
  1460. default:
  1461. printk("%s: The revision of the FlexCop chip on your card is %d\n", __FILE__, adapter->b2c2_revision);
  1462. printk("%s: This driver works only with FlexCopII(rev.130), FlexCopIIB(rev.195) and FlexCopIII(rev.192).\n", __FILE__);
  1463. ret = -ENODEV;
  1464. goto err_free_dma_queue;
  1465. }
  1466. decide_how_many_hw_filters(adapter);
  1467. init_pids(adapter);
  1468. tmp = read_reg_dw(adapter, 0x204);
  1469. write_reg_dw(adapter, 0x204, 0);
  1470. mdelay(20);
  1471. write_reg_dw(adapter, 0x204, tmp);
  1472. mdelay(10);
  1473. tmp = read_reg_dw(adapter, 0x308);
  1474. write_reg_dw(adapter, 0x308, 0x4000 | tmp);
  1475. adapter->dw_sram_type = 0x10000;
  1476. sll_detect_sram_size(adapter);
  1477. dprintk("%s sram length = %d, sram type= %x\n", __FUNCTION__, sram_length(adapter), adapter->dw_sram_type);
  1478. sram_set_media_dest(adapter, 1);
  1479. sram_set_net_dest(adapter, 1);
  1480. ctrl_enable_smc(adapter, 0);
  1481. sram_set_cai_dest(adapter, 2);
  1482. sram_set_cao_dest(adapter, 2);
  1483. dma_enable_disable_irq(adapter, 1, 0, 0);
  1484. if (eeprom_get_mac_addr(adapter, 0, adapter->mac_addr) != 0) {
  1485. printk("%s MAC address = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x \n", __FUNCTION__, adapter->mac_addr[0],
  1486. adapter->mac_addr[1], adapter->mac_addr[2], adapter->mac_addr[3], adapter->mac_addr[4], adapter->mac_addr[5],
  1487. adapter->mac_addr[6], adapter->mac_addr[7]
  1488. );
  1489. ca_set_mac_dst_addr_filter(adapter, adapter->mac_addr);
  1490. ctrl_enable_mac(adapter, 1);
  1491. }
  1492. spin_lock_init(&adapter->lock);
  1493. out:
  1494. return ret;
  1495. err_free_dma_queue:
  1496. free_dma_queue(adapter);
  1497. err_free_irq:
  1498. free_irq(pdev->irq, adapter);
  1499. err_release_adapter:
  1500. release_adapter(adapter);
  1501. err_kfree:
  1502. pci_set_drvdata(pdev, NULL);
  1503. kfree(adapter);
  1504. goto out;
  1505. }
  1506. static void driver_halt(struct pci_dev *pdev)
  1507. {
  1508. struct adapter *adapter = pci_get_drvdata(pdev);
  1509. irq_dma_enable_disable_irq(adapter, 0);
  1510. ctrl_enable_receive_data(adapter, 0);
  1511. free_adapter_object(adapter);
  1512. pci_set_drvdata(pdev, NULL);
  1513. }
  1514. static int dvb_start_feed(struct dvb_demux_feed *dvbdmxfeed)
  1515. {
  1516. struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
  1517. struct adapter *adapter = (struct adapter *) dvbdmx->priv;
  1518. dprintk("%s: PID=%d, type=%d\n", __FUNCTION__, dvbdmxfeed->pid, dvbdmxfeed->type);
  1519. open_stream(adapter, dvbdmxfeed->pid);
  1520. return 0;
  1521. }
  1522. static int dvb_stop_feed(struct dvb_demux_feed *dvbdmxfeed)
  1523. {
  1524. struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
  1525. struct adapter *adapter = (struct adapter *) dvbdmx->priv;
  1526. dprintk("%s: PID=%d, type=%d\n", __FUNCTION__, dvbdmxfeed->pid, dvbdmxfeed->type);
  1527. close_stream(adapter, dvbdmxfeed->pid);
  1528. return 0;
  1529. }
  1530. /* lnb control */
  1531. static void set_tuner_tone(struct adapter *adapter, u8 tone)
  1532. {
  1533. u16 wz_half_period_for_45_mhz[] = { 0x01ff, 0x0154, 0x00ff, 0x00cc };
  1534. u16 ax;
  1535. dprintk("%s: %u\n", __FUNCTION__, tone);
  1536. switch (tone) {
  1537. case 1:
  1538. ax = wz_half_period_for_45_mhz[0];
  1539. break;
  1540. case 2:
  1541. ax = wz_half_period_for_45_mhz[1];
  1542. break;
  1543. case 3:
  1544. ax = wz_half_period_for_45_mhz[2];
  1545. break;
  1546. case 4:
  1547. ax = wz_half_period_for_45_mhz[3];
  1548. break;
  1549. default:
  1550. ax = 0;
  1551. }
  1552. if (ax != 0) {
  1553. write_reg_dw(adapter, 0x200, ((ax << 0x0f) + (ax & 0x7fff)) | 0x40000000);
  1554. } else {
  1555. write_reg_dw(adapter, 0x200, 0x40ff8000);
  1556. }
  1557. }
  1558. static void set_tuner_polarity(struct adapter *adapter, u8 polarity)
  1559. {
  1560. u32 var;
  1561. dprintk("%s : polarity = %u \n", __FUNCTION__, polarity);
  1562. var = read_reg_dw(adapter, 0x204);
  1563. if (polarity == 0) {
  1564. dprintk("%s: LNB power off\n", __FUNCTION__);
  1565. var = var | 1;
  1566. };
  1567. if (polarity == 1) {
  1568. var = var & ~1;
  1569. var = var & ~4;
  1570. };
  1571. if (polarity == 2) {
  1572. var = var & ~1;
  1573. var = var | 4;
  1574. }
  1575. write_reg_dw(adapter, 0x204, var);
  1576. }
  1577. static void diseqc_send_bit(struct adapter *adapter, int data)
  1578. {
  1579. set_tuner_tone(adapter, 1);
  1580. udelay(data ? 500 : 1000);
  1581. set_tuner_tone(adapter, 0);
  1582. udelay(data ? 1000 : 500);
  1583. }
  1584. static void diseqc_send_byte(struct adapter *adapter, int data)
  1585. {
  1586. int i, par = 1, d;
  1587. for (i = 7; i >= 0; i--) {
  1588. d = (data >> i) & 1;
  1589. par ^= d;
  1590. diseqc_send_bit(adapter, d);
  1591. }
  1592. diseqc_send_bit(adapter, par);
  1593. }
  1594. static int send_diseqc_msg(struct adapter *adapter, int len, u8 *msg, unsigned long burst)
  1595. {
  1596. int i;
  1597. set_tuner_tone(adapter, 0);
  1598. mdelay(16);
  1599. for (i = 0; i < len; i++)
  1600. diseqc_send_byte(adapter, msg[i]);
  1601. mdelay(16);
  1602. if (burst != -1) {
  1603. if (burst)
  1604. diseqc_send_byte(adapter, 0xff);
  1605. else {
  1606. set_tuner_tone(adapter, 1);
  1607. udelay(12500);
  1608. set_tuner_tone(adapter, 0);
  1609. }
  1610. msleep(20);
  1611. }
  1612. return 0;
  1613. }
  1614. static int flexcop_set_tone(struct dvb_frontend* fe, fe_sec_tone_mode_t tone)
  1615. {
  1616. struct adapter* adapter = (struct adapter*) fe->dvb->priv;
  1617. switch(tone) {
  1618. case SEC_TONE_ON:
  1619. set_tuner_tone(adapter, 1);
  1620. break;
  1621. case SEC_TONE_OFF:
  1622. set_tuner_tone(adapter, 0);
  1623. break;
  1624. default:
  1625. return -EINVAL;
  1626. };
  1627. return 0;
  1628. }
  1629. static int flexcop_diseqc_send_master_cmd(struct dvb_frontend* fe, struct dvb_diseqc_master_cmd* cmd)
  1630. {
  1631. struct adapter* adapter = (struct adapter*) fe->dvb->priv;
  1632. send_diseqc_msg(adapter, cmd->msg_len, cmd->msg, 0);
  1633. return 0;
  1634. }
  1635. static int flexcop_diseqc_send_burst(struct dvb_frontend* fe, fe_sec_mini_cmd_t minicmd)
  1636. {
  1637. struct adapter* adapter = (struct adapter*) fe->dvb->priv;
  1638. send_diseqc_msg(adapter, 0, NULL, minicmd);
  1639. return 0;
  1640. }
  1641. static int flexcop_set_voltage(struct dvb_frontend* fe, fe_sec_voltage_t voltage)
  1642. {
  1643. struct adapter* adapter = (struct adapter*) fe->dvb->priv;
  1644. dprintk("%s: FE_SET_VOLTAGE\n", __FUNCTION__);
  1645. switch (voltage) {
  1646. case SEC_VOLTAGE_13:
  1647. dprintk("%s: SEC_VOLTAGE_13, %x\n", __FUNCTION__, SEC_VOLTAGE_13);
  1648. set_tuner_polarity(adapter, 1);
  1649. return 0;
  1650. case SEC_VOLTAGE_18:
  1651. dprintk("%s: SEC_VOLTAGE_18, %x\n", __FUNCTION__, SEC_VOLTAGE_18);
  1652. set_tuner_polarity(adapter, 2);
  1653. return 0;
  1654. default:
  1655. return -EINVAL;
  1656. }
  1657. }
  1658. static int flexcop_sleep(struct dvb_frontend* fe)
  1659. {
  1660. struct adapter* adapter = (struct adapter*) fe->dvb->priv;
  1661. dprintk("%s: FE_SLEEP\n", __FUNCTION__);
  1662. set_tuner_polarity(adapter, 0);
  1663. if (adapter->fe_sleep) return adapter->fe_sleep(fe);
  1664. return 0;
  1665. }
  1666. static u32 flexcop_i2c_func(struct i2c_adapter *adapter)
  1667. {
  1668. printk("flexcop_i2c_func\n");
  1669. return I2C_FUNC_I2C;
  1670. }
  1671. static struct i2c_algorithm flexcop_algo = {
  1672. .name = "flexcop i2c algorithm",
  1673. .id = I2C_ALGO_BIT,
  1674. .master_xfer = master_xfer,
  1675. .functionality = flexcop_i2c_func,
  1676. };
  1677. static int samsung_tbmu24112_set_symbol_rate(struct dvb_frontend* fe, u32 srate, u32 ratio)
  1678. {
  1679. u8 aclk = 0;
  1680. u8 bclk = 0;
  1681. if (srate < 1500000) { aclk = 0xb7; bclk = 0x47; }
  1682. else if (srate < 3000000) { aclk = 0xb7; bclk = 0x4b; }
  1683. else if (srate < 7000000) { aclk = 0xb7; bclk = 0x4f; }
  1684. else if (srate < 14000000) { aclk = 0xb7; bclk = 0x53; }
  1685. else if (srate < 30000000) { aclk = 0xb6; bclk = 0x53; }
  1686. else if (srate < 45000000) { aclk = 0xb4; bclk = 0x51; }
  1687. stv0299_writereg (fe, 0x13, aclk);
  1688. stv0299_writereg (fe, 0x14, bclk);
  1689. stv0299_writereg (fe, 0x1f, (ratio >> 16) & 0xff);
  1690. stv0299_writereg (fe, 0x20, (ratio >> 8) & 0xff);
  1691. stv0299_writereg (fe, 0x21, (ratio ) & 0xf0);
  1692. return 0;
  1693. }
  1694. static int samsung_tbmu24112_pll_set(struct dvb_frontend* fe, struct dvb_frontend_parameters* params)
  1695. {
  1696. u8 buf[4];
  1697. u32 div;
  1698. struct i2c_msg msg = { .addr = 0x61, .flags = 0, .buf = buf, .len = sizeof(buf) };
  1699. struct adapter* adapter = (struct adapter*) fe->dvb->priv;
  1700. div = params->frequency / 125;
  1701. buf[0] = (div >> 8) & 0x7f;
  1702. buf[1] = div & 0xff;
  1703. buf[2] = 0x84; // 0xC4
  1704. buf[3] = 0x08;
  1705. if (params->frequency < 1500000) buf[3] |= 0x10;
  1706. if (i2c_transfer (&adapter->i2c_adap, &msg, 1) != 1) return -EIO;
  1707. return 0;
  1708. }
  1709. static u8 samsung_tbmu24112_inittab[] = {
  1710. 0x01, 0x15,
  1711. 0x02, 0x30,
  1712. 0x03, 0x00,
  1713. 0x04, 0x7D,
  1714. 0x05, 0x35,
  1715. 0x06, 0x02,
  1716. 0x07, 0x00,
  1717. 0x08, 0xC3,
  1718. 0x0C, 0x00,
  1719. 0x0D, 0x81,
  1720. 0x0E, 0x23,
  1721. 0x0F, 0x12,
  1722. 0x10, 0x7E,
  1723. 0x11, 0x84,
  1724. 0x12, 0xB9,
  1725. 0x13, 0x88,
  1726. 0x14, 0x89,
  1727. 0x15, 0xC9,
  1728. 0x16, 0x00,
  1729. 0x17, 0x5C,
  1730. 0x18, 0x00,
  1731. 0x19, 0x00,
  1732. 0x1A, 0x00,
  1733. 0x1C, 0x00,
  1734. 0x1D, 0x00,
  1735. 0x1E, 0x00,
  1736. 0x1F, 0x3A,
  1737. 0x20, 0x2E,
  1738. 0x21, 0x80,
  1739. 0x22, 0xFF,
  1740. 0x23, 0xC1,
  1741. 0x28, 0x00,
  1742. 0x29, 0x1E,
  1743. 0x2A, 0x14,
  1744. 0x2B, 0x0F,
  1745. 0x2C, 0x09,
  1746. 0x2D, 0x05,
  1747. 0x31, 0x1F,
  1748. 0x32, 0x19,
  1749. 0x33, 0xFE,
  1750. 0x34, 0x93,
  1751. 0xff, 0xff,
  1752. };
  1753. static struct stv0299_config samsung_tbmu24112_config = {
  1754. .demod_address = 0x68,
  1755. .inittab = samsung_tbmu24112_inittab,
  1756. .mclk = 88000000UL,
  1757. .invert = 0,
  1758. .enhanced_tuning = 0,
  1759. .skip_reinit = 0,
  1760. .lock_output = STV0229_LOCKOUTPUT_LK,
  1761. .volt13_op0_op1 = STV0299_VOLT13_OP1,
  1762. .min_delay_ms = 100,
  1763. .set_symbol_rate = samsung_tbmu24112_set_symbol_rate,
  1764. .pll_set = samsung_tbmu24112_pll_set,
  1765. };
  1766. static int nxt2002_request_firmware(struct dvb_frontend* fe, const struct firmware **fw, char* name)
  1767. {
  1768. struct adapter* adapter = (struct adapter*) fe->dvb->priv;
  1769. return request_firmware(fw, name, &adapter->pdev->dev);
  1770. }
  1771. static struct nxt2002_config samsung_tbmv_config = {
  1772. .demod_address = 0x0A,
  1773. .request_firmware = nxt2002_request_firmware,
  1774. };
  1775. static int samsung_tdtc9251dh0_demod_init(struct dvb_frontend* fe)
  1776. {
  1777. static u8 mt352_clock_config [] = { 0x89, 0x18, 0x2d };
  1778. static u8 mt352_reset [] = { 0x50, 0x80 };
  1779. static u8 mt352_adc_ctl_1_cfg [] = { 0x8E, 0x40 };
  1780. static u8 mt352_agc_cfg [] = { 0x67, 0x28, 0xa1 };
  1781. static u8 mt352_capt_range_cfg[] = { 0x75, 0x32 };
  1782. mt352_write(fe, mt352_clock_config, sizeof(mt352_clock_config));
  1783. udelay(2000);
  1784. mt352_write(fe, mt352_reset, sizeof(mt352_reset));
  1785. mt352_write(fe, mt352_adc_ctl_1_cfg, sizeof(mt352_adc_ctl_1_cfg));
  1786. mt352_write(fe, mt352_agc_cfg, sizeof(mt352_agc_cfg));
  1787. mt352_write(fe, mt352_capt_range_cfg, sizeof(mt352_capt_range_cfg));
  1788. return 0;
  1789. }
  1790. static int samsung_tdtc9251dh0_pll_set(struct dvb_frontend* fe, struct dvb_frontend_parameters* params, u8* pllbuf)
  1791. {
  1792. u32 div;
  1793. unsigned char bs = 0;
  1794. #define IF_FREQUENCYx6 217 /* 6 * 36.16666666667MHz */
  1795. div = (((params->frequency + 83333) * 3) / 500000) + IF_FREQUENCYx6;
  1796. if (params->frequency >= 48000000 && params->frequency <= 154000000) bs = 0x09;
  1797. if (params->frequency >= 161000000 && params->frequency <= 439000000) bs = 0x0a;
  1798. if (params->frequency >= 447000000 && params->frequency <= 863000000) bs = 0x08;
  1799. pllbuf[0] = 0xc2; // Note: non-linux standard PLL i2c address
  1800. pllbuf[1] = div >> 8;
  1801. pllbuf[2] = div & 0xff;
  1802. pllbuf[3] = 0xcc;
  1803. pllbuf[4] = bs;
  1804. return 0;
  1805. }
  1806. static struct mt352_config samsung_tdtc9251dh0_config = {
  1807. .demod_address = 0x0f,
  1808. .demod_init = samsung_tdtc9251dh0_demod_init,
  1809. .pll_set = samsung_tdtc9251dh0_pll_set,
  1810. };
  1811. static int skystar23_samsung_tbdu18132_pll_set(struct dvb_frontend* fe, struct dvb_frontend_parameters* params)
  1812. {
  1813. u8 buf[4];
  1814. u32 div;
  1815. struct i2c_msg msg = { .addr = 0x61, .flags = 0, .buf = buf, .len = sizeof(buf) };
  1816. struct adapter* adapter = (struct adapter*) fe->dvb->priv;
  1817. div = (params->frequency + (125/2)) / 125;
  1818. buf[0] = (div >> 8) & 0x7f;
  1819. buf[1] = (div >> 0) & 0xff;
  1820. buf[2] = 0x84 | ((div >> 10) & 0x60);
  1821. buf[3] = 0x80;
  1822. if (params->frequency < 1550000)
  1823. buf[3] |= 0x02;
  1824. if (i2c_transfer (&adapter->i2c_adap, &msg, 1) != 1) return -EIO;
  1825. return 0;
  1826. }
  1827. static struct mt312_config skystar23_samsung_tbdu18132_config = {
  1828. .demod_address = 0x0e,
  1829. .pll_set = skystar23_samsung_tbdu18132_pll_set,
  1830. };
  1831. static void frontend_init(struct adapter *skystar2)
  1832. {
  1833. switch(skystar2->pdev->device) {
  1834. case 0x2103: // Technisat Skystar2 OR Technisat Airstar2 (DVB-T or ATSC)
  1835. // Attempt to load the Nextwave nxt2002 for ATSC support
  1836. skystar2->fe = nxt2002_attach(&samsung_tbmv_config, &skystar2->i2c_adap);
  1837. if (skystar2->fe != NULL) {
  1838. skystar2->fe_sleep = skystar2->fe->ops->sleep;
  1839. skystar2->fe->ops->sleep = flexcop_sleep;
  1840. break;
  1841. }
  1842. // try the skystar2 v2.6 first (stv0299/Samsung tbmu24112(sl1935))
  1843. skystar2->fe = stv0299_attach(&samsung_tbmu24112_config, &skystar2->i2c_adap);
  1844. if (skystar2->fe != NULL) {
  1845. skystar2->fe->ops->set_voltage = flexcop_set_voltage;
  1846. skystar2->fe_sleep = skystar2->fe->ops->sleep;
  1847. skystar2->fe->ops->sleep = flexcop_sleep;
  1848. break;
  1849. }
  1850. // try the airstar2 (mt352/Samsung tdtc9251dh0(??))
  1851. skystar2->fe = mt352_attach(&samsung_tdtc9251dh0_config, &skystar2->i2c_adap);
  1852. if (skystar2->fe != NULL) {
  1853. skystar2->fe->ops->info.frequency_min = 474000000;
  1854. skystar2->fe->ops->info.frequency_max = 858000000;
  1855. break;
  1856. }
  1857. // try the skystar2 v2.3 (vp310/Samsung tbdu18132(tsa5059))
  1858. skystar2->fe = vp310_attach(&skystar23_samsung_tbdu18132_config, &skystar2->i2c_adap);
  1859. if (skystar2->fe != NULL) {
  1860. skystar2->fe->ops->diseqc_send_master_cmd = flexcop_diseqc_send_master_cmd;
  1861. skystar2->fe->ops->diseqc_send_burst = flexcop_diseqc_send_burst;
  1862. skystar2->fe->ops->set_tone = flexcop_set_tone;
  1863. skystar2->fe->ops->set_voltage = flexcop_set_voltage;
  1864. skystar2->fe_sleep = skystar2->fe->ops->sleep;
  1865. skystar2->fe->ops->sleep = flexcop_sleep;
  1866. break;
  1867. }
  1868. break;
  1869. }
  1870. if (skystar2->fe == NULL) {
  1871. printk("skystar2: A frontend driver was not found for device %04x/%04x subsystem %04x/%04x\n",
  1872. skystar2->pdev->vendor,
  1873. skystar2->pdev->device,
  1874. skystar2->pdev->subsystem_vendor,
  1875. skystar2->pdev->subsystem_device);
  1876. } else {
  1877. if (dvb_register_frontend(&skystar2->dvb_adapter, skystar2->fe)) {
  1878. printk("skystar2: Frontend registration failed!\n");
  1879. if (skystar2->fe->ops->release)
  1880. skystar2->fe->ops->release(skystar2->fe);
  1881. skystar2->fe = NULL;
  1882. }
  1883. }
  1884. }
  1885. static int skystar2_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
  1886. {
  1887. struct adapter *adapter;
  1888. struct dvb_adapter *dvb_adapter;
  1889. struct dvb_demux *dvbdemux;
  1890. struct dmx_demux *dmx;
  1891. int ret = -ENODEV;
  1892. if (!pdev)
  1893. goto out;
  1894. ret = driver_initialize(pdev);
  1895. if (ret < 0)
  1896. goto out;
  1897. adapter = pci_get_drvdata(pdev);
  1898. dvb_adapter = &adapter->dvb_adapter;
  1899. ret = dvb_register_adapter(dvb_adapter, skystar2_pci_driver.name,
  1900. THIS_MODULE);
  1901. if (ret < 0) {
  1902. printk("%s: Error registering DVB adapter\n", __FUNCTION__);
  1903. goto err_halt;
  1904. }
  1905. dvb_adapter->priv = adapter;
  1906. init_MUTEX(&adapter->i2c_sem);
  1907. memset(&adapter->i2c_adap, 0, sizeof(struct i2c_adapter));
  1908. strcpy(adapter->i2c_adap.name, "SkyStar2");
  1909. i2c_set_adapdata(&adapter->i2c_adap, adapter);
  1910. #ifdef I2C_ADAP_CLASS_TV_DIGITAL
  1911. adapter->i2c_adap.class = I2C_ADAP_CLASS_TV_DIGITAL;
  1912. #else
  1913. adapter->i2c_adap.class = I2C_CLASS_TV_DIGITAL;
  1914. #endif
  1915. adapter->i2c_adap.algo = &flexcop_algo;
  1916. adapter->i2c_adap.algo_data = NULL;
  1917. adapter->i2c_adap.id = I2C_ALGO_BIT;
  1918. ret = i2c_add_adapter(&adapter->i2c_adap);
  1919. if (ret < 0)
  1920. goto err_dvb_unregister;
  1921. dvbdemux = &adapter->demux;
  1922. dvbdemux->priv = adapter;
  1923. dvbdemux->filternum = N_PID_SLOTS;
  1924. dvbdemux->feednum = N_PID_SLOTS;
  1925. dvbdemux->start_feed = dvb_start_feed;
  1926. dvbdemux->stop_feed = dvb_stop_feed;
  1927. dvbdemux->write_to_decoder = NULL;
  1928. dvbdemux->dmx.capabilities = (DMX_TS_FILTERING | DMX_SECTION_FILTERING | DMX_MEMORY_BASED_FILTERING);
  1929. ret = dvb_dmx_init(&adapter->demux);
  1930. if (ret < 0)
  1931. goto err_i2c_del;
  1932. dmx = &dvbdemux->dmx;
  1933. adapter->hw_frontend.source = DMX_FRONTEND_0;
  1934. adapter->dmxdev.filternum = N_PID_SLOTS;
  1935. adapter->dmxdev.demux = dmx;
  1936. adapter->dmxdev.capabilities = 0;
  1937. ret = dvb_dmxdev_init(&adapter->dmxdev, &adapter->dvb_adapter);
  1938. if (ret < 0)
  1939. goto err_dmx_release;
  1940. ret = dmx->add_frontend(dmx, &adapter->hw_frontend);
  1941. if (ret < 0)
  1942. goto err_dmxdev_release;
  1943. adapter->mem_frontend.source = DMX_MEMORY_FE;
  1944. ret = dmx->add_frontend(dmx, &adapter->mem_frontend);
  1945. if (ret < 0)
  1946. goto err_remove_hw_frontend;
  1947. ret = dmx->connect_frontend(dmx, &adapter->hw_frontend);
  1948. if (ret < 0)
  1949. goto err_remove_mem_frontend;
  1950. dvb_net_init(&adapter->dvb_adapter, &adapter->dvbnet, &dvbdemux->dmx);
  1951. frontend_init(adapter);
  1952. out:
  1953. return ret;
  1954. err_remove_mem_frontend:
  1955. dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &adapter->mem_frontend);
  1956. err_remove_hw_frontend:
  1957. dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &adapter->hw_frontend);
  1958. err_dmxdev_release:
  1959. dvb_dmxdev_release(&adapter->dmxdev);
  1960. err_dmx_release:
  1961. dvb_dmx_release(&adapter->demux);
  1962. err_i2c_del:
  1963. i2c_del_adapter(&adapter->i2c_adap);
  1964. err_dvb_unregister:
  1965. dvb_unregister_adapter(&adapter->dvb_adapter);
  1966. err_halt:
  1967. driver_halt(pdev);
  1968. goto out;
  1969. }
  1970. static void skystar2_remove(struct pci_dev *pdev)
  1971. {
  1972. struct adapter *adapter = pci_get_drvdata(pdev);
  1973. struct dvb_demux *dvbdemux;
  1974. struct dmx_demux *dmx;
  1975. if (!adapter)
  1976. return;
  1977. dvb_net_release(&adapter->dvbnet);
  1978. dvbdemux = &adapter->demux;
  1979. dmx = &dvbdemux->dmx;
  1980. dmx->close(dmx);
  1981. dmx->remove_frontend(dmx, &adapter->hw_frontend);
  1982. dmx->remove_frontend(dmx, &adapter->mem_frontend);
  1983. dvb_dmxdev_release(&adapter->dmxdev);
  1984. dvb_dmx_release(dvbdemux);
  1985. if (adapter->fe != NULL)
  1986. dvb_unregister_frontend(adapter->fe);
  1987. dvb_unregister_adapter(&adapter->dvb_adapter);
  1988. i2c_del_adapter(&adapter->i2c_adap);
  1989. driver_halt(pdev);
  1990. }
  1991. static struct pci_device_id skystar2_pci_tbl[] = {
  1992. {0x000013d0, 0x00002103, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000},
  1993. /* {0x000013d0, 0x00002200, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000}, UNDEFINED HARDWARE - mail linuxtv.org list */ //FCIII
  1994. {0,},
  1995. };
  1996. MODULE_DEVICE_TABLE(pci, skystar2_pci_tbl);
  1997. static struct pci_driver skystar2_pci_driver = {
  1998. .name = "SkyStar2",
  1999. .id_table = skystar2_pci_tbl,
  2000. .probe = skystar2_probe,
  2001. .remove = skystar2_remove,
  2002. };
  2003. static int skystar2_init(void)
  2004. {
  2005. return pci_register_driver(&skystar2_pci_driver);
  2006. }
  2007. static void skystar2_cleanup(void)
  2008. {
  2009. pci_unregister_driver(&skystar2_pci_driver);
  2010. }
  2011. module_init(skystar2_init);
  2012. module_exit(skystar2_cleanup);
  2013. MODULE_DESCRIPTION("Technisat SkyStar2 DVB PCI Driver");
  2014. MODULE_LICENSE("GPL");