phylink: add phylink infrastructure
The link between the ethernet MAC and its PHY has become more complex
as the interface evolves. This is especially true with serdes links,
where the part of the PHY is effectively integrated into the MAC.
Serdes links can be connected to a variety of devices, including SFF
modules soldered down onto the board with the MAC, a SFP cage with
a hotpluggable SFP module which may contain a PHY or directly modulate
the serdes signals onto optical media with or without a PHY, or even
a classical PHY connection.
Moreover, the negotiation information on serdes links comes in two
varieties - SGMII mode, where the PHY provides its speed/duplex/flow
control information to the MAC, and 1000base-X mode where both ends
exchange their abilities and each resolve the link capabilities.
This means we need a more flexible means to support these arrangements,
particularly with the hotpluggable nature of SFP, where the PHY can
be attached or detached after the network device has been brought up.
Ethtool information can come from multiple sources:
- we may have a PHY operating in either SGMII or 1000base-X mode, in
which case we take ethtool/mii data directly from the PHY.
- we may have a optical SFP module without a PHY, with the MAC
operating in 1000base-X mode - the ethtool/mii data needs to come
from the MAC.
- we may have a copper SFP module with a PHY whic can't be accessed,
which means we need to take ethtool/mii data from the MAC.
Phylink aims to solve this by providing an intermediary between the
MAC and PHY, providing a safe way for PHYs to be hotplugged, and
allowing a SFP driver to reconfigure the serdes connection.
Phylink also takes over support of fixed link connections, where the
speed/duplex/flow control are fixed, but link status may be controlled
by a GPIO signal. By avoiding the fixed-phy implementation, phylink
can provide a faster response to link events: fixed-phy has to wait for
phylib to operate its state machine, which can take several seconds.
In comparison, phylink takes milliseconds.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
- remove sync status
- rework supported and advertisment handling
- add 1000base-x speed for fixed links
- use functionality exported from phy-core, reworking
__phylink_ethtool_ksettings_set for it
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-07-25 22:03:13 +08:00
|
|
|
#ifndef NETDEV_PCS_H
|
|
|
|
#define NETDEV_PCS_H
|
|
|
|
|
|
|
|
#include <linux/phy.h>
|
|
|
|
#include <linux/spinlock.h>
|
|
|
|
#include <linux/workqueue.h>
|
|
|
|
|
|
|
|
struct device_node;
|
|
|
|
struct ethtool_cmd;
|
2017-12-01 18:25:09 +08:00
|
|
|
struct fwnode_handle;
|
phylink: add phylink infrastructure
The link between the ethernet MAC and its PHY has become more complex
as the interface evolves. This is especially true with serdes links,
where the part of the PHY is effectively integrated into the MAC.
Serdes links can be connected to a variety of devices, including SFF
modules soldered down onto the board with the MAC, a SFP cage with
a hotpluggable SFP module which may contain a PHY or directly modulate
the serdes signals onto optical media with or without a PHY, or even
a classical PHY connection.
Moreover, the negotiation information on serdes links comes in two
varieties - SGMII mode, where the PHY provides its speed/duplex/flow
control information to the MAC, and 1000base-X mode where both ends
exchange their abilities and each resolve the link capabilities.
This means we need a more flexible means to support these arrangements,
particularly with the hotpluggable nature of SFP, where the PHY can
be attached or detached after the network device has been brought up.
Ethtool information can come from multiple sources:
- we may have a PHY operating in either SGMII or 1000base-X mode, in
which case we take ethtool/mii data directly from the PHY.
- we may have a optical SFP module without a PHY, with the MAC
operating in 1000base-X mode - the ethtool/mii data needs to come
from the MAC.
- we may have a copper SFP module with a PHY whic can't be accessed,
which means we need to take ethtool/mii data from the MAC.
Phylink aims to solve this by providing an intermediary between the
MAC and PHY, providing a safe way for PHYs to be hotplugged, and
allowing a SFP driver to reconfigure the serdes connection.
Phylink also takes over support of fixed link connections, where the
speed/duplex/flow control are fixed, but link status may be controlled
by a GPIO signal. By avoiding the fixed-phy implementation, phylink
can provide a faster response to link events: fixed-phy has to wait for
phylib to operate its state machine, which can take several seconds.
In comparison, phylink takes milliseconds.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
- remove sync status
- rework supported and advertisment handling
- add 1000base-x speed for fixed links
- use functionality exported from phy-core, reworking
__phylink_ethtool_ksettings_set for it
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-07-25 22:03:13 +08:00
|
|
|
struct net_device;
|
|
|
|
|
|
|
|
enum {
|
|
|
|
MLO_PAUSE_NONE,
|
|
|
|
MLO_PAUSE_ASYM = BIT(0),
|
|
|
|
MLO_PAUSE_SYM = BIT(1),
|
|
|
|
MLO_PAUSE_RX = BIT(2),
|
|
|
|
MLO_PAUSE_TX = BIT(3),
|
|
|
|
MLO_PAUSE_TXRX_MASK = MLO_PAUSE_TX | MLO_PAUSE_RX,
|
|
|
|
MLO_PAUSE_AN = BIT(4),
|
|
|
|
|
|
|
|
MLO_AN_PHY = 0, /* Conventional PHY */
|
|
|
|
MLO_AN_FIXED, /* Fixed-link mode */
|
2017-12-01 18:24:26 +08:00
|
|
|
MLO_AN_INBAND, /* In-band protocol */
|
phylink: add phylink infrastructure
The link between the ethernet MAC and its PHY has become more complex
as the interface evolves. This is especially true with serdes links,
where the part of the PHY is effectively integrated into the MAC.
Serdes links can be connected to a variety of devices, including SFF
modules soldered down onto the board with the MAC, a SFP cage with
a hotpluggable SFP module which may contain a PHY or directly modulate
the serdes signals onto optical media with or without a PHY, or even
a classical PHY connection.
Moreover, the negotiation information on serdes links comes in two
varieties - SGMII mode, where the PHY provides its speed/duplex/flow
control information to the MAC, and 1000base-X mode where both ends
exchange their abilities and each resolve the link capabilities.
This means we need a more flexible means to support these arrangements,
particularly with the hotpluggable nature of SFP, where the PHY can
be attached or detached after the network device has been brought up.
Ethtool information can come from multiple sources:
- we may have a PHY operating in either SGMII or 1000base-X mode, in
which case we take ethtool/mii data directly from the PHY.
- we may have a optical SFP module without a PHY, with the MAC
operating in 1000base-X mode - the ethtool/mii data needs to come
from the MAC.
- we may have a copper SFP module with a PHY whic can't be accessed,
which means we need to take ethtool/mii data from the MAC.
Phylink aims to solve this by providing an intermediary between the
MAC and PHY, providing a safe way for PHYs to be hotplugged, and
allowing a SFP driver to reconfigure the serdes connection.
Phylink also takes over support of fixed link connections, where the
speed/duplex/flow control are fixed, but link status may be controlled
by a GPIO signal. By avoiding the fixed-phy implementation, phylink
can provide a faster response to link events: fixed-phy has to wait for
phylib to operate its state machine, which can take several seconds.
In comparison, phylink takes milliseconds.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
- remove sync status
- rework supported and advertisment handling
- add 1000base-x speed for fixed links
- use functionality exported from phy-core, reworking
__phylink_ethtool_ksettings_set for it
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-07-25 22:03:13 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
static inline bool phylink_autoneg_inband(unsigned int mode)
|
|
|
|
{
|
2017-12-01 18:24:26 +08:00
|
|
|
return mode == MLO_AN_INBAND;
|
phylink: add phylink infrastructure
The link between the ethernet MAC and its PHY has become more complex
as the interface evolves. This is especially true with serdes links,
where the part of the PHY is effectively integrated into the MAC.
Serdes links can be connected to a variety of devices, including SFF
modules soldered down onto the board with the MAC, a SFP cage with
a hotpluggable SFP module which may contain a PHY or directly modulate
the serdes signals onto optical media with or without a PHY, or even
a classical PHY connection.
Moreover, the negotiation information on serdes links comes in two
varieties - SGMII mode, where the PHY provides its speed/duplex/flow
control information to the MAC, and 1000base-X mode where both ends
exchange their abilities and each resolve the link capabilities.
This means we need a more flexible means to support these arrangements,
particularly with the hotpluggable nature of SFP, where the PHY can
be attached or detached after the network device has been brought up.
Ethtool information can come from multiple sources:
- we may have a PHY operating in either SGMII or 1000base-X mode, in
which case we take ethtool/mii data directly from the PHY.
- we may have a optical SFP module without a PHY, with the MAC
operating in 1000base-X mode - the ethtool/mii data needs to come
from the MAC.
- we may have a copper SFP module with a PHY whic can't be accessed,
which means we need to take ethtool/mii data from the MAC.
Phylink aims to solve this by providing an intermediary between the
MAC and PHY, providing a safe way for PHYs to be hotplugged, and
allowing a SFP driver to reconfigure the serdes connection.
Phylink also takes over support of fixed link connections, where the
speed/duplex/flow control are fixed, but link status may be controlled
by a GPIO signal. By avoiding the fixed-phy implementation, phylink
can provide a faster response to link events: fixed-phy has to wait for
phylib to operate its state machine, which can take several seconds.
In comparison, phylink takes milliseconds.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
- remove sync status
- rework supported and advertisment handling
- add 1000base-x speed for fixed links
- use functionality exported from phy-core, reworking
__phylink_ethtool_ksettings_set for it
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-07-25 22:03:13 +08:00
|
|
|
}
|
|
|
|
|
2017-12-01 18:24:47 +08:00
|
|
|
/**
|
|
|
|
* struct phylink_link_state - link state structure
|
|
|
|
* @advertising: ethtool bitmask containing advertised link modes
|
|
|
|
* @lp_advertising: ethtool bitmask containing link partner advertised link
|
|
|
|
* modes
|
|
|
|
* @interface: link &typedef phy_interface_t mode
|
|
|
|
* @speed: link speed, one of the SPEED_* constants.
|
|
|
|
* @duplex: link duplex mode, one of DUPLEX_* constants.
|
|
|
|
* @pause: link pause state, described by MLO_PAUSE_* constants.
|
|
|
|
* @link: true if the link is up.
|
|
|
|
* @an_enabled: true if autonegotiation is enabled/desired.
|
|
|
|
* @an_complete: true if autonegotiation has completed.
|
|
|
|
*/
|
phylink: add phylink infrastructure
The link between the ethernet MAC and its PHY has become more complex
as the interface evolves. This is especially true with serdes links,
where the part of the PHY is effectively integrated into the MAC.
Serdes links can be connected to a variety of devices, including SFF
modules soldered down onto the board with the MAC, a SFP cage with
a hotpluggable SFP module which may contain a PHY or directly modulate
the serdes signals onto optical media with or without a PHY, or even
a classical PHY connection.
Moreover, the negotiation information on serdes links comes in two
varieties - SGMII mode, where the PHY provides its speed/duplex/flow
control information to the MAC, and 1000base-X mode where both ends
exchange their abilities and each resolve the link capabilities.
This means we need a more flexible means to support these arrangements,
particularly with the hotpluggable nature of SFP, where the PHY can
be attached or detached after the network device has been brought up.
Ethtool information can come from multiple sources:
- we may have a PHY operating in either SGMII or 1000base-X mode, in
which case we take ethtool/mii data directly from the PHY.
- we may have a optical SFP module without a PHY, with the MAC
operating in 1000base-X mode - the ethtool/mii data needs to come
from the MAC.
- we may have a copper SFP module with a PHY whic can't be accessed,
which means we need to take ethtool/mii data from the MAC.
Phylink aims to solve this by providing an intermediary between the
MAC and PHY, providing a safe way for PHYs to be hotplugged, and
allowing a SFP driver to reconfigure the serdes connection.
Phylink also takes over support of fixed link connections, where the
speed/duplex/flow control are fixed, but link status may be controlled
by a GPIO signal. By avoiding the fixed-phy implementation, phylink
can provide a faster response to link events: fixed-phy has to wait for
phylib to operate its state machine, which can take several seconds.
In comparison, phylink takes milliseconds.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
- remove sync status
- rework supported and advertisment handling
- add 1000base-x speed for fixed links
- use functionality exported from phy-core, reworking
__phylink_ethtool_ksettings_set for it
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-07-25 22:03:13 +08:00
|
|
|
struct phylink_link_state {
|
|
|
|
__ETHTOOL_DECLARE_LINK_MODE_MASK(advertising);
|
|
|
|
__ETHTOOL_DECLARE_LINK_MODE_MASK(lp_advertising);
|
2017-12-01 18:24:47 +08:00
|
|
|
phy_interface_t interface;
|
phylink: add phylink infrastructure
The link between the ethernet MAC and its PHY has become more complex
as the interface evolves. This is especially true with serdes links,
where the part of the PHY is effectively integrated into the MAC.
Serdes links can be connected to a variety of devices, including SFF
modules soldered down onto the board with the MAC, a SFP cage with
a hotpluggable SFP module which may contain a PHY or directly modulate
the serdes signals onto optical media with or without a PHY, or even
a classical PHY connection.
Moreover, the negotiation information on serdes links comes in two
varieties - SGMII mode, where the PHY provides its speed/duplex/flow
control information to the MAC, and 1000base-X mode where both ends
exchange their abilities and each resolve the link capabilities.
This means we need a more flexible means to support these arrangements,
particularly with the hotpluggable nature of SFP, where the PHY can
be attached or detached after the network device has been brought up.
Ethtool information can come from multiple sources:
- we may have a PHY operating in either SGMII or 1000base-X mode, in
which case we take ethtool/mii data directly from the PHY.
- we may have a optical SFP module without a PHY, with the MAC
operating in 1000base-X mode - the ethtool/mii data needs to come
from the MAC.
- we may have a copper SFP module with a PHY whic can't be accessed,
which means we need to take ethtool/mii data from the MAC.
Phylink aims to solve this by providing an intermediary between the
MAC and PHY, providing a safe way for PHYs to be hotplugged, and
allowing a SFP driver to reconfigure the serdes connection.
Phylink also takes over support of fixed link connections, where the
speed/duplex/flow control are fixed, but link status may be controlled
by a GPIO signal. By avoiding the fixed-phy implementation, phylink
can provide a faster response to link events: fixed-phy has to wait for
phylib to operate its state machine, which can take several seconds.
In comparison, phylink takes milliseconds.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
- remove sync status
- rework supported and advertisment handling
- add 1000base-x speed for fixed links
- use functionality exported from phy-core, reworking
__phylink_ethtool_ksettings_set for it
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-07-25 22:03:13 +08:00
|
|
|
int speed;
|
|
|
|
int duplex;
|
|
|
|
int pause;
|
|
|
|
unsigned int link:1;
|
|
|
|
unsigned int an_enabled:1;
|
|
|
|
unsigned int an_complete:1;
|
|
|
|
};
|
|
|
|
|
2019-05-29 01:38:12 +08:00
|
|
|
enum phylink_op_type {
|
|
|
|
PHYLINK_NETDEV = 0,
|
2019-05-29 01:38:13 +08:00
|
|
|
PHYLINK_DEV,
|
2019-05-29 01:38:12 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* struct phylink_config - PHYLINK configuration structure
|
|
|
|
* @dev: a pointer to a struct device associated with the MAC
|
|
|
|
* @type: operation type of PHYLINK instance
|
|
|
|
*/
|
|
|
|
struct phylink_config {
|
|
|
|
struct device *dev;
|
|
|
|
enum phylink_op_type type;
|
|
|
|
};
|
|
|
|
|
2017-12-01 18:24:47 +08:00
|
|
|
/**
|
|
|
|
* struct phylink_mac_ops - MAC operations structure.
|
|
|
|
* @validate: Validate and update the link configuration.
|
|
|
|
* @mac_link_state: Read the current link state from the hardware.
|
|
|
|
* @mac_config: configure the MAC for the selected mode and state.
|
|
|
|
* @mac_an_restart: restart 802.3z BaseX autonegotiation.
|
|
|
|
* @mac_link_down: take the link down.
|
|
|
|
* @mac_link_up: allow the link to come up.
|
|
|
|
*
|
|
|
|
* The individual methods are described more fully below.
|
|
|
|
*/
|
phylink: add phylink infrastructure
The link between the ethernet MAC and its PHY has become more complex
as the interface evolves. This is especially true with serdes links,
where the part of the PHY is effectively integrated into the MAC.
Serdes links can be connected to a variety of devices, including SFF
modules soldered down onto the board with the MAC, a SFP cage with
a hotpluggable SFP module which may contain a PHY or directly modulate
the serdes signals onto optical media with or without a PHY, or even
a classical PHY connection.
Moreover, the negotiation information on serdes links comes in two
varieties - SGMII mode, where the PHY provides its speed/duplex/flow
control information to the MAC, and 1000base-X mode where both ends
exchange their abilities and each resolve the link capabilities.
This means we need a more flexible means to support these arrangements,
particularly with the hotpluggable nature of SFP, where the PHY can
be attached or detached after the network device has been brought up.
Ethtool information can come from multiple sources:
- we may have a PHY operating in either SGMII or 1000base-X mode, in
which case we take ethtool/mii data directly from the PHY.
- we may have a optical SFP module without a PHY, with the MAC
operating in 1000base-X mode - the ethtool/mii data needs to come
from the MAC.
- we may have a copper SFP module with a PHY whic can't be accessed,
which means we need to take ethtool/mii data from the MAC.
Phylink aims to solve this by providing an intermediary between the
MAC and PHY, providing a safe way for PHYs to be hotplugged, and
allowing a SFP driver to reconfigure the serdes connection.
Phylink also takes over support of fixed link connections, where the
speed/duplex/flow control are fixed, but link status may be controlled
by a GPIO signal. By avoiding the fixed-phy implementation, phylink
can provide a faster response to link events: fixed-phy has to wait for
phylib to operate its state machine, which can take several seconds.
In comparison, phylink takes milliseconds.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
- remove sync status
- rework supported and advertisment handling
- add 1000base-x speed for fixed links
- use functionality exported from phy-core, reworking
__phylink_ethtool_ksettings_set for it
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-07-25 22:03:13 +08:00
|
|
|
struct phylink_mac_ops {
|
2019-05-29 01:38:12 +08:00
|
|
|
void (*validate)(struct phylink_config *config,
|
|
|
|
unsigned long *supported,
|
phylink: add phylink infrastructure
The link between the ethernet MAC and its PHY has become more complex
as the interface evolves. This is especially true with serdes links,
where the part of the PHY is effectively integrated into the MAC.
Serdes links can be connected to a variety of devices, including SFF
modules soldered down onto the board with the MAC, a SFP cage with
a hotpluggable SFP module which may contain a PHY or directly modulate
the serdes signals onto optical media with or without a PHY, or even
a classical PHY connection.
Moreover, the negotiation information on serdes links comes in two
varieties - SGMII mode, where the PHY provides its speed/duplex/flow
control information to the MAC, and 1000base-X mode where both ends
exchange their abilities and each resolve the link capabilities.
This means we need a more flexible means to support these arrangements,
particularly with the hotpluggable nature of SFP, where the PHY can
be attached or detached after the network device has been brought up.
Ethtool information can come from multiple sources:
- we may have a PHY operating in either SGMII or 1000base-X mode, in
which case we take ethtool/mii data directly from the PHY.
- we may have a optical SFP module without a PHY, with the MAC
operating in 1000base-X mode - the ethtool/mii data needs to come
from the MAC.
- we may have a copper SFP module with a PHY whic can't be accessed,
which means we need to take ethtool/mii data from the MAC.
Phylink aims to solve this by providing an intermediary between the
MAC and PHY, providing a safe way for PHYs to be hotplugged, and
allowing a SFP driver to reconfigure the serdes connection.
Phylink also takes over support of fixed link connections, where the
speed/duplex/flow control are fixed, but link status may be controlled
by a GPIO signal. By avoiding the fixed-phy implementation, phylink
can provide a faster response to link events: fixed-phy has to wait for
phylib to operate its state machine, which can take several seconds.
In comparison, phylink takes milliseconds.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
- remove sync status
- rework supported and advertisment handling
- add 1000base-x speed for fixed links
- use functionality exported from phy-core, reworking
__phylink_ethtool_ksettings_set for it
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-07-25 22:03:13 +08:00
|
|
|
struct phylink_link_state *state);
|
2019-05-29 01:38:12 +08:00
|
|
|
int (*mac_link_state)(struct phylink_config *config,
|
2017-12-01 18:24:47 +08:00
|
|
|
struct phylink_link_state *state);
|
2019-05-29 01:38:12 +08:00
|
|
|
void (*mac_config)(struct phylink_config *config, unsigned int mode,
|
phylink: add phylink infrastructure
The link between the ethernet MAC and its PHY has become more complex
as the interface evolves. This is especially true with serdes links,
where the part of the PHY is effectively integrated into the MAC.
Serdes links can be connected to a variety of devices, including SFF
modules soldered down onto the board with the MAC, a SFP cage with
a hotpluggable SFP module which may contain a PHY or directly modulate
the serdes signals onto optical media with or without a PHY, or even
a classical PHY connection.
Moreover, the negotiation information on serdes links comes in two
varieties - SGMII mode, where the PHY provides its speed/duplex/flow
control information to the MAC, and 1000base-X mode where both ends
exchange their abilities and each resolve the link capabilities.
This means we need a more flexible means to support these arrangements,
particularly with the hotpluggable nature of SFP, where the PHY can
be attached or detached after the network device has been brought up.
Ethtool information can come from multiple sources:
- we may have a PHY operating in either SGMII or 1000base-X mode, in
which case we take ethtool/mii data directly from the PHY.
- we may have a optical SFP module without a PHY, with the MAC
operating in 1000base-X mode - the ethtool/mii data needs to come
from the MAC.
- we may have a copper SFP module with a PHY whic can't be accessed,
which means we need to take ethtool/mii data from the MAC.
Phylink aims to solve this by providing an intermediary between the
MAC and PHY, providing a safe way for PHYs to be hotplugged, and
allowing a SFP driver to reconfigure the serdes connection.
Phylink also takes over support of fixed link connections, where the
speed/duplex/flow control are fixed, but link status may be controlled
by a GPIO signal. By avoiding the fixed-phy implementation, phylink
can provide a faster response to link events: fixed-phy has to wait for
phylib to operate its state machine, which can take several seconds.
In comparison, phylink takes milliseconds.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
- remove sync status
- rework supported and advertisment handling
- add 1000base-x speed for fixed links
- use functionality exported from phy-core, reworking
__phylink_ethtool_ksettings_set for it
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-07-25 22:03:13 +08:00
|
|
|
const struct phylink_link_state *state);
|
2019-05-29 01:38:12 +08:00
|
|
|
void (*mac_an_restart)(struct phylink_config *config);
|
|
|
|
void (*mac_link_down)(struct phylink_config *config, unsigned int mode,
|
2018-03-29 06:44:15 +08:00
|
|
|
phy_interface_t interface);
|
2019-05-29 01:38:12 +08:00
|
|
|
void (*mac_link_up)(struct phylink_config *config, unsigned int mode,
|
2018-03-29 06:44:15 +08:00
|
|
|
phy_interface_t interface,
|
2017-12-01 18:24:47 +08:00
|
|
|
struct phy_device *phy);
|
phylink: add phylink infrastructure
The link between the ethernet MAC and its PHY has become more complex
as the interface evolves. This is especially true with serdes links,
where the part of the PHY is effectively integrated into the MAC.
Serdes links can be connected to a variety of devices, including SFF
modules soldered down onto the board with the MAC, a SFP cage with
a hotpluggable SFP module which may contain a PHY or directly modulate
the serdes signals onto optical media with or without a PHY, or even
a classical PHY connection.
Moreover, the negotiation information on serdes links comes in two
varieties - SGMII mode, where the PHY provides its speed/duplex/flow
control information to the MAC, and 1000base-X mode where both ends
exchange their abilities and each resolve the link capabilities.
This means we need a more flexible means to support these arrangements,
particularly with the hotpluggable nature of SFP, where the PHY can
be attached or detached after the network device has been brought up.
Ethtool information can come from multiple sources:
- we may have a PHY operating in either SGMII or 1000base-X mode, in
which case we take ethtool/mii data directly from the PHY.
- we may have a optical SFP module without a PHY, with the MAC
operating in 1000base-X mode - the ethtool/mii data needs to come
from the MAC.
- we may have a copper SFP module with a PHY whic can't be accessed,
which means we need to take ethtool/mii data from the MAC.
Phylink aims to solve this by providing an intermediary between the
MAC and PHY, providing a safe way for PHYs to be hotplugged, and
allowing a SFP driver to reconfigure the serdes connection.
Phylink also takes over support of fixed link connections, where the
speed/duplex/flow control are fixed, but link status may be controlled
by a GPIO signal. By avoiding the fixed-phy implementation, phylink
can provide a faster response to link events: fixed-phy has to wait for
phylib to operate its state machine, which can take several seconds.
In comparison, phylink takes milliseconds.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
- remove sync status
- rework supported and advertisment handling
- add 1000base-x speed for fixed links
- use functionality exported from phy-core, reworking
__phylink_ethtool_ksettings_set for it
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-07-25 22:03:13 +08:00
|
|
|
};
|
|
|
|
|
2017-12-01 18:24:47 +08:00
|
|
|
#if 0 /* For kernel-doc purposes only. */
|
|
|
|
/**
|
|
|
|
* validate - Validate and update the link configuration
|
2019-05-29 01:38:12 +08:00
|
|
|
* @config: a pointer to a &struct phylink_config.
|
2017-12-01 18:24:47 +08:00
|
|
|
* @supported: ethtool bitmask for supported link modes.
|
|
|
|
* @state: a pointer to a &struct phylink_link_state.
|
|
|
|
*
|
|
|
|
* Clear bits in the @supported and @state->advertising masks that
|
|
|
|
* are not supportable by the MAC.
|
|
|
|
*
|
|
|
|
* Note that the PHY may be able to transform from one connection
|
|
|
|
* technology to another, so, eg, don't clear 1000BaseX just
|
|
|
|
* because the MAC is unable to BaseX mode. This is more about
|
2019-06-25 17:44:33 +08:00
|
|
|
* clearing unsupported speeds and duplex settings. The port modes
|
|
|
|
* should not be cleared; phylink_set_port_modes() will help with this.
|
2017-12-01 18:24:47 +08:00
|
|
|
*
|
|
|
|
* If the @state->interface mode is %PHY_INTERFACE_MODE_1000BASEX
|
|
|
|
* or %PHY_INTERFACE_MODE_2500BASEX, select the appropriate mode
|
|
|
|
* based on @state->advertising and/or @state->speed and update
|
2019-06-25 17:44:33 +08:00
|
|
|
* @state->interface accordingly. See phylink_helper_basex_speed().
|
|
|
|
*
|
|
|
|
* When @state->interface is %PHY_INTERFACE_MODE_NA, phylink expects the
|
|
|
|
* MAC driver to return all supported link modes.
|
|
|
|
*
|
|
|
|
* If the @state->interface mode is not supported, then the @supported
|
|
|
|
* mask must be cleared.
|
2017-12-01 18:24:47 +08:00
|
|
|
*/
|
2019-05-29 01:38:12 +08:00
|
|
|
void validate(struct phylink_config *config, unsigned long *supported,
|
2017-12-01 18:24:47 +08:00
|
|
|
struct phylink_link_state *state);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* mac_link_state() - Read the current link state from the hardware
|
2019-05-29 01:38:12 +08:00
|
|
|
* @config: a pointer to a &struct phylink_config.
|
2017-12-01 18:24:47 +08:00
|
|
|
* @state: a pointer to a &struct phylink_link_state.
|
|
|
|
*
|
|
|
|
* Read the current link state from the MAC, reporting the current
|
|
|
|
* speed in @state->speed, duplex mode in @state->duplex, pause mode
|
|
|
|
* in @state->pause using the %MLO_PAUSE_RX and %MLO_PAUSE_TX bits,
|
|
|
|
* negotiation completion state in @state->an_complete, and link
|
|
|
|
* up state in @state->link.
|
|
|
|
*/
|
2019-05-29 01:38:12 +08:00
|
|
|
int mac_link_state(struct phylink_config *config,
|
2017-12-01 18:24:47 +08:00
|
|
|
struct phylink_link_state *state);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* mac_config() - configure the MAC for the selected mode and state
|
2019-05-29 01:38:12 +08:00
|
|
|
* @config: a pointer to a &struct phylink_config.
|
2017-12-01 18:24:47 +08:00
|
|
|
* @mode: one of %MLO_AN_FIXED, %MLO_AN_PHY, %MLO_AN_INBAND.
|
|
|
|
* @state: a pointer to a &struct phylink_link_state.
|
|
|
|
*
|
2019-06-14 18:37:49 +08:00
|
|
|
* Note - not all members of @state are valid. In particular,
|
|
|
|
* @state->lp_advertising, @state->link, @state->an_complete are never
|
|
|
|
* guaranteed to be correct, and so any mac_config() implementation must
|
|
|
|
* never reference these fields.
|
|
|
|
*
|
2017-12-01 18:24:47 +08:00
|
|
|
* The action performed depends on the currently selected mode:
|
|
|
|
*
|
|
|
|
* %MLO_AN_FIXED, %MLO_AN_PHY:
|
|
|
|
* Configure the specified @state->speed, @state->duplex and
|
2019-06-14 18:37:49 +08:00
|
|
|
* @state->pause (%MLO_PAUSE_TX / %MLO_PAUSE_RX) modes over a link
|
|
|
|
* specified by @state->interface. @state->advertising may be used,
|
|
|
|
* but is not required. Other members of @state must be ignored.
|
|
|
|
*
|
|
|
|
* Valid state members: interface, speed, duplex, pause, advertising.
|
2017-12-01 18:24:47 +08:00
|
|
|
*
|
|
|
|
* %MLO_AN_INBAND:
|
|
|
|
* place the link in an inband negotiation mode (such as 802.3z
|
|
|
|
* 1000base-X or Cisco SGMII mode depending on the @state->interface
|
|
|
|
* mode). In both cases, link state management (whether the link
|
|
|
|
* is up or not) is performed by the MAC, and reported via the
|
|
|
|
* mac_link_state() callback. Changes in link state must be made
|
|
|
|
* by calling phylink_mac_change().
|
|
|
|
*
|
|
|
|
* If in 802.3z mode, the link speed is fixed, dependent on the
|
|
|
|
* @state->interface. Duplex is negotiated, and pause is advertised
|
|
|
|
* according to @state->an_enabled, @state->pause and
|
|
|
|
* @state->advertising flags. Beware of MACs which only support full
|
|
|
|
* duplex at gigabit and higher speeds.
|
|
|
|
*
|
|
|
|
* If in Cisco SGMII mode, the link speed and duplex mode are passed
|
|
|
|
* in the serial bitstream 16-bit configuration word, and the MAC
|
|
|
|
* should be configured to read these bits and acknowledge the
|
|
|
|
* configuration word. Nothing is advertised by the MAC. The MAC is
|
|
|
|
* responsible for reading the configuration word and configuring
|
|
|
|
* itself accordingly.
|
2019-02-22 19:31:41 +08:00
|
|
|
*
|
2019-06-14 18:37:49 +08:00
|
|
|
* Valid state members: interface, an_enabled, pause, advertising.
|
|
|
|
*
|
2019-02-22 19:31:41 +08:00
|
|
|
* Implementations are expected to update the MAC to reflect the
|
|
|
|
* requested settings - i.o.w., if nothing has changed between two
|
|
|
|
* calls, no action is expected. If only flow control settings have
|
|
|
|
* changed, flow control should be updated *without* taking the link
|
|
|
|
* down. This "update" behaviour is critical to avoid bouncing the
|
|
|
|
* link up status.
|
2017-12-01 18:24:47 +08:00
|
|
|
*/
|
2019-05-29 01:38:12 +08:00
|
|
|
void mac_config(struct phylink_config *config, unsigned int mode,
|
2017-12-01 18:24:47 +08:00
|
|
|
const struct phylink_link_state *state);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* mac_an_restart() - restart 802.3z BaseX autonegotiation
|
2019-05-29 01:38:12 +08:00
|
|
|
* @config: a pointer to a &struct phylink_config.
|
2017-12-01 18:24:47 +08:00
|
|
|
*/
|
2019-05-29 01:38:12 +08:00
|
|
|
void mac_an_restart(struct phylink_config *config);
|
2017-12-01 18:24:47 +08:00
|
|
|
|
|
|
|
/**
|
|
|
|
* mac_link_down() - take the link down
|
2019-05-29 01:38:12 +08:00
|
|
|
* @config: a pointer to a &struct phylink_config.
|
2017-12-01 18:24:47 +08:00
|
|
|
* @mode: link autonegotiation mode
|
2018-03-29 06:44:15 +08:00
|
|
|
* @interface: link &typedef phy_interface_t mode
|
2017-12-01 18:24:47 +08:00
|
|
|
*
|
|
|
|
* If @mode is not an in-band negotiation mode (as defined by
|
|
|
|
* phylink_autoneg_inband()), force the link down and disable any
|
2018-03-29 06:44:15 +08:00
|
|
|
* Energy Efficient Ethernet MAC configuration. Interface type
|
|
|
|
* selection must be done in mac_config().
|
2017-12-01 18:24:47 +08:00
|
|
|
*/
|
2019-05-29 01:38:12 +08:00
|
|
|
void mac_link_down(struct phylink_config *config, unsigned int mode,
|
2018-03-29 06:44:15 +08:00
|
|
|
phy_interface_t interface);
|
2017-12-01 18:24:47 +08:00
|
|
|
|
|
|
|
/**
|
|
|
|
* mac_link_up() - allow the link to come up
|
2019-05-29 01:38:12 +08:00
|
|
|
* @config: a pointer to a &struct phylink_config.
|
2017-12-01 18:24:47 +08:00
|
|
|
* @mode: link autonegotiation mode
|
2018-03-29 06:44:15 +08:00
|
|
|
* @interface: link &typedef phy_interface_t mode
|
2017-12-01 18:24:47 +08:00
|
|
|
* @phy: any attached phy
|
|
|
|
*
|
|
|
|
* If @mode is not an in-band negotiation mode (as defined by
|
|
|
|
* phylink_autoneg_inband()), allow the link to come up. If @phy
|
|
|
|
* is non-%NULL, configure Energy Efficient Ethernet by calling
|
|
|
|
* phy_init_eee() and perform appropriate MAC configuration for EEE.
|
2018-03-29 06:44:15 +08:00
|
|
|
* Interface type selection must be done in mac_config().
|
2017-12-01 18:24:47 +08:00
|
|
|
*/
|
2019-05-29 01:38:12 +08:00
|
|
|
void mac_link_up(struct phylink_config *config, unsigned int mode,
|
2018-03-29 06:44:15 +08:00
|
|
|
phy_interface_t interface,
|
2017-12-01 18:24:47 +08:00
|
|
|
struct phy_device *phy);
|
|
|
|
#endif
|
|
|
|
|
2019-05-29 01:38:12 +08:00
|
|
|
struct phylink *phylink_create(struct phylink_config *, struct fwnode_handle *,
|
|
|
|
phy_interface_t iface,
|
|
|
|
const struct phylink_mac_ops *ops);
|
phylink: add phylink infrastructure
The link between the ethernet MAC and its PHY has become more complex
as the interface evolves. This is especially true with serdes links,
where the part of the PHY is effectively integrated into the MAC.
Serdes links can be connected to a variety of devices, including SFF
modules soldered down onto the board with the MAC, a SFP cage with
a hotpluggable SFP module which may contain a PHY or directly modulate
the serdes signals onto optical media with or without a PHY, or even
a classical PHY connection.
Moreover, the negotiation information on serdes links comes in two
varieties - SGMII mode, where the PHY provides its speed/duplex/flow
control information to the MAC, and 1000base-X mode where both ends
exchange their abilities and each resolve the link capabilities.
This means we need a more flexible means to support these arrangements,
particularly with the hotpluggable nature of SFP, where the PHY can
be attached or detached after the network device has been brought up.
Ethtool information can come from multiple sources:
- we may have a PHY operating in either SGMII or 1000base-X mode, in
which case we take ethtool/mii data directly from the PHY.
- we may have a optical SFP module without a PHY, with the MAC
operating in 1000base-X mode - the ethtool/mii data needs to come
from the MAC.
- we may have a copper SFP module with a PHY whic can't be accessed,
which means we need to take ethtool/mii data from the MAC.
Phylink aims to solve this by providing an intermediary between the
MAC and PHY, providing a safe way for PHYs to be hotplugged, and
allowing a SFP driver to reconfigure the serdes connection.
Phylink also takes over support of fixed link connections, where the
speed/duplex/flow control are fixed, but link status may be controlled
by a GPIO signal. By avoiding the fixed-phy implementation, phylink
can provide a faster response to link events: fixed-phy has to wait for
phylib to operate its state machine, which can take several seconds.
In comparison, phylink takes milliseconds.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
- remove sync status
- rework supported and advertisment handling
- add 1000base-x speed for fixed links
- use functionality exported from phy-core, reworking
__phylink_ethtool_ksettings_set for it
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-07-25 22:03:13 +08:00
|
|
|
void phylink_destroy(struct phylink *);
|
|
|
|
|
|
|
|
int phylink_connect_phy(struct phylink *, struct phy_device *);
|
2017-12-13 08:00:25 +08:00
|
|
|
int phylink_of_phy_connect(struct phylink *, struct device_node *, u32 flags);
|
phylink: add phylink infrastructure
The link between the ethernet MAC and its PHY has become more complex
as the interface evolves. This is especially true with serdes links,
where the part of the PHY is effectively integrated into the MAC.
Serdes links can be connected to a variety of devices, including SFF
modules soldered down onto the board with the MAC, a SFP cage with
a hotpluggable SFP module which may contain a PHY or directly modulate
the serdes signals onto optical media with or without a PHY, or even
a classical PHY connection.
Moreover, the negotiation information on serdes links comes in two
varieties - SGMII mode, where the PHY provides its speed/duplex/flow
control information to the MAC, and 1000base-X mode where both ends
exchange their abilities and each resolve the link capabilities.
This means we need a more flexible means to support these arrangements,
particularly with the hotpluggable nature of SFP, where the PHY can
be attached or detached after the network device has been brought up.
Ethtool information can come from multiple sources:
- we may have a PHY operating in either SGMII or 1000base-X mode, in
which case we take ethtool/mii data directly from the PHY.
- we may have a optical SFP module without a PHY, with the MAC
operating in 1000base-X mode - the ethtool/mii data needs to come
from the MAC.
- we may have a copper SFP module with a PHY whic can't be accessed,
which means we need to take ethtool/mii data from the MAC.
Phylink aims to solve this by providing an intermediary between the
MAC and PHY, providing a safe way for PHYs to be hotplugged, and
allowing a SFP driver to reconfigure the serdes connection.
Phylink also takes over support of fixed link connections, where the
speed/duplex/flow control are fixed, but link status may be controlled
by a GPIO signal. By avoiding the fixed-phy implementation, phylink
can provide a faster response to link events: fixed-phy has to wait for
phylib to operate its state machine, which can take several seconds.
In comparison, phylink takes milliseconds.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
- remove sync status
- rework supported and advertisment handling
- add 1000base-x speed for fixed links
- use functionality exported from phy-core, reworking
__phylink_ethtool_ksettings_set for it
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-07-25 22:03:13 +08:00
|
|
|
void phylink_disconnect_phy(struct phylink *);
|
2017-12-13 08:00:28 +08:00
|
|
|
int phylink_fixed_state_cb(struct phylink *,
|
|
|
|
void (*cb)(struct net_device *dev,
|
|
|
|
struct phylink_link_state *));
|
phylink: add phylink infrastructure
The link between the ethernet MAC and its PHY has become more complex
as the interface evolves. This is especially true with serdes links,
where the part of the PHY is effectively integrated into the MAC.
Serdes links can be connected to a variety of devices, including SFF
modules soldered down onto the board with the MAC, a SFP cage with
a hotpluggable SFP module which may contain a PHY or directly modulate
the serdes signals onto optical media with or without a PHY, or even
a classical PHY connection.
Moreover, the negotiation information on serdes links comes in two
varieties - SGMII mode, where the PHY provides its speed/duplex/flow
control information to the MAC, and 1000base-X mode where both ends
exchange their abilities and each resolve the link capabilities.
This means we need a more flexible means to support these arrangements,
particularly with the hotpluggable nature of SFP, where the PHY can
be attached or detached after the network device has been brought up.
Ethtool information can come from multiple sources:
- we may have a PHY operating in either SGMII or 1000base-X mode, in
which case we take ethtool/mii data directly from the PHY.
- we may have a optical SFP module without a PHY, with the MAC
operating in 1000base-X mode - the ethtool/mii data needs to come
from the MAC.
- we may have a copper SFP module with a PHY whic can't be accessed,
which means we need to take ethtool/mii data from the MAC.
Phylink aims to solve this by providing an intermediary between the
MAC and PHY, providing a safe way for PHYs to be hotplugged, and
allowing a SFP driver to reconfigure the serdes connection.
Phylink also takes over support of fixed link connections, where the
speed/duplex/flow control are fixed, but link status may be controlled
by a GPIO signal. By avoiding the fixed-phy implementation, phylink
can provide a faster response to link events: fixed-phy has to wait for
phylib to operate its state machine, which can take several seconds.
In comparison, phylink takes milliseconds.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
- remove sync status
- rework supported and advertisment handling
- add 1000base-x speed for fixed links
- use functionality exported from phy-core, reworking
__phylink_ethtool_ksettings_set for it
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-07-25 22:03:13 +08:00
|
|
|
|
|
|
|
void phylink_mac_change(struct phylink *, bool up);
|
|
|
|
|
|
|
|
void phylink_start(struct phylink *);
|
|
|
|
void phylink_stop(struct phylink *);
|
|
|
|
|
|
|
|
void phylink_ethtool_get_wol(struct phylink *, struct ethtool_wolinfo *);
|
|
|
|
int phylink_ethtool_set_wol(struct phylink *, struct ethtool_wolinfo *);
|
|
|
|
|
|
|
|
int phylink_ethtool_ksettings_get(struct phylink *,
|
|
|
|
struct ethtool_link_ksettings *);
|
|
|
|
int phylink_ethtool_ksettings_set(struct phylink *,
|
|
|
|
const struct ethtool_link_ksettings *);
|
|
|
|
int phylink_ethtool_nway_reset(struct phylink *);
|
|
|
|
void phylink_ethtool_get_pauseparam(struct phylink *,
|
|
|
|
struct ethtool_pauseparam *);
|
|
|
|
int phylink_ethtool_set_pauseparam(struct phylink *,
|
|
|
|
struct ethtool_pauseparam *);
|
|
|
|
int phylink_get_eee_err(struct phylink *);
|
2019-02-11 19:46:06 +08:00
|
|
|
int phylink_init_eee(struct phylink *, bool);
|
phylink: add phylink infrastructure
The link between the ethernet MAC and its PHY has become more complex
as the interface evolves. This is especially true with serdes links,
where the part of the PHY is effectively integrated into the MAC.
Serdes links can be connected to a variety of devices, including SFF
modules soldered down onto the board with the MAC, a SFP cage with
a hotpluggable SFP module which may contain a PHY or directly modulate
the serdes signals onto optical media with or without a PHY, or even
a classical PHY connection.
Moreover, the negotiation information on serdes links comes in two
varieties - SGMII mode, where the PHY provides its speed/duplex/flow
control information to the MAC, and 1000base-X mode where both ends
exchange their abilities and each resolve the link capabilities.
This means we need a more flexible means to support these arrangements,
particularly with the hotpluggable nature of SFP, where the PHY can
be attached or detached after the network device has been brought up.
Ethtool information can come from multiple sources:
- we may have a PHY operating in either SGMII or 1000base-X mode, in
which case we take ethtool/mii data directly from the PHY.
- we may have a optical SFP module without a PHY, with the MAC
operating in 1000base-X mode - the ethtool/mii data needs to come
from the MAC.
- we may have a copper SFP module with a PHY whic can't be accessed,
which means we need to take ethtool/mii data from the MAC.
Phylink aims to solve this by providing an intermediary between the
MAC and PHY, providing a safe way for PHYs to be hotplugged, and
allowing a SFP driver to reconfigure the serdes connection.
Phylink also takes over support of fixed link connections, where the
speed/duplex/flow control are fixed, but link status may be controlled
by a GPIO signal. By avoiding the fixed-phy implementation, phylink
can provide a faster response to link events: fixed-phy has to wait for
phylib to operate its state machine, which can take several seconds.
In comparison, phylink takes milliseconds.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
- remove sync status
- rework supported and advertisment handling
- add 1000base-x speed for fixed links
- use functionality exported from phy-core, reworking
__phylink_ethtool_ksettings_set for it
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-07-25 22:03:13 +08:00
|
|
|
int phylink_ethtool_get_eee(struct phylink *, struct ethtool_eee *);
|
|
|
|
int phylink_ethtool_set_eee(struct phylink *, struct ethtool_eee *);
|
|
|
|
int phylink_mii_ioctl(struct phylink *, struct ifreq *, int);
|
|
|
|
|
|
|
|
#define phylink_zero(bm) \
|
|
|
|
bitmap_zero(bm, __ETHTOOL_LINK_MODE_MASK_NBITS)
|
|
|
|
#define __phylink_do_bit(op, bm, mode) \
|
|
|
|
op(ETHTOOL_LINK_MODE_ ## mode ## _BIT, bm)
|
|
|
|
|
|
|
|
#define phylink_set(bm, mode) __phylink_do_bit(__set_bit, bm, mode)
|
|
|
|
#define phylink_clear(bm, mode) __phylink_do_bit(__clear_bit, bm, mode)
|
|
|
|
#define phylink_test(bm, mode) __phylink_do_bit(test_bit, bm, mode)
|
|
|
|
|
|
|
|
void phylink_set_port_modes(unsigned long *bits);
|
2018-08-09 21:38:38 +08:00
|
|
|
void phylink_helper_basex_speed(struct phylink_link_state *state);
|
phylink: add phylink infrastructure
The link between the ethernet MAC and its PHY has become more complex
as the interface evolves. This is especially true with serdes links,
where the part of the PHY is effectively integrated into the MAC.
Serdes links can be connected to a variety of devices, including SFF
modules soldered down onto the board with the MAC, a SFP cage with
a hotpluggable SFP module which may contain a PHY or directly modulate
the serdes signals onto optical media with or without a PHY, or even
a classical PHY connection.
Moreover, the negotiation information on serdes links comes in two
varieties - SGMII mode, where the PHY provides its speed/duplex/flow
control information to the MAC, and 1000base-X mode where both ends
exchange their abilities and each resolve the link capabilities.
This means we need a more flexible means to support these arrangements,
particularly with the hotpluggable nature of SFP, where the PHY can
be attached or detached after the network device has been brought up.
Ethtool information can come from multiple sources:
- we may have a PHY operating in either SGMII or 1000base-X mode, in
which case we take ethtool/mii data directly from the PHY.
- we may have a optical SFP module without a PHY, with the MAC
operating in 1000base-X mode - the ethtool/mii data needs to come
from the MAC.
- we may have a copper SFP module with a PHY whic can't be accessed,
which means we need to take ethtool/mii data from the MAC.
Phylink aims to solve this by providing an intermediary between the
MAC and PHY, providing a safe way for PHYs to be hotplugged, and
allowing a SFP driver to reconfigure the serdes connection.
Phylink also takes over support of fixed link connections, where the
speed/duplex/flow control are fixed, but link status may be controlled
by a GPIO signal. By avoiding the fixed-phy implementation, phylink
can provide a faster response to link events: fixed-phy has to wait for
phylib to operate its state machine, which can take several seconds.
In comparison, phylink takes milliseconds.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
- remove sync status
- rework supported and advertisment handling
- add 1000base-x speed for fixed links
- use functionality exported from phy-core, reworking
__phylink_ethtool_ksettings_set for it
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-07-25 22:03:13 +08:00
|
|
|
|
|
|
|
#endif
|