1 /* 2 * Framework and drivers for configuring and reading different PHYs 3 * Based on code in sungem_phy.c and gianfar_phy.c 4 * 5 * Author: Andy Fleming 6 * 7 * Copyright (c) 2004 Freescale Semiconductor, Inc. 8 * 9 * This program is free software; you can redistribute it and/or modify it 10 * under the terms of the GNU General Public License as published by the 11 * Free Software Foundation; either version 2 of the License, or (at your 12 * option) any later version. 13 * 14 */ 15 16 #ifndef __PHY_H 17 #define __PHY_H 18 19 #include <linux/compiler.h> 20 #include <linux/spinlock.h> 21 #include <linux/ethtool.h> 22 #include <linux/mdio.h> 23 #include <linux/mii.h> 24 #include <linux/module.h> 25 #include <linux/timer.h> 26 #include <linux/workqueue.h> 27 #include <linux/mod_devicetable.h> 28 #include <linux/phy_led_triggers.h> 29 30 #include <linux/atomic.h> 31 32 #define PHY_DEFAULT_FEATURES (SUPPORTED_Autoneg | \ 33 SUPPORTED_TP | \ 34 SUPPORTED_MII) 35 36 #define PHY_10BT_FEATURES (SUPPORTED_10baseT_Half | \ 37 SUPPORTED_10baseT_Full) 38 39 #define PHY_100BT_FEATURES (SUPPORTED_100baseT_Half | \ 40 SUPPORTED_100baseT_Full) 41 42 #define PHY_1000BT_FEATURES (SUPPORTED_1000baseT_Half | \ 43 SUPPORTED_1000baseT_Full) 44 45 #define PHY_BASIC_FEATURES (PHY_10BT_FEATURES | \ 46 PHY_100BT_FEATURES | \ 47 PHY_DEFAULT_FEATURES) 48 49 #define PHY_GBIT_FEATURES (PHY_BASIC_FEATURES | \ 50 PHY_1000BT_FEATURES) 51 52 53 /* 54 * Set phydev->irq to PHY_POLL if interrupts are not supported, 55 * or not desired for this PHY. Set to PHY_IGNORE_INTERRUPT if 56 * the attached driver handles the interrupt 57 */ 58 #define PHY_POLL -1 59 #define PHY_IGNORE_INTERRUPT -2 60 61 #define PHY_HAS_INTERRUPT 0x00000001 62 #define PHY_HAS_MAGICANEG 0x00000002 63 #define PHY_IS_INTERNAL 0x00000004 64 #define MDIO_DEVICE_IS_PHY 0x80000000 65 66 /* Interface Mode definitions */ 67 typedef enum { 68 PHY_INTERFACE_MODE_NA, 69 PHY_INTERFACE_MODE_MII, 70 PHY_INTERFACE_MODE_GMII, 71 PHY_INTERFACE_MODE_SGMII, 72 PHY_INTERFACE_MODE_TBI, 73 PHY_INTERFACE_MODE_REVMII, 74 PHY_INTERFACE_MODE_RMII, 75 PHY_INTERFACE_MODE_RGMII, 76 PHY_INTERFACE_MODE_RGMII_ID, 77 PHY_INTERFACE_MODE_RGMII_RXID, 78 PHY_INTERFACE_MODE_RGMII_TXID, 79 PHY_INTERFACE_MODE_RTBI, 80 PHY_INTERFACE_MODE_SMII, 81 PHY_INTERFACE_MODE_XGMII, 82 PHY_INTERFACE_MODE_MOCA, 83 PHY_INTERFACE_MODE_QSGMII, 84 PHY_INTERFACE_MODE_TRGMII, 85 PHY_INTERFACE_MODE_MAX, 86 } phy_interface_t; 87 88 /** 89 * phy_supported_speeds - return all speeds currently supported by a phy device 90 * @phy: The phy device to return supported speeds of. 91 * @speeds: buffer to store supported speeds in. 92 * @size: size of speeds buffer. 93 * 94 * Description: Returns the number of supported speeds, and 95 * fills the speeds * buffer with the supported speeds. If speeds buffer is 96 * too small to contain * all currently supported speeds, will return as 97 * many speeds as can fit. 98 */ 99 unsigned int phy_supported_speeds(struct phy_device *phy, 100 unsigned int *speeds, 101 unsigned int size); 102 103 /** 104 * It maps 'enum phy_interface_t' found in include/linux/phy.h 105 * into the device tree binding of 'phy-mode', so that Ethernet 106 * device driver can get phy interface from device tree. 107 */ 108 static inline const char *phy_modes(phy_interface_t interface) 109 { 110 switch (interface) { 111 case PHY_INTERFACE_MODE_NA: 112 return ""; 113 case PHY_INTERFACE_MODE_MII: 114 return "mii"; 115 case PHY_INTERFACE_MODE_GMII: 116 return "gmii"; 117 case PHY_INTERFACE_MODE_SGMII: 118 return "sgmii"; 119 case PHY_INTERFACE_MODE_TBI: 120 return "tbi"; 121 case PHY_INTERFACE_MODE_REVMII: 122 return "rev-mii"; 123 case PHY_INTERFACE_MODE_RMII: 124 return "rmii"; 125 case PHY_INTERFACE_MODE_RGMII: 126 return "rgmii"; 127 case PHY_INTERFACE_MODE_RGMII_ID: 128 return "rgmii-id"; 129 case PHY_INTERFACE_MODE_RGMII_RXID: 130 return "rgmii-rxid"; 131 case PHY_INTERFACE_MODE_RGMII_TXID: 132 return "rgmii-txid"; 133 case PHY_INTERFACE_MODE_RTBI: 134 return "rtbi"; 135 case PHY_INTERFACE_MODE_SMII: 136 return "smii"; 137 case PHY_INTERFACE_MODE_XGMII: 138 return "xgmii"; 139 case PHY_INTERFACE_MODE_MOCA: 140 return "moca"; 141 case PHY_INTERFACE_MODE_QSGMII: 142 return "qsgmii"; 143 case PHY_INTERFACE_MODE_TRGMII: 144 return "trgmii"; 145 default: 146 return "unknown"; 147 } 148 } 149 150 151 #define PHY_INIT_TIMEOUT 100000 152 #define PHY_STATE_TIME 1 153 #define PHY_FORCE_TIMEOUT 10 154 #define PHY_AN_TIMEOUT 10 155 156 #define PHY_MAX_ADDR 32 157 158 /* Used when trying to connect to a specific phy (mii bus id:phy device id) */ 159 #define PHY_ID_FMT "%s:%02x" 160 161 #define MII_BUS_ID_SIZE 61 162 163 /* Or MII_ADDR_C45 into regnum for read/write on mii_bus to enable the 21 bit 164 IEEE 802.3ae clause 45 addressing mode used by 10GIGE phy chips. */ 165 #define MII_ADDR_C45 (1<<30) 166 167 struct device; 168 struct sk_buff; 169 170 /* 171 * The Bus class for PHYs. Devices which provide access to 172 * PHYs should register using this structure 173 */ 174 struct mii_bus { 175 struct module *owner; 176 const char *name; 177 char id[MII_BUS_ID_SIZE]; 178 void *priv; 179 int (*read)(struct mii_bus *bus, int addr, int regnum); 180 int (*write)(struct mii_bus *bus, int addr, int regnum, u16 val); 181 int (*reset)(struct mii_bus *bus); 182 183 /* 184 * A lock to ensure that only one thing can read/write 185 * the MDIO bus at a time 186 */ 187 struct mutex mdio_lock; 188 189 struct device *parent; 190 enum { 191 MDIOBUS_ALLOCATED = 1, 192 MDIOBUS_REGISTERED, 193 MDIOBUS_UNREGISTERED, 194 MDIOBUS_RELEASED, 195 } state; 196 struct device dev; 197 198 /* list of all PHYs on bus */ 199 struct mdio_device *mdio_map[PHY_MAX_ADDR]; 200 201 /* PHY addresses to be ignored when probing */ 202 u32 phy_mask; 203 204 /* PHY addresses to ignore the TA/read failure */ 205 u32 phy_ignore_ta_mask; 206 207 /* 208 * An array of interrupts, each PHY's interrupt at the index 209 * matching its address 210 */ 211 int irq[PHY_MAX_ADDR]; 212 }; 213 #define to_mii_bus(d) container_of(d, struct mii_bus, dev) 214 215 struct mii_bus *mdiobus_alloc_size(size_t); 216 static inline struct mii_bus *mdiobus_alloc(void) 217 { 218 return mdiobus_alloc_size(0); 219 } 220 221 int __mdiobus_register(struct mii_bus *bus, struct module *owner); 222 #define mdiobus_register(bus) __mdiobus_register(bus, THIS_MODULE) 223 void mdiobus_unregister(struct mii_bus *bus); 224 void mdiobus_free(struct mii_bus *bus); 225 struct mii_bus *devm_mdiobus_alloc_size(struct device *dev, int sizeof_priv); 226 static inline struct mii_bus *devm_mdiobus_alloc(struct device *dev) 227 { 228 return devm_mdiobus_alloc_size(dev, 0); 229 } 230 231 void devm_mdiobus_free(struct device *dev, struct mii_bus *bus); 232 struct phy_device *mdiobus_scan(struct mii_bus *bus, int addr); 233 234 #define PHY_INTERRUPT_DISABLED 0x0 235 #define PHY_INTERRUPT_ENABLED 0x80000000 236 237 /* PHY state machine states: 238 * 239 * DOWN: PHY device and driver are not ready for anything. probe 240 * should be called if and only if the PHY is in this state, 241 * given that the PHY device exists. 242 * - PHY driver probe function will, depending on the PHY, set 243 * the state to STARTING or READY 244 * 245 * STARTING: PHY device is coming up, and the ethernet driver is 246 * not ready. PHY drivers may set this in the probe function. 247 * If they do, they are responsible for making sure the state is 248 * eventually set to indicate whether the PHY is UP or READY, 249 * depending on the state when the PHY is done starting up. 250 * - PHY driver will set the state to READY 251 * - start will set the state to PENDING 252 * 253 * READY: PHY is ready to send and receive packets, but the 254 * controller is not. By default, PHYs which do not implement 255 * probe will be set to this state by phy_probe(). If the PHY 256 * driver knows the PHY is ready, and the PHY state is STARTING, 257 * then it sets this STATE. 258 * - start will set the state to UP 259 * 260 * PENDING: PHY device is coming up, but the ethernet driver is 261 * ready. phy_start will set this state if the PHY state is 262 * STARTING. 263 * - PHY driver will set the state to UP when the PHY is ready 264 * 265 * UP: The PHY and attached device are ready to do work. 266 * Interrupts should be started here. 267 * - timer moves to AN 268 * 269 * AN: The PHY is currently negotiating the link state. Link is 270 * therefore down for now. phy_timer will set this state when it 271 * detects the state is UP. config_aneg will set this state 272 * whenever called with phydev->autoneg set to AUTONEG_ENABLE. 273 * - If autonegotiation finishes, but there's no link, it sets 274 * the state to NOLINK. 275 * - If aneg finishes with link, it sets the state to RUNNING, 276 * and calls adjust_link 277 * - If autonegotiation did not finish after an arbitrary amount 278 * of time, autonegotiation should be tried again if the PHY 279 * supports "magic" autonegotiation (back to AN) 280 * - If it didn't finish, and no magic_aneg, move to FORCING. 281 * 282 * NOLINK: PHY is up, but not currently plugged in. 283 * - If the timer notes that the link comes back, we move to RUNNING 284 * - config_aneg moves to AN 285 * - phy_stop moves to HALTED 286 * 287 * FORCING: PHY is being configured with forced settings 288 * - if link is up, move to RUNNING 289 * - If link is down, we drop to the next highest setting, and 290 * retry (FORCING) after a timeout 291 * - phy_stop moves to HALTED 292 * 293 * RUNNING: PHY is currently up, running, and possibly sending 294 * and/or receiving packets 295 * - timer will set CHANGELINK if we're polling (this ensures the 296 * link state is polled every other cycle of this state machine, 297 * which makes it every other second) 298 * - irq will set CHANGELINK 299 * - config_aneg will set AN 300 * - phy_stop moves to HALTED 301 * 302 * CHANGELINK: PHY experienced a change in link state 303 * - timer moves to RUNNING if link 304 * - timer moves to NOLINK if the link is down 305 * - phy_stop moves to HALTED 306 * 307 * HALTED: PHY is up, but no polling or interrupts are done. Or 308 * PHY is in an error state. 309 * 310 * - phy_start moves to RESUMING 311 * 312 * RESUMING: PHY was halted, but now wants to run again. 313 * - If we are forcing, or aneg is done, timer moves to RUNNING 314 * - If aneg is not done, timer moves to AN 315 * - phy_stop moves to HALTED 316 */ 317 enum phy_state { 318 PHY_DOWN = 0, 319 PHY_STARTING, 320 PHY_READY, 321 PHY_PENDING, 322 PHY_UP, 323 PHY_AN, 324 PHY_RUNNING, 325 PHY_NOLINK, 326 PHY_FORCING, 327 PHY_CHANGELINK, 328 PHY_HALTED, 329 PHY_RESUMING 330 }; 331 332 /** 333 * struct phy_c45_device_ids - 802.3-c45 Device Identifiers 334 * @devices_in_package: Bit vector of devices present. 335 * @device_ids: The device identifer for each present device. 336 */ 337 struct phy_c45_device_ids { 338 u32 devices_in_package; 339 u32 device_ids[8]; 340 }; 341 342 /* phy_device: An instance of a PHY 343 * 344 * drv: Pointer to the driver for this PHY instance 345 * phy_id: UID for this device found during discovery 346 * c45_ids: 802.3-c45 Device Identifers if is_c45. 347 * is_c45: Set to true if this phy uses clause 45 addressing. 348 * is_internal: Set to true if this phy is internal to a MAC. 349 * is_pseudo_fixed_link: Set to true if this phy is an Ethernet switch, etc. 350 * has_fixups: Set to true if this phy has fixups/quirks. 351 * suspended: Set to true if this phy has been suspended successfully. 352 * state: state of the PHY for management purposes 353 * dev_flags: Device-specific flags used by the PHY driver. 354 * link_timeout: The number of timer firings to wait before the 355 * giving up on the current attempt at acquiring a link 356 * irq: IRQ number of the PHY's interrupt (-1 if none) 357 * phy_timer: The timer for handling the state machine 358 * phy_queue: A work_queue for the phy_mac_interrupt 359 * attached_dev: The attached enet driver's device instance ptr 360 * adjust_link: Callback for the enet controller to respond to 361 * changes in the link state. 362 * 363 * speed, duplex, pause, supported, advertising, lp_advertising, 364 * and autoneg are used like in mii_if_info 365 * 366 * interrupts currently only supports enabled or disabled, 367 * but could be changed in the future to support enabling 368 * and disabling specific interrupts 369 * 370 * Contains some infrastructure for polling and interrupt 371 * handling, as well as handling shifts in PHY hardware state 372 */ 373 struct phy_device { 374 struct mdio_device mdio; 375 376 /* Information about the PHY type */ 377 /* And management functions */ 378 struct phy_driver *drv; 379 380 u32 phy_id; 381 382 struct phy_c45_device_ids c45_ids; 383 bool is_c45; 384 bool is_internal; 385 bool is_pseudo_fixed_link; 386 bool has_fixups; 387 bool suspended; 388 389 enum phy_state state; 390 391 u32 dev_flags; 392 393 phy_interface_t interface; 394 395 /* 396 * forced speed & duplex (no autoneg) 397 * partner speed & duplex & pause (autoneg) 398 */ 399 int speed; 400 int duplex; 401 int pause; 402 int asym_pause; 403 404 /* The most recently read link state */ 405 int link; 406 407 /* Enabled Interrupts */ 408 u32 interrupts; 409 410 /* Union of PHY and Attached devices' supported modes */ 411 /* See mii.h for more info */ 412 u32 supported; 413 u32 advertising; 414 u32 lp_advertising; 415 416 /* Energy efficient ethernet modes which should be prohibited */ 417 u32 eee_broken_modes; 418 419 int autoneg; 420 421 int link_timeout; 422 423 #ifdef CONFIG_LED_TRIGGER_PHY 424 struct phy_led_trigger *phy_led_triggers; 425 unsigned int phy_num_led_triggers; 426 struct phy_led_trigger *last_triggered; 427 #endif 428 429 /* 430 * Interrupt number for this PHY 431 * -1 means no interrupt 432 */ 433 int irq; 434 435 /* private data pointer */ 436 /* For use by PHYs to maintain extra state */ 437 void *priv; 438 439 /* Interrupt and Polling infrastructure */ 440 struct work_struct phy_queue; 441 struct delayed_work state_queue; 442 atomic_t irq_disable; 443 444 struct mutex lock; 445 446 struct net_device *attached_dev; 447 448 u8 mdix; 449 u8 mdix_ctrl; 450 451 void (*adjust_link)(struct net_device *dev); 452 }; 453 #define to_phy_device(d) container_of(to_mdio_device(d), \ 454 struct phy_device, mdio) 455 456 /* struct phy_driver: Driver structure for a particular PHY type 457 * 458 * driver_data: static driver data 459 * phy_id: The result of reading the UID registers of this PHY 460 * type, and ANDing them with the phy_id_mask. This driver 461 * only works for PHYs with IDs which match this field 462 * name: The friendly name of this PHY type 463 * phy_id_mask: Defines the important bits of the phy_id 464 * features: A list of features (speed, duplex, etc) supported 465 * by this PHY 466 * flags: A bitfield defining certain other features this PHY 467 * supports (like interrupts) 468 * 469 * The drivers must implement config_aneg and read_status. All 470 * other functions are optional. Note that none of these 471 * functions should be called from interrupt time. The goal is 472 * for the bus read/write functions to be able to block when the 473 * bus transaction is happening, and be freed up by an interrupt 474 * (The MPC85xx has this ability, though it is not currently 475 * supported in the driver). 476 */ 477 struct phy_driver { 478 struct mdio_driver_common mdiodrv; 479 u32 phy_id; 480 char *name; 481 unsigned int phy_id_mask; 482 u32 features; 483 u32 flags; 484 const void *driver_data; 485 486 /* 487 * Called to issue a PHY software reset 488 */ 489 int (*soft_reset)(struct phy_device *phydev); 490 491 /* 492 * Called to initialize the PHY, 493 * including after a reset 494 */ 495 int (*config_init)(struct phy_device *phydev); 496 497 /* 498 * Called during discovery. Used to set 499 * up device-specific structures, if any 500 */ 501 int (*probe)(struct phy_device *phydev); 502 503 /* PHY Power Management */ 504 int (*suspend)(struct phy_device *phydev); 505 int (*resume)(struct phy_device *phydev); 506 507 /* 508 * Configures the advertisement and resets 509 * autonegotiation if phydev->autoneg is on, 510 * forces the speed to the current settings in phydev 511 * if phydev->autoneg is off 512 */ 513 int (*config_aneg)(struct phy_device *phydev); 514 515 /* Determines the auto negotiation result */ 516 int (*aneg_done)(struct phy_device *phydev); 517 518 /* Determines the negotiated speed and duplex */ 519 int (*read_status)(struct phy_device *phydev); 520 521 /* Clears any pending interrupts */ 522 int (*ack_interrupt)(struct phy_device *phydev); 523 524 /* Enables or disables interrupts */ 525 int (*config_intr)(struct phy_device *phydev); 526 527 /* 528 * Checks if the PHY generated an interrupt. 529 * For multi-PHY devices with shared PHY interrupt pin 530 */ 531 int (*did_interrupt)(struct phy_device *phydev); 532 533 /* Clears up any memory if needed */ 534 void (*remove)(struct phy_device *phydev); 535 536 /* Returns true if this is a suitable driver for the given 537 * phydev. If NULL, matching is based on phy_id and 538 * phy_id_mask. 539 */ 540 int (*match_phy_device)(struct phy_device *phydev); 541 542 /* Handles ethtool queries for hardware time stamping. */ 543 int (*ts_info)(struct phy_device *phydev, struct ethtool_ts_info *ti); 544 545 /* Handles SIOCSHWTSTAMP ioctl for hardware time stamping. */ 546 int (*hwtstamp)(struct phy_device *phydev, struct ifreq *ifr); 547 548 /* 549 * Requests a Rx timestamp for 'skb'. If the skb is accepted, 550 * the phy driver promises to deliver it using netif_rx() as 551 * soon as a timestamp becomes available. One of the 552 * PTP_CLASS_ values is passed in 'type'. The function must 553 * return true if the skb is accepted for delivery. 554 */ 555 bool (*rxtstamp)(struct phy_device *dev, struct sk_buff *skb, int type); 556 557 /* 558 * Requests a Tx timestamp for 'skb'. The phy driver promises 559 * to deliver it using skb_complete_tx_timestamp() as soon as a 560 * timestamp becomes available. One of the PTP_CLASS_ values 561 * is passed in 'type'. 562 */ 563 void (*txtstamp)(struct phy_device *dev, struct sk_buff *skb, int type); 564 565 /* Some devices (e.g. qnap TS-119P II) require PHY register changes to 566 * enable Wake on LAN, so set_wol is provided to be called in the 567 * ethernet driver's set_wol function. */ 568 int (*set_wol)(struct phy_device *dev, struct ethtool_wolinfo *wol); 569 570 /* See set_wol, but for checking whether Wake on LAN is enabled. */ 571 void (*get_wol)(struct phy_device *dev, struct ethtool_wolinfo *wol); 572 573 /* 574 * Called to inform a PHY device driver when the core is about to 575 * change the link state. This callback is supposed to be used as 576 * fixup hook for drivers that need to take action when the link 577 * state changes. Drivers are by no means allowed to mess with the 578 * PHY device structure in their implementations. 579 */ 580 void (*link_change_notify)(struct phy_device *dev); 581 582 /* A function provided by a phy specific driver to override the 583 * the PHY driver framework support for reading a MMD register 584 * from the PHY. If not supported, return -1. This function is 585 * optional for PHY specific drivers, if not provided then the 586 * default MMD read function is used by the PHY framework. 587 */ 588 int (*read_mmd_indirect)(struct phy_device *dev, int ptrad, 589 int devnum, int regnum); 590 591 /* A function provided by a phy specific driver to override the 592 * the PHY driver framework support for writing a MMD register 593 * from the PHY. This function is optional for PHY specific drivers, 594 * if not provided then the default MMD read function is used by 595 * the PHY framework. 596 */ 597 void (*write_mmd_indirect)(struct phy_device *dev, int ptrad, 598 int devnum, int regnum, u32 val); 599 600 /* Get the size and type of the eeprom contained within a plug-in 601 * module */ 602 int (*module_info)(struct phy_device *dev, 603 struct ethtool_modinfo *modinfo); 604 605 /* Get the eeprom information from the plug-in module */ 606 int (*module_eeprom)(struct phy_device *dev, 607 struct ethtool_eeprom *ee, u8 *data); 608 609 /* Get statistics from the phy using ethtool */ 610 int (*get_sset_count)(struct phy_device *dev); 611 void (*get_strings)(struct phy_device *dev, u8 *data); 612 void (*get_stats)(struct phy_device *dev, 613 struct ethtool_stats *stats, u64 *data); 614 615 /* Get and Set PHY tunables */ 616 int (*get_tunable)(struct phy_device *dev, 617 struct ethtool_tunable *tuna, void *data); 618 int (*set_tunable)(struct phy_device *dev, 619 struct ethtool_tunable *tuna, 620 const void *data); 621 }; 622 #define to_phy_driver(d) container_of(to_mdio_common_driver(d), \ 623 struct phy_driver, mdiodrv) 624 625 #define PHY_ANY_ID "MATCH ANY PHY" 626 #define PHY_ANY_UID 0xffffffff 627 628 /* A Structure for boards to register fixups with the PHY Lib */ 629 struct phy_fixup { 630 struct list_head list; 631 char bus_id[MII_BUS_ID_SIZE + 3]; 632 u32 phy_uid; 633 u32 phy_uid_mask; 634 int (*run)(struct phy_device *phydev); 635 }; 636 637 /** 638 * phy_read_mmd - Convenience function for reading a register 639 * from an MMD on a given PHY. 640 * @phydev: The phy_device struct 641 * @devad: The MMD to read from 642 * @regnum: The register on the MMD to read 643 * 644 * Same rules as for phy_read(); 645 */ 646 static inline int phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum) 647 { 648 if (!phydev->is_c45) 649 return -EOPNOTSUPP; 650 651 return mdiobus_read(phydev->mdio.bus, phydev->mdio.addr, 652 MII_ADDR_C45 | (devad << 16) | (regnum & 0xffff)); 653 } 654 655 /** 656 * phy_read_mmd_indirect - reads data from the MMD registers 657 * @phydev: The PHY device bus 658 * @prtad: MMD Address 659 * @addr: PHY address on the MII bus 660 * 661 * Description: it reads data from the MMD registers (clause 22 to access to 662 * clause 45) of the specified phy address. 663 */ 664 int phy_read_mmd_indirect(struct phy_device *phydev, int prtad, int devad); 665 666 /** 667 * phy_read - Convenience function for reading a given PHY register 668 * @phydev: the phy_device struct 669 * @regnum: register number to read 670 * 671 * NOTE: MUST NOT be called from interrupt context, 672 * because the bus read/write functions may wait for an interrupt 673 * to conclude the operation. 674 */ 675 static inline int phy_read(struct phy_device *phydev, u32 regnum) 676 { 677 return mdiobus_read(phydev->mdio.bus, phydev->mdio.addr, regnum); 678 } 679 680 /** 681 * phy_write - Convenience function for writing a given PHY register 682 * @phydev: the phy_device struct 683 * @regnum: register number to write 684 * @val: value to write to @regnum 685 * 686 * NOTE: MUST NOT be called from interrupt context, 687 * because the bus read/write functions may wait for an interrupt 688 * to conclude the operation. 689 */ 690 static inline int phy_write(struct phy_device *phydev, u32 regnum, u16 val) 691 { 692 return mdiobus_write(phydev->mdio.bus, phydev->mdio.addr, regnum, val); 693 } 694 695 /** 696 * phy_interrupt_is_valid - Convenience function for testing a given PHY irq 697 * @phydev: the phy_device struct 698 * 699 * NOTE: must be kept in sync with addition/removal of PHY_POLL and 700 * PHY_IGNORE_INTERRUPT 701 */ 702 static inline bool phy_interrupt_is_valid(struct phy_device *phydev) 703 { 704 return phydev->irq != PHY_POLL && phydev->irq != PHY_IGNORE_INTERRUPT; 705 } 706 707 /** 708 * phy_is_internal - Convenience function for testing if a PHY is internal 709 * @phydev: the phy_device struct 710 */ 711 static inline bool phy_is_internal(struct phy_device *phydev) 712 { 713 return phydev->is_internal; 714 } 715 716 /** 717 * phy_interface_is_rgmii - Convenience function for testing if a PHY interface 718 * is RGMII (all variants) 719 * @phydev: the phy_device struct 720 */ 721 static inline bool phy_interface_is_rgmii(struct phy_device *phydev) 722 { 723 return phydev->interface >= PHY_INTERFACE_MODE_RGMII && 724 phydev->interface <= PHY_INTERFACE_MODE_RGMII_TXID; 725 }; 726 727 /* 728 * phy_is_pseudo_fixed_link - Convenience function for testing if this 729 * PHY is the CPU port facing side of an Ethernet switch, or similar. 730 * @phydev: the phy_device struct 731 */ 732 static inline bool phy_is_pseudo_fixed_link(struct phy_device *phydev) 733 { 734 return phydev->is_pseudo_fixed_link; 735 } 736 737 /** 738 * phy_write_mmd - Convenience function for writing a register 739 * on an MMD on a given PHY. 740 * @phydev: The phy_device struct 741 * @devad: The MMD to read from 742 * @regnum: The register on the MMD to read 743 * @val: value to write to @regnum 744 * 745 * Same rules as for phy_write(); 746 */ 747 static inline int phy_write_mmd(struct phy_device *phydev, int devad, 748 u32 regnum, u16 val) 749 { 750 if (!phydev->is_c45) 751 return -EOPNOTSUPP; 752 753 regnum = MII_ADDR_C45 | ((devad & 0x1f) << 16) | (regnum & 0xffff); 754 755 return mdiobus_write(phydev->mdio.bus, phydev->mdio.addr, regnum, val); 756 } 757 758 /** 759 * phy_write_mmd_indirect - writes data to the MMD registers 760 * @phydev: The PHY device 761 * @prtad: MMD Address 762 * @devad: MMD DEVAD 763 * @data: data to write in the MMD register 764 * 765 * Description: Write data from the MMD registers of the specified 766 * phy address. 767 */ 768 void phy_write_mmd_indirect(struct phy_device *phydev, int prtad, 769 int devad, u32 data); 770 771 struct phy_device *phy_device_create(struct mii_bus *bus, int addr, int phy_id, 772 bool is_c45, 773 struct phy_c45_device_ids *c45_ids); 774 struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45); 775 int phy_device_register(struct phy_device *phy); 776 void phy_device_remove(struct phy_device *phydev); 777 int phy_init_hw(struct phy_device *phydev); 778 int phy_suspend(struct phy_device *phydev); 779 int phy_resume(struct phy_device *phydev); 780 struct phy_device *phy_attach(struct net_device *dev, const char *bus_id, 781 phy_interface_t interface); 782 struct phy_device *phy_find_first(struct mii_bus *bus); 783 int phy_attach_direct(struct net_device *dev, struct phy_device *phydev, 784 u32 flags, phy_interface_t interface); 785 int phy_connect_direct(struct net_device *dev, struct phy_device *phydev, 786 void (*handler)(struct net_device *), 787 phy_interface_t interface); 788 struct phy_device *phy_connect(struct net_device *dev, const char *bus_id, 789 void (*handler)(struct net_device *), 790 phy_interface_t interface); 791 void phy_disconnect(struct phy_device *phydev); 792 void phy_detach(struct phy_device *phydev); 793 void phy_start(struct phy_device *phydev); 794 void phy_stop(struct phy_device *phydev); 795 int phy_start_aneg(struct phy_device *phydev); 796 int phy_aneg_done(struct phy_device *phydev); 797 798 int phy_stop_interrupts(struct phy_device *phydev); 799 800 static inline int phy_read_status(struct phy_device *phydev) 801 { 802 return phydev->drv->read_status(phydev); 803 } 804 805 #define phydev_err(_phydev, format, args...) \ 806 dev_err(&_phydev->mdio.dev, format, ##args) 807 808 #define phydev_dbg(_phydev, format, args...) \ 809 dev_dbg(&_phydev->mdio.dev, format, ##args); 810 811 static inline const char *phydev_name(const struct phy_device *phydev) 812 { 813 return dev_name(&phydev->mdio.dev); 814 } 815 816 void phy_attached_print(struct phy_device *phydev, const char *fmt, ...) 817 __printf(2, 3); 818 void phy_attached_info(struct phy_device *phydev); 819 int genphy_config_init(struct phy_device *phydev); 820 int genphy_setup_forced(struct phy_device *phydev); 821 int genphy_restart_aneg(struct phy_device *phydev); 822 int genphy_config_aneg(struct phy_device *phydev); 823 int genphy_aneg_done(struct phy_device *phydev); 824 int genphy_update_link(struct phy_device *phydev); 825 int genphy_read_status(struct phy_device *phydev); 826 int genphy_suspend(struct phy_device *phydev); 827 int genphy_resume(struct phy_device *phydev); 828 int genphy_soft_reset(struct phy_device *phydev); 829 void phy_driver_unregister(struct phy_driver *drv); 830 void phy_drivers_unregister(struct phy_driver *drv, int n); 831 int phy_driver_register(struct phy_driver *new_driver, struct module *owner); 832 int phy_drivers_register(struct phy_driver *new_driver, int n, 833 struct module *owner); 834 void phy_state_machine(struct work_struct *work); 835 void phy_change(struct phy_device *phydev); 836 void phy_change_work(struct work_struct *work); 837 void phy_mac_interrupt(struct phy_device *phydev, int new_link); 838 void phy_start_machine(struct phy_device *phydev); 839 void phy_stop_machine(struct phy_device *phydev); 840 int phy_ethtool_sset(struct phy_device *phydev, struct ethtool_cmd *cmd); 841 int phy_ethtool_gset(struct phy_device *phydev, struct ethtool_cmd *cmd); 842 int phy_ethtool_ksettings_get(struct phy_device *phydev, 843 struct ethtool_link_ksettings *cmd); 844 int phy_ethtool_ksettings_set(struct phy_device *phydev, 845 const struct ethtool_link_ksettings *cmd); 846 int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd); 847 int phy_start_interrupts(struct phy_device *phydev); 848 void phy_print_status(struct phy_device *phydev); 849 void phy_device_free(struct phy_device *phydev); 850 int phy_set_max_speed(struct phy_device *phydev, u32 max_speed); 851 852 int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask, 853 int (*run)(struct phy_device *)); 854 int phy_register_fixup_for_id(const char *bus_id, 855 int (*run)(struct phy_device *)); 856 int phy_register_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask, 857 int (*run)(struct phy_device *)); 858 859 int phy_unregister_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask); 860 int phy_unregister_fixup_for_id(const char *bus_id); 861 int phy_unregister_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask); 862 863 int phy_init_eee(struct phy_device *phydev, bool clk_stop_enable); 864 int phy_get_eee_err(struct phy_device *phydev); 865 int phy_ethtool_set_eee(struct phy_device *phydev, struct ethtool_eee *data); 866 int phy_ethtool_get_eee(struct phy_device *phydev, struct ethtool_eee *data); 867 int phy_ethtool_set_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol); 868 void phy_ethtool_get_wol(struct phy_device *phydev, 869 struct ethtool_wolinfo *wol); 870 int phy_ethtool_get_link_ksettings(struct net_device *ndev, 871 struct ethtool_link_ksettings *cmd); 872 int phy_ethtool_set_link_ksettings(struct net_device *ndev, 873 const struct ethtool_link_ksettings *cmd); 874 int phy_ethtool_nway_reset(struct net_device *ndev); 875 876 int __init mdio_bus_init(void); 877 void mdio_bus_exit(void); 878 879 extern struct bus_type mdio_bus_type; 880 881 /** 882 * module_phy_driver() - Helper macro for registering PHY drivers 883 * @__phy_drivers: array of PHY drivers to register 884 * 885 * Helper macro for PHY drivers which do not do anything special in module 886 * init/exit. Each module may only use this macro once, and calling it 887 * replaces module_init() and module_exit(). 888 */ 889 #define phy_module_driver(__phy_drivers, __count) \ 890 static int __init phy_module_init(void) \ 891 { \ 892 return phy_drivers_register(__phy_drivers, __count, THIS_MODULE); \ 893 } \ 894 module_init(phy_module_init); \ 895 static void __exit phy_module_exit(void) \ 896 { \ 897 phy_drivers_unregister(__phy_drivers, __count); \ 898 } \ 899 module_exit(phy_module_exit) 900 901 #define module_phy_driver(__phy_drivers) \ 902 phy_module_driver(__phy_drivers, ARRAY_SIZE(__phy_drivers)) 903 904 #endif /* __PHY_H */ 905