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