aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/sfc/falcon.c
diff options
context:
space:
mode:
authorBen Hutchings <bhutchings@solarflare.com>2009-11-25 11:12:01 -0500
committerDavid S. Miller <davem@davemloft.net>2009-11-26 18:59:43 -0500
commit9007b9fa368b172e6b9a985899080fbebb7d3204 (patch)
tree3d725a55e193fe9763fcd514a6b4246eae8da957 /drivers/net/sfc/falcon.c
parentfe75820b99ff2de713de23252432f0f9d0ca1d35 (diff)
sfc: Simplify XMAC link polling
From: Steve Hodgson <shodgson@solarflare.com> Only the XMAC on Falcon needs help from the driver to poll and reset the MAC-PHY link (XAUI); GMII is a simple parallel bus and on later NICs firmware takes care of the XAUI link. Also, an XMAC interrupt currently schedules a work item which simply clears a flag (efx_nic::mac_up) to be checked by the regular monitor (or the next link reconfiguration, if that is sooner). Rename the flag to xmac_poll_required, changing its sense. Remove the needless indirection and just set the flag immediately. Call falcon_xmac_poll() directly where required. Add a new generic operation mac_op::check_fault to check the link outside of regular monitoring, as required during self-tests. (Note that this leaves us with an unused work item, but we will immediately have another use for it.) Signed-off-by: Ben Hutchings <bhutchings@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/sfc/falcon.c')
-rw-r--r--drivers/net/sfc/falcon.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/net/sfc/falcon.c b/drivers/net/sfc/falcon.c
index c43c5e6f077b..fac534a274c8 100644
--- a/drivers/net/sfc/falcon.c
+++ b/drivers/net/sfc/falcon.c
@@ -900,7 +900,7 @@ static void falcon_handle_global_event(struct efx_channel *channel,
900 900
901 if ((falcon_rev(efx) >= FALCON_REV_B0) && 901 if ((falcon_rev(efx) >= FALCON_REV_B0) &&
902 EFX_QWORD_FIELD(*event, FSF_BB_GLB_EV_XG_MGT_INTR)) { 902 EFX_QWORD_FIELD(*event, FSF_BB_GLB_EV_XG_MGT_INTR)) {
903 queue_work(efx->workqueue, &efx->mac_work); 903 efx->xmac_poll_required = true;
904 handled = true; 904 handled = true;
905 } 905 }
906 906
@@ -2251,7 +2251,7 @@ int falcon_switch_mac(struct efx_nic *efx)
2251 2251
2252 EFX_LOG(efx, "selected %cMAC\n", EFX_IS10G(efx) ? 'X' : 'G'); 2252 EFX_LOG(efx, "selected %cMAC\n", EFX_IS10G(efx) ? 'X' : 'G');
2253 /* Not all macs support a mac-level link state */ 2253 /* Not all macs support a mac-level link state */
2254 efx->mac_up = true; 2254 efx->xmac_poll_required = false;
2255 2255
2256 rc = falcon_reset_macs(efx); 2256 rc = falcon_reset_macs(efx);
2257out: 2257out:
@@ -2624,7 +2624,8 @@ void falcon_monitor(struct efx_nic *efx)
2624 falcon_sim_phy_event(efx); 2624 falcon_sim_phy_event(efx);
2625 } 2625 }
2626 efx->phy_op->poll(efx); 2626 efx->phy_op->poll(efx);
2627 efx->mac_op->poll(efx); 2627 if (EFX_IS10G(efx))
2628 falcon_poll_xmac(efx);
2628} 2629}
2629 2630
2630/* Zeroes out the SRAM contents. This routine must be called in 2631/* Zeroes out the SRAM contents. This routine must be called in