static void flush_imgs(struct mdp_blit_req *req, struct ppp_regs *regs, struct file *src_file, struct file *dst_file) { #ifdef CONFIG_ANDROID_PMEM uint32_t src0_len, src1_len, dst0_len, dst1_len; if (!(req->flags & MDP_BLIT_NON_CACHED)) { /* flush src images to memory before dma to mdp */ get_len(&req->src, &req->src_rect, regs->src_bpp, &src0_len, &src1_len); flush_pmem_file(src_file, req->src.offset, src0_len); if (IS_PSEUDOPLNR(req->src.format)) flush_pmem_file(src_file, req->src.offset + src0_len, src1_len); /* flush dst images */ get_len(&req->dst, &req->dst_rect, regs->dst_bpp, &dst0_len, &dst1_len); flush_pmem_file(dst_file, req->dst.offset, dst0_len); if (IS_PSEUDOPLNR(req->dst.format)) flush_pmem_file(dst_file, req->dst.offset + dst0_len, dst1_len); } #endif }
static uint32_t get_chroma_base(struct mdp_img *img, uint32_t base, uint32_t bpp) { uint32_t addr = 0; if (IS_PSEUDOPLNR(img->format)) addr = base + (img->width * img->height * bpp); return addr; }
static void get_len(struct mdp_img *img, struct mdp_rect *rect, uint32_t bpp, uint32_t *len0, uint32_t *len1) { *len0 = IMG_LEN(rect->h, img->width, rect->w, bpp); if (IS_PSEUDOPLNR(img->format)) *len1 = *len0/Y_TO_CRCB_RATIO(img->format); else *len1 = 0; }
static uint32_t get_chroma_offset(struct mdp_img *img, struct mdp_rect *rect, uint32_t bpp) { #ifndef CONFIG_MSM_MDP31 uint32_t compress_v = Y_TO_CRCB_RATIO(img->format); uint32_t compress_h = 2; uint32_t offset = 0; if (IS_PSEUDOPLNR(img->format)) { offset = (rect->x / compress_h) * compress_h; offset += rect->y == 0 ? 0 : ((rect->y + 1) / compress_v) * img->width; offset *= bpp; } return offset; #else return 0; #endif }