Date: Wed, 28 May 2014 06:04:26 GMT From: seiya@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r268743 - in soc2014/seiya/bootsplash/sys: boot/forth dev/fb sys Message-ID: <201405280604.s4S64Qss059767@socsvn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: seiya Date: Wed May 28 06:04:26 2014 New Revision: 268743 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=268743 Log: use kenv instead of config parser in the kernel trasz@ taught me that parsing config files in the kernel is unusual. So I consulted with my mentor and in conclusion kenv is preferable. Discussed with: kmoore@ Modified: soc2014/seiya/bootsplash/sys/boot/forth/loader.conf soc2014/seiya/bootsplash/sys/dev/fb/bsplash.c soc2014/seiya/bootsplash/sys/sys/kernel.h Modified: soc2014/seiya/bootsplash/sys/boot/forth/loader.conf ============================================================================== --- soc2014/seiya/bootsplash/sys/boot/forth/loader.conf Wed May 28 05:57:35 2014 (r268742) +++ soc2014/seiya/bootsplash/sys/boot/forth/loader.conf Wed May 28 06:04:26 2014 (r268743) @@ -38,9 +38,10 @@ bitmap_type="splash_image_data" # and place it on the module_path bsplash_load="NO" # Set this to YES to enable enhanced bootsplash! -bsplash_conf_load="NO" # Set this to YES to enable enhanced bootsplash too! -bsplash_conf_name="/boot/splash/default/splash.conf" # name of configuration file -bsplash_conf_type="bsplash_conf" +# bsplash_first_image="/boot/splash/foo/bg.bmp" # an image drawn before animation +# bsplash_animation_images="/boot/splash/foo/animation%.bmp" # animation images +# bsplash_animation_fps="15" # frame per second + ############################################################## ### Random number generator configuration ################### Modified: soc2014/seiya/bootsplash/sys/dev/fb/bsplash.c ============================================================================== --- soc2014/seiya/bootsplash/sys/dev/fb/bsplash.c Wed May 28 05:57:35 2014 (r268742) +++ soc2014/seiya/bootsplash/sys/dev/fb/bsplash.c Wed May 28 06:04:26 2014 (r268743) @@ -35,140 +35,28 @@ #include <sys/libkern.h> #include <sys/malloc.h> -MALLOC_DEFINE(M_BSPLASH, "bsplash", "Buffers to store configuration"); - -enum config_keys { - CONF_FULLSCREEN_FIRST_IMAGE = 0, - CONF_FULLSCREEN_AMINATION_IMAGES = 1, - CONF_ANIMATION_FPS = 2, - CONF_NUM = 3 -}; - -#define CONF_VAL_MAX 256 - -static char *config [CONF_NUM]; - -static int load_config(void) -{ - caddr_t conf; - char *ptr; - char *key; - char *val; - int line; - - conf = preload_search_by_type("bsplash_conf"); - if(conf == NULL) { - printf("bsplash: failed to load bootsplash configuration\n"); - return -1; - } - - ptr = preload_fetch_addr(conf); - - for(int i=0; i < CONF_NUM; i++) { - if((config[i] = malloc(CONF_VAL_MAX, M_BSPLASH, M_NOWAIT)) == NULL) { - printf("bsplash: malloc() returned NULL, aborted\n"); - return -1; - } - } - - /* - * parse config file - */ - for(line = 1; *ptr; line++) { - /* skip whitespaces / tabs */ - while(*ptr && (*ptr == ' ' || *ptr == '\t')) - ptr++; - if(*ptr == '\0') - break; - - if(*ptr != '\n' && *ptr != '#') { - /* - * parse a line - */ - - key = ptr; - while(*ptr && *ptr != '=') - ptr++; - /* '=' not found */ - if(*ptr == '\0') - goto parse_error; - - *ptr = '\0'; /* '=' -> '\0' */ - val = ++ptr; - - /* '\n' -> '\0' */ - while(*ptr && *ptr != '\n') - ptr++; - if(*ptr){ - *ptr = '\0'; - ptr++; - } - - if(*val == '\0' || val[0] != '"' || val[strlen(val)-1] != '"') - goto parse_error; - - /* FIXME: ignore if `val' is too long */ - if(strlen(val) > CONF_VAL_MAX){ - printf("bsplash: line %d is too long, ignored\n", line); - }else{ - - /* - * save config - */ - if(!strcmp(key, "fullscreen_first_image")) { - strcpy(config[CONF_FULLSCREEN_FIRST_IMAGE], val); - }else if(!strcmp(key, "fullscreen_animation_images")) { - strcpy(config[CONF_FULLSCREEN_AMINATION_IMAGES], val); - }else if(!strcmp(key, "animation_fps")) { - strcpy(config[CONF_ANIMATION_FPS], val); - }else{ - printf("bsplash: unknown configuration '%s', ignored\n", key); - } - } - - /* in comment line or blank line */ - }else{ - /* skip this line */ - while(*ptr && *ptr != '\n') - ptr++; - if(*ptr) - ptr++; - } - } - - return 0; - - parse_error: - printf("bsplash: configuration parse error at line %d\n", line); - return -1; -} - /* * Load configuration and draw image before kernel thread mechanism is activated. */ static void bsplash_early_init (void){ + char *first_image; - for(int i=0; i < CONF_NUM; i++) - config[i] = NULL; - - load_config(); + first_image = getenv("bsplash_first_image"); + if (first_image != NULL) { + printf("first_image: %s\n", first_image); + /* TODO: render first_image */ + } + freeenv(first_image); } static void bsplash_uninit (void){ - - for(int i=0; i < CONF_NUM; i++) { - if(config[i]) - free(config[i], M_BSPLASH); - } } static int modevent(module_t mod, int type, void *data) { - printf("bsplash: hello world!\n"); - switch ((modeventtype_t)type) { case MOD_LOAD: bsplash_early_init(); Modified: soc2014/seiya/bootsplash/sys/sys/kernel.h ============================================================================== --- soc2014/seiya/bootsplash/sys/sys/kernel.h Wed May 28 05:57:35 2014 (r268742) +++ soc2014/seiya/bootsplash/sys/sys/kernel.h Wed May 28 06:04:26 2014 (r268743) @@ -89,7 +89,6 @@ SI_SUB_DUMMY = 0x0000000, /* not executed; for linker*/ SI_SUB_DONE = 0x0000001, /* processed*/ SI_SUB_TUNABLES = 0x0700000, /* establish tunable values */ - SI_SUB_BOOTSPLASH = 0x0780000, /* bootsplash */ SI_SUB_COPYRIGHT = 0x0800001, /* first use of console*/ SI_SUB_SETTINGS = 0x0880000, /* check and recheck settings */ SI_SUB_MTX_POOL_STATIC = 0x0900000, /* static mutex pool */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201405280604.s4S64Qss059767>