static DFBResult system_join( CoreDFB *core, void **data ) { DFBResult ret; void *ptr; DFBX11 *x11; DFBX11Shared *shared; D_DEBUG_AT( X11_Core, "%s()\n", __FUNCTION__ ); x11 = D_CALLOC( 1, sizeof(DFBX11) ); if (!x11) return D_OOM(); core_arena_get_shared_field( core, "x11", &ptr ); shared = ptr; /* * Local init (master and slave) */ ret = InitLocal( x11, shared, core ); if (ret) { D_FREE( x11 ); return ret; } /* * Must be set before joining the pools! */ *data = x11; /* * Slave init */ if (shared->x11image_pool) dfb_surface_pool_join( core, shared->x11image_pool, &x11SurfacePoolFuncs ); if (shared->x11window_pool) dfb_surface_pool_join( core, shared->x11window_pool, &x11WindowPoolFuncs ); #ifdef USE_GLX if (shared->glx_pool) dfb_surface_pool_join( core, shared->glx_pool, &glxSurfacePoolFuncs ); #endif if (shared->vpsmem_pool) dfb_surface_pool_join( core, shared->vpsmem_pool, &vpsmemSurfacePoolFuncs ); #ifdef USE_GLX if (shared->x11_pool_bridge) dfb_surface_pool_bridge_join( core, shared->x11_pool_bridge, &x11SurfacePoolBridgeFuncs, x11 ); #endif return DFB_OK; }
static DFBResult system_join( CoreDFB *core, void **ret_data ) { DFBResult ret; void *tmp; PVR2DData *data; PVR2DDataShared *shared; D_ASSERT( m_data == NULL ); data = D_CALLOC( 1, sizeof(PVR2DData) ); if (!data) return D_OOM(); data->core = core; ret = fusion_arena_get_shared_field( dfb_core_arena( core ), "pvr2d", &tmp ); if (ret) { D_FREE( data ); return ret; } data->shared = shared = tmp; *ret_data = m_data = data; data->screen = dfb_screens_register( NULL, data, pvr2dPrimaryScreenFuncs ); data->layer = dfb_layers_register( data->screen, data, pvr2dPrimaryLayerFuncs ); dfb_surface_pool_join( core, shared->pool, pvr2dSurfacePoolFuncs ); return DFB_OK; }
static DFBResult system_join( CoreDFB *core, void **ret_data ) { DFBResult ret; void *tmp; DevMemData *data; DevMemDataShared *shared; D_ASSERT( m_data == NULL ); if (!dfb_config->video_phys || !dfb_config->video_length) { D_ERROR( "System/DevMem: Please supply 'video-phys = 0xXXXXXXXX' and 'video-length = XXXX' options!\n" ); return DFB_INVARG; } if (dfb_config->mmio_phys && !dfb_config->mmio_length) { D_ERROR( "System/DevMem: Please supply both 'mmio-phys = 0xXXXXXXXX' and 'mmio-length = XXXX' options or none!\n" ); return DFB_INVARG; } data = D_CALLOC( 1, sizeof(DevMemData) ); if (!data) return D_OOM(); ret = fusion_arena_get_shared_field( dfb_core_arena( core ), "devmem", &tmp ); if (ret) { D_FREE( data ); return ret; } data->shared = shared = tmp; ret = MapMemAndReg( data, dfb_config->video_phys, dfb_config->video_length, dfb_config->mmio_phys, dfb_config->mmio_length ); if (ret) { D_FREE( data ); return ret; } *ret_data = m_data = data; dfb_surface_pool_join( core, shared->pool, &devmemSurfacePoolFuncs ); return DFB_OK; }
static DFBResult system_join( CoreDFB *core, void **ret_data ) { DFBResult ret; void *tmp; MesaData *mesa; MesaDataShared *shared; D_ASSERT( m_data == NULL ); if (dfb_config->vt) { ret = dfb_vt_join(); if (ret) return DFB_INIT; } mesa = D_CALLOC( 1, sizeof(MesaData) ); if (!mesa) return D_OOM(); mesa->core = core; ret = core_arena_get_shared_field( core, "mesa", &tmp ); if (ret) { D_FREE( mesa ); return ret; } mesa->shared = shared = tmp; ret = InitLocal( mesa ); if (ret) return ret; *ret_data = m_data = mesa; dfb_surface_pool_join( core, shared->pool, &mesaSurfacePoolFuncs ); mesa->screen = dfb_screens_register( NULL, mesa, mesaScreenFuncs ); mesa->layer = dfb_layers_register( mesa->screen, mesa, mesaLayerFuncs ); return DFB_OK; }
static DFBResult system_join( CoreDFB *core, void **data ) { void *ret; CoreScreen *screen; D_ASSERT( dfb_sdl == NULL ); fusion_arena_get_shared_field( dfb_core_arena( core ), "sdl", &ret ); dfb_sdl = ret; dfb_sdl_core = core; screen = dfb_screens_register( NULL, NULL, sdlPrimaryScreenFuncs ); dfb_layers_register( screen, NULL, sdlPrimaryLayerFuncs ); dfb_surface_pool_join( core, dfb_sdl->sdl_pool, &sdlSurfacePoolFuncs ); *data = dfb_sdl; return DFB_OK; }
static DFBResult system_join( CoreDFB *core, void **ret_data ) { DFBResult ret; void *tmp; AndroidData *android; AndroidDataShared *shared; D_ASSERT( m_data == NULL ); android = D_CALLOC( 1, sizeof(AndroidData) ); if (!android) return D_OOM(); android->core = core; ret = core_arena_get_shared_field( core, "android", &tmp ); if (ret) { D_FREE( android ); return ret; } android->shared = shared = tmp; ret = InitLocal( android ); if (ret) return ret; *ret_data = m_data = android; dfb_surface_pool_join( core, shared->pool, &androidSurfacePoolFuncs ); android->screen = dfb_screens_register( NULL, android, androidScreenFuncs ); android->layer = dfb_layers_register( android->screen, android, androidLayerFuncs ); return DFB_OK; }