static void _g2d_drv_set_layer_info(g2d_layer_t *g2d_layer, int id)
{
    unsigned int layer_width  = g2d_layer->width;
    unsigned int layer_height = g2d_layer->height;
    unsigned int layer_pitch  = _g2d_get_pitch_byte(g2d_layer->pitch, g2d_layer->format);

    CLR_G2D_LAYER_CON(id);
    SET_G2D_LAYER_CON_COLOR_FORMAT(id, g2d_layer->format);
    SET_G2D_LAYER_CON_ROTATE(id, g2d_layer->transform);
    SET_G2D_LAYER_OFFSET(id, g2d_layer->offset.x, g2d_layer->offset.y);

    if (!g2d_layer->rectangle)
    {
        SET_G2D_LAYER_ADDR(id, g2d_layer->addr);
        ASSERT(((unsigned) layer_pitch) <= 0x2000);
        SET_G2D_LAYER_PITCH(id, layer_pitch);
    }
    else
    {
        ENABLE_G2D_LAYER_CON_RECT_FILL(id);
        SET_G2D_LAYER_RECTANGLE_FILL_COLOR(id, g2d_layer->rect_color);
    }

    SET_G2D_LAYER_SIZE(id, layer_width, layer_height);

    if (g2d_layer->blending)
    {
        ENABLE_G2D_LAYER_CON_ALPHA(id);
        SET_G2D_LAYER_CON_ALPHA(id, g2d_layer->const_alpha);
    }
    else
    {
        DISABLE_G2D_LAYER_CON_ALPHA(id);
    }

    ENABLE_G2D_ROI_LAYER(id);
}
G2D_STATUS_ENUM g2d_drv_rectfill_start(G2D_HANDLE_STRUCT *handle)
{
   {
      kal_bool status;

      status = _g2d_drv_rectfill_check_window_range(handle);
      if(KAL_FALSE == status)
         return G2D_STATUS_RANGE_CHECK_FAIL;

      status = _g2d_drv_rectfill_set_window_intersection(handle);
      if(KAL_FALSE == status)
         return G2D_STATUS_RANGE_CHECK_FAIL;
   }

   HARD_RESET_G2D_ENGINE;
   REG_G2D_MODE_CTRL = 0;
   REG_G2D_ROI_CON = 0;
   REG_G2D_DI_CON = 0x0;
   CLR_G2D_LAYER_CON(0);
   CLR_G2D_LAYER_CON(1);
   ENABLE_G2D_LAYER_CON_RECT_FILL(1);

   /// setting the hw hisr callback function
   g2d_drv_set_hw_hisr_callback(&g2d_irq_handler);

   /// setting the avoidance and replacement colors
   g2d_drv_set_replacement_colors(handle);

   /// setting the clipping window
   g2d_drv_set_clipping_window(handle);

   /// setting the bitblt destination infomation
   _g2d_drv_rectfill_set_info(handle);
   
   g2d_drv_set_dithering(handle);
   
   /// disable bg
   REG_G2D_ROI_CON |= G2D_ROI_CON_DISABLE_BG_BIT;

   /// burst mode
   g2d_drv_set_burst_type(handle);

   /// slow down
   g2d_drv_set_slow_down(handle);

   if (KAL_TRUE == handle->callbackEnable)
   {
      REG_G2D_IRQ |= G2D_IRQ_ENABLE_BIT;
   }
   else
   {
      REG_G2D_IRQ &= ~G2D_IRQ_ENABLE_BIT;
   }

   REG_G2D_MODE_CTRL |= G2D_MODE_CON_ENG_MODE_G2D_BITBLT_BIT;
   /// trigger the rectangle fill
   REG_G2D_START = G2D_START_BIT;

   #if defined(G2D_HW_C_MODEL_SUPPORT)
      g2d_drv_c_model_start(handle);
   #endif

   return G2D_STATUS_OK;
}
static void _g2d_drv_overlay_set_layer_info(G2D_HANDLE_STRUCT *handle)
{
   G2D_OVERLAY_STRUCT *overlayFunc = &(handle->overlayFunc);
   kal_int32 layer;

   for (layer = 0; layer < G2D_HW_OVERLAY_TOTAL_LAYER; layer++)
   {
      G2D_OVERLAY_LAYER_STRUCT *layerInfo = &(overlayFunc->layerInfo[layer]);
      G2D_WINDOW_STRUCT *layerWindow = &(layerInfo->layerWindow);
      G2D_CANVAS_INFO_STRUCT *layerCanvas = &(layerInfo->layerCanvas);

      if(KAL_TRUE == (layerInfo->layerEnable))
      {

         kal_uint32 layerWidth  = layerWindow->buttomRight.x - layerWindow->topLeft.x + 1;
         kal_uint32 layerHeight = layerWindow->buttomRight.y - layerWindow->topLeft.y + 1;
         kal_uint32 layerPitch = 0;

         CLR_G2D_LAYER_CON(layer);
         switch(layerInfo->function)
         {
            case G2D_OVERLAY_LAYER_FUNCTION_BUFFER:
            {
               layerPitch = (layerCanvas->width) * (layerCanvas->bytesPerPixel);

               if(KAL_TRUE == (layerInfo->srcKeyEnable))
               {
                  ENABLE_G2D_LAYER_CON_SRC_KEY(layer);
                  SET_G2D_LAYER_SRC_KEY(layer, layerInfo->srcKeyValue);
               }
               if(KAL_TRUE == (layerInfo->layerAlphaEnable))
               {
                  ENABLE_G2D_LAYER_CON_ALPHA(layer);
                  SET_G2D_LAYER_CON_ALPHA(layer, layerInfo->layerAlphaValue);
               }
               {
                  switch(layerCanvas->colorFormat)
                  {
                     case G2D_COLOR_FORMAT_GRAY:
                        SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_GRAY);
                     break;
                     case G2D_COLOR_FORMAT_RGB565:
                        SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_RGB565);
                     break;
                     case G2D_COLOR_FORMAT_ARGB8888:
                        SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_ARGB8888);
                     break;
                     case G2D_COLOR_FORMAT_RGB888:
                        SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_RGB888);
                     break;
                     case G2D_COLOR_FORMAT_BGR888:
                        SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_BGR888);
                     break;
                     case G2D_COLOR_FORMAT_PARGB8888:
                        SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_PARGB8888);
                     break;
                     case G2D_COLOR_FORMAT_UYVY422:
                        SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_UYVY);
                     break;
                     case G2D_COLOR_FORMAT_ARGB8565:
                        SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_ARGB8565);
                     break;
                     case G2D_COLOR_FORMAT_PARGB8565:
                        SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_PARGB8565);
                     break;
                     case G2D_COLOR_FORMAT_ARGB6666:
                        SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_ARGB6666);
                     break;
                     case G2D_COLOR_FORMAT_PARGB6666:
                        SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_PARGB6666);
                     break;
                     default:
                        ASSERT(0);
                     break;
                  }
               }
            }
            break;
            case G2D_OVERLAY_LAYER_FUNCTION_RECT:
            {
               layerPitch = (layerCanvas->width) * (layerCanvas->bytesPerPixel);

               ENABLE_G2D_LAYER_CON_RECT_FILL(layer);
               if(KAL_TRUE == (layerInfo->srcKeyEnable))
               {
                  ASSERT(0);
               }
               if(KAL_TRUE == (layerInfo->layerAlphaEnable))
               {
                  ENABLE_G2D_LAYER_CON_ALPHA(layer);
                  SET_G2D_LAYER_CON_ALPHA(layer, layerInfo->layerAlphaValue);
               }
               {
                  switch(layerCanvas->colorFormat)
                  {
                     case G2D_COLOR_FORMAT_GRAY:
                        SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_GRAY);
                     break;
                     case G2D_COLOR_FORMAT_RGB565:
                        SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_RGB565);
                     break;
                     case G2D_COLOR_FORMAT_ARGB8888:
                        SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_ARGB8888);
                     break;
                     case G2D_COLOR_FORMAT_RGB888:
                        SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_RGB888);
                     break;
                     case G2D_COLOR_FORMAT_BGR888:
                        SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_BGR888);
                     break;
                     case G2D_COLOR_FORMAT_PARGB8888:
                        SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_PARGB8888);
                     break;
                     case G2D_COLOR_FORMAT_UYVY422:
                        SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_UYVY);
                     break;
                     case G2D_COLOR_FORMAT_ARGB8565:
                        SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_ARGB8565);
                     break;
                     case G2D_COLOR_FORMAT_PARGB8565:
                        SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_PARGB8565);
                     break;
                     case G2D_COLOR_FORMAT_ARGB6666:
                        SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_ARGB6666);
                     break;
                     case G2D_COLOR_FORMAT_PARGB6666:
                        SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_PARGB6666);
                     break;
                     default:
                        ASSERT(0);
                     break;
                  }
               }
               /// Set color;
               SET_G2D_LAYER_RECTANGLE_FILL_COLOR(layer, (kal_uint32)layerInfo->rectFillColor);
            }
            break;
            case G2D_OVERLAY_LAYER_FUNCTION_NORMAL_FONT:
            {
               layerPitch = layerCanvas->width;

               ENABLE_G2D_LAYER_CON_FONT(layer);
               if((KAL_TRUE == (layerInfo->srcKeyEnable)) || (KAL_TRUE == (layerInfo->layerAlphaEnable)))
               {
                  ASSERT(0);
               }
               ASSERT(G2D_CW_ROTATE_ANGLE_000 == (layerInfo->rotation));

               SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_ARGB8888);
               layerCanvas->colorFormat = G2D_COLOR_FORMAT_ARGB8888;
               SET_G2D_LAYER_FONT_FOREGROUND_COLOR(layer, layerInfo->foregroundColor);
            }
            break;
            case G2D_OVERLAY_LAYER_FUNCTION_AA_FONT:
            {
               layerPitch = layerCanvas->width;

               ENABLE_G2D_LAYER_CON_FONT(layer);
               SET_G2D_LAYER_CON_AA_FONT_BIT(layer, (layerInfo->fontBit) << 28);

               if((KAL_TRUE == (layerInfo->srcKeyEnable)) || (KAL_FALSE == (layerInfo->layerAlphaEnable)))
               {
                  ASSERT(0);
               }
               ENABLE_G2D_LAYER_CON_ALPHA(layer);
               SET_G2D_LAYER_CON_ALPHA(layer, 0xFF);

               ASSERT(G2D_CW_ROTATE_ANGLE_000 == (layerInfo->rotation));
               layerCanvas->colorFormat = G2D_COLOR_FORMAT_ARGB8888;
               SET_G2D_LAYER_CON_COLOR_FORMAT(layer, G2D_LX_CON_COLOR_ARGB8888);
               SET_G2D_LAYER_FONT_FOREGROUND_COLOR(layer, layerInfo->foregroundColor);
            }
            break;
            default:
              ASSERT(0);
         }
         /// rotation
         {
            switch(layerInfo->rotation)
            {
               case G2D_CW_ROTATE_ANGLE_000:
               {
                  SET_G2D_LAYER_CON_ROTATE(layer, G2D_LX_CON_CCW_ROTATE_000);
                  SET_G2D_LAYER_OFFSET(layer, layerWindow->topLeft.x, layerWindow->topLeft.y);
               }
               break;
               case G2D_CW_ROTATE_ANGLE_090:
               {
                  SET_G2D_LAYER_CON_ROTATE(layer, G2D_LX_CON_CCW_ROTATE_090);
                  SET_G2D_LAYER_OFFSET(layer, layerWindow->topLeft.x, layerWindow->topLeft.y + layerWidth - 1);
               }
               break;
               case G2D_CW_ROTATE_ANGLE_180:
               {
                  SET_G2D_LAYER_CON_ROTATE(layer, G2D_LX_CON_CCW_ROTATE_180);
                  SET_G2D_LAYER_OFFSET(layer, layerWindow->topLeft.x + layerWidth - 1, layerWindow->topLeft.y + layerHeight - 1);
               }
               break;
               case G2D_CW_ROTATE_ANGLE_270:
               {
                  SET_G2D_LAYER_CON_ROTATE(layer, G2D_LX_CON_CCW_ROTATE_270);
                  SET_G2D_LAYER_OFFSET(layer, layerWindow->topLeft.x + layerHeight - 1, layerWindow->topLeft.y);

               }
               break;
               case G2D_CW_ROTATE_ANGLE_MIRROR_000:
               {
                  SET_G2D_LAYER_CON_ROTATE(layer, G2D_LX_CON_CCW_ROTATE_MIRROR_000);
                  SET_G2D_LAYER_OFFSET(layer, layerWindow->topLeft.x + layerWidth - 1, layerWindow->topLeft.y);
               }
               break;
               case G2D_CW_ROTATE_ANGLE_MIRROR_090:
               {
                  SET_G2D_LAYER_CON_ROTATE(layer, G2D_LX_CON_CCW_ROTATE_MIRROR_090);
                  SET_G2D_LAYER_OFFSET(layer, layerWindow->topLeft.x, layerWindow->topLeft.y);
               }
               break;
               case G2D_CW_ROTATE_ANGLE_MIRROR_180:
               {
                  SET_G2D_LAYER_CON_ROTATE(layer, G2D_LX_CON_CCW_ROTATE_MIRROR_180);
                  SET_G2D_LAYER_OFFSET(layer, layerWindow->topLeft.x, layerWindow->topLeft.y + layerHeight - 1);
               }
               break;
               case G2D_CW_ROTATE_ANGLE_MIRROR_270:
               {
                  SET_G2D_LAYER_CON_ROTATE(layer, G2D_LX_CON_CCW_ROTATE_MIRROR_270);
                  SET_G2D_LAYER_OFFSET(layer, layerWindow->topLeft.x + layerHeight - 1, layerWindow->topLeft.y + layerWidth - 1);
               }
               break;
               default:
                  ASSERT(0);
               break;
            }
         }

         switch(layerCanvas->colorFormat)
         {
            case G2D_COLOR_FORMAT_GRAY:
            case G2D_COLOR_FORMAT_RGB565:
            case G2D_COLOR_FORMAT_ARGB8888:
            case G2D_COLOR_FORMAT_RGB888:
            case G2D_COLOR_FORMAT_BGR888:
            case G2D_COLOR_FORMAT_PARGB8888:
            case G2D_COLOR_FORMAT_ARGB8565:
            case G2D_COLOR_FORMAT_PARGB8565:
            case G2D_COLOR_FORMAT_ARGB6666:
            case G2D_COLOR_FORMAT_PARGB6666:
               SET_G2D_LAYER_ADDR(layer, (kal_uint32)(layerCanvas->RGBBufferAddr));
            break;
            case G2D_COLOR_FORMAT_UYVY422:
               SET_G2D_LAYER_ADDR(layer, (kal_uint32)(layerCanvas->YUVBufferAddr[0]));
            break;
            default:
               ASSERT(0);
            break;
         }

         ASSERT(((unsigned)layerPitch) <= 0x2000);
         SET_G2D_LAYER_PITCH(layer, layerPitch);

         /// This is set in rotation
         /// SET_G2D_LAYER_OFFSET(layer, layerWindow->topLeft.x, layerWindow->topLeft.y);
         SET_G2D_LAYER_SIZE(layer, layerWidth, layerHeight);
         ENABLE_G2D_ROI_LAYER(layer);
      }
   }
}