For those of you who wish to download and use LiS-2.9, you MUST recompile your drivers in the context of LiS-2.9. Binary drivers compiled against LiS-2.8 (or earlier) will likely not work with LiS-2.9. The reason for this is that the size of the queue_t structure has changed between 2.8 and 2.9. The STREAMS functions RD(), WR() and OTHERQ() used simple indexing of the queue-pair to develop a pointer the related queue, thus, the size of the structure was important. In LiS-2.9, there is a field in the queue structure that points to the other queue of the queue pair. It is this field that is now used to implement these functions. This insulates drivers from changes in the size of the queue structures in the future. Of course, if you have a driver that depends upon sizeof(queue_t) or does indexing of the queue structures itself (naughty) you will need to reompile it at every release of LiS just to be on the safe side. While I am on this subject: I would like to call developers attention to two new header files: lismem.h and lispci.h. There are corresponding .c files. These files implement LiS versions of commonly used memory allocation and PCI functions. This includes the allocation of pages as well as variable length areas. The intent of these files is to define a fixed interface to these kernel functions via subroutines (not macros) within LiS. This allows drivers using these functions to be more portable to future versions of LiS and of the kernel, with only LiS needing to be rebuilt for each new environment. This should help reduce the maintenance burden of STREAMS drivers into new kernel releases. This is not academic: The 2.4 kernel changed the values of the define GFP_KERNEL for calling the memory allocator. This means that a driver compiled against the 2.2 kernel interface would pass the wrong constant when calling the allocator in a 2.4 context. So LiS is attempting to interpose itself to create a stable interface. The osif.[ch] files are also a step in this direction since they filter all kernel calls through a genuine subroutine within LiS. If the kernel interface changes we have at least the possibility of preserving the existing interface via LiS to save having to maintain multiple versions of STREAMS drivers. At Gcom we have succeeded in compiling our own drivers just once, and then running the resulting code on either a 2.2 or 2.4 kernel, with LiS providing all the needed insulation. -- Dave
