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 MDIO_DEVICE_IS_PHY 0x80000000
63
64
65typedef enum {
66 PHY_INTERFACE_MODE_NA,
67 PHY_INTERFACE_MODE_INTERNAL,
68 PHY_INTERFACE_MODE_MII,
69 PHY_INTERFACE_MODE_GMII,
70 PHY_INTERFACE_MODE_SGMII,
71 PHY_INTERFACE_MODE_TBI,
72 PHY_INTERFACE_MODE_REVMII,
73 PHY_INTERFACE_MODE_RMII,
74 PHY_INTERFACE_MODE_RGMII,
75 PHY_INTERFACE_MODE_RGMII_ID,
76 PHY_INTERFACE_MODE_RGMII_RXID,
77 PHY_INTERFACE_MODE_RGMII_TXID,
78 PHY_INTERFACE_MODE_RTBI,
79 PHY_INTERFACE_MODE_SMII,
80 PHY_INTERFACE_MODE_XGMII,
81 PHY_INTERFACE_MODE_MOCA,
82 PHY_INTERFACE_MODE_QSGMII,
83 PHY_INTERFACE_MODE_TRGMII,
84 PHY_INTERFACE_MODE_1000BASEX,
85 PHY_INTERFACE_MODE_2500BASEX,
86 PHY_INTERFACE_MODE_RXAUI,
87 PHY_INTERFACE_MODE_XAUI,
88
89 PHY_INTERFACE_MODE_10GKR,
90 PHY_INTERFACE_MODE_MAX,
91} phy_interface_t;
92
93
94
95
96
97
98
99
100
101
102
103
104unsigned int phy_supported_speeds(struct phy_device *phy,
105 unsigned int *speeds,
106 unsigned int size);
107
108
109
110
111
112
113static inline const char *phy_modes(phy_interface_t interface)
114{
115 switch (interface) {
116 case PHY_INTERFACE_MODE_NA:
117 return "";
118 case PHY_INTERFACE_MODE_INTERNAL:
119 return "internal";
120 case PHY_INTERFACE_MODE_MII:
121 return "mii";
122 case PHY_INTERFACE_MODE_GMII:
123 return "gmii";
124 case PHY_INTERFACE_MODE_SGMII:
125 return "sgmii";
126 case PHY_INTERFACE_MODE_TBI:
127 return "tbi";
128 case PHY_INTERFACE_MODE_REVMII:
129 return "rev-mii";
130 case PHY_INTERFACE_MODE_RMII:
131 return "rmii";
132 case PHY_INTERFACE_MODE_RGMII:
133 return "rgmii";
134 case PHY_INTERFACE_MODE_RGMII_ID:
135 return "rgmii-id";
136 case PHY_INTERFACE_MODE_RGMII_RXID:
137 return "rgmii-rxid";
138 case PHY_INTERFACE_MODE_RGMII_TXID:
139 return "rgmii-txid";
140 case PHY_INTERFACE_MODE_RTBI:
141 return "rtbi";
142 case PHY_INTERFACE_MODE_SMII:
143 return "smii";
144 case PHY_INTERFACE_MODE_XGMII:
145 return "xgmii";
146 case PHY_INTERFACE_MODE_MOCA:
147 return "moca";
148 case PHY_INTERFACE_MODE_QSGMII:
149 return "qsgmii";
150 case PHY_INTERFACE_MODE_TRGMII:
151 return "trgmii";
152 case PHY_INTERFACE_MODE_1000BASEX:
153 return "1000base-x";
154 case PHY_INTERFACE_MODE_2500BASEX:
155 return "2500base-x";
156 case PHY_INTERFACE_MODE_RXAUI:
157 return "rxaui";
158 case PHY_INTERFACE_MODE_XAUI:
159 return "xaui";
160 case PHY_INTERFACE_MODE_10GKR:
161 return "10gbase-kr";
162 default:
163 return "unknown";
164 }
165}
166
167
168#define PHY_INIT_TIMEOUT 100000
169#define PHY_STATE_TIME 1
170#define PHY_FORCE_TIMEOUT 10
171#define PHY_AN_TIMEOUT 10
172
173#define PHY_MAX_ADDR 32
174
175
176#define PHY_ID_FMT "%s:%02x"
177
178#define MII_BUS_ID_SIZE 61
179
180
181
182#define MII_ADDR_C45 (1<<30)
183
184struct device;
185struct sk_buff;
186
187
188
189
190
191struct mii_bus {
192 struct module *owner;
193 const char *name;
194 char id[MII_BUS_ID_SIZE];
195 void *priv;
196 int (*read)(struct mii_bus *bus, int addr, int regnum);
197 int (*write)(struct mii_bus *bus, int addr, int regnum, u16 val);
198 int (*reset)(struct mii_bus *bus);
199
200
201
202
203
204 struct mutex mdio_lock;
205
206 struct device *parent;
207 enum {
208 MDIOBUS_ALLOCATED = 1,
209 MDIOBUS_REGISTERED,
210 MDIOBUS_UNREGISTERED,
211 MDIOBUS_RELEASED,
212 } state;
213 struct device dev;
214
215
216 struct mdio_device *mdio_map[PHY_MAX_ADDR];
217
218
219 u32 phy_mask;
220
221
222 u32 phy_ignore_ta_mask;
223
224
225
226
227
228 int irq[PHY_MAX_ADDR];
229
230
231 int reset_delay_us;
232
233 struct gpio_desc *reset_gpiod;
234};
235#define to_mii_bus(d) container_of(d, struct mii_bus, dev)
236
237struct mii_bus *mdiobus_alloc_size(size_t);
238static inline struct mii_bus *mdiobus_alloc(void)
239{
240 return mdiobus_alloc_size(0);
241}
242
243int __mdiobus_register(struct mii_bus *bus, struct module *owner);
244#define mdiobus_register(bus) __mdiobus_register(bus, THIS_MODULE)
245void mdiobus_unregister(struct mii_bus *bus);
246void mdiobus_free(struct mii_bus *bus);
247struct mii_bus *devm_mdiobus_alloc_size(struct device *dev, int sizeof_priv);
248static inline struct mii_bus *devm_mdiobus_alloc(struct device *dev)
249{
250 return devm_mdiobus_alloc_size(dev, 0);
251}
252
253void devm_mdiobus_free(struct device *dev, struct mii_bus *bus);
254struct phy_device *mdiobus_scan(struct mii_bus *bus, int addr);
255
256#define PHY_INTERRUPT_DISABLED 0x0
257#define PHY_INTERRUPT_ENABLED 0x80000000
258
259
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
339enum phy_state {
340 PHY_DOWN = 0,
341 PHY_STARTING,
342 PHY_READY,
343 PHY_PENDING,
344 PHY_UP,
345 PHY_AN,
346 PHY_RUNNING,
347 PHY_NOLINK,
348 PHY_FORCING,
349 PHY_CHANGELINK,
350 PHY_HALTED,
351 PHY_RESUMING
352};
353
354
355
356
357
358
359struct phy_c45_device_ids {
360 u32 devices_in_package;
361 u32 device_ids[8];
362};
363
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
397struct phy_device {
398 struct mdio_device mdio;
399
400
401
402 struct phy_driver *drv;
403
404 u32 phy_id;
405
406 struct phy_c45_device_ids c45_ids;
407 bool is_c45;
408 bool is_internal;
409 bool is_pseudo_fixed_link;
410 bool has_fixups;
411 bool suspended;
412 bool sysfs_links;
413 bool loopback_enabled;
414
415 enum phy_state state;
416
417 u32 dev_flags;
418
419 phy_interface_t interface;
420
421
422
423
424
425 int speed;
426 int duplex;
427 int pause;
428 int asym_pause;
429
430
431 int link;
432
433
434 u32 interrupts;
435
436
437
438 u32 supported;
439 u32 advertising;
440 u32 lp_advertising;
441
442
443 u32 eee_broken_modes;
444
445 int autoneg;
446
447 int link_timeout;
448
449#ifdef CONFIG_LED_TRIGGER_PHY
450 struct phy_led_trigger *phy_led_triggers;
451 unsigned int phy_num_led_triggers;
452 struct phy_led_trigger *last_triggered;
453#endif
454
455
456
457
458
459 int irq;
460
461
462
463 void *priv;
464
465
466 struct work_struct phy_queue;
467 struct delayed_work state_queue;
468 atomic_t irq_disable;
469
470 struct mutex lock;
471
472 struct net_device *attached_dev;
473
474 u8 mdix;
475 u8 mdix_ctrl;
476
477 void (*adjust_link)(struct net_device *dev);
478};
479#define to_phy_device(d) container_of(to_mdio_device(d), \
480 struct phy_device, mdio)
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503struct phy_driver {
504 struct mdio_driver_common mdiodrv;
505 u32 phy_id;
506 char *name;
507 unsigned int phy_id_mask;
508 u32 features;
509 u32 flags;
510 const void *driver_data;
511
512
513
514
515 int (*soft_reset)(struct phy_device *phydev);
516
517
518
519
520
521 int (*config_init)(struct phy_device *phydev);
522
523
524
525
526
527 int (*probe)(struct phy_device *phydev);
528
529
530 int (*suspend)(struct phy_device *phydev);
531 int (*resume)(struct phy_device *phydev);
532
533
534
535
536
537
538
539 int (*config_aneg)(struct phy_device *phydev);
540
541
542 int (*aneg_done)(struct phy_device *phydev);
543
544
545 int (*read_status)(struct phy_device *phydev);
546
547
548 int (*ack_interrupt)(struct phy_device *phydev);
549
550
551 int (*config_intr)(struct phy_device *phydev);
552
553
554
555
556
557 int (*did_interrupt)(struct phy_device *phydev);
558
559
560 void (*remove)(struct phy_device *phydev);
561
562
563
564
565
566 int (*match_phy_device)(struct phy_device *phydev);
567
568
569 int (*ts_info)(struct phy_device *phydev, struct ethtool_ts_info *ti);
570
571
572 int (*hwtstamp)(struct phy_device *phydev, struct ifreq *ifr);
573
574
575
576
577
578
579
580
581 bool (*rxtstamp)(struct phy_device *dev, struct sk_buff *skb, int type);
582
583
584
585
586
587
588
589 void (*txtstamp)(struct phy_device *dev, struct sk_buff *skb, int type);
590
591
592
593
594 int (*set_wol)(struct phy_device *dev, struct ethtool_wolinfo *wol);
595
596
597 void (*get_wol)(struct phy_device *dev, struct ethtool_wolinfo *wol);
598
599
600
601
602
603
604
605
606 void (*link_change_notify)(struct phy_device *dev);
607
608
609
610
611
612
613
614
615
616
617 int (*read_mmd)(struct phy_device *dev, int devnum, u16 regnum);
618
619
620
621
622
623
624
625
626
627
628
629 int (*write_mmd)(struct phy_device *dev, int devnum, u16 regnum,
630 u16 val);
631
632
633
634 int (*module_info)(struct phy_device *dev,
635 struct ethtool_modinfo *modinfo);
636
637
638 int (*module_eeprom)(struct phy_device *dev,
639 struct ethtool_eeprom *ee, u8 *data);
640
641
642 int (*get_sset_count)(struct phy_device *dev);
643 void (*get_strings)(struct phy_device *dev, u8 *data);
644 void (*get_stats)(struct phy_device *dev,
645 struct ethtool_stats *stats, u64 *data);
646
647
648 int (*get_tunable)(struct phy_device *dev,
649 struct ethtool_tunable *tuna, void *data);
650 int (*set_tunable)(struct phy_device *dev,
651 struct ethtool_tunable *tuna,
652 const void *data);
653 int (*set_loopback)(struct phy_device *dev, bool enable);
654};
655#define to_phy_driver(d) container_of(to_mdio_common_driver(d), \
656 struct phy_driver, mdiodrv)
657
658#define PHY_ANY_ID "MATCH ANY PHY"
659#define PHY_ANY_UID 0xffffffff
660
661
662struct phy_fixup {
663 struct list_head list;
664 char bus_id[MII_BUS_ID_SIZE + 3];
665 u32 phy_uid;
666 u32 phy_uid_mask;
667 int (*run)(struct phy_device *phydev);
668};
669
670
671
672
673
674
675
676
677
678
679int phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum);
680
681
682
683
684
685
686
687
688
689
690static inline int phy_read(struct phy_device *phydev, u32 regnum)
691{
692 return mdiobus_read(phydev->mdio.bus, phydev->mdio.addr, regnum);
693}
694
695
696
697
698
699
700
701
702
703
704
705static inline int phy_write(struct phy_device *phydev, u32 regnum, u16 val)
706{
707 return mdiobus_write(phydev->mdio.bus, phydev->mdio.addr, regnum, val);
708}
709
710
711
712
713
714
715
716
717static inline bool phy_interrupt_is_valid(struct phy_device *phydev)
718{
719 return phydev->irq != PHY_POLL && phydev->irq != PHY_IGNORE_INTERRUPT;
720}
721
722
723
724
725
726static inline bool phy_is_internal(struct phy_device *phydev)
727{
728 return phydev->is_internal;
729}
730
731
732
733
734
735
736static inline bool phy_interface_mode_is_rgmii(phy_interface_t mode)
737{
738 return mode >= PHY_INTERFACE_MODE_RGMII &&
739 mode <= PHY_INTERFACE_MODE_RGMII_TXID;
740};
741
742
743
744
745
746
747static inline bool phy_interface_is_rgmii(struct phy_device *phydev)
748{
749 return phy_interface_mode_is_rgmii(phydev->interface);
750};
751
752
753
754
755
756
757static inline bool phy_is_pseudo_fixed_link(struct phy_device *phydev)
758{
759 return phydev->is_pseudo_fixed_link;
760}
761
762
763
764
765
766
767
768
769
770
771
772int phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val);
773
774struct phy_device *phy_device_create(struct mii_bus *bus, int addr, int phy_id,
775 bool is_c45,
776 struct phy_c45_device_ids *c45_ids);
777#if IS_ENABLED(CONFIG_PHYLIB)
778struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45);
779int phy_device_register(struct phy_device *phy);
780void phy_device_free(struct phy_device *phydev);
781#else
782static inline
783struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45)
784{
785 return NULL;
786}
787
788static inline int phy_device_register(struct phy_device *phy)
789{
790 return 0;
791}
792
793static inline void phy_device_free(struct phy_device *phydev) { }
794#endif
795void phy_device_remove(struct phy_device *phydev);
796int phy_init_hw(struct phy_device *phydev);
797int phy_suspend(struct phy_device *phydev);
798int phy_resume(struct phy_device *phydev);
799int phy_loopback(struct phy_device *phydev, bool enable);
800struct phy_device *phy_attach(struct net_device *dev, const char *bus_id,
801 phy_interface_t interface);
802struct phy_device *phy_find_first(struct mii_bus *bus);
803int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
804 u32 flags, phy_interface_t interface);
805int phy_connect_direct(struct net_device *dev, struct phy_device *phydev,
806 void (*handler)(struct net_device *),
807 phy_interface_t interface);
808struct phy_device *phy_connect(struct net_device *dev, const char *bus_id,
809 void (*handler)(struct net_device *),
810 phy_interface_t interface);
811void phy_disconnect(struct phy_device *phydev);
812void phy_detach(struct phy_device *phydev);
813void phy_start(struct phy_device *phydev);
814void phy_stop(struct phy_device *phydev);
815int phy_start_aneg(struct phy_device *phydev);
816int phy_aneg_done(struct phy_device *phydev);
817
818int phy_stop_interrupts(struct phy_device *phydev);
819int phy_restart_aneg(struct phy_device *phydev);
820
821static inline int phy_read_status(struct phy_device *phydev)
822{
823 if (!phydev->drv)
824 return -EIO;
825
826 return phydev->drv->read_status(phydev);
827}
828
829#define phydev_err(_phydev, format, args...) \
830 dev_err(&_phydev->mdio.dev, format, ##args)
831
832#define phydev_dbg(_phydev, format, args...) \
833 dev_dbg(&_phydev->mdio.dev, format, ##args)
834
835static inline const char *phydev_name(const struct phy_device *phydev)
836{
837 return dev_name(&phydev->mdio.dev);
838}
839
840void phy_attached_print(struct phy_device *phydev, const char *fmt, ...)
841 __printf(2, 3);
842void phy_attached_info(struct phy_device *phydev);
843
844
845int genphy_config_init(struct phy_device *phydev);
846int genphy_setup_forced(struct phy_device *phydev);
847int genphy_restart_aneg(struct phy_device *phydev);
848int genphy_config_aneg(struct phy_device *phydev);
849int genphy_aneg_done(struct phy_device *phydev);
850int genphy_update_link(struct phy_device *phydev);
851int genphy_read_status(struct phy_device *phydev);
852int genphy_suspend(struct phy_device *phydev);
853int genphy_resume(struct phy_device *phydev);
854int genphy_loopback(struct phy_device *phydev, bool enable);
855int genphy_soft_reset(struct phy_device *phydev);
856static inline int genphy_no_soft_reset(struct phy_device *phydev)
857{
858 return 0;
859}
860
861
862int genphy_c45_restart_aneg(struct phy_device *phydev);
863int genphy_c45_aneg_done(struct phy_device *phydev);
864int genphy_c45_read_link(struct phy_device *phydev, u32 mmd_mask);
865int genphy_c45_read_lpa(struct phy_device *phydev);
866int genphy_c45_read_pma(struct phy_device *phydev);
867int genphy_c45_pma_setup_forced(struct phy_device *phydev);
868int genphy_c45_an_disable_aneg(struct phy_device *phydev);
869
870void phy_driver_unregister(struct phy_driver *drv);
871void phy_drivers_unregister(struct phy_driver *drv, int n);
872int phy_driver_register(struct phy_driver *new_driver, struct module *owner);
873int phy_drivers_register(struct phy_driver *new_driver, int n,
874 struct module *owner);
875void phy_state_machine(struct work_struct *work);
876void phy_change(struct phy_device *phydev);
877void phy_change_work(struct work_struct *work);
878void phy_mac_interrupt(struct phy_device *phydev, int new_link);
879void phy_start_machine(struct phy_device *phydev);
880void phy_stop_machine(struct phy_device *phydev);
881void phy_trigger_machine(struct phy_device *phydev, bool sync);
882int phy_ethtool_sset(struct phy_device *phydev, struct ethtool_cmd *cmd);
883void phy_ethtool_ksettings_get(struct phy_device *phydev,
884 struct ethtool_link_ksettings *cmd);
885int phy_ethtool_ksettings_set(struct phy_device *phydev,
886 const struct ethtool_link_ksettings *cmd);
887int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd);
888int phy_start_interrupts(struct phy_device *phydev);
889void phy_print_status(struct phy_device *phydev);
890int phy_set_max_speed(struct phy_device *phydev, u32 max_speed);
891
892int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask,
893 int (*run)(struct phy_device *));
894int phy_register_fixup_for_id(const char *bus_id,
895 int (*run)(struct phy_device *));
896int phy_register_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask,
897 int (*run)(struct phy_device *));
898
899int phy_unregister_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask);
900int phy_unregister_fixup_for_id(const char *bus_id);
901int phy_unregister_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask);
902
903int phy_init_eee(struct phy_device *phydev, bool clk_stop_enable);
904int phy_get_eee_err(struct phy_device *phydev);
905int phy_ethtool_set_eee(struct phy_device *phydev, struct ethtool_eee *data);
906int phy_ethtool_get_eee(struct phy_device *phydev, struct ethtool_eee *data);
907int phy_ethtool_set_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol);
908void phy_ethtool_get_wol(struct phy_device *phydev,
909 struct ethtool_wolinfo *wol);
910int phy_ethtool_get_link_ksettings(struct net_device *ndev,
911 struct ethtool_link_ksettings *cmd);
912int phy_ethtool_set_link_ksettings(struct net_device *ndev,
913 const struct ethtool_link_ksettings *cmd);
914int phy_ethtool_nway_reset(struct net_device *ndev);
915
916#if IS_ENABLED(CONFIG_PHYLIB)
917int __init mdio_bus_init(void);
918void mdio_bus_exit(void);
919#endif
920
921extern struct bus_type mdio_bus_type;
922
923struct mdio_board_info {
924 const char *bus_id;
925 char modalias[MDIO_NAME_SIZE];
926 int mdio_addr;
927 const void *platform_data;
928};
929
930#if IS_ENABLED(CONFIG_MDIO_DEVICE)
931int mdiobus_register_board_info(const struct mdio_board_info *info,
932 unsigned int n);
933#else
934static inline int mdiobus_register_board_info(const struct mdio_board_info *i,
935 unsigned int n)
936{
937 return 0;
938}
939#endif
940
941
942
943
944
945
946
947
948
949
950#define phy_module_driver(__phy_drivers, __count) \
951static int __init phy_module_init(void) \
952{ \
953 return phy_drivers_register(__phy_drivers, __count, THIS_MODULE); \
954} \
955module_init(phy_module_init); \
956static void __exit phy_module_exit(void) \
957{ \
958 phy_drivers_unregister(__phy_drivers, __count); \
959} \
960module_exit(phy_module_exit)
961
962#define module_phy_driver(__phy_drivers) \
963 phy_module_driver(__phy_drivers, ARRAY_SIZE(__phy_drivers))
964
965#endif
966