Lines Matching full:mdio
2 * mdio.c: Generic support for MDIO-compatible transceivers
14 #include <linux/mdio.h>
17 MODULE_DESCRIPTION("Generic support for MDIO-compatible transceivers");
22 * mdio45_probe - probe for an MDIO (clause 45) device
23 * @mdio: MDIO interface
26 * This sets @prtad and @mmds in the MDIO interface if successful.
29 int mdio45_probe(struct mdio_if_info *mdio, int prtad) in mdio45_probe() argument
37 stat2 = mdio->mdio_read(mdio->dev, prtad, mmd, MDIO_STAT2); in mdio45_probe()
43 devs1 = mdio->mdio_read(mdio->dev, prtad, mmd, MDIO_DEVS1); in mdio45_probe()
44 devs2 = mdio->mdio_read(mdio->dev, prtad, mmd, MDIO_DEVS2); in mdio45_probe()
48 mdio->prtad = prtad; in mdio45_probe()
49 mdio->mmds = devs1 | (devs2 << 16); in mdio45_probe()
58 * mdio_set_flag - set or clear flag in an MDIO register
59 * @mdio: MDIO interface
69 int mdio_set_flag(const struct mdio_if_info *mdio, in mdio_set_flag() argument
73 int old_val = mdio->mdio_read(mdio->dev, prtad, devad, addr); in mdio_set_flag()
84 return mdio->mdio_write(mdio->dev, prtad, devad, addr, new_val); in mdio_set_flag()
90 * @mdio: MDIO interface
94 * @mmd_mask is normally @mdio->mmds, but if loopback is enabled
97 int mdio45_links_ok(const struct mdio_if_info *mdio, u32 mmd_mask) in mdio45_links_ok() argument
103 reg = mdio->mdio_read(mdio->dev, mdio->prtad, in mdio45_links_ok()
113 mdio->mdio_read(mdio->dev, mdio->prtad, in mdio45_links_ok()
117 mdio->mdio_read(mdio->dev, mdio->prtad, in mdio45_links_ok()
121 reg = mdio->mdio_read(mdio->dev, mdio->prtad, in mdio45_links_ok()
136 * @mdio: MDIO interface
140 int mdio45_nway_restart(const struct mdio_if_info *mdio) in mdio45_nway_restart() argument
142 if (!(mdio->mmds & MDIO_DEVS_AN)) in mdio45_nway_restart()
145 mdio_set_flag(mdio, mdio->prtad, MDIO_MMD_AN, MDIO_CTRL1, in mdio45_nway_restart()
151 static u32 mdio45_get_an(const struct mdio_if_info *mdio, u16 addr) in mdio45_get_an() argument
156 reg = mdio->mdio_read(mdio->dev, mdio->prtad, MDIO_MMD_AN, addr); in mdio45_get_an()
174 * @mdio: MDIO interface
186 void mdio45_ethtool_gset_npage(const struct mdio_if_info *mdio, in mdio45_ethtool_gset_npage() argument
197 ecmd->phy_address = mdio->prtad; in mdio45_ethtool_gset_npage()
199 mdio->mode_support & (MDIO_SUPPORTS_C45 | MDIO_SUPPORTS_C22); in mdio45_ethtool_gset_npage()
201 reg = mdio->mdio_read(mdio->dev, mdio->prtad, MDIO_MMD_PMAPMD, in mdio45_ethtool_gset_npage()
210 reg = mdio->mdio_read(mdio->dev, mdio->prtad, MDIO_MMD_PMAPMD, in mdio45_ethtool_gset_npage()
237 reg = mdio->mdio_read(mdio->dev, mdio->prtad, MDIO_MMD_PMAPMD, in mdio45_ethtool_gset_npage()
245 reg = mdio->mdio_read(mdio->dev, mdio->prtad, MDIO_MMD_PMAPMD, in mdio45_ethtool_gset_npage()
260 if (mdio->mmds & MDIO_DEVS_AN) { in mdio45_ethtool_gset_npage()
262 reg = mdio->mdio_read(mdio->dev, mdio->prtad, MDIO_MMD_AN, in mdio45_ethtool_gset_npage()
268 mdio45_get_an(mdio, MDIO_AN_ADVERTISE) | in mdio45_ethtool_gset_npage()
279 int an_stat = mdio->mdio_read(mdio->dev, mdio->prtad, in mdio45_ethtool_gset_npage()
286 mdio45_get_an(mdio, MDIO_AN_LPA) | npage_lpa; in mdio45_ethtool_gset_npage()
314 reg = mdio->mdio_read(mdio->dev, mdio->prtad, MDIO_MMD_PMAPMD, in mdio45_ethtool_gset_npage()
327 switch (mdio->mdio_read(mdio->dev, mdio->prtad, MDIO_MMD_PMAPMD, in mdio45_ethtool_gset_npage()
346 * @mdio: MDIO interface
358 void mdio45_ethtool_ksettings_get_npage(const struct mdio_if_info *mdio, in mdio45_ethtool_ksettings_get_npage() argument
368 cmd->base.phy_address = mdio->prtad; in mdio45_ethtool_ksettings_get_npage()
370 mdio->mode_support & (MDIO_SUPPORTS_C45 | MDIO_SUPPORTS_C22); in mdio45_ethtool_ksettings_get_npage()
372 reg = mdio->mdio_read(mdio->dev, mdio->prtad, MDIO_MMD_PMAPMD, in mdio45_ethtool_ksettings_get_npage()
381 reg = mdio->mdio_read(mdio->dev, mdio->prtad, MDIO_MMD_PMAPMD, in mdio45_ethtool_ksettings_get_npage()
408 reg = mdio->mdio_read(mdio->dev, mdio->prtad, MDIO_MMD_PMAPMD, in mdio45_ethtool_ksettings_get_npage()
416 reg = mdio->mdio_read(mdio->dev, mdio->prtad, MDIO_MMD_PMAPMD, in mdio45_ethtool_ksettings_get_npage()
431 if (mdio->mmds & MDIO_DEVS_AN) { in mdio45_ethtool_ksettings_get_npage()
433 reg = mdio->mdio_read(mdio->dev, mdio->prtad, MDIO_MMD_AN, in mdio45_ethtool_ksettings_get_npage()
439 mdio45_get_an(mdio, MDIO_AN_ADVERTISE) | in mdio45_ethtool_ksettings_get_npage()
450 int an_stat = mdio->mdio_read(mdio->dev, mdio->prtad, in mdio45_ethtool_ksettings_get_npage()
458 mdio45_get_an(mdio, MDIO_AN_LPA) | npage_lpa; in mdio45_ethtool_ksettings_get_npage()
486 reg = mdio->mdio_read(mdio->dev, mdio->prtad, MDIO_MMD_PMAPMD, in mdio45_ethtool_ksettings_get_npage()
505 switch (mdio->mdio_read(mdio->dev, mdio->prtad, MDIO_MMD_PMAPMD, in mdio45_ethtool_ksettings_get_npage()
523 * mdio_mii_ioctl - MII ioctl interface for MDIO (clause 22 or 45) PHYs
524 * @mdio: MDIO interface
530 int mdio_mii_ioctl(const struct mdio_if_info *mdio, in mdio_mii_ioctl() argument
539 if (mdio->prtad == MDIO_PRTAD_NONE) in mdio_mii_ioctl()
541 mii_data->phy_id = mdio->prtad; in mdio_mii_ioctl()
552 if ((mdio->mode_support & MDIO_SUPPORTS_C45) && in mdio_mii_ioctl()
556 } else if ((mdio->mode_support & MDIO_SUPPORTS_C22) && in mdio_mii_ioctl()
561 } else if ((mdio->mode_support & MDIO_EMULATE_C22) && in mdio_mii_ioctl()
562 mdio->prtad != MDIO_PRTAD_NONE && in mdio_mii_ioctl()
563 mii_data->phy_id == mdio->prtad) { in mdio_mii_ioctl()
565 prtad = mdio->prtad; in mdio_mii_ioctl()
571 devad = __ffs(mdio->mmds); in mdio_mii_ioctl()
575 if (!(mdio->mmds & MDIO_DEVS_AN)) in mdio_mii_ioctl()
591 int rc = mdio->mdio_read(mdio->dev, prtad, devad, addr); in mdio_mii_ioctl()
597 return mdio->mdio_write(mdio->dev, prtad, devad, addr, in mdio_mii_ioctl()