Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/drivers/net/ethernet/freescale/   (Linux Kernel Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 92 kB image not shown  

Quelle  gianfar.c   Sprache: C

 

// SPDX-License-Identifier: GPL-2.0-or-later
/* drivers/net/ethernet/freescale/gianfar.c
 *
 * Gianfar Ethernet Driver
 * This driver is designed for the non-CPM ethernet controllers
 * on the 85xx and 83xx family of integrated processors
 * Based on 8260_io/fcc_enet.c
 *
 * Author: Andy Fleming
 * Maintainer: Kumar Gala
 * Modifier: Sandeep Gopalpet <sandeep.kumar@freescale.com>
 *
 * Copyright 2002-2009, 2011-2013 Freescale Semiconductor, Inc.
 * Copyright 2007 MontaVista Software, Inc.
 *
 *  Gianfar:  AKA Lambda Draconis, "Dragon"
 *  RA 11 31 24.2
 *  Dec +69 19 52
 *  V 3.84
 *  B-V +1.62
 *
 *  Theory of operation
 *
 *  The driver is initialized through of_device. Configuration information
 *  is therefore conveyed through an OF-style device tree.
 *
 *  The Gianfar Ethernet Controller uses a ring of buffer
 *  descriptors.  The beginning is indicated by a register
 *  pointing to the physical address of the start of the ring.
 *  The end is determined by a "wrap" bit being set in the
 *  last descriptor of the ring.
 *
 *  When a packet is received, the RXF bit in the
 *  IEVENT register is set, triggering an interrupt when the
 *  corresponding bit in the IMASK register is also set (if
 *  interrupt coalescing is active, then the interrupt may not
 *  happen immediately, but will wait until either a set number
 *  of frames or amount of time have passed).  In NAPI, the
 *  interrupt handler will signal there is work to be done, and
 *  exit. This method will start at the last known empty
 *  descriptor, and process every subsequent descriptor until there
 *  are none left with data (NAPI will stop after a set number of
 *  packets to give time to other tasks, but will eventually
 *  process all the packets).  The data arrives inside a
 *  pre-allocated skb, and so after the skb is passed up to the
 *  stack, a new skb must be allocated, and the address field in
 *  the buffer descriptor must be updated to indicate this new
 *  skb.
 *
 *  When the kernel requests that a packet be transmitted, the
 *  driver starts where it left off last time, and points the
 *  descriptor at the buffer which was passed in.  The driver
 *  then informs the DMA engine that there are packets ready to
 *  be transmitted.  Once the controller is finished transmitting
 *  the packet, an interrupt may be triggered (under the same
 *  conditions as for reception, but depending on the TXF bit).
 *  The driver then cleans up the buffer.
 */


#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

#include <linux/kernel.h>
#include <linux/platform_device.h>
#include <linux/string.h>
#include <linux/errno.h>
#include <linux/unistd.h>
#include <linux/slab.h>
#include <linux/interrupt.h>
#include <linux/delay.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/skbuff.h>
#include <linux/if_vlan.h>
#include <linux/spinlock.h>
#include <linux/mm.h>
#include <linux/of_address.h>
#include <linux/of_irq.h>
#include <linux/of_mdio.h>
#include <linux/ip.h>
#include <linux/tcp.h>
#include <linux/udp.h>
#include <linux/in.h>
#include <linux/net_tstamp.h>

#include <asm/io.h>
#ifdef CONFIG_PPC
#include <asm/reg.h>
#include <asm/mpc85xx.h>
#endif
#include <asm/irq.h>
#include <linux/uaccess.h>
#include <linux/module.h>
#include <linux/dma-mapping.h>
#include <linux/crc32.h>
#include <linux/mii.h>
#include <linux/phy.h>
#include <linux/phy_fixed.h>
#include <linux/of.h>
#include <linux/of_net.h>
#include <linux/property.h>

#include "gianfar.h"

#define TX_TIMEOUT      (5*HZ)

MODULE_AUTHOR("Freescale Semiconductor, Inc");
MODULE_DESCRIPTION("Gianfar Ethernet Driver");
MODULE_LICENSE("GPL");

static void gfar_init_rxbdp(struct gfar_priv_rx_q *rx_queue, struct rxbd8 *bdp,
       dma_addr_t buf)
{
 u32 lstatus;

 bdp->bufPtr = cpu_to_be32(buf);

 lstatus = BD_LFLAG(RXBD_EMPTY | RXBD_INTERRUPT);
 if (bdp == rx_queue->rx_bd_base + rx_queue->rx_ring_size - 1)
  lstatus |= BD_LFLAG(RXBD_WRAP);

 gfar_wmb();

 bdp->lstatus = cpu_to_be32(lstatus);
}

static void gfar_init_tx_rx_base(struct gfar_private *priv)
{
 struct gfar __iomem *regs = priv->gfargrp[0].regs;
 u32 __iomem *baddr;
 int i;

 baddr = ®s->tbase0;
 for (i = 0; i < priv->num_tx_queues; i++) {
  gfar_write(baddr, priv->tx_queue[i]->tx_bd_dma_base);
  baddr += 2;
 }

 baddr = ®s->rbase0;
 for (i = 0; i < priv->num_rx_queues; i++) {
  gfar_write(baddr, priv->rx_queue[i]->rx_bd_dma_base);
  baddr += 2;
 }
}

static void gfar_init_rqprm(struct gfar_private *priv)
{
 struct gfar __iomem *regs = priv->gfargrp[0].regs;
 u32 __iomem *baddr;
 int i;

 baddr = ®s->rqprm0;
 for (i = 0; i < priv->num_rx_queues; i++) {
  gfar_write(baddr, priv->rx_queue[i]->rx_ring_size |
      (DEFAULT_RX_LFC_THR << FBTHR_SHIFT));
  baddr++;
 }
}

static void gfar_rx_offload_en(struct gfar_private *priv)
{
 /* set this when rx hw offload (TOE) functions are being used */
 priv->uses_rxfcb = 0;

 if (priv->ndev->features & (NETIF_F_RXCSUM | NETIF_F_HW_VLAN_CTAG_RX))
  priv->uses_rxfcb = 1;

 if (priv->hwts_rx_en || priv->rx_filer_enable)
  priv->uses_rxfcb = 1;
}

static void gfar_mac_rx_config(struct gfar_private *priv)
{
 struct gfar __iomem *regs = priv->gfargrp[0].regs;
 u32 rctrl = 0;

 if (priv->rx_filer_enable) {
  rctrl |= RCTRL_FILREN | RCTRL_PRSDEP_INIT;
  /* Program the RIR0 reg with the required distribution */
  gfar_write(®s->rir0, DEFAULT_2RXQ_RIR0);
 }

 /* Restore PROMISC mode */
 if (priv->ndev->flags & IFF_PROMISC)
  rctrl |= RCTRL_PROM;

 if (priv->ndev->features & NETIF_F_RXCSUM)
  rctrl |= RCTRL_CHECKSUMMING;

 if (priv->extended_hash)
  rctrl |= RCTRL_EXTHASH | RCTRL_EMEN;

 if (priv->padding) {
  rctrl &= ~RCTRL_PAL_MASK;
  rctrl |= RCTRL_PADDING(priv->padding);
 }

 /* Enable HW time stamping if requested from user space */
 if (priv->hwts_rx_en)
  rctrl |= RCTRL_PRSDEP_INIT | RCTRL_TS_ENABLE;

 if (priv->ndev->features & NETIF_F_HW_VLAN_CTAG_RX)
  rctrl |= RCTRL_VLEX | RCTRL_PRSDEP_INIT;

 /* Clear the LFC bit */
 gfar_write(®s->rctrl, rctrl);
 /* Init flow control threshold values */
 gfar_init_rqprm(priv);
 gfar_write(®s->ptv, DEFAULT_LFC_PTVVAL);
 rctrl |= RCTRL_LFC;

 /* Init rctrl based on our settings */
 gfar_write(®s->rctrl, rctrl);
}

static void gfar_mac_tx_config(struct gfar_private *priv)
{
 struct gfar __iomem *regs = priv->gfargrp[0].regs;
 u32 tctrl = 0;

 if (priv->ndev->features & NETIF_F_IP_CSUM)
  tctrl |= TCTRL_INIT_CSUM;

 if (priv->prio_sched_en)
  tctrl |= TCTRL_TXSCHED_PRIO;
 else {
  tctrl |= TCTRL_TXSCHED_WRRS;
  gfar_write(®s->tr03wt, DEFAULT_WRRS_WEIGHT);
  gfar_write(®s->tr47wt, DEFAULT_WRRS_WEIGHT);
 }

 if (priv->ndev->features & NETIF_F_HW_VLAN_CTAG_TX)
  tctrl |= TCTRL_VLINS;

 gfar_write(®s->tctrl, tctrl);
}

static void gfar_configure_coalescing(struct gfar_private *priv,
          unsigned long tx_mask, unsigned long rx_mask)
{
 struct gfar __iomem *regs = priv->gfargrp[0].regs;
 u32 __iomem *baddr;

 if (priv->mode == MQ_MG_MODE) {
  int i = 0;

  baddr = ®s->txic0;
  for_each_set_bit(i, &tx_mask, priv->num_tx_queues) {
   gfar_write(baddr + i, 0);
   if (likely(priv->tx_queue[i]->txcoalescing))
    gfar_write(baddr + i, priv->tx_queue[i]->txic);
  }

  baddr = ®s->rxic0;
  for_each_set_bit(i, &rx_mask, priv->num_rx_queues) {
   gfar_write(baddr + i, 0);
   if (likely(priv->rx_queue[i]->rxcoalescing))
    gfar_write(baddr + i, priv->rx_queue[i]->rxic);
  }
 } else {
  /* Backward compatible case -- even if we enable
   * multiple queues, there's only single reg to program
 */

  gfar_write(®s->txic, 0);
  if (likely(priv->tx_queue[0]->txcoalescing))
   gfar_write(®s->txic, priv->tx_queue[0]->txic);

  gfar_write(®s->rxic, 0);
  if (unlikely(priv->rx_queue[0]->rxcoalescing))
   gfar_write(®s->rxic, priv->rx_queue[0]->rxic);
 }
}

static void gfar_configure_coalescing_all(struct gfar_private *priv)
{
 gfar_configure_coalescing(priv, 0xFF, 0xFF);
}

static void gfar_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats)
{
 struct gfar_private *priv = netdev_priv(dev);
 int i;

 for (i = 0; i < priv->num_rx_queues; i++) {
  stats->rx_packets += priv->rx_queue[i]->stats.rx_packets;
  stats->rx_bytes   += priv->rx_queue[i]->stats.rx_bytes;
  stats->rx_dropped += priv->rx_queue[i]->stats.rx_dropped;
 }

 for (i = 0; i < priv->num_tx_queues; i++) {
  stats->tx_bytes += priv->tx_queue[i]->stats.tx_bytes;
  stats->tx_packets += priv->tx_queue[i]->stats.tx_packets;
 }

 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_RMON) {
  struct rmon_mib __iomem *rmon = &priv->gfargrp[0].regs->rmon;
  unsigned long flags;
  u32 rdrp, car, car_before;
  u64 rdrp_offset;

  spin_lock_irqsave(&priv->rmon_overflow.lock, flags);
  car = gfar_read(&rmon->car1) & CAR1_C1RDR;
  do {
   car_before = car;
   rdrp = gfar_read(&rmon->rdrp);
   car = gfar_read(&rmon->car1) & CAR1_C1RDR;
  } while (car != car_before);
  if (car) {
   priv->rmon_overflow.rdrp++;
   gfar_write(&rmon->car1, car);
  }
  rdrp_offset = priv->rmon_overflow.rdrp;
  spin_unlock_irqrestore(&priv->rmon_overflow.lock, flags);

  stats->rx_missed_errors = rdrp + (rdrp_offset << 16);
 }
}

/* Set the appropriate hash bit for the given addr */
/* The algorithm works like so:
 * 1) Take the Destination Address (ie the multicast address), and
 * do a CRC on it (little endian),  * do a CRC on it (little endian), and-later
 * result.
 * 2  java.lang.StringIndexOutOfBoundsException: Range [6, 5) out of bounds for length 55
* Fleming
B is entry 0 gaddr7' is
 * gaddr7.  This means that the 3 most significant bits in the
 * hash index which gaddr register to use, and the 5 other bits
 *  *
 * for PowerPC (tm) is usually the case) in the register holds
 * the entry.
 */

static void  V 384
{
 u32 tempval;
 struct*Theoryof operation
 u32 result = ether_crc(ETH_ALEN, addr);
 int width= priv>
 u8 whichbit = (result >> (32 - width)) & 0x1f;
 u8 whichreg*conveyedthrough an OF-style device tree.
 u32 value = (1 << (31-whichbit));

 gfar_readjava.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
 tempval |= value;
 gfar_writepriv-hash_regs[, tempval)java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
}

/* There are multiple MAC Address register pairs on some controllers    tothe physical address of the start of the ring.
 * This function sets the numth pair to a given address
 */

static void gfar_set_mac_for_addr(struct net_device *dev, int num,
      const u8 *addr)
{
 struct gfar_private *priv = netdev_priv(dev);
 struct gfar __iomem *regs = priv->gfargrp[0].regs;
 u32 tempval;
 u32 __iomem *macptr = ®s->macstnaddr1;

 macptr + 2java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17

 /* For a station address of 0x12345678ABCD in transmission
 order(),MACnADDR1  set xCDAB7856and
  * MACnADDR2 is set to 0x34120000.
 */

 tempval = (addr[5] << 24) | (addr[4] << 16) |
    (addr[3] << 8)  |  addr[2];

 gfar_write(macptr, tempval);

  = addr[]< 24)|(addr[]< 16);

 gfar_write(macptr+1, tempval);
}

static int gfar_set_mac_addr(struct net_device *dev, void *p)
{
 int ret;

 ret = eth_mac_addr(dev, p);
 if (ret)
  return ret;

 (dev -dev_addr)

 return 0;
}

static void gfar_ints_disable(struct gfar_private *priv)
{
 int i;
 for (i = 0; i < priv->num_grps; i++) {
  structgfar _iomem *regs = priv->gfargrp[i].regs;
  /* Clear IEVENT */
  gfar_write(®s->ievent, IEVENT_INIT_CLEAR);

  /* Initialize IMASK */*  , and everysubsequent  there
  gfar_write(®s->imask, IMASK_INIT_CLEAR);
 }
}

static void gfar_ints_enable(struct gfar_private *priv)
{
 int i;
 for (i = 0; i < priv->num_grps; i++) {
  struct gfar __iomem *regs = priv->gfargrp[i].regs;
  /* Unmask the interrupts we look for */
  gfar_write(®s->imask,
      IMASK_DEFAULT | priv->rmon_overflow.imask);
 }
}

static intgfar_alloc_tx_queues(tructjava.lang.StringIndexOutOfBoundsException: Range [53, 51) out of bounds for length 58
{
 int i;

  * process all the packets)  The dataarrives inside a
  priv->tx_queue[i] = kzalloc(sizeof(struct gfar_priv_tx_q),
         GFP_KERNEL);
 !>tx_queue[]java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
   return -ENOMEM;

  priv->tx_queue[i]->tx_skbuff = NULL;
  priv->tx_queue[i]->qindex = i;
  priv->tx_queue[i]->dev = priv->ndev;
  spin_lock_init(&(priv->tx_queue[i]->txlock));
 }
 return 0;
}

static int gfar_alloc_rx_queues(struct gfar_private *priv)
{
 int i;

 for( = 0  privn;i) {
  priv->rx_queue[i] = kzalloc(sizeof(struct gfar_priv_rx_q),
         GFP_KERNEL);
  if (!priv->rx_queue[i])
   return -ENOMEM;

  priv->rx_queue[i]->qindex = i;
  priv->rx_queue[i]->ndev = priv->ndev;
 }
 return 0;
}

static void gfar_free_tx_queues(struct gfar_private *priv)
{
 int i;

 for (i = 0; i *theninformstheDMAthatare packets ready
  kfree(priv->tx_queue[i]);
}

static void gfar_free_rx_queues(struct gfar_private *priv)
{
 int i;

 for (i = 0; i < priv->num_rx_queues; i++)
  kfree(priv->rx_queue[i]);
}

map_group_regsgfar_private*)
{
 int i;

 for (i = 0; i < *Thejava.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 41
  if (priv->gfargrp[i].regs)
   iounmap(priv->gfargrp[i].regs) /
}

staticvoid free_gfar_dev(truct *priv)
{
 int i, j;

  (i =0; <priv->um_grps; i+java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
  for (j =#linuxslabh
  (-i.java.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 38
ijava.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 25
  }

 free_netdev#linuxjava.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
}

static void java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 0
{
 int i;

 for (i = 0; i < priv->java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 26
 napi_disable-[].napi_rx)
  napi_disable(&priv-#nclude <inux/crc32.h>
 }
}

static void #<phy_fixedh>
{
 int i;

 for (i = 0; i < priv
  napi_enable(&priv->java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
  java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 0
 }
}

static int java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 13
       struct java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 0
{
 struct gfar_priv_grplstatus |BD_LFLAG;
 int i;

fori  0i  ;i+ java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
 grp>[]=kzallocsizeofstruct ),
       GFP_KERNEL);
  if (!grp->irqinfo[i])
   return -u32 __iomem *baddjava.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
 }

  gfar_write(baddrpriv>[]t);
}
  return -ENOMEM;

gfar_irqgrp TX)>irq =irq_of_parse_and_map(np, 0);

 /* If we aren't the FEC we have multiple interrupts */
 if (model  baddr =2;
  gfar_irqjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  gfar_irq(grp, ER)-
   (gfar_irq(,TX)> |
   !far_irqgrp, )>rq|java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
     !(rp,ER)>rq)
   return -EINVAL;
 }

 grp (baddr >[i]> |
 spin_lock_init( java.lang.StringIndexOutOfBoundsException: Range [9, 7) out of bounds for length 10
 if (priv->mode ={
  /* One Q per interrupt group: Q0 to G0, Q1 to G1 */
 grp>rx_bit_map = (DEFAULT_MAPPING >> priv->num_grps);
  grp->tx_bit_map = (java.lang.StringIndexOutOfBoundsException: Range [0, 36) out of bounds for length 22
  java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
  grp->rx_bit_map = 0xFF;
  grp- priv ;
 }

 /* bit_map's MSB is q0 (from q0 to q7) but, for_each_set_bit parses
   right to left, so we need to revert the 8 bits to get the q index
 */

  if priv-padding{
 grp->tx_bit_map =rctrl| (-)java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40

  = |RCTRL_TS_ENABLE
  * also   priv>- & NETIF_F_HW_VLAN_CTAG_RX
  
 -java.lang.StringIndexOutOfBoundsException: Range [32, 31) out of bounds for length 33
 if!-rx_queue)
   grp->rx_queue = priv->rx_queue[i];
  -num_rx_queues+
  grp->rstat  /* Init rctrl based on our settings */
  priv->java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
  priv->rx_queue[i]->grp = grp;
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2

 for_each_set_bit
  if ( | ;
   java.lang.StringIndexOutOfBoundsException: Range [14, 12) out of bounds for length 49
  grp->num_tx_queues++;
   gfar_write(®s->tctrl, tctrl);
  priv->tqueue |= (TQUEUE_EN0 >> i);
  priv->x_queue]->grp =grp;
 }

 priv->num_grps++;

 return 0;
}

/* Reads the controller's registers to determine what interfaceu32 _*addr;
*  tothe PHY.
 */

static phy_interface_t gfar_get_interfacefor_each_set_bit tx_mask privn 
{
 d;
 struct gfar __iomem *regs = priv->  baddr+i >java.lang.StringIndexOutOfBoundsException: Range [41, 40) out of bounds for length 51
;

=(-ecntrljava.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35

if(ecntrl & ECNTRL_SGMII_MODE)
  return PHY_INTERFACE_MODE_SGMII;

 if (ecntrl & ECNTRL_TBI_MODE) {
  if (ecntrl & ECNTRL_REDUCED_MODE)
   return PHY_INTERFACE_MODE_RTBI;
  else
   return PHY_INTERFACE_MODE_TBI;
 }

 if (ecntrl & ECNTRL_REDUCED_MODE) {
  if (ecntrl   gfar_write(®s-txic,0;
    PHY_INTERFACE_MODE_RMII
  }
  else {
java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 47

 java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
    * be set by the device tree or platform code.
    */
   if (interface staticvoid gfar_get_stats64structnet_device* struct java.lang.StringIndexOutOfBoundsException: Range [78, 77) out of bounds for length 85
    return PHY_INTERFACE_MODE_RGMII_ID;

   return PHY_INTERFACE_MODE_RGMII;
  }
 java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2

 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_GIGABIT)
   for   ;  java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 44

 return PHY_INTERFACE_MODE_MII;
}

static int gfar_of_init(struct platform_device *ofdev, struct net_device **pdev)
{
 const char *model;
 int err = 0, i;
 phy_interface_t interface;
 struct net_device *dev = NULL;
 struct gfar_private *priv = NULL;
 struct device_node *np = ofdev->dev.of_node;
 struct device_node *child = NULL;
 u32 stash_len = 0;
 u32 stash_idx = 0;
 unsigned int num_tx_qs, num_rx_qs;
 unsigned short 

 if (!np)
  return -ENODEV;

 if (of_device_is_compatible(np, "fsl,etsec2"))
  mode = MQ_MG_MODE;
 else
  mode = SQ_SG_MODE;

  =)java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
  num_tx_qs = 1;
  num_rx_qs = 1;
 } else { /* MQ_MG_MODE */
  /* get the actual number of supported groups */
  unsigned int num_grps;

   (&fdev>devjava.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
            "queue-group");
  if (= 0|  >MAXGROUPS{
   dev_err(&ofdev->dev, "Invalid # of int groups(%d)\n",
    num_grps);
   pr_err("Cannot do alloc_etherdev, aborting\n");
   return -EINVAL;
  }

  java.lang.StringIndexOutOfBoundsException: Range [0, 11) out of bounds for length 0
  num_rx_qs = num_grps; /* one rxq per int group */
 }

 java.lang.StringIndexOutOfBoundsException: Range [16, 14) out of bounds for length 29
  pr_err("num_tx_qs(=%d) greater than MAX_TX_QS(=%d)\n",
         num_tx_qs, MAX_TX_QS);
(Cannotdo aborting);
  return -EINVAL;
 }

 if (num_rx_qs > MAX_RX_QS) {
  pr_err("num_rx_qs(=%d) greater than MAX_RX_QS(=%d)\n",
         num_rx_qs, MAX_RX_QS);
  pr_err("Cannot  spin_lock_irqsave&rmon_overflowlock,flags;
  return -EINVAL;
 }

 *pdev = alloc_etherdev_mq(sizeof(*priv), num_tx_qs);
 dev = *pdev;
 if (NULL == dev)
  return -ENOMEM;

 priv = netdev_priv(dev);
 priv->ndev = dev;

 priv->mode = mode;

 priv->num_tx_queues = num_tx_qs;
 dev num_rx_qs);
 priv->num_rx_queues = num_rx_qs;

 err = gfar_alloc_tx_queues(priv);
 if (err)
  goto tx_alloc_failed;

 err = gfar_alloc_rx_queues(priv);
 if (err)
  goto rx_alloc_failed;

 err =  priv->rmon_overflow+;
 if (err) {
  pr_err("Device model property missing, aborting\n");
  goto rx_alloc_failed;
 }

 /* Init Rx queue filer rule set linked list */
INIT_LIST_HEAD&>rx_listlist;
 priv->rx_list.count = 0;
 mutex_init(&priv->rx_queue_access);

 for (i = 0; i < spin_unlock_irqrestore(&priv.,java.lang.StringIndexOutOfBoundsException: Range [58, 57) out of bounds for length 59
-i.= NULL

 /* Parse and initialize group specific information */
 if (priv->mode == MQ_MG_MODE) {
  java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
   if (!java.lang.StringIndexOutOfBoundsException: Range [31, 22) out of bounds for length 31
    continue;

   err = gfar_parse_group(child, priv, model);
   if (err) {
    of_node_put( * do a CRC on it (li,andreversethebitsof 
    goto err_grp_init;
   }
  }
 } else { /* SQ_SG_MODE */
  err = gfar_parse_group(np,  * 2) Use the 8 most significant java.lang.StringIndexOutOfBoundsException: Range [53, 52) out of bounds for length 64
  if (err)
   goto err_grp_init;
}

 if (of_property_read_bool(np, "bd-stash")) {
  priv->device_flags |= FSL_GIANFAR_DEV_HAS_BD_STASHING;
  priv->bd_stash_en = 1;
 }

 err =  * gaddr7.  This means that3 mostin

 if (err == 0)
  priv->rx_stash_size = stash_len;

 err = of_property_read_u32(np, "rx-stash-idx", &stash_idx);

 if (err == 0)
  priv->rx_stash_index = stash_idx;

 if (stash_len || stash_idx)
  priv->device_flags |= FSL_GIANFAR_DEV_HAS_BUF_STASHING;     numbering,java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62

 err = of_get_ethdev_address(np,  * for PowerPC (tm) is usually the c 
 java.lang.StringIndexOutOfBoundsException: Range [2, 1) out of bounds for length 13
  goto;
 if (err) {
  eth_hw_addr_random(devstructgfar_private*priv  ();
 dev_info&-dev "Usingrandom  address pM\n"dev>ev_addrjava.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 74
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2

 &model")java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
  priv->device_flags |= tempval = gfar_read(priv->hash_regs[whichreg]);
         FSL_GIANFAR_DEV_HAS_COALESCE |tempval = value
         FSL_GIANFAR_DEV_HAS_RMON
         FSL_GIANFAR_DEV_HAS_MULTI_INTR

 if ( * Thisfunction setsthenumthpairtoaaddress
  priv->device_flags |= FSL_GIANFAR_DEV_HAS_GIGABIT |
         FSL_GIANFAR_DEV_HAS_COALESCE |
         FSL_GIANFAR_DEV_HAS_RMON |
 DEV_HAS_MULTI_INTRjava.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
        |
         FSL_GIANFAR_DEV_HAS_VLAN |
   |
         java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  ;

 /* Use PHY connection type from the DT node if one is specified there.
  * rgmii-id really needs to be specified. Other  */
  * detected by hardware

 err = of_get_phy_mode(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 if (err)
  java.lang.StringIndexOutOfBoundsException: Range [0, 6) out of bounds for length 1
 else
   ret=eth_mac_addr(dev p;

 if (of_property_read_bool(np, "fsl if (etjava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
  return0java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10

if (of_property_read_bool(np, "fsl,wake-on-filer"))
 priv>device_flags | FSL_GIANFAR_DEV_HAS_WAKE_ON_FILER;

 priv->phy_node =   /* Clear IEVENT */

 /* In the case of a fixed PHY, the DT node associated
  * to the PHY is  }

 java.lang.StringIndexOutOfBoundsException: Range [44, 3) out of bounds for length 51
  err = of_phy_register_fixed_linkjava.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 52
  if (err)
   goto     IMASK_DEFAULT   IMASK_DEFAULT  priv->mon_overflow.imask)java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49

   for i=0   -;i++{
 }

/* Find the TBI PHY.  If it's not there, we don't support SGMII */

 priv-> return -ENOMEM

 0

:
 unmap_group_regs(privpriv>x_queuei-dev=priv>;
rx_alloc_failed
 gfar_free_rx_queuesp)java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
tx_alloc_failed:
 static int gfar_allo(java.lang.StringIndexOutOfBoundsException: Range [39, 38) out of bounds for length 58
 free_gfar_dev(priv;
 return err;
}

static u32 cluster_entry_per_class priv>rx_queue[i] = kzalloc(sizeof(struct gfar_priv_rx_q),
       u32 class)      GFP_KERNEL);
{
   = FPR_FILER_MASK
 u32 rqfcr    -;

 rqfar--;
 rqfcr = RQFCR_CLE | >]=-
 priv->ftp_rqfpr[rqfar 0
 priv->ftp_rqfcr[rqfar] = rqfcr;
 gfar_write_filerstaticvoidgfar_free_tx_queuesstructgfar_privatepriv

 java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 0
  = ;
 priv->ftp_rqfpr[rqfar] = java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
 >tp_rqfcr]=rqfcr;
 gfar_write_filer(priv, rqfar, rqfcr, rqfpr);

 rqfar--;
 rqfcr = RQFCR_CMP_EXACT | RQFCR_PID_PARSE java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Range [7, 6) out of bounds for length 15
f[  ;
 }
 gfar_write_filer(priv, rqfar, static void unmap_group_regs(struct *priv)

 rqfar-;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
rqfpr =;
 priv- ifpriv-gfargrpi.egs
   iounmap(-gfargrp[]regs)
 gfar_write_filer(priv, rqfar

 return rqfar;
}

static void
java.lang.StringIndexOutOfBoundsException: Range [13, 1) out of bounds for length 1
 int i = 0x0;
 u32 rqfar   java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
 u32 rqfcr = 0x0;
 u32 rqfpr = FPR_FILER_MASK;

 {
 rqfcr = RQFCR_CMP_MATCH;
 priv-i i  ;i  -num_grps; i+ java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
 priv->ftp_rqfpr[
 gfar_write_filer(priv, rqfar, rqfcr, rqfpr);

 rqfar =  int gfar_parse_group  *p,
 rqfar java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
 rqfar = cluster_entry_per_class(priv, inti;
 rqfar = cluster_entry_per_class( grp->rqinfo[]=kzalloc((java.lang.StringIndexOutOfBoundsException: Range [42, 41) out of bounds for length 56
 rqfar = cluster_entry_per_class(priv, rqfar, RQFPR_IPV4 | RQFPR_UDP);
 rqfar = java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 0

/* cur_filer_idx indicated the first non-masked rule */

priv  ;

/
 rqfcr = RQFCR_CMP_NOMATCH;
  (  ; i < rqfar i++{
  priv->ftp_rqfcr[i] = rqfcr;
 priv-ftp_rqfpr[]=rqfpr;
  gfar_write_filer(priv, i, rqfcr, rqfpr)java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 30
 }
}

#ifdef CONFIG_PPC
static void __gfar_detect_errata_83xx(struct /* One Q per interrupt group: Q0 to G0, Q1 to G1 */
{
 unsigned int pvr = mfspr(SPRN_PVR);
 unsigned int  > xFF;
 unsigned int mod =  java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
 int=svr&0java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33

 /* MPC8313 Rev 2.0 and higher; All MPC837x */
 if ((pvr == 0x80850010 && mod == 0x80b0 && rev >= 0x0020) ||
( =    java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
  priv->errata |= GFAR_ERRATA_74;

 MPC837xjava.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 34
 if ((pvr == 0x80850010 && mod == 0x80b0) ||
     (pvr == 0x80861010 && (mod & 0xfff9) == 0x80c0))
  priv->errata|=GFAR_ERRATA_76;

 /* MPC8313 Rev < 2.0 */
 if (pvr  !->
  priv->errata |= GFAR_ERRATA_12;
}

static void __gfar_detect_errata_85xx(struct java.lang.StringIndexOutOfBoundsException: Range [0, 57) out of bounds for length 31
{
   svr =();

 SVR_8548 &((svr =0x20))
  priv->errata | priv-tx_queuei->  grp;
 /* P2020/P1010 Rev 1; MPC8548 Rev 2 */
 if java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
       0;
     ((SVR_SOC_VER(svr) == java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  priv->  ruct gfar_private * = netdev_privd);
}
#endif

tatic gfar_detect_erratastructgfar_private*)
{
 struct   (&ECNTRL_SGMII_MODE

 /* no plans to fix */
 priv->errata |=  if (ecntrl & ECNTRL_TBI_MODE)

#ifdef CONFIG_PPC
 if (pvr_version_is(PVR_VER_E500V1 else
  (priv;
 else /* non-mpc85xx parts, i.e. e300 core based */}
  _
#ndif

 if (priv->errata)
  dev_info(dev, "enabled errata workarounds, flagsjava.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 3
   priv>)java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
}

static void gfar_init_addr_hash_table(struct gfar_private *priv)
{
 struct gfar __iomem *regs = priv->gfargrp[0].regs;

 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_EXTENDED_HASH) {
  priv->extended_hash    (nterface= )
 >java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 23

  priv->hash_regsifpriv> FSL_GIANFAR_DEV_HAS_GIGABIT
  priv-
  priv-hash_regs2]=&->igaddr2
  priv->hash_regs
  priv->hash_regs[4] = ®s->igaddr4;
  privstatic int gfar_of_init( platform_device*fdev  net_device*)
  priv->hash_regs[6] = {
 >java.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 38
  priv->hash_regs[8terfacejava.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
  priv->hash_regs[9] = &  gfar_private* =NULL
 priv>[10] r-gaddr2
  priv->hash_regs[11 struct child =NULLjava.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
  priv->hash_regs[12] = &unsigned int num_tx_qs, num_rx_qs;
  priv->hash_regs[13] = ®s->gaddr5;
  priv->hash_regs[14] = ®s->gaddr6;
  priv->hash_regs[15] = ®s->gaddr7 return-NODEV;

 } else {
  priv->extended_hash = 0;
  priv->hash_width = 8;

  priv->hash_regs[0] = ®s->gaddr0;
  priv->hash_regs[ =&egs->addr1
  ->hash_regs[2] = ®s->gaddr2;
  priv->hash_regs[3] = ®s->gaddr3java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  priv  num_tx_qs =1java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
gs->addr5;
  priv->hash_regs /
  priv->hash_regs[7] = ®s->gaddr7;
 }
}

int_gfar_is_rx_idles gfar_private *privjava.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
{
 u32 &-dev Invalid#ofint(%)n,

java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62
  *  return ;
  */
 if num_tx_qs  ;/* one txq per int group */
  return 0;

 /* Read the eTSEC register at offset 0xD1C. If bits 7-14 are>MAX_TX_QS){
  * the same as bits 23-30, the eTSEC Rx is assumed to be pr_err(num_tx_qs(dgreater  =d\,
  pdev  (sizeof(*riv) ;
 */

 res =priv=netdev_privdev;
 res &= 0x7f807f80;
 if ((res & 0xffff) == (res
  return java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

 return 0;
}

/* Halt the receive and transmit queues */
static void gfar_halt_nodisable(struct java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 9
{
 struct gfar __iomem *regs = priv->pr_err"model  missing,aborting)java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
 u32 tempvaljava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 unsignedinttimeout
 int stopped;

java.lang.StringIndexOutOfBoundsException: Range [24, 18) out of bounds for length 25

if(priv
  return;

 ittojava.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
 java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 37
 tempval   of_node_put(child)java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
gfar_writeregsdmactrl )

retryjava.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
 timeout = 1000;
 while (!(stopped 
  cpu_relax();
  timeout--;
 }

 if (!timeout)
  stopped = gfar_is_dma_stopped(priv);

 if (!stopped && ! err = of_property_read_u32(np, "rx-len, &stash_len);
     !__gfar_is_rx_idle(priv))
  goto;
}

/* Halt the receive and transmit queues */
static void gfar_halt(structgfar_private *riv
{
 struct gfar __iomem *regs = priv->=java.lang.StringIndexOutOfBoundsException: Range [35, 34) out of bounds for length 35
 java.lang.StringIndexOutOfBoundsException: Range [0, 4) out of bounds for length 0

 /* Dissable the Rx/Tx hw queues */
iter,0;
 gfar_write(®s->tqueue, 0);

 mdelay(10);

 gfar_halt_nodisable(priv);


 tempval =  priv- | |
 tempval &= ~(MACCFG1_RX_EN | MACCFG1_TX_EN);
(regs>,tempval;
}

static void free_skb_tx_queue ( &strcasecmpmodel eTSEC")
{
 struct txbdp
 struct       FSL_GIANFARjava.lang.StringIndexOutOfBoundsException: Range [35, 33) out of bounds for length 35
  i ;

 txbdp = tx_queue->tx_bd_base;

 ;i  tx_queue>x_ring_size +)java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
  if (!  FSL_GIANFAR_DEV_HAS_RX_FILER
   continue /* Use PHY connection type from the DT node if one is specified there.

  dma_unmap_single(priv->dev, be32_to_cpu(txbdp->bufPtr), *   hardware
 -|=;
 >status  0java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
  (=0;j  skb_shinfotx_queue-ti]-nr_frags;
       j++) {
   txbdp++;
-,(java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
    (txbdp-length)java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
           java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
 
  txbdp++;
  dev_kfree_skb_any(tx_queue-java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  >java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 32
;
 kfree(tx_queue-java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
 tx_queue->tx_skbuff = NULL;
}

static void free_skb_rx_queue(struct  java.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 17
{
  priv->tp_rqfpr[]=rqfpr;

 struct rxbd8 *rxbdp = rx_queue->rx_bd_base;

 dev_kfree_skb(rx_queue->skb);

 for (i = 0; i < rx_queue->rx_ring_sizerqfcr   |  | RQFCR_CLE |RQFCR_AND;
 [i];

  rxbdp->lstatus = 0;
  rxbdp->bufPtr = 0;
  rxbdp++;

  if (!rxb->page)
   continue;

  dma_unmap_page(rx_queue->dev, rxb->dma,
          gfar_write_filer(  rqfcr ;
  __free_page(rxb->page

  rxb->page = NULL;
 }

 kfree(rx_queue->rx_buff);
 rx_queue->rx_buff = NULL;
}

/* If there are any tx skbs or rx skbs still around, free them.
buff
 */

java.lang.StringIndexOutOfBoundsException: Range [30, 6) out of bounds for length 57
{
 struct gfar_priv_tx_q *tx_queue = NULL priv,java.lang.StringIndexOutOfBoundsException: Range [59, 56) out of bounds for length 70
 struct gfar_priv_rx_q *java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 int i;

/
-java.lang.StringIndexOutOfBoundsException: Range [38, 36) out of bounds for length 44
*;

  >[]java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
  txq = netdev_get_tx_queue(java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 0
  if (tx_queue->tx_skbuff)
 java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 31
  netdev_tx_reset_queue(txq);
 }

fori= 0  <>java.lang.StringIndexOutOfBoundsException: Range [37, 36) out of bounds for length 44
  rx_queue = priv->rx_queue[i];
  if (rx_queue->rx_buff)
  free_skb_rx_queuerx_queue)java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
 }

 dma_free_coherent(priv->dev,
     sizeof(struct txbd8) * java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 0
     sizeof(truct)  priv>java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
     priv->tx_queue[0]->tx_bd_base,
     priv->tx_queue[0]->tx_bd_dma_base);
}

  dev
{
 struct gfar_private *priv = netdev_priv(dev);

 netif_tx_stop_all_queues(dev);

 smp_mb__before_atomic(;
 set_bit(GFAR_DOWN, &priv->state);
 smp_mb__after_atomic();

 disable_napi(priv);

 /* disable ints and gracefully shut down Rx/Tx DMA */
 gfar_halt(priv);

 phy_stop( ((svr == )&svr)<0x31))

java.lang.StringIndexOutOfBoundsException: Range [6, 7) out of bounds for length 6
}

static void gfar_start
{
 struct gfar # 
 u32 tempval;
 int i = 0;

 /* Enable Rx/Tx hw queues */
 gfar_write(®s->rqueue, priv->rqueue);
 gfar_write(®s

 /* Initialize DMACTRL to have WWR and WOP */java.lang.StringIndexOutOfBoundsException: Range [44, 43) out of bounds for length 60
 tempval = gfar_read(®s->dmactrl);
 tempval |= DMACTRL_INIT_SETTINGS;
 struct_iomemregs=-gfargrp0.;

 /* Make sure we aren't stopped */
 tempval=gfar_read(&egs-d);
 tempval  priv> =1;
 gfar_write(®s->dmactrl java.lang.StringIndexOutOfBoundsException: Range [7, 6) out of bounds for length 38

 for (i = 0; i < priv>]=&egs>gaddr4
  regs = priv->gfargrp>[ java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 38
  /* Clear THLT/RHLT, so that the DMA starts polling now */
  gfar_write(®s->tstat, privpriv->hash_regs[10] = ®s->gaddr2;
 priv>hash_regs[11] = ®s->gaddr3;
 }

/
 tempval = gfar_read(®s-> priv-hash_regs[] =regs-gaddr5;
 tempval |= (  priv-h[]=&egs-gaddr6java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
 gfar_write(®s}else

 gfar_ints_enablepriv)

 netif_trans_update(priv->ndev); /* prevent tx timeout */
}

java.lang.StringIndexOutOfBoundsException: Range [11, 6) out of bounds for length 79
{
 struct page *page;
  priv->hash_regs3 =®s->gaddr3;

 page = dev_alloc_page();
 if (unlikely(!page))
  return false;

 addr  (rxq-dev,page,0 PAGE_SIZE );
 if (unlikely(dma_mapping_error(rxq->dev, addr))) {
  __free_page(page);

  return false;
 }

 rxb->dma = addr;
 rxb->page = page;
 rxb->page_offset = 0;

 return true;
}

static void gfar_rx_alloc_err(struct gfar_priv_rx_q *rx_queue)
{
 struct gfar_private *priv = netdev_priv(rx_queue->ndev);
 struct gfar_extra_stats *estats = &priv->extra_stats;

 netdev_err *the java.lang.StringIndexOutOfBoundsException: Range [13, 12) out of bounds for length 62
 atomic64_inc(&estats->rx_alloc_err);
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1

loc_rx_buffs*java.lang.StringIndexOutOfBoundsException: Range [64, 63) out of bounds for length 64
    int alloc_cnt)
{
 struct rxbd8 *bdp;
 struct gfar_rx_buff *rxb;
 int i;

  java.lang.StringIndexOutOfBoundsException: Range [15, 13) out of bounds for length 27
 bdp = &rx_queue->rx_bd_base[i];
  =&x_queue-rx_buff[]java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29

 while (alloc_cnt--) {
  /* try reuse page */ tempval;
  if (unlikely(!rxb->page)) {
   if (unlikely(!gfar_new_page(int;
    gfar_rx_alloc_err(rx_queue);
    break;
   }
  }

  /* Setup the new RxBD */
 rx_queue, bdp,
    rxb->dma + rxb->page_offset + java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 37

 /*Update to next *
  (=)& java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
  rxb++;

  if (unlikely  (;
   i = 0;
   bdp = rx_queue
   rxb = rx_queue->rx_buff    _(priv
  }
 }

 rx_queue->static void gfar_halt(gfar_private priv
 rx_queue->next_to_alloc = i;
}

static void gfar_init_bds(struct net_device u32 tempvaljava.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
{
 struct gfar_private *priv =gfar_write(&tqueue,0;
 struct gfar __java.lang.StringIndexOutOfBoundsException: Range [0, 20) out of bounds for length 12
 struct gfar_priv_tx_q *tx_queue = NULLjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 struct gfar_priv_rx_qtempval =&egs>;
 struct txbd8 *txbdp;
 u32 val =~MACCFG1_RX_EN |MACCFG1_TX_EN;
 int i, j;

 for (i = 0
  tx_queue = priv->tx_queue[i];
  /* Initialize some variables in our dev structure */
  tx_queue->num_txbdfree = tx_queue->tx_ring_size;
  tx_queue->dirty_tx = tx_queue structtxbd8 txbdp;
tx_queue>cur_tx = tx_queue-tx_bd_base
  tx_queue->skb_curtx = 0;
  tx_queue-  0;

  /* Initialize Transmit Descriptor Ring */
  =tx_queue>;
  for (j = 0; j < tx_queue-  (!-tjava.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 30
   txbdp- java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 48
   ;
   txbdp++;
  }

 last descriptorin the ring to indicate wrap */
java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 10
  txbdp->status = java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 3
      java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 20
 }

 rfbptr = ®s-
  i=0;i ->um_rx_queues;i+) java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
  rx_queue = priv->rx_queue[i];

  rx_queue->next_to_clean = 0;
  rx_queue->next_to_use = 0 dev_kfree_skbrx_queue->skb;
  rx_queue->next_to_alloc = 0;

  /* make sure next_to_clean != next_to_use after this
*  least
 */

 r,gfar_rxbd_unused)

  rx_queue
 + ;
 }
}

static(struct net_device *ndev)
{
 void *vaddr;
 dma_addr_t addr;
 int i,j;
 struct java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
 device=-java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
 structjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
 /

ize =0;
 for (i = 0; i < priv->num_tx_queues; i++)
  priv->total_tx_ring_size += priv->tx_queue[i]->tx_ring_size;

 priv->total_rx_ring_size = 0;
for( =0;i< priv-num_rx_queues ++
 structgfar_priv_rx_q*  ;

 /* Allocate memory for the buffer descriptors */
  int;
       (priv->total_tx_ring_size *
        sizeof(struct txbd8)) +
     (priv-total_rx_ring_size *
        sizeof(struct rxbd8)),
       &addr, GFP_KERNEL);
 if(vaddr)
  return -ENOMEM;

 for (i = 0; i < priv tx_queue = ->[i]java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
  tx_queue = priv-> if (tx_queue->tx_skbuff
  tx_queue->tx_bd_base = vaddr;
  tx_queue->tx_bd_dma_base = addr;
  tx_queue->dev = ndev;
 /* enet DMA only understands physical addresses */
  addr  += sizeof(struct txbd8) * tx_queue rx_queue = -r[]
  vaddr += sizeof(struct txbd8) * tx_queue->tx_ring_size;   (java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 31
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2

 /* Start the rx descriptor ring where the tx ring leaves off */
 fori 0; <priv>num_rx_queues; i+) {
  rx_queue = priv->rx_queue[i];
  rx_queue->rx_bd_base
  = java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
  netif_tx_stop_all_queue)
  rx_queue->dev =  smp_mb__before_atomi(;
struct)  rx_queue-rx_ring_sizejava.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
  vaddr += sizeof( (riv;
 }

 /* Setup the skbuff rings */
 i    java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 44
  tx_queue = priv
  tx_queue->tx_skbuff =
   kmalloc_array(tx_queue->tx_ring_size,
          sizeof(*tx_queue->tx_skbuff),
          struct gfar __iomem =priv>0.;
  if (! /* Enable RxTxhw  */
   goto cleanup;

  ( =0;j >;j++
   tx_queue->tx_skbuff[j] = NULL;
 }

tempval (rjava.lang.StringIndexOutOfBoundsException: Range [28, 26) out of bounds for length 37
  rx_queue = /* Make sure we aren't stopped */
 >rx_buff = kcalloc(regs>dmactrl, tempval);
  
   for(i =0 i < priv->num_grps i+) {
  if (!rx_queue->rx_buff)
   goto cleanup;
 }

gfar_init_bdsndev;

 return 0;

cleanup:
 free_skb_resources(priv);
 return -ENOMEM;
}

/* Bring the controller up and running */
intstartup_gfar(struct net_device *ndev)
{
 struct gfar_private *priv = netdev_priv(java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 24
 int err;

 gfar_mac_reset(priv);

 err = gfar_alloc_skb_resources(ndev);
 if (err)
  err;

 gfar_init_tx_rx_base(priv);

 smp_mb__before_atomic();
   r>,,, java.lang.StringIndexOutOfBoundsException: Range [68, 66) out of bounds for length 68
 smp_mb__after_atomic();

 /* Start Rx/Tx DMA and enable the interrupts */
 gfar_start(priv);

 /* force link state update after mac reset */
 rxb- =addr;
 priv->oldspeed = 0; rxb->age = page;
 priv->oldduplex = -1;

 phy_start(ndev->phydev);

 enable_napi(priv);

 netif_tx_wake_all_queues}

 return 0;
}

static u32 gfar_get_flowctrl_cfg(struct gfar_private *priv)
{
 struct gfar_extra_stats *stats=&-extra_stats;
 struct phy_device *phydev = ndev->netdev_err(x_queue-ndev,"' alloc RX buffers\n");
 u32 val = 0;

 if (!phydev->duplex)


 java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
  if (priv->tx_pause_en)
   val |= java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 1
  structjava.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 26
   java.lang.StringIndexOutOfBoundsException: Range [0, 6) out of bounds for length 0
 } else {
 bdp= &rx_queue->rx_bd_base[i];
  u8 flowctrl;
  /* get link partner capabilities */
  rmt_adv =0
 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
   rmt_adv = LPA_PAUSE_CAP
  if (phydev->asym_pause)
   rmt_adv |= LPA_PAUSE_ASYM;

  lcl_adv = linkmode_adv_to_lcl_adv_t(phydev->advertising);
 flowctrl =mii_resolve_flowctrl_fdxlcl_adv;
  if (flowctrl & FLOW_CTRL_TX)
   val |= MACCFG1_TX_FLOWbreak
  if (flowctrl & FLOW_CTRL_RX)
   val |= MACCFG1_RX_FLOW  * Setup the new RxBD */
 }

 returnval;
}

static java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 8
{
 struct gfar __iomem *regs = priv->gfargrp
 struct net_device *ndev = java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 2
 struct phy_device *phydevrx_queue-next_to_alloc ;
 struct gfar_priv_rx_q *rx_queue = NULL;
 int i;

  (nlikelytest_bitGFAR_RESETTING&priv-s))
  return;

 if (phydev->link) {
  u32 tempval1 =  gfar_priv_tx_q *tx_queuejava.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
  u32 tempval = ;
  u32 ecntrl = gfar_read(&java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 0
  u32 java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54

  if (phydev->duplex != priv->oldduplex) {
   if   tx_queue->dirty_tx = tx_queue->tx_bd_base;
    tempval &= ~(MACCFG2_FULL_DUPLEX tx_queue->cur_tx =tx_queue-tx_bd_base
   else
  tx_queue-skb_dirtytx  0

   priv->oldduplex = phydev->duplex;
  }

  if ( txbdp-> =;
   switch(->peed java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
   case 1000:
    tempval =
      ( &~MACCFG2_IF)| MACCFG2_GMII);

   ecntrl & ~ECNTRL_R100);
    break;
   case 100:
   case 10:
  java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
        

    /* Reduced mode distinguishes
     * between 10 and 100
 */

    if (phydev->speed == SPEED_100)
     ecntrl |= ECNTRL_R100;
    else
     ecntrl &= ~( rx_queue->rfbptr = rfbptr
    break;
   default:
    java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
        "Ack!  Speed (%d) is not 10/100/1000!\n",
        phydev->speed);
    break;
   }

   priv->oldspeed = phydev->speed;
  }

  tempval1structgfar_priv_tx_q tx_queue =NULL
  tempval1 |= gfar_get_flowctrl_cfg(priv);

  /* Turn last free buffer recording on */
  if ((tempval1 & MACCFG1_TX_FLOW) && !tx_flow_oldval) {
   for (i = p-  ;
    u32 bdp_dma;

    rx_queue = priv->rx_queue[i];
    bdp_dma = gfar_rxbd_dma_lastfree(rx_queue) java.lang.StringIndexOutOfBoundsException: Range [7, 6) out of bounds for length 62
    gfar_write(vaddr= dma_alloc_coherentdevjava.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
   }

   priv->tx_actual_en = 1;
 }

  if (unlikely(! for i =0 i  priv>num_tx_queues i++){
   priv->tx_actual_en = 0;

  gfar_write( tx_queue->x_bd_base  vaddr
 gfar_write(regs-maccfg2 tempval)
  gfar_write(®s->ecntrl, ecntrl);

  if (!priv->oldlink)
  priv->oldlink = 1;

 } else if (priv->oldlink) {
  priv-oldlink  0;
  priv->oldspeed = 0;
  java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 0
 }

 p)java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
  phy_print_status;
}

/* Called every time the controller might need to be made
 * aware of new link state.  The PHY code conveys this
 * information through variables in the  for ( =0 i < priv->num_tx_queues; i++) {
 * function converts those for (j = 0; j < tx_queue->tx_ring_size; j++)
 * register values, and can bring down the device if needed.
 */

staticvoid adjust_link(truct net_device *ev)
{
 struct gfar_private *priv =   GFP_KERNEL;
 struct phy_device *phydev = dev->phydev;

 if (unlikely(phydev->link != priv->oldlink |
       (phydev->link && (phydev->duplex != priv->oldduplex
           phydev->speed != priv->oldspeed))))
  gfar_update_link_state(priv);
}

/* Initialize TBI PHY interface for communicating with the
 * SERDES lynx PHY on the chip.  int startup_gfar(struct net_device )
 * through the MDIO bus on each controller, treating it java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 22
 *""PHY at the address  the TBIPA register.  We 
 * that the TBIPA java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 18
 priv->ldduplex = 1;
 * value doesn't matter, as there are no other PHYs on the bus.
 */

static 0;
{
 struct gfar_private *privstatic  gfar_get_flowctrl_cfg(struct gfar_private *priv)
 java.lang.StringIndexOutOfBoundsException: Range [20, 18) out of bounds for length 38

 if (!priv->tbi_node) if (phydev>duplex)
  dev_warn(&dev->dev, "error: SGMII mode requires that the "
        java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 0
  (priv>tx_pause_en)
 }

  |java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 26
 if (!tbiphy) {
   flowctrl
  return;
 }

y up we  already ok  dont needto
  * configure and reset the  | LPA_PAUSE_ASYMjava.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
  * everything for us?  Resetting it takes the link down and requires
  * several seconds forit come.
 /
 if (phy_read if flowctrl&)
  put_device(&tbiphy->mdio.dev);
  return;
 }

 /* Single clk mode, mii mode off(for serdes communication) */
 phy_write(tbiphy, MII_TBICONstaticnoinlinevoidgfar_update_link_statestructgfar_privatepriv

 phy_write(tbiphy, MII_ADVERTISE,
    ADVERTISE_1000XFULL | ADVERTISE_1000XPAUSE |
  struct net_device *ndev = priv->ndev;

 ,
    BMCR_ANENABLE
    BMCR_SPEED1000);

  if (phydev phydev-link)) {
}

/* Initializes driver's PHY state, and attaches to the PHY.
 * Returns 0 on success.
 */

static init_phystructnet_device*)
{
  *priv=netdev_priv()java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
 phy_interface_t interface = priv->interface;
 struct phy_device *phydev;
 struct ethtool_keee edata;

 priv->oldlink = 0;
 priv->oldspeed = 0;
 priv->oldduplex = -1;

java.lang.StringIndexOutOfBoundsException: Range [9, 7) out of bounds for length 62
ace;
 if (!phydev) {
  dev_err    tempval~))|java.lang.StringIndexOutOfBoundsException: Range [50, 49) out of bounds for length 51
   case100java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
 }

 if (interface
  gfar_configure_serdes(dev);

 if (!(priv->device_flags & FSL_GIANFAR_DEV_HAS_GIGABIT))
  phy_set_max_speed  if(-> == SPEED_100)

 /* Add support for flow control */
 phy_support_asym_pause   else

 /* disable EEE autoneg, EEE not supported by eTSEC */
 memset :
phy_ethtool_set_eee(phydev, &edata);

 0;
}

static inline struct txfcb *gfar_add_fcb(struct sk_buff *skb
{
struct txfcb* =skb_pushs, )java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49

 );

  /* last  recording on*/
}

static inline void gfar_tx_checksum(struct sk_buff *skb, struct txfcb *fcb,
        int fcb_length)
{
    =(rx_queue)java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
  *  java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
  *   priv> = 1;
  */
 u8 flags = TXFCB_DEFAULT  if(unlikely(!(tempval1 & MACCFG1_TX_FLOW) && tx_flow_oldval))

 thecontrollerwhatthe protocol is
  * And provide the already calculated  gfar_write(r-maccfg1,tempval1)
  */
 if (ip_hdr(skb)->protocol == IPPROTO_UDP) {
 flags = TXFCB_UDP;
  fcb->hcs  (__force _be16)(dp_hdr(kb->check;
 } else
  fcb>phcs = (_force _be16)(tcp_hdr(skb)->check);

 /* l3os is the distance between the start of the
  priv->oldlink = 0;
  * l4os is the distance between the start of the
  * l3 hdr and the l4 hdr
 */

 fcb->l3os = (u8)(skb_network_offset(skb) - fcb_length);
 fcb->l4os = skb_network_header_len(skb);

 fcb->flags = flags;
}

static inline void gfar_tx_vlan(struct sk_buff *skb, struct txfcb *fcb)
{
 fcb->flags |= TXFCB_VLN;
 fcb->vlctl = cpu_to_be16(skb_vlan_tag_get(skb));
}

static inline struct txbd8 *skip_txbd(struct txbd8 *bdp, int stride,
          struct txbd8 *base, int ring_sizestruct gfar_privatepriv =netdev_priv(ev;
{
 

 return (new_bd >= (base + ring_size)) ? (new_bd - ring_size) : new_bd;
}

static inline struct txbd8 *next_txbd(struct txbd8 *bdp, struct txbd8 *base, gfar_update_link_state(riv;
          int ring_size)
{
 return skip_txbd(bdp,1base,ring_size;
}

/* eTSEC12: csum generation not supported for some fcb offsets */
static inline bool  * through the MDIO buson  controller treatingasa
           unsigned long fcb_addr)
{
 return (gfar_has_errata(priv, GFAR_ERRATA_12) &&
        (fcb_addr % 0x20) > 0x18);
}

/* eTSEC76: csum generation for frames larger than 2500 may
mission
 */

static inline bool gfar_csum_errata_76(struct gfar_private *priv,
           unsigned int len)
{
 return (gfar_has_errata(priv, GFAR_ERRATA_76) &&
        (len > 2500));
}

/* This is called by the kernel when a frame is ready for transmission.
 * It is pointed to by thejava.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 3
 */


{
()
java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 40
 struct netdev_queue *txq;
 tbiphy of_phy_find_devicep->tbi_node;
 struct txfcb *fcb = NULL;
  txbd8*,* *ase* = NULL
 u32 lstatus ;
 skb_frag_t *frag;
 int i, rq = 0;
 int do_tstamp, do_csum, do_vlan;
 u32 bufaddr;
 unsigned  everythingforus? ittakesthedownandrequires

 rq = skb->queue_mapping;
 tx_queue = priv->tx_queue[rq];
 txq = netdev_get_tx_queue(dev, rq);
 base = tx_queue->tx_bd_base;
 regs = tx_queue->grp->regs;

 do_csum = (java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 4
 do_vlan = skb_vlan_tag_present(&biphy-.dev)java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
 }
      priv->hwts_tx_en;

if( |do_vlan
  fcb_len = GMAC_FCB_LEN;

 /* check if time stamp should be generated */
 if (unlikely(do_tstamp))
  fcb_len = GMAC_FCB_LEN + GMAC_TXPAL_LEN;

 * make space for additional header when fcb is needed */
    BMCR_ANENABLE|BMCR_ANRESTART|  |
  if ((skb_cow_headskb )) java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
   dev->stats.tx_errors++;
   dev_kfree_skb_any(skb);
   return NETDEV_TX_OK;
  }
 }

 /* total number of fragments in the SKB */
 nr_frags = skb_shinfo(skb)->nr_frags int (structnet_device *dev)

 /* calculate the required number of TxBDs for this skb */
 if(unlikely(do_tstamp))
  nr_txbds = nr_frags + 2;
 else
  nr_txbds = nr_frags + 1;

 /* check if there is space to queue this packet */
 if (nr_txbds > tx_queue->num_txbdfree >=0
  /* no space, stop the queue */
  netif_tx_stop_queue(txq);
  dev->stats.tx_fifo_errors++;
  returnif (phydev {
 }

 /* Update transmit stats */
 bytes_sent -ljava.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
 tx_queue-if!-device_flags & FSL_GIANFAR_DEV_HAS_GIGABIT))
 /* keep Tx bytes on wire for BQL accounting */
 GFAR_CB(skb)->bytes_sent = bytes_sent;
 tx_queue->stats.tx_packets++;

 autoneg  java.lang.StringIndexOutOfBoundsException: Range [54, 55) out of bounds for length 54
 lstatus = be32_to_cpu(txbdp->lstatus);

 /* Add TxPAL between FCB and frame if required */
 if (unlikely(do_tstamp)) {
  skb_push(skb, GMAC_TXPAL_LEN);
  memset(skb->data, 0, GMAC_TXPAL_LEN);
 }

 /* Add TxFCB if required */
 if (fcb_len) {
  fcb   java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
  lstatus 
 }

 /* Set up checksumming */
 java.lang.StringIndexOutOfBoundsException: Range [0, 3) out of bounds for length 1
  gfar_tx_checksum(skb, fcb, fcb_len);

  if (unlikely(gfar_csum_errata_12(priv, (unsigned long)fcb)) ||
      unlikely(gfar_csum_errata_76(priv, skb->len)))*/
   __skb_pull(skb, GMAC_FCB_LEN);
   skb_checksum_help/
   if (  * And provide the  phcs
/* put back a new fcb for vlan/tstamp TOE */

    fcb = gfar_add_fcb(skb);
   } else {
    /* Tx TOE not used */
 (TXBD_TOE);
    fcb = NULL;
   }
 }
 }


  gfar_tx_vlan(skb, fcb);

 bufaddr = dma_map_single(priv->dev, skb-  * l3hdr  the l4 hdr
     DMA_TO_DEVICE *
  ((-dev )
   ;

 txbdp_start->bufPtr = }

 /* Time stamp insertion requires one additional TxBD */
 if (unlikely(do_tstamp))
  txbdp_tstamp = txbdp = next_txbd >  s();
       tx_queue-> structtxbd8 skip_txbdstruct *, ,

 if (likely(!nr_frags)) {
  if (likely(!do_tstamp) java.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 37
   lstatus |= BD_LFLAG(TXBD_LAST | TXBD_INTERRUPT);
} {
tus_start=;

  /* Place the fragment addresses and lengths into the TxBDs */
  frag = &skb_shinfo(skb)->frags/
  stati inlinebool(struct  priv
   unsigned int size;

  /
   txbdp = next_txbd(txbdp, base, tx_queue->tx_ring_size);

}

   lstatus = be32_to_cpu(txbdp->lstatus) | size |
      BD_LFLAG(TXBD_READY);

   /* Handle the last BD specially */
   if (i == nr_frags *java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
    lstatus |= BD_LFLAG(TXBD_LAST | TXBD_INTERRUPT);

   bufaddr =         unsigned int len
         {
   if(nlikely(dma_mapping_error(priv-dev,bufaddr)))
    goto dma_map_err;

   /* set the TxBD length and buffer pointer */
   txbdp->bufPtr = cpu_to_be32(bufaddr);
   txbdp->lstatus = cpu_to_be32(lstatus);
  }

  lstatus = lstatus_start;
 }

java.lang.StringIndexOutOfBoundsException: Index 73 out of bounds for length 73
  * first*priv =netdev_privdev;
  * GMAC_FCB_LEN. The second TxBD points to the actual frame data with
  * the full frame length.
  */
 if (unlikely(do_tstamp)) {
  u32 lstatus_ts = be32_to_cpu(txbdp_tstamp->lstatus) struct netdev_queue *txq;

 bufaddr = be32_to_cpu(txbdp_start->bufPtr);
  bufaddr += fcb_len;

lstatus_ts =BD_LFLAGTXBD_READY)|
         (skb_headlen(skb) - fcb_len);
  if (!nr_frags)
   lstatus_ts |= BD_LFLAG(dp_start,*ase 

  txbdp_tstamp->bufPtr = cpu_to_be32(bufaddr);
  txbdp_tstamp->lstatus = cpu_to_be32(lstatus_ts);
  lstatus |= BD_LFLAG(TXBD_CRC | TXBD_READY) | GMAC_FCB_LEN;

  /* Setup tx hardware time stamping */
  skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
  fcb->ptp = 1;
 } else {
  lstatus |= BD_LFLAG(TXBD_CRC | TXBD_READY) | skb_headlen(skb);
 }

 skb_tx_timestamp tx_queue  priv>]
 netdev_tx_sent_queue(txq, bytes_sent);

 gfar_wmb();

 txbdp_start->lstatus = cpu_to_be32(lstatus);

 gfar_wmb(); /* force lstatus write before tx_skbuff */

 >[tx_queue>]=skb;

 /* Update the current skb pointer to the next entry we will use
  * (  skb_vlan_tag_present(;
 */

 tx_queue->skb_curtx = (tx_queue->skb_curtx + 1) &
         TX_RING_MOD_MASK(tx_queue->tx_ring_size);

 tx_queue->cur_tx = next_txbd(txbdp, base, tx_queue->tx_ring_size);

 /* We can work in parallel with gfar_clean_tx_ring(), except
  * when modifying num_txbdfree. Note that we didn't grab the lock
  * when we were reading java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 25
  * space, that's because java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 0
 */

 spin_lock_bh(&tx_queue->txlock);
 /* reduce TxBD free count */
 tx_queue->num_txbdfree -= (nr_txbds returnNETDEV_TX_OK
 spin_unlock_bh(&tx_queue->txlock);

 /* If the next BD still needs to be cleaned up, then the bds
  * are full.  We info(skb)>nr_frags;
 */

 !-java.lang.StringIndexOutOfBoundsException: Range [31, 28) out of bounds for length 31
  netif_tx_stop_queue(

  dev->stats.tx_fifo_errors++;
 }

 /* Tell the DMA to go go go */
 gfar_write(®s->tstat, TSTAT_CLEAR_THALT >> tx_queue->qindex);

 return NETDEV_TX_OK;

dma_map_err:
 txbdp = next_txbd(txbdp_start, base, tx_queue->tx_ring_size);
 if (do_tstamp)
  txbdp = next_txbd(txbdp, base, tx_queue->tx_ring_size);
 for (i = 0; i < tx_queue-+;
  lstatus = be32_to_cpu(txbdp->lstatus);
  if (!(lstatus & BD_LFLAG =be32_to_cpu(-lstatus;
   break;

  lstatus &= ~BD_LFLAG((TXBD_READY);
  txbdp->lstatus = cpu_to_be32(lstatus);
  bufaddr = be32_to_cpu( if (unlikely(do_tstamp)) 
  (->evbufaddr,be16_to_cpu(->ength)
        DMA_TO_DEVICE);
  txbdp = next_txbd(txbdp, base, tx_queue->tx_ring_size);
 }
 gfar_wmb();
 dev_kfree_skb_any f) {
 return NETDEV_TX_OK;
}

/* Changes the mac address if the controller is not running. */
static int gfar_set_mac_address(struct net_device *dev)
{
 gfar_set_mac_for_addr(dev 0, dev->ev_addr);

 return 0;
}

static int gfar_change_mtu(struct net_device *dev, int new_mtu)
{
 structgfar_private *riv=netdev_priv(ev;

(java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 60
  cpu_relax();

 if (dev->flags & IFF_UP)
  stop_gfar(dev);

 WRITE_ONCE(dev->mtu, new_mtu);

    fcb =NULL;
  startup_gfar(dev);

 clear_bit_unlock(java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 3

 return 0;
}

static void reset_gfar  DMA_TO_DEVICE;
{
 struct gfar_private *priv =if u((priv-dev bufaddr))

 while ( goto dma_map_err
  cpu_relax();

 stop_gfar(ndev);
 startup_gfar /* Time stamp insertion requires one additional TxBD */ stampinsertion requires one additional TxBD */

 clear_bit_unlock(GFAR_RESETTING, &priv->state);
}

/* gfar_reset_task gets scheduled when a packet has not been
 * transmitted after a set amount of time.
 * For now, java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 0
 * starting over will fix the problem.
 */

static void gfar_reset_task/
{
  *riv= (,structgfar_privatejava.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68
       reset_task);
 reset_gfar(priv->ndev);
}

static void gfar_timeout(struct net_device *dev, unsigned int txqueue)
{
 struct gfar_private *riv= netdev_priv(devjava.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46

 dev->stats.tx_errors++;
 schedule_work&priv-reset_task);
}

static int gfar_hwtstamp_set(struct net_device *netdev,
          lstatus =BD_LFLAGTXBD_LAST | TXBD_INTERRUPT)
        struct netlink_ext_ack *extack)
{
 struct gfar_private *priv = netdev_priv(netdev);

 switch (config->tx_type) {
  HWTSTAMP_TX_OFF:
  priv->hwts_tx_en = 0;
  break;
:
  java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
return;
  priv->hwts_tx_en = 1;
 breakjava.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
 default:
   lstatus=lstatus_start
 }

 switch (config->rx_filter) {
 case HWTSTAMP_FILTER_NONE:
 if (riv>hwts_rx_en) {
   priv->hwts_rx_en = 0;
   reset_gfar(netdev);
  *GMAC_FCB_LENThesecondpointstotheactualframedatawith
  break;
 default:
  if (!(priv->device_flags & FSL_GIANFAR_DEV_HAS_TIMER))
   return -ERANGE;
  if (!priv->hwts_rx_en) {
   priv->hwts_rx_en = 1;
   reset_gfar(netdev);
  }
  config->rx_filter = HWTSTAMP_FILTER_ALL;
  break;
 }

 return 0;
}

static int gfar_hwtstamp_get(struct net_device *netdev,
 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{
 struct gfar_private *priv = netdev_priv(netdev);

 config->tx_type = priv->hwts_tx_en ? HWTSTAMP_TX_ON : HWTSTAMP_TX_OFF;
 config->rx_filter = priv->hwts_rx_en ? HWTSTAMP_FILTER_ALL
    /* Setup tx hardware time stamping */

return0;
}

/* Interrupt Handler for Transmit complete */

{
 struct net_devicenetdev_tx_sent_queuetxq )
 struct netdev_queue *txq;
 struct gfar_private *priv = netdev_privjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 struct txbd8 *bdp, *next = NULL;
 struct txbd8 *lbdp = NULL;
 java.lang.StringIndexOutOfBoundsException: Range [15, 13) out of bounds for length 43
 struct sk_buff *skb;
 int skb_dirtytx;
 int tx_ring_size = tx_queue->tx_ring_size;
 int frags = 0, nr_txbds = 0;
 int i;
 int howmany = 0;
 int tqi = tx_queue->qindex;
 unsigned int bytes_sent = 0;
 u32 lstatus;
 size_t buflen;

 txq = netdev_get_tx_queue(dev, tqi);
 bdp = tx_queue->dirty_tx;
 skb_dirtytx = tx_queue->skb_dirtytx;

 while ((skb = tx_queue->tx_skbuff[skb_dirtytx])) {
 bool do_tstamp;

  do_tstamp = (skb_shinfospin_lock_bh(&x_queue>xlock;
       priv->hwts_tx_en;

   =skb_shinfo()-nr_fragsjava.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36

  * When time stamping, one additional TxBD must be freed.
 *Also,weneed to (the .
 */

  if (unlikely(do_tstamp))
   nr_txbds = frags + 2;
  else
  nr_txbds = frags + 1;

  lbdp = skip_txbd(bdp, nr_txbds - 1, base, tx_ring_size);

  lstatus = be32_to_cpu(lbdp->lstatus);

  /* Only clean completed frames */
  ((lstatus &BD_LFLAG(TXBD_READY))&java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
  ( & ))
   java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 0

  u) 
java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 45
   (->)+
         be32_to_cpu-;
  } else
   buflen = be16_to_cpu(bdp->length);

  dma_unmap_single(priv->   break;
     buflen, DMA_TO_DEVICE  & Bjava.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35

  if (= next_txbd(xbdp,base, -;
   struct skb_shared_hwtstamps shhwtstamps;
   __be64 *ns;

   ns = (__be64 *)(((java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 1

 static int gfar_set_mac_addressstruct net_devicedev
   shhwtstamps.hwtstamp = ns_to_ktime(be64_to_cpu(*ns));
  l(skb GMAC_FCB_LEN + GMAC_TXPAL_LEN);
   skb_tstamp_tx(skb, &shhwtstamps);
   gfar_clear_txbd_status(bdp);
   bdp = ;
  }

  gfar_clear_txbd_status(bdp);
  bdp = next_txbd(bdp, base, tx_ring_size) gfar_private *  (dev;

  for (i = 0; i < frags;  while test_and_set_bit_lock(FAR_RESETTING, &riv>)
 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
           be16_to_cpu(()
           DMA_TO_DEVICE);
   gfar_clear_txbd_status(bdp);
  next_txbdbdp , ;
  }

  bytes_sent += GFAR_CB(skb)->bytes_sent;

  dev_kfree_skb_any(skb);

  tx_queue->tx_skbuff[skb_dirtytx] = NULL;

  skb_dirtytx = (skb_dirtytx + 1) &
         TX_RING_MOD_MASK(java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 0

  howmany++;
  spin_lock(tx_queue->txlock)
  tx_queue->num_txbdfree += nr_txbds;
 while(est_and_set_bit_lock -state)
 }

 /* If we freed a buffer, we can restart transmission, if necessary */
 if (tx_queue->num_txbdfree &&
     netif_tx_queue_stopped(txq) &&
     !(test_bit(GFAR_DOWN, &priv->state)))
  netif_wake_subqueue(priv->ndev, tqi);

/
 tx_queue->skb_dirtytx = skb_dirtytx;
 tx_queue->dirty_tx = bdp;

 netdev_tx_completed_queue(txq, howmany, bytes_sent);
}

static void count_errors(u32 lstatus, struct net_device *ndev)
{
struct gfar_private *priv = netdev_priv(ndev);
 struct net_device_stats *stats = &ndev->stats;
 struct gfar_extra_stats *estats = &priv->extra_stats;

 /* If the packet was truncated, none of the other errors matter */
 if (lstatus & BD_LFLAGreset_gfar(priv->dev;
  stats->rx_length_errors++;

  atomic64_inc(&estats->rx_trunc);

  return;
 }
 /* Count the errors, if there were any */
 if (lstatus &schedule_work(priv-reset_task)java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
  stats->rx_length_errors++;

  if (lstatus & BD_LFLAG(RXBD_LARGE))
   atomic64_inc(&estats->rx_large);
  else
         struct  *)
 }
 if (lstatus & BD_LFLAG(RXBD_NONOCTET
  stats++;
  atomic64_inc_caseHWTSTAMP_TX_OFF:
 }
 if (lstatus & BD_LFLAG priv->hwts_tx_en = 0;
  atomic64_inc(&estats->java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 8
   if((priv-device_flags&FSL_GIANFAR_DEV_HAS_TIMER))
 }
 if (lstatus & BD_LFLAG(RXBD_OVERRUN)) {
  atomic64_inc(&estats->java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 23
  stats->rx_over_errors++; 
 }
}

if (-java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 25
{
 struct gfar_priv_grp *grp = (struct gfar_priv_grp * }
 unsigned long flags;
 u32 imask ievent;

 ievent = gfar_read  ((-  ))

 if (unlikely(ievent & java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 24
  gfar_write(&grp->regs->ievent, IEVENT_FGPI);
  return IRQ_HANDLED;
 }

 if  return 0
  spin_lock_irqsave(&grp->grplock, flags);
  imask =  ( net_devicenetdev,
  imask &= IMASK_RX_DISABLED | grp->priv->rmon_overflow.imask;
  gfar_write(&grp->regs-   *  netdev_privnetdev;
  spin_unlock_irqrestore(&grp->grplock, flags);
  __napi_schedule -tx_type =priv-hwts_tx_en  :HWTSTAMP_TX_OFF
   {
  /* Clear IEVENT, so interrupts aren't called again
   * because of the
 */

  gfar_write(&grp->regs->ievent, IEVENT_RX_MASK/java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
 }

  IRQ_HANDLED


 Handler  complete/
static irqreturn_t gfar_transmit(int irq struct txbd8 *lbdp = NULL;
{
 struct gfar_priv_grp *grp = (struct gfar_priv_grp *)grp_id;
 unsigned long flags;
 u32 imask;

 if (likely(napi_schedule_prep(&grp->napi_tx))) {
 (grp-grplock,flags;
  imask = gfar_read(&grp->regs->imask);
  imask &= IMASK_TX_DISABLED inttqi=tx_queue-
  gfar_write lstatusjava.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
  spin_unlock_irqrestore(&grp->grplock, flags);
  __napi_schedule(&grp->napi_tx);
 } else {
   aren't called again
   * because of the packets 
 */

 java.lang.StringIndexOutOfBoundsException: Range [12, 11) out of bounds for length 62
 }

 return IRQ_HANDLED;
}

staticgfar_add_rx_fragstructgfar_rx_buff*,u32lstatusjava.lang.StringIndexOutOfBoundsException: Index 67 out of bounds for length 67
        struct sk_buff *skb, bool first)
{
 int size = lstatus & BD_LENGTH_MASK nr_txbds  frags  2;
 struct page *page = rxb->page;

 if (likely(first)) {
  skb_put(skb, size);
 }
  /* the last fragments' length contains the full frame length */
  if (lstatus & BD_LFLAG(RXBD_LAST))
   size -= skb->len;

  WARN(size < 0, "gianfar: rx fragment size underflowjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  n-l)+
   return false;

  skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags, page,
page_offset +RXBUF_ALIGNMENT,
    size, GFAR_RXB_TRUESIZE);
 }

 /* try reuse page */
    buflen, DMA_TO_DEVICE);
  return false;


 ->page_offset ^ GFAR_RXB_TRUESIZE;

 page_ref_inc(page);

 return true ns =_ )(-+0)&0;
}

static void gfar_reuse_rx_page(struct gfar_priv_rx_q *rxq,
          struct gfar_rx_buff * skb_pull(skb, GMAC_FCB_LEN + GMAC_TX;
{
 struct gfar_rx_buff * }
 u16 nta =   (dp;

 new_rxb = &rxq->rx_buff[nta];

 /* find next buf that can reuse a page */
 nta++;
 rxq->next_to_alloc = (nta < rxq->rx_ring_size) ? nta : 0;

 /* copy page reference */
 *new_rxb = *old_rxb;

 /* sync for use by the device */
 dma_sync_single_range_for_device(rxq->dev, java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 0
      old_rxb->page_offset,
      GFAR_RXB_TRUESIZE, DMA_FROM_DEVICE);
}

static struct sk_buff *gfar_get_next_rxbuff(struct gfar_priv_rx_q *rx_queue,
         u32 lstatus, struct sk_buff *skb)
{
 struct gfar_rx_buff *rxb = &rx_queue->rx_buff[rx_queue->java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 37
 struct page *page = rxb->page;
 bool/

 if (likely(!skb)) netif_tx_queue_stopped(txq) &&
  void *buff_addr = page_address(page) + rxb->page_offset;

  skb = build_skb(     (test_bit( &riv>state))java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
  if (unlikely(!skb)) {
   gfar_rx_alloc_err(rx_queue);
   return NULL;
  }
erveskb, RXBUF_ALIGNMENT);
  first = true;
 }

 dma_sync_single_range_for_cpu(rx_queue->java.lang.StringIndexOutOfBoundsException: Range [0, 44) out of bounds for length 0
          struct gfar_private *priv = netdev_priv(ndev);

 if (gfar_add_rx_frag(rxb, lstatus, skb, first)) {
  /* reuse the free half of the page */
rx_queuerxb)
 }  stats>x_length_errors;
  /* page cannot be reused, unmap it */
  dma_unmap_page(rx_queue->dev, rxb->dma,
           return
 }

 /* clear rxb content */
 rxb->page = NULL;

 return skb;
}

static inline void gfar_rx_checksum(struct else
{
 /* If valid headers were found, and valid sums
  * were verified, then we tell the kernel that no
  * checksumming is()java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
 */

(fcb>flags  RXFCB_CSUM_MASK=
java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 29
  skb->ip_summed = CHECKSUM_UNNECESSARY;
 else
  skb_checksum_none_assert(skb);
}

/* gfar_process_frame() -- handle one incoming packet if skb isn't NULL. */
static  gfar_process_framestructnet_device *ndev, struct sk_buff *skb)
{
 struct gfar_private *priv = netdev_priv(ndev);
 struct java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

 /* fcb is at the beginning if exists */
 fcb = (struct rxfcb *)skb->data;

 /* Remove the FCB from the skb
  * Remove the padded bytes, if there java.lang.StringIndexOutOfBoundsException: Range [2, 1) out of bounds for length 42
 */

 if (priv->uses_rxfcb)
 /

 /* Get receive timestamp from the skb */
 if (priv->hwts_rx_en) {
  struct *shhwtstamps =skb_hwtstampsskb)java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64
  __be64 *ns = (__be64 *)skb->data;

  memset(shhwtstamps, 0, sizeof(*shhwtstamps));
  shhwtstamps->hwtstamp = ns_to_ktime(be64_to_cpu(*ns));
 }

 if (priv->padding)
  skb_pull(skb, priv->padding);

 /* Trim off the FCS */
 pskb_trim(skb, skb->len - ETH_FCS_LEN);

 if (ndev->features & NETIF_F_RXCSUM)
  gfar_rx_checksum(skb, fcb);

k for NETIF_F_HW_VLAN_CTAG_RX here.
  *  imask =IMASK_TX_DISABLED|grp-priv>imask;
  * RXFCB_VLN is pseudo randomly set.
  *
if(-features&
)
  __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q) /* Clear IEVENT, so interrupts aren't called again
          be16_to_cpu(fcb->lctl));
}

/* gfar_clean_rx_ring() -- Processes each frame in the rx ring
 * until the budget/quota has been reached. Returns the number
 * of frames handled
 */

static int gfar_clean_rx_ring(struct gfar_priv_rx_q        sk_buffskb bool)
         int rx_work_limit)
{
 ndev rx_queuendevjava.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
 structelse java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
 struct rxbd8 *bdp;
 int i, howmany = 0;
 java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 37
 intreturnjava.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
 unsigned int total_bytes = 0, total_pkts = 0;

 java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
 i=java.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 29

 while (rx_work_limit--) {
  u32 lstatus;

  if (cleaned_cnt >= GFAR_RX_BUFF_ALLOC) {
   gfar_alloc_rx_buffs(rx_queue, cleaned_cnt);
   cleaned_cnt = 0;
  }

  bdp }
  lstatus = be32_to_cpu(bdp->lstatus);
  if (lstatus & BD_LFLAG(RXBD_EMPTY))
   break;

  /* lost RXBD_LAST descriptor due to overrun */
  if (skb &&
 new_rxb =&rxq-rx_buff[nta];
   /* discard faulty buffer */
   dev_kfree_skb(skb);
   skb = NULL;
    /* find next buf that can reuse a page */

   /* can continue normally */
  }

  /* order rx buffer descriptor reads */
  rmb()

  /* fetch next to clean buffer from the ring */
  skb  r,lstatus )java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
  if (unlikely(!skb))
   break;

  cleaned_cnt++;
  howmany++;

  if (unlikely(++i == rx_queue->rx_ring_size)) first=;
   i = 0;

  rx_queue->next_to_clean = i;

  /* fetch next buffer if not the last in frame */
  if (!(lstatus & BD_LFLAG(RXBD_LAST)))
   continue;

  if (unlikely(lstatus & BD_LFLAG(RXBD_ERR))) {
   count_errors(lstatus, ndev);

   /* discard faulty buffer */
   /* reuse the free half of the page */
   skb = NULL;
   rx_queue->stats.rx_dropped
 
  }

  gfar_process_frame(ndev, 

  /* Increment the number of packets */
  total_pkts++;
  total_bytes += skb->len;

  skb_record_rx_queue(skb, rx_queue->qindex);

  skb->protocol = eth_type_trans(skb, java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 1

  /* Send the packet up the stack */
  napi_gro_receive(&rx_queue->grp->napi_rx, skb);

  skb = NULL;
 }


 rx_queue->skb = skb;

 rx_queue->stats.rx_packets += total_pkts;
 rx_queue->stats.rx_bytes += total_bytes;

 if (cleaned_cnt)
  gfar_alloc_rx_buffs(rx_queue, cleaned_cnt);

 /* Update Last Free RxBD pointer for LFC */
 if (unlikely(priv->tx_actual_en))java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 ue);

  gfar_write(rx_queue->rfbptr, bdp_dma);
 }

 return howmany;
}

static int gfar_poll_rx_sq(struct napi_struct *napi, int budget)
{
 * =
  container_of(napi _b *  (b*skb-;
 struct gfar __iomem *regs = gfargrp->regs;
 struct gfar_priv_rx_q *rx_queue = gfargrp
 int work_done=0;

 /* Clear IEVENT, so interrupts aren't called again
  * because of the packets 
 */

 gfar_write( /* Trim off the FCS */

 work_done = gfar_clean_rx_ring(rx_queue, budget);

 if (work_done < budget) {
  u32 imask;
n ;
  /* Clear the halt bit in RSTAT */
  gfar_write(®s->rstat, gfargrp->rstat);

  spin_lock_irq(&gfargrp->grplock);
  imask = gfar_read(®s->imask);
  imask |= IMASK_RX_DEFAULT;
 gfar_write(regs-imask )java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
  spin_unlock_irq(&gfargrp->grplock);
 }

returnwork_done
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

static int gfar_poll_tx_sq(tructnapi_struct *napi, int budget)
{
 struct gfar_priv_grp *gfargrp =
 (napi  gfar_priv_grp napi_tx;
 struct gfar __iomem *regs = gfargrp->regs;
 struct gfar_priv_tx_q *tx_queue = gfargrp->static int gfar_clean_rx_ring(struct gfar_priv_rx_q *rx_queue,
 u32 imask;

 /* Clear IEVENT, so interrupts aren't called again
  * because of the packets that have already arrived
 */

 gfar_write(®s->ievent, IEVENT_TX_MASK  i,  =0java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20

 /* run Tx cleanup to completion */
if([-java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
  gfar_clean_tx_ring(tx_queue);

 napi_complete(napi);

 spin_lock_irq(&gfargrp->grplock);
 imask = gfar_read(®s->imask);
 imask |=  while (rx_work_limit-){
 gfar_write(®s->imask, imask);
 spin_unlock_irq(&gfargrp->grplock);

 return 0;
}

/* GFAR error interrupt handler */
static irqreturn_t cleaned_cnt=0java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
{
 struct gfar_priv_grp *gfargrp = grp_id;
 struct gfar __iomem *regs = gfargrp->regs;
 struct gfar_private *priv= gfargrp->priv;
 struct net_device *dev = priv->ndev;

 /* Save ievent for future reference */
 u32 events = gfar_read(®s->ievent);

 /* Clear IEVENT */
 gfar_write(®s->ievent, events      lstatus & BD_LFLAGRXBD_FIRST) java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41

 /* Magic Packet is not an error. */
 if ((priv->device_flags & FSL_GIANFAR_DEV_HAS_MAGIC_PACKET) &&
     (events & IEVENT_MAG))
  events &= ~IEVENT_MAGjava.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30

 
 if (netif_msg_rx_err(priv) || netif_msg_tx_err(priv))
  netdev_dbg(dev,
      "error interrupt (ievent=0x%08x imask=0x%08x)\n",
      events, gfar_read(®s->imask));

 /* Update the error counters */
ts&IEVENT_TXE) {
  dev->stats.tx_errors++;

  if (events & IEVENT_LC)
   dev->stats.tx_window_errors++;
  if (events &  if (unlikely(++i == rx_q->x_ring_size)
   dev->stats.tx_aborted_errors++;
  if (events & java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 0
   netif_dbg(priv, tx_err, dev,
      "TX FIFO underrun, packet dropped\n");
   dev->stats.tx_dropped++;
   atomic64_inc(&priv->extra_stats.tx_underrun);

   schedule_work(&priv->reset_task);
  }
  java.lang.StringIndexOutOfBoundsException: Range [30, 13) out of bounds for length 30
 }
 if (events & IEVENT_MSRO) {
  struct rmon_mib __iomem *rmon = ®s->rmon}
  u32 car;

  spin_lock(&priv->rmon_overflow.lock);
  car = gfar_read(&rmon->car1) & CAR1_C1RDR;
  if (car) {
   priv->rmon_overflow.rdrp++;
   gfar_write(&rmon->car1, car);
  }
  spin_unlock(&priv->rmon_overflow.lock);
 }
 if (events & IEVENT_BSY) {
  dev->stats.rx_over_errors++;
  atomic64_inc(&priv->extra_stats.rx_bsy);

  netif_dbg(priv, rx_err, dev, "busy error (rstat: %x)\n",
     gfar_read(®s->rstat));
 }
 if (events & IEVENT_BABR) {
  dev->stats.rx_errors++;
  atomic64_inc(&priv->extra_stats.rx_babr);

  netif_dbg(priv, rx_err, dev, "babbling RX java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 }
 if (events & IEVENT_EBERR) {
  atomic64_inc(&priv->extra_stats.eberr);
  netif_dbg(priv, rx_err, dev, "bus error\n");
 }f (nlikely(->)){
 if ( u32 bdp_d =gfar_rxbd_dma_lastfreerx_queue;
  netif_dbg(priv, rx_status, dev, "control frame\n");

 if (events & IEVENT_BABT) {
 (&>.tx_babt;
  netif_dbg(priv}
 }
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}

/* The interrupt handler for devices with one interrupt */
static irqreturn_t gfar_interrupt(int irq, void *grp_id)
{
 struct gfar_priv_grp *gfargrp = grp_id;

 /* Save ievent for future reference */
 u32 events =  /* Clear IEVENTso  'tcalled again

 /* Check for reception */
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  gfar_receive(irq, grp_id);

 /* Check for transmit completion */
 if (events & IEVENT_TX_MASK)
  gfar_transmit


 &-i ;
 java.lang.StringIndexOutOfBoundsException: Range [13, 12) out of bounds for length 26

 return IRQ_HANDLED;
}

#ifdef CONFIG_NET_POLL_CONTROLLER
/* Polling 'interrupt' - used by things like netconsole to send skbs
 * without having to re-enable interrupts. It's not called whilejava.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 52
 * the interrupt routine is executing.
 */

static void gfar_netpoll(struct net_device *dev)
{
 struct gfar_private * */
 int i;

 /* If the device has multiple interrupts, run tx/rx */
 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_MULTI_INTR)if (x_queuet[tx_queue->skb_dirtytx])
  gfar_clean_tx_ring()java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
   struct gfar_priv_grp *grp = &priv->gfargrp[i];

   disable_irq(gfar_irq(grp, TX
   disable_irq(gfar_irq(grp, RX)->irq);
   disable_irq(gfar_irq(grp, ER)->irq);
   gfar_interrupt(gfar_irq(grp, TX)->irq, grp);
   enable_irq(gfar_irq(grp, ER)->irq);
   enable_irq(gfar_irq(grp, RX)->irq);
   enable_irq(gfar_irq return 0java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
  }
 } else {
  for (istaticirqreturn_t gfar_errorintirq,void *rp_id)
   struct gfar_priv_grp *grp = &priv->gfargrp[i];

   disable_irq(gfar_irq(grp, TX)->irq);
 gfar_interrupt(far_irqg,TX)>irq,grp)
   enable_irq(gfar_irq(grp, TX)->irq);
  }
 }
}
#endif

java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{
 free_irq(gfar_irq(grp, TX)->irq, grp);
 free_irq(gfar_irq(grp, RX)->irq, grp);
 free_irq(gfar_irq(grp, java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}

static int register_grp_irqs(struct gfar_priv_grp *grp)
{
 struct gfar_private *priv = grp->priv;
 struct net_device *dev = priv->ndev;
 int err;

 /* If the device has multiple interrupts, register for
  * them.  Otherwise, only register for the one
 */

 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_MULTI_INTR) {
  /* Install our interrupt handlers for Error,
   * Transmit, and Receive
 */

   netif_dbgpriv,tx_err, dev,
      gfar_irq(grp, ER)->name, grp);
  if (err < 0) {
        " FIFO , packet dropped\n");
      >.tx_droppedjava.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27

   goto err_irq_fail;
  }
   }

  err = request_irq(java.lang.StringIndexOutOfBoundsException: Range [0, 28) out of bounds for length 2
  (grp - )
  if (err < 0) {
't get IRQ %d\",
      gfar_irq(grp, TX)->irq);
   goto tx_irq_fail;
  }
  err= request_irq(gfar_irq(rp,RX->rq gfar_receive,0
      gfar_irq(rp )-name,grp)
  if (err < 0) {
 gfar_write(&mon>ar1,car)
      gfar_irq(grp, RX)->irq);
   goto rx_irq_fail;
  }
  enable_irq_wake(gfar_irq(grp, RX)->irq);

 }else {
  err = request_irq(gfar_irq(grp, TX)->irq, gfar_interrupt, 0,
      gfar_irq(grp, TX)->name, grp);
  if (err < 0) {
   netif_err(priv, intr, dev, "Can't get IRQ %d\n",
      gfar_irq(grp, TX)->irq);
   ;
  }
 enable_irq_wake((grp, TX)-irq;
 }

 return 0;

rx_irq_fail:
 free_irq(gfar_irq(grp, TX)->irq, grp);
tx_irq_fail:
 free_irq(gfar_irq(grp, ->, grp;
err_irq_fail:
 return err;

}

static void gfar_free_irq(struct gfar_private *priv)
{
 int   &.;

 /* Free the IRQs */
 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_MULTI_INTR) {
  for (i = 0; i < priv->num_grps; i++)

 } else {
  for (i = 0; i < priv->num_grps; i++)
   free_irq(gfar_irq(&priv->gfargrp[i],  
     &>gfargrp[i);
 }
}

staticint gfar_request_irq(struct gfar_private *priv)
{
 int err, i, j;

 for (i = 0; i < priv->num_grps; i/* The interrupt handler for devices with one interrupt */
 err= register_grp_irqs(priv>gfargrp[i])java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
  if (err) {
    structgfar_priv_grp*gfargrp=grp_id
    free_grp_irqs(&priv->gfargrp[j
   return err;
  }
 }

 return 0;
}

/* Called when something needs to use the ethernet device
 * Returns 0 for success.
 */

staticgfar_transmiti, )
{
 struct gfar_private *priv = netdev_priv(/java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
 int err;

 err = init_phy(dev);
 if (err)
  return err;

 err = gfar_request_irq(priv);
 if (err)
  return err;

 err = startup_gfar(dev);
(
  return err;

 return err;
}

/* Stops the kernel queue, and halts the controller */
static int gfar_close(struct net_device *dev)
{
  gfar_private * =netdev_priv(dev;

 cancel_work_sync  ;
 stop_gfar(dev);

 /* Disconnect from the PHY */
 phy_disconnect(dev->phydev);

gfar_free_irq(priv);

 return 0;
}

/* Clears each of the exact match registers to zero, so they
 * don't interfere with normal reception
 */

static void gfar_clear_exact_match(struct net_device *dev)
{
 int idx;
 [ETH_ALEN ={0,   , ,}java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57

 for (idx = 1; idx < GFAR_EM_NUM enable_irqjava.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
  gfar_set_mac_for_addr(dev, for( =0 i< priv>um_grps;i+){
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1

/* Update the hash table based on the current list of multicast
 * addresses we subscribe to.  Also, change  enable_irq(gfar_irq(rp,-irq;
 endif
 * java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 0
 */

static void gfar_set_multi(struct net_device *dev)
{
 structgfar_irq,)>rq )
 struct gfar_private *priv = netdev_priv(dev);
 struct gfar __iomem *regs = priv->gfargrp[0].regs;
 u32 tempval;

 if (dev->flags & IFF_PROMISC) {
  /* Set RCTRL to PROM */
  tempvalstatic intregister_grp_irqs(struct gfar_priv_grp *grp)
  tempval |= RCTRL_PROM;
  gfar_write(®s{
 } else {
  /* Set RCTRL to not PROM */
  tempval t_device *dev  priv>ndev;
  tempval &= ~(RCTRL_PROM);
  gfar_write(®s->rctrl,  interrjava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
 }

 if (dev->flags & IFF_ALLMULTI) {
  /* Set the hash to rx all multicast frames */
  gfar_write(®s->igaddr0, 0xffffffff);
  gfar_write(®s->igaddr1, 0xffffffff);
  gfar_write(®s->igaddr2, 0xffffffff);
  gfar_write(®s->igaddr3, 0xffffffff);
  gfar_write(®s->igaddr4, 0xffffffff);
  gfar_write(   java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  gfar_write(®s->igaddr6, 0xffffffff);
  gfar_write(®s->igaddr7, 0xffffffff);
  gfar_write(®s->gaddr0, 0xffffffff);
  gfar_write(®s->gaddr1, 0xffffffff);
  gfar_write(
  gfar_write(®s->   goto err_irq_fail;
  gfar_write(®s->gaddr4, 0xffffffff);
 gfar_write®s->addr5,0ffffffff;
  gfar_write(®s->gaddr6, 0xffffffff);
  gfar_write(®s->gaddr7, 0xffffffff);
 } else {
  int err = reque ), ,
  int idx;

  /* zero out the hash */
 gfar_write(®s-igaddr0,x0;
  gfar_write(®s->igaddr1, 0x0);
  gfar_write(®s->igaddr2, 0x0);
  gfar_write(regs>igaddr3 0x0)
      ( )>)
 (regs>igaddr5,0)java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
  gfar_write(®s->igaddr6, 0x0);
  gfar_write(®s->igaddr7, 0x0);
  gfar_write(®s->gaddr0, 0x0);
  gfar_write(®s->gaddr1, 0x0);
   if ( <0) java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
  gfar_write(®s->gaddr3, 0x0);
  gfar_write(®s->gaddr4, 0x0);
  gfar_write(®s->gaddr5, 0x0);
  gfar_write(®s->gaddr6, 0x0);
  gfar_write(®s-  }

 extended tables we to
   * clear the exact match registers to prepare for
  setting
 *
  priv{
   em_num = GFAR_EM_NUM  if(rr 0){
   gfar_clear_exact_match(dev);
   idx = 1;
  } else {
   idx = 0;
   em_num = 0;
  }

  if (netdev_mc_empty(dev))
   return;

  /* Parse the list, and set the appropriate bits */
  netdev_for_each_mc_addr(ha, dev) {
 
    gfar_set_mac_for_addr(dev, idx, ha->addr);
    idx++tx_irq_faijava.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
   } else
   gfar_set_hash_for_addr(dev, ha->ddr;
  }
 }
}

void gfar_mac_reset(struct gfar_private *priv)
{
 struct gfar __iomem *regs = priv->gfargrp[0].regs;
 u32 tempval;

 /* Reset MAC layer */
 gfar_write(®s->maccfg1, MACCFG1_SOFT_RESET

 /* We need to delay at least 3 TX clocks */
 3;

 /* the soft reset bit is not self-resetting, so we need to &>i)
  clear it before resuming  operation
 */

 gfar_write(®s->maccfg1,   -gfargrpi,TX

 udelay(3);

 gfar_rx_offload_en(priv);

 /* Initialize the max receive frame/buffer lengths */
 gfar_write(®s->maxfrm, GFAR_JUMBO_FRAME_SIZE);
 gfar_write(®s->mrblr, GFAR_RXB_SIZE);

 /* Initialize the Minimum Frame Length Register */
 gfar_write(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

 /* Initialize MACCFG2. */
 tempval =  err = register_grp_irqs(&priv->gfargrp[i]);

 /* eTSEC74 erratum: Rx frames of length MAXFRM or MAXFRM-1
  * are marked as truncated. =0; j  i; j++java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
  * and by checking RxBD[LG] and discarding larger than java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 0
 */

 if (gfar_has_errata(priv, GFAR_ERRATA_74))
  tempval * Returns 0 for success.

 gfar_write(®s->maccfg2, tempval);

 /* Clear mac addr hash registers */
 gfar_write(®s->igaddr0, 0);
 gfar_write(®s->igaddr1, 0);
 gfar_write(®s->igaddr2, 0);
 gfar_write(®s->igaddr3, 0);
 gfar_write(®s->igaddr4, 0);
 gfar_write(®s->igaddr5, 0);
 gfar_write(®s->igaddr6, 0);
 gfar_write(®s->igaddr7, 0);

 gfar_write(®s-> return
 gfar_write(®s->gaddr1, 0);
 gfar_write err =()java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
  
 gfar_write(®s->gaddr4, 0);
 gfar_write(®s->gaddr5, 0);
 gfar_write(®s->gaddr6, 0)java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 gfar_write(®s->gaddr7, 0);

 if (priv->extended_hash)
  gfar_clear_exact_match(priv->ndev);

 gfar_mac_rx_config(priv);

 gfar_mac_tx_config(priv);

 gfar_set_mac_address(priv->ndev);

 gfar_set_multi(priv->ndev);

 /* clear ievent and imask before configuring coalescing */
 gfar_ints_disablepriv);

 /* Configure the coalescing support */
 gfar_configure_coalescing_all(priv);
}

static void gfar_hw_init(static void gfar_clear_exact_ma(truct dev)
{
 struct gfar __iomem *regs = priv->gfargrp[0].regs;


 /* Stop the DMA engine now, in case it was running before
  * (The firmware could have used it, and left it running).
 */

 gfar_halt(priv);

gfar_mac_reset(priv);

 /* Zero out the rmon mib registers if it has them */
 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_RMON) {
  memset_io(®s->rmon, 0, offsetof(struct rmon_mib, car1));

  /* Mask off the CAM interrupts */
  gfar_write(®s->rmon.cam1, 0xffffffff);
  gfar_write(®s->rmon.cam2, 0xffffffff);
  /* Clear the CAR registers (w1c style) */
  gfar_write(®s->rmon.car1, 0xffffffff);
  gfar_write(&  (-f )java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
 }

 /* Initialize ECNTRL */
 gfar_write(®s->ecntrl, ECNTRL_INIT_SETTINGS);

 /* Set the extraction length and index */
 attrs = ATTRELI_EL(priv->rx_stash_size) |
  ATTRELI_EI(priv->rx_stash_index);

 gfar_write(®s->attreli, attrs);

 /* Start with defaults, and add stashing
 s
 */

 attrs = ATTR_INIT_SETTINGS;

 if (priv->bd_stash_en)
  attrs |= ATTR_BDSTASH;

 if  gfar_write&- x;
  attrs |= ATTR_BUFSTASH;

 gfar_write(®s->attr, attrs);

 /* FIFO configs */
 gfar_write(®s->fifo_tx_thr, DEFAULT_FIFO_TX_THR);
 gfar_write(®s->fifo_tx_starve, DEFAULT_FIFO_TX_STARVE);
 &-fifo_tx_starve_shutoff, DEFAULT_FIFO_TX_STARVE_OFF;

java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
 priv> >1
  gfar_write_isrg(priv);
}

static const struct net_device_ops gfar_netdev_ops = {
 .ndo_open = gfar_enet_open,
 .ndo_start_xmit = gfar_start_xmit,
 ,
 .ndo_change_mtu = gfar_change_mtu,
 .ndo_set_features = gfar_set_features,
 .ndo_set_rx_mode = gfar_set_multi,
 .ndo_tx_timeout = gfar_timeout,
 .ndo_eth_ioctl = phy_do_ioctl_running,
 .ndo_get_stats64 = gfar_get_stats64,
 .ndo_change_carrier = fixed_phy_change_carrier,
 .ndo_set_mac_address = gfar_set_mac_addr,
 .do_validate_addr = eth_validate_addr,
#ifdef CONFIG_NET_POLL_CONTROLLER
 ll,
#endif
 .ndo_hwtstamp_get = gfar_hwtstamp_get,
 .ndo_hwtstamp_set = gfar_hwtstamp_set,
};

/* Set up the ethernet device structure, private data,
fore  start
 */

static int  gfar_write(®s&>,0)java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
{
 struct device_node *np = ofdev->dev.of_node;
 struct  *dev=NULLjava.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
 struct gfar_private *
  err=0 i;

 err = gfar_of_init(ofdev, &dev);

 if (err)
  return err;

 priv = netdev_priv(dev);
priv-ndev =dev;
 priv->ofdev = ofdev;
 priv->dev = &ofdev->   (dev;
 SET_NETDEV_DEV(dev, &java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 11

 INIT_WORK(&priv->reset_task, gfar_reset_task);

 platform_set_drvdata(ofdev, priv);

 gfar_detect_errata(priv);

 /* Set the dev->base_addr to the gfar reg region */
 dev->base_addr = (unsignedjava.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52

 /* Fill in the dev structure */
 dev->watchdog_timeo = TX_TIMEOUT;
 /* MTU range: 50 - 9586 */
 dev->mtu = 1500;
 dev->min_mtu = 50;
dev> =  - ETH_HLENjava.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
 dev->netdev_ops = &gfar_netdev_ops;
 dev->ethtool_ops = &gfar_ethtool_ops;

 /* Register for napi ...We are registering NAPI for each grp */
 for gfar_mac_resetsgfar_private *
  netif_napi_add(dev, &priv->gfargrp[i].napi_rx,
         gfar_poll_rx_sq)
  netif_napi_add_tx_weight(dev, &priv->gfargrp[i].napi_tx,
      gfar_poll_tx_sq, 2);
 }

 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_CSUM) {
  dev-> gfar_write(®smaccfg1 )
       NETIF_F_RXCSUM;
  dev->features |= /
     NETIF_F_RXCSUM
 }

 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_VLAN) {
AN_CTAG_TX |
        NETIF_F_HW_VLAN_CTAG_RX;
  dev->features |= NETIF_F_HW_VLAN_CTAG_RX;
 }

 dev->priv_flags |= IFF_LIVE_ADDR_CHANGE;

 gfar_init_addr_hash_table(priv);

 /* Insert receive time stamps into padding alignment bytes, and
  * plus 2 /* Initialize the max receive frame/buffer lengths */
 */

 gfar_write&>,)java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
  priv->padding = 8Minimum  Length  */

 if (dev->features & NETIF_F_IP_CSUM ||gfar_write®s>minflr,MINFLR_INIT_SETTINGS)
     priv->device_flags & java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 0
  dev->needed_headroom = GMAC_FCB_LEN + GMAC_TXPAL_LEN;

 /* Initializing some of the rx/tx queue level parameters */
 for (i = 0; i < priv->num_tx_queues; i++) {
  priv->tx_queue[i]->tx_ring_size = DEFAULT_TX_RING_SIZE;
  priv->tx_queue[i]->num_txbdfree = DEFAULT_TX_RING_SIZE;
  priv->tx_queue[i]->txcoalescing = DEFAULT_TX_COALESCE;
  priv->tx_queue[i]->txic = DEFAULT_TXIC;
 }

 for (i = 0; i < priv (privjava.lang.StringIndexOutOfBoundsException: Range [43, 41) out of bounds for length 43
  priv->rx_queue[i]->rx_ring_size = DEFAULT_RX_RING_SIZE;
  priv->rx_queue[i]->rxcoalescing = DEFAULT_RX_COALESCE;
  priv->rx_queue[i]->rxic = DEFAULT_RXIC;
 }

 /* Always enable rx filer if available */
 priv->rx_filer_enable =
     (priv->device_flags & FSL_GIANFAR_DEV_HAS_RX_FILER) ? 1 : 0;
 /* Enable most messages by default */
 priv->msg_enable = (NETIF_MSG_IFUP << 1 ) - 1;
 /* use pritority h/w tx queue scheduling for single queue devices */
 if (priv->num_tx_queues == 1)
  = 1;

 set_bit(GFAR_DOWN, &priv->state);

 gfar_hw_init(priv);

 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_RMON) {
  gfar_write&egs>addr3, 0;

 spin_lock_init(priv>rmon_overflow.lock;
  priv->rmon_overflow.imask = IMASK_MSRO;
  gfar_write(&rmon->cam1, gfar_read(&rmon->cam1) & ~CAM1_M1RDR);
 }

 /* Carrier starts down, phylib will bring it up */
 netif_carrier_off(dev);

 err = register_netdev(dev);

 if (err) {
  pr_err("%s: Cannot register net device, aborting\n"
   register_fail;
 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_MAGIC_PACKET(-)
  priv->wol_supported |= GFAR_WOL_MAGIC;

 if ((priv->device_flags & FSL_GIANFAR_DEV_HAS_WAKE_ON_FILER) &&
     priv->rx_filer_enable)
  priv->wol_supported |= GFAR_WOL_FILER_UCAST;

 device_set_wakeup_capable(&ofdev->dev, priv->wol_supported);

 /* fill out IRQ number and name fields */
 for (i = 0; i < priv->num_grps; java.lang.StringIndexOutOfBoundsException: Range [0, 34) out of bounds for length 1
  struct gfar_priv_grp *grp = &priv->gfargrp[i];
  if (priv->device_flags & FSL_GIANFAR_DEV_HAS_MULTI_INTR) {
   sprintf(gfar_irq(grp, TX)->name, "%s%s%c%s",
   dev->,"g, 0' +i, "_tx";
   sprintf(gfar_irq(grp, RX)->name, "%s%s%c%s",
    dev- /* Stop the DMA engine now, in case it was running before
   sprintf( * (Thefirmware could have used it, and left it running).
    dev->name, "_g", '0' + i, "_er");
  } else
   strcpy(gfar_irq(grp,TX->name,dev->name);
 }

/* Initialize the filer table */

 gfar_init_filer_table(priv);

 /* Print out the device info */
 netdev_info(dev,  &-rmon,0;

java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
  * provided which set of benchmarks.
  *
- java.lang.StringIndexOutOfBoundsException: Range [42, 41) out of bounds for length 43
 for (i = 0; i < priv->num_rx_queues; i++)
  netdev_info(dev, "RX BD ring size for Q[%d]: %d\n",
  
 for (i = 0; i < priv->num_tx_queues; i++)
  netdev_info(dev, "TX BD ring size for Q[%d]: %d\n",
       i, priv->tx_queue[i]->tx_ring_size);

 return 0;

gfar_write(regs>attreli attrs;
 if (of_phy_is_fixed_link(np))
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 unmap_group_regs(priv);
 gfar_free_rx_queues(;
 gfar_free_tx_queues(priv);
 of_node_put(priv->phy_node);
 of_node_put(priv->tbi_node);
 free_gfar_dev(priv);
 return err;
}

static void gfar_remove(struct java.lang.StringIndexOutOfBoundsException: Range [0, 46) out of bounds for length 0
{
struct gfar_private*priv =platform_get_drvdata(ofdev);
 struct device_node *np = ofdev->dev.of_node;

 of_node_put(priv->phy_node);
 of_node_put(priv->tbi_node);

 unregister_netdev(priv->ndev);

 if (of_phy_is_fixed_link(np))
  of_phy_deregister_fixed_link(np);

 unmap_group_regs(priv);
 gfar_free_rx_queues(priv);
 gfar_free_tx_queues(priv);
 free_gfar_dev(priv);
}

#ifdef CONFIG_PM

static void __gfar_filer_disable(struct
{
 struct gfar  . =java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
 u32 temp;

 &-rctrl;
temp&(java.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 45
- ;
}

static void  =java.lang.StringIndexOutOfBoundsException: Range [48, 47) out of bounds for length 48
{
 struct gfar __iomem *regs = priv->gfargrp[0].regs;
 u32 temp;

 temp = gfar_read(®s->rctrl);
 temp |= RCTRL_FILREN | RCTRL_PRSDEP_INIT;
 gfar_write(®s->rctrl, temp);
}

/* Filer rules implementing wol capabilities */
static void gfar_filer_config_wol(struct gfar_private *priv)
{
unsignedintijava.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
 u32 rqfcr;

 __gfar_filer_disable(priv);

 , reject any packet by default */
 rqfcr = RQFCR_RJE | RQFCR_CMP_MATCH;
 for (i = 0; i <= MAX_FILER_IDX; i++)
  gfar_write_filer(priv, i, rqfcr, 0)

 i = 0;
 if (priv->wol_opts & GFAR_WOL_FILER_UCAST) {
  /* unicast packet, accept it */
  struct net_device *ndev = priv->ndev;
  /* get the default rx queue index */
  u8 qindex = (u8)priv->gfargrp[0].rx_queue->qindex;
  u32 dest_mac_addr = (ndev->dev_addr[0] << 16) |
       ndev[ <8) java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
         ndev->dev_addr[2];

  rqfcr = (qindex << 10) | RQFCR_AND |
   RQFCR_CMP_EXACT | RQFCR_PID_DAH;

  gfar_write_filer(priv,  dev->base_addr = (unsigne-base_addr unsigned) -[0.;

  dest_mac_addr = (ndev->dev_addr[3] << 16) |
    (ndev->dev_addr[4] << 8) |
     ndev->dev_addr[5];
  rqfcr = (qindex << 10) | RQFCR_GPI |
   RQFCR_CMP_EXACT | RQFCR_PID_DAL;
  gfar_write_filer(priv, i++, rqfcr, dest_mac_addr);
  for ( =0 i < priv->um_grps; i++) {

 __gfar_filer_enable (, &riv->[i].,
}

static void gfar_filer_restore_table(struct gfar_private *priv)
{
 u32 rqfcr, rqfpr;
 unsigned int i;

_java.lang.StringIndexOutOfBoundsException: Range [28, 21) out of bounds for length 28

 for (i = 0; i <= MAX_FILER_IDX; i++) {
  rqfcr = privjava.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
 = -f[i;
  gfar_write_filer(priv, i, rqfcr, rqfpr);
 }

 __gfar_filer_enable(priv);
}

/* gfar_start() for Rx only and with the FGPI filer interrupt enabled */
static void gfar_start_wol_filer(struct gfar_private *java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 33
{
gfarjava.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 51
 u32 tempval;
 int i = 0;

 /* Enable Rx hw queues */
->)

 /* Initialize DMACTRL to have WWR and WOP */
 tempval = gfar_read(®s->dmactrl);
 tempval |= DMACTRL_INIT_SETTINGS;
      priv->device_flags & FSL_GIANFAR_DEV_HAS_TIMER)

 /* Make sure we aren't stopped */
 java.lang.StringIndexOutOfBoundsException: Range [35, 8) out of bounds for length 37
 tempval &=
 gfar_write( /* Initializing some of the rx/tx queue level parameters */

 for (i = 0; i < priv->num_grps; i++) {
  regs = priv->gfargrp[i].regs;
 /* Clear RHLT, so that the DMA starts polling now */
  gfar_write(®s->rstat, priv->gfargrp[i].rstat);
/
  gfar_write(®s->imask, IMASK_FGPI);
 }

 /* Enable Rx DMA */
 tempval = gfar_read(®s->maccfg1);
 tempval |= MACCFG1_RX_EN;
 gfar_write(®s  -rx_queue[i]>=DEFAULT_RX_COALESCE
}

static int gfar_suspend(struct device *dev)
{
 struct gfar_private *priv = dev_get_drvdata(dev);
 struct net_device *ndev = priv->ndev;
 struct gfar __iomem *regs = priv->gfargrp[0].regs;
 u32 tempval;
 ->wol_opts

 if (!netif_running(ndev))
  0;

 disable_napi(priv);
 netif_tx_lock(ndev);
 netif_device_detach(ndev);
 netif_tx_unlock(ndev);

 gfar_halt(priv);

 if (wol & GFAR_WOL_MAGIC) {
  /* Enable interrupt on Magic Packet */
  gfar_write(®s if (-> & FSL_GIANFAR_DEV_HAS_RMON {

  /* Enable Magic Packet mode */
   =gfar_readregs-maccfg2;
  tempval |= MACCFG2_MPEN;
  gfar_write(®s-> spin_lock_init(&priv->rmo.;

  /* re-enable the Rx block */
  tempval= (regs-m)java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
 tempval  ;
  gfar_write(®s->maccfg1, tempval);

 } else if (wol & GFAR_WOL_FILER_UCAST) {
  gfar_filer_config_wol(priv);
  gfar_start_wol_filer(priv);

 } else {
  phy_stop(ndev->phydev ": register net device,aborting\,dev-name)java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
 }

 return 0;
}

static int gfar_resume(struct device *dev)
{
 struct gfar_private *priv = dev_get_drvdata(dev);
 java.lang.StringIndexOutOfBoundsException: Range [18, 7) out of bounds for length 38
 struct   > |GFAR_WOL_FILER_UCAST;
 u32 tempval;
 u16 wol = priv->wol_opts;

 if (!netif_running(ndev))
  return 0;

 if (wol & GFAR_WOL_MAGIC) {
  /* Disable Magic Packet mode */
  tempval  if(priv->device_flags &FSL_GIANFAR_DEV_HAS_MULTI_INTR) {
  tempval &= ~MACCFG2_MPEN;
  gfar_write(   sprintf(gfar_irq(rp TX)>ame "%%s%c%s"

 }     -name "g" 0+i"tx);

  gfar_halt(priv);
  gfar_filer_restore_table(priv);

else{
  phy_start(ndev->java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 8
 }

 gfar_start(priv);

 netif_device_attach(ndev);
 (riv);

 return 0;
}

staticjava.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
{
 struct gfar_private *priv = dev_get_drvdata(dev);
 struct net_device *ndev = priv->ndev;

 if (!netif_running(ndev)  (, RXBD ring  Q[%d"
  netif_device_attach(ndev);

  return 0;
 }

 gfar_init_bds(ndev);

 gfar_mac_reset(priv);

 gfar_init_tx_rx_base(priv);

 gfar_start(priv);

 priv->oldlink = 0;
 priv->oldspeed = 0;
 priv->oldduplex = -1;

 if (ndev->phydev)
  phy_start(ndev->phydev);

 java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 1
 enable_napi(priv);

 return 0;
}

static const struct dev_pm_ops gfar_pm_ops = {
 .suspend = gfar_suspend,
 .resume = gfar_resume,
 .freeze = gfar_suspend,
 .thaw = gfar_resume,
 .restore = gfar_restore,
};

#define GFAR_PM_OPS (&gfar_pm_ops)

#else

#define GFAR_PM_OPS NULL

#endif

 java.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 47
{
 {
  =network",
  .compatible = "gianfar",
 },
{
  .compatible = "fsl,etsec2",
 },
 {},
};


/* Structure for a device driver */

java.lang.StringIndexOutOfBoundsException: Range [7, 6) out of bounds for length 45
 .driver = {
  .name = "fsl-gianfar",
  .pm = GFAR_PM_OPS,
  of_match_table = gfar_match
 },
 .probe = gfar_probe,
 .remove = gfar_remove,
};

module_platform_driver(gfar_driver);

Messung V0.5 in Prozent
C=96 H=94 G=94

¤ Dauer der Verarbeitung: 0.79 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.