Lines Matching full:bus

4  * MDIO Bus interface
42 * If non-zero, then bus->priv is points to that memory.
44 * Description: called by a bus driver to allocate an mii_bus
49 struct mii_bus *bus; in mdiobus_alloc_size() local
50 size_t aligned_size = ALIGN(sizeof(*bus), NETDEV_ALIGN); in mdiobus_alloc_size()
57 alloc_size = sizeof(*bus); in mdiobus_alloc_size()
59 bus = kzalloc(alloc_size, GFP_KERNEL); in mdiobus_alloc_size()
60 if (bus) { in mdiobus_alloc_size()
61 bus->state = MDIOBUS_ALLOCATED; in mdiobus_alloc_size()
63 bus->priv = (void *)bus + aligned_size; in mdiobus_alloc_size()
66 return bus; in mdiobus_alloc_size()
79 struct mii_bus *bus = to_mii_bus(d); in mdiobus_release() local
80 BUG_ON(bus->state != MDIOBUS_RELEASED && in mdiobus_release()
82 bus->state != MDIOBUS_ALLOCATED); in mdiobus_release()
83 kfree(bus); in mdiobus_release()
92 * mdiobus_register - bring up all the PHYs on a given bus and attach them to bus
93 * @bus: target mii_bus
95 * Description: Called by a bus driver to bring up all the PHYs
96 * on a given bus, and attach them to the bus.
100 int mdiobus_register(struct mii_bus *bus) in mdiobus_register() argument
104 if (NULL == bus || NULL == bus->name || in mdiobus_register()
105 NULL == bus->read || in mdiobus_register()
106 NULL == bus->write) in mdiobus_register()
109 BUG_ON(bus->state != MDIOBUS_ALLOCATED && in mdiobus_register()
110 bus->state != MDIOBUS_UNREGISTERED); in mdiobus_register()
112 bus->dev.parent = bus->parent; in mdiobus_register()
113 bus->dev.class = &mdio_bus_class; in mdiobus_register()
114 bus->dev.groups = NULL; in mdiobus_register()
115 dev_set_name(&bus->dev, "%s", bus->id); in mdiobus_register()
117 err = device_register(&bus->dev); in mdiobus_register()
119 printk(KERN_ERR "mii_bus %s failed to register\n", bus->id); in mdiobus_register()
123 mutex_init(&bus->mdio_lock); in mdiobus_register()
125 if (bus->reset) in mdiobus_register()
126 bus->reset(bus); in mdiobus_register()
129 if ((bus->phy_mask & (1 << i)) == 0) { in mdiobus_register()
132 phydev = mdiobus_scan(bus, i); in mdiobus_register()
140 bus->state = MDIOBUS_REGISTERED; in mdiobus_register()
141 pr_info("%s: probed\n", bus->name); in mdiobus_register()
146 if (bus->phy_map[i]) in mdiobus_register()
147 device_unregister(&bus->phy_map[i]->dev); in mdiobus_register()
149 device_del(&bus->dev); in mdiobus_register()
154 void mdiobus_unregister(struct mii_bus *bus) in mdiobus_unregister() argument
158 BUG_ON(bus->state != MDIOBUS_REGISTERED); in mdiobus_unregister()
159 bus->state = MDIOBUS_UNREGISTERED; in mdiobus_unregister()
161 device_del(&bus->dev); in mdiobus_unregister()
163 if (bus->phy_map[i]) in mdiobus_unregister()
164 device_unregister(&bus->phy_map[i]->dev); in mdiobus_unregister()
165 bus->phy_map[i] = NULL; in mdiobus_unregister()
172 * @bus: mii_bus to free
178 void mdiobus_free(struct mii_bus *bus) in mdiobus_free() argument
183 if (bus->state == MDIOBUS_ALLOCATED) { in mdiobus_free()
184 kfree(bus); in mdiobus_free()
188 BUG_ON(bus->state != MDIOBUS_UNREGISTERED); in mdiobus_free()
189 bus->state = MDIOBUS_RELEASED; in mdiobus_free()
191 put_device(&bus->dev); in mdiobus_free()
195 struct phy_device *mdiobus_scan(struct mii_bus *bus, int addr) in mdiobus_scan() argument
200 phydev = get_phy_device(bus, addr); in mdiobus_scan()
216 * @bus: the mii_bus struct
221 * because the bus read/write functions may wait for an interrupt
224 int mdiobus_read(struct mii_bus *bus, int addr, u32 regnum) in mdiobus_read() argument
230 mutex_lock(&bus->mdio_lock); in mdiobus_read()
231 retval = bus->read(bus, addr, regnum); in mdiobus_read()
232 mutex_unlock(&bus->mdio_lock); in mdiobus_read()
240 * @bus: the mii_bus struct
246 * because the bus read/write functions may wait for an interrupt
249 int mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val) in mdiobus_write() argument
255 mutex_lock(&bus->mdio_lock); in mdiobus_write()
256 err = bus->write(bus, addr, regnum, val); in mdiobus_write()
257 mutex_unlock(&bus->mdio_lock); in mdiobus_write()
304 * is the case for devices w/o underlaying pwr. mgmt. aware bus, in mdio_bus_phy_may_suspend()