linux/include/linux/phy.h
<<
>>
Prefs
   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/linkmode.h>
  23#include <linux/mdio.h>
  24#include <linux/mii.h>
  25#include <linux/module.h>
  26#include <linux/timer.h>
  27#include <linux/workqueue.h>
  28#include <linux/mod_devicetable.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
  45extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_basic_features) __ro_after_init;
  46extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_basic_t1_features) __ro_after_init;
  47extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_gbit_features) __ro_after_init;
  48extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_gbit_fibre_features) __ro_after_init;
  49extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_gbit_all_ports_features) __ro_after_init;
  50extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_features) __ro_after_init;
  51extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_full_features) __ro_after_init;
  52
  53#define PHY_BASIC_FEATURES ((unsigned long *)&phy_basic_features)
  54#define PHY_BASIC_T1_FEATURES ((unsigned long *)&phy_basic_t1_features)
  55#define PHY_GBIT_FEATURES ((unsigned long *)&phy_gbit_features)
  56#define PHY_GBIT_FIBRE_FEATURES ((unsigned long *)&phy_gbit_fibre_features)
  57#define PHY_GBIT_ALL_PORTS_FEATURES ((unsigned long *)&phy_gbit_all_ports_features)
  58#define PHY_10GBIT_FEATURES ((unsigned long *)&phy_10gbit_features)
  59#define PHY_10GBIT_FULL_FEATURES ((unsigned long *)&phy_10gbit_full_features)
  60
  61/*
  62 * Set phydev->irq to PHY_POLL if interrupts are not supported,
  63 * or not desired for this PHY.  Set to PHY_IGNORE_INTERRUPT if
  64 * the attached driver handles the interrupt
  65 */
  66#define PHY_POLL                -1
  67#define PHY_IGNORE_INTERRUPT    -2
  68
  69#define PHY_HAS_INTERRUPT       0x00000001
  70#define PHY_IS_INTERNAL         0x00000002
  71#define PHY_RST_AFTER_CLK_EN    0x00000004
  72#define MDIO_DEVICE_IS_PHY      0x80000000
  73
  74/* Interface Mode definitions */
  75typedef enum {
  76        PHY_INTERFACE_MODE_NA,
  77        PHY_INTERFACE_MODE_INTERNAL,
  78        PHY_INTERFACE_MODE_MII,
  79        PHY_INTERFACE_MODE_GMII,
  80        PHY_INTERFACE_MODE_SGMII,
  81        PHY_INTERFACE_MODE_TBI,
  82        PHY_INTERFACE_MODE_REVMII,
  83        PHY_INTERFACE_MODE_RMII,
  84        PHY_INTERFACE_MODE_RGMII,
  85        PHY_INTERFACE_MODE_RGMII_ID,
  86        PHY_INTERFACE_MODE_RGMII_RXID,
  87        PHY_INTERFACE_MODE_RGMII_TXID,
  88        PHY_INTERFACE_MODE_RTBI,
  89        PHY_INTERFACE_MODE_SMII,
  90        PHY_INTERFACE_MODE_XGMII,
  91        PHY_INTERFACE_MODE_MOCA,
  92        PHY_INTERFACE_MODE_QSGMII,
  93        PHY_INTERFACE_MODE_TRGMII,
  94        PHY_INTERFACE_MODE_1000BASEX,
  95        PHY_INTERFACE_MODE_2500BASEX,
  96        PHY_INTERFACE_MODE_RXAUI,
  97        PHY_INTERFACE_MODE_XAUI,
  98        /* 10GBASE-KR, XFI, SFI - single lane 10G Serdes */
  99        PHY_INTERFACE_MODE_10GKR,
 100        PHY_INTERFACE_MODE_MAX,
 101} phy_interface_t;
 102
 103/**
 104 * phy_supported_speeds - return all speeds currently supported by a phy device
 105 * @phy: The phy device to return supported speeds of.
 106 * @speeds: buffer to store supported speeds in.
 107 * @size: size of speeds buffer.
 108 *
 109 * Description: Returns the number of supported speeds, and
 110 * fills the speeds * buffer with the supported speeds. If speeds buffer is
 111 * too small to contain * all currently supported speeds, will return as
 112 * many speeds as can fit.
 113 */
 114unsigned int phy_supported_speeds(struct phy_device *phy,
 115                                      unsigned int *speeds,
 116                                      unsigned int size);
 117
 118/**
 119 * It maps 'enum phy_interface_t' found in include/linux/phy.h
 120 * into the device tree binding of 'phy-mode', so that Ethernet
 121 * device driver can get phy interface from device tree.
 122 */
 123static inline const char *phy_modes(phy_interface_t interface)
 124{
 125        switch (interface) {
 126        case PHY_INTERFACE_MODE_NA:
 127                return "";
 128        case PHY_INTERFACE_MODE_INTERNAL:
 129                return "internal";
 130        case PHY_INTERFACE_MODE_MII:
 131                return "mii";
 132        case PHY_INTERFACE_MODE_GMII:
 133                return "gmii";
 134        case PHY_INTERFACE_MODE_SGMII:
 135                return "sgmii";
 136        case PHY_INTERFACE_MODE_TBI:
 137                return "tbi";
 138        case PHY_INTERFACE_MODE_REVMII:
 139                return "rev-mii";
 140        case PHY_INTERFACE_MODE_RMII:
 141                return "rmii";
 142        case PHY_INTERFACE_MODE_RGMII:
 143                return "rgmii";
 144        case PHY_INTERFACE_MODE_RGMII_ID:
 145                return "rgmii-id";
 146        case PHY_INTERFACE_MODE_RGMII_RXID:
 147                return "rgmii-rxid";
 148        case PHY_INTERFACE_MODE_RGMII_TXID:
 149                return "rgmii-txid";
 150        case PHY_INTERFACE_MODE_RTBI:
 151                return "rtbi";
 152        case PHY_INTERFACE_MODE_SMII:
 153                return "smii";
 154        case PHY_INTERFACE_MODE_XGMII:
 155                return "xgmii";
 156        case PHY_INTERFACE_MODE_MOCA:
 157                return "moca";
 158        case PHY_INTERFACE_MODE_QSGMII:
 159                return "qsgmii";
 160        case PHY_INTERFACE_MODE_TRGMII:
 161                return "trgmii";
 162        case PHY_INTERFACE_MODE_1000BASEX:
 163                return "1000base-x";
 164        case PHY_INTERFACE_MODE_2500BASEX:
 165                return "2500base-x";
 166        case PHY_INTERFACE_MODE_RXAUI:
 167                return "rxaui";
 168        case PHY_INTERFACE_MODE_XAUI:
 169                return "xaui";
 170        case PHY_INTERFACE_MODE_10GKR:
 171                return "10gbase-kr";
 172        default:
 173                return "unknown";
 174        }
 175}
 176
 177
 178#define PHY_INIT_TIMEOUT        100000
 179#define PHY_STATE_TIME          1
 180#define PHY_FORCE_TIMEOUT       10
 181#define PHY_AN_TIMEOUT          10
 182
 183#define PHY_MAX_ADDR    32
 184
 185/* Used when trying to connect to a specific phy (mii bus id:phy device id) */
 186#define PHY_ID_FMT "%s:%02x"
 187
 188#define MII_BUS_ID_SIZE 61
 189
 190/* Or MII_ADDR_C45 into regnum for read/write on mii_bus to enable the 21 bit
 191   IEEE 802.3ae clause 45 addressing mode used by 10GIGE phy chips. */
 192#define MII_ADDR_C45 (1<<30)
 193
 194struct device;
 195struct phylink;
 196struct sk_buff;
 197
 198/*
 199 * The Bus class for PHYs.  Devices which provide access to
 200 * PHYs should register using this structure
 201 */
 202struct mii_bus {
 203        struct module *owner;
 204        const char *name;
 205        char id[MII_BUS_ID_SIZE];
 206        void *priv;
 207        int (*read)(struct mii_bus *bus, int addr, int regnum);
 208        int (*write)(struct mii_bus *bus, int addr, int regnum, u16 val);
 209        int (*reset)(struct mii_bus *bus);
 210
 211        /*
 212         * A lock to ensure that only one thing can read/write
 213         * the MDIO bus at a time
 214         */
 215        struct mutex mdio_lock;
 216
 217        struct device *parent;
 218        enum {
 219                MDIOBUS_ALLOCATED = 1,
 220                MDIOBUS_REGISTERED,
 221                MDIOBUS_UNREGISTERED,
 222                MDIOBUS_RELEASED,
 223        } state;
 224        struct device dev;
 225
 226        /* list of all PHYs on bus */
 227        struct mdio_device *mdio_map[PHY_MAX_ADDR];
 228
 229        /* PHY addresses to be ignored when probing */
 230        u32 phy_mask;
 231
 232        /* PHY addresses to ignore the TA/read failure */
 233        u32 phy_ignore_ta_mask;
 234
 235        /*
 236         * An array of interrupts, each PHY's interrupt at the index
 237         * matching its address
 238         */
 239        int irq[PHY_MAX_ADDR];
 240
 241        /* GPIO reset pulse width in microseconds */
 242        int reset_delay_us;
 243        /* RESET GPIO descriptor pointer */
 244        struct gpio_desc *reset_gpiod;
 245};
 246#define to_mii_bus(d) container_of(d, struct mii_bus, dev)
 247
 248struct mii_bus *mdiobus_alloc_size(size_t);
 249static inline struct mii_bus *mdiobus_alloc(void)
 250{
 251        return mdiobus_alloc_size(0);
 252}
 253
 254int __mdiobus_register(struct mii_bus *bus, struct module *owner);
 255#define mdiobus_register(bus) __mdiobus_register(bus, THIS_MODULE)
 256void mdiobus_unregister(struct mii_bus *bus);
 257void mdiobus_free(struct mii_bus *bus);
 258struct mii_bus *devm_mdiobus_alloc_size(struct device *dev, int sizeof_priv);
 259static inline struct mii_bus *devm_mdiobus_alloc(struct device *dev)
 260{
 261        return devm_mdiobus_alloc_size(dev, 0);
 262}
 263
 264void devm_mdiobus_free(struct device *dev, struct mii_bus *bus);
 265struct phy_device *mdiobus_scan(struct mii_bus *bus, int addr);
 266
 267#define PHY_INTERRUPT_DISABLED  0x0
 268#define PHY_INTERRUPT_ENABLED   0x80000000
 269
 270/* PHY state machine states:
 271 *
 272 * DOWN: PHY device and driver are not ready for anything.  probe
 273 * should be called if and only if the PHY is in this state,
 274 * given that the PHY device exists.
 275 * - PHY driver probe function will, depending on the PHY, set
 276 * the state to STARTING or READY
 277 *
 278 * STARTING:  PHY device is coming up, and the ethernet driver is
 279 * not ready.  PHY drivers may set this in the probe function.
 280 * If they do, they are responsible for making sure the state is
 281 * eventually set to indicate whether the PHY is UP or READY,
 282 * depending on the state when the PHY is done starting up.
 283 * - PHY driver will set the state to READY
 284 * - start will set the state to PENDING
 285 *
 286 * READY: PHY is ready to send and receive packets, but the
 287 * controller is not.  By default, PHYs which do not implement
 288 * probe will be set to this state by phy_probe().  If the PHY
 289 * driver knows the PHY is ready, and the PHY state is STARTING,
 290 * then it sets this STATE.
 291 * - start will set the state to UP
 292 *
 293 * PENDING: PHY device is coming up, but the ethernet driver is
 294 * ready.  phy_start will set this state if the PHY state is
 295 * STARTING.
 296 * - PHY driver will set the state to UP when the PHY is ready
 297 *
 298 * UP: The PHY and attached device are ready to do work.
 299 * Interrupts should be started here.
 300 * - timer moves to AN
 301 *
 302 * AN: The PHY is currently negotiating the link state.  Link is
 303 * therefore down for now.  phy_timer will set this state when it
 304 * detects the state is UP.  config_aneg will set this state
 305 * whenever called with phydev->autoneg set to AUTONEG_ENABLE.
 306 * - If autonegotiation finishes, but there's no link, it sets
 307 *   the state to NOLINK.
 308 * - If aneg finishes with link, it sets the state to RUNNING,
 309 *   and calls adjust_link
 310 * - If autonegotiation did not finish after an arbitrary amount
 311 *   of time, autonegotiation should be tried again if the PHY
 312 *   supports "magic" autonegotiation (back to AN)
 313 * - If it didn't finish, and no magic_aneg, move to FORCING.
 314 *
 315 * NOLINK: PHY is up, but not currently plugged in.
 316 * - If the timer notes that the link comes back, we move to RUNNING
 317 * - config_aneg moves to AN
 318 * - phy_stop moves to HALTED
 319 *
 320 * FORCING: PHY is being configured with forced settings
 321 * - if link is up, move to RUNNING
 322 * - If link is down, we drop to the next highest setting, and
 323 *   retry (FORCING) after a timeout
 324 * - phy_stop moves to HALTED
 325 *
 326 * RUNNING: PHY is currently up, running, and possibly sending
 327 * and/or receiving packets
 328 * - timer will set CHANGELINK if we're polling (this ensures the
 329 *   link state is polled every other cycle of this state machine,
 330 *   which makes it every other second)
 331 * - irq will set CHANGELINK
 332 * - config_aneg will set AN
 333 * - phy_stop moves to HALTED
 334 *
 335 * CHANGELINK: PHY experienced a change in link state
 336 * - timer moves to RUNNING if link
 337 * - timer moves to NOLINK if the link is down
 338 * - phy_stop moves to HALTED
 339 *
 340 * HALTED: PHY is up, but no polling or interrupts are done. Or
 341 * PHY is in an error state.
 342 *
 343 * - phy_start moves to RESUMING
 344 *
 345 * RESUMING: PHY was halted, but now wants to run again.
 346 * - If we are forcing, or aneg is done, timer moves to RUNNING
 347 * - If aneg is not done, timer moves to AN
 348 * - phy_stop moves to HALTED
 349 */
 350enum phy_state {
 351        PHY_DOWN = 0,
 352        PHY_STARTING,
 353        PHY_READY,
 354        PHY_PENDING,
 355        PHY_UP,
 356        PHY_AN,
 357        PHY_RUNNING,
 358        PHY_NOLINK,
 359        PHY_FORCING,
 360        PHY_CHANGELINK,
 361        PHY_HALTED,
 362        PHY_RESUMING
 363};
 364
 365/**
 366 * struct phy_c45_device_ids - 802.3-c45 Device Identifiers
 367 * @devices_in_package: Bit vector of devices present.
 368 * @device_ids: The device identifer for each present device.
 369 */
 370struct phy_c45_device_ids {
 371        u32 devices_in_package;
 372        u32 device_ids[8];
 373};
 374
 375/* phy_device: An instance of a PHY
 376 *
 377 * drv: Pointer to the driver for this PHY instance
 378 * phy_id: UID for this device found during discovery
 379 * c45_ids: 802.3-c45 Device Identifers if is_c45.
 380 * is_c45:  Set to true if this phy uses clause 45 addressing.
 381 * is_internal: Set to true if this phy is internal to a MAC.
 382 * is_pseudo_fixed_link: Set to true if this phy is an Ethernet switch, etc.
 383 * has_fixups: Set to true if this phy has fixups/quirks.
 384 * suspended: Set to true if this phy has been suspended successfully.
 385 * sysfs_links: Internal boolean tracking sysfs symbolic links setup/removal.
 386 * loopback_enabled: Set true if this phy has been loopbacked successfully.
 387 * state: state of the PHY for management purposes
 388 * dev_flags: Device-specific flags used by the PHY driver.
 389 * link_timeout: The number of timer firings to wait before the
 390 * giving up on the current attempt at acquiring a link
 391 * irq: IRQ number of the PHY's interrupt (-1 if none)
 392 * phy_timer: The timer for handling the state machine
 393 * phy_queue: A work_queue for the phy_mac_interrupt
 394 * attached_dev: The attached enet driver's device instance ptr
 395 * adjust_link: Callback for the enet controller to respond to
 396 * changes in the link state.
 397 *
 398 * speed, duplex, pause, supported, advertising, lp_advertising,
 399 * and autoneg are used like in mii_if_info
 400 *
 401 * interrupts currently only supports enabled or disabled,
 402 * but could be changed in the future to support enabling
 403 * and disabling specific interrupts
 404 *
 405 * Contains some infrastructure for polling and interrupt
 406 * handling, as well as handling shifts in PHY hardware state
 407 */
 408struct phy_device {
 409        struct mdio_device mdio;
 410
 411        /* Information about the PHY type */
 412        /* And management functions */
 413        struct phy_driver *drv;
 414
 415        u32 phy_id;
 416
 417        struct phy_c45_device_ids c45_ids;
 418        unsigned is_c45:1;
 419        unsigned is_internal:1;
 420        unsigned is_pseudo_fixed_link:1;
 421        unsigned has_fixups:1;
 422        unsigned suspended:1;
 423        unsigned sysfs_links:1;
 424        unsigned loopback_enabled:1;
 425
 426        unsigned autoneg:1;
 427        /* The most recently read link state */
 428        unsigned link:1;
 429
 430        enum phy_state state;
 431
 432        u32 dev_flags;
 433
 434        phy_interface_t interface;
 435
 436        /*
 437         * forced speed & duplex (no autoneg)
 438         * partner speed & duplex & pause (autoneg)
 439         */
 440        int speed;
 441        int duplex;
 442        int pause;
 443        int asym_pause;
 444
 445        /* Enabled Interrupts */
 446        u32 interrupts;
 447
 448        /* Union of PHY and Attached devices' supported modes */
 449        /* See mii.h for more info */
 450        u32 supported;
 451        u32 advertising;
 452        u32 lp_advertising;
 453
 454        /* Energy efficient ethernet modes which should be prohibited */
 455        u32 eee_broken_modes;
 456
 457        int link_timeout;
 458
 459#ifdef CONFIG_LED_TRIGGER_PHY
 460        struct phy_led_trigger *phy_led_triggers;
 461        unsigned int phy_num_led_triggers;
 462        struct phy_led_trigger *last_triggered;
 463
 464        struct phy_led_trigger *led_link_trigger;
 465#endif
 466
 467        /*
 468         * Interrupt number for this PHY
 469         * -1 means no interrupt
 470         */
 471        int irq;
 472
 473        /* private data pointer */
 474        /* For use by PHYs to maintain extra state */
 475        void *priv;
 476
 477        /* Interrupt and Polling infrastructure */
 478        struct work_struct phy_queue;
 479        struct delayed_work state_queue;
 480
 481        struct mutex lock;
 482
 483        struct phylink *phylink;
 484        struct net_device *attached_dev;
 485
 486        u8 mdix;
 487        u8 mdix_ctrl;
 488
 489        void (*phy_link_change)(struct phy_device *, bool up, bool do_carrier);
 490        void (*adjust_link)(struct net_device *dev);
 491};
 492#define to_phy_device(d) container_of(to_mdio_device(d), \
 493                                      struct phy_device, mdio)
 494
 495/* struct phy_driver: Driver structure for a particular PHY type
 496 *
 497 * driver_data: static driver data
 498 * phy_id: The result of reading the UID registers of this PHY
 499 *   type, and ANDing them with the phy_id_mask.  This driver
 500 *   only works for PHYs with IDs which match this field
 501 * name: The friendly name of this PHY type
 502 * phy_id_mask: Defines the important bits of the phy_id
 503 * features: A list of features (speed, duplex, etc) supported
 504 *   by this PHY
 505 * flags: A bitfield defining certain other features this PHY
 506 *   supports (like interrupts)
 507 *
 508 * All functions are optional. If config_aneg or read_status
 509 * are not implemented, the phy core uses the genphy versions.
 510 * Note that none of these functions should be called from
 511 * interrupt time. The goal is for the bus read/write functions
 512 * to be able to block when the bus transaction is happening,
 513 * and be freed up by an interrupt (The MPC85xx has this ability,
 514 * though it is not currently supported in the driver).
 515 */
 516struct phy_driver {
 517        struct mdio_driver_common mdiodrv;
 518        u32 phy_id;
 519        char *name;
 520        u32 phy_id_mask;
 521        const unsigned long * const features;
 522        u32 flags;
 523        const void *driver_data;
 524
 525        /*
 526         * Called to issue a PHY software reset
 527         */
 528        int (*soft_reset)(struct phy_device *phydev);
 529
 530        /*
 531         * Called to initialize the PHY,
 532         * including after a reset
 533         */
 534        int (*config_init)(struct phy_device *phydev);
 535
 536        /*
 537         * Called during discovery.  Used to set
 538         * up device-specific structures, if any
 539         */
 540        int (*probe)(struct phy_device *phydev);
 541
 542        /* PHY Power Management */
 543        int (*suspend)(struct phy_device *phydev);
 544        int (*resume)(struct phy_device *phydev);
 545
 546        /*
 547         * Configures the advertisement and resets
 548         * autonegotiation if phydev->autoneg is on,
 549         * forces the speed to the current settings in phydev
 550         * if phydev->autoneg is off
 551         */
 552        int (*config_aneg)(struct phy_device *phydev);
 553
 554        /* Determines the auto negotiation result */
 555        int (*aneg_done)(struct phy_device *phydev);
 556
 557        /* Determines the negotiated speed and duplex */
 558        int (*read_status)(struct phy_device *phydev);
 559
 560        /* Clears any pending interrupts */
 561        int (*ack_interrupt)(struct phy_device *phydev);
 562
 563        /* Enables or disables interrupts */
 564        int (*config_intr)(struct phy_device *phydev);
 565
 566        /*
 567         * Checks if the PHY generated an interrupt.
 568         * For multi-PHY devices with shared PHY interrupt pin
 569         */
 570        int (*did_interrupt)(struct phy_device *phydev);
 571
 572        /* Clears up any memory if needed */
 573        void (*remove)(struct phy_device *phydev);
 574
 575        /* Returns true if this is a suitable driver for the given
 576         * phydev.  If NULL, matching is based on phy_id and
 577         * phy_id_mask.
 578         */
 579        int (*match_phy_device)(struct phy_device *phydev);
 580
 581        /* Handles ethtool queries for hardware time stamping. */
 582        int (*ts_info)(struct phy_device *phydev, struct ethtool_ts_info *ti);
 583
 584        /* Handles SIOCSHWTSTAMP ioctl for hardware time stamping. */
 585        int  (*hwtstamp)(struct phy_device *phydev, struct ifreq *ifr);
 586
 587        /*
 588         * Requests a Rx timestamp for 'skb'. If the skb is accepted,
 589         * the phy driver promises to deliver it using netif_rx() as
 590         * soon as a timestamp becomes available. One of the
 591         * PTP_CLASS_ values is passed in 'type'. The function must
 592         * return true if the skb is accepted for delivery.
 593         */
 594        bool (*rxtstamp)(struct phy_device *dev, struct sk_buff *skb, int type);
 595
 596        /*
 597         * Requests a Tx timestamp for 'skb'. The phy driver promises
 598         * to deliver it using skb_complete_tx_timestamp() as soon as a
 599         * timestamp becomes available. One of the PTP_CLASS_ values
 600         * is passed in 'type'.
 601         */
 602        void (*txtstamp)(struct phy_device *dev, struct sk_buff *skb, int type);
 603
 604        /* Some devices (e.g. qnap TS-119P II) require PHY register changes to
 605         * enable Wake on LAN, so set_wol is provided to be called in the
 606         * ethernet driver's set_wol function. */
 607        int (*set_wol)(struct phy_device *dev, struct ethtool_wolinfo *wol);
 608
 609        /* See set_wol, but for checking whether Wake on LAN is enabled. */
 610        void (*get_wol)(struct phy_device *dev, struct ethtool_wolinfo *wol);
 611
 612        /*
 613         * Called to inform a PHY device driver when the core is about to
 614         * change the link state. This callback is supposed to be used as
 615         * fixup hook for drivers that need to take action when the link
 616         * state changes. Drivers are by no means allowed to mess with the
 617         * PHY device structure in their implementations.
 618         */
 619        void (*link_change_notify)(struct phy_device *dev);
 620
 621        /*
 622         * Phy specific driver override for reading a MMD register.
 623         * This function is optional for PHY specific drivers.  When
 624         * not provided, the default MMD read function will be used
 625         * by phy_read_mmd(), which will use either a direct read for
 626         * Clause 45 PHYs or an indirect read for Clause 22 PHYs.
 627         *  devnum is the MMD device number within the PHY device,
 628         *  regnum is the register within the selected MMD device.
 629         */
 630        int (*read_mmd)(struct phy_device *dev, int devnum, u16 regnum);
 631
 632        /*
 633         * Phy specific driver override for writing a MMD register.
 634         * This function is optional for PHY specific drivers.  When
 635         * not provided, the default MMD write function will be used
 636         * by phy_write_mmd(), which will use either a direct write for
 637         * Clause 45 PHYs, or an indirect write for Clause 22 PHYs.
 638         *  devnum is the MMD device number within the PHY device,
 639         *  regnum is the register within the selected MMD device.
 640         *  val is the value to be written.
 641         */
 642        int (*write_mmd)(struct phy_device *dev, int devnum, u16 regnum,
 643                         u16 val);
 644
 645        int (*read_page)(struct phy_device *dev);
 646        int (*write_page)(struct phy_device *dev, int page);
 647
 648        /* Get the size and type of the eeprom contained within a plug-in
 649         * module */
 650        int (*module_info)(struct phy_device *dev,
 651                           struct ethtool_modinfo *modinfo);
 652
 653        /* Get the eeprom information from the plug-in module */
 654        int (*module_eeprom)(struct phy_device *dev,
 655                             struct ethtool_eeprom *ee, u8 *data);
 656
 657        /* Get statistics from the phy using ethtool */
 658        int (*get_sset_count)(struct phy_device *dev);
 659        void (*get_strings)(struct phy_device *dev, u8 *data);
 660        void (*get_stats)(struct phy_device *dev,
 661                          struct ethtool_stats *stats, u64 *data);
 662
 663        /* Get and Set PHY tunables */
 664        int (*get_tunable)(struct phy_device *dev,
 665                           struct ethtool_tunable *tuna, void *data);
 666        int (*set_tunable)(struct phy_device *dev,
 667                            struct ethtool_tunable *tuna,
 668                            const void *data);
 669        int (*set_loopback)(struct phy_device *dev, bool enable);
 670};
 671#define to_phy_driver(d) container_of(to_mdio_common_driver(d),         \
 672                                      struct phy_driver, mdiodrv)
 673
 674#define PHY_ANY_ID "MATCH ANY PHY"
 675#define PHY_ANY_UID 0xffffffff
 676
 677/* A Structure for boards to register fixups with the PHY Lib */
 678struct phy_fixup {
 679        struct list_head list;
 680        char bus_id[MII_BUS_ID_SIZE + 3];
 681        u32 phy_uid;
 682        u32 phy_uid_mask;
 683        int (*run)(struct phy_device *phydev);
 684};
 685
 686const char *phy_speed_to_str(int speed);
 687const char *phy_duplex_to_str(unsigned int duplex);
 688
 689/* A structure for mapping a particular speed and duplex
 690 * combination to a particular SUPPORTED and ADVERTISED value
 691 */
 692struct phy_setting {
 693        u32 speed;
 694        u8 duplex;
 695        u8 bit;
 696};
 697
 698const struct phy_setting *
 699phy_lookup_setting(int speed, int duplex, const unsigned long *mask,
 700                   size_t maxbit, bool exact);
 701size_t phy_speeds(unsigned int *speeds, size_t size,
 702                  unsigned long *mask, size_t maxbit);
 703
 704void phy_resolve_aneg_linkmode(struct phy_device *phydev);
 705
 706/**
 707 * phy_read_mmd - Convenience function for reading a register
 708 * from an MMD on a given PHY.
 709 * @phydev: The phy_device struct
 710 * @devad: The MMD to read from
 711 * @regnum: The register on the MMD to read
 712 *
 713 * Same rules as for phy_read();
 714 */
 715int phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum);
 716
 717/**
 718 * phy_read - Convenience function for reading a given PHY register
 719 * @phydev: the phy_device struct
 720 * @regnum: register number to read
 721 *
 722 * NOTE: MUST NOT be called from interrupt context,
 723 * because the bus read/write functions may wait for an interrupt
 724 * to conclude the operation.
 725 */
 726static inline int phy_read(struct phy_device *phydev, u32 regnum)
 727{
 728        return mdiobus_read(phydev->mdio.bus, phydev->mdio.addr, regnum);
 729}
 730
 731/**
 732 * __phy_read - convenience function for reading a given PHY register
 733 * @phydev: the phy_device struct
 734 * @regnum: register number to read
 735 *
 736 * The caller must have taken the MDIO bus lock.
 737 */
 738static inline int __phy_read(struct phy_device *phydev, u32 regnum)
 739{
 740        return __mdiobus_read(phydev->mdio.bus, phydev->mdio.addr, regnum);
 741}
 742
 743/**
 744 * phy_write - Convenience function for writing a given PHY register
 745 * @phydev: the phy_device struct
 746 * @regnum: register number to write
 747 * @val: value to write to @regnum
 748 *
 749 * NOTE: MUST NOT be called from interrupt context,
 750 * because the bus read/write functions may wait for an interrupt
 751 * to conclude the operation.
 752 */
 753static inline int phy_write(struct phy_device *phydev, u32 regnum, u16 val)
 754{
 755        return mdiobus_write(phydev->mdio.bus, phydev->mdio.addr, regnum, val);
 756}
 757
 758/**
 759 * __phy_write - Convenience function for writing a given PHY register
 760 * @phydev: the phy_device struct
 761 * @regnum: register number to write
 762 * @val: value to write to @regnum
 763 *
 764 * The caller must have taken the MDIO bus lock.
 765 */
 766static inline int __phy_write(struct phy_device *phydev, u32 regnum, u16 val)
 767{
 768        return __mdiobus_write(phydev->mdio.bus, phydev->mdio.addr, regnum,
 769                               val);
 770}
 771
 772int __phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set);
 773int phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set);
 774
 775/**
 776 * __phy_set_bits - Convenience function for setting bits in a PHY register
 777 * @phydev: the phy_device struct
 778 * @regnum: register number to write
 779 * @val: bits to set
 780 *
 781 * The caller must have taken the MDIO bus lock.
 782 */
 783static inline int __phy_set_bits(struct phy_device *phydev, u32 regnum, u16 val)
 784{
 785        return __phy_modify(phydev, regnum, 0, val);
 786}
 787
 788/**
 789 * __phy_clear_bits - Convenience function for clearing bits in a PHY register
 790 * @phydev: the phy_device struct
 791 * @regnum: register number to write
 792 * @val: bits to clear
 793 *
 794 * The caller must have taken the MDIO bus lock.
 795 */
 796static inline int __phy_clear_bits(struct phy_device *phydev, u32 regnum,
 797                                   u16 val)
 798{
 799        return __phy_modify(phydev, regnum, val, 0);
 800}
 801
 802/**
 803 * phy_set_bits - Convenience function for setting bits in a PHY register
 804 * @phydev: the phy_device struct
 805 * @regnum: register number to write
 806 * @val: bits to set
 807 */
 808static inline int phy_set_bits(struct phy_device *phydev, u32 regnum, u16 val)
 809{
 810        return phy_modify(phydev, regnum, 0, val);
 811}
 812
 813/**
 814 * phy_clear_bits - Convenience function for clearing bits in a PHY register
 815 * @phydev: the phy_device struct
 816 * @regnum: register number to write
 817 * @val: bits to clear
 818 */
 819static inline int phy_clear_bits(struct phy_device *phydev, u32 regnum, u16 val)
 820{
 821        return phy_modify(phydev, regnum, val, 0);
 822}
 823
 824/**
 825 * phy_interrupt_is_valid - Convenience function for testing a given PHY irq
 826 * @phydev: the phy_device struct
 827 *
 828 * NOTE: must be kept in sync with addition/removal of PHY_POLL and
 829 * PHY_IGNORE_INTERRUPT
 830 */
 831static inline bool phy_interrupt_is_valid(struct phy_device *phydev)
 832{
 833        return phydev->irq != PHY_POLL && phydev->irq != PHY_IGNORE_INTERRUPT;
 834}
 835
 836/**
 837 * phy_polling_mode - Convenience function for testing whether polling is
 838 * used to detect PHY status changes
 839 * @phydev: the phy_device struct
 840 */
 841static inline bool phy_polling_mode(struct phy_device *phydev)
 842{
 843        return phydev->irq == PHY_POLL;
 844}
 845
 846/**
 847 * phy_is_internal - Convenience function for testing if a PHY is internal
 848 * @phydev: the phy_device struct
 849 */
 850static inline bool phy_is_internal(struct phy_device *phydev)
 851{
 852        return phydev->is_internal;
 853}
 854
 855/**
 856 * phy_interface_mode_is_rgmii - Convenience function for testing if a
 857 * PHY interface mode is RGMII (all variants)
 858 * @mode: the phy_interface_t enum
 859 */
 860static inline bool phy_interface_mode_is_rgmii(phy_interface_t mode)
 861{
 862        return mode >= PHY_INTERFACE_MODE_RGMII &&
 863                mode <= PHY_INTERFACE_MODE_RGMII_TXID;
 864};
 865
 866/**
 867 * phy_interface_mode_is_8023z() - does the phy interface mode use 802.3z
 868 *   negotiation
 869 * @mode: one of &enum phy_interface_t
 870 *
 871 * Returns true if the phy interface mode uses the 16-bit negotiation
 872 * word as defined in 802.3z. (See 802.3-2015 37.2.1 Config_Reg encoding)
 873 */
 874static inline bool phy_interface_mode_is_8023z(phy_interface_t mode)
 875{
 876        return mode == PHY_INTERFACE_MODE_1000BASEX ||
 877               mode == PHY_INTERFACE_MODE_2500BASEX;
 878}
 879
 880/**
 881 * phy_interface_is_rgmii - Convenience function for testing if a PHY interface
 882 * is RGMII (all variants)
 883 * @phydev: the phy_device struct
 884 */
 885static inline bool phy_interface_is_rgmii(struct phy_device *phydev)
 886{
 887        return phy_interface_mode_is_rgmii(phydev->interface);
 888};
 889
 890/*
 891 * phy_is_pseudo_fixed_link - Convenience function for testing if this
 892 * PHY is the CPU port facing side of an Ethernet switch, or similar.
 893 * @phydev: the phy_device struct
 894 */
 895static inline bool phy_is_pseudo_fixed_link(struct phy_device *phydev)
 896{
 897        return phydev->is_pseudo_fixed_link;
 898}
 899
 900/**
 901 * phy_write_mmd - Convenience function for writing a register
 902 * on an MMD on a given PHY.
 903 * @phydev: The phy_device struct
 904 * @devad: The MMD to read from
 905 * @regnum: The register on the MMD to read
 906 * @val: value to write to @regnum
 907 *
 908 * Same rules as for phy_write();
 909 */
 910int phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val);
 911
 912int phy_save_page(struct phy_device *phydev);
 913int phy_select_page(struct phy_device *phydev, int page);
 914int phy_restore_page(struct phy_device *phydev, int oldpage, int ret);
 915int phy_read_paged(struct phy_device *phydev, int page, u32 regnum);
 916int phy_write_paged(struct phy_device *phydev, int page, u32 regnum, u16 val);
 917int phy_modify_paged(struct phy_device *phydev, int page, u32 regnum,
 918                     u16 mask, u16 set);
 919
 920struct phy_device *phy_device_create(struct mii_bus *bus, int addr, int phy_id,
 921                                     bool is_c45,
 922                                     struct phy_c45_device_ids *c45_ids);
 923#if IS_ENABLED(CONFIG_PHYLIB)
 924struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45);
 925int phy_device_register(struct phy_device *phy);
 926void phy_device_free(struct phy_device *phydev);
 927#else
 928static inline
 929struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45)
 930{
 931        return NULL;
 932}
 933
 934static inline int phy_device_register(struct phy_device *phy)
 935{
 936        return 0;
 937}
 938
 939static inline void phy_device_free(struct phy_device *phydev) { }
 940#endif /* CONFIG_PHYLIB */
 941void phy_device_remove(struct phy_device *phydev);
 942int phy_init_hw(struct phy_device *phydev);
 943int phy_suspend(struct phy_device *phydev);
 944int phy_resume(struct phy_device *phydev);
 945int __phy_resume(struct phy_device *phydev);
 946int phy_loopback(struct phy_device *phydev, bool enable);
 947struct phy_device *phy_attach(struct net_device *dev, const char *bus_id,
 948                              phy_interface_t interface);
 949struct phy_device *phy_find_first(struct mii_bus *bus);
 950int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
 951                      u32 flags, phy_interface_t interface);
 952int phy_connect_direct(struct net_device *dev, struct phy_device *phydev,
 953                       void (*handler)(struct net_device *),
 954                       phy_interface_t interface);
 955struct phy_device *phy_connect(struct net_device *dev, const char *bus_id,
 956                               void (*handler)(struct net_device *),
 957                               phy_interface_t interface);
 958void phy_disconnect(struct phy_device *phydev);
 959void phy_detach(struct phy_device *phydev);
 960void phy_start(struct phy_device *phydev);
 961void phy_stop(struct phy_device *phydev);
 962int phy_start_aneg(struct phy_device *phydev);
 963int phy_aneg_done(struct phy_device *phydev);
 964int phy_speed_down(struct phy_device *phydev, bool sync);
 965int phy_speed_up(struct phy_device *phydev);
 966
 967int phy_stop_interrupts(struct phy_device *phydev);
 968int phy_restart_aneg(struct phy_device *phydev);
 969int phy_reset_after_clk_enable(struct phy_device *phydev);
 970
 971static inline void phy_device_reset(struct phy_device *phydev, int value)
 972{
 973        mdio_device_reset(&phydev->mdio, value);
 974}
 975
 976#define phydev_err(_phydev, format, args...)    \
 977        dev_err(&_phydev->mdio.dev, format, ##args)
 978
 979#define phydev_info(_phydev, format, args...)   \
 980        dev_info(&_phydev->mdio.dev, format, ##args)
 981
 982#define phydev_warn(_phydev, format, args...)   \
 983        dev_warn(&_phydev->mdio.dev, format, ##args)
 984
 985#define phydev_dbg(_phydev, format, args...)    \
 986        dev_dbg(&_phydev->mdio.dev, format, ##args)
 987
 988static inline const char *phydev_name(const struct phy_device *phydev)
 989{
 990        return dev_name(&phydev->mdio.dev);
 991}
 992
 993void phy_attached_print(struct phy_device *phydev, const char *fmt, ...)
 994        __printf(2, 3);
 995void phy_attached_info(struct phy_device *phydev);
 996
 997/* Clause 22 PHY */
 998int genphy_config_init(struct phy_device *phydev);
 999int genphy_setup_forced(struct phy_device *phydev);
1000int genphy_restart_aneg(struct phy_device *phydev);
1001int genphy_config_aneg(struct phy_device *phydev);
1002int genphy_aneg_done(struct phy_device *phydev);
1003int genphy_update_link(struct phy_device *phydev);
1004int genphy_read_status(struct phy_device *phydev);
1005int genphy_suspend(struct phy_device *phydev);
1006int genphy_resume(struct phy_device *phydev);
1007int genphy_loopback(struct phy_device *phydev, bool enable);
1008int genphy_soft_reset(struct phy_device *phydev);
1009static inline int genphy_no_soft_reset(struct phy_device *phydev)
1010{
1011        return 0;
1012}
1013int genphy_read_mmd_unsupported(struct phy_device *phdev, int devad,
1014                                u16 regnum);
1015int genphy_write_mmd_unsupported(struct phy_device *phdev, int devnum,
1016                                 u16 regnum, u16 val);
1017
1018/* Clause 45 PHY */
1019int genphy_c45_restart_aneg(struct phy_device *phydev);
1020int genphy_c45_aneg_done(struct phy_device *phydev);
1021int genphy_c45_read_link(struct phy_device *phydev, u32 mmd_mask);
1022int genphy_c45_read_lpa(struct phy_device *phydev);
1023int genphy_c45_read_pma(struct phy_device *phydev);
1024int genphy_c45_pma_setup_forced(struct phy_device *phydev);
1025int genphy_c45_an_disable_aneg(struct phy_device *phydev);
1026int genphy_c45_read_mdix(struct phy_device *phydev);
1027
1028/* The gen10g_* functions are the old Clause 45 stub */
1029int gen10g_config_aneg(struct phy_device *phydev);
1030int gen10g_read_status(struct phy_device *phydev);
1031int gen10g_no_soft_reset(struct phy_device *phydev);
1032int gen10g_config_init(struct phy_device *phydev);
1033int gen10g_suspend(struct phy_device *phydev);
1034int gen10g_resume(struct phy_device *phydev);
1035
1036static inline int phy_read_status(struct phy_device *phydev)
1037{
1038        if (!phydev->drv)
1039                return -EIO;
1040
1041        if (phydev->drv->read_status)
1042                return phydev->drv->read_status(phydev);
1043        else
1044                return genphy_read_status(phydev);
1045}
1046
1047void phy_driver_unregister(struct phy_driver *drv);
1048void phy_drivers_unregister(struct phy_driver *drv, int n);
1049int phy_driver_register(struct phy_driver *new_driver, struct module *owner);
1050int phy_drivers_register(struct phy_driver *new_driver, int n,
1051                         struct module *owner);
1052void phy_state_machine(struct work_struct *work);
1053void phy_change_work(struct work_struct *work);
1054void phy_mac_interrupt(struct phy_device *phydev);
1055void phy_start_machine(struct phy_device *phydev);
1056void phy_stop_machine(struct phy_device *phydev);
1057void phy_trigger_machine(struct phy_device *phydev);
1058int phy_ethtool_sset(struct phy_device *phydev, struct ethtool_cmd *cmd);
1059void phy_ethtool_ksettings_get(struct phy_device *phydev,
1060                               struct ethtool_link_ksettings *cmd);
1061int phy_ethtool_ksettings_set(struct phy_device *phydev,
1062                              const struct ethtool_link_ksettings *cmd);
1063int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd);
1064int phy_start_interrupts(struct phy_device *phydev);
1065void phy_print_status(struct phy_device *phydev);
1066int phy_set_max_speed(struct phy_device *phydev, u32 max_speed);
1067void phy_remove_link_mode(struct phy_device *phydev, u32 link_mode);
1068void phy_support_sym_pause(struct phy_device *phydev);
1069void phy_support_asym_pause(struct phy_device *phydev);
1070void phy_set_sym_pause(struct phy_device *phydev, bool rx, bool tx,
1071                       bool autoneg);
1072void phy_set_asym_pause(struct phy_device *phydev, bool rx, bool tx);
1073bool phy_validate_pause(struct phy_device *phydev,
1074                        struct ethtool_pauseparam *pp);
1075
1076int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask,
1077                       int (*run)(struct phy_device *));
1078int phy_register_fixup_for_id(const char *bus_id,
1079                              int (*run)(struct phy_device *));
1080int phy_register_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask,
1081                               int (*run)(struct phy_device *));
1082
1083int phy_unregister_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask);
1084int phy_unregister_fixup_for_id(const char *bus_id);
1085int phy_unregister_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask);
1086
1087int phy_init_eee(struct phy_device *phydev, bool clk_stop_enable);
1088int phy_get_eee_err(struct phy_device *phydev);
1089int phy_ethtool_set_eee(struct phy_device *phydev, struct ethtool_eee *data);
1090int phy_ethtool_get_eee(struct phy_device *phydev, struct ethtool_eee *data);
1091int phy_ethtool_set_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol);
1092void phy_ethtool_get_wol(struct phy_device *phydev,
1093                         struct ethtool_wolinfo *wol);
1094int phy_ethtool_get_link_ksettings(struct net_device *ndev,
1095                                   struct ethtool_link_ksettings *cmd);
1096int phy_ethtool_set_link_ksettings(struct net_device *ndev,
1097                                   const struct ethtool_link_ksettings *cmd);
1098int phy_ethtool_nway_reset(struct net_device *ndev);
1099
1100#if IS_ENABLED(CONFIG_PHYLIB)
1101int __init mdio_bus_init(void);
1102void mdio_bus_exit(void);
1103#endif
1104
1105/* Inline function for use within net/core/ethtool.c (built-in) */
1106static inline int phy_ethtool_get_strings(struct phy_device *phydev, u8 *data)
1107{
1108        if (!phydev->drv)
1109                return -EIO;
1110
1111        mutex_lock(&phydev->lock);
1112        phydev->drv->get_strings(phydev, data);
1113        mutex_unlock(&phydev->lock);
1114
1115        return 0;
1116}
1117
1118static inline int phy_ethtool_get_sset_count(struct phy_device *phydev)
1119{
1120        int ret;
1121
1122        if (!phydev->drv)
1123                return -EIO;
1124
1125        if (phydev->drv->get_sset_count &&
1126            phydev->drv->get_strings &&
1127            phydev->drv->get_stats) {
1128                mutex_lock(&phydev->lock);
1129                ret = phydev->drv->get_sset_count(phydev);
1130                mutex_unlock(&phydev->lock);
1131
1132                return ret;
1133        }
1134
1135        return -EOPNOTSUPP;
1136}
1137
1138static inline int phy_ethtool_get_stats(struct phy_device *phydev,
1139                                        struct ethtool_stats *stats, u64 *data)
1140{
1141        if (!phydev->drv)
1142                return -EIO;
1143
1144        mutex_lock(&phydev->lock);
1145        phydev->drv->get_stats(phydev, stats, data);
1146        mutex_unlock(&phydev->lock);
1147
1148        return 0;
1149}
1150
1151extern struct bus_type mdio_bus_type;
1152
1153struct mdio_board_info {
1154        const char      *bus_id;
1155        char            modalias[MDIO_NAME_SIZE];
1156        int             mdio_addr;
1157        const void      *platform_data;
1158};
1159
1160#if IS_ENABLED(CONFIG_MDIO_DEVICE)
1161int mdiobus_register_board_info(const struct mdio_board_info *info,
1162                                unsigned int n);
1163#else
1164static inline int mdiobus_register_board_info(const struct mdio_board_info *i,
1165                                              unsigned int n)
1166{
1167        return 0;
1168}
1169#endif
1170
1171
1172/**
1173 * module_phy_driver() - Helper macro for registering PHY drivers
1174 * @__phy_drivers: array of PHY drivers to register
1175 *
1176 * Helper macro for PHY drivers which do not do anything special in module
1177 * init/exit. Each module may only use this macro once, and calling it
1178 * replaces module_init() and module_exit().
1179 */
1180#define phy_module_driver(__phy_drivers, __count)                       \
1181static int __init phy_module_init(void)                                 \
1182{                                                                       \
1183        return phy_drivers_register(__phy_drivers, __count, THIS_MODULE); \
1184}                                                                       \
1185module_init(phy_module_init);                                           \
1186static void __exit phy_module_exit(void)                                \
1187{                                                                       \
1188        phy_drivers_unregister(__phy_drivers, __count);                 \
1189}                                                                       \
1190module_exit(phy_module_exit)
1191
1192#define module_phy_driver(__phy_drivers)                                \
1193        phy_module_driver(__phy_drivers, ARRAY_SIZE(__phy_drivers))
1194
1195#endif /* __PHY_H */
1196