No bus_space_read_8 on x86 ?
John Baldwin
jhb at freebsd.org
Fri Oct 5 16:17:41 UTC 2012
On Thursday, October 04, 2012 1:20:52 pm Carl Delsey wrote:
> I noticed that the bus_space_*_8 functions are unimplemented for x86.
> Looking at the code, it seems this is intentional.
>
> Is this done because on 32-bit systems we don't know, in the general
> case, whether to read the upper or lower 32-bits first?
>
> If that's the reason, I was thinking we could provide two
> implementations for i386: bus_space_read_8_upper_first and
> bus_space_read_8_lower_first. For amd64 we would just have bus_space_read_8
>
> Anybody who wants to use bus_space_read_8 in their file would do
> something like:
> #define BUS_SPACE_8_BYTES LOWER_FIRST
> or
> #define BUS_SPACE_8_BYTES UPPER_FIRST
> whichever is appropriate for their hardware.
>
> This would go in their source file before including bus.h and we would
> take care of mapping to the correct implementation.
>
> With the prevalence of 64-bit registers these days, if we don't provide
> an implementation, I expect many drivers will end up rolling their own.
>
> If this seems like a good idea, I'll happily whip up a patch and submit it.
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?
--
John Baldwin
More information about the freebsd-hackers
mailing list