I'll be posting updated materials in the first day or two.

But there is one more change which I think deserves special notion.

In order to facilitate greater fidelity in our implementation of the OSS 
APIs, we have converted the Boomer core to use normal character device 
interfaces for the OSS device nodes.  Sun audio(7i) style nodes are 
still based on STREAMs.

The astute will note that Solaris can't have both STREAMs nodes and 
character nodes on the same driver (you only get one cb_ops per 
driver.)   The solution Boomer has taken to this problem is to use a 
thin-layer pseudo driver (austr) to provide the STREAMs minor nodes.  
Internally, LDI open & close are used to make sure the DDI reference 
counts are accurate, but all data transfer uses a fast & light weight 
function call mechanism, so there should not be any performance penalty.

The reason for this change is to eliminate extra overhead & latency 
associated with STREAMs, and to eliminate ambiguity that was resulting 
from the fact that the OSS API has no way to express the details of the 
queuing that was being added by the STREAMs layer.

Upshot of this is of course faster, lower overhead for OSS applications, 
and *much* more accurate reporting of latency and positioning details.  
(At the moment the accuracy of sample position reporting is limited only 
to two things: the accuracy of system clock and the physical device's 
ability to report its sampling position.  Most devices have a 64-byte 
internal FIFO without any ability to introspect into them, so that will 
tend to be the approximate error for these devices.  For a typical 
device running at 16-bit stereo 48kHz, that corresponds to an error of 
approximately 320 usec, which should be *plenty* accurate enough for 
reasonable uses.)

    -- Garrett


Reply via email to