Lines Matching refs:mac_cb

55 static enum mac_mode hns_get_enet_interface(const struct hns_mac_cb *mac_cb)
57 switch (mac_cb->max_speed) {
59 return g_mac_mode_100[mac_cb->phy_if];
61 return g_mac_mode_1000[mac_cb->phy_if];
90 void hns_mac_get_link_status(struct hns_mac_cb *mac_cb, u32 *link_status)
95 mac_ctrl_drv = hns_mac_get_drv(mac_cb);
102 if (mac_cb->media_type == HNAE_MEDIA_TYPE_FIBER) {
103 ret = mac_cb->dsaf_dev->misc_op->get_sfp_prsnt(mac_cb,
113 if (*link_status && !mac_cb->link)
117 mac_cb->link = *link_status;
120 int hns_mac_get_port_info(struct hns_mac_cb *mac_cb,
126 mac_ctrl_drv = hns_mac_get_drv(mac_cb);
144 *@mac_cb: mac device
149 bool hns_mac_need_adjust_link(struct hns_mac_cb *mac_cb, int speed, int duplex)
153 mac_ctrl_drv = (struct mac_driver *)(mac_cb->priv.mac);
162 void hns_mac_adjust_link(struct hns_mac_cb *mac_cb, int speed, int duplex)
167 mac_ctrl_drv = (struct mac_driver *)(mac_cb->priv.mac);
169 mac_cb->speed = speed;
170 mac_cb->half_duplex = !duplex;
176 dev_err(mac_cb->dev,
178 mac_cb->dsaf_dev->ae_dev.name,
179 mac_cb->mac_id, ret);
187 *@mac_cb: mac device
192 int hns_mac_get_inner_port_num(struct hns_mac_cb *mac_cb, u8 vmid, u8 *port_num)
198 if (mac_cb->dsaf_dev->dsaf_mode <= DSAF_MODE_ENABLE) {
199 if (mac_cb->mac_id != DSAF_MAX_PORT_NUM) {
200 dev_err(mac_cb->dev,
202 mac_cb->dsaf_dev->ae_dev.name,
203 mac_cb->mac_id, vmid);
206 } else if (mac_cb->dsaf_dev->dsaf_mode < DSAF_MODE_MAX) {
207 if (mac_cb->mac_id >= DSAF_MAX_PORT_NUM) {
208 dev_err(mac_cb->dev,
210 mac_cb->dsaf_dev->ae_dev.name,
211 mac_cb->mac_id, vmid);
215 dev_err(mac_cb->dev, "dsaf mode invalid, %s mac%d!\n",
216 mac_cb->dsaf_dev->ae_dev.name, mac_cb->mac_id);
220 if (vmid >= mac_cb->dsaf_dev->rcb_common[0]->max_vfn) {
221 dev_err(mac_cb->dev, "input invalid, %s mac%d vmid%d !\n",
222 mac_cb->dsaf_dev->ae_dev.name, mac_cb->mac_id, vmid);
226 q_num_per_vf = mac_cb->dsaf_dev->rcb_common[0]->max_q_per_vf;
227 vf_num_per_port = mac_cb->dsaf_dev->rcb_common[0]->max_vfn;
230 vf_num_per_port * q_num_per_vf * mac_cb->mac_id;
232 switch (mac_cb->dsaf_dev->dsaf_mode) {
254 dev_err(mac_cb->dev, "dsaf mode invalid, %s mac%d!\n",
255 mac_cb->dsaf_dev->ae_dev.name, mac_cb->mac_id);
267 *@mac_cb: mac device
271 int hns_mac_change_vf_addr(struct hns_mac_cb *mac_cb,
275 struct mac_driver *mac_ctrl_drv = hns_mac_get_drv(mac_cb);
276 struct dsaf_device *dsaf_dev = mac_cb->dsaf_dev;
280 old_entry = &mac_cb->addr_entry_idx[vmid];
284 mac_entry.in_port_num = mac_cb->mac_id;
285 ret = hns_mac_get_inner_port_num(mac_cb, (u8)vmid,
295 mac_cb->mac_id,
307 mac_ctrl_drv->set_mac_addr(mac_cb->priv.mac, addr);
314 int hns_mac_add_uc_addr(struct hns_mac_cb *mac_cb, u8 vf_id,
317 struct dsaf_device *dsaf_dev = mac_cb->dsaf_dev;
326 mac_entry.in_port_num = mac_cb->mac_id;
327 ret = hns_mac_get_inner_port_num(mac_cb, vf_id, &mac_entry.port_num);
334 int hns_mac_rm_uc_addr(struct hns_mac_cb *mac_cb, u8 vf_id,
337 struct dsaf_device *dsaf_dev = mac_cb->dsaf_dev;
346 mac_entry.in_port_num = mac_cb->mac_id;
347 ret = hns_mac_get_inner_port_num(mac_cb, vf_id, &mac_entry.port_num);
354 int hns_mac_set_multi(struct hns_mac_cb *mac_cb,
358 struct dsaf_device *dsaf_dev = mac_cb->dsaf_dev;
364 mac_entry.in_port_num = mac_cb->mac_id;
374 mac_cb->dsaf_dev->ae_dev.name,
375 mac_cb->mac_id, ret);
383 int hns_mac_clr_multicast(struct hns_mac_cb *mac_cb, int vfn)
385 struct dsaf_device *dsaf_dev = mac_cb->dsaf_dev;
387 int ret = hns_mac_get_inner_port_num(mac_cb, vfn, &port_num);
392 return hns_dsaf_clr_mac_mc_port(dsaf_dev, mac_cb->mac_id, port_num);
396 struct hns_mac_cb *mac_cb)
398 param->vaddr = mac_cb->vaddr;
399 param->mac_mode = hns_get_enet_interface(mac_cb);
400 ether_addr_copy(param->addr, mac_cb->addr_entry_idx[0].addr);
401 param->mac_id = mac_cb->mac_id;
402 param->dev = mac_cb->dev;
407 * @mac_cb: mac device
413 static int hns_mac_port_config_bc_en(struct hns_mac_cb *mac_cb,
417 struct dsaf_device *dsaf_dev = mac_cb->dsaf_dev;
421 if (mac_cb->mac_type == HNAE_PORT_DEBUG)
427 mac_entry.in_port_num = mac_cb->mac_id;
442 * @mac_cb: mac device
447 int hns_mac_vm_config_bc_en(struct hns_mac_cb *mac_cb, u32 vmid, bool enable)
450 struct dsaf_device *dsaf_dev = mac_cb->dsaf_dev;
455 if (mac_cb->mac_type == HNAE_PORT_DEBUG)
458 uc_mac_entry = &mac_cb->addr_entry_idx[vmid];
463 mac_entry.in_port_num = mac_cb->mac_id;
464 ret = hns_mac_get_inner_port_num(mac_cb, vmid, &port_num);
479 int hns_mac_wait_fifo_clean(struct hns_mac_cb *mac_cb)
481 struct mac_driver *drv = hns_mac_get_drv(mac_cb);
489 void hns_mac_reset(struct hns_mac_cb *mac_cb)
491 struct mac_driver *drv = hns_mac_get_drv(mac_cb);
492 bool is_ver1 = AE_IS_VER1(mac_cb->dsaf_dev->dsaf_ver);
497 drv->config_max_frame_length(drv, mac_cb->max_frm);
500 drv->set_tx_auto_pause_frames(drv, mac_cb->tx_pause_frm_time);
506 if (mac_cb->mac_type == HNAE_PORT_DEBUG)
513 int hns_mac_set_mtu(struct hns_mac_cb *mac_cb, u32 new_mtu, u32 buf_size)
515 struct mac_driver *drv = hns_mac_get_drv(mac_cb);
530 mac_cb->max_frm = new_frm;
535 void hns_mac_start(struct hns_mac_cb *mac_cb)
537 struct mac_driver *mac_drv = hns_mac_get_drv(mac_cb);
547 mac_drv->mac_enable(mac_cb->priv.mac, MAC_COMM_MODE_RX_AND_TX);
552 void hns_mac_stop(struct hns_mac_cb *mac_cb)
554 struct mac_driver *mac_ctrl_drv = hns_mac_get_drv(mac_cb);
564 mac_ctrl_drv->mac_disable(mac_cb->priv.mac,
568 mac_cb->link = 0;
569 mac_cb->dsaf_dev->misc_op->cpld_reset_led(mac_cb);
574 * @mac_cb: mac control block
578 void hns_mac_get_autoneg(struct hns_mac_cb *mac_cb, u32 *auto_neg)
580 struct mac_driver *mac_ctrl_drv = hns_mac_get_drv(mac_cb);
590 * @mac_cb: mac control block
595 void hns_mac_get_pauseparam(struct hns_mac_cb *mac_cb, u32 *rx_en, u32 *tx_en)
597 struct mac_driver *mac_ctrl_drv = hns_mac_get_drv(mac_cb);
609 * @mac_cb: mac control block
613 int hns_mac_set_autoneg(struct hns_mac_cb *mac_cb, u8 enable)
615 struct mac_driver *mac_ctrl_drv = hns_mac_get_drv(mac_cb);
617 if (mac_cb->phy_if == PHY_INTERFACE_MODE_XGMII && enable) {
618 dev_err(mac_cb->dev, "enabling autoneg is not allowed!\n");
630 * @mac_cb: mac control block
635 int hns_mac_set_pauseparam(struct hns_mac_cb *mac_cb, u32 rx_en, u32 tx_en)
637 struct mac_driver *mac_ctrl_drv = hns_mac_get_drv(mac_cb);
638 bool is_ver1 = AE_IS_VER1(mac_cb->dsaf_dev->dsaf_ver);
640 if (mac_cb->mac_type == HNAE_PORT_DEBUG) {
642 dev_err(mac_cb->dev, "macv1 can't enable tx/rx_pause!\n");
655 * @mac_cb: mac control block
658 static int hns_mac_init_ex(struct hns_mac_cb *mac_cb)
664 hns_dsaf_fix_mac_mode(mac_cb);
667 hns_mac_param_get(&param, mac_cb);
670 drv = (struct mac_driver *)hns_gmac_config(mac_cb, &param);
672 drv = (struct mac_driver *)hns_xgmac_config(mac_cb, &param);
677 mac_cb->priv.mac = (void *)drv;
678 hns_mac_reset(mac_cb);
680 hns_mac_adjust_link(mac_cb, mac_cb->speed, !mac_cb->half_duplex);
682 ret = hns_mac_port_config_bc_en(mac_cb, mac_cb->mac_id, 0, true);
689 drv->mac_free(mac_cb->priv.mac);
690 mac_cb->priv.mac = NULL;
716 hns_mac_register_phydev(struct mii_bus *mdio, struct hns_mac_cb *mac_cb,
724 rc = fwnode_property_read_string(mac_cb->fw_port,
753 mac_cb->phy_dev = phy;
760 static int hns_mac_register_phy(struct hns_mac_cb *mac_cb)
769 if (!to_acpi_device_node(mac_cb->fw_port))
773 mac_cb->fw_port, "mdio-node", 0, &args);
779 addr = hns_mac_phy_parse_addr(mac_cb->dev, mac_cb->fw_port);
786 dev_err(mac_cb->dev, "mac%d mdio pdev is NULL\n",
787 mac_cb->mac_id);
793 dev_err(mac_cb->dev,
795 mac_cb->mac_id);
799 rc = hns_mac_register_phydev(mii_bus, mac_cb, addr);
801 dev_dbg(mac_cb->dev, "mac%d register phy addr:%d\n",
802 mac_cb->mac_id, addr);
807 static void hns_mac_remove_phydev(struct hns_mac_cb *mac_cb)
809 if (!to_acpi_device_node(mac_cb->fw_port) || !mac_cb->phy_dev)
812 phy_device_remove(mac_cb->phy_dev);
813 phy_device_free(mac_cb->phy_dev);
815 mac_cb->phy_dev = NULL;
832 *@mac_cb: mac device
835 static int hns_mac_get_info(struct hns_mac_cb *mac_cb)
844 mac_cb->link = false;
845 mac_cb->half_duplex = false;
846 mac_cb->media_type = HNAE_MEDIA_TYPE_UNKNOWN;
847 mac_cb->speed = mac_phy_to_speed[mac_cb->phy_if];
848 mac_cb->max_speed = mac_cb->speed;
850 if (mac_cb->phy_if == PHY_INTERFACE_MODE_SGMII) {
851 mac_cb->if_support = MAC_GMAC_SUPPORTED;
852 mac_cb->if_support |= SUPPORTED_1000baseT_Full;
853 } else if (mac_cb->phy_if == PHY_INTERFACE_MODE_XGMII) {
854 mac_cb->if_support = SUPPORTED_10000baseR_FEC;
855 mac_cb->if_support |= SUPPORTED_10000baseKR_Full;
858 mac_cb->max_frm = MAC_DEFAULT_MTU;
859 mac_cb->tx_pause_frm_time = MAC_DEFAULT_PAUSE_TIME;
860 mac_cb->port_rst_off = mac_cb->mac_id;
861 mac_cb->port_mode_off = 0;
866 if (!mac_cb->fw_port) {
867 np = of_parse_phandle(mac_cb->dev->of_node, "phy-handle",
868 mac_cb->mac_id);
869 mac_cb->phy_dev = of_phy_find_device(np);
870 if (mac_cb->phy_dev) {
874 put_device(&mac_cb->phy_dev->mdio.dev);
876 dev_dbg(mac_cb->dev, "mac%d phy_node: %pOFn\n",
877 mac_cb->mac_id, np);
884 if (is_of_node(mac_cb->fw_port)) {
886 np = of_parse_phandle(to_of_node(mac_cb->fw_port),
888 mac_cb->phy_dev = of_phy_find_device(np);
889 if (mac_cb->phy_dev) {
893 put_device(&mac_cb->phy_dev->mdio.dev);
894 dev_dbg(mac_cb->dev, "mac%d phy_node: %pOFn\n",
895 mac_cb->mac_id, np);
899 np = of_parse_phandle(to_of_node(mac_cb->fw_port),
904 dev_err(mac_cb->dev, "serdes-syscon is needed!\n");
907 mac_cb->serdes_ctrl = syscon;
909 ret = fwnode_property_read_u32(mac_cb->fw_port,
911 &mac_cb->port_rst_off);
913 dev_dbg(mac_cb->dev,
915 mac_cb->mac_id);
918 ret = fwnode_property_read_u32(mac_cb->fw_port,
920 &mac_cb->port_mode_off);
922 dev_dbg(mac_cb->dev,
924 mac_cb->mac_id);
928 to_of_node(mac_cb->fw_port), "cpld-syscon", 1, 0,
931 dev_dbg(mac_cb->dev, "mac%d no cpld-syscon found.\n",
932 mac_cb->mac_id);
933 mac_cb->cpld_ctrl = NULL;
937 dev_dbg(mac_cb->dev, "no cpld-syscon found!\n");
938 mac_cb->cpld_ctrl = NULL;
940 mac_cb->cpld_ctrl = syscon;
941 mac_cb->cpld_ctrl_reg = cpld_args.args[0];
944 } else if (is_acpi_node(mac_cb->fw_port)) {
945 ret = hns_mac_register_phy(mac_cb);
954 dev_err(mac_cb->dev, "mac%d cannot find phy node\n",
955 mac_cb->mac_id);
958 if (!fwnode_property_read_string(mac_cb->fw_port, "media-type",
963 mac_cb->media_type = media_type_defs[i].value;
969 if (fwnode_property_read_u8_array(mac_cb->fw_port, "mc-mac-mask",
970 mac_cb->mc_mask, ETH_ALEN)) {
971 dev_warn(mac_cb->dev,
973 eth_broadcast_addr(mac_cb->mc_mask);
998 struct hns_mac_cb *mac_cb, u32 mac_mode_idx)
1001 int mac_id = mac_cb->mac_id;
1003 if (mac_cb->mac_type == HNAE_PORT_SERVICE)
1013 * @mac_cb: mac control block
1017 hns_mac_get_cfg(struct dsaf_device *dsaf_dev, struct hns_mac_cb *mac_cb)
1022 mac_cb->dsaf_dev = dsaf_dev;
1023 mac_cb->dev = dsaf_dev->dev;
1025 mac_cb->sys_ctl_vaddr = dsaf_dev->sc_base;
1026 mac_cb->serdes_vaddr = dsaf_dev->sds_base;
1028 mac_cb->sfp_prsnt = 0;
1029 mac_cb->txpkt_for_led = 0;
1030 mac_cb->rxpkt_for_led = 0;
1033 mac_cb->mac_type = HNAE_PORT_SERVICE;
1035 mac_cb->mac_type = HNAE_PORT_DEBUG;
1037 mac_cb->phy_if = dsaf_dev->misc_op->get_phy_if(mac_cb);
1039 ret = hns_mac_get_mode(mac_cb->phy_if);
1043 mac_cb->mac_id, ret);
1048 ret = hns_mac_get_info(mac_cb);
1052 mac_cb->dsaf_dev->misc_op->cpld_reset_led(mac_cb);
1053 mac_cb->vaddr = hns_mac_get_vaddr(dsaf_dev, mac_cb, mac_mode_idx);
1066 void hns_mac_enable(struct hns_mac_cb *mac_cb, enum mac_commom_mode mode)
1068 struct mac_driver *mac_ctrl_drv = hns_mac_get_drv(mac_cb);
1070 mac_ctrl_drv->mac_enable(mac_cb->priv.mac, mode);
1073 void hns_mac_disable(struct hns_mac_cb *mac_cb, enum mac_commom_mode mode)
1075 struct mac_driver *mac_ctrl_drv = hns_mac_get_drv(mac_cb);
1077 mac_ctrl_drv->mac_disable(mac_cb->priv.mac, mode);
1091 struct hns_mac_cb *mac_cb;
1108 mac_cb = devm_kzalloc(dsaf_dev->dev, sizeof(*mac_cb),
1110 if (!mac_cb) {
1114 mac_cb->fw_port = child;
1115 mac_cb->mac_id = (u8)port_id;
1116 dsaf_dev->mac_cb[port_id] = mac_cb;
1125 mac_cb = devm_kzalloc(dsaf_dev->dev, sizeof(*mac_cb),
1127 if (!mac_cb)
1130 mac_cb->mac_id = port_id;
1131 dsaf_dev->mac_cb[port_id] = mac_cb;
1135 /* init mac_cb for all port */
1137 mac_cb = dsaf_dev->mac_cb[port_id];
1138 if (!mac_cb)
1141 ret = hns_mac_get_cfg(dsaf_dev, mac_cb);
1145 ret = hns_mac_init_ex(mac_cb);
1159 if (!dsaf_dev->mac_cb[i])
1162 dsaf_dev->misc_op->cpld_reset_led(dsaf_dev->mac_cb[i]);
1163 hns_mac_remove_phydev(dsaf_dev->mac_cb[i]);
1164 dsaf_dev->mac_cb[i] = NULL;
1168 int hns_mac_config_mac_loopback(struct hns_mac_cb *mac_cb,
1172 struct mac_driver *drv = hns_mac_get_drv(mac_cb);
1182 void hns_mac_update_stats(struct hns_mac_cb *mac_cb)
1184 struct mac_driver *mac_ctrl_drv = hns_mac_get_drv(mac_cb);
1189 void hns_mac_get_stats(struct hns_mac_cb *mac_cb, u64 *data)
1191 struct mac_driver *mac_ctrl_drv = hns_mac_get_drv(mac_cb);
1196 void hns_mac_get_strings(struct hns_mac_cb *mac_cb,
1199 struct mac_driver *mac_ctrl_drv = hns_mac_get_drv(mac_cb);
1204 int hns_mac_get_sset_count(struct hns_mac_cb *mac_cb, int stringset)
1206 struct mac_driver *mac_ctrl_drv = hns_mac_get_drv(mac_cb);
1211 void hns_mac_set_promisc(struct hns_mac_cb *mac_cb, u8 en)
1213 struct mac_driver *mac_ctrl_drv = hns_mac_get_drv(mac_cb);
1215 hns_dsaf_set_promisc_tcam(mac_cb->dsaf_dev, mac_cb->mac_id, !!en);
1221 int hns_mac_get_regs_count(struct hns_mac_cb *mac_cb)
1223 struct mac_driver *mac_ctrl_drv = hns_mac_get_drv(mac_cb);
1228 void hns_mac_get_regs(struct hns_mac_cb *mac_cb, void *data)
1230 struct mac_driver *mac_ctrl_drv = hns_mac_get_drv(mac_cb);
1235 void hns_set_led_opt(struct hns_mac_cb *mac_cb)
1240 txpkts = mac_cb->txpkt_for_led - mac_cb->hw_stats.tx_good_pkts;
1241 rxpkts = mac_cb->rxpkt_for_led - mac_cb->hw_stats.rx_good_pkts;
1246 mac_cb->txpkt_for_led = mac_cb->hw_stats.tx_good_pkts;
1247 mac_cb->rxpkt_for_led = mac_cb->hw_stats.rx_good_pkts;
1248 mac_cb->dsaf_dev->misc_op->cpld_set_led(mac_cb, (int)mac_cb->link,
1249 mac_cb->speed, nic_data);
1252 int hns_cpld_led_set_id(struct hns_mac_cb *mac_cb,
1255 if (!mac_cb)
1258 return mac_cb->dsaf_dev->misc_op->cpld_set_led_id(mac_cb, status);