From owner-freebsd-stable@FreeBSD.ORG Fri Nov 21 13:55:58 2008 Return-Path: Delivered-To: freebsd-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 32E571065672 for ; Fri, 21 Nov 2008 13:55:58 +0000 (UTC) (envelope-from avg@icyb.net.ua) Received: from citadel.icyb.net.ua (citadel.icyb.net.ua [212.40.38.140]) by mx1.freebsd.org (Postfix) with ESMTP id 6E99B8FC1A for ; Fri, 21 Nov 2008 13:55:57 +0000 (UTC) (envelope-from avg@icyb.net.ua) Received: from odyssey.starpoint.kiev.ua (alpha-e.starpoint.kiev.ua [212.40.38.101]) by citadel.icyb.net.ua (8.8.8p3/ICyb-2.3exp) with ESMTP id PAA15248; Fri, 21 Nov 2008 15:55:51 +0200 (EET) (envelope-from avg@icyb.net.ua) Message-ID: <4926BDE5.5020708@icyb.net.ua> Date: Fri, 21 Nov 2008 15:55:49 +0200 From: Andriy Gapon User-Agent: Thunderbird 2.0.0.17 (X11/20081106) MIME-Version: 1.0 To: joerg_wunsch@uriah.heep.sax.de, FreeBSD Stable Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Cc: Subject: smbmsg(8): slave address confusion? X-BeenThere: freebsd-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Production branch of FreeBSD source code List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 21 Nov 2008 13:55:58 -0000 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. smbmsg.c: ... /* * The I2C specs say that all addresses below 16 and above or equal * 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 . . . static void probe_i2c(void) { ... for (addr = MIN_I2C_ADDR; addr < MAX_I2C_ADDR; addr += 2) { ... And sample output on my machine (releng/7 amd64): $ mbmsg -p Probing for devices on /dev/smb0: Device @0x44: rw Device @0x50: rw Device @0x52: rw Device @0x80: rw Device @0x88: w Device @0xc4: rw Device @0xd0: rw Device @0xd2: rw Now: (0x44 << 1) & 0xff == (0xc4 << 1) & 0xff = 0x88 (looks like RTC) (0x50 << 1) & 0xff == (0xd0 << 1) & 0xff = 0xa0 (well known SPD addr) (0x52 << 1) & 0xff == (0xd2 << 1) & 0xff = 0xa4 (well known SPD addr) (0x80 << 1) & 0xff = 0x0 (mentioned above "global address") (0x88 << 1) & 0xff == MIN_I2C_ADDR = 0x10 (something weird) I think that this demonstrates that FreeBSD smb driver expects slave addresses in range 0x0-0x7f. -- Andriy Gapon