smbmsg(8): slave address confusion?

Andriy Gapon avg at icyb.net.ua
Fri Nov 21 06:21:35 PST 2008


on 21/11/2008 15:55 Andriy Gapon said the following:
> It seems that smbmsg is another victim in "Great SMBus Slave Address
> Confusion" - there are two schools: one that think that slave address is
> (addr >> 1) and there other thinks that slave address is (addr & ~0x1).
> It seems that smb driver in FreeBSD takes the first approach, but smbmsg
> is keen on the second.

Patch and new output:
diff --git a/usr.sbin/smbmsg/smbmsg.c b/usr.sbin/smbmsg/smbmsg.c
index 425b782..f2b8139 100644
--- a/usr.sbin/smbmsg/smbmsg.c
+++ b/usr.sbin/smbmsg/smbmsg.c
@@ -68,8 +68,8 @@ static unsigned short oword, iword;
  * 240 are reserved.  Address 0 is the global address, but we do not
  * care for this detail.
  */
-#define MIN_I2C_ADDR	16
-#define MAX_I2C_ADDR	240
+#define MIN_I2C_ADDR	8
+#define MAX_I2C_ADDR	120

 static int	do_io(void);
 static int	getnum(const char *s);
@@ -109,7 +109,7 @@ probe_i2c(void)

 	printf("Probing for devices on %s:\n", dev);

-	for (addr = MIN_I2C_ADDR; addr < MAX_I2C_ADDR; addr += 2) {
+	for (addr = MIN_I2C_ADDR; addr < MAX_I2C_ADDR; addr++) {
 		c.slave = addr;
 		flags = 0;
 		if (ioctl(fd, SMB_RECVB, &c) != -1)

$ smbmsg -p
Probing for devices on /dev/smb0:
Device @0x08: w
Device @0x44: rw
Device @0x50: rw
Device @0x52: rw
Device @0x69: rw

The only thing I am hesitant about - which address format is to present
to user? (addr >> 1) as above or (addr & ~0x1) as conventional for linux
folk.

-- 
Andriy Gapon


More information about the freebsd-stable mailing list