Loading drivers/net/via-velocity.c +20 −29 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ #include <linux/module.h> #include <linux/types.h> #include <linux/bitops.h> #include <linux/init.h> #include <linux/mm.h> #include <linux/errno.h> Loading Loading @@ -76,6 +77,7 @@ #include <linux/udp.h> #include <linux/crc-ccitt.h> #include <linux/crc32.h> #include <linux/if_vlan.h> #include "via-velocity.h" Loading Loading @@ -501,6 +503,7 @@ static void __devinit velocity_get_options(struct velocity_opt *opts, int index, static void velocity_init_cam_filter(struct velocity_info *vptr) { struct mac_regs __iomem *regs = vptr->mac_regs; unsigned int vid, i = 0; /* Turn on MCFG_PQEN, turn off MCFG_RTGOPT */ WORD_REG_BITS_SET(MCFG_PQEN, MCFG_RTGOPT, ®s->MCFG); Loading @@ -513,37 +516,25 @@ static void velocity_init_cam_filter(struct velocity_info *vptr) mac_set_cam_mask(regs, vptr->mCAMmask); /* Enable VCAMs */ if (vptr->vlgrp) { unsigned int vid, i = 0; if (!vlan_group_get_device(vptr->vlgrp, 0)) if (test_bit(0, vptr->active_vlans)) WORD_REG_BITS_ON(MCFG_RTGOPT, ®s->MCFG); for (vid = 1; (vid < VLAN_VID_MASK); vid++) { if (vlan_group_get_device(vptr->vlgrp, vid)) { for_each_set_bit(vid, vptr->active_vlans, VLAN_N_VID) { mac_set_vlan_cam(regs, i, (u8 *) &vid); vptr->vCAMmask[i / 8] |= 0x1 << (i % 8); if (++i >= VCAM_SIZE) break; } } mac_set_vlan_cam_mask(regs, vptr->vCAMmask); } } static void velocity_vlan_rx_register(struct net_device *dev, struct vlan_group *grp) { struct velocity_info *vptr = netdev_priv(dev); vptr->vlgrp = grp; } static void velocity_vlan_rx_add_vid(struct net_device *dev, unsigned short vid) { struct velocity_info *vptr = netdev_priv(dev); spin_lock_irq(&vptr->lock); set_bit(vid, vptr->active_vlans); velocity_init_cam_filter(vptr); spin_unlock_irq(&vptr->lock); } Loading @@ -553,7 +544,7 @@ static void velocity_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid struct velocity_info *vptr = netdev_priv(dev); spin_lock_irq(&vptr->lock); vlan_group_set_device(vptr->vlgrp, vid, NULL); clear_bit(vid, vptr->active_vlans); velocity_init_cam_filter(vptr); spin_unlock_irq(&vptr->lock); } Loading Loading @@ -2094,10 +2085,11 @@ static int velocity_receive_frame(struct velocity_info *vptr, int idx) skb_put(skb, pkt_len - 4); skb->protocol = eth_type_trans(skb, vptr->dev); if (vptr->vlgrp && (rd->rdesc0.RSR & RSR_DETAG)) { vlan_hwaccel_rx(skb, vptr->vlgrp, swab16(le16_to_cpu(rd->rdesc1.PQTAG))); } else if (rd->rdesc0.RSR & RSR_DETAG) { u16 vid = swab16(le16_to_cpu(rd->rdesc1.PQTAG)); __vlan_hwaccel_put_tag(skb, vid); } netif_rx(skb); stats->rx_bytes += pkt_len; Loading Loading @@ -2641,7 +2633,6 @@ static const struct net_device_ops velocity_netdev_ops = { .ndo_do_ioctl = velocity_ioctl, .ndo_vlan_rx_add_vid = velocity_vlan_rx_add_vid, .ndo_vlan_rx_kill_vid = velocity_vlan_rx_kill_vid, .ndo_vlan_rx_register = velocity_vlan_rx_register, }; /** Loading drivers/net/via-velocity.h +1 −1 Original line number Diff line number Diff line Loading @@ -1437,7 +1437,7 @@ struct velocity_info { struct pci_dev *pdev; struct net_device *dev; struct vlan_group *vlgrp; unsigned long active_vlans[BITS_TO_LONGS(VLAN_N_VID)]; u8 ip_addr[4]; enum chip_type chip_id; Loading Loading
drivers/net/via-velocity.c +20 −29 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ #include <linux/module.h> #include <linux/types.h> #include <linux/bitops.h> #include <linux/init.h> #include <linux/mm.h> #include <linux/errno.h> Loading Loading @@ -76,6 +77,7 @@ #include <linux/udp.h> #include <linux/crc-ccitt.h> #include <linux/crc32.h> #include <linux/if_vlan.h> #include "via-velocity.h" Loading Loading @@ -501,6 +503,7 @@ static void __devinit velocity_get_options(struct velocity_opt *opts, int index, static void velocity_init_cam_filter(struct velocity_info *vptr) { struct mac_regs __iomem *regs = vptr->mac_regs; unsigned int vid, i = 0; /* Turn on MCFG_PQEN, turn off MCFG_RTGOPT */ WORD_REG_BITS_SET(MCFG_PQEN, MCFG_RTGOPT, ®s->MCFG); Loading @@ -513,37 +516,25 @@ static void velocity_init_cam_filter(struct velocity_info *vptr) mac_set_cam_mask(regs, vptr->mCAMmask); /* Enable VCAMs */ if (vptr->vlgrp) { unsigned int vid, i = 0; if (!vlan_group_get_device(vptr->vlgrp, 0)) if (test_bit(0, vptr->active_vlans)) WORD_REG_BITS_ON(MCFG_RTGOPT, ®s->MCFG); for (vid = 1; (vid < VLAN_VID_MASK); vid++) { if (vlan_group_get_device(vptr->vlgrp, vid)) { for_each_set_bit(vid, vptr->active_vlans, VLAN_N_VID) { mac_set_vlan_cam(regs, i, (u8 *) &vid); vptr->vCAMmask[i / 8] |= 0x1 << (i % 8); if (++i >= VCAM_SIZE) break; } } mac_set_vlan_cam_mask(regs, vptr->vCAMmask); } } static void velocity_vlan_rx_register(struct net_device *dev, struct vlan_group *grp) { struct velocity_info *vptr = netdev_priv(dev); vptr->vlgrp = grp; } static void velocity_vlan_rx_add_vid(struct net_device *dev, unsigned short vid) { struct velocity_info *vptr = netdev_priv(dev); spin_lock_irq(&vptr->lock); set_bit(vid, vptr->active_vlans); velocity_init_cam_filter(vptr); spin_unlock_irq(&vptr->lock); } Loading @@ -553,7 +544,7 @@ static void velocity_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid struct velocity_info *vptr = netdev_priv(dev); spin_lock_irq(&vptr->lock); vlan_group_set_device(vptr->vlgrp, vid, NULL); clear_bit(vid, vptr->active_vlans); velocity_init_cam_filter(vptr); spin_unlock_irq(&vptr->lock); } Loading Loading @@ -2094,10 +2085,11 @@ static int velocity_receive_frame(struct velocity_info *vptr, int idx) skb_put(skb, pkt_len - 4); skb->protocol = eth_type_trans(skb, vptr->dev); if (vptr->vlgrp && (rd->rdesc0.RSR & RSR_DETAG)) { vlan_hwaccel_rx(skb, vptr->vlgrp, swab16(le16_to_cpu(rd->rdesc1.PQTAG))); } else if (rd->rdesc0.RSR & RSR_DETAG) { u16 vid = swab16(le16_to_cpu(rd->rdesc1.PQTAG)); __vlan_hwaccel_put_tag(skb, vid); } netif_rx(skb); stats->rx_bytes += pkt_len; Loading Loading @@ -2641,7 +2633,6 @@ static const struct net_device_ops velocity_netdev_ops = { .ndo_do_ioctl = velocity_ioctl, .ndo_vlan_rx_add_vid = velocity_vlan_rx_add_vid, .ndo_vlan_rx_kill_vid = velocity_vlan_rx_kill_vid, .ndo_vlan_rx_register = velocity_vlan_rx_register, }; /** Loading
drivers/net/via-velocity.h +1 −1 Original line number Diff line number Diff line Loading @@ -1437,7 +1437,7 @@ struct velocity_info { struct pci_dev *pdev; struct net_device *dev; struct vlan_group *vlgrp; unsigned long active_vlans[BITS_TO_LONGS(VLAN_N_VID)]; u8 ip_addr[4]; enum chip_type chip_id; Loading