• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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   * Author: Andy Fleming
7   *
8   * Copyright (c) 2004 Freescale Semiconductor, Inc.
9   */
10  
11  #ifndef __PHY_H
12  #define __PHY_H
13  
14  #include <linux/compiler.h>
15  #include <linux/spinlock.h>
16  #include <linux/ethtool.h>
17  #include <linux/linkmode.h>
18  #include <linux/netlink.h>
19  #include <linux/mdio.h>
20  #include <linux/mii.h>
21  #include <linux/mii_timestamper.h>
22  #include <linux/module.h>
23  #include <linux/timer.h>
24  #include <linux/workqueue.h>
25  #include <linux/mod_devicetable.h>
26  #include <linux/u64_stats_sync.h>
27  #include <linux/irqreturn.h>
28  #include <linux/iopoll.h>
29  #include <linux/refcount.h>
30  #include <linux/android_kabi.h>
31  
32  #include <linux/atomic.h>
33  
34  #define PHY_DEFAULT_FEATURES	(SUPPORTED_Autoneg | \
35  				 SUPPORTED_TP | \
36  				 SUPPORTED_MII)
37  
38  #define PHY_10BT_FEATURES	(SUPPORTED_10baseT_Half | \
39  				 SUPPORTED_10baseT_Full)
40  
41  #define PHY_100BT_FEATURES	(SUPPORTED_100baseT_Half | \
42  				 SUPPORTED_100baseT_Full)
43  
44  #define PHY_1000BT_FEATURES	(SUPPORTED_1000baseT_Half | \
45  				 SUPPORTED_1000baseT_Full)
46  
47  extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_basic_features) __ro_after_init;
48  extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_basic_t1_features) __ro_after_init;
49  extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_gbit_features) __ro_after_init;
50  extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_gbit_fibre_features) __ro_after_init;
51  extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_gbit_all_ports_features) __ro_after_init;
52  extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_features) __ro_after_init;
53  extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_fec_features) __ro_after_init;
54  extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_full_features) __ro_after_init;
55  
56  #define PHY_BASIC_FEATURES ((unsigned long *)&phy_basic_features)
57  #define PHY_BASIC_T1_FEATURES ((unsigned long *)&phy_basic_t1_features)
58  #define PHY_GBIT_FEATURES ((unsigned long *)&phy_gbit_features)
59  #define PHY_GBIT_FIBRE_FEATURES ((unsigned long *)&phy_gbit_fibre_features)
60  #define PHY_GBIT_ALL_PORTS_FEATURES ((unsigned long *)&phy_gbit_all_ports_features)
61  #define PHY_10GBIT_FEATURES ((unsigned long *)&phy_10gbit_features)
62  #define PHY_10GBIT_FEC_FEATURES ((unsigned long *)&phy_10gbit_fec_features)
63  #define PHY_10GBIT_FULL_FEATURES ((unsigned long *)&phy_10gbit_full_features)
64  
65  extern const int phy_basic_ports_array[3];
66  extern const int phy_fibre_port_array[1];
67  extern const int phy_all_ports_features_array[7];
68  extern const int phy_10_100_features_array[4];
69  extern const int phy_basic_t1_features_array[2];
70  extern const int phy_gbit_features_array[2];
71  extern const int phy_10gbit_features_array[1];
72  
73  /*
74   * Set phydev->irq to PHY_POLL if interrupts are not supported,
75   * or not desired for this PHY.  Set to PHY_MAC_INTERRUPT if
76   * the attached MAC driver handles the interrupt
77   */
78  #define PHY_POLL		-1
79  #define PHY_MAC_INTERRUPT	-2
80  
81  #define PHY_IS_INTERNAL		0x00000001
82  #define PHY_RST_AFTER_CLK_EN	0x00000002
83  #define PHY_POLL_CABLE_TEST	0x00000004
84  #define MDIO_DEVICE_IS_PHY	0x80000000
85  
86  /**
87   * enum phy_interface_t - Interface Mode definitions
88   *
89   * @PHY_INTERFACE_MODE_NA: Not Applicable - don't touch
90   * @PHY_INTERFACE_MODE_INTERNAL: No interface, MAC and PHY combined
91   * @PHY_INTERFACE_MODE_MII: Median-independent interface
92   * @PHY_INTERFACE_MODE_GMII: Gigabit median-independent interface
93   * @PHY_INTERFACE_MODE_SGMII: Serial gigabit media-independent interface
94   * @PHY_INTERFACE_MODE_TBI: Ten Bit Interface
95   * @PHY_INTERFACE_MODE_REVMII: Reverse Media Independent Interface
96   * @PHY_INTERFACE_MODE_RMII: Reduced Media Independent Interface
97   * @PHY_INTERFACE_MODE_REVRMII: Reduced Media Independent Interface in PHY role
98   * @PHY_INTERFACE_MODE_RGMII: Reduced gigabit media-independent interface
99   * @PHY_INTERFACE_MODE_RGMII_ID: RGMII with Internal RX+TX delay
100   * @PHY_INTERFACE_MODE_RGMII_RXID: RGMII with Internal RX delay
101   * @PHY_INTERFACE_MODE_RGMII_TXID: RGMII with Internal RX delay
102   * @PHY_INTERFACE_MODE_RTBI: Reduced TBI
103   * @PHY_INTERFACE_MODE_SMII: ??? MII
104   * @PHY_INTERFACE_MODE_XGMII: 10 gigabit media-independent interface
105   * @PHY_INTERFACE_MODE_XLGMII:40 gigabit media-independent interface
106   * @PHY_INTERFACE_MODE_MOCA: Multimedia over Coax
107   * @PHY_INTERFACE_MODE_QSGMII: Quad SGMII
108   * @PHY_INTERFACE_MODE_TRGMII: Turbo RGMII
109   * @PHY_INTERFACE_MODE_100BASEX: 100 BaseX
110   * @PHY_INTERFACE_MODE_1000BASEX: 1000 BaseX
111   * @PHY_INTERFACE_MODE_2500BASEX: 2500 BaseX
112   * @PHY_INTERFACE_MODE_5GBASER: 5G BaseR
113   * @PHY_INTERFACE_MODE_RXAUI: Reduced XAUI
114   * @PHY_INTERFACE_MODE_XAUI: 10 Gigabit Attachment Unit Interface
115   * @PHY_INTERFACE_MODE_10GBASER: 10G BaseR
116   * @PHY_INTERFACE_MODE_25GBASER: 25G BaseR
117   * @PHY_INTERFACE_MODE_USXGMII:  Universal Serial 10GE MII
118   * @PHY_INTERFACE_MODE_10GKR: 10GBASE-KR - with Clause 73 AN
119   * @PHY_INTERFACE_MODE_MAX: Book keeping
120   *
121   * Describes the interface between the MAC and PHY.
122   */
123  typedef enum {
124  	PHY_INTERFACE_MODE_NA,
125  	PHY_INTERFACE_MODE_INTERNAL,
126  	PHY_INTERFACE_MODE_MII,
127  	PHY_INTERFACE_MODE_GMII,
128  	PHY_INTERFACE_MODE_SGMII,
129  	PHY_INTERFACE_MODE_TBI,
130  	PHY_INTERFACE_MODE_REVMII,
131  	PHY_INTERFACE_MODE_RMII,
132  	PHY_INTERFACE_MODE_REVRMII,
133  	PHY_INTERFACE_MODE_RGMII,
134  	PHY_INTERFACE_MODE_RGMII_ID,
135  	PHY_INTERFACE_MODE_RGMII_RXID,
136  	PHY_INTERFACE_MODE_RGMII_TXID,
137  	PHY_INTERFACE_MODE_RTBI,
138  	PHY_INTERFACE_MODE_SMII,
139  	PHY_INTERFACE_MODE_XGMII,
140  	PHY_INTERFACE_MODE_XLGMII,
141  	PHY_INTERFACE_MODE_MOCA,
142  	PHY_INTERFACE_MODE_QSGMII,
143  	PHY_INTERFACE_MODE_TRGMII,
144  	PHY_INTERFACE_MODE_100BASEX,
145  	PHY_INTERFACE_MODE_1000BASEX,
146  	PHY_INTERFACE_MODE_2500BASEX,
147  	PHY_INTERFACE_MODE_5GBASER,
148  	PHY_INTERFACE_MODE_RXAUI,
149  	PHY_INTERFACE_MODE_XAUI,
150  	/* 10GBASE-R, XFI, SFI - single lane 10G Serdes */
151  	PHY_INTERFACE_MODE_10GBASER,
152  	PHY_INTERFACE_MODE_25GBASER,
153  	PHY_INTERFACE_MODE_USXGMII,
154  	/* 10GBASE-KR - with Clause 73 AN */
155  	PHY_INTERFACE_MODE_10GKR,
156  	PHY_INTERFACE_MODE_MAX,
157  } phy_interface_t;
158  
159  /*
160   * phy_supported_speeds - return all speeds currently supported by a PHY device
161   */
162  unsigned int phy_supported_speeds(struct phy_device *phy,
163  				      unsigned int *speeds,
164  				      unsigned int size);
165  
166  /**
167   * phy_modes - map phy_interface_t enum to device tree binding of phy-mode
168   * @interface: enum phy_interface_t value
169   *
170   * Description: maps enum &phy_interface_t defined in this file
171   * into the device tree binding of 'phy-mode', so that Ethernet
172   * device driver can get PHY interface from device tree.
173   */
phy_modes(phy_interface_t interface)174  static inline const char *phy_modes(phy_interface_t interface)
175  {
176  	switch (interface) {
177  	case PHY_INTERFACE_MODE_NA:
178  		return "";
179  	case PHY_INTERFACE_MODE_INTERNAL:
180  		return "internal";
181  	case PHY_INTERFACE_MODE_MII:
182  		return "mii";
183  	case PHY_INTERFACE_MODE_GMII:
184  		return "gmii";
185  	case PHY_INTERFACE_MODE_SGMII:
186  		return "sgmii";
187  	case PHY_INTERFACE_MODE_TBI:
188  		return "tbi";
189  	case PHY_INTERFACE_MODE_REVMII:
190  		return "rev-mii";
191  	case PHY_INTERFACE_MODE_RMII:
192  		return "rmii";
193  	case PHY_INTERFACE_MODE_REVRMII:
194  		return "rev-rmii";
195  	case PHY_INTERFACE_MODE_RGMII:
196  		return "rgmii";
197  	case PHY_INTERFACE_MODE_RGMII_ID:
198  		return "rgmii-id";
199  	case PHY_INTERFACE_MODE_RGMII_RXID:
200  		return "rgmii-rxid";
201  	case PHY_INTERFACE_MODE_RGMII_TXID:
202  		return "rgmii-txid";
203  	case PHY_INTERFACE_MODE_RTBI:
204  		return "rtbi";
205  	case PHY_INTERFACE_MODE_SMII:
206  		return "smii";
207  	case PHY_INTERFACE_MODE_XGMII:
208  		return "xgmii";
209  	case PHY_INTERFACE_MODE_XLGMII:
210  		return "xlgmii";
211  	case PHY_INTERFACE_MODE_MOCA:
212  		return "moca";
213  	case PHY_INTERFACE_MODE_QSGMII:
214  		return "qsgmii";
215  	case PHY_INTERFACE_MODE_TRGMII:
216  		return "trgmii";
217  	case PHY_INTERFACE_MODE_1000BASEX:
218  		return "1000base-x";
219  	case PHY_INTERFACE_MODE_2500BASEX:
220  		return "2500base-x";
221  	case PHY_INTERFACE_MODE_5GBASER:
222  		return "5gbase-r";
223  	case PHY_INTERFACE_MODE_RXAUI:
224  		return "rxaui";
225  	case PHY_INTERFACE_MODE_XAUI:
226  		return "xaui";
227  	case PHY_INTERFACE_MODE_10GBASER:
228  		return "10gbase-r";
229  	case PHY_INTERFACE_MODE_25GBASER:
230  		return "25gbase-r";
231  	case PHY_INTERFACE_MODE_USXGMII:
232  		return "usxgmii";
233  	case PHY_INTERFACE_MODE_10GKR:
234  		return "10gbase-kr";
235  	case PHY_INTERFACE_MODE_100BASEX:
236  		return "100base-x";
237  	default:
238  		return "unknown";
239  	}
240  }
241  
242  
243  #define PHY_INIT_TIMEOUT	100000
244  #define PHY_FORCE_TIMEOUT	10
245  
246  #define PHY_MAX_ADDR	32
247  
248  /* Used when trying to connect to a specific phy (mii bus id:phy device id) */
249  #define PHY_ID_FMT "%s:%02x"
250  
251  #define MII_BUS_ID_SIZE	61
252  
253  struct device;
254  struct phylink;
255  struct sfp_bus;
256  struct sfp_upstream_ops;
257  struct sk_buff;
258  
259  /**
260   * struct mdio_bus_stats - Statistics counters for MDIO busses
261   * @transfers: Total number of transfers, i.e. @writes + @reads
262   * @errors: Number of MDIO transfers that returned an error
263   * @writes: Number of write transfers
264   * @reads: Number of read transfers
265   * @syncp: Synchronisation for incrementing statistics
266   */
267  struct mdio_bus_stats {
268  	u64_stats_t transfers;
269  	u64_stats_t errors;
270  	u64_stats_t writes;
271  	u64_stats_t reads;
272  	/* Must be last, add new statistics above */
273  	struct u64_stats_sync syncp;
274  };
275  
276  /**
277   * struct phy_package_shared - Shared information in PHY packages
278   * @addr: Common PHY address used to combine PHYs in one package
279   * @refcnt: Number of PHYs connected to this shared data
280   * @flags: Initialization of PHY package
281   * @priv_size: Size of the shared private data @priv
282   * @priv: Driver private data shared across a PHY package
283   *
284   * Represents a shared structure between different phydev's in the same
285   * package, for example a quad PHY. See phy_package_join() and
286   * phy_package_leave().
287   */
288  struct phy_package_shared {
289  	int addr;
290  	refcount_t refcnt;
291  	unsigned long flags;
292  	size_t priv_size;
293  
294  	/* private data pointer */
295  	/* note that this pointer is shared between different phydevs and
296  	 * the user has to take care of appropriate locking. It is allocated
297  	 * and freed automatically by phy_package_join() and
298  	 * phy_package_leave().
299  	 */
300  	void *priv;
301  };
302  
303  /* used as bit number in atomic bitops */
304  #define PHY_SHARED_F_INIT_DONE  0
305  #define PHY_SHARED_F_PROBE_DONE 1
306  
307  /**
308   * struct mii_bus - Represents an MDIO bus
309   *
310   * @owner: Who owns this device
311   * @name: User friendly name for this MDIO device, or driver name
312   * @id: Unique identifier for this bus, typical from bus hierarchy
313   * @priv: Driver private data
314   *
315   * The Bus class for PHYs.  Devices which provide access to
316   * PHYs should register using this structure
317   */
318  struct mii_bus {
319  	struct module *owner;
320  	const char *name;
321  	char id[MII_BUS_ID_SIZE];
322  	void *priv;
323  	/** @read: Perform a read transfer on the bus */
324  	int (*read)(struct mii_bus *bus, int addr, int regnum);
325  	/** @write: Perform a write transfer on the bus */
326  	int (*write)(struct mii_bus *bus, int addr, int regnum, u16 val);
327  	/** @reset: Perform a reset of the bus */
328  	int (*reset)(struct mii_bus *bus);
329  
330  	/** @stats: Statistic counters per device on the bus */
331  	struct mdio_bus_stats stats[PHY_MAX_ADDR];
332  
333  	/**
334  	 * @mdio_lock: A lock to ensure that only one thing can read/write
335  	 * the MDIO bus at a time
336  	 */
337  	struct mutex mdio_lock;
338  
339  	/** @parent: Parent device of this bus */
340  	struct device *parent;
341  	/** @state: State of bus structure */
342  	enum {
343  		MDIOBUS_ALLOCATED = 1,
344  		MDIOBUS_REGISTERED,
345  		MDIOBUS_UNREGISTERED,
346  		MDIOBUS_RELEASED,
347  	} state;
348  
349  	/** @dev: Kernel device representation */
350  	struct device dev;
351  
352  	/** @mdio_map: list of all MDIO devices on bus */
353  	struct mdio_device *mdio_map[PHY_MAX_ADDR];
354  
355  	/** @phy_mask: PHY addresses to be ignored when probing */
356  	u32 phy_mask;
357  
358  	/** @phy_ignore_ta_mask: PHY addresses to ignore the TA/read failure */
359  	u32 phy_ignore_ta_mask;
360  
361  	/**
362  	 * @irq: An array of interrupts, each PHY's interrupt at the index
363  	 * matching its address
364  	 */
365  	int irq[PHY_MAX_ADDR];
366  
367  	/** @reset_delay_us: GPIO reset pulse width in microseconds */
368  	int reset_delay_us;
369  	/** @reset_post_delay_us: GPIO reset deassert delay in microseconds */
370  	int reset_post_delay_us;
371  	/** @reset_gpiod: Reset GPIO descriptor pointer */
372  	struct gpio_desc *reset_gpiod;
373  
374  	/** @probe_capabilities: bus capabilities, used for probing */
375  	enum {
376  		MDIOBUS_NO_CAP = 0,
377  		MDIOBUS_C22,
378  		MDIOBUS_C45,
379  		MDIOBUS_C22_C45,
380  	} probe_capabilities;
381  
382  	/** @shared_lock: protect access to the shared element */
383  	struct mutex shared_lock;
384  
385  	/** @shared: shared state across different PHYs */
386  	struct phy_package_shared *shared[PHY_MAX_ADDR];
387  };
388  #define to_mii_bus(d) container_of(d, struct mii_bus, dev)
389  
390  struct mii_bus *mdiobus_alloc_size(size_t size);
391  
392  /**
393   * mdiobus_alloc - Allocate an MDIO bus structure
394   *
395   * The internal state of the MDIO bus will be set of MDIOBUS_ALLOCATED ready
396   * for the driver to register the bus.
397   */
mdiobus_alloc(void)398  static inline struct mii_bus *mdiobus_alloc(void)
399  {
400  	return mdiobus_alloc_size(0);
401  }
402  
403  int __mdiobus_register(struct mii_bus *bus, struct module *owner);
404  int __devm_mdiobus_register(struct device *dev, struct mii_bus *bus,
405  			    struct module *owner);
406  #define mdiobus_register(bus) __mdiobus_register(bus, THIS_MODULE)
407  #define devm_mdiobus_register(dev, bus) \
408  		__devm_mdiobus_register(dev, bus, THIS_MODULE)
409  
410  void mdiobus_unregister(struct mii_bus *bus);
411  void mdiobus_free(struct mii_bus *bus);
412  struct mii_bus *devm_mdiobus_alloc_size(struct device *dev, int sizeof_priv);
devm_mdiobus_alloc(struct device * dev)413  static inline struct mii_bus *devm_mdiobus_alloc(struct device *dev)
414  {
415  	return devm_mdiobus_alloc_size(dev, 0);
416  }
417  
418  struct mii_bus *mdio_find_bus(const char *mdio_name);
419  struct phy_device *mdiobus_scan(struct mii_bus *bus, int addr);
420  
421  #define PHY_INTERRUPT_DISABLED	false
422  #define PHY_INTERRUPT_ENABLED	true
423  
424  /**
425   * enum phy_state - PHY state machine states:
426   *
427   * @PHY_DOWN: PHY device and driver are not ready for anything.  probe
428   * should be called if and only if the PHY is in this state,
429   * given that the PHY device exists.
430   * - PHY driver probe function will set the state to @PHY_READY
431   *
432   * @PHY_READY: PHY is ready to send and receive packets, but the
433   * controller is not.  By default, PHYs which do not implement
434   * probe will be set to this state by phy_probe().
435   * - start will set the state to UP
436   *
437   * @PHY_UP: The PHY and attached device are ready to do work.
438   * Interrupts should be started here.
439   * - timer moves to @PHY_NOLINK or @PHY_RUNNING
440   *
441   * @PHY_NOLINK: PHY is up, but not currently plugged in.
442   * - irq or timer will set @PHY_RUNNING if link comes back
443   * - phy_stop moves to @PHY_HALTED
444   *
445   * @PHY_RUNNING: PHY is currently up, running, and possibly sending
446   * and/or receiving packets
447   * - irq or timer will set @PHY_NOLINK if link goes down
448   * - phy_stop moves to @PHY_HALTED
449   *
450   * @PHY_CABLETEST: PHY is performing a cable test. Packet reception/sending
451   * is not expected to work, carrier will be indicated as down. PHY will be
452   * poll once per second, or on interrupt for it current state.
453   * Once complete, move to UP to restart the PHY.
454   * - phy_stop aborts the running test and moves to @PHY_HALTED
455   *
456   * @PHY_HALTED: PHY is up, but no polling or interrupts are done. Or
457   * PHY is in an error state.
458   * - phy_start moves to @PHY_UP
459   */
460  enum phy_state {
461  	PHY_DOWN = 0,
462  	PHY_READY,
463  	PHY_HALTED,
464  	PHY_UP,
465  	PHY_RUNNING,
466  	PHY_NOLINK,
467  	PHY_CABLETEST,
468  };
469  
470  #define MDIO_MMD_NUM 32
471  
472  /**
473   * struct phy_c45_device_ids - 802.3-c45 Device Identifiers
474   * @devices_in_package: IEEE 802.3 devices in package register value.
475   * @mmds_present: bit vector of MMDs present.
476   * @device_ids: The device identifer for each present device.
477   */
478  struct phy_c45_device_ids {
479  	u32 devices_in_package;
480  	u32 mmds_present;
481  	u32 device_ids[MDIO_MMD_NUM];
482  };
483  
484  struct macsec_context;
485  struct macsec_ops;
486  
487  /**
488   * struct phy_device - An instance of a PHY
489   *
490   * @mdio: MDIO bus this PHY is on
491   * @drv: Pointer to the driver for this PHY instance
492   * @phy_id: UID for this device found during discovery
493   * @c45_ids: 802.3-c45 Device Identifiers if is_c45.
494   * @is_c45:  Set to true if this PHY uses clause 45 addressing.
495   * @is_internal: Set to true if this PHY is internal to a MAC.
496   * @is_pseudo_fixed_link: Set to true if this PHY is an Ethernet switch, etc.
497   * @is_gigabit_capable: Set to true if PHY supports 1000Mbps
498   * @has_fixups: Set to true if this PHY has fixups/quirks.
499   * @suspended: Set to true if this PHY has been suspended successfully.
500   * @suspended_by_mdio_bus: Set to true if this PHY was suspended by MDIO bus.
501   * @sysfs_links: Internal boolean tracking sysfs symbolic links setup/removal.
502   * @loopback_enabled: Set true if this PHY has been loopbacked successfully.
503   * @downshifted_rate: Set true if link speed has been downshifted.
504   * @is_on_sfp_module: Set true if PHY is located on an SFP module.
505   * @mac_managed_pm: Set true if MAC driver takes of suspending/resuming PHY
506   * @state: State of the PHY for management purposes
507   * @dev_flags: Device-specific flags used by the PHY driver.
508   *		Bits [15:0] are free to use by the PHY driver to communicate
509   *			    driver specific behavior.
510   *		Bits [23:16] are currently reserved for future use.
511   *		Bits [31:24] are reserved for defining generic
512   *			     PHY driver behavior.
513   * @irq: IRQ number of the PHY's interrupt (-1 if none)
514   * @phy_timer: The timer for handling the state machine
515   * @phylink: Pointer to phylink instance for this PHY
516   * @sfp_bus_attached: Flag indicating whether the SFP bus has been attached
517   * @sfp_bus: SFP bus attached to this PHY's fiber port
518   * @attached_dev: The attached enet driver's device instance ptr
519   * @adjust_link: Callback for the enet controller to respond to changes: in the
520   *               link state.
521   * @phy_link_change: Callback for phylink for notification of link change
522   * @macsec_ops: MACsec offloading ops.
523   *
524   * @speed: Current link speed
525   * @duplex: Current duplex
526   * @port: Current port
527   * @pause: Current pause
528   * @asym_pause: Current asymmetric pause
529   * @supported: Combined MAC/PHY supported linkmodes
530   * @advertising: Currently advertised linkmodes
531   * @adv_old: Saved advertised while power saving for WoL
532   * @lp_advertising: Current link partner advertised linkmodes
533   * @eee_broken_modes: Energy efficient ethernet modes which should be prohibited
534   * @autoneg: Flag autoneg being used
535   * @link: Current link state
536   * @autoneg_complete: Flag auto negotiation of the link has completed
537   * @mdix: Current crossover
538   * @mdix_ctrl: User setting of crossover
539   * @interrupts: Flag interrupts have been enabled
540   * @interface: enum phy_interface_t value
541   * @skb: Netlink message for cable diagnostics
542   * @nest: Netlink nest used for cable diagnostics
543   * @ehdr: nNtlink header for cable diagnostics
544   * @phy_led_triggers: Array of LED triggers
545   * @phy_num_led_triggers: Number of triggers in @phy_led_triggers
546   * @led_link_trigger: LED trigger for link up/down
547   * @last_triggered: last LED trigger for link speed
548   * @master_slave_set: User requested master/slave configuration
549   * @master_slave_get: Current master/slave advertisement
550   * @master_slave_state: Current master/slave configuration
551   * @mii_ts: Pointer to time stamper callbacks
552   * @lock:  Mutex for serialization access to PHY
553   * @state_queue: Work queue for state machine
554   * @shared: Pointer to private data shared by phys in one package
555   * @priv: Pointer to driver private data
556   *
557   * interrupts currently only supports enabled or disabled,
558   * but could be changed in the future to support enabling
559   * and disabling specific interrupts
560   *
561   * Contains some infrastructure for polling and interrupt
562   * handling, as well as handling shifts in PHY hardware state
563   */
564  struct phy_device {
565  	struct mdio_device mdio;
566  
567  	/* Information about the PHY type */
568  	/* And management functions */
569  	struct phy_driver *drv;
570  
571  	u32 phy_id;
572  
573  	struct phy_c45_device_ids c45_ids;
574  	unsigned is_c45:1;
575  	unsigned is_internal:1;
576  	unsigned is_pseudo_fixed_link:1;
577  	unsigned is_gigabit_capable:1;
578  	unsigned has_fixups:1;
579  	unsigned suspended:1;
580  	unsigned suspended_by_mdio_bus:1;
581  	unsigned sysfs_links:1;
582  	unsigned loopback_enabled:1;
583  	unsigned downshifted_rate:1;
584  	unsigned is_on_sfp_module:1;
585  	unsigned mac_managed_pm:1;
586  
587  	unsigned autoneg:1;
588  	/* The most recently read link state */
589  	unsigned link:1;
590  	unsigned autoneg_complete:1;
591  
592  	/* Interrupts are enabled */
593  	unsigned interrupts:1;
594  
595  	enum phy_state state;
596  
597  	u32 dev_flags;
598  
599  	phy_interface_t interface;
600  
601  	/*
602  	 * forced speed & duplex (no autoneg)
603  	 * partner speed & duplex & pause (autoneg)
604  	 */
605  	int speed;
606  	int duplex;
607  	int port;
608  	int pause;
609  	int asym_pause;
610  	u8 master_slave_get;
611  	u8 master_slave_set;
612  	u8 master_slave_state;
613  
614  	/* Union of PHY and Attached devices' supported link modes */
615  	/* See ethtool.h for more info */
616  	__ETHTOOL_DECLARE_LINK_MODE_MASK(supported);
617  	__ETHTOOL_DECLARE_LINK_MODE_MASK(advertising);
618  	__ETHTOOL_DECLARE_LINK_MODE_MASK(lp_advertising);
619  	/* used with phy_speed_down */
620  	__ETHTOOL_DECLARE_LINK_MODE_MASK(adv_old);
621  
622  	/* Energy efficient ethernet modes which should be prohibited */
623  	u32 eee_broken_modes;
624  
625  #ifdef CONFIG_LED_TRIGGER_PHY
626  	struct phy_led_trigger *phy_led_triggers;
627  	unsigned int phy_num_led_triggers;
628  	struct phy_led_trigger *last_triggered;
629  
630  	struct phy_led_trigger *led_link_trigger;
631  #endif
632  
633  	/*
634  	 * Interrupt number for this PHY
635  	 * -1 means no interrupt
636  	 */
637  	int irq;
638  
639  	/* private data pointer */
640  	/* For use by PHYs to maintain extra state */
641  	void *priv;
642  
643  	/* shared data pointer */
644  	/* For use by PHYs inside the same package that need a shared state. */
645  	struct phy_package_shared *shared;
646  
647  	/* Reporting cable test results */
648  	struct sk_buff *skb;
649  	void *ehdr;
650  	struct nlattr *nest;
651  
652  	/* Interrupt and Polling infrastructure */
653  	struct delayed_work state_queue;
654  
655  	struct mutex lock;
656  
657  	/* This may be modified under the rtnl lock */
658  	bool sfp_bus_attached;
659  	struct sfp_bus *sfp_bus;
660  	struct phylink *phylink;
661  	struct net_device *attached_dev;
662  	struct mii_timestamper *mii_ts;
663  
664  	u8 mdix;
665  	u8 mdix_ctrl;
666  
667  	void (*phy_link_change)(struct phy_device *phydev, bool up);
668  	void (*adjust_link)(struct net_device *dev);
669  
670  #if IS_ENABLED(CONFIG_MACSEC)
671  	/* MACsec management functions */
672  	const struct macsec_ops *macsec_ops;
673  #endif
674  
675  	ANDROID_KABI_RESERVE(1);
676  	ANDROID_KABI_RESERVE(2);
677  	ANDROID_KABI_RESERVE(3);
678  	ANDROID_KABI_RESERVE(4);
679  };
680  
to_phy_device(const struct device * dev)681  static inline struct phy_device *to_phy_device(const struct device *dev)
682  {
683  	return container_of(to_mdio_device(dev), struct phy_device, mdio);
684  }
685  
686  /**
687   * struct phy_tdr_config - Configuration of a TDR raw test
688   *
689   * @first: Distance for first data collection point
690   * @last: Distance for last data collection point
691   * @step: Step between data collection points
692   * @pair: Bitmap of cable pairs to collect data for
693   *
694   * A structure containing possible configuration parameters
695   * for a TDR cable test. The driver does not need to implement
696   * all the parameters, but should report what is actually used.
697   * All distances are in centimeters.
698   */
699  struct phy_tdr_config {
700  	u32 first;
701  	u32 last;
702  	u32 step;
703  	s8 pair;
704  };
705  #define PHY_PAIR_ALL -1
706  
707  /**
708   * struct phy_driver - Driver structure for a particular PHY type
709   *
710   * @mdiodrv: Data common to all MDIO devices
711   * @phy_id: The result of reading the UID registers of this PHY
712   *   type, and ANDing them with the phy_id_mask.  This driver
713   *   only works for PHYs with IDs which match this field
714   * @name: The friendly name of this PHY type
715   * @phy_id_mask: Defines the important bits of the phy_id
716   * @features: A mandatory list of features (speed, duplex, etc)
717   *   supported by this PHY
718   * @flags: A bitfield defining certain other features this PHY
719   *   supports (like interrupts)
720   * @driver_data: Static driver data
721   *
722   * All functions are optional. If config_aneg or read_status
723   * are not implemented, the phy core uses the genphy versions.
724   * Note that none of these functions should be called from
725   * interrupt time. The goal is for the bus read/write functions
726   * to be able to block when the bus transaction is happening,
727   * and be freed up by an interrupt (The MPC85xx has this ability,
728   * though it is not currently supported in the driver).
729   */
730  struct phy_driver {
731  	struct mdio_driver_common mdiodrv;
732  	u32 phy_id;
733  	char *name;
734  	u32 phy_id_mask;
735  	const unsigned long * const features;
736  	u32 flags;
737  	const void *driver_data;
738  
739  	/**
740  	 * @soft_reset: Called to issue a PHY software reset
741  	 */
742  	int (*soft_reset)(struct phy_device *phydev);
743  
744  	/**
745  	 * @config_init: Called to initialize the PHY,
746  	 * including after a reset
747  	 */
748  	int (*config_init)(struct phy_device *phydev);
749  
750  	/**
751  	 * @probe: Called during discovery.  Used to set
752  	 * up device-specific structures, if any
753  	 */
754  	int (*probe)(struct phy_device *phydev);
755  
756  	/**
757  	 * @get_features: Probe the hardware to determine what
758  	 * abilities it has.  Should only set phydev->supported.
759  	 */
760  	int (*get_features)(struct phy_device *phydev);
761  
762  	/* PHY Power Management */
763  	/** @suspend: Suspend the hardware, saving state if needed */
764  	int (*suspend)(struct phy_device *phydev);
765  	/** @resume: Resume the hardware, restoring state if needed */
766  	int (*resume)(struct phy_device *phydev);
767  
768  	/**
769  	 * @config_aneg: Configures the advertisement and resets
770  	 * autonegotiation if phydev->autoneg is on,
771  	 * forces the speed to the current settings in phydev
772  	 * if phydev->autoneg is off
773  	 */
774  	int (*config_aneg)(struct phy_device *phydev);
775  
776  	/** @aneg_done: Determines the auto negotiation result */
777  	int (*aneg_done)(struct phy_device *phydev);
778  
779  	/** @read_status: Determines the negotiated speed and duplex */
780  	int (*read_status)(struct phy_device *phydev);
781  
782  	/**
783  	 * @config_intr: Enables or disables interrupts.
784  	 * It should also clear any pending interrupts prior to enabling the
785  	 * IRQs and after disabling them.
786  	 */
787  	int (*config_intr)(struct phy_device *phydev);
788  
789  	/** @handle_interrupt: Override default interrupt handling */
790  	irqreturn_t (*handle_interrupt)(struct phy_device *phydev);
791  
792  	/** @remove: Clears up any memory if needed */
793  	void (*remove)(struct phy_device *phydev);
794  
795  	/**
796  	 * @match_phy_device: Returns true if this is a suitable
797  	 * driver for the given phydev.	 If NULL, matching is based on
798  	 * phy_id and phy_id_mask.
799  	 */
800  	int (*match_phy_device)(struct phy_device *phydev);
801  
802  	/**
803  	 * @set_wol: Some devices (e.g. qnap TS-119P II) require PHY
804  	 * register changes to enable Wake on LAN, so set_wol is
805  	 * provided to be called in the ethernet driver's set_wol
806  	 * function.
807  	 */
808  	int (*set_wol)(struct phy_device *dev, struct ethtool_wolinfo *wol);
809  
810  	/**
811  	 * @get_wol: See set_wol, but for checking whether Wake on LAN
812  	 * is enabled.
813  	 */
814  	void (*get_wol)(struct phy_device *dev, struct ethtool_wolinfo *wol);
815  
816  	/**
817  	 * @link_change_notify: Called to inform a PHY device driver
818  	 * when the core is about to change the link state. This
819  	 * callback is supposed to be used as fixup hook for drivers
820  	 * that need to take action when the link state
821  	 * changes. Drivers are by no means allowed to mess with the
822  	 * PHY device structure in their implementations.
823  	 */
824  	void (*link_change_notify)(struct phy_device *dev);
825  
826  	/**
827  	 * @read_mmd: PHY specific driver override for reading a MMD
828  	 * register.  This function is optional for PHY specific
829  	 * drivers.  When not provided, the default MMD read function
830  	 * will be used by phy_read_mmd(), which will use either a
831  	 * direct read for Clause 45 PHYs or an indirect read for
832  	 * Clause 22 PHYs.  devnum is the MMD device number within the
833  	 * PHY device, regnum is the register within the selected MMD
834  	 * device.
835  	 */
836  	int (*read_mmd)(struct phy_device *dev, int devnum, u16 regnum);
837  
838  	/**
839  	 * @write_mmd: PHY specific driver override for writing a MMD
840  	 * register.  This function is optional for PHY specific
841  	 * drivers.  When not provided, the default MMD write function
842  	 * will be used by phy_write_mmd(), which will use either a
843  	 * direct write for Clause 45 PHYs, or an indirect write for
844  	 * Clause 22 PHYs.  devnum is the MMD device number within the
845  	 * PHY device, regnum is the register within the selected MMD
846  	 * device.  val is the value to be written.
847  	 */
848  	int (*write_mmd)(struct phy_device *dev, int devnum, u16 regnum,
849  			 u16 val);
850  
851  	/** @read_page: Return the current PHY register page number */
852  	int (*read_page)(struct phy_device *dev);
853  	/** @write_page: Set the current PHY register page number */
854  	int (*write_page)(struct phy_device *dev, int page);
855  
856  	/**
857  	 * @module_info: Get the size and type of the eeprom contained
858  	 * within a plug-in module
859  	 */
860  	int (*module_info)(struct phy_device *dev,
861  			   struct ethtool_modinfo *modinfo);
862  
863  	/**
864  	 * @module_eeprom: Get the eeprom information from the plug-in
865  	 * module
866  	 */
867  	int (*module_eeprom)(struct phy_device *dev,
868  			     struct ethtool_eeprom *ee, u8 *data);
869  
870  	/** @cable_test_start: Start a cable test */
871  	int (*cable_test_start)(struct phy_device *dev);
872  
873  	/**  @cable_test_tdr_start: Start a raw TDR cable test */
874  	int (*cable_test_tdr_start)(struct phy_device *dev,
875  				    const struct phy_tdr_config *config);
876  
877  	/**
878  	 * @cable_test_get_status: Once per second, or on interrupt,
879  	 * request the status of the test.
880  	 */
881  	int (*cable_test_get_status)(struct phy_device *dev, bool *finished);
882  
883  	/* Get statistics from the PHY using ethtool */
884  	/** @get_sset_count: Number of statistic counters */
885  	int (*get_sset_count)(struct phy_device *dev);
886  	/** @get_strings: Names of the statistic counters */
887  	void (*get_strings)(struct phy_device *dev, u8 *data);
888  	/** @get_stats: Return the statistic counter values */
889  	void (*get_stats)(struct phy_device *dev,
890  			  struct ethtool_stats *stats, u64 *data);
891  
892  	/* Get and Set PHY tunables */
893  	/** @get_tunable: Return the value of a tunable */
894  	int (*get_tunable)(struct phy_device *dev,
895  			   struct ethtool_tunable *tuna, void *data);
896  	/** @set_tunable: Set the value of a tunable */
897  	int (*set_tunable)(struct phy_device *dev,
898  			    struct ethtool_tunable *tuna,
899  			    const void *data);
900  	/** @set_loopback: Set the loopback mood of the PHY */
901  	int (*set_loopback)(struct phy_device *dev, bool enable);
902  	/** @get_sqi: Get the signal quality indication */
903  	int (*get_sqi)(struct phy_device *dev);
904  	/** @get_sqi_max: Get the maximum signal quality indication */
905  	int (*get_sqi_max)(struct phy_device *dev);
906  
907  	ANDROID_KABI_RESERVE(1);
908  	ANDROID_KABI_RESERVE(2);
909  };
910  #define to_phy_driver(d) container_of(to_mdio_common_driver(d),		\
911  				      struct phy_driver, mdiodrv)
912  
913  #define PHY_ANY_ID "MATCH ANY PHY"
914  #define PHY_ANY_UID 0xffffffff
915  
916  #define PHY_ID_MATCH_EXACT(id) .phy_id = (id), .phy_id_mask = GENMASK(31, 0)
917  #define PHY_ID_MATCH_MODEL(id) .phy_id = (id), .phy_id_mask = GENMASK(31, 4)
918  #define PHY_ID_MATCH_VENDOR(id) .phy_id = (id), .phy_id_mask = GENMASK(31, 10)
919  
920  /* A Structure for boards to register fixups with the PHY Lib */
921  struct phy_fixup {
922  	struct list_head list;
923  	char bus_id[MII_BUS_ID_SIZE + 3];
924  	u32 phy_uid;
925  	u32 phy_uid_mask;
926  	int (*run)(struct phy_device *phydev);
927  };
928  
929  const char *phy_speed_to_str(int speed);
930  const char *phy_duplex_to_str(unsigned int duplex);
931  
932  /* A structure for mapping a particular speed and duplex
933   * combination to a particular SUPPORTED and ADVERTISED value
934   */
935  struct phy_setting {
936  	u32 speed;
937  	u8 duplex;
938  	u8 bit;
939  };
940  
941  const struct phy_setting *
942  phy_lookup_setting(int speed, int duplex, const unsigned long *mask,
943  		   bool exact);
944  size_t phy_speeds(unsigned int *speeds, size_t size,
945  		  unsigned long *mask);
946  void of_set_phy_supported(struct phy_device *phydev);
947  void of_set_phy_eee_broken(struct phy_device *phydev);
948  int phy_speed_down_core(struct phy_device *phydev);
949  
950  /**
951   * phy_is_started - Convenience function to check whether PHY is started
952   * @phydev: The phy_device struct
953   */
phy_is_started(struct phy_device * phydev)954  static inline bool phy_is_started(struct phy_device *phydev)
955  {
956  	return phydev->state >= PHY_UP;
957  }
958  
959  void phy_resolve_aneg_pause(struct phy_device *phydev);
960  void phy_resolve_aneg_linkmode(struct phy_device *phydev);
961  void phy_check_downshift(struct phy_device *phydev);
962  
963  /**
964   * phy_read - Convenience function for reading a given PHY register
965   * @phydev: the phy_device struct
966   * @regnum: register number to read
967   *
968   * NOTE: MUST NOT be called from interrupt context,
969   * because the bus read/write functions may wait for an interrupt
970   * to conclude the operation.
971   */
phy_read(struct phy_device * phydev,u32 regnum)972  static inline int phy_read(struct phy_device *phydev, u32 regnum)
973  {
974  	return mdiobus_read(phydev->mdio.bus, phydev->mdio.addr, regnum);
975  }
976  
977  #define phy_read_poll_timeout(phydev, regnum, val, cond, sleep_us, \
978  				timeout_us, sleep_before_read) \
979  ({ \
980  	int __ret = read_poll_timeout(phy_read, val, (cond) || val < 0, \
981  		sleep_us, timeout_us, sleep_before_read, phydev, regnum); \
982  	if (val <  0) \
983  		__ret = val; \
984  	if (__ret) \
985  		phydev_err(phydev, "%s failed: %d\n", __func__, __ret); \
986  	__ret; \
987  })
988  
989  
990  /**
991   * __phy_read - convenience function for reading a given PHY register
992   * @phydev: the phy_device struct
993   * @regnum: register number to read
994   *
995   * The caller must have taken the MDIO bus lock.
996   */
__phy_read(struct phy_device * phydev,u32 regnum)997  static inline int __phy_read(struct phy_device *phydev, u32 regnum)
998  {
999  	return __mdiobus_read(phydev->mdio.bus, phydev->mdio.addr, regnum);
1000  }
1001  
1002  /**
1003   * phy_write - Convenience function for writing a given PHY register
1004   * @phydev: the phy_device struct
1005   * @regnum: register number to write
1006   * @val: value to write to @regnum
1007   *
1008   * NOTE: MUST NOT be called from interrupt context,
1009   * because the bus read/write functions may wait for an interrupt
1010   * to conclude the operation.
1011   */
phy_write(struct phy_device * phydev,u32 regnum,u16 val)1012  static inline int phy_write(struct phy_device *phydev, u32 regnum, u16 val)
1013  {
1014  	return mdiobus_write(phydev->mdio.bus, phydev->mdio.addr, regnum, val);
1015  }
1016  
1017  /**
1018   * __phy_write - Convenience function for writing a given PHY register
1019   * @phydev: the phy_device struct
1020   * @regnum: register number to write
1021   * @val: value to write to @regnum
1022   *
1023   * The caller must have taken the MDIO bus lock.
1024   */
__phy_write(struct phy_device * phydev,u32 regnum,u16 val)1025  static inline int __phy_write(struct phy_device *phydev, u32 regnum, u16 val)
1026  {
1027  	return __mdiobus_write(phydev->mdio.bus, phydev->mdio.addr, regnum,
1028  			       val);
1029  }
1030  
1031  /**
1032   * __phy_modify_changed() - Convenience function for modifying a PHY register
1033   * @phydev: a pointer to a &struct phy_device
1034   * @regnum: register number
1035   * @mask: bit mask of bits to clear
1036   * @set: bit mask of bits to set
1037   *
1038   * Unlocked helper function which allows a PHY register to be modified as
1039   * new register value = (old register value & ~mask) | set
1040   *
1041   * Returns negative errno, 0 if there was no change, and 1 in case of change
1042   */
__phy_modify_changed(struct phy_device * phydev,u32 regnum,u16 mask,u16 set)1043  static inline int __phy_modify_changed(struct phy_device *phydev, u32 regnum,
1044  				       u16 mask, u16 set)
1045  {
1046  	return __mdiobus_modify_changed(phydev->mdio.bus, phydev->mdio.addr,
1047  					regnum, mask, set);
1048  }
1049  
1050  /*
1051   * phy_read_mmd - Convenience function for reading a register
1052   * from an MMD on a given PHY.
1053   */
1054  int phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum);
1055  
1056  /**
1057   * phy_read_mmd_poll_timeout - Periodically poll a PHY register until a
1058   *                             condition is met or a timeout occurs
1059   *
1060   * @phydev: The phy_device struct
1061   * @devaddr: The MMD to read from
1062   * @regnum: The register on the MMD to read
1063   * @val: Variable to read the register into
1064   * @cond: Break condition (usually involving @val)
1065   * @sleep_us: Maximum time to sleep between reads in us (0
1066   *            tight-loops).  Should be less than ~20ms since usleep_range
1067   *            is used (see Documentation/timers/timers-howto.rst).
1068   * @timeout_us: Timeout in us, 0 means never timeout
1069   * @sleep_before_read: if it is true, sleep @sleep_us before read.
1070   * Returns 0 on success and -ETIMEDOUT upon a timeout. In either
1071   * case, the last read value at @args is stored in @val. Must not
1072   * be called from atomic context if sleep_us or timeout_us are used.
1073   */
1074  #define phy_read_mmd_poll_timeout(phydev, devaddr, regnum, val, cond, \
1075  				  sleep_us, timeout_us, sleep_before_read) \
1076  ({ \
1077  	int __ret = read_poll_timeout(phy_read_mmd, val, (cond) || val < 0, \
1078  				  sleep_us, timeout_us, sleep_before_read, \
1079  				  phydev, devaddr, regnum); \
1080  	if (val <  0) \
1081  		__ret = val; \
1082  	if (__ret) \
1083  		phydev_err(phydev, "%s failed: %d\n", __func__, __ret); \
1084  	__ret; \
1085  })
1086  
1087  /*
1088   * __phy_read_mmd - Convenience function for reading a register
1089   * from an MMD on a given PHY.
1090   */
1091  int __phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum);
1092  
1093  /*
1094   * phy_write_mmd - Convenience function for writing a register
1095   * on an MMD on a given PHY.
1096   */
1097  int phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val);
1098  
1099  /*
1100   * __phy_write_mmd - Convenience function for writing a register
1101   * on an MMD on a given PHY.
1102   */
1103  int __phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val);
1104  
1105  int __phy_modify_changed(struct phy_device *phydev, u32 regnum, u16 mask,
1106  			 u16 set);
1107  int phy_modify_changed(struct phy_device *phydev, u32 regnum, u16 mask,
1108  		       u16 set);
1109  int __phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set);
1110  int phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set);
1111  
1112  int __phy_modify_mmd_changed(struct phy_device *phydev, int devad, u32 regnum,
1113  			     u16 mask, u16 set);
1114  int phy_modify_mmd_changed(struct phy_device *phydev, int devad, u32 regnum,
1115  			   u16 mask, u16 set);
1116  int __phy_modify_mmd(struct phy_device *phydev, int devad, u32 regnum,
1117  		     u16 mask, u16 set);
1118  int phy_modify_mmd(struct phy_device *phydev, int devad, u32 regnum,
1119  		   u16 mask, u16 set);
1120  
1121  /**
1122   * __phy_set_bits - Convenience function for setting bits in a PHY register
1123   * @phydev: the phy_device struct
1124   * @regnum: register number to write
1125   * @val: bits to set
1126   *
1127   * The caller must have taken the MDIO bus lock.
1128   */
__phy_set_bits(struct phy_device * phydev,u32 regnum,u16 val)1129  static inline int __phy_set_bits(struct phy_device *phydev, u32 regnum, u16 val)
1130  {
1131  	return __phy_modify(phydev, regnum, 0, val);
1132  }
1133  
1134  /**
1135   * __phy_clear_bits - Convenience function for clearing bits in a PHY register
1136   * @phydev: the phy_device struct
1137   * @regnum: register number to write
1138   * @val: bits to clear
1139   *
1140   * The caller must have taken the MDIO bus lock.
1141   */
__phy_clear_bits(struct phy_device * phydev,u32 regnum,u16 val)1142  static inline int __phy_clear_bits(struct phy_device *phydev, u32 regnum,
1143  				   u16 val)
1144  {
1145  	return __phy_modify(phydev, regnum, val, 0);
1146  }
1147  
1148  /**
1149   * phy_set_bits - Convenience function for setting bits in a PHY register
1150   * @phydev: the phy_device struct
1151   * @regnum: register number to write
1152   * @val: bits to set
1153   */
phy_set_bits(struct phy_device * phydev,u32 regnum,u16 val)1154  static inline int phy_set_bits(struct phy_device *phydev, u32 regnum, u16 val)
1155  {
1156  	return phy_modify(phydev, regnum, 0, val);
1157  }
1158  
1159  /**
1160   * phy_clear_bits - Convenience function for clearing bits in a PHY register
1161   * @phydev: the phy_device struct
1162   * @regnum: register number to write
1163   * @val: bits to clear
1164   */
phy_clear_bits(struct phy_device * phydev,u32 regnum,u16 val)1165  static inline int phy_clear_bits(struct phy_device *phydev, u32 regnum, u16 val)
1166  {
1167  	return phy_modify(phydev, regnum, val, 0);
1168  }
1169  
1170  /**
1171   * __phy_set_bits_mmd - Convenience function for setting bits in a register
1172   * on MMD
1173   * @phydev: the phy_device struct
1174   * @devad: the MMD containing register to modify
1175   * @regnum: register number to modify
1176   * @val: bits to set
1177   *
1178   * The caller must have taken the MDIO bus lock.
1179   */
__phy_set_bits_mmd(struct phy_device * phydev,int devad,u32 regnum,u16 val)1180  static inline int __phy_set_bits_mmd(struct phy_device *phydev, int devad,
1181  		u32 regnum, u16 val)
1182  {
1183  	return __phy_modify_mmd(phydev, devad, regnum, 0, val);
1184  }
1185  
1186  /**
1187   * __phy_clear_bits_mmd - Convenience function for clearing bits in a register
1188   * on MMD
1189   * @phydev: the phy_device struct
1190   * @devad: the MMD containing register to modify
1191   * @regnum: register number to modify
1192   * @val: bits to clear
1193   *
1194   * The caller must have taken the MDIO bus lock.
1195   */
__phy_clear_bits_mmd(struct phy_device * phydev,int devad,u32 regnum,u16 val)1196  static inline int __phy_clear_bits_mmd(struct phy_device *phydev, int devad,
1197  		u32 regnum, u16 val)
1198  {
1199  	return __phy_modify_mmd(phydev, devad, regnum, val, 0);
1200  }
1201  
1202  /**
1203   * phy_set_bits_mmd - Convenience function for setting bits in a register
1204   * on MMD
1205   * @phydev: the phy_device struct
1206   * @devad: the MMD containing register to modify
1207   * @regnum: register number to modify
1208   * @val: bits to set
1209   */
phy_set_bits_mmd(struct phy_device * phydev,int devad,u32 regnum,u16 val)1210  static inline int phy_set_bits_mmd(struct phy_device *phydev, int devad,
1211  		u32 regnum, u16 val)
1212  {
1213  	return phy_modify_mmd(phydev, devad, regnum, 0, val);
1214  }
1215  
1216  /**
1217   * phy_clear_bits_mmd - Convenience function for clearing bits in a register
1218   * on MMD
1219   * @phydev: the phy_device struct
1220   * @devad: the MMD containing register to modify
1221   * @regnum: register number to modify
1222   * @val: bits to clear
1223   */
phy_clear_bits_mmd(struct phy_device * phydev,int devad,u32 regnum,u16 val)1224  static inline int phy_clear_bits_mmd(struct phy_device *phydev, int devad,
1225  		u32 regnum, u16 val)
1226  {
1227  	return phy_modify_mmd(phydev, devad, regnum, val, 0);
1228  }
1229  
1230  /**
1231   * phy_interrupt_is_valid - Convenience function for testing a given PHY irq
1232   * @phydev: the phy_device struct
1233   *
1234   * NOTE: must be kept in sync with addition/removal of PHY_POLL and
1235   * PHY_MAC_INTERRUPT
1236   */
phy_interrupt_is_valid(struct phy_device * phydev)1237  static inline bool phy_interrupt_is_valid(struct phy_device *phydev)
1238  {
1239  	return phydev->irq != PHY_POLL && phydev->irq != PHY_MAC_INTERRUPT;
1240  }
1241  
1242  /**
1243   * phy_polling_mode - Convenience function for testing whether polling is
1244   * used to detect PHY status changes
1245   * @phydev: the phy_device struct
1246   */
phy_polling_mode(struct phy_device * phydev)1247  static inline bool phy_polling_mode(struct phy_device *phydev)
1248  {
1249  	if (phydev->state == PHY_CABLETEST)
1250  		if (phydev->drv->flags & PHY_POLL_CABLE_TEST)
1251  			return true;
1252  
1253  	return phydev->irq == PHY_POLL;
1254  }
1255  
1256  /**
1257   * phy_has_hwtstamp - Tests whether a PHY time stamp configuration.
1258   * @phydev: the phy_device struct
1259   */
phy_has_hwtstamp(struct phy_device * phydev)1260  static inline bool phy_has_hwtstamp(struct phy_device *phydev)
1261  {
1262  	return phydev && phydev->mii_ts && phydev->mii_ts->hwtstamp;
1263  }
1264  
1265  /**
1266   * phy_has_rxtstamp - Tests whether a PHY supports receive time stamping.
1267   * @phydev: the phy_device struct
1268   */
phy_has_rxtstamp(struct phy_device * phydev)1269  static inline bool phy_has_rxtstamp(struct phy_device *phydev)
1270  {
1271  	return phydev && phydev->mii_ts && phydev->mii_ts->rxtstamp;
1272  }
1273  
1274  /**
1275   * phy_has_tsinfo - Tests whether a PHY reports time stamping and/or
1276   * PTP hardware clock capabilities.
1277   * @phydev: the phy_device struct
1278   */
phy_has_tsinfo(struct phy_device * phydev)1279  static inline bool phy_has_tsinfo(struct phy_device *phydev)
1280  {
1281  	return phydev && phydev->mii_ts && phydev->mii_ts->ts_info;
1282  }
1283  
1284  /**
1285   * phy_has_txtstamp - Tests whether a PHY supports transmit time stamping.
1286   * @phydev: the phy_device struct
1287   */
phy_has_txtstamp(struct phy_device * phydev)1288  static inline bool phy_has_txtstamp(struct phy_device *phydev)
1289  {
1290  	return phydev && phydev->mii_ts && phydev->mii_ts->txtstamp;
1291  }
1292  
phy_hwtstamp(struct phy_device * phydev,struct ifreq * ifr)1293  static inline int phy_hwtstamp(struct phy_device *phydev, struct ifreq *ifr)
1294  {
1295  	return phydev->mii_ts->hwtstamp(phydev->mii_ts, ifr);
1296  }
1297  
phy_rxtstamp(struct phy_device * phydev,struct sk_buff * skb,int type)1298  static inline bool phy_rxtstamp(struct phy_device *phydev, struct sk_buff *skb,
1299  				int type)
1300  {
1301  	return phydev->mii_ts->rxtstamp(phydev->mii_ts, skb, type);
1302  }
1303  
phy_ts_info(struct phy_device * phydev,struct ethtool_ts_info * tsinfo)1304  static inline int phy_ts_info(struct phy_device *phydev,
1305  			      struct ethtool_ts_info *tsinfo)
1306  {
1307  	return phydev->mii_ts->ts_info(phydev->mii_ts, tsinfo);
1308  }
1309  
phy_txtstamp(struct phy_device * phydev,struct sk_buff * skb,int type)1310  static inline void phy_txtstamp(struct phy_device *phydev, struct sk_buff *skb,
1311  				int type)
1312  {
1313  	phydev->mii_ts->txtstamp(phydev->mii_ts, skb, type);
1314  }
1315  
1316  /**
1317   * phy_is_internal - Convenience function for testing if a PHY is internal
1318   * @phydev: the phy_device struct
1319   */
phy_is_internal(struct phy_device * phydev)1320  static inline bool phy_is_internal(struct phy_device *phydev)
1321  {
1322  	return phydev->is_internal;
1323  }
1324  
1325  /**
1326   * phy_on_sfp - Convenience function for testing if a PHY is on an SFP module
1327   * @phydev: the phy_device struct
1328   */
phy_on_sfp(struct phy_device * phydev)1329  static inline bool phy_on_sfp(struct phy_device *phydev)
1330  {
1331  	return phydev->is_on_sfp_module;
1332  }
1333  
1334  /**
1335   * phy_interface_mode_is_rgmii - Convenience function for testing if a
1336   * PHY interface mode is RGMII (all variants)
1337   * @mode: the &phy_interface_t enum
1338   */
phy_interface_mode_is_rgmii(phy_interface_t mode)1339  static inline bool phy_interface_mode_is_rgmii(phy_interface_t mode)
1340  {
1341  	return mode >= PHY_INTERFACE_MODE_RGMII &&
1342  		mode <= PHY_INTERFACE_MODE_RGMII_TXID;
1343  };
1344  
1345  /**
1346   * phy_interface_mode_is_8023z() - does the PHY interface mode use 802.3z
1347   *   negotiation
1348   * @mode: one of &enum phy_interface_t
1349   *
1350   * Returns true if the PHY interface mode uses the 16-bit negotiation
1351   * word as defined in 802.3z. (See 802.3-2015 37.2.1 Config_Reg encoding)
1352   */
phy_interface_mode_is_8023z(phy_interface_t mode)1353  static inline bool phy_interface_mode_is_8023z(phy_interface_t mode)
1354  {
1355  	return mode == PHY_INTERFACE_MODE_1000BASEX ||
1356  	       mode == PHY_INTERFACE_MODE_2500BASEX;
1357  }
1358  
1359  /**
1360   * phy_interface_is_rgmii - Convenience function for testing if a PHY interface
1361   * is RGMII (all variants)
1362   * @phydev: the phy_device struct
1363   */
phy_interface_is_rgmii(struct phy_device * phydev)1364  static inline bool phy_interface_is_rgmii(struct phy_device *phydev)
1365  {
1366  	return phy_interface_mode_is_rgmii(phydev->interface);
1367  };
1368  
1369  /**
1370   * phy_is_pseudo_fixed_link - Convenience function for testing if this
1371   * PHY is the CPU port facing side of an Ethernet switch, or similar.
1372   * @phydev: the phy_device struct
1373   */
phy_is_pseudo_fixed_link(struct phy_device * phydev)1374  static inline bool phy_is_pseudo_fixed_link(struct phy_device *phydev)
1375  {
1376  	return phydev->is_pseudo_fixed_link;
1377  }
1378  
1379  int phy_save_page(struct phy_device *phydev);
1380  int phy_select_page(struct phy_device *phydev, int page);
1381  int phy_restore_page(struct phy_device *phydev, int oldpage, int ret);
1382  int phy_read_paged(struct phy_device *phydev, int page, u32 regnum);
1383  int phy_write_paged(struct phy_device *phydev, int page, u32 regnum, u16 val);
1384  int phy_modify_paged_changed(struct phy_device *phydev, int page, u32 regnum,
1385  			     u16 mask, u16 set);
1386  int phy_modify_paged(struct phy_device *phydev, int page, u32 regnum,
1387  		     u16 mask, u16 set);
1388  
1389  struct phy_device *phy_device_create(struct mii_bus *bus, int addr, u32 phy_id,
1390  				     bool is_c45,
1391  				     struct phy_c45_device_ids *c45_ids);
1392  #if IS_ENABLED(CONFIG_PHYLIB)
1393  int fwnode_get_phy_id(struct fwnode_handle *fwnode, u32 *phy_id);
1394  struct mdio_device *fwnode_mdio_find_device(struct fwnode_handle *fwnode);
1395  struct phy_device *fwnode_phy_find_device(struct fwnode_handle *phy_fwnode);
1396  struct phy_device *device_phy_find_device(struct device *dev);
1397  struct fwnode_handle *fwnode_get_phy_node(struct fwnode_handle *fwnode);
1398  struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45);
1399  int phy_device_register(struct phy_device *phy);
1400  void phy_device_free(struct phy_device *phydev);
1401  #else
fwnode_get_phy_id(struct fwnode_handle * fwnode,u32 * phy_id)1402  static inline int fwnode_get_phy_id(struct fwnode_handle *fwnode, u32 *phy_id)
1403  {
1404  	return 0;
1405  }
1406  static inline
fwnode_mdio_find_device(struct fwnode_handle * fwnode)1407  struct mdio_device *fwnode_mdio_find_device(struct fwnode_handle *fwnode)
1408  {
1409  	return 0;
1410  }
1411  
1412  static inline
fwnode_phy_find_device(struct fwnode_handle * phy_fwnode)1413  struct phy_device *fwnode_phy_find_device(struct fwnode_handle *phy_fwnode)
1414  {
1415  	return NULL;
1416  }
1417  
device_phy_find_device(struct device * dev)1418  static inline struct phy_device *device_phy_find_device(struct device *dev)
1419  {
1420  	return NULL;
1421  }
1422  
1423  static inline
fwnode_get_phy_node(struct fwnode_handle * fwnode)1424  struct fwnode_handle *fwnode_get_phy_node(struct fwnode_handle *fwnode)
1425  {
1426  	return NULL;
1427  }
1428  
1429  static inline
get_phy_device(struct mii_bus * bus,int addr,bool is_c45)1430  struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45)
1431  {
1432  	return NULL;
1433  }
1434  
phy_device_register(struct phy_device * phy)1435  static inline int phy_device_register(struct phy_device *phy)
1436  {
1437  	return 0;
1438  }
1439  
phy_device_free(struct phy_device * phydev)1440  static inline void phy_device_free(struct phy_device *phydev) { }
1441  #endif /* CONFIG_PHYLIB */
1442  void phy_device_remove(struct phy_device *phydev);
1443  int phy_get_c45_ids(struct phy_device *phydev);
1444  int phy_init_hw(struct phy_device *phydev);
1445  int phy_suspend(struct phy_device *phydev);
1446  int phy_resume(struct phy_device *phydev);
1447  int __phy_resume(struct phy_device *phydev);
1448  int phy_loopback(struct phy_device *phydev, bool enable);
1449  void phy_sfp_attach(void *upstream, struct sfp_bus *bus);
1450  void phy_sfp_detach(void *upstream, struct sfp_bus *bus);
1451  int phy_sfp_probe(struct phy_device *phydev,
1452  	          const struct sfp_upstream_ops *ops);
1453  struct phy_device *phy_attach(struct net_device *dev, const char *bus_id,
1454  			      phy_interface_t interface);
1455  struct phy_device *phy_find_first(struct mii_bus *bus);
1456  int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
1457  		      u32 flags, phy_interface_t interface);
1458  int phy_connect_direct(struct net_device *dev, struct phy_device *phydev,
1459  		       void (*handler)(struct net_device *),
1460  		       phy_interface_t interface);
1461  struct phy_device *phy_connect(struct net_device *dev, const char *bus_id,
1462  			       void (*handler)(struct net_device *),
1463  			       phy_interface_t interface);
1464  void phy_disconnect(struct phy_device *phydev);
1465  void phy_detach(struct phy_device *phydev);
1466  void phy_start(struct phy_device *phydev);
1467  void phy_stop(struct phy_device *phydev);
1468  int phy_config_aneg(struct phy_device *phydev);
1469  int phy_start_aneg(struct phy_device *phydev);
1470  int phy_aneg_done(struct phy_device *phydev);
1471  int phy_speed_down(struct phy_device *phydev, bool sync);
1472  int phy_speed_up(struct phy_device *phydev);
1473  
1474  int phy_restart_aneg(struct phy_device *phydev);
1475  int phy_reset_after_clk_enable(struct phy_device *phydev);
1476  
1477  #if IS_ENABLED(CONFIG_PHYLIB)
1478  int phy_start_cable_test(struct phy_device *phydev,
1479  			 struct netlink_ext_ack *extack);
1480  int phy_start_cable_test_tdr(struct phy_device *phydev,
1481  			     struct netlink_ext_ack *extack,
1482  			     const struct phy_tdr_config *config);
1483  #else
1484  static inline
phy_start_cable_test(struct phy_device * phydev,struct netlink_ext_ack * extack)1485  int phy_start_cable_test(struct phy_device *phydev,
1486  			 struct netlink_ext_ack *extack)
1487  {
1488  	NL_SET_ERR_MSG(extack, "Kernel not compiled with PHYLIB support");
1489  	return -EOPNOTSUPP;
1490  }
1491  static inline
phy_start_cable_test_tdr(struct phy_device * phydev,struct netlink_ext_ack * extack,const struct phy_tdr_config * config)1492  int phy_start_cable_test_tdr(struct phy_device *phydev,
1493  			     struct netlink_ext_ack *extack,
1494  			     const struct phy_tdr_config *config)
1495  {
1496  	NL_SET_ERR_MSG(extack, "Kernel not compiled with PHYLIB support");
1497  	return -EOPNOTSUPP;
1498  }
1499  #endif
1500  
1501  int phy_cable_test_result(struct phy_device *phydev, u8 pair, u16 result);
1502  int phy_cable_test_fault_length(struct phy_device *phydev, u8 pair,
1503  				u16 cm);
1504  
phy_device_reset(struct phy_device * phydev,int value)1505  static inline void phy_device_reset(struct phy_device *phydev, int value)
1506  {
1507  	mdio_device_reset(&phydev->mdio, value);
1508  }
1509  
1510  #define phydev_err(_phydev, format, args...)	\
1511  	dev_err(&_phydev->mdio.dev, format, ##args)
1512  
1513  #define phydev_info(_phydev, format, args...)	\
1514  	dev_info(&_phydev->mdio.dev, format, ##args)
1515  
1516  #define phydev_warn(_phydev, format, args...)	\
1517  	dev_warn(&_phydev->mdio.dev, format, ##args)
1518  
1519  #define phydev_dbg(_phydev, format, args...)	\
1520  	dev_dbg(&_phydev->mdio.dev, format, ##args)
1521  
phydev_name(const struct phy_device * phydev)1522  static inline const char *phydev_name(const struct phy_device *phydev)
1523  {
1524  	return dev_name(&phydev->mdio.dev);
1525  }
1526  
phy_lock_mdio_bus(struct phy_device * phydev)1527  static inline void phy_lock_mdio_bus(struct phy_device *phydev)
1528  {
1529  	mutex_lock(&phydev->mdio.bus->mdio_lock);
1530  }
1531  
phy_unlock_mdio_bus(struct phy_device * phydev)1532  static inline void phy_unlock_mdio_bus(struct phy_device *phydev)
1533  {
1534  	mutex_unlock(&phydev->mdio.bus->mdio_lock);
1535  }
1536  
1537  void phy_attached_print(struct phy_device *phydev, const char *fmt, ...)
1538  	__printf(2, 3);
1539  char *phy_attached_info_irq(struct phy_device *phydev)
1540  	__malloc;
1541  void phy_attached_info(struct phy_device *phydev);
1542  
1543  /* Clause 22 PHY */
1544  int genphy_read_abilities(struct phy_device *phydev);
1545  int genphy_setup_forced(struct phy_device *phydev);
1546  int genphy_restart_aneg(struct phy_device *phydev);
1547  int genphy_check_and_restart_aneg(struct phy_device *phydev, bool restart);
1548  int genphy_config_eee_advert(struct phy_device *phydev);
1549  int __genphy_config_aneg(struct phy_device *phydev, bool changed);
1550  int genphy_aneg_done(struct phy_device *phydev);
1551  int genphy_update_link(struct phy_device *phydev);
1552  int genphy_read_lpa(struct phy_device *phydev);
1553  int genphy_read_status_fixed(struct phy_device *phydev);
1554  int genphy_read_status(struct phy_device *phydev);
1555  int genphy_suspend(struct phy_device *phydev);
1556  int genphy_resume(struct phy_device *phydev);
1557  int genphy_loopback(struct phy_device *phydev, bool enable);
1558  int genphy_soft_reset(struct phy_device *phydev);
1559  irqreturn_t genphy_handle_interrupt_no_ack(struct phy_device *phydev);
1560  
genphy_config_aneg(struct phy_device * phydev)1561  static inline int genphy_config_aneg(struct phy_device *phydev)
1562  {
1563  	return __genphy_config_aneg(phydev, false);
1564  }
1565  
genphy_no_config_intr(struct phy_device * phydev)1566  static inline int genphy_no_config_intr(struct phy_device *phydev)
1567  {
1568  	return 0;
1569  }
1570  int genphy_read_mmd_unsupported(struct phy_device *phdev, int devad,
1571  				u16 regnum);
1572  int genphy_write_mmd_unsupported(struct phy_device *phdev, int devnum,
1573  				 u16 regnum, u16 val);
1574  
1575  /* Clause 37 */
1576  int genphy_c37_config_aneg(struct phy_device *phydev);
1577  int genphy_c37_read_status(struct phy_device *phydev);
1578  
1579  /* Clause 45 PHY */
1580  int genphy_c45_restart_aneg(struct phy_device *phydev);
1581  int genphy_c45_check_and_restart_aneg(struct phy_device *phydev, bool restart);
1582  int genphy_c45_aneg_done(struct phy_device *phydev);
1583  int genphy_c45_read_link(struct phy_device *phydev);
1584  int genphy_c45_read_lpa(struct phy_device *phydev);
1585  int genphy_c45_read_pma(struct phy_device *phydev);
1586  int genphy_c45_pma_setup_forced(struct phy_device *phydev);
1587  int genphy_c45_an_config_aneg(struct phy_device *phydev);
1588  int genphy_c45_an_disable_aneg(struct phy_device *phydev);
1589  int genphy_c45_read_mdix(struct phy_device *phydev);
1590  int genphy_c45_pma_read_abilities(struct phy_device *phydev);
1591  int genphy_c45_read_status(struct phy_device *phydev);
1592  int genphy_c45_config_aneg(struct phy_device *phydev);
1593  int genphy_c45_loopback(struct phy_device *phydev, bool enable);
1594  int genphy_c45_pma_resume(struct phy_device *phydev);
1595  int genphy_c45_pma_suspend(struct phy_device *phydev);
1596  
1597  /* Generic C45 PHY driver */
1598  extern struct phy_driver genphy_c45_driver;
1599  
1600  /* The gen10g_* functions are the old Clause 45 stub */
1601  int gen10g_config_aneg(struct phy_device *phydev);
1602  
phy_read_status(struct phy_device * phydev)1603  static inline int phy_read_status(struct phy_device *phydev)
1604  {
1605  	if (!phydev->drv)
1606  		return -EIO;
1607  
1608  	if (phydev->drv->read_status)
1609  		return phydev->drv->read_status(phydev);
1610  	else
1611  		return genphy_read_status(phydev);
1612  }
1613  
1614  void phy_driver_unregister(struct phy_driver *drv);
1615  void phy_drivers_unregister(struct phy_driver *drv, int n);
1616  int phy_driver_register(struct phy_driver *new_driver, struct module *owner);
1617  int phy_drivers_register(struct phy_driver *new_driver, int n,
1618  			 struct module *owner);
1619  void phy_error(struct phy_device *phydev);
1620  void phy_state_machine(struct work_struct *work);
1621  void phy_queue_state_machine(struct phy_device *phydev, unsigned long jiffies);
1622  void phy_trigger_machine(struct phy_device *phydev);
1623  void phy_mac_interrupt(struct phy_device *phydev);
1624  void phy_start_machine(struct phy_device *phydev);
1625  void phy_stop_machine(struct phy_device *phydev);
1626  void phy_ethtool_ksettings_get(struct phy_device *phydev,
1627  			       struct ethtool_link_ksettings *cmd);
1628  int phy_ethtool_ksettings_set(struct phy_device *phydev,
1629  			      const struct ethtool_link_ksettings *cmd);
1630  int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd);
1631  int phy_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd);
1632  int phy_do_ioctl_running(struct net_device *dev, struct ifreq *ifr, int cmd);
1633  int phy_disable_interrupts(struct phy_device *phydev);
1634  void phy_request_interrupt(struct phy_device *phydev);
1635  void phy_free_interrupt(struct phy_device *phydev);
1636  void phy_print_status(struct phy_device *phydev);
1637  int phy_set_max_speed(struct phy_device *phydev, u32 max_speed);
1638  void phy_remove_link_mode(struct phy_device *phydev, u32 link_mode);
1639  void phy_advertise_supported(struct phy_device *phydev);
1640  void phy_support_sym_pause(struct phy_device *phydev);
1641  void phy_support_asym_pause(struct phy_device *phydev);
1642  void phy_set_sym_pause(struct phy_device *phydev, bool rx, bool tx,
1643  		       bool autoneg);
1644  void phy_set_asym_pause(struct phy_device *phydev, bool rx, bool tx);
1645  bool phy_validate_pause(struct phy_device *phydev,
1646  			struct ethtool_pauseparam *pp);
1647  void phy_get_pause(struct phy_device *phydev, bool *tx_pause, bool *rx_pause);
1648  
1649  s32 phy_get_internal_delay(struct phy_device *phydev, struct device *dev,
1650  			   const int *delay_values, int size, bool is_rx);
1651  
1652  void phy_resolve_pause(unsigned long *local_adv, unsigned long *partner_adv,
1653  		       bool *tx_pause, bool *rx_pause);
1654  
1655  int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask,
1656  		       int (*run)(struct phy_device *));
1657  int phy_register_fixup_for_id(const char *bus_id,
1658  			      int (*run)(struct phy_device *));
1659  int phy_register_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask,
1660  			       int (*run)(struct phy_device *));
1661  
1662  int phy_unregister_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask);
1663  int phy_unregister_fixup_for_id(const char *bus_id);
1664  int phy_unregister_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask);
1665  
1666  int phy_init_eee(struct phy_device *phydev, bool clk_stop_enable);
1667  int phy_get_eee_err(struct phy_device *phydev);
1668  int phy_ethtool_set_eee(struct phy_device *phydev, struct ethtool_eee *data);
1669  int phy_ethtool_get_eee(struct phy_device *phydev, struct ethtool_eee *data);
1670  int phy_ethtool_set_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol);
1671  void phy_ethtool_get_wol(struct phy_device *phydev,
1672  			 struct ethtool_wolinfo *wol);
1673  int phy_ethtool_get_link_ksettings(struct net_device *ndev,
1674  				   struct ethtool_link_ksettings *cmd);
1675  int phy_ethtool_set_link_ksettings(struct net_device *ndev,
1676  				   const struct ethtool_link_ksettings *cmd);
1677  int phy_ethtool_nway_reset(struct net_device *ndev);
1678  int phy_package_join(struct phy_device *phydev, int addr, size_t priv_size);
1679  void phy_package_leave(struct phy_device *phydev);
1680  int devm_phy_package_join(struct device *dev, struct phy_device *phydev,
1681  			  int addr, size_t priv_size);
1682  
1683  #if IS_ENABLED(CONFIG_PHYLIB)
1684  int __init mdio_bus_init(void);
1685  void mdio_bus_exit(void);
1686  #endif
1687  
1688  int phy_ethtool_get_strings(struct phy_device *phydev, u8 *data);
1689  int phy_ethtool_get_sset_count(struct phy_device *phydev);
1690  int phy_ethtool_get_stats(struct phy_device *phydev,
1691  			  struct ethtool_stats *stats, u64 *data);
1692  
phy_package_read(struct phy_device * phydev,u32 regnum)1693  static inline int phy_package_read(struct phy_device *phydev, u32 regnum)
1694  {
1695  	struct phy_package_shared *shared = phydev->shared;
1696  
1697  	if (!shared)
1698  		return -EIO;
1699  
1700  	return mdiobus_read(phydev->mdio.bus, shared->addr, regnum);
1701  }
1702  
__phy_package_read(struct phy_device * phydev,u32 regnum)1703  static inline int __phy_package_read(struct phy_device *phydev, u32 regnum)
1704  {
1705  	struct phy_package_shared *shared = phydev->shared;
1706  
1707  	if (!shared)
1708  		return -EIO;
1709  
1710  	return __mdiobus_read(phydev->mdio.bus, shared->addr, regnum);
1711  }
1712  
phy_package_write(struct phy_device * phydev,u32 regnum,u16 val)1713  static inline int phy_package_write(struct phy_device *phydev,
1714  				    u32 regnum, u16 val)
1715  {
1716  	struct phy_package_shared *shared = phydev->shared;
1717  
1718  	if (!shared)
1719  		return -EIO;
1720  
1721  	return mdiobus_write(phydev->mdio.bus, shared->addr, regnum, val);
1722  }
1723  
__phy_package_write(struct phy_device * phydev,u32 regnum,u16 val)1724  static inline int __phy_package_write(struct phy_device *phydev,
1725  				      u32 regnum, u16 val)
1726  {
1727  	struct phy_package_shared *shared = phydev->shared;
1728  
1729  	if (!shared)
1730  		return -EIO;
1731  
1732  	return __mdiobus_write(phydev->mdio.bus, shared->addr, regnum, val);
1733  }
1734  
__phy_package_set_once(struct phy_device * phydev,unsigned int b)1735  static inline bool __phy_package_set_once(struct phy_device *phydev,
1736  					  unsigned int b)
1737  {
1738  	struct phy_package_shared *shared = phydev->shared;
1739  
1740  	if (!shared)
1741  		return false;
1742  
1743  	return !test_and_set_bit(b, &shared->flags);
1744  }
1745  
phy_package_init_once(struct phy_device * phydev)1746  static inline bool phy_package_init_once(struct phy_device *phydev)
1747  {
1748  	return __phy_package_set_once(phydev, PHY_SHARED_F_INIT_DONE);
1749  }
1750  
phy_package_probe_once(struct phy_device * phydev)1751  static inline bool phy_package_probe_once(struct phy_device *phydev)
1752  {
1753  	return __phy_package_set_once(phydev, PHY_SHARED_F_PROBE_DONE);
1754  }
1755  
1756  extern struct bus_type mdio_bus_type;
1757  
1758  struct mdio_board_info {
1759  	const char	*bus_id;
1760  	char		modalias[MDIO_NAME_SIZE];
1761  	int		mdio_addr;
1762  	const void	*platform_data;
1763  };
1764  
1765  #if IS_ENABLED(CONFIG_MDIO_DEVICE)
1766  int mdiobus_register_board_info(const struct mdio_board_info *info,
1767  				unsigned int n);
1768  #else
mdiobus_register_board_info(const struct mdio_board_info * i,unsigned int n)1769  static inline int mdiobus_register_board_info(const struct mdio_board_info *i,
1770  					      unsigned int n)
1771  {
1772  	return 0;
1773  }
1774  #endif
1775  
1776  
1777  /**
1778   * phy_module_driver() - Helper macro for registering PHY drivers
1779   * @__phy_drivers: array of PHY drivers to register
1780   * @__count: Numbers of members in array
1781   *
1782   * Helper macro for PHY drivers which do not do anything special in module
1783   * init/exit. Each module may only use this macro once, and calling it
1784   * replaces module_init() and module_exit().
1785   */
1786  #define phy_module_driver(__phy_drivers, __count)			\
1787  static int __init phy_module_init(void)					\
1788  {									\
1789  	return phy_drivers_register(__phy_drivers, __count, THIS_MODULE); \
1790  }									\
1791  module_init(phy_module_init);						\
1792  static void __exit phy_module_exit(void)				\
1793  {									\
1794  	phy_drivers_unregister(__phy_drivers, __count);			\
1795  }									\
1796  module_exit(phy_module_exit)
1797  
1798  #define module_phy_driver(__phy_drivers)				\
1799  	phy_module_driver(__phy_drivers, ARRAY_SIZE(__phy_drivers))
1800  
1801  bool phy_driver_is_genphy(struct phy_device *phydev);
1802  bool phy_driver_is_genphy_10g(struct phy_device *phydev);
1803  
1804  #endif /* __PHY_H */
1805