Lines Matching full:app
28 static const char *nfp_flower_extra_cap(struct nfp_app *app, struct nfp_net *nn) in nfp_flower_extra_cap() argument
33 static enum devlink_eswitch_mode eswitch_mode_get(struct nfp_app *app) in eswitch_mode_get() argument
57 nfp_flower_get_internal_port_id(struct nfp_app *app, struct net_device *netdev) in nfp_flower_get_internal_port_id() argument
59 struct nfp_flower_priv *priv = app->priv; in nfp_flower_get_internal_port_id()
76 u32 nfp_flower_get_port_id_from_netdev(struct nfp_app *app, in nfp_flower_get_port_id_from_netdev() argument
79 struct nfp_flower_priv *priv = app->priv; in nfp_flower_get_port_id_from_netdev()
85 } else if (nfp_flower_internal_port_can_offload(app, netdev)) { in nfp_flower_get_port_id_from_netdev()
86 ext_port = nfp_flower_get_internal_port_id(app, netdev); in nfp_flower_get_port_id_from_netdev()
93 gid = nfp_flower_lag_get_output_id(app, netdev); in nfp_flower_get_port_id_from_netdev()
104 nfp_flower_get_netdev_from_internal_port_id(struct nfp_app *app, int port_id) in nfp_flower_get_netdev_from_internal_port_id() argument
106 struct nfp_flower_priv *priv = app->priv; in nfp_flower_get_netdev_from_internal_port_id()
117 nfp_flower_free_internal_port_id(struct nfp_app *app, struct net_device *netdev) in nfp_flower_free_internal_port_id() argument
119 struct nfp_flower_priv *priv = app->priv; in nfp_flower_free_internal_port_id()
132 nfp_flower_internal_port_event_handler(struct nfp_app *app, in nfp_flower_internal_port_event_handler() argument
137 nfp_flower_internal_port_can_offload(app, netdev)) in nfp_flower_internal_port_event_handler()
138 nfp_flower_free_internal_port_id(app, netdev); in nfp_flower_internal_port_event_handler()
155 nfp_flower_non_repr_priv_lookup(struct nfp_app *app, struct net_device *netdev) in nfp_flower_non_repr_priv_lookup() argument
157 struct nfp_flower_priv *priv = app->priv; in nfp_flower_non_repr_priv_lookup()
176 nfp_flower_non_repr_priv_get(struct nfp_app *app, struct net_device *netdev) in nfp_flower_non_repr_priv_get() argument
178 struct nfp_flower_priv *priv = app->priv; in nfp_flower_non_repr_priv_get()
181 entry = nfp_flower_non_repr_priv_lookup(app, netdev); in nfp_flower_non_repr_priv_get()
208 nfp_flower_non_repr_priv_put(struct nfp_app *app, struct net_device *netdev) in nfp_flower_non_repr_priv_put() argument
212 entry = nfp_flower_non_repr_priv_lookup(app, netdev); in nfp_flower_non_repr_priv_put()
220 nfp_flower_repr_get_type_and_port(struct nfp_app *app, u32 port_id, u8 *port) in nfp_flower_repr_get_type_and_port() argument
241 nfp_flower_dev_get(struct nfp_app *app, u32 port_id, bool *redir_egress) in nfp_flower_dev_get() argument
253 return nfp_flower_get_netdev_from_internal_port_id(app, port); in nfp_flower_dev_get()
256 repr_type = nfp_flower_repr_get_type_and_port(app, port_id, &port); in nfp_flower_dev_get()
260 reprs = rcu_dereference(app->reprs[repr_type]); in nfp_flower_dev_get()
271 nfp_flower_reprs_reify(struct nfp_app *app, enum nfp_repr_type type, in nfp_flower_reprs_reify() argument
277 reprs = rcu_dereference_protected(app->reprs[type], in nfp_flower_reprs_reify()
278 nfp_app_is_locked(app)); in nfp_flower_reprs_reify()
285 netdev = nfp_repr_get_locked(app, reprs, i); in nfp_flower_reprs_reify()
300 nfp_flower_wait_repr_reify(struct nfp_app *app, atomic_t *replies, int tot_repl) in nfp_flower_wait_repr_reify() argument
302 struct nfp_flower_priv *priv = app->priv; in nfp_flower_wait_repr_reify()
307 assert_nfp_app_locked(app); in nfp_flower_wait_repr_reify()
311 nfp_warn(app->cpp, "Not all reprs responded to reify\n"); in nfp_flower_wait_repr_reify()
319 nfp_flower_repr_netdev_open(struct nfp_app *app, struct nfp_repr *repr) in nfp_flower_repr_netdev_open() argument
333 nfp_flower_repr_netdev_stop(struct nfp_app *app, struct nfp_repr *repr) in nfp_flower_repr_netdev_stop() argument
341 nfp_flower_repr_netdev_clean(struct nfp_app *app, struct net_device *netdev) in nfp_flower_repr_netdev_clean() argument
349 nfp_flower_repr_netdev_preclean(struct nfp_app *app, struct net_device *netdev) in nfp_flower_repr_netdev_preclean() argument
352 struct nfp_flower_priv *priv = app->priv; in nfp_flower_repr_netdev_preclean()
359 nfp_warn(app->cpp, "Failed to notify firmware about repr destruction\n"); in nfp_flower_repr_netdev_preclean()
363 nfp_flower_wait_repr_reify(app, replies, 1); in nfp_flower_repr_netdev_preclean()
366 static void nfp_flower_sriov_disable(struct nfp_app *app) in nfp_flower_sriov_disable() argument
368 struct nfp_flower_priv *priv = app->priv; in nfp_flower_sriov_disable()
373 nfp_reprs_clean_and_free_by_type(app, NFP_REPR_TYPE_VF); in nfp_flower_sriov_disable()
377 nfp_flower_spawn_vnic_reprs(struct nfp_app *app, in nfp_flower_spawn_vnic_reprs() argument
381 u8 nfp_pcie = nfp_cppcore_pcie_unit(app->pf->cpp); in nfp_flower_spawn_vnic_reprs()
382 struct nfp_flower_priv *priv = app->priv; in nfp_flower_spawn_vnic_reprs()
403 repr = nfp_repr_alloc(app); in nfp_flower_spawn_vnic_reprs()
423 port = nfp_port_alloc(app, port_type, repr); in nfp_flower_spawn_vnic_reprs()
437 app->pf->vf_cfg_mem + i * NFP_NET_CFG_BAR_SZ; in nfp_flower_spawn_vnic_reprs()
444 err = nfp_repr_init(app, repr, in nfp_flower_spawn_vnic_reprs()
454 nfp_info(app->cpp, "%s%d Representor(%s) created\n", in nfp_flower_spawn_vnic_reprs()
459 nfp_app_reprs_set(app, repr_type, reprs); in nfp_flower_spawn_vnic_reprs()
462 reify_cnt = nfp_flower_reprs_reify(app, repr_type, true); in nfp_flower_spawn_vnic_reprs()
465 nfp_warn(app->cpp, "Failed to notify firmware about repr creation\n"); in nfp_flower_spawn_vnic_reprs()
469 err = nfp_flower_wait_repr_reify(app, replies, reify_cnt); in nfp_flower_spawn_vnic_reprs()
475 reprs = nfp_app_reprs_set(app, repr_type, NULL); in nfp_flower_spawn_vnic_reprs()
477 nfp_reprs_clean_and_free(app, reprs); in nfp_flower_spawn_vnic_reprs()
481 static int nfp_flower_sriov_enable(struct nfp_app *app, int num_vfs) in nfp_flower_sriov_enable() argument
483 struct nfp_flower_priv *priv = app->priv; in nfp_flower_sriov_enable()
488 return nfp_flower_spawn_vnic_reprs(app, in nfp_flower_sriov_enable()
494 nfp_flower_spawn_phy_reprs(struct nfp_app *app, struct nfp_flower_priv *priv) in nfp_flower_spawn_phy_reprs() argument
496 struct nfp_eth_table *eth_tbl = app->pf->eth_tbl; in nfp_flower_spawn_phy_reprs()
505 ctrl_skb = nfp_flower_cmsg_mac_repr_start(app, eth_tbl->count); in nfp_flower_spawn_phy_reprs()
521 repr = nfp_repr_alloc(app); in nfp_flower_spawn_phy_reprs()
538 port = nfp_port_alloc(app, NFP_PORT_PHYS_PORT, repr); in nfp_flower_spawn_phy_reprs()
545 err = nfp_port_init_phy_port(app->pf, app, port, i); in nfp_flower_spawn_phy_reprs()
554 nfp_net_get_mac_addr(app->pf, repr, port); in nfp_flower_spawn_phy_reprs()
557 err = nfp_repr_init(app, repr, in nfp_flower_spawn_phy_reprs()
572 nfp_info(app->cpp, "Phys Port %d Representor(%s) created\n", in nfp_flower_spawn_phy_reprs()
576 nfp_app_reprs_set(app, NFP_REPR_TYPE_PHYS_PORT, reprs); in nfp_flower_spawn_phy_reprs()
586 reify_cnt = nfp_flower_reprs_reify(app, NFP_REPR_TYPE_PHYS_PORT, true); in nfp_flower_spawn_phy_reprs()
589 nfp_warn(app->cpp, "Failed to notify firmware about repr creation\n"); in nfp_flower_spawn_phy_reprs()
593 err = nfp_flower_wait_repr_reify(app, replies, reify_cnt); in nfp_flower_spawn_phy_reprs()
597 nfp_ctrl_tx(app->ctrl, ctrl_skb); in nfp_flower_spawn_phy_reprs()
601 reprs = nfp_app_reprs_set(app, NFP_REPR_TYPE_PHYS_PORT, NULL); in nfp_flower_spawn_phy_reprs()
603 nfp_reprs_clean_and_free(app, reprs); in nfp_flower_spawn_phy_reprs()
609 static int nfp_flower_vnic_alloc(struct nfp_app *app, struct nfp_net *nn, in nfp_flower_vnic_alloc() argument
613 nfp_warn(app->cpp, "FlowerNIC doesn't support more than one data vNIC\n"); in nfp_flower_vnic_alloc()
624 nn->port = nfp_port_alloc(app, NFP_PORT_INVALID, nn->dp.netdev); in nfp_flower_vnic_alloc()
628 static void nfp_flower_vnic_clean(struct nfp_app *app, struct nfp_net *nn) in nfp_flower_vnic_clean() argument
630 struct nfp_flower_priv *priv = app->priv; in nfp_flower_vnic_clean()
632 if (app->pf->num_vfs) in nfp_flower_vnic_clean()
633 nfp_reprs_clean_and_free_by_type(app, NFP_REPR_TYPE_VF); in nfp_flower_vnic_clean()
634 nfp_reprs_clean_and_free_by_type(app, NFP_REPR_TYPE_PF); in nfp_flower_vnic_clean()
635 nfp_reprs_clean_and_free_by_type(app, NFP_REPR_TYPE_PHYS_PORT); in nfp_flower_vnic_clean()
640 static int nfp_flower_vnic_init(struct nfp_app *app, struct nfp_net *nn) in nfp_flower_vnic_init() argument
642 struct nfp_flower_priv *priv = app->priv; in nfp_flower_vnic_init()
647 err = nfp_flower_spawn_phy_reprs(app, app->priv); in nfp_flower_vnic_init()
651 err = nfp_flower_spawn_vnic_reprs(app, in nfp_flower_vnic_init()
657 if (app->pf->num_vfs) { in nfp_flower_vnic_init()
658 err = nfp_flower_spawn_vnic_reprs(app, in nfp_flower_vnic_init()
661 app->pf->num_vfs); in nfp_flower_vnic_init()
669 nfp_reprs_clean_and_free_by_type(app, NFP_REPR_TYPE_PF); in nfp_flower_vnic_init()
671 nfp_reprs_clean_and_free_by_type(app, NFP_REPR_TYPE_PHYS_PORT); in nfp_flower_vnic_init()
677 static void nfp_flower_wait_host_bit(struct nfp_app *app) in nfp_flower_wait_host_bit() argument
686 feat = nfp_rtsym_read_le(app->pf->rtbl, in nfp_flower_wait_host_bit()
690 nfp_warn(app->cpp, in nfp_flower_wait_host_bit()
698 nfp_warn(app->cpp, in nfp_flower_wait_host_bit()
702 static int nfp_flower_sync_feature_bits(struct nfp_app *app) in nfp_flower_sync_feature_bits() argument
704 struct nfp_flower_priv *app_priv = app->priv; in nfp_flower_sync_feature_bits()
708 err = nfp_rtsym_write_le(app->pf->rtbl, "_abi_flower_host_mask", in nfp_flower_sync_feature_bits()
712 nfp_flower_wait_host_bit(app); in nfp_flower_sync_feature_bits()
717 err = nfp_rtsym_write_le(app->pf->rtbl, in nfp_flower_sync_feature_bits()
723 nfp_warn(app->cpp, "LAG not supported by FW.\n"); in nfp_flower_sync_feature_bits()
730 err = nfp_rtsym_write_le(app->pf->rtbl, in nfp_flower_sync_feature_bits()
736 nfp_warn(app->cpp, in nfp_flower_sync_feature_bits()
742 nfp_warn(app->cpp, "Flow mod/merge not supported by FW.\n"); in nfp_flower_sync_feature_bits()
748 static int nfp_flower_init(struct nfp_app *app) in nfp_flower_init() argument
751 const struct nfp_pf *pf = app->pf; in nfp_flower_init()
756 nfp_warn(app->cpp, "FlowerNIC requires eth table\n"); in nfp_flower_init()
761 nfp_warn(app->cpp, "FlowerNIC requires mac_stats BAR\n"); in nfp_flower_init()
766 nfp_warn(app->cpp, "FlowerNIC requires vf_cfg BAR\n"); in nfp_flower_init()
770 version = nfp_rtsym_read_le(app->pf->rtbl, "hw_flower_version", &err); in nfp_flower_init()
772 nfp_warn(app->cpp, "FlowerNIC requires hw_flower_version memory symbol\n"); in nfp_flower_init()
776 num_mems = nfp_rtsym_read_le(app->pf->rtbl, "CONFIG_FC_HOST_CTX_SPLIT", in nfp_flower_init()
779 nfp_warn(app->cpp, in nfp_flower_init()
787 nfp_warn(app->cpp, in nfp_flower_init()
793 ctx_count = nfp_rtsym_read_le(app->pf->rtbl, "CONFIG_FC_HOST_CTX_COUNT", in nfp_flower_init()
796 nfp_warn(app->cpp, in nfp_flower_init()
805 nfp_warn(app->cpp, "FlowerNIC: unsupported firmware version\n"); in nfp_flower_init()
816 app->priv = app_priv; in nfp_flower_init()
817 app_priv->app = app; in nfp_flower_init()
826 err = nfp_flower_metadata_init(app, ctx_count, num_mems); in nfp_flower_init()
831 features = nfp_rtsym_read_le(app->pf->rtbl, in nfp_flower_init()
838 err = nfp_flower_sync_feature_bits(app); in nfp_flower_init()
843 nfp_flower_qos_init(app); in nfp_flower_init()
854 nfp_flower_metadata_cleanup(app); in nfp_flower_init()
856 vfree(app->priv); in nfp_flower_init()
860 static void nfp_flower_clean(struct nfp_app *app) in nfp_flower_clean() argument
862 struct nfp_flower_priv *app_priv = app->priv; in nfp_flower_clean()
869 nfp_flower_qos_cleanup(app); in nfp_flower_clean()
877 nfp_flower_metadata_cleanup(app); in nfp_flower_clean()
878 vfree(app->priv); in nfp_flower_clean()
879 app->priv = NULL; in nfp_flower_clean()
894 nfp_flower_repr_change_mtu(struct nfp_app *app, struct net_device *netdev, in nfp_flower_repr_change_mtu() argument
897 struct nfp_flower_priv *app_priv = app->priv; in nfp_flower_repr_change_mtu()
906 nfp_err(app->cpp, "Physical port MTU setting not supported\n"); in nfp_flower_repr_change_mtu()
932 nfp_warn(app->cpp, "MTU change not verified with fw\n"); in nfp_flower_repr_change_mtu()
939 static int nfp_flower_start(struct nfp_app *app) in nfp_flower_start() argument
941 struct nfp_flower_priv *app_priv = app->priv; in nfp_flower_start()
950 err = flow_indr_dev_register(nfp_flower_indr_setup_tc_cb, app); in nfp_flower_start()
954 err = nfp_tunnel_config_start(app); in nfp_flower_start()
961 flow_indr_dev_unregister(nfp_flower_indr_setup_tc_cb, app, in nfp_flower_start()
966 static void nfp_flower_stop(struct nfp_app *app) in nfp_flower_stop() argument
968 nfp_tunnel_config_stop(app); in nfp_flower_stop()
970 flow_indr_dev_unregister(nfp_flower_indr_setup_tc_cb, app, in nfp_flower_stop()
975 nfp_flower_netdev_event(struct nfp_app *app, struct net_device *netdev, in nfp_flower_netdev_event() argument
978 struct nfp_flower_priv *app_priv = app->priv; in nfp_flower_netdev_event()
987 ret = nfp_flower_internal_port_event_handler(app, netdev, event); in nfp_flower_netdev_event()
991 return nfp_tunnel_mac_event_handler(app, netdev, event, ptr); in nfp_flower_netdev_event()