int cov_conf_parse(struct skyeye_option_t *option, int num_params, const char *params[]) { int i; char *p; char name[MAX_PARAM_NAME], value[MAX_PARAM_NAME]; for (i = 0; i < num_params; i++) { if (split_param (params[i], name, value) < 0) SKYEYE_ERR ("Error: code_coverage option has wrong parameter \"%s\".\n", name); if (!strncmp ("start", name, strlen (name))) { sscanf (value, "%x", &prof_start); } else if (!strncmp ("end", name, strlen (name))) { sscanf (value, "%x", &prof_end); } else if (!strncmp ("filename", name, strlen (name))) { strcpy(cov_filename, value); } else SKYEYE_ERR ("Cov_conf Error: Unkonw load_addr option \"%s\"\n", params[i]); } return 0; }
/* set load address for elf image */ int do_load_addr_option (skyeye_option_t * this_option, int num_params, const char *params[]) { int i; char name[MAX_PARAM_NAME], value[MAX_PARAM_NAME]; unsigned long load_base; unsigned long load_mask; for (i = 0; i < num_params; i++) { if (split_param (params[i], name, value) < 0) SKYEYE_ERR ("Error: sound has wrong parameter \"%s\".\n", name); if (!strncmp ("base", name, strlen (name))) { sscanf (value, "%x", &load_base); } else if (!strncmp ("mask", name, strlen (name))) { sscanf (value, "%x", &load_mask); } else SKYEYE_ERR ("Error: Unkonw load_addr option \"%s\"\n", params[i]); } /* FIXME, we should update load_base and load_mask to preference of SkyEye */ fprintf(stderr, "%s not finished.\n", __FUNCTION__); //printf("Your elf file will be load to: base address=0x%x,mask=0x%x\n", load_base, load_mask); return 0; }
/** * setup device option. * all device options may have common parameters. Here we handle these common parameters. * */ int setup_device_option (char *option_name, void *dev_option, int num_params, const char *params[]) { char name[MAX_PARAM_NAME], value[MAX_PARAM_NAME]; struct common_config conf; int i; memset (&conf, 0, sizeof (conf)); conf.type = NULL; conf.name = NULL; for (i = 0; i < num_params; i++) { if (split_param (params[i], name, value) < 0) SKYEYE_ERR ("Error: \"%s\" has wrong parameter \"%s\".\n", option_name, name); if (!strncmp ("type", name, strlen (name))) { conf.type = strdup (value); } else if (!strncmp ("name", name, strlen (name))) { conf.name = strdup (value); } else if (!strncmp ("base", name, strlen (name))) { conf.base = strtoul (value, NULL, 0); } else if (!strncmp ("size", name, strlen (name))) { conf.size = strtoul (value, NULL, 0); } else if (!strncmp ("int", name, strlen (name))) { get_interrupts (value, conf.interrupts); } } skyeye_config_t* config; config = get_current_config(); setup_device (option_name, &conf, dev_option, config->mach); if (conf.type) free (conf.type); if (conf.name) free (conf.name); return 0; }
static int bfin_parse_mem(int num_params, const char* params[]) { #if 0 char name[MAX_PARAM_NAME], value[MAX_PARAM_NAME]; int i, num; bfin_mem_config_t *mc = &bfin_mem_config; bfin_mem_bank_t *mb = mc->mem_banks; mc->bank_num = mc->current_num++; num = mc->current_num - 1; /*mem_banks should begin from 0. */ mb[num].filename[0] = '\0'; for (i = 0; i < num_params; i++) { if (split_param (params[i], name, value) < 0) SKYEYE_ERR ("Error: mem_bank %d has wrong parameter \"%s\".\n", num, name); if (!strncmp ("map", name, strlen (name))) { if (!strncmp ("M", value, strlen (value))) { mb[num].read_byte = bfin_real_read_byte; mb[num].write_byte = bfin_real_write_byte; mb[num].read_halfword = bfin_real_read_halfword; mb[num].write_halfword = bfin_real_write_halfword; mb[num].read_word = bfin_real_read_word; mb[num].write_word = bfin_real_write_word; mb[num].read_doubleword = bfin_real_read_doubleword; mb[num].write_doubleword = bfin_real_write_doubleword; mb[num].type = MEMTYPE_RAM; } else if (!strncmp ("I", value, strlen (value))) { mb[num].read_byte = bfin_io_read_byte; mb[num].write_byte = bfin_io_write_byte; mb[num].read_halfword = bfin_io_read_halfword; mb[num].write_halfword = bfin_io_write_halfword; mb[num].read_word = bfin_io_read_word; mb[num].write_word = bfin_io_write_word; mb[num].read_doubleword = bfin_io_read_doubleword; mb[num].write_doubleword = bfin_io_write_doubleword; mb[num].type = MEMTYPE_IO; /*ywc 2005-03-30 */ } else if (!strncmp ("F", value, strlen (value))) { mb[num].read_byte = bfin_flash_read_byte; mb[num].write_byte = bfin_flash_write_byte; mb[num].read_halfword = bfin_flash_read_halfword; mb[num].write_halfword = bfin_flash_write_halfword; mb[num].read_word = bfin_flash_read_word; mb[num].write_word = bfin_flash_write_word; mb[num].read_doubleword = bfin_flash_read_doubleword; mb[num].write_doubleword = bfin_flash_write_doubleword; mb[num].type = MEMTYPE_FLASH; } else { SKYEYE_ERR ("Error: mem_bank %d \"%s\" parameter has wrong value \"%s\"\n", num, name, value); } } else if (!strncmp ("type", name, strlen (name))) { //chy 2003-09-21: process type if (!strncmp ("R", value, strlen (value))) { if (mb[num].type == MEMTYPE_RAM) mb[num].type = MEMTYPE_ROM; mb[num].write_byte = bfin_warn_write_byte; mb[num].write_halfword = bfin_warn_write_halfword; mb[num].write_word = bfin_warn_write_word; } } else if (!strncmp ("addr", name, strlen (name))) { if (value[0] == '0' && value[1] == 'x') mb[num].addr = strtoul (value, NULL, 16); else mb[num].addr = strtoul (value, NULL, 10); } else if (!strncmp ("size", name, strlen (name))) { if (value[0] == '0' && value[1] == 'x') mb[num].len = strtoul (value, NULL, 16); else mb[num].len = strtoul (value, NULL, 10); } else if (!strncmp ("file", name, strlen (name))) { strncpy (mb[num].filename, value, strlen (value) + 1); } else if (!strncmp ("boot", name, strlen (name))) { /*this must be the last parameter. */ if (!strncmp ("yes", value, strlen (value))) skyeye_config.start_address = mb[num].addr; } else { SKYEYE_ERR ("Error: mem_bank %d has unknow parameter \"%s\".\n", num, name); } } #endif return 0; }
/** * parse_mem - parse the option from skyeye.conf to get mem info * @num_params: number of parameters * @params: parameter array */ static int parse_mem(int num_params, const char* params[]) { char name[MAX_PARAM_NAME], value[MAX_PARAM_NAME]; int i, num; mem_config_t *mc = get_global_memmap(); mem_bank_t *mb = mc->mem_banks; skyeye_config_t* config = get_current_config(); mc->bank_num = mc->current_num++; num = mc->current_num - 1; /*mem_banks should begin from 0. */ mb[num].filename[0] = '\0'; for (i = 0; i < num_params; i++) { if (split_param (params[i], name, value) < 0) SKYEYE_ERR ("Error: mem_bank %d has wrong parameter \"%s\".\n", num, name); if (!strncmp ("map", name, strlen (name))) { if (!strncmp ("M", value, strlen (value))) { mb[num].bank_read = mem_read; mb[num].bank_write = mem_write; mb[num].type = MEMTYPE_RAM; } else if (!strncmp ("I", value, strlen (value))) { mb[num].bank_read = io_read; mb[num].bank_write = io_write; mb[num].type = MEMTYPE_IO; } else if (!strncmp ("F", value, strlen (value))) { mb[num].bank_read = flash_read; mb[num].bank_write = flash_write; mb[num].type = MEMTYPE_FLASH; } else { SKYEYE_ERR ("Error: mem_bank %d \"%s\" parameter has wrong value \"%s\"\n", num, name, value); } } else if (!strncmp ("type", name, strlen (name))) { //chy 2003-09-21: process type if (!strncmp ("R", value, strlen (value))) { if (mb[num].type == MEMTYPE_RAM) mb[num].type = MEMTYPE_ROM; mb[num].bank_write = warn_write; } } else if (!strncmp ("addr", name, strlen (name))) { if (value[0] == '0' && value[1] == 'x') mb[num].addr = strtoul (value, NULL, 16); else mb[num].addr = strtoul (value, NULL, 10); } else if (!strncmp ("size", name, strlen (name))) { if (value[0] == '0' && value[1] == 'x') mb[num].len = strtoul (value, NULL, 16); else mb[num].len = strtoul (value, NULL, 10); } else if (!strncmp ("file", name, strlen (name))) { strncpy (mb[num].filename, value, strlen (value) + 1); } else if (!strncmp ("boot", name, strlen (name))) { /*this must be the last parameter. */ if (!strncmp ("yes", value, strlen (value))) config->start_address = mb[num].addr; } else { SKYEYE_ERR ("Error: mem_bank %d has unknow parameter \"%s\".\n", num, name); } } return 0; }
int do_log_option (skyeye_option_t * this_option, int num_params, const char *params[]) { char name[MAX_PARAM_NAME], value[MAX_PARAM_NAME]; int i, fd, logon, memlogon; unsigned long long start, end, length; #if 0 /*2004-08-09 chy init skyeye_config.log */ skyeye_config.log.log_fd = 0; skyeye_config.log.logon = 0; skyeye_config.log.memlogon = 0; skyeye_config.log.start = 0; skyeye_config.log.end = 0; skyeye_config.log.length = 0; for (i = 0; i < num_params; i++) { if (split_param (params[i], name, value) < 0) SKYEYE_ERR ("log_info: Error: log has wrong parameter \"%s\".\n", name); if (!strncmp ("logon", name, strlen (name))) { sscanf (value, "%d", &logon); if (logon != 0 && logon != 1) SKYEYE_ERR ("log_info: Error logon value %d\n", logon); if (logon == 1) { SKYEYE_INFO ("log_info: log is on.\n"); } else { SKYEYE_INFO ("log_info: log is off.\n"); } skyeye_config.log.logon = logon; } else if (!strncmp ("memlogon", name, strlen (name))) { sscanf (value, "%d", &memlogon); if (memlogon != 0 && memlogon != 1) SKYEYE_ERR ("log_info: Error logon value %d\n", memlogon); if (memlogon == 1) { SKYEYE_INFO ("log_info: memory klog is on.\n"); } else { SKYEYE_INFO ("log_info: memory log is off.\n"); } skyeye_config.log.memlogon = memlogon; } else if (!strncmp ("logfile", name, strlen (name))) { if ((skyeye_logfd = fopen (value, "w+")) == NULL) { //SKYEYE_DBG("SkyEye Error when open log file %s\n", value); perror ("SkyEye: Error when open log file: "); skyeye_exit (-1); } skyeye_config.log.log_fd = skyeye_logfd; SKYEYE_INFO ("log_info:log file is %s, fd is 0x%x\n", value, skyeye_logfd); } else if (!strncmp ("start", name, strlen (name))) { start = strtoul (value, NULL, 0); skyeye_config.log.start = start; SKYEYE_INFO ("log_info: log start clock %llu\n", start); } else if (!strncmp ("end", name, strlen (name))) { end = strtoul (value, NULL, 0); skyeye_config.log.end = end; SKYEYE_INFO ("log_info: log end clock %llu\n", end); } else if (!strncmp ("length", name, strlen (name))) { sscanf (value, "%llu", &length); skyeye_config.log.length = length; SKYEYE_INFO ("log_info: log instr length %llu\n", length); } else SKYEYE_ERR ("Error: Unknown cpu name \"%s\"\n", params[0]); } #endif return 0; }