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