On Oct 5, 2012, at 10:08 AM, John Baldwin wrote:

> 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?

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.

Warner
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscr...@freebsd.org"

Reply via email to