Exemple #1
0
static DFBResult
fbdevInitPool( CoreDFB                    *core,
               CoreSurfacePool            *pool,
               void                       *pool_data,
               void                       *pool_local,
               void                       *system_data,
               CoreSurfacePoolDescription *ret_desc )
{
     DFBResult           ret;
     FBDevPoolData      *data  = pool_data;
     FBDevPoolLocalData *local = pool_local;

     D_DEBUG_AT( FBDev_Surfaces, "%s()\n", __FUNCTION__ );

     D_ASSERT( core != NULL );
     D_MAGIC_ASSERT( pool, CoreSurfacePool );
     D_ASSERT( data != NULL );
     D_ASSERT( local != NULL );
     D_ASSERT( ret_desc != NULL );

     ret = dfb_surfacemanager_create( core, dfb_fbdev->shared->fix.smem_len, &data->manager );
     if (ret)
          return ret;

     ret_desc->caps     = CSPCAPS_NONE;
     ret_desc->access   = CSAF_CPU_READ | CSAF_CPU_WRITE | CSAF_GPU_READ | CSAF_GPU_WRITE | CSAF_SHARED;
     ret_desc->types    = CSTF_LAYER | CSTF_WINDOW | CSTF_CURSOR | CSTF_FONT | CSTF_SHARED | CSTF_EXTERNAL;
     ret_desc->priority = CSPP_DEFAULT;

     snprintf( ret_desc->name, DFB_SURFACE_POOL_DESC_NAME_LENGTH, "Frame Buffer Memory" );

     local->core = core;

     D_MAGIC_SET( data, FBDevPoolData );
     D_MAGIC_SET( local, FBDevPoolLocalData );


     D_ASSERT( dfb_fbdev != NULL );
     D_ASSERT( dfb_fbdev->shared != NULL );

     dfb_fbdev->shared->manager = data->manager;

     return DFB_OK;
}
static DFBResult
devmemInitPool( CoreDFB                    *core,
               CoreSurfacePool            *pool,
               void                       *pool_data,
               void                       *pool_local,
               void                       *system_data,
               CoreSurfacePoolDescription *ret_desc )
{
     DFBResult            ret;
     DevMemPoolData      *data   = pool_data;
     DevMemPoolLocalData *local  = pool_local;
     DevMemData          *devmem = system_data;

     D_DEBUG_AT( DevMem_Surfaces, "%s()\n", __FUNCTION__ );

     D_ASSERT( core != NULL );
     D_MAGIC_ASSERT( pool, CoreSurfacePool );
     D_ASSERT( data != NULL );
     D_ASSERT( local != NULL );
     D_ASSERT( devmem != NULL );
     D_ASSERT( devmem->shared != NULL );
     D_ASSERT( ret_desc != NULL );

     ret = dfb_surfacemanager_create( core, dfb_config->video_length, &data->manager );
     if (ret)
          return ret;

     ret_desc->caps              = CSPCAPS_PHYSICAL | CSPCAPS_VIRTUAL;
     ret_desc->access[CSAID_CPU] = CSAF_READ | CSAF_WRITE | CSAF_SHARED;
     ret_desc->access[CSAID_GPU] = CSAF_READ | CSAF_WRITE | CSAF_SHARED;
     ret_desc->types             = CSTF_LAYER | CSTF_WINDOW | CSTF_CURSOR | CSTF_FONT | CSTF_SHARED | CSTF_EXTERNAL;
     ret_desc->priority          = CSPP_DEFAULT;
     ret_desc->size              = dfb_config->video_length;

     /* For hardware layers */
     ret_desc->access[CSAID_LAYER0] = CSAF_READ;
     ret_desc->access[CSAID_LAYER1] = CSAF_READ;
     ret_desc->access[CSAID_LAYER2] = CSAF_READ;
     ret_desc->access[CSAID_LAYER3] = CSAF_READ;
     ret_desc->access[CSAID_LAYER4] = CSAF_READ;
     ret_desc->access[CSAID_LAYER5] = CSAF_READ;
     ret_desc->access[CSAID_LAYER6] = CSAF_READ;
     ret_desc->access[CSAID_LAYER7] = CSAF_READ;
     ret_desc->access[CSAID_LAYER8] = CSAF_READ;
     ret_desc->access[CSAID_LAYER9] = CSAF_READ;
     ret_desc->access[CSAID_LAYER10] = CSAF_READ;
     ret_desc->access[CSAID_LAYER11] = CSAF_READ;
     ret_desc->access[CSAID_LAYER12] = CSAF_READ;
     ret_desc->access[CSAID_LAYER13] = CSAF_READ;
     ret_desc->access[CSAID_LAYER14] = CSAF_READ;
     ret_desc->access[CSAID_LAYER15] = CSAF_READ;

     snprintf( ret_desc->name, DFB_SURFACE_POOL_DESC_NAME_LENGTH, "/dev/mem" );

     local->core = core;
     local->mem  = devmem->mem;

     D_MAGIC_SET( data, DevMemPoolData );
     D_MAGIC_SET( local, DevMemPoolLocalData );

     devmem->shared->manager = data->manager;

     return DFB_OK;
}
static DFBResult
stmfbdevInitPool (CoreDFB                    *core,
                  CoreSurfacePool            *pool,
                  void                       *pool_data,
                  void                       *pool_local,
                  void                       *system_data,
                  CoreSurfacePoolDescription *ret_desc)
{
  DFBResult              ret;
  STMfbdevPoolData      * const data  = pool_data;
  STMfbdevPoolLocalData * const local = pool_local;
  STMfbdev              * const stmfbdev = dfb_system_data ();
  unsigned int           video_len;

  D_DEBUG_AT (STMfbdev_Surfaces, "%s()\n", __FUNCTION__);

  D_ASSERT (core != NULL);
  D_MAGIC_ASSERT (pool, CoreSurfacePool);
  D_ASSERT (data != NULL);
  D_ASSERT (local != NULL);
  D_ASSERT (ret_desc != NULL);

  (void) local;

  D_MAGIC_ASSERT (stmfbdev, STMfbdev);
  D_MAGIC_ASSERT (stmfbdev->shared, STMfbdevSharedData);

  D_MAGIC_SET (data, STMfbdevPoolData);

  snprintf (ret_desc->name,
            DFB_SURFACE_POOL_DESC_NAME_LENGTH, "STMfb Memory");

  /* the gfxdriver might have reserved video memory - in which case we have to
     make sure that the reserved memory is not seen/used by the surface
     manager */
  video_len = dfb_gfxcard_memory_length ();
  D_INFO ("BDisp/Surfaces: using %ukB of video memory (%d bytes reserved)!\n",
          video_len / 1024, stmfbdev->shared->fix.smem_len - video_len);
  ret = dfb_surfacemanager_create (core, video_len, &data->manager);

  if (ret)
    return ret;

  data->physical = stmfbdev->shared->fix.smem_start;

  ret_desc->caps              = CSPCAPS_PHYSICAL | CSPCAPS_VIRTUAL;
  ret_desc->access[CSAID_CPU] = CSAF_READ | CSAF_WRITE | CSAF_SHARED;
  ret_desc->access[CSAID_GPU] = CSAF_READ | CSAF_WRITE | CSAF_SHARED;
  ret_desc->types             = (0
                                 | CSTF_LAYER
                                 | CSTF_WINDOW | CSTF_CURSOR | CSTF_FONT
                                 | CSTF_SHARED | CSTF_EXTERNAL
                                );
  ret_desc->priority          = CSPP_DEFAULT;
  ret_desc->size              = video_len;

  /* other accelerators */
  ret_desc->access[CSAID_ACCEL0] = CSAF_READ | CSAF_WRITE;
  ret_desc->access[CSAID_ACCEL1] = CSAF_READ | CSAF_WRITE;
  ret_desc->access[CSAID_ACCEL2] = CSAF_READ | CSAF_WRITE;
  ret_desc->access[CSAID_ACCEL3] = CSAF_READ | CSAF_WRITE;
  ret_desc->access[CSAID_ACCEL4] = CSAF_READ | CSAF_WRITE;
  ret_desc->access[CSAID_ACCEL5] = CSAF_READ | CSAF_WRITE;

  /* For hardware layers */
  ret_desc->access[CSAID_LAYER0] = CSAF_READ;
  ret_desc->access[CSAID_LAYER1] = CSAF_READ;
  ret_desc->access[CSAID_LAYER2] = CSAF_READ;
  ret_desc->access[CSAID_LAYER3] = CSAF_READ;
  ret_desc->access[CSAID_LAYER4] = CSAF_READ;
  ret_desc->access[CSAID_LAYER5] = CSAF_READ;
  ret_desc->access[CSAID_LAYER6] = CSAF_READ;
  ret_desc->access[CSAID_LAYER7] = CSAF_READ;
  ret_desc->access[CSAID_LAYER8] = CSAF_READ;
  ret_desc->access[CSAID_LAYER9] = CSAF_READ;
  ret_desc->access[CSAID_LAYER10] = CSAF_READ;
  ret_desc->access[CSAID_LAYER11] = CSAF_READ;
  ret_desc->access[CSAID_LAYER12] = CSAF_READ;
  ret_desc->access[CSAID_LAYER13] = CSAF_READ;
  ret_desc->access[CSAID_LAYER14] = CSAF_READ;
  ret_desc->access[CSAID_LAYER15] = CSAF_READ;

  ret = stmfbdevJoinPool (core, pool, pool_data, pool_local, system_data);
  if (ret)
    {
      stmfbdevDestroyPool (pool, pool_data, pool_local);
      return ret;
    }

  return DFB_OK;
}