int mdp_fb_mirror(struct mdp_device *mdp_dev, struct fb_info *src_fb, struct fb_info *dst_fb, struct mdp_blit_req *req) { int ret; struct mdp_info *mdp = container_of(mdp_dev, struct mdp_info, mdp_dev); if (!src_fb || !dst_fb) return -EINVAL; mdp->enable_irq(mdp, DL0_ROI_DONE); ret = process_blit(mdp, req, (struct file *)-1, src_fb->fix.smem_start, src_fb->fix.smem_len, (struct file *)-1, dst_fb->fix.smem_start, dst_fb->fix.smem_len); if (ret) goto err_bad_blit; ret = mdp_ppp_wait(mdp); if (ret) { PR_DISP_ERR("mdp_ppp_wait error\n"); goto err_wait_failed; } return 0; err_bad_blit: mdp->disable_irq(mdp, DL0_ROI_DONE); err_wait_failed: return ret; }
int mdp_ppp_blit_and_wait(struct mdp_info *mdp, struct mdp_blit_req *req, struct file *src_file, unsigned long src_start, unsigned long src_len, struct file *dst_file, unsigned long dst_start, unsigned long dst_len) { int ret; mdp->enable_irq(mdp, DL0_ROI_DONE); ret = process_blit(mdp, req, src_file, src_start, src_len, dst_file, dst_start, dst_len); if (unlikely(ret)) { mdp->disable_irq(mdp, DL0_ROI_DONE); return ret; } ret = mdp_ppp_wait(mdp); if (unlikely(ret)) { printk(KERN_ERR "%s: failed!\n", __func__); pr_err("original request:\n"); dump_req(mdp->req, src_start, src_len, dst_start, dst_len); pr_err("dead request:\n"); dump_req(req, src_start, src_len, dst_start, dst_len); BUG(); return ret; } return 0; }