[alsa-devel] 20K1 PCI bars, and mode switching info.

James Courtier-Dutton James at superbug.co.uk
Mon Oct 20 20:34:39 CEST 2008

Takashi Iwai wrote:
> At Sun, 19 Oct 2008 17:07:08 +0100,
> James Courtier-Dutton wrote:
>> This info should help the current snd-sbxfi driver to actually work with
>> the "Vista compatible" cards that it currently does not work with.
>> I believe the true UAA to 20K1 mode switch code is missing from the
>> current alsa snd-sbxfi driver.
> The code to switch to 20k1 mode is already there.
> The sbxfi driver uses ioport for the access, and it looks like in BAR5
> for UAA boards.  This could be the problem...

Well I cannot find it. I can only find:
static void sbxfi_switch_xfi_mode(struct sbxfi *chip)
and that does not do the job.

You need to do this:

>> 2) UAA/20K1 MODE CHANGE (controls who the bus master is):
>> The "Mode Change" register is located in the UAA configuration space at
>> location offset 0x3FFC. This location stores 4 values in a ring.
>> To switch from 20K1 mode to UAA mode write each DW value: CTLA, CTLZ,
>> To switch from UAA mode to 20K1 mode write each DW value: CTLX, CTL-,
>> To read the current mode, the 4 value ring may be in any position, so
>> one might read for example:
>> At power on, the card is in UAA mode.
>> In UAA mode, the UAA chip is the bus master.
>> In 20K1 mode, the 20K1 chip is the bus master.
>> Under either UAA mode or 20K1 mode, the driver can read and write the
>> configuration space of both UAA chip and 20K1 chip.

More information about the Alsa-devel mailing list