Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 12 Oct 2012 11:31:46 -0400
From:      John Baldwin <jhb@freebsd.org>
To:        Carl Delsey <carl.r.delsey@intel.com>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: No bus_space_read_8 on x86 ?
Message-ID:  <201210121131.46373.jhb@freebsd.org>
In-Reply-To: <5075EC29.1010907@intel.com>
References:  <506DC574.9010300@intel.com> <201210091154.15873.jhb@freebsd.org> <5075EC29.1010907@intel.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wednesday, October 10, 2012 5:44:09 pm Carl Delsey wrote:
> Sorry for the slow response. I was dealing with a bit of a family 
> emergency. Responses inline below.
> 
> On 10/09/12 08:54, John Baldwin wrote:
> > On Monday, October 08, 2012 4:59:24 pm Warner Losh wrote:
> >> On Oct 5, 2012, at 10:08 AM, John Baldwin wrote:
> <snip>
> >>> I think cxgb* already have an implementation.  For amd64 we should certainly
> >>> have bus_space_*_8(), at least for SYS_RES_MEMORY.  I think they should fail
> >>> for SYS_RES_IOPORT.  I don't think we can force a compile-time error though,
> >>> would just have to return -1 on reads or some such?
> 
> Yes. Exactly what I was thinking.
> 
> >> I believe it was because bus reads weren't guaranteed to be atomic on i386.
> >> don't know if that's still the case or a concern, but it was an intentional omission.
> > True.  If you are on a 32-bit system you can read the two 4 byte values and
> > then build a 64-bit value.  For 64-bit platforms we should offer bus_read_8()
> > however.
> 
> I believe there is still no way to perform a 64-bit read on a i386 (or 
> at least without messing with SSE instructions), but if you have to read 
> a 64-bit register, you are stuck with doing two 32-bit reads and 
> concatenating them. I figure we may as well provide an implementation 
> for those who have to do that as well as the implementation for 64-bit.

I think the problem though is that the way you should glue those two 32-bit
reads together is device dependent.  I don't think you can provide a completely
device-neutral bus_read_8() on i386.  We should certainly have it on 64-bit
platforms, but I think drivers that want to work on 32-bit platforms need to
explicitly merge the two words themselves.
 
-- 
John Baldwin



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201210121131.46373.jhb>