aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb/mantis/mantis_hif.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/dvb/mantis/mantis_hif.c')
-rw-r--r--drivers/media/dvb/mantis/mantis_hif.c60
1 files changed, 39 insertions, 21 deletions
diff --git a/drivers/media/dvb/mantis/mantis_hif.c b/drivers/media/dvb/mantis/mantis_hif.c
index 99a9724cbaff..bb05427fdeb6 100644
--- a/drivers/media/dvb/mantis/mantis_hif.c
+++ b/drivers/media/dvb/mantis/mantis_hif.c
@@ -18,10 +18,28 @@
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19*/ 19*/
20 20
21#include <linux/kernel.h>
22#include <linux/signal.h>
23#include <linux/sched.h>
24
25#include <asm/irq.h>
26#include <linux/signal.h>
27#include <linux/sched.h>
28#include <linux/interrupt.h>
29
30#include "dmxdev.h"
31#include "dvbdev.h"
32#include "dvb_demux.h"
33#include "dvb_frontend.h"
34#include "dvb_net.h"
35
21#include "mantis_common.h" 36#include "mantis_common.h"
37
22#include "mantis_hif.h" 38#include "mantis_hif.h"
23#include "mantis_link.h" /* temporary due to physical layer stuff */ 39#include "mantis_link.h" /* temporary due to physical layer stuff */
24 40
41#include "mantis_reg.h"
42
25static int mantis_hif_data_available(struct mantis_ca *ca) 43static int mantis_hif_data_available(struct mantis_ca *ca)
26{ 44{
27 struct mantis_pci *mantis = ca->ca_priv; 45 struct mantis_pci *mantis = ca->ca_priv;
@@ -31,7 +49,7 @@ static int mantis_hif_data_available(struct mantis_ca *ca)
31 ca->sbuf_status & MANTIS_SBUF_DATA_AVAIL, 49 ca->sbuf_status & MANTIS_SBUF_DATA_AVAIL,
32 msecs_to_jiffies(500)) == -ERESTARTSYS) { 50 msecs_to_jiffies(500)) == -ERESTARTSYS) {
33 51
34 dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Read wait event timeout !", mantis->num); 52 dprintk(MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Read wait event timeout !", mantis->num);
35 rc = -EREMOTEIO; 53 rc = -EREMOTEIO;
36 } 54 }
37 ca->sbuf_status &= ~MANTIS_SBUF_DATA_AVAIL; 55 ca->sbuf_status &= ~MANTIS_SBUF_DATA_AVAIL;
@@ -48,10 +66,10 @@ static int mantis_hif_sbuf_opdone_wait(struct mantis_ca *ca)
48 ca->hif_event & MANTIS_SBUF_OPDONE, 66 ca->hif_event & MANTIS_SBUF_OPDONE,
49 msecs_to_jiffies(500)) == -ERESTARTSYS) { 67 msecs_to_jiffies(500)) == -ERESTARTSYS) {
50 68
51 dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): Smart buffer operation timeout !", mantis->num); 69 dprintk(MANTIS_ERROR, 1, "Adapter(%d) Slot(0): Smart buffer operation timeout !", mantis->num);
52 rc = -EREMOTEIO; 70 rc = -EREMOTEIO;
53 } 71 }
54 dprintk(verbose, MANTIS_DEBUG, 1, "Smart Buffer Operation complete"); 72 dprintk(MANTIS_DEBUG, 1, "Smart Buffer Operation complete");
55 ca->hif_event &= ~MANTIS_SBUF_OPDONE; 73 ca->hif_event &= ~MANTIS_SBUF_OPDONE;
56 return rc; 74 return rc;
57} 75}
@@ -66,22 +84,22 @@ static int mantis_hif_write_wait(struct mantis_ca *ca)
66 mantis->gpif_status & MANTIS_GPIF_WRACK, 84 mantis->gpif_status & MANTIS_GPIF_WRACK,
67 msecs_to_jiffies(500)) == -ERESTARTSYS) { 85 msecs_to_jiffies(500)) == -ERESTARTSYS) {
68 86
69 dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): Write ACK timed out !", mantis->num); 87 dprintk(MANTIS_ERROR, 1, "Adapter(%d) Slot(0): Write ACK timed out !", mantis->num);
70 rc = -EREMOTEIO; 88 rc = -EREMOTEIO;
71 } 89 }
72 dprintk(verbose, MANTIS_DEBUG, 1, "Write Acknowledged"); 90 dprintk(MANTIS_DEBUG, 1, "Write Acknowledged");
73 mantis->gpif_status &= ~MANTIS_GPIF_WRACK; 91 mantis->gpif_status &= ~MANTIS_GPIF_WRACK;
74 while (!opdone) { 92 while (!opdone) {
75 opdone = (mmread(MANTIS_GPIF_STATUS) & MANTIS_SBUF_OPDONE); 93 opdone = (mmread(MANTIS_GPIF_STATUS) & MANTIS_SBUF_OPDONE);
76 udelay(500); 94 udelay(500);
77 timeout++; 95 timeout++;
78 if (timeout > 100) { 96 if (timeout > 100) {
79 dprintk(verbose, MANTIS_ERROR, 1, "Adater(%d) Slot(0): Write operation timed out!", mantis->num); 97 dprintk(MANTIS_ERROR, 1, "Adater(%d) Slot(0): Write operation timed out!", mantis->num);
80 rc = -ETIMEDOUT; 98 rc = -ETIMEDOUT;
81 break; 99 break;
82 } 100 }
83 } 101 }
84 dprintk(verbose, MANTIS_DEBUG, 1, "HIF Write success"); 102 dprintk(MANTIS_DEBUG, 1, "HIF Write success");
85 return rc; 103 return rc;
86} 104}
87 105
@@ -91,7 +109,7 @@ int mantis_hif_read_mem(struct mantis_ca *ca, u32 addr)
91 struct mantis_pci *mantis = ca->ca_priv; 109 struct mantis_pci *mantis = ca->ca_priv;
92 u32 hif_addr = 0, data, count = 4; 110 u32 hif_addr = 0, data, count = 4;
93 111
94 dprintk(verbose, MANTIS_DEBUG, 1, "Adapter(%d) Slot(0): Request HIF Mem Read", mantis->num); 112 dprintk(MANTIS_DEBUG, 1, "Adapter(%d) Slot(0): Request HIF Mem Read", mantis->num);
95 mutex_lock(&ca->ca_lock); 113 mutex_lock(&ca->ca_lock);
96 hif_addr &= ~MANTIS_GPIF_PCMCIAREG; 114 hif_addr &= ~MANTIS_GPIF_PCMCIAREG;
97 hif_addr &= ~MANTIS_GPIF_PCMCIAIOM; 115 hif_addr &= ~MANTIS_GPIF_PCMCIAIOM;
@@ -104,13 +122,13 @@ int mantis_hif_read_mem(struct mantis_ca *ca, u32 addr)
104 mmwrite(hif_addr | MANTIS_GPIF_HIFRDWRN, MANTIS_GPIF_ADDR); 122 mmwrite(hif_addr | MANTIS_GPIF_HIFRDWRN, MANTIS_GPIF_ADDR);
105 123
106 if (mantis_hif_sbuf_opdone_wait(ca) != 0) { 124 if (mantis_hif_sbuf_opdone_wait(ca) != 0) {
107 dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): GPIF Smart Buffer operation failed", mantis->num); 125 dprintk(MANTIS_ERROR, 1, "Adapter(%d) Slot(0): GPIF Smart Buffer operation failed", mantis->num);
108 mutex_unlock(&ca->ca_lock); 126 mutex_unlock(&ca->ca_lock);
109 return -EREMOTEIO; 127 return -EREMOTEIO;
110 } 128 }
111 data = mmread(MANTIS_GPIF_DIN); 129 data = mmread(MANTIS_GPIF_DIN);
112 mutex_unlock(&ca->ca_lock); 130 mutex_unlock(&ca->ca_lock);
113 dprintk(verbose, MANTIS_DEBUG, 1, "Mem Read: 0x%02x", data); 131 dprintk(MANTIS_DEBUG, 1, "Mem Read: 0x%02x", data);
114 return (data >> 24) & 0xff; 132 return (data >> 24) & 0xff;
115} 133}
116 134
@@ -120,7 +138,7 @@ int mantis_hif_write_mem(struct mantis_ca *ca, u32 addr, u8 data)
120 struct mantis_pci *mantis = ca->ca_priv; 138 struct mantis_pci *mantis = ca->ca_priv;
121 u32 hif_addr = 0; 139 u32 hif_addr = 0;
122 140
123 dprintk(verbose, MANTIS_DEBUG, 1, "Adapter(%d) Slot(0): Request HIF Mem Write", mantis->num); 141 dprintk(MANTIS_DEBUG, 1, "Adapter(%d) Slot(0): Request HIF Mem Write", mantis->num);
124 mutex_lock(&ca->ca_lock); 142 mutex_lock(&ca->ca_lock);
125 hif_addr &= ~MANTIS_GPIF_HIFRDWRN; 143 hif_addr &= ~MANTIS_GPIF_HIFRDWRN;
126 hif_addr &= ~MANTIS_GPIF_PCMCIAREG; 144 hif_addr &= ~MANTIS_GPIF_PCMCIAREG;
@@ -133,11 +151,11 @@ int mantis_hif_write_mem(struct mantis_ca *ca, u32 addr, u8 data)
133 mmwrite(data, MANTIS_GPIF_DOUT); 151 mmwrite(data, MANTIS_GPIF_DOUT);
134 152
135 if (mantis_hif_write_wait(ca) != 0) { 153 if (mantis_hif_write_wait(ca) != 0) {
136 dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Smart Buffer operation failed", mantis->num); 154 dprintk(MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Smart Buffer operation failed", mantis->num);
137 mutex_unlock(&ca->ca_lock); 155 mutex_unlock(&ca->ca_lock);
138 return -EREMOTEIO; 156 return -EREMOTEIO;
139 } 157 }
140 dprintk(verbose, MANTIS_DEBUG, 1, "Mem Write: (0x%02x to 0x%02x)", data, addr); 158 dprintk(MANTIS_DEBUG, 1, "Mem Write: (0x%02x to 0x%02x)", data, addr);
141 mutex_unlock(&ca->ca_lock); 159 mutex_unlock(&ca->ca_lock);
142 160
143 return 0; 161 return 0;
@@ -148,7 +166,7 @@ int mantis_hif_read_iom(struct mantis_ca *ca, u32 addr)
148 struct mantis_pci *mantis = ca->ca_priv; 166 struct mantis_pci *mantis = ca->ca_priv;
149 u32 data, hif_addr = 0; 167 u32 data, hif_addr = 0;
150 168
151 dprintk(verbose, MANTIS_DEBUG, 1, "Adapter(%d) Slot(0): Request HIF I/O Read", mantis->num); 169 dprintk(MANTIS_DEBUG, 1, "Adapter(%d) Slot(0): Request HIF I/O Read", mantis->num);
152 mutex_lock(&ca->ca_lock); 170 mutex_lock(&ca->ca_lock);
153 hif_addr &= ~MANTIS_GPIF_PCMCIAREG; 171 hif_addr &= ~MANTIS_GPIF_PCMCIAREG;
154 hif_addr |= MANTIS_GPIF_PCMCIAIOM; 172 hif_addr |= MANTIS_GPIF_PCMCIAIOM;
@@ -161,12 +179,12 @@ int mantis_hif_read_iom(struct mantis_ca *ca, u32 addr)
161 mmwrite(hif_addr | MANTIS_GPIF_HIFRDWRN, MANTIS_GPIF_ADDR); 179 mmwrite(hif_addr | MANTIS_GPIF_HIFRDWRN, MANTIS_GPIF_ADDR);
162 180
163 if (mantis_hif_sbuf_opdone_wait(ca) != 0) { 181 if (mantis_hif_sbuf_opdone_wait(ca) != 0) {
164 dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Smart Buffer operation failed", mantis->num); 182 dprintk(MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Smart Buffer operation failed", mantis->num);
165 mutex_unlock(&ca->ca_lock); 183 mutex_unlock(&ca->ca_lock);
166 return -EREMOTEIO; 184 return -EREMOTEIO;
167 } 185 }
168 data = mmread(MANTIS_GPIF_DIN); 186 data = mmread(MANTIS_GPIF_DIN);
169 dprintk(verbose, MANTIS_DEBUG, 1, "I/O Read: 0x%02x", data); 187 dprintk(MANTIS_DEBUG, 1, "I/O Read: 0x%02x", data);
170 udelay(50); 188 udelay(50);
171 mutex_unlock(&ca->ca_lock); 189 mutex_unlock(&ca->ca_lock);
172 190
@@ -178,7 +196,7 @@ int mantis_hif_write_iom(struct mantis_ca *ca, u32 addr, u8 data)
178 struct mantis_pci *mantis = ca->ca_priv; 196 struct mantis_pci *mantis = ca->ca_priv;
179 u32 hif_addr = 0; 197 u32 hif_addr = 0;
180 198
181 dprintk(verbose, MANTIS_DEBUG, 1, "Adapter(%d) Slot(0): Request HIF I/O Write", mantis->num); 199 dprintk(MANTIS_DEBUG, 1, "Adapter(%d) Slot(0): Request HIF I/O Write", mantis->num);
182 mutex_lock(&ca->ca_lock); 200 mutex_lock(&ca->ca_lock);
183 hif_addr &= ~MANTIS_GPIF_PCMCIAREG; 201 hif_addr &= ~MANTIS_GPIF_PCMCIAREG;
184 hif_addr &= ~MANTIS_GPIF_HIFRDWRN; 202 hif_addr &= ~MANTIS_GPIF_HIFRDWRN;
@@ -190,11 +208,11 @@ int mantis_hif_write_iom(struct mantis_ca *ca, u32 addr, u8 data)
190 mmwrite(data, MANTIS_GPIF_DOUT); 208 mmwrite(data, MANTIS_GPIF_DOUT);
191 209
192 if (mantis_hif_write_wait(ca) != 0) { 210 if (mantis_hif_write_wait(ca) != 0) {
193 dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Smart Buffer operation failed", mantis->num); 211 dprintk(MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Smart Buffer operation failed", mantis->num);
194 mutex_unlock(&ca->ca_lock); 212 mutex_unlock(&ca->ca_lock);
195 return -EREMOTEIO; 213 return -EREMOTEIO;
196 } 214 }
197 dprintk(verbose, MANTIS_DEBUG, 1, "I/O Write: (0x%02x to 0x%02x)", data, addr); 215 dprintk(MANTIS_DEBUG, 1, "I/O Write: (0x%02x to 0x%02x)", data, addr);
198 mutex_unlock(&ca->ca_lock); 216 mutex_unlock(&ca->ca_lock);
199 udelay(50); 217 udelay(50);
200 218
@@ -208,7 +226,7 @@ int mantis_hif_init(struct mantis_ca *ca)
208 u32 irqcfg; 226 u32 irqcfg;
209 227
210 slot[0].slave_cfg = 0x70773028; 228 slot[0].slave_cfg = 0x70773028;
211 dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Initializing Mantis Host Interface", mantis->num); 229 dprintk(MANTIS_ERROR, 1, "Adapter(%d) Initializing Mantis Host Interface", mantis->num);
212 230
213 mutex_lock(&ca->ca_lock); 231 mutex_lock(&ca->ca_lock);
214 irqcfg = mmread(MANTIS_GPIF_IRQCFG); 232 irqcfg = mmread(MANTIS_GPIF_IRQCFG);
@@ -230,7 +248,7 @@ void mantis_hif_exit(struct mantis_ca *ca)
230 struct mantis_pci *mantis = ca->ca_priv; 248 struct mantis_pci *mantis = ca->ca_priv;
231 u32 irqcfg; 249 u32 irqcfg;
232 250
233 dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Exiting Mantis Host Interface", mantis->num); 251 dprintk(MANTIS_ERROR, 1, "Adapter(%d) Exiting Mantis Host Interface", mantis->num);
234 mutex_lock(&ca->ca_lock); 252 mutex_lock(&ca->ca_lock);
235 irqcfg = mmread(MANTIS_GPIF_IRQCFG); 253 irqcfg = mmread(MANTIS_GPIF_IRQCFG);
236 irqcfg &= ~MANTIS_MASK_BRRDY; 254 irqcfg &= ~MANTIS_MASK_BRRDY;