forked from mirrors/linux
		
	net: dsa: add support for phylink mac_select_pcs()
Add DSA support for the phylink mac_select_pcs() method so DSA drivers can return provide phylink with the appropriate PCS for the PHY interface mode. Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									8aba73ef44
								
							
						
					
					
						commit
						bde018222c
					
				
					 2 changed files with 18 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -788,6 +788,9 @@ struct dsa_switch_ops {
 | 
			
		|||
	void	(*phylink_validate)(struct dsa_switch *ds, int port,
 | 
			
		||||
				    unsigned long *supported,
 | 
			
		||||
				    struct phylink_link_state *state);
 | 
			
		||||
	struct phylink_pcs *(*phylink_mac_select_pcs)(struct dsa_switch *ds,
 | 
			
		||||
						      int port,
 | 
			
		||||
						      phy_interface_t iface);
 | 
			
		||||
	int	(*phylink_mac_link_state)(struct dsa_switch *ds, int port,
 | 
			
		||||
					  struct phylink_link_state *state);
 | 
			
		||||
	void	(*phylink_mac_config)(struct dsa_switch *ds, int port,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1053,6 +1053,20 @@ static void dsa_port_phylink_mac_pcs_get_state(struct phylink_config *config,
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct phylink_pcs *
 | 
			
		||||
dsa_port_phylink_mac_select_pcs(struct phylink_config *config,
 | 
			
		||||
				phy_interface_t interface)
 | 
			
		||||
{
 | 
			
		||||
	struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
 | 
			
		||||
	struct dsa_switch *ds = dp->ds;
 | 
			
		||||
	struct phylink_pcs *pcs = NULL;
 | 
			
		||||
 | 
			
		||||
	if (ds->ops->phylink_mac_select_pcs)
 | 
			
		||||
		pcs = ds->ops->phylink_mac_select_pcs(ds, dp->index, interface);
 | 
			
		||||
 | 
			
		||||
	return pcs;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void dsa_port_phylink_mac_config(struct phylink_config *config,
 | 
			
		||||
					unsigned int mode,
 | 
			
		||||
					const struct phylink_link_state *state)
 | 
			
		||||
| 
						 | 
				
			
			@ -1119,6 +1133,7 @@ static void dsa_port_phylink_mac_link_up(struct phylink_config *config,
 | 
			
		|||
 | 
			
		||||
static const struct phylink_mac_ops dsa_port_phylink_mac_ops = {
 | 
			
		||||
	.validate = dsa_port_phylink_validate,
 | 
			
		||||
	.mac_select_pcs = dsa_port_phylink_mac_select_pcs,
 | 
			
		||||
	.mac_pcs_get_state = dsa_port_phylink_mac_pcs_get_state,
 | 
			
		||||
	.mac_config = dsa_port_phylink_mac_config,
 | 
			
		||||
	.mac_an_restart = dsa_port_phylink_mac_an_restart,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue