]> git.pld-linux.org Git - packages/kernel.git/blame - linux-netdrivers_vlan.patch
- added description of djurban's branch
[packages/kernel.git] / linux-netdrivers_vlan.patch
CommitLineData
f6050f5c 1diff -uNr linux.orig/drivers/net/3c501.c linux/drivers/net/3c501.c
2--- linux.orig/drivers/net/3c501.c Sun Mar 25 18:31:15 2001
3+++ linux/drivers/net/3c501.c Wed Nov 28 12:52:22 2001
4@@ -105,6 +105,15 @@
5 #include <linux/skbuff.h>
6 #include <linux/init.h>
7
8+#ifdef CONFIG_VLAN_802_1Q
9+#define MAX_FRAME_SIZE (1518 + 4)
10+#else
11+#define MAX_FRAME_SIZE 1518
12+#endif
13+
14+#define MAX_ETH_FRAME_SIZE (MAX_FRAME_SIZE+18)
15+
16+
17 /* A zero-terminated list of I/O addresses to be probed.
18 The 3c501 can be at many locations, but here are the popular ones. */
19 static unsigned int netcard_portlist[] __initdata = {
20@@ -673,7 +682,7 @@
21 if (el_debug > 4)
22 printk(" el_receive %d.\n", pkt_len);
23
24- if ((pkt_len < 60) || (pkt_len > 1536))
25+ if ((pkt_len < 60) || (pkt_len > MAX_ETH_FRAME_SIZE))
26 {
27 if (el_debug)
28 printk("%s: bogus packet, length=%d\n", dev->name, pkt_len);
29diff -uNr linux.orig/drivers/net/3c507.c linux/drivers/net/3c507.c
30--- linux.orig/drivers/net/3c507.c Sun Mar 25 18:31:15 2001
31+++ linux/drivers/net/3c507.c Wed Nov 28 13:04:04 2001
32@@ -70,6 +70,12 @@
33 #endif
34 static unsigned int net_debug = NET_DEBUG;
35
36+#ifdef CONFIG_VLAN_802_1Q
37+#define MAX_FRAME_SIZE (1518 + 4)
38+#else
39+#define MAX_FRAME_SIZE 1518
40+#endif
41+
42 /* A zero-terminated list of common I/O addresses to be probed. */
43 static unsigned int netcard_portlist[] __initdata =
44 { 0x300, 0x320, 0x340, 0x280, 0};
45@@ -97,7 +103,7 @@
46 #define RX_SUSPEND 0x0030
47
48 /* The Rx unit uses a list of frame descriptors and a list of data buffer
49- descriptors. We use full-sized (1518 byte) data buffers, so there is
50+ descriptors. We use full-sized (MAX_FRAME_SIZE byte) data buffers, so there is
51 a one-to-one pairing of frame descriptors to buffer descriptors.
52
53 The Tx ("command") unit executes a list of commands that look like:
0e28f46c 54@@ -195,10 +201,10 @@
f6050f5c 55
56 #define TX_BUF_START 0x0100
0e28f46c 57 #define NUM_TX_BUFS 5
f6050f5c 58-#define TX_BUF_SIZE (1518+14+20+16) /* packet+header+TBD */
59+#define TX_BUF_SIZE (MAX_FRAME_SIZE+14+20+16) /* packet+header+TBD */
60
61 #define RX_BUF_START 0x2000
62-#define RX_BUF_SIZE (1518+14+18) /* packet+header+RBD */
63+#define RX_BUF_SIZE (MAX_FRAME_SIZE+14+18) /* packet+header+RBD */
64 #define RX_BUF_END (dev->mem_end - dev->mem_start)
65
66 /*
67diff -uNr linux.orig/drivers/net/3c509.c linux/drivers/net/3c509.c
68--- linux.orig/drivers/net/3c509.c Fri Nov 2 17:39:07 2001
69+++ linux/drivers/net/3c509.c Wed Nov 28 13:03:14 2001
70@@ -44,6 +44,15 @@
71 static char *version = "3c509.c:1.16 (2.2) 2/3/98 becker@cesdis.gsfc.nasa.gov.\n";
72 /* A few values that may be tweaked. */
73
74+#ifdef CONFIG_VLAN_802_1Q
75+#define MAX_FRAME_SIZE (1518 + 4)
76+#else
77+#define MAX_FRAME_SIZE 1518
78+#endif
79+
80+#define MAX_ETH_FRAME_SIZE (MAX_FRAME_SIZE+18)
81+
82+
83 /* Time in jiffies before concluding the transmitter is hung. */
84 #define TX_TIMEOUT (400*HZ/1000)
85 /* Maximum events (Rx packets, etc.) to handle at each interrupt. */
86@@ -591,11 +600,11 @@
87 #endif
88
89 dev->trans_start = jiffies;
90- if (inw(ioaddr + TX_FREE) > 1536) {
91+ if (inw(ioaddr + TX_FREE) > MAX_ETH_FRAME_SIZE) {
92 dev->tbusy = 0;
93 } else
94 /* Interrupt us when the FIFO has room for max-sized packet. */
95- outw(SetTxThreshold + 1536, ioaddr + EL3_CMD);
96+ outw(SetTxThreshold + MAX_ETH_FRAME_SIZE, ioaddr + EL3_CMD);
97 #ifdef __SMP__
98 spin_unlock(&lp->lock);
99 enable_irq(dev->irq);
100diff -uNr linux.orig/drivers/net/3c59x.c linux/drivers/net/3c59x.c
101--- linux.orig/drivers/net/3c59x.c Sun Mar 25 18:37:34 2001
102+++ linux/drivers/net/3c59x.c Wed Nov 28 13:55:01 2001
103@@ -106,6 +106,15 @@
104 /* Maximum events (Rx packets, etc.) to handle at each interrupt. */
105 static int max_interrupt_work = 20;
106
107+#ifdef CONFIG_VLAN_802_1Q
108+#define MAX_FRAME_SIZE (1518 + 4)
109+#else
110+#define MAX_FRAME_SIZE 1518
111+#endif
112+
113+#define MAX_ETH_FRAME_SIZE (MAX_FRAME_SIZE+18)
114+
115+
116 /* Put out somewhat more debugging messages. (0: no msg, 1 minimal .. 6). */
117 #define vortex_debug debug
118 #ifdef VORTEX_DEBUG
119@@ -125,7 +134,7 @@
120 /* Keep the ring sizes a power of two for efficiency. */
121 #define TX_RING_SIZE 16
122 #define RX_RING_SIZE 32
123-#define PKT_BUF_SZ 1536 /* Size of each temporary Rx buffer.*/
124+#define PKT_BUF_SZ MAX_ETH_FRAME_SIZE /* Size of each temporary Rx buffer.*/
125
126 #include <linux/config.h>
127 #include <linux/version.h>
128@@ -1108,7 +1117,11 @@
129 }
130
131 /* Set the full-duplex bit. */
132+ #ifdef CONFIG_VLAN_802_1Q
133+ outb((vp->full_duplex ? 0x20 : 0) | 0x40, ioaddr + Wn3_MAC_Ctrl);
134+ #else
135 outb((vp->full_duplex ? 0x20 : 0) | (dev->mtu > 1500 ? 0x40 : 0), ioaddr + Wn3_MAC_Ctrl);
136+ #endif
137
138 if (vortex_debug > 1) {
139 printk(KERN_DEBUG "%s: vortex_open() InternalConfig %8.8x.\n", dev->name, config);
140@@ -1168,7 +1181,7 @@
141 if (vp->full_bus_master_rx) { /* Boomerang bus master. */
142 vp->cur_rx = vp->dirty_rx = 0;
143 /* Initialize the RxEarly register as recommended. */
144- outw(SetRxThreshold + (1536>>2), ioaddr + EL3_CMD);
145+ outw(SetRxThreshold + (MAX_ETH_FRAME_SIZE>>2), ioaddr + EL3_CMD);
146 outl(0x0020, ioaddr + PktStatus);
147 if (vortex_debug > 2)
148 printk(KERN_DEBUG "%s: Filling in the Rx ring.\n", dev->name);
149@@ -1304,9 +1317,15 @@
150 vp->phys[0], mii_reg5);
151 /* Set the full-duplex bit. */
152 EL3WINDOW(3);
153+ #ifdef CONFIG_VLAN_802_1Q
154+ outb((vp->full_duplex ? 0x20 : 0) |
155+ 0x40,
156+ ioaddr + Wn3_MAC_Ctrl);
157+ #else
158 outb((vp->full_duplex ? 0x20 : 0) |
159 (dev->mtu > 1500 ? 0x40 : 0),
160 ioaddr + Wn3_MAC_Ctrl);
161+ #endif
162 }
163 next_tick = 60*HZ;
164 }
165@@ -1554,11 +1573,11 @@
166 outsl(ioaddr + TX_FIFO, skb->data, (skb->len + 3) >> 2);
167 #endif
168 dev_kfree_skb(skb);
169- if (inw(ioaddr + TxFree) > 1536) {
170+ if (inw(ioaddr + TxFree) > MAX_ETH_FRAME_SIZE) {
171 clear_bit(0, (void*)&dev->tbusy);
172 } else
173 /* Interrupt us when the FIFO has room for max-sized packet. */
174- outw(SetTxThreshold + (1536>>2), ioaddr + EL3_CMD);
175+ outw(SetTxThreshold + (MAX_ETH_FRAME_SIZE>>2), ioaddr + EL3_CMD);
176 }
177
178 dev->trans_start = jiffies;
179@@ -1696,11 +1715,11 @@
180 if (inw(ioaddr + Wn7_MasterStatus) & 0x1000) {
181 outw(0x1000, ioaddr + Wn7_MasterStatus); /* Ack the event. */
182 dev_kfree_skb(vp->tx_skb); /* Release the transfered buffer */
183- if (inw(ioaddr + TxFree) > 1536) {
184+ if (inw(ioaddr + TxFree) > MAX_ETH_FRAME_SIZE) {
185 clear_bit(0, (void*)&dev->tbusy);
186 mark_bh(NET_BH);
187 } else /* Interrupt when FIFO has room for max-sized packet. */
188- outw(SetTxThreshold + (1536>>2), ioaddr + EL3_CMD);
189+ outw(SetTxThreshold + (MAX_ETH_FRAME_SIZE>>2), ioaddr + EL3_CMD);
190 }
191 }
192
193diff -uNr linux.orig/drivers/net/8139too.c linux/drivers/net/8139too.c
194--- linux.orig/drivers/net/8139too.c Fri Nov 2 17:39:07 2001
195+++ linux/drivers/net/8139too.c Wed Nov 28 13:56:24 2001
196@@ -348,7 +348,13 @@
197 #define NUM_TX_DESC 4
198
199 /* max supported ethernet frame size -- must be at least (dev->mtu+14+4).*/
200-#define MAX_ETH_FRAME_SIZE 1536
201+#ifdef CONFIG_VLAN_802_1Q
202+#define MAX_FRAME_SIZE (1518 + 4)
203+#else
204+#define MAX_FRAME_SIZE 1518
205+#endif
206+
207+#define MAX_ETH_FRAME_SIZE (MAX_FRAME_SIZE+18)
208
209 /* Size of the Tx bounce buffers -- must be at least (dev->mtu+14+4). */
210 #define TX_BUF_SIZE MAX_ETH_FRAME_SIZE
211diff -uNr linux.orig/drivers/net/82596.c linux/drivers/net/82596.c
212--- linux.orig/drivers/net/82596.c Fri Nov 2 17:39:07 2001
213+++ linux/drivers/net/82596.c Wed Nov 28 14:16:59 2001
214@@ -159,7 +159,14 @@
215 */
216 static int rx_copybreak = 100;
217
218-#define PKT_BUF_SZ 1536
219+#ifdef CONFIG_VLAN_802_1Q
220+#define MAX_FRAME_SIZE (1518 + 4)
221+#else
222+#define MAX_FRAME_SIZE 1518
223+#endif
224+
225+#define MAX_ETH_FRAME_SIZE (MAX_FRAME_SIZE+18)
226+#define PKT_BUF_SZ MAX_ETH_FRAME_SIZE
227 #define MAX_MC_CNT 64
228
229 #define I596_TOTAL_SIZE 17
230diff -uNr linux.orig/drivers/net/8390.c linux/drivers/net/8390.c
231--- linux.orig/drivers/net/8390.c Sun Mar 25 18:31:15 2001
232+++ linux/drivers/net/8390.c Wed Nov 28 12:33:49 2001
233@@ -74,6 +74,12 @@
234
235 #define BUG_83C690
236
237+#ifdef CONFIG_VLAN_802_1Q
238+#define MAX_FRAME_SIZE (1518 + 4)
239+#else
240+#define MAX_FRAME_SIZE 1518
241+#endif
242+
243 /* These are the operational function interfaces to board-specific
244 routines.
245 void reset_8390(struct device *dev)
246@@ -698,7 +704,7 @@
247 continue;
248 }
249
250- if (pkt_len < 60 || pkt_len > 1518)
251+ if (pkt_len < 60 || pkt_len > MAX_FRAME_SIZE)
252 {
253 if (ei_debug)
254 printk(KERN_DEBUG "%s: bogus packet size: %d, status=%#2x nxpg=%#2x.\n",
255diff -uNr linux.orig/drivers/net/eepro100.c linux/drivers/net/eepro100.c
256--- linux.orig/drivers/net/eepro100.c Sun Mar 25 18:37:34 2001
257+++ linux/drivers/net/eepro100.c Wed Nov 28 13:13:18 2001
258@@ -46,6 +46,15 @@
259 */
260
261 /*#define USE_IO*/
262+#ifdef CONFIG_VLAN_802_1Q
263+#define MAX_FRAME_SIZE (1518 + 4)
264+#else
265+#define MAX_FRAME_SIZE 1518
266+#endif
267+
268+#define MAX_ETH_FRAME_SIZE (MAX_FRAME_SIZE+18)
269+
270+
271 static const char *version =
272 "eepro100.c:v1.09j-t 9/29/99 Donald Becker http://cesdis.gsfc.nasa.gov/linux/drivers/eepro100.html\n"
273 "eepro100.c: $Revision$ 2000/05/31 Modified by Andrey V. Savochkin <saw@saw.sw.com.sg> and others\n"
274@@ -65,7 +74,7 @@
275 Lower values use more memory, but are faster. */
276 #if defined(__alpha__) || defined(__sparc__)
277 /* force copying of all packets to avoid unaligned accesses on Alpha */
278-static int rx_copybreak = 1518;
279+static int rx_copybreak = MAX_FRAME_SIZE;
280 #else
281 static int rx_copybreak = 200;
282 #endif
283@@ -103,7 +112,7 @@
284 /* Time in jiffies before concluding the transmitter is hung. */
285 #define TX_TIMEOUT (2*HZ)
286 /* Size of an pre-allocated Rx buffer: <Ethernet MTU> + slack.*/
287-#define PKT_BUF_SZ 1536
288+#define PKT_BUF_SZ MAX_ETH_FRAME_SIZE
289
290 #if !defined(__OPTIMIZE__) || !defined(__KERNEL__)
291 #warning You must compile this file with the correct options!
292@@ -549,12 +558,12 @@
293 const char i82557_config_cmd[22] = {
294 22, 0x08, 0, 0, 0, 0, 0x32, 0x03, 1, /* 1=Use MII 0=Use AUI */
295 0, 0x2E, 0, 0x60, 0,
296- 0xf2, 0x48, 0, 0x40, 0xf2, 0x80, /* 0x40=Force full-duplex */
297+ 0xf2, 0x48, 0, 0x40, 0xfa, 0x80, /* 0x40=Force full-duplex */
298 0x3f, 0x05, };
299 const char i82558_config_cmd[22] = {
300 22, 0x08, 0, 1, 0, 0, 0x22, 0x03, 1, /* 1=Use MII 0=Use AUI */
301 0, 0x2E, 0, 0x60, 0x08, 0x88,
302- 0x68, 0, 0x40, 0xf2, 0x84, /* Disable FC */
303+ 0x68, 0, 0x40, 0xfa, 0x84, /* Disable FC */
304 0x31, 0x05, };
305
306 /* PHY media interface chips. */
307diff -uNr linux.orig/drivers/net/epic100.c linux/drivers/net/epic100.c
308--- linux.orig/drivers/net/epic100.c Sun Mar 25 18:31:20 2001
309+++ linux/drivers/net/epic100.c Wed Nov 28 14:12:44 2001
310@@ -48,7 +48,15 @@
311 /* Time in jiffies before concluding the transmitter is hung. */
312 #define TX_TIMEOUT (2*HZ)
313
314-#define PKT_BUF_SZ 1536 /* Size of each temporary Rx buffer.*/
315+#ifdef CONFIG_VLAN_802_1Q
316+#define MAX_FRAME_SIZE (1518 + 4)
317+#else
318+#define MAX_FRAME_SIZE 1518
319+#endif
320+
321+#define MAX_ETH_FRAME_SIZE (MAX_FRAME_SIZE+18)
322+
323+#define PKT_BUF_SZ MAX_ETH_FRAME_SIZE /* Size of each temporary Rx buffer.*/
324
325 /* Bytes transferred to chip before transmission starts. */
326 /* Initial threshold, increased on underflow, rounded down to 4 byte units. */
327diff -uNr linux.orig/drivers/net/hamachi.c linux/drivers/net/hamachi.c
328--- linux.orig/drivers/net/hamachi.c Sun Mar 25 18:31:22 2001
329+++ linux/drivers/net/hamachi.c Wed Nov 28 14:25:46 2001
330@@ -446,19 +446,25 @@
331 -fix the reset procedure. It doesn't quite work.
332 */
333
334+/* For now, this is going to be set to the maximum size of an ethernet
335+ * packet. Eventually, we may want to make it a variable that is
336+ * related to the MTU
337+ */
338+#ifdef CONFIG_VLAN_802_1Q
339+#define MAX_FRAME_SIZE (1518 + 4)
340+#else
341+#define MAX_FRAME_SIZE 1518
342+#endif
343+
344+#define MAX_ETH_FRAME_SIZE (MAX_FRAME_SIZE+18)
345+
346 /* A few values that may be tweaked. */
347 /* Size of each temporary Rx buffer, calculated as:
348 * 1518 bytes (ethernet packet) + 2 bytes (to get 8 byte alignment for
349 * the card) + 8 bytes of status info + 8 bytes for the Rx Checksum +
350 * 2 more because we use skb_reserve.
351 */
352-#define PKT_BUF_SZ 1538
353-
354-/* For now, this is going to be set to the maximum size of an ethernet
355- * packet. Eventually, we may want to make it a variable that is
356- * related to the MTU
357- */
358-#define MAX_FRAME_SIZE 1518
359+#define PKT_BUF_SZ (MAX_ETH_FRAME_SIZE+2)
360
361 /* The rest of these values should never change. */
362
363diff -uNr linux.orig/drivers/net/old_tulip.c linux/drivers/net/old_tulip.c
364--- linux.orig/drivers/net/old_tulip.c Sun Mar 25 18:31:22 2001
365+++ linux/drivers/net/old_tulip.c Wed Nov 28 12:50:30 2001
366@@ -53,9 +53,15 @@
367 #define TX_RING_SIZE 16
368 #define RX_RING_SIZE 32
369
370+#ifdef CONFIG_VLAN_802_1Q
371+#define MAX_FRAME_SIZE (1518 + 4)
372+#else
373+#define MAX_FRAME_SIZE 1518
374+#endif
375+
376 /* Set the copy breakpoint for the copy-only-tiny-buffer Rx structure. */
377 #ifdef __alpha__
378-static int rx_copybreak = 1518;
379+static int rx_copybreak = MAX_FRAME_SIZE;
380 #else
381 static int rx_copybreak = 100;
382 #endif
383@@ -221,7 +227,7 @@
384
385
386 /* A few values that may be tweaked. */
387-#define PKT_BUF_SZ 1536 /* Size of each temporary Rx buffer.*/
388+#define PKT_BUF_SZ (MAX_FRAME_SIZE+18) /* Size of each temporary Rx buffer.*/
389
390 /* This is a mysterious value that can be written to CSR11 in the 21040 (only)
391 to support a pre-NWay full-duplex signaling mechanism using short frames.
392diff -uNr linux.orig/drivers/net/rtl8139.c linux/drivers/net/rtl8139.c
393--- linux.orig/drivers/net/rtl8139.c Fri Nov 2 17:39:07 2001
394+++ linux/drivers/net/rtl8139.c Wed Nov 28 12:44:42 2001
395@@ -37,11 +37,17 @@
396 static int options[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1};
397 static int full_duplex[MAX_UNITS] = {-1, -1, -1, -1, -1, -1, -1, -1};
398
399+#ifdef CONFIG_VLAN_802_1Q
400+#define MAX_FRAME_SIZE (1518 + 4)
401+#else
402+#define MAX_FRAME_SIZE 1518
403+#endif
404+
405 /* Size of the in-memory receive ring. */
406 #define RX_BUF_LEN_IDX 3 /* 0==8K, 1==16K, 2==32K, 3==64K */
407 #define RX_BUF_LEN (8192 << RX_BUF_LEN_IDX)
408 /* Size of the Tx bounce buffers -- must be at least (dev->mtu+14+4). */
409-#define TX_BUF_SIZE 1536
410+#define TX_BUF_SIZE (MAX_FRAME_SIZE+18)
411
412 /* PCI Tuning Parameters
413 Threshold is bytes transferred to chip before transmission starts. */
414diff -uNr linux.orig/drivers/net/sis900.c linux/drivers/net/sis900.c
415--- linux.orig/drivers/net/sis900.c Fri Nov 2 17:39:07 2001
416+++ linux/drivers/net/sis900.c Wed Nov 28 13:49:28 2001
417@@ -1058,6 +1058,10 @@
418 rx_flags |= RxATX;
419 }
420
421+ #ifdef CONFIG_VLAN_802_1Q
422+ rx_flags |= RxAJAB;
423+ #endif
424+
425 outl (tx_flags, ioaddr + txcfg);
426 outl (rx_flags, ioaddr + rxcfg);
427 }
428@@ -1286,15 +1290,24 @@
429
430 while (rx_status & OWN) {
431 unsigned int rx_size;
432+ unsigned int data_size;
433+
bc443887 434+ data_size = rx_status & DSIZE;
f6050f5c 435+ rx_size = data_size - CRC_SIZE;
436
437- rx_size = (rx_status & DSIZE) - CRC_SIZE;
438+ #ifdef CONFIG_VLAN_802_1Q
439+ /* ``TOOLONG'' flag means jumbo packet recived. */
440+ if(rx_status & TOOLONG)
441+ if(data_size <= MAX_FRAME_SIZE)
442+ rx_status &= (~ ((unsigned int)TOOLONG));
443+ #endif
444
445 if (rx_status & (ABORT|OVERRUN|TOOLONG|RUNT|RXISERR|CRCERR|FAERR)) {
446 /* corrupted packet received */
447 if (sis900_debug > 3)
448 printk(KERN_INFO "%s: Corrupted packet "
449- "received, buffer status = 0x%8.8x.\n",
450- net_dev->name, rx_status);
451+ "received, buffer status = 0x%8.8x/%d.\n",
452+ net_dev->name, rx_status, data_size);
453 sis_priv->stats.rx_errors++;
454 if (rx_status & OVERRUN)
455 sis_priv->stats.rx_over_errors++;
456diff -uNr linux.orig/drivers/net/sis900.h linux/drivers/net/sis900.h
457--- linux.orig/drivers/net/sis900.h Fri Nov 2 17:39:07 2001
458+++ linux/drivers/net/sis900.h Wed Nov 28 13:41:36 2001
459@@ -258,8 +258,16 @@
460 #define CRC_SIZE 4
461 #define MAC_HEADER_SIZE 14
462
463-#define TX_BUF_SIZE 1536
464-#define RX_BUF_SIZE 1536
465+#ifdef CONFIG_VLAN_802_1Q
466+#define MAX_FRAME_SIZE (1518 + 4)
467+#else
468+#define MAX_FRAME_SIZE 1518
469+#endif
470+
471+#define MAX_ETH_FRAME_SIZE (MAX_FRAME_SIZE+18)
472+
473+#define TX_BUF_SIZE MAX_ETH_FRAME_SIZE
474+#define RX_BUF_SIZE MAX_ETH_FRAME_SIZE
475
476 #define NUM_TX_DESC 16 /* Number of Tx descriptor registers. */
477 #define NUM_RX_DESC 16 /* Number of Rx descriptor registers. */
478diff -uNr linux.orig/drivers/net/starfire.c linux/drivers/net/starfire.c
479--- linux.orig/drivers/net/starfire.c Fri Nov 2 17:39:07 2001
480+++ linux/drivers/net/starfire.c Wed Nov 28 14:15:16 2001
481@@ -157,7 +157,14 @@
482 The Starfire has a 512 element hash table based on the Ethernet CRC. */
483 static int multicast_filter_limit = 512;
484
485-#define PKT_BUF_SZ 1536 /* Size of each temporary Rx buffer.*/
486+#ifdef CONFIG_VLAN_802_1Q
487+#define MAX_FRAME_SIZE (1518 + 4)
488+#else
489+#define MAX_FRAME_SIZE 1518
490+#endif
491+
492+#define MAX_ETH_FRAME_SIZE (MAX_FRAME_SIZE+18)
493+#define PKT_BUF_SZ MAX_ETH_FRAME_SIZE /* Size of each temporary Rx buffer.*/
494 /*
495 * Set the copy breakpoint for the copy-only-tiny-frames scheme.
496 * Setting to > 1518 effectively disables this feature.
497diff -uNr linux.orig/drivers/net/sunlance.c linux/drivers/net/sunlance.c
498--- linux.orig/drivers/net/sunlance.c Sun Mar 25 18:31:17 2001
499+++ linux/drivers/net/sunlance.c Wed Nov 28 14:08:33 2001
500@@ -634,7 +634,9 @@
501 }
502
503 if (csr0 & LE_C0_BABL)
504+ #ifndef CONFIG_VLAN_802_1Q
505 lp->stats.tx_errors++;
506+ #endif
507
508 if (csr0 & LE_C0_MISS)
509 lp->stats.rx_errors++;
510diff -uNr linux.orig/drivers/net/tulip.c linux/drivers/net/tulip.c
511--- linux.orig/drivers/net/tulip.c Fri Nov 2 17:39:07 2001
512+++ linux/drivers/net/tulip.c Wed Nov 28 13:18:02 2001
513@@ -51,6 +51,12 @@
514 static int reverse_probe = 0;
515 #endif
516
517+#ifdef CONFIG_VLAN_802_1Q
518+#define MAX_FRAME_SIZE (1518 + 4)
519+#else
520+#define MAX_FRAME_SIZE 1518
521+#endif
522+
523 /* Keep the ring sizes a power of two for efficiency.
524 Making the Tx ring too large decreases the effectiveness of channel
525 bonding and packet priority.
526@@ -60,7 +66,7 @@
527
528 /* Set the copy breakpoint for the copy-only-tiny-buffer Rx structure. */
529 #ifdef __alpha__
530-static int rx_copybreak = 1518;
531+static int rx_copybreak = MAX_FRAME_SIZE;
532 #else
533 static int rx_copybreak = 100;
534 #endif
535@@ -90,7 +96,7 @@
536 /* Operational parameters that usually are not changed. */
537 /* Time in jiffies before concluding the transmitter is hung. */
538 #define TX_TIMEOUT (4*HZ)
539-#define PKT_BUF_SZ 1536 /* Size of each temporary Rx buffer.*/
540+#define PKT_BUF_SZ (MAX_FRAME_SIZE+18) /* Size of each temporary Rx buffer.*/
541 /* This is a mysterious value that can be written to CSR11 in the 21040 (only)
542 to support a pre-NWay full-duplex signaling mechanism using short frames.
543 No one knows what it should be, but if left at its default value some
544@@ -458,7 +464,7 @@
545 };
546
547 enum desc_status_bits {
548- DescOwned=0x80000000, RxDescFatalErr=0x8000, RxWholePkt=0x0300,
549+ DescOwned=0x80000000, RxDescFatalErr=0x4842, RxWholePkt=0x0300,
550 };
551
552 /* Ring-wrap flag in length field, use for last ring entry.
553@@ -2851,8 +2857,8 @@
554 dev->name, entry, status);
555 if (--rx_work_limit < 0)
556 break;
557- if ((status & 0x38008300) != 0x0300) {
558- if ((status & 0x38000300) != 0x0300) {
559+ if ((status & (0x38000000 | RxDescFatalErr | RxWholePkt)) != RxWholePkt) {
560+ if ((status & (0x38000000 | RxWholePkt)) != RxWholePkt) {
561 /* Ingore earlier buffers. */
562 if ((status & 0xffff) != 0x7fff) {
563 if (tulip_debug > 1)
564@@ -2878,10 +2884,10 @@
565 struct sk_buff *skb;
566
567 #ifndef final_version
568- if (pkt_len > 1518) {
569+ if (pkt_len > MAX_FRAME_SIZE) {
570 printk(KERN_WARNING "%s: Bogus packet size of %d (%#x).\n",
571 dev->name, pkt_len, pkt_len);
572- pkt_len = 1518;
573+ pkt_len = MAX_FRAME_SIZE;
574 tp->stats.rx_length_errors++;
575 }
576 #endif
577diff -uNr linux.orig/drivers/net/via-rhine.c linux/drivers/net/via-rhine.c
578--- linux.orig/drivers/net/via-rhine.c Fri Nov 2 17:39:07 2001
579+++ linux/drivers/net/via-rhine.c Wed Nov 28 14:03:02 2001
580@@ -76,7 +76,15 @@
581 /* Time in jiffies before concluding the transmitter is hung. */
582 #define TX_TIMEOUT (2*HZ)
583
584-#define PKT_BUF_SZ 1536 /* Size of each temporary Rx buffer.*/
585+#ifdef CONFIG_VLAN_802_1Q
586+#define MAX_FRAME_SIZE (1518 + 4)
587+#else
588+#define MAX_FRAME_SIZE 1518
589+#endif
590+
591+#define MAX_ETH_FRAME_SIZE (MAX_FRAME_SIZE+18)
592+
593+#define PKT_BUF_SZ MAX_ETH_FRAME_SIZE /* Size of each temporary Rx buffer.*/
594
595
596 #if !defined(__OPTIMIZE__)
597@@ -639,7 +647,11 @@
598 np->cur_rx = 0;
599 np->dirty_rx = 0;
600
601+ #ifdef CONFIG_VLAN_802_1Q
602+ np->rx_buf_sz = (dev->mtu <= 1500 ? PKT_BUF_SZ : dev->mtu + 36);
603+ #else
604 np->rx_buf_sz = (dev->mtu <= 1500 ? PKT_BUF_SZ : dev->mtu + 32);
605+ #endif
606 np->rx_head_desc = &np->rx_ring[0];
607
608 for (i = 0; i < RX_RING_SIZE; i++) {
This page took 0.39753 seconds and 4 git commands to generate.