Lines Matching refs:itv
25 static int ivtv_yuv_prep_user_dma(struct ivtv *itv, struct ivtv_user_dma *dma, in ivtv_yuv_prep_user_dma() argument
30 struct yuv_playback_info *yi = &itv->yuv_info; in ivtv_yuv_prep_user_dma()
116 dma->SG_length = dma_map_sg(&itv->pdev->dev, dma->SGlist, in ivtv_yuv_prep_user_dma()
133 ivtv_udma_sync_for_device(itv); in ivtv_yuv_prep_user_dma()
138 int ivtv_yuv_filter_check(struct ivtv *itv) in ivtv_yuv_filter_check() argument
152 static void ivtv_yuv_filter(struct ivtv *itv, int h_filter, int v_filter_1, int v_filter_2) in ivtv_yuv_filter() argument
212 static void ivtv_yuv_handle_horizontal(struct ivtv *itv, struct yuv_frame_info *f) in ivtv_yuv_handle_horizontal() argument
214 struct yuv_playback_info *yi = &itv->yuv_info; in ivtv_yuv_handle_horizontal()
369 ivtv_yuv_filter(itv, h_filter, -1, -1); in ivtv_yuv_handle_horizontal()
374 static void ivtv_yuv_handle_vertical(struct ivtv *itv, struct yuv_frame_info *f) in ivtv_yuv_handle_vertical() argument
376 struct yuv_playback_info *yi = &itv->yuv_info; in ivtv_yuv_handle_vertical()
641 ivtv_yuv_filter(itv, -1, v_filter_1, -1); in ivtv_yuv_handle_vertical()
647 ivtv_yuv_filter(itv, -1, -1, v_filter_2); in ivtv_yuv_handle_vertical()
653 static u32 ivtv_yuv_window_setup(struct ivtv *itv, struct yuv_frame_info *f) in ivtv_yuv_window_setup() argument
655 struct yuv_frame_info *of = &itv->yuv_info.old_frame_info; in ivtv_yuv_window_setup()
732 if (itv->yuv_info.track_osd) { in ivtv_yuv_window_setup()
734 f->dst_x += itv->yuv_info.osd_x_offset; in ivtv_yuv_window_setup()
735 f->dst_y += itv->yuv_info.osd_y_offset; in ivtv_yuv_window_setup()
798 void ivtv_yuv_work_handler(struct ivtv *itv) in ivtv_yuv_work_handler() argument
800 struct yuv_playback_info *yi = &itv->yuv_info; in ivtv_yuv_work_handler()
823 if (!(yuv_update = ivtv_yuv_window_setup(itv, &f))) in ivtv_yuv_work_handler()
832 ivtv_yuv_handle_horizontal(itv, &f); in ivtv_yuv_work_handler()
835 ivtv_yuv_handle_vertical(itv, &f); in ivtv_yuv_work_handler()
840 static void ivtv_yuv_init(struct ivtv *itv) in ivtv_yuv_init() argument
842 struct yuv_playback_info *yi = &itv->yuv_info; in ivtv_yuv_init()
901 if (!itv->osd_info) { in ivtv_yuv_init()
924 yi->blanking_dmaptr = dma_map_single(&itv->pdev->dev, in ivtv_yuv_init()
935 set_bit(IVTV_F_I_DECODING_YUV, &itv->i_flags); in ivtv_yuv_init()
940 static void ivtv_yuv_next_free(struct ivtv *itv) in ivtv_yuv_next_free() argument
943 struct yuv_playback_info *yi = &itv->yuv_info; in ivtv_yuv_next_free()
946 ivtv_yuv_init(itv); in ivtv_yuv_next_free()
963 static void ivtv_yuv_setup_frame(struct ivtv *itv, struct ivtv_dma_frame *args) in ivtv_yuv_setup_frame() argument
965 struct yuv_playback_info *yi = &itv->yuv_info; in ivtv_yuv_setup_frame()
1056 void ivtv_yuv_frame_complete(struct ivtv *itv) in ivtv_yuv_frame_complete() argument
1058 atomic_set(&itv->yuv_info.next_fill_frame, in ivtv_yuv_frame_complete()
1059 (itv->yuv_info.draw_frame + 1) % IVTV_YUV_BUFFERS); in ivtv_yuv_frame_complete()
1062 static int ivtv_yuv_udma_frame(struct ivtv *itv, struct ivtv_dma_frame *args) in ivtv_yuv_udma_frame() argument
1068 mutex_lock(&itv->udma.lock); in ivtv_yuv_udma_frame()
1070 if ((rc = ivtv_yuv_prep_user_dma(itv, &itv->udma, args)) != 0) { in ivtv_yuv_udma_frame()
1071 mutex_unlock(&itv->udma.lock); in ivtv_yuv_udma_frame()
1075 ivtv_udma_prepare(itv); in ivtv_yuv_udma_frame()
1076 prepare_to_wait(&itv->dma_waitq, &wait, TASK_INTERRUPTIBLE); in ivtv_yuv_udma_frame()
1079 while (test_bit(IVTV_F_I_UDMA_PENDING, &itv->i_flags) || in ivtv_yuv_udma_frame()
1080 test_bit(IVTV_F_I_UDMA, &itv->i_flags)) { in ivtv_yuv_udma_frame()
1084 if (got_sig && test_and_clear_bit(IVTV_F_I_UDMA_PENDING, &itv->i_flags)) in ivtv_yuv_udma_frame()
1089 finish_wait(&itv->dma_waitq, &wait); in ivtv_yuv_udma_frame()
1092 ivtv_udma_unmap(itv); in ivtv_yuv_udma_frame()
1096 mutex_unlock(&itv->udma.lock); in ivtv_yuv_udma_frame()
1100 ivtv_yuv_frame_complete(itv); in ivtv_yuv_udma_frame()
1102 mutex_unlock(&itv->udma.lock); in ivtv_yuv_udma_frame()
1107 void ivtv_yuv_setup_stream_frame(struct ivtv *itv) in ivtv_yuv_setup_stream_frame() argument
1109 struct yuv_playback_info *yi = &itv->yuv_info; in ivtv_yuv_setup_stream_frame()
1112 ivtv_yuv_next_free(itv); in ivtv_yuv_setup_stream_frame()
1126 ivtv_yuv_setup_frame(itv, &dma_args); in ivtv_yuv_setup_stream_frame()
1128 if (!itv->dma_data_req_offset) in ivtv_yuv_setup_stream_frame()
1129 itv->dma_data_req_offset = yuv_offset[yi->draw_frame]; in ivtv_yuv_setup_stream_frame()
1133 int ivtv_yuv_udma_stream_frame(struct ivtv *itv, void __user *src) in ivtv_yuv_udma_stream_frame() argument
1135 struct yuv_playback_info *yi = &itv->yuv_info; in ivtv_yuv_udma_stream_frame()
1139 ivtv_yuv_setup_stream_frame(itv); in ivtv_yuv_udma_stream_frame()
1147 mutex_unlock(&itv->serialize_lock); in ivtv_yuv_udma_stream_frame()
1148 res = ivtv_yuv_udma_frame(itv, &dma_args); in ivtv_yuv_udma_stream_frame()
1149 mutex_lock(&itv->serialize_lock); in ivtv_yuv_udma_stream_frame()
1154 int ivtv_yuv_prep_frame(struct ivtv *itv, struct ivtv_dma_frame *args) in ivtv_yuv_prep_frame() argument
1159 ivtv_yuv_next_free(itv); in ivtv_yuv_prep_frame()
1160 ivtv_yuv_setup_frame(itv, args); in ivtv_yuv_prep_frame()
1164 mutex_unlock(&itv->serialize_lock); in ivtv_yuv_prep_frame()
1165 res = ivtv_yuv_udma_frame(itv, args); in ivtv_yuv_prep_frame()
1166 mutex_lock(&itv->serialize_lock); in ivtv_yuv_prep_frame()
1170 void ivtv_yuv_close(struct ivtv *itv) in ivtv_yuv_close() argument
1172 struct yuv_playback_info *yi = &itv->yuv_info; in ivtv_yuv_close()
1176 mutex_unlock(&itv->serialize_lock); in ivtv_yuv_close()
1177 ivtv_waitq(&itv->vsync_waitq); in ivtv_yuv_close()
1178 mutex_lock(&itv->serialize_lock); in ivtv_yuv_close()
1258 ivtv_yuv_filter(itv, h_filter, v_filter_1, v_filter_2); in ivtv_yuv_close()
1270 dma_unmap_single(&itv->pdev->dev, yi->blanking_dmaptr, in ivtv_yuv_close()
1281 clear_bit(IVTV_F_I_DECODING_YUV, &itv->i_flags); in ivtv_yuv_close()