From owner-freebsd-hackers@FreeBSD.ORG Fri Oct 5 16:17:41 2012 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 18F531065673 for ; Fri, 5 Oct 2012 16:17:41 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from bigwig.baldwin.cx (bigknife-pt.tunnel.tserv9.chi1.ipv6.he.net [IPv6:2001:470:1f10:75::2]) by mx1.freebsd.org (Postfix) with ESMTP id E45928FC14 for ; Fri, 5 Oct 2012 16:17:40 +0000 (UTC) Received: from jhbbsd.localnet (unknown [209.249.190.124]) by bigwig.baldwin.cx (Postfix) with ESMTPSA id 507A0B9A4; Fri, 5 Oct 2012 12:17:40 -0400 (EDT) From: John Baldwin To: freebsd-hackers@freebsd.org Date: Fri, 5 Oct 2012 12:08:45 -0400 User-Agent: KMail/1.13.5 (FreeBSD/8.2-CBSD-20110714-p20; KDE/4.5.5; amd64; ; ) References: <506DC574.9010300@intel.com> In-Reply-To: <506DC574.9010300@intel.com> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <201210051208.45550.jhb@freebsd.org> X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.2.7 (bigwig.baldwin.cx); Fri, 05 Oct 2012 12:17:40 -0400 (EDT) Cc: Carl Delsey Subject: Re: No bus_space_read_8 on x86 ? X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Oct 2012 16:17:41 -0000 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