void print_mark(int p) { print_char('{'); if((p<(int)fix_mem_min)||(p> (int)fix_mem_end)) tprint_esc("CLOBBERED."); else show_token_list(token_link(p),null,max_print_line-10); print_char('}'); }
int cvmx_parse_config() { token_list_t *list; int start_index=0; int rv; cvmx_ipd_config_t ipd_config; cvmx_dma_config_t dma_config; cvmx_tim_config_t timer_config; cvmx_dfa_app_config_t dfa_config; cvmx_zip_config_t zip_config; cvmx_raid_config_t raid_config; cvmx_bch_app_config_t bch_config; if (cvmx_app_config_str == 0) cvmx_dprintf("ERROR: application config string is not set\n"); if(dbg_parse) cvmx_dprintf("Parsing config string.\n"); list = init_token_list(30, 128); cvmx_ipd_get_config(&ipd_config); cvmx_dma_get_cmd_que_pool_config(&dma_config.command_queue_pool); cvmx_pko_get_cmd_que_pool_config(&pko_fpa_cfg); cvmx_tim_get_fpa_pool_config(&timer_config.timer_pool); cvmx_dfa_get_fpa_pool_config(&dfa_config.dfa_pool); cvmx_zip_get_fpa_pool_config(&zip_config.zip_pool); cvmx_raid_get_cmd_que_pool_config(&raid_config.command_queue_pool); cvmx_bch_get_cmd_que_pool_config(&bch_config.command_queue_pool); while (1) { /* Parsing the config string line by line, each call to get_token_list() returns the tokens on the next line */ start_index = get_token_list(list, cvmx_app_config_str, start_index); //show_token_list(list); if (list->token_index >= 1) { if (SC(TK[0],"pko") == 0) { rv = parse_pko_config_command(list); if (rv != 0) { cvmx_dprintf("ERROR: in parsing pko commands\n"); show_token_list(list); } } else if (SC(TK[0],"ipd") == 0) { if((rv = parse_ipd_config_command(list, &ipd_config))) { cvmx_dprintf("ERROR: in parsing IPD command\n"); show_token_list(list); } } else if (SC(TK[0],"rgmii") == 0) { if((rv = parse_rgmii_config_command(list))) { cvmx_dprintf("ERROR: in parsing rgmii command\n"); show_token_list(list); } } else if (SC(TK[0],"dma") == 0) { if((rv = parse_dma_config_command(list, &dma_config ))) { cvmx_dprintf("ERROR: in parsing dma command\n"); show_token_list(list); } } else if (SC(TK[0],"timer") == 0) { if((rv = parse_timer_config_command(list, &timer_config ))) { cvmx_dprintf("ERROR: in parsing timer command\n"); show_token_list(list); } } else if (SC(TK[0],"dfa") == 0) { if((rv = parse_dfa_config_command(list, &dfa_config ))) { cvmx_dprintf("ERROR: in parsing dfa command\n"); show_token_list(list); } } else if (SC(TK[0],"zip") == 0) { if((rv = parse_zip_config_command(list, &zip_config ))) { cvmx_dprintf("ERROR: in parsing zip command\n"); show_token_list(list); } } else if (SC(TK[0], "bch") == 0) { if ((rv = parse_bch_config_command(list, &bch_config))) { cvmx_dprintf("ERROR: in parsing bch command\n"); show_token_list(list); } } else if (SC(TK[0],"raid") == 0) { if((rv = parse_raid_config_command(list, &raid_config ))) { cvmx_dprintf("ERROR: in parsing raid command\n"); show_token_list(list); } } else if (SC(TK[0],"llm") == 0) { if((rv = parse_llm_config_command(list))) { cvmx_dprintf("ERROR: in parsing llm command\n"); show_token_list(list); } } else if (SC(TK[0],"spi") == 0) { if((rv = parse_spi_config_command(list))) { cvmx_dprintf("ERROR: in parsing spi command\n"); show_token_list(list); } } else if (SC(TK[0],"ilk") == 0) { if((rv = parse_ilk_config_command(list))) { cvmx_dprintf("ERROR: in parsing ilk command\n"); show_token_list(list); } } else if (SC(TK[0],"npi") == 0) { if((rv = parse_npi_config_command(list))) { cvmx_dprintf("ERROR: in parsing npi command\n"); show_token_list(list); } } else if (SC(TK[0],"pki") == 0) { if(OCTEON_IS_MODEL(OCTEON_CN78XX)) { if((rv = parse_pki_config_command(list))) { cvmx_dprintf("ERROR: in parsing pki command\n"); show_token_list(list); } } } } if (cvmx_app_config_str[start_index] == '\0') { cvmx_ipd_set_config(ipd_config); cvmx_pko_set_cmd_que_pool_config(pko_fpa_cfg.pool_num, pko_fpa_cfg.buffer_size, pko_fpa_cfg.buffer_count); cvmx_zip_set_fpa_pool_config(zip_config.zip_pool.pool_num, zip_config.zip_pool.buffer_size, zip_config.zip_pool.buffer_count); cvmx_tim_set_fpa_pool_config(timer_config.timer_pool.pool_num, timer_config.timer_pool.buffer_size, timer_config.timer_pool.buffer_count); cvmx_dfa_set_fpa_pool_config(dfa_config.dfa_pool.pool_num, dfa_config.dfa_pool.buffer_size, dfa_config.dfa_pool.buffer_count); cvmx_dma_set_cmd_que_pool_config(dma_config.command_queue_pool.pool_num, dma_config.command_queue_pool.buffer_size, dma_config.command_queue_pool.buffer_count); cvmx_raid_set_cmd_que_pool_config(raid_config.command_queue_pool.pool_num, raid_config.command_queue_pool.buffer_size, raid_config.command_queue_pool.buffer_count); cvmx_bch_set_cmd_que_pool_config(bch_config.command_queue_pool.pool_num, bch_config.command_queue_pool.buffer_size, bch_config.command_queue_pool.buffer_count); break; } start_index++; reset_token_index(list); } return 0; }
int parse_interface_name(char *name, int interfaces[], int max_interface_cnt) { token_list_t *list; list = init_token_list(30, 128); get_interface_name_token_list(list, name); //show_token_list(list); if (list->token_index < 3 ) { cvmx_dprintf("invalid interface name :%s token_cnt=%d \n", name, list->token_index); show_token_list(list); return -1; } /* Looking for something like type:n */ if ( (list->token_index == 3 ) && (SC(TK[1],":") == 0) ) { int interface_num = ST(TK[2], 0, 10); int type_index = cvmx_get_interface_type_index(TK[0]); //cvmx_dprintf("type_index=%d num=%d \n", type_index, interface_num); if (type_index < 0) { cvmx_dprintf("invalid interface type:%s\n", TK[0]); return -1; } if (interface_num >= cvmx_interface_types[type_index].max_cnt ) { cvmx_dprintf("invalid interface index=%d for type=%s\n", interface_num, TK[0]); return -1; } interfaces[0] = cvmx_get_interface_number(type_index, interface_num); //cvmx_dprintf("interface=%d \n", interfaces[0]); return 1; } /* Looking for something like type:[n..n] */ if ( (list->token_index == 8 ) && (SC(TK[2],"[") == 0) && (SC(TK[4],".") == 0) && (SC(TK[5],".") == 0) && (SC(TK[7],"]") == 0) ) { int intf_start = ST(TK[3], 0, 10); int intf_end = ST(TK[6], 0, 10); int type_index = cvmx_get_interface_type_index(TK[0]); int i,j; if (type_index < 0) { cvmx_dprintf("invalid interface type:%s\n", TK[0]); return -1; } if ((intf_end <= intf_start) || (intf_start < 0) || intf_end >= cvmx_interface_types[type_index].max_cnt) { cvmx_dprintf("invalid interface range %d..%d max=%d\n", intf_start, intf_start, cvmx_interface_types[type_index].max_cnt); return -1; } j=0; for(i=intf_start; i<=intf_end; i++) { int inum = cvmx_get_interface_number(type_index, i); if (inum != -1) interfaces[j++] = inum; } return j; } //cvmx_dprintf("%s:%d Here... %s %s \n", __FUNCTION__, __LINE__, // TK[2], TK[list->token_index -1]); /* Looking for something like type:[n,*,n] * is repetitions of ,n*/ if ( (SC(TK[2],"[") == 0) && (SC(TK[list->token_index-1], "]") == 0) ) { int type_index = cvmx_get_interface_type_index(TK[0]); int i,j; //cvmx_dprintf("%s:%d Here..\n", __FUNCTION__, __LINE__); if (type_index < 0) { cvmx_dprintf("invalid interface type:%s\n", TK[0]); return -1; } for(i=4; i < (list->token_index-1); i+=2) { if (SC(TK[i],",") != 0) { cvmx_dprintf("invalid seperator i=%d\n",i); return -1; } } j = 0; for(i=3; i < (list->token_index-1); i++) { int num = ST(TK[i], 0, 10); int inum; if (num > cvmx_interface_types[type_index].max_cnt) { cvmx_dprintf("invalid index %d for type=%s\n", num, cvmx_interface_types[type_index].name); } inum = cvmx_get_interface_number(type_index, i); if (inum != -1) interfaces[j++] = inum; if (j >= max_interface_cnt) { cvmx_dprintf("too many interface numbers=%d\n", j); return -1; } } return j; } return -1; }
int parse_pko_config_command(token_list_t *list) { int intf_index = -1; int queue_cnt = -1; int port_cnt = -1; int tok_offset = 0; int interfaces[CVMX_HELPER_MAX_IFACE]; int intf_cnt, i; if (SC(TK[1],"command_queue") == 0) return (parse_fpa_config_command(list, &pko_fpa_cfg, "pko command queue pool")); if ( (SC(TK[0],"pko") != 0) || (SC(TK[1],"interface") != 0) || (SC(TK[2],"=") != 0) || (list->token_index < 9) ) { cvmx_dprintf("ERROR: invalid pko command :"); return -1; //show_token_list(list); } intf_cnt = parse_interface_name(TK[3], interfaces, CVMX_HELPER_MAX_IFACE); if (intf_cnt < 0) { cvmx_dprintf("ERROR: invalid interface name = %s \n", TK[3]); return -1; } if (SC(TK[4],"interface_index") == 0) { if (intf_cnt != 1) { cvmx_dprintf("ERROR: cannot specify interface_index" " when using wild card for specifying" " interface name\n"); return -1; } if (SC(TK[5],"=") != 0) { cvmx_dprintf("ERROR: invalid pko config command : no " "equal sign after interface_index \n"); return -1; } tok_offset = 3; intf_index = ST(TK[6], 0, 10); if ((intf_index >= CVMX_HELPER_CFG_MAX_PORT_PER_IFACE) || (intf_index < 0)) { cvmx_dprintf("ERROR: invalid intf_index=%d max=%d\n", intf_index, CVMX_HELPER_CFG_MAX_PORT_PER_IFACE-1); return -1; } } if ( (SC(TK[tok_offset + 4],"internal_port_cnt") != 0) || (SC(TK[tok_offset + 5],"=") != 0) ) { cvmx_dprintf("ERROR: invalid pko config command while looking" "for internal_port_cnt \n"); return -1; } if ( (SC(TK[tok_offset+7],"queues_per_internal_port") != 0) || (SC(TK[tok_offset+8],"=") != 0) ) { cvmx_dprintf("ERROR: invalid pko config command while looking" "for queues_per_internal_port\n"); return -1; } #define PKO_CFG __cvmx_pko_config port_cnt = (int) ST(TK[tok_offset+6], 0, 10); queue_cnt = (int) ST(TK[tok_offset+9], 0, 10); for(i=0; i<intf_cnt; i++) { int intf_num = interfaces[i]; if (intf_num == -1) continue; if ( (is_interface_disabled(intf_num) == 1) && dbg_parse) { cvmx_dprintf("skipping config interace_num=%d :", intf_num); show_token_list(list); } if (intf_index != -1) { //cvmx_dprintf("%d:%d %d %d \n", intf_num, intf_index, port_cnt, queue_cnt); PKO_CFG[intf_num][intf_index].internal_port_cnt = port_cnt; PKO_CFG[intf_num][intf_index].queues_per_internal_port = queue_cnt; } else { int index; int port_max = __cvmx_helper_early_ports_on_interface(intf_num); for(index=0; index<port_max; index++) { PKO_CFG[intf_num][index].internal_port_cnt = port_cnt; PKO_CFG[intf_num][index].queues_per_internal_port = queue_cnt; } } if(dbg_parse) cvmx_dprintf("interface=%d interface_index=%d queue_cnt" "=%d port_cnt=%d\n", intf_num, intf_index, queue_cnt, port_cnt); } #undef PKO_CFG return 0; }
void tex::print_mark(ptr p) { print("{"); show_token_list(token_link(p), null, MAX_PRINT_LINE - 10); print("}"); }