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
83 } else if (nfp_flower_internal_port_can_offload(app, netdev)) { in nfp_flower_get_port_id_from_netdev()
84 ext_port = nfp_flower_get_internal_port_id(app, netdev); in nfp_flower_get_port_id_from_netdev()
95 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
97 struct nfp_flower_priv *priv = app->priv; in nfp_flower_get_netdev_from_internal_port_id()
108 nfp_flower_free_internal_port_id(struct nfp_app *app, struct net_device *netdev) in nfp_flower_free_internal_port_id() argument
110 struct nfp_flower_priv *priv = app->priv; in nfp_flower_free_internal_port_id()
123 nfp_flower_internal_port_event_handler(struct nfp_app *app, in nfp_flower_internal_port_event_handler() argument
128 nfp_flower_internal_port_can_offload(app, netdev)) in nfp_flower_internal_port_event_handler()
129 nfp_flower_free_internal_port_id(app, netdev); in nfp_flower_internal_port_event_handler()
146 nfp_flower_non_repr_priv_lookup(struct nfp_app *app, struct net_device *netdev) in nfp_flower_non_repr_priv_lookup() argument
148 struct nfp_flower_priv *priv = app->priv; in nfp_flower_non_repr_priv_lookup()
167 nfp_flower_non_repr_priv_get(struct nfp_app *app, struct net_device *netdev) in nfp_flower_non_repr_priv_get() argument
169 struct nfp_flower_priv *priv = app->priv; in nfp_flower_non_repr_priv_get()
172 entry = nfp_flower_non_repr_priv_lookup(app, netdev); in nfp_flower_non_repr_priv_get()
199 nfp_flower_non_repr_priv_put(struct nfp_app *app, struct net_device *netdev) in nfp_flower_non_repr_priv_put() argument
203 entry = nfp_flower_non_repr_priv_lookup(app, netdev); in nfp_flower_non_repr_priv_put()
211 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
232 nfp_flower_dev_get(struct nfp_app *app, u32 port_id, bool *redir_egress) in nfp_flower_dev_get() argument
244 return nfp_flower_get_netdev_from_internal_port_id(app, port); in nfp_flower_dev_get()
247 repr_type = nfp_flower_repr_get_type_and_port(app, port_id, &port); in nfp_flower_dev_get()
251 reprs = rcu_dereference(app->reprs[repr_type]); in nfp_flower_dev_get()
262 nfp_flower_reprs_reify(struct nfp_app *app, enum nfp_repr_type type, in nfp_flower_reprs_reify() argument
268 reprs = rcu_dereference_protected(app->reprs[type], in nfp_flower_reprs_reify()
269 lockdep_is_held(&app->pf->lock)); in nfp_flower_reprs_reify()
276 netdev = nfp_repr_get_locked(app, reprs, i); in nfp_flower_reprs_reify()
291 nfp_flower_wait_repr_reify(struct nfp_app *app, atomic_t *replies, int tot_repl) in nfp_flower_wait_repr_reify() argument
293 struct nfp_flower_priv *priv = app->priv; in nfp_flower_wait_repr_reify()
298 lockdep_assert_held(&app->pf->lock); in nfp_flower_wait_repr_reify()
302 nfp_warn(app->cpp, "Not all reprs responded to reify\n"); in nfp_flower_wait_repr_reify()
310 nfp_flower_repr_netdev_open(struct nfp_app *app, struct nfp_repr *repr) in nfp_flower_repr_netdev_open() argument
324 nfp_flower_repr_netdev_stop(struct nfp_app *app, struct nfp_repr *repr) in nfp_flower_repr_netdev_stop() argument
332 nfp_flower_repr_netdev_clean(struct nfp_app *app, struct net_device *netdev) in nfp_flower_repr_netdev_clean() argument
340 nfp_flower_repr_netdev_preclean(struct nfp_app *app, struct net_device *netdev) in nfp_flower_repr_netdev_preclean() argument
343 struct nfp_flower_priv *priv = app->priv; in nfp_flower_repr_netdev_preclean()
350 nfp_warn(app->cpp, "Failed to notify firmware about repr destruction\n"); in nfp_flower_repr_netdev_preclean()
354 nfp_flower_wait_repr_reify(app, replies, 1); in nfp_flower_repr_netdev_preclean()
357 static void nfp_flower_sriov_disable(struct nfp_app *app) in nfp_flower_sriov_disable() argument
359 struct nfp_flower_priv *priv = app->priv; in nfp_flower_sriov_disable()
364 nfp_reprs_clean_and_free_by_type(app, NFP_REPR_TYPE_VF); in nfp_flower_sriov_disable()
368 nfp_flower_spawn_vnic_reprs(struct nfp_app *app, in nfp_flower_spawn_vnic_reprs() argument
372 u8 nfp_pcie = nfp_cppcore_pcie_unit(app->pf->cpp); in nfp_flower_spawn_vnic_reprs()
373 struct nfp_flower_priv *priv = app->priv; in nfp_flower_spawn_vnic_reprs()
394 repr = nfp_repr_alloc(app); in nfp_flower_spawn_vnic_reprs()
414 port = nfp_port_alloc(app, port_type, repr); in nfp_flower_spawn_vnic_reprs()
428 app->pf->vf_cfg_mem + i * NFP_NET_CFG_BAR_SZ; in nfp_flower_spawn_vnic_reprs()
435 err = nfp_repr_init(app, repr, in nfp_flower_spawn_vnic_reprs()
445 nfp_info(app->cpp, "%s%d Representor(%s) created\n", in nfp_flower_spawn_vnic_reprs()
450 nfp_app_reprs_set(app, repr_type, reprs); in nfp_flower_spawn_vnic_reprs()
453 reify_cnt = nfp_flower_reprs_reify(app, repr_type, true); in nfp_flower_spawn_vnic_reprs()
456 nfp_warn(app->cpp, "Failed to notify firmware about repr creation\n"); in nfp_flower_spawn_vnic_reprs()
460 err = nfp_flower_wait_repr_reify(app, replies, reify_cnt); in nfp_flower_spawn_vnic_reprs()
466 reprs = nfp_app_reprs_set(app, repr_type, NULL); in nfp_flower_spawn_vnic_reprs()
468 nfp_reprs_clean_and_free(app, reprs); in nfp_flower_spawn_vnic_reprs()
472 static int nfp_flower_sriov_enable(struct nfp_app *app, int num_vfs) in nfp_flower_sriov_enable() argument
474 struct nfp_flower_priv *priv = app->priv; in nfp_flower_sriov_enable()
479 return nfp_flower_spawn_vnic_reprs(app, in nfp_flower_sriov_enable()
485 nfp_flower_spawn_phy_reprs(struct nfp_app *app, struct nfp_flower_priv *priv) in nfp_flower_spawn_phy_reprs() argument
487 struct nfp_eth_table *eth_tbl = app->pf->eth_tbl; in nfp_flower_spawn_phy_reprs()
496 ctrl_skb = nfp_flower_cmsg_mac_repr_start(app, eth_tbl->count); in nfp_flower_spawn_phy_reprs()
512 repr = nfp_repr_alloc(app); in nfp_flower_spawn_phy_reprs()
529 port = nfp_port_alloc(app, NFP_PORT_PHYS_PORT, repr); in nfp_flower_spawn_phy_reprs()
536 err = nfp_port_init_phy_port(app->pf, app, port, i); in nfp_flower_spawn_phy_reprs()
545 nfp_net_get_mac_addr(app->pf, repr, port); in nfp_flower_spawn_phy_reprs()
548 err = nfp_repr_init(app, repr, in nfp_flower_spawn_phy_reprs()
563 nfp_info(app->cpp, "Phys Port %d Representor(%s) created\n", in nfp_flower_spawn_phy_reprs()
567 nfp_app_reprs_set(app, NFP_REPR_TYPE_PHYS_PORT, reprs); in nfp_flower_spawn_phy_reprs()
577 reify_cnt = nfp_flower_reprs_reify(app, NFP_REPR_TYPE_PHYS_PORT, true); in nfp_flower_spawn_phy_reprs()
580 nfp_warn(app->cpp, "Failed to notify firmware about repr creation\n"); in nfp_flower_spawn_phy_reprs()
584 err = nfp_flower_wait_repr_reify(app, replies, reify_cnt); in nfp_flower_spawn_phy_reprs()
588 nfp_ctrl_tx(app->ctrl, ctrl_skb); in nfp_flower_spawn_phy_reprs()
592 reprs = nfp_app_reprs_set(app, NFP_REPR_TYPE_PHYS_PORT, NULL); in nfp_flower_spawn_phy_reprs()
594 nfp_reprs_clean_and_free(app, reprs); in nfp_flower_spawn_phy_reprs()
600 static int nfp_flower_vnic_alloc(struct nfp_app *app, struct nfp_net *nn, in nfp_flower_vnic_alloc() argument
604 nfp_warn(app->cpp, "FlowerNIC doesn't support more than one data vNIC\n"); in nfp_flower_vnic_alloc()
615 nn->port = nfp_port_alloc(app, NFP_PORT_INVALID, nn->dp.netdev); in nfp_flower_vnic_alloc()
619 static void nfp_flower_vnic_clean(struct nfp_app *app, struct nfp_net *nn) in nfp_flower_vnic_clean() argument
621 struct nfp_flower_priv *priv = app->priv; in nfp_flower_vnic_clean()
623 if (app->pf->num_vfs) in nfp_flower_vnic_clean()
624 nfp_reprs_clean_and_free_by_type(app, NFP_REPR_TYPE_VF); in nfp_flower_vnic_clean()
625 nfp_reprs_clean_and_free_by_type(app, NFP_REPR_TYPE_PF); in nfp_flower_vnic_clean()
626 nfp_reprs_clean_and_free_by_type(app, NFP_REPR_TYPE_PHYS_PORT); in nfp_flower_vnic_clean()
631 static int nfp_flower_vnic_init(struct nfp_app *app, struct nfp_net *nn) in nfp_flower_vnic_init() argument
633 struct nfp_flower_priv *priv = app->priv; in nfp_flower_vnic_init()
638 err = nfp_flower_spawn_phy_reprs(app, app->priv); in nfp_flower_vnic_init()
642 err = nfp_flower_spawn_vnic_reprs(app, in nfp_flower_vnic_init()
648 if (app->pf->num_vfs) { in nfp_flower_vnic_init()
649 err = nfp_flower_spawn_vnic_reprs(app, in nfp_flower_vnic_init()
652 app->pf->num_vfs); in nfp_flower_vnic_init()
660 nfp_reprs_clean_and_free_by_type(app, NFP_REPR_TYPE_PF); in nfp_flower_vnic_init()
662 nfp_reprs_clean_and_free_by_type(app, NFP_REPR_TYPE_PHYS_PORT); in nfp_flower_vnic_init()
668 static void nfp_flower_wait_host_bit(struct nfp_app *app) in nfp_flower_wait_host_bit() argument
677 feat = nfp_rtsym_read_le(app->pf->rtbl, in nfp_flower_wait_host_bit()
681 nfp_warn(app->cpp, in nfp_flower_wait_host_bit()
689 nfp_warn(app->cpp, in nfp_flower_wait_host_bit()
693 static int nfp_flower_sync_feature_bits(struct nfp_app *app) in nfp_flower_sync_feature_bits() argument
695 struct nfp_flower_priv *app_priv = app->priv; in nfp_flower_sync_feature_bits()
699 err = nfp_rtsym_write_le(app->pf->rtbl, "_abi_flower_host_mask", in nfp_flower_sync_feature_bits()
703 nfp_flower_wait_host_bit(app); in nfp_flower_sync_feature_bits()
708 err = nfp_rtsym_write_le(app->pf->rtbl, in nfp_flower_sync_feature_bits()
714 nfp_warn(app->cpp, "LAG not supported by FW.\n"); in nfp_flower_sync_feature_bits()
721 err = nfp_rtsym_write_le(app->pf->rtbl, in nfp_flower_sync_feature_bits()
727 nfp_warn(app->cpp, in nfp_flower_sync_feature_bits()
733 nfp_warn(app->cpp, "Flow mod/merge not supported by FW.\n"); in nfp_flower_sync_feature_bits()
739 static int nfp_flower_init(struct nfp_app *app) in nfp_flower_init() argument
742 const struct nfp_pf *pf = app->pf; in nfp_flower_init()
747 nfp_warn(app->cpp, "FlowerNIC requires eth table\n"); in nfp_flower_init()
752 nfp_warn(app->cpp, "FlowerNIC requires mac_stats BAR\n"); in nfp_flower_init()
757 nfp_warn(app->cpp, "FlowerNIC requires vf_cfg BAR\n"); in nfp_flower_init()
761 version = nfp_rtsym_read_le(app->pf->rtbl, "hw_flower_version", &err); in nfp_flower_init()
763 nfp_warn(app->cpp, "FlowerNIC requires hw_flower_version memory symbol\n"); in nfp_flower_init()
767 num_mems = nfp_rtsym_read_le(app->pf->rtbl, "CONFIG_FC_HOST_CTX_SPLIT", in nfp_flower_init()
770 nfp_warn(app->cpp, in nfp_flower_init()
778 nfp_warn(app->cpp, in nfp_flower_init()
784 ctx_count = nfp_rtsym_read_le(app->pf->rtbl, "CONFIG_FC_HOST_CTX_COUNT", in nfp_flower_init()
787 nfp_warn(app->cpp, in nfp_flower_init()
796 nfp_warn(app->cpp, "FlowerNIC: unsupported firmware version\n"); in nfp_flower_init()
807 app->priv = app_priv; in nfp_flower_init()
808 app_priv->app = app; in nfp_flower_init()
817 err = nfp_flower_metadata_init(app, ctx_count, num_mems); in nfp_flower_init()
822 features = nfp_rtsym_read_le(app->pf->rtbl, in nfp_flower_init()
829 err = nfp_flower_sync_feature_bits(app); in nfp_flower_init()
833 err = flow_indr_dev_register(nfp_flower_indr_setup_tc_cb, app); in nfp_flower_init()
838 nfp_flower_qos_init(app); in nfp_flower_init()
849 nfp_flower_metadata_cleanup(app); in nfp_flower_init()
851 vfree(app->priv); in nfp_flower_init()
855 static void nfp_flower_clean(struct nfp_app *app) in nfp_flower_clean() argument
857 struct nfp_flower_priv *app_priv = app->priv; in nfp_flower_clean()
863 flow_indr_dev_unregister(nfp_flower_indr_setup_tc_cb, app, in nfp_flower_clean()
867 nfp_flower_qos_cleanup(app); in nfp_flower_clean()
875 nfp_flower_metadata_cleanup(app); in nfp_flower_clean()
876 vfree(app->priv); in nfp_flower_clean()
877 app->priv = NULL; in nfp_flower_clean()
892 nfp_flower_repr_change_mtu(struct nfp_app *app, struct net_device *netdev, in nfp_flower_repr_change_mtu() argument
895 struct nfp_flower_priv *app_priv = app->priv; in nfp_flower_repr_change_mtu()
904 nfp_err(app->cpp, "Physical port MTU setting not supported\n"); in nfp_flower_repr_change_mtu()
930 nfp_warn(app->cpp, "MTU change not verified with fw\n"); in nfp_flower_repr_change_mtu()
937 static int nfp_flower_start(struct nfp_app *app) in nfp_flower_start() argument
939 struct nfp_flower_priv *app_priv = app->priv; in nfp_flower_start()
948 return nfp_tunnel_config_start(app); in nfp_flower_start()
951 static void nfp_flower_stop(struct nfp_app *app) in nfp_flower_stop() argument
953 nfp_tunnel_config_stop(app); in nfp_flower_stop()
957 nfp_flower_netdev_event(struct nfp_app *app, struct net_device *netdev, in nfp_flower_netdev_event() argument
960 struct nfp_flower_priv *app_priv = app->priv; in nfp_flower_netdev_event()
969 ret = nfp_flower_internal_port_event_handler(app, netdev, event); in nfp_flower_netdev_event()
973 return nfp_tunnel_mac_event_handler(app, netdev, event, ptr); in nfp_flower_netdev_event()