mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-06 02:50:43 +00:00
sfc: Separate shared NIC code from Falcon-specific and rename accordingly
Signed-off-by: Ben Hutchings <bhutchings@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
06629f0724
commit
152b6a62ae
7 changed files with 341 additions and 306 deletions
|
@ -213,7 +213,7 @@ static int efx_process_channel(struct efx_channel *channel, int rx_quota)
|
||||||
!channel->enabled))
|
!channel->enabled))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
rx_packets = falcon_process_eventq(channel, rx_quota);
|
rx_packets = efx_nic_process_eventq(channel, rx_quota);
|
||||||
if (rx_packets == 0)
|
if (rx_packets == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -245,7 +245,7 @@ static inline void efx_channel_processed(struct efx_channel *channel)
|
||||||
channel->work_pending = false;
|
channel->work_pending = false;
|
||||||
smp_wmb();
|
smp_wmb();
|
||||||
|
|
||||||
falcon_eventq_read_ack(channel);
|
efx_nic_eventq_read_ack(channel);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* NAPI poll handler
|
/* NAPI poll handler
|
||||||
|
@ -316,7 +316,7 @@ void efx_process_channel_now(struct efx_channel *channel)
|
||||||
BUG_ON(!channel->enabled);
|
BUG_ON(!channel->enabled);
|
||||||
|
|
||||||
/* Disable interrupts and wait for ISRs to complete */
|
/* Disable interrupts and wait for ISRs to complete */
|
||||||
falcon_disable_interrupts(efx);
|
efx_nic_disable_interrupts(efx);
|
||||||
if (efx->legacy_irq)
|
if (efx->legacy_irq)
|
||||||
synchronize_irq(efx->legacy_irq);
|
synchronize_irq(efx->legacy_irq);
|
||||||
if (channel->irq)
|
if (channel->irq)
|
||||||
|
@ -333,7 +333,7 @@ void efx_process_channel_now(struct efx_channel *channel)
|
||||||
efx_channel_processed(channel);
|
efx_channel_processed(channel);
|
||||||
|
|
||||||
napi_enable(&channel->napi_str);
|
napi_enable(&channel->napi_str);
|
||||||
falcon_enable_interrupts(efx);
|
efx_nic_enable_interrupts(efx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create event queue
|
/* Create event queue
|
||||||
|
@ -345,7 +345,7 @@ static int efx_probe_eventq(struct efx_channel *channel)
|
||||||
{
|
{
|
||||||
EFX_LOG(channel->efx, "chan %d create event queue\n", channel->channel);
|
EFX_LOG(channel->efx, "chan %d create event queue\n", channel->channel);
|
||||||
|
|
||||||
return falcon_probe_eventq(channel);
|
return efx_nic_probe_eventq(channel);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Prepare channel's event queue */
|
/* Prepare channel's event queue */
|
||||||
|
@ -355,21 +355,21 @@ static void efx_init_eventq(struct efx_channel *channel)
|
||||||
|
|
||||||
channel->eventq_read_ptr = 0;
|
channel->eventq_read_ptr = 0;
|
||||||
|
|
||||||
falcon_init_eventq(channel);
|
efx_nic_init_eventq(channel);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void efx_fini_eventq(struct efx_channel *channel)
|
static void efx_fini_eventq(struct efx_channel *channel)
|
||||||
{
|
{
|
||||||
EFX_LOG(channel->efx, "chan %d fini event queue\n", channel->channel);
|
EFX_LOG(channel->efx, "chan %d fini event queue\n", channel->channel);
|
||||||
|
|
||||||
falcon_fini_eventq(channel);
|
efx_nic_fini_eventq(channel);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void efx_remove_eventq(struct efx_channel *channel)
|
static void efx_remove_eventq(struct efx_channel *channel)
|
||||||
{
|
{
|
||||||
EFX_LOG(channel->efx, "chan %d remove event queue\n", channel->channel);
|
EFX_LOG(channel->efx, "chan %d remove event queue\n", channel->channel);
|
||||||
|
|
||||||
falcon_remove_eventq(channel);
|
efx_nic_remove_eventq(channel);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
@ -535,7 +535,7 @@ static void efx_fini_channels(struct efx_nic *efx)
|
||||||
EFX_ASSERT_RESET_SERIALISED(efx);
|
EFX_ASSERT_RESET_SERIALISED(efx);
|
||||||
BUG_ON(efx->port_enabled);
|
BUG_ON(efx->port_enabled);
|
||||||
|
|
||||||
rc = falcon_flush_queues(efx);
|
rc = efx_nic_flush_queues(efx);
|
||||||
if (rc)
|
if (rc)
|
||||||
EFX_ERR(efx, "failed to flush queues\n");
|
EFX_ERR(efx, "failed to flush queues\n");
|
||||||
else
|
else
|
||||||
|
@ -1172,7 +1172,7 @@ static void efx_start_all(struct efx_nic *efx)
|
||||||
efx_for_each_channel(channel, efx)
|
efx_for_each_channel(channel, efx)
|
||||||
efx_start_channel(channel);
|
efx_start_channel(channel);
|
||||||
|
|
||||||
falcon_enable_interrupts(efx);
|
efx_nic_enable_interrupts(efx);
|
||||||
|
|
||||||
/* Start the hardware monitor if there is one. Otherwise (we're link
|
/* Start the hardware monitor if there is one. Otherwise (we're link
|
||||||
* event driven), we have to poll the PHY because after an event queue
|
* event driven), we have to poll the PHY because after an event queue
|
||||||
|
@ -1226,7 +1226,7 @@ static void efx_stop_all(struct efx_nic *efx)
|
||||||
efx->type->stop_stats(efx);
|
efx->type->stop_stats(efx);
|
||||||
|
|
||||||
/* Disable interrupts and wait for ISR to complete */
|
/* Disable interrupts and wait for ISR to complete */
|
||||||
falcon_disable_interrupts(efx);
|
efx_nic_disable_interrupts(efx);
|
||||||
if (efx->legacy_irq)
|
if (efx->legacy_irq)
|
||||||
synchronize_irq(efx->legacy_irq);
|
synchronize_irq(efx->legacy_irq);
|
||||||
efx_for_each_channel(channel, efx) {
|
efx_for_each_channel(channel, efx) {
|
||||||
|
@ -1286,8 +1286,8 @@ void efx_init_irq_moderation(struct efx_nic *efx, int tx_usecs, int rx_usecs,
|
||||||
{
|
{
|
||||||
struct efx_tx_queue *tx_queue;
|
struct efx_tx_queue *tx_queue;
|
||||||
struct efx_rx_queue *rx_queue;
|
struct efx_rx_queue *rx_queue;
|
||||||
unsigned tx_ticks = irq_mod_ticks(tx_usecs, FALCON_IRQ_MOD_RESOLUTION);
|
unsigned tx_ticks = irq_mod_ticks(tx_usecs, EFX_IRQ_MOD_RESOLUTION);
|
||||||
unsigned rx_ticks = irq_mod_ticks(rx_usecs, FALCON_IRQ_MOD_RESOLUTION);
|
unsigned rx_ticks = irq_mod_ticks(rx_usecs, EFX_IRQ_MOD_RESOLUTION);
|
||||||
|
|
||||||
EFX_ASSERT_RESET_SERIALISED(efx);
|
EFX_ASSERT_RESET_SERIALISED(efx);
|
||||||
|
|
||||||
|
@ -2042,7 +2042,7 @@ static void efx_fini_struct(struct efx_nic *efx)
|
||||||
*/
|
*/
|
||||||
static void efx_pci_remove_main(struct efx_nic *efx)
|
static void efx_pci_remove_main(struct efx_nic *efx)
|
||||||
{
|
{
|
||||||
falcon_fini_interrupt(efx);
|
efx_nic_fini_interrupt(efx);
|
||||||
efx_fini_channels(efx);
|
efx_fini_channels(efx);
|
||||||
efx_fini_port(efx);
|
efx_fini_port(efx);
|
||||||
efx->type->fini(efx);
|
efx->type->fini(efx);
|
||||||
|
@ -2119,7 +2119,7 @@ static int efx_pci_probe_main(struct efx_nic *efx)
|
||||||
|
|
||||||
efx_init_channels(efx);
|
efx_init_channels(efx);
|
||||||
|
|
||||||
rc = falcon_init_interrupt(efx);
|
rc = efx_nic_init_interrupt(efx);
|
||||||
if (rc)
|
if (rc)
|
||||||
goto fail5;
|
goto fail5;
|
||||||
|
|
||||||
|
|
|
@ -611,8 +611,8 @@ static int efx_ethtool_get_coalesce(struct net_device *net_dev,
|
||||||
coalesce->use_adaptive_rx_coalesce = efx->irq_rx_adaptive;
|
coalesce->use_adaptive_rx_coalesce = efx->irq_rx_adaptive;
|
||||||
coalesce->rx_coalesce_usecs_irq = efx->irq_rx_moderation;
|
coalesce->rx_coalesce_usecs_irq = efx->irq_rx_moderation;
|
||||||
|
|
||||||
coalesce->tx_coalesce_usecs_irq *= FALCON_IRQ_MOD_RESOLUTION;
|
coalesce->tx_coalesce_usecs_irq *= EFX_IRQ_MOD_RESOLUTION;
|
||||||
coalesce->rx_coalesce_usecs_irq *= FALCON_IRQ_MOD_RESOLUTION;
|
coalesce->rx_coalesce_usecs_irq *= EFX_IRQ_MOD_RESOLUTION;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -30,6 +30,14 @@ static inline int efx_nic_rev(struct efx_nic *efx)
|
||||||
return efx->type->revision;
|
return efx->type->revision;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern u32 efx_nic_fpga_ver(struct efx_nic *efx);
|
||||||
|
|
||||||
|
/* NIC has two interlinked PCI functions for the same port. */
|
||||||
|
static inline bool efx_nic_is_dual_func(struct efx_nic *efx)
|
||||||
|
{
|
||||||
|
return efx_nic_rev(efx) < EFX_REV_FALCON_B0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct falcon_board_type - board operations and type information
|
* struct falcon_board_type - board operations and type information
|
||||||
* @id: Board type id, as found in NVRAM
|
* @id: Board type id, as found in NVRAM
|
||||||
|
@ -108,49 +116,65 @@ extern struct efx_nic_type falcon_b0_nic_type;
|
||||||
extern void falcon_probe_board(struct efx_nic *efx, u16 revision_info);
|
extern void falcon_probe_board(struct efx_nic *efx, u16 revision_info);
|
||||||
|
|
||||||
/* TX data path */
|
/* TX data path */
|
||||||
extern int falcon_probe_tx(struct efx_tx_queue *tx_queue);
|
extern int efx_nic_probe_tx(struct efx_tx_queue *tx_queue);
|
||||||
extern void falcon_init_tx(struct efx_tx_queue *tx_queue);
|
extern void efx_nic_init_tx(struct efx_tx_queue *tx_queue);
|
||||||
extern void falcon_fini_tx(struct efx_tx_queue *tx_queue);
|
extern void efx_nic_fini_tx(struct efx_tx_queue *tx_queue);
|
||||||
extern void falcon_remove_tx(struct efx_tx_queue *tx_queue);
|
extern void efx_nic_remove_tx(struct efx_tx_queue *tx_queue);
|
||||||
extern void falcon_push_buffers(struct efx_tx_queue *tx_queue);
|
extern void efx_nic_push_buffers(struct efx_tx_queue *tx_queue);
|
||||||
|
|
||||||
/* RX data path */
|
/* RX data path */
|
||||||
extern int falcon_probe_rx(struct efx_rx_queue *rx_queue);
|
extern int efx_nic_probe_rx(struct efx_rx_queue *rx_queue);
|
||||||
extern void falcon_init_rx(struct efx_rx_queue *rx_queue);
|
extern void efx_nic_init_rx(struct efx_rx_queue *rx_queue);
|
||||||
extern void falcon_fini_rx(struct efx_rx_queue *rx_queue);
|
extern void efx_nic_fini_rx(struct efx_rx_queue *rx_queue);
|
||||||
extern void falcon_remove_rx(struct efx_rx_queue *rx_queue);
|
extern void efx_nic_remove_rx(struct efx_rx_queue *rx_queue);
|
||||||
extern void falcon_notify_rx_desc(struct efx_rx_queue *rx_queue);
|
extern void efx_nic_notify_rx_desc(struct efx_rx_queue *rx_queue);
|
||||||
|
|
||||||
/* Event data path */
|
/* Event data path */
|
||||||
extern int falcon_probe_eventq(struct efx_channel *channel);
|
extern int efx_nic_probe_eventq(struct efx_channel *channel);
|
||||||
extern void falcon_init_eventq(struct efx_channel *channel);
|
extern void efx_nic_init_eventq(struct efx_channel *channel);
|
||||||
extern void falcon_fini_eventq(struct efx_channel *channel);
|
extern void efx_nic_fini_eventq(struct efx_channel *channel);
|
||||||
extern void falcon_remove_eventq(struct efx_channel *channel);
|
extern void efx_nic_remove_eventq(struct efx_channel *channel);
|
||||||
extern int falcon_process_eventq(struct efx_channel *channel, int rx_quota);
|
extern int efx_nic_process_eventq(struct efx_channel *channel, int rx_quota);
|
||||||
extern void falcon_eventq_read_ack(struct efx_channel *channel);
|
extern void efx_nic_eventq_read_ack(struct efx_channel *channel);
|
||||||
|
|
||||||
/* MAC/PHY */
|
/* MAC/PHY */
|
||||||
extern void falcon_drain_tx_fifo(struct efx_nic *efx);
|
extern void falcon_drain_tx_fifo(struct efx_nic *efx);
|
||||||
extern void falcon_reconfigure_mac_wrapper(struct efx_nic *efx);
|
extern void falcon_reconfigure_mac_wrapper(struct efx_nic *efx);
|
||||||
|
extern int efx_nic_rx_xoff_thresh, efx_nic_rx_xon_thresh;
|
||||||
|
|
||||||
/* Interrupts and test events */
|
/* Interrupts and test events */
|
||||||
extern int falcon_init_interrupt(struct efx_nic *efx);
|
extern int efx_nic_init_interrupt(struct efx_nic *efx);
|
||||||
extern void falcon_enable_interrupts(struct efx_nic *efx);
|
extern void efx_nic_enable_interrupts(struct efx_nic *efx);
|
||||||
extern void falcon_generate_test_event(struct efx_channel *channel,
|
extern void efx_nic_generate_test_event(struct efx_channel *channel,
|
||||||
unsigned int magic);
|
unsigned int magic);
|
||||||
extern void falcon_generate_interrupt(struct efx_nic *efx);
|
extern void efx_nic_generate_interrupt(struct efx_nic *efx);
|
||||||
extern void falcon_disable_interrupts(struct efx_nic *efx);
|
extern void efx_nic_disable_interrupts(struct efx_nic *efx);
|
||||||
extern void falcon_fini_interrupt(struct efx_nic *efx);
|
extern void efx_nic_fini_interrupt(struct efx_nic *efx);
|
||||||
|
extern irqreturn_t efx_nic_fatal_interrupt(struct efx_nic *efx);
|
||||||
|
extern irqreturn_t falcon_legacy_interrupt_a1(int irq, void *dev_id);
|
||||||
|
extern void falcon_irq_ack_a1(struct efx_nic *efx);
|
||||||
|
|
||||||
#define FALCON_IRQ_MOD_RESOLUTION 5
|
#define EFX_IRQ_MOD_RESOLUTION 5
|
||||||
|
|
||||||
/* Global Resources */
|
/* Global Resources */
|
||||||
extern int falcon_flush_queues(struct efx_nic *efx);
|
extern int efx_nic_flush_queues(struct efx_nic *efx);
|
||||||
extern void falcon_start_nic_stats(struct efx_nic *efx);
|
extern void falcon_start_nic_stats(struct efx_nic *efx);
|
||||||
extern void falcon_stop_nic_stats(struct efx_nic *efx);
|
extern void falcon_stop_nic_stats(struct efx_nic *efx);
|
||||||
extern int falcon_reset_xaui(struct efx_nic *efx);
|
extern int falcon_reset_xaui(struct efx_nic *efx);
|
||||||
|
extern void efx_nic_init_common(struct efx_nic *efx);
|
||||||
|
|
||||||
|
int efx_nic_alloc_buffer(struct efx_nic *efx, struct efx_buffer *buffer,
|
||||||
|
unsigned int len);
|
||||||
|
void efx_nic_free_buffer(struct efx_nic *efx, struct efx_buffer *buffer);
|
||||||
|
|
||||||
/* Tests */
|
/* Tests */
|
||||||
|
struct efx_nic_register_test {
|
||||||
|
unsigned address;
|
||||||
|
efx_oword_t mask;
|
||||||
|
};
|
||||||
|
extern int efx_nic_test_registers(struct efx_nic *efx,
|
||||||
|
const struct efx_nic_register_test *regs,
|
||||||
|
size_t n_regs);
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
*
|
*
|
||||||
|
@ -186,8 +210,8 @@ extern int falcon_reset_xaui(struct efx_nic *efx);
|
||||||
#define MAC_DATA_LBN 0
|
#define MAC_DATA_LBN 0
|
||||||
#define MAC_DATA_WIDTH 32
|
#define MAC_DATA_WIDTH 32
|
||||||
|
|
||||||
extern void falcon_generate_event(struct efx_channel *channel,
|
extern void efx_nic_generate_event(struct efx_channel *channel,
|
||||||
efx_qword_t *event);
|
efx_qword_t *event);
|
||||||
|
|
||||||
extern void falcon_poll_xmac(struct efx_nic *efx);
|
extern void falcon_poll_xmac(struct efx_nic *efx);
|
||||||
|
|
||||||
|
|
|
@ -341,7 +341,7 @@ static int __efx_fast_push_rx_descriptors(struct efx_rx_queue *rx_queue,
|
||||||
|
|
||||||
out:
|
out:
|
||||||
/* Send write pointer to card. */
|
/* Send write pointer to card. */
|
||||||
falcon_notify_rx_desc(rx_queue);
|
efx_nic_notify_rx_desc(rx_queue);
|
||||||
|
|
||||||
/* If the fast fill is running inside from the refill tasklet, then
|
/* If the fast fill is running inside from the refill tasklet, then
|
||||||
* for SMP systems it may be running on a different CPU to
|
* for SMP systems it may be running on a different CPU to
|
||||||
|
@ -640,7 +640,7 @@ int efx_probe_rx_queue(struct efx_rx_queue *rx_queue)
|
||||||
if (!rx_queue->buffer)
|
if (!rx_queue->buffer)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
rc = falcon_probe_rx(rx_queue);
|
rc = efx_nic_probe_rx(rx_queue);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
kfree(rx_queue->buffer);
|
kfree(rx_queue->buffer);
|
||||||
rx_queue->buffer = NULL;
|
rx_queue->buffer = NULL;
|
||||||
|
@ -671,7 +671,7 @@ void efx_init_rx_queue(struct efx_rx_queue *rx_queue)
|
||||||
rx_queue->fast_fill_limit = limit;
|
rx_queue->fast_fill_limit = limit;
|
||||||
|
|
||||||
/* Set up RX descriptor ring */
|
/* Set up RX descriptor ring */
|
||||||
falcon_init_rx(rx_queue);
|
efx_nic_init_rx(rx_queue);
|
||||||
}
|
}
|
||||||
|
|
||||||
void efx_fini_rx_queue(struct efx_rx_queue *rx_queue)
|
void efx_fini_rx_queue(struct efx_rx_queue *rx_queue)
|
||||||
|
@ -681,7 +681,7 @@ void efx_fini_rx_queue(struct efx_rx_queue *rx_queue)
|
||||||
|
|
||||||
EFX_LOG(rx_queue->efx, "shutting down RX queue %d\n", rx_queue->queue);
|
EFX_LOG(rx_queue->efx, "shutting down RX queue %d\n", rx_queue->queue);
|
||||||
|
|
||||||
falcon_fini_rx(rx_queue);
|
efx_nic_fini_rx(rx_queue);
|
||||||
|
|
||||||
/* Release RX buffers NB start at index 0 not current HW ptr */
|
/* Release RX buffers NB start at index 0 not current HW ptr */
|
||||||
if (rx_queue->buffer) {
|
if (rx_queue->buffer) {
|
||||||
|
@ -706,7 +706,7 @@ void efx_remove_rx_queue(struct efx_rx_queue *rx_queue)
|
||||||
{
|
{
|
||||||
EFX_LOG(rx_queue->efx, "destroying RX queue %d\n", rx_queue->queue);
|
EFX_LOG(rx_queue->efx, "destroying RX queue %d\n", rx_queue->queue);
|
||||||
|
|
||||||
falcon_remove_rx(rx_queue);
|
efx_nic_remove_rx(rx_queue);
|
||||||
|
|
||||||
kfree(rx_queue->buffer);
|
kfree(rx_queue->buffer);
|
||||||
rx_queue->buffer = NULL;
|
rx_queue->buffer = NULL;
|
||||||
|
|
|
@ -164,7 +164,7 @@ static int efx_test_interrupts(struct efx_nic *efx,
|
||||||
goto success;
|
goto success;
|
||||||
}
|
}
|
||||||
|
|
||||||
falcon_generate_interrupt(efx);
|
efx_nic_generate_interrupt(efx);
|
||||||
|
|
||||||
/* Wait for arrival of test interrupt. */
|
/* Wait for arrival of test interrupt. */
|
||||||
EFX_LOG(efx, "waiting for test interrupt\n");
|
EFX_LOG(efx, "waiting for test interrupt\n");
|
||||||
|
@ -202,7 +202,7 @@ static int efx_test_eventq_irq(struct efx_channel *channel,
|
||||||
channel->eventq_magic = 0;
|
channel->eventq_magic = 0;
|
||||||
smp_wmb();
|
smp_wmb();
|
||||||
|
|
||||||
falcon_generate_test_event(channel, magic);
|
efx_nic_generate_test_event(channel, magic);
|
||||||
|
|
||||||
/* Wait for arrival of interrupt */
|
/* Wait for arrival of interrupt */
|
||||||
count = 0;
|
count = 0;
|
||||||
|
|
|
@ -278,7 +278,7 @@ netdev_tx_t efx_enqueue_skb(struct efx_tx_queue *tx_queue, struct sk_buff *skb)
|
||||||
buffer->continuation = false;
|
buffer->continuation = false;
|
||||||
|
|
||||||
/* Pass off to hardware */
|
/* Pass off to hardware */
|
||||||
falcon_push_buffers(tx_queue);
|
efx_nic_push_buffers(tx_queue);
|
||||||
|
|
||||||
return NETDEV_TX_OK;
|
return NETDEV_TX_OK;
|
||||||
|
|
||||||
|
@ -426,7 +426,7 @@ int efx_probe_tx_queue(struct efx_tx_queue *tx_queue)
|
||||||
tx_queue->buffer[i].continuation = true;
|
tx_queue->buffer[i].continuation = true;
|
||||||
|
|
||||||
/* Allocate hardware ring */
|
/* Allocate hardware ring */
|
||||||
rc = falcon_probe_tx(tx_queue);
|
rc = efx_nic_probe_tx(tx_queue);
|
||||||
if (rc)
|
if (rc)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
@ -449,7 +449,7 @@ void efx_init_tx_queue(struct efx_tx_queue *tx_queue)
|
||||||
BUG_ON(tx_queue->stopped);
|
BUG_ON(tx_queue->stopped);
|
||||||
|
|
||||||
/* Set up TX descriptor ring */
|
/* Set up TX descriptor ring */
|
||||||
falcon_init_tx(tx_queue);
|
efx_nic_init_tx(tx_queue);
|
||||||
}
|
}
|
||||||
|
|
||||||
void efx_release_tx_buffers(struct efx_tx_queue *tx_queue)
|
void efx_release_tx_buffers(struct efx_tx_queue *tx_queue)
|
||||||
|
@ -475,7 +475,7 @@ void efx_fini_tx_queue(struct efx_tx_queue *tx_queue)
|
||||||
EFX_LOG(tx_queue->efx, "shutting down TX queue %d\n", tx_queue->queue);
|
EFX_LOG(tx_queue->efx, "shutting down TX queue %d\n", tx_queue->queue);
|
||||||
|
|
||||||
/* Flush TX queue, remove descriptor ring */
|
/* Flush TX queue, remove descriptor ring */
|
||||||
falcon_fini_tx(tx_queue);
|
efx_nic_fini_tx(tx_queue);
|
||||||
|
|
||||||
efx_release_tx_buffers(tx_queue);
|
efx_release_tx_buffers(tx_queue);
|
||||||
|
|
||||||
|
@ -492,7 +492,7 @@ void efx_fini_tx_queue(struct efx_tx_queue *tx_queue)
|
||||||
void efx_remove_tx_queue(struct efx_tx_queue *tx_queue)
|
void efx_remove_tx_queue(struct efx_tx_queue *tx_queue)
|
||||||
{
|
{
|
||||||
EFX_LOG(tx_queue->efx, "destroying TX queue %d\n", tx_queue->queue);
|
EFX_LOG(tx_queue->efx, "destroying TX queue %d\n", tx_queue->queue);
|
||||||
falcon_remove_tx(tx_queue);
|
efx_nic_remove_tx(tx_queue);
|
||||||
|
|
||||||
kfree(tx_queue->buffer);
|
kfree(tx_queue->buffer);
|
||||||
tx_queue->buffer = NULL;
|
tx_queue->buffer = NULL;
|
||||||
|
@ -1078,7 +1078,7 @@ static int efx_enqueue_skb_tso(struct efx_tx_queue *tx_queue,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Pass off to hardware */
|
/* Pass off to hardware */
|
||||||
falcon_push_buffers(tx_queue);
|
efx_nic_push_buffers(tx_queue);
|
||||||
|
|
||||||
tx_queue->tso_bursts++;
|
tx_queue->tso_bursts++;
|
||||||
return NETDEV_TX_OK;
|
return NETDEV_TX_OK;
|
||||||
|
|
Loading…
Reference in a new issue