2005-03-01 17:35:53

by Jeremy White

[permalink] [raw]
Subject: Apparent bug in sound/oss/via82cxxx_audio.c GETOPTR ioctl

Hi,

In trying to fix Wine's dsound implementation which uses mmap and
DSP_SND_GETOPTR to write data out to the driver, I uncovered what
appears to be a bug in the via82cxx_audio.c driver.

Specifically, via_sg_offset appears to return the number of bytes
not yet consumed within the current block; we use it to adjust from blocks
to a precise block count. However, it appears as though it returns 0
to indicate that no bytes have been consumed.

I was seeing results where I would get an OPTR return along the
lines of 0x1c00, 0x1e00, 0x2800, and then 0x2100. Needless to say,
having info.ptr go backwards causes Wine's code to have a serious
hissy fit.

The attached patch fixes the problem for me, but I would appreciate
review by an expert on this.

Cheers,

Jeremy


Attachments:
via82cxxx_audio.diff (414.00 B)