1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#ifndef __PHY_H
17#define __PHY_H
18
19#include <linux/compiler.h>
20#include <linux/spinlock.h>
21#include <linux/ethtool.h>
22#include <linux/mdio.h>
23#include <linux/mii.h>
24#include <linux/module.h>
25#include <linux/timer.h>
26#include <linux/workqueue.h>
27#include <linux/mod_devicetable.h>
28
29#include <linux/atomic.h>
30
31#define PHY_DEFAULT_FEATURES (SUPPORTED_Autoneg | \
32 SUPPORTED_TP | \
33 SUPPORTED_MII)
34
35#define PHY_10BT_FEATURES (SUPPORTED_10baseT_Half | \
36 SUPPORTED_10baseT_Full)
37
38#define PHY_100BT_FEATURES (SUPPORTED_100baseT_Half | \
39 SUPPORTED_100baseT_Full)
40
41#define PHY_1000BT_FEATURES (SUPPORTED_1000baseT_Half | \
42 SUPPORTED_1000baseT_Full)
43
44#define PHY_BASIC_FEATURES (PHY_10BT_FEATURES | \
45 PHY_100BT_FEATURES | \
46 PHY_DEFAULT_FEATURES)
47
48#define PHY_GBIT_FEATURES (PHY_BASIC_FEATURES | \
49 PHY_1000BT_FEATURES)
50
51
52
53
54
55
56
57#define PHY_POLL -1
58#define PHY_IGNORE_INTERRUPT -2
59
60#define PHY_HAS_INTERRUPT 0x00000001
61#define PHY_IS_INTERNAL 0x00000002
62#define PHY_RST_AFTER_CLK_EN 0x00000004
63#define MDIO_DEVICE_IS_PHY 0x80000000
64
65
66typedef enum {
67 PHY_INTERFACE_MODE_NA,
68 PHY_INTERFACE_MODE_INTERNAL,
69 PHY_INTERFACE_MODE_MII,
70 PHY_INTERFACE_MODE_GMII,
71 PHY_INTERFACE_MODE_SGMII,
72 PHY_INTERFACE_MODE_TBI,
73 PHY_INTERFACE_MODE_REVMII,
74 PHY_INTERFACE_MODE_RMII,
75 PHY_INTERFACE_MODE_RGMII,
76 PHY_INTERFACE_MODE_RGMII_ID,
77 PHY_INTERFACE_MODE_RGMII_RXID,
78 PHY_INTERFACE_MODE_RGMII_TXID,
79 PHY_INTERFACE_MODE_RTBI,
80 PHY_INTERFACE_MODE_SMII,
81 PHY_INTERFACE_MODE_XGMII,
82 PHY_INTERFACE_MODE_MOCA,
83 PHY_INTERFACE_MODE_QSGMII,
84 PHY_INTERFACE_MODE_TRGMII,
85 PHY_INTERFACE_MODE_1000BASEX,
86 PHY_INTERFACE_MODE_2500BASEX,
87 PHY_INTERFACE_MODE_RXAUI,
88 PHY_INTERFACE_MODE_XAUI,
89
90 PHY_INTERFACE_MODE_10GKR,
91 PHY_INTERFACE_MODE_MAX,
92} phy_interface_t;
93
94
95
96
97
98
99
100
101
102
103
104
105unsigned int phy_supported_speeds(struct phy_device *phy,
106 unsigned int *speeds,
107 unsigned int size);
108
109
110
111
112
113
114static inline const char *phy_modes(phy_interface_t interface)
115{
116 switch (interface) {
117 case PHY_INTERFACE_MODE_NA:
118 return "";
119 case PHY_INTERFACE_MODE_INTERNAL:
120 return "internal";
121 case PHY_INTERFACE_MODE_MII:
122 return "mii";
123 case PHY_INTERFACE_MODE_GMII:
124 return "gmii";
125 case PHY_INTERFACE_MODE_SGMII:
126 return "sgmii";
127 case PHY_INTERFACE_MODE_TBI:
128 return "tbi";
129 case PHY_INTERFACE_MODE_REVMII:
130 return "rev-mii";
131 case PHY_INTERFACE_MODE_RMII:
132 return "rmii";
133 case PHY_INTERFACE_MODE_RGMII:
134 return "rgmii";
135 case PHY_INTERFACE_MODE_RGMII_ID:
136 return "rgmii-id";
137 case PHY_INTERFACE_MODE_RGMII_RXID:
138 return "rgmii-rxid";
139 case PHY_INTERFACE_MODE_RGMII_TXID:
140 return "rgmii-txid";
141 case PHY_INTERFACE_MODE_RTBI:
142 return "rtbi";
143 case PHY_INTERFACE_MODE_SMII:
144 return "smii";
145 case PHY_INTERFACE_MODE_XGMII:
146 return "xgmii";
147 case PHY_INTERFACE_MODE_MOCA:
148 return "moca";
149 case PHY_INTERFACE_MODE_QSGMII:
150 return "qsgmii";
151 case PHY_INTERFACE_MODE_TRGMII:
152 return "trgmii";
153 case PHY_INTERFACE_MODE_1000BASEX:
154 return "1000base-x";
155 case PHY_INTERFACE_MODE_2500BASEX:
156 return "2500base-x";
157 case PHY_INTERFACE_MODE_RXAUI:
158 return "rxaui";
159 case PHY_INTERFACE_MODE_XAUI:
160 return "xaui";
161 case PHY_INTERFACE_MODE_10GKR:
162 return "10gbase-kr";
163 default:
164 return "unknown";
165 }
166}
167
168
169#define PHY_INIT_TIMEOUT 100000
170#define PHY_STATE_TIME 1
171#define PHY_FORCE_TIMEOUT 10
172#define PHY_AN_TIMEOUT 10
173
174#define PHY_MAX_ADDR 32
175
176
177#define PHY_ID_FMT "%s:%02x"
178
179#define MII_BUS_ID_SIZE 61
180
181
182
183#define MII_ADDR_C45 (1<<30)
184
185struct device;
186struct phylink;
187struct sk_buff;
188
189
190
191
192
193struct mii_bus {
194 struct module *owner;
195 const char *name;
196 char id[MII_BUS_ID_SIZE];
197 void *priv;
198 int (*read)(struct mii_bus *bus, int addr, int regnum);
199 int (*write)(struct mii_bus *bus, int addr, int regnum, u16 val);
200 int (*reset)(struct mii_bus *bus);
201
202
203
204
205
206 struct mutex mdio_lock;
207
208 struct device *parent;
209 enum {
210 MDIOBUS_ALLOCATED = 1,
211 MDIOBUS_REGISTERED,
212 MDIOBUS_UNREGISTERED,
213 MDIOBUS_RELEASED,
214 } state;
215 struct device dev;
216
217
218 struct mdio_device *mdio_map[PHY_MAX_ADDR];
219
220
221 u32 phy_mask;
222
223
224 u32 phy_ignore_ta_mask;
225
226
227
228
229
230 int irq[PHY_MAX_ADDR];
231
232
233 int reset_delay_us;
234
235 struct gpio_desc *reset_gpiod;
236};
237#define to_mii_bus(d) container_of(d, struct mii_bus, dev)
238
239struct mii_bus *mdiobus_alloc_size(size_t);
240static inline struct mii_bus *mdiobus_alloc(void)
241{
242 return mdiobus_alloc_size(0);
243}
244
245int __mdiobus_register(struct mii_bus *bus, struct module *owner);
246#define mdiobus_register(bus) __mdiobus_register(bus, THIS_MODULE)
247void mdiobus_unregister(struct mii_bus *bus);
248void mdiobus_free(struct mii_bus *bus);
249struct mii_bus *devm_mdiobus_alloc_size(struct device *dev, int sizeof_priv);
250static inline struct mii_bus *devm_mdiobus_alloc(struct device *dev)
251{
252 return devm_mdiobus_alloc_size(dev, 0);
253}
254
255void devm_mdiobus_free(struct device *dev, struct mii_bus *bus);
256struct phy_device *mdiobus_scan(struct mii_bus *bus, int addr);
257
258#define PHY_INTERRUPT_DISABLED 0x0
259#define PHY_INTERRUPT_ENABLED 0x80000000
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341enum phy_state {
342 PHY_DOWN = 0,
343 PHY_STARTING,
344 PHY_READY,
345 PHY_PENDING,
346 PHY_UP,
347 PHY_AN,
348 PHY_RUNNING,
349 PHY_NOLINK,
350 PHY_FORCING,
351 PHY_CHANGELINK,
352 PHY_HALTED,
353 PHY_RESUMING
354};
355
356
357
358
359
360
361struct phy_c45_device_ids {
362 u32 devices_in_package;
363 u32 device_ids[8];
364};
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399struct phy_device {
400 struct mdio_device mdio;
401
402
403
404 struct phy_driver *drv;
405
406 u32 phy_id;
407
408 struct phy_c45_device_ids c45_ids;
409 unsigned is_c45:1;
410 unsigned is_internal:1;
411 unsigned is_pseudo_fixed_link:1;
412 unsigned has_fixups:1;
413 unsigned suspended:1;
414 unsigned sysfs_links:1;
415 unsigned loopback_enabled:1;
416
417 unsigned autoneg:1;
418
419 unsigned link:1;
420
421 enum phy_state state;
422
423 u32 dev_flags;
424
425 phy_interface_t interface;
426
427
428
429
430
431 int speed;
432 int duplex;
433 int pause;
434 int asym_pause;
435
436
437 u32 interrupts;
438
439
440
441 u32 supported;
442 u32 advertising;
443 u32 lp_advertising;
444
445
446 u32 eee_broken_modes;
447
448 int link_timeout;
449
450#ifdef CONFIG_LED_TRIGGER_PHY
451 struct phy_led_trigger *phy_led_triggers;
452 unsigned int phy_num_led_triggers;
453 struct phy_led_trigger *last_triggered;
454
455 struct phy_led_trigger *led_link_trigger;
456#endif
457
458
459
460
461
462 int irq;
463
464
465
466 void *priv;
467
468
469 struct work_struct phy_queue;
470 struct delayed_work state_queue;
471
472 struct mutex lock;
473
474 struct phylink *phylink;
475 struct net_device *attached_dev;
476
477 u8 mdix;
478 u8 mdix_ctrl;
479
480 void (*phy_link_change)(struct phy_device *, bool up, bool do_carrier);
481 void (*adjust_link)(struct net_device *dev);
482};
483#define to_phy_device(d) container_of(to_mdio_device(d), \
484 struct phy_device, mdio)
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507struct phy_driver {
508 struct mdio_driver_common mdiodrv;
509 u32 phy_id;
510 char *name;
511 u32 phy_id_mask;
512 u32 features;
513 u32 flags;
514 const void *driver_data;
515
516
517
518
519 int (*soft_reset)(struct phy_device *phydev);
520
521
522
523
524
525 int (*config_init)(struct phy_device *phydev);
526
527
528
529
530
531 int (*probe)(struct phy_device *phydev);
532
533
534 int (*suspend)(struct phy_device *phydev);
535 int (*resume)(struct phy_device *phydev);
536
537
538
539
540
541
542
543 int (*config_aneg)(struct phy_device *phydev);
544
545
546 int (*aneg_done)(struct phy_device *phydev);
547
548
549 int (*read_status)(struct phy_device *phydev);
550
551
552 int (*ack_interrupt)(struct phy_device *phydev);
553
554
555 int (*config_intr)(struct phy_device *phydev);
556
557
558
559
560
561 int (*did_interrupt)(struct phy_device *phydev);
562
563
564 void (*remove)(struct phy_device *phydev);
565
566
567
568
569
570 int (*match_phy_device)(struct phy_device *phydev);
571
572
573 int (*ts_info)(struct phy_device *phydev, struct ethtool_ts_info *ti);
574
575
576 int (*hwtstamp)(struct phy_device *phydev, struct ifreq *ifr);
577
578
579
580
581
582
583
584
585 bool (*rxtstamp)(struct phy_device *dev, struct sk_buff *skb, int type);
586
587
588
589
590
591
592
593 void (*txtstamp)(struct phy_device *dev, struct sk_buff *skb, int type);
594
595
596
597
598 int (*set_wol)(struct phy_device *dev, struct ethtool_wolinfo *wol);
599
600
601 void (*get_wol)(struct phy_device *dev, struct ethtool_wolinfo *wol);
602
603
604
605
606
607
608
609
610 void (*link_change_notify)(struct phy_device *dev);
611
612
613
614
615
616
617
618
619
620
621 int (*read_mmd)(struct phy_device *dev, int devnum, u16 regnum);
622
623
624
625
626
627
628
629
630
631
632
633 int (*write_mmd)(struct phy_device *dev, int devnum, u16 regnum,
634 u16 val);
635
636 int (*read_page)(struct phy_device *dev);
637 int (*write_page)(struct phy_device *dev, int page);
638
639
640
641 int (*module_info)(struct phy_device *dev,
642 struct ethtool_modinfo *modinfo);
643
644
645 int (*module_eeprom)(struct phy_device *dev,
646 struct ethtool_eeprom *ee, u8 *data);
647
648
649 int (*get_sset_count)(struct phy_device *dev);
650 void (*get_strings)(struct phy_device *dev, u8 *data);
651 void (*get_stats)(struct phy_device *dev,
652 struct ethtool_stats *stats, u64 *data);
653
654
655 int (*get_tunable)(struct phy_device *dev,
656 struct ethtool_tunable *tuna, void *data);
657 int (*set_tunable)(struct phy_device *dev,
658 struct ethtool_tunable *tuna,
659 const void *data);
660 int (*set_loopback)(struct phy_device *dev, bool enable);
661};
662#define to_phy_driver(d) container_of(to_mdio_common_driver(d), \
663 struct phy_driver, mdiodrv)
664
665#define PHY_ANY_ID "MATCH ANY PHY"
666#define PHY_ANY_UID 0xffffffff
667
668
669struct phy_fixup {
670 struct list_head list;
671 char bus_id[MII_BUS_ID_SIZE + 3];
672 u32 phy_uid;
673 u32 phy_uid_mask;
674 int (*run)(struct phy_device *phydev);
675};
676
677const char *phy_speed_to_str(int speed);
678const char *phy_duplex_to_str(unsigned int duplex);
679
680
681
682
683struct phy_setting {
684 u32 speed;
685 u8 duplex;
686 u8 bit;
687};
688
689const struct phy_setting *
690phy_lookup_setting(int speed, int duplex, const unsigned long *mask,
691 size_t maxbit, bool exact);
692size_t phy_speeds(unsigned int *speeds, size_t size,
693 unsigned long *mask, size_t maxbit);
694
695void phy_resolve_aneg_linkmode(struct phy_device *phydev);
696
697
698
699
700
701
702
703
704
705
706int phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum);
707
708
709
710
711
712
713
714
715
716
717static inline int phy_read(struct phy_device *phydev, u32 regnum)
718{
719 return mdiobus_read(phydev->mdio.bus, phydev->mdio.addr, regnum);
720}
721
722
723
724
725
726
727
728
729static inline int __phy_read(struct phy_device *phydev, u32 regnum)
730{
731 return __mdiobus_read(phydev->mdio.bus, phydev->mdio.addr, regnum);
732}
733
734
735
736
737
738
739
740
741
742
743
744static inline int phy_write(struct phy_device *phydev, u32 regnum, u16 val)
745{
746 return mdiobus_write(phydev->mdio.bus, phydev->mdio.addr, regnum, val);
747}
748
749
750
751
752
753
754
755
756
757static inline int __phy_write(struct phy_device *phydev, u32 regnum, u16 val)
758{
759 return __mdiobus_write(phydev->mdio.bus, phydev->mdio.addr, regnum,
760 val);
761}
762
763int __phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set);
764int phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set);
765
766
767
768
769
770
771
772
773
774static inline int __phy_set_bits(struct phy_device *phydev, u32 regnum, u16 val)
775{
776 return __phy_modify(phydev, regnum, 0, val);
777}
778
779
780
781
782
783
784
785
786
787static inline int __phy_clear_bits(struct phy_device *phydev, u32 regnum,
788 u16 val)
789{
790 return __phy_modify(phydev, regnum, val, 0);
791}
792
793
794
795
796
797
798
799static inline int phy_set_bits(struct phy_device *phydev, u32 regnum, u16 val)
800{
801 return phy_modify(phydev, regnum, 0, val);
802}
803
804
805
806
807
808
809
810static inline int phy_clear_bits(struct phy_device *phydev, u32 regnum, u16 val)
811{
812 return phy_modify(phydev, regnum, val, 0);
813}
814
815
816
817
818
819
820
821
822static inline bool phy_interrupt_is_valid(struct phy_device *phydev)
823{
824 return phydev->irq != PHY_POLL && phydev->irq != PHY_IGNORE_INTERRUPT;
825}
826
827
828
829
830
831
832static inline bool phy_polling_mode(struct phy_device *phydev)
833{
834 return phydev->irq == PHY_POLL;
835}
836
837
838
839
840
841static inline bool phy_is_internal(struct phy_device *phydev)
842{
843 return phydev->is_internal;
844}
845
846
847
848
849
850
851static inline bool phy_interface_mode_is_rgmii(phy_interface_t mode)
852{
853 return mode >= PHY_INTERFACE_MODE_RGMII &&
854 mode <= PHY_INTERFACE_MODE_RGMII_TXID;
855};
856
857
858
859
860
861
862
863
864
865static inline bool phy_interface_mode_is_8023z(phy_interface_t mode)
866{
867 return mode == PHY_INTERFACE_MODE_1000BASEX ||
868 mode == PHY_INTERFACE_MODE_2500BASEX;
869}
870
871
872
873
874
875
876static inline bool phy_interface_is_rgmii(struct phy_device *phydev)
877{
878 return phy_interface_mode_is_rgmii(phydev->interface);
879};
880
881
882
883
884
885
886static inline bool phy_is_pseudo_fixed_link(struct phy_device *phydev)
887{
888 return phydev->is_pseudo_fixed_link;
889}
890
891
892
893
894
895
896
897
898
899
900
901int phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val);
902
903int phy_save_page(struct phy_device *phydev);
904int phy_select_page(struct phy_device *phydev, int page);
905int phy_restore_page(struct phy_device *phydev, int oldpage, int ret);
906int phy_read_paged(struct phy_device *phydev, int page, u32 regnum);
907int phy_write_paged(struct phy_device *phydev, int page, u32 regnum, u16 val);
908int phy_modify_paged(struct phy_device *phydev, int page, u32 regnum,
909 u16 mask, u16 set);
910
911struct phy_device *phy_device_create(struct mii_bus *bus, int addr, int phy_id,
912 bool is_c45,
913 struct phy_c45_device_ids *c45_ids);
914#if IS_ENABLED(CONFIG_PHYLIB)
915struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45);
916int phy_device_register(struct phy_device *phy);
917void phy_device_free(struct phy_device *phydev);
918#else
919static inline
920struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45)
921{
922 return NULL;
923}
924
925static inline int phy_device_register(struct phy_device *phy)
926{
927 return 0;
928}
929
930static inline void phy_device_free(struct phy_device *phydev) { }
931#endif
932void phy_device_remove(struct phy_device *phydev);
933int phy_init_hw(struct phy_device *phydev);
934int phy_suspend(struct phy_device *phydev);
935int phy_resume(struct phy_device *phydev);
936int __phy_resume(struct phy_device *phydev);
937int phy_loopback(struct phy_device *phydev, bool enable);
938struct phy_device *phy_attach(struct net_device *dev, const char *bus_id,
939 phy_interface_t interface);
940struct phy_device *phy_find_first(struct mii_bus *bus);
941int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
942 u32 flags, phy_interface_t interface);
943int phy_connect_direct(struct net_device *dev, struct phy_device *phydev,
944 void (*handler)(struct net_device *),
945 phy_interface_t interface);
946struct phy_device *phy_connect(struct net_device *dev, const char *bus_id,
947 void (*handler)(struct net_device *),
948 phy_interface_t interface);
949void phy_disconnect(struct phy_device *phydev);
950void phy_detach(struct phy_device *phydev);
951void phy_start(struct phy_device *phydev);
952void phy_stop(struct phy_device *phydev);
953int phy_start_aneg(struct phy_device *phydev);
954int phy_aneg_done(struct phy_device *phydev);
955int phy_speed_down(struct phy_device *phydev, bool sync);
956int phy_speed_up(struct phy_device *phydev);
957
958int phy_stop_interrupts(struct phy_device *phydev);
959int phy_restart_aneg(struct phy_device *phydev);
960int phy_reset_after_clk_enable(struct phy_device *phydev);
961
962static inline void phy_device_reset(struct phy_device *phydev, int value)
963{
964 mdio_device_reset(&phydev->mdio, value);
965}
966
967#define phydev_err(_phydev, format, args...) \
968 dev_err(&_phydev->mdio.dev, format, ##args)
969
970#define phydev_dbg(_phydev, format, args...) \
971 dev_dbg(&_phydev->mdio.dev, format, ##args)
972
973static inline const char *phydev_name(const struct phy_device *phydev)
974{
975 return dev_name(&phydev->mdio.dev);
976}
977
978void phy_attached_print(struct phy_device *phydev, const char *fmt, ...)
979 __printf(2, 3);
980void phy_attached_info(struct phy_device *phydev);
981
982
983int genphy_config_init(struct phy_device *phydev);
984int genphy_setup_forced(struct phy_device *phydev);
985int genphy_restart_aneg(struct phy_device *phydev);
986int genphy_config_aneg(struct phy_device *phydev);
987int genphy_aneg_done(struct phy_device *phydev);
988int genphy_update_link(struct phy_device *phydev);
989int genphy_read_status(struct phy_device *phydev);
990int genphy_suspend(struct phy_device *phydev);
991int genphy_resume(struct phy_device *phydev);
992int genphy_loopback(struct phy_device *phydev, bool enable);
993int genphy_soft_reset(struct phy_device *phydev);
994static inline int genphy_no_soft_reset(struct phy_device *phydev)
995{
996 return 0;
997}
998int genphy_read_mmd_unsupported(struct phy_device *phdev, int devad,
999 u16 regnum);
1000int genphy_write_mmd_unsupported(struct phy_device *phdev, int devnum,
1001 u16 regnum, u16 val);
1002
1003
1004int genphy_c45_restart_aneg(struct phy_device *phydev);
1005int genphy_c45_aneg_done(struct phy_device *phydev);
1006int genphy_c45_read_link(struct phy_device *phydev, u32 mmd_mask);
1007int genphy_c45_read_lpa(struct phy_device *phydev);
1008int genphy_c45_read_pma(struct phy_device *phydev);
1009int genphy_c45_pma_setup_forced(struct phy_device *phydev);
1010int genphy_c45_an_disable_aneg(struct phy_device *phydev);
1011int genphy_c45_read_mdix(struct phy_device *phydev);
1012
1013
1014int gen10g_config_aneg(struct phy_device *phydev);
1015int gen10g_read_status(struct phy_device *phydev);
1016int gen10g_no_soft_reset(struct phy_device *phydev);
1017int gen10g_config_init(struct phy_device *phydev);
1018int gen10g_suspend(struct phy_device *phydev);
1019int gen10g_resume(struct phy_device *phydev);
1020
1021static inline int phy_read_status(struct phy_device *phydev)
1022{
1023 if (!phydev->drv)
1024 return -EIO;
1025
1026 if (phydev->drv->read_status)
1027 return phydev->drv->read_status(phydev);
1028 else
1029 return genphy_read_status(phydev);
1030}
1031
1032void phy_driver_unregister(struct phy_driver *drv);
1033void phy_drivers_unregister(struct phy_driver *drv, int n);
1034int phy_driver_register(struct phy_driver *new_driver, struct module *owner);
1035int phy_drivers_register(struct phy_driver *new_driver, int n,
1036 struct module *owner);
1037void phy_state_machine(struct work_struct *work);
1038void phy_change_work(struct work_struct *work);
1039void phy_mac_interrupt(struct phy_device *phydev);
1040void phy_start_machine(struct phy_device *phydev);
1041void phy_stop_machine(struct phy_device *phydev);
1042void phy_trigger_machine(struct phy_device *phydev, bool sync);
1043int phy_ethtool_sset(struct phy_device *phydev, struct ethtool_cmd *cmd);
1044void phy_ethtool_ksettings_get(struct phy_device *phydev,
1045 struct ethtool_link_ksettings *cmd);
1046int phy_ethtool_ksettings_set(struct phy_device *phydev,
1047 const struct ethtool_link_ksettings *cmd);
1048int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd);
1049int phy_start_interrupts(struct phy_device *phydev);
1050void phy_print_status(struct phy_device *phydev);
1051int phy_set_max_speed(struct phy_device *phydev, u32 max_speed);
1052
1053int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask,
1054 int (*run)(struct phy_device *));
1055int phy_register_fixup_for_id(const char *bus_id,
1056 int (*run)(struct phy_device *));
1057int phy_register_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask,
1058 int (*run)(struct phy_device *));
1059
1060int phy_unregister_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask);
1061int phy_unregister_fixup_for_id(const char *bus_id);
1062int phy_unregister_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask);
1063
1064int phy_init_eee(struct phy_device *phydev, bool clk_stop_enable);
1065int phy_get_eee_err(struct phy_device *phydev);
1066int phy_ethtool_set_eee(struct phy_device *phydev, struct ethtool_eee *data);
1067int phy_ethtool_get_eee(struct phy_device *phydev, struct ethtool_eee *data);
1068int phy_ethtool_set_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol);
1069void phy_ethtool_get_wol(struct phy_device *phydev,
1070 struct ethtool_wolinfo *wol);
1071int phy_ethtool_get_link_ksettings(struct net_device *ndev,
1072 struct ethtool_link_ksettings *cmd);
1073int phy_ethtool_set_link_ksettings(struct net_device *ndev,
1074 const struct ethtool_link_ksettings *cmd);
1075int phy_ethtool_nway_reset(struct net_device *ndev);
1076
1077#if IS_ENABLED(CONFIG_PHYLIB)
1078int __init mdio_bus_init(void);
1079void mdio_bus_exit(void);
1080#endif
1081
1082
1083static inline int phy_ethtool_get_strings(struct phy_device *phydev, u8 *data)
1084{
1085 if (!phydev->drv)
1086 return -EIO;
1087
1088 mutex_lock(&phydev->lock);
1089 phydev->drv->get_strings(phydev, data);
1090 mutex_unlock(&phydev->lock);
1091
1092 return 0;
1093}
1094
1095static inline int phy_ethtool_get_sset_count(struct phy_device *phydev)
1096{
1097 int ret;
1098
1099 if (!phydev->drv)
1100 return -EIO;
1101
1102 if (phydev->drv->get_sset_count &&
1103 phydev->drv->get_strings &&
1104 phydev->drv->get_stats) {
1105 mutex_lock(&phydev->lock);
1106 ret = phydev->drv->get_sset_count(phydev);
1107 mutex_unlock(&phydev->lock);
1108
1109 return ret;
1110 }
1111
1112 return -EOPNOTSUPP;
1113}
1114
1115static inline int phy_ethtool_get_stats(struct phy_device *phydev,
1116 struct ethtool_stats *stats, u64 *data)
1117{
1118 if (!phydev->drv)
1119 return -EIO;
1120
1121 mutex_lock(&phydev->lock);
1122 phydev->drv->get_stats(phydev, stats, data);
1123 mutex_unlock(&phydev->lock);
1124
1125 return 0;
1126}
1127
1128extern struct bus_type mdio_bus_type;
1129
1130struct mdio_board_info {
1131 const char *bus_id;
1132 char modalias[MDIO_NAME_SIZE];
1133 int mdio_addr;
1134 const void *platform_data;
1135};
1136
1137#if IS_ENABLED(CONFIG_MDIO_DEVICE)
1138int mdiobus_register_board_info(const struct mdio_board_info *info,
1139 unsigned int n);
1140#else
1141static inline int mdiobus_register_board_info(const struct mdio_board_info *i,
1142 unsigned int n)
1143{
1144 return 0;
1145}
1146#endif
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157#define phy_module_driver(__phy_drivers, __count) \
1158static int __init phy_module_init(void) \
1159{ \
1160 return phy_drivers_register(__phy_drivers, __count, THIS_MODULE); \
1161} \
1162module_init(phy_module_init); \
1163static void __exit phy_module_exit(void) \
1164{ \
1165 phy_drivers_unregister(__phy_drivers, __count); \
1166} \
1167module_exit(phy_module_exit)
1168
1169#define module_phy_driver(__phy_drivers) \
1170 phy_module_driver(__phy_drivers, ARRAY_SIZE(__phy_drivers))
1171
1172#endif
1173