Lines Matching full:mii
3 mii.c: MII interface library
34 #include <linux/mii.h>
36 static u32 mii_get_an(struct mii_if_info *mii, u16 addr) in mii_get_an() argument
40 advert = mii->mdio_read(mii->dev, mii->phy_id, addr); in mii_get_an()
47 * @mii: MII interface
55 int mii_ethtool_gset(struct mii_if_info *mii, struct ethtool_cmd *ecmd) in mii_ethtool_gset() argument
57 struct net_device *dev = mii->dev; in mii_ethtool_gset()
65 if (mii->supports_gmii) in mii_ethtool_gset()
76 ecmd->phy_address = mii->phy_id; in mii_ethtool_gset()
81 bmcr = mii->mdio_read(dev, mii->phy_id, MII_BMCR); in mii_ethtool_gset()
82 bmsr = mii->mdio_read(dev, mii->phy_id, MII_BMSR); in mii_ethtool_gset()
83 if (mii->supports_gmii) { in mii_ethtool_gset()
84 ctrl1000 = mii->mdio_read(dev, mii->phy_id, MII_CTRL1000); in mii_ethtool_gset()
85 stat1000 = mii->mdio_read(dev, mii->phy_id, MII_STAT1000); in mii_ethtool_gset()
91 ecmd->advertising |= mii_get_an(mii, MII_ADVERTISE); in mii_ethtool_gset()
92 if (mii->supports_gmii) in mii_ethtool_gset()
97 ecmd->lp_advertising = mii_get_an(mii, MII_LPA); in mii_ethtool_gset()
130 mii->full_duplex = ecmd->duplex; in mii_ethtool_gset()
139 * @mii: MII interface
145 void mii_ethtool_get_link_ksettings(struct mii_if_info *mii, in mii_ethtool_get_link_ksettings() argument
148 struct net_device *dev = mii->dev; in mii_ethtool_get_link_ksettings()
155 if (mii->supports_gmii) in mii_ethtool_get_link_ksettings()
163 cmd->base.phy_address = mii->phy_id; in mii_ethtool_get_link_ksettings()
168 bmcr = mii->mdio_read(dev, mii->phy_id, MII_BMCR); in mii_ethtool_get_link_ksettings()
169 bmsr = mii->mdio_read(dev, mii->phy_id, MII_BMSR); in mii_ethtool_get_link_ksettings()
170 if (mii->supports_gmii) { in mii_ethtool_get_link_ksettings()
171 ctrl1000 = mii->mdio_read(dev, mii->phy_id, MII_CTRL1000); in mii_ethtool_get_link_ksettings()
172 stat1000 = mii->mdio_read(dev, mii->phy_id, MII_STAT1000); in mii_ethtool_get_link_ksettings()
178 advertising |= mii_get_an(mii, MII_ADVERTISE); in mii_ethtool_get_link_ksettings()
179 if (mii->supports_gmii) in mii_ethtool_get_link_ksettings()
183 lp_advertising = mii_get_an(mii, MII_LPA); in mii_ethtool_get_link_ksettings()
218 mii->full_duplex = cmd->base.duplex; in mii_ethtool_get_link_ksettings()
232 * @mii: MII interface
237 int mii_ethtool_sset(struct mii_if_info *mii, struct ethtool_cmd *ecmd) in mii_ethtool_sset() argument
239 struct net_device *dev = mii->dev; in mii_ethtool_sset()
252 if (ecmd->phy_address != mii->phy_id) in mii_ethtool_sset()
256 if ((speed == SPEED_1000) && (!mii->supports_gmii)) in mii_ethtool_sset()
274 advert = mii->mdio_read(dev, mii->phy_id, MII_ADVERTISE); in mii_ethtool_sset()
276 if (mii->supports_gmii) { in mii_ethtool_sset()
277 advert2 = mii->mdio_read(dev, mii->phy_id, MII_CTRL1000); in mii_ethtool_sset()
282 if (mii->supports_gmii) in mii_ethtool_sset()
286 mii->mdio_write(dev, mii->phy_id, MII_ADVERTISE, tmp); in mii_ethtool_sset()
287 mii->advertising = tmp; in mii_ethtool_sset()
289 if ((mii->supports_gmii) && (advert2 != tmp2)) in mii_ethtool_sset()
290 mii->mdio_write(dev, mii->phy_id, MII_CTRL1000, tmp2); in mii_ethtool_sset()
293 bmcr = mii->mdio_read(dev, mii->phy_id, MII_BMCR); in mii_ethtool_sset()
295 mii->mdio_write(dev, mii->phy_id, MII_BMCR, bmcr); in mii_ethtool_sset()
297 mii->force_media = 0; in mii_ethtool_sset()
302 bmcr = mii->mdio_read(dev, mii->phy_id, MII_BMCR); in mii_ethtool_sset()
311 mii->full_duplex = 1; in mii_ethtool_sset()
313 mii->full_duplex = 0; in mii_ethtool_sset()
315 mii->mdio_write(dev, mii->phy_id, MII_BMCR, tmp); in mii_ethtool_sset()
317 mii->force_media = 1; in mii_ethtool_sset()
324 * @mii: MII interfaces
329 int mii_ethtool_set_link_ksettings(struct mii_if_info *mii, in mii_ethtool_set_link_ksettings() argument
332 struct net_device *dev = mii->dev; in mii_ethtool_set_link_ksettings()
343 if (cmd->base.phy_address != mii->phy_id) in mii_ethtool_set_link_ksettings()
348 if ((speed == SPEED_1000) && (!mii->supports_gmii)) in mii_ethtool_set_link_ksettings()
370 advert = mii->mdio_read(dev, mii->phy_id, MII_ADVERTISE); in mii_ethtool_set_link_ksettings()
372 if (mii->supports_gmii) { in mii_ethtool_set_link_ksettings()
373 advert2 = mii->mdio_read(dev, mii->phy_id, in mii_ethtool_set_link_ksettings()
380 if (mii->supports_gmii) in mii_ethtool_set_link_ksettings()
383 mii->mdio_write(dev, mii->phy_id, MII_ADVERTISE, tmp); in mii_ethtool_set_link_ksettings()
384 mii->advertising = tmp; in mii_ethtool_set_link_ksettings()
386 if ((mii->supports_gmii) && (advert2 != tmp2)) in mii_ethtool_set_link_ksettings()
387 mii->mdio_write(dev, mii->phy_id, MII_CTRL1000, tmp2); in mii_ethtool_set_link_ksettings()
390 bmcr = mii->mdio_read(dev, mii->phy_id, MII_BMCR); in mii_ethtool_set_link_ksettings()
392 mii->mdio_write(dev, mii->phy_id, MII_BMCR, bmcr); in mii_ethtool_set_link_ksettings()
394 mii->force_media = 0; in mii_ethtool_set_link_ksettings()
399 bmcr = mii->mdio_read(dev, mii->phy_id, MII_BMCR); in mii_ethtool_set_link_ksettings()
408 mii->full_duplex = 1; in mii_ethtool_set_link_ksettings()
410 mii->full_duplex = 0; in mii_ethtool_set_link_ksettings()
413 mii->mdio_write(dev, mii->phy_id, MII_BMCR, tmp); in mii_ethtool_set_link_ksettings()
415 mii->force_media = 1; in mii_ethtool_set_link_ksettings()
421 * mii_check_gmii_support - check if the MII supports Gb interfaces
422 * @mii: the MII interface
424 int mii_check_gmii_support(struct mii_if_info *mii) in mii_check_gmii_support() argument
428 reg = mii->mdio_read(mii->dev, mii->phy_id, MII_BMSR); in mii_check_gmii_support()
430 reg = mii->mdio_read(mii->dev, mii->phy_id, MII_ESTATUS); in mii_check_gmii_support()
440 * @mii: the MII interface
442 * Returns 1 if the MII reports link status up/ok, 0 otherwise.
444 int mii_link_ok (struct mii_if_info *mii) in mii_link_ok() argument
446 /* first, a dummy read, needed to latch some MII phys */ in mii_link_ok()
447 mii->mdio_read(mii->dev, mii->phy_id, MII_BMSR); in mii_link_ok()
448 if (mii->mdio_read(mii->dev, mii->phy_id, MII_BMSR) & BMSR_LSTATUS) in mii_link_ok()
455 * @mii: the MII interface
459 int mii_nway_restart (struct mii_if_info *mii) in mii_nway_restart() argument
465 bmcr = mii->mdio_read(mii->dev, mii->phy_id, MII_BMCR); in mii_nway_restart()
469 mii->mdio_write(mii->dev, mii->phy_id, MII_BMCR, bmcr); in mii_nway_restart()
477 * mii_check_link - check MII link status
478 * @mii: MII interface
484 void mii_check_link (struct mii_if_info *mii) in mii_check_link() argument
486 int cur_link = mii_link_ok(mii); in mii_check_link()
487 int prev_link = netif_carrier_ok(mii->dev); in mii_check_link()
490 netif_carrier_on(mii->dev); in mii_check_link()
492 netif_carrier_off(mii->dev); in mii_check_link()
496 * mii_check_media - check the MII interface for a carrier/speed/duplex change
497 * @mii: the MII interface
499 * @init_media: OK to save duplex mode in @mii
504 unsigned int mii_check_media (struct mii_if_info *mii, in mii_check_media() argument
513 old_carrier = netif_carrier_ok(mii->dev) ? 1 : 0; in mii_check_media()
514 new_carrier = (unsigned int) mii_link_ok(mii); in mii_check_media()
524 netif_carrier_off(mii->dev); in mii_check_media()
526 netdev_info(mii->dev, "link down\n"); in mii_check_media()
533 netif_carrier_on(mii->dev); in mii_check_media()
535 if (mii->force_media) { in mii_check_media()
537 netdev_info(mii->dev, "link up\n"); in mii_check_media()
541 /* get MII advertise and LPA values */ in mii_check_media()
542 if ((!init_media) && (mii->advertising)) in mii_check_media()
543 advertise = mii->advertising; in mii_check_media()
545 advertise = mii->mdio_read(mii->dev, mii->phy_id, MII_ADVERTISE); in mii_check_media()
546 mii->advertising = advertise; in mii_check_media()
548 lpa = mii->mdio_read(mii->dev, mii->phy_id, MII_LPA); in mii_check_media()
549 if (mii->supports_gmii) in mii_check_media()
550 lpa2 = mii->mdio_read(mii->dev, mii->phy_id, MII_STAT1000); in mii_check_media()
559 netdev_info(mii->dev, "link up, %uMbps, %s-duplex, lpa 0x%04X\n", in mii_check_media()
566 if ((init_media) || (mii->full_duplex != duplex)) { in mii_check_media()
567 mii->full_duplex = duplex; in mii_check_media()
575 * generic_mii_ioctl - main MII ioctl interface
576 * @mii_if: the MII interface
577 * @mii_data: MII ioctl data structure
578 * @cmd: MII ioctl command
654 MODULE_DESCRIPTION ("MII hardware support library");