phy.h 40.1 KB
Newer Older
1
/* SPDX-License-Identifier: GPL-2.0-or-later */
2 3
/*
 * Framework and drivers for configuring and reading different PHYs
4
 * Based on code in sungem_phy.c and (long-removed) gianfar_phy.c
5 6 7 8 9 10 11 12 13
 *
 * Author: Andy Fleming
 *
 * Copyright (c) 2004 Freescale Semiconductor, Inc.
 */

#ifndef __PHY_H
#define __PHY_H

14
#include <linux/compiler.h>
15
#include <linux/spinlock.h>
16
#include <linux/ethtool.h>
17
#include <linux/linkmode.h>
18
#include <linux/mdio.h>
19
#include <linux/mii.h>
R
Russell King 已提交
20
#include <linux/module.h>
21 22
#include <linux/timer.h>
#include <linux/workqueue.h>
23
#include <linux/mod_devicetable.h>
24

A
Arun Sharma 已提交
25
#include <linux/atomic.h>
26

27
#define PHY_DEFAULT_FEATURES	(SUPPORTED_Autoneg | \
28 29 30
				 SUPPORTED_TP | \
				 SUPPORTED_MII)

31 32 33 34 35 36 37
#define PHY_10BT_FEATURES	(SUPPORTED_10baseT_Half | \
				 SUPPORTED_10baseT_Full)

#define PHY_100BT_FEATURES	(SUPPORTED_100baseT_Half | \
				 SUPPORTED_100baseT_Full)

#define PHY_1000BT_FEATURES	(SUPPORTED_1000baseT_Half | \
38 39
				 SUPPORTED_1000baseT_Full)

40 41 42 43 44 45
extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_basic_features) __ro_after_init;
extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_basic_t1_features) __ro_after_init;
extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_gbit_features) __ro_after_init;
extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_gbit_fibre_features) __ro_after_init;
extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_gbit_all_ports_features) __ro_after_init;
extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_features) __ro_after_init;
46
extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_fec_features) __ro_after_init;
47 48 49 50 51 52 53 54
extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_full_features) __ro_after_init;

#define PHY_BASIC_FEATURES ((unsigned long *)&phy_basic_features)
#define PHY_BASIC_T1_FEATURES ((unsigned long *)&phy_basic_t1_features)
#define PHY_GBIT_FEATURES ((unsigned long *)&phy_gbit_features)
#define PHY_GBIT_FIBRE_FEATURES ((unsigned long *)&phy_gbit_fibre_features)
#define PHY_GBIT_ALL_PORTS_FEATURES ((unsigned long *)&phy_gbit_all_ports_features)
#define PHY_10GBIT_FEATURES ((unsigned long *)&phy_10gbit_features)
55
#define PHY_10GBIT_FEC_FEATURES ((unsigned long *)&phy_10gbit_fec_features)
56
#define PHY_10GBIT_FULL_FEATURES ((unsigned long *)&phy_10gbit_full_features)
57

58 59 60
extern const int phy_basic_ports_array[3];
extern const int phy_fibre_port_array[1];
extern const int phy_all_ports_features_array[7];
61 62 63 64 65
extern const int phy_10_100_features_array[4];
extern const int phy_basic_t1_features_array[2];
extern const int phy_gbit_features_array[2];
extern const int phy_10gbit_features_array[1];

A
Andy Fleming 已提交
66 67
/*
 * Set phydev->irq to PHY_POLL if interrupts are not supported,
68 69 70 71 72 73
 * or not desired for this PHY.  Set to PHY_IGNORE_INTERRUPT if
 * the attached driver handles the interrupt
 */
#define PHY_POLL		-1
#define PHY_IGNORE_INTERRUPT	-2

74 75
#define PHY_IS_INTERNAL		0x00000001
#define PHY_RST_AFTER_CLK_EN	0x00000002
76
#define MDIO_DEVICE_IS_PHY	0x80000000
77

78 79
/* Interface Mode definitions */
typedef enum {
80
	PHY_INTERFACE_MODE_NA,
81
	PHY_INTERFACE_MODE_INTERNAL,
82 83 84 85
	PHY_INTERFACE_MODE_MII,
	PHY_INTERFACE_MODE_GMII,
	PHY_INTERFACE_MODE_SGMII,
	PHY_INTERFACE_MODE_TBI,
86
	PHY_INTERFACE_MODE_REVMII,
87 88
	PHY_INTERFACE_MODE_RMII,
	PHY_INTERFACE_MODE_RGMII,
89
	PHY_INTERFACE_MODE_RGMII_ID,
90 91
	PHY_INTERFACE_MODE_RGMII_RXID,
	PHY_INTERFACE_MODE_RGMII_TXID,
92 93
	PHY_INTERFACE_MODE_RTBI,
	PHY_INTERFACE_MODE_SMII,
94
	PHY_INTERFACE_MODE_XGMII,
F
Florian Fainelli 已提交
95
	PHY_INTERFACE_MODE_MOCA,
96
	PHY_INTERFACE_MODE_QSGMII,
97
	PHY_INTERFACE_MODE_TRGMII,
98 99 100
	PHY_INTERFACE_MODE_1000BASEX,
	PHY_INTERFACE_MODE_2500BASEX,
	PHY_INTERFACE_MODE_RXAUI,
101 102 103
	PHY_INTERFACE_MODE_XAUI,
	/* 10GBASE-KR, XFI, SFI - single lane 10G Serdes */
	PHY_INTERFACE_MODE_10GKR,
104
	PHY_INTERFACE_MODE_USXGMII,
105
	PHY_INTERFACE_MODE_MAX,
106 107
} phy_interface_t;

108 109 110 111 112 113
/**
 * phy_supported_speeds - return all speeds currently supported by a phy device
 * @phy: The phy device to return supported speeds of.
 * @speeds: buffer to store supported speeds in.
 * @size: size of speeds buffer.
 *
114 115 116
 * Description: Returns the number of supported speeds, and fills
 * the speeds buffer with the supported speeds. If speeds buffer is
 * too small to contain all currently supported speeds, will return as
117 118 119 120 121 122
 * many speeds as can fit.
 */
unsigned int phy_supported_speeds(struct phy_device *phy,
				      unsigned int *speeds,
				      unsigned int size);

123
/**
124 125 126 127
 * phy_modes - map phy_interface_t enum to device tree binding of phy-mode
 * @interface: enum phy_interface_t value
 *
 * Description: maps 'enum phy_interface_t' defined in this file
128 129 130 131 132 133 134 135
 * into the device tree binding of 'phy-mode', so that Ethernet
 * device driver can get phy interface from device tree.
 */
static inline const char *phy_modes(phy_interface_t interface)
{
	switch (interface) {
	case PHY_INTERFACE_MODE_NA:
		return "";
136 137
	case PHY_INTERFACE_MODE_INTERNAL:
		return "internal";
138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
	case PHY_INTERFACE_MODE_MII:
		return "mii";
	case PHY_INTERFACE_MODE_GMII:
		return "gmii";
	case PHY_INTERFACE_MODE_SGMII:
		return "sgmii";
	case PHY_INTERFACE_MODE_TBI:
		return "tbi";
	case PHY_INTERFACE_MODE_REVMII:
		return "rev-mii";
	case PHY_INTERFACE_MODE_RMII:
		return "rmii";
	case PHY_INTERFACE_MODE_RGMII:
		return "rgmii";
	case PHY_INTERFACE_MODE_RGMII_ID:
		return "rgmii-id";
	case PHY_INTERFACE_MODE_RGMII_RXID:
		return "rgmii-rxid";
	case PHY_INTERFACE_MODE_RGMII_TXID:
		return "rgmii-txid";
	case PHY_INTERFACE_MODE_RTBI:
		return "rtbi";
	case PHY_INTERFACE_MODE_SMII:
		return "smii";
	case PHY_INTERFACE_MODE_XGMII:
		return "xgmii";
F
Florian Fainelli 已提交
164 165
	case PHY_INTERFACE_MODE_MOCA:
		return "moca";
166 167
	case PHY_INTERFACE_MODE_QSGMII:
		return "qsgmii";
168 169
	case PHY_INTERFACE_MODE_TRGMII:
		return "trgmii";
170 171 172 173 174 175
	case PHY_INTERFACE_MODE_1000BASEX:
		return "1000base-x";
	case PHY_INTERFACE_MODE_2500BASEX:
		return "2500base-x";
	case PHY_INTERFACE_MODE_RXAUI:
		return "rxaui";
176 177 178 179
	case PHY_INTERFACE_MODE_XAUI:
		return "xaui";
	case PHY_INTERFACE_MODE_10GKR:
		return "10gbase-kr";
180 181
	case PHY_INTERFACE_MODE_USXGMII:
		return "usxgmii";
182 183 184 185 186
	default:
		return "unknown";
	}
}

187

188
#define PHY_INIT_TIMEOUT	100000
189 190
#define PHY_FORCE_TIMEOUT	10

191
#define PHY_MAX_ADDR	32
192

193
/* Used when trying to connect to a specific phy (mii bus id:phy device id) */
194 195
#define PHY_ID_FMT "%s:%02x"

196
#define MII_BUS_ID_SIZE	61
197

198 199 200
/* Or MII_ADDR_C45 into regnum for read/write on mii_bus to enable the 21 bit
   IEEE 802.3ae clause 45 addressing mode used by 10GIGE phy chips. */
#define MII_ADDR_C45 (1<<30)
201 202
#define MII_DEVADDR_C45_SHIFT	16
#define MII_REGADDR_C45_MASK	GENMASK(15, 0)
203

204
struct device;
205
struct phylink;
206 207
struct sk_buff;

A
Andy Fleming 已提交
208 209 210 211
/*
 * The Bus class for PHYs.  Devices which provide access to
 * PHYs should register using this structure
 */
212
struct mii_bus {
R
Russell King 已提交
213
	struct module *owner;
214
	const char *name;
215
	char id[MII_BUS_ID_SIZE];
216
	void *priv;
217 218
	int (*read)(struct mii_bus *bus, int addr, int regnum);
	int (*write)(struct mii_bus *bus, int addr, int regnum, u16 val);
219 220
	int (*reset)(struct mii_bus *bus);

A
Andy Fleming 已提交
221 222 223 224
	/*
	 * A lock to ensure that only one thing can read/write
	 * the MDIO bus at a time
	 */
225
	struct mutex mdio_lock;
226

227
	struct device *parent;
228 229 230 231 232 233 234
	enum {
		MDIOBUS_ALLOCATED = 1,
		MDIOBUS_REGISTERED,
		MDIOBUS_UNREGISTERED,
		MDIOBUS_RELEASED,
	} state;
	struct device dev;
235 236

	/* list of all PHYs on bus */
237
	struct mdio_device *mdio_map[PHY_MAX_ADDR];
238

239
	/* PHY addresses to be ignored when probing */
240 241
	u32 phy_mask;

242 243 244
	/* PHY addresses to ignore the TA/read failure */
	u32 phy_ignore_ta_mask;

A
Andy Fleming 已提交
245
	/*
246 247
	 * An array of interrupts, each PHY's interrupt at the index
	 * matching its address
A
Andy Fleming 已提交
248
	 */
249
	int irq[PHY_MAX_ADDR];
250 251 252

	/* GPIO reset pulse width in microseconds */
	int reset_delay_us;
253 254
	/* RESET GPIO descriptor pointer */
	struct gpio_desc *reset_gpiod;
255
};
256
#define to_mii_bus(d) container_of(d, struct mii_bus, dev)
257

258 259 260 261 262 263
struct mii_bus *mdiobus_alloc_size(size_t);
static inline struct mii_bus *mdiobus_alloc(void)
{
	return mdiobus_alloc_size(0);
}

R
Russell King 已提交
264 265
int __mdiobus_register(struct mii_bus *bus, struct module *owner);
#define mdiobus_register(bus) __mdiobus_register(bus, THIS_MODULE)
266 267
void mdiobus_unregister(struct mii_bus *bus);
void mdiobus_free(struct mii_bus *bus);
268 269 270 271 272 273 274
struct mii_bus *devm_mdiobus_alloc_size(struct device *dev, int sizeof_priv);
static inline struct mii_bus *devm_mdiobus_alloc(struct device *dev)
{
	return devm_mdiobus_alloc_size(dev, 0);
}

void devm_mdiobus_free(struct device *dev, struct mii_bus *bus);
275 276
struct phy_device *mdiobus_scan(struct mii_bus *bus, int addr);

277 278
#define PHY_INTERRUPT_DISABLED	false
#define PHY_INTERRUPT_ENABLED	true
279 280 281 282 283 284

/* PHY state machine states:
 *
 * DOWN: PHY device and driver are not ready for anything.  probe
 * should be called if and only if the PHY is in this state,
 * given that the PHY device exists.
285
 * - PHY driver probe function will set the state to READY
286 287 288
 *
 * READY: PHY is ready to send and receive packets, but the
 * controller is not.  By default, PHYs which do not implement
289
 * probe will be set to this state by phy_probe().
290 291 292 293
 * - start will set the state to UP
 *
 * UP: The PHY and attached device are ready to do work.
 * Interrupts should be started here.
H
Heiner Kallweit 已提交
294
 * - timer moves to NOLINK or RUNNING
295 296
 *
 * NOLINK: PHY is up, but not currently plugged in.
297
 * - irq or timer will set RUNNING if link comes back
298 299 300 301
 * - phy_stop moves to HALTED
 *
 * RUNNING: PHY is currently up, running, and possibly sending
 * and/or receiving packets
302
 * - irq or timer will set NOLINK if link goes down
303 304 305 306
 * - phy_stop moves to HALTED
 *
 * HALTED: PHY is up, but no polling or interrupts are done. Or
 * PHY is in an error state.
307
 * - phy_start moves to UP
308 309
 */
enum phy_state {
310
	PHY_DOWN = 0,
311
	PHY_READY,
312
	PHY_HALTED,
313 314 315 316 317
	PHY_UP,
	PHY_RUNNING,
	PHY_NOLINK,
};

318 319 320 321 322 323 324 325 326
/**
 * struct phy_c45_device_ids - 802.3-c45 Device Identifiers
 * @devices_in_package: Bit vector of devices present.
 * @device_ids: The device identifer for each present device.
 */
struct phy_c45_device_ids {
	u32 devices_in_package;
	u32 device_ids[8];
};
327

328 329 330 331
/* phy_device: An instance of a PHY
 *
 * drv: Pointer to the driver for this PHY instance
 * phy_id: UID for this device found during discovery
332 333
 * c45_ids: 802.3-c45 Device Identifers if is_c45.
 * is_c45:  Set to true if this phy uses clause 45 addressing.
334
 * is_internal: Set to true if this phy is internal to a MAC.
335
 * is_pseudo_fixed_link: Set to true if this phy is an Ethernet switch, etc.
336
 * is_gigabit_capable: Set to true if PHY supports 1000Mbps
337
 * has_fixups: Set to true if this phy has fixups/quirks.
338
 * suspended: Set to true if this phy has been suspended successfully.
339
 * sysfs_links: Internal boolean tracking sysfs symbolic links setup/removal.
340
 * loopback_enabled: Set true if this phy has been loopbacked successfully.
341 342 343 344 345 346 347 348
 * state: state of the PHY for management purposes
 * dev_flags: Device-specific flags used by the PHY driver.
 * irq: IRQ number of the PHY's interrupt (-1 if none)
 * phy_timer: The timer for handling the state machine
 * attached_dev: The attached enet driver's device instance ptr
 * adjust_link: Callback for the enet controller to respond to
 * changes in the link state.
 *
349 350
 * speed, duplex, pause, supported, advertising, lp_advertising,
 * and autoneg are used like in mii_if_info
351 352 353 354 355 356 357 358 359
 *
 * interrupts currently only supports enabled or disabled,
 * but could be changed in the future to support enabling
 * and disabling specific interrupts
 *
 * Contains some infrastructure for polling and interrupt
 * handling, as well as handling shifts in PHY hardware state
 */
struct phy_device {
A
Andrew Lunn 已提交
360 361
	struct mdio_device mdio;

362 363 364 365 366 367
	/* Information about the PHY type */
	/* And management functions */
	struct phy_driver *drv;

	u32 phy_id;

368
	struct phy_c45_device_ids c45_ids;
369 370 371
	unsigned is_c45:1;
	unsigned is_internal:1;
	unsigned is_pseudo_fixed_link:1;
372
	unsigned is_gigabit_capable:1;
373 374 375 376 377 378 379 380
	unsigned has_fixups:1;
	unsigned suspended:1;
	unsigned sysfs_links:1;
	unsigned loopback_enabled:1;

	unsigned autoneg:1;
	/* The most recently read link state */
	unsigned link:1;
381
	unsigned autoneg_complete:1;
382

383 384 385
	/* Interrupts are enabled */
	unsigned interrupts:1;

386 387 388 389
	enum phy_state state;

	u32 dev_flags;

390 391
	phy_interface_t interface;

A
Andy Fleming 已提交
392 393
	/*
	 * forced speed & duplex (no autoneg)
394 395 396 397 398 399 400
	 * partner speed & duplex & pause (autoneg)
	 */
	int speed;
	int duplex;
	int pause;
	int asym_pause;

401 402 403 404
	/* Union of PHY and Attached devices' supported link modes */
	/* See ethtool.h for more info */
	__ETHTOOL_DECLARE_LINK_MODE_MASK(supported);
	__ETHTOOL_DECLARE_LINK_MODE_MASK(advertising);
405
	__ETHTOOL_DECLARE_LINK_MODE_MASK(lp_advertising);
406

407 408 409
	/* Energy efficient ethernet modes which should be prohibited */
	u32 eee_broken_modes;

410 411 412 413
#ifdef CONFIG_LED_TRIGGER_PHY
	struct phy_led_trigger *phy_led_triggers;
	unsigned int phy_num_led_triggers;
	struct phy_led_trigger *last_triggered;
414 415

	struct phy_led_trigger *led_link_trigger;
416 417
#endif

A
Andy Fleming 已提交
418 419 420 421
	/*
	 * Interrupt number for this PHY
	 * -1 means no interrupt
	 */
422 423 424 425 426 427 428
	int irq;

	/* private data pointer */
	/* For use by PHYs to maintain extra state */
	void *priv;

	/* Interrupt and Polling infrastructure */
429
	struct delayed_work state_queue;
430

431
	struct mutex lock;
432

433
	struct phylink *phylink;
434 435
	struct net_device *attached_dev;

436
	u8 mdix;
437
	u8 mdix_ctrl;
438

439
	void (*phy_link_change)(struct phy_device *, bool up, bool do_carrier);
440 441
	void (*adjust_link)(struct net_device *dev);
};
A
Andrew Lunn 已提交
442 443
#define to_phy_device(d) container_of(to_mdio_device(d), \
				      struct phy_device, mdio)
444 445 446

/* struct phy_driver: Driver structure for a particular PHY type
 *
447
 * driver_data: static driver data
448 449 450 451 452
 * phy_id: The result of reading the UID registers of this PHY
 *   type, and ANDing them with the phy_id_mask.  This driver
 *   only works for PHYs with IDs which match this field
 * name: The friendly name of this PHY type
 * phy_id_mask: Defines the important bits of the phy_id
453 454
 * features: A mandatory list of features (speed, duplex, etc)
 *   supported by this PHY
455 456 457
 * flags: A bitfield defining certain other features this PHY
 *   supports (like interrupts)
 *
458 459 460 461 462 463 464
 * All functions are optional. If config_aneg or read_status
 * are not implemented, the phy core uses the genphy versions.
 * Note that none of these functions should be called from
 * interrupt time. The goal is for the bus read/write functions
 * to be able to block when the bus transaction is happening,
 * and be freed up by an interrupt (The MPC85xx has this ability,
 * though it is not currently supported in the driver).
465 466
 */
struct phy_driver {
467
	struct mdio_driver_common mdiodrv;
468 469
	u32 phy_id;
	char *name;
470
	u32 phy_id_mask;
471
	const unsigned long * const features;
472
	u32 flags;
473
	const void *driver_data;
474

A
Andy Fleming 已提交
475
	/*
476 477 478 479 480
	 * Called to issue a PHY software reset
	 */
	int (*soft_reset)(struct phy_device *phydev);

	/*
A
Andy Fleming 已提交
481 482 483
	 * Called to initialize the PHY,
	 * including after a reset
	 */
484 485
	int (*config_init)(struct phy_device *phydev);

A
Andy Fleming 已提交
486 487 488 489
	/*
	 * Called during discovery.  Used to set
	 * up device-specific structures, if any
	 */
490 491
	int (*probe)(struct phy_device *phydev);

492 493 494 495 496 497
	/*
	 * Probe the hardware to determine what abilities it has.
	 * Should only set phydev->supported.
	 */
	int (*get_features)(struct phy_device *phydev);

498 499 500 501
	/* PHY Power Management */
	int (*suspend)(struct phy_device *phydev);
	int (*resume)(struct phy_device *phydev);

A
Andy Fleming 已提交
502 503
	/*
	 * Configures the advertisement and resets
504 505
	 * autonegotiation if phydev->autoneg is on,
	 * forces the speed to the current settings in phydev
A
Andy Fleming 已提交
506 507
	 * if phydev->autoneg is off
	 */
508 509
	int (*config_aneg)(struct phy_device *phydev);

510 511 512
	/* Determines the auto negotiation result */
	int (*aneg_done)(struct phy_device *phydev);

513 514 515 516 517 518 519 520 521
	/* Determines the negotiated speed and duplex */
	int (*read_status)(struct phy_device *phydev);

	/* Clears any pending interrupts */
	int (*ack_interrupt)(struct phy_device *phydev);

	/* Enables or disables interrupts */
	int (*config_intr)(struct phy_device *phydev);

522 523 524 525 526 527
	/*
	 * Checks if the PHY generated an interrupt.
	 * For multi-PHY devices with shared PHY interrupt pin
	 */
	int (*did_interrupt)(struct phy_device *phydev);

528 529 530
	/* Override default interrupt handling */
	int (*handle_interrupt)(struct phy_device *phydev);

531 532 533
	/* Clears up any memory if needed */
	void (*remove)(struct phy_device *phydev);

534 535 536 537 538 539
	/* Returns true if this is a suitable driver for the given
	 * phydev.  If NULL, matching is based on phy_id and
	 * phy_id_mask.
	 */
	int (*match_phy_device)(struct phy_device *phydev);

540 541 542
	/* Handles ethtool queries for hardware time stamping. */
	int (*ts_info)(struct phy_device *phydev, struct ethtool_ts_info *ti);

543 544 545 546 547 548 549 550 551 552 553 554 555 556
	/* Handles SIOCSHWTSTAMP ioctl for hardware time stamping. */
	int  (*hwtstamp)(struct phy_device *phydev, struct ifreq *ifr);

	/*
	 * Requests a Rx timestamp for 'skb'. If the skb is accepted,
	 * the phy driver promises to deliver it using netif_rx() as
	 * soon as a timestamp becomes available. One of the
	 * PTP_CLASS_ values is passed in 'type'. The function must
	 * return true if the skb is accepted for delivery.
	 */
	bool (*rxtstamp)(struct phy_device *dev, struct sk_buff *skb, int type);

	/*
	 * Requests a Tx timestamp for 'skb'. The phy driver promises
557
	 * to deliver it using skb_complete_tx_timestamp() as soon as a
558 559 560 561 562
	 * timestamp becomes available. One of the PTP_CLASS_ values
	 * is passed in 'type'.
	 */
	void (*txtstamp)(struct phy_device *dev, struct sk_buff *skb, int type);

563 564 565 566 567 568 569 570
	/* Some devices (e.g. qnap TS-119P II) require PHY register changes to
	 * enable Wake on LAN, so set_wol is provided to be called in the
	 * ethernet driver's set_wol function. */
	int (*set_wol)(struct phy_device *dev, struct ethtool_wolinfo *wol);

	/* See set_wol, but for checking whether Wake on LAN is enabled. */
	void (*get_wol)(struct phy_device *dev, struct ethtool_wolinfo *wol);

571 572 573 574 575 576 577 578 579
	/*
	 * Called to inform a PHY device driver when the core is about to
	 * change the link state. This callback is supposed to be used as
	 * fixup hook for drivers that need to take action when the link
	 * state changes. Drivers are by no means allowed to mess with the
	 * PHY device structure in their implementations.
	 */
	void (*link_change_notify)(struct phy_device *dev);

580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603
	/*
	 * Phy specific driver override for reading a MMD register.
	 * This function is optional for PHY specific drivers.  When
	 * not provided, the default MMD read function will be used
	 * by phy_read_mmd(), which will use either a direct read for
	 * Clause 45 PHYs or an indirect read for Clause 22 PHYs.
	 *  devnum is the MMD device number within the PHY device,
	 *  regnum is the register within the selected MMD device.
	 */
	int (*read_mmd)(struct phy_device *dev, int devnum, u16 regnum);

	/*
	 * Phy specific driver override for writing a MMD register.
	 * This function is optional for PHY specific drivers.  When
	 * not provided, the default MMD write function will be used
	 * by phy_write_mmd(), which will use either a direct write for
	 * Clause 45 PHYs, or an indirect write for Clause 22 PHYs.
	 *  devnum is the MMD device number within the PHY device,
	 *  regnum is the register within the selected MMD device.
	 *  val is the value to be written.
	 */
	int (*write_mmd)(struct phy_device *dev, int devnum, u16 regnum,
			 u16 val);

604 605 606
	int (*read_page)(struct phy_device *dev);
	int (*write_page)(struct phy_device *dev, int page);

607 608 609 610 611 612 613 614 615
	/* Get the size and type of the eeprom contained within a plug-in
	 * module */
	int (*module_info)(struct phy_device *dev,
			   struct ethtool_modinfo *modinfo);

	/* Get the eeprom information from the plug-in module */
	int (*module_eeprom)(struct phy_device *dev,
			     struct ethtool_eeprom *ee, u8 *data);

A
Andrew Lunn 已提交
616 617 618 619 620
	/* Get statistics from the phy using ethtool */
	int (*get_sset_count)(struct phy_device *dev);
	void (*get_strings)(struct phy_device *dev, u8 *data);
	void (*get_stats)(struct phy_device *dev,
			  struct ethtool_stats *stats, u64 *data);
621 622 623 624 625 626 627

	/* Get and Set PHY tunables */
	int (*get_tunable)(struct phy_device *dev,
			   struct ethtool_tunable *tuna, void *data);
	int (*set_tunable)(struct phy_device *dev,
			    struct ethtool_tunable *tuna,
			    const void *data);
628
	int (*set_loopback)(struct phy_device *dev, bool enable);
629
};
630 631
#define to_phy_driver(d) container_of(to_mdio_common_driver(d),		\
				      struct phy_driver, mdiodrv)
632

633 634 635
#define PHY_ANY_ID "MATCH ANY PHY"
#define PHY_ANY_UID 0xffffffff

636 637 638 639
#define PHY_ID_MATCH_EXACT(id) .phy_id = (id), .phy_id_mask = GENMASK(31, 0)
#define PHY_ID_MATCH_MODEL(id) .phy_id = (id), .phy_id_mask = GENMASK(31, 4)
#define PHY_ID_MATCH_VENDOR(id) .phy_id = (id), .phy_id_mask = GENMASK(31, 10)

640 641 642
/* A Structure for boards to register fixups with the PHY Lib */
struct phy_fixup {
	struct list_head list;
643
	char bus_id[MII_BUS_ID_SIZE + 3];
644 645 646 647 648
	u32 phy_uid;
	u32 phy_uid_mask;
	int (*run)(struct phy_device *phydev);
};

649 650 651
const char *phy_speed_to_str(int speed);
const char *phy_duplex_to_str(unsigned int duplex);

652 653 654 655 656 657 658 659 660 661 662
/* A structure for mapping a particular speed and duplex
 * combination to a particular SUPPORTED and ADVERTISED value
 */
struct phy_setting {
	u32 speed;
	u8 duplex;
	u8 bit;
};

const struct phy_setting *
phy_lookup_setting(int speed, int duplex, const unsigned long *mask,
663
		   bool exact);
664
size_t phy_speeds(unsigned int *speeds, size_t size,
665
		  unsigned long *mask);
666
void of_set_phy_supported(struct phy_device *phydev);
667
void of_set_phy_eee_broken(struct phy_device *phydev);
668

669 670 671 672 673 674
/**
 * phy_is_started - Convenience function to check whether PHY is started
 * @phydev: The phy_device struct
 */
static inline bool phy_is_started(struct phy_device *phydev)
{
675
	return phydev->state >= PHY_UP;
676 677
}

678 679
void phy_resolve_aneg_linkmode(struct phy_device *phydev);

680 681 682 683 684 685 686 687 688
/**
 * phy_read - Convenience function for reading a given PHY register
 * @phydev: the phy_device struct
 * @regnum: register number to read
 *
 * NOTE: MUST NOT be called from interrupt context,
 * because the bus read/write functions may wait for an interrupt
 * to conclude the operation.
 */
689
static inline int phy_read(struct phy_device *phydev, u32 regnum)
690
{
A
Andrew Lunn 已提交
691
	return mdiobus_read(phydev->mdio.bus, phydev->mdio.addr, regnum);
692 693
}

R
Russell King 已提交
694 695 696 697 698 699 700 701 702 703 704 705
/**
 * __phy_read - convenience function for reading a given PHY register
 * @phydev: the phy_device struct
 * @regnum: register number to read
 *
 * The caller must have taken the MDIO bus lock.
 */
static inline int __phy_read(struct phy_device *phydev, u32 regnum)
{
	return __mdiobus_read(phydev->mdio.bus, phydev->mdio.addr, regnum);
}

706 707 708 709 710 711 712 713 714 715
/**
 * phy_write - Convenience function for writing a given PHY register
 * @phydev: the phy_device struct
 * @regnum: register number to write
 * @val: value to write to @regnum
 *
 * NOTE: MUST NOT be called from interrupt context,
 * because the bus read/write functions may wait for an interrupt
 * to conclude the operation.
 */
716
static inline int phy_write(struct phy_device *phydev, u32 regnum, u16 val)
717
{
A
Andrew Lunn 已提交
718
	return mdiobus_write(phydev->mdio.bus, phydev->mdio.addr, regnum, val);
719 720
}

R
Russell King 已提交
721 722 723 724 725 726 727 728 729 730 731 732 733 734
/**
 * __phy_write - Convenience function for writing a given PHY register
 * @phydev: the phy_device struct
 * @regnum: register number to write
 * @val: value to write to @regnum
 *
 * The caller must have taken the MDIO bus lock.
 */
static inline int __phy_write(struct phy_device *phydev, u32 regnum, u16 val)
{
	return __mdiobus_write(phydev->mdio.bus, phydev->mdio.addr, regnum,
			       val);
}

735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780
/**
 * phy_read_mmd - Convenience function for reading a register
 * from an MMD on a given PHY.
 * @phydev: The phy_device struct
 * @devad: The MMD to read from
 * @regnum: The register on the MMD to read
 *
 * Same rules as for phy_read();
 */
int phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum);

/**
 * __phy_read_mmd - Convenience function for reading a register
 * from an MMD on a given PHY.
 * @phydev: The phy_device struct
 * @devad: The MMD to read from
 * @regnum: The register on the MMD to read
 *
 * Same rules as for __phy_read();
 */
int __phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum);

/**
 * phy_write_mmd - Convenience function for writing a register
 * on an MMD on a given PHY.
 * @phydev: The phy_device struct
 * @devad: The MMD to write to
 * @regnum: The register on the MMD to read
 * @val: value to write to @regnum
 *
 * Same rules as for phy_write();
 */
int phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val);

/**
 * __phy_write_mmd - Convenience function for writing a register
 * on an MMD on a given PHY.
 * @phydev: The phy_device struct
 * @devad: The MMD to write to
 * @regnum: The register on the MMD to read
 * @val: value to write to @regnum
 *
 * Same rules as for __phy_write();
 */
int __phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val);

781 782 783 784
int __phy_modify_changed(struct phy_device *phydev, u32 regnum, u16 mask,
			 u16 set);
int phy_modify_changed(struct phy_device *phydev, u32 regnum, u16 mask,
		       u16 set);
R
Russell King 已提交
785
int __phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set);
786
int phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set);
R
Russell King 已提交
787

788 789 790 791
int __phy_modify_mmd_changed(struct phy_device *phydev, int devad, u32 regnum,
			     u16 mask, u16 set);
int phy_modify_mmd_changed(struct phy_device *phydev, int devad, u32 regnum,
			   u16 mask, u16 set);
792
int __phy_modify_mmd(struct phy_device *phydev, int devad, u32 regnum,
793
		     u16 mask, u16 set);
794
int phy_modify_mmd(struct phy_device *phydev, int devad, u32 regnum,
795
		   u16 mask, u16 set);
796

797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845
/**
 * __phy_set_bits - Convenience function for setting bits in a PHY register
 * @phydev: the phy_device struct
 * @regnum: register number to write
 * @val: bits to set
 *
 * The caller must have taken the MDIO bus lock.
 */
static inline int __phy_set_bits(struct phy_device *phydev, u32 regnum, u16 val)
{
	return __phy_modify(phydev, regnum, 0, val);
}

/**
 * __phy_clear_bits - Convenience function for clearing bits in a PHY register
 * @phydev: the phy_device struct
 * @regnum: register number to write
 * @val: bits to clear
 *
 * The caller must have taken the MDIO bus lock.
 */
static inline int __phy_clear_bits(struct phy_device *phydev, u32 regnum,
				   u16 val)
{
	return __phy_modify(phydev, regnum, val, 0);
}

/**
 * phy_set_bits - Convenience function for setting bits in a PHY register
 * @phydev: the phy_device struct
 * @regnum: register number to write
 * @val: bits to set
 */
static inline int phy_set_bits(struct phy_device *phydev, u32 regnum, u16 val)
{
	return phy_modify(phydev, regnum, 0, val);
}

/**
 * phy_clear_bits - Convenience function for clearing bits in a PHY register
 * @phydev: the phy_device struct
 * @regnum: register number to write
 * @val: bits to clear
 */
static inline int phy_clear_bits(struct phy_device *phydev, u32 regnum, u16 val)
{
	return phy_modify(phydev, regnum, val, 0);
}

846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905
/**
 * __phy_set_bits_mmd - Convenience function for setting bits in a register
 * on MMD
 * @phydev: the phy_device struct
 * @devad: the MMD containing register to modify
 * @regnum: register number to modify
 * @val: bits to set
 *
 * The caller must have taken the MDIO bus lock.
 */
static inline int __phy_set_bits_mmd(struct phy_device *phydev, int devad,
		u32 regnum, u16 val)
{
	return __phy_modify_mmd(phydev, devad, regnum, 0, val);
}

/**
 * __phy_clear_bits_mmd - Convenience function for clearing bits in a register
 * on MMD
 * @phydev: the phy_device struct
 * @devad: the MMD containing register to modify
 * @regnum: register number to modify
 * @val: bits to clear
 *
 * The caller must have taken the MDIO bus lock.
 */
static inline int __phy_clear_bits_mmd(struct phy_device *phydev, int devad,
		u32 regnum, u16 val)
{
	return __phy_modify_mmd(phydev, devad, regnum, val, 0);
}

/**
 * phy_set_bits_mmd - Convenience function for setting bits in a register
 * on MMD
 * @phydev: the phy_device struct
 * @devad: the MMD containing register to modify
 * @regnum: register number to modify
 * @val: bits to set
 */
static inline int phy_set_bits_mmd(struct phy_device *phydev, int devad,
		u32 regnum, u16 val)
{
	return phy_modify_mmd(phydev, devad, regnum, 0, val);
}

/**
 * phy_clear_bits_mmd - Convenience function for clearing bits in a register
 * on MMD
 * @phydev: the phy_device struct
 * @devad: the MMD containing register to modify
 * @regnum: register number to modify
 * @val: bits to clear
 */
static inline int phy_clear_bits_mmd(struct phy_device *phydev, int devad,
		u32 regnum, u16 val)
{
	return phy_modify_mmd(phydev, devad, regnum, val, 0);
}

906 907 908 909 910 911 912 913 914 915 916 917
/**
 * phy_interrupt_is_valid - Convenience function for testing a given PHY irq
 * @phydev: the phy_device struct
 *
 * NOTE: must be kept in sync with addition/removal of PHY_POLL and
 * PHY_IGNORE_INTERRUPT
 */
static inline bool phy_interrupt_is_valid(struct phy_device *phydev)
{
	return phydev->irq != PHY_POLL && phydev->irq != PHY_IGNORE_INTERRUPT;
}

918 919 920 921 922 923 924 925 926 927
/**
 * phy_polling_mode - Convenience function for testing whether polling is
 * used to detect PHY status changes
 * @phydev: the phy_device struct
 */
static inline bool phy_polling_mode(struct phy_device *phydev)
{
	return phydev->irq == PHY_POLL;
}

928 929 930 931 932 933 934 935 936
/**
 * phy_is_internal - Convenience function for testing if a PHY is internal
 * @phydev: the phy_device struct
 */
static inline bool phy_is_internal(struct phy_device *phydev)
{
	return phydev->is_internal;
}

937 938 939 940 941 942 943 944 945 946 947
/**
 * phy_interface_mode_is_rgmii - Convenience function for testing if a
 * PHY interface mode is RGMII (all variants)
 * @mode: the phy_interface_t enum
 */
static inline bool phy_interface_mode_is_rgmii(phy_interface_t mode)
{
	return mode >= PHY_INTERFACE_MODE_RGMII &&
		mode <= PHY_INTERFACE_MODE_RGMII_TXID;
};

948 949 950 951 952 953 954 955 956 957 958 959 960 961
/**
 * phy_interface_mode_is_8023z() - does the phy interface mode use 802.3z
 *   negotiation
 * @mode: one of &enum phy_interface_t
 *
 * Returns true if the phy interface mode uses the 16-bit negotiation
 * word as defined in 802.3z. (See 802.3-2015 37.2.1 Config_Reg encoding)
 */
static inline bool phy_interface_mode_is_8023z(phy_interface_t mode)
{
	return mode == PHY_INTERFACE_MODE_1000BASEX ||
	       mode == PHY_INTERFACE_MODE_2500BASEX;
}

962 963 964 965 966 967 968
/**
 * phy_interface_is_rgmii - Convenience function for testing if a PHY interface
 * is RGMII (all variants)
 * @phydev: the phy_device struct
 */
static inline bool phy_interface_is_rgmii(struct phy_device *phydev)
{
969
	return phy_interface_mode_is_rgmii(phydev->interface);
970 971 972 973 974 975 976 977 978 979
};

/*
 * phy_is_pseudo_fixed_link - Convenience function for testing if this
 * PHY is the CPU port facing side of an Ethernet switch, or similar.
 * @phydev: the phy_device struct
 */
static inline bool phy_is_pseudo_fixed_link(struct phy_device *phydev)
{
	return phydev->is_pseudo_fixed_link;
980 981
}

982 983 984 985 986 987 988 989
int phy_save_page(struct phy_device *phydev);
int phy_select_page(struct phy_device *phydev, int page);
int phy_restore_page(struct phy_device *phydev, int oldpage, int ret);
int phy_read_paged(struct phy_device *phydev, int page, u32 regnum);
int phy_write_paged(struct phy_device *phydev, int page, u32 regnum, u16 val);
int phy_modify_paged(struct phy_device *phydev, int page, u32 regnum,
		     u16 mask, u16 set);

990
struct phy_device *phy_device_create(struct mii_bus *bus, int addr, int phy_id,
991 992
				     bool is_c45,
				     struct phy_c45_device_ids *c45_ids);
993
#if IS_ENABLED(CONFIG_PHYLIB)
994
struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45);
995
int phy_device_register(struct phy_device *phy);
996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010
void phy_device_free(struct phy_device *phydev);
#else
static inline
struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45)
{
	return NULL;
}

static inline int phy_device_register(struct phy_device *phy)
{
	return 0;
}

static inline void phy_device_free(struct phy_device *phydev) { }
#endif /* CONFIG_PHYLIB */
R
Russell King 已提交
1011
void phy_device_remove(struct phy_device *phydev);
1012
int phy_init_hw(struct phy_device *phydev);
1013 1014
int phy_suspend(struct phy_device *phydev);
int phy_resume(struct phy_device *phydev);
1015
int __phy_resume(struct phy_device *phydev);
1016
int phy_loopback(struct phy_device *phydev, bool enable);
1017 1018
struct phy_device *phy_attach(struct net_device *dev, const char *bus_id,
			      phy_interface_t interface);
J
Jiri Pirko 已提交
1019
struct phy_device *phy_find_first(struct mii_bus *bus);
1020 1021
int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
		      u32 flags, phy_interface_t interface);
1022
int phy_connect_direct(struct net_device *dev, struct phy_device *phydev,
1023 1024 1025 1026 1027
		       void (*handler)(struct net_device *),
		       phy_interface_t interface);
struct phy_device *phy_connect(struct net_device *dev, const char *bus_id,
			       void (*handler)(struct net_device *),
			       phy_interface_t interface);
A
Andy Fleming 已提交
1028 1029 1030 1031 1032
void phy_disconnect(struct phy_device *phydev);
void phy_detach(struct phy_device *phydev);
void phy_start(struct phy_device *phydev);
void phy_stop(struct phy_device *phydev);
int phy_start_aneg(struct phy_device *phydev);
1033
int phy_aneg_done(struct phy_device *phydev);
1034 1035
int phy_speed_down(struct phy_device *phydev, bool sync);
int phy_speed_up(struct phy_device *phydev);
A
Andy Fleming 已提交
1036

1037
int phy_restart_aneg(struct phy_device *phydev);
1038
int phy_reset_after_clk_enable(struct phy_device *phydev);
1039

1040 1041 1042 1043 1044
static inline void phy_device_reset(struct phy_device *phydev, int value)
{
	mdio_device_reset(&phydev->mdio, value);
}

1045
#define phydev_err(_phydev, format, args...)	\
A
Andrew Lunn 已提交
1046
	dev_err(&_phydev->mdio.dev, format, ##args)
1047

A
Andrew Lunn 已提交
1048 1049 1050
#define phydev_info(_phydev, format, args...)	\
	dev_info(&_phydev->mdio.dev, format, ##args)

A
Andrew Lunn 已提交
1051 1052 1053
#define phydev_warn(_phydev, format, args...)	\
	dev_warn(&_phydev->mdio.dev, format, ##args)

1054
#define phydev_dbg(_phydev, format, args...)	\
1055
	dev_dbg(&_phydev->mdio.dev, format, ##args)
1056

A
Andrew Lunn 已提交
1057 1058
static inline const char *phydev_name(const struct phy_device *phydev)
{
A
Andrew Lunn 已提交
1059
	return dev_name(&phydev->mdio.dev);
A
Andrew Lunn 已提交
1060 1061
}

1062 1063 1064
void phy_attached_print(struct phy_device *phydev, const char *fmt, ...)
	__printf(2, 3);
void phy_attached_info(struct phy_device *phydev);
1065 1066

/* Clause 22 PHY */
1067
int genphy_config_init(struct phy_device *phydev);
1068
int genphy_read_abilities(struct phy_device *phydev);
1069
int genphy_setup_forced(struct phy_device *phydev);
1070
int genphy_restart_aneg(struct phy_device *phydev);
1071
int genphy_config_eee_advert(struct phy_device *phydev);
1072
int __genphy_config_aneg(struct phy_device *phydev, bool changed);
1073
int genphy_aneg_done(struct phy_device *phydev);
1074 1075
int genphy_update_link(struct phy_device *phydev);
int genphy_read_status(struct phy_device *phydev);
G
Giuseppe Cavallaro 已提交
1076 1077
int genphy_suspend(struct phy_device *phydev);
int genphy_resume(struct phy_device *phydev);
1078
int genphy_loopback(struct phy_device *phydev, bool enable);
1079
int genphy_soft_reset(struct phy_device *phydev);
1080 1081 1082 1083 1084 1085

static inline int genphy_config_aneg(struct phy_device *phydev)
{
	return __genphy_config_aneg(phydev, false);
}

1086 1087 1088 1089
static inline int genphy_no_soft_reset(struct phy_device *phydev)
{
	return 0;
}
1090 1091 1092 1093 1094 1095 1096 1097
static inline int genphy_no_ack_interrupt(struct phy_device *phydev)
{
	return 0;
}
static inline int genphy_no_config_intr(struct phy_device *phydev)
{
	return 0;
}
1098 1099 1100 1101
int genphy_read_mmd_unsupported(struct phy_device *phdev, int devad,
				u16 regnum);
int genphy_write_mmd_unsupported(struct phy_device *phdev, int devnum,
				 u16 regnum, u16 val);
1102 1103 1104

/* Clause 45 PHY */
int genphy_c45_restart_aneg(struct phy_device *phydev);
1105
int genphy_c45_check_and_restart_aneg(struct phy_device *phydev, bool restart);
1106
int genphy_c45_aneg_done(struct phy_device *phydev);
1107
int genphy_c45_read_link(struct phy_device *phydev);
1108 1109 1110
int genphy_c45_read_lpa(struct phy_device *phydev);
int genphy_c45_read_pma(struct phy_device *phydev);
int genphy_c45_pma_setup_forced(struct phy_device *phydev);
1111
int genphy_c45_an_config_aneg(struct phy_device *phydev);
1112
int genphy_c45_an_disable_aneg(struct phy_device *phydev);
1113
int genphy_c45_read_mdix(struct phy_device *phydev);
1114
int genphy_c45_pma_read_abilities(struct phy_device *phydev);
1115
int genphy_c45_read_status(struct phy_device *phydev);
1116

1117 1118 1119
/* The gen10g_* functions are the old Clause 45 stub */
int gen10g_config_aneg(struct phy_device *phydev);

1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130
static inline int phy_read_status(struct phy_device *phydev)
{
	if (!phydev->drv)
		return -EIO;

	if (phydev->drv->read_status)
		return phydev->drv->read_status(phydev);
	else
		return genphy_read_status(phydev);
}

1131
void phy_driver_unregister(struct phy_driver *drv);
1132
void phy_drivers_unregister(struct phy_driver *drv, int n);
1133 1134 1135
int phy_driver_register(struct phy_driver *new_driver, struct module *owner);
int phy_drivers_register(struct phy_driver *new_driver, int n,
			 struct module *owner);
1136
void phy_state_machine(struct work_struct *work);
1137
void phy_queue_state_machine(struct phy_device *phydev, unsigned long jiffies);
1138
void phy_mac_interrupt(struct phy_device *phydev);
1139
void phy_start_machine(struct phy_device *phydev);
1140 1141
void phy_stop_machine(struct phy_device *phydev);
int phy_ethtool_sset(struct phy_device *phydev, struct ethtool_cmd *cmd);
1142 1143
void phy_ethtool_ksettings_get(struct phy_device *phydev,
			       struct ethtool_link_ksettings *cmd);
1144 1145
int phy_ethtool_ksettings_set(struct phy_device *phydev,
			      const struct ethtool_link_ksettings *cmd);
1146
int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd);
1147
void phy_request_interrupt(struct phy_device *phydev);
1148
void phy_free_interrupt(struct phy_device *phydev);
A
Andy Fleming 已提交
1149
void phy_print_status(struct phy_device *phydev);
1150
int phy_set_max_speed(struct phy_device *phydev, u32 max_speed);
1151
void phy_remove_link_mode(struct phy_device *phydev, u32 link_mode);
1152
void phy_advertise_supported(struct phy_device *phydev);
1153
void phy_support_sym_pause(struct phy_device *phydev);
1154
void phy_support_asym_pause(struct phy_device *phydev);
1155 1156
void phy_set_sym_pause(struct phy_device *phydev, bool rx, bool tx,
		       bool autoneg);
1157
void phy_set_asym_pause(struct phy_device *phydev, bool rx, bool tx);
1158 1159
bool phy_validate_pause(struct phy_device *phydev,
			struct ethtool_pauseparam *pp);
1160

1161
int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask,
1162
		       int (*run)(struct phy_device *));
1163
int phy_register_fixup_for_id(const char *bus_id,
1164
			      int (*run)(struct phy_device *));
1165
int phy_register_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask,
1166
			       int (*run)(struct phy_device *));
1167

1168 1169 1170 1171
int phy_unregister_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask);
int phy_unregister_fixup_for_id(const char *bus_id);
int phy_unregister_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask);

1172 1173 1174 1175
int phy_init_eee(struct phy_device *phydev, bool clk_stop_enable);
int phy_get_eee_err(struct phy_device *phydev);
int phy_ethtool_set_eee(struct phy_device *phydev, struct ethtool_eee *data);
int phy_ethtool_get_eee(struct phy_device *phydev, struct ethtool_eee *data);
1176
int phy_ethtool_set_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol);
1177 1178
void phy_ethtool_get_wol(struct phy_device *phydev,
			 struct ethtool_wolinfo *wol);
1179 1180 1181 1182
int phy_ethtool_get_link_ksettings(struct net_device *ndev,
				   struct ethtool_link_ksettings *cmd);
int phy_ethtool_set_link_ksettings(struct net_device *ndev,
				   const struct ethtool_link_ksettings *cmd);
1183
int phy_ethtool_nway_reset(struct net_device *ndev);
1184

1185
#if IS_ENABLED(CONFIG_PHYLIB)
A
Andy Fleming 已提交
1186 1187
int __init mdio_bus_init(void);
void mdio_bus_exit(void);
1188 1189 1190 1191
#endif

/* Inline function for use within net/core/ethtool.c (built-in) */
static inline int phy_ethtool_get_strings(struct phy_device *phydev, u8 *data)
1192
{
1193 1194 1195 1196 1197 1198 1199 1200
	if (!phydev->drv)
		return -EIO;

	mutex_lock(&phydev->lock);
	phydev->drv->get_strings(phydev, data);
	mutex_unlock(&phydev->lock);

	return 0;
1201 1202
}

1203
static inline int phy_ethtool_get_sset_count(struct phy_device *phydev)
1204
{
1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219
	int ret;

	if (!phydev->drv)
		return -EIO;

	if (phydev->drv->get_sset_count &&
	    phydev->drv->get_strings &&
	    phydev->drv->get_stats) {
		mutex_lock(&phydev->lock);
		ret = phydev->drv->get_sset_count(phydev);
		mutex_unlock(&phydev->lock);

		return ret;
	}

1220 1221 1222
	return -EOPNOTSUPP;
}

1223 1224
static inline int phy_ethtool_get_stats(struct phy_device *phydev,
					struct ethtool_stats *stats, u64 *data)
1225
{
1226 1227 1228 1229 1230 1231 1232 1233
	if (!phydev->drv)
		return -EIO;

	mutex_lock(&phydev->lock);
	phydev->drv->get_stats(phydev, stats, data);
	mutex_unlock(&phydev->lock);

	return 0;
1234
}
A
Andy Fleming 已提交
1235

1236
extern struct bus_type mdio_bus_type;
1237

1238 1239 1240 1241 1242 1243 1244
struct mdio_board_info {
	const char	*bus_id;
	char		modalias[MDIO_NAME_SIZE];
	int		mdio_addr;
	const void	*platform_data;
};

1245
#if IS_ENABLED(CONFIG_MDIO_DEVICE)
1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256
int mdiobus_register_board_info(const struct mdio_board_info *info,
				unsigned int n);
#else
static inline int mdiobus_register_board_info(const struct mdio_board_info *i,
					      unsigned int n)
{
	return 0;
}
#endif


1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267
/**
 * module_phy_driver() - Helper macro for registering PHY drivers
 * @__phy_drivers: array of PHY drivers to register
 *
 * Helper macro for PHY drivers which do not do anything special in module
 * init/exit. Each module may only use this macro once, and calling it
 * replaces module_init() and module_exit().
 */
#define phy_module_driver(__phy_drivers, __count)			\
static int __init phy_module_init(void)					\
{									\
1268
	return phy_drivers_register(__phy_drivers, __count, THIS_MODULE); \
1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279
}									\
module_init(phy_module_init);						\
static void __exit phy_module_exit(void)				\
{									\
	phy_drivers_unregister(__phy_drivers, __count);			\
}									\
module_exit(phy_module_exit)

#define module_phy_driver(__phy_drivers)				\
	phy_module_driver(__phy_drivers, ARRAY_SIZE(__phy_drivers))

1280 1281 1282
bool phy_driver_is_genphy(struct phy_device *phydev);
bool phy_driver_is_genphy_10g(struct phy_device *phydev);

1283
#endif /* __PHY_H */