Lines Matching refs:flow

546 npc_mcam_set_channel(struct roc_npc_flow *flow, struct npc_mcam_write_entry_req *req,  in npc_mcam_set_channel()  argument
553 flow->mcam_data[0] &= ~(GENMASK(11, 0)); in npc_mcam_set_channel()
554 flow->mcam_mask[0] &= ~(GENMASK(11, 0)); in npc_mcam_set_channel()
563 if (!(flow->npc_action & NIX_RX_ACTIONOP_UCAST_IPSEC)) { in npc_mcam_set_channel()
578 flow->mcam_data[0] |= (uint64_t)chan; in npc_mcam_set_channel()
579 flow->mcam_mask[0] |= (uint64_t)mask; in npc_mcam_set_channel()
583 npc_mcam_set_pf_func(struct npc *npc, struct roc_npc_flow *flow, uint16_t pf_func) in npc_mcam_set_pf_func() argument
594 flow_mcam_data = (uint8_t *)flow->mcam_data; in npc_mcam_set_pf_func()
595 flow_mcam_mask = (uint8_t *)flow->mcam_mask; in npc_mcam_set_pf_func()
622 npc_mcam_alloc_and_write(struct npc *npc, struct roc_npc_flow *flow, struct npc_parse_state *pst) in npc_mcam_alloc_and_write() argument
643 if (flow->is_inline_dev) in npc_mcam_alloc_and_write()
647 if (flow->use_ctr) { in npc_mcam_alloc_and_write()
652 flow->ctr_id = ctr; in npc_mcam_alloc_and_write()
653 rc = npc_mcam_clear_counter(mbox, flow->ctr_id); in npc_mcam_alloc_and_write()
658 if (flow->nix_intf == NIX_INTF_RX && flow->is_inline_dev && inl_dev && in npc_mcam_alloc_and_write()
664 flow->use_pre_alloc = 1; in npc_mcam_alloc_and_write()
666 entry = npc_get_free_mcam_entry(mbox, flow, npc); in npc_mcam_alloc_and_write()
668 if (flow->use_ctr) in npc_mcam_alloc_and_write()
674 if (flow->nix_intf == NIX_INTF_TX) { in npc_mcam_alloc_and_write()
675 uint16_t pf_func = flow->tx_pf_func; in npc_mcam_alloc_and_write()
677 if (flow->has_rep) in npc_mcam_alloc_and_write()
678 pf_func = flow->rep_pf_func; in npc_mcam_alloc_and_write()
682 rc = npc_mcam_set_pf_func(npc, flow, pf_func); in npc_mcam_alloc_and_write()
687 if (flow->is_sampling_rule) { in npc_mcam_alloc_and_write()
689 uint16_t mark = (flow->npc_action >> 40) & 0xffff; in npc_mcam_alloc_and_write()
693 rqs[1] = flow->recv_queue; in npc_mcam_alloc_and_write()
694 rc = roc_nix_mcast_list_setup(npc->mbox, flow->nix_intf, 2, flow->mcast_pf_funcs, in npc_mcam_alloc_and_write()
695 flow->mcast_channels, rqs, &flow->mcast_grp_index, in npc_mcam_alloc_and_write()
696 &flow->mce_start_index); in npc_mcam_alloc_and_write()
700 flow->npc_action = NIX_RX_ACTIONOP_MCAST; in npc_mcam_alloc_and_write()
701 mce_index = flow->mce_start_index; in npc_mcam_alloc_and_write()
702 if (flow->nix_intf == NIX_INTF_TX) { in npc_mcam_alloc_and_write()
703 flow->npc_action |= (uint64_t)mce_index << 12; in npc_mcam_alloc_and_write()
704 flow->npc_action |= (uint64_t)mark << 32; in npc_mcam_alloc_and_write()
706 flow->npc_action |= (uint64_t)mce_index << 20; in npc_mcam_alloc_and_write()
707 flow->npc_action |= (uint64_t)mark << 40; in npc_mcam_alloc_and_write()
716 req->set_cntr = flow->use_ctr; in npc_mcam_alloc_and_write()
717 req->cntr = flow->ctr_id; in npc_mcam_alloc_and_write()
720 req->intf = (flow->nix_intf == NIX_INTF_RX) ? NPC_MCAM_RX : NPC_MCAM_TX; in npc_mcam_alloc_and_write()
722 if (flow->nix_intf == NIX_INTF_RX) in npc_mcam_alloc_and_write()
723 flow->npc_action |= (uint64_t)flow->recv_queue << 20; in npc_mcam_alloc_and_write()
724 req->entry_data.action = flow->npc_action; in npc_mcam_alloc_and_write()
738 req->entry_data.vtag_action = flow->vtag_action; in npc_mcam_alloc_and_write()
741 req->entry_data.kw[idx] = flow->mcam_data[idx]; in npc_mcam_alloc_and_write()
742 req->entry_data.kw_mask[idx] = flow->mcam_mask[idx]; in npc_mcam_alloc_and_write()
745 if (flow->nix_intf == NIX_INTF_RX) { in npc_mcam_alloc_and_write()
747 (flow->npc_action & NIX_RX_ACTIONOP_UCAST_IPSEC)) { in npc_mcam_alloc_and_write()
751 flow->npc_action &= ~(GENMASK(19, 4)); in npc_mcam_alloc_and_write()
752 flow->npc_action |= (uint64_t)pf_func << 4; in npc_mcam_alloc_and_write()
754 npc_mcam_set_channel(flow, req, inl_dev->channel, inl_dev->chan_mask, in npc_mcam_alloc_and_write()
756 } else if (flow->has_rep) { in npc_mcam_alloc_and_write()
757 pf_func = (flow->rep_act_pf_func == 0) ? flow->rep_pf_func : in npc_mcam_alloc_and_write()
758 flow->rep_act_pf_func; in npc_mcam_alloc_and_write()
761 flow->npc_action &= ~(GENMASK(19, 4)); in npc_mcam_alloc_and_write()
762 flow->npc_action |= (uint64_t)pf_func << 4; in npc_mcam_alloc_and_write()
763 npc_mcam_set_channel(flow, req, flow->rep_channel, (BIT_ULL(12) - 1), in npc_mcam_alloc_and_write()
766 npc_mcam_set_channel(flow, req, npc->sdp_channel, npc->sdp_channel_mask, in npc_mcam_alloc_and_write()
769 npc_mcam_set_channel(flow, req, npc->channel, (BIT_ULL(12) - 1), in npc_mcam_alloc_and_write()
777 la_offset = plt_popcount32(npc->keyx_supp_nmask[flow->nix_intf] & in npc_mcam_alloc_and_write()
784 flow->mcam_data[0] &= mask; in npc_mcam_alloc_and_write()
785 flow->mcam_mask[0] &= mask; in npc_mcam_alloc_and_write()
789 flow->mcam_data[0] |= ((uint64_t)NPC_LT_LA_CPT_HDR) << la_offset; in npc_mcam_alloc_and_write()
790 flow->mcam_mask[0] |= (0xFULL << la_offset); in npc_mcam_alloc_and_write()
795 flow->mcam_data[0] |= (0x2ULL << la_offset); in npc_mcam_alloc_and_write()
796 flow->mcam_mask[0] |= (0x7ULL << la_offset); in npc_mcam_alloc_and_write()
805 flow->mcam_id = entry; in npc_mcam_alloc_and_write()
807 if (flow->use_ctr) in npc_mcam_alloc_and_write()
808 flow->ctr_id = ctr; in npc_mcam_alloc_and_write()
814 roc_nix_mcast_list_free(npc->mbox, flow->mcast_grp_index); in npc_mcam_alloc_and_write()
830 pst->flow->mcam_data[0] &= mask; in npc_set_vlan_ltype()
831 pst->flow->mcam_mask[0] &= mask; in npc_set_vlan_ltype()
836 pst->flow->mcam_data[0] |= val; in npc_set_vlan_ltype()
837 pst->flow->mcam_mask[0] |= (0xeULL << lb_offset); in npc_set_vlan_ltype()
852 pst->flow->mcam_data[0] &= mask; in npc_set_ipv6ext_ltype_mask()
853 pst->flow->mcam_mask[0] &= mask; in npc_set_ipv6ext_ltype_mask()
858 pst->flow->mcam_data[0] |= val; in npc_set_ipv6ext_ltype_mask()
859 pst->flow->mcam_mask[0] |= (0xeULL << lc_offset); in npc_set_ipv6ext_ltype_mask()
875 val = pst->flow->mcam_data[0] & mask; in npc_set_ipv6ext_ltype_mask()
877 pst->flow->mcam_mask[0] |= mask; in npc_set_ipv6ext_ltype_mask()
890 int intf = pst->flow->nix_intf; in npc_program_mcam()
951 memcpy(pst->flow->mcam_data, key_data, key_len); in npc_program_mcam()
952 memcpy(pst->flow->mcam_mask, key_mask, key_len); in npc_program_mcam()
964 (pst->flow->npc_action & NIX_RX_ACTIONOP_UCAST_IPSEC)) in npc_program_mcam()
967 if ((pst->is_vf || pst->flow->is_rep_vf) && pst->flow->nix_intf == NIX_INTF_RX && in npc_program_mcam()
969 if (pst->flow->has_rep) in npc_program_mcam()
970 mbox = mbox_get(pst->flow->rep_mbox); in npc_program_mcam()
983 pst->flow->mcam_data[idx] |= base_entry->kw[idx]; in npc_program_mcam()
984 pst->flow->mcam_mask[idx] |= base_entry->kw_mask[idx]; in npc_program_mcam()
997 return npc_mcam_alloc_and_write(npc, pst->flow, pst); in npc_program_mcam()
1007 struct roc_npc_flow *flow; in npc_flow_enable_all_entries() local
1014 TAILQ_FOREACH(flow, list, next) { in npc_flow_enable_all_entries()
1015 flow->enable = enable; in npc_flow_enable_all_entries()
1016 rc = npc_mcam_write_entry(npc->mbox, flow); in npc_flow_enable_all_entries()
1029 TAILQ_FOREACH(flow, list, next) { in npc_flow_enable_all_entries()
1030 flow->enable = enable; in npc_flow_enable_all_entries()
1031 rc = npc_mcam_write_entry(inl_dev->dev.mbox, flow); in npc_flow_enable_all_entries()
1042 struct roc_npc_flow *flow; in npc_flow_free_all_resources() local
1050 while ((flow = TAILQ_FIRST(&npc->flow_list[idx])) != NULL) { in npc_flow_free_all_resources()
1051 npc_rss_group_free(npc, flow); in npc_flow_free_all_resources()
1052 if (flow->ctr_id != NPC_COUNTER_NONE) { in npc_flow_free_all_resources()
1053 rc |= npc_mcam_clear_counter(npc->mbox, flow->ctr_id); in npc_flow_free_all_resources()
1054 rc |= npc_mcam_free_counter(npc->mbox, flow->ctr_id); in npc_flow_free_all_resources()
1057 if (flow->is_sampling_rule) in npc_flow_free_all_resources()
1058 roc_nix_mcast_list_free(npc->mbox, flow->mcast_grp_index); in npc_flow_free_all_resources()
1060 npc_delete_prio_list_entry(npc, flow); in npc_flow_free_all_resources()
1062 TAILQ_REMOVE(&npc->flow_list[idx], flow, next); in npc_flow_free_all_resources()
1063 plt_free(flow); in npc_flow_free_all_resources()