0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #ifndef __PHY_H
0012 #define __PHY_H
0013
0014 #include <linux/compiler.h>
0015 #include <linux/spinlock.h>
0016 #include <linux/ethtool.h>
0017 #include <linux/linkmode.h>
0018 #include <linux/netlink.h>
0019 #include <linux/mdio.h>
0020 #include <linux/mii.h>
0021 #include <linux/mii_timestamper.h>
0022 #include <linux/module.h>
0023 #include <linux/timer.h>
0024 #include <linux/workqueue.h>
0025 #include <linux/mod_devicetable.h>
0026 #include <linux/u64_stats_sync.h>
0027 #include <linux/irqreturn.h>
0028 #include <linux/iopoll.h>
0029 #include <linux/refcount.h>
0030
0031 #include <linux/atomic.h>
0032
0033 #define PHY_DEFAULT_FEATURES (SUPPORTED_Autoneg | \
0034 SUPPORTED_TP | \
0035 SUPPORTED_MII)
0036
0037 #define PHY_10BT_FEATURES (SUPPORTED_10baseT_Half | \
0038 SUPPORTED_10baseT_Full)
0039
0040 #define PHY_100BT_FEATURES (SUPPORTED_100baseT_Half | \
0041 SUPPORTED_100baseT_Full)
0042
0043 #define PHY_1000BT_FEATURES (SUPPORTED_1000baseT_Half | \
0044 SUPPORTED_1000baseT_Full)
0045
0046 extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_basic_features) __ro_after_init;
0047 extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_basic_t1_features) __ro_after_init;
0048 extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_gbit_features) __ro_after_init;
0049 extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_gbit_fibre_features) __ro_after_init;
0050 extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_gbit_all_ports_features) __ro_after_init;
0051 extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_features) __ro_after_init;
0052 extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_fec_features) __ro_after_init;
0053 extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_full_features) __ro_after_init;
0054
0055 #define PHY_BASIC_FEATURES ((unsigned long *)&phy_basic_features)
0056 #define PHY_BASIC_T1_FEATURES ((unsigned long *)&phy_basic_t1_features)
0057 #define PHY_GBIT_FEATURES ((unsigned long *)&phy_gbit_features)
0058 #define PHY_GBIT_FIBRE_FEATURES ((unsigned long *)&phy_gbit_fibre_features)
0059 #define PHY_GBIT_ALL_PORTS_FEATURES ((unsigned long *)&phy_gbit_all_ports_features)
0060 #define PHY_10GBIT_FEATURES ((unsigned long *)&phy_10gbit_features)
0061 #define PHY_10GBIT_FEC_FEATURES ((unsigned long *)&phy_10gbit_fec_features)
0062 #define PHY_10GBIT_FULL_FEATURES ((unsigned long *)&phy_10gbit_full_features)
0063
0064 extern const int phy_basic_ports_array[3];
0065 extern const int phy_fibre_port_array[1];
0066 extern const int phy_all_ports_features_array[7];
0067 extern const int phy_10_100_features_array[4];
0068 extern const int phy_basic_t1_features_array[3];
0069 extern const int phy_gbit_features_array[2];
0070 extern const int phy_10gbit_features_array[1];
0071
0072
0073
0074
0075
0076
0077 #define PHY_POLL -1
0078 #define PHY_MAC_INTERRUPT -2
0079
0080 #define PHY_IS_INTERNAL 0x00000001
0081 #define PHY_RST_AFTER_CLK_EN 0x00000002
0082 #define PHY_POLL_CABLE_TEST 0x00000004
0083 #define MDIO_DEVICE_IS_PHY 0x80000000
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122 typedef enum {
0123 PHY_INTERFACE_MODE_NA,
0124 PHY_INTERFACE_MODE_INTERNAL,
0125 PHY_INTERFACE_MODE_MII,
0126 PHY_INTERFACE_MODE_GMII,
0127 PHY_INTERFACE_MODE_SGMII,
0128 PHY_INTERFACE_MODE_TBI,
0129 PHY_INTERFACE_MODE_REVMII,
0130 PHY_INTERFACE_MODE_RMII,
0131 PHY_INTERFACE_MODE_REVRMII,
0132 PHY_INTERFACE_MODE_RGMII,
0133 PHY_INTERFACE_MODE_RGMII_ID,
0134 PHY_INTERFACE_MODE_RGMII_RXID,
0135 PHY_INTERFACE_MODE_RGMII_TXID,
0136 PHY_INTERFACE_MODE_RTBI,
0137 PHY_INTERFACE_MODE_SMII,
0138 PHY_INTERFACE_MODE_XGMII,
0139 PHY_INTERFACE_MODE_XLGMII,
0140 PHY_INTERFACE_MODE_MOCA,
0141 PHY_INTERFACE_MODE_QSGMII,
0142 PHY_INTERFACE_MODE_TRGMII,
0143 PHY_INTERFACE_MODE_100BASEX,
0144 PHY_INTERFACE_MODE_1000BASEX,
0145 PHY_INTERFACE_MODE_2500BASEX,
0146 PHY_INTERFACE_MODE_5GBASER,
0147 PHY_INTERFACE_MODE_RXAUI,
0148 PHY_INTERFACE_MODE_XAUI,
0149
0150 PHY_INTERFACE_MODE_10GBASER,
0151 PHY_INTERFACE_MODE_25GBASER,
0152 PHY_INTERFACE_MODE_USXGMII,
0153
0154 PHY_INTERFACE_MODE_10GKR,
0155 PHY_INTERFACE_MODE_MAX,
0156 } phy_interface_t;
0157
0158
0159 #define DECLARE_PHY_INTERFACE_MASK(name) \
0160 DECLARE_BITMAP(name, PHY_INTERFACE_MODE_MAX)
0161
0162 static inline void phy_interface_zero(unsigned long *intf)
0163 {
0164 bitmap_zero(intf, PHY_INTERFACE_MODE_MAX);
0165 }
0166
0167 static inline bool phy_interface_empty(const unsigned long *intf)
0168 {
0169 return bitmap_empty(intf, PHY_INTERFACE_MODE_MAX);
0170 }
0171
0172 static inline void phy_interface_and(unsigned long *dst, const unsigned long *a,
0173 const unsigned long *b)
0174 {
0175 bitmap_and(dst, a, b, PHY_INTERFACE_MODE_MAX);
0176 }
0177
0178 static inline void phy_interface_or(unsigned long *dst, const unsigned long *a,
0179 const unsigned long *b)
0180 {
0181 bitmap_or(dst, a, b, PHY_INTERFACE_MODE_MAX);
0182 }
0183
0184 static inline void phy_interface_set_rgmii(unsigned long *intf)
0185 {
0186 __set_bit(PHY_INTERFACE_MODE_RGMII, intf);
0187 __set_bit(PHY_INTERFACE_MODE_RGMII_ID, intf);
0188 __set_bit(PHY_INTERFACE_MODE_RGMII_RXID, intf);
0189 __set_bit(PHY_INTERFACE_MODE_RGMII_TXID, intf);
0190 }
0191
0192
0193
0194
0195 unsigned int phy_supported_speeds(struct phy_device *phy,
0196 unsigned int *speeds,
0197 unsigned int size);
0198
0199
0200
0201
0202
0203
0204
0205
0206
0207 static inline const char *phy_modes(phy_interface_t interface)
0208 {
0209 switch (interface) {
0210 case PHY_INTERFACE_MODE_NA:
0211 return "";
0212 case PHY_INTERFACE_MODE_INTERNAL:
0213 return "internal";
0214 case PHY_INTERFACE_MODE_MII:
0215 return "mii";
0216 case PHY_INTERFACE_MODE_GMII:
0217 return "gmii";
0218 case PHY_INTERFACE_MODE_SGMII:
0219 return "sgmii";
0220 case PHY_INTERFACE_MODE_TBI:
0221 return "tbi";
0222 case PHY_INTERFACE_MODE_REVMII:
0223 return "rev-mii";
0224 case PHY_INTERFACE_MODE_RMII:
0225 return "rmii";
0226 case PHY_INTERFACE_MODE_REVRMII:
0227 return "rev-rmii";
0228 case PHY_INTERFACE_MODE_RGMII:
0229 return "rgmii";
0230 case PHY_INTERFACE_MODE_RGMII_ID:
0231 return "rgmii-id";
0232 case PHY_INTERFACE_MODE_RGMII_RXID:
0233 return "rgmii-rxid";
0234 case PHY_INTERFACE_MODE_RGMII_TXID:
0235 return "rgmii-txid";
0236 case PHY_INTERFACE_MODE_RTBI:
0237 return "rtbi";
0238 case PHY_INTERFACE_MODE_SMII:
0239 return "smii";
0240 case PHY_INTERFACE_MODE_XGMII:
0241 return "xgmii";
0242 case PHY_INTERFACE_MODE_XLGMII:
0243 return "xlgmii";
0244 case PHY_INTERFACE_MODE_MOCA:
0245 return "moca";
0246 case PHY_INTERFACE_MODE_QSGMII:
0247 return "qsgmii";
0248 case PHY_INTERFACE_MODE_TRGMII:
0249 return "trgmii";
0250 case PHY_INTERFACE_MODE_1000BASEX:
0251 return "1000base-x";
0252 case PHY_INTERFACE_MODE_2500BASEX:
0253 return "2500base-x";
0254 case PHY_INTERFACE_MODE_5GBASER:
0255 return "5gbase-r";
0256 case PHY_INTERFACE_MODE_RXAUI:
0257 return "rxaui";
0258 case PHY_INTERFACE_MODE_XAUI:
0259 return "xaui";
0260 case PHY_INTERFACE_MODE_10GBASER:
0261 return "10gbase-r";
0262 case PHY_INTERFACE_MODE_25GBASER:
0263 return "25gbase-r";
0264 case PHY_INTERFACE_MODE_USXGMII:
0265 return "usxgmii";
0266 case PHY_INTERFACE_MODE_10GKR:
0267 return "10gbase-kr";
0268 case PHY_INTERFACE_MODE_100BASEX:
0269 return "100base-x";
0270 default:
0271 return "unknown";
0272 }
0273 }
0274
0275
0276 #define PHY_INIT_TIMEOUT 100000
0277 #define PHY_FORCE_TIMEOUT 10
0278
0279 #define PHY_MAX_ADDR 32
0280
0281
0282 #define PHY_ID_FMT "%s:%02x"
0283
0284 #define MII_BUS_ID_SIZE 61
0285
0286 struct device;
0287 struct phylink;
0288 struct sfp_bus;
0289 struct sfp_upstream_ops;
0290 struct sk_buff;
0291
0292
0293
0294
0295
0296
0297
0298
0299
0300 struct mdio_bus_stats {
0301 u64_stats_t transfers;
0302 u64_stats_t errors;
0303 u64_stats_t writes;
0304 u64_stats_t reads;
0305
0306 struct u64_stats_sync syncp;
0307 };
0308
0309
0310
0311
0312
0313
0314
0315
0316
0317
0318
0319
0320
0321 struct phy_package_shared {
0322 int addr;
0323 refcount_t refcnt;
0324 unsigned long flags;
0325 size_t priv_size;
0326
0327
0328
0329
0330
0331
0332
0333 void *priv;
0334 };
0335
0336
0337 #define PHY_SHARED_F_INIT_DONE 0
0338 #define PHY_SHARED_F_PROBE_DONE 1
0339
0340
0341
0342
0343
0344
0345
0346
0347
0348
0349
0350
0351 struct mii_bus {
0352 struct module *owner;
0353 const char *name;
0354 char id[MII_BUS_ID_SIZE];
0355 void *priv;
0356
0357 int (*read)(struct mii_bus *bus, int addr, int regnum);
0358
0359 int (*write)(struct mii_bus *bus, int addr, int regnum, u16 val);
0360
0361 int (*reset)(struct mii_bus *bus);
0362
0363
0364 struct mdio_bus_stats stats[PHY_MAX_ADDR];
0365
0366
0367
0368
0369
0370 struct mutex mdio_lock;
0371
0372
0373 struct device *parent;
0374
0375 enum {
0376 MDIOBUS_ALLOCATED = 1,
0377 MDIOBUS_REGISTERED,
0378 MDIOBUS_UNREGISTERED,
0379 MDIOBUS_RELEASED,
0380 } state;
0381
0382
0383 struct device dev;
0384
0385
0386 struct mdio_device *mdio_map[PHY_MAX_ADDR];
0387
0388
0389 u32 phy_mask;
0390
0391
0392 u32 phy_ignore_ta_mask;
0393
0394
0395
0396
0397
0398 int irq[PHY_MAX_ADDR];
0399
0400
0401 int reset_delay_us;
0402
0403 int reset_post_delay_us;
0404
0405 struct gpio_desc *reset_gpiod;
0406
0407
0408 enum {
0409 MDIOBUS_NO_CAP = 0,
0410 MDIOBUS_C22,
0411 MDIOBUS_C45,
0412 MDIOBUS_C22_C45,
0413 } probe_capabilities;
0414
0415
0416 struct mutex shared_lock;
0417
0418
0419 struct phy_package_shared *shared[PHY_MAX_ADDR];
0420 };
0421 #define to_mii_bus(d) container_of(d, struct mii_bus, dev)
0422
0423 struct mii_bus *mdiobus_alloc_size(size_t size);
0424
0425
0426
0427
0428
0429
0430
0431 static inline struct mii_bus *mdiobus_alloc(void)
0432 {
0433 return mdiobus_alloc_size(0);
0434 }
0435
0436 int __mdiobus_register(struct mii_bus *bus, struct module *owner);
0437 int __devm_mdiobus_register(struct device *dev, struct mii_bus *bus,
0438 struct module *owner);
0439 #define mdiobus_register(bus) __mdiobus_register(bus, THIS_MODULE)
0440 #define devm_mdiobus_register(dev, bus) \
0441 __devm_mdiobus_register(dev, bus, THIS_MODULE)
0442
0443 void mdiobus_unregister(struct mii_bus *bus);
0444 void mdiobus_free(struct mii_bus *bus);
0445 struct mii_bus *devm_mdiobus_alloc_size(struct device *dev, int sizeof_priv);
0446 static inline struct mii_bus *devm_mdiobus_alloc(struct device *dev)
0447 {
0448 return devm_mdiobus_alloc_size(dev, 0);
0449 }
0450
0451 struct mii_bus *mdio_find_bus(const char *mdio_name);
0452 struct phy_device *mdiobus_scan(struct mii_bus *bus, int addr);
0453
0454 #define PHY_INTERRUPT_DISABLED false
0455 #define PHY_INTERRUPT_ENABLED true
0456
0457
0458
0459
0460
0461
0462
0463
0464
0465
0466
0467
0468
0469
0470
0471
0472
0473
0474
0475
0476
0477
0478
0479
0480
0481
0482
0483
0484
0485
0486
0487
0488
0489
0490
0491
0492
0493 enum phy_state {
0494 PHY_DOWN = 0,
0495 PHY_READY,
0496 PHY_HALTED,
0497 PHY_UP,
0498 PHY_RUNNING,
0499 PHY_NOLINK,
0500 PHY_CABLETEST,
0501 };
0502
0503 #define MDIO_MMD_NUM 32
0504
0505
0506
0507
0508
0509
0510
0511 struct phy_c45_device_ids {
0512 u32 devices_in_package;
0513 u32 mmds_present;
0514 u32 device_ids[MDIO_MMD_NUM];
0515 };
0516
0517 struct macsec_context;
0518 struct macsec_ops;
0519
0520
0521
0522
0523
0524
0525
0526
0527
0528
0529
0530
0531
0532
0533
0534
0535
0536
0537
0538
0539
0540
0541
0542
0543
0544
0545
0546
0547
0548
0549
0550
0551
0552
0553
0554
0555
0556
0557
0558
0559
0560
0561
0562
0563
0564
0565
0566
0567
0568
0569
0570
0571
0572
0573
0574
0575
0576
0577
0578
0579
0580
0581
0582
0583
0584
0585
0586
0587
0588
0589
0590
0591
0592
0593
0594
0595
0596
0597
0598
0599
0600
0601
0602
0603 struct phy_device {
0604 struct mdio_device mdio;
0605
0606
0607
0608 struct phy_driver *drv;
0609
0610 u32 phy_id;
0611
0612 struct phy_c45_device_ids c45_ids;
0613 unsigned is_c45:1;
0614 unsigned is_internal:1;
0615 unsigned is_pseudo_fixed_link:1;
0616 unsigned is_gigabit_capable:1;
0617 unsigned has_fixups:1;
0618 unsigned suspended:1;
0619 unsigned suspended_by_mdio_bus:1;
0620 unsigned sysfs_links:1;
0621 unsigned loopback_enabled:1;
0622 unsigned downshifted_rate:1;
0623 unsigned is_on_sfp_module:1;
0624 unsigned mac_managed_pm:1;
0625
0626 unsigned autoneg:1;
0627
0628 unsigned link:1;
0629 unsigned autoneg_complete:1;
0630
0631
0632 unsigned interrupts:1;
0633 unsigned irq_suspended:1;
0634 unsigned irq_rerun:1;
0635
0636 enum phy_state state;
0637
0638 u32 dev_flags;
0639
0640 phy_interface_t interface;
0641
0642
0643
0644
0645
0646 int speed;
0647 int duplex;
0648 int port;
0649 int pause;
0650 int asym_pause;
0651 u8 master_slave_get;
0652 u8 master_slave_set;
0653 u8 master_slave_state;
0654
0655
0656
0657 __ETHTOOL_DECLARE_LINK_MODE_MASK(supported);
0658 __ETHTOOL_DECLARE_LINK_MODE_MASK(advertising);
0659 __ETHTOOL_DECLARE_LINK_MODE_MASK(lp_advertising);
0660
0661 __ETHTOOL_DECLARE_LINK_MODE_MASK(adv_old);
0662
0663
0664 u32 eee_broken_modes;
0665
0666 #ifdef CONFIG_LED_TRIGGER_PHY
0667 struct phy_led_trigger *phy_led_triggers;
0668 unsigned int phy_num_led_triggers;
0669 struct phy_led_trigger *last_triggered;
0670
0671 struct phy_led_trigger *led_link_trigger;
0672 #endif
0673
0674
0675
0676
0677
0678 int irq;
0679
0680
0681
0682 void *priv;
0683
0684
0685
0686 struct phy_package_shared *shared;
0687
0688
0689 struct sk_buff *skb;
0690 void *ehdr;
0691 struct nlattr *nest;
0692
0693
0694 struct delayed_work state_queue;
0695
0696 struct mutex lock;
0697
0698
0699 bool sfp_bus_attached;
0700 struct sfp_bus *sfp_bus;
0701 struct phylink *phylink;
0702 struct net_device *attached_dev;
0703 struct mii_timestamper *mii_ts;
0704
0705 u8 mdix;
0706 u8 mdix_ctrl;
0707
0708 int pma_extable;
0709
0710 void (*phy_link_change)(struct phy_device *phydev, bool up);
0711 void (*adjust_link)(struct net_device *dev);
0712
0713 #if IS_ENABLED(CONFIG_MACSEC)
0714
0715 const struct macsec_ops *macsec_ops;
0716 #endif
0717 };
0718
0719 static inline struct phy_device *to_phy_device(const struct device *dev)
0720 {
0721 return container_of(to_mdio_device(dev), struct phy_device, mdio);
0722 }
0723
0724
0725
0726
0727
0728
0729
0730
0731
0732
0733
0734
0735
0736
0737 struct phy_tdr_config {
0738 u32 first;
0739 u32 last;
0740 u32 step;
0741 s8 pair;
0742 };
0743 #define PHY_PAIR_ALL -1
0744
0745
0746
0747
0748
0749
0750
0751
0752
0753
0754
0755
0756
0757
0758
0759
0760
0761
0762
0763
0764
0765
0766
0767
0768 struct phy_driver {
0769 struct mdio_driver_common mdiodrv;
0770 u32 phy_id;
0771 char *name;
0772 u32 phy_id_mask;
0773 const unsigned long * const features;
0774 u32 flags;
0775 const void *driver_data;
0776
0777
0778
0779
0780 int (*soft_reset)(struct phy_device *phydev);
0781
0782
0783
0784
0785
0786 int (*config_init)(struct phy_device *phydev);
0787
0788
0789
0790
0791
0792 int (*probe)(struct phy_device *phydev);
0793
0794
0795
0796
0797
0798 int (*get_features)(struct phy_device *phydev);
0799
0800
0801
0802 int (*suspend)(struct phy_device *phydev);
0803
0804 int (*resume)(struct phy_device *phydev);
0805
0806
0807
0808
0809
0810
0811
0812 int (*config_aneg)(struct phy_device *phydev);
0813
0814
0815 int (*aneg_done)(struct phy_device *phydev);
0816
0817
0818 int (*read_status)(struct phy_device *phydev);
0819
0820
0821
0822
0823
0824
0825 int (*config_intr)(struct phy_device *phydev);
0826
0827
0828 irqreturn_t (*handle_interrupt)(struct phy_device *phydev);
0829
0830
0831 void (*remove)(struct phy_device *phydev);
0832
0833
0834
0835
0836
0837
0838 int (*match_phy_device)(struct phy_device *phydev);
0839
0840
0841
0842
0843
0844
0845
0846 int (*set_wol)(struct phy_device *dev, struct ethtool_wolinfo *wol);
0847
0848
0849
0850
0851
0852 void (*get_wol)(struct phy_device *dev, struct ethtool_wolinfo *wol);
0853
0854
0855
0856
0857
0858
0859
0860
0861
0862 void (*link_change_notify)(struct phy_device *dev);
0863
0864
0865
0866
0867
0868
0869
0870
0871
0872
0873
0874 int (*read_mmd)(struct phy_device *dev, int devnum, u16 regnum);
0875
0876
0877
0878
0879
0880
0881
0882
0883
0884
0885
0886 int (*write_mmd)(struct phy_device *dev, int devnum, u16 regnum,
0887 u16 val);
0888
0889
0890 int (*read_page)(struct phy_device *dev);
0891
0892 int (*write_page)(struct phy_device *dev, int page);
0893
0894
0895
0896
0897
0898 int (*module_info)(struct phy_device *dev,
0899 struct ethtool_modinfo *modinfo);
0900
0901
0902
0903
0904
0905 int (*module_eeprom)(struct phy_device *dev,
0906 struct ethtool_eeprom *ee, u8 *data);
0907
0908
0909 int (*cable_test_start)(struct phy_device *dev);
0910
0911
0912 int (*cable_test_tdr_start)(struct phy_device *dev,
0913 const struct phy_tdr_config *config);
0914
0915
0916
0917
0918
0919 int (*cable_test_get_status)(struct phy_device *dev, bool *finished);
0920
0921
0922
0923 int (*get_sset_count)(struct phy_device *dev);
0924
0925 void (*get_strings)(struct phy_device *dev, u8 *data);
0926
0927 void (*get_stats)(struct phy_device *dev,
0928 struct ethtool_stats *stats, u64 *data);
0929
0930
0931
0932 int (*get_tunable)(struct phy_device *dev,
0933 struct ethtool_tunable *tuna, void *data);
0934
0935 int (*set_tunable)(struct phy_device *dev,
0936 struct ethtool_tunable *tuna,
0937 const void *data);
0938
0939 int (*set_loopback)(struct phy_device *dev, bool enable);
0940
0941 int (*get_sqi)(struct phy_device *dev);
0942
0943 int (*get_sqi_max)(struct phy_device *dev);
0944 };
0945 #define to_phy_driver(d) container_of(to_mdio_common_driver(d), \
0946 struct phy_driver, mdiodrv)
0947
0948 #define PHY_ANY_ID "MATCH ANY PHY"
0949 #define PHY_ANY_UID 0xffffffff
0950
0951 #define PHY_ID_MATCH_EXACT(id) .phy_id = (id), .phy_id_mask = GENMASK(31, 0)
0952 #define PHY_ID_MATCH_MODEL(id) .phy_id = (id), .phy_id_mask = GENMASK(31, 4)
0953 #define PHY_ID_MATCH_VENDOR(id) .phy_id = (id), .phy_id_mask = GENMASK(31, 10)
0954
0955
0956 struct phy_fixup {
0957 struct list_head list;
0958 char bus_id[MII_BUS_ID_SIZE + 3];
0959 u32 phy_uid;
0960 u32 phy_uid_mask;
0961 int (*run)(struct phy_device *phydev);
0962 };
0963
0964 const char *phy_speed_to_str(int speed);
0965 const char *phy_duplex_to_str(unsigned int duplex);
0966
0967
0968
0969
0970 struct phy_setting {
0971 u32 speed;
0972 u8 duplex;
0973 u8 bit;
0974 };
0975
0976 const struct phy_setting *
0977 phy_lookup_setting(int speed, int duplex, const unsigned long *mask,
0978 bool exact);
0979 size_t phy_speeds(unsigned int *speeds, size_t size,
0980 unsigned long *mask);
0981 void of_set_phy_supported(struct phy_device *phydev);
0982 void of_set_phy_eee_broken(struct phy_device *phydev);
0983 int phy_speed_down_core(struct phy_device *phydev);
0984
0985
0986
0987
0988
0989 static inline bool phy_is_started(struct phy_device *phydev)
0990 {
0991 return phydev->state >= PHY_UP;
0992 }
0993
0994 void phy_resolve_aneg_pause(struct phy_device *phydev);
0995 void phy_resolve_aneg_linkmode(struct phy_device *phydev);
0996 void phy_check_downshift(struct phy_device *phydev);
0997
0998
0999
1000
1001
1002
1003
1004
1005
1006
1007 static inline int phy_read(struct phy_device *phydev, u32 regnum)
1008 {
1009 return mdiobus_read(phydev->mdio.bus, phydev->mdio.addr, regnum);
1010 }
1011
1012 #define phy_read_poll_timeout(phydev, regnum, val, cond, sleep_us, \
1013 timeout_us, sleep_before_read) \
1014 ({ \
1015 int __ret = read_poll_timeout(phy_read, val, (cond) || val < 0, \
1016 sleep_us, timeout_us, sleep_before_read, phydev, regnum); \
1017 if (val < 0) \
1018 __ret = val; \
1019 if (__ret) \
1020 phydev_err(phydev, "%s failed: %d\n", __func__, __ret); \
1021 __ret; \
1022 })
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032 static inline int __phy_read(struct phy_device *phydev, u32 regnum)
1033 {
1034 return __mdiobus_read(phydev->mdio.bus, phydev->mdio.addr, regnum);
1035 }
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047 static inline int phy_write(struct phy_device *phydev, u32 regnum, u16 val)
1048 {
1049 return mdiobus_write(phydev->mdio.bus, phydev->mdio.addr, regnum, val);
1050 }
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060 static inline int __phy_write(struct phy_device *phydev, u32 regnum, u16 val)
1061 {
1062 return __mdiobus_write(phydev->mdio.bus, phydev->mdio.addr, regnum,
1063 val);
1064 }
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078 static inline int __phy_modify_changed(struct phy_device *phydev, u32 regnum,
1079 u16 mask, u16 set)
1080 {
1081 return __mdiobus_modify_changed(phydev->mdio.bus, phydev->mdio.addr,
1082 regnum, mask, set);
1083 }
1084
1085
1086
1087
1088
1089 int phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum);
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109 #define phy_read_mmd_poll_timeout(phydev, devaddr, regnum, val, cond, \
1110 sleep_us, timeout_us, sleep_before_read) \
1111 ({ \
1112 int __ret = read_poll_timeout(phy_read_mmd, val, (cond) || val < 0, \
1113 sleep_us, timeout_us, sleep_before_read, \
1114 phydev, devaddr, regnum); \
1115 if (val < 0) \
1116 __ret = val; \
1117 if (__ret) \
1118 phydev_err(phydev, "%s failed: %d\n", __func__, __ret); \
1119 __ret; \
1120 })
1121
1122
1123
1124
1125
1126 int __phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum);
1127
1128
1129
1130
1131
1132 int phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val);
1133
1134
1135
1136
1137
1138 int __phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val);
1139
1140 int __phy_modify_changed(struct phy_device *phydev, u32 regnum, u16 mask,
1141 u16 set);
1142 int phy_modify_changed(struct phy_device *phydev, u32 regnum, u16 mask,
1143 u16 set);
1144 int __phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set);
1145 int phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set);
1146
1147 int __phy_modify_mmd_changed(struct phy_device *phydev, int devad, u32 regnum,
1148 u16 mask, u16 set);
1149 int phy_modify_mmd_changed(struct phy_device *phydev, int devad, u32 regnum,
1150 u16 mask, u16 set);
1151 int __phy_modify_mmd(struct phy_device *phydev, int devad, u32 regnum,
1152 u16 mask, u16 set);
1153 int phy_modify_mmd(struct phy_device *phydev, int devad, u32 regnum,
1154 u16 mask, u16 set);
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164 static inline int __phy_set_bits(struct phy_device *phydev, u32 regnum, u16 val)
1165 {
1166 return __phy_modify(phydev, regnum, 0, val);
1167 }
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177 static inline int __phy_clear_bits(struct phy_device *phydev, u32 regnum,
1178 u16 val)
1179 {
1180 return __phy_modify(phydev, regnum, val, 0);
1181 }
1182
1183
1184
1185
1186
1187
1188
1189 static inline int phy_set_bits(struct phy_device *phydev, u32 regnum, u16 val)
1190 {
1191 return phy_modify(phydev, regnum, 0, val);
1192 }
1193
1194
1195
1196
1197
1198
1199
1200 static inline int phy_clear_bits(struct phy_device *phydev, u32 regnum, u16 val)
1201 {
1202 return phy_modify(phydev, regnum, val, 0);
1203 }
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215 static inline int __phy_set_bits_mmd(struct phy_device *phydev, int devad,
1216 u32 regnum, u16 val)
1217 {
1218 return __phy_modify_mmd(phydev, devad, regnum, 0, val);
1219 }
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231 static inline int __phy_clear_bits_mmd(struct phy_device *phydev, int devad,
1232 u32 regnum, u16 val)
1233 {
1234 return __phy_modify_mmd(phydev, devad, regnum, val, 0);
1235 }
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245 static inline int phy_set_bits_mmd(struct phy_device *phydev, int devad,
1246 u32 regnum, u16 val)
1247 {
1248 return phy_modify_mmd(phydev, devad, regnum, 0, val);
1249 }
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259 static inline int phy_clear_bits_mmd(struct phy_device *phydev, int devad,
1260 u32 regnum, u16 val)
1261 {
1262 return phy_modify_mmd(phydev, devad, regnum, val, 0);
1263 }
1264
1265
1266
1267
1268
1269
1270
1271
1272 static inline bool phy_interrupt_is_valid(struct phy_device *phydev)
1273 {
1274 return phydev->irq != PHY_POLL && phydev->irq != PHY_MAC_INTERRUPT;
1275 }
1276
1277
1278
1279
1280
1281
1282 static inline bool phy_polling_mode(struct phy_device *phydev)
1283 {
1284 if (phydev->state == PHY_CABLETEST)
1285 if (phydev->drv->flags & PHY_POLL_CABLE_TEST)
1286 return true;
1287
1288 return phydev->irq == PHY_POLL;
1289 }
1290
1291
1292
1293
1294
1295 static inline bool phy_has_hwtstamp(struct phy_device *phydev)
1296 {
1297 return phydev && phydev->mii_ts && phydev->mii_ts->hwtstamp;
1298 }
1299
1300
1301
1302
1303
1304 static inline bool phy_has_rxtstamp(struct phy_device *phydev)
1305 {
1306 return phydev && phydev->mii_ts && phydev->mii_ts->rxtstamp;
1307 }
1308
1309
1310
1311
1312
1313
1314 static inline bool phy_has_tsinfo(struct phy_device *phydev)
1315 {
1316 return phydev && phydev->mii_ts && phydev->mii_ts->ts_info;
1317 }
1318
1319
1320
1321
1322
1323 static inline bool phy_has_txtstamp(struct phy_device *phydev)
1324 {
1325 return phydev && phydev->mii_ts && phydev->mii_ts->txtstamp;
1326 }
1327
1328 static inline int phy_hwtstamp(struct phy_device *phydev, struct ifreq *ifr)
1329 {
1330 return phydev->mii_ts->hwtstamp(phydev->mii_ts, ifr);
1331 }
1332
1333 static inline bool phy_rxtstamp(struct phy_device *phydev, struct sk_buff *skb,
1334 int type)
1335 {
1336 return phydev->mii_ts->rxtstamp(phydev->mii_ts, skb, type);
1337 }
1338
1339 static inline int phy_ts_info(struct phy_device *phydev,
1340 struct ethtool_ts_info *tsinfo)
1341 {
1342 return phydev->mii_ts->ts_info(phydev->mii_ts, tsinfo);
1343 }
1344
1345 static inline void phy_txtstamp(struct phy_device *phydev, struct sk_buff *skb,
1346 int type)
1347 {
1348 phydev->mii_ts->txtstamp(phydev->mii_ts, skb, type);
1349 }
1350
1351
1352
1353
1354
1355 static inline bool phy_is_internal(struct phy_device *phydev)
1356 {
1357 return phydev->is_internal;
1358 }
1359
1360
1361
1362
1363
1364 static inline bool phy_on_sfp(struct phy_device *phydev)
1365 {
1366 return phydev->is_on_sfp_module;
1367 }
1368
1369
1370
1371
1372
1373
1374 static inline bool phy_interface_mode_is_rgmii(phy_interface_t mode)
1375 {
1376 return mode >= PHY_INTERFACE_MODE_RGMII &&
1377 mode <= PHY_INTERFACE_MODE_RGMII_TXID;
1378 };
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388 static inline bool phy_interface_mode_is_8023z(phy_interface_t mode)
1389 {
1390 return mode == PHY_INTERFACE_MODE_1000BASEX ||
1391 mode == PHY_INTERFACE_MODE_2500BASEX;
1392 }
1393
1394
1395
1396
1397
1398
1399 static inline bool phy_interface_is_rgmii(struct phy_device *phydev)
1400 {
1401 return phy_interface_mode_is_rgmii(phydev->interface);
1402 };
1403
1404
1405
1406
1407
1408
1409 static inline bool phy_is_pseudo_fixed_link(struct phy_device *phydev)
1410 {
1411 return phydev->is_pseudo_fixed_link;
1412 }
1413
1414 int phy_save_page(struct phy_device *phydev);
1415 int phy_select_page(struct phy_device *phydev, int page);
1416 int phy_restore_page(struct phy_device *phydev, int oldpage, int ret);
1417 int phy_read_paged(struct phy_device *phydev, int page, u32 regnum);
1418 int phy_write_paged(struct phy_device *phydev, int page, u32 regnum, u16 val);
1419 int phy_modify_paged_changed(struct phy_device *phydev, int page, u32 regnum,
1420 u16 mask, u16 set);
1421 int phy_modify_paged(struct phy_device *phydev, int page, u32 regnum,
1422 u16 mask, u16 set);
1423
1424 struct phy_device *phy_device_create(struct mii_bus *bus, int addr, u32 phy_id,
1425 bool is_c45,
1426 struct phy_c45_device_ids *c45_ids);
1427 #if IS_ENABLED(CONFIG_PHYLIB)
1428 int fwnode_get_phy_id(struct fwnode_handle *fwnode, u32 *phy_id);
1429 struct mdio_device *fwnode_mdio_find_device(struct fwnode_handle *fwnode);
1430 struct phy_device *fwnode_phy_find_device(struct fwnode_handle *phy_fwnode);
1431 struct phy_device *device_phy_find_device(struct device *dev);
1432 struct fwnode_handle *fwnode_get_phy_node(struct fwnode_handle *fwnode);
1433 struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45);
1434 int phy_device_register(struct phy_device *phy);
1435 void phy_device_free(struct phy_device *phydev);
1436 #else
1437 static inline int fwnode_get_phy_id(struct fwnode_handle *fwnode, u32 *phy_id)
1438 {
1439 return 0;
1440 }
1441 static inline
1442 struct mdio_device *fwnode_mdio_find_device(struct fwnode_handle *fwnode)
1443 {
1444 return 0;
1445 }
1446
1447 static inline
1448 struct phy_device *fwnode_phy_find_device(struct fwnode_handle *phy_fwnode)
1449 {
1450 return NULL;
1451 }
1452
1453 static inline struct phy_device *device_phy_find_device(struct device *dev)
1454 {
1455 return NULL;
1456 }
1457
1458 static inline
1459 struct fwnode_handle *fwnode_get_phy_node(struct fwnode_handle *fwnode)
1460 {
1461 return NULL;
1462 }
1463
1464 static inline
1465 struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45)
1466 {
1467 return NULL;
1468 }
1469
1470 static inline int phy_device_register(struct phy_device *phy)
1471 {
1472 return 0;
1473 }
1474
1475 static inline void phy_device_free(struct phy_device *phydev) { }
1476 #endif
1477 void phy_device_remove(struct phy_device *phydev);
1478 int phy_get_c45_ids(struct phy_device *phydev);
1479 int phy_init_hw(struct phy_device *phydev);
1480 int phy_suspend(struct phy_device *phydev);
1481 int phy_resume(struct phy_device *phydev);
1482 int __phy_resume(struct phy_device *phydev);
1483 int phy_loopback(struct phy_device *phydev, bool enable);
1484 void phy_sfp_attach(void *upstream, struct sfp_bus *bus);
1485 void phy_sfp_detach(void *upstream, struct sfp_bus *bus);
1486 int phy_sfp_probe(struct phy_device *phydev,
1487 const struct sfp_upstream_ops *ops);
1488 struct phy_device *phy_attach(struct net_device *dev, const char *bus_id,
1489 phy_interface_t interface);
1490 struct phy_device *phy_find_first(struct mii_bus *bus);
1491 int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
1492 u32 flags, phy_interface_t interface);
1493 int phy_connect_direct(struct net_device *dev, struct phy_device *phydev,
1494 void (*handler)(struct net_device *),
1495 phy_interface_t interface);
1496 struct phy_device *phy_connect(struct net_device *dev, const char *bus_id,
1497 void (*handler)(struct net_device *),
1498 phy_interface_t interface);
1499 void phy_disconnect(struct phy_device *phydev);
1500 void phy_detach(struct phy_device *phydev);
1501 void phy_start(struct phy_device *phydev);
1502 void phy_stop(struct phy_device *phydev);
1503 int phy_config_aneg(struct phy_device *phydev);
1504 int phy_start_aneg(struct phy_device *phydev);
1505 int phy_aneg_done(struct phy_device *phydev);
1506 int phy_speed_down(struct phy_device *phydev, bool sync);
1507 int phy_speed_up(struct phy_device *phydev);
1508
1509 int phy_restart_aneg(struct phy_device *phydev);
1510 int phy_reset_after_clk_enable(struct phy_device *phydev);
1511
1512 #if IS_ENABLED(CONFIG_PHYLIB)
1513 int phy_start_cable_test(struct phy_device *phydev,
1514 struct netlink_ext_ack *extack);
1515 int phy_start_cable_test_tdr(struct phy_device *phydev,
1516 struct netlink_ext_ack *extack,
1517 const struct phy_tdr_config *config);
1518 #else
1519 static inline
1520 int phy_start_cable_test(struct phy_device *phydev,
1521 struct netlink_ext_ack *extack)
1522 {
1523 NL_SET_ERR_MSG(extack, "Kernel not compiled with PHYLIB support");
1524 return -EOPNOTSUPP;
1525 }
1526 static inline
1527 int phy_start_cable_test_tdr(struct phy_device *phydev,
1528 struct netlink_ext_ack *extack,
1529 const struct phy_tdr_config *config)
1530 {
1531 NL_SET_ERR_MSG(extack, "Kernel not compiled with PHYLIB support");
1532 return -EOPNOTSUPP;
1533 }
1534 #endif
1535
1536 int phy_cable_test_result(struct phy_device *phydev, u8 pair, u16 result);
1537 int phy_cable_test_fault_length(struct phy_device *phydev, u8 pair,
1538 u16 cm);
1539
1540 static inline void phy_device_reset(struct phy_device *phydev, int value)
1541 {
1542 mdio_device_reset(&phydev->mdio, value);
1543 }
1544
1545 #define phydev_err(_phydev, format, args...) \
1546 dev_err(&_phydev->mdio.dev, format, ##args)
1547
1548 #define phydev_err_probe(_phydev, err, format, args...) \
1549 dev_err_probe(&_phydev->mdio.dev, err, format, ##args)
1550
1551 #define phydev_info(_phydev, format, args...) \
1552 dev_info(&_phydev->mdio.dev, format, ##args)
1553
1554 #define phydev_warn(_phydev, format, args...) \
1555 dev_warn(&_phydev->mdio.dev, format, ##args)
1556
1557 #define phydev_dbg(_phydev, format, args...) \
1558 dev_dbg(&_phydev->mdio.dev, format, ##args)
1559
1560 static inline const char *phydev_name(const struct phy_device *phydev)
1561 {
1562 return dev_name(&phydev->mdio.dev);
1563 }
1564
1565 static inline void phy_lock_mdio_bus(struct phy_device *phydev)
1566 {
1567 mutex_lock(&phydev->mdio.bus->mdio_lock);
1568 }
1569
1570 static inline void phy_unlock_mdio_bus(struct phy_device *phydev)
1571 {
1572 mutex_unlock(&phydev->mdio.bus->mdio_lock);
1573 }
1574
1575 void phy_attached_print(struct phy_device *phydev, const char *fmt, ...)
1576 __printf(2, 3);
1577 char *phy_attached_info_irq(struct phy_device *phydev)
1578 __malloc;
1579 void phy_attached_info(struct phy_device *phydev);
1580
1581
1582 int genphy_read_abilities(struct phy_device *phydev);
1583 int genphy_setup_forced(struct phy_device *phydev);
1584 int genphy_restart_aneg(struct phy_device *phydev);
1585 int genphy_check_and_restart_aneg(struct phy_device *phydev, bool restart);
1586 int genphy_config_eee_advert(struct phy_device *phydev);
1587 int __genphy_config_aneg(struct phy_device *phydev, bool changed);
1588 int genphy_aneg_done(struct phy_device *phydev);
1589 int genphy_update_link(struct phy_device *phydev);
1590 int genphy_read_lpa(struct phy_device *phydev);
1591 int genphy_read_status_fixed(struct phy_device *phydev);
1592 int genphy_read_status(struct phy_device *phydev);
1593 int genphy_read_master_slave(struct phy_device *phydev);
1594 int genphy_suspend(struct phy_device *phydev);
1595 int genphy_resume(struct phy_device *phydev);
1596 int genphy_loopback(struct phy_device *phydev, bool enable);
1597 int genphy_soft_reset(struct phy_device *phydev);
1598 irqreturn_t genphy_handle_interrupt_no_ack(struct phy_device *phydev);
1599
1600 static inline int genphy_config_aneg(struct phy_device *phydev)
1601 {
1602 return __genphy_config_aneg(phydev, false);
1603 }
1604
1605 static inline int genphy_no_config_intr(struct phy_device *phydev)
1606 {
1607 return 0;
1608 }
1609 int genphy_read_mmd_unsupported(struct phy_device *phdev, int devad,
1610 u16 regnum);
1611 int genphy_write_mmd_unsupported(struct phy_device *phdev, int devnum,
1612 u16 regnum, u16 val);
1613
1614
1615 int genphy_c37_config_aneg(struct phy_device *phydev);
1616 int genphy_c37_read_status(struct phy_device *phydev);
1617
1618
1619 int genphy_c45_restart_aneg(struct phy_device *phydev);
1620 int genphy_c45_check_and_restart_aneg(struct phy_device *phydev, bool restart);
1621 int genphy_c45_aneg_done(struct phy_device *phydev);
1622 int genphy_c45_read_link(struct phy_device *phydev);
1623 int genphy_c45_read_lpa(struct phy_device *phydev);
1624 int genphy_c45_read_pma(struct phy_device *phydev);
1625 int genphy_c45_pma_setup_forced(struct phy_device *phydev);
1626 int genphy_c45_pma_baset1_setup_master_slave(struct phy_device *phydev);
1627 int genphy_c45_an_config_aneg(struct phy_device *phydev);
1628 int genphy_c45_an_disable_aneg(struct phy_device *phydev);
1629 int genphy_c45_read_mdix(struct phy_device *phydev);
1630 int genphy_c45_pma_read_abilities(struct phy_device *phydev);
1631 int genphy_c45_pma_baset1_read_master_slave(struct phy_device *phydev);
1632 int genphy_c45_read_status(struct phy_device *phydev);
1633 int genphy_c45_baset1_read_status(struct phy_device *phydev);
1634 int genphy_c45_config_aneg(struct phy_device *phydev);
1635 int genphy_c45_loopback(struct phy_device *phydev, bool enable);
1636 int genphy_c45_pma_resume(struct phy_device *phydev);
1637 int genphy_c45_pma_suspend(struct phy_device *phydev);
1638 int genphy_c45_fast_retrain(struct phy_device *phydev, bool enable);
1639
1640
1641 extern struct phy_driver genphy_c45_driver;
1642
1643
1644 int gen10g_config_aneg(struct phy_device *phydev);
1645
1646 static inline int phy_read_status(struct phy_device *phydev)
1647 {
1648 if (!phydev->drv)
1649 return -EIO;
1650
1651 if (phydev->drv->read_status)
1652 return phydev->drv->read_status(phydev);
1653 else
1654 return genphy_read_status(phydev);
1655 }
1656
1657 void phy_driver_unregister(struct phy_driver *drv);
1658 void phy_drivers_unregister(struct phy_driver *drv, int n);
1659 int phy_driver_register(struct phy_driver *new_driver, struct module *owner);
1660 int phy_drivers_register(struct phy_driver *new_driver, int n,
1661 struct module *owner);
1662 void phy_error(struct phy_device *phydev);
1663 void phy_state_machine(struct work_struct *work);
1664 void phy_queue_state_machine(struct phy_device *phydev, unsigned long jiffies);
1665 void phy_trigger_machine(struct phy_device *phydev);
1666 void phy_mac_interrupt(struct phy_device *phydev);
1667 void phy_start_machine(struct phy_device *phydev);
1668 void phy_stop_machine(struct phy_device *phydev);
1669 void phy_ethtool_ksettings_get(struct phy_device *phydev,
1670 struct ethtool_link_ksettings *cmd);
1671 int phy_ethtool_ksettings_set(struct phy_device *phydev,
1672 const struct ethtool_link_ksettings *cmd);
1673 int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd);
1674 int phy_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd);
1675 int phy_do_ioctl_running(struct net_device *dev, struct ifreq *ifr, int cmd);
1676 int phy_disable_interrupts(struct phy_device *phydev);
1677 void phy_request_interrupt(struct phy_device *phydev);
1678 void phy_free_interrupt(struct phy_device *phydev);
1679 void phy_print_status(struct phy_device *phydev);
1680 void phy_set_max_speed(struct phy_device *phydev, u32 max_speed);
1681 void phy_remove_link_mode(struct phy_device *phydev, u32 link_mode);
1682 void phy_advertise_supported(struct phy_device *phydev);
1683 void phy_support_sym_pause(struct phy_device *phydev);
1684 void phy_support_asym_pause(struct phy_device *phydev);
1685 void phy_set_sym_pause(struct phy_device *phydev, bool rx, bool tx,
1686 bool autoneg);
1687 void phy_set_asym_pause(struct phy_device *phydev, bool rx, bool tx);
1688 bool phy_validate_pause(struct phy_device *phydev,
1689 struct ethtool_pauseparam *pp);
1690 void phy_get_pause(struct phy_device *phydev, bool *tx_pause, bool *rx_pause);
1691
1692 s32 phy_get_internal_delay(struct phy_device *phydev, struct device *dev,
1693 const int *delay_values, int size, bool is_rx);
1694
1695 void phy_resolve_pause(unsigned long *local_adv, unsigned long *partner_adv,
1696 bool *tx_pause, bool *rx_pause);
1697
1698 int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask,
1699 int (*run)(struct phy_device *));
1700 int phy_register_fixup_for_id(const char *bus_id,
1701 int (*run)(struct phy_device *));
1702 int phy_register_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask,
1703 int (*run)(struct phy_device *));
1704
1705 int phy_unregister_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask);
1706 int phy_unregister_fixup_for_id(const char *bus_id);
1707 int phy_unregister_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask);
1708
1709 int phy_init_eee(struct phy_device *phydev, bool clk_stop_enable);
1710 int phy_get_eee_err(struct phy_device *phydev);
1711 int phy_ethtool_set_eee(struct phy_device *phydev, struct ethtool_eee *data);
1712 int phy_ethtool_get_eee(struct phy_device *phydev, struct ethtool_eee *data);
1713 int phy_ethtool_set_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol);
1714 void phy_ethtool_get_wol(struct phy_device *phydev,
1715 struct ethtool_wolinfo *wol);
1716 int phy_ethtool_get_link_ksettings(struct net_device *ndev,
1717 struct ethtool_link_ksettings *cmd);
1718 int phy_ethtool_set_link_ksettings(struct net_device *ndev,
1719 const struct ethtool_link_ksettings *cmd);
1720 int phy_ethtool_nway_reset(struct net_device *ndev);
1721 int phy_package_join(struct phy_device *phydev, int addr, size_t priv_size);
1722 void phy_package_leave(struct phy_device *phydev);
1723 int devm_phy_package_join(struct device *dev, struct phy_device *phydev,
1724 int addr, size_t priv_size);
1725
1726 #if IS_ENABLED(CONFIG_PHYLIB)
1727 int __init mdio_bus_init(void);
1728 void mdio_bus_exit(void);
1729 #endif
1730
1731 int phy_ethtool_get_strings(struct phy_device *phydev, u8 *data);
1732 int phy_ethtool_get_sset_count(struct phy_device *phydev);
1733 int phy_ethtool_get_stats(struct phy_device *phydev,
1734 struct ethtool_stats *stats, u64 *data);
1735
1736 static inline int phy_package_read(struct phy_device *phydev, u32 regnum)
1737 {
1738 struct phy_package_shared *shared = phydev->shared;
1739
1740 if (!shared)
1741 return -EIO;
1742
1743 return mdiobus_read(phydev->mdio.bus, shared->addr, regnum);
1744 }
1745
1746 static inline int __phy_package_read(struct phy_device *phydev, u32 regnum)
1747 {
1748 struct phy_package_shared *shared = phydev->shared;
1749
1750 if (!shared)
1751 return -EIO;
1752
1753 return __mdiobus_read(phydev->mdio.bus, shared->addr, regnum);
1754 }
1755
1756 static inline int phy_package_write(struct phy_device *phydev,
1757 u32 regnum, u16 val)
1758 {
1759 struct phy_package_shared *shared = phydev->shared;
1760
1761 if (!shared)
1762 return -EIO;
1763
1764 return mdiobus_write(phydev->mdio.bus, shared->addr, regnum, val);
1765 }
1766
1767 static inline int __phy_package_write(struct phy_device *phydev,
1768 u32 regnum, u16 val)
1769 {
1770 struct phy_package_shared *shared = phydev->shared;
1771
1772 if (!shared)
1773 return -EIO;
1774
1775 return __mdiobus_write(phydev->mdio.bus, shared->addr, regnum, val);
1776 }
1777
1778 static inline bool __phy_package_set_once(struct phy_device *phydev,
1779 unsigned int b)
1780 {
1781 struct phy_package_shared *shared = phydev->shared;
1782
1783 if (!shared)
1784 return false;
1785
1786 return !test_and_set_bit(b, &shared->flags);
1787 }
1788
1789 static inline bool phy_package_init_once(struct phy_device *phydev)
1790 {
1791 return __phy_package_set_once(phydev, PHY_SHARED_F_INIT_DONE);
1792 }
1793
1794 static inline bool phy_package_probe_once(struct phy_device *phydev)
1795 {
1796 return __phy_package_set_once(phydev, PHY_SHARED_F_PROBE_DONE);
1797 }
1798
1799 extern struct bus_type mdio_bus_type;
1800
1801 struct mdio_board_info {
1802 const char *bus_id;
1803 char modalias[MDIO_NAME_SIZE];
1804 int mdio_addr;
1805 const void *platform_data;
1806 };
1807
1808 #if IS_ENABLED(CONFIG_MDIO_DEVICE)
1809 int mdiobus_register_board_info(const struct mdio_board_info *info,
1810 unsigned int n);
1811 #else
1812 static inline int mdiobus_register_board_info(const struct mdio_board_info *i,
1813 unsigned int n)
1814 {
1815 return 0;
1816 }
1817 #endif
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829 #define phy_module_driver(__phy_drivers, __count) \
1830 static int __init phy_module_init(void) \
1831 { \
1832 return phy_drivers_register(__phy_drivers, __count, THIS_MODULE); \
1833 } \
1834 module_init(phy_module_init); \
1835 static void __exit phy_module_exit(void) \
1836 { \
1837 phy_drivers_unregister(__phy_drivers, __count); \
1838 } \
1839 module_exit(phy_module_exit)
1840
1841 #define module_phy_driver(__phy_drivers) \
1842 phy_module_driver(__phy_drivers, ARRAY_SIZE(__phy_drivers))
1843
1844 bool phy_driver_is_genphy(struct phy_device *phydev);
1845 bool phy_driver_is_genphy_10g(struct phy_device *phydev);
1846
1847 #endif