]> Pileus Git - ~andy/linux/blob - drivers/net/phy/phy_device.c
8af46e88a1815de2e2f344a85c125ffcb5f12732
[~andy/linux] / drivers / net / phy / phy_device.c
1 /*
2  * drivers/net/phy/phy_device.c
3  *
4  * Framework for finding and configuring PHYs.
5  * Also contains generic PHY driver
6  *
7  * Author: Andy Fleming
8  *
9  * Copyright (c) 2004 Freescale Semiconductor, Inc.
10  *
11  * This program is free software; you can redistribute  it and/or modify it
12  * under  the terms of  the GNU General  Public License as published by the
13  * Free Software Foundation;  either version 2 of the  License, or (at your
14  * option) any later version.
15  *
16  */
17
18 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
19
20 #include <linux/kernel.h>
21 #include <linux/string.h>
22 #include <linux/errno.h>
23 #include <linux/unistd.h>
24 #include <linux/slab.h>
25 #include <linux/interrupt.h>
26 #include <linux/init.h>
27 #include <linux/delay.h>
28 #include <linux/netdevice.h>
29 #include <linux/etherdevice.h>
30 #include <linux/skbuff.h>
31 #include <linux/mm.h>
32 #include <linux/module.h>
33 #include <linux/mii.h>
34 #include <linux/ethtool.h>
35 #include <linux/phy.h>
36
37 #include <asm/io.h>
38 #include <asm/irq.h>
39 #include <asm/uaccess.h>
40
41 MODULE_DESCRIPTION("PHY library");
42 MODULE_AUTHOR("Andy Fleming");
43 MODULE_LICENSE("GPL");
44
45 void phy_device_free(struct phy_device *phydev)
46 {
47         kfree(phydev);
48 }
49 EXPORT_SYMBOL(phy_device_free);
50
51 static void phy_device_release(struct device *dev)
52 {
53         phy_device_free(to_phy_device(dev));
54 }
55
56 static struct phy_driver genphy_driver;
57 extern int mdio_bus_init(void);
58 extern void mdio_bus_exit(void);
59
60 static LIST_HEAD(phy_fixup_list);
61 static DEFINE_MUTEX(phy_fixup_lock);
62
63 static int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
64                              u32 flags, phy_interface_t interface);
65
66 /*
67  * Creates a new phy_fixup and adds it to the list
68  * @bus_id: A string which matches phydev->dev.bus_id (or PHY_ANY_ID)
69  * @phy_uid: Used to match against phydev->phy_id (the UID of the PHY)
70  *      It can also be PHY_ANY_UID
71  * @phy_uid_mask: Applied to phydev->phy_id and fixup->phy_uid before
72  *      comparison
73  * @run: The actual code to be run when a matching PHY is found
74  */
75 int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask,
76                 int (*run)(struct phy_device *))
77 {
78         struct phy_fixup *fixup;
79
80         fixup = kzalloc(sizeof(struct phy_fixup), GFP_KERNEL);
81         if (!fixup)
82                 return -ENOMEM;
83
84         strlcpy(fixup->bus_id, bus_id, sizeof(fixup->bus_id));
85         fixup->phy_uid = phy_uid;
86         fixup->phy_uid_mask = phy_uid_mask;
87         fixup->run = run;
88
89         mutex_lock(&phy_fixup_lock);
90         list_add_tail(&fixup->list, &phy_fixup_list);
91         mutex_unlock(&phy_fixup_lock);
92
93         return 0;
94 }
95 EXPORT_SYMBOL(phy_register_fixup);
96
97 /* Registers a fixup to be run on any PHY with the UID in phy_uid */
98 int phy_register_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask,
99                 int (*run)(struct phy_device *))
100 {
101         return phy_register_fixup(PHY_ANY_ID, phy_uid, phy_uid_mask, run);
102 }
103 EXPORT_SYMBOL(phy_register_fixup_for_uid);
104
105 /* Registers a fixup to be run on the PHY with id string bus_id */
106 int phy_register_fixup_for_id(const char *bus_id,
107                 int (*run)(struct phy_device *))
108 {
109         return phy_register_fixup(bus_id, PHY_ANY_UID, 0xffffffff, run);
110 }
111 EXPORT_SYMBOL(phy_register_fixup_for_id);
112
113 /*
114  * Returns 1 if fixup matches phydev in bus_id and phy_uid.
115  * Fixups can be set to match any in one or more fields.
116  */
117 static int phy_needs_fixup(struct phy_device *phydev, struct phy_fixup *fixup)
118 {
119         if (strcmp(fixup->bus_id, dev_name(&phydev->dev)) != 0)
120                 if (strcmp(fixup->bus_id, PHY_ANY_ID) != 0)
121                         return 0;
122
123         if ((fixup->phy_uid & fixup->phy_uid_mask) !=
124                         (phydev->phy_id & fixup->phy_uid_mask))
125                 if (fixup->phy_uid != PHY_ANY_UID)
126                         return 0;
127
128         return 1;
129 }
130
131 /* Runs any matching fixups for this phydev */
132 int phy_scan_fixups(struct phy_device *phydev)
133 {
134         struct phy_fixup *fixup;
135
136         mutex_lock(&phy_fixup_lock);
137         list_for_each_entry(fixup, &phy_fixup_list, list) {
138                 if (phy_needs_fixup(phydev, fixup)) {
139                         int err;
140
141                         err = fixup->run(phydev);
142
143                         if (err < 0) {
144                                 mutex_unlock(&phy_fixup_lock);
145                                 return err;
146                         }
147                 }
148         }
149         mutex_unlock(&phy_fixup_lock);
150
151         return 0;
152 }
153 EXPORT_SYMBOL(phy_scan_fixups);
154
155 struct phy_device *phy_device_create(struct mii_bus *bus, int addr, int phy_id,
156                         bool is_c45, struct phy_c45_device_ids *c45_ids)
157 {
158         struct phy_device *dev;
159
160         /* We allocate the device, and initialize the
161          * default values */
162         dev = kzalloc(sizeof(*dev), GFP_KERNEL);
163
164         if (NULL == dev)
165                 return (struct phy_device*) PTR_ERR((void*)-ENOMEM);
166
167         dev->dev.release = phy_device_release;
168
169         dev->speed = 0;
170         dev->duplex = -1;
171         dev->pause = dev->asym_pause = 0;
172         dev->link = 1;
173         dev->interface = PHY_INTERFACE_MODE_GMII;
174
175         dev->autoneg = AUTONEG_ENABLE;
176
177         dev->is_c45 = is_c45;
178         dev->addr = addr;
179         dev->phy_id = phy_id;
180         if (c45_ids)
181                 dev->c45_ids = *c45_ids;
182         dev->bus = bus;
183         dev->dev.parent = bus->parent;
184         dev->dev.bus = &mdio_bus_type;
185         dev->irq = bus->irq != NULL ? bus->irq[addr] : PHY_POLL;
186         dev_set_name(&dev->dev, PHY_ID_FMT, bus->id, addr);
187
188         dev->state = PHY_DOWN;
189
190         mutex_init(&dev->lock);
191         INIT_DELAYED_WORK(&dev->state_queue, phy_state_machine);
192
193         /* Request the appropriate module unconditionally; don't
194            bother trying to do so only if it isn't already loaded,
195            because that gets complicated. A hotplug event would have
196            done an unconditional modprobe anyway.
197            We don't do normal hotplug because it won't work for MDIO
198            -- because it relies on the device staying around for long
199            enough for the driver to get loaded. With MDIO, the NIC
200            driver will get bored and give up as soon as it finds that
201            there's no driver _already_ loaded. */
202         request_module(MDIO_MODULE_PREFIX MDIO_ID_FMT, MDIO_ID_ARGS(phy_id));
203
204         return dev;
205 }
206 EXPORT_SYMBOL(phy_device_create);
207
208 /**
209  * get_phy_c45_ids - reads the specified addr for its 802.3-c45 IDs.
210  * @bus: the target MII bus
211  * @addr: PHY address on the MII bus
212  * @phy_id: where to store the ID retrieved.
213  * @c45_ids: where to store the c45 ID information.
214  *
215  *   If the PHY devices-in-package appears to be valid, it and the
216  *   corresponding identifiers are stored in @c45_ids, zero is stored
217  *   in @phy_id.  Otherwise 0xffffffff is stored in @phy_id.  Returns
218  *   zero on success.
219  *
220  */
221 static int get_phy_c45_ids(struct mii_bus *bus, int addr, u32 *phy_id,
222                            struct phy_c45_device_ids *c45_ids) {
223         int phy_reg;
224         int i, reg_addr;
225         const int num_ids = ARRAY_SIZE(c45_ids->device_ids);
226
227         /* Find first non-zero Devices In package.  Device
228          * zero is reserved, so don't probe it.
229          */
230         for (i = 1;
231              i < num_ids && c45_ids->devices_in_package == 0;
232              i++) {
233                 reg_addr = MII_ADDR_C45 | i << 16 | 6;
234                 phy_reg = mdiobus_read(bus, addr, reg_addr);
235                 if (phy_reg < 0)
236                         return -EIO;
237                 c45_ids->devices_in_package = (phy_reg & 0xffff) << 16;
238
239                 reg_addr = MII_ADDR_C45 | i << 16 | 5;
240                 phy_reg = mdiobus_read(bus, addr, reg_addr);
241                 if (phy_reg < 0)
242                         return -EIO;
243                 c45_ids->devices_in_package |= (phy_reg & 0xffff);
244
245                 /* If mostly Fs, there is no device there,
246                  * let's get out of here.
247                  */
248                 if ((c45_ids->devices_in_package & 0x1fffffff) == 0x1fffffff) {
249                         *phy_id = 0xffffffff;
250                         return 0;
251                 }
252         }
253
254         /* Now probe Device Identifiers for each device present. */
255         for (i = 1; i < num_ids; i++) {
256                 if (!(c45_ids->devices_in_package & (1 << i)))
257                         continue;
258
259                 reg_addr = MII_ADDR_C45 | i << 16 | MII_PHYSID1;
260                 phy_reg = mdiobus_read(bus, addr, reg_addr);
261                 if (phy_reg < 0)
262                         return -EIO;
263                 c45_ids->device_ids[i] = (phy_reg & 0xffff) << 16;
264
265                 reg_addr = MII_ADDR_C45 | i << 16 | MII_PHYSID2;
266                 phy_reg = mdiobus_read(bus, addr, reg_addr);
267                 if (phy_reg < 0)
268                         return -EIO;
269                 c45_ids->device_ids[i] |= (phy_reg & 0xffff);
270         }
271         *phy_id = 0;
272         return 0;
273 }
274
275 /**
276  * get_phy_id - reads the specified addr for its ID.
277  * @bus: the target MII bus
278  * @addr: PHY address on the MII bus
279  * @phy_id: where to store the ID retrieved.
280  * @is_c45: If true the PHY uses the 802.3 clause 45 protocol
281  * @c45_ids: where to store the c45 ID information.
282  *
283  * Description: In the case of a 802.3-c22 PHY, reads the ID registers
284  *   of the PHY at @addr on the @bus, stores it in @phy_id and returns
285  *   zero on success.
286  *
287  *   In the case of a 802.3-c45 PHY, get_phy_c45_ids() is invoked, and
288  *   its return value is in turn returned.
289  *
290  */
291 static int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id,
292                       bool is_c45, struct phy_c45_device_ids *c45_ids)
293 {
294         int phy_reg;
295
296         if (is_c45)
297                 return get_phy_c45_ids(bus, addr, phy_id, c45_ids);
298
299         /* Grab the bits from PHYIR1, and put them
300          * in the upper half */
301         phy_reg = mdiobus_read(bus, addr, MII_PHYSID1);
302
303         if (phy_reg < 0)
304                 return -EIO;
305
306         *phy_id = (phy_reg & 0xffff) << 16;
307
308         /* Grab the bits from PHYIR2, and put them in the lower half */
309         phy_reg = mdiobus_read(bus, addr, MII_PHYSID2);
310
311         if (phy_reg < 0)
312                 return -EIO;
313
314         *phy_id |= (phy_reg & 0xffff);
315
316         return 0;
317 }
318
319 /**
320  * get_phy_device - reads the specified PHY device and returns its @phy_device struct
321  * @bus: the target MII bus
322  * @addr: PHY address on the MII bus
323  * @is_c45: If true the PHY uses the 802.3 clause 45 protocol
324  *
325  * Description: Reads the ID registers of the PHY at @addr on the
326  *   @bus, then allocates and returns the phy_device to represent it.
327  */
328 struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45)
329 {
330         struct phy_c45_device_ids c45_ids = {0};
331         struct phy_device *dev = NULL;
332         u32 phy_id = 0;
333         int r;
334
335         r = get_phy_id(bus, addr, &phy_id, is_c45, &c45_ids);
336         if (r)
337                 return ERR_PTR(r);
338
339         /* If the phy_id is mostly Fs, there is no device there */
340         if ((phy_id & 0x1fffffff) == 0x1fffffff)
341                 return NULL;
342
343         dev = phy_device_create(bus, addr, phy_id, is_c45, &c45_ids);
344
345         return dev;
346 }
347 EXPORT_SYMBOL(get_phy_device);
348
349 /**
350  * phy_device_register - Register the phy device on the MDIO bus
351  * @phydev: phy_device structure to be added to the MDIO bus
352  */
353 int phy_device_register(struct phy_device *phydev)
354 {
355         int err;
356
357         /* Don't register a phy if one is already registered at this
358          * address */
359         if (phydev->bus->phy_map[phydev->addr])
360                 return -EINVAL;
361         phydev->bus->phy_map[phydev->addr] = phydev;
362
363         /* Run all of the fixups for this PHY */
364         phy_scan_fixups(phydev);
365
366         err = device_register(&phydev->dev);
367         if (err) {
368                 pr_err("phy %d failed to register\n", phydev->addr);
369                 goto out;
370         }
371
372         return 0;
373
374  out:
375         phydev->bus->phy_map[phydev->addr] = NULL;
376         return err;
377 }
378 EXPORT_SYMBOL(phy_device_register);
379
380 /**
381  * phy_find_first - finds the first PHY device on the bus
382  * @bus: the target MII bus
383  */
384 struct phy_device *phy_find_first(struct mii_bus *bus)
385 {
386         int addr;
387
388         for (addr = 0; addr < PHY_MAX_ADDR; addr++) {
389                 if (bus->phy_map[addr])
390                         return bus->phy_map[addr];
391         }
392         return NULL;
393 }
394 EXPORT_SYMBOL(phy_find_first);
395
396 /**
397  * phy_prepare_link - prepares the PHY layer to monitor link status
398  * @phydev: target phy_device struct
399  * @handler: callback function for link status change notifications
400  *
401  * Description: Tells the PHY infrastructure to handle the
402  *   gory details on monitoring link status (whether through
403  *   polling or an interrupt), and to call back to the
404  *   connected device driver when the link status changes.
405  *   If you want to monitor your own link state, don't call
406  *   this function.
407  */
408 static void phy_prepare_link(struct phy_device *phydev,
409                 void (*handler)(struct net_device *))
410 {
411         phydev->adjust_link = handler;
412 }
413
414 /**
415  * phy_connect_direct - connect an ethernet device to a specific phy_device
416  * @dev: the network device to connect
417  * @phydev: the pointer to the phy device
418  * @handler: callback function for state change notifications
419  * @flags: PHY device's dev_flags
420  * @interface: PHY device's interface
421  */
422 int phy_connect_direct(struct net_device *dev, struct phy_device *phydev,
423                        void (*handler)(struct net_device *), u32 flags,
424                        phy_interface_t interface)
425 {
426         int rc;
427
428         rc = phy_attach_direct(dev, phydev, flags, interface);
429         if (rc)
430                 return rc;
431
432         phy_prepare_link(phydev, handler);
433         phy_start_machine(phydev, NULL);
434         if (phydev->irq > 0)
435                 phy_start_interrupts(phydev);
436
437         return 0;
438 }
439 EXPORT_SYMBOL(phy_connect_direct);
440
441 /**
442  * phy_connect - connect an ethernet device to a PHY device
443  * @dev: the network device to connect
444  * @bus_id: the id string of the PHY device to connect
445  * @handler: callback function for state change notifications
446  * @flags: PHY device's dev_flags
447  * @interface: PHY device's interface
448  *
449  * Description: Convenience function for connecting ethernet
450  *   devices to PHY devices.  The default behavior is for
451  *   the PHY infrastructure to handle everything, and only notify
452  *   the connected driver when the link status changes.  If you
453  *   don't want, or can't use the provided functionality, you may
454  *   choose to call only the subset of functions which provide
455  *   the desired functionality.
456  */
457 struct phy_device * phy_connect(struct net_device *dev, const char *bus_id,
458                 void (*handler)(struct net_device *), u32 flags,
459                 phy_interface_t interface)
460 {
461         struct phy_device *phydev;
462         struct device *d;
463         int rc;
464
465         /* Search the list of PHY devices on the mdio bus for the
466          * PHY with the requested name */
467         d = bus_find_device_by_name(&mdio_bus_type, NULL, bus_id);
468         if (!d) {
469                 pr_err("PHY %s not found\n", bus_id);
470                 return ERR_PTR(-ENODEV);
471         }
472         phydev = to_phy_device(d);
473
474         rc = phy_connect_direct(dev, phydev, handler, flags, interface);
475         if (rc)
476                 return ERR_PTR(rc);
477
478         return phydev;
479 }
480 EXPORT_SYMBOL(phy_connect);
481
482 /**
483  * phy_disconnect - disable interrupts, stop state machine, and detach a PHY device
484  * @phydev: target phy_device struct
485  */
486 void phy_disconnect(struct phy_device *phydev)
487 {
488         if (phydev->irq > 0)
489                 phy_stop_interrupts(phydev);
490
491         phy_stop_machine(phydev);
492         
493         phydev->adjust_link = NULL;
494
495         phy_detach(phydev);
496 }
497 EXPORT_SYMBOL(phy_disconnect);
498
499 int phy_init_hw(struct phy_device *phydev)
500 {
501         int ret;
502
503         if (!phydev->drv || !phydev->drv->config_init)
504                 return 0;
505
506         ret = phy_scan_fixups(phydev);
507         if (ret < 0)
508                 return ret;
509
510         return phydev->drv->config_init(phydev);
511 }
512
513 /**
514  * phy_attach_direct - attach a network device to a given PHY device pointer
515  * @dev: network device to attach
516  * @phydev: Pointer to phy_device to attach
517  * @flags: PHY device's dev_flags
518  * @interface: PHY device's interface
519  *
520  * Description: Called by drivers to attach to a particular PHY
521  *     device. The phy_device is found, and properly hooked up
522  *     to the phy_driver.  If no driver is attached, then the
523  *     genphy_driver is used.  The phy_device is given a ptr to
524  *     the attaching device, and given a callback for link status
525  *     change.  The phy_device is returned to the attaching driver.
526  */
527 static int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
528                              u32 flags, phy_interface_t interface)
529 {
530         struct device *d = &phydev->dev;
531         int err;
532
533         /* Assume that if there is no driver, that it doesn't
534          * exist, and we should use the genphy driver. */
535         if (NULL == d->driver) {
536                 if (phydev->is_c45) {
537                         pr_err("No driver for phy %x\n", phydev->phy_id);
538                         return -ENODEV;
539                 }
540
541                 d->driver = &genphy_driver.driver;
542
543                 err = d->driver->probe(d);
544                 if (err >= 0)
545                         err = device_bind_driver(d);
546
547                 if (err)
548                         return err;
549         }
550
551         if (phydev->attached_dev) {
552                 dev_err(&dev->dev, "PHY already attached\n");
553                 return -EBUSY;
554         }
555
556         phydev->attached_dev = dev;
557         dev->phydev = phydev;
558
559         phydev->dev_flags = flags;
560
561         phydev->interface = interface;
562
563         phydev->state = PHY_READY;
564
565         /* Do initial configuration here, now that
566          * we have certain key parameters
567          * (dev_flags and interface) */
568         err = phy_init_hw(phydev);
569         if (err)
570                 phy_detach(phydev);
571
572         return err;
573 }
574
575 /**
576  * phy_attach - attach a network device to a particular PHY device
577  * @dev: network device to attach
578  * @bus_id: Bus ID of PHY device to attach
579  * @flags: PHY device's dev_flags
580  * @interface: PHY device's interface
581  *
582  * Description: Same as phy_attach_direct() except that a PHY bus_id
583  *     string is passed instead of a pointer to a struct phy_device.
584  */
585 struct phy_device *phy_attach(struct net_device *dev,
586                 const char *bus_id, u32 flags, phy_interface_t interface)
587 {
588         struct bus_type *bus = &mdio_bus_type;
589         struct phy_device *phydev;
590         struct device *d;
591         int rc;
592
593         /* Search the list of PHY devices on the mdio bus for the
594          * PHY with the requested name */
595         d = bus_find_device_by_name(bus, NULL, bus_id);
596         if (!d) {
597                 pr_err("PHY %s not found\n", bus_id);
598                 return ERR_PTR(-ENODEV);
599         }
600         phydev = to_phy_device(d);
601
602         rc = phy_attach_direct(dev, phydev, flags, interface);
603         if (rc)
604                 return ERR_PTR(rc);
605
606         return phydev;
607 }
608 EXPORT_SYMBOL(phy_attach);
609
610 /**
611  * phy_detach - detach a PHY device from its network device
612  * @phydev: target phy_device struct
613  */
614 void phy_detach(struct phy_device *phydev)
615 {
616         phydev->attached_dev->phydev = NULL;
617         phydev->attached_dev = NULL;
618
619         /* If the device had no specific driver before (i.e. - it
620          * was using the generic driver), we unbind the device
621          * from the generic driver so that there's a chance a
622          * real driver could be loaded */
623         if (phydev->dev.driver == &genphy_driver.driver)
624                 device_release_driver(&phydev->dev);
625 }
626 EXPORT_SYMBOL(phy_detach);
627
628
629 /* Generic PHY support and helper functions */
630
631 /**
632  * genphy_config_advert - sanitize and advertise auto-negotiation parameters
633  * @phydev: target phy_device struct
634  *
635  * Description: Writes MII_ADVERTISE with the appropriate values,
636  *   after sanitizing the values to make sure we only advertise
637  *   what is supported.  Returns < 0 on error, 0 if the PHY's advertisement
638  *   hasn't changed, and > 0 if it has changed.
639  */
640 static int genphy_config_advert(struct phy_device *phydev)
641 {
642         u32 advertise;
643         int oldadv, adv;
644         int err, changed = 0;
645
646         /* Only allow advertising what
647          * this PHY supports */
648         phydev->advertising &= phydev->supported;
649         advertise = phydev->advertising;
650
651         /* Setup standard advertisement */
652         oldadv = adv = phy_read(phydev, MII_ADVERTISE);
653
654         if (adv < 0)
655                 return adv;
656
657         adv &= ~(ADVERTISE_ALL | ADVERTISE_100BASE4 | ADVERTISE_PAUSE_CAP |
658                  ADVERTISE_PAUSE_ASYM);
659         adv |= ethtool_adv_to_mii_adv_t(advertise);
660
661         if (adv != oldadv) {
662                 err = phy_write(phydev, MII_ADVERTISE, adv);
663
664                 if (err < 0)
665                         return err;
666                 changed = 1;
667         }
668
669         /* Configure gigabit if it's supported */
670         if (phydev->supported & (SUPPORTED_1000baseT_Half |
671                                 SUPPORTED_1000baseT_Full)) {
672                 oldadv = adv = phy_read(phydev, MII_CTRL1000);
673
674                 if (adv < 0)
675                         return adv;
676
677                 adv &= ~(ADVERTISE_1000FULL | ADVERTISE_1000HALF);
678                 adv |= ethtool_adv_to_mii_ctrl1000_t(advertise);
679
680                 if (adv != oldadv) {
681                         err = phy_write(phydev, MII_CTRL1000, adv);
682
683                         if (err < 0)
684                                 return err;
685                         changed = 1;
686                 }
687         }
688
689         return changed;
690 }
691
692 /**
693  * genphy_setup_forced - configures/forces speed/duplex from @phydev
694  * @phydev: target phy_device struct
695  *
696  * Description: Configures MII_BMCR to force speed/duplex
697  *   to the values in phydev. Assumes that the values are valid.
698  *   Please see phy_sanitize_settings().
699  */
700 static int genphy_setup_forced(struct phy_device *phydev)
701 {
702         int err;
703         int ctl = 0;
704
705         phydev->pause = phydev->asym_pause = 0;
706
707         if (SPEED_1000 == phydev->speed)
708                 ctl |= BMCR_SPEED1000;
709         else if (SPEED_100 == phydev->speed)
710                 ctl |= BMCR_SPEED100;
711
712         if (DUPLEX_FULL == phydev->duplex)
713                 ctl |= BMCR_FULLDPLX;
714         
715         err = phy_write(phydev, MII_BMCR, ctl);
716
717         return err;
718 }
719
720
721 /**
722  * genphy_restart_aneg - Enable and Restart Autonegotiation
723  * @phydev: target phy_device struct
724  */
725 int genphy_restart_aneg(struct phy_device *phydev)
726 {
727         int ctl;
728
729         ctl = phy_read(phydev, MII_BMCR);
730
731         if (ctl < 0)
732                 return ctl;
733
734         ctl |= (BMCR_ANENABLE | BMCR_ANRESTART);
735
736         /* Don't isolate the PHY if we're negotiating */
737         ctl &= ~(BMCR_ISOLATE);
738
739         ctl = phy_write(phydev, MII_BMCR, ctl);
740
741         return ctl;
742 }
743 EXPORT_SYMBOL(genphy_restart_aneg);
744
745
746 /**
747  * genphy_config_aneg - restart auto-negotiation or write BMCR
748  * @phydev: target phy_device struct
749  *
750  * Description: If auto-negotiation is enabled, we configure the
751  *   advertising, and then restart auto-negotiation.  If it is not
752  *   enabled, then we write the BMCR.
753  */
754 int genphy_config_aneg(struct phy_device *phydev)
755 {
756         int result;
757
758         if (AUTONEG_ENABLE != phydev->autoneg)
759                 return genphy_setup_forced(phydev);
760
761         result = genphy_config_advert(phydev);
762
763         if (result < 0) /* error */
764                 return result;
765
766         if (result == 0) {
767                 /* Advertisement hasn't changed, but maybe aneg was never on to
768                  * begin with?  Or maybe phy was isolated? */
769                 int ctl = phy_read(phydev, MII_BMCR);
770
771                 if (ctl < 0)
772                         return ctl;
773
774                 if (!(ctl & BMCR_ANENABLE) || (ctl & BMCR_ISOLATE))
775                         result = 1; /* do restart aneg */
776         }
777
778         /* Only restart aneg if we are advertising something different
779          * than we were before.  */
780         if (result > 0)
781                 result = genphy_restart_aneg(phydev);
782
783         return result;
784 }
785 EXPORT_SYMBOL(genphy_config_aneg);
786
787 /**
788  * genphy_update_link - update link status in @phydev
789  * @phydev: target phy_device struct
790  *
791  * Description: Update the value in phydev->link to reflect the
792  *   current link value.  In order to do this, we need to read
793  *   the status register twice, keeping the second value.
794  */
795 int genphy_update_link(struct phy_device *phydev)
796 {
797         int status;
798
799         /* Do a fake read */
800         status = phy_read(phydev, MII_BMSR);
801
802         if (status < 0)
803                 return status;
804
805         /* Read link and autonegotiation status */
806         status = phy_read(phydev, MII_BMSR);
807
808         if (status < 0)
809                 return status;
810
811         if ((status & BMSR_LSTATUS) == 0)
812                 phydev->link = 0;
813         else
814                 phydev->link = 1;
815
816         return 0;
817 }
818 EXPORT_SYMBOL(genphy_update_link);
819
820 /**
821  * genphy_read_status - check the link status and update current link state
822  * @phydev: target phy_device struct
823  *
824  * Description: Check the link, then figure out the current state
825  *   by comparing what we advertise with what the link partner
826  *   advertises.  Start by checking the gigabit possibilities,
827  *   then move on to 10/100.
828  */
829 int genphy_read_status(struct phy_device *phydev)
830 {
831         int adv;
832         int err;
833         int lpa;
834         int lpagb = 0;
835
836         /* Update the link, but return if there
837          * was an error */
838         err = genphy_update_link(phydev);
839         if (err)
840                 return err;
841
842         if (AUTONEG_ENABLE == phydev->autoneg) {
843                 if (phydev->supported & (SUPPORTED_1000baseT_Half
844                                         | SUPPORTED_1000baseT_Full)) {
845                         lpagb = phy_read(phydev, MII_STAT1000);
846
847                         if (lpagb < 0)
848                                 return lpagb;
849
850                         adv = phy_read(phydev, MII_CTRL1000);
851
852                         if (adv < 0)
853                                 return adv;
854
855                         lpagb &= adv << 2;
856                 }
857
858                 lpa = phy_read(phydev, MII_LPA);
859
860                 if (lpa < 0)
861                         return lpa;
862
863                 adv = phy_read(phydev, MII_ADVERTISE);
864
865                 if (adv < 0)
866                         return adv;
867
868                 lpa &= adv;
869
870                 phydev->speed = SPEED_10;
871                 phydev->duplex = DUPLEX_HALF;
872                 phydev->pause = phydev->asym_pause = 0;
873
874                 if (lpagb & (LPA_1000FULL | LPA_1000HALF)) {
875                         phydev->speed = SPEED_1000;
876
877                         if (lpagb & LPA_1000FULL)
878                                 phydev->duplex = DUPLEX_FULL;
879                 } else if (lpa & (LPA_100FULL | LPA_100HALF)) {
880                         phydev->speed = SPEED_100;
881                         
882                         if (lpa & LPA_100FULL)
883                                 phydev->duplex = DUPLEX_FULL;
884                 } else
885                         if (lpa & LPA_10FULL)
886                                 phydev->duplex = DUPLEX_FULL;
887
888                 if (phydev->duplex == DUPLEX_FULL){
889                         phydev->pause = lpa & LPA_PAUSE_CAP ? 1 : 0;
890                         phydev->asym_pause = lpa & LPA_PAUSE_ASYM ? 1 : 0;
891                 }
892         } else {
893                 int bmcr = phy_read(phydev, MII_BMCR);
894                 if (bmcr < 0)
895                         return bmcr;
896
897                 if (bmcr & BMCR_FULLDPLX)
898                         phydev->duplex = DUPLEX_FULL;
899                 else
900                         phydev->duplex = DUPLEX_HALF;
901
902                 if (bmcr & BMCR_SPEED1000)
903                         phydev->speed = SPEED_1000;
904                 else if (bmcr & BMCR_SPEED100)
905                         phydev->speed = SPEED_100;
906                 else
907                         phydev->speed = SPEED_10;
908
909                 phydev->pause = phydev->asym_pause = 0;
910         }
911
912         return 0;
913 }
914 EXPORT_SYMBOL(genphy_read_status);
915
916 static int genphy_config_init(struct phy_device *phydev)
917 {
918         int val;
919         u32 features;
920
921         /* For now, I'll claim that the generic driver supports
922          * all possible port types */
923         features = (SUPPORTED_TP | SUPPORTED_MII
924                         | SUPPORTED_AUI | SUPPORTED_FIBRE |
925                         SUPPORTED_BNC);
926
927         /* Do we support autonegotiation? */
928         val = phy_read(phydev, MII_BMSR);
929
930         if (val < 0)
931                 return val;
932
933         if (val & BMSR_ANEGCAPABLE)
934                 features |= SUPPORTED_Autoneg;
935
936         if (val & BMSR_100FULL)
937                 features |= SUPPORTED_100baseT_Full;
938         if (val & BMSR_100HALF)
939                 features |= SUPPORTED_100baseT_Half;
940         if (val & BMSR_10FULL)
941                 features |= SUPPORTED_10baseT_Full;
942         if (val & BMSR_10HALF)
943                 features |= SUPPORTED_10baseT_Half;
944
945         if (val & BMSR_ESTATEN) {
946                 val = phy_read(phydev, MII_ESTATUS);
947
948                 if (val < 0)
949                         return val;
950
951                 if (val & ESTATUS_1000_TFULL)
952                         features |= SUPPORTED_1000baseT_Full;
953                 if (val & ESTATUS_1000_THALF)
954                         features |= SUPPORTED_1000baseT_Half;
955         }
956
957         phydev->supported = features;
958         phydev->advertising = features;
959
960         return 0;
961 }
962 int genphy_suspend(struct phy_device *phydev)
963 {
964         int value;
965
966         mutex_lock(&phydev->lock);
967
968         value = phy_read(phydev, MII_BMCR);
969         phy_write(phydev, MII_BMCR, (value | BMCR_PDOWN));
970
971         mutex_unlock(&phydev->lock);
972
973         return 0;
974 }
975 EXPORT_SYMBOL(genphy_suspend);
976
977 int genphy_resume(struct phy_device *phydev)
978 {
979         int value;
980
981         mutex_lock(&phydev->lock);
982
983         value = phy_read(phydev, MII_BMCR);
984         phy_write(phydev, MII_BMCR, (value & ~BMCR_PDOWN));
985
986         mutex_unlock(&phydev->lock);
987
988         return 0;
989 }
990 EXPORT_SYMBOL(genphy_resume);
991
992 /**
993  * phy_probe - probe and init a PHY device
994  * @dev: device to probe and init
995  *
996  * Description: Take care of setting up the phy_device structure,
997  *   set the state to READY (the driver's init function should
998  *   set it to STARTING if needed).
999  */
1000 static int phy_probe(struct device *dev)
1001 {
1002         struct phy_device *phydev;
1003         struct phy_driver *phydrv;
1004         struct device_driver *drv;
1005         int err = 0;
1006
1007         phydev = to_phy_device(dev);
1008
1009         drv = phydev->dev.driver;
1010         phydrv = to_phy_driver(drv);
1011         phydev->drv = phydrv;
1012
1013         /* Disable the interrupt if the PHY doesn't support it */
1014         if (!(phydrv->flags & PHY_HAS_INTERRUPT))
1015                 phydev->irq = PHY_POLL;
1016
1017         mutex_lock(&phydev->lock);
1018
1019         /* Start out supporting everything. Eventually,
1020          * a controller will attach, and may modify one
1021          * or both of these values */
1022         phydev->supported = phydrv->features;
1023         phydev->advertising = phydrv->features;
1024
1025         /* Set the state to READY by default */
1026         phydev->state = PHY_READY;
1027
1028         if (phydev->drv->probe)
1029                 err = phydev->drv->probe(phydev);
1030
1031         mutex_unlock(&phydev->lock);
1032
1033         return err;
1034
1035 }
1036
1037 static int phy_remove(struct device *dev)
1038 {
1039         struct phy_device *phydev;
1040
1041         phydev = to_phy_device(dev);
1042
1043         mutex_lock(&phydev->lock);
1044         phydev->state = PHY_DOWN;
1045         mutex_unlock(&phydev->lock);
1046
1047         if (phydev->drv->remove)
1048                 phydev->drv->remove(phydev);
1049         phydev->drv = NULL;
1050
1051         return 0;
1052 }
1053
1054 /**
1055  * phy_driver_register - register a phy_driver with the PHY layer
1056  * @new_driver: new phy_driver to register
1057  */
1058 int phy_driver_register(struct phy_driver *new_driver)
1059 {
1060         int retval;
1061
1062         new_driver->driver.name = new_driver->name;
1063         new_driver->driver.bus = &mdio_bus_type;
1064         new_driver->driver.probe = phy_probe;
1065         new_driver->driver.remove = phy_remove;
1066
1067         retval = driver_register(&new_driver->driver);
1068
1069         if (retval) {
1070                 pr_err("%s: Error %d in registering driver\n",
1071                        new_driver->name, retval);
1072
1073                 return retval;
1074         }
1075
1076         pr_debug("%s: Registered new driver\n", new_driver->name);
1077
1078         return 0;
1079 }
1080 EXPORT_SYMBOL(phy_driver_register);
1081
1082 int phy_drivers_register(struct phy_driver *new_driver, int n)
1083 {
1084         int i, ret = 0;
1085
1086         for (i = 0; i < n; i++) {
1087                 ret = phy_driver_register(new_driver + i);
1088                 if (ret) {
1089                         while (i-- > 0)
1090                                 phy_driver_unregister(new_driver + i);
1091                         break;
1092                 }
1093         }
1094         return ret;
1095 }
1096 EXPORT_SYMBOL(phy_drivers_register);
1097
1098 void phy_driver_unregister(struct phy_driver *drv)
1099 {
1100         driver_unregister(&drv->driver);
1101 }
1102 EXPORT_SYMBOL(phy_driver_unregister);
1103
1104 void phy_drivers_unregister(struct phy_driver *drv, int n)
1105 {
1106         int i;
1107         for (i = 0; i < n; i++) {
1108                 phy_driver_unregister(drv + i);
1109         }
1110 }
1111 EXPORT_SYMBOL(phy_drivers_unregister);
1112
1113 static struct phy_driver genphy_driver = {
1114         .phy_id         = 0xffffffff,
1115         .phy_id_mask    = 0xffffffff,
1116         .name           = "Generic PHY",
1117         .config_init    = genphy_config_init,
1118         .features       = 0,
1119         .config_aneg    = genphy_config_aneg,
1120         .read_status    = genphy_read_status,
1121         .suspend        = genphy_suspend,
1122         .resume         = genphy_resume,
1123         .driver         = {.owner= THIS_MODULE, },
1124 };
1125
1126 static int __init phy_init(void)
1127 {
1128         int rc;
1129
1130         rc = mdio_bus_init();
1131         if (rc)
1132                 return rc;
1133
1134         rc = phy_driver_register(&genphy_driver);
1135         if (rc)
1136                 mdio_bus_exit();
1137
1138         return rc;
1139 }
1140
1141 static void __exit phy_exit(void)
1142 {
1143         phy_driver_unregister(&genphy_driver);
1144         mdio_bus_exit();
1145 }
1146
1147 subsys_initcall(phy_init);
1148 module_exit(phy_exit);