summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlok Makhariya <B46187@freescale.com>2014-03-28 12:10:01 (GMT)
committerJose Rivera <German.Rivera@freescale.com>2014-03-31 18:55:45 (GMT)
commitc98664cd2bb7dada1aaec9f037d59ac90d5e4820 (patch)
tree83617ea9c2269a9d3582c41d242a3e49301b1d6b
parent3b3793a20e6740f51683ccd392dcb6d1e435e9fa (diff)
downloadlinux-fsl-qoriq-c98664cd2bb7dada1aaec9f037d59ac90d5e4820.tar.xz
gianfar: Calling ASF specific xmit and rx_ring_cleanup functions
xmit and rx_ring_cleanup function in asf_gianfar.c are called from gianfar.c Change-Id: If44afeba7843a484cbd8c144b64e4e1cfe9fe331 CQ ID : ENGR00304852 Signed-off-by: Alok Makhariya <B46187@freescale.com> Reviewed-on: http://git.am.freescale.net:8181/10352 Reviewed-by: Rajan Gupta <rajan.gupta@freescale.com> Reviewed-by: Claudiu Manoil <claudiu.manoil@freescale.com> Tested-by: Review Code-CDREVIEW <CDREVIEW@freescale.com> Reviewed-by: Jose Rivera <German.Rivera@freescale.com>
-rw-r--r--drivers/net/ethernet/freescale/gianfar.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c
index 78e39b0..17aca73 100644
--- a/drivers/net/ethernet/freescale/gianfar.c
+++ b/drivers/net/ethernet/freescale/gianfar.c
@@ -104,6 +104,10 @@
#include "gianfar.h"
+#ifdef CONFIG_AS_FASTPATH
+#include "asf_gianfar.h"
+#endif
+
#define TX_TIMEOUT (1*HZ)
const char gfar_driver_version[] = "1.3";
@@ -154,7 +158,7 @@ MODULE_AUTHOR("Freescale Semiconductor, Inc");
MODULE_DESCRIPTION("Gianfar Ethernet Driver");
MODULE_LICENSE("GPL");
-static DEFINE_PER_CPU(struct sk_buff_head, skb_recycle_list);
+DEFINE_PER_CPU(struct sk_buff_head, skb_recycle_list);
#define GFAR_RXB_REC_SZ (DEFAULT_RX_BUFFER_SIZE + RXBUF_ALIGNMENT)
@@ -780,6 +784,11 @@ static int gfar_of_init(struct platform_device *ofdev, struct net_device **pdev)
return -EINVAL;
}
+#ifdef CONFIG_AS_FASTPATH
+ /* Creating multilple queues for avoiding lock in xmit function.*/
+ num_tx_qs = (num_tx_qs < 2) ? 2 : num_tx_qs;
+#endif
+
*pdev = alloc_etherdev_mq(sizeof(*priv), num_tx_qs);
dev = *pdev;
if (NULL == dev)
@@ -2098,6 +2107,10 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev)
u32 bufaddr;
unsigned int nr_frags, nr_txbds, bytes_sent, fcb_len = 0;
+#ifdef CONFIG_AS_FASTPATH
+ return gfar_asf_start_xmit(skb, dev);
+#endif
+
rq = skb->queue_mapping;
tx_queue = priv->tx_queue[rq];
txq = netdev_get_tx_queue(dev, rq);
@@ -2623,6 +2636,7 @@ irqreturn_t gfar_receive(int irq, void *grp_id)
return IRQ_HANDLED;
}
+EXPORT_SYMBOL(gfar_new_skb);
/* Interrupt Handler for Transmit complete */
static irqreturn_t gfar_transmit(int irq, void *grp_id)
@@ -2631,6 +2645,10 @@ static irqreturn_t gfar_transmit(int irq, void *grp_id)
unsigned long flags;
u32 imask;
+#ifdef CONFIG_AS_FASTPATH
+ return gfar_enable_tx_queue(irq, grp_id);
+#endif
+
if (likely(napi_schedule_prep(&grp->napi_tx))) {
spin_lock_irqsave(&grp->grplock, flags);
imask = gfar_read(&grp->regs->imask);
@@ -2737,6 +2755,10 @@ int gfar_clean_rx_ring(struct gfar_priv_rx_q *rx_queue, int rx_work_limit)
int howmany = 0;
struct gfar_private *priv = netdev_priv(dev);
+#ifdef CONFIG_AS_FASTPATH
+ return gfar_asf_clean_rx_ring(rx_queue, rx_work_limit);
+#endif
+
/* Get the first full descriptor */
bdp = rx_queue->cur_rx;
base = rx_queue->rx_bd_base;