i386/100831: sio ignores BIOS information about serial ports
- bounty offered
Nate Lawson
nate at root.org
Thu Aug 3 01:40:20 UTC 2006
The following reply was made to PR i386/100831; it has been noted by GNATS.
From: Nate Lawson <nate at root.org>
To: Bruce Evans <bde at zeta.org.au>
Cc: Jo Rhett <jrhett at svcolo.com>, freebsd-gnats-submit at freebsd.org,
freebsd-i386 at freebsd.org
Subject: Re: i386/100831: sio ignores BIOS information about serial ports
- bounty offered
Date: Wed, 02 Aug 2006 18:31:11 -0700
Bruce Evans wrote:
> On Thu, 3 Aug 2006, Bruce Evans wrote:
>> I don't completely understand this either. I think there is a
>> non-ACPI part
>> of the BIOS that FreeBSD (or all OS's doesn't see). As I understand your
>> configuration, you start with COM1 and COM2 at the usual places but don't
>> want to use COM1 so you change the BIOS settings for COM2 to the usual
>> ones
>> for COM1 and maybe vice versa. This changes soft jumpers or whatever is
>> needed for FreeBSD to see it. Then you use a BIOS option to swap the
>> ports
>> so that everything is supposed to see COM2 as COM1. The boot loader sees
>> this but ACPI in FreeBSD doesn't. I think this changes is only made in
>> some BIOS table that ACPI in FreeBSD doesn't know about. In my test, I
>> only swapped the settings of COM1 and COM2 in the BIOS, since I couldn't
>> find a BIOS option to swap the unit number assignments, so it was not
>> completely incorrect for ACPI in FreeBSD to swap the settings.
>
> More details on my test:
> - after swapping the settings of COM1 and COM2, both FreeBSD-ACPI and WinXP
> see only the settings swapped. WinXP didn't report any changes to the
> devices. I now think this is completely correct. Swapping like this
> requires swapping in device.hints to keep the same assignment of
> physical
> devices to unit numbers.
> - after swapping the settings and then disabling COM1, FreeBSD-ACPI moves
> COM2 down to COM1 (sio0) and sio1 goes away, while WinXP doesn't change
> unit numbers and COM1 goes away. I think the WinXP behaviour is correct
> and FreeBSD-ACPI just allocates unit numbers starting at 0.
>
> Bruce
Please see the thread titled "acpi on msi-9218 (-current) swaps sio0 and
sio1" on the freebsd-acpi@ list. John Baldwin's approach is the one I
like, where hints can be used to wire device unit numbers to a
particular device with a bus-specific string. For instance,
hint.fxp.0.location="0:4:0" would mean a bus/slot/function to PCI and be
meaningless to other busses. Another example:
hint.sio.0.location="COMA" would mean a Device node in ACPI named "COMA"
would be wired to sio0 and meaningless to other devices.
As marcel@ pointed out, for serial ports in particular, you want the
resource of I/O port as the primary identifier. So the default hint
would be something like hint.sio.0.location="io=0x3f8".
Other than some minor logic to allocate device units in newbus, the only
change would be to decide on location naming schemes for the relevant
bus types. Something like "io=0x3f8" might always match resources via
RIDs and be bus-independent. I haven't thought much about the best
naming scheme but I like the general idea of attaching a named ID to a
unit to wire it to a known device, where the name means something to
only a particular bus.
--
Nate
More information about the freebsd-i386
mailing list