Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/evalenti/linux...
[linux/fpc-iii.git] / drivers / media / pci / ivtv / ivtv-irq.c
blob36ca2d67c812189ffe9f1cc3b0a85c1251e4cbf3
1 /* interrupt handling
2 Copyright (C) 2003-2004 Kevin Thayer <nufan_wfk at yahoo.com>
3 Copyright (C) 2004 Chris Kennedy <c@groovy.org>
4 Copyright (C) 2005-2007 Hans Verkuil <hverkuil@xs4all.nl>
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 #include "ivtv-driver.h"
22 #include "ivtv-queue.h"
23 #include "ivtv-udma.h"
24 #include "ivtv-irq.h"
25 #include "ivtv-mailbox.h"
26 #include "ivtv-vbi.h"
27 #include "ivtv-yuv.h"
28 #include <media/v4l2-event.h>
30 #define DMA_MAGIC_COOKIE 0x000001fe
32 static void ivtv_dma_dec_start(struct ivtv_stream *s);
34 static const int ivtv_stream_map[] = {
35 IVTV_ENC_STREAM_TYPE_MPG,
36 IVTV_ENC_STREAM_TYPE_YUV,
37 IVTV_ENC_STREAM_TYPE_PCM,
38 IVTV_ENC_STREAM_TYPE_VBI,
41 static void ivtv_pcm_work_handler(struct ivtv *itv)
43 struct ivtv_stream *s = &itv->streams[IVTV_ENC_STREAM_TYPE_PCM];
44 struct ivtv_buffer *buf;
46 /* Pass the PCM data to ivtv-alsa */
48 while (1) {
50 * Users should not be using both the ALSA and V4L2 PCM audio
51 * capture interfaces at the same time. If the user is doing
52 * this, there maybe a buffer in q_io to grab, use, and put
53 * back in rotation.
55 buf = ivtv_dequeue(s, &s->q_io);
56 if (buf == NULL)
57 buf = ivtv_dequeue(s, &s->q_full);
58 if (buf == NULL)
59 break;
61 if (buf->readpos < buf->bytesused)
62 itv->pcm_announce_callback(itv->alsa,
63 (u8 *)(buf->buf + buf->readpos),
64 (size_t)(buf->bytesused - buf->readpos));
66 ivtv_enqueue(s, buf, &s->q_free);
70 static void ivtv_pio_work_handler(struct ivtv *itv)
72 struct ivtv_stream *s = &itv->streams[itv->cur_pio_stream];
73 struct ivtv_buffer *buf;
74 int i = 0;
76 IVTV_DEBUG_HI_DMA("ivtv_pio_work_handler\n");
77 if (itv->cur_pio_stream < 0 || itv->cur_pio_stream >= IVTV_MAX_STREAMS ||
78 s->vdev.v4l2_dev == NULL || !ivtv_use_pio(s)) {
79 itv->cur_pio_stream = -1;
80 /* trigger PIO complete user interrupt */
81 write_reg(IVTV_IRQ_ENC_PIO_COMPLETE, 0x44);
82 return;
84 IVTV_DEBUG_HI_DMA("Process PIO %s\n", s->name);
85 list_for_each_entry(buf, &s->q_dma.list, list) {
86 u32 size = s->sg_processing[i].size & 0x3ffff;
88 /* Copy the data from the card to the buffer */
89 if (s->type == IVTV_DEC_STREAM_TYPE_VBI) {
90 memcpy_fromio(buf->buf, itv->dec_mem + s->sg_processing[i].src - IVTV_DECODER_OFFSET, size);
92 else {
93 memcpy_fromio(buf->buf, itv->enc_mem + s->sg_processing[i].src, size);
95 i++;
96 if (i == s->sg_processing_size)
97 break;
99 write_reg(IVTV_IRQ_ENC_PIO_COMPLETE, 0x44);
102 void ivtv_irq_work_handler(struct kthread_work *work)
104 struct ivtv *itv = container_of(work, struct ivtv, irq_work);
106 if (test_and_clear_bit(IVTV_F_I_WORK_HANDLER_PIO, &itv->i_flags))
107 ivtv_pio_work_handler(itv);
109 if (test_and_clear_bit(IVTV_F_I_WORK_HANDLER_VBI, &itv->i_flags))
110 ivtv_vbi_work_handler(itv);
112 if (test_and_clear_bit(IVTV_F_I_WORK_HANDLER_YUV, &itv->i_flags))
113 ivtv_yuv_work_handler(itv);
115 if (test_and_clear_bit(IVTV_F_I_WORK_HANDLER_PCM, &itv->i_flags))
116 ivtv_pcm_work_handler(itv);
119 /* Determine the required DMA size, setup enough buffers in the predma queue and
120 actually copy the data from the card to the buffers in case a PIO transfer is
121 required for this stream.
123 static int stream_enc_dma_append(struct ivtv_stream *s, u32 data[CX2341X_MBOX_MAX_DATA])
125 struct ivtv *itv = s->itv;
126 struct ivtv_buffer *buf;
127 u32 bytes_needed = 0;
128 u32 offset, size;
129 u32 UVoffset = 0, UVsize = 0;
130 int skip_bufs = s->q_predma.buffers;
131 int idx = s->sg_pending_size;
132 int rc;
134 /* sanity checks */
135 if (s->vdev.v4l2_dev == NULL) {
136 IVTV_DEBUG_WARN("Stream %s not started\n", s->name);
137 return -1;
139 if (!test_bit(IVTV_F_S_CLAIMED, &s->s_flags)) {
140 IVTV_DEBUG_WARN("Stream %s not open\n", s->name);
141 return -1;
144 /* determine offset, size and PTS for the various streams */
145 switch (s->type) {
146 case IVTV_ENC_STREAM_TYPE_MPG:
147 offset = data[1];
148 size = data[2];
149 s->pending_pts = 0;
150 break;
152 case IVTV_ENC_STREAM_TYPE_YUV:
153 offset = data[1];
154 size = data[2];
155 UVoffset = data[3];
156 UVsize = data[4];
157 s->pending_pts = ((u64) data[5] << 32) | data[6];
158 break;
160 case IVTV_ENC_STREAM_TYPE_PCM:
161 offset = data[1] + 12;
162 size = data[2] - 12;
163 s->pending_pts = read_dec(offset - 8) |
164 ((u64)(read_dec(offset - 12)) << 32);
165 if (itv->has_cx23415)
166 offset += IVTV_DECODER_OFFSET;
167 break;
169 case IVTV_ENC_STREAM_TYPE_VBI:
170 size = itv->vbi.enc_size * itv->vbi.fpi;
171 offset = read_enc(itv->vbi.enc_start - 4) + 12;
172 if (offset == 12) {
173 IVTV_DEBUG_INFO("VBI offset == 0\n");
174 return -1;
176 s->pending_pts = read_enc(offset - 4) | ((u64)read_enc(offset - 8) << 32);
177 break;
179 case IVTV_DEC_STREAM_TYPE_VBI:
180 size = read_dec(itv->vbi.dec_start + 4) + 8;
181 offset = read_dec(itv->vbi.dec_start) + itv->vbi.dec_start;
182 s->pending_pts = 0;
183 offset += IVTV_DECODER_OFFSET;
184 break;
185 default:
186 /* shouldn't happen */
187 return -1;
190 /* if this is the start of the DMA then fill in the magic cookie */
191 if (s->sg_pending_size == 0 && ivtv_use_dma(s)) {
192 if (itv->has_cx23415 && (s->type == IVTV_ENC_STREAM_TYPE_PCM ||
193 s->type == IVTV_DEC_STREAM_TYPE_VBI)) {
194 s->pending_backup = read_dec(offset - IVTV_DECODER_OFFSET);
195 write_dec_sync(DMA_MAGIC_COOKIE, offset - IVTV_DECODER_OFFSET);
197 else {
198 s->pending_backup = read_enc(offset);
199 write_enc_sync(DMA_MAGIC_COOKIE, offset);
201 s->pending_offset = offset;
204 bytes_needed = size;
205 if (s->type == IVTV_ENC_STREAM_TYPE_YUV) {
206 /* The size for the Y samples needs to be rounded upwards to a
207 multiple of the buf_size. The UV samples then start in the
208 next buffer. */
209 bytes_needed = s->buf_size * ((bytes_needed + s->buf_size - 1) / s->buf_size);
210 bytes_needed += UVsize;
213 IVTV_DEBUG_HI_DMA("%s %s: 0x%08x bytes at 0x%08x\n",
214 ivtv_use_pio(s) ? "PIO" : "DMA", s->name, bytes_needed, offset);
216 rc = ivtv_queue_move(s, &s->q_free, &s->q_full, &s->q_predma, bytes_needed);
217 if (rc < 0) { /* Insufficient buffers */
218 IVTV_DEBUG_WARN("Cannot obtain %d bytes for %s data transfer\n",
219 bytes_needed, s->name);
220 return -1;
222 if (rc && !s->buffers_stolen && test_bit(IVTV_F_S_APPL_IO, &s->s_flags)) {
223 IVTV_WARN("All %s stream buffers are full. Dropping data.\n", s->name);
224 IVTV_WARN("Cause: the application is not reading fast enough.\n");
226 s->buffers_stolen = rc;
228 /* got the buffers, now fill in sg_pending */
229 buf = list_entry(s->q_predma.list.next, struct ivtv_buffer, list);
230 memset(buf->buf, 0, 128);
231 list_for_each_entry(buf, &s->q_predma.list, list) {
232 if (skip_bufs-- > 0)
233 continue;
234 s->sg_pending[idx].dst = buf->dma_handle;
235 s->sg_pending[idx].src = offset;
236 s->sg_pending[idx].size = s->buf_size;
237 buf->bytesused = min(size, s->buf_size);
238 buf->dma_xfer_cnt = s->dma_xfer_cnt;
240 s->q_predma.bytesused += buf->bytesused;
241 size -= buf->bytesused;
242 offset += s->buf_size;
244 /* Sync SG buffers */
245 ivtv_buf_sync_for_device(s, buf);
247 if (size == 0) { /* YUV */
248 /* process the UV section */
249 offset = UVoffset;
250 size = UVsize;
252 idx++;
254 s->sg_pending_size = idx;
255 return 0;
258 static void dma_post(struct ivtv_stream *s)
260 struct ivtv *itv = s->itv;
261 struct ivtv_buffer *buf = NULL;
262 struct list_head *p;
263 u32 offset;
264 __le32 *u32buf;
265 int x = 0;
267 IVTV_DEBUG_HI_DMA("%s %s completed (%x)\n", ivtv_use_pio(s) ? "PIO" : "DMA",
268 s->name, s->dma_offset);
269 list_for_each(p, &s->q_dma.list) {
270 buf = list_entry(p, struct ivtv_buffer, list);
271 u32buf = (__le32 *)buf->buf;
273 /* Sync Buffer */
274 ivtv_buf_sync_for_cpu(s, buf);
276 if (x == 0 && ivtv_use_dma(s)) {
277 offset = s->dma_last_offset;
278 if (le32_to_cpu(u32buf[offset / 4]) != DMA_MAGIC_COOKIE)
280 for (offset = 0; offset < 64; offset++)
281 if (le32_to_cpu(u32buf[offset]) == DMA_MAGIC_COOKIE)
282 break;
283 offset *= 4;
284 if (offset == 256) {
285 IVTV_DEBUG_WARN("%s: Couldn't find start of buffer within the first 256 bytes\n", s->name);
286 offset = s->dma_last_offset;
288 if (s->dma_last_offset != offset)
289 IVTV_DEBUG_WARN("%s: offset %d -> %d\n", s->name, s->dma_last_offset, offset);
290 s->dma_last_offset = offset;
292 if (itv->has_cx23415 && (s->type == IVTV_ENC_STREAM_TYPE_PCM ||
293 s->type == IVTV_DEC_STREAM_TYPE_VBI)) {
294 write_dec_sync(0, s->dma_offset - IVTV_DECODER_OFFSET);
296 else {
297 write_enc_sync(0, s->dma_offset);
299 if (offset) {
300 buf->bytesused -= offset;
301 memcpy(buf->buf, buf->buf + offset, buf->bytesused + offset);
303 *u32buf = cpu_to_le32(s->dma_backup);
305 x++;
306 /* flag byteswap ABCD -> DCBA for MPG & VBI data outside irq */
307 if (s->type == IVTV_ENC_STREAM_TYPE_MPG ||
308 s->type == IVTV_ENC_STREAM_TYPE_VBI)
309 buf->b_flags |= IVTV_F_B_NEED_BUF_SWAP;
311 if (buf)
312 buf->bytesused += s->dma_last_offset;
313 if (buf && s->type == IVTV_DEC_STREAM_TYPE_VBI) {
314 list_for_each_entry(buf, &s->q_dma.list, list) {
315 /* Parse and Groom VBI Data */
316 s->q_dma.bytesused -= buf->bytesused;
317 ivtv_process_vbi_data(itv, buf, 0, s->type);
318 s->q_dma.bytesused += buf->bytesused;
320 if (s->fh == NULL) {
321 ivtv_queue_move(s, &s->q_dma, NULL, &s->q_free, 0);
322 return;
326 ivtv_queue_move(s, &s->q_dma, NULL, &s->q_full, s->q_dma.bytesused);
328 if (s->type == IVTV_ENC_STREAM_TYPE_PCM &&
329 itv->pcm_announce_callback != NULL) {
331 * Set up the work handler to pass the data to ivtv-alsa.
333 * We just use q_full and let the work handler race with users
334 * making ivtv-fileops.c calls on the PCM device node.
336 * Users should not be using both the ALSA and V4L2 PCM audio
337 * capture interfaces at the same time. If the user does this,
338 * fragments of data will just go out each interface as they
339 * race for PCM data.
341 set_bit(IVTV_F_I_WORK_HANDLER_PCM, &itv->i_flags);
342 set_bit(IVTV_F_I_HAVE_WORK, &itv->i_flags);
345 if (s->fh)
346 wake_up(&s->waitq);
349 void ivtv_dma_stream_dec_prepare(struct ivtv_stream *s, u32 offset, int lock)
351 struct ivtv *itv = s->itv;
352 struct yuv_playback_info *yi = &itv->yuv_info;
353 u8 frame = yi->draw_frame;
354 struct yuv_frame_info *f = &yi->new_frame_info[frame];
355 struct ivtv_buffer *buf;
356 u32 y_size = 720 * ((f->src_h + 31) & ~31);
357 u32 uv_offset = offset + IVTV_YUV_BUFFER_UV_OFFSET;
358 int y_done = 0;
359 int bytes_written = 0;
360 int idx = 0;
362 IVTV_DEBUG_HI_DMA("DEC PREPARE DMA %s: %08x %08x\n", s->name, s->q_predma.bytesused, offset);
364 /* Insert buffer block for YUV if needed */
365 if (s->type == IVTV_DEC_STREAM_TYPE_YUV && f->offset_y) {
366 if (yi->blanking_dmaptr) {
367 s->sg_pending[idx].src = yi->blanking_dmaptr;
368 s->sg_pending[idx].dst = offset;
369 s->sg_pending[idx].size = 720 * 16;
371 offset += 720 * 16;
372 idx++;
375 list_for_each_entry(buf, &s->q_predma.list, list) {
376 /* YUV UV Offset from Y Buffer */
377 if (s->type == IVTV_DEC_STREAM_TYPE_YUV && !y_done &&
378 (bytes_written + buf->bytesused) >= y_size) {
379 s->sg_pending[idx].src = buf->dma_handle;
380 s->sg_pending[idx].dst = offset;
381 s->sg_pending[idx].size = y_size - bytes_written;
382 offset = uv_offset;
383 if (s->sg_pending[idx].size != buf->bytesused) {
384 idx++;
385 s->sg_pending[idx].src =
386 buf->dma_handle + s->sg_pending[idx - 1].size;
387 s->sg_pending[idx].dst = offset;
388 s->sg_pending[idx].size =
389 buf->bytesused - s->sg_pending[idx - 1].size;
390 offset += s->sg_pending[idx].size;
392 y_done = 1;
393 } else {
394 s->sg_pending[idx].src = buf->dma_handle;
395 s->sg_pending[idx].dst = offset;
396 s->sg_pending[idx].size = buf->bytesused;
397 offset += buf->bytesused;
399 bytes_written += buf->bytesused;
401 /* Sync SG buffers */
402 ivtv_buf_sync_for_device(s, buf);
403 idx++;
405 s->sg_pending_size = idx;
407 /* Sync Hardware SG List of buffers */
408 ivtv_stream_sync_for_device(s);
409 if (lock) {
410 unsigned long flags = 0;
412 spin_lock_irqsave(&itv->dma_reg_lock, flags);
413 if (!test_bit(IVTV_F_I_DMA, &itv->i_flags))
414 ivtv_dma_dec_start(s);
415 else
416 set_bit(IVTV_F_S_DMA_PENDING, &s->s_flags);
417 spin_unlock_irqrestore(&itv->dma_reg_lock, flags);
418 } else {
419 if (!test_bit(IVTV_F_I_DMA, &itv->i_flags))
420 ivtv_dma_dec_start(s);
421 else
422 set_bit(IVTV_F_S_DMA_PENDING, &s->s_flags);
426 static void ivtv_dma_enc_start_xfer(struct ivtv_stream *s)
428 struct ivtv *itv = s->itv;
430 s->sg_dma->src = cpu_to_le32(s->sg_processing[s->sg_processed].src);
431 s->sg_dma->dst = cpu_to_le32(s->sg_processing[s->sg_processed].dst);
432 s->sg_dma->size = cpu_to_le32(s->sg_processing[s->sg_processed].size | 0x80000000);
433 s->sg_processed++;
434 /* Sync Hardware SG List of buffers */
435 ivtv_stream_sync_for_device(s);
436 write_reg(s->sg_handle, IVTV_REG_ENCDMAADDR);
437 write_reg_sync(read_reg(IVTV_REG_DMAXFER) | 0x02, IVTV_REG_DMAXFER);
438 itv->dma_timer.expires = jiffies + msecs_to_jiffies(300);
439 add_timer(&itv->dma_timer);
442 static void ivtv_dma_dec_start_xfer(struct ivtv_stream *s)
444 struct ivtv *itv = s->itv;
446 s->sg_dma->src = cpu_to_le32(s->sg_processing[s->sg_processed].src);
447 s->sg_dma->dst = cpu_to_le32(s->sg_processing[s->sg_processed].dst);
448 s->sg_dma->size = cpu_to_le32(s->sg_processing[s->sg_processed].size | 0x80000000);
449 s->sg_processed++;
450 /* Sync Hardware SG List of buffers */
451 ivtv_stream_sync_for_device(s);
452 write_reg(s->sg_handle, IVTV_REG_DECDMAADDR);
453 write_reg_sync(read_reg(IVTV_REG_DMAXFER) | 0x01, IVTV_REG_DMAXFER);
454 itv->dma_timer.expires = jiffies + msecs_to_jiffies(300);
455 add_timer(&itv->dma_timer);
458 /* start the encoder DMA */
459 static void ivtv_dma_enc_start(struct ivtv_stream *s)
461 struct ivtv *itv = s->itv;
462 struct ivtv_stream *s_vbi = &itv->streams[IVTV_ENC_STREAM_TYPE_VBI];
463 int i;
465 IVTV_DEBUG_HI_DMA("start %s for %s\n", ivtv_use_dma(s) ? "DMA" : "PIO", s->name);
467 if (s->q_predma.bytesused)
468 ivtv_queue_move(s, &s->q_predma, NULL, &s->q_dma, s->q_predma.bytesused);
470 if (ivtv_use_dma(s))
471 s->sg_pending[s->sg_pending_size - 1].size += 256;
473 /* If this is an MPEG stream, and VBI data is also pending, then append the
474 VBI DMA to the MPEG DMA and transfer both sets of data at once.
476 VBI DMA is a second class citizen compared to MPEG and mixing them together
477 will confuse the firmware (the end of a VBI DMA is seen as the end of a
478 MPEG DMA, thus effectively dropping an MPEG frame). So instead we make
479 sure we only use the MPEG DMA to transfer the VBI DMA if both are in
480 use. This way no conflicts occur. */
481 clear_bit(IVTV_F_S_DMA_HAS_VBI, &s->s_flags);
482 if (s->type == IVTV_ENC_STREAM_TYPE_MPG && s_vbi->sg_pending_size &&
483 s->sg_pending_size + s_vbi->sg_pending_size <= s->buffers) {
484 ivtv_queue_move(s_vbi, &s_vbi->q_predma, NULL, &s_vbi->q_dma, s_vbi->q_predma.bytesused);
485 if (ivtv_use_dma(s_vbi))
486 s_vbi->sg_pending[s_vbi->sg_pending_size - 1].size += 256;
487 for (i = 0; i < s_vbi->sg_pending_size; i++) {
488 s->sg_pending[s->sg_pending_size++] = s_vbi->sg_pending[i];
490 s_vbi->dma_offset = s_vbi->pending_offset;
491 s_vbi->sg_pending_size = 0;
492 s_vbi->dma_xfer_cnt++;
493 set_bit(IVTV_F_S_DMA_HAS_VBI, &s->s_flags);
494 IVTV_DEBUG_HI_DMA("include DMA for %s\n", s_vbi->name);
497 s->dma_xfer_cnt++;
498 memcpy(s->sg_processing, s->sg_pending, sizeof(struct ivtv_sg_host_element) * s->sg_pending_size);
499 s->sg_processing_size = s->sg_pending_size;
500 s->sg_pending_size = 0;
501 s->sg_processed = 0;
502 s->dma_offset = s->pending_offset;
503 s->dma_backup = s->pending_backup;
504 s->dma_pts = s->pending_pts;
506 if (ivtv_use_pio(s)) {
507 set_bit(IVTV_F_I_WORK_HANDLER_PIO, &itv->i_flags);
508 set_bit(IVTV_F_I_HAVE_WORK, &itv->i_flags);
509 set_bit(IVTV_F_I_PIO, &itv->i_flags);
510 itv->cur_pio_stream = s->type;
512 else {
513 itv->dma_retries = 0;
514 ivtv_dma_enc_start_xfer(s);
515 set_bit(IVTV_F_I_DMA, &itv->i_flags);
516 itv->cur_dma_stream = s->type;
520 static void ivtv_dma_dec_start(struct ivtv_stream *s)
522 struct ivtv *itv = s->itv;
524 if (s->q_predma.bytesused)
525 ivtv_queue_move(s, &s->q_predma, NULL, &s->q_dma, s->q_predma.bytesused);
526 s->dma_xfer_cnt++;
527 memcpy(s->sg_processing, s->sg_pending, sizeof(struct ivtv_sg_host_element) * s->sg_pending_size);
528 s->sg_processing_size = s->sg_pending_size;
529 s->sg_pending_size = 0;
530 s->sg_processed = 0;
532 IVTV_DEBUG_HI_DMA("start DMA for %s\n", s->name);
533 itv->dma_retries = 0;
534 ivtv_dma_dec_start_xfer(s);
535 set_bit(IVTV_F_I_DMA, &itv->i_flags);
536 itv->cur_dma_stream = s->type;
539 static void ivtv_irq_dma_read(struct ivtv *itv)
541 struct ivtv_stream *s = NULL;
542 struct ivtv_buffer *buf;
543 int hw_stream_type = 0;
545 IVTV_DEBUG_HI_IRQ("DEC DMA READ\n");
547 del_timer(&itv->dma_timer);
549 if (!test_bit(IVTV_F_I_UDMA, &itv->i_flags) && itv->cur_dma_stream < 0)
550 return;
552 if (!test_bit(IVTV_F_I_UDMA, &itv->i_flags)) {
553 s = &itv->streams[itv->cur_dma_stream];
554 ivtv_stream_sync_for_cpu(s);
556 if (read_reg(IVTV_REG_DMASTATUS) & 0x14) {
557 IVTV_DEBUG_WARN("DEC DMA ERROR %x (xfer %d of %d, retry %d)\n",
558 read_reg(IVTV_REG_DMASTATUS),
559 s->sg_processed, s->sg_processing_size, itv->dma_retries);
560 write_reg(read_reg(IVTV_REG_DMASTATUS) & 3, IVTV_REG_DMASTATUS);
561 if (itv->dma_retries == 3) {
562 /* Too many retries, give up on this frame */
563 itv->dma_retries = 0;
564 s->sg_processed = s->sg_processing_size;
566 else {
567 /* Retry, starting with the first xfer segment.
568 Just retrying the current segment is not sufficient. */
569 s->sg_processed = 0;
570 itv->dma_retries++;
573 if (s->sg_processed < s->sg_processing_size) {
574 /* DMA next buffer */
575 ivtv_dma_dec_start_xfer(s);
576 return;
578 if (s->type == IVTV_DEC_STREAM_TYPE_YUV)
579 hw_stream_type = 2;
580 IVTV_DEBUG_HI_DMA("DEC DATA READ %s: %d\n", s->name, s->q_dma.bytesused);
582 /* For some reason must kick the firmware, like PIO mode,
583 I think this tells the firmware we are done and the size
584 of the xfer so it can calculate what we need next.
585 I think we can do this part ourselves but would have to
586 fully calculate xfer info ourselves and not use interrupts
588 ivtv_vapi(itv, CX2341X_DEC_SCHED_DMA_FROM_HOST, 3, 0, s->q_dma.bytesused,
589 hw_stream_type);
591 /* Free last DMA call */
592 while ((buf = ivtv_dequeue(s, &s->q_dma)) != NULL) {
593 ivtv_buf_sync_for_cpu(s, buf);
594 ivtv_enqueue(s, buf, &s->q_free);
596 wake_up(&s->waitq);
598 clear_bit(IVTV_F_I_UDMA, &itv->i_flags);
599 clear_bit(IVTV_F_I_DMA, &itv->i_flags);
600 itv->cur_dma_stream = -1;
601 wake_up(&itv->dma_waitq);
604 static void ivtv_irq_enc_dma_complete(struct ivtv *itv)
606 u32 data[CX2341X_MBOX_MAX_DATA];
607 struct ivtv_stream *s;
609 ivtv_api_get_data(&itv->enc_mbox, IVTV_MBOX_DMA_END, 2, data);
610 IVTV_DEBUG_HI_IRQ("ENC DMA COMPLETE %x %d (%d)\n", data[0], data[1], itv->cur_dma_stream);
612 del_timer(&itv->dma_timer);
614 if (itv->cur_dma_stream < 0)
615 return;
617 s = &itv->streams[itv->cur_dma_stream];
618 ivtv_stream_sync_for_cpu(s);
620 if (data[0] & 0x18) {
621 IVTV_DEBUG_WARN("ENC DMA ERROR %x (offset %08x, xfer %d of %d, retry %d)\n", data[0],
622 s->dma_offset, s->sg_processed, s->sg_processing_size, itv->dma_retries);
623 write_reg(read_reg(IVTV_REG_DMASTATUS) & 3, IVTV_REG_DMASTATUS);
624 if (itv->dma_retries == 3) {
625 /* Too many retries, give up on this frame */
626 itv->dma_retries = 0;
627 s->sg_processed = s->sg_processing_size;
629 else {
630 /* Retry, starting with the first xfer segment.
631 Just retrying the current segment is not sufficient. */
632 s->sg_processed = 0;
633 itv->dma_retries++;
636 if (s->sg_processed < s->sg_processing_size) {
637 /* DMA next buffer */
638 ivtv_dma_enc_start_xfer(s);
639 return;
641 clear_bit(IVTV_F_I_DMA, &itv->i_flags);
642 itv->cur_dma_stream = -1;
643 dma_post(s);
644 if (test_and_clear_bit(IVTV_F_S_DMA_HAS_VBI, &s->s_flags)) {
645 s = &itv->streams[IVTV_ENC_STREAM_TYPE_VBI];
646 dma_post(s);
648 s->sg_processing_size = 0;
649 s->sg_processed = 0;
650 wake_up(&itv->dma_waitq);
653 static void ivtv_irq_enc_pio_complete(struct ivtv *itv)
655 struct ivtv_stream *s;
657 if (itv->cur_pio_stream < 0 || itv->cur_pio_stream >= IVTV_MAX_STREAMS) {
658 itv->cur_pio_stream = -1;
659 return;
661 s = &itv->streams[itv->cur_pio_stream];
662 IVTV_DEBUG_HI_IRQ("ENC PIO COMPLETE %s\n", s->name);
663 clear_bit(IVTV_F_I_PIO, &itv->i_flags);
664 itv->cur_pio_stream = -1;
665 dma_post(s);
666 if (s->type == IVTV_ENC_STREAM_TYPE_MPG)
667 ivtv_vapi(itv, CX2341X_ENC_SCHED_DMA_TO_HOST, 3, 0, 0, 0);
668 else if (s->type == IVTV_ENC_STREAM_TYPE_YUV)
669 ivtv_vapi(itv, CX2341X_ENC_SCHED_DMA_TO_HOST, 3, 0, 0, 1);
670 else if (s->type == IVTV_ENC_STREAM_TYPE_PCM)
671 ivtv_vapi(itv, CX2341X_ENC_SCHED_DMA_TO_HOST, 3, 0, 0, 2);
672 clear_bit(IVTV_F_I_PIO, &itv->i_flags);
673 if (test_and_clear_bit(IVTV_F_S_DMA_HAS_VBI, &s->s_flags)) {
674 s = &itv->streams[IVTV_ENC_STREAM_TYPE_VBI];
675 dma_post(s);
677 wake_up(&itv->dma_waitq);
680 static void ivtv_irq_dma_err(struct ivtv *itv)
682 u32 data[CX2341X_MBOX_MAX_DATA];
683 u32 status;
685 del_timer(&itv->dma_timer);
687 ivtv_api_get_data(&itv->enc_mbox, IVTV_MBOX_DMA_END, 2, data);
688 status = read_reg(IVTV_REG_DMASTATUS);
689 IVTV_DEBUG_WARN("DMA ERROR %08x %08x %08x %d\n", data[0], data[1],
690 status, itv->cur_dma_stream);
692 * We do *not* write back to the IVTV_REG_DMASTATUS register to
693 * clear the error status, if either the encoder write (0x02) or
694 * decoder read (0x01) bus master DMA operation do not indicate
695 * completed. We can race with the DMA engine, which may have
696 * transitioned to completed status *after* we read the register.
697 * Setting a IVTV_REG_DMASTATUS flag back to "busy" status, after the
698 * DMA engine has completed, will cause the DMA engine to stop working.
700 status &= 0x3;
701 if (status == 0x3)
702 write_reg(status, IVTV_REG_DMASTATUS);
704 if (!test_bit(IVTV_F_I_UDMA, &itv->i_flags) &&
705 itv->cur_dma_stream >= 0 && itv->cur_dma_stream < IVTV_MAX_STREAMS) {
706 struct ivtv_stream *s = &itv->streams[itv->cur_dma_stream];
708 if (s->type >= IVTV_DEC_STREAM_TYPE_MPG) {
709 /* retry */
711 * FIXME - handle cases of DMA error similar to
712 * encoder below, except conditioned on status & 0x1
714 ivtv_dma_dec_start(s);
715 return;
716 } else {
717 if ((status & 0x2) == 0) {
719 * CX2341x Bus Master DMA write is ongoing.
720 * Reset the timer and let it complete.
722 itv->dma_timer.expires =
723 jiffies + msecs_to_jiffies(600);
724 add_timer(&itv->dma_timer);
725 return;
728 if (itv->dma_retries < 3) {
730 * CX2341x Bus Master DMA write has ended.
731 * Retry the write, starting with the first
732 * xfer segment. Just retrying the current
733 * segment is not sufficient.
735 s->sg_processed = 0;
736 itv->dma_retries++;
737 ivtv_dma_enc_start_xfer(s);
738 return;
740 /* Too many retries, give up on this one */
744 if (test_bit(IVTV_F_I_UDMA, &itv->i_flags)) {
745 ivtv_udma_start(itv);
746 return;
748 clear_bit(IVTV_F_I_UDMA, &itv->i_flags);
749 clear_bit(IVTV_F_I_DMA, &itv->i_flags);
750 itv->cur_dma_stream = -1;
751 wake_up(&itv->dma_waitq);
754 static void ivtv_irq_enc_start_cap(struct ivtv *itv)
756 u32 data[CX2341X_MBOX_MAX_DATA];
757 struct ivtv_stream *s;
759 /* Get DMA destination and size arguments from card */
760 ivtv_api_get_data(&itv->enc_mbox, IVTV_MBOX_DMA, 7, data);
761 IVTV_DEBUG_HI_IRQ("ENC START CAP %d: %08x %08x\n", data[0], data[1], data[2]);
763 if (data[0] > 2 || data[1] == 0 || data[2] == 0) {
764 IVTV_DEBUG_WARN("Unknown input: %08x %08x %08x\n",
765 data[0], data[1], data[2]);
766 return;
768 s = &itv->streams[ivtv_stream_map[data[0]]];
769 if (!stream_enc_dma_append(s, data)) {
770 set_bit(ivtv_use_pio(s) ? IVTV_F_S_PIO_PENDING : IVTV_F_S_DMA_PENDING, &s->s_flags);
774 static void ivtv_irq_enc_vbi_cap(struct ivtv *itv)
776 u32 data[CX2341X_MBOX_MAX_DATA];
777 struct ivtv_stream *s;
779 IVTV_DEBUG_HI_IRQ("ENC START VBI CAP\n");
780 s = &itv->streams[IVTV_ENC_STREAM_TYPE_VBI];
782 if (!stream_enc_dma_append(s, data))
783 set_bit(ivtv_use_pio(s) ? IVTV_F_S_PIO_PENDING : IVTV_F_S_DMA_PENDING, &s->s_flags);
786 static void ivtv_irq_dec_vbi_reinsert(struct ivtv *itv)
788 u32 data[CX2341X_MBOX_MAX_DATA];
789 struct ivtv_stream *s = &itv->streams[IVTV_DEC_STREAM_TYPE_VBI];
791 IVTV_DEBUG_HI_IRQ("DEC VBI REINSERT\n");
792 if (test_bit(IVTV_F_S_CLAIMED, &s->s_flags) &&
793 !stream_enc_dma_append(s, data)) {
794 set_bit(IVTV_F_S_PIO_PENDING, &s->s_flags);
798 static void ivtv_irq_dec_data_req(struct ivtv *itv)
800 u32 data[CX2341X_MBOX_MAX_DATA];
801 struct ivtv_stream *s;
803 /* YUV or MPG */
805 if (test_bit(IVTV_F_I_DEC_YUV, &itv->i_flags)) {
806 ivtv_api_get_data(&itv->dec_mbox, IVTV_MBOX_DMA, 2, data);
807 itv->dma_data_req_size =
808 1080 * ((itv->yuv_info.v4l2_src_h + 31) & ~31);
809 itv->dma_data_req_offset = data[1];
810 if (atomic_read(&itv->yuv_info.next_dma_frame) >= 0)
811 ivtv_yuv_frame_complete(itv);
812 s = &itv->streams[IVTV_DEC_STREAM_TYPE_YUV];
814 else {
815 ivtv_api_get_data(&itv->dec_mbox, IVTV_MBOX_DMA, 3, data);
816 itv->dma_data_req_size = min_t(u32, data[2], 0x10000);
817 itv->dma_data_req_offset = data[1];
818 s = &itv->streams[IVTV_DEC_STREAM_TYPE_MPG];
820 IVTV_DEBUG_HI_IRQ("DEC DATA REQ %s: %d %08x %u\n", s->name, s->q_full.bytesused,
821 itv->dma_data_req_offset, itv->dma_data_req_size);
822 if (itv->dma_data_req_size == 0 || s->q_full.bytesused < itv->dma_data_req_size) {
823 set_bit(IVTV_F_S_NEEDS_DATA, &s->s_flags);
825 else {
826 if (test_bit(IVTV_F_I_DEC_YUV, &itv->i_flags))
827 ivtv_yuv_setup_stream_frame(itv);
828 clear_bit(IVTV_F_S_NEEDS_DATA, &s->s_flags);
829 ivtv_queue_move(s, &s->q_full, NULL, &s->q_predma, itv->dma_data_req_size);
830 ivtv_dma_stream_dec_prepare(s, itv->dma_data_req_offset + IVTV_DECODER_OFFSET, 0);
834 static void ivtv_irq_vsync(struct ivtv *itv)
836 /* The vsync interrupt is unusual in that it won't clear until
837 * the end of the first line for the current field, at which
838 * point it clears itself. This can result in repeated vsync
839 * interrupts, or a missed vsync. Read some of the registers
840 * to determine the line being displayed and ensure we handle
841 * one vsync per frame.
843 unsigned int frame = read_reg(IVTV_REG_DEC_LINE_FIELD) & 1;
844 struct yuv_playback_info *yi = &itv->yuv_info;
845 int last_dma_frame = atomic_read(&yi->next_dma_frame);
846 struct yuv_frame_info *f = &yi->new_frame_info[last_dma_frame];
848 if (0) IVTV_DEBUG_IRQ("DEC VSYNC\n");
850 if (((frame ^ f->sync_field) == 0 &&
851 ((itv->last_vsync_field & 1) ^ f->sync_field)) ||
852 (frame != (itv->last_vsync_field & 1) && !f->interlaced)) {
853 int next_dma_frame = last_dma_frame;
855 if (!(f->interlaced && f->delay && yi->fields_lapsed < 1)) {
856 if (next_dma_frame >= 0 && next_dma_frame != atomic_read(&yi->next_fill_frame)) {
857 write_reg(yuv_offset[next_dma_frame] >> 4, 0x82c);
858 write_reg((yuv_offset[next_dma_frame] + IVTV_YUV_BUFFER_UV_OFFSET) >> 4, 0x830);
859 write_reg(yuv_offset[next_dma_frame] >> 4, 0x834);
860 write_reg((yuv_offset[next_dma_frame] + IVTV_YUV_BUFFER_UV_OFFSET) >> 4, 0x838);
861 next_dma_frame = (next_dma_frame + 1) % IVTV_YUV_BUFFERS;
862 atomic_set(&yi->next_dma_frame, next_dma_frame);
863 yi->fields_lapsed = -1;
864 yi->running = 1;
868 if (frame != (itv->last_vsync_field & 1)) {
869 static const struct v4l2_event evtop = {
870 .type = V4L2_EVENT_VSYNC,
871 .u.vsync.field = V4L2_FIELD_TOP,
873 static const struct v4l2_event evbottom = {
874 .type = V4L2_EVENT_VSYNC,
875 .u.vsync.field = V4L2_FIELD_BOTTOM,
877 struct ivtv_stream *s = ivtv_get_output_stream(itv);
879 itv->last_vsync_field += 1;
880 if (frame == 0) {
881 clear_bit(IVTV_F_I_VALID_DEC_TIMINGS, &itv->i_flags);
882 clear_bit(IVTV_F_I_EV_VSYNC_FIELD, &itv->i_flags);
884 else {
885 set_bit(IVTV_F_I_EV_VSYNC_FIELD, &itv->i_flags);
887 if (test_bit(IVTV_F_I_EV_VSYNC_ENABLED, &itv->i_flags)) {
888 set_bit(IVTV_F_I_EV_VSYNC, &itv->i_flags);
889 wake_up(&itv->event_waitq);
890 if (s)
891 wake_up(&s->waitq);
893 if (s && s->vdev.v4l2_dev)
894 v4l2_event_queue(&s->vdev, frame ? &evtop : &evbottom);
895 wake_up(&itv->vsync_waitq);
897 /* Send VBI to saa7127 */
898 if (frame && (itv->output_mode == OUT_PASSTHROUGH ||
899 test_bit(IVTV_F_I_UPDATE_WSS, &itv->i_flags) ||
900 test_bit(IVTV_F_I_UPDATE_VPS, &itv->i_flags) ||
901 test_bit(IVTV_F_I_UPDATE_CC, &itv->i_flags))) {
902 set_bit(IVTV_F_I_WORK_HANDLER_VBI, &itv->i_flags);
903 set_bit(IVTV_F_I_HAVE_WORK, &itv->i_flags);
906 /* Check if we need to update the yuv registers */
907 if (yi->running && (yi->yuv_forced_update || f->update)) {
908 if (!f->update) {
909 last_dma_frame =
910 (u8)(atomic_read(&yi->next_dma_frame) -
911 1) % IVTV_YUV_BUFFERS;
912 f = &yi->new_frame_info[last_dma_frame];
915 if (f->src_w) {
916 yi->update_frame = last_dma_frame;
917 f->update = 0;
918 yi->yuv_forced_update = 0;
919 set_bit(IVTV_F_I_WORK_HANDLER_YUV, &itv->i_flags);
920 set_bit(IVTV_F_I_HAVE_WORK, &itv->i_flags);
924 yi->fields_lapsed++;
928 #define IVTV_IRQ_DMA (IVTV_IRQ_DMA_READ | IVTV_IRQ_ENC_DMA_COMPLETE | IVTV_IRQ_DMA_ERR | IVTV_IRQ_ENC_START_CAP | IVTV_IRQ_ENC_VBI_CAP | IVTV_IRQ_DEC_DATA_REQ | IVTV_IRQ_DEC_VBI_RE_INSERT)
930 irqreturn_t ivtv_irq_handler(int irq, void *dev_id)
932 struct ivtv *itv = (struct ivtv *)dev_id;
933 u32 combo;
934 u32 stat;
935 int i;
936 u8 vsync_force = 0;
938 spin_lock(&itv->dma_reg_lock);
939 /* get contents of irq status register */
940 stat = read_reg(IVTV_REG_IRQSTATUS);
942 combo = ~itv->irqmask & stat;
944 /* Clear out IRQ */
945 if (combo) write_reg(combo, IVTV_REG_IRQSTATUS);
947 if (0 == combo) {
948 /* The vsync interrupt is unusual and clears itself. If we
949 * took too long, we may have missed it. Do some checks
951 if (~itv->irqmask & IVTV_IRQ_DEC_VSYNC) {
952 /* vsync is enabled, see if we're in a new field */
953 if ((itv->last_vsync_field & 1) !=
954 (read_reg(IVTV_REG_DEC_LINE_FIELD) & 1)) {
955 /* New field, looks like we missed it */
956 IVTV_DEBUG_YUV("VSync interrupt missed %d\n",
957 read_reg(IVTV_REG_DEC_LINE_FIELD) >> 16);
958 vsync_force = 1;
962 if (!vsync_force) {
963 /* No Vsync expected, wasn't for us */
964 spin_unlock(&itv->dma_reg_lock);
965 return IRQ_NONE;
969 /* Exclude interrupts noted below from the output, otherwise the log is flooded with
970 these messages */
971 if (combo & ~0xff6d0400)
972 IVTV_DEBUG_HI_IRQ("======= valid IRQ bits: 0x%08x ======\n", combo);
974 if (combo & IVTV_IRQ_DEC_DMA_COMPLETE) {
975 IVTV_DEBUG_HI_IRQ("DEC DMA COMPLETE\n");
978 if (combo & IVTV_IRQ_DMA_READ) {
979 ivtv_irq_dma_read(itv);
982 if (combo & IVTV_IRQ_ENC_DMA_COMPLETE) {
983 ivtv_irq_enc_dma_complete(itv);
986 if (combo & IVTV_IRQ_ENC_PIO_COMPLETE) {
987 ivtv_irq_enc_pio_complete(itv);
990 if (combo & IVTV_IRQ_DMA_ERR) {
991 ivtv_irq_dma_err(itv);
994 if (combo & IVTV_IRQ_ENC_START_CAP) {
995 ivtv_irq_enc_start_cap(itv);
998 if (combo & IVTV_IRQ_ENC_VBI_CAP) {
999 ivtv_irq_enc_vbi_cap(itv);
1002 if (combo & IVTV_IRQ_DEC_VBI_RE_INSERT) {
1003 ivtv_irq_dec_vbi_reinsert(itv);
1006 if (combo & IVTV_IRQ_ENC_EOS) {
1007 IVTV_DEBUG_IRQ("ENC EOS\n");
1008 set_bit(IVTV_F_I_EOS, &itv->i_flags);
1009 wake_up(&itv->eos_waitq);
1012 if (combo & IVTV_IRQ_DEC_DATA_REQ) {
1013 ivtv_irq_dec_data_req(itv);
1016 /* Decoder Vertical Sync - We can't rely on 'combo', so check if vsync enabled */
1017 if (~itv->irqmask & IVTV_IRQ_DEC_VSYNC) {
1018 ivtv_irq_vsync(itv);
1021 if (combo & IVTV_IRQ_ENC_VIM_RST) {
1022 IVTV_DEBUG_IRQ("VIM RST\n");
1023 /*ivtv_vapi(itv, CX2341X_ENC_REFRESH_INPUT, 0); */
1026 if (combo & IVTV_IRQ_DEC_AUD_MODE_CHG) {
1027 IVTV_DEBUG_INFO("Stereo mode changed\n");
1030 if ((combo & IVTV_IRQ_DMA) && !test_bit(IVTV_F_I_DMA, &itv->i_flags)) {
1031 itv->irq_rr_idx++;
1032 for (i = 0; i < IVTV_MAX_STREAMS; i++) {
1033 int idx = (i + itv->irq_rr_idx) % IVTV_MAX_STREAMS;
1034 struct ivtv_stream *s = &itv->streams[idx];
1036 if (!test_and_clear_bit(IVTV_F_S_DMA_PENDING, &s->s_flags))
1037 continue;
1038 if (s->type >= IVTV_DEC_STREAM_TYPE_MPG)
1039 ivtv_dma_dec_start(s);
1040 else
1041 ivtv_dma_enc_start(s);
1042 break;
1045 if (i == IVTV_MAX_STREAMS &&
1046 test_bit(IVTV_F_I_UDMA_PENDING, &itv->i_flags))
1047 ivtv_udma_start(itv);
1050 if ((combo & IVTV_IRQ_DMA) && !test_bit(IVTV_F_I_PIO, &itv->i_flags)) {
1051 itv->irq_rr_idx++;
1052 for (i = 0; i < IVTV_MAX_STREAMS; i++) {
1053 int idx = (i + itv->irq_rr_idx) % IVTV_MAX_STREAMS;
1054 struct ivtv_stream *s = &itv->streams[idx];
1056 if (!test_and_clear_bit(IVTV_F_S_PIO_PENDING, &s->s_flags))
1057 continue;
1058 if (s->type == IVTV_DEC_STREAM_TYPE_VBI || s->type < IVTV_DEC_STREAM_TYPE_MPG)
1059 ivtv_dma_enc_start(s);
1060 break;
1064 if (test_and_clear_bit(IVTV_F_I_HAVE_WORK, &itv->i_flags)) {
1065 queue_kthread_work(&itv->irq_worker, &itv->irq_work);
1068 spin_unlock(&itv->dma_reg_lock);
1070 /* If we've just handled a 'forced' vsync, it's safest to say it
1071 * wasn't ours. Another device may have triggered it at just
1072 * the right time.
1074 return vsync_force ? IRQ_NONE : IRQ_HANDLED;
1077 void ivtv_unfinished_dma(unsigned long arg)
1079 struct ivtv *itv = (struct ivtv *)arg;
1081 if (!test_bit(IVTV_F_I_DMA, &itv->i_flags))
1082 return;
1083 IVTV_ERR("DMA TIMEOUT %08x %d\n", read_reg(IVTV_REG_DMASTATUS), itv->cur_dma_stream);
1085 write_reg(read_reg(IVTV_REG_DMASTATUS) & 3, IVTV_REG_DMASTATUS);
1086 clear_bit(IVTV_F_I_UDMA, &itv->i_flags);
1087 clear_bit(IVTV_F_I_DMA, &itv->i_flags);
1088 itv->cur_dma_stream = -1;
1089 wake_up(&itv->dma_waitq);