[kernel] r7999 - in people/dannf/kernel-source-2.6.8-2.6.8/debian:
. patches patches/series
Dann Frazier
dannf at alioth.debian.org
Wed Dec 13 07:47:35 UTC 2006
Author: dannf
Date: Wed Dec 13 08:47:35 2006
New Revision: 7999
Added:
people/dannf/kernel-source-2.6.8-2.6.8/debian/patches/3c59x-3c90x-vlan-support.dpatch
Modified:
people/dannf/kernel-source-2.6.8-2.6.8/debian/changelog
people/dannf/kernel-source-2.6.8-2.6.8/debian/patches/series/2.6.8-16sarge6dannf1
Log:
* Add VLAN support for 3c59x/90x series hardware (closes: #349774)
Modified: people/dannf/kernel-source-2.6.8-2.6.8/debian/changelog
==============================================================================
--- people/dannf/kernel-source-2.6.8-2.6.8/debian/changelog (original)
+++ people/dannf/kernel-source-2.6.8-2.6.8/debian/changelog Wed Dec 13 08:47:35 2006
@@ -7,8 +7,9 @@
error under certain conditions - breaks installation on cciss devices.
(closes: #354493)
* Fix data corruption with dm-crypt over RAID5 (closes: #336153)
+ * Add VLAN support for 3c59x/90x series hardware (closes: #349774)
- -- dann frazier <dannf at debian.org> Mon, 11 Dec 2006 23:33:30 -0700
+ -- dann frazier <dannf at debian.org> Wed, 13 Dec 2006 00:46:58 -0700
kernel-source-2.6.8 (2.6.8-16sarge6) stable-security; urgency=high
Added: people/dannf/kernel-source-2.6.8-2.6.8/debian/patches/3c59x-3c90x-vlan-support.dpatch
==============================================================================
--- (empty file)
+++ people/dannf/kernel-source-2.6.8-2.6.8/debian/patches/3c59x-3c90x-vlan-support.dpatch Wed Dec 13 08:47:35 2006
@@ -0,0 +1,203 @@
+From: alan <alan>
+Date: Tue, 31 Aug 2004 17:34:34 +0000 (+0000)
+Subject: [PATCH] VLAN support for 3c59x/3c90x
+X-Git-Tag: v2.6.9-rc2
+X-Git-Url: http://www.kernel.org/git/?p=linux/kernel/git/torvalds/old-2.6-bkcvs.git;a=commitdiff;h=03e4b71f751da25d7b2d026ba6f4f904116e51e5
+
+[PATCH] VLAN support for 3c59x/3c90x
+
+This adds VLAN support to the 3c59x/90x series hardware.
+
+Stefan de Konink ported this code from the 2.4 VLAN patches and tested it
+extensively. I cleaned up the ifdefs and fixed a problem with bracketing
+that made older cards fail.
+
+--
+
+Developer's Certificate of Origin 1.0
+
+By making a contribution to this project, I certify that:
+
+(a) The contribution was created in whole or in part by me and I have the
+right to submit it under the open source license indicated in the file; or
+
+(b) The contribution is based upon previous work that, to the best of my
+knowledge, is covered under an appropriate open source license and I have
+the right under that license to submit that work with modifications,
+whether created in whole or in part by me, under the same open source
+license (unless I am permitted to submit under a different license), as
+indicated in the file; or
+
+(c) The contribution was provided directly to me by some other person who
+certified (a), (b) or (c) and I have not modified it.
+
+I, Stefan de Konink, certify that:
+ The contribution is based upon previous work that, again is based on GPL
+code and I have the right under that license to submit that work with
+modifications, whether created in whole or in part by me, under the same
+open source license.
+
+I, Alan Cox, certify likewise.
+
+Signed-off-by: Andrew Morton <akpm at osdl.org>
+Signed-off-by: Linus Torvalds <torvalds at osdl.org>
+
+BKrev: 4134b6aaG1Xo36KMgl-n4yeoin6dzA
+---
+
+--- a/drivers/net/3c59x.c
++++ b/drivers/net/3c59x.c
+@@ -695,7 +695,7 @@ enum Window2 { /* Window 2. */
+ Wn2_ResetOptions=12,
+ };
+ enum Window3 { /* Window 3: MAC/config bits. */
+- Wn3_Config=0, Wn3_MAC_Ctrl=6, Wn3_Options=8,
++ Wn3_Config=0, Wn3_MaxPktSize=4, Wn3_MAC_Ctrl=6, Wn3_Options=8,
+ };
+
+ #define BFEXT(value, offset, bitcount) \
+@@ -723,7 +723,8 @@ enum Win4_Media_bits {
+ Media_LnkBeat = 0x0800,
+ };
+ enum Window7 { /* Window 7: Bus Master control. */
+- Wn7_MasterAddr = 0, Wn7_MasterLen = 6, Wn7_MasterStatus = 12,
++ Wn7_MasterAddr = 0, Wn7_VlanEtherType=4, Wn7_MasterLen = 6,
++ Wn7_MasterStatus = 12,
+ };
+ /* Boomerang bus master control registers. */
+ enum MasterCtrl {
+@@ -819,7 +820,8 @@ struct vortex_private {
+ pm_state_valid:1, /* power_state[] has sane contents */
+ open:1,
+ medialock:1,
+- must_free_region:1; /* Flag: if zero, Cardbus owns the I/O region */
++ must_free_region:1, /* Flag: if zero, Cardbus owns the I/O region */
++ large_frames:1; /* accept large frames */
+ int drv_flags;
+ u16 status_enable;
+ u16 intr_enable;
+@@ -904,6 +906,8 @@ static int vortex_ioctl(struct net_devic
+ static void vortex_tx_timeout(struct net_device *dev);
+ static void acpi_set_WOL(struct net_device *dev);
+ static struct ethtool_ops vortex_ethtool_ops;
++static void set_8021q_mode(struct net_device *dev, int enable);
++
+
+ /* This driver uses 'options' to pass the media type, full-duplex flag, etc. */
+ /* Option count limit only -- unlimited interfaces are supported. */
+@@ -1164,6 +1168,7 @@ static int __devinit vortex_probe1(struc
+ dev->base_addr = ioaddr;
+ dev->irq = irq;
+ dev->mtu = mtu;
++ vp->large_frames = mtu > 1500;
+ vp->drv_flags = vci->drv_flags;
+ vp->has_nway = (vci->drv_flags & HAS_NWAY) ? 1 : 0;
+ vp->io_size = vci->io_size;
+@@ -1616,7 +1621,7 @@ vortex_up(struct net_device *dev)
+
+ /* Set the full-duplex bit. */
+ outw( ((vp->info1 & 0x8000) || vp->full_duplex ? 0x20 : 0) |
+- (dev->mtu > 1500 ? 0x40 : 0) |
++ (vp->large_frames ? 0x40 : 0) |
+ ((vp->full_duplex && vp->flow_ctrl && vp->partner_flow_ctrl) ? 0x100 : 0),
+ ioaddr + Wn3_MAC_Ctrl);
+
+@@ -1700,6 +1705,8 @@ vortex_up(struct net_device *dev)
+ }
+ /* Set receiver mode: presumably accept b-case and phys addr only. */
+ set_rx_mode(dev);
++ /* enable 802.1q tagged frames */
++ set_8021q_mode(dev, 1);
+ outw(StatsEnable, ioaddr + EL3_CMD); /* Turn on statistics. */
+
+ // issue_and_wait(dev, SetTxStart|0x07ff);
+@@ -1842,7 +1849,7 @@ vortex_timer(unsigned long data)
+ /* Set the full-duplex bit. */
+ EL3WINDOW(3);
+ outw( (vp->full_duplex ? 0x20 : 0) |
+- (dev->mtu > 1500 ? 0x40 : 0) |
++ (vp->large_frames ? 0x40 : 0) |
+ ((vp->full_duplex && vp->flow_ctrl && vp->partner_flow_ctrl) ? 0x100 : 0),
+ ioaddr + Wn3_MAC_Ctrl);
+ if (vortex_debug > 1)
+@@ -2068,6 +2075,8 @@ vortex_error(struct net_device *dev, int
+ issue_and_wait(dev, RxReset|0x07);
+ /* Set the Rx filter to the current state. */
+ set_rx_mode(dev);
++ /* enable 802.1q VLAN tagged frames */
++ set_8021q_mode(dev, 1);
+ outw(RxEnable, ioaddr + EL3_CMD); /* Re-enable the receiver. */
+ outw(AckIntr | HostError, ioaddr + EL3_CMD);
+ }
+@@ -2672,6 +2681,9 @@ vortex_down(struct net_device *dev, int
+ outw(RxDisable, ioaddr + EL3_CMD);
+ outw(TxDisable, ioaddr + EL3_CMD);
+
++ /* Disable receiving 802.1q tagged frames */
++ set_8021q_mode(dev, 0);
++
+ if (dev->if_port == XCVR_10base2)
+ /* Turn off thinnet power. Green! */
+ outw(StopCoax, ioaddr + EL3_CMD);
+@@ -2947,6 +2959,61 @@ static void set_rx_mode(struct net_devic
+ outw(new_mode, ioaddr + EL3_CMD);
+ }
+
++#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
++/* Setup the card so that it can receive frames with an 802.1q VLAN tag.
++ Note that this must be done after each RxReset due to some backwards
++ compatibility logic in the Cyclone and Tornado ASICs */
++
++/* The Ethernet Type used for 802.1q tagged frames */
++#define VLAN_ETHER_TYPE 0x8100
++
++static void set_8021q_mode(struct net_device *dev, int enable)
++{
++ struct vortex_private *vp = (struct vortex_private *)dev->priv;
++ long ioaddr = dev->base_addr;
++ int old_window = inw(ioaddr + EL3_CMD);
++ int mac_ctrl;
++
++ if ((vp->drv_flags&IS_CYCLONE) || (vp->drv_flags&IS_TORNADO)) {
++ /* cyclone and tornado chipsets can recognize 802.1q
++ * tagged frames and treat them correctly */
++
++ int max_pkt_size = dev->mtu+14; /* MTU+Ethernet header */
++ if (enable)
++ max_pkt_size += 4; /* 802.1Q VLAN tag */
++
++ EL3WINDOW(3);
++ outw(max_pkt_size, ioaddr+Wn3_MaxPktSize);
++
++ /* set VlanEtherType to let the hardware checksumming
++ treat tagged frames correctly */
++ EL3WINDOW(7);
++ outw(VLAN_ETHER_TYPE, ioaddr+Wn7_VlanEtherType);
++ } else {
++ /* on older cards we have to enable large frames */
++
++ vp->large_frames = dev->mtu > 1500 || enable;
++
++ EL3WINDOW(3);
++ mac_ctrl = inw(ioaddr+Wn3_MAC_Ctrl);
++ if (vp->large_frames)
++ mac_ctrl |= 0x40;
++ else
++ mac_ctrl &= ~0x40;
++ outw(mac_ctrl, ioaddr+Wn3_MAC_Ctrl);
++ }
++
++ EL3WINDOW(old_window);
++}
++#else
++
++static void set_8021q_mode(struct net_device *dev, int enable)
++{
++}
++
++
++#endif
++
+ /* MII transceiver control section.
+ Read and write the MII registers using software-generated serial
+ MDIO protocol. See the MII specifications or DP83840A data sheet
Modified: people/dannf/kernel-source-2.6.8-2.6.8/debian/patches/series/2.6.8-16sarge6dannf1
==============================================================================
--- people/dannf/kernel-source-2.6.8-2.6.8/debian/patches/series/2.6.8-16sarge6dannf1 (original)
+++ people/dannf/kernel-source-2.6.8-2.6.8/debian/patches/series/2.6.8-16sarge6dannf1 Wed Dec 13 08:47:35 2006
@@ -3,3 +3,4 @@
+ drivers-block-raw-ioctl2.dpatch
+ drivers-block-ioctl-enotty.dpatch
+ dm-crypt-fix-data-corruption-with-dm-crypt-over-raid5.dpatch
++ 3c59x-3c90x-vlan-support.dpatch
More information about the Kernel-svn-changes
mailing list