Date: Thu, 3 Aug 2006 01:40:20 GMT From: Nate Lawson <nate@root.org> To: freebsd-i386@FreeBSD.org Subject: Re: i386/100831: sio ignores BIOS information about serial ports - bounty offered Message-ID: <200608030140.k731eKQb018902@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR i386/100831; it has been noted by GNATS. From: Nate Lawson <nate@root.org> To: Bruce Evans <bde@zeta.org.au> Cc: Jo Rhett <jrhett@svcolo.com>, freebsd-gnats-submit@freebsd.org, freebsd-i386@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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200608030140.k731eKQb018902>