From owner-svn-src-all@FreeBSD.ORG Fri Jan 25 22:43:21 2013 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 6306B873; Fri, 25 Jan 2013 22:43:21 +0000 (UTC) (envelope-from grehan@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 50BA6ED6; Fri, 25 Jan 2013 22:43:21 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.5/8.14.5) with ESMTP id r0PMhLdu048861; Fri, 25 Jan 2013 22:43:21 GMT (envelope-from grehan@svn.freebsd.org) Received: (from grehan@localhost) by svn.freebsd.org (8.14.5/8.14.5/Submit) id r0PMhLWJ048860; Fri, 25 Jan 2013 22:43:21 GMT (envelope-from grehan@svn.freebsd.org) Message-Id: <201301252243.r0PMhLWJ048860@svn.freebsd.org> From: Peter Grehan Date: Fri, 25 Jan 2013 22:43:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r245920 - head/usr.sbin/bhyve X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Jan 2013 22:43:21 -0000 Author: grehan Date: Fri Jan 25 22:43:20 2013 New Revision: 245920 URL: http://svnweb.freebsd.org/changeset/base/245920 Log: Improve correctness of rtc register implementation. Submitted by: tycho nightingale at pluribusnetworks com Modified: head/usr.sbin/bhyve/rtc.c Modified: head/usr.sbin/bhyve/rtc.c ============================================================================== --- head/usr.sbin/bhyve/rtc.c Fri Jan 25 22:16:35 2013 (r245919) +++ head/usr.sbin/bhyve/rtc.c Fri Jan 25 22:43:20 2013 (r245920) @@ -118,12 +118,16 @@ static int rtc_addr_handler(struct vmctx *ctx, int vcpu, int in, int port, int bytes, uint32_t *eax, void *arg) { - assert(in == 0); - if (bytes != 1) return (-1); - switch (*eax) { + if (in) { + /* straight read of this register will return 0xFF */ + *eax = 0xff; + return (0); + } + + switch (*eax & 0x7f) { case RTC_SEC: case RTC_MIN: case RTC_HRS: @@ -144,7 +148,7 @@ rtc_addr_handler(struct vmctx *ctx, int return (-1); } - addr = *eax; + addr = *eax & 0x7f; return (0); } @@ -219,6 +223,9 @@ rtc_data_handler(struct vmctx *ctx, int case RTC_STATUSA: *eax = status_a; return (0); + case RTC_STATUSB: + *eax = status_b; + return (0); case RTC_INTR: *eax = 0; return (0); @@ -249,6 +256,9 @@ rtc_data_handler(struct vmctx *ctx, int return (-1); status_b = *eax; break; + case RTC_STATUSD: + /* ignore write */ + break; case RTC_RSTCODE: rstcode = *eax; break; @@ -270,5 +280,5 @@ rtc_data_handler(struct vmctx *ctx, int return (0); } -INOUT_PORT(rtc, IO_RTC, IOPORT_F_OUT, rtc_addr_handler); +INOUT_PORT(rtc, IO_RTC, IOPORT_F_INOUT, rtc_addr_handler); INOUT_PORT(rtc, IO_RTC + 1, IOPORT_F_INOUT, rtc_data_handler);