gve: Move some static functions to a common file
These functions will be shared by the GQI and DQO variants of the GVNIC driver as of follow-up patches in this series. Signed-off-by: Bailey Forrest <bcf@google.com> Reviewed-by: Willem de Bruijn <willemb@google.com> Reviewed-by: Catherine Sullivan <csully@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
c6a7ed77ee
commit
dbdaa67540
@ -1,4 +1,4 @@
|
||||
# Makefile for the Google virtual Ethernet (gve) driver
|
||||
|
||||
obj-$(CONFIG_GVE) += gve.o
|
||||
gve-objs := gve_main.o gve_tx.o gve_rx.o gve_ethtool.o gve_adminq.o
|
||||
gve-objs := gve_main.o gve_tx.o gve_rx.o gve_ethtool.o gve_adminq.o gve_utils.o
|
||||
|
@ -1,21 +1,14 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0 OR MIT)
|
||||
/* Google virtual Ethernet (gve) driver
|
||||
*
|
||||
* Copyright (C) 2015-2019 Google, Inc.
|
||||
* Copyright (C) 2015-2021 Google, Inc.
|
||||
*/
|
||||
|
||||
#include "gve.h"
|
||||
#include "gve_adminq.h"
|
||||
#include "gve_utils.h"
|
||||
#include <linux/etherdevice.h>
|
||||
|
||||
static void gve_rx_remove_from_block(struct gve_priv *priv, int queue_idx)
|
||||
{
|
||||
struct gve_notify_block *block =
|
||||
&priv->ntfy_blocks[gve_rx_idx_to_ntfy(priv, queue_idx)];
|
||||
|
||||
block->rx = NULL;
|
||||
}
|
||||
|
||||
static void gve_rx_free_buffer(struct device *dev,
|
||||
struct gve_rx_slot_page_info *page_info,
|
||||
union gve_rx_data_slot *data_slot)
|
||||
@ -137,16 +130,6 @@ alloc_err:
|
||||
return err;
|
||||
}
|
||||
|
||||
static void gve_rx_add_to_block(struct gve_priv *priv, int queue_idx)
|
||||
{
|
||||
u32 ntfy_idx = gve_rx_idx_to_ntfy(priv, queue_idx);
|
||||
struct gve_notify_block *block = &priv->ntfy_blocks[ntfy_idx];
|
||||
struct gve_rx_ring *rx = &priv->rx[queue_idx];
|
||||
|
||||
block->rx = rx;
|
||||
rx->ntfy_id = ntfy_idx;
|
||||
}
|
||||
|
||||
static int gve_rx_alloc_ring(struct gve_priv *priv, int idx)
|
||||
{
|
||||
struct gve_rx_ring *rx = &priv->rx[idx];
|
||||
@ -279,27 +262,6 @@ static enum pkt_hash_types gve_rss_type(__be16 pkt_flags)
|
||||
return PKT_HASH_TYPE_L2;
|
||||
}
|
||||
|
||||
static struct sk_buff *gve_rx_copy(struct net_device *dev,
|
||||
struct napi_struct *napi,
|
||||
struct gve_rx_slot_page_info *page_info,
|
||||
u16 len)
|
||||
{
|
||||
struct sk_buff *skb = napi_alloc_skb(napi, len);
|
||||
void *va = page_info->page_address + GVE_RX_PAD +
|
||||
(page_info->page_offset ? PAGE_SIZE / 2 : 0);
|
||||
|
||||
if (unlikely(!skb))
|
||||
return NULL;
|
||||
|
||||
__skb_put(skb, len);
|
||||
|
||||
skb_copy_to_linear_data(skb, va, len);
|
||||
|
||||
skb->protocol = eth_type_trans(skb, dev);
|
||||
|
||||
return skb;
|
||||
}
|
||||
|
||||
static struct sk_buff *gve_rx_add_frags(struct napi_struct *napi,
|
||||
struct gve_rx_slot_page_info *page_info,
|
||||
u16 len)
|
||||
|
@ -1,11 +1,12 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0 OR MIT)
|
||||
/* Google virtual Ethernet (gve) driver
|
||||
*
|
||||
* Copyright (C) 2015-2019 Google, Inc.
|
||||
* Copyright (C) 2015-2021 Google, Inc.
|
||||
*/
|
||||
|
||||
#include "gve.h"
|
||||
#include "gve_adminq.h"
|
||||
#include "gve_utils.h"
|
||||
#include <linux/ip.h>
|
||||
#include <linux/tcp.h>
|
||||
#include <linux/vmalloc.h>
|
||||
@ -131,14 +132,6 @@ static void gve_tx_free_fifo(struct gve_tx_fifo *fifo, size_t bytes)
|
||||
atomic_add(bytes, &fifo->available);
|
||||
}
|
||||
|
||||
static void gve_tx_remove_from_block(struct gve_priv *priv, int queue_idx)
|
||||
{
|
||||
struct gve_notify_block *block =
|
||||
&priv->ntfy_blocks[gve_tx_idx_to_ntfy(priv, queue_idx)];
|
||||
|
||||
block->tx = NULL;
|
||||
}
|
||||
|
||||
static int gve_clean_tx_done(struct gve_priv *priv, struct gve_tx_ring *tx,
|
||||
u32 to_do, bool try_to_wake);
|
||||
|
||||
@ -174,16 +167,6 @@ static void gve_tx_free_ring(struct gve_priv *priv, int idx)
|
||||
netif_dbg(priv, drv, priv->dev, "freed tx queue %d\n", idx);
|
||||
}
|
||||
|
||||
static void gve_tx_add_to_block(struct gve_priv *priv, int queue_idx)
|
||||
{
|
||||
int ntfy_idx = gve_tx_idx_to_ntfy(priv, queue_idx);
|
||||
struct gve_notify_block *block = &priv->ntfy_blocks[ntfy_idx];
|
||||
struct gve_tx_ring *tx = &priv->tx[queue_idx];
|
||||
|
||||
block->tx = tx;
|
||||
tx->ntfy_id = ntfy_idx;
|
||||
}
|
||||
|
||||
static int gve_tx_alloc_ring(struct gve_priv *priv, int idx)
|
||||
{
|
||||
struct gve_tx_ring *tx = &priv->tx[idx];
|
||||
|
65
drivers/net/ethernet/google/gve/gve_utils.c
Normal file
65
drivers/net/ethernet/google/gve/gve_utils.c
Normal file
@ -0,0 +1,65 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0 OR MIT)
|
||||
/* Google virtual Ethernet (gve) driver
|
||||
*
|
||||
* Copyright (C) 2015-2021 Google, Inc.
|
||||
*/
|
||||
|
||||
#include "gve.h"
|
||||
#include "gve_adminq.h"
|
||||
#include "gve_utils.h"
|
||||
|
||||
void gve_tx_remove_from_block(struct gve_priv *priv, int queue_idx)
|
||||
{
|
||||
struct gve_notify_block *block =
|
||||
&priv->ntfy_blocks[gve_tx_idx_to_ntfy(priv, queue_idx)];
|
||||
|
||||
block->tx = NULL;
|
||||
}
|
||||
|
||||
void gve_tx_add_to_block(struct gve_priv *priv, int queue_idx)
|
||||
{
|
||||
int ntfy_idx = gve_tx_idx_to_ntfy(priv, queue_idx);
|
||||
struct gve_notify_block *block = &priv->ntfy_blocks[ntfy_idx];
|
||||
struct gve_tx_ring *tx = &priv->tx[queue_idx];
|
||||
|
||||
block->tx = tx;
|
||||
tx->ntfy_id = ntfy_idx;
|
||||
}
|
||||
|
||||
void gve_rx_remove_from_block(struct gve_priv *priv, int queue_idx)
|
||||
{
|
||||
struct gve_notify_block *block =
|
||||
&priv->ntfy_blocks[gve_rx_idx_to_ntfy(priv, queue_idx)];
|
||||
|
||||
block->rx = NULL;
|
||||
}
|
||||
|
||||
void gve_rx_add_to_block(struct gve_priv *priv, int queue_idx)
|
||||
{
|
||||
u32 ntfy_idx = gve_rx_idx_to_ntfy(priv, queue_idx);
|
||||
struct gve_notify_block *block = &priv->ntfy_blocks[ntfy_idx];
|
||||
struct gve_rx_ring *rx = &priv->rx[queue_idx];
|
||||
|
||||
block->rx = rx;
|
||||
rx->ntfy_id = ntfy_idx;
|
||||
}
|
||||
|
||||
struct sk_buff *gve_rx_copy(struct net_device *dev, struct napi_struct *napi,
|
||||
struct gve_rx_slot_page_info *page_info, u16 len)
|
||||
{
|
||||
struct sk_buff *skb = napi_alloc_skb(napi, len);
|
||||
void *va = page_info->page_address + GVE_RX_PAD +
|
||||
(page_info->page_offset ? PAGE_SIZE / 2 : 0);
|
||||
|
||||
if (unlikely(!skb))
|
||||
return NULL;
|
||||
|
||||
__skb_put(skb, len);
|
||||
|
||||
skb_copy_to_linear_data(skb, va, len);
|
||||
|
||||
skb->protocol = eth_type_trans(skb, dev);
|
||||
|
||||
return skb;
|
||||
}
|
||||
|
24
drivers/net/ethernet/google/gve/gve_utils.h
Normal file
24
drivers/net/ethernet/google/gve/gve_utils.h
Normal file
@ -0,0 +1,24 @@
|
||||
/* SPDX-License-Identifier: (GPL-2.0 OR MIT)
|
||||
* Google virtual Ethernet (gve) driver
|
||||
*
|
||||
* Copyright (C) 2015-2021 Google, Inc.
|
||||
*/
|
||||
|
||||
#ifndef _GVE_UTILS_H
|
||||
#define _GVE_UTILS_H
|
||||
|
||||
#include <linux/etherdevice.h>
|
||||
|
||||
#include "gve.h"
|
||||
|
||||
void gve_tx_remove_from_block(struct gve_priv *priv, int queue_idx);
|
||||
void gve_tx_add_to_block(struct gve_priv *priv, int queue_idx);
|
||||
|
||||
void gve_rx_remove_from_block(struct gve_priv *priv, int queue_idx);
|
||||
void gve_rx_add_to_block(struct gve_priv *priv, int queue_idx);
|
||||
|
||||
struct sk_buff *gve_rx_copy(struct net_device *dev, struct napi_struct *napi,
|
||||
struct gve_rx_slot_page_info *page_info, u16 len);
|
||||
|
||||
#endif /* _GVE_UTILS_H */
|
||||
|
Loading…
x
Reference in New Issue
Block a user