I've found a small error in the atari sounddriver, that's present in all
2.2.x-versions of the kernel-source.
In drivers/sound/dmasound.c, in the following function
static void ata_sq_play_next_frame(int index)
{
char *start, *end;
/* used by AtaPlay() if all doubts whether there really is something
* to be played are already wiped out.
*/
start = sq_block_address(sq.front);
end = start+((sq.count == index) ? sq.rear_size : sq.block_size);
/* end might not be a legal virtual address. */
DMASNDSetEnd(VTOP(end - 1) + 1);
DMASNDSetBase(VTOP(start));
/* Since only an even number of samples per frame can
be played, we might lose one byte here. (TO DO) */
sq.front = (sq.front+1) % sq.max_count;
sq.playing++;
tt_dmasnd.ctrl = DMASND_CTRL_ON | DMASND_CTRL_REPEAT;
}
VTOP() needs to be replaced with virt_to_phys(), creating
DMASNDSetEnd(virt_to_phys(end - 1) + 1);
DMASNDSetBase(virt_to_phys(start));
Otherwise, there'll be an unresolved sybol (obviously). I guess someone didn't
grep all the sources for "VTOP" when the function was renamed...
Anyway, if someone with write access to the repository could check this in,
other atari-folks will be spared one error-message.
Live long and prosper,
Björn Buske