smb(4): address format

Andriy Gapon avg at
Tue Jan 13 04:56:57 PST 2009

Maybe this is not sufficiently suitable for arch@, but I couldn't think
of a more relevant list.

smb(4) conveniently omits specifying what SMBus slave address is. Ditto
for iic(4).

As you know the address itself is 7 bit but how to align those bits
within a byte is somewhat ambiguous. Even the SMBus Specification
sometimes refers to a 7-bit value as to a slave address, but sometimes
uses phrases like "Slave Address Bits 7-1". The confusion seems to come
from how the address is actually transmitted on the wire where the least
significant bit of an address byte is used to indicate direction of an
operation (read or write).

So, in practice, there two conventions of specifying a slave address:
either as 0XXXXXXXb or XXXXXXX0b.

On FreeBSD we have a situation where smb/smbus doesn't insist on any
convention nor try to enforce it, and specific hardware drivers have
differing ideas.

E.g. please see PR 100513:

This inconsistency can not be a good thing.
Maybe we should pick one format, document it and enforce it?

>From FreeBSD-centric point of view XXXXXXX0b format seems to be
preferable - IMHO, of course. Majority hardware drivers already expect
this format, userland programs like mbmon and smbmsg(8) also seem to use it.

In wider world 0XXXXXXXb format seems to be preferred, Linux also sticks
to it.

Of course, choosing one format means changes for those using the other
one, but I think that having current inconsistency is worse.

P.S. I hope this won't trigger a bikeshed discussion.

Andriy Gapon

More information about the freebsd-arch mailing list