mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-30 08:02:30 +00:00
sfc: move a couple more functions
Signed-off-by: Alexandru-Mihai Maftei <amaftei@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
3653954da4
commit
88f7df35ce
6 changed files with 56 additions and 51 deletions
|
@ -675,39 +675,6 @@ u32 efx_mcdi_phy_get_caps(struct efx_nic *efx)
|
||||||
return phy_data->supported_cap;
|
return phy_data->supported_cap;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int efx_mcdi_event_link_speed[] = {
|
|
||||||
[MCDI_EVENT_LINKCHANGE_SPEED_100M] = 100,
|
|
||||||
[MCDI_EVENT_LINKCHANGE_SPEED_1G] = 1000,
|
|
||||||
[MCDI_EVENT_LINKCHANGE_SPEED_10G] = 10000,
|
|
||||||
[MCDI_EVENT_LINKCHANGE_SPEED_40G] = 40000,
|
|
||||||
[MCDI_EVENT_LINKCHANGE_SPEED_25G] = 25000,
|
|
||||||
[MCDI_EVENT_LINKCHANGE_SPEED_50G] = 50000,
|
|
||||||
[MCDI_EVENT_LINKCHANGE_SPEED_100G] = 100000,
|
|
||||||
};
|
|
||||||
|
|
||||||
void efx_mcdi_process_link_change(struct efx_nic *efx, efx_qword_t *ev)
|
|
||||||
{
|
|
||||||
u32 flags, fcntl, speed, lpa;
|
|
||||||
|
|
||||||
speed = EFX_QWORD_FIELD(*ev, MCDI_EVENT_LINKCHANGE_SPEED);
|
|
||||||
EFX_WARN_ON_PARANOID(speed >= ARRAY_SIZE(efx_mcdi_event_link_speed));
|
|
||||||
speed = efx_mcdi_event_link_speed[speed];
|
|
||||||
|
|
||||||
flags = EFX_QWORD_FIELD(*ev, MCDI_EVENT_LINKCHANGE_LINK_FLAGS);
|
|
||||||
fcntl = EFX_QWORD_FIELD(*ev, MCDI_EVENT_LINKCHANGE_FCNTL);
|
|
||||||
lpa = EFX_QWORD_FIELD(*ev, MCDI_EVENT_LINKCHANGE_LP_CAP);
|
|
||||||
|
|
||||||
/* efx->link_state is only modified by efx_mcdi_phy_get_link(),
|
|
||||||
* which is only run after flushing the event queues. Therefore, it
|
|
||||||
* is safe to modify the link state outside of the mac_lock here.
|
|
||||||
*/
|
|
||||||
efx_mcdi_phy_decode_link(efx, &efx->link_state, speed, flags, fcntl);
|
|
||||||
|
|
||||||
efx_mcdi_phy_check_fcntl(efx, lpa);
|
|
||||||
|
|
||||||
efx_link_status_changed(efx);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool efx_mcdi_mac_check_fault(struct efx_nic *efx)
|
bool efx_mcdi_mac_check_fault(struct efx_nic *efx)
|
||||||
{
|
{
|
||||||
MCDI_DECLARE_BUF(outbuf, MC_CMD_GET_LINK_OUT_LEN);
|
MCDI_DECLARE_BUF(outbuf, MC_CMD_GET_LINK_OUT_LEN);
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "mcdi_port_common.h"
|
#include "mcdi_port_common.h"
|
||||||
|
#include "efx_common.h"
|
||||||
|
|
||||||
int efx_mcdi_get_phy_cfg(struct efx_nic *efx, struct efx_mcdi_phy_data *cfg)
|
int efx_mcdi_get_phy_cfg(struct efx_nic *efx, struct efx_mcdi_phy_data *cfg)
|
||||||
{
|
{
|
||||||
|
@ -532,3 +533,36 @@ int efx_mcdi_port_get_number(struct efx_nic *efx)
|
||||||
|
|
||||||
return MCDI_DWORD(outbuf, GET_PORT_ASSIGNMENT_OUT_PORT);
|
return MCDI_DWORD(outbuf, GET_PORT_ASSIGNMENT_OUT_PORT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static unsigned int efx_mcdi_event_link_speed[] = {
|
||||||
|
[MCDI_EVENT_LINKCHANGE_SPEED_100M] = 100,
|
||||||
|
[MCDI_EVENT_LINKCHANGE_SPEED_1G] = 1000,
|
||||||
|
[MCDI_EVENT_LINKCHANGE_SPEED_10G] = 10000,
|
||||||
|
[MCDI_EVENT_LINKCHANGE_SPEED_40G] = 40000,
|
||||||
|
[MCDI_EVENT_LINKCHANGE_SPEED_25G] = 25000,
|
||||||
|
[MCDI_EVENT_LINKCHANGE_SPEED_50G] = 50000,
|
||||||
|
[MCDI_EVENT_LINKCHANGE_SPEED_100G] = 100000,
|
||||||
|
};
|
||||||
|
|
||||||
|
void efx_mcdi_process_link_change(struct efx_nic *efx, efx_qword_t *ev)
|
||||||
|
{
|
||||||
|
u32 flags, fcntl, speed, lpa;
|
||||||
|
|
||||||
|
speed = EFX_QWORD_FIELD(*ev, MCDI_EVENT_LINKCHANGE_SPEED);
|
||||||
|
EFX_WARN_ON_PARANOID(speed >= ARRAY_SIZE(efx_mcdi_event_link_speed));
|
||||||
|
speed = efx_mcdi_event_link_speed[speed];
|
||||||
|
|
||||||
|
flags = EFX_QWORD_FIELD(*ev, MCDI_EVENT_LINKCHANGE_LINK_FLAGS);
|
||||||
|
fcntl = EFX_QWORD_FIELD(*ev, MCDI_EVENT_LINKCHANGE_FCNTL);
|
||||||
|
lpa = EFX_QWORD_FIELD(*ev, MCDI_EVENT_LINKCHANGE_LP_CAP);
|
||||||
|
|
||||||
|
/* efx->link_state is only modified by efx_mcdi_phy_get_link(),
|
||||||
|
* which is only run after flushing the event queues. Therefore, it
|
||||||
|
* is safe to modify the link state outside of the mac_lock here.
|
||||||
|
*/
|
||||||
|
efx_mcdi_phy_decode_link(efx, &efx->link_state, speed, flags, fcntl);
|
||||||
|
|
||||||
|
efx_mcdi_phy_check_fcntl(efx, lpa);
|
||||||
|
|
||||||
|
efx_link_status_changed(efx);
|
||||||
|
}
|
||||||
|
|
|
@ -52,5 +52,6 @@ int efx_mcdi_phy_get_fecparam(struct efx_nic *efx,
|
||||||
int efx_mcdi_phy_test_alive(struct efx_nic *efx);
|
int efx_mcdi_phy_test_alive(struct efx_nic *efx);
|
||||||
int efx_mcdi_set_mac(struct efx_nic *efx);
|
int efx_mcdi_set_mac(struct efx_nic *efx);
|
||||||
int efx_mcdi_port_get_number(struct efx_nic *efx);
|
int efx_mcdi_port_get_number(struct efx_nic *efx);
|
||||||
|
void efx_mcdi_process_link_change(struct efx_nic *efx, efx_qword_t *ev);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -268,24 +268,6 @@ static int efx_enqueue_skb_pio(struct efx_tx_queue *tx_queue,
|
||||||
}
|
}
|
||||||
#endif /* EFX_USE_PIO */
|
#endif /* EFX_USE_PIO */
|
||||||
|
|
||||||
/* Remove buffers put into a tx_queue for the current packet.
|
|
||||||
* None of the buffers must have an skb attached.
|
|
||||||
*/
|
|
||||||
static void efx_enqueue_unwind(struct efx_tx_queue *tx_queue,
|
|
||||||
unsigned int insert_count)
|
|
||||||
{
|
|
||||||
struct efx_tx_buffer *buffer;
|
|
||||||
unsigned int bytes_compl = 0;
|
|
||||||
unsigned int pkts_compl = 0;
|
|
||||||
|
|
||||||
/* Work backwards until we hit the original insert pointer value */
|
|
||||||
while (tx_queue->insert_count != insert_count) {
|
|
||||||
--tx_queue->insert_count;
|
|
||||||
buffer = __efx_tx_queue_get_insert_buffer(tx_queue);
|
|
||||||
efx_dequeue_buffer(tx_queue, buffer, &pkts_compl, &bytes_compl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Fallback to software TSO.
|
* Fallback to software TSO.
|
||||||
*
|
*
|
||||||
|
|
|
@ -267,6 +267,24 @@ void efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Remove buffers put into a tx_queue for the current packet.
|
||||||
|
* None of the buffers must have an skb attached.
|
||||||
|
*/
|
||||||
|
void efx_enqueue_unwind(struct efx_tx_queue *tx_queue,
|
||||||
|
unsigned int insert_count)
|
||||||
|
{
|
||||||
|
struct efx_tx_buffer *buffer;
|
||||||
|
unsigned int bytes_compl = 0;
|
||||||
|
unsigned int pkts_compl = 0;
|
||||||
|
|
||||||
|
/* Work backwards until we hit the original insert pointer value */
|
||||||
|
while (tx_queue->insert_count != insert_count) {
|
||||||
|
--tx_queue->insert_count;
|
||||||
|
buffer = __efx_tx_queue_get_insert_buffer(tx_queue);
|
||||||
|
efx_dequeue_buffer(tx_queue, buffer, &pkts_compl, &bytes_compl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
struct efx_tx_buffer *efx_tx_map_chunk(struct efx_tx_queue *tx_queue,
|
struct efx_tx_buffer *efx_tx_map_chunk(struct efx_tx_queue *tx_queue,
|
||||||
dma_addr_t dma_addr, size_t len)
|
dma_addr_t dma_addr, size_t len)
|
||||||
{
|
{
|
||||||
|
|
|
@ -23,6 +23,9 @@ void efx_dequeue_buffer(struct efx_tx_queue *tx_queue,
|
||||||
|
|
||||||
void efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index);
|
void efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index);
|
||||||
|
|
||||||
|
void efx_enqueue_unwind(struct efx_tx_queue *tx_queue,
|
||||||
|
unsigned int insert_count);
|
||||||
|
|
||||||
struct efx_tx_buffer *efx_tx_map_chunk(struct efx_tx_queue *tx_queue,
|
struct efx_tx_buffer *efx_tx_map_chunk(struct efx_tx_queue *tx_queue,
|
||||||
dma_addr_t dma_addr, size_t len);
|
dma_addr_t dma_addr, size_t len);
|
||||||
int efx_tx_map_data(struct efx_tx_queue *tx_queue, struct sk_buff *skb,
|
int efx_tx_map_data(struct efx_tx_queue *tx_queue, struct sk_buff *skb,
|
||||||
|
|
Loading…
Reference in a new issue