📄 yacc_config.c
字号:
if ((yyvsp[0].num < yyvsp[-2].num) || (yyvsp[0].num > 0xffff)) { yyerror("invalid port range 0x%x-0x%x", yyvsp[-2].num, yyvsp[0].num); YYERROR; } yyval.adjust = calloc(sizeof(adjust_list_t), 1); yyval.adjust->adj.Resource = RES_IO_RANGE; yyval.adjust->adj.resource.io.BasePort = yyvsp[-2].num; yyval.adjust->adj.resource.io.NumPorts = yyvsp[0].num - yyvsp[-2].num + 1; }break;case 16:#line 174 "yacc_config.y"{ if (yyvsp[0].num < yyvsp[-2].num) { yyerror("invalid address range 0x%x-0x%x", yyvsp[-2].num, yyvsp[0].num); YYERROR; } yyval.adjust = calloc(sizeof(adjust_list_t), 1); yyval.adjust->adj.Resource = RES_MEMORY_RANGE; yyval.adjust->adj.resource.memory.Base = yyvsp[-2].num; yyval.adjust->adj.resource.memory.Size = yyvsp[0].num - yyvsp[-2].num + 1; }break;case 17:#line 187 "yacc_config.y"{ yyval.device = calloc(sizeof(device_info_t), 1); yyval.device->refs = 1; strcpy(yyval.device->dev_info, yyvsp[0].str); free(yyvsp[0].str); }break;case 21:#line 199 "yacc_config.y"{ yyval.card = calloc(sizeof(card_info_t), 1); yyval.card->refs = 1; yyval.card->name = yyvsp[0].str; }break;case 30:#line 215 "yacc_config.y"{ if (yyvsp[-1].card->ident_type) { yyerror("ID method already defined for '%s'", yyvsp[-1].card->name); YYERROR; } if (blank_card) { yyerror("Anonymous card already defined"); YYERROR; } yyvsp[-1].card->ident_type = BLANK_IDENT; blank_card = yyvsp[-1].card; }break;case 31:#line 230 "yacc_config.y"{ if (yyvsp[-6].card->ident_type) { yyerror("ID method already defined for '%s'", yyvsp[-6].card->name); YYERROR; } yyvsp[-6].card->ident_type = TUPLE_IDENT; yyvsp[-6].card->id.tuple.code = yyvsp[-4].num; yyvsp[-6].card->id.tuple.ofs = yyvsp[-2].num; yyvsp[-6].card->id.tuple.info = yyvsp[0].str; }break;case 32:#line 243 "yacc_config.y"{ if (yyvsp[-4].card->ident_type & (EXCL_IDENT|MANFID_IDENT)) { yyerror("ID method already defined for '%s'", yyvsp[-4].card->name); YYERROR; } yyvsp[-4].card->ident_type |= MANFID_IDENT; yyvsp[-4].card->manfid.manf = yyvsp[-2].num; yyvsp[-4].card->manfid.card = yyvsp[0].num; }break;case 33:#line 254 "yacc_config.y"{ if (yyvsp[-4].card->ident_type) { yyerror("ID method already defined for '%s'", yyvsp[-4].card->name); YYERROR; } yyvsp[-4].card->ident_type = PCI_IDENT; yyvsp[-4].card->manfid.manf = yyvsp[-2].num; yyvsp[-4].card->manfid.card = yyvsp[0].num; }break;case 34:#line 265 "yacc_config.y"{ if (yyvsp[-2].card->ident_type & (EXCL_IDENT|VERS_1_IDENT)) { yyerror("ID method already defined for '%s'", yyvsp[-2].card->name); YYERROR; } yyvsp[-2].card->ident_type |= VERS_1_IDENT; yyvsp[-2].card->id.vers.ns = 1; yyvsp[-2].card->id.vers.pi[0] = yyvsp[0].str; }break;case 35:#line 275 "yacc_config.y"{ if (yyvsp[-2].card->id.vers.ns == 4) { yyerror("too many version strings for '%s'", yyvsp[-2].card->name); YYERROR; } yyvsp[-2].card->id.vers.pi[yyvsp[-2].card->id.vers.ns] = yyvsp[0].str; yyvsp[-2].card->id.vers.ns++; }break;case 36:#line 286 "yacc_config.y"{ if (yyvsp[-2].card->ident_type) { yyerror("ID method already defined for '%s'", yyvsp[-2].card->name); YYERROR; } yyvsp[-2].card->ident_type = FUNC_IDENT; yyvsp[-2].card->id.func.funcid = yyvsp[0].num; }break;case 37:#line 297 "yacc_config.y"{ yyvsp[-2].card->cis_file = strdup(yyvsp[0].str); }break;case 38:#line 301 "yacc_config.y"{ if (add_binding(yyvsp[-2].card, yyvsp[0].str, 0) != 0) YYERROR; }break;case 39:#line 306 "yacc_config.y"{ if (add_binding(yyvsp[-4].card, yyvsp[-2].str, yyvsp[0].num) != 0) YYERROR; }break;case 40:#line 311 "yacc_config.y"{ if (add_binding(yyvsp[-2].card, yyvsp[0].str, 0) != 0) YYERROR; }break;case 41:#line 316 "yacc_config.y"{ if (add_binding(yyvsp[-4].card, yyvsp[-2].str, yyvsp[0].num) != 0) YYERROR; }break;case 42:#line 323 "yacc_config.y"{ yyvsp[-1].device->needs_mtd = 1; }break;case 43:#line 329 "yacc_config.y"{ device_info_t *d; int i, found = 0; for (d = root_device; d; d = d->next) { for (i = 0; i < d->modules; i++) if (strcmp(yyvsp[-2].str, d->module[i]) == 0) break; if (i < d->modules) { if (d->opts[i]) free(d->opts[i]); d->opts[i] = strdup(yyvsp[0].str); found = 1; } } free(yyvsp[-2].str); free(yyvsp[0].str); if (!found) { yyerror("module name '%s' not found", yyvsp[-2].str); YYERROR; } }break;case 44:#line 351 "yacc_config.y"{ if (add_module(yyvsp[-2].device, yyvsp[0].str) != 0) YYERROR; }break;case 45:#line 356 "yacc_config.y"{ if (yyvsp[-2].device->opts[yyvsp[-2].device->modules-1] == NULL) { yyvsp[-2].device->opts[yyvsp[-2].device->modules-1] = yyvsp[0].str; } else { yyerror("too many module options for '%s'", yyvsp[-2].device->module[yyvsp[-2].device->modules-1]); YYERROR; } }break;case 46:#line 366 "yacc_config.y"{ if (add_module(yyvsp[-2].device, yyvsp[0].str) != 0) YYERROR; }break;case 47:#line 373 "yacc_config.y"{ if (yyvsp[-2].device->class != NULL) { yyerror("extra class string '%s'", yyvsp[0].str); YYERROR; } yyvsp[-2].device->class = yyvsp[0].str; }break;case 48:#line 383 "yacc_config.y"{ yyval.mtd = calloc(sizeof(mtd_ident_t), 1); yyval.mtd->refs = 1; yyval.mtd->name = yyvsp[0].str; }break;case 52:#line 394 "yacc_config.y"{ if (yyvsp[-2].mtd->mtd_type) { yyerror("ID method already defined for '%s'", yyvsp[-2].mtd->name); YYERROR; } yyvsp[-2].mtd->mtd_type = DTYPE_MTD; yyvsp[-2].mtd->dtype = yyvsp[0].num; }break;case 53:#line 405 "yacc_config.y"{ if (yyvsp[-3].mtd->mtd_type) { yyerror("ID method already defined for '%s'", yyvsp[-3].mtd->name); YYERROR; } yyvsp[-3].mtd->mtd_type = JEDEC_MTD; yyvsp[-3].mtd->jedec_mfr = yyvsp[-1].num; yyvsp[-3].mtd->jedec_info = yyvsp[0].num; }break;case 54:#line 417 "yacc_config.y"{ if (yyvsp[-1].mtd->mtd_type) { yyerror("ID method already defined for '%s'", yyvsp[-1].mtd->name); YYERROR; } if (default_mtd) { yyerror("Default MTD already defined"); YYERROR; } yyvsp[-1].mtd->mtd_type = DEFAULT_MTD; default_mtd = yyvsp[-1].mtd; }break;case 55:#line 432 "yacc_config.y"{ if (yyvsp[-2].mtd->module != NULL) { yyerror("extra MTD entry for '%s'", yyvsp[-2].mtd->name); YYERROR; } yyvsp[-2].mtd->module = yyvsp[0].str; }break;case 56:#line 440 "yacc_config.y"{ if (yyvsp[-2].mtd->opts == NULL) { yyvsp[-2].mtd->opts = yyvsp[0].str; } else { yyerror("too many module options for '%s'", yyvsp[-2].mtd->module); YYERROR; } }break;case 57:#line 451 "yacc_config.y"{ mtd_ident_t *m; int found = 0; for (m = root_mtd; m; m = m->next) if (strcmp(yyvsp[-2].str, m->module) == 0) break; if (m) { if (m->opts) free(m->opts); m->opts = strdup(yyvsp[0].str); found = 1; } free(yyvsp[-2].str); free(yyvsp[0].str); if (!found) { yyerror("MTD name '%s' not found", yyvsp[-2].str); YYERROR; } }break;#line 1042 "y.tab.c" } yyssp -= yym; yystate = *yyssp; yyvsp -= yym; yym = yylhs[yyn]; if (yystate == 0 && yym == 0) {#if YYDEBUG if (yydebug) printf("%sdebug: after reduction, shifting from state 0 to\ state %d\n", YYPREFIX, YYFINAL);#endif yystate = YYFINAL; *++yyssp = YYFINAL; *++yyvsp = yyval; if (yychar < 0) { if ((yychar = yylex()) < 0) yychar = 0;#if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); }#endif } if (yychar == 0) goto yyaccept; goto yyloop; } if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym];#if YYDEBUG if (yydebug) printf("%sdebug: after reduction, shifting from state %d \to state %d\n", YYPREFIX, *yyssp, yystate);#endif if (yyssp >= yysslim && yygrowstack()) { goto yyoverflow; } *++yyssp = yystate; *++yyvsp = yyval; goto yyloop;yyoverflow: yyerror("yacc stack overflow");yyabort: return (1);yyaccept: return (0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -