+#ifdef FB_WIMO_FLAG
+unsigned long temp_vv;
+static int frame_num = 0;
+static int wimo_set_buff(struct fb_info *info,unsigned long *temp)
+{
+ struct rk29fb_inf *inf = dev_get_drvdata(info->device);
+
+ ui_buffer = temp[0];
+ ui_buffer_map = ioremap(temp[0],temp[1]);
+ if(ui_buffer_map == NULL)
+ {
+ printk("can't map a buffer for ui\n");
+ return -EFAULT;
+ }
+
+ printk("ui_buffer %x ",ui_buffer_map);
+ memset(&wimo_info,0,sizeof(wimo_info) );
+
+ wimo_info.mode = inf->video_mode;
+// wimo_info.bitperpixel = var->bits_per_pixel;
+
+
+ wimo_info.dst_width = (temp[2] + 15) & 0xfff0;
+ wimo_info.dst_height = (temp[3] + 15) & 0xfff0;
+}
+static int wimo_get_buff(struct fb_info *info)
+{
+
+ struct rk29_ipp_req overlay_req;
+ struct rk29_ipp_req overlay_req_1;
+ struct rk29fb_inf *inf = dev_get_drvdata(info->device);
+ int ret;
+ memset(&overlay_req, 0 , sizeof(overlay_req));
+ memset(&overlay_req_1, 0 , sizeof(overlay_req_1));
+
+ if(inf->video_mode == 0 )
+ {
+ struct win0_par *par = info->par;
+ wimo_info.xpos = 0;
+ wimo_info.ypos = 0;
+ wimo_info.xsize = 0;
+ wimo_info.ysize = 0;
+ wimo_info.mode = 0;
+ if(par->format == 1)
+ wimo_info.bitperpixel = 16;
+ else
+ wimo_info.bitperpixel =32;// wimo_info.bitperpixel_fb1;
+ overlay_req.src0.YrgbMst = info->fix.smem_start + par->y_offset;//info->screen_base + par->y_offset;//info_buffer[8];
+ overlay_req.src0.CbrMst = info->fix.smem_start + par->y_offset + wimo_info.dst_width * wimo_info.dst_height;//dst_width*dst_height;//+ par->y_offset + dst_width*dst_height;//info_buffer[9];
+ overlay_req.src0.w = wimo_info.dst_width ;//dst_width;//info_buffer[2];
+ overlay_req.src0.h = wimo_info.dst_height ;//dst_height;//info_buffer[3];
+ overlay_req.src0.fmt = (wimo_info.bitperpixel == 16) ? 1 : 0;//3;
+ overlay_req.dst0.YrgbMst = ui_buffer;//overlay_buffer + info_buffer[4] + info_buffer[5] * dst_width;
+ overlay_req.dst0.CbrMst = ui_buffer + wimo_info.dst_width * wimo_info.dst_height;//dst_width*dst_height;//(unsigned char*) overlay_buffer + dst_width*dst_height +info_buffer[4] + ( info_buffer[5] * dst_width) / 2;// info_buffer[6] * info_buffer[7];
+ overlay_req.dst0.w = wimo_info.dst_width ;//dst_width;//info_buffer[6];
+ overlay_req.dst0.h = wimo_info.dst_height ;//dst_height;//info_buffer[7];
+ overlay_req.dst0.fmt = (wimo_info.bitperpixel== 16) ? 1 : 0;//3;3;
+ overlay_req.deinterlace_enable = 0;
+ overlay_req.timeout = 1000000;
+ overlay_req.src_vir_w = wimo_info.dst_width ;//dst_width;//info_buffer[2];
+ overlay_req.dst_vir_w = wimo_info.dst_width ;//dst_width;
+ overlay_req.flag = IPP_ROT_0;
+ ipp_blit_sync(&overlay_req);
+
+ ret = 0;
+ }
+ else
+ {
+
+ int err = 0;
+ static int wimo_time = 0;
+ unsigned long *overlay_buffer_map_temp;
+ unsigned long *map_temp;
+ unsigned long sign_memset = 0;
+ struct fb_var_screeninfo *var = &inf->fb1->var;
+ struct win0_par *par = inf->fb1->par;
+ wimo_info.mode = 1;
+ // printk("overlay setbuffer in\n");
+ // mutex_lock(&wimo_info.fb_lock);
+ wimo_info.fb_lock = 1;
+ {
+ wimo_info.xaff = var->xres;
+ wimo_info.yaff = var->yres;
+ if((wimo_info.xpos != par->xpos) ||(wimo_info.ypos != par->ypos)||(wimo_info.xsize != par->xsize) ||(wimo_info.ysize != par->ysize))
+ {
+ wimo_info.xpos = par->xpos;
+ wimo_info.ypos = par->ypos;
+ wimo_info.xsize = par->xsize;
+ wimo_info.ysize = par->ysize;
+ sign_memset = 1;
+ memset(ui_buffer_map,0,wimo_info.dst_height * wimo_info.dst_width);//dst_width*dst_height);
+ memset(ui_buffer_map + wimo_info.dst_height * wimo_info.dst_width, 0x80,wimo_info.dst_height * wimo_info.dst_width / 2);//dst_width*dst_height,0x80,dst_width*dst_height/2);
+ printk("wimo_info.xpos %d wimo_info.ypos %d wimo_info.xsize %d wimo_info.ysize %d\n",wimo_info.xpos, wimo_info.ypos, wimo_info.xsize, wimo_info.ysize );
+ }
+ }
+ //printk("wimo_info.xpos %d wimo_info.ypos %d wimo_info.xsize %d wimo_info.ysize %d\n",wimo_info.xpos, wimo_info.ypos, wimo_info.xsize, wimo_info.ysize );
+ if(wimo_info.xaff * 3 < wimo_info.xsize || wimo_info.yaff * 3 < wimo_info.ysize)// 3time or bigger scale up
+ {
+ unsigned long mid_width, mid_height;
+ struct rk29_ipp_req overlay_req_1;
+ if(wimo_info.xaff * 3 < wimo_info.xsize)
+ mid_width = wimo_info.xaff * 3;
+ else
+ mid_width = wimo_info.xsize;
+
+ if(wimo_info.yaff * 3 < wimo_info.ysize)
+ mid_height = wimo_info.yaff * 3;
+ else
+ mid_height = wimo_info.ysize;
+ overlay_req.src0.YrgbMst = wimo_info.src_y;//info_buffer[8];
+ overlay_req.src0.CbrMst = wimo_info.src_uv;//info_buffer[9];
+ overlay_req.src0.w = wimo_info.xaff;// info_buffer[2];
+ overlay_req.src0.h = wimo_info.yaff;// info_buffer[3];
+ overlay_req.src0.fmt = 3;
+ overlay_req.dst0.YrgbMst = ui_buffer + 2048000 ;//info_buffer[4] + info_buffer[5] * dst_width; //С³ß´çƬԴÐèÒª2´Î·Å´ó£¬ËùÒÔ½«bufferµÄºó°ë¶ÎÓÃÓÚ»º´æ
+ overlay_req.dst0.CbrMst = (unsigned char*) ui_buffer + mid_height * mid_width + 2048000;
+
+ overlay_req.dst0.w = mid_width;//info_buffer[6];
+ overlay_req.dst0.h = mid_height;//info_buffer[7];
+ overlay_req.dst0.fmt = 3;
+ overlay_req.timeout = 100000;
+ overlay_req.src_vir_w = wimo_info.xaff;//info_buffer[2];
+ overlay_req.dst_vir_w = mid_width;//dst_width;
+ overlay_req.flag = IPP_ROT_0;
+
+ overlay_req_1.src0.YrgbMst = ui_buffer + 2048000;
+ overlay_req_1.src0.CbrMst = (unsigned char*) ui_buffer + mid_height * mid_width + 2048000;
+ overlay_req_1.src0.w = mid_width;
+ overlay_req_1.src0.h = mid_height;// info_buffer[3];
+ overlay_req_1.src0.fmt = 3;
+ overlay_req_1.dst0.YrgbMst = ui_buffer + ((wimo_info.xpos + 1)&0xfffe) + wimo_info.ypos * wimo_info.dst_width;//info_buffer[4] + info_buffer[5] * dst_width;
+ overlay_req_1.dst0.CbrMst =(unsigned char*) ui_buffer + wimo_info.dst_width * wimo_info.dst_height + ((wimo_info.xpos + 1)&0xfffe) + ( wimo_info.ypos / 2)* wimo_info.dst_width ;
+
+ overlay_req_1.dst0.w = wimo_info.xsize;//info_buffer[6];
+ overlay_req_1.dst0.h = wimo_info.ysize;//info_buffer[7];
+ overlay_req_1.dst0.fmt = 3;
+ overlay_req_1.timeout = 100000;
+ overlay_req_1.src_vir_w = mid_width;//info_buffer[2];
+ overlay_req_1.dst_vir_w = wimo_info.dst_width;//dst_width;
+ overlay_req_1.flag = IPP_ROT_0;
+
+
+ err = ipp_blit_sync(&overlay_req);
+ dmac_flush_range(ui_buffer_map,ui_buffer_map + wimo_info.dst_height * wimo_info.dst_width * 3/2);//dst_width*dst_height*3/2);
+ err = ipp_blit_sync(&overlay_req_1);
+
+ }
+ else
+ {
+ overlay_req.src0.YrgbMst = wimo_info.src_y;//info_buffer[8];
+ overlay_req.src0.CbrMst = wimo_info.src_uv;//info_buffer[9];
+ overlay_req.src0.w = wimo_info.xaff;// info_buffer[2];
+ overlay_req.src0.h = wimo_info.yaff;// info_buffer[3];
+ overlay_req.src0.fmt = 3;
+ overlay_req.dst0.YrgbMst = ui_buffer + ((wimo_info.xpos + 1)&0xfffe) + wimo_info.ypos * wimo_info.dst_width;//info_buffer[4] + info_buffer[5] * dst_width;
+ overlay_req.dst0.CbrMst =(unsigned char*) ui_buffer + wimo_info.dst_width * wimo_info.dst_height + ((wimo_info.xpos + 1)&0xfffe) + ( wimo_info.ypos / 2)* wimo_info.dst_width ;
+
+ overlay_req.dst0.w = wimo_info.xsize;//wimo_info.xsize;//wimo_info.xaff;// wimo_info.xsize;//info_buffer[6];
+ overlay_req.dst0.h = (wimo_info.ysize + 1) & 0xfffe;//(wimo_info.ysize + 1) & 0xfffe;//wimo_info.yaff;//(wimo_info.ysize + 1) & 0xfffe;//info_buffer[7];
+ overlay_req.dst0.fmt = 3;
+ overlay_req.timeout = 100000;
+ overlay_req.src_vir_w = wimo_info.xaff;//info_buffer[2];
+ overlay_req.dst_vir_w = wimo_info.dst_width;//wimo_info.dst_width;//wimo_info.yaff;//wimo_info.dst_width;//dst_width;
+ overlay_req.flag = IPP_ROT_0;
+
+ dmac_flush_range(ui_buffer_map,ui_buffer_map + wimo_info.dst_height * wimo_info.dst_width * 3/2);//dst_width*dst_height*3/2);
+ err = ipp_blit_sync(&overlay_req);
+
+ }
+ // printk("overlay setbuffer exit\n");
+ ret = 1;
+ wimo_info.fb_lock = 0;
+ }
+
+
+ return ret;
+}
+#endif