From f18bdb34f858f6b779ac4a16734c03fa6f9db3f2 Mon Sep 17 00:00:00 2001 From: Robert Fekete Date: Tue, 23 Feb 2010 10:33:24 +0100 Subject: new b2r2lib --- b2r2_api.c | 1466 ------------------------------------------------------------ 1 file changed, 1466 deletions(-) delete mode 100644 b2r2_api.c (limited to 'b2r2_api.c') diff --git a/b2r2_api.c b/b2r2_api.c deleted file mode 100644 index 0e8b0c7..0000000 --- a/b2r2_api.c +++ /dev/null @@ -1,1466 +0,0 @@ -/*---------------------------------------------------------------------------*/ -/* © copyright STMicroelectronics(Wireless),2008. All rights reserved. For */ -/* information, STMicroelectronics(Wireless)reserves the right to license */ -/* this software concurrently under separate license conditions. */ -/* */ -/* This program is free software; you can redistribute it and/or modify it */ -/* under the terms of the GNU Lesser General Public License as published */ -/* by the Free Software Foundation; either version 2.1 of the License, */ -/* or (at your option)any later version. */ -/* */ -/* This program is distributed in the hope that it will be useful, but */ -/* WITHOUT ANY WARRANTY; without even the implied warranty of */ -/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See */ -/* the GNU Lesser General Public License for more details. */ -/* */ -/* You should have received a copy of the GNU Lesser General Public License */ -/* along with this program. If not, see . */ -/*---------------------------------------------------------------------------*/ - - -/** Include files */ - - -/** Linux includes */ - -#include -#include -#include -#include -//#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/** Driver include file */ - -#include "b2r2_driver_usr_api.h" - -/** b2r2 API file */ - -#include "b2r2_api.h" -#include "b2r2_global.h" - -static unsigned int compute_the_horizontal_scale_factor(B2R2_RECT *psrc_window, \ - B2R2_RECT *pdst_window,int *x_out_width); -static unsigned int compute_the_vertical_scale_factor(B2R2_RECT *psrc_window,\ - B2R2_RECT *pdst_window); - - static void configure_node_for_b2r2_op(b2r2_library *library,b2r2_configuration *config); - -#define DEBUG_NODE_DATA (0) -#define DEBUG_PRINTF (0) -#define PERFORMANCE_MEASUREMENT (1) - -/** - * It opens the b2r2 driver instance - * and returns NONE. - * @param[in] library The library instance. - * @return NONE - */ -void b2r2_library_init(b2r2_library* library) -{ - - /** Open one driver instance */ -#if DEBUG_PRINTF - printf("%s\n",__FUNCTION__); -#endif - - library->file_pointer=open("/dev/b2r2",O_RDWR); - -} - -/** - * Close the b2r2 driver instance - * and returns NONE. - * @param[in] library The library instance. - * @return NONE - */ -void b2r2_library_close(b2r2_library* library) -{ - - /** Close the driver instance */ -#if DEBUG_PRINTF - printf("%s\n",__FUNCTION__); -#endif - - close(library->file_pointer); - -} - -/** - * It allocates the kernal memory - * and returns NONE. - * @param[in] library The library instance. - * @param[out] memory Physical address of the kernal buffer. - * @return NONE - */ - -void b2r2_library_allocate(b2r2_library* library,b2r2_buffer_memory* memory) -{ - - b2r2_driver_memory driver_memory; - -#if DEBUG_PRINTF - printf("%s\n",__FUNCTION__); -#endif - /** Assign the size of memory */ - driver_memory.size_of_memory=memory->size_of_memory; - - /** Get the physical address of that memory */ - ioctl(library->file_pointer,B2R2_ALLOCATE_MEMORY,&driver_memory); - - memory->physical_address=driver_memory.physical_address; - - /** Get the virtual address of that memory */ - memory->logical_address= mmap (NULL,memory->size_of_memory,PROT_READ|PROT_WRITE,MAP_SHARED, - library->file_pointer,0); - - -} - -/** - * It deallocates the kernal memory - * and returns NONE. - * @param[in] library The library instance. - * @param[out] memory Physical address of the kernal buffer. - * @return NONE - */ -void b2r2_library_deallocate(b2r2_library* library,b2r2_buffer_memory* memory) -{ - - b2r2_driver_memory driver_memory; - -#if DEBUG_PRINTF - printf("%s\n",__FUNCTION__); -#endif - - /** Assign the size of memory */ - driver_memory.size_of_memory=memory->size_of_memory; - driver_memory.physical_address=memory->physical_address; - - /** Get the physical address of that memory */ - ioctl(library->file_pointer,B2R2_DEALLOCATE_MEMORY,&driver_memory); - - /** need to remove the virtual address */ - munmap(memory->logical_address,memory->size_of_memory); - - -} - - - - - -void do_pixmap_pitch(b2r2_color_form color_format,unsigned short pic_width,unsigned short *pixmap_pitch) -{ - switch(color_format) - { - case A1: - *pixmap_pitch = pic_width/8; - if( 0!=pic_width%8) - { - *pixmap_pitch +=1; - } - - break; - - case CLUT1: - *pixmap_pitch = pic_width/8; - if( 0!=pic_width%8) - { - *pixmap_pitch +=1; - } - - break; - case CLUT2: - *pixmap_pitch = pic_width/4; - if( 0!=pic_width%4) - { - *pixmap_pitch +=1; - } - - break; - - case CLUT4: - *pixmap_pitch = pic_width/2; - if( 0!=pic_width%2) - { - *pixmap_pitch +=1; - } - - break; - case CLUT8: - *pixmap_pitch = pic_width; - break; - - case ACLUT44: - *pixmap_pitch = pic_width; - break; - case ACLUT88: - *pixmap_pitch = pic_width*2; - break; - case A8: - *pixmap_pitch = pic_width; - break; - case RGB565: - *pixmap_pitch = pic_width*2; - break; - case ARGB4444: - *pixmap_pitch = pic_width*2; - break; - case ARGB1555: - *pixmap_pitch = pic_width*2; - break; - case ARGB8565: - *pixmap_pitch = pic_width*3; - break; - case RGB888: - *pixmap_pitch = pic_width*3; - break; - case YCBCR888: - *pixmap_pitch = pic_width*3; - break; - case ARGB8888: - *pixmap_pitch = pic_width*4; - break; - case AYCBCR8888: - *pixmap_pitch = pic_width*4; - break; - case YCBCR422R: - *pixmap_pitch = pic_width*2; - break; - case YCBCR42XMB: - *pixmap_pitch = pic_width; - break; - case YUV: - *pixmap_pitch = pic_width; - break; - case YCBCR42XMBN: - *pixmap_pitch = pic_width; - break; - case YCBCR42XR2B: - *pixmap_pitch = pic_width; - break; - } - -} - - -//////////////////////////////////////////////////////////////////////////////////////////// - -int b2r2_library_operation_configure(b2r2_library *library,b2r2_configuration *config) -{ - b2r2_buffer_memory memory; - int no_of_nodes=1; - - - config->is_color_key_en = config->color_key.enable ? 1:0; - config->is_alpha_blend_en = config->alpha_blend.enable ? 1:0; - config->is_rect_clip_en = config->rect_clip.enable ? 1:0; - config->is_color_fill_en = config->color_fill.enable ? 1:0; - config->is_rop_ops_en = config->rop.enable ? 1:0; - - if((config->is_alpha_blend_en||config->is_color_key_en||\ - config->is_rect_clip_en||config->is_color_fill_en)&config->is_rop_ops_en) - { - //error to be defined - return -1; - } - - if(config->dst_image.physical_address) - { - /*check for resize*/ - config->is_resize=((config->src_window.width!=config->dst_window.width)|| \ - (config->src_window.height!=config->dst_window.height))?1:0; - - config->is_color_conversion = ((config->src_image.color_format == B2R2_YCBCR42XMBN) || \ - (config->src_image.color_format == B2R2_YUV) || \ - (config->src_image.color_format == B2R2_YCBCR888) || \ - (config->src_image.color_format == B2R2_YCBCR422R) || \ - (config->src_image.color_format == B2R2_AYCBCR8888) || \ - (config->src_image.color_format == B2R2_YCBCR42XMB) || \ - (config->src_image.color_format == B2R2_YCBCR42XR2B))?1:0; - - config->is_rotation =(config->rotation!=B2R2_ROT_0)?1:0; - - /*resize or rotation*/ - if(config->is_resize || config->is_rotation || config->is_color_conversion) - { - /* Find the Number of nodes*/ - - if(config->is_rotation) - { - unsigned char is_src_width_multiple_of_16=1; - - no_of_nodes = (config->rotation!=B2R2_ROT_180)?(config->src_window.width/16):1; - if(config->src_window.width%16) - { - no_of_nodes++; - is_src_width_multiple_of_16 =0; - } - /** We have to allocate memory for nodes */ - memory.size_of_memory=no_of_nodes*sizeof(b2r2_link_list); - b2r2_library_allocate(library,&memory); - configure_rotate(no_of_nodes,is_src_width_multiple_of_16,&memory,config); - config->NodeAdress=memory.logical_address; - config->no_of_nodes =no_of_nodes; - config->last_nodeAdress =config->NodeAdress+(no_of_nodes-1)*sizeof(b2r2_link_list); - config->NodePhysicalAdress=memory.physical_address; - #if DEBUG_PRINTF - printf("%s\n",__FUNCTION__); - printf("no_of_nodes is %x \n",no_of_nodes); - printf("config->NodephyAdress is %x \n",memory.physical_address); - #endif - - - } - - else - { - /** resize/color conversion*/ - unsigned char is_src_width_multiple_of_128=1; - //printf("config->src_window.width:%d\n",config->src_window.width); - no_of_nodes = (config->src_window.width/128); - if(config->src_window.width%128) - { - no_of_nodes++; - is_src_width_multiple_of_128 =0; - } - /** We have to allocate memory for nodes */ - memory.size_of_memory=no_of_nodes*sizeof(b2r2_link_list); - b2r2_library_allocate(library,&memory); - //printf("memory.physical_address:%x\n",memory.physical_address); - if (config->is_color_conversion) - configure_color_conversion(no_of_nodes,is_src_width_multiple_of_128,&memory,config); - else if (config->is_resize ) - configure_resize(no_of_nodes,is_src_width_multiple_of_128,&memory,config); - config->NodeAdress=memory.logical_address; - config->no_of_nodes =no_of_nodes; - config->last_nodeAdress =config->NodeAdress+(no_of_nodes-1)*sizeof(b2r2_link_list); - config->NodePhysicalAdress=memory.physical_address; - #if DEBUG_PRINTF - printf("%s\n",__FUNCTION__); - printf("no_of_nodes is %x \n",no_of_nodes); - printf("config->NodephyAdress is %x \n",memory.physical_address); - #endif - - } - } - else - { - - /** We have to allocate memory for a node */ - - memory.size_of_memory=sizeof(b2r2_link_list); - b2r2_library_allocate(library,&memory); - config->NodeAdress=memory.logical_address; - config->no_of_nodes =1; - config->last_nodeAdress =config->NodeAdress; - config->NodePhysicalAdress=memory.physical_address; - configure_node_for_b2r2_op(library,config); - } - } - else - { - memory.size_of_memory=sizeof(b2r2_link_list); - b2r2_library_allocate(library,&memory); - config->NodeAdress=memory.logical_address; - config->no_of_nodes =1; - config->last_nodeAdress =config->NodeAdress; - config->NodePhysicalAdress=memory.physical_address; - configure_node_for_b2r2_op(library,config); - } - - config->job.job_logical_address=memory.logical_address; - config->job.job_physical_address=memory.physical_address; - config->job.job_size=no_of_nodes*sizeof(b2r2_link_list); - config->job.job_pace_lna_physical_address=memory.physical_address+(no_of_nodes-1)*sizeof(b2r2_link_list); - - return 0; -} - -void b2r2_library_update_params(b2r2_library *library,b2r2_configuration *config, - B2R2_UPDATE_PARAMS params,B2R2_UPDATE_PARAMS_VAL *pVal) -{ - b2r2_link_list *pt_mem; - unsigned short pixmap_pitch; - int i = 0; - - pt_mem=(b2r2_link_list*)(config->NodeAdress); - - switch(params) - { - case B2R2_FILL_COLOR_OP_PARAMS: - pt_mem->GROUP2.B2R2_S1CF = pVal->val; - pt_mem->GROUP1.B2R2_TXY = (pVal->window_params.src_window.top<window_params.src_window.left); - pt_mem->GROUP1.B2R2_TSZ = (RESVD|(pVal->window_params.src_window.width)|(pVal->window_params.src_window.height<GROUP1.B2R2_TXY = (pVal->window_params.dst_window.top<window_params.dst_window.left)); - pt_mem->GROUP1.B2R2_TSZ = (RESVD|(pVal->window_params.dst_window.width)|(pVal->window_params.dst_window.height<GROUP3.B2R2_SXY = pt_mem->GROUP1.B2R2_TXY; - pt_mem->GROUP3.B2R2_SSZ = pt_mem->GROUP1.B2R2_TSZ; - pt_mem->GROUP4.B2R2_SXY = (pVal->window_params.src_window.top<window_params.src_window.left)); - pt_mem->GROUP4.B2R2_SSZ = (RESVD|(pVal->window_params.src_window.width)|(pVal->window_params.src_window.height<GROUP0.B2R2_ACK = ((pt_mem->GROUP0.B2R2_ACK & 0xffff00ff) | (pVal->val<GROUP1.B2R2_TXY = (pVal->window_params.dst_window.top<window_params.dst_window.left)); - pt_mem->GROUP1.B2R2_TSZ = (RESVD|(pVal->window_params.dst_window.width)|(pVal->window_params.dst_window.height<GROUP3.B2R2_SXY = pt_mem->GROUP1.B2R2_TXY; - pt_mem->GROUP3.B2R2_SSZ = pt_mem->GROUP1.B2R2_TSZ; - pt_mem->GROUP4.B2R2_SXY = (pVal->window_params.src_window.top<window_params.src_window.left)); - pt_mem->GROUP4.B2R2_SSZ = (RESVD|(pVal->window_params.src_window.width)|(pVal->window_params.src_window.height<GROUP12.B2R2_KEY1 = - ((((pVal->val&0xFF000000)>>24)<val&0xF800)>>11)<<3)<val&0x07E0)>>5)<<2)<val&0x1F)<<3)); - pt_mem->GROUP12.B2R2_KEY2 = - ((((pVal->val&0xFF000000)>>24)<val&0xF800)>>11)<<3)|0x7)<val&0x07E0)>>5)<<2)|0x3)<val&0x1F)<<3)|0x7)); - break; - - case B2R2_ROTATION_OP_PARAMS: - break; - - case B2R2_CLIP_OP_PARAMS: - pt_mem->GROUP6.B2R2_CWO =((pVal->window_params.clip_window.top<window_params.clip_window.left); - pt_mem->GROUP6.B2R2_CWS =(((pVal->window_params.clip_window.top+pVal->window_params.clip_window.height)<window_params.clip_window.left+pVal->window_params.clip_window.width)); - break; - - case B2R2_RESIZE_OP_PARAMS: - break; - - case B2R2_ROP_OP_PARAMS: - pt_mem->GROUP0.B2R2_ACK =((pt_mem->GROUP0.B2R2_ACK & 0xffff00ff) | (pVal->val<no_of_nodes; i++) - { - pt_mem = (b2r2_link_list*)(config->NodeAdress+(i*sizeof(b2r2_link_list))); - if (pVal->val == B2R2_YCBCR42XMBN) - { - /*Source1*/ - pt_mem->GROUP3.B2R2_SBA = 0; - /*Source2*/ - pt_mem->GROUP4.B2R2_SBA = pVal->ppp_params.source_chroma_address; - /*Source3*/ - pt_mem->GROUP5.B2R2_SBA = pVal->ppp_params.source_luma_address; - } - else if (pVal->val == B2R2_YUV) - { - /*Source1*/ - pt_mem->GROUP3.B2R2_SBA = pVal->ppp_params.source_chroma2_address; - /*Source2*/ - pt_mem->GROUP4.B2R2_SBA = pVal->ppp_params.source_chroma_address; - /*Source3*/ - pt_mem->GROUP5.B2R2_SBA = pVal->ppp_params.source_luma_address; - -} - } - break; - case B2R2_SOURCE_ADDRESS_OF_PARAMS: - if(config->is_alpha_blend_en || config->is_color_key_en || \ - config->is_rect_clip_en || config->is_color_fill_en || config->is_rop_ops_en) - pt_mem->GROUP3.B2R2_SBA = pVal->val; - break; - case B2R2_DESTINATION_ADDRESS_OF_PARAMS: - if(config->is_alpha_blend_en || config->is_color_key_en || \ - config->is_rect_clip_en || config->is_color_fill_en || config->is_rop_ops_en) - { - pt_mem->GROUP1.B2R2_TBA = pVal->val; - } - else if(config->is_resize || config->is_rotation || config->is_color_conversion) - { - for (i=0; i < config->no_of_nodes; i++) - { - pt_mem = (b2r2_link_list*)(config->NodeAdress+(i*sizeof(b2r2_link_list))); - pt_mem->GROUP1.B2R2_TBA = pVal->val; - } - } - break; - default: - printf("Inavlid params to update\n"); - - } -} - -void b2r2_library_do_operation(b2r2_library *library,b2r2_configuration *config) -{ - b2r2_driver driver_handler; - - #if DEBUG_PRINTF - printf("%s\n",__FUNCTION__); - #endif - - switch(config->job.priority) - { - - - case B2R2_PRIORITY_1: - { - driver_handler.context=B2R2_CQ1_JOB; - driver_handler.queue_address=config->job.job_physical_address; - //driver_handler.control=(B2R2_AQ_Enab | B2R2_AQ_PRIOR_1); - driver_handler.pace_control=config->job.job_pace_lna_physical_address; - driver_handler.interrupt_target=0; - driver_handler.interrupt_context=(B2R2BLT_ITSCQ1_completed); - } - - break; - - case B2R2_PRIORITY_2: - { - driver_handler.context=B2R2_CQ2_JOB; - driver_handler.queue_address=config->job.job_physical_address; - //driver_handler.control=(B2R2_AQ_Enab | B2R2_AQ_PRIOR_1); - driver_handler.pace_control=config->job.job_pace_lna_physical_address; - driver_handler.interrupt_target=0; - driver_handler.interrupt_context=(B2R2BLT_ITSCQ2_completed); - } - - break; - - - case B2R2_PRIORITY_3: - { - driver_handler.context=B2R2_AQ1_JOB; - driver_handler.queue_address=config->job.job_physical_address; - driver_handler.control=(B2R2_AQ_Enab | B2R2_AQ_PRIOR_0); - driver_handler.pace_control=config->job.job_pace_lna_physical_address; - driver_handler.interrupt_target=0; - driver_handler.interrupt_context=(B2R2BLT_ITSAQ1_LNA_Reached)|(B2R2BLT_ITSAQ1_Node_Notif); - } - - break; - - case B2R2_PRIORITY_4: - { - driver_handler.context=B2R2_AQ2_JOB; - driver_handler.queue_address=config->job.job_physical_address; - driver_handler.control=(B2R2_AQ_Enab | B2R2_AQ_PRIOR_1); - driver_handler.pace_control=config->job.job_pace_lna_physical_address; - driver_handler.interrupt_target=0; - driver_handler.interrupt_context=(B2R2BLT_ITSAQ2_LNA_Reached)|(B2R2BLT_ITSAQ2_Node_Notif); - } - - break; - - case B2R2_PRIORITY_5: - { - driver_handler.context=B2R2_AQ3_JOB; - driver_handler.queue_address=config->job.job_physical_address; - driver_handler.control=(B2R2_AQ_Enab | B2R2_AQ_PRIOR_2); - driver_handler.pace_control=config->job.job_pace_lna_physical_address; - driver_handler.interrupt_target=0; - driver_handler.interrupt_context=(B2R2BLT_ITSAQ3_LNA_Reached)|(B2R2BLT_ITSAQ3_Node_Notif); - } - - break; - - case B2R2_PRIORITY_6: - { - driver_handler.context=B2R2_AQ4_JOB; - driver_handler.queue_address=config->job.job_physical_address; - driver_handler.control=(B2R2_AQ_Enab | B2R2_AQ_PRIOR_3); - driver_handler.pace_control=config->job.job_pace_lna_physical_address; - driver_handler.interrupt_target=0; - driver_handler.interrupt_context=(B2R2BLT_ITSAQ4_LNA_Reached)|(B2R2BLT_ITSAQ4_Node_Notif); - } - - break; - } - - /** do a queue call */ - - ioctl(library->file_pointer,B2R2_QUEUE_JOB,&driver_handler); - - /** get the job id */ - - config->job.jobid=driver_handler.jobid; - - #if DEBUG_NODE_DATA - debug_print_node_data(config->NodeAdress,5*sizeof(b2r2_link_list)); - #endif - -} - -void b2r2_library_operation_done(b2r2_library *library,b2r2_configuration *config) -{ - b2r2_driver driver_handler; - -#if DEBUG_PRINTF - printf("%s\n",__FUNCTION__); -#endif - /** get the job queue id */ - - driver_handler.jobid=config->job.jobid; - driver_handler.context=B2R2_AQ1_JOB; - - /** do a dequeue call */ - - ioctl(library->file_pointer,B2R2_DEQUEUE_JOB,&driver_handler); -} - -void configure_resize(unsigned char no_of_nodes,unsigned char is_src_width_multiple_of_128,\ - b2r2_buffer_memory *pNode_mem,b2r2_configuration *config) -{ - b2r2_link_list *pt_mem; - int i=0; - unsigned short dst_pixmap_pitch,src_pixmap_pitch; - B2R2_RECT src_rsz_inc_rect,dst_rsz_inc_vect; - int x_in_offset=0,x_out_offset=0; - int x_in_width=128,x_out_width=0; - unsigned char no_of_nodes_multiple_of_128=0; - unsigned int chroma_rsf=0,luma_rsf=0; - - no_of_nodes_multiple_of_128=(is_src_width_multiple_of_128)? \ - no_of_nodes:no_of_nodes-1; - - pt_mem= (b2r2_link_list*)(pNode_mem->logical_address); - do_pixmap_pitch(config->dst_image.color_format,config->dst_image.width,&dst_pixmap_pitch); - do_pixmap_pitch(config->src_image.color_format,config->src_image.width,&src_pixmap_pitch); - - /*For the nodes whose source width is equal to 128*/ - - if(config->src_window.width!=config->dst_window.width) - { - chroma_rsf=compute_the_horizontal_scale_factor(&config->src_window,&config->dst_window,&x_out_width); - - if(x_out_width == 0) - { - printf("xoutwidth = %d, \n",x_out_width); - while(1); - } - } - else - { - chroma_rsf=0x0400; - x_out_width =128; - } - - if(config->src_window.height!=config->dst_window.height) - { - luma_rsf=compute_the_vertical_scale_factor(&config->src_window,&config->dst_window); - } - else - { - luma_rsf=0x0400; - } - - for(i=0;iGROUP0.B2R2_NIP = pNode_mem->physical_address+(i+1)*sizeof(b2r2_link_list); - pt_mem->GROUP0.B2R2_CIC = 0x1FFF; - pt_mem->GROUP0.B2R2_INS = (B2R2_SRC2_FETCH_MEM|B2R2BLT_INS2DRESCALE); - pt_mem->GROUP0.B2R2_ACK = B2R2_BYPASS_SRC2_SRC3; - - pt_mem->GROUP1.B2R2_TBA = config->dst_image.physical_address; - pt_mem->GROUP1.B2R2_TTY = (RESVD|(0<dst_image.color_format<GROUP1.B2R2_TXY = (config->dst_window.top<dst_window.left+x_out_offset)); - pt_mem->GROUP1.B2R2_TSZ = (RESVD|x_out_width|(config->dst_window.height<GROUP2.B2R2_S1CF = 0; - pt_mem->GROUP2.B2R2_S2CF = 0; - - /*Source1*/ - pt_mem->GROUP3.B2R2_SBA = 0; - pt_mem->GROUP3.B2R2_STY = 0; - pt_mem->GROUP3.B2R2_SXY = 0; - pt_mem->GROUP3.B2R2_SSZ = 0; - - /*Source2*/ - pt_mem->GROUP4.B2R2_SBA = config->src_image.physical_address; - pt_mem->GROUP4.B2R2_STY = (RESVD|(0<src_image.color_format<GROUP4.B2R2_SXY = (config->src_window.top<src_window.left+x_in_offset)); - pt_mem->GROUP4.B2R2_SSZ = (RESVD|x_in_width|(config->src_window.height<GROUP5.B2R2_SBA = 0; - pt_mem->GROUP5.B2R2_STY = 0; - pt_mem->GROUP5.B2R2_SXY = 0; - pt_mem->GROUP5.B2R2_SSZ = 0; - - /*Clip*/ - pt_mem->GROUP6.B2R2_CWO = 0; - pt_mem->GROUP6.B2R2_CWS = 0; - - /*Clut*/ - pt_mem->GROUP7.B2R2_CCO = 0; - pt_mem->GROUP7.B2R2_CML = 0; - - pt_mem->GROUP8.B2R2_FCTL=0x22000044; - pt_mem->GROUP8.B2R2_PMK =0; - - pt_mem->GROUP9.B2R2_RSF=((luma_rsf<<16)|chroma_rsf);//0x08000800; - pt_mem->GROUP9.B2R2_RZI=0x30003000; - pt_mem->GROUP9.B2R2_HFP=0; - pt_mem->GROUP9.B2R2_VFP=0; - - pt_mem->GROUP10.B2R2_RSF=((luma_rsf<<16)|chroma_rsf);//0x08000800; - pt_mem->GROUP10.B2R2_RZI=0x30003000; - pt_mem->GROUP10.B2R2_HFP=0; - pt_mem->GROUP10.B2R2_VFP=0; - - pt_mem->GROUP12.B2R2_KEY1=0; - pt_mem->GROUP12.B2R2_KEY2=0; - - x_in_offset+=128; - x_out_offset+=x_out_width; - - - if((i==no_of_nodes_multiple_of_128-1)&&(is_src_width_multiple_of_128)) - { - pt_mem->GROUP0.B2R2_NIP= 0; - pt_mem->GROUP0.B2R2_INS |=B2R2BLT_INSBlitCompIRQ ; - } - else - { - pt_mem++; - } - } - - /*For the node whose source width less than 128*/ - if(is_src_width_multiple_of_128==0) - { - pt_mem->GROUP0.B2R2_NIP= 0; - - pt_mem->GROUP0.B2R2_CIC = 0x1FFF; - pt_mem->GROUP0.B2R2_INS = (B2R2_SRC2_FETCH_MEM|B2R2BLT_INS2DRESCALE|B2R2BLT_INSBlitCompIRQ); - pt_mem->GROUP0.B2R2_ACK = B2R2_BYPASS_SRC2_SRC3; - - pt_mem->GROUP1.B2R2_TBA = config->dst_image.physical_address; - pt_mem->GROUP1.B2R2_TTY = (RESVD|(0<dst_image.color_format<GROUP1.B2R2_TXY = (config->dst_window.top<dst_window.left+x_out_offset)); - pt_mem->GROUP1.B2R2_TSZ = (RESVD|(config->dst_window.width-x_out_offset)|(config->dst_window.height<GROUP2.B2R2_S1CF = 0; - pt_mem->GROUP2.B2R2_S2CF = 0; - - /*Source1*/ - pt_mem->GROUP3.B2R2_SBA = 0; - pt_mem->GROUP3.B2R2_STY = 0; - pt_mem->GROUP3.B2R2_SXY = 0; - pt_mem->GROUP3.B2R2_SSZ = 0; - - /*Source2*/ - pt_mem->GROUP4.B2R2_SBA = config->src_image.physical_address; - pt_mem->GROUP4.B2R2_STY = (RESVD|(0<src_image.color_format<GROUP4.B2R2_SXY = (config->src_window.top<src_window.left+x_in_offset));; - pt_mem->GROUP4.B2R2_SSZ = (RESVD|(config->src_window.width-x_in_offset)|(config->src_window.height<GROUP5.B2R2_SBA = 0; - pt_mem->GROUP5.B2R2_STY = 0; - pt_mem->GROUP5.B2R2_SXY = 0; - pt_mem->GROUP5.B2R2_SSZ = 0; - - /*Clip*/ - pt_mem->GROUP6.B2R2_CWO = 0; - pt_mem->GROUP6.B2R2_CWS = 0; - - /*Clut*/ - pt_mem->GROUP7.B2R2_CCO = 0; - pt_mem->GROUP7.B2R2_CML = 0; - - pt_mem->GROUP8.B2R2_FCTL=0x22000044; - pt_mem->GROUP8.B2R2_PMK =0; - - pt_mem->GROUP9.B2R2_RSF=((luma_rsf<<16)|chroma_rsf); - pt_mem->GROUP9.B2R2_RZI=0x30003000; - pt_mem->GROUP9.B2R2_HFP=0; - pt_mem->GROUP9.B2R2_VFP=0; - - pt_mem->GROUP10.B2R2_RSF=((luma_rsf<<16)|chroma_rsf); - pt_mem->GROUP10.B2R2_RZI=0x30003000; - pt_mem->GROUP10.B2R2_HFP=0; - pt_mem->GROUP10.B2R2_VFP=0; - - pt_mem->GROUP12.B2R2_KEY1=0; - pt_mem->GROUP12.B2R2_KEY2=0; - - } - -} - - - -void configure_rotate(unsigned char no_of_nodes,unsigned char is_src_width_multiple_of_16,\ - b2r2_buffer_memory *pNode_mem,b2r2_configuration *config) -{ - b2r2_link_list *pt_mem; - int i=0; - unsigned short dst_pixmap_pitch,src_pixmap_pitch; - B2R2_RECT src_rsz_inc_rect,dst_rsz_inc_vect; - int x_in_offset=0,x_out_offset=0; - int x_in_width=16,x_out_width=16; - unsigned char no_of_nodes_multiple_of_16=0; - unsigned int chroma_rsf=0,luma_rsf=0; - - no_of_nodes_multiple_of_16=(is_src_width_multiple_of_16)? \ - no_of_nodes:no_of_nodes-1; - - if(config->rotation == B2R2_ROT_180) - { - no_of_nodes_multiple_of_16=1; - is_src_width_multiple_of_16=1; - - if(config->src_window.width<16) - is_src_width_multiple_of_16=0; - } - - - - pt_mem= (b2r2_link_list*)(pNode_mem->logical_address); - - do_pixmap_pitch(config->dst_image.color_format,config->dst_image.width,&dst_pixmap_pitch); - do_pixmap_pitch(config->src_image.color_format,config->src_image.width,&src_pixmap_pitch); - - for(i=0;iGROUP0.B2R2_NIP = pNode_mem->physical_address+(i+1)*sizeof(b2r2_link_list); - pt_mem->GROUP0.B2R2_CIC = 0x1FFF; - pt_mem->GROUP0.B2R2_INS = (B2R2_SRC2_FETCH_MEM); - pt_mem->GROUP0.B2R2_ACK = B2R2_BYPASS_SRC2_SRC3; - - pt_mem->GROUP1.B2R2_TBA = config->dst_image.physical_address; - pt_mem->GROUP1.B2R2_TTY = (RESVD|(0<dst_image.color_format<GROUP2.B2R2_S1CF = 0; - pt_mem->GROUP2.B2R2_S2CF = 0; - - /*Source1*/ - pt_mem->GROUP3.B2R2_SBA = 0; - pt_mem->GROUP3.B2R2_STY = 0; - pt_mem->GROUP3.B2R2_SXY = 0; - pt_mem->GROUP3.B2R2_SSZ = 0; - - /*Source2*/ - pt_mem->GROUP4.B2R2_SBA = config->src_image.physical_address; - pt_mem->GROUP4.B2R2_STY = (RESVD|(0<src_image.color_format<GROUP4.B2R2_SXY = (config->src_window.top<src_window.left+x_in_offset)); - pt_mem->GROUP4.B2R2_SSZ = (RESVD|x_in_width|(config->src_window.height<GROUP5.B2R2_SBA = 0; - pt_mem->GROUP5.B2R2_STY = 0; - pt_mem->GROUP5.B2R2_SXY = 0; - pt_mem->GROUP5.B2R2_SSZ = 0; - - /*Clip*/ - pt_mem->GROUP6.B2R2_CWO = 0; - pt_mem->GROUP6.B2R2_CWS = 0; - - /*Clut*/ - pt_mem->GROUP7.B2R2_CCO = 0; - pt_mem->GROUP7.B2R2_CML = 0; - - pt_mem->GROUP8.B2R2_FCTL=0; - pt_mem->GROUP8.B2R2_PMK =0; - - pt_mem->GROUP9.B2R2_RSF=0; - pt_mem->GROUP9.B2R2_RZI=0; - pt_mem->GROUP9.B2R2_HFP=0; - pt_mem->GROUP9.B2R2_VFP=0; - - pt_mem->GROUP10.B2R2_RSF=0; - pt_mem->GROUP10.B2R2_RZI=0; - pt_mem->GROUP10.B2R2_HFP=0; - pt_mem->GROUP10.B2R2_VFP=0; - - pt_mem->GROUP12.B2R2_KEY1=0; - pt_mem->GROUP12.B2R2_KEY2=0; - - - if(config->rotation== B2R2_ROT_90) - { /** Set rotation enabled bit */ - pt_mem->GROUP0.B2R2_INS |= B2R2BLT_INSROTATION; - pt_mem->GROUP1.B2R2_TTY |= (B2R2BLT_TTYHSO); //Set this bit to start line write operation from bottom to top in target area - pt_mem->GROUP1.B2R2_TSZ = (RESVD|(x_out_width<src_window.height); - pt_mem->GROUP1.B2R2_TXY = ((((config->dst_window.top)+x_out_width*i)<dst_window.left+config->dst_window.width-1)); - - } - - if(config->rotation == B2R2_ROT_180) - { - pt_mem->GROUP1.B2R2_TTY |= (B2R2BLT_TTYVSO|B2R2BLT_TTYHSO); - pt_mem->GROUP1.B2R2_TXY = (((config->dst_window.top+config->dst_window.height-1)<dst_window.left+config->dst_window.width-1)); - pt_mem->GROUP1.B2R2_TSZ = (RESVD|config->dst_window.width|(config->dst_window.height<GROUP4.B2R2_SSZ = (RESVD|config->src_window.width|(config->src_window.height<rotation == B2R2_ROT_270) - { - pt_mem->GROUP0.B2R2_INS |= B2R2BLT_INSROTATION; - pt_mem->GROUP1.B2R2_TTY |= (B2R2BLT_TTYVSO); //Set this bit to start pixel write operation from right to left in target area - pt_mem->GROUP1.B2R2_TSZ = (RESVD|(x_out_width<src_window.height); - pt_mem->GROUP1.B2R2_TXY = ((config->dst_window.top)+(config->dst_window.height-1)-(x_out_width*i))<dst_window.left; - - } - - x_in_offset+=16; - x_out_offset+=16; - - - if((i==no_of_nodes_multiple_of_16-1)&&(is_src_width_multiple_of_16)) - { - pt_mem->GROUP0.B2R2_NIP= 0; - pt_mem->GROUP0.B2R2_INS |=B2R2BLT_INSBlitCompIRQ ; - } - else - { - pt_mem++; - } - } - - - /*For the node whose source width less than 128*/ - if(is_src_width_multiple_of_16==0) - { - - x_in_width=config->src_window.width-no_of_nodes_multiple_of_16*16; - x_out_width=x_in_width; - - pt_mem->GROUP0.B2R2_NIP= 0; - - pt_mem->GROUP0.B2R2_CIC = 0x1FFF; - pt_mem->GROUP0.B2R2_INS = (B2R2_SRC2_FETCH_MEM); - pt_mem->GROUP0.B2R2_ACK = B2R2_BYPASS_SRC2_SRC3; - - pt_mem->GROUP1.B2R2_TBA = config->dst_image.physical_address; - pt_mem->GROUP1.B2R2_TTY = (RESVD|(0<dst_image.color_format<GROUP2.B2R2_S1CF = 0; - pt_mem->GROUP2.B2R2_S2CF = 0; - - /*Source1*/ - pt_mem->GROUP3.B2R2_SBA = 0; - pt_mem->GROUP3.B2R2_STY = 0; - pt_mem->GROUP3.B2R2_SXY = 0; - pt_mem->GROUP3.B2R2_SSZ = 0; - - /*Source2*/ - pt_mem->GROUP4.B2R2_SBA = config->src_image.physical_address; - pt_mem->GROUP4.B2R2_STY = (RESVD|(0<src_image.color_format<GROUP4.B2R2_SXY = (config->src_window.top<src_window.left+x_in_offset)); - pt_mem->GROUP4.B2R2_SSZ = (RESVD|x_in_width|(config->src_window.height<GROUP5.B2R2_SBA = 0; - pt_mem->GROUP5.B2R2_STY = 0; - pt_mem->GROUP5.B2R2_SXY = 0; - pt_mem->GROUP5.B2R2_SSZ = 0; - - /*Clip*/ - pt_mem->GROUP6.B2R2_CWO = 0; - pt_mem->GROUP6.B2R2_CWS = 0; - - /*Clut*/ - pt_mem->GROUP7.B2R2_CCO = 0; - pt_mem->GROUP7.B2R2_CML = 0; - - pt_mem->GROUP8.B2R2_FCTL=0; - pt_mem->GROUP8.B2R2_PMK =0; - - pt_mem->GROUP9.B2R2_RSF=0; - pt_mem->GROUP9.B2R2_RZI=0; - pt_mem->GROUP9.B2R2_HFP=0; - pt_mem->GROUP9.B2R2_VFP=0; - - pt_mem->GROUP10.B2R2_RSF=0; - pt_mem->GROUP10.B2R2_RZI=0; - pt_mem->GROUP10.B2R2_HFP=0; - pt_mem->GROUP10.B2R2_VFP=0; - - pt_mem->GROUP12.B2R2_KEY1=0; - pt_mem->GROUP12.B2R2_KEY2=0; - - - if(config->rotation== B2R2_ROT_90) - { /** Set rotation enabled bit */ - pt_mem->GROUP0.B2R2_INS |= B2R2BLT_INSROTATION; - pt_mem->GROUP1.B2R2_TTY |= (B2R2BLT_TTYHSO); //Set this bit to start line write operation from bottom to top in target area - pt_mem->GROUP1.B2R2_TSZ = (RESVD|(x_out_width<src_window.height); - pt_mem->GROUP1.B2R2_TXY = ((((config->dst_window.top)+x_out_width*i)<dst_window.left+config->dst_window.width-1)); - - } - - if(config->rotation == B2R2_ROT_270) - { - pt_mem->GROUP0.B2R2_INS |= B2R2BLT_INSROTATION; - pt_mem->GROUP1.B2R2_TTY |= (B2R2BLT_TTYVSO); //Set this bit to start pixel write operation from right to left in target area - pt_mem->GROUP1.B2R2_TSZ = (RESVD|(x_out_width<src_window.height); - pt_mem->GROUP1.B2R2_TXY = ((config->dst_window.top)+(config->dst_window.height-1)-(x_out_width*i))<dst_window.left; - - } - - - if(config->rotation == B2R2_ROT_180) - { - pt_mem->GROUP1.B2R2_TTY |= (B2R2BLT_TTYVSO|B2R2BLT_TTYHSO); - pt_mem->GROUP1.B2R2_TXY = (((config->dst_window.top+config->dst_window.height-1)<dst_window.left+config->dst_window.width-1)); - pt_mem->GROUP1.B2R2_TSZ = (RESVD|config->dst_window.width|(config->dst_window.height<GROUP4.B2R2_SSZ = (RESVD|config->src_window.width|(config->src_window.height<logical_address); - do_pixmap_pitch(config->dst_image.color_format,config->dst_image.width,&dst_pixmap_pitch); - do_pixmap_pitch(config->src_image.color_format,config->src_image.width,&src_pixmap_pitch); - - /*For the nodes whose source width is equal to 128*/ - - if(config->src_window.width!=config->dst_window.width) - { - chroma_rsf=compute_the_horizontal_scale_factor(&config->src_window,&config->dst_window,&x_out_width); - - if(x_out_width == 0) - { - printf("xoutwidth = %d, \n",x_out_width); - while(1); - } - } - else - { - chroma_rsf=0x0400; - x_out_width =128; - } - - if(config->src_window.height!=config->dst_window.height) - { - luma_rsf=compute_the_vertical_scale_factor(&config->src_window,&config->dst_window); - } - else - { - luma_rsf=0x0400; - } - for(i=0;iphysical_address); - pt_mem->GROUP0.B2R2_NIP = pNode_mem->physical_address+(i+1)*sizeof(b2r2_link_list); - pt_mem->GROUP0.B2R2_CIC = 0xFFFF; - if (config->src_image.color_format == B2R2_YCBCR42XMBN) - pt_mem->GROUP0.B2R2_INS = (B2R2BLT_INSIVMX|B2R2BLT_INS2DRESCALE|B2R2_SRC2_FETCH_MEM|B2R2_SRC3_FETCH_MEM); - else if (config->src_image.color_format == B2R2_YUV) - pt_mem->GROUP0.B2R2_INS = (B2R2BLT_INSIVMX|B2R2BLT_INS2DRESCALE|B2R2_SRC2_FETCH_MEM|B2R2_SRC3_FETCH_MEM|B2R2_SRC1_FETCH_MEM); - pt_mem->GROUP0.B2R2_ACK = B2R2_BYPASS_SRC2_SRC3; - - pt_mem->GROUP1.B2R2_TBA = config->dst_image.physical_address; - pt_mem->GROUP1.B2R2_TTY = (RESVD|(0<dst_image.color_format<GROUP1.B2R2_TXY = (config->dst_window.top<dst_window.left+x_out_offset)); - pt_mem->GROUP1.B2R2_TSZ = (RESVD|x_out_width|(config->dst_window.height<GROUP2.B2R2_S1CF = 0; - pt_mem->GROUP2.B2R2_S2CF = 0; - if (config->src_image.color_format == B2R2_YCBCR42XMBN) - { - /*Source1*/ - pt_mem->GROUP3.B2R2_SBA = 0; - pt_mem->GROUP3.B2R2_STY = 0; - pt_mem->GROUP3.B2R2_SXY = 0; - pt_mem->GROUP3.B2R2_SSZ = 0; - } - else if (config->src_image.color_format == B2R2_YUV) - { - pt_mem->GROUP3.B2R2_SBA = config->ppp_conf.source_chroma2_address; - pt_mem->GROUP3.B2R2_STY = (RESVD|(0<src_image.color_format<GROUP3.B2R2_SXY = ((config->src_window.top/2)<src_window.left+x_in_offset)/2)); - pt_mem->GROUP3.B2R2_SSZ = (RESVD|(x_in_width/2)|(((config->src_window.height)/2)<GROUP4.B2R2_SBA = config->ppp_conf.source_chroma_address; - if (config->src_image.color_format == B2R2_YCBCR42XMBN) - pt_mem->GROUP4.B2R2_STY = (RESVD|(0<src_image.color_format<src_image.color_format == B2R2_YUV) - pt_mem->GROUP4.B2R2_STY = (RESVD|(0<src_image.color_format<GROUP4.B2R2_SXY = ((config->src_window.top/2)<src_window.left+x_in_offset)/2)); - pt_mem->GROUP4.B2R2_SSZ = (RESVD|(x_in_width/2)|(((config->src_window.height)/2)<GROUP5.B2R2_SBA = config->ppp_conf.source_luma_address; - pt_mem->GROUP5.B2R2_STY = (RESVD|(0<src_image.color_format<GROUP5.B2R2_SXY = (config->src_window.top<src_window.left+x_in_offset)); - pt_mem->GROUP5.B2R2_SSZ = (RESVD|x_in_width|(config->src_window.height<GROUP6.B2R2_CWO = 0; - pt_mem->GROUP6.B2R2_CWS = 0; - - /*Clut*/ - pt_mem->GROUP7.B2R2_CCO = 0; - pt_mem->GROUP7.B2R2_CML = 0; - - pt_mem->GROUP8.B2R2_FCTL=0x22000044; - pt_mem->GROUP8.B2R2_PMK =0; - - pt_mem->GROUP9.B2R2_RSF=(((luma_rsf/2)<<16)|(chroma_rsf/2)); - pt_mem->GROUP9.B2R2_RZI=0x30003000; - pt_mem->GROUP9.B2R2_HFP=0; - pt_mem->GROUP9.B2R2_VFP=0; - - pt_mem->GROUP10.B2R2_RSF=((luma_rsf<<16)|chroma_rsf); - pt_mem->GROUP10.B2R2_RZI=0x30003000; - pt_mem->GROUP10.B2R2_HFP=0; - pt_mem->GROUP10.B2R2_VFP=0; - - pt_mem->GROUP12.B2R2_KEY1=0; - pt_mem->GROUP12.B2R2_KEY2=0; - - pt_mem->GROUP15.B2R2_VMX0 = 0x2C440000;//0x3324a800; - pt_mem->GROUP15.B2R2_VMX1 = 0xE9A403AA;//0xe604ab9c; - pt_mem->GROUP15.B2R2_VMX2 = 0x0004013F;//0x0004a957; - pt_mem->GROUP15.B2R2_VMX3 = 0x34F21322;//0x32121eeb; - - x_in_offset+=128; - x_out_offset+=x_out_width; - if((i==no_of_nodes_multiple_of_128-1)&&(is_src_width_multiple_of_128)) - { - pt_mem->GROUP0.B2R2_NIP= 0; - //pt_mem->GROUP0.B2R2_INS |=B2R2BLT_INSBlitCompIRQ ; - } - else - { - pt_mem++; - } - } - - /*For the node whose source width less than 128*/ - if(is_src_width_multiple_of_128==0) - { - pt_mem->GROUP0.B2R2_NIP= 0; - - pt_mem->GROUP0.B2R2_CIC = 0xFFFF; - if (config->src_image.color_format == B2R2_YCBCR42XMBN) - pt_mem->GROUP0.B2R2_INS = (B2R2BLT_INSIVMX|B2R2BLT_INS2DRESCALE|B2R2_SRC2_FETCH_MEM|B2R2_SRC3_FETCH_MEM); - else if (config->src_image.color_format == B2R2_YUV) - pt_mem->GROUP0.B2R2_INS = (B2R2BLT_INSIVMX|B2R2BLT_INS2DRESCALE|B2R2_SRC2_FETCH_MEM|B2R2_SRC3_FETCH_MEM|B2R2_SRC1_FETCH_MEM); - pt_mem->GROUP0.B2R2_ACK = B2R2_BYPASS_SRC2_SRC3; - - pt_mem->GROUP1.B2R2_TBA = config->dst_image.physical_address; - pt_mem->GROUP1.B2R2_TTY = (RESVD|(0<dst_image.color_format<GROUP1.B2R2_TXY = (config->dst_window.top<dst_window.left+x_out_offset)); - pt_mem->GROUP1.B2R2_TSZ = (RESVD|(config->dst_window.width-x_out_offset)|(config->dst_window.height<GROUP2.B2R2_S1CF = 0; - pt_mem->GROUP2.B2R2_S2CF = 0; - - if (config->src_image.color_format == B2R2_YCBCR42XMBN) - { - /*Source1*/ - pt_mem->GROUP3.B2R2_SBA = 0; - pt_mem->GROUP3.B2R2_STY = 0; - pt_mem->GROUP3.B2R2_SXY = 0; - pt_mem->GROUP3.B2R2_SSZ = 0; - } - else if (config->src_image.color_format == B2R2_YUV) - { - pt_mem->GROUP3.B2R2_SBA = config->ppp_conf.source_chroma2_address; - pt_mem->GROUP3.B2R2_STY = (RESVD|(0<src_image.color_format<GROUP3.B2R2_SXY = ((config->src_window.top/2)<src_window.left+x_in_offset)/2)); - pt_mem->GROUP3.B2R2_SSZ = (RESVD|((config->src_window.width-x_in_offset)/2)|((config->src_window.height/2)<GROUP4.B2R2_SBA = config->ppp_conf.source_chroma_address; - if(config->src_image.color_format == B2R2_YCBCR42XMBN) - pt_mem->GROUP4.B2R2_STY = (RESVD|(0<src_image.color_format<src_image.color_format == B2R2_YUV) - pt_mem->GROUP4.B2R2_STY = (RESVD|(0<src_image.color_format<GROUP4.B2R2_SXY = ((config->src_window.top/2)<src_window.left+x_in_offset)/2)); - pt_mem->GROUP4.B2R2_SSZ = (RESVD|((config->src_window.width-x_in_offset)/2)|((config->src_window.height/2)<GROUP5.B2R2_SBA = config->ppp_conf.source_luma_address; - pt_mem->GROUP5.B2R2_STY = (RESVD|(0<src_image.color_format<GROUP5.B2R2_SXY = (config->src_window.top<src_window.left+x_in_offset)); - pt_mem->GROUP5.B2R2_SSZ = (RESVD|(config->src_window.width-x_in_offset)|(config->src_window.height<GROUP6.B2R2_CWO = 0; - pt_mem->GROUP6.B2R2_CWS = 0; - - /*Clut*/ - pt_mem->GROUP7.B2R2_CCO = 0; - pt_mem->GROUP7.B2R2_CML = 0; - - pt_mem->GROUP8.B2R2_FCTL=0x22000044; - pt_mem->GROUP8.B2R2_PMK =0; - - pt_mem->GROUP9.B2R2_RSF=(((luma_rsf/2)<<16)|(chroma_rsf/2)); - pt_mem->GROUP9.B2R2_RZI=0x30003000; - pt_mem->GROUP9.B2R2_HFP=0; - pt_mem->GROUP9.B2R2_VFP=0; - - pt_mem->GROUP10.B2R2_RSF=((luma_rsf<<16)|chroma_rsf); - pt_mem->GROUP10.B2R2_RZI=0x30003000; - pt_mem->GROUP10.B2R2_HFP=0; - pt_mem->GROUP10.B2R2_VFP=0; - - pt_mem->GROUP12.B2R2_KEY1=0; - pt_mem->GROUP12.B2R2_KEY2=0; - - pt_mem->GROUP15.B2R2_VMX0 = 0x2C440000;//0x3324a800; - pt_mem->GROUP15.B2R2_VMX1 = 0xE9A403AA;//0xe604ab9c; - pt_mem->GROUP15.B2R2_VMX2 = 0x0004013F;//0x0004a957; - pt_mem->GROUP15.B2R2_VMX3 = 0x34F21322;//0x32121eeb; - - } - -} - -static unsigned int compute_the_horizontal_scale_factor(B2R2_RECT *psrc_window, - B2R2_RECT *pdst_window,int *x_out_width) -{ - unsigned scale_fr=0;/*scale factor in 6.10 format*/ - - scale_fr =((psrc_window->width*1024)/pdst_window->width); - scale_fr&=0xFFFF; - *x_out_width=(128*1024)/scale_fr; -#if DEBUG_PRINTF - printf("%s\n",__FUNCTION__); - printf("Horizontal scale_fr = %d, \n",scale_fr); - printf("xoutwidth down= %d, \n",*x_out_width); -#endif - - return scale_fr; -} - -static unsigned int compute_the_vertical_scale_factor(B2R2_RECT *psrc_window,\ - B2R2_RECT *pdst_window) -{ - unsigned scale_fr=0;/*scale factor in 6.10 format*/ - - scale_fr =((psrc_window->height*1024)/pdst_window->height); - scale_fr&=0xFFFF; - - return scale_fr; -} - - -static void configure_node_for_b2r2_op(b2r2_library *library,b2r2_configuration *config) -{ - - b2r2_link_list *pt_mem; - unsigned short pixmap_pitch; - - pt_mem=(b2r2_link_list*)(config->NodeAdress); - - memset((unsigned char*)pt_mem,0,sizeof(b2r2_link_list)); - - pt_mem->GROUP0.B2R2_NIP = NEXT_NODE_NULL; - pt_mem->GROUP0.B2R2_CIC = 0x1FFF; - pt_mem->GROUP0.B2R2_INS = B2R2BLT_INSBlitCompIRQ; - - /*Configure sources and destinations*/ - if(config->dst_image.physical_address == 0) - { - pt_mem->GROUP0.B2R2_ACK =B2R2_BYPASS_SRC1; - pt_mem->GROUP0.B2R2_INS |=B2R2_SRC1_FETCH_MEM; - - do_pixmap_pitch(config->src_image.color_format,config->src_image.width,&pixmap_pitch); - - pt_mem->GROUP1.B2R2_TBA = config->src_image.physical_address; - pt_mem->GROUP1.B2R2_TTY = (RESVD|(config->dst_image.color_format<GROUP1.B2R2_TXY = (config->src_window.top<src_window.left); - pt_mem->GROUP1.B2R2_TSZ = (RESVD|(config->src_window.width)|(config->src_window.height<GROUP3.B2R2_SBA = config->src_image.physical_address; - pt_mem->GROUP3.B2R2_STY = pt_mem->GROUP1.B2R2_TTY; - pt_mem->GROUP3.B2R2_SXY = pt_mem->GROUP1.B2R2_TXY; - pt_mem->GROUP3.B2R2_SSZ = pt_mem->GROUP1.B2R2_TSZ; - - if(config->is_color_fill_en) - { - pt_mem->GROUP0.B2R2_INS=B2R2_SRC1_DIRECT_FILL; - pt_mem->GROUP2.B2R2_S2CF = 0; - pt_mem->GROUP2.B2R2_S1CF = config->color_fill.color; - } - } - else - { - do_pixmap_pitch(config->dst_image.color_format,config->dst_image.width,&pixmap_pitch); - //printf("pixmap pitch is %x \n",pixmap_pitch); - - pt_mem->GROUP1.B2R2_TBA = config->dst_image.physical_address; - pt_mem->GROUP1.B2R2_TTY = (RESVD|(0<dst_image.color_format<GROUP1.B2R2_TXY = (config->dst_window.top<dst_window.left)); - pt_mem->GROUP1.B2R2_TSZ = (RESVD|(config->dst_window.width)|(config->dst_window.height<is_alpha_blend_en) - { - pt_mem->GROUP0.B2R2_ACK |=((config->alpha_blend.val<alpha_blend.swap_fg_bg)|(config->alpha_blend.premuliplier));; - pt_mem->GROUP0.B2R2_INS |=(B2R2_SRC2_FETCH_MEM|B2R2_SRC1_FETCH_MEM); - - pt_mem->GROUP1.B2R2_TTY |=config->alpha_blend.range<GROUP3.B2R2_SBA = pt_mem->GROUP1.B2R2_TBA; - pt_mem->GROUP3.B2R2_STY = pt_mem->GROUP1.B2R2_TTY; - pt_mem->GROUP3.B2R2_SXY = pt_mem->GROUP1.B2R2_TXY; - pt_mem->GROUP3.B2R2_SSZ = pt_mem->GROUP1.B2R2_TSZ; - } - else if(config->is_rop_ops_en) - { - pt_mem->GROUP0.B2R2_INS |=(B2R2_SRC2_FETCH_MEM|B2R2_SRC1_FETCH_MEM); - pt_mem->GROUP0.B2R2_ACK |=((config->rop.logi_op<GROUP3.B2R2_SBA = pt_mem->GROUP1.B2R2_TBA; - pt_mem->GROUP3.B2R2_STY = pt_mem->GROUP1.B2R2_TTY; - pt_mem->GROUP3.B2R2_SXY = pt_mem->GROUP1.B2R2_TXY; - pt_mem->GROUP3.B2R2_SSZ = pt_mem->GROUP1.B2R2_TSZ; - } - else - { - pt_mem->GROUP0.B2R2_ACK |=B2R2_BYPASS_SRC2_SRC3; - pt_mem->GROUP0.B2R2_INS |=B2R2_SRC2_FETCH_MEM; - - if(config->is_color_fill_en) - { - pt_mem->GROUP0.B2R2_INS |=B2R2_SRC2_COLOR_FILL; - pt_mem->GROUP2.B2R2_S1CF = 0; - pt_mem->GROUP2.B2R2_S2CF = config->color_fill.color; - } - } - - do_pixmap_pitch(config->src_image.color_format,config->src_image.width,&pixmap_pitch); - - pt_mem->GROUP4.B2R2_SBA = config->src_image.physical_address; - pt_mem->GROUP4.B2R2_STY = (RESVD|(0<src_image.color_format<GROUP4.B2R2_SXY = (config->src_window.top<src_window.left)); - pt_mem->GROUP4.B2R2_SSZ = (RESVD|(config->src_window.width)|(config->src_window.height<is_rect_clip_en) - { - pt_mem->GROUP0.B2R2_INS |=B2R2BLT_INSRECT_CLIP; - - - pt_mem->GROUP6.B2R2_CWO =((config->rect_clip.rect.top<rect_clip.rect.left); - pt_mem->GROUP6.B2R2_CWS =(((config->rect_clip.rect.top+config->rect_clip.rect.height)<rect_clip.rect.left+config->rect_clip.rect.width)); - - if(config->rect_clip.clip_mode==B2R2_INSIDE_CLIP) - { - pt_mem->GROUP6.B2R2_CWO &=0x7FFFFFFF; - } - else - { - pt_mem->GROUP6.B2R2_CWO |=(0x80000000); - } - } - - if(config->is_color_key_en) - { - pt_mem->GROUP0.B2R2_INS |= B2R2BLT_INSCKEY; - pt_mem->GROUP0.B2R2_ACK |= (RESVD|(config->color_key.sel<color_key.config.color.val & 0x3F)<GROUP12.B2R2_KEY1 = - ((((config->color_key.color&0xFF000000)>>24)<color_key.color&0xF800)>>11)<<3)<color_key.color&0x07E0)>>5)<<2)<color_key.color&0x1F)<<3)); - - pt_mem->GROUP12.B2R2_KEY2 = - ((((config->color_key.color&0xFF000000)>>24)<color_key.color&0xF800)>>11)<<3)|0x7)<color_key.color&0x07E0)>>5)<<2)|0x3)<color_key.color&0x1F)<<3)|0x7)); - } - return; - -} - -void debug_print_node_data(unsigned int node_addr,unsigned int sizeinwords) -{ - volatile unsigned int *pdata,i,temp; - pdata =(unsigned int*)node_addr ; - - for(i=0;ino_of_nodes*sizeof(b2r2_link_list); - -#if DEBUG_PRINTF - printf("%s\n",__FUNCTION__); -#endif - - /** Assign the size of memory */ - driver_memory.size_of_memory=size; - driver_memory.physical_address=config->NodePhysicalAdress; - - /** Get the physical address of that memory */ - ioctl(library->file_pointer,B2R2_DEALLOCATE_MEMORY,&driver_memory); - - munmap(config->NodeAdress,size); - - return 0; -} - - - - - - - - - - -- cgit v1.2.3