Lines Matching refs:flow

371 				struct macsec_flow *flow)
374 enum macsec_bank bank = flow->bank;
375 u32 val, match = 0, mask = 0, action = 0, idx = flow->index;
377 if (flow->match.tagged)
379 if (flow->match.untagged)
382 if (bank == MACSEC_INGR && flow->assoc_num >= 0) {
383 match |= MSCC_MS_SAM_MISC_MATCH_AN(flow->assoc_num);
387 if (bank == MACSEC_INGR && flow->match.sci && flow->rx_sa->sc->sci) {
388 u64 sci = (__force u64)flow->rx_sa->sc->sci;
400 if (flow->match.etype) {
404 MSCC_MS_SAM_MAC_SA_MATCH_HI_ETYPE((__force u32)htons(flow->etype)));
407 match |= MSCC_MS_SAM_MISC_MATCH_PRIORITY(flow->priority);
413 if (flow->action.drop)
415 else if (flow->action.bypass || flow->port == MSCC_MS_PORT_UNCONTROLLED)
423 MSCC_MS_SAM_FLOW_CTRL_DEST_PORT(flow->port);
462 struct macsec_flow *flow)
464 enum macsec_bank bank = flow->bank;
465 u32 val, idx = flow->index;
467 if ((flow->bank == MACSEC_INGR && flow->rx_sa && !flow->rx_sa->active) ||
468 (flow->bank == MACSEC_EGR && flow->tx_sa && !flow->tx_sa->active))
481 struct macsec_flow *flow)
483 enum macsec_bank bank = flow->bank;
484 u32 val, idx = flow->index;
495 static u32 vsc8584_macsec_flow_context_id(struct macsec_flow *flow)
497 if (flow->bank == MACSEC_INGR)
498 return flow->index + MSCC_MS_MAX_FLOWS;
500 return flow->index;
520 struct macsec_flow *flow,
524 enum macsec_bank bank = flow->bank;
525 int i, ret, index = flow->index;
560 vsc8584_macsec_flow_context_id(flow));
577 flow->rx_sa->next_pn : flow->tx_sa->next_pn);
586 sci = (__force u64)(bank == MACSEC_INGR ? flow->rx_sa->sc->sci : priv->secy->sci);
596 flow->has_transformation = true;
605 struct macsec_flow *flow;
613 flow = kzalloc(sizeof(*flow), GFP_KERNEL);
614 if (!flow)
618 flow->index = index;
619 flow->bank = bank;
620 flow->priority = 8;
621 flow->assoc_num = -1;
623 list_add_tail(&flow->list, &priv->macsec_flows);
624 return flow;
628 struct macsec_flow *flow)
630 unsigned long *bitmap = flow->bank == MACSEC_INGR ?
633 list_del(&flow->list);
634 clear_bit(flow->index, bitmap);
635 kfree(flow);
639 struct macsec_flow *flow)
641 flow->port = MSCC_MS_PORT_CONTROLLED;
642 vsc8584_macsec_flow(phydev, flow);
647 struct macsec_flow *flow;
650 flow = vsc8584_macsec_alloc_flow(phydev->priv, MACSEC_INGR);
651 if (IS_ERR(flow))
652 return PTR_ERR(flow);
654 flow->priority = 15;
655 flow->port = MSCC_MS_PORT_UNCONTROLLED;
656 flow->match.tagged = 1;
657 flow->match.untagged = 1;
658 flow->match.etype = 1;
659 flow->etype = ETH_P_PAE;
660 flow->action.bypass = 1;
662 vsc8584_macsec_flow(phydev, flow);
663 vsc8584_macsec_flow_enable(phydev, flow);
666 flow = vsc8584_macsec_alloc_flow(phydev->priv, MACSEC_EGR);
667 if (IS_ERR(flow))
668 return PTR_ERR(flow);
670 flow->priority = 15;
671 flow->port = MSCC_MS_PORT_COMMON;
672 flow->match.untagged = 1;
673 flow->match.etype = 1;
674 flow->etype = ETH_P_PAE;
675 flow->action.bypass = 1;
677 vsc8584_macsec_flow(phydev, flow);
678 vsc8584_macsec_flow_enable(phydev, flow);
684 struct macsec_flow *flow)
686 vsc8584_macsec_flow_disable(phydev, flow);
687 vsc8584_macsec_free_flow(phydev->priv, flow);
691 struct macsec_flow *flow, bool update)
697 flow->assoc_num = ctx->sa.assoc_num;
698 flow->rx_sa = ctx->sa.rx_sa;
701 flow->match.tagged = 1;
702 flow->match.sci = 1;
705 flow->match.untagged = 1;
707 vsc8584_macsec_add_flow(phydev, flow);
712 ret = vsc8584_macsec_transformation(phydev, flow, ctx->sa.key);
714 vsc8584_macsec_free_flow(phydev->priv, flow);
720 struct macsec_flow *flow, bool update)
724 flow->assoc_num = ctx->sa.assoc_num;
725 flow->tx_sa = ctx->sa.tx_sa;
728 flow->match.untagged = 1;
730 vsc8584_macsec_add_flow(ctx->phydev, flow);
735 ret = vsc8584_macsec_transformation(ctx->phydev, flow, ctx->sa.key);
737 vsc8584_macsec_free_flow(ctx->phydev->priv, flow);
745 struct macsec_flow *flow, *tmp;
747 list_for_each_entry_safe(flow, tmp, &priv->macsec_flows, list)
748 vsc8584_macsec_flow_enable(ctx->phydev, flow);
756 struct macsec_flow *flow, *tmp;
758 list_for_each_entry_safe(flow, tmp, &priv->macsec_flows, list)
759 vsc8584_macsec_flow_disable(ctx->phydev, flow);
785 struct macsec_flow *flow, *tmp;
787 list_for_each_entry_safe(flow, tmp, &priv->macsec_flows, list)
788 vsc8584_macsec_del_flow(ctx->phydev, flow);
817 struct macsec_flow *flow, *tmp;
819 list_for_each_entry_safe(flow, tmp, &priv->macsec_flows, list) {
820 if (flow->bank == MACSEC_INGR && flow->rx_sa &&
821 flow->rx_sa->sc->sci == ctx->rx_sc->sci)
822 vsc8584_macsec_del_flow(ctx->phydev, flow);
832 struct macsec_flow *flow;
835 flow = vsc8584_macsec_alloc_flow(priv, MACSEC_INGR);
836 if (IS_ERR(flow))
837 return PTR_ERR(flow);
839 ret = __vsc8584_macsec_add_rxsa(ctx, flow, false);
843 vsc8584_macsec_flow_enable(phydev, flow);
849 struct macsec_flow *flow;
855 flow = vsc8584_macsec_find_flow(ctx, MACSEC_INGR);
856 if (IS_ERR(flow))
857 return PTR_ERR(flow);
859 /* Make sure the flow is disabled before updating it */
860 vsc8584_macsec_flow_disable(ctx->phydev, flow);
862 ret = __vsc8584_macsec_add_rxsa(ctx, flow, true);
866 vsc8584_macsec_flow_enable(ctx->phydev, flow);
872 struct macsec_flow *flow;
874 flow = vsc8584_macsec_find_flow(ctx, MACSEC_INGR);
875 if (IS_ERR(flow))
876 return PTR_ERR(flow);
878 vsc8584_macsec_del_flow(ctx->phydev, flow);
886 struct macsec_flow *flow;
889 flow = vsc8584_macsec_alloc_flow(priv, MACSEC_EGR);
890 if (IS_ERR(flow))
891 return PTR_ERR(flow);
893 ret = __vsc8584_macsec_add_txsa(ctx, flow, false);
897 vsc8584_macsec_flow_enable(phydev, flow);
903 struct macsec_flow *flow;
909 flow = vsc8584_macsec_find_flow(ctx, MACSEC_EGR);
910 if (IS_ERR(flow))
911 return PTR_ERR(flow);
913 /* Make sure the flow is disabled before updating it */
914 vsc8584_macsec_flow_disable(ctx->phydev, flow);
916 ret = __vsc8584_macsec_add_txsa(ctx, flow, true);
920 vsc8584_macsec_flow_enable(ctx->phydev, flow);
926 struct macsec_flow *flow;
928 flow = vsc8584_macsec_find_flow(ctx, MACSEC_EGR);
929 if (IS_ERR(flow))
930 return PTR_ERR(flow);
932 vsc8584_macsec_del_flow(ctx->phydev, flow);
975 struct macsec_flow *flow, *tmp;
986 list_for_each_entry_safe(flow, tmp, &priv->macsec_flows, list) {
989 if (flow->bank != MACSEC_EGR || !flow->has_transformation)
993 MSCC_MS_XFORM_REC(flow->index, rec));
995 vsc8584_macsec_flow_disable(phydev, flow);
996 macsec_pn_wrapped(priv->secy, flow->tx_sa);