Lines Matching refs:itv
37 static int ivtv_yuv_prep_user_dma(struct ivtv *itv, struct ivtv_user_dma *dma, in ivtv_yuv_prep_user_dma() argument
42 struct yuv_playback_info *yi = &itv->yuv_info; in ivtv_yuv_prep_user_dma()
134 dma->SG_length = pci_map_sg(itv->pdev, dma->SGlist, dma->page_count, PCI_DMA_TODEVICE); in ivtv_yuv_prep_user_dma()
150 ivtv_udma_sync_for_device(itv); in ivtv_yuv_prep_user_dma()
155 int ivtv_yuv_filter_check(struct ivtv *itv) in ivtv_yuv_filter_check() argument
169 static void ivtv_yuv_filter(struct ivtv *itv, int h_filter, int v_filter_1, int v_filter_2) in ivtv_yuv_filter() argument
229 static void ivtv_yuv_handle_horizontal(struct ivtv *itv, struct yuv_frame_info *f) in ivtv_yuv_handle_horizontal() argument
231 struct yuv_playback_info *yi = &itv->yuv_info; in ivtv_yuv_handle_horizontal()
386 ivtv_yuv_filter(itv, h_filter, -1, -1); in ivtv_yuv_handle_horizontal()
391 static void ivtv_yuv_handle_vertical(struct ivtv *itv, struct yuv_frame_info *f) in ivtv_yuv_handle_vertical() argument
393 struct yuv_playback_info *yi = &itv->yuv_info; in ivtv_yuv_handle_vertical()
658 ivtv_yuv_filter(itv, -1, v_filter_1, -1); in ivtv_yuv_handle_vertical()
664 ivtv_yuv_filter(itv, -1, -1, v_filter_2); in ivtv_yuv_handle_vertical()
670 static u32 ivtv_yuv_window_setup(struct ivtv *itv, struct yuv_frame_info *f) in ivtv_yuv_window_setup() argument
672 struct yuv_frame_info *of = &itv->yuv_info.old_frame_info; in ivtv_yuv_window_setup()
749 if (itv->yuv_info.track_osd) { in ivtv_yuv_window_setup()
751 f->dst_x += itv->yuv_info.osd_x_offset; in ivtv_yuv_window_setup()
752 f->dst_y += itv->yuv_info.osd_y_offset; in ivtv_yuv_window_setup()
815 void ivtv_yuv_work_handler(struct ivtv *itv) in ivtv_yuv_work_handler() argument
817 struct yuv_playback_info *yi = &itv->yuv_info; in ivtv_yuv_work_handler()
840 if (!(yuv_update = ivtv_yuv_window_setup(itv, &f))) in ivtv_yuv_work_handler()
849 ivtv_yuv_handle_horizontal(itv, &f); in ivtv_yuv_work_handler()
852 ivtv_yuv_handle_vertical(itv, &f); in ivtv_yuv_work_handler()
857 static void ivtv_yuv_init(struct ivtv *itv) in ivtv_yuv_init() argument
859 struct yuv_playback_info *yi = &itv->yuv_info; in ivtv_yuv_init()
918 if (!itv->osd_info) { in ivtv_yuv_init()
941 yi->blanking_dmaptr = pci_map_single(itv->pdev, yi->blanking_ptr, 720*16, PCI_DMA_TODEVICE); in ivtv_yuv_init()
950 set_bit(IVTV_F_I_DECODING_YUV, &itv->i_flags); in ivtv_yuv_init()
955 static void ivtv_yuv_next_free(struct ivtv *itv) in ivtv_yuv_next_free() argument
958 struct yuv_playback_info *yi = &itv->yuv_info; in ivtv_yuv_next_free()
961 ivtv_yuv_init(itv); in ivtv_yuv_next_free()
978 static void ivtv_yuv_setup_frame(struct ivtv *itv, struct ivtv_dma_frame *args) in ivtv_yuv_setup_frame() argument
980 struct yuv_playback_info *yi = &itv->yuv_info; in ivtv_yuv_setup_frame()
1071 void ivtv_yuv_frame_complete(struct ivtv *itv) in ivtv_yuv_frame_complete() argument
1073 atomic_set(&itv->yuv_info.next_fill_frame, in ivtv_yuv_frame_complete()
1074 (itv->yuv_info.draw_frame + 1) % IVTV_YUV_BUFFERS); in ivtv_yuv_frame_complete()
1077 static int ivtv_yuv_udma_frame(struct ivtv *itv, struct ivtv_dma_frame *args) in ivtv_yuv_udma_frame() argument
1083 mutex_lock(&itv->udma.lock); in ivtv_yuv_udma_frame()
1085 if ((rc = ivtv_yuv_prep_user_dma(itv, &itv->udma, args)) != 0) { in ivtv_yuv_udma_frame()
1086 mutex_unlock(&itv->udma.lock); in ivtv_yuv_udma_frame()
1090 ivtv_udma_prepare(itv); in ivtv_yuv_udma_frame()
1091 prepare_to_wait(&itv->dma_waitq, &wait, TASK_INTERRUPTIBLE); in ivtv_yuv_udma_frame()
1094 while (test_bit(IVTV_F_I_UDMA_PENDING, &itv->i_flags) || in ivtv_yuv_udma_frame()
1095 test_bit(IVTV_F_I_UDMA, &itv->i_flags)) { in ivtv_yuv_udma_frame()
1099 if (got_sig && test_and_clear_bit(IVTV_F_I_UDMA_PENDING, &itv->i_flags)) in ivtv_yuv_udma_frame()
1104 finish_wait(&itv->dma_waitq, &wait); in ivtv_yuv_udma_frame()
1107 ivtv_udma_unmap(itv); in ivtv_yuv_udma_frame()
1111 mutex_unlock(&itv->udma.lock); in ivtv_yuv_udma_frame()
1115 ivtv_yuv_frame_complete(itv); in ivtv_yuv_udma_frame()
1117 mutex_unlock(&itv->udma.lock); in ivtv_yuv_udma_frame()
1122 void ivtv_yuv_setup_stream_frame(struct ivtv *itv) in ivtv_yuv_setup_stream_frame() argument
1124 struct yuv_playback_info *yi = &itv->yuv_info; in ivtv_yuv_setup_stream_frame()
1127 ivtv_yuv_next_free(itv); in ivtv_yuv_setup_stream_frame()
1141 ivtv_yuv_setup_frame(itv, &dma_args); in ivtv_yuv_setup_stream_frame()
1143 if (!itv->dma_data_req_offset) in ivtv_yuv_setup_stream_frame()
1144 itv->dma_data_req_offset = yuv_offset[yi->draw_frame]; in ivtv_yuv_setup_stream_frame()
1148 int ivtv_yuv_udma_stream_frame(struct ivtv *itv, void __user *src) in ivtv_yuv_udma_stream_frame() argument
1150 struct yuv_playback_info *yi = &itv->yuv_info; in ivtv_yuv_udma_stream_frame()
1154 ivtv_yuv_setup_stream_frame(itv); in ivtv_yuv_udma_stream_frame()
1162 mutex_unlock(&itv->serialize_lock); in ivtv_yuv_udma_stream_frame()
1163 res = ivtv_yuv_udma_frame(itv, &dma_args); in ivtv_yuv_udma_stream_frame()
1164 mutex_lock(&itv->serialize_lock); in ivtv_yuv_udma_stream_frame()
1169 int ivtv_yuv_prep_frame(struct ivtv *itv, struct ivtv_dma_frame *args) in ivtv_yuv_prep_frame() argument
1174 ivtv_yuv_next_free(itv); in ivtv_yuv_prep_frame()
1175 ivtv_yuv_setup_frame(itv, args); in ivtv_yuv_prep_frame()
1179 mutex_unlock(&itv->serialize_lock); in ivtv_yuv_prep_frame()
1180 res = ivtv_yuv_udma_frame(itv, args); in ivtv_yuv_prep_frame()
1181 mutex_lock(&itv->serialize_lock); in ivtv_yuv_prep_frame()
1185 void ivtv_yuv_close(struct ivtv *itv) in ivtv_yuv_close() argument
1187 struct yuv_playback_info *yi = &itv->yuv_info; in ivtv_yuv_close()
1191 mutex_unlock(&itv->serialize_lock); in ivtv_yuv_close()
1192 ivtv_waitq(&itv->vsync_waitq); in ivtv_yuv_close()
1193 mutex_lock(&itv->serialize_lock); in ivtv_yuv_close()
1273 ivtv_yuv_filter(itv, h_filter, v_filter_1, v_filter_2); in ivtv_yuv_close()
1285 pci_unmap_single(itv->pdev, yi->blanking_dmaptr, 720*16, PCI_DMA_TODEVICE); in ivtv_yuv_close()
1295 clear_bit(IVTV_F_I_DECODING_YUV, &itv->i_flags); in ivtv_yuv_close()