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