/* SPDX-License-Identifier: GPL-2.0-or-later *//* * Framework and drivers for configuring and reading different PHYs * Based on code in sungem_phy.c and (long-removed) gianfar_phy.c * * Author: Andy Fleming * * Copyright (c) 2004 Freescale Semiconductor, Inc. */#ifndef __PHY_H#define __PHY_H#include<linux/compiler.h>#include<linux/spinlock.h>#include<linux/ethtool.h>#include<linux/linkmode.h>#include<linux/mdio.h>#include<linux/mii.h>#include<linux/mii_timestamper.h>#include<linux/module.h>#include<linux/timer.h>#include<linux/workqueue.h>#include<linux/mod_devicetable.h>#include<linux/u64_stats_sync.h>#include<linux/irqreturn.h>#include<linux/atomic.h>#define PHY_DEFAULT_FEATURES (SUPPORTED_Autoneg | \ SUPPORTED_TP | \ SUPPORTED_MII)#define PHY_10BT_FEATURES (SUPPORTED_10baseT_Half | \ SUPPORTED_10baseT_Full)#define PHY_100BT_FEATURES (SUPPORTED_100baseT_Half | \ SUPPORTED_100baseT_Full)#define PHY_1000BT_FEATURES (SUPPORTED_1000baseT_Half | \ SUPPORTED_1000baseT_Full)extern__ETHTOOL_DECLARE_LINK_MODE_MASK(phy_basic_features)__ro_after_init;extern__ETHTOOL_DECLARE_LINK_MODE_MASK(phy_basic_t1_features)__ro_after_init;extern__ETHTOOL_DECLARE_LINK_MODE_MASK(phy_gbit_features)__ro_after_init;extern__ETHTOOL_DECLARE_LINK_MODE_MASK(phy_gbit_fibre_features)__ro_after_init;extern__ETHTOOL_DECLARE_LINK_MODE_MASK(phy_gbit_all_ports_features)__ro_after_init;extern__ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_features)__ro_after_init;extern__ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_fec_features)__ro_after_init;extern__ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_full_features)__ro_after_init;#define PHY_BASIC_FEATURES ((unsigned long *)&phy_basic_features)#define PHY_BASIC_T1_FEATURES ((unsigned long *)&phy_basic_t1_features)#define PHY_GBIT_FEATURES ((unsigned long *)&phy_gbit_features)#define PHY_GBIT_FIBRE_FEATURES ((unsigned long *)&phy_gbit_fibre_features)#define PHY_GBIT_ALL_PORTS_FEATURES ((unsigned long *)&phy_gbit_all_ports_features)#define PHY_10GBIT_FEATURES ((unsigned long *)&phy_10gbit_features)#define PHY_10GBIT_FEC_FEATURES ((unsigned long *)&phy_10gbit_fec_features)#define PHY_10GBIT_FULL_FEATURES ((unsigned long *)&phy_10gbit_full_features)externconstintphy_basic_ports_array[3];externconstintphy_fibre_port_array[1];externconstintphy_all_ports_features_array[7];externconstintphy_10_100_features_array[4];externconstintphy_basic_t1_features_array[2];externconstintphy_gbit_features_array[2];externconstintphy_10gbit_features_array[1];/* * Set phydev->irq to PHY_POLL if interrupts are not supported, * or not desired for this PHY. Set to PHY_IGNORE_INTERRUPT if * the attached driver handles the interrupt */#define PHY_POLL -1#define PHY_IGNORE_INTERRUPT -2#define PHY_IS_INTERNAL 0x00000001#define PHY_RST_AFTER_CLK_EN 0x00000002#define MDIO_DEVICE_IS_PHY 0x80000000/* Interface Mode definitions */typedefenum{PHY_INTERFACE_MODE_NA,
<