Lines Matching refs:pf

58 static void enetc_enable_si_vlan_promisc(struct enetc_pf *pf, int si_idx)  in enetc_enable_si_vlan_promisc()  argument
60 pf->vlan_promisc_simap |= BIT(si_idx); in enetc_enable_si_vlan_promisc()
61 enetc_set_vlan_promisc(&pf->si->hw, pf->vlan_promisc_simap); in enetc_enable_si_vlan_promisc()
64 static void enetc_disable_si_vlan_promisc(struct enetc_pf *pf, int si_idx) in enetc_disable_si_vlan_promisc() argument
66 pf->vlan_promisc_simap &= ~BIT(si_idx); in enetc_disable_si_vlan_promisc()
67 enetc_set_vlan_promisc(&pf->si->hw, pf->vlan_promisc_simap); in enetc_disable_si_vlan_promisc()
153 static void enetc_sync_mac_filters(struct enetc_pf *pf) in enetc_sync_mac_filters() argument
155 struct enetc_mac_filter *f = pf->mac_filter; in enetc_sync_mac_filters()
156 struct enetc_si *si = pf->si; in enetc_sync_mac_filters()
200 struct enetc_pf *pf = enetc_si_priv(priv->si); in enetc_pf_set_rx_mode() local
222 filter = &pf->mac_filter[UC]; in enetc_pf_set_rx_mode()
238 filter = &pf->mac_filter[MC]; in enetc_pf_set_rx_mode()
251 enetc_sync_mac_filters(pf); in enetc_pf_set_rx_mode()
276 static void enetc_sync_vlan_ht_filter(struct enetc_pf *pf, bool rehash) in enetc_sync_vlan_ht_filter() argument
281 bitmap_zero(pf->vlan_ht_filter, ENETC_VLAN_HT_SIZE); in enetc_sync_vlan_ht_filter()
283 for_each_set_bit(i, pf->active_vlans, VLAN_N_VID) { in enetc_sync_vlan_ht_filter()
286 __set_bit(hidx, pf->vlan_ht_filter); in enetc_sync_vlan_ht_filter()
290 enetc_set_vlan_ht_filter(&pf->si->hw, 0, *pf->vlan_ht_filter); in enetc_sync_vlan_ht_filter()
296 struct enetc_pf *pf = enetc_si_priv(priv->si); in enetc_vlan_rx_add_vid() local
299 __set_bit(vid, pf->active_vlans); in enetc_vlan_rx_add_vid()
302 if (!__test_and_set_bit(idx, pf->vlan_ht_filter)) in enetc_vlan_rx_add_vid()
303 enetc_sync_vlan_ht_filter(pf, false); in enetc_vlan_rx_add_vid()
311 struct enetc_pf *pf = enetc_si_priv(priv->si); in enetc_vlan_rx_del_vid() local
313 __clear_bit(vid, pf->active_vlans); in enetc_vlan_rx_del_vid()
314 enetc_sync_vlan_ht_filter(pf, true); in enetc_vlan_rx_del_vid()
346 struct enetc_pf *pf = enetc_si_priv(priv->si); in enetc_pf_set_vf_mac() local
349 if (vf >= pf->total_vfs) in enetc_pf_set_vf_mac()
355 vf_state = &pf->vf_state[vf]; in enetc_pf_set_vf_mac()
365 struct enetc_pf *pf = enetc_si_priv(priv->si); in enetc_pf_set_vf_vlan() local
370 if (vf >= pf->total_vfs) in enetc_pf_set_vf_vlan()
384 struct enetc_pf *pf = enetc_si_priv(priv->si); in enetc_pf_set_vf_spoofchk() local
387 if (vf >= pf->total_vfs) in enetc_pf_set_vf_spoofchk()
397 static int enetc_setup_mac_address(struct device_node *np, struct enetc_pf *pf, in enetc_setup_mac_address() argument
400 struct device *dev = &pf->si->pdev->dev; in enetc_setup_mac_address()
401 struct enetc_hw *hw = &pf->si->hw; in enetc_setup_mac_address()
429 struct enetc_pf *pf) in enetc_setup_mac_addresses() argument
434 err = enetc_setup_mac_address(np, pf, 0); in enetc_setup_mac_addresses()
438 for (i = 0; i < pf->total_vfs; i++) { in enetc_setup_mac_addresses()
439 err = enetc_setup_mac_address(NULL, pf, i + 1); in enetc_setup_mac_addresses()
449 struct enetc_pf *pf = enetc_si_priv(si); in enetc_port_assign_rfs_entries() local
457 vf_entries = num_entries / (pf->total_vfs + 1); in enetc_port_assign_rfs_entries()
459 for (i = 0; i < pf->total_vfs; i++) in enetc_port_assign_rfs_entries()
462 num_entries - vf_entries * pf->total_vfs); in enetc_port_assign_rfs_entries()
470 struct enetc_pf *pf = enetc_si_priv(si); in enetc_port_si_configure() local
504 num_rings /= pf->total_vfs; in enetc_port_si_configure()
509 for (i = 0; i < pf->total_vfs; i++) in enetc_port_si_configure()
583 static void enetc_configure_port(struct enetc_pf *pf) in enetc_configure_port() argument
586 struct enetc_hw *hw = &pf->si->hw; in enetc_configure_port()
592 enetc_port_si_configure(pf->si); in enetc_configure_port()
599 enetc_port_assign_rfs_entries(pf->si); in enetc_configure_port()
602 pf->vlan_promisc_simap = ENETC_VLAN_PROMISC_MAP_ALL; in enetc_configure_port()
603 enetc_set_vlan_promisc(hw, pf->vlan_promisc_simap); in enetc_configure_port()
612 static u16 enetc_msg_pf_set_vf_primary_mac_addr(struct enetc_pf *pf, in enetc_msg_pf_set_vf_primary_mac_addr() argument
615 struct enetc_vf_state *vf_state = &pf->vf_state[vf_id]; in enetc_msg_pf_set_vf_primary_mac_addr()
616 struct enetc_msg_swbd *msg = &pf->rxmsg[vf_id]; in enetc_msg_pf_set_vf_primary_mac_addr()
618 struct device *dev = &pf->si->pdev->dev; in enetc_msg_pf_set_vf_primary_mac_addr()
632 enetc_pf_set_primary_mac_addr(&pf->si->hw, vf_id + 1, addr); in enetc_msg_pf_set_vf_primary_mac_addr()
637 void enetc_msg_handle_rxmsg(struct enetc_pf *pf, int vf_id, u16 *status) in enetc_msg_handle_rxmsg() argument
639 struct enetc_msg_swbd *msg = &pf->rxmsg[vf_id]; in enetc_msg_handle_rxmsg()
640 struct device *dev = &pf->si->pdev->dev; in enetc_msg_handle_rxmsg()
650 *status = enetc_msg_pf_set_vf_primary_mac_addr(pf, vf_id); in enetc_msg_handle_rxmsg()
662 struct enetc_pf *pf = enetc_si_priv(si); in enetc_sriov_configure() local
666 enetc_msg_psi_free(pf); in enetc_sriov_configure()
667 kfree(pf->vf_state); in enetc_sriov_configure()
668 pf->num_vfs = 0; in enetc_sriov_configure()
671 pf->num_vfs = num_vfs; in enetc_sriov_configure()
673 pf->vf_state = kcalloc(num_vfs, sizeof(struct enetc_vf_state), in enetc_sriov_configure()
675 if (!pf->vf_state) { in enetc_sriov_configure()
676 pf->num_vfs = 0; in enetc_sriov_configure()
680 err = enetc_msg_psi_init(pf); in enetc_sriov_configure()
696 enetc_msg_psi_free(pf); in enetc_sriov_configure()
698 kfree(pf->vf_state); in enetc_sriov_configure()
699 pf->num_vfs = 0; in enetc_sriov_configure()
714 struct enetc_pf *pf = enetc_si_priv(priv->si); in enetc_pf_set_features() local
717 enetc_disable_si_vlan_promisc(pf, 0); in enetc_pf_set_features()
719 enetc_enable_si_vlan_promisc(pf, 0); in enetc_pf_set_features()
790 static int enetc_mdio_probe(struct enetc_pf *pf, struct device_node *np) in enetc_mdio_probe() argument
792 struct device *dev = &pf->si->pdev->dev; in enetc_mdio_probe()
806 mdio_priv->hw = &pf->si->hw; in enetc_mdio_probe()
814 pf->mdio = bus; in enetc_mdio_probe()
819 static void enetc_mdio_remove(struct enetc_pf *pf) in enetc_mdio_remove() argument
821 if (pf->mdio) in enetc_mdio_remove()
822 mdiobus_unregister(pf->mdio); in enetc_mdio_remove()
825 static int enetc_imdio_create(struct enetc_pf *pf) in enetc_imdio_create() argument
827 struct device *dev = &pf->si->pdev->dev; in enetc_imdio_create()
844 mdio_priv->hw = &pf->si->hw; in enetc_imdio_create()
869 pf->imdio = bus; in enetc_imdio_create()
870 pf->pcs = phylink_pcs; in enetc_imdio_create()
881 static void enetc_imdio_remove(struct enetc_pf *pf) in enetc_imdio_remove() argument
885 if (pf->pcs) { in enetc_imdio_remove()
886 mdio_device = lynx_get_mdio_device(pf->pcs); in enetc_imdio_remove()
888 lynx_pcs_destroy(pf->pcs); in enetc_imdio_remove()
890 if (pf->imdio) { in enetc_imdio_remove()
891 mdiobus_unregister(pf->imdio); in enetc_imdio_remove()
892 mdiobus_free(pf->imdio); in enetc_imdio_remove()
896 static bool enetc_port_has_pcs(struct enetc_pf *pf) in enetc_port_has_pcs() argument
898 return (pf->if_mode == PHY_INTERFACE_MODE_SGMII || in enetc_port_has_pcs()
899 pf->if_mode == PHY_INTERFACE_MODE_2500BASEX || in enetc_port_has_pcs()
900 pf->if_mode == PHY_INTERFACE_MODE_USXGMII); in enetc_port_has_pcs()
903 static int enetc_mdiobus_create(struct enetc_pf *pf, struct device_node *node) in enetc_mdiobus_create() argument
910 err = enetc_mdio_probe(pf, mdio_np); in enetc_mdiobus_create()
917 if (enetc_port_has_pcs(pf)) { in enetc_mdiobus_create()
918 err = enetc_imdio_create(pf); in enetc_mdiobus_create()
920 enetc_mdio_remove(pf); in enetc_mdiobus_create()
928 static void enetc_mdiobus_destroy(struct enetc_pf *pf) in enetc_mdiobus_destroy() argument
930 enetc_mdio_remove(pf); in enetc_mdiobus_destroy()
931 enetc_imdio_remove(pf); in enetc_mdiobus_destroy()
937 struct enetc_pf *pf = phylink_to_enetc_pf(config); in enetc_pl_mac_select_pcs() local
939 return pf->pcs; in enetc_pl_mac_select_pcs()
946 struct enetc_pf *pf = phylink_to_enetc_pf(config); in enetc_pl_mac_config() local
948 enetc_mac_config(&pf->si->hw, state->interface); in enetc_pl_mac_config()
984 struct enetc_pf *pf = phylink_to_enetc_pf(config); in enetc_pl_mac_link_up() local
987 struct enetc_hw *hw = &pf->si->hw; in enetc_pl_mac_link_up()
992 priv = netdev_priv(pf->si->ndev); in enetc_pl_mac_link_up()
994 if (pf->si->hw_features & ENETC_SI_F_QBV) in enetc_pl_mac_link_up()
1059 struct enetc_pf *pf = phylink_to_enetc_pf(config); in enetc_pl_mac_link_down() local
1061 enetc_mac_enable(&pf->si->hw, false); in enetc_pl_mac_link_down()
1075 struct enetc_pf *pf = enetc_si_priv(priv->si); in enetc_phylink_create() local
1079 pf->phylink_config.dev = &priv->ndev->dev; in enetc_phylink_create()
1080 pf->phylink_config.type = PHYLINK_NETDEV; in enetc_phylink_create()
1081 pf->phylink_config.mac_capabilities = MAC_ASYM_PAUSE | MAC_SYM_PAUSE | in enetc_phylink_create()
1085 pf->phylink_config.supported_interfaces); in enetc_phylink_create()
1087 pf->phylink_config.supported_interfaces); in enetc_phylink_create()
1089 pf->phylink_config.supported_interfaces); in enetc_phylink_create()
1091 pf->phylink_config.supported_interfaces); in enetc_phylink_create()
1092 phy_interface_set_rgmii(pf->phylink_config.supported_interfaces); in enetc_phylink_create()
1094 phylink = phylink_create(&pf->phylink_config, of_fwnode_handle(node), in enetc_phylink_create()
1095 pf->if_mode, &enetc_mac_phylink_ops); in enetc_phylink_create()
1187 struct enetc_pf *pf; in enetc_pf_probe() local
1198 err = enetc_pci_probe(pdev, KBUILD_MODNAME, sizeof(*pf)); in enetc_pf_probe()
1232 pf = enetc_si_priv(si); in enetc_pf_probe()
1233 pf->si = si; in enetc_pf_probe()
1234 pf->total_vfs = pci_sriov_get_totalvfs(pdev); in enetc_pf_probe()
1236 err = enetc_setup_mac_addresses(node, pf); in enetc_pf_probe()
1240 enetc_configure_port(pf); in enetc_pf_probe()
1275 err = of_get_phy_mode(node, &pf->if_mode); in enetc_pf_probe()
1281 err = enetc_mdiobus_create(pf, node); in enetc_pf_probe()
1298 enetc_mdiobus_destroy(pf); in enetc_pf_probe()
1324 struct enetc_pf *pf = enetc_si_priv(si); in enetc_pf_remove() local
1329 if (pf->num_vfs) in enetc_pf_remove()
1335 enetc_mdiobus_destroy(pf); in enetc_pf_remove()