Commit bf46b757 authored by Biju Das's avatar Biju Das Committed by David S. Miller
Browse files

ravb: Factorise ravb_ring_free function



R-Car uses extended descriptor in RX, whereas RZ/G2L uses normal
descriptor. Factorise ravb_ring_free function so that it can
support later SoC.

Signed-off-by: default avatarBiju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: default avatarLad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a69a3d09
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -980,6 +980,7 @@ struct ravb_ptp {
};
};


struct ravb_hw_info {
struct ravb_hw_info {
	void (*rx_ring_free)(struct net_device *ndev, int q);
	const char (*gstrings_stats)[ETH_GSTRING_LEN];
	const char (*gstrings_stats)[ETH_GSTRING_LEN];
	size_t gstrings_size;
	size_t gstrings_size;
	netdev_features_t net_hw_features;
	netdev_features_t net_hw_features;
+30 −17
Original line number Original line Diff line number Diff line
@@ -216,15 +216,15 @@ static int ravb_tx_free(struct net_device *ndev, int q, bool free_txed_only)
	return free_num;
	return free_num;
}
}


/* Free skb's and DMA buffers for Ethernet AVB */
static void ravb_rx_ring_free(struct net_device *ndev, int q)
static void ravb_ring_free(struct net_device *ndev, int q)
{
{
	struct ravb_private *priv = netdev_priv(ndev);
	struct ravb_private *priv = netdev_priv(ndev);
	unsigned int num_tx_desc = priv->num_tx_desc;
	unsigned int ring_size;
	unsigned int ring_size;
	unsigned int i;
	unsigned int i;


	if (priv->rx_ring[q]) {
	if (!priv->rx_ring[q])
		return;

	for (i = 0; i < priv->num_rx_ring[q]; i++) {
	for (i = 0; i < priv->num_rx_ring[q]; i++) {
		struct ravb_ex_rx_desc *desc = &priv->rx_ring[q][i];
		struct ravb_ex_rx_desc *desc = &priv->rx_ring[q][i];


@@ -242,6 +242,17 @@ static void ravb_ring_free(struct net_device *ndev, int q)
	priv->rx_ring[q] = NULL;
	priv->rx_ring[q] = NULL;
}
}


/* Free skb's and DMA buffers for Ethernet AVB */
static void ravb_ring_free(struct net_device *ndev, int q)
{
	struct ravb_private *priv = netdev_priv(ndev);
	const struct ravb_hw_info *info = priv->info;
	unsigned int num_tx_desc = priv->num_tx_desc;
	unsigned int ring_size;
	unsigned int i;

	info->rx_ring_free(ndev, q);

	if (priv->tx_ring[q]) {
	if (priv->tx_ring[q]) {
		ravb_tx_free(ndev, q, false);
		ravb_tx_free(ndev, q, false);


@@ -1937,6 +1948,7 @@ static int ravb_mdio_release(struct ravb_private *priv)
}
}


static const struct ravb_hw_info ravb_gen3_hw_info = {
static const struct ravb_hw_info ravb_gen3_hw_info = {
	.rx_ring_free = ravb_rx_ring_free,
	.gstrings_stats = ravb_gstrings_stats,
	.gstrings_stats = ravb_gstrings_stats,
	.gstrings_size = sizeof(ravb_gstrings_stats),
	.gstrings_size = sizeof(ravb_gstrings_stats),
	.net_hw_features = NETIF_F_RXCSUM,
	.net_hw_features = NETIF_F_RXCSUM,
@@ -1950,6 +1962,7 @@ static const struct ravb_hw_info ravb_gen3_hw_info = {
};
};


static const struct ravb_hw_info ravb_gen2_hw_info = {
static const struct ravb_hw_info ravb_gen2_hw_info = {
	.rx_ring_free = ravb_rx_ring_free,
	.gstrings_stats = ravb_gstrings_stats,
	.gstrings_stats = ravb_gstrings_stats,
	.gstrings_size = sizeof(ravb_gstrings_stats),
	.gstrings_size = sizeof(ravb_gstrings_stats),
	.net_hw_features = NETIF_F_RXCSUM,
	.net_hw_features = NETIF_F_RXCSUM,