Loading drivers/net/ipg.c +12 −24 Original line number Diff line number Diff line Loading @@ -857,21 +857,14 @@ static void init_tfdlist(struct net_device *dev) static void ipg_nic_txfree(struct net_device *dev) { struct ipg_nic_private *sp = netdev_priv(dev); void __iomem *ioaddr = sp->ioaddr; unsigned int curr; u64 txd_map; unsigned int released, pending; txd_map = (u64)sp->txd_map; curr = ipg_r32(TFD_LIST_PTR_0) - do_div(txd_map, sizeof(struct ipg_tx)) - 1; unsigned int released, pending, dirty; IPG_DEBUG_MSG("_nic_txfree\n"); pending = sp->tx_current - sp->tx_dirty; dirty = sp->tx_dirty % IPG_TFDLIST_LENGTH; for (released = 0; released < pending; released++) { unsigned int dirty = sp->tx_dirty % IPG_TFDLIST_LENGTH; struct sk_buff *skb = sp->TxBuff[dirty]; struct ipg_tx *txfd = sp->txd + dirty; Loading @@ -882,12 +875,9 @@ static void ipg_nic_txfree(struct net_device *dev) * If the TFDDone bit is set, free the associated * buffer. */ if (dirty == curr) if (!(txfd->tfc & cpu_to_le64(IPG_TFC_TFDDONE))) break; /* Setup TFDDONE for compatible issue. */ txfd->tfc |= cpu_to_le64(IPG_TFC_TFDDONE); /* Free the transmit buffer. */ if (skb) { pci_unmap_single(sp->pdev, Loading @@ -898,6 +888,7 @@ static void ipg_nic_txfree(struct net_device *dev) sp->TxBuff[dirty] = NULL; } dirty = (dirty + 1) % IPG_TFDLIST_LENGTH; } sp->tx_dirty += released; Loading Loading @@ -1630,6 +1621,8 @@ static irqreturn_t ipg_interrupt_handler(int irq, void *dev_inst) #ifdef JUMBO_FRAME ipg_nic_rxrestore(dev); #endif spin_lock(&sp->lock); /* Get interrupt source information, and acknowledge * some (i.e. TxDMAComplete, RxDMAComplete, RxEarly, * IntRequested, MacControlFrame, LinkEvent) interrupts Loading @@ -1647,9 +1640,7 @@ static irqreturn_t ipg_interrupt_handler(int irq, void *dev_inst) handled = 1; if (unlikely(!netif_running(dev))) goto out; spin_lock(&sp->lock); goto out_unlock; /* If RFDListEnd interrupt, restore all used RFDs. */ if (status & IPG_IS_RFD_LIST_END) { Loading Loading @@ -1733,9 +1724,9 @@ static irqreturn_t ipg_interrupt_handler(int irq, void *dev_inst) ipg_w16(IPG_IE_TX_DMA_COMPLETE | IPG_IE_RX_DMA_COMPLETE | IPG_IE_HOST_ERROR | IPG_IE_INT_REQUESTED | IPG_IE_TX_COMPLETE | IPG_IE_LINK_EVENT | IPG_IE_UPDATE_STATS, INT_ENABLE); out_unlock: spin_unlock(&sp->lock); out: return IRQ_RETVAL(handled); } Loading Loading @@ -1943,10 +1934,7 @@ static int ipg_nic_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) */ if (sp->tenmbpsmode) txfd->tfc |= cpu_to_le64(IPG_TFC_TXINDICATE); else if (!((sp->tx_current - sp->tx_dirty + 1) > IPG_FRAMESBETWEENTXDMACOMPLETES)) { txfd->tfc |= cpu_to_le64(IPG_TFC_TXDMAINDICATE); } /* Based on compilation option, determine if FCS is to be * appended to transmit frame by IPG. */ Loading Loading @@ -2003,7 +1991,7 @@ static int ipg_nic_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) ipg_w32(IPG_DC_TX_DMA_POLL_NOW, DMA_CTRL); if (sp->tx_current == (sp->tx_dirty + IPG_TFDLIST_LENGTH)) netif_wake_queue(dev); netif_stop_queue(dev); spin_unlock_irqrestore(&sp->lock, flags); Loading Loading
drivers/net/ipg.c +12 −24 Original line number Diff line number Diff line Loading @@ -857,21 +857,14 @@ static void init_tfdlist(struct net_device *dev) static void ipg_nic_txfree(struct net_device *dev) { struct ipg_nic_private *sp = netdev_priv(dev); void __iomem *ioaddr = sp->ioaddr; unsigned int curr; u64 txd_map; unsigned int released, pending; txd_map = (u64)sp->txd_map; curr = ipg_r32(TFD_LIST_PTR_0) - do_div(txd_map, sizeof(struct ipg_tx)) - 1; unsigned int released, pending, dirty; IPG_DEBUG_MSG("_nic_txfree\n"); pending = sp->tx_current - sp->tx_dirty; dirty = sp->tx_dirty % IPG_TFDLIST_LENGTH; for (released = 0; released < pending; released++) { unsigned int dirty = sp->tx_dirty % IPG_TFDLIST_LENGTH; struct sk_buff *skb = sp->TxBuff[dirty]; struct ipg_tx *txfd = sp->txd + dirty; Loading @@ -882,12 +875,9 @@ static void ipg_nic_txfree(struct net_device *dev) * If the TFDDone bit is set, free the associated * buffer. */ if (dirty == curr) if (!(txfd->tfc & cpu_to_le64(IPG_TFC_TFDDONE))) break; /* Setup TFDDONE for compatible issue. */ txfd->tfc |= cpu_to_le64(IPG_TFC_TFDDONE); /* Free the transmit buffer. */ if (skb) { pci_unmap_single(sp->pdev, Loading @@ -898,6 +888,7 @@ static void ipg_nic_txfree(struct net_device *dev) sp->TxBuff[dirty] = NULL; } dirty = (dirty + 1) % IPG_TFDLIST_LENGTH; } sp->tx_dirty += released; Loading Loading @@ -1630,6 +1621,8 @@ static irqreturn_t ipg_interrupt_handler(int irq, void *dev_inst) #ifdef JUMBO_FRAME ipg_nic_rxrestore(dev); #endif spin_lock(&sp->lock); /* Get interrupt source information, and acknowledge * some (i.e. TxDMAComplete, RxDMAComplete, RxEarly, * IntRequested, MacControlFrame, LinkEvent) interrupts Loading @@ -1647,9 +1640,7 @@ static irqreturn_t ipg_interrupt_handler(int irq, void *dev_inst) handled = 1; if (unlikely(!netif_running(dev))) goto out; spin_lock(&sp->lock); goto out_unlock; /* If RFDListEnd interrupt, restore all used RFDs. */ if (status & IPG_IS_RFD_LIST_END) { Loading Loading @@ -1733,9 +1724,9 @@ static irqreturn_t ipg_interrupt_handler(int irq, void *dev_inst) ipg_w16(IPG_IE_TX_DMA_COMPLETE | IPG_IE_RX_DMA_COMPLETE | IPG_IE_HOST_ERROR | IPG_IE_INT_REQUESTED | IPG_IE_TX_COMPLETE | IPG_IE_LINK_EVENT | IPG_IE_UPDATE_STATS, INT_ENABLE); out_unlock: spin_unlock(&sp->lock); out: return IRQ_RETVAL(handled); } Loading Loading @@ -1943,10 +1934,7 @@ static int ipg_nic_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) */ if (sp->tenmbpsmode) txfd->tfc |= cpu_to_le64(IPG_TFC_TXINDICATE); else if (!((sp->tx_current - sp->tx_dirty + 1) > IPG_FRAMESBETWEENTXDMACOMPLETES)) { txfd->tfc |= cpu_to_le64(IPG_TFC_TXDMAINDICATE); } /* Based on compilation option, determine if FCS is to be * appended to transmit frame by IPG. */ Loading Loading @@ -2003,7 +1991,7 @@ static int ipg_nic_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) ipg_w32(IPG_DC_TX_DMA_POLL_NOW, DMA_CTRL); if (sp->tx_current == (sp->tx_dirty + IPG_TFDLIST_LENGTH)) netif_wake_queue(dev); netif_stop_queue(dev); spin_unlock_irqrestore(&sp->lock, flags); Loading