2005-04-16 15:20:36 -07:00
/*
2005-10-10 16:58:14 -07:00
* drivers / net / ibm_emac / ibm_emac_phy . h
2005-04-16 15:20:36 -07:00
*
2005-10-10 16:58:14 -07:00
* Driver for PowerPC 4 xx on - chip ethernet controller , PHY support
2005-04-16 15:20:36 -07:00
*
2005-10-10 16:58:14 -07:00
* Benjamin Herrenschmidt < benh @ kernel . crashing . org >
* February 2003
2005-04-16 15:20:36 -07:00
*
2005-10-10 16:58:14 -07:00
* Minor additions by Eugene Surovegin < ebs @ ebshome . net > , 2004
2005-04-16 15:20:36 -07:00
*
2005-10-10 16:58:14 -07:00
* This program is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation ; either version 2 of the License , or ( at your
* option ) any later version .
2005-04-16 15:20:36 -07:00
*
* This file basically duplicates sungem_phy . { c , h } with different PHYs
* supported . I ' m looking into merging that in a single mii layer more
* flexible than mii . c
*/
2005-10-10 16:58:14 -07:00
# ifndef _IBM_OCP_PHY_H_
# define _IBM_OCP_PHY_H_
2005-04-16 15:20:36 -07:00
struct mii_phy ;
/* Operations supported by any kind of PHY */
struct mii_phy_ops {
int ( * init ) ( struct mii_phy * phy ) ;
int ( * suspend ) ( struct mii_phy * phy , int wol_options ) ;
int ( * setup_aneg ) ( struct mii_phy * phy , u32 advertise ) ;
int ( * setup_forced ) ( struct mii_phy * phy , int speed , int fd ) ;
int ( * poll_link ) ( struct mii_phy * phy ) ;
int ( * read_link ) ( struct mii_phy * phy ) ;
} ;
/* Structure used to statically define an mii/gii based PHY */
struct mii_phy_def {
u32 phy_id ; /* Concatenated ID1 << 16 | ID2 */
u32 phy_id_mask ; /* Significant bits */
2005-10-10 16:58:14 -07:00
u32 features ; /* Ethtool SUPPORTED_* defines or
0 for autodetect */
2005-04-16 15:20:36 -07:00
int magic_aneg ; /* Autoneg does all speed test for us */
const char * name ;
const struct mii_phy_ops * ops ;
} ;
/* An instance of a PHY, partially borrowed from mii_if_info */
struct mii_phy {
struct mii_phy_def * def ;
2005-10-10 16:58:14 -07:00
u32 advertising ; /* Ethtool ADVERTISED_* defines */
u32 features ; /* Copied from mii_phy_def.features
or determined automaticaly */
int address ; /* PHY address */
int mode ; /* PHY mode */
2005-04-16 15:20:36 -07:00
/* 1: autoneg enabled, 0: disabled */
int autoneg ;
/* forced speed & duplex (no autoneg)
* partner speed & duplex & pause ( autoneg )
*/
int speed ;
int duplex ;
int pause ;
2005-10-10 16:58:14 -07:00
int asym_pause ;
2005-04-16 15:20:36 -07:00
/* Provided by host chip */
struct net_device * dev ;
2005-10-10 16:58:14 -07:00
int ( * mdio_read ) ( struct net_device * dev , int addr , int reg ) ;
void ( * mdio_write ) ( struct net_device * dev , int addr , int reg ,
2005-04-16 15:20:36 -07:00
int val ) ;
} ;
/* Pass in a struct mii_phy with dev, mdio_read and mdio_write
* filled , the remaining fields will be filled on return
*/
2005-10-10 16:58:14 -07:00
int mii_phy_probe ( struct mii_phy * phy , int address ) ;
int mii_reset_phy ( struct mii_phy * phy ) ;
2005-04-16 15:20:36 -07:00
2005-10-10 16:58:14 -07:00
# endif /* _IBM_OCP_PHY_H_ */