Lines Matching refs:cx

119 static void dump_mb(struct cx18 *cx, struct cx18_mailbox *mb, char *name)  in dump_mb()  argument
217 static void cx18_mdl_send_to_alsa(struct cx18 *cx, struct cx18_stream *s, in cx18_mdl_send_to_alsa() argument
232 cx->pcm_announce_callback(cx->alsa, buf->buf, in cx18_mdl_send_to_alsa()
240 cx->pcm_announce_callback(cx->alsa, buf->buf, buf->bytesused); in cx18_mdl_send_to_alsa()
244 static void epu_dma_done(struct cx18 *cx, struct cx18_in_work_order *order) in epu_dma_done() argument
255 s = cx18_handle_to_stream(cx, handle); in epu_dma_done()
315 if (cx->pcm_announce_callback != NULL) { in epu_dma_done()
316 cx18_mdl_send_to_alsa(cx, s, mdl); in epu_dma_done()
327 cx18_stream_rotate_idx_mdls(cx); in epu_dma_done()
333 wake_up(&cx->dma_waitq); in epu_dma_done()
338 static void epu_debug(struct cx18 *cx, struct cx18_in_work_order *order) in epu_debug() argument
345 if (!test_bit(CX18_F_I_LOADED_FW, &cx->i_flags) && p && p > str) in epu_debug()
349 static void epu_cmd(struct cx18 *cx, struct cx18_in_work_order *order) in epu_cmd() argument
356 epu_dma_done(cx, order); in epu_cmd()
359 epu_debug(cx, order); in epu_cmd()
378 void free_in_work_order(struct cx18 *cx, struct cx18_in_work_order *order) in free_in_work_order() argument
387 struct cx18 *cx = order->cx; in cx18_in_work_handler() local
388 epu_cmd(cx, order); in cx18_in_work_handler()
389 free_in_work_order(cx, order); in cx18_in_work_handler()
397 static void mb_ack_irq(struct cx18 *cx, struct cx18_in_work_order *order) in mb_ack_irq() argument
405 ack_mb = &cx->scb->apu2epu_mb; in mb_ack_irq()
409 ack_mb = &cx->scb->cpu2epu_mb; in mb_ack_irq()
419 if (req != cx18_readl(cx, &ack_mb->request) || in mb_ack_irq()
420 req == cx18_readl(cx, &ack_mb->ack)) { in mb_ack_irq()
428 cx18_writel(cx, req, &ack_mb->ack); in mb_ack_irq()
429 cx18_write_reg_expect(cx, ack_irq, SW2_INT_SET, ack_irq, ack_irq); in mb_ack_irq()
433 static int epu_dma_done_irq(struct cx18 *cx, struct cx18_in_work_order *order) in epu_dma_done_irq() argument
447 mb_ack_irq(cx, order); in epu_dma_done_irq()
453 cx18_readl(cx, cx->enc_mem + mdl_ack_offset + i); in epu_dma_done_irq()
456 mb_ack_irq(cx, order); in epu_dma_done_irq()
461 int epu_debug_irq(struct cx18 *cx, struct cx18_in_work_order *order) in epu_debug_irq() argument
469 cx18_setup_page(cx, str_offset); in epu_debug_irq()
470 cx18_memcpy_fromio(cx, str, cx->enc_mem + str_offset, 252); in epu_debug_irq()
472 cx18_setup_page(cx, SCB_OFFSET); in epu_debug_irq()
476 mb_ack_irq(cx, order); in epu_debug_irq()
482 int epu_cmd_irq(struct cx18 *cx, struct cx18_in_work_order *order) in epu_cmd_irq() argument
491 ret = epu_dma_done_irq(cx, order); in epu_cmd_irq()
494 ret = epu_debug_irq(cx, order); in epu_cmd_irq()
514 struct cx18_in_work_order *alloc_in_work_order_irq(struct cx18 *cx) in alloc_in_work_order_irq() argument
528 if (atomic_read(&cx->in_work_order[i].pending) == 0) { in alloc_in_work_order_irq()
529 order = &cx->in_work_order[i]; in alloc_in_work_order_irq()
537 void cx18_api_epu_cmd_irq(struct cx18 *cx, int rpu) in cx18_api_epu_cmd_irq() argument
547 mb = &cx->scb->cpu2epu_mb; in cx18_api_epu_cmd_irq()
550 mb = &cx->scb->apu2epu_mb; in cx18_api_epu_cmd_irq()
556 order = alloc_in_work_order_irq(cx); in cx18_api_epu_cmd_irq()
569 (&order_mb->cmd)[i] = cx18_readl(cx, &mb->cmd + i); in cx18_api_epu_cmd_irq()
573 (&order_mb->request)[i] = cx18_readl(cx, &mb->request + i); in cx18_api_epu_cmd_irq()
581 dump_mb(cx, order_mb, "incoming"); in cx18_api_epu_cmd_irq()
589 submit = epu_cmd_irq(cx, order); in cx18_api_epu_cmd_irq()
591 queue_work(cx->in_work_queue, &order->work); in cx18_api_epu_cmd_irq()
600 static int cx18_api_call(struct cx18 *cx, u32 cmd, int args, u32 data[]) in cx18_api_call() argument
631 waitq = &cx->mb_apu_waitq; in cx18_api_call()
632 mb_lock = &cx->epu2apu_mb_lock; in cx18_api_call()
634 mb = &cx->scb->epu2apu_mb; in cx18_api_call()
637 waitq = &cx->mb_cpu_waitq; in cx18_api_call()
638 mb_lock = &cx->epu2cpu_mb_lock; in cx18_api_call()
640 mb = &cx->scb->epu2cpu_mb; in cx18_api_call()
658 req = cx18_readl(cx, &mb->request); in cx18_api_call()
661 (ack = cx18_readl(cx, &mb->ack)) == req, in cx18_api_call()
665 cx18_writel(cx, req, &mb->ack); in cx18_api_call()
675 cx18_writel(cx, cmd, &mb->cmd); in cx18_api_call()
677 cx18_writel(cx, data[i], &mb->args[i]); in cx18_api_call()
678 cx18_writel(cx, 0, &mb->error); in cx18_api_call()
679 cx18_writel(cx, req, &mb->request); in cx18_api_call()
680 cx18_writel(cx, req - 1, &mb->ack); /* ensure ack & req are distinct */ in cx18_api_call()
692 cx18_write_reg_expect(cx, irq, SW1_INT_SET, irq, irq); in cx18_api_call()
695 ack = cx18_readl(cx, &mb->ack); in cx18_api_call()
699 ack = cx18_readl(cx, &mb->ack); in cx18_api_call()
735 data[i] = cx18_readl(cx, &mb->args[i]); in cx18_api_call()
736 err = cx18_readl(cx, &mb->error); in cx18_api_call()
753 int cx18_api(struct cx18 *cx, u32 cmd, int args, u32 data[]) in cx18_api() argument
755 return cx18_api_call(cx, cmd, args, data); in cx18_api()
760 struct cx18 *cx = s->cx; in cx18_set_filter_param() local
764 mode = (cx->filter_mode & 1) ? 2 : (cx->spatial_strength ? 1 : 0); in cx18_set_filter_param()
765 ret = cx18_vapi(cx, CX18_CPU_SET_FILTER_PARAM, 4, in cx18_set_filter_param()
766 s->handle, 1, mode, cx->spatial_strength); in cx18_set_filter_param()
767 mode = (cx->filter_mode & 2) ? 2 : (cx->temporal_strength ? 1 : 0); in cx18_set_filter_param()
768 ret = ret ? ret : cx18_vapi(cx, CX18_CPU_SET_FILTER_PARAM, 4, in cx18_set_filter_param()
769 s->handle, 0, mode, cx->temporal_strength); in cx18_set_filter_param()
770 ret = ret ? ret : cx18_vapi(cx, CX18_CPU_SET_FILTER_PARAM, 4, in cx18_set_filter_param()
771 s->handle, 2, cx->filter_mode >> 2, 0); in cx18_set_filter_param()
779 struct cx18 *cx = s->cx; in cx18_api_func() local
785 return cx18_vapi(cx, CX18_CPU_SET_VIDEO_IN, 6, in cx18_api_func()
788 return cx18_vapi(cx, CX18_CPU_SET_VIDEO_RESOLUTION, 3, in cx18_api_func()
791 return cx18_vapi(cx, CX18_CPU_SET_STREAM_OUTPUT_TYPE, 2, in cx18_api_func()
794 return cx18_vapi(cx, CX18_CPU_SET_ASPECT_RATIO, 2, in cx18_api_func()
798 return cx18_vapi(cx, CX18_CPU_SET_GOP_STRUCTURE, 3, in cx18_api_func()
803 return cx18_vapi(cx, CX18_CPU_SET_AUDIO_PARAMETERS, 2, in cx18_api_func()
806 return cx18_vapi(cx, CX18_CPU_SET_AUDIO_MUTE, 2, in cx18_api_func()
809 return cx18_vapi(cx, CX18_CPU_SET_VIDEO_RATE, 5, in cx18_api_func()
812 return cx18_vapi(cx, CX18_CPU_SET_VIDEO_MUTE, 2, in cx18_api_func()
815 return cx18_vapi(cx, CX18_CPU_SET_SKIP_INPUT_FRAME, 2, in cx18_api_func()
818 return cx18_vapi(cx, CX18_CPU_SET_MISC_PARAMETERS, 4, in cx18_api_func()
821 cx->filter_mode = (data[0] & 3) | (data[1] << 2); in cx18_api_func()
824 cx->spatial_strength = data[0]; in cx18_api_func()
825 cx->temporal_strength = data[1]; in cx18_api_func()
828 return cx18_vapi(cx, CX18_CPU_SET_SPATIAL_FILTER_TYPE, 3, in cx18_api_func()
831 return cx18_vapi(cx, CX18_CPU_SET_MEDIAN_CORING, 5, in cx18_api_func()
838 int cx18_vapi_result(struct cx18 *cx, u32 data[MAX_MB_ARGUMENTS], in cx18_vapi_result() argument
848 return cx18_api(cx, cmd, args, data); in cx18_vapi_result()
851 int cx18_vapi(struct cx18 *cx, u32 cmd, int args, ...) in cx18_vapi() argument
857 if (cx == NULL) { in cx18_vapi()
869 return cx18_api(cx, cmd, args, data); in cx18_vapi()