diff options
Diffstat (limited to 'drivers/media/dvb/mantis/mantis_hif.c')
-rw-r--r-- | drivers/media/dvb/mantis/mantis_hif.c | 60 |
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 | |||
25 | static int mantis_hif_data_available(struct mantis_ca *ca) | 43 | static 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; |