int ggiMesaInit() { int err; char *str; char *conffile; GGIMESADPRINT_CORE("ggiMesaInit() called\n"); _ggimesaLibIsUp++; if (_ggimesaLibIsUp > 1) return 0; /* Initialize only at first call */ str = getenv("GGIMESA_DEBUGSYNC"); if (str != NULL) { _ggimesaDebugSync = 1; } str = getenv("GGIMESA_DEBUG"); if (str != NULL) { _ggimesaDebugState = atoi(str); GGIMESADPRINT_CORE("%s Debugging=%d\n", _ggimesaDebugSync ? "sync" : "async", _ggimesaDebugState); } conffile = malloc(strlen(ggiMesaGetConfDir()) + 1 + strlen(GGIMESACONFFILE) +1); if (conffile == NULL) { fprintf(stderr, "GGIMesa: unable to allocate memory for config filename.\n"); return GGI_ENOMEM; } sprintf(conffile, "%s%c%s", ggiMesaGetConfDir(), '/', GGIMESACONFFILE); err = ggLoadConfig(conffile, &_ggimesaConfigHandle); if (err != GGI_OK) { fprintf(stderr, "GGIMesa: Couldn't open %s\n", conffile); free(conffile); _ggimesaLibIsUp--; return err; } free(conffile); _ggiMesaID = ggiExtensionRegister("GGIMesa", sizeof(struct ggi_mesa_ext), changed); if (_ggiMesaID < 0) { fprintf(stderr, "GGIMesa: failed to register as extension\n"); _ggimesaLibIsUp--; ggFreeConfig(_ggimesaConfigHandle); return _ggiMesaID; } return 0; }
static int GGIdlinit(ggi_visual *vis, struct ggi_dlhandle *dlh, const char *args, void *argptr, uint32 *dlret) { struct genkgi_priv_mesa *priv; char libname[256], libargs[256]; int id, err; struct stat junk; ggifunc_getapi *oldgetapi; GGIMESADPRINT_CORE("display-fbdev-kgicon-mesa: GGIdlinit start\n"); GENKGI_PRIV_MESA(vis) = priv = malloc(sizeof(struct genkgi_priv_mesa)); if (priv == NULL) { fprintf(stderr, "Failed to allocate genkgi private data\n"); return GGI_DL_ERROR; } priv->oldpriv = GENKGI_PRIV(vis); #if 0 err = ggLoadConfig(conffile, &_configHandle); if (err != GGI_OK) { gl_ggiPrint("display-fbdev-kgicon-mesa: Couldn't open %s\n", conffile); return err; } /* Hack city here. We need to probe the KGI driver properly for * suggest-strings to discover the acceleration type(s). */ priv->have_accel = 0; if (stat("/proc/gfx0", &junk) == 0) { sprintf(priv->accel, "%s%s", accel_prefix, "d3dim"); priv->have_accel = 1; GGIMESADPRINT_CORE("display-fbdev-kgicon-mesa: Using accel: \"%s\"\n", priv->accel); } /* Mode management */ vis->opdisplay->getapi = GGIMesa_genkgi_getapi; ggiIndicateChange(vis, GGI_CHG_APILIST); /* Give the accel sublibs a chance to set up a driver */ if (priv->have_accel == 1) { oldgetapi = vis->opdisplay->getapi; vis->opdisplay->getapi = GGIMesa_genkgi_getapi; changed(vis, GGI_CHG_APILIST); /* If the accel sublibs didn't produce, back up * and keep looking */ if ((LIBGGI_MESAEXT(vis)->update_state == NULL) || (LIBGGI_MESAEXT(vis)->setup_driver == NULL)) vis->opdisplay->getapi = oldgetapi; } LIBGGI_MESAEXT(vis)->update_state = genkgi_update_state; LIBGGI_MESAEXT(vis)->setup_driver = genkgi_setup_driver; #endif GGIMESADPRINT_CORE("display-fbdev-kgicon-mesa: GGIdlinit finished\n"); *dlret = GGI_DL_OPDRAW; return 0; }
int giiInit(void) { int err; const char *str; char *conffile; if (_giiLibIsUp>0) { /* Initialize only at first call. */ _giiLibIsUp++; return 0; } err = ggInit(); if (err != GGI_OK) { fprintf(stderr, "LibGII: unable to initialize LibGG\n"); return err; } err = GGI_ENOMEM; if ((_gii_event_lock = ggLockCreate()) == NULL) { fprintf(stderr,"LibGII: unable to initialize event mutex.\n"); goto out_ggexit; } if ((_gii_safe_lock = ggLockCreate()) == NULL) { fprintf(stderr,"LibGII: unable to initialize safe mutex.\n"); goto out_destroy_event; } if ((_gii_global_lock = ggLockCreate()) == NULL) { fprintf(stderr,"LibGII: unable to initialize global mutex.\n"); goto out_destroy_safe; } conffile = malloc(strlen(giiGetConfDir()) + 1 + strlen(GIICONFFILE) +1); if (conffile == NULL) { fprintf(stderr,"LibGII: unable to allocate memory for config filename.\n"); goto out_destroy_global; } snprintf(conffile, strlen(giiGetConfDir()) + strlen(GIICONFFILE) + 2, "%s%c%s", giiGetConfDir(), CHAR_DIRDELIM, GIICONFFILE); if(ggLoadConfig(conffile, &_giiconfhandle)) { fprintf(stderr, "LibGII: fatal error - could not load %s\n", conffile); free(conffile); goto out_destroy_global; } free(conffile); str = getenv("GII_DEBUGSYNC"); if (str != NULL) { _giiDebug |= DEBUG_SYNC; } str = getenv("GII_DEBUG"); if (str != NULL) { _giiDebug |= atoi(str) & DEBUG_ALL; DPRINT_CORE("%s Debugging=%d\n", DEBUG_ISSYNC ? "sync" : "async", _giiDebug); } _giiInitBuiltins(); _giiLibIsUp++; return 0; out_destroy_global: ggLockDestroy(_gii_global_lock); out_destroy_safe: ggLockDestroy(_gii_safe_lock); out_destroy_event: ggLockDestroy(_gii_event_lock); out_ggexit: ggExit(); return err; }