--- linux-2.6.30.4-orig/drivers/net/comcerto/comcerto_eth.c	2009-09-15 13:49:39.819717000 -0700
+++ linux-2.6.30.4-new/drivers/net/comcerto/comcerto_eth.c	2009-09-15 17:11:02.540829000 -0700
@@ -718,7 +718,61 @@
 static int comcerto_eth_change_mtu(struct net_device *dev, int new_mtu)
 {
 
-	return 0;
+        struct eth_priv *priv = netdev_priv(dev);
+        GEM_DEVICE *gemdev = &priv->gemdev;
+        int oldsize = dev->mtu ;
+        int frame_size = new_mtu + ETH_HLEN +4;
+ 
+        //frame_size += priv->padding;
+#if !defined(JUMBO_FRAME_SIZE)
+#       define JUMBO_FRAME_SIZE 0x2048
+#endif
+        if ((frame_size < 64) || (frame_size > JUMBO_FRAME_SIZE)) {
+                if (netif_msg_drv(priv))
+                        printk(KERN_ERR "%s: Invalid MTU setting\n",
+                                        dev->name);
+                return -EINVAL;
+        }
+        if (frame_size > 1536) {
+          // Can not support larger packets.
+          // Would need to:
+          // change ip_network config
+          // rx buffer size in dma config
+          // rx staggering in buffer pool
+                if (netif_msg_drv(priv))
+                        printk(KERN_ERR "%s: Invalid MTU setting - Jumbo frames not supported\n",
+                                        dev->name);
+                return -EINVAL;
+        }
+        /* Only stop and start the controller if it isn't already
+         * stopped, and we changed something */
+        if ((oldsize != new_mtu) &&((dev->flags &
+IFF_UP)||(priv->fast_path_enabled))){
+          printk(KERN_ERR "%s: Can not change MTU - fast_path must be disabled and ifconfig down must be issued first\n",
+                 dev->name);
+          return -EINVAL;
+ 
+        }
+ 
+        dev->mtu = new_mtu;
+ 
+        /* If the mtu is larger than the max size for standard
+         * ethernet frames (ie, a jumbo frame), setup Jumbo frames */
+        //      gem_enable_rx_jmb()
+        if (frame_size > 1536) {
+          // jumbo
+        } else {
+          if (frame_size > 1500 + ETH_HLEN+4)
+            gem_enable_1536_rx(gemdev);
+          else
+            gem_disable_1536_rx(gemdev);
+        }
+ 
+        if ((oldsize != new_mtu) &&(dev->flags & IFF_UP)){
+          // need to start device here
+        }
+ 
+        return 0;
 }
 
 static void comcerto_eth_release_buffers(struct net_device *dev)
