Lines Matching +full:half +full:- +full:bus
1 // SPDX-License-Identifier: GPL-2.0+
8 * This provides a bit-banged interface to the ethernet MII management
50 if (strcmp(dev->name, devname) == 0) in miiphy_get_dev_by_name()
69 struct mii_dev *bus; in mdio_alloc() local
71 bus = malloc(sizeof(*bus)); in mdio_alloc()
72 if (!bus) in mdio_alloc()
73 return bus; in mdio_alloc()
75 memset(bus, 0, sizeof(*bus)); in mdio_alloc()
78 INIT_LIST_HEAD(&bus->link); in mdio_alloc()
80 return bus; in mdio_alloc()
83 void mdio_free(struct mii_dev *bus) in mdio_free() argument
85 free(bus); in mdio_free()
88 int mdio_register(struct mii_dev *bus) in mdio_register() argument
90 if (!bus || !bus->read || !bus->write) in mdio_register()
91 return -1; in mdio_register()
94 if (miiphy_get_dev_by_name(bus->name)) { in mdio_register()
96 bus->name); in mdio_register()
97 return -1; in mdio_register()
101 list_add_tail(&bus->link, &mii_devs); in mdio_register()
104 current_mii = bus; in mdio_register()
109 int mdio_register_seq(struct mii_dev *bus, int seq) in mdio_register_seq() argument
113 /* Setup a unique name for each mdio bus */ in mdio_register_seq()
114 ret = snprintf(bus->name, MDIO_NAME_LEN, "eth%d", seq); in mdio_register_seq()
118 return mdio_register(bus); in mdio_register_seq()
121 int mdio_unregister(struct mii_dev *bus) in mdio_unregister() argument
123 if (!bus) in mdio_unregister()
127 list_del(&bus->link); in mdio_unregister()
129 if (current_mii == bus) in mdio_unregister()
141 struct mii_dev *bus = list_entry(entry, struct mii_dev, link); in mdio_list_devices() local
143 printf("%s:\n", bus->name); in mdio_list_devices()
146 struct phy_device *phydev = bus->phymap[i]; in mdio_list_devices()
149 printf("%x - %s", i, phydev->drv->name); in mdio_list_devices()
151 if (phydev->dev) in mdio_list_devices()
152 printf(" <--> %s\n", phydev->dev->name); in mdio_list_devices()
188 struct mii_dev *bus; in mdio_phydev_for_ethname() local
192 bus = list_entry(entry, struct mii_dev, link); in mdio_phydev_for_ethname()
195 if (!bus->phymap[i] || !bus->phymap[i]->dev) in mdio_phydev_for_ethname()
198 if (strcmp(bus->phymap[i]->dev->name, ethname) == 0) in mdio_phydev_for_ethname()
199 return bus->phymap[i]; in mdio_phydev_for_ethname()
210 return current_mii->name; in miiphy_get_current_dev()
219 if (strcmp(current_mii->name, devname) == 0) in miiphy_get_active_dev()
242 struct mii_dev *bus; in miiphy_read() local
245 bus = miiphy_get_active_dev(devname); in miiphy_read()
246 if (!bus) in miiphy_read()
249 ret = bus->read(bus, addr, MDIO_DEVAD_NONE, reg); in miiphy_read()
270 struct mii_dev *bus; in miiphy_write() local
272 bus = miiphy_get_active_dev(devname); in miiphy_write()
273 if (bus) in miiphy_write()
274 return bus->write(bus, addr, MDIO_DEVAD_NONE, reg, value); in miiphy_write()
291 printf("'%s' ", dev->name); in miiphy_listdev()
296 printf("Current device: '%s'\n", current_mii->name); in miiphy_listdev()
320 return -1; in miiphy_info()
328 return -1; in miiphy_info()
333 return -1; in miiphy_info()
361 return -1; in miiphy_reset()
365 return -1; in miiphy_reset()
372 * auto-clearing). This should happen within 0.5 seconds per the in miiphy_reset()
376 while (((reg & 0x8000) != 0) && timeout--) { in miiphy_reset()
379 return -1; in miiphy_reset()
387 return -1; in miiphy_reset()
405 * Check for 1000BASE-X. If it is supported, then assume that the speed in miiphy_speed()
412 * No 1000BASE-X, so assume 1000BASE-T/100BASE-TX/10BASE-T register set. in miiphy_speed()
414 /* Check for 1000BASE-T. */ in miiphy_speed()
429 /* Check if auto-negotiation is on. */ in miiphy_speed()
431 /* Get auto-negotiation results. */ in miiphy_speed()
447 printf(" read failed, assuming 10BASE-T\n"); in miiphy_speed()
453 * Determine full/half duplex. Return half on error.
462 /* Check for 1000BASE-X. */ in miiphy_duplex()
464 /* 1000BASE-X */ in miiphy_duplex()
466 printf("1000BASE-X PHY AN duplex"); in miiphy_duplex()
471 * No 1000BASE-X, so assume 1000BASE-T/100BASE-TX/10BASE-T register set. in miiphy_duplex()
473 /* Check for 1000BASE-T. */ in miiphy_duplex()
482 return HALF; in miiphy_duplex()
492 /* Check if auto-negotiation is on. */ in miiphy_duplex()
494 /* Get auto-negotiation results. */ in miiphy_duplex()
505 FULL : HALF; in miiphy_duplex()
508 return (bmcr & BMCR_FULLDPLX) ? FULL : HALF; in miiphy_duplex()
511 printf(" read failed, assuming half duplex\n"); in miiphy_duplex()
512 return HALF; in miiphy_duplex()
517 * Return 1 if PHY supports 1000BASE-X, 0 if PHY supports 10BASE-T/100BASE-TX/
518 * 1000BASE-T, or on error.
527 "1000BASE-X\n"); in miiphy_is_1000base_x()