1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * drivers/net/ethernet/ibm/emac/phy.h 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Driver for PowerPC 4xx on-chip ethernet controller, PHY support 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * Copyright 2007 Benjamin Herrenschmidt, IBM Corp. 8*4882a593Smuzhiyun * <benh@kernel.crashing.org> 9*4882a593Smuzhiyun * 10*4882a593Smuzhiyun * Based on the arch/ppc version of the driver: 11*4882a593Smuzhiyun * 12*4882a593Smuzhiyun * Benjamin Herrenschmidt <benh@kernel.crashing.org> 13*4882a593Smuzhiyun * February 2003 14*4882a593Smuzhiyun * 15*4882a593Smuzhiyun * Minor additions by Eugene Surovegin <ebs@ebshome.net>, 2004 16*4882a593Smuzhiyun * 17*4882a593Smuzhiyun * This file basically duplicates sungem_phy.{c,h} with different PHYs 18*4882a593Smuzhiyun * supported. I'm looking into merging that in a single mii layer more 19*4882a593Smuzhiyun * flexible than mii.c 20*4882a593Smuzhiyun */ 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun #ifndef __IBM_NEWEMAC_PHY_H 23*4882a593Smuzhiyun #define __IBM_NEWEMAC_PHY_H 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun struct mii_phy; 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun /* Operations supported by any kind of PHY */ 28*4882a593Smuzhiyun struct mii_phy_ops { 29*4882a593Smuzhiyun int (*init) (struct mii_phy * phy); 30*4882a593Smuzhiyun int (*suspend) (struct mii_phy * phy, int wol_options); 31*4882a593Smuzhiyun int (*setup_aneg) (struct mii_phy * phy, u32 advertise); 32*4882a593Smuzhiyun int (*setup_forced) (struct mii_phy * phy, int speed, int fd); 33*4882a593Smuzhiyun int (*poll_link) (struct mii_phy * phy); 34*4882a593Smuzhiyun int (*read_link) (struct mii_phy * phy); 35*4882a593Smuzhiyun }; 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun /* Structure used to statically define an mii/gii based PHY */ 38*4882a593Smuzhiyun struct mii_phy_def { 39*4882a593Smuzhiyun u32 phy_id; /* Concatenated ID1 << 16 | ID2 */ 40*4882a593Smuzhiyun u32 phy_id_mask; /* Significant bits */ 41*4882a593Smuzhiyun u32 features; /* Ethtool SUPPORTED_* defines or 42*4882a593Smuzhiyun 0 for autodetect */ 43*4882a593Smuzhiyun int magic_aneg; /* Autoneg does all speed test for us */ 44*4882a593Smuzhiyun const char *name; 45*4882a593Smuzhiyun const struct mii_phy_ops *ops; 46*4882a593Smuzhiyun }; 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun /* An instance of a PHY, partially borrowed from mii_if_info */ 49*4882a593Smuzhiyun struct mii_phy { 50*4882a593Smuzhiyun struct mii_phy_def *def; 51*4882a593Smuzhiyun u32 advertising; /* Ethtool ADVERTISED_* defines */ 52*4882a593Smuzhiyun u32 features; /* Copied from mii_phy_def.features 53*4882a593Smuzhiyun or determined automaticaly */ 54*4882a593Smuzhiyun int address; /* PHY address */ 55*4882a593Smuzhiyun int mode; /* PHY mode */ 56*4882a593Smuzhiyun int gpcs_address; /* GPCS PHY address */ 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun /* 1: autoneg enabled, 0: disabled */ 59*4882a593Smuzhiyun int autoneg; 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun /* forced speed & duplex (no autoneg) 62*4882a593Smuzhiyun * partner speed & duplex & pause (autoneg) 63*4882a593Smuzhiyun */ 64*4882a593Smuzhiyun int speed; 65*4882a593Smuzhiyun int duplex; 66*4882a593Smuzhiyun int pause; 67*4882a593Smuzhiyun int asym_pause; 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun /* Provided by host chip */ 70*4882a593Smuzhiyun struct net_device *dev; 71*4882a593Smuzhiyun int (*mdio_read) (struct net_device * dev, int addr, int reg); 72*4882a593Smuzhiyun void (*mdio_write) (struct net_device * dev, int addr, int reg, 73*4882a593Smuzhiyun int val); 74*4882a593Smuzhiyun }; 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun /* Pass in a struct mii_phy with dev, mdio_read and mdio_write 77*4882a593Smuzhiyun * filled, the remaining fields will be filled on return 78*4882a593Smuzhiyun */ 79*4882a593Smuzhiyun int emac_mii_phy_probe(struct mii_phy *phy, int address); 80*4882a593Smuzhiyun int emac_mii_reset_phy(struct mii_phy *phy); 81*4882a593Smuzhiyun int emac_mii_reset_gpcs(struct mii_phy *phy); 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun #endif /* __IBM_NEWEMAC_PHY_H */ 84