aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/sunhme.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/drivers/net/sunhme.c b/drivers/net/sunhme.c
index c20a3bd21bb2..9cc13dd8a821 100644
--- a/drivers/net/sunhme.c
+++ b/drivers/net/sunhme.c
@@ -1281,7 +1281,7 @@ static void happy_meal_init_rings(struct happy_meal *hp)
1281 skb->dev = dev; 1281 skb->dev = dev;
1282 1282
1283 /* Because we reserve afterwards. */ 1283 /* Because we reserve afterwards. */
1284 skb_put(skb, (ETH_FRAME_LEN + RX_OFFSET)); 1284 skb_put(skb, (ETH_FRAME_LEN + RX_OFFSET + 4));
1285 hme_write_rxd(hp, &hb->happy_meal_rxd[i], 1285 hme_write_rxd(hp, &hb->happy_meal_rxd[i],
1286 (RXFLAG_OWN | ((RX_BUF_ALLOC_SIZE - RX_OFFSET) << 16)), 1286 (RXFLAG_OWN | ((RX_BUF_ALLOC_SIZE - RX_OFFSET) << 16)),
1287 hme_dma_map(hp, skb->data, RX_BUF_ALLOC_SIZE, DMA_FROMDEVICE)); 1287 hme_dma_map(hp, skb->data, RX_BUF_ALLOC_SIZE, DMA_FROMDEVICE));
@@ -1700,6 +1700,11 @@ static int happy_meal_init(struct happy_meal *hp)
1700 HMD(("tx old[%08x] and rx [%08x] ON!\n", 1700 HMD(("tx old[%08x] and rx [%08x] ON!\n",
1701 hme_read32(hp, bregs + BMAC_TXCFG), 1701 hme_read32(hp, bregs + BMAC_TXCFG),
1702 hme_read32(hp, bregs + BMAC_RXCFG))); 1702 hme_read32(hp, bregs + BMAC_RXCFG)));
1703
1704 /* Set larger TX/RX size to allow for 802.1q */
1705 hme_write32(hp, bregs + BMAC_TXMAX, ETH_FRAME_LEN + 8);
1706 hme_write32(hp, bregs + BMAC_RXMAX, ETH_FRAME_LEN + 8);
1707
1703 hme_write32(hp, bregs + BMAC_TXCFG, 1708 hme_write32(hp, bregs + BMAC_TXCFG,
1704 hme_read32(hp, bregs + BMAC_TXCFG) | BIGMAC_TXCFG_ENABLE); 1709 hme_read32(hp, bregs + BMAC_TXCFG) | BIGMAC_TXCFG_ENABLE);
1705 hme_write32(hp, bregs + BMAC_RXCFG, 1710 hme_write32(hp, bregs + BMAC_RXCFG,
@@ -2039,7 +2044,7 @@ static void happy_meal_rx(struct happy_meal *hp, struct net_device *dev)
2039 hme_dma_unmap(hp, dma_addr, RX_BUF_ALLOC_SIZE, DMA_FROMDEVICE); 2044 hme_dma_unmap(hp, dma_addr, RX_BUF_ALLOC_SIZE, DMA_FROMDEVICE);
2040 hp->rx_skbs[elem] = new_skb; 2045 hp->rx_skbs[elem] = new_skb;
2041 new_skb->dev = dev; 2046 new_skb->dev = dev;
2042 skb_put(new_skb, (ETH_FRAME_LEN + RX_OFFSET)); 2047 skb_put(new_skb, (ETH_FRAME_LEN + RX_OFFSET + 4));
2043 hme_write_rxd(hp, this, 2048 hme_write_rxd(hp, this,
2044 (RXFLAG_OWN|((RX_BUF_ALLOC_SIZE-RX_OFFSET)<<16)), 2049 (RXFLAG_OWN|((RX_BUF_ALLOC_SIZE-RX_OFFSET)<<16)),
2045 hme_dma_map(hp, new_skb->data, RX_BUF_ALLOC_SIZE, DMA_FROMDEVICE)); 2050 hme_dma_map(hp, new_skb->data, RX_BUF_ALLOC_SIZE, DMA_FROMDEVICE));
@@ -2809,8 +2814,8 @@ static int __devinit happy_meal_sbus_probe_one(struct sbus_dev *sdev, int is_qfe
2809 dev->watchdog_timeo = 5*HZ; 2814 dev->watchdog_timeo = 5*HZ;
2810 dev->ethtool_ops = &hme_ethtool_ops; 2815 dev->ethtool_ops = &hme_ethtool_ops;
2811 2816
2812 /* Happy Meal can do it all... except VLAN. */ 2817 /* Happy Meal can do it all... */
2813 dev->features |= NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_VLAN_CHALLENGED; 2818 dev->features |= NETIF_F_SG | NETIF_F_HW_CSUM;
2814 2819
2815 dev->irq = sdev->irqs[0]; 2820 dev->irq = sdev->irqs[0];
2816 2821
@@ -3143,8 +3148,8 @@ static int __devinit happy_meal_pci_probe(struct pci_dev *pdev,
3143 dev->irq = pdev->irq; 3148 dev->irq = pdev->irq;
3144 dev->dma = 0; 3149 dev->dma = 0;
3145 3150
3146 /* Happy Meal can do it all... except VLAN. */ 3151 /* Happy Meal can do it all... */
3147 dev->features |= NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_VLAN_CHALLENGED; 3152 dev->features |= NETIF_F_SG | NETIF_F_HW_CSUM;
3148 3153
3149#if defined(CONFIG_SBUS) && defined(CONFIG_PCI) 3154#if defined(CONFIG_SBUS) && defined(CONFIG_PCI)
3150 /* Hook up PCI register/dma accessors. */ 3155 /* Hook up PCI register/dma accessors. */