Implementation Issues for WavePci Devices
This section presents guidelines for hardware and software design that audio hardware vendors can use to improve the performance and reliability of their WavePci devices. All of these guidelines apply to audio devices and drivers that are designed to work with Microsoft Windows XP and later, but many also apply to earlier versions of Windows going back to Windows 98 Second Edition.
As discussed in Wave Filters, the port class system driver, Portcls.sys, provides two different port drivers for wave rendering and capture devices:
WaveCyclic is less demanding of hardware and software, but its performance is limited by the software overhead of copying data between buffers.
WavePci is the performance-oriented alternative to WaveCyclic, but requires more sophisticated hardware and driver software.
Although the name WavePci implies an audio device that plugs into the PCI bus, in fact, the primary requirement for a WavePci device is that it contains a scatter/gather DMA controller capable of accessing data anywhere in system memory:
A typical WavePci device does reside on a PCI bus, but, in theory, at least, a WavePci miniport driver could be written for a device that resides on a system bus other than PCI (for example, AGP).
A wave device that resides on a PCI bus but lacks scatter/gather DMA can be represented by a WaveCyclic driver, but not by a WavePci driver.
Historically, some vendors have had difficulty in implementing fully functional WavePci devices. The two main problem areas are:
Hardware design flaws that degrade performance.
Driver implementation errors affecting performance or reliability.
This experience is distilled into the following topics, which address the key hardware and software design issues for WavePci devices: