|
|
|
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.
|
|