mirror of
https://github.com/torvalds/linux.git
synced 2024-12-19 01:23:20 +00:00
60ac10658c
Checksum generation is an attribute of our hardware TX queues, not TX descriptors. We previously used a single queue and turned checksum generation on or off as requested through ethtool. However, this can result in regenerating checksums in raw packets that should not be modified. We now create 2 hardware TX queues with checksum generation on or off. They are presented to the net core as one queue since it does not know how to select between them. The self-test verifies that a bad checksum is unaltered on the queue with checksum generation off. Signed-off-by: Ben Hutchings <bhutchings@solarflare.com> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
51 lines
1.4 KiB
C
51 lines
1.4 KiB
C
/****************************************************************************
|
|
* Driver for Solarflare Solarstorm network controllers and boards
|
|
* Copyright 2005-2006 Fen Systems Ltd.
|
|
* Copyright 2006-2008 Solarflare Communications Inc.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License version 2 as published
|
|
* by the Free Software Foundation, incorporated herein by reference.
|
|
*/
|
|
|
|
#ifndef EFX_SELFTEST_H
|
|
#define EFX_SELFTEST_H
|
|
|
|
#include "net_driver.h"
|
|
|
|
/*
|
|
* Self tests
|
|
*/
|
|
|
|
struct efx_loopback_self_tests {
|
|
int tx_sent[EFX_TX_QUEUE_COUNT];
|
|
int tx_done[EFX_TX_QUEUE_COUNT];
|
|
int rx_good;
|
|
int rx_bad;
|
|
};
|
|
|
|
/* Efx self test results
|
|
* For fields which are not counters, 1 indicates success and -1
|
|
* indicates failure.
|
|
*/
|
|
struct efx_self_tests {
|
|
int interrupt;
|
|
int eventq_dma[EFX_MAX_CHANNELS];
|
|
int eventq_int[EFX_MAX_CHANNELS];
|
|
int eventq_poll[EFX_MAX_CHANNELS];
|
|
int phy_ok;
|
|
int loopback_speed;
|
|
int loopback_full_duplex;
|
|
struct efx_loopback_self_tests loopback[LOOPBACK_TEST_MAX];
|
|
};
|
|
|
|
extern void efx_loopback_rx_packet(struct efx_nic *efx,
|
|
const char *buf_ptr, int pkt_len);
|
|
extern int efx_online_test(struct efx_nic *efx,
|
|
struct efx_self_tests *tests);
|
|
extern int efx_offline_test(struct efx_nic *efx,
|
|
struct efx_self_tests *tests,
|
|
unsigned int loopback_modes);
|
|
|
|
#endif /* EFX_SELFTEST_H */
|