netdev/phy: Handle IEEE802.3 clause 45 Ethernet PHYs
The IEEE802.3 clause 45 MDIO bus protocol allows for directly addressing PHY registers using a 21 bit address, and is used by many 10G Ethernet PHYS. Already existing is the ability of MDIO bus drivers to use clause 45, with the MII_ADDR_C45 flag. Here we add struct phy_c45_device_ids to hold the device identifier registers present in clause 45. struct phy_device gets a couple of new fields: c45_ids to hold the identifiers and is_c45 to signal that it is clause 45. get_phy_device() gets a new parameter is_c45 to indicate that the PHY device should use the clause 45 protocol, and its callers are adjusted to pass false. The follow-on patch to of_mdio.c will pass true where appropriate. EXPORT phy_device_create() so that the follow-on patch to of_mdio.c can use it to create phy devices for PHYs, that have non-standard device identifier registers, based on the device tree bindings. Signed-off-by: David Daney <david.daney@cavium.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a3caad0a16
commit
ac28b9f8cd
4 changed files with 116 additions and 11 deletions
|
|
@ -243,6 +243,15 @@ enum phy_state {
|
|||
PHY_RESUMING
|
||||
};
|
||||
|
||||
/**
|
||||
* struct phy_c45_device_ids - 802.3-c45 Device Identifiers
|
||||
* @devices_in_package: Bit vector of devices present.
|
||||
* @device_ids: The device identifer for each present device.
|
||||
*/
|
||||
struct phy_c45_device_ids {
|
||||
u32 devices_in_package;
|
||||
u32 device_ids[8];
|
||||
};
|
||||
|
||||
/* phy_device: An instance of a PHY
|
||||
*
|
||||
|
|
@ -250,6 +259,8 @@ enum phy_state {
|
|||
* bus: Pointer to the bus this PHY is on
|
||||
* dev: driver model device structure for this PHY
|
||||
* phy_id: UID for this device found during discovery
|
||||
* c45_ids: 802.3-c45 Device Identifers if is_c45.
|
||||
* is_c45: Set to true if this phy uses clause 45 addressing.
|
||||
* state: state of the PHY for management purposes
|
||||
* dev_flags: Device-specific flags used by the PHY driver.
|
||||
* addr: Bus address of PHY
|
||||
|
|
@ -285,6 +296,9 @@ struct phy_device {
|
|||
|
||||
u32 phy_id;
|
||||
|
||||
struct phy_c45_device_ids c45_ids;
|
||||
bool is_c45;
|
||||
|
||||
enum phy_state state;
|
||||
|
||||
u32 dev_flags;
|
||||
|
|
@ -480,7 +494,9 @@ static inline int phy_write(struct phy_device *phydev, u32 regnum, u16 val)
|
|||
return mdiobus_write(phydev->bus, phydev->addr, regnum, val);
|
||||
}
|
||||
|
||||
struct phy_device* get_phy_device(struct mii_bus *bus, int addr);
|
||||
struct phy_device *phy_device_create(struct mii_bus *bus, int addr, int phy_id,
|
||||
bool is_c45, struct phy_c45_device_ids *c45_ids);
|
||||
struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45);
|
||||
int phy_device_register(struct phy_device *phy);
|
||||
int phy_init_hw(struct phy_device *phydev);
|
||||
struct phy_device * phy_attach(struct net_device *dev,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue