Lines Matching +full:lan966x +full:- +full:switch

1 // SPDX-License-Identifier: GPL-2.0+
13 switch (st->admin->vtype) { in lan966x_tc_is_known_etype()
15 switch (etype) { in lan966x_tc_is_known_etype()
24 switch (etype) { in lan966x_tc_is_known_etype()
37 NL_SET_ERR_MSG_MOD(st->fco->common.extack, in lan966x_tc_is_known_etype()
51 flow_rule_match_control(st->frule, &match); in lan966x_tc_flower_handler_control_usage()
52 if (match.mask->flags & FLOW_DIS_IS_FRAGMENT) { in lan966x_tc_flower_handler_control_usage()
53 if (match.key->flags & FLOW_DIS_IS_FRAGMENT) in lan966x_tc_flower_handler_control_usage()
54 err = vcap_rule_add_key_bit(st->vrule, in lan966x_tc_flower_handler_control_usage()
58 err = vcap_rule_add_key_bit(st->vrule, in lan966x_tc_flower_handler_control_usage()
65 if (match.mask->flags & FLOW_DIS_FIRST_FRAG) { in lan966x_tc_flower_handler_control_usage()
66 if (match.key->flags & FLOW_DIS_FIRST_FRAG) in lan966x_tc_flower_handler_control_usage()
67 err = vcap_rule_add_key_bit(st->vrule, in lan966x_tc_flower_handler_control_usage()
71 err = vcap_rule_add_key_bit(st->vrule, in lan966x_tc_flower_handler_control_usage()
78 st->used_keys |= BIT_ULL(FLOW_DISSECTOR_KEY_CONTROL); in lan966x_tc_flower_handler_control_usage()
83 NL_SET_ERR_MSG_MOD(st->fco->common.extack, "ip_frag parse error"); in lan966x_tc_flower_handler_control_usage()
93 flow_rule_match_basic(st->frule, &match); in lan966x_tc_flower_handler_basic_usage()
94 if (match.mask->n_proto) { in lan966x_tc_flower_handler_basic_usage()
95 st->l3_proto = be16_to_cpu(match.key->n_proto); in lan966x_tc_flower_handler_basic_usage()
96 if (!lan966x_tc_is_known_etype(st, st->l3_proto)) { in lan966x_tc_flower_handler_basic_usage()
97 err = vcap_rule_add_key_u32(st->vrule, VCAP_KF_ETYPE, in lan966x_tc_flower_handler_basic_usage()
98 st->l3_proto, ~0); in lan966x_tc_flower_handler_basic_usage()
101 } else if (st->l3_proto == ETH_P_IP) { in lan966x_tc_flower_handler_basic_usage()
102 err = vcap_rule_add_key_bit(st->vrule, VCAP_KF_IP4_IS, in lan966x_tc_flower_handler_basic_usage()
106 } else if (st->l3_proto == ETH_P_IPV6 && in lan966x_tc_flower_handler_basic_usage()
107 st->admin->vtype == VCAP_TYPE_IS1) { in lan966x_tc_flower_handler_basic_usage()
109 } else if (st->l3_proto == ETH_P_SNAP && in lan966x_tc_flower_handler_basic_usage()
110 st->admin->vtype == VCAP_TYPE_IS1) { in lan966x_tc_flower_handler_basic_usage()
111 err = vcap_rule_add_key_bit(st->vrule, in lan966x_tc_flower_handler_basic_usage()
117 err = vcap_rule_add_key_bit(st->vrule, in lan966x_tc_flower_handler_basic_usage()
122 } else if (st->admin->vtype == VCAP_TYPE_IS1) { in lan966x_tc_flower_handler_basic_usage()
123 err = vcap_rule_add_key_bit(st->vrule, in lan966x_tc_flower_handler_basic_usage()
129 err = vcap_rule_add_key_u32(st->vrule, VCAP_KF_ETYPE, in lan966x_tc_flower_handler_basic_usage()
130 st->l3_proto, ~0); in lan966x_tc_flower_handler_basic_usage()
135 if (match.mask->ip_proto) { in lan966x_tc_flower_handler_basic_usage()
136 st->l4_proto = match.key->ip_proto; in lan966x_tc_flower_handler_basic_usage()
138 if (st->l4_proto == IPPROTO_TCP) { in lan966x_tc_flower_handler_basic_usage()
139 if (st->admin->vtype == VCAP_TYPE_IS1) { in lan966x_tc_flower_handler_basic_usage()
140 err = vcap_rule_add_key_bit(st->vrule, in lan966x_tc_flower_handler_basic_usage()
147 err = vcap_rule_add_key_bit(st->vrule, in lan966x_tc_flower_handler_basic_usage()
152 } else if (st->l4_proto == IPPROTO_UDP) { in lan966x_tc_flower_handler_basic_usage()
153 if (st->admin->vtype == VCAP_TYPE_IS1) { in lan966x_tc_flower_handler_basic_usage()
154 err = vcap_rule_add_key_bit(st->vrule, in lan966x_tc_flower_handler_basic_usage()
161 err = vcap_rule_add_key_bit(st->vrule, in lan966x_tc_flower_handler_basic_usage()
167 err = vcap_rule_add_key_u32(st->vrule, in lan966x_tc_flower_handler_basic_usage()
169 st->l4_proto, ~0); in lan966x_tc_flower_handler_basic_usage()
175 st->used_keys |= BIT_ULL(FLOW_DISSECTOR_KEY_BASIC); in lan966x_tc_flower_handler_basic_usage()
178 NL_SET_ERR_MSG_MOD(st->fco->common.extack, "ip_proto parse error"); in lan966x_tc_flower_handler_basic_usage()
185 if (st->admin->vtype != VCAP_TYPE_IS1) { in lan966x_tc_flower_handler_cvlan_usage()
186 NL_SET_ERR_MSG_MOD(st->fco->common.extack, in lan966x_tc_flower_handler_cvlan_usage()
188 return -EINVAL; in lan966x_tc_flower_handler_cvlan_usage()
200 if (st->admin->vtype == VCAP_TYPE_IS1) { in lan966x_tc_flower_handler_vlan_usage()
260 struct flow_action *act = &rule->action; in lan966x_tc_flower_action_check()
265 NL_SET_ERR_MSG_MOD(fco->common.extack, "No actions"); in lan966x_tc_flower_action_check()
266 return -EINVAL; in lan966x_tc_flower_action_check()
269 if (!flow_action_basic_hw_stats_check(act, fco->common.extack)) in lan966x_tc_flower_action_check()
270 return -EOPNOTSUPP; in lan966x_tc_flower_action_check()
273 if (action_mask & BIT(actent->id)) { in lan966x_tc_flower_action_check()
274 NL_SET_ERR_MSG_MOD(fco->common.extack, in lan966x_tc_flower_action_check()
276 return -EINVAL; in lan966x_tc_flower_action_check()
278 action_mask |= BIT(actent->id); in lan966x_tc_flower_action_check()
285 if (last_actent->id == FLOW_ACTION_GOTO) { in lan966x_tc_flower_action_check()
287 if (!vcap_is_next_lookup(vctrl, fco->common.chain_index, in lan966x_tc_flower_action_check()
288 last_actent->chain_index)) { in lan966x_tc_flower_action_check()
289 NL_SET_ERR_MSG_MOD(fco->common.extack, in lan966x_tc_flower_action_check()
291 return -EINVAL; in lan966x_tc_flower_action_check()
293 } else if (!vcap_is_last_chain(vctrl, fco->common.chain_index, in lan966x_tc_flower_action_check()
295 NL_SET_ERR_MSG_MOD(fco->common.extack, in lan966x_tc_flower_action_check()
297 return -EINVAL; in lan966x_tc_flower_action_check()
303 NL_SET_ERR_MSG_MOD(fco->common.extack, in lan966x_tc_flower_action_check()
305 return -EOPNOTSUPP; in lan966x_tc_flower_action_check()
318 switch (admin->vtype) { in lan966x_tc_set_actionset()
329 return -EINVAL; in lan966x_tc_set_actionset()
333 if (vrule->actionset == VCAP_AFS_NO_VALUE) in lan966x_tc_set_actionset()
349 switch (admin->vtype) { in lan966x_tc_add_rule_link_target()
383 NL_SET_ERR_MSG_MOD(f->common.extack, in lan966x_tc_add_rule_link()
385 return -EINVAL; in lan966x_tc_add_rule_link()
388 diff = vcap_chain_offset(vctrl, f->common.chain_index, to_cid); in lan966x_tc_add_rule_link()
393 if (admin->vtype == VCAP_TYPE_IS1 && to_admin->vtype == VCAP_TYPE_IS2) { in lan966x_tc_add_rule_link()
394 /* This works for IS1->IS2 */ in lan966x_tc_add_rule_link()
403 } else if (admin->vtype == VCAP_TYPE_IS1 && in lan966x_tc_add_rule_link()
404 to_admin->vtype == VCAP_TYPE_ES0) { in lan966x_tc_add_rule_link()
405 /* This works for IS1->ES0 */ in lan966x_tc_add_rule_link()
416 NL_SET_ERR_MSG_MOD(f->common.extack, in lan966x_tc_add_rule_link()
418 return -EOPNOTSUPP; in lan966x_tc_add_rule_link()
429 switch (admin->vtype) { in lan966x_tc_add_rule_counter()
432 vrule->id); in lan966x_tc_add_rule_counter()
452 err = lan966x_tc_flower_action_check(port->lan966x->vcap_ctrl, in lan966x_tc_flower_add()
453 port->dev, f, ingress); in lan966x_tc_flower_add()
457 vrule = vcap_alloc_rule(port->lan966x->vcap_ctrl, port->dev, in lan966x_tc_flower_add()
458 f->common.chain_index, VCAP_USER_TC, in lan966x_tc_flower_add()
459 f->common.prio, 0); in lan966x_tc_flower_add()
463 vrule->cookie = f->cookie; in lan966x_tc_flower_add()
469 f->common.chain_index); in lan966x_tc_flower_add()
475 flow_action_for_each(idx, act, &frule->action) { in lan966x_tc_flower_add()
476 switch (act->id) { in lan966x_tc_flower_add()
478 if (admin->vtype != VCAP_TYPE_IS2) { in lan966x_tc_flower_add()
479 NL_SET_ERR_MSG_MOD(f->common.extack, in lan966x_tc_flower_add()
481 err = -EOPNOTSUPP; in lan966x_tc_flower_add()
502 err = lan966x_tc_add_rule_link(port->lan966x->vcap_ctrl, in lan966x_tc_flower_add()
504 f, act->chain_index); in lan966x_tc_flower_add()
510 if (admin->vtype != VCAP_TYPE_ES0) { in lan966x_tc_flower_add()
511 NL_SET_ERR_MSG_MOD(f->common.extack, in lan966x_tc_flower_add()
513 err = -EOPNOTSUPP; in lan966x_tc_flower_add()
525 NL_SET_ERR_MSG_MOD(f->common.extack, in lan966x_tc_flower_add()
527 err = -EOPNOTSUPP; in lan966x_tc_flower_add()
546 NL_SET_ERR_MSG_MOD(f->common.extack, in lan966x_tc_flower_add()
558 int err = -ENOENT, rule_id; in lan966x_tc_flower_del()
560 vctrl = port->lan966x->vcap_ctrl; in lan966x_tc_flower_del()
562 rule_id = vcap_lookup_rule_by_cookie(vctrl, f->cookie); in lan966x_tc_flower_del()
566 err = vcap_del_rule(vctrl, port->dev, rule_id); in lan966x_tc_flower_del()
568 NL_SET_ERR_MSG_MOD(f->common.extack, in lan966x_tc_flower_del()
584 err = vcap_get_rule_count_by_cookie(port->lan966x->vcap_ctrl, in lan966x_tc_flower_stats()
585 &count, f->cookie); in lan966x_tc_flower_stats()
589 flow_stats_update(&f->stats, 0x0, count.value, 0, 0, in lan966x_tc_flower_stats()
601 admin = vcap_find_admin(port->lan966x->vcap_ctrl, in lan966x_tc_flower()
602 f->common.chain_index); in lan966x_tc_flower()
604 NL_SET_ERR_MSG_MOD(f->common.extack, "Invalid chain"); in lan966x_tc_flower()
605 return -EINVAL; in lan966x_tc_flower()
608 switch (f->command) { in lan966x_tc_flower()
616 return -EOPNOTSUPP; in lan966x_tc_flower()