static void _g2d_drv_overlay_set_dst_info(G2D_HANDLE_STRUCT *handle)
{
   G2D_CANVAS_INFO_STRUCT *dstCanvas  = &(handle->dstCanvas);
   G2D_COORDINATE_STRUCT *dstCoordiante = &(handle->overlayFunc.dstCoordiante);
   kal_uint32 pitch;

   /// destination base addr
   ASSERT(dstCanvas->RGBBufferAddr);
   SET_G2D_W2M_ADDR((kal_int32)dstCanvas->RGBBufferAddr);

   /// destination pitch
   pitch = (dstCanvas->width) * (dstCanvas->bytesPerPixel);
   ASSERT(((unsigned)pitch) <= 0x2000);
   SET_G2D_W2M_PITCH(pitch);

   /// -2048 <= x <= 2047
   ASSERT(((unsigned)((dstCoordiante->x) + 2048)) < 4096);
   ASSERT(((unsigned)((dstCoordiante->y) + 2048)) < 4096);
   /// destination rectangle start point(x,y)
   SET_G2D_W2M_OFFSET(dstCoordiante->x, dstCoordiante->y);

   /// setting destination color format bits
   switch(dstCanvas->colorFormat)
   {
      case G2D_COLOR_FORMAT_GRAY:
         SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_GRAY);
      break;
      case G2D_COLOR_FORMAT_RGB565:
         SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_RGB565);
      break;
      case G2D_COLOR_FORMAT_ARGB8888:
         SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_ARGB8888);
      break;
      case G2D_COLOR_FORMAT_RGB888:
         SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_RGB888);
      break;
      case G2D_COLOR_FORMAT_BGR888:
         SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_BGR888);
      break;
      case G2D_COLOR_FORMAT_PARGB8888:
         SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_PARGB8888);
      break;
      case G2D_COLOR_FORMAT_ARGB8565:
         SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_ARGB8565);
      break;
      case G2D_COLOR_FORMAT_PARGB8565:
         SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_PARGB8565);
      break;
      case G2D_COLOR_FORMAT_ARGB6666:
         SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_ARGB6666);
      break;
      case G2D_COLOR_FORMAT_PARGB6666:
         SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_PARGB6666);
      break;
      default:
         ASSERT(0);
      break;
   }
}
static void _g2d_drv_set_dst_info(g2d_context_t *g2d_ctx)
{
   unsigned int pitch;

   // 2 byte aligned for RGB565, 4 byte aligned for ARGB8888
   SET_G2D_W2M_ADDR(g2d_ctx->dst.addr);

   // destination pitch
   pitch = _g2d_get_pitch_byte(g2d_ctx->dst.pitch, g2d_ctx->dst.format);
   ASSERT(((unsigned) pitch) <= 0x2000);
   SET_G2D_W2M_PITCH(pitch);

   // destination rectangle start point(x,y)
   ASSERT(((unsigned)((g2d_ctx->dst.offset.x) + 2048)) < 4096);
   ASSERT(((unsigned)((g2d_ctx->dst.offset.y) + 2048)) < 4096);
   SET_G2D_W2M_OFFSET(g2d_ctx->dst.offset.x, g2d_ctx->dst.offset.y);

   // setting destination color format bits
   SET_G2D_W2M_COLOR_FORMAT(g2d_ctx->dst.format);
}
static void _g2d_drv_rectfill_set_info(G2D_HANDLE_STRUCT *handle)
{
   G2D_RECTANGLE_FILL_STRUCT *rectFillFunc = &(handle->rectFillFunc);
   G2D_CANVAS_INFO_STRUCT *srcCanvas = &(rectFillFunc->srcCanvas);

   G2D_CANVAS_INFO_STRUCT *dstCanvas  = &(handle->dstCanvas);
   #if defined(G2D_FPGA)
      G2D_WINDOW_STRUCT *dstWindow  = &(handle->rectFillFunc.dstWindow);
   #else
      G2D_WINDOW_STRUCT  *dstWindow = &(handle->targetClipWindow);
   #endif
   G2D_COORDINATE_STRUCT *topLeft     = &(dstWindow->topLeft);
   G2D_COORDINATE_STRUCT *buttomRight = &(dstWindow->buttomRight);
   kal_uint32 width, height, pitch, srcpitch;

   /// destination base addr
   ASSERT(dstCanvas->RGBBufferAddr);
   //SET_G2D_LAYER_ADDR(0, (kal_uint32)(dstCanvas->RGBBufferAddr));
   REG_G2D_W2M_ADDR = (kal_int32)dstCanvas->RGBBufferAddr;

   /// destination pitch
   pitch = (dstCanvas->width) * (dstCanvas->bytesPerPixel);
   ASSERT(((unsigned)pitch) <= 0x2000);
   //SET_G2D_LAYER_PITCH(0, pitch);
   SET_G2D_LAYER_PITCH(1, pitch);
   REG_G2D_W2M_PITCH = pitch;

   /// -2048 <= x <= 2047
   ASSERT(((unsigned)((topLeft->x) + 2048)) < 4096);
   ASSERT(((unsigned)((topLeft->y) + 2048)) < 4096);
   /// destination rectangle start point(x,y)
   SET_G2D_W2M_OFFSET(topLeft->x, topLeft->y);
   SET_G2D_ROI_OFFSET(topLeft->x, topLeft->y);
   //SET_G2D_LAYER_OFFSET(0, 0, 0);
   SET_G2D_LAYER_OFFSET(1, topLeft->x, topLeft->y);

   width = buttomRight->x - topLeft->x + 1;
   height = buttomRight->y - topLeft->y + 1;

   /// 1 <= x <= 2048
   ASSERT(((unsigned)(width - 1)) <= 2048);
   ASSERT(((unsigned)(height - 1)) <= 2048);
   /// destination rectangle width and height
   REG_G2D_ROI_SIZE = (width << 16) | height;
   //SET_G2D_LAYER_SIZE(0, dstCanvas->width, dstCanvas->height);
   SET_G2D_LAYER_SIZE(1, width, height);

   if (KAL_TRUE == rectFillFunc->overlayBufferEnable)
   {
      srcpitch = (srcCanvas->width) * (srcCanvas->bytesPerPixel);
      ASSERT(((unsigned)srcpitch) <= 0x2000);
      SET_G2D_LAYER_PITCH(1, srcpitch);
      SET_G2D_LAYER_ADDR(0, (kal_uint32)(srcCanvas->RGBBufferAddr));
      SET_G2D_LAYER_OFFSET(0, 0, 0);
      SET_G2D_LAYER_SIZE(0, srcCanvas->width, srcCanvas->height);
      /// set src_clr_fmt bits
      switch(srcCanvas->colorFormat)
      {
         case G2D_COLOR_FORMAT_GRAY:
            SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_GRAY);
            SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_GRAY);
         break;
         case G2D_COLOR_FORMAT_RGB565:
            SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_RGB565);
            SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_RGB565);
         break;
         case G2D_COLOR_FORMAT_ARGB8888:
            SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_ARGB8888);
            SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_ARGB8888);
         break;
         case G2D_COLOR_FORMAT_RGB888:
            SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_RGB888);
            SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_RGB888);
         break;
         case G2D_COLOR_FORMAT_BGR888:
            SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_BGR888);
            SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_BGR888);
         break;
         case G2D_COLOR_FORMAT_PARGB8888:
            SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_PARGB8888);
            SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_PARGB8888);
         break;
         case G2D_COLOR_FORMAT_UYVY422:
            SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_UYVY);
            SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_UYVY);
         break;
         case G2D_COLOR_FORMAT_ARGB8565:
            SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_ARGB8565);
            SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_ARGB8565);
         break;
         case G2D_COLOR_FORMAT_PARGB8565:
            SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_PARGB8565);
            SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_PARGB8565);
         break;
         case G2D_COLOR_FORMAT_ARGB6666:
            SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_ARGB6666);
            SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_ARGB6666);
         break;
         case G2D_COLOR_FORMAT_PARGB6666:
            SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_PARGB6666);
            SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_PARGB6666);
         break;
         default:
            ASSERT(0);
         break;
      }

   }
   else
   {
     SET_G2D_LAYER_ADDR(0, (kal_uint32)(dstCanvas->RGBBufferAddr));
     SET_G2D_LAYER_PITCH(0, pitch);
     SET_G2D_LAYER_OFFSET(0, 0, 0);
     SET_G2D_LAYER_SIZE(0, dstCanvas->width, dstCanvas->height);

     /// setting destination color format bits
     switch(dstCanvas->colorFormat)
     {
        case G2D_COLOR_FORMAT_RGB565:
           SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_RGB565);
           SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_RGB565);
        break;
        case G2D_COLOR_FORMAT_ARGB6666:
           SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_ARGB6666);
           SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_ARGB6666);
        break;
        case G2D_COLOR_FORMAT_ARGB8888:
           SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_ARGB8888);
           SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_ARGB8888);
        break;
        case G2D_COLOR_FORMAT_RGB888:
           SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_RGB888);
           SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_RGB888);
        break;
        case G2D_COLOR_FORMAT_BGR888:
           SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_BGR888);
           SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_BGR888);
        break;
        case G2D_COLOR_FORMAT_PARGB6666:
           SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_PARGB6666);
           SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_PARGB6666);
        break;
        case G2D_COLOR_FORMAT_PARGB8888:
           SET_G2D_LAYER_CON_COLOR_FORMAT(0, G2D_LX_CON_COLOR_PARGB8888);
           SET_G2D_LAYER_CON_COLOR_FORMAT(1, G2D_LX_CON_COLOR_PARGB8888);
        break;
        default:
           ASSERT(0);
        break;
     }

   }

   /// setting destination color format bits
   switch(dstCanvas->colorFormat)
   {
      case G2D_COLOR_FORMAT_RGB565:
         SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_RGB565);
      break;
      case G2D_COLOR_FORMAT_ARGB6666:
         SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_ARGB6666);
      break;
      case G2D_COLOR_FORMAT_ARGB8888:
         SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_ARGB8888);
      break;
      case G2D_COLOR_FORMAT_RGB888:
         SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_RGB888);
      break;
      case G2D_COLOR_FORMAT_BGR888:
         SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_BGR888);
      break;
      case G2D_COLOR_FORMAT_PARGB6666:
         SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_PARGB6666);
      break;
      case G2D_COLOR_FORMAT_PARGB8888:
         SET_G2D_W2M_COLOR_FORMAT(G2D_ROI_CON_W2M_COLOR_PARGB8888);
      break;
      default:
         ASSERT(0);
      break;
   }

   if(KAL_TRUE == (rectFillFunc->srcAlphaEnable))
   {
      ENABLE_G2D_LAYER_CON_ALPHA(1);
      SET_G2D_LAYER_CON_ALPHA(1, rectFillFunc->srcAlphaValue);
      //ENABLE_G2D_ROI_LAYER(0);
      ENABLE_G2D_ROI_LAYER_0;
   }

   /// Set color;
   SET_G2D_LAYER_RECTANGLE_FILL_COLOR(1, (kal_uint32)rectFillFunc->rectFillColor);
   ENABLE_G2D_ROI_LAYER(1);
}