gianfar: Introduce logical group support.
This patch introduces the group structure. The elements of this structure are the interrupt lines, their corresponding names, the register memory map. The elements for this group are factored out from the gfar_private structure. The introduction of group structure will help in providing support for newer versions of etsec. Currently, the support is present only for single group and single tx/rx queues. Signed-off-by: Sandeep Gopalpet <Sandeep.Kumar@freescale.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
a12f801d4b
commit
f4983704a6
@@ -50,6 +50,7 @@ static ssize_t gfar_set_bd_stash(struct device *dev,
|
||||
const char *buf, size_t count)
|
||||
{
|
||||
struct gfar_private *priv = netdev_priv(to_net_dev(dev));
|
||||
struct gfar __iomem *regs = priv->gfargrp.regs;
|
||||
struct gfar_priv_rx_q *rx_queue = NULL;
|
||||
int new_setting = 0;
|
||||
u32 temp;
|
||||
@@ -74,14 +75,14 @@ static ssize_t gfar_set_bd_stash(struct device *dev,
|
||||
/* Set the new stashing value */
|
||||
priv->bd_stash_en = new_setting;
|
||||
|
||||
temp = gfar_read(&priv->regs->attr);
|
||||
temp = gfar_read(®s->attr);
|
||||
|
||||
if (new_setting)
|
||||
temp |= ATTR_BDSTASH;
|
||||
else
|
||||
temp &= ~(ATTR_BDSTASH);
|
||||
|
||||
gfar_write(&priv->regs->attr, temp);
|
||||
gfar_write(®s->attr, temp);
|
||||
|
||||
spin_unlock_irqrestore(&rx_queue->rxlock, flags);
|
||||
|
||||
@@ -103,6 +104,7 @@ static ssize_t gfar_set_rx_stash_size(struct device *dev,
|
||||
const char *buf, size_t count)
|
||||
{
|
||||
struct gfar_private *priv = netdev_priv(to_net_dev(dev));
|
||||
struct gfar __iomem *regs = priv->gfargrp.regs;
|
||||
struct gfar_priv_rx_q *rx_queue = NULL;
|
||||
unsigned int length = simple_strtoul(buf, NULL, 0);
|
||||
u32 temp;
|
||||
@@ -122,20 +124,20 @@ static ssize_t gfar_set_rx_stash_size(struct device *dev,
|
||||
|
||||
priv->rx_stash_size = length;
|
||||
|
||||
temp = gfar_read(&priv->regs->attreli);
|
||||
temp = gfar_read(®s->attreli);
|
||||
temp &= ~ATTRELI_EL_MASK;
|
||||
temp |= ATTRELI_EL(length);
|
||||
gfar_write(&priv->regs->attreli, temp);
|
||||
gfar_write(®s->attreli, temp);
|
||||
|
||||
/* Turn stashing on/off as appropriate */
|
||||
temp = gfar_read(&priv->regs->attr);
|
||||
temp = gfar_read(®s->attr);
|
||||
|
||||
if (length)
|
||||
temp |= ATTR_BUFSTASH;
|
||||
else
|
||||
temp &= ~(ATTR_BUFSTASH);
|
||||
|
||||
gfar_write(&priv->regs->attr, temp);
|
||||
gfar_write(®s->attr, temp);
|
||||
|
||||
out:
|
||||
spin_unlock_irqrestore(&rx_queue->rxlock, flags);
|
||||
@@ -161,6 +163,7 @@ static ssize_t gfar_set_rx_stash_index(struct device *dev,
|
||||
const char *buf, size_t count)
|
||||
{
|
||||
struct gfar_private *priv = netdev_priv(to_net_dev(dev));
|
||||
struct gfar __iomem *regs = priv->gfargrp.regs;
|
||||
struct gfar_priv_rx_q *rx_queue = NULL;
|
||||
unsigned short index = simple_strtoul(buf, NULL, 0);
|
||||
u32 temp;
|
||||
@@ -180,10 +183,10 @@ static ssize_t gfar_set_rx_stash_index(struct device *dev,
|
||||
|
||||
priv->rx_stash_index = index;
|
||||
|
||||
temp = gfar_read(&priv->regs->attreli);
|
||||
temp = gfar_read(®s->attreli);
|
||||
temp &= ~ATTRELI_EI_MASK;
|
||||
temp |= ATTRELI_EI(index);
|
||||
gfar_write(&priv->regs->attreli, flags);
|
||||
gfar_write(®s->attreli, flags);
|
||||
|
||||
out:
|
||||
spin_unlock_irqrestore(&rx_queue->rxlock, flags);
|
||||
@@ -208,6 +211,7 @@ static ssize_t gfar_set_fifo_threshold(struct device *dev,
|
||||
const char *buf, size_t count)
|
||||
{
|
||||
struct gfar_private *priv = netdev_priv(to_net_dev(dev));
|
||||
struct gfar __iomem *regs = priv->gfargrp.regs;
|
||||
struct gfar_priv_tx_q *tx_queue = NULL;
|
||||
unsigned int length = simple_strtoul(buf, NULL, 0);
|
||||
u32 temp;
|
||||
@@ -222,10 +226,10 @@ static ssize_t gfar_set_fifo_threshold(struct device *dev,
|
||||
|
||||
priv->fifo_threshold = length;
|
||||
|
||||
temp = gfar_read(&priv->regs->fifo_tx_thr);
|
||||
temp = gfar_read(®s->fifo_tx_thr);
|
||||
temp &= ~FIFO_TX_THR_MASK;
|
||||
temp |= length;
|
||||
gfar_write(&priv->regs->fifo_tx_thr, temp);
|
||||
gfar_write(®s->fifo_tx_thr, temp);
|
||||
|
||||
spin_unlock_irqrestore(&tx_queue->txlock, flags);
|
||||
|
||||
@@ -248,6 +252,7 @@ static ssize_t gfar_set_fifo_starve(struct device *dev,
|
||||
const char *buf, size_t count)
|
||||
{
|
||||
struct gfar_private *priv = netdev_priv(to_net_dev(dev));
|
||||
struct gfar __iomem *regs = priv->gfargrp.regs;
|
||||
struct gfar_priv_tx_q *tx_queue = NULL;
|
||||
unsigned int num = simple_strtoul(buf, NULL, 0);
|
||||
u32 temp;
|
||||
@@ -261,10 +266,10 @@ static ssize_t gfar_set_fifo_starve(struct device *dev,
|
||||
|
||||
priv->fifo_starve = num;
|
||||
|
||||
temp = gfar_read(&priv->regs->fifo_tx_starve);
|
||||
temp = gfar_read(®s->fifo_tx_starve);
|
||||
temp &= ~FIFO_TX_STARVE_MASK;
|
||||
temp |= num;
|
||||
gfar_write(&priv->regs->fifo_tx_starve, temp);
|
||||
gfar_write(®s->fifo_tx_starve, temp);
|
||||
|
||||
spin_unlock_irqrestore(&tx_queue->txlock, flags);
|
||||
|
||||
@@ -288,6 +293,7 @@ static ssize_t gfar_set_fifo_starve_off(struct device *dev,
|
||||
const char *buf, size_t count)
|
||||
{
|
||||
struct gfar_private *priv = netdev_priv(to_net_dev(dev));
|
||||
struct gfar __iomem *regs = priv->gfargrp.regs;
|
||||
struct gfar_priv_tx_q *tx_queue = NULL;
|
||||
unsigned int num = simple_strtoul(buf, NULL, 0);
|
||||
u32 temp;
|
||||
@@ -301,10 +307,10 @@ static ssize_t gfar_set_fifo_starve_off(struct device *dev,
|
||||
|
||||
priv->fifo_starve_off = num;
|
||||
|
||||
temp = gfar_read(&priv->regs->fifo_tx_starve_shutoff);
|
||||
temp = gfar_read(®s->fifo_tx_starve_shutoff);
|
||||
temp &= ~FIFO_TX_STARVE_OFF_MASK;
|
||||
temp |= num;
|
||||
gfar_write(&priv->regs->fifo_tx_starve_shutoff, temp);
|
||||
gfar_write(®s->fifo_tx_starve_shutoff, temp);
|
||||
|
||||
spin_unlock_irqrestore(&tx_queue->txlock, flags);
|
||||
|
||||
|
Reference in New Issue
Block a user