Home
About
Contact
Documentation
Applications
Download
Resources
Documentation
Developer
Status

Linux-IrDA Current Status [22 July 2003]

These information are copied from http://www.hpl.hp.com/personal/Jean_Tourrilhes/IrDA/IrDA.html, Jean's IrDA page. Note that I modified links to point to Linux-IrDA WEB-FTP area from SourceForge.net and I corrected some text were needed.

Contents:
    Overview
    Linux Kernel 2.4.x
    Linux Kernel 2.5.x
    Linux Kernel 2.6.x
    Future
    Irda-Utils

Overview

Willing or not, it seem that I'm the one responsible of making sure the Linux-IrDA stack work properly. Here is a quick status report...

  • The archive for the old mailing list at pasta is erratic, please use the new mailing list at SourceForge (otherwise I may not be able to read your e-mail).
  • It is my belief that all known issue regarding the IrDA stack are resolved (I'm not talking here about drivers and installation, which are know to be problematic). Don't prove me wrong ;-)
  • What's the latest version ? Things are always evolving, so I recommend to get a very recent kernel 2.4.X (like the latest one) and apply some patches from this page. Note the the development of Linux-IrDA in 2.4.X is stopped, and I will no longer accept major patches for it, development is now happening only in 2.5.X, see below.
  • The latest essential update of 2.4.X was in kernel 2.4.21, which fixed various race conditions and connection issues, therefore I don't even want to hear about version prior to 2.4.21. And don't mention 2.2.X ;-)
  • Kernel 2.4.18 has essential fixes for IrLAN and IrLPT. I don't normally use them, but they now seem to work.
  • Kernel 2.4.19 has important fixes to IrLAP, that avoid desequenced packet. This is essential for long communications using any higher level protocol, such as with IrCOMM.
  • Kernel 2.4.20 fixes a bunch of race conditions in LAP, IrCOMM and IrLAN (enable Linux as IrCOMM/IrLAN server), fixes the USB driver unplug code, fixes IrNET retries and add various new dongle drivers (mcp2120, act200l & ma600).
  • Kernel 2.4.21 has a new socket scheduler (improve fairness between IrDA sockets) and a partial rewrite of IrTTP (kill zillion of bugs and race conditions, and improve performance). It also includes a fix for when two IrNET peers connect to each other simultaneously, and adds the Donauboe FIR driver.
  • Kernel 2.4.22 fixes some IrCOMM problems with chat, add workarounds for interoperability with buggy devices and fix a common memory leak. This is the last Linux-IrDA update for 2.4.X, no more updates are planned.
  • The IrDA stack in 2.5.X contains a large number of fixes and improvement over what is available in 2.4.X (list below), and this is where new development is happening so you are welcome to try it. Usually later version are better.
  • Kernel 2.5.28 broke the IrDA stack, and that was only repaired in 2.5.39 with a massive patch to fix SMP locking. Also included were fix to avoid duplicated hashbin entries and fix on NSC change speed.
  • Kernel 2.5.42 fixes some IrCOMM problems, adds the Donauboe driver and update the VLSI driver. Kernel 2.5.47 adds the new IrTTY driver (to replace the old one which is now broken - not all dongle drivers are converted yet). Kernel 2.5.61 features a partial rewrite of the SIR wrapper (smaller & faster). Kernel 2.5.67 fix locking in the discovery code and improve the performance at SIR. Kernel 2.5.70 has some fixes for irtty-sir and irport, add the new smsc2-ircc driver and fix a large number of sbk memory leaks.
  • My changes to IrTTP and the addition of the Socket scheduler (see above) are pretty big changes. I've tested the performance of it with irtty and nsc-ircc. You can see that unidirectional small packet performance has increased by a factor 3 at 4Mb/s. Also, the maximum number of Tx buffers queued in the IrDA stack decreased from 21 to 10, which improves latency. Lastly, it seems that the TTY layer is becoming a bottleneck.
  • The new irtty-sir driver in kernel 2.5.X replace the old irtty driver. It fixes some architectural issue in the interaction with the serial driver. The downside is that all dongle drivers need to be updated to the new dongle infrastructure. Martin has documented that.
  • The SMC driver will soon be replaced with the new SMC driver. Please help testing it.
  • The toshoboe driver will soon be replaced with the donauboe driver. Please help testing it.
  • The irport driver is in need of a maintainer. Not me.
  • irda-utils 0.9.15 is out. Don't use anything older than that. I don't want to look at bug reports using old irdadump, because they don't show some common problems, I really want irdadump 0.9.15.

Linux Kernel 2.4.x

Linux-IrDA patches included in 2.4.20-pre2 :

  • Max-Tx sysctl : Fix a contradiction in IrDA spec regarding max frame size, necessary for FIR operation using IrComm or some socket applications.
  • IrNET disconnect fix : Fix IrNET to re-enable passive mode and retries (bug added in latest kernel patches).
  • Very important fixes : fix a race condition in IrLAP, fix "unkillable" application in IrSock, and fix transmit before ready in ircomm.
  • Discovery fixes : ignore passive discoveries in IrComm and IrLAN (to avoid simultaneous connections, mostly useful as server) and force log expiry on LAP disconnect.
  • NSC OB6100 : Enable the nsc-ircc driver to recognise the FIR chip on the HP OmniBook 6100. Contributed by Kevin Thayer.
  • irtty stat fixes : increment irtty tx counter at the right time. Contributed by Frank Becker.
  • USB disconnect fixes : fix race conditions in USB disconnect code. Allow you to unplug the dongle even with heavy transfer going on.
  • Discovery expiry fix : Make discovery expiry work properly for non default discovery period/timeout.
  • MCP2120 driver, ActiSys 200L and MA600 driver for 2.4.X : MCP2120 dongle driver contributed by Felix Tang, ActiSys 200L dongle driver contributed by Shimizu Takuja (patch from Gerhard Bertelsmann) and MA600 dongle driver contributed by Leung.

Linux-IrDA patches included in 2.4.21-pre3 :

  • Socket scheduler : add socket packet scheduler for fairness between socket, add LAP flow control to minimse LAP Tx buffer queue (10 => 2). Need IrTTP fixes.
  • IrTTP big fixes : fix 3 race conditions (start timer, give credit, flow ind), fix Rx queue flow control (could become infinite), protect Rx credit update, fix TTP flow control, implement packet scheduler, reduce Tx queue max size (11 => 8), reduce latency (by skipping timer), optimise threshold and flow parameters. Need socket scheduler. This seem to have fixed my all my IrNET Oopses and weirdness...
  • Fix dongle autoloading : avoid loading dongle modules with irq disabled in irtty.
  • Minor fixes : Always close LAP on LSAP closure, disable LAP timer on accept socket, and header fix for Alpha (by Felix Tang).
  • Simultaneous IrNET race : fix race condition when the two peer simultaneously create an IrNET connection to each other (thanks to Martin Diehl for reporting this race). As opposed to the IrCOMM/IrLAN discovery workaround, this fixes the race properly and cleanly.
  • SMC small fixes : Fix SMC driver removal code and various messages. Patch from Jeff Snyder.
  • Donauboe driver : new driver for Toshiba IrDA chip. Patch from Christian Gennerat & Martin Lucina. Updated version.
  • Four small bugs in /proc : fix four cases where interrupts would not be re-enabled on failure. Found by the Stanford checker.

Linux-IrDA patches included in 2.4.22-pre2 :

  • Fixes chat over IrCOMM problem : workaround a bug in the kernel (TTY layer) triggered by chat brokeness by accepting data before IrCOMM is initialised. Also remove the IrCOMM-IAS entry to accept multiple incomming connections.
  • Handle invalid QoS parameter : handle better case where the peer feed us invalid or oversized parameters. Also add various warning so that users knows when the IrDA peer is buggy (and doesn't start blaming Linux-IrDA). Also add a new sysctl, max_tx_window.
  • LMP timer race condition : fix a race condition when starting the IrLMP watchdog timer, and improve the debugging messages.
  • Export CRC-16 routine : export to drivers the routine doing CRC calculations. Original patch from Martin Diehl.
  • Fix secondary nack code : fix the secondary function to send RR and frames without the poll bit when it detect packet losses.
  • IrIAP SKB leak : fix an obvious SKB leak in IrIAP. This is only a localised fix, and the same fix need to be applied to all Linux-IrDA state machines. Original patch from Jan Kiszka.
  • USB driver cleanup : Handle properly failure of URB with new speed settings, fix endianess and various other cleanups.
  • caddr fix : ignore the C/R bit in the LAP connection address. Patch from Jan Kiszka.
  • static driver fix : fix some obvious static init bugs.

Linux Kernel 2.5.x

Other Linux-IrDA patches included in 2.5.13 :

  • Fix races waiting for events : use proper logic to wait for events instead of obsoleted kernel calls, to avoid race conditions. Most of those races were theoretical or had workaround. Original patch from Martin Diehl.
  • IrCOMM export rules for 2.5.X : Add proper export rules to IrCOMM modules to make it work properly in kernel 2.5.10 and later. Patch from Kai Germaschews.

Other Linux-IrDA patches included in 2.5.16 :

  • set_bit fixes : change all arguments of set_long to "unsigned long". Patch from Paul Mackerras.
  • LSAP cache fix : replace the global LSAP cache with LSAP caches private to each LAP. Fix a bug where two simultaneous connections from two devices using the same LSAPs would get mixed up. Should also improve performance in similar cases. Patch from Christoph Bartelmus.

Other Linux-IrDA patches included in 2.5.24 :

  • USB driver cleanup : Handle properly failure of URB with new speed settings, and various other cleanups.
  • Init & Headers cleanup for 2.5.X : Cleanup the header includes (should speed up dependancies & compile) and module init (should enable static compiles). new version for 2.5.22 (use "patch -l" if needed).
  • LSAP cache and socket receive fixes : fix one instance were we forgot to clear LSAP cache, and fix a bogus conversion to wait_event() where the socket closure would never propagate to the app waiting on a socket. This fixes bugs introduced in 2.5.13 and 2.5.16. Also reserve enough skb header space in IrSOCK so that drivers don't complain. new version for 2.5.22 (use "patch -l" if needed).

Other Linux-IrDA patches included in 2.5.39 :

  • HashBins fixes : fix kernel crash after removal of IAS object or IAS attribute with duplicated name, simplify LMP registration to avoid using random generator in static init, and make all hashbin uses 64 bit safe.
  • Unique LAP address : Make sure LAP address is sane, which mean not NULL, not BROADCAST and not already in use by another link.
  • NSC speed fix : try to fix the NSC driver so that it changes speed back to 9600 properly. Aggregate of both original patches.
  • Hashbin locking fixes : Fix locking for 2.5.32. Final patch. Apply after two first patches above.
  • IrCOMM/IrLAN locking fixes : Fix locking for 2.5.32. Final patch. Apply after locking hashbin fixes.
  • Driver locking fixes : Fix locking for 2.5.32. Final patch. Apply after locking hashbin fixes & nsc speed patch.
  • ALI locking fixes : Fix locking for 2.5.32. Final patch. Apply after locking hashbin fixes.

Other Linux-IrDA patches included in 2.5.42 :

  • VLSI driver v0.4 : major update of the VLSI driver. Patch from Martin Diehl.
  • Donauboe driver : new driver for Toshiba IrDA chip. Patch from Christian Gennerat & Martin Lucina. Updated version.
  • Export CRC-16 routine : export to drivers the routine doing CRC calculations. Original patch from Martin Diehl.
  • Fixes chat over IrCOMM problem : workaround a bug in the kernel (TTY layer) triggered by chat brokeness by accepting data before IrCOMM is initialised. Also remove the IrCOMM-IAS entry to accept multiple incomming connections.
  • Handle invalid QoS parameter : handle better case where the peer feed us invalid or oversized parameters. Also add various warning so that users knows when the IrDA peer is buggy (and doesn't start blaming Linux-IrDA). Also add a new sysctl, max_tx_window. new patch, complete fix.
  • LMP timer race condition : fix a race condition when starting the IrLMP watchdog timer, and improve the debugging messages.

Other Linux-IrDA patches included in 2.5.47 :

  • Fix packet type : migrate the IrDA stack to the multithreaded receive path of the networking stack and cleanup the packet type definition. This should fix an annoying warning on SMP.
  • Fix donauboe init : fix donauboe driver function names to avoid clashes with toshoboe driver.
  • New irtty driver (2.5.44) : new IrTTY driver to go with the new serial driver in 2.5.X. Original patch from Martin Diehl.
  • New irtty driver (2.5.45) : new IrTTY driver to go with the new serial driver in 2.5.X. Patch from Martin Diehl.

Linux-IrDA patches included in 2.5.61 :

Linux-IrDA patches included in 2.5.67 :

  • Discovery fixes and cleanup : fix the last locking problems in discovery and expiry, simplify, cleanup and optimise the discovery/expiry code (i.e. smaller and faster).
  • Dynamic window fixes : fix the dynamic window code to properly send the pf bit. Up to 40% improvement from large packets at SIR (i.e. most bulk transfer at SIR). Performance unchanged for FIR or small packet. More complete performance analysis later on.
  • IrDA-USB cleanups : cleanup the Rx path, the USB registration and others in the IrDA-USB driver.
  • Sir-dev ZeroCopy : Enable ZeroCopy Rx in irtty-sir (provided by the new SIR wrapper).
  • Minor timer optimisation : make IrDA timers use mod_timer (safer & faster).
  • IrNET update : Fix module refcounting and add hints to discovery.

Linux-IrDA patches included in 2.5.70 :

  • skb leak audit : Fix many real and potential skb (packet buffer) memory leaks in the IrDA stack. This patch is so good that over time the number of skb used decrease ;-) Thanks to Jan Kiszka for pointing out the issue.
  • IrNET context fix : fix IrNET locking to be compatible with PPP, fix a couple of crash in 2.5.67+.
  • caddr fix : ignore the C/R bit in the LAP connection address. Patch from Jan Kiszka.
  • sir_kthread comment : add comment to explain task state, new module stuff in irtty-sir.
  • irport fixes #3 : various fixes and optimisation for irport.
  • New SMSC driver #6 : new SMSC driver, this one works, even in FIR (but still need testing). Original patch from Daniele Peri. Improved version, for 2.5.69
  • trans_start fixes : minor fix in various drivers.
  • TTY API fix : Add an extra call to the TTY API so that irtty-sir can work again. Russell eventually implemented something similar.

Linux Kernel 2.6.x

Linux-IrDA patches included in 2.6.0-test1 :

  • IrDA-USB endian fixes : Trivial fix for irda-usb to make it work on big endian boxes (such as PPC). Original patch from Jacek Jakubowski. Add new USB device ID.
  • NSC '39x support : Add preliminary support for NSC PC8739x chipset, such as found in IBM R31/A30/A31 laptops. This patch needs more work. Original patch from Jan Frey.
  • Header cleanup : cleanup the <linux/irda.h> header.
  • IrNET cast fix : remove pointer casting in IrNET debug code. Patch suggested by David S. Miller.
  • More skb leaks : fix two additional potential skb leaks in IrTTP. Found by the Stanford checker.
  • setup_dma fix : mark all drivers that need setup_dma() as requiring CONFIG_ISA. Mark new dongle driver as needing sir-dev.
  • Verify structs : verify the size of packed structures. Patch suggested by Russell King.
  • IrCOMM devfs fix : make sure that the devfs name for IrCOMM devices are not bogus. Original patch suggested by Martin Diehl.
  • sir-dev cleanup : various cleanups in irtty-sir and sir-dev drivers. Patch from Martin Diehl.
  • refrigerator support : support software suspend in irtty-sir. Patch from Neil Brown.

Linux-IrDA patches pending for 2.6.0-test5 :

  • vlsi driver update : update VLSI driver to version 0.5 (kernel 2.4.73). Patch from Martin Diehl.
  • vlsi driver update : update VLSI driver to version 0.5 (kernel 2.4.74). Patch from Martin Diehl.
  • Donauboe probe : disable the probe in Donauboe driver by default and minor cleanups. Patch from Christian Gennerat.
  • irda-usb probe : minor fix to the probe failure path of irda-usb. Patch from Oliver Neukum.
  • IrLAP retry count : add interoperability workaround for a bug in 2.4.X IrDA stacks : 2.4.X secondary forget to set pf bit when reaching window byte capacity without sending the max number of packets (ex: 115 kb/s, max packet size, window=7), and we would eventually close the connection. This bug was fixed in 2.5.67 (Dynamic window fixes).

Future

Linux-IrDA patches pending for even later, for 2.5.X unless specified :

  • SigmaTel STIr4200 USB driver : Experimental support for the SigmaTel STIr4200 USB based dongles. This driver is still alpha quality and you will need to set both max_baud_rate to 115200 and max_tx_window to 1 (otherwise the hardware will corrupt/drop packets). Original code from Paul Stewart.
  • VIA FIR driver : driver for the IrDA module of some VIA chipsets. This driver need more work (PCI probe, timing loop, testing). Written by Frank Liu (VIA).
  • Dynamic window fixes (2.4.X) : fix the dynamic window code to properly send the pf bit - patch for 2.4.X kernel (already in 2.5.67).
  • ep7211_ir driver locking fix : fix locking in the ep7211_ir driver. Patch from Chris Wilson.
  • sa1100_ir driver locking fix : fix locking in the sa1100_ir driver. Patch from Chris Wilson.
  • donauboe comments cleanup : Patch from Pavel Machek.
  • Fix LAP race condition : improve previous fix for IrLAP race condition to protect in more cases. This patch is not totally safe and need a rewrite.

Irda-Utils

New version of irda-utils :

  • irda-utils-0.9.15 : add new dongles drivers, new irdadump formating options, fix irdadump TTP and IrCOMM decoding, add LAP QoS decoding, fix irattach error detection, and add new socket samples. With this version, you can't use the incorrect form irattach irda0 -s 1 any longer, you must use irattach irda0 -s instead.
  • irda-utils-0.9.16-pre6 : fixes a few irdadump bugs and allow to disable irdadump parsing, adds irnetd, and improve man pages.
Home | About | Contact | Documentation | Applications | Download | Resources 

Copyright 2002-2003 Linux-IrDA Project. Released under GNU FDL license.