patch-2.4.0-test11 linux/drivers/net/irda/irport.c

Next file: linux/drivers/net/irda/irtty.c
Previous file: linux/drivers/net/ibmlana.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.0-test10/linux/drivers/net/irda/irport.c linux/drivers/net/irda/irport.c
@@ -230,7 +230,7 @@
 	dev->init            = irport_net_init;
 	dev->hard_start_xmit = irport_hard_xmit;
 	dev->tx_timeout	     = irport_timeout;
-	dev->watchdog_timeo  = HZ/20;
+	dev->watchdog_timeo  = HZ;  /* Allow time enough for speed change */
 	dev->open            = irport_net_open;
 	dev->stop            = irport_net_close;
 	dev->get_stats	     = irport_net_get_stats;
@@ -496,7 +496,6 @@
 		self->tx_buff.data += actual;
 		self->tx_buff.len  -= actual;
 	} else {
-		
 		/* 
 		 *  Now serial buffer is almost free & we can start 
 		 *  transmission of another packet. But first we must check
@@ -629,8 +628,16 @@
 	netif_stop_queue(dev);
 	
 	/* Check if we need to change the speed */
-	if ((speed = irda_get_speed(skb)) != self->io.speed)
-		self->new_speed = speed;
+	if ((speed = irda_get_speed(skb)) != self->io.speed) {
+		/* Check for empty frame */
+		if (!skb->len) {
+			irda_task_execute(self, __irport_change_speed, 
+					  irport_change_speed_complete, 
+					  NULL, (void *) speed);
+			return 0;
+		} else
+			self->new_speed = speed;
+	}
 
 	spin_lock_irqsave(&self->lock, flags);
 
@@ -999,7 +1006,9 @@
 
 #ifdef MODULE
 MODULE_PARM(io, "1-4i");
+MODULE_PARM_DESC(io, "Base I/O adresses");
 MODULE_PARM(irq, "1-4i");
+MODULE_PARM_DESC(irq, "IRQ lines");
 
 MODULE_AUTHOR("Dag Brattli <dagb@cs.uit.no>");
 MODULE_DESCRIPTION("Half duplex serial driver for IrDA SIR mode");

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)