diff options
author | Chris Poon <dev-null@telus.net> | 2007-11-15 18:38:45 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2007-11-15 18:38:45 -0500 |
commit | a5a97263a9fd6a94f954d41ae3233ea65a90bd8a (patch) | |
tree | 667d03bfe30b2ff72504225b3533f402980b88dc | |
parent | 7de6af0f23b25df8da9719ecae1916b669d0b03d (diff) |
[SUNHME]: VLAN support for sunhme
This patch enables VLAN support on sunhme by increasing BMAC_TXMAX/BMAC_RXMAX
and allocating extra space via skb_put for the VLAN header.
Signed-off-by: Chris Poon <dev-null@telus.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/sunhme.c | 17 |
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. */ |