Lines Matching +full:hw +full:- +full:flow +full:- +full:ctrl

1 // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2 /* Copyright (C) 2015-2018 Netronome Systems, Inc. */
18 return (struct nfp_flower_cmsg_hdr *)skb->data; in nfp_flower_cmsg_get_hdr()
35 ch->pad = 0; in nfp_flower_cmsg_alloc()
36 ch->version = NFP_FLOWER_CMSG_VER1; in nfp_flower_cmsg_alloc()
37 ch->type = type; in nfp_flower_cmsg_alloc()
55 memset(msg->reserved, 0, sizeof(msg->reserved)); in nfp_flower_cmsg_mac_repr_start()
56 msg->num_ports = num_ports; in nfp_flower_cmsg_mac_repr_start()
69 msg->ports[idx].idx = idx; in nfp_flower_cmsg_mac_repr_add()
70 msg->ports[idx].info = nbi & NFP_FLOWER_CMSG_MAC_REPR_NBI; in nfp_flower_cmsg_mac_repr_add()
71 msg->ports[idx].nbi_port = nbi_port; in nfp_flower_cmsg_mac_repr_add()
72 msg->ports[idx].phys_port = phys_port; in nfp_flower_cmsg_mac_repr_add()
81 skb = nfp_flower_cmsg_alloc(repr->app, sizeof(*msg), in nfp_flower_cmsg_portmod()
84 return -ENOMEM; in nfp_flower_cmsg_portmod()
87 msg->portnum = cpu_to_be32(repr->dst->u.port_info.port_id); in nfp_flower_cmsg_portmod()
88 msg->reserved = 0; in nfp_flower_cmsg_portmod()
89 msg->info = carrier_ok; in nfp_flower_cmsg_portmod()
92 msg->info |= NFP_FLOWER_CMSG_PORTMOD_MTU_CHANGE_ONLY; in nfp_flower_cmsg_portmod()
94 msg->mtu = cpu_to_be16(mtu); in nfp_flower_cmsg_portmod()
96 nfp_ctrl_tx(repr->app->ctrl, skb); in nfp_flower_cmsg_portmod()
106 skb = nfp_flower_cmsg_alloc(repr->app, sizeof(*msg), in nfp_flower_cmsg_portreify()
110 return -ENOMEM; in nfp_flower_cmsg_portreify()
113 msg->portnum = cpu_to_be32(repr->dst->u.port_info.port_id); in nfp_flower_cmsg_portreify()
114 msg->reserved = 0; in nfp_flower_cmsg_portreify()
115 msg->info = cpu_to_be16(exists); in nfp_flower_cmsg_portreify()
117 nfp_ctrl_tx(repr->app->ctrl, skb); in nfp_flower_cmsg_portreify()
125 struct nfp_flower_priv *app_priv = app->priv; in nfp_flower_process_mtu_ack()
130 if (!(msg->info & NFP_FLOWER_CMSG_PORTMOD_MTU_CHANGE_ONLY)) in nfp_flower_process_mtu_ack()
133 spin_lock_bh(&app_priv->mtu_conf.lock); in nfp_flower_process_mtu_ack()
134 if (!app_priv->mtu_conf.requested_val || in nfp_flower_process_mtu_ack()
135 app_priv->mtu_conf.portnum != be32_to_cpu(msg->portnum) || in nfp_flower_process_mtu_ack()
136 be16_to_cpu(msg->mtu) != app_priv->mtu_conf.requested_val) { in nfp_flower_process_mtu_ack()
138 spin_unlock_bh(&app_priv->mtu_conf.lock); in nfp_flower_process_mtu_ack()
142 app_priv->mtu_conf.ack = true; in nfp_flower_process_mtu_ack()
143 app_priv->mtu_conf.requested_val = 0; in nfp_flower_process_mtu_ack()
144 wake_up(&app_priv->mtu_conf.wait_q); in nfp_flower_process_mtu_ack()
145 spin_unlock_bh(&app_priv->mtu_conf.lock); in nfp_flower_process_mtu_ack()
158 link = msg->info & NFP_FLOWER_CMSG_PORTMOD_INFO_LINK; in nfp_flower_cmsg_portmod_rx()
162 netdev = nfp_app_dev_get(app, be32_to_cpu(msg->portnum), NULL); in nfp_flower_cmsg_portmod_rx()
165 nfp_flower_cmsg_warn(app, "ctrl msg for unknown port 0x%08x\n", in nfp_flower_cmsg_portmod_rx()
166 be32_to_cpu(msg->portnum)); in nfp_flower_cmsg_portmod_rx()
172 u16 mtu = be16_to_cpu(msg->mtu); in nfp_flower_cmsg_portmod_rx()
188 struct nfp_flower_priv *priv = app->priv; in nfp_flower_cmsg_portreify_rx()
195 exists = !!nfp_app_dev_get(app, be32_to_cpu(msg->portnum), NULL); in nfp_flower_cmsg_portreify_rx()
198 nfp_flower_cmsg_warn(app, "ctrl msg for unknown port 0x%08x\n", in nfp_flower_cmsg_portreify_rx()
199 be32_to_cpu(msg->portnum)); in nfp_flower_cmsg_portreify_rx()
203 atomic_inc(&priv->reify_replies); in nfp_flower_cmsg_portreify_rx()
204 wake_up(&priv->reify_wait_queue); in nfp_flower_cmsg_portreify_rx()
217 /* msg->count starts at 0 and always assumes at least 1 entry. */ in nfp_flower_cmsg_merge_hint_rx()
218 flow_cnt = msg->count + 1; in nfp_flower_cmsg_merge_hint_rx()
220 if (msg_len < struct_size(msg, flow, flow_cnt)) { in nfp_flower_cmsg_merge_hint_rx()
221 nfp_flower_cmsg_warn(app, "Merge hint ctrl msg too short - %d bytes but expect %zd\n", in nfp_flower_cmsg_merge_hint_rx()
222 msg_len, struct_size(msg, flow, flow_cnt)); in nfp_flower_cmsg_merge_hint_rx()
227 nfp_flower_cmsg_warn(app, "Merge hint contains %d flows - two are expected\n", in nfp_flower_cmsg_merge_hint_rx()
232 priv = app->priv; in nfp_flower_cmsg_merge_hint_rx()
233 mutex_lock(&priv->nfp_fl_lock); in nfp_flower_cmsg_merge_hint_rx()
235 u32 ctx = be32_to_cpu(msg->flow[i].host_ctx); in nfp_flower_cmsg_merge_hint_rx()
239 nfp_flower_cmsg_warn(app, "Invalid flow in merge hint\n"); in nfp_flower_cmsg_merge_hint_rx()
246 if (err == -ENOMEM) in nfp_flower_cmsg_merge_hint_rx()
247 nfp_flower_cmsg_warn(app, "Flow merge memory fail.\n"); in nfp_flower_cmsg_merge_hint_rx()
250 mutex_unlock(&priv->nfp_fl_lock); in nfp_flower_cmsg_merge_hint_rx()
256 struct nfp_flower_priv *app_priv = app->priv; in nfp_flower_cmsg_process_one_rx()
263 type = cmsg_hdr->type; in nfp_flower_cmsg_process_one_rx()
269 if (app_priv->flower_en_feats & NFP_FL_ENABLE_FLOW_MERGE) { in nfp_flower_cmsg_process_one_rx()
290 if (app_priv->flower_en_feats & NFP_FL_ENABLE_LAG) { in nfp_flower_cmsg_process_one_rx()
318 spin_lock_bh(&priv->cmsg_skbs_high.lock); in nfp_flower_cmsg_process_rx()
319 skb_queue_splice_tail_init(&priv->cmsg_skbs_high, &cmsg_joined); in nfp_flower_cmsg_process_rx()
320 spin_unlock_bh(&priv->cmsg_skbs_high.lock); in nfp_flower_cmsg_process_rx()
322 spin_lock_bh(&priv->cmsg_skbs_low.lock); in nfp_flower_cmsg_process_rx()
323 skb_queue_splice_tail_init(&priv->cmsg_skbs_low, &cmsg_joined); in nfp_flower_cmsg_process_rx()
324 spin_unlock_bh(&priv->cmsg_skbs_low.lock); in nfp_flower_cmsg_process_rx()
327 nfp_flower_cmsg_process_one_rx(priv->app, skb); in nfp_flower_cmsg_process_rx()
333 struct nfp_flower_priv *priv = app->priv; in nfp_flower_queue_ctl_msg()
337 skb_head = &priv->cmsg_skbs_high; in nfp_flower_queue_ctl_msg()
339 skb_head = &priv->cmsg_skbs_low; in nfp_flower_queue_ctl_msg()
348 schedule_work(&priv->cmsg_work); in nfp_flower_queue_ctl_msg()
357 if (unlikely(cmsg_hdr->version != NFP_FLOWER_CMSG_VER1)) { in nfp_flower_cmsg_rx()
359 cmsg_hdr->version); in nfp_flower_cmsg_rx()
364 if (cmsg_hdr->type == NFP_FLOWER_CMSG_TYPE_FLOW_STATS) { in nfp_flower_cmsg_rx()
365 /* We need to deal with stats updates from HW asap */ in nfp_flower_cmsg_rx()
368 } else if (cmsg_hdr->type == NFP_FLOWER_CMSG_TYPE_PORT_MOD && in nfp_flower_cmsg_rx()
372 } else if (cmsg_hdr->type == NFP_FLOWER_CMSG_TYPE_TUN_NEIGH || in nfp_flower_cmsg_rx()
373 cmsg_hdr->type == NFP_FLOWER_CMSG_TYPE_TUN_NEIGH_V6) { in nfp_flower_cmsg_rx()
374 /* Acks from the NFP that the route is added - ignore. */ in nfp_flower_cmsg_rx()
376 } else if (cmsg_hdr->type == NFP_FLOWER_CMSG_TYPE_PORT_REIFY) { in nfp_flower_cmsg_rx()
381 nfp_flower_queue_ctl_msg(app, skb, cmsg_hdr->type); in nfp_flower_cmsg_rx()