Lines Matching +full:twisted +full:- +full:pair
11 Written 1998-2002 by Donald Becker.
40 advert = mii->mdio_read(mii->dev, mii->phy_id, addr); in mii_get_an()
46 * mii_ethtool_gset - get settings that are specified in @ecmd
55 struct net_device *dev = mii->dev; in mii_ethtool_gset()
59 ecmd->supported = in mii_ethtool_gset()
63 if (mii->supports_gmii) in mii_ethtool_gset()
64 ecmd->supported |= SUPPORTED_1000baseT_Half | in mii_ethtool_gset()
67 /* only supports twisted-pair */ in mii_ethtool_gset()
68 ecmd->port = PORT_MII; in mii_ethtool_gset()
71 ecmd->transceiver = XCVR_INTERNAL; in mii_ethtool_gset()
74 ecmd->phy_address = mii->phy_id; in mii_ethtool_gset()
75 ecmd->mdio_support = ETH_MDIO_SUPPORTS_C22; in mii_ethtool_gset()
77 ecmd->advertising = ADVERTISED_TP | ADVERTISED_MII; in mii_ethtool_gset()
79 bmcr = mii->mdio_read(dev, mii->phy_id, MII_BMCR); in mii_ethtool_gset()
80 bmsr = mii->mdio_read(dev, mii->phy_id, MII_BMSR); in mii_ethtool_gset()
81 if (mii->supports_gmii) { in mii_ethtool_gset()
82 ctrl1000 = mii->mdio_read(dev, mii->phy_id, MII_CTRL1000); in mii_ethtool_gset()
83 stat1000 = mii->mdio_read(dev, mii->phy_id, MII_STAT1000); in mii_ethtool_gset()
86 ecmd->advertising |= mii_get_an(mii, MII_ADVERTISE); in mii_ethtool_gset()
87 if (mii->supports_gmii) in mii_ethtool_gset()
88 ecmd->advertising |= in mii_ethtool_gset()
92 ecmd->advertising |= ADVERTISED_Autoneg; in mii_ethtool_gset()
93 ecmd->autoneg = AUTONEG_ENABLE; in mii_ethtool_gset()
96 ecmd->lp_advertising = mii_get_an(mii, MII_LPA); in mii_ethtool_gset()
97 ecmd->lp_advertising |= in mii_ethtool_gset()
100 ecmd->lp_advertising = 0; in mii_ethtool_gset()
103 nego = ecmd->advertising & ecmd->lp_advertising; in mii_ethtool_gset()
108 ecmd->duplex = !!(nego & ADVERTISED_1000baseT_Full); in mii_ethtool_gset()
112 ecmd->duplex = !!(nego & ADVERTISED_100baseT_Full); in mii_ethtool_gset()
115 ecmd->duplex = !!(nego & ADVERTISED_10baseT_Full); in mii_ethtool_gset()
118 ecmd->autoneg = AUTONEG_DISABLE; in mii_ethtool_gset()
126 ecmd->duplex = (bmcr & BMCR_FULLDPLX) ? DUPLEX_FULL : DUPLEX_HALF; in mii_ethtool_gset()
129 mii->full_duplex = ecmd->duplex; in mii_ethtool_gset()
135 * mii_ethtool_get_link_ksettings - get settings that are specified in @cmd
145 struct net_device *dev = mii->dev; in mii_ethtool_get_link_ksettings()
152 if (mii->supports_gmii) in mii_ethtool_get_link_ksettings()
156 /* only supports twisted-pair */ in mii_ethtool_get_link_ksettings()
157 cmd->base.port = PORT_MII; in mii_ethtool_get_link_ksettings()
160 cmd->base.phy_address = mii->phy_id; in mii_ethtool_get_link_ksettings()
161 cmd->base.mdio_support = ETH_MDIO_SUPPORTS_C22; in mii_ethtool_get_link_ksettings()
165 bmcr = mii->mdio_read(dev, mii->phy_id, MII_BMCR); in mii_ethtool_get_link_ksettings()
166 bmsr = mii->mdio_read(dev, mii->phy_id, MII_BMSR); in mii_ethtool_get_link_ksettings()
167 if (mii->supports_gmii) { in mii_ethtool_get_link_ksettings()
168 ctrl1000 = mii->mdio_read(dev, mii->phy_id, MII_CTRL1000); in mii_ethtool_get_link_ksettings()
169 stat1000 = mii->mdio_read(dev, mii->phy_id, MII_STAT1000); in mii_ethtool_get_link_ksettings()
173 if (mii->supports_gmii) in mii_ethtool_get_link_ksettings()
178 cmd->base.autoneg = AUTONEG_ENABLE; in mii_ethtool_get_link_ksettings()
192 cmd->base.speed = SPEED_1000; in mii_ethtool_get_link_ksettings()
193 cmd->base.duplex = !!(nego & ADVERTISED_1000baseT_Full); in mii_ethtool_get_link_ksettings()
196 cmd->base.speed = SPEED_100; in mii_ethtool_get_link_ksettings()
197 cmd->base.duplex = !!(nego & ADVERTISED_100baseT_Full); in mii_ethtool_get_link_ksettings()
199 cmd->base.speed = SPEED_10; in mii_ethtool_get_link_ksettings()
200 cmd->base.duplex = !!(nego & ADVERTISED_10baseT_Full); in mii_ethtool_get_link_ksettings()
203 cmd->base.autoneg = AUTONEG_DISABLE; in mii_ethtool_get_link_ksettings()
205 cmd->base.speed = ((bmcr & BMCR_SPEED1000 && in mii_ethtool_get_link_ksettings()
210 cmd->base.duplex = (bmcr & BMCR_FULLDPLX) ? in mii_ethtool_get_link_ksettings()
217 cmd->base.speed = SPEED_UNKNOWN; in mii_ethtool_get_link_ksettings()
219 mii->full_duplex = cmd->base.duplex; in mii_ethtool_get_link_ksettings()
221 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported, in mii_ethtool_get_link_ksettings()
223 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising, in mii_ethtool_get_link_ksettings()
225 ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.lp_advertising, in mii_ethtool_get_link_ksettings()
232 * mii_ethtool_sset - set settings that are specified in @ecmd
240 struct net_device *dev = mii->dev; in mii_ethtool_sset()
246 return -EINVAL; in mii_ethtool_sset()
247 if (ecmd->duplex != DUPLEX_HALF && ecmd->duplex != DUPLEX_FULL) in mii_ethtool_sset()
248 return -EINVAL; in mii_ethtool_sset()
249 if (ecmd->port != PORT_MII) in mii_ethtool_sset()
250 return -EINVAL; in mii_ethtool_sset()
251 if (ecmd->transceiver != XCVR_INTERNAL) in mii_ethtool_sset()
252 return -EINVAL; in mii_ethtool_sset()
253 if (ecmd->phy_address != mii->phy_id) in mii_ethtool_sset()
254 return -EINVAL; in mii_ethtool_sset()
255 if (ecmd->autoneg != AUTONEG_DISABLE && ecmd->autoneg != AUTONEG_ENABLE) in mii_ethtool_sset()
256 return -EINVAL; in mii_ethtool_sset()
257 if ((speed == SPEED_1000) && (!mii->supports_gmii)) in mii_ethtool_sset()
258 return -EINVAL; in mii_ethtool_sset()
262 if (ecmd->autoneg == AUTONEG_ENABLE) { in mii_ethtool_sset()
266 if ((ecmd->advertising & (ADVERTISED_10baseT_Half | in mii_ethtool_sset()
272 return -EINVAL; in mii_ethtool_sset()
275 advert = mii->mdio_read(dev, mii->phy_id, MII_ADVERTISE); in mii_ethtool_sset()
277 if (mii->supports_gmii) { in mii_ethtool_sset()
278 advert2 = mii->mdio_read(dev, mii->phy_id, MII_CTRL1000); in mii_ethtool_sset()
281 tmp |= ethtool_adv_to_mii_adv_t(ecmd->advertising); in mii_ethtool_sset()
283 if (mii->supports_gmii) in mii_ethtool_sset()
285 ethtool_adv_to_mii_ctrl1000_t(ecmd->advertising); in mii_ethtool_sset()
287 mii->mdio_write(dev, mii->phy_id, MII_ADVERTISE, tmp); in mii_ethtool_sset()
288 mii->advertising = tmp; in mii_ethtool_sset()
290 if ((mii->supports_gmii) && (advert2 != tmp2)) in mii_ethtool_sset()
291 mii->mdio_write(dev, mii->phy_id, MII_CTRL1000, tmp2); in mii_ethtool_sset()
294 bmcr = mii->mdio_read(dev, mii->phy_id, MII_BMCR); in mii_ethtool_sset()
296 mii->mdio_write(dev, mii->phy_id, MII_BMCR, bmcr); in mii_ethtool_sset()
298 mii->force_media = 0; in mii_ethtool_sset()
303 bmcr = mii->mdio_read(dev, mii->phy_id, MII_BMCR); in mii_ethtool_sset()
310 if (ecmd->duplex == DUPLEX_FULL) { in mii_ethtool_sset()
312 mii->full_duplex = 1; in mii_ethtool_sset()
314 mii->full_duplex = 0; in mii_ethtool_sset()
316 mii->mdio_write(dev, mii->phy_id, MII_BMCR, tmp); in mii_ethtool_sset()
318 mii->force_media = 1; in mii_ethtool_sset()
324 * mii_ethtool_set_link_ksettings - set settings that are specified in @cmd
333 struct net_device *dev = mii->dev; in mii_ethtool_set_link_ksettings()
334 u32 speed = cmd->base.speed; in mii_ethtool_set_link_ksettings()
339 return -EINVAL; in mii_ethtool_set_link_ksettings()
340 if (cmd->base.duplex != DUPLEX_HALF && cmd->base.duplex != DUPLEX_FULL) in mii_ethtool_set_link_ksettings()
341 return -EINVAL; in mii_ethtool_set_link_ksettings()
342 if (cmd->base.port != PORT_MII) in mii_ethtool_set_link_ksettings()
343 return -EINVAL; in mii_ethtool_set_link_ksettings()
344 if (cmd->base.phy_address != mii->phy_id) in mii_ethtool_set_link_ksettings()
345 return -EINVAL; in mii_ethtool_set_link_ksettings()
346 if (cmd->base.autoneg != AUTONEG_DISABLE && in mii_ethtool_set_link_ksettings()
347 cmd->base.autoneg != AUTONEG_ENABLE) in mii_ethtool_set_link_ksettings()
348 return -EINVAL; in mii_ethtool_set_link_ksettings()
349 if ((speed == SPEED_1000) && (!mii->supports_gmii)) in mii_ethtool_set_link_ksettings()
350 return -EINVAL; in mii_ethtool_set_link_ksettings()
354 if (cmd->base.autoneg == AUTONEG_ENABLE) { in mii_ethtool_set_link_ksettings()
360 &advertising, cmd->link_modes.advertising); in mii_ethtool_set_link_ksettings()
368 return -EINVAL; in mii_ethtool_set_link_ksettings()
371 advert = mii->mdio_read(dev, mii->phy_id, MII_ADVERTISE); in mii_ethtool_set_link_ksettings()
373 if (mii->supports_gmii) { in mii_ethtool_set_link_ksettings()
374 advert2 = mii->mdio_read(dev, mii->phy_id, in mii_ethtool_set_link_ksettings()
381 if (mii->supports_gmii) in mii_ethtool_set_link_ksettings()
384 mii->mdio_write(dev, mii->phy_id, MII_ADVERTISE, tmp); in mii_ethtool_set_link_ksettings()
385 mii->advertising = tmp; in mii_ethtool_set_link_ksettings()
387 if ((mii->supports_gmii) && (advert2 != tmp2)) in mii_ethtool_set_link_ksettings()
388 mii->mdio_write(dev, mii->phy_id, MII_CTRL1000, tmp2); in mii_ethtool_set_link_ksettings()
391 bmcr = mii->mdio_read(dev, mii->phy_id, MII_BMCR); in mii_ethtool_set_link_ksettings()
393 mii->mdio_write(dev, mii->phy_id, MII_BMCR, bmcr); in mii_ethtool_set_link_ksettings()
395 mii->force_media = 0; in mii_ethtool_set_link_ksettings()
400 bmcr = mii->mdio_read(dev, mii->phy_id, MII_BMCR); in mii_ethtool_set_link_ksettings()
407 if (cmd->base.duplex == DUPLEX_FULL) { in mii_ethtool_set_link_ksettings()
409 mii->full_duplex = 1; in mii_ethtool_set_link_ksettings()
411 mii->full_duplex = 0; in mii_ethtool_set_link_ksettings()
414 mii->mdio_write(dev, mii->phy_id, MII_BMCR, tmp); in mii_ethtool_set_link_ksettings()
416 mii->force_media = 1; in mii_ethtool_set_link_ksettings()
422 * mii_check_gmii_support - check if the MII supports Gb interfaces
429 reg = mii->mdio_read(mii->dev, mii->phy_id, MII_BMSR); in mii_check_gmii_support()
431 reg = mii->mdio_read(mii->dev, mii->phy_id, MII_ESTATUS); in mii_check_gmii_support()
440 * mii_link_ok - is link status up/ok
448 mii->mdio_read(mii->dev, mii->phy_id, MII_BMSR); in mii_link_ok()
449 if (mii->mdio_read(mii->dev, mii->phy_id, MII_BMSR) & BMSR_LSTATUS) in mii_link_ok()
455 * mii_nway_restart - restart NWay (autonegotiation) for this interface
463 int r = -EINVAL; in mii_nway_restart()
466 bmcr = mii->mdio_read(mii->dev, mii->phy_id, MII_BMCR); in mii_nway_restart()
470 mii->mdio_write(mii->dev, mii->phy_id, MII_BMCR, bmcr); in mii_nway_restart()
478 * mii_check_link - check MII link status
488 int prev_link = netif_carrier_ok(mii->dev); in mii_check_link()
491 netif_carrier_on(mii->dev); in mii_check_link()
493 netif_carrier_off(mii->dev); in mii_check_link()
497 * mii_check_media - check the MII interface for a carrier/speed/duplex change
514 old_carrier = netif_carrier_ok(mii->dev) ? 1 : 0; in mii_check_media()
525 netif_carrier_off(mii->dev); in mii_check_media()
527 netdev_info(mii->dev, "link down\n"); in mii_check_media()
534 netif_carrier_on(mii->dev); in mii_check_media()
536 if (mii->force_media) { in mii_check_media()
538 netdev_info(mii->dev, "link up\n"); in mii_check_media()
543 if ((!init_media) && (mii->advertising)) in mii_check_media()
544 advertise = mii->advertising; in mii_check_media()
546 advertise = mii->mdio_read(mii->dev, mii->phy_id, MII_ADVERTISE); in mii_check_media()
547 mii->advertising = advertise; in mii_check_media()
549 lpa = mii->mdio_read(mii->dev, mii->phy_id, MII_LPA); in mii_check_media()
550 if (mii->supports_gmii) in mii_check_media()
551 lpa2 = mii->mdio_read(mii->dev, mii->phy_id, MII_STAT1000); in mii_check_media()
560 netdev_info(mii->dev, "link up, %uMbps, %s-duplex, lpa 0x%04X\n", in mii_check_media()
567 if ((init_media) || (mii->full_duplex != duplex)) { in mii_check_media()
568 mii->full_duplex = duplex; in mii_check_media()
576 * generic_mii_ioctl - main MII ioctl interface
595 mii_data->phy_id &= mii_if->phy_id_mask; in generic_mii_ioctl()
596 mii_data->reg_num &= mii_if->reg_num_mask; in generic_mii_ioctl()
600 mii_data->phy_id = mii_if->phy_id; in generic_mii_ioctl()
604 mii_data->val_out = in generic_mii_ioctl()
605 mii_if->mdio_read(mii_if->dev, mii_data->phy_id, in generic_mii_ioctl()
606 mii_data->reg_num); in generic_mii_ioctl()
610 u16 val = mii_data->val_in; in generic_mii_ioctl()
612 if (mii_data->phy_id == mii_if->phy_id) { in generic_mii_ioctl()
613 switch(mii_data->reg_num) { in generic_mii_ioctl()
617 mii_if->force_media = 0; in generic_mii_ioctl()
619 mii_if->force_media = 1; in generic_mii_ioctl()
620 if (mii_if->force_media && in generic_mii_ioctl()
623 if (mii_if->full_duplex != new_duplex) { in generic_mii_ioctl()
625 mii_if->full_duplex = new_duplex; in generic_mii_ioctl()
630 mii_if->advertising = val; in generic_mii_ioctl()
638 mii_if->mdio_write(mii_if->dev, mii_data->phy_id, in generic_mii_ioctl()
639 mii_data->reg_num, val); in generic_mii_ioctl()
644 rc = -EOPNOTSUPP; in generic_mii_ioctl()