1 diff -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
5 #include <linux/skbuff.h>
6 #include <linux/init.h>
8 +#ifdef CONFIG_VLAN_802_1Q
9 +#define MAX_FRAME_SIZE (1518 + 4)
11 +#define MAX_FRAME_SIZE 1518
14 +#define MAX_ETH_FRAME_SIZE (MAX_FRAME_SIZE+18)
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 = {
22 printk(" el_receive %d.\n", pkt_len);
24 - if ((pkt_len < 60) || (pkt_len > 1536))
25 + if ((pkt_len < 60) || (pkt_len > MAX_ETH_FRAME_SIZE))
28 printk("%s: bogus packet, length=%d\n", dev->name, pkt_len);
29 diff -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
34 static unsigned int net_debug = NET_DEBUG;
36 +#ifdef CONFIG_VLAN_802_1Q
37 +#define MAX_FRAME_SIZE (1518 + 4)
39 +#define MAX_FRAME_SIZE 1518
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};
46 #define RX_SUSPEND 0x0030
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.
53 The Tx ("command") unit executes a list of commands that look like:
56 #define TX_BUF_START 0x0100
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 */
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)
67 diff -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
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. */
74 +#ifdef CONFIG_VLAN_802_1Q
75 +#define MAX_FRAME_SIZE (1518 + 4)
77 +#define MAX_FRAME_SIZE 1518
80 +#define MAX_ETH_FRAME_SIZE (MAX_FRAME_SIZE+18)
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. */
89 dev->trans_start = jiffies;
90 - if (inw(ioaddr + TX_FREE) > 1536) {
91 + if (inw(ioaddr + TX_FREE) > MAX_ETH_FRAME_SIZE) {
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);
98 spin_unlock(&lp->lock);
100 diff -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
104 /* Maximum events (Rx packets, etc.) to handle at each interrupt. */
105 static int max_interrupt_work = 20;
107 +#ifdef CONFIG_VLAN_802_1Q
108 +#define MAX_FRAME_SIZE (1518 + 4)
110 +#define MAX_FRAME_SIZE 1518
113 +#define MAX_ETH_FRAME_SIZE (MAX_FRAME_SIZE+18)
116 /* Put out somewhat more debugging messages. (0: no msg, 1 minimal .. 6). */
117 #define vortex_debug debug
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.*/
126 #include <linux/config.h>
127 #include <linux/version.h>
128 @@ -1108,7 +1117,11 @@
131 /* Set the full-duplex bit. */
132 + #ifdef CONFIG_VLAN_802_1Q
133 + outb((vp->full_duplex ? 0x20 : 0) | 0x40, ioaddr + Wn3_MAC_Ctrl);
135 outb((vp->full_duplex ? 0x20 : 0) | (dev->mtu > 1500 ? 0x40 : 0), ioaddr + Wn3_MAC_Ctrl);
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. */
153 + #ifdef CONFIG_VLAN_802_1Q
154 + outb((vp->full_duplex ? 0x20 : 0) |
156 + ioaddr + Wn3_MAC_Ctrl);
158 outb((vp->full_duplex ? 0x20 : 0) |
159 (dev->mtu > 1500 ? 0x40 : 0),
160 ioaddr + Wn3_MAC_Ctrl);
165 @@ -1554,11 +1573,11 @@
166 outsl(ioaddr + TX_FIFO, skb->data, (skb->len + 3) >> 2);
169 - if (inw(ioaddr + TxFree) > 1536) {
170 + if (inw(ioaddr + TxFree) > MAX_ETH_FRAME_SIZE) {
171 clear_bit(0, (void*)&dev->tbusy);
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);
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);
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);
193 diff -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
197 #define NUM_TX_DESC 4
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)
204 +#define MAX_FRAME_SIZE 1518
207 +#define MAX_ETH_FRAME_SIZE (MAX_FRAME_SIZE+18)
209 /* Size of the Tx bounce buffers -- must be at least (dev->mtu+14+4). */
210 #define TX_BUF_SIZE MAX_ETH_FRAME_SIZE
211 diff -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
216 static int rx_copybreak = 100;
218 -#define PKT_BUF_SZ 1536
219 +#ifdef CONFIG_VLAN_802_1Q
220 +#define MAX_FRAME_SIZE (1518 + 4)
222 +#define MAX_FRAME_SIZE 1518
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
229 #define I596_TOTAL_SIZE 17
230 diff -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
237 +#ifdef CONFIG_VLAN_802_1Q
238 +#define MAX_FRAME_SIZE (1518 + 4)
240 +#define MAX_FRAME_SIZE 1518
243 /* These are the operational function interfaces to board-specific
245 void reset_8390(struct device *dev)
250 - if (pkt_len < 60 || pkt_len > 1518)
251 + if (pkt_len < 60 || pkt_len > MAX_FRAME_SIZE)
254 printk(KERN_DEBUG "%s: bogus packet size: %d, status=%#2x nxpg=%#2x.\n",
255 diff -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
262 +#ifdef CONFIG_VLAN_802_1Q
263 +#define MAX_FRAME_SIZE (1518 + 4)
265 +#define MAX_FRAME_SIZE 1518
268 +#define MAX_ETH_FRAME_SIZE (MAX_FRAME_SIZE+18)
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"
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;
281 static int rx_copybreak = 200;
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
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 */
296 - 0xf2, 0x48, 0, 0x40, 0xf2, 0x80, /* 0x40=Force full-duplex */
297 + 0xf2, 0x48, 0, 0x40, 0xfa, 0x80, /* 0x40=Force full-duplex */
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 */
306 /* PHY media interface chips. */
307 diff -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
311 /* Time in jiffies before concluding the transmitter is hung. */
312 #define TX_TIMEOUT (2*HZ)
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)
318 +#define MAX_FRAME_SIZE 1518
321 +#define MAX_ETH_FRAME_SIZE (MAX_FRAME_SIZE+18)
323 +#define PKT_BUF_SZ MAX_ETH_FRAME_SIZE /* Size of each temporary Rx buffer.*/
325 /* Bytes transferred to chip before transmission starts. */
326 /* Initial threshold, increased on underflow, rounded down to 4 byte units. */
327 diff -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.
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
338 +#ifdef CONFIG_VLAN_802_1Q
339 +#define MAX_FRAME_SIZE (1518 + 4)
341 +#define MAX_FRAME_SIZE 1518
344 +#define MAX_ETH_FRAME_SIZE (MAX_FRAME_SIZE+18)
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.
352 -#define PKT_BUF_SZ 1538
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
358 -#define MAX_FRAME_SIZE 1518
359 +#define PKT_BUF_SZ (MAX_ETH_FRAME_SIZE+2)
361 /* The rest of these values should never change. */
363 diff -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
367 #define TX_RING_SIZE 16
368 #define RX_RING_SIZE 32
370 +#ifdef CONFIG_VLAN_802_1Q
371 +#define MAX_FRAME_SIZE (1518 + 4)
373 +#define MAX_FRAME_SIZE 1518
376 /* Set the copy breakpoint for the copy-only-tiny-buffer Rx structure. */
378 -static int rx_copybreak = 1518;
379 +static int rx_copybreak = MAX_FRAME_SIZE;
381 static int rx_copybreak = 100;
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.*/
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.
392 diff -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
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};
399 +#ifdef CONFIG_VLAN_802_1Q
400 +#define MAX_FRAME_SIZE (1518 + 4)
402 +#define MAX_FRAME_SIZE 1518
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)
412 /* PCI Tuning Parameters
413 Threshold is bytes transferred to chip before transmission starts. */
414 diff -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 @@
421 + #ifdef CONFIG_VLAN_802_1Q
422 + rx_flags |= RxAJAB;
425 outl (tx_flags, ioaddr + txcfg);
426 outl (rx_flags, ioaddr + rxcfg);
428 @@ -1286,15 +1290,24 @@
430 while (rx_status & OWN) {
431 unsigned int rx_size;
432 + unsigned int data_size;
434 + data_size = rx_status & DSIZE;
435 + rx_size = data_size - CRC_SIZE;
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));
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++;
456 diff -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
461 #define MAC_HEADER_SIZE 14
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)
468 +#define MAX_FRAME_SIZE 1518
471 +#define MAX_ETH_FRAME_SIZE (MAX_FRAME_SIZE+18)
473 +#define TX_BUF_SIZE MAX_ETH_FRAME_SIZE
474 +#define RX_BUF_SIZE MAX_ETH_FRAME_SIZE
476 #define NUM_TX_DESC 16 /* Number of Tx descriptor registers. */
477 #define NUM_RX_DESC 16 /* Number of Rx descriptor registers. */
478 diff -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
482 The Starfire has a 512 element hash table based on the Ethernet CRC. */
483 static int multicast_filter_limit = 512;
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)
489 +#define MAX_FRAME_SIZE 1518
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.*/
495 * Set the copy breakpoint for the copy-only-tiny-frames scheme.
496 * Setting to > 1518 effectively disables this feature.
497 diff -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
503 if (csr0 & LE_C0_BABL)
504 + #ifndef CONFIG_VLAN_802_1Q
505 lp->stats.tx_errors++;
508 if (csr0 & LE_C0_MISS)
509 lp->stats.rx_errors++;
510 diff -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
514 static int reverse_probe = 0;
517 +#ifdef CONFIG_VLAN_802_1Q
518 +#define MAX_FRAME_SIZE (1518 + 4)
520 +#define MAX_FRAME_SIZE 1518
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.
528 /* Set the copy breakpoint for the copy-only-tiny-buffer Rx structure. */
530 -static int rx_copybreak = 1518;
531 +static int rx_copybreak = MAX_FRAME_SIZE;
533 static int rx_copybreak = 100;
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
547 enum desc_status_bits {
548 - DescOwned=0x80000000, RxDescFatalErr=0x8000, RxWholePkt=0x0300,
549 + DescOwned=0x80000000, RxDescFatalErr=0x4842, RxWholePkt=0x0300,
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)
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) {
564 @@ -2878,10 +2884,10 @@
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);
573 + pkt_len = MAX_FRAME_SIZE;
574 tp->stats.rx_length_errors++;
577 diff -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
581 /* Time in jiffies before concluding the transmitter is hung. */
582 #define TX_TIMEOUT (2*HZ)
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)
588 +#define MAX_FRAME_SIZE 1518
591 +#define MAX_ETH_FRAME_SIZE (MAX_FRAME_SIZE+18)
593 +#define PKT_BUF_SZ MAX_ETH_FRAME_SIZE /* Size of each temporary Rx buffer.*/
596 #if !defined(__OPTIMIZE__)
601 + #ifdef CONFIG_VLAN_802_1Q
602 + np->rx_buf_sz = (dev->mtu <= 1500 ? PKT_BUF_SZ : dev->mtu + 36);
604 np->rx_buf_sz = (dev->mtu <= 1500 ? PKT_BUF_SZ : dev->mtu + 32);
606 np->rx_head_desc = &np->rx_ring[0];
608 for (i = 0; i < RX_RING_SIZE; i++) {