Lines Matching refs:dfa
153 static int verify_dfa(struct aa_dfa *dfa) in verify_dfa() argument
158 state_count = dfa->tables[YYTD_ID_BASE]->td_lolen; in verify_dfa()
159 trans_count = dfa->tables[YYTD_ID_NXT]->td_lolen; in verify_dfa()
163 if (!(BASE_TABLE(dfa)[i] & MATCH_FLAG_DIFF_ENCODE) && in verify_dfa()
164 (DEFAULT_TABLE(dfa)[i] >= state_count)) in verify_dfa()
166 if (BASE_TABLE(dfa)[i] & MATCH_FLAGS_INVALID) { in verify_dfa()
170 if ((BASE_TABLE(dfa)[i] & MATCH_FLAG_DIFF_ENCODE)) { in verify_dfa()
171 if (!(dfa->flags & YYTH_FLAG_DIFF_ENCODE)) { in verify_dfa()
176 if ((BASE_TABLE(dfa)[i] & MATCH_FLAG_OOB_TRANSITION)) { in verify_dfa()
177 if (base_idx(BASE_TABLE(dfa)[i]) < dfa->max_oob) { in verify_dfa()
181 if (!(dfa->flags & YYTH_FLAG_OOB_TRANS)) { in verify_dfa()
186 if (base_idx(BASE_TABLE(dfa)[i]) + 255 >= trans_count) { in verify_dfa()
193 if (NEXT_TABLE(dfa)[i] >= state_count) in verify_dfa() local
195 if (CHECK_TABLE(dfa)[i] >= state_count) in verify_dfa() local
204 (BASE_TABLE(dfa)[j] & MATCH_FLAG_DIFF_ENCODE) && in verify_dfa()
205 !(BASE_TABLE(dfa)[j] & MARK_DIFF_ENCODE); in verify_dfa()
207 k = DEFAULT_TABLE(dfa)[j]; in verify_dfa()
212 BASE_TABLE(dfa)[j] |= MARK_DIFF_ENCODE; in verify_dfa() local
227 static void dfa_free(struct aa_dfa *dfa) in dfa_free() argument
229 if (dfa) { in dfa_free()
232 for (i = 0; i < ARRAY_SIZE(dfa->tables); i++) { in dfa_free()
233 kvfree(dfa->tables[i]); in dfa_free()
234 dfa->tables[i] = NULL; in dfa_free()
236 kfree(dfa); in dfa_free()
246 struct aa_dfa *dfa = container_of(kref, struct aa_dfa, count); in aa_dfa_free_kref() local
247 dfa_free(dfa); in aa_dfa_free_kref()
268 struct aa_dfa *dfa = kzalloc(sizeof(struct aa_dfa), GFP_KERNEL); in aa_dfa_unpack() local
269 if (!dfa) in aa_dfa_unpack()
272 kref_init(&dfa->count); in aa_dfa_unpack()
287 dfa->flags = ntohs(*(__be16 *) (data + 12)); in aa_dfa_unpack()
288 if (dfa->flags & ~(YYTH_FLAGS)) in aa_dfa_unpack()
303 dfa->max_oob = 1; in aa_dfa_unpack()
340 if (dfa->tables[table->td_id]) in aa_dfa_unpack()
342 dfa->tables[table->td_id] = table; in aa_dfa_unpack()
347 error = verify_table_headers(dfa->tables, flags); in aa_dfa_unpack()
352 error = verify_dfa(dfa); in aa_dfa_unpack()
357 return dfa; in aa_dfa_unpack()
361 dfa_free(dfa); in aa_dfa_unpack()
395 aa_state_t aa_dfa_match_len(struct aa_dfa *dfa, aa_state_t start, in aa_dfa_match_len() argument
398 u16 *def = DEFAULT_TABLE(dfa); in aa_dfa_match_len()
399 u32 *base = BASE_TABLE(dfa); in aa_dfa_match_len()
400 u16 *next = NEXT_TABLE(dfa); in aa_dfa_match_len()
401 u16 *check = CHECK_TABLE(dfa); in aa_dfa_match_len()
408 if (dfa->tables[YYTD_ID_EC]) { in aa_dfa_match_len()
410 u8 *equiv = EQUIV_TABLE(dfa); in aa_dfa_match_len()
435 aa_state_t aa_dfa_match(struct aa_dfa *dfa, aa_state_t start, const char *str) in aa_dfa_match() argument
437 u16 *def = DEFAULT_TABLE(dfa); in aa_dfa_match()
438 u32 *base = BASE_TABLE(dfa); in aa_dfa_match()
439 u16 *next = NEXT_TABLE(dfa); in aa_dfa_match()
440 u16 *check = CHECK_TABLE(dfa); in aa_dfa_match()
447 if (dfa->tables[YYTD_ID_EC]) { in aa_dfa_match()
449 u8 *equiv = EQUIV_TABLE(dfa); in aa_dfa_match()
473 aa_state_t aa_dfa_next(struct aa_dfa *dfa, aa_state_t state, const char c) in aa_dfa_next() argument
475 u16 *def = DEFAULT_TABLE(dfa); in aa_dfa_next()
476 u32 *base = BASE_TABLE(dfa); in aa_dfa_next()
477 u16 *next = NEXT_TABLE(dfa); in aa_dfa_next()
478 u16 *check = CHECK_TABLE(dfa); in aa_dfa_next()
481 if (dfa->tables[YYTD_ID_EC]) { in aa_dfa_next()
483 u8 *equiv = EQUIV_TABLE(dfa); in aa_dfa_next()
491 aa_state_t aa_dfa_outofband_transition(struct aa_dfa *dfa, aa_state_t state) in aa_dfa_outofband_transition() argument
493 u16 *def = DEFAULT_TABLE(dfa); in aa_dfa_outofband_transition()
494 u32 *base = BASE_TABLE(dfa); in aa_dfa_outofband_transition()
495 u16 *next = NEXT_TABLE(dfa); in aa_dfa_outofband_transition()
496 u16 *check = CHECK_TABLE(dfa); in aa_dfa_outofband_transition()
521 aa_state_t aa_dfa_match_until(struct aa_dfa *dfa, aa_state_t start, in aa_dfa_match_until() argument
524 u16 *def = DEFAULT_TABLE(dfa); in aa_dfa_match_until()
525 u32 *base = BASE_TABLE(dfa); in aa_dfa_match_until()
526 u16 *next = NEXT_TABLE(dfa); in aa_dfa_match_until()
527 u16 *check = CHECK_TABLE(dfa); in aa_dfa_match_until()
528 u32 *accept = ACCEPT_TABLE(dfa); in aa_dfa_match_until()
535 if (dfa->tables[YYTD_ID_EC]) { in aa_dfa_match_until()
537 u8 *equiv = EQUIV_TABLE(dfa); in aa_dfa_match_until()
582 aa_state_t aa_dfa_matchn_until(struct aa_dfa *dfa, aa_state_t start, in aa_dfa_matchn_until() argument
585 u16 *def = DEFAULT_TABLE(dfa); in aa_dfa_matchn_until()
586 u32 *base = BASE_TABLE(dfa); in aa_dfa_matchn_until()
587 u16 *next = NEXT_TABLE(dfa); in aa_dfa_matchn_until()
588 u16 *check = CHECK_TABLE(dfa); in aa_dfa_matchn_until()
589 u32 *accept = ACCEPT_TABLE(dfa); in aa_dfa_matchn_until()
597 if (dfa->tables[YYTD_ID_EC]) { in aa_dfa_matchn_until()
599 u8 *equiv = EQUIV_TABLE(dfa); in aa_dfa_matchn_until()
657 static aa_state_t leftmatch_fb(struct aa_dfa *dfa, aa_state_t start, in leftmatch_fb() argument
661 u16 *def = DEFAULT_TABLE(dfa); in leftmatch_fb()
662 u32 *base = BASE_TABLE(dfa); in leftmatch_fb()
663 u16 *next = NEXT_TABLE(dfa); in leftmatch_fb()
664 u16 *check = CHECK_TABLE(dfa); in leftmatch_fb()
667 AA_BUG(!dfa); in leftmatch_fb()
677 if (dfa->tables[YYTD_ID_EC]) { in leftmatch_fb()
679 u8 *equiv = EQUIV_TABLE(dfa); in leftmatch_fb()
691 state = aa_dfa_match(dfa, state, str); in leftmatch_fb()
710 state = aa_dfa_match(dfa, state, str); in leftmatch_fb()
738 aa_state_t aa_dfa_leftmatch(struct aa_dfa *dfa, aa_state_t start, in aa_dfa_leftmatch() argument
745 return leftmatch_fb(dfa, start, str, &wb, count); in aa_dfa_leftmatch()