hc
2024-05-10 23fa18eaa71266feff7ba8d83022d9e1cc83c65a
kernel/include/linux/phy.h
....@@ -1,16 +1,11 @@
1
+/* SPDX-License-Identifier: GPL-2.0-or-later */
12 /*
23 * Framework and drivers for configuring and reading different PHYs
3
- * Based on code in sungem_phy.c and gianfar_phy.c
4
+ * Based on code in sungem_phy.c and (long-removed) gianfar_phy.c
45 *
56 * Author: Andy Fleming
67 *
78 * Copyright (c) 2004 Freescale Semiconductor, Inc.
8
- *
9
- * This program is free software; you can redistribute it and/or modify it
10
- * under the terms of the GNU General Public License as published by the
11
- * Free Software Foundation; either version 2 of the License, or (at your
12
- * option) any later version.
13
- *
149 */
1510
1611 #ifndef __PHY_H
....@@ -19,12 +14,19 @@
1914 #include <linux/compiler.h>
2015 #include <linux/spinlock.h>
2116 #include <linux/ethtool.h>
17
+#include <linux/linkmode.h>
18
+#include <linux/netlink.h>
2219 #include <linux/mdio.h>
2320 #include <linux/mii.h>
21
+#include <linux/mii_timestamper.h>
2422 #include <linux/module.h>
2523 #include <linux/timer.h>
2624 #include <linux/workqueue.h>
2725 #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>
2830 #include <linux/android_kabi.h>
2931
3032 #include <linux/atomic.h>
....@@ -42,13 +44,31 @@
4244 #define PHY_1000BT_FEATURES (SUPPORTED_1000baseT_Half | \
4345 SUPPORTED_1000baseT_Full)
4446
45
-#define PHY_BASIC_FEATURES (PHY_10BT_FEATURES | \
46
- PHY_100BT_FEATURES | \
47
- PHY_DEFAULT_FEATURES)
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;
4855
49
-#define PHY_GBIT_FEATURES (PHY_BASIC_FEATURES | \
50
- PHY_1000BT_FEATURES)
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)
5164
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];
5272
5373 /*
5474 * Set phydev->irq to PHY_POLL if interrupts are not supported,
....@@ -58,12 +78,44 @@
5878 #define PHY_POLL -1
5979 #define PHY_IGNORE_INTERRUPT -2
6080
61
-#define PHY_HAS_INTERRUPT 0x00000001
62
-#define PHY_IS_INTERNAL 0x00000002
63
-#define PHY_RST_AFTER_CLK_EN 0x00000004
81
+#define PHY_IS_INTERNAL 0x00000001
82
+#define PHY_RST_AFTER_CLK_EN 0x00000002
83
+#define PHY_POLL_CABLE_TEST 0x00000004
6484 #define MDIO_DEVICE_IS_PHY 0x80000000
6585
66
-/* Interface Mode definitions */
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_RGMII: Reduced gigabit media-independent interface
98
+ * @PHY_INTERFACE_MODE_RGMII_ID: RGMII with Internal RX+TX delay
99
+ * @PHY_INTERFACE_MODE_RGMII_RXID: RGMII with Internal RX delay
100
+ * @PHY_INTERFACE_MODE_RGMII_TXID: RGMII with Internal RX delay
101
+ * @PHY_INTERFACE_MODE_RTBI: Reduced TBI
102
+ * @PHY_INTERFACE_MODE_SMII: ??? MII
103
+ * @PHY_INTERFACE_MODE_XGMII: 10 gigabit media-independent interface
104
+ * @PHY_INTERFACE_MODE_XLGMII:40 gigabit media-independent interface
105
+ * @PHY_INTERFACE_MODE_MOCA: Multimedia over Coax
106
+ * @PHY_INTERFACE_MODE_QSGMII: Quad SGMII
107
+ * @PHY_INTERFACE_MODE_TRGMII: Turbo RGMII
108
+ * @PHY_INTERFACE_MODE_1000BASEX: 1000 BaseX
109
+ * @PHY_INTERFACE_MODE_2500BASEX: 2500 BaseX
110
+ * @PHY_INTERFACE_MODE_RXAUI: Reduced XAUI
111
+ * @PHY_INTERFACE_MODE_XAUI: 10 Gigabit Attachment Unit Interface
112
+ * @PHY_INTERFACE_MODE_10GBASER: 10G BaseR
113
+ * @PHY_INTERFACE_MODE_USXGMII: Universal Serial 10GE MII
114
+ * @PHY_INTERFACE_MODE_10GKR: 10GBASE-KR - with Clause 73 AN
115
+ * @PHY_INTERFACE_MODE_MAX: Book keeping
116
+ *
117
+ * Describes the interface between the MAC and PHY.
118
+ */
67119 typedef enum {
68120 PHY_INTERFACE_MODE_NA,
69121 PHY_INTERFACE_MODE_INTERNAL,
....@@ -80,6 +132,7 @@
80132 PHY_INTERFACE_MODE_RTBI,
81133 PHY_INTERFACE_MODE_SMII,
82134 PHY_INTERFACE_MODE_XGMII,
135
+ PHY_INTERFACE_MODE_XLGMII,
83136 PHY_INTERFACE_MODE_MOCA,
84137 PHY_INTERFACE_MODE_QSGMII,
85138 PHY_INTERFACE_MODE_TRGMII,
....@@ -87,30 +140,28 @@
87140 PHY_INTERFACE_MODE_2500BASEX,
88141 PHY_INTERFACE_MODE_RXAUI,
89142 PHY_INTERFACE_MODE_XAUI,
90
- /* 10GBASE-KR, XFI, SFI - single lane 10G Serdes */
143
+ /* 10GBASE-R, XFI, SFI - single lane 10G Serdes */
144
+ PHY_INTERFACE_MODE_10GBASER,
145
+ PHY_INTERFACE_MODE_USXGMII,
146
+ /* 10GBASE-KR - with Clause 73 AN */
91147 PHY_INTERFACE_MODE_10GKR,
92148 PHY_INTERFACE_MODE_MAX,
93149 } phy_interface_t;
94150
95
-/**
96
- * phy_supported_speeds - return all speeds currently supported by a phy device
97
- * @phy: The phy device to return supported speeds of.
98
- * @speeds: buffer to store supported speeds in.
99
- * @size: size of speeds buffer.
100
- *
101
- * Description: Returns the number of supported speeds, and
102
- * fills the speeds * buffer with the supported speeds. If speeds buffer is
103
- * too small to contain * all currently supported speeds, will return as
104
- * many speeds as can fit.
151
+/*
152
+ * phy_supported_speeds - return all speeds currently supported by a PHY device
105153 */
106154 unsigned int phy_supported_speeds(struct phy_device *phy,
107155 unsigned int *speeds,
108156 unsigned int size);
109157
110158 /**
111
- * It maps 'enum phy_interface_t' found in include/linux/phy.h
159
+ * phy_modes - map phy_interface_t enum to device tree binding of phy-mode
160
+ * @interface: enum phy_interface_t value
161
+ *
162
+ * Description: maps enum &phy_interface_t defined in this file
112163 * into the device tree binding of 'phy-mode', so that Ethernet
113
- * device driver can get phy interface from device tree.
164
+ * device driver can get PHY interface from device tree.
114165 */
115166 static inline const char *phy_modes(phy_interface_t interface)
116167 {
....@@ -145,6 +196,8 @@
145196 return "smii";
146197 case PHY_INTERFACE_MODE_XGMII:
147198 return "xgmii";
199
+ case PHY_INTERFACE_MODE_XLGMII:
200
+ return "xlgmii";
148201 case PHY_INTERFACE_MODE_MOCA:
149202 return "moca";
150203 case PHY_INTERFACE_MODE_QSGMII:
....@@ -159,6 +212,10 @@
159212 return "rxaui";
160213 case PHY_INTERFACE_MODE_XAUI:
161214 return "xaui";
215
+ case PHY_INTERFACE_MODE_10GBASER:
216
+ return "10gbase-r";
217
+ case PHY_INTERFACE_MODE_USXGMII:
218
+ return "usxgmii";
162219 case PHY_INTERFACE_MODE_10GKR:
163220 return "10gbase-kr";
164221 default:
....@@ -168,9 +225,7 @@
168225
169226
170227 #define PHY_INIT_TIMEOUT 100000
171
-#define PHY_STATE_TIME 1
172228 #define PHY_FORCE_TIMEOUT 10
173
-#define PHY_AN_TIMEOUT 10
174229
175230 #define PHY_MAX_ADDR 32
176231
....@@ -179,15 +234,68 @@
179234
180235 #define MII_BUS_ID_SIZE 61
181236
182
-/* Or MII_ADDR_C45 into regnum for read/write on mii_bus to enable the 21 bit
183
- IEEE 802.3ae clause 45 addressing mode used by 10GIGE phy chips. */
184
-#define MII_ADDR_C45 (1<<30)
185
-
186237 struct device;
187238 struct phylink;
239
+struct sfp_bus;
240
+struct sfp_upstream_ops;
188241 struct sk_buff;
189242
190
-/*
243
+/**
244
+ * struct mdio_bus_stats - Statistics counters for MDIO busses
245
+ * @transfers: Total number of transfers, i.e. @writes + @reads
246
+ * @errors: Number of MDIO transfers that returned an error
247
+ * @writes: Number of write transfers
248
+ * @reads: Number of read transfers
249
+ * @syncp: Synchronisation for incrementing statistics
250
+ */
251
+struct mdio_bus_stats {
252
+ u64_stats_t transfers;
253
+ u64_stats_t errors;
254
+ u64_stats_t writes;
255
+ u64_stats_t reads;
256
+ /* Must be last, add new statistics above */
257
+ struct u64_stats_sync syncp;
258
+};
259
+
260
+/**
261
+ * struct phy_package_shared - Shared information in PHY packages
262
+ * @addr: Common PHY address used to combine PHYs in one package
263
+ * @refcnt: Number of PHYs connected to this shared data
264
+ * @flags: Initialization of PHY package
265
+ * @priv_size: Size of the shared private data @priv
266
+ * @priv: Driver private data shared across a PHY package
267
+ *
268
+ * Represents a shared structure between different phydev's in the same
269
+ * package, for example a quad PHY. See phy_package_join() and
270
+ * phy_package_leave().
271
+ */
272
+struct phy_package_shared {
273
+ int addr;
274
+ refcount_t refcnt;
275
+ unsigned long flags;
276
+ size_t priv_size;
277
+
278
+ /* private data pointer */
279
+ /* note that this pointer is shared between different phydevs and
280
+ * the user has to take care of appropriate locking. It is allocated
281
+ * and freed automatically by phy_package_join() and
282
+ * phy_package_leave().
283
+ */
284
+ void *priv;
285
+};
286
+
287
+/* used as bit number in atomic bitops */
288
+#define PHY_SHARED_F_INIT_DONE 0
289
+#define PHY_SHARED_F_PROBE_DONE 1
290
+
291
+/**
292
+ * struct mii_bus - Represents an MDIO bus
293
+ *
294
+ * @owner: Who owns this device
295
+ * @name: User friendly name for this MDIO device, or driver name
296
+ * @id: Unique identifier for this bus, typical from bus hierarchy
297
+ * @priv: Driver private data
298
+ *
191299 * The Bus class for PHYs. Devices which provide access to
192300 * PHYs should register using this structure
193301 */
....@@ -196,55 +304,93 @@
196304 const char *name;
197305 char id[MII_BUS_ID_SIZE];
198306 void *priv;
307
+ /** @read: Perform a read transfer on the bus */
199308 int (*read)(struct mii_bus *bus, int addr, int regnum);
309
+ /** @write: Perform a write transfer on the bus */
200310 int (*write)(struct mii_bus *bus, int addr, int regnum, u16 val);
311
+ /** @reset: Perform a reset of the bus */
201312 int (*reset)(struct mii_bus *bus);
202313
203
- /*
204
- * A lock to ensure that only one thing can read/write
314
+ /** @stats: Statistic counters per device on the bus */
315
+ struct mdio_bus_stats stats[PHY_MAX_ADDR];
316
+
317
+ /**
318
+ * @mdio_lock: A lock to ensure that only one thing can read/write
205319 * the MDIO bus at a time
206320 */
207321 struct mutex mdio_lock;
208322
323
+ /** @parent: Parent device of this bus */
209324 struct device *parent;
325
+ /** @state: State of bus structure */
210326 enum {
211327 MDIOBUS_ALLOCATED = 1,
212328 MDIOBUS_REGISTERED,
213329 MDIOBUS_UNREGISTERED,
214330 MDIOBUS_RELEASED,
215331 } state;
332
+
333
+ /** @dev: Kernel device representation */
216334 struct device dev;
217335
218
- /* list of all PHYs on bus */
336
+ /** @mdio_map: list of all MDIO devices on bus */
219337 struct mdio_device *mdio_map[PHY_MAX_ADDR];
220338
221
- /* PHY addresses to be ignored when probing */
339
+ /** @phy_mask: PHY addresses to be ignored when probing */
222340 u32 phy_mask;
223341
224
- /* PHY addresses to ignore the TA/read failure */
342
+ /** @phy_ignore_ta_mask: PHY addresses to ignore the TA/read failure */
225343 u32 phy_ignore_ta_mask;
226344
227
- /*
228
- * An array of interrupts, each PHY's interrupt at the index
345
+ /**
346
+ * @irq: An array of interrupts, each PHY's interrupt at the index
229347 * matching its address
230348 */
231349 int irq[PHY_MAX_ADDR];
232350
233
- /* GPIO reset pulse width in microseconds */
351
+ /** @reset_delay_us: GPIO reset pulse width in microseconds */
234352 int reset_delay_us;
235
- /* RESET GPIO descriptor pointer */
353
+ /** @reset_post_delay_us: GPIO reset deassert delay in microseconds */
354
+ int reset_post_delay_us;
355
+ /** @reset_gpiod: Reset GPIO descriptor pointer */
236356 struct gpio_desc *reset_gpiod;
357
+
358
+ /** @probe_capabilities: bus capabilities, used for probing */
359
+ enum {
360
+ MDIOBUS_NO_CAP = 0,
361
+ MDIOBUS_C22,
362
+ MDIOBUS_C45,
363
+ MDIOBUS_C22_C45,
364
+ } probe_capabilities;
365
+
366
+ /** @shared_lock: protect access to the shared element */
367
+ struct mutex shared_lock;
368
+
369
+ /** @shared: shared state across different PHYs */
370
+ struct phy_package_shared *shared[PHY_MAX_ADDR];
237371 };
238372 #define to_mii_bus(d) container_of(d, struct mii_bus, dev)
239373
240
-struct mii_bus *mdiobus_alloc_size(size_t);
374
+struct mii_bus *mdiobus_alloc_size(size_t size);
375
+
376
+/**
377
+ * mdiobus_alloc - Allocate an MDIO bus structure
378
+ *
379
+ * The internal state of the MDIO bus will be set of MDIOBUS_ALLOCATED ready
380
+ * for the driver to register the bus.
381
+ */
241382 static inline struct mii_bus *mdiobus_alloc(void)
242383 {
243384 return mdiobus_alloc_size(0);
244385 }
245386
246387 int __mdiobus_register(struct mii_bus *bus, struct module *owner);
388
+int __devm_mdiobus_register(struct device *dev, struct mii_bus *bus,
389
+ struct module *owner);
247390 #define mdiobus_register(bus) __mdiobus_register(bus, THIS_MODULE)
391
+#define devm_mdiobus_register(dev, bus) \
392
+ __devm_mdiobus_register(dev, bus, THIS_MODULE)
393
+
248394 void mdiobus_unregister(struct mii_bus *bus);
249395 void mdiobus_free(struct mii_bus *bus);
250396 struct mii_bus *devm_mdiobus_alloc_size(struct device *dev, int sizeof_priv);
....@@ -253,143 +399,137 @@
253399 return devm_mdiobus_alloc_size(dev, 0);
254400 }
255401
256
-void devm_mdiobus_free(struct device *dev, struct mii_bus *bus);
402
+struct mii_bus *mdio_find_bus(const char *mdio_name);
257403 struct phy_device *mdiobus_scan(struct mii_bus *bus, int addr);
258404
259
-#define PHY_INTERRUPT_DISABLED 0x0
260
-#define PHY_INTERRUPT_ENABLED 0x80000000
405
+#define PHY_INTERRUPT_DISABLED false
406
+#define PHY_INTERRUPT_ENABLED true
261407
262
-/* PHY state machine states:
408
+/**
409
+ * enum phy_state - PHY state machine states:
263410 *
264
- * DOWN: PHY device and driver are not ready for anything. probe
411
+ * @PHY_DOWN: PHY device and driver are not ready for anything. probe
265412 * should be called if and only if the PHY is in this state,
266413 * given that the PHY device exists.
267
- * - PHY driver probe function will, depending on the PHY, set
268
- * the state to STARTING or READY
414
+ * - PHY driver probe function will set the state to @PHY_READY
269415 *
270
- * STARTING: PHY device is coming up, and the ethernet driver is
271
- * not ready. PHY drivers may set this in the probe function.
272
- * If they do, they are responsible for making sure the state is
273
- * eventually set to indicate whether the PHY is UP or READY,
274
- * depending on the state when the PHY is done starting up.
275
- * - PHY driver will set the state to READY
276
- * - start will set the state to PENDING
277
- *
278
- * READY: PHY is ready to send and receive packets, but the
416
+ * @PHY_READY: PHY is ready to send and receive packets, but the
279417 * controller is not. By default, PHYs which do not implement
280
- * probe will be set to this state by phy_probe(). If the PHY
281
- * driver knows the PHY is ready, and the PHY state is STARTING,
282
- * then it sets this STATE.
418
+ * probe will be set to this state by phy_probe().
283419 * - start will set the state to UP
284420 *
285
- * PENDING: PHY device is coming up, but the ethernet driver is
286
- * ready. phy_start will set this state if the PHY state is
287
- * STARTING.
288
- * - PHY driver will set the state to UP when the PHY is ready
289
- *
290
- * UP: The PHY and attached device are ready to do work.
421
+ * @PHY_UP: The PHY and attached device are ready to do work.
291422 * Interrupts should be started here.
292
- * - timer moves to AN
423
+ * - timer moves to @PHY_NOLINK or @PHY_RUNNING
293424 *
294
- * AN: The PHY is currently negotiating the link state. Link is
295
- * therefore down for now. phy_timer will set this state when it
296
- * detects the state is UP. config_aneg will set this state
297
- * whenever called with phydev->autoneg set to AUTONEG_ENABLE.
298
- * - If autonegotiation finishes, but there's no link, it sets
299
- * the state to NOLINK.
300
- * - If aneg finishes with link, it sets the state to RUNNING,
301
- * and calls adjust_link
302
- * - If autonegotiation did not finish after an arbitrary amount
303
- * of time, autonegotiation should be tried again if the PHY
304
- * supports "magic" autonegotiation (back to AN)
305
- * - If it didn't finish, and no magic_aneg, move to FORCING.
425
+ * @PHY_NOLINK: PHY is up, but not currently plugged in.
426
+ * - irq or timer will set @PHY_RUNNING if link comes back
427
+ * - phy_stop moves to @PHY_HALTED
306428 *
307
- * NOLINK: PHY is up, but not currently plugged in.
308
- * - If the timer notes that the link comes back, we move to RUNNING
309
- * - config_aneg moves to AN
310
- * - phy_stop moves to HALTED
311
- *
312
- * FORCING: PHY is being configured with forced settings
313
- * - if link is up, move to RUNNING
314
- * - If link is down, we drop to the next highest setting, and
315
- * retry (FORCING) after a timeout
316
- * - phy_stop moves to HALTED
317
- *
318
- * RUNNING: PHY is currently up, running, and possibly sending
429
+ * @PHY_RUNNING: PHY is currently up, running, and possibly sending
319430 * and/or receiving packets
320
- * - timer will set CHANGELINK if we're polling (this ensures the
321
- * link state is polled every other cycle of this state machine,
322
- * which makes it every other second)
323
- * - irq will set CHANGELINK
324
- * - config_aneg will set AN
325
- * - phy_stop moves to HALTED
431
+ * - irq or timer will set @PHY_NOLINK if link goes down
432
+ * - phy_stop moves to @PHY_HALTED
326433 *
327
- * CHANGELINK: PHY experienced a change in link state
328
- * - timer moves to RUNNING if link
329
- * - timer moves to NOLINK if the link is down
330
- * - phy_stop moves to HALTED
434
+ * @PHY_CABLETEST: PHY is performing a cable test. Packet reception/sending
435
+ * is not expected to work, carrier will be indicated as down. PHY will be
436
+ * poll once per second, or on interrupt for it current state.
437
+ * Once complete, move to UP to restart the PHY.
438
+ * - phy_stop aborts the running test and moves to @PHY_HALTED
331439 *
332
- * HALTED: PHY is up, but no polling or interrupts are done. Or
440
+ * @PHY_HALTED: PHY is up, but no polling or interrupts are done. Or
333441 * PHY is in an error state.
334
- *
335
- * - phy_start moves to RESUMING
336
- *
337
- * RESUMING: PHY was halted, but now wants to run again.
338
- * - If we are forcing, or aneg is done, timer moves to RUNNING
339
- * - If aneg is not done, timer moves to AN
340
- * - phy_stop moves to HALTED
442
+ * - phy_start moves to @PHY_UP
341443 */
342444 enum phy_state {
343445 PHY_DOWN = 0,
344
- PHY_STARTING,
345446 PHY_READY,
346
- PHY_PENDING,
447
+ PHY_HALTED,
347448 PHY_UP,
348
- PHY_AN,
349449 PHY_RUNNING,
350450 PHY_NOLINK,
351
- PHY_FORCING,
352
- PHY_CHANGELINK,
353
- PHY_HALTED,
354
- PHY_RESUMING
451
+ PHY_CABLETEST,
355452 };
453
+
454
+#define MDIO_MMD_NUM 32
356455
357456 /**
358457 * struct phy_c45_device_ids - 802.3-c45 Device Identifiers
359
- * @devices_in_package: Bit vector of devices present.
458
+ * @devices_in_package: IEEE 802.3 devices in package register value.
459
+ * @mmds_present: bit vector of MMDs present.
360460 * @device_ids: The device identifer for each present device.
361461 */
362462 struct phy_c45_device_ids {
363463 u32 devices_in_package;
364
- u32 device_ids[8];
464
+ u32 mmds_present;
465
+ u32 device_ids[MDIO_MMD_NUM];
365466 };
366467
367
-/* phy_device: An instance of a PHY
468
+struct macsec_context;
469
+struct macsec_ops;
470
+
471
+/**
472
+ * struct phy_device - An instance of a PHY
368473 *
369
- * drv: Pointer to the driver for this PHY instance
370
- * phy_id: UID for this device found during discovery
371
- * c45_ids: 802.3-c45 Device Identifers if is_c45.
372
- * is_c45: Set to true if this phy uses clause 45 addressing.
373
- * is_internal: Set to true if this phy is internal to a MAC.
374
- * is_pseudo_fixed_link: Set to true if this phy is an Ethernet switch, etc.
375
- * has_fixups: Set to true if this phy has fixups/quirks.
376
- * suspended: Set to true if this phy has been suspended successfully.
377
- * suspended_by_mdio_bus: Set to true if this phy was suspended by MDIO bus.
378
- * sysfs_links: Internal boolean tracking sysfs symbolic links setup/removal.
379
- * loopback_enabled: Set true if this phy has been loopbacked successfully.
380
- * state: state of the PHY for management purposes
381
- * dev_flags: Device-specific flags used by the PHY driver.
382
- * link_timeout: The number of timer firings to wait before the
383
- * giving up on the current attempt at acquiring a link
384
- * irq: IRQ number of the PHY's interrupt (-1 if none)
385
- * phy_timer: The timer for handling the state machine
386
- * phy_queue: A work_queue for the phy_mac_interrupt
387
- * attached_dev: The attached enet driver's device instance ptr
388
- * adjust_link: Callback for the enet controller to respond to
389
- * changes in the link state.
474
+ * @mdio: MDIO bus this PHY is on
475
+ * @drv: Pointer to the driver for this PHY instance
476
+ * @phy_id: UID for this device found during discovery
477
+ * @c45_ids: 802.3-c45 Device Identifiers if is_c45.
478
+ * @is_c45: Set to true if this PHY uses clause 45 addressing.
479
+ * @is_internal: Set to true if this PHY is internal to a MAC.
480
+ * @is_pseudo_fixed_link: Set to true if this PHY is an Ethernet switch, etc.
481
+ * @is_gigabit_capable: Set to true if PHY supports 1000Mbps
482
+ * @has_fixups: Set to true if this PHY has fixups/quirks.
483
+ * @suspended: Set to true if this PHY has been suspended successfully.
484
+ * @suspended_by_mdio_bus: Set to true if this PHY was suspended by MDIO bus.
485
+ * @sysfs_links: Internal boolean tracking sysfs symbolic links setup/removal.
486
+ * @loopback_enabled: Set true if this PHY has been loopbacked successfully.
487
+ * @downshifted_rate: Set true if link speed has been downshifted.
488
+ * @state: State of the PHY for management purposes
489
+ * @dev_flags: Device-specific flags used by the PHY driver.
490
+ * @irq: IRQ number of the PHY's interrupt (-1 if none)
491
+ * @phy_timer: The timer for handling the state machine
492
+ * @phylink: Pointer to phylink instance for this PHY
493
+ * @sfp_bus_attached: Flag indicating whether the SFP bus has been attached
494
+ * @sfp_bus: SFP bus attached to this PHY's fiber port
495
+ * @attached_dev: The attached enet driver's device instance ptr
496
+ * @adjust_link: Callback for the enet controller to respond to changes: in the
497
+ * link state.
498
+ * @phy_link_change: Callback for phylink for notification of link change
499
+ * @macsec_ops: MACsec offloading ops.
390500 *
391
- * speed, duplex, pause, supported, advertising, lp_advertising,
392
- * and autoneg are used like in mii_if_info
501
+ * @speed: Current link speed
502
+ * @duplex: Current duplex
503
+ * @port: Current port
504
+ * @pause: Current pause
505
+ * @asym_pause: Current asymmetric pause
506
+ * @supported: Combined MAC/PHY supported linkmodes
507
+ * @advertising: Currently advertised linkmodes
508
+ * @adv_old: Saved advertised while power saving for WoL
509
+ * @lp_advertising: Current link partner advertised linkmodes
510
+ * @eee_broken_modes: Energy efficient ethernet modes which should be prohibited
511
+ * @autoneg: Flag autoneg being used
512
+ * @link: Current link state
513
+ * @autoneg_complete: Flag auto negotiation of the link has completed
514
+ * @mdix: Current crossover
515
+ * @mdix_ctrl: User setting of crossover
516
+ * @interrupts: Flag interrupts have been enabled
517
+ * @interface: enum phy_interface_t value
518
+ * @skb: Netlink message for cable diagnostics
519
+ * @nest: Netlink nest used for cable diagnostics
520
+ * @ehdr: nNtlink header for cable diagnostics
521
+ * @phy_led_triggers: Array of LED triggers
522
+ * @phy_num_led_triggers: Number of triggers in @phy_led_triggers
523
+ * @led_link_trigger: LED trigger for link up/down
524
+ * @last_triggered: last LED trigger for link speed
525
+ * @master_slave_set: User requested master/slave configuration
526
+ * @master_slave_get: Current master/slave advertisement
527
+ * @master_slave_state: Current master/slave configuration
528
+ * @mii_ts: Pointer to time stamper callbacks
529
+ * @lock: Mutex for serialization access to PHY
530
+ * @state_queue: Work queue for state machine
531
+ * @shared: Pointer to private data shared by phys in one package
532
+ * @priv: Pointer to driver private data
393533 *
394534 * interrupts currently only supports enabled or disabled,
395535 * but could be changed in the future to support enabling
....@@ -411,15 +551,21 @@
411551 unsigned is_c45:1;
412552 unsigned is_internal:1;
413553 unsigned is_pseudo_fixed_link:1;
554
+ unsigned is_gigabit_capable:1;
414555 unsigned has_fixups:1;
415556 unsigned suspended:1;
416557 unsigned suspended_by_mdio_bus:1;
417558 unsigned sysfs_links:1;
418559 unsigned loopback_enabled:1;
560
+ unsigned downshifted_rate:1;
419561
420562 unsigned autoneg:1;
421563 /* The most recently read link state */
422564 unsigned link:1;
565
+ unsigned autoneg_complete:1;
566
+
567
+ /* Interrupts are enabled */
568
+ unsigned interrupts:1;
423569
424570 enum phy_state state;
425571
....@@ -433,22 +579,23 @@
433579 */
434580 int speed;
435581 int duplex;
582
+ int port;
436583 int pause;
437584 int asym_pause;
585
+ u8 master_slave_get;
586
+ u8 master_slave_set;
587
+ u8 master_slave_state;
438588
439
- /* Enabled Interrupts */
440
- u32 interrupts;
441
-
442
- /* Union of PHY and Attached devices' supported modes */
443
- /* See mii.h for more info */
444
- u32 supported;
445
- u32 advertising;
446
- u32 lp_advertising;
589
+ /* Union of PHY and Attached devices' supported link modes */
590
+ /* See ethtool.h for more info */
591
+ __ETHTOOL_DECLARE_LINK_MODE_MASK(supported);
592
+ __ETHTOOL_DECLARE_LINK_MODE_MASK(advertising);
593
+ __ETHTOOL_DECLARE_LINK_MODE_MASK(lp_advertising);
594
+ /* used with phy_speed_down */
595
+ __ETHTOOL_DECLARE_LINK_MODE_MASK(adv_old);
447596
448597 /* Energy efficient ethernet modes which should be prohibited */
449598 u32 eee_broken_modes;
450
-
451
- int link_timeout;
452599
453600 #ifdef CONFIG_LED_TRIGGER_PHY
454601 struct phy_led_trigger *phy_led_triggers;
....@@ -468,20 +615,37 @@
468615 /* For use by PHYs to maintain extra state */
469616 void *priv;
470617
618
+ /* shared data pointer */
619
+ /* For use by PHYs inside the same package that need a shared state. */
620
+ struct phy_package_shared *shared;
621
+
622
+ /* Reporting cable test results */
623
+ struct sk_buff *skb;
624
+ void *ehdr;
625
+ struct nlattr *nest;
626
+
471627 /* Interrupt and Polling infrastructure */
472
- struct work_struct phy_queue;
473628 struct delayed_work state_queue;
474629
475630 struct mutex lock;
476631
632
+ /* This may be modified under the rtnl lock */
633
+ bool sfp_bus_attached;
634
+ struct sfp_bus *sfp_bus;
477635 struct phylink *phylink;
478636 struct net_device *attached_dev;
637
+ struct mii_timestamper *mii_ts;
479638
480639 u8 mdix;
481640 u8 mdix_ctrl;
482641
483
- void (*phy_link_change)(struct phy_device *, bool up, bool do_carrier);
642
+ void (*phy_link_change)(struct phy_device *phydev, bool up);
484643 void (*adjust_link)(struct net_device *dev);
644
+
645
+#if IS_ENABLED(CONFIG_MACSEC)
646
+ /* MACsec management functions */
647
+ const struct macsec_ops *macsec_ops;
648
+#endif
485649
486650 ANDROID_KABI_RESERVE(1);
487651 ANDROID_KABI_RESERVE(2);
....@@ -491,18 +655,41 @@
491655 #define to_phy_device(d) container_of(to_mdio_device(d), \
492656 struct phy_device, mdio)
493657
494
-/* struct phy_driver: Driver structure for a particular PHY type
658
+/**
659
+ * struct phy_tdr_config - Configuration of a TDR raw test
495660 *
496
- * driver_data: static driver data
497
- * phy_id: The result of reading the UID registers of this PHY
661
+ * @first: Distance for first data collection point
662
+ * @last: Distance for last data collection point
663
+ * @step: Step between data collection points
664
+ * @pair: Bitmap of cable pairs to collect data for
665
+ *
666
+ * A structure containing possible configuration parameters
667
+ * for a TDR cable test. The driver does not need to implement
668
+ * all the parameters, but should report what is actually used.
669
+ * All distances are in centimeters.
670
+ */
671
+struct phy_tdr_config {
672
+ u32 first;
673
+ u32 last;
674
+ u32 step;
675
+ s8 pair;
676
+};
677
+#define PHY_PAIR_ALL -1
678
+
679
+/**
680
+ * struct phy_driver - Driver structure for a particular PHY type
681
+ *
682
+ * @mdiodrv: Data common to all MDIO devices
683
+ * @phy_id: The result of reading the UID registers of this PHY
498684 * type, and ANDing them with the phy_id_mask. This driver
499685 * only works for PHYs with IDs which match this field
500
- * name: The friendly name of this PHY type
501
- * phy_id_mask: Defines the important bits of the phy_id
502
- * features: A list of features (speed, duplex, etc) supported
503
- * by this PHY
504
- * flags: A bitfield defining certain other features this PHY
686
+ * @name: The friendly name of this PHY type
687
+ * @phy_id_mask: Defines the important bits of the phy_id
688
+ * @features: A mandatory list of features (speed, duplex, etc)
689
+ * supported by this PHY
690
+ * @flags: A bitfield defining certain other features this PHY
505691 * supports (like interrupts)
692
+ * @driver_data: Static driver data
506693 *
507694 * All functions are optional. If config_aneg or read_status
508695 * are not implemented, the phy core uses the genphy versions.
....@@ -517,159 +704,186 @@
517704 u32 phy_id;
518705 char *name;
519706 u32 phy_id_mask;
520
- u32 features;
707
+ const unsigned long * const features;
521708 u32 flags;
522709 const void *driver_data;
523710
524
- /*
525
- * Called to issue a PHY software reset
711
+ /**
712
+ * @soft_reset: Called to issue a PHY software reset
526713 */
527714 int (*soft_reset)(struct phy_device *phydev);
528715
529
- /*
530
- * Called to initialize the PHY,
716
+ /**
717
+ * @config_init: Called to initialize the PHY,
531718 * including after a reset
532719 */
533720 int (*config_init)(struct phy_device *phydev);
534721
535
- /*
536
- * Called during discovery. Used to set
722
+ /**
723
+ * @probe: Called during discovery. Used to set
537724 * up device-specific structures, if any
538725 */
539726 int (*probe)(struct phy_device *phydev);
540727
728
+ /**
729
+ * @get_features: Probe the hardware to determine what
730
+ * abilities it has. Should only set phydev->supported.
731
+ */
732
+ int (*get_features)(struct phy_device *phydev);
733
+
541734 /* PHY Power Management */
735
+ /** @suspend: Suspend the hardware, saving state if needed */
542736 int (*suspend)(struct phy_device *phydev);
737
+ /** @resume: Resume the hardware, restoring state if needed */
543738 int (*resume)(struct phy_device *phydev);
544739
545
- /*
546
- * Configures the advertisement and resets
740
+ /**
741
+ * @config_aneg: Configures the advertisement and resets
547742 * autonegotiation if phydev->autoneg is on,
548743 * forces the speed to the current settings in phydev
549744 * if phydev->autoneg is off
550745 */
551746 int (*config_aneg)(struct phy_device *phydev);
552747
553
- /* Determines the auto negotiation result */
748
+ /** @aneg_done: Determines the auto negotiation result */
554749 int (*aneg_done)(struct phy_device *phydev);
555750
556
- /* Determines the negotiated speed and duplex */
751
+ /** @read_status: Determines the negotiated speed and duplex */
557752 int (*read_status)(struct phy_device *phydev);
558753
559
- /* Clears any pending interrupts */
754
+ /** @ack_interrupt: Clears any pending interrupts */
560755 int (*ack_interrupt)(struct phy_device *phydev);
561756
562
- /* Enables or disables interrupts */
757
+ /** @config_intr: Enables or disables interrupts */
563758 int (*config_intr)(struct phy_device *phydev);
564759
565
- /*
566
- * Checks if the PHY generated an interrupt.
760
+ /**
761
+ * @did_interrupt: Checks if the PHY generated an interrupt.
567762 * For multi-PHY devices with shared PHY interrupt pin
763
+ * Set interrupt bits have to be cleared.
568764 */
569765 int (*did_interrupt)(struct phy_device *phydev);
570766
571
- /* Clears up any memory if needed */
767
+ /** @handle_interrupt: Override default interrupt handling */
768
+ irqreturn_t (*handle_interrupt)(struct phy_device *phydev);
769
+
770
+ /** @remove: Clears up any memory if needed */
572771 void (*remove)(struct phy_device *phydev);
573772
574
- /* Returns true if this is a suitable driver for the given
575
- * phydev. If NULL, matching is based on phy_id and
576
- * phy_id_mask.
773
+ /**
774
+ * @match_phy_device: Returns true if this is a suitable
775
+ * driver for the given phydev. If NULL, matching is based on
776
+ * phy_id and phy_id_mask.
577777 */
578778 int (*match_phy_device)(struct phy_device *phydev);
579779
580
- /* Handles ethtool queries for hardware time stamping. */
581
- int (*ts_info)(struct phy_device *phydev, struct ethtool_ts_info *ti);
582
-
583
- /* Handles SIOCSHWTSTAMP ioctl for hardware time stamping. */
584
- int (*hwtstamp)(struct phy_device *phydev, struct ifreq *ifr);
585
-
586
- /*
587
- * Requests a Rx timestamp for 'skb'. If the skb is accepted,
588
- * the phy driver promises to deliver it using netif_rx() as
589
- * soon as a timestamp becomes available. One of the
590
- * PTP_CLASS_ values is passed in 'type'. The function must
591
- * return true if the skb is accepted for delivery.
780
+ /**
781
+ * @set_wol: Some devices (e.g. qnap TS-119P II) require PHY
782
+ * register changes to enable Wake on LAN, so set_wol is
783
+ * provided to be called in the ethernet driver's set_wol
784
+ * function.
592785 */
593
- bool (*rxtstamp)(struct phy_device *dev, struct sk_buff *skb, int type);
594
-
595
- /*
596
- * Requests a Tx timestamp for 'skb'. The phy driver promises
597
- * to deliver it using skb_complete_tx_timestamp() as soon as a
598
- * timestamp becomes available. One of the PTP_CLASS_ values
599
- * is passed in 'type'.
600
- */
601
- void (*txtstamp)(struct phy_device *dev, struct sk_buff *skb, int type);
602
-
603
- /* Some devices (e.g. qnap TS-119P II) require PHY register changes to
604
- * enable Wake on LAN, so set_wol is provided to be called in the
605
- * ethernet driver's set_wol function. */
606786 int (*set_wol)(struct phy_device *dev, struct ethtool_wolinfo *wol);
607787
608
- /* See set_wol, but for checking whether Wake on LAN is enabled. */
788
+ /**
789
+ * @get_wol: See set_wol, but for checking whether Wake on LAN
790
+ * is enabled.
791
+ */
609792 void (*get_wol)(struct phy_device *dev, struct ethtool_wolinfo *wol);
610793
611
- /*
612
- * Called to inform a PHY device driver when the core is about to
613
- * change the link state. This callback is supposed to be used as
614
- * fixup hook for drivers that need to take action when the link
615
- * state changes. Drivers are by no means allowed to mess with the
794
+ /**
795
+ * @link_change_notify: Called to inform a PHY device driver
796
+ * when the core is about to change the link state. This
797
+ * callback is supposed to be used as fixup hook for drivers
798
+ * that need to take action when the link state
799
+ * changes. Drivers are by no means allowed to mess with the
616800 * PHY device structure in their implementations.
617801 */
618802 void (*link_change_notify)(struct phy_device *dev);
619803
620
- /*
621
- * Phy specific driver override for reading a MMD register.
622
- * This function is optional for PHY specific drivers. When
623
- * not provided, the default MMD read function will be used
624
- * by phy_read_mmd(), which will use either a direct read for
625
- * Clause 45 PHYs or an indirect read for Clause 22 PHYs.
626
- * devnum is the MMD device number within the PHY device,
627
- * regnum is the register within the selected MMD device.
804
+ /**
805
+ * @read_mmd: PHY specific driver override for reading a MMD
806
+ * register. This function is optional for PHY specific
807
+ * drivers. When not provided, the default MMD read function
808
+ * will be used by phy_read_mmd(), which will use either a
809
+ * direct read for Clause 45 PHYs or an indirect read for
810
+ * Clause 22 PHYs. devnum is the MMD device number within the
811
+ * PHY device, regnum is the register within the selected MMD
812
+ * device.
628813 */
629814 int (*read_mmd)(struct phy_device *dev, int devnum, u16 regnum);
630815
631
- /*
632
- * Phy specific driver override for writing a MMD register.
633
- * This function is optional for PHY specific drivers. When
634
- * not provided, the default MMD write function will be used
635
- * by phy_write_mmd(), which will use either a direct write for
636
- * Clause 45 PHYs, or an indirect write for Clause 22 PHYs.
637
- * devnum is the MMD device number within the PHY device,
638
- * regnum is the register within the selected MMD device.
639
- * val is the value to be written.
816
+ /**
817
+ * @write_mmd: PHY specific driver override for writing a MMD
818
+ * register. This function is optional for PHY specific
819
+ * drivers. When not provided, the default MMD write function
820
+ * will be used by phy_write_mmd(), which will use either a
821
+ * direct write for Clause 45 PHYs, or an indirect write for
822
+ * Clause 22 PHYs. devnum is the MMD device number within the
823
+ * PHY device, regnum is the register within the selected MMD
824
+ * device. val is the value to be written.
640825 */
641826 int (*write_mmd)(struct phy_device *dev, int devnum, u16 regnum,
642827 u16 val);
643828
829
+ /** @read_page: Return the current PHY register page number */
644830 int (*read_page)(struct phy_device *dev);
831
+ /** @write_page: Set the current PHY register page number */
645832 int (*write_page)(struct phy_device *dev, int page);
646833
647
- /* Get the size and type of the eeprom contained within a plug-in
648
- * module */
834
+ /**
835
+ * @module_info: Get the size and type of the eeprom contained
836
+ * within a plug-in module
837
+ */
649838 int (*module_info)(struct phy_device *dev,
650839 struct ethtool_modinfo *modinfo);
651840
652
- /* Get the eeprom information from the plug-in module */
841
+ /**
842
+ * @module_eeprom: Get the eeprom information from the plug-in
843
+ * module
844
+ */
653845 int (*module_eeprom)(struct phy_device *dev,
654846 struct ethtool_eeprom *ee, u8 *data);
655847
656
- /* Get statistics from the phy using ethtool */
848
+ /** @cable_test_start: Start a cable test */
849
+ int (*cable_test_start)(struct phy_device *dev);
850
+
851
+ /** @cable_test_tdr_start: Start a raw TDR cable test */
852
+ int (*cable_test_tdr_start)(struct phy_device *dev,
853
+ const struct phy_tdr_config *config);
854
+
855
+ /**
856
+ * @cable_test_get_status: Once per second, or on interrupt,
857
+ * request the status of the test.
858
+ */
859
+ int (*cable_test_get_status)(struct phy_device *dev, bool *finished);
860
+
861
+ /* Get statistics from the PHY using ethtool */
862
+ /** @get_sset_count: Number of statistic counters */
657863 int (*get_sset_count)(struct phy_device *dev);
864
+ /** @get_strings: Names of the statistic counters */
658865 void (*get_strings)(struct phy_device *dev, u8 *data);
866
+ /** @get_stats: Return the statistic counter values */
659867 void (*get_stats)(struct phy_device *dev,
660868 struct ethtool_stats *stats, u64 *data);
661869
662870 /* Get and Set PHY tunables */
871
+ /** @get_tunable: Return the value of a tunable */
663872 int (*get_tunable)(struct phy_device *dev,
664873 struct ethtool_tunable *tuna, void *data);
874
+ /** @set_tunable: Set the value of a tunable */
665875 int (*set_tunable)(struct phy_device *dev,
666876 struct ethtool_tunable *tuna,
667877 const void *data);
878
+ /** @set_loopback: Set the loopback mood of the PHY */
668879 int (*set_loopback)(struct phy_device *dev, bool enable);
880
+ /** @get_sqi: Get the signal quality indication */
881
+ int (*get_sqi)(struct phy_device *dev);
882
+ /** @get_sqi_max: Get the maximum signal quality indication */
883
+ int (*get_sqi_max)(struct phy_device *dev);
669884
670885 ANDROID_KABI_RESERVE(1);
671886 ANDROID_KABI_RESERVE(2);
672
-
673887 };
674888 #define to_phy_driver(d) container_of(to_mdio_common_driver(d), \
675889 struct phy_driver, mdiodrv)
....@@ -704,22 +918,25 @@
704918
705919 const struct phy_setting *
706920 phy_lookup_setting(int speed, int duplex, const unsigned long *mask,
707
- size_t maxbit, bool exact);
921
+ bool exact);
708922 size_t phy_speeds(unsigned int *speeds, size_t size,
709
- unsigned long *mask, size_t maxbit);
710
-
711
-void phy_resolve_aneg_linkmode(struct phy_device *phydev);
923
+ unsigned long *mask);
924
+void of_set_phy_supported(struct phy_device *phydev);
925
+void of_set_phy_eee_broken(struct phy_device *phydev);
926
+int phy_speed_down_core(struct phy_device *phydev);
712927
713928 /**
714
- * phy_read_mmd - Convenience function for reading a register
715
- * from an MMD on a given PHY.
929
+ * phy_is_started - Convenience function to check whether PHY is started
716930 * @phydev: The phy_device struct
717
- * @devad: The MMD to read from
718
- * @regnum: The register on the MMD to read
719
- *
720
- * Same rules as for phy_read();
721931 */
722
-int phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum);
932
+static inline bool phy_is_started(struct phy_device *phydev)
933
+{
934
+ return phydev->state >= PHY_UP;
935
+}
936
+
937
+void phy_resolve_aneg_pause(struct phy_device *phydev);
938
+void phy_resolve_aneg_linkmode(struct phy_device *phydev);
939
+void phy_check_downshift(struct phy_device *phydev);
723940
724941 /**
725942 * phy_read - Convenience function for reading a given PHY register
....@@ -734,6 +951,19 @@
734951 {
735952 return mdiobus_read(phydev->mdio.bus, phydev->mdio.addr, regnum);
736953 }
954
+
955
+#define phy_read_poll_timeout(phydev, regnum, val, cond, sleep_us, \
956
+ timeout_us, sleep_before_read) \
957
+({ \
958
+ int __ret = read_poll_timeout(phy_read, val, (cond) || val < 0, \
959
+ sleep_us, timeout_us, sleep_before_read, phydev, regnum); \
960
+ if (val < 0) \
961
+ __ret = val; \
962
+ if (__ret) \
963
+ phydev_err(phydev, "%s failed: %d\n", __func__, __ret); \
964
+ __ret; \
965
+})
966
+
737967
738968 /**
739969 * __phy_read - convenience function for reading a given PHY register
....@@ -776,8 +1006,95 @@
7761006 val);
7771007 }
7781008
1009
+/**
1010
+ * __phy_modify_changed() - Convenience function for modifying a PHY register
1011
+ * @phydev: a pointer to a &struct phy_device
1012
+ * @regnum: register number
1013
+ * @mask: bit mask of bits to clear
1014
+ * @set: bit mask of bits to set
1015
+ *
1016
+ * Unlocked helper function which allows a PHY register to be modified as
1017
+ * new register value = (old register value & ~mask) | set
1018
+ *
1019
+ * Returns negative errno, 0 if there was no change, and 1 in case of change
1020
+ */
1021
+static inline int __phy_modify_changed(struct phy_device *phydev, u32 regnum,
1022
+ u16 mask, u16 set)
1023
+{
1024
+ return __mdiobus_modify_changed(phydev->mdio.bus, phydev->mdio.addr,
1025
+ regnum, mask, set);
1026
+}
1027
+
1028
+/*
1029
+ * phy_read_mmd - Convenience function for reading a register
1030
+ * from an MMD on a given PHY.
1031
+ */
1032
+int phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum);
1033
+
1034
+/**
1035
+ * phy_read_mmd_poll_timeout - Periodically poll a PHY register until a
1036
+ * condition is met or a timeout occurs
1037
+ *
1038
+ * @phydev: The phy_device struct
1039
+ * @devaddr: The MMD to read from
1040
+ * @regnum: The register on the MMD to read
1041
+ * @val: Variable to read the register into
1042
+ * @cond: Break condition (usually involving @val)
1043
+ * @sleep_us: Maximum time to sleep between reads in us (0
1044
+ * tight-loops). Should be less than ~20ms since usleep_range
1045
+ * is used (see Documentation/timers/timers-howto.rst).
1046
+ * @timeout_us: Timeout in us, 0 means never timeout
1047
+ * @sleep_before_read: if it is true, sleep @sleep_us before read.
1048
+ * Returns 0 on success and -ETIMEDOUT upon a timeout. In either
1049
+ * case, the last read value at @args is stored in @val. Must not
1050
+ * be called from atomic context if sleep_us or timeout_us are used.
1051
+ */
1052
+#define phy_read_mmd_poll_timeout(phydev, devaddr, regnum, val, cond, \
1053
+ sleep_us, timeout_us, sleep_before_read) \
1054
+({ \
1055
+ int __ret = read_poll_timeout(phy_read_mmd, val, (cond) || val < 0, \
1056
+ sleep_us, timeout_us, sleep_before_read, \
1057
+ phydev, devaddr, regnum); \
1058
+ if (val < 0) \
1059
+ __ret = val; \
1060
+ if (__ret) \
1061
+ phydev_err(phydev, "%s failed: %d\n", __func__, __ret); \
1062
+ __ret; \
1063
+})
1064
+
1065
+/*
1066
+ * __phy_read_mmd - Convenience function for reading a register
1067
+ * from an MMD on a given PHY.
1068
+ */
1069
+int __phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum);
1070
+
1071
+/*
1072
+ * phy_write_mmd - Convenience function for writing a register
1073
+ * on an MMD on a given PHY.
1074
+ */
1075
+int phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val);
1076
+
1077
+/*
1078
+ * __phy_write_mmd - Convenience function for writing a register
1079
+ * on an MMD on a given PHY.
1080
+ */
1081
+int __phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val);
1082
+
1083
+int __phy_modify_changed(struct phy_device *phydev, u32 regnum, u16 mask,
1084
+ u16 set);
1085
+int phy_modify_changed(struct phy_device *phydev, u32 regnum, u16 mask,
1086
+ u16 set);
7791087 int __phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set);
7801088 int phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set);
1089
+
1090
+int __phy_modify_mmd_changed(struct phy_device *phydev, int devad, u32 regnum,
1091
+ u16 mask, u16 set);
1092
+int phy_modify_mmd_changed(struct phy_device *phydev, int devad, u32 regnum,
1093
+ u16 mask, u16 set);
1094
+int __phy_modify_mmd(struct phy_device *phydev, int devad, u32 regnum,
1095
+ u16 mask, u16 set);
1096
+int phy_modify_mmd(struct phy_device *phydev, int devad, u32 regnum,
1097
+ u16 mask, u16 set);
7811098
7821099 /**
7831100 * __phy_set_bits - Convenience function for setting bits in a PHY register
....@@ -829,6 +1146,66 @@
8291146 }
8301147
8311148 /**
1149
+ * __phy_set_bits_mmd - Convenience function for setting bits in a register
1150
+ * on MMD
1151
+ * @phydev: the phy_device struct
1152
+ * @devad: the MMD containing register to modify
1153
+ * @regnum: register number to modify
1154
+ * @val: bits to set
1155
+ *
1156
+ * The caller must have taken the MDIO bus lock.
1157
+ */
1158
+static inline int __phy_set_bits_mmd(struct phy_device *phydev, int devad,
1159
+ u32 regnum, u16 val)
1160
+{
1161
+ return __phy_modify_mmd(phydev, devad, regnum, 0, val);
1162
+}
1163
+
1164
+/**
1165
+ * __phy_clear_bits_mmd - Convenience function for clearing bits in a register
1166
+ * on MMD
1167
+ * @phydev: the phy_device struct
1168
+ * @devad: the MMD containing register to modify
1169
+ * @regnum: register number to modify
1170
+ * @val: bits to clear
1171
+ *
1172
+ * The caller must have taken the MDIO bus lock.
1173
+ */
1174
+static inline int __phy_clear_bits_mmd(struct phy_device *phydev, int devad,
1175
+ u32 regnum, u16 val)
1176
+{
1177
+ return __phy_modify_mmd(phydev, devad, regnum, val, 0);
1178
+}
1179
+
1180
+/**
1181
+ * phy_set_bits_mmd - Convenience function for setting bits in a register
1182
+ * on MMD
1183
+ * @phydev: the phy_device struct
1184
+ * @devad: the MMD containing register to modify
1185
+ * @regnum: register number to modify
1186
+ * @val: bits to set
1187
+ */
1188
+static inline int phy_set_bits_mmd(struct phy_device *phydev, int devad,
1189
+ u32 regnum, u16 val)
1190
+{
1191
+ return phy_modify_mmd(phydev, devad, regnum, 0, val);
1192
+}
1193
+
1194
+/**
1195
+ * phy_clear_bits_mmd - Convenience function for clearing bits in a register
1196
+ * on MMD
1197
+ * @phydev: the phy_device struct
1198
+ * @devad: the MMD containing register to modify
1199
+ * @regnum: register number to modify
1200
+ * @val: bits to clear
1201
+ */
1202
+static inline int phy_clear_bits_mmd(struct phy_device *phydev, int devad,
1203
+ u32 regnum, u16 val)
1204
+{
1205
+ return phy_modify_mmd(phydev, devad, regnum, val, 0);
1206
+}
1207
+
1208
+/**
8321209 * phy_interrupt_is_valid - Convenience function for testing a given PHY irq
8331210 * @phydev: the phy_device struct
8341211 *
....@@ -847,7 +1224,71 @@
8471224 */
8481225 static inline bool phy_polling_mode(struct phy_device *phydev)
8491226 {
1227
+ if (phydev->state == PHY_CABLETEST)
1228
+ if (phydev->drv->flags & PHY_POLL_CABLE_TEST)
1229
+ return true;
1230
+
8501231 return phydev->irq == PHY_POLL;
1232
+}
1233
+
1234
+/**
1235
+ * phy_has_hwtstamp - Tests whether a PHY time stamp configuration.
1236
+ * @phydev: the phy_device struct
1237
+ */
1238
+static inline bool phy_has_hwtstamp(struct phy_device *phydev)
1239
+{
1240
+ return phydev && phydev->mii_ts && phydev->mii_ts->hwtstamp;
1241
+}
1242
+
1243
+/**
1244
+ * phy_has_rxtstamp - Tests whether a PHY supports receive time stamping.
1245
+ * @phydev: the phy_device struct
1246
+ */
1247
+static inline bool phy_has_rxtstamp(struct phy_device *phydev)
1248
+{
1249
+ return phydev && phydev->mii_ts && phydev->mii_ts->rxtstamp;
1250
+}
1251
+
1252
+/**
1253
+ * phy_has_tsinfo - Tests whether a PHY reports time stamping and/or
1254
+ * PTP hardware clock capabilities.
1255
+ * @phydev: the phy_device struct
1256
+ */
1257
+static inline bool phy_has_tsinfo(struct phy_device *phydev)
1258
+{
1259
+ return phydev && phydev->mii_ts && phydev->mii_ts->ts_info;
1260
+}
1261
+
1262
+/**
1263
+ * phy_has_txtstamp - Tests whether a PHY supports transmit time stamping.
1264
+ * @phydev: the phy_device struct
1265
+ */
1266
+static inline bool phy_has_txtstamp(struct phy_device *phydev)
1267
+{
1268
+ return phydev && phydev->mii_ts && phydev->mii_ts->txtstamp;
1269
+}
1270
+
1271
+static inline int phy_hwtstamp(struct phy_device *phydev, struct ifreq *ifr)
1272
+{
1273
+ return phydev->mii_ts->hwtstamp(phydev->mii_ts, ifr);
1274
+}
1275
+
1276
+static inline bool phy_rxtstamp(struct phy_device *phydev, struct sk_buff *skb,
1277
+ int type)
1278
+{
1279
+ return phydev->mii_ts->rxtstamp(phydev->mii_ts, skb, type);
1280
+}
1281
+
1282
+static inline int phy_ts_info(struct phy_device *phydev,
1283
+ struct ethtool_ts_info *tsinfo)
1284
+{
1285
+ return phydev->mii_ts->ts_info(phydev->mii_ts, tsinfo);
1286
+}
1287
+
1288
+static inline void phy_txtstamp(struct phy_device *phydev, struct sk_buff *skb,
1289
+ int type)
1290
+{
1291
+ phydev->mii_ts->txtstamp(phydev->mii_ts, skb, type);
8511292 }
8521293
8531294 /**
....@@ -862,7 +1303,7 @@
8621303 /**
8631304 * phy_interface_mode_is_rgmii - Convenience function for testing if a
8641305 * PHY interface mode is RGMII (all variants)
865
- * @mode: the phy_interface_t enum
1306
+ * @mode: the &phy_interface_t enum
8661307 */
8671308 static inline bool phy_interface_mode_is_rgmii(phy_interface_t mode)
8681309 {
....@@ -871,11 +1312,11 @@
8711312 };
8721313
8731314 /**
874
- * phy_interface_mode_is_8023z() - does the phy interface mode use 802.3z
1315
+ * phy_interface_mode_is_8023z() - does the PHY interface mode use 802.3z
8751316 * negotiation
8761317 * @mode: one of &enum phy_interface_t
8771318 *
878
- * Returns true if the phy interface mode uses the 16-bit negotiation
1319
+ * Returns true if the PHY interface mode uses the 16-bit negotiation
8791320 * word as defined in 802.3z. (See 802.3-2015 37.2.1 Config_Reg encoding)
8801321 */
8811322 static inline bool phy_interface_mode_is_8023z(phy_interface_t mode)
....@@ -894,7 +1335,7 @@
8941335 return phy_interface_mode_is_rgmii(phydev->interface);
8951336 };
8961337
897
-/*
1338
+/**
8981339 * phy_is_pseudo_fixed_link - Convenience function for testing if this
8991340 * PHY is the CPU port facing side of an Ethernet switch, or similar.
9001341 * @phydev: the phy_device struct
....@@ -904,27 +1345,17 @@
9041345 return phydev->is_pseudo_fixed_link;
9051346 }
9061347
907
-/**
908
- * phy_write_mmd - Convenience function for writing a register
909
- * on an MMD on a given PHY.
910
- * @phydev: The phy_device struct
911
- * @devad: The MMD to read from
912
- * @regnum: The register on the MMD to read
913
- * @val: value to write to @regnum
914
- *
915
- * Same rules as for phy_write();
916
- */
917
-int phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val);
918
-
9191348 int phy_save_page(struct phy_device *phydev);
9201349 int phy_select_page(struct phy_device *phydev, int page);
9211350 int phy_restore_page(struct phy_device *phydev, int oldpage, int ret);
9221351 int phy_read_paged(struct phy_device *phydev, int page, u32 regnum);
9231352 int phy_write_paged(struct phy_device *phydev, int page, u32 regnum, u16 val);
1353
+int phy_modify_paged_changed(struct phy_device *phydev, int page, u32 regnum,
1354
+ u16 mask, u16 set);
9241355 int phy_modify_paged(struct phy_device *phydev, int page, u32 regnum,
9251356 u16 mask, u16 set);
9261357
927
-struct phy_device *phy_device_create(struct mii_bus *bus, int addr, int phy_id,
1358
+struct phy_device *phy_device_create(struct mii_bus *bus, int addr, u32 phy_id,
9281359 bool is_c45,
9291360 struct phy_c45_device_ids *c45_ids);
9301361 #if IS_ENABLED(CONFIG_PHYLIB)
....@@ -951,6 +1382,10 @@
9511382 int phy_resume(struct phy_device *phydev);
9521383 int __phy_resume(struct phy_device *phydev);
9531384 int phy_loopback(struct phy_device *phydev, bool enable);
1385
+void phy_sfp_attach(void *upstream, struct sfp_bus *bus);
1386
+void phy_sfp_detach(void *upstream, struct sfp_bus *bus);
1387
+int phy_sfp_probe(struct phy_device *phydev,
1388
+ const struct sfp_upstream_ops *ops);
9541389 struct phy_device *phy_attach(struct net_device *dev, const char *bus_id,
9551390 phy_interface_t interface);
9561391 struct phy_device *phy_find_first(struct mii_bus *bus);
....@@ -971,9 +1406,36 @@
9711406 int phy_speed_down(struct phy_device *phydev, bool sync);
9721407 int phy_speed_up(struct phy_device *phydev);
9731408
974
-int phy_stop_interrupts(struct phy_device *phydev);
9751409 int phy_restart_aneg(struct phy_device *phydev);
9761410 int phy_reset_after_clk_enable(struct phy_device *phydev);
1411
+
1412
+#if IS_ENABLED(CONFIG_PHYLIB)
1413
+int phy_start_cable_test(struct phy_device *phydev,
1414
+ struct netlink_ext_ack *extack);
1415
+int phy_start_cable_test_tdr(struct phy_device *phydev,
1416
+ struct netlink_ext_ack *extack,
1417
+ const struct phy_tdr_config *config);
1418
+#else
1419
+static inline
1420
+int phy_start_cable_test(struct phy_device *phydev,
1421
+ struct netlink_ext_ack *extack)
1422
+{
1423
+ NL_SET_ERR_MSG(extack, "Kernel not compiled with PHYLIB support");
1424
+ return -EOPNOTSUPP;
1425
+}
1426
+static inline
1427
+int phy_start_cable_test_tdr(struct phy_device *phydev,
1428
+ struct netlink_ext_ack *extack,
1429
+ const struct phy_tdr_config *config)
1430
+{
1431
+ NL_SET_ERR_MSG(extack, "Kernel not compiled with PHYLIB support");
1432
+ return -EOPNOTSUPP;
1433
+}
1434
+#endif
1435
+
1436
+int phy_cable_test_result(struct phy_device *phydev, u8 pair, u16 result);
1437
+int phy_cable_test_fault_length(struct phy_device *phydev, u8 pair,
1438
+ u16 cm);
9771439
9781440 static inline void phy_device_reset(struct phy_device *phydev, int value)
9791441 {
....@@ -983,6 +1445,12 @@
9831445 #define phydev_err(_phydev, format, args...) \
9841446 dev_err(&_phydev->mdio.dev, format, ##args)
9851447
1448
+#define phydev_info(_phydev, format, args...) \
1449
+ dev_info(&_phydev->mdio.dev, format, ##args)
1450
+
1451
+#define phydev_warn(_phydev, format, args...) \
1452
+ dev_warn(&_phydev->mdio.dev, format, ##args)
1453
+
9861454 #define phydev_dbg(_phydev, format, args...) \
9871455 dev_dbg(&_phydev->mdio.dev, format, ##args)
9881456
....@@ -991,23 +1459,49 @@
9911459 return dev_name(&phydev->mdio.dev);
9921460 }
9931461
1462
+static inline void phy_lock_mdio_bus(struct phy_device *phydev)
1463
+{
1464
+ mutex_lock(&phydev->mdio.bus->mdio_lock);
1465
+}
1466
+
1467
+static inline void phy_unlock_mdio_bus(struct phy_device *phydev)
1468
+{
1469
+ mutex_unlock(&phydev->mdio.bus->mdio_lock);
1470
+}
1471
+
9941472 void phy_attached_print(struct phy_device *phydev, const char *fmt, ...)
9951473 __printf(2, 3);
1474
+char *phy_attached_info_irq(struct phy_device *phydev)
1475
+ __malloc;
9961476 void phy_attached_info(struct phy_device *phydev);
9971477
9981478 /* Clause 22 PHY */
999
-int genphy_config_init(struct phy_device *phydev);
1479
+int genphy_read_abilities(struct phy_device *phydev);
10001480 int genphy_setup_forced(struct phy_device *phydev);
10011481 int genphy_restart_aneg(struct phy_device *phydev);
1002
-int genphy_config_aneg(struct phy_device *phydev);
1482
+int genphy_check_and_restart_aneg(struct phy_device *phydev, bool restart);
1483
+int genphy_config_eee_advert(struct phy_device *phydev);
1484
+int __genphy_config_aneg(struct phy_device *phydev, bool changed);
10031485 int genphy_aneg_done(struct phy_device *phydev);
10041486 int genphy_update_link(struct phy_device *phydev);
1487
+int genphy_read_lpa(struct phy_device *phydev);
1488
+int genphy_read_status_fixed(struct phy_device *phydev);
10051489 int genphy_read_status(struct phy_device *phydev);
10061490 int genphy_suspend(struct phy_device *phydev);
10071491 int genphy_resume(struct phy_device *phydev);
10081492 int genphy_loopback(struct phy_device *phydev, bool enable);
10091493 int genphy_soft_reset(struct phy_device *phydev);
1010
-static inline int genphy_no_soft_reset(struct phy_device *phydev)
1494
+
1495
+static inline int genphy_config_aneg(struct phy_device *phydev)
1496
+{
1497
+ return __genphy_config_aneg(phydev, false);
1498
+}
1499
+
1500
+static inline int genphy_no_ack_interrupt(struct phy_device *phydev)
1501
+{
1502
+ return 0;
1503
+}
1504
+static inline int genphy_no_config_intr(struct phy_device *phydev)
10111505 {
10121506 return 0;
10131507 }
....@@ -1016,23 +1510,30 @@
10161510 int genphy_write_mmd_unsupported(struct phy_device *phdev, int devnum,
10171511 u16 regnum, u16 val);
10181512
1513
+/* Clause 37 */
1514
+int genphy_c37_config_aneg(struct phy_device *phydev);
1515
+int genphy_c37_read_status(struct phy_device *phydev);
1516
+
10191517 /* Clause 45 PHY */
10201518 int genphy_c45_restart_aneg(struct phy_device *phydev);
1519
+int genphy_c45_check_and_restart_aneg(struct phy_device *phydev, bool restart);
10211520 int genphy_c45_aneg_done(struct phy_device *phydev);
1022
-int genphy_c45_read_link(struct phy_device *phydev, u32 mmd_mask);
1521
+int genphy_c45_read_link(struct phy_device *phydev);
10231522 int genphy_c45_read_lpa(struct phy_device *phydev);
10241523 int genphy_c45_read_pma(struct phy_device *phydev);
10251524 int genphy_c45_pma_setup_forced(struct phy_device *phydev);
1525
+int genphy_c45_an_config_aneg(struct phy_device *phydev);
10261526 int genphy_c45_an_disable_aneg(struct phy_device *phydev);
10271527 int genphy_c45_read_mdix(struct phy_device *phydev);
1528
+int genphy_c45_pma_read_abilities(struct phy_device *phydev);
1529
+int genphy_c45_read_status(struct phy_device *phydev);
1530
+int genphy_c45_config_aneg(struct phy_device *phydev);
1531
+
1532
+/* Generic C45 PHY driver */
1533
+extern struct phy_driver genphy_c45_driver;
10281534
10291535 /* The gen10g_* functions are the old Clause 45 stub */
10301536 int gen10g_config_aneg(struct phy_device *phydev);
1031
-int gen10g_read_status(struct phy_device *phydev);
1032
-int gen10g_no_soft_reset(struct phy_device *phydev);
1033
-int gen10g_config_init(struct phy_device *phydev);
1034
-int gen10g_suspend(struct phy_device *phydev);
1035
-int gen10g_resume(struct phy_device *phydev);
10361537
10371538 static inline int phy_read_status(struct phy_device *phydev)
10381539 {
....@@ -1051,20 +1552,38 @@
10511552 int phy_drivers_register(struct phy_driver *new_driver, int n,
10521553 struct module *owner);
10531554 void phy_state_machine(struct work_struct *work);
1054
-void phy_change_work(struct work_struct *work);
1555
+void phy_queue_state_machine(struct phy_device *phydev, unsigned long jiffies);
10551556 void phy_mac_interrupt(struct phy_device *phydev);
10561557 void phy_start_machine(struct phy_device *phydev);
10571558 void phy_stop_machine(struct phy_device *phydev);
1058
-void phy_trigger_machine(struct phy_device *phydev, bool sync);
1059
-int phy_ethtool_sset(struct phy_device *phydev, struct ethtool_cmd *cmd);
10601559 void phy_ethtool_ksettings_get(struct phy_device *phydev,
10611560 struct ethtool_link_ksettings *cmd);
10621561 int phy_ethtool_ksettings_set(struct phy_device *phydev,
10631562 const struct ethtool_link_ksettings *cmd);
10641563 int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd);
1065
-int phy_start_interrupts(struct phy_device *phydev);
1564
+int phy_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd);
1565
+int phy_do_ioctl_running(struct net_device *dev, struct ifreq *ifr, int cmd);
1566
+int phy_disable_interrupts(struct phy_device *phydev);
1567
+void phy_request_interrupt(struct phy_device *phydev);
1568
+void phy_free_interrupt(struct phy_device *phydev);
10661569 void phy_print_status(struct phy_device *phydev);
10671570 int phy_set_max_speed(struct phy_device *phydev, u32 max_speed);
1571
+void phy_remove_link_mode(struct phy_device *phydev, u32 link_mode);
1572
+void phy_advertise_supported(struct phy_device *phydev);
1573
+void phy_support_sym_pause(struct phy_device *phydev);
1574
+void phy_support_asym_pause(struct phy_device *phydev);
1575
+void phy_set_sym_pause(struct phy_device *phydev, bool rx, bool tx,
1576
+ bool autoneg);
1577
+void phy_set_asym_pause(struct phy_device *phydev, bool rx, bool tx);
1578
+bool phy_validate_pause(struct phy_device *phydev,
1579
+ struct ethtool_pauseparam *pp);
1580
+void phy_get_pause(struct phy_device *phydev, bool *tx_pause, bool *rx_pause);
1581
+
1582
+s32 phy_get_internal_delay(struct phy_device *phydev, struct device *dev,
1583
+ const int *delay_values, int size, bool is_rx);
1584
+
1585
+void phy_resolve_pause(unsigned long *local_adv, unsigned long *partner_adv,
1586
+ bool *tx_pause, bool *rx_pause);
10681587
10691588 int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask,
10701589 int (*run)(struct phy_device *));
....@@ -1089,56 +1608,82 @@
10891608 int phy_ethtool_set_link_ksettings(struct net_device *ndev,
10901609 const struct ethtool_link_ksettings *cmd);
10911610 int phy_ethtool_nway_reset(struct net_device *ndev);
1611
+int phy_package_join(struct phy_device *phydev, int addr, size_t priv_size);
1612
+void phy_package_leave(struct phy_device *phydev);
1613
+int devm_phy_package_join(struct device *dev, struct phy_device *phydev,
1614
+ int addr, size_t priv_size);
10921615
10931616 #if IS_ENABLED(CONFIG_PHYLIB)
10941617 int __init mdio_bus_init(void);
10951618 void mdio_bus_exit(void);
10961619 #endif
10971620
1098
-/* Inline function for use within net/core/ethtool.c (built-in) */
1099
-static inline int phy_ethtool_get_strings(struct phy_device *phydev, u8 *data)
1621
+int phy_ethtool_get_strings(struct phy_device *phydev, u8 *data);
1622
+int phy_ethtool_get_sset_count(struct phy_device *phydev);
1623
+int phy_ethtool_get_stats(struct phy_device *phydev,
1624
+ struct ethtool_stats *stats, u64 *data);
1625
+
1626
+static inline int phy_package_read(struct phy_device *phydev, u32 regnum)
11001627 {
1101
- if (!phydev->drv)
1628
+ struct phy_package_shared *shared = phydev->shared;
1629
+
1630
+ if (!shared)
11021631 return -EIO;
11031632
1104
- mutex_lock(&phydev->lock);
1105
- phydev->drv->get_strings(phydev, data);
1106
- mutex_unlock(&phydev->lock);
1107
-
1108
- return 0;
1633
+ return mdiobus_read(phydev->mdio.bus, shared->addr, regnum);
11091634 }
11101635
1111
-static inline int phy_ethtool_get_sset_count(struct phy_device *phydev)
1636
+static inline int __phy_package_read(struct phy_device *phydev, u32 regnum)
11121637 {
1113
- int ret;
1638
+ struct phy_package_shared *shared = phydev->shared;
11141639
1115
- if (!phydev->drv)
1640
+ if (!shared)
11161641 return -EIO;
11171642
1118
- if (phydev->drv->get_sset_count &&
1119
- phydev->drv->get_strings &&
1120
- phydev->drv->get_stats) {
1121
- mutex_lock(&phydev->lock);
1122
- ret = phydev->drv->get_sset_count(phydev);
1123
- mutex_unlock(&phydev->lock);
1124
-
1125
- return ret;
1126
- }
1127
-
1128
- return -EOPNOTSUPP;
1643
+ return __mdiobus_read(phydev->mdio.bus, shared->addr, regnum);
11291644 }
11301645
1131
-static inline int phy_ethtool_get_stats(struct phy_device *phydev,
1132
- struct ethtool_stats *stats, u64 *data)
1646
+static inline int phy_package_write(struct phy_device *phydev,
1647
+ u32 regnum, u16 val)
11331648 {
1134
- if (!phydev->drv)
1649
+ struct phy_package_shared *shared = phydev->shared;
1650
+
1651
+ if (!shared)
11351652 return -EIO;
11361653
1137
- mutex_lock(&phydev->lock);
1138
- phydev->drv->get_stats(phydev, stats, data);
1139
- mutex_unlock(&phydev->lock);
1654
+ return mdiobus_write(phydev->mdio.bus, shared->addr, regnum, val);
1655
+}
11401656
1141
- return 0;
1657
+static inline int __phy_package_write(struct phy_device *phydev,
1658
+ u32 regnum, u16 val)
1659
+{
1660
+ struct phy_package_shared *shared = phydev->shared;
1661
+
1662
+ if (!shared)
1663
+ return -EIO;
1664
+
1665
+ return __mdiobus_write(phydev->mdio.bus, shared->addr, regnum, val);
1666
+}
1667
+
1668
+static inline bool __phy_package_set_once(struct phy_device *phydev,
1669
+ unsigned int b)
1670
+{
1671
+ struct phy_package_shared *shared = phydev->shared;
1672
+
1673
+ if (!shared)
1674
+ return false;
1675
+
1676
+ return !test_and_set_bit(b, &shared->flags);
1677
+}
1678
+
1679
+static inline bool phy_package_init_once(struct phy_device *phydev)
1680
+{
1681
+ return __phy_package_set_once(phydev, PHY_SHARED_F_INIT_DONE);
1682
+}
1683
+
1684
+static inline bool phy_package_probe_once(struct phy_device *phydev)
1685
+{
1686
+ return __phy_package_set_once(phydev, PHY_SHARED_F_PROBE_DONE);
11421687 }
11431688
11441689 extern struct bus_type mdio_bus_type;
....@@ -1163,8 +1708,9 @@
11631708
11641709
11651710 /**
1166
- * module_phy_driver() - Helper macro for registering PHY drivers
1711
+ * phy_module_driver() - Helper macro for registering PHY drivers
11671712 * @__phy_drivers: array of PHY drivers to register
1713
+ * @__count: Numbers of members in array
11681714 *
11691715 * Helper macro for PHY drivers which do not do anything special in module
11701716 * init/exit. Each module may only use this macro once, and calling it
....@@ -1185,4 +1731,7 @@
11851731 #define module_phy_driver(__phy_drivers) \
11861732 phy_module_driver(__phy_drivers, ARRAY_SIZE(__phy_drivers))
11871733
1734
+bool phy_driver_is_genphy(struct phy_device *phydev);
1735
+bool phy_driver_is_genphy_10g(struct phy_device *phydev);
1736
+
11881737 #endif /* __PHY_H */