summaryrefslogtreecommitdiffstats
path: root/src/interface/efi/efi_snp.c
diff options
context:
space:
mode:
authorMichael Brown2008-11-08 03:18:30 +0100
committerMichael Brown2008-11-08 06:30:30 +0100
commit9a52ba0cfac0fffb39b5a4c148ec7641bcc38381 (patch)
tree12059ca7f75d37d1b62ffa550798fa8233834590 /src/interface/efi/efi_snp.c
parent[phantom] Do not halt PEGs on driver shutdown (diff)
downloadipxe-9a52ba0cfac0fffb39b5a4c148ec7641bcc38381.tar.gz
ipxe-9a52ba0cfac0fffb39b5a4c148ec7641bcc38381.tar.xz
ipxe-9a52ba0cfac0fffb39b5a4c148ec7641bcc38381.zip
[netdevice] Retain and report detailed error breakdowns
netdev_rx_err() and netdev_tx_complete_err() get passed the error code, but currently use it only in debug messages. Retain error numbers and frequencey counts for up to NETDEV_MAX_UNIQUE_ERRORS (4) different errors for each of TX and RX. This allows the "ifstat" command to report the reasons for TX/RX errors in most cases, even in non-debug builds.
Diffstat (limited to 'src/interface/efi/efi_snp.c')
-rw-r--r--src/interface/efi/efi_snp.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/src/interface/efi/efi_snp.c b/src/interface/efi/efi_snp.c
index f84bf10e..40136623 100644
--- a/src/interface/efi/efi_snp.c
+++ b/src/interface/efi/efi_snp.c
@@ -317,14 +317,14 @@ efi_snp_statistics ( EFI_SIMPLE_NETWORK_PROTOCOL *snp, BOOLEAN reset,
/* Gather statistics */
memset ( &stats_buf, 0, sizeof ( stats_buf ) );
- stats_buf.TxGoodFrames = snpdev->netdev->stats.tx_ok;
- stats_buf.TxDroppedFrames = snpdev->netdev->stats.tx_err;
- stats_buf.TxTotalFrames = ( snpdev->netdev->stats.tx_ok +
- snpdev->netdev->stats.tx_err );
- stats_buf.RxGoodFrames = snpdev->netdev->stats.rx_ok;
- stats_buf.RxDroppedFrames = snpdev->netdev->stats.rx_err;
- stats_buf.RxTotalFrames = ( snpdev->netdev->stats.rx_ok +
- snpdev->netdev->stats.rx_err );
+ stats_buf.TxGoodFrames = snpdev->netdev->tx_stats.good;
+ stats_buf.TxDroppedFrames = snpdev->netdev->tx_stats.bad;
+ stats_buf.TxTotalFrames = ( snpdev->netdev->tx_stats.good +
+ snpdev->netdev->tx_stats.bad );
+ stats_buf.RxGoodFrames = snpdev->netdev->rx_stats.good;
+ stats_buf.RxDroppedFrames = snpdev->netdev->rx_stats.bad;
+ stats_buf.RxTotalFrames = ( snpdev->netdev->rx_stats.good +
+ snpdev->netdev->rx_stats.bad );
if ( *stats_len > sizeof ( stats_buf ) )
*stats_len = sizeof ( stats_buf );
if ( stats )
@@ -332,8 +332,10 @@ efi_snp_statistics ( EFI_SIMPLE_NETWORK_PROTOCOL *snp, BOOLEAN reset,
/* Reset statistics if requested to do so */
if ( reset ) {
- memset ( &snpdev->netdev->stats, 0,
- sizeof ( snpdev->netdev->stats ) );
+ memset ( &snpdev->netdev->tx_stats, 0,
+ sizeof ( snpdev->netdev->tx_stats ) );
+ memset ( &snpdev->netdev->rx_stats, 0,
+ sizeof ( snpdev->netdev->rx_stats ) );
}
return 0;