Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts: drivers/net/geneve.c Here we had an overlapping change, where in 'net' the extraneous stats bump was being removed whilst in 'net-next' the final argument to udp_tunnel6_xmit_skb() was being changed. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -52,6 +52,8 @@
|
||||
NETIF_MSG_RX_ERR| \
|
||||
NETIF_MSG_TX_ERR)
|
||||
|
||||
#define SH_ETH_OFFSET_INVALID ((u16)~0)
|
||||
|
||||
#define SH_ETH_OFFSET_DEFAULTS \
|
||||
[0 ... SH_ETH_MAX_REGISTER_OFFSET - 1] = SH_ETH_OFFSET_INVALID
|
||||
|
||||
@@ -404,6 +406,28 @@ static const u16 sh_eth_offset_fast_sh3_sh2[SH_ETH_MAX_REGISTER_OFFSET] = {
|
||||
static void sh_eth_rcv_snd_disable(struct net_device *ndev);
|
||||
static struct net_device_stats *sh_eth_get_stats(struct net_device *ndev);
|
||||
|
||||
static void sh_eth_write(struct net_device *ndev, u32 data, int enum_index)
|
||||
{
|
||||
struct sh_eth_private *mdp = netdev_priv(ndev);
|
||||
u16 offset = mdp->reg_offset[enum_index];
|
||||
|
||||
if (WARN_ON(offset == SH_ETH_OFFSET_INVALID))
|
||||
return;
|
||||
|
||||
iowrite32(data, mdp->addr + offset);
|
||||
}
|
||||
|
||||
static u32 sh_eth_read(struct net_device *ndev, int enum_index)
|
||||
{
|
||||
struct sh_eth_private *mdp = netdev_priv(ndev);
|
||||
u16 offset = mdp->reg_offset[enum_index];
|
||||
|
||||
if (WARN_ON(offset == SH_ETH_OFFSET_INVALID))
|
||||
return ~0U;
|
||||
|
||||
return ioread32(mdp->addr + offset);
|
||||
}
|
||||
|
||||
static bool sh_eth_is_gether(struct sh_eth_private *mdp)
|
||||
{
|
||||
return mdp->reg_offset == sh_eth_offset_gigabit;
|
||||
@@ -1147,7 +1171,7 @@ static void sh_eth_ring_format(struct net_device *ndev)
|
||||
break;
|
||||
}
|
||||
mdp->rx_skbuff[i] = skb;
|
||||
rxdesc->addr = dma_addr;
|
||||
rxdesc->addr = cpu_to_edmac(mdp, dma_addr);
|
||||
rxdesc->status = cpu_to_edmac(mdp, RD_RACT | RD_RFP);
|
||||
|
||||
/* Rx descriptor address set */
|
||||
@@ -1378,7 +1402,8 @@ static int sh_eth_txfree(struct net_device *ndev)
|
||||
entry, edmac_to_cpu(mdp, txdesc->status));
|
||||
/* Free the original skb. */
|
||||
if (mdp->tx_skbuff[entry]) {
|
||||
dma_unmap_single(&ndev->dev, txdesc->addr,
|
||||
dma_unmap_single(&ndev->dev,
|
||||
edmac_to_cpu(mdp, txdesc->addr),
|
||||
txdesc->buffer_length, DMA_TO_DEVICE);
|
||||
dev_kfree_skb_irq(mdp->tx_skbuff[entry]);
|
||||
mdp->tx_skbuff[entry] = NULL;
|
||||
@@ -1437,6 +1462,7 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota)
|
||||
if (mdp->cd->shift_rd0)
|
||||
desc_status >>= 16;
|
||||
|
||||
skb = mdp->rx_skbuff[entry];
|
||||
if (desc_status & (RD_RFS1 | RD_RFS2 | RD_RFS3 | RD_RFS4 |
|
||||
RD_RFS5 | RD_RFS6 | RD_RFS10)) {
|
||||
ndev->stats.rx_errors++;
|
||||
@@ -1452,16 +1478,16 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota)
|
||||
ndev->stats.rx_missed_errors++;
|
||||
if (desc_status & RD_RFS10)
|
||||
ndev->stats.rx_over_errors++;
|
||||
} else {
|
||||
} else if (skb) {
|
||||
dma_addr = edmac_to_cpu(mdp, rxdesc->addr);
|
||||
if (!mdp->cd->hw_swap)
|
||||
sh_eth_soft_swap(
|
||||
phys_to_virt(ALIGN(rxdesc->addr, 4)),
|
||||
phys_to_virt(ALIGN(dma_addr, 4)),
|
||||
pkt_len + 2);
|
||||
skb = mdp->rx_skbuff[entry];
|
||||
mdp->rx_skbuff[entry] = NULL;
|
||||
if (mdp->cd->rpadir)
|
||||
skb_reserve(skb, NET_IP_ALIGN);
|
||||
dma_unmap_single(&ndev->dev, rxdesc->addr,
|
||||
dma_unmap_single(&ndev->dev, dma_addr,
|
||||
ALIGN(mdp->rx_buf_sz, 32),
|
||||
DMA_FROM_DEVICE);
|
||||
skb_put(skb, pkt_len);
|
||||
@@ -1498,7 +1524,7 @@ static int sh_eth_rx(struct net_device *ndev, u32 intr_status, int *quota)
|
||||
mdp->rx_skbuff[entry] = skb;
|
||||
|
||||
skb_checksum_none_assert(skb);
|
||||
rxdesc->addr = dma_addr;
|
||||
rxdesc->addr = cpu_to_edmac(mdp, dma_addr);
|
||||
}
|
||||
dma_wmb(); /* RACT bit must be set after all the above writes */
|
||||
if (entry >= mdp->num_rx_ring - 1)
|
||||
@@ -2306,8 +2332,8 @@ static void sh_eth_tx_timeout(struct net_device *ndev)
|
||||
/* Free all the skbuffs in the Rx queue. */
|
||||
for (i = 0; i < mdp->num_rx_ring; i++) {
|
||||
rxdesc = &mdp->rx_ring[i];
|
||||
rxdesc->status = 0;
|
||||
rxdesc->addr = 0xBADF00D0;
|
||||
rxdesc->status = cpu_to_edmac(mdp, 0);
|
||||
rxdesc->addr = cpu_to_edmac(mdp, 0xBADF00D0);
|
||||
dev_kfree_skb(mdp->rx_skbuff[i]);
|
||||
mdp->rx_skbuff[i] = NULL;
|
||||
}
|
||||
@@ -2325,6 +2351,7 @@ static int sh_eth_start_xmit(struct sk_buff *skb, struct net_device *ndev)
|
||||
{
|
||||
struct sh_eth_private *mdp = netdev_priv(ndev);
|
||||
struct sh_eth_txdesc *txdesc;
|
||||
dma_addr_t dma_addr;
|
||||
u32 entry;
|
||||
unsigned long flags;
|
||||
|
||||
@@ -2347,14 +2374,14 @@ static int sh_eth_start_xmit(struct sk_buff *skb, struct net_device *ndev)
|
||||
txdesc = &mdp->tx_ring[entry];
|
||||
/* soft swap. */
|
||||
if (!mdp->cd->hw_swap)
|
||||
sh_eth_soft_swap(phys_to_virt(ALIGN(txdesc->addr, 4)),
|
||||
skb->len + 2);
|
||||
txdesc->addr = dma_map_single(&ndev->dev, skb->data, skb->len,
|
||||
DMA_TO_DEVICE);
|
||||
if (dma_mapping_error(&ndev->dev, txdesc->addr)) {
|
||||
sh_eth_soft_swap(PTR_ALIGN(skb->data, 4), skb->len + 2);
|
||||
dma_addr = dma_map_single(&ndev->dev, skb->data, skb->len,
|
||||
DMA_TO_DEVICE);
|
||||
if (dma_mapping_error(&ndev->dev, dma_addr)) {
|
||||
kfree_skb(skb);
|
||||
return NETDEV_TX_OK;
|
||||
}
|
||||
txdesc->addr = cpu_to_edmac(mdp, dma_addr);
|
||||
txdesc->buffer_length = skb->len;
|
||||
|
||||
dma_wmb(); /* TACT bit must be set after all the above writes */
|
||||
|
Reference in New Issue
Block a user