From owner-svn-src-all@freebsd.org Sun May 15 15:52:35 2016 Return-Path: Delivered-To: svn-src-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 77B27B3C79C; Sun, 15 May 2016 15:52:35 +0000 (UTC) (envelope-from jmcneill@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 2B3401320; Sun, 15 May 2016 15:52:35 +0000 (UTC) (envelope-from jmcneill@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u4FFqYca088296; Sun, 15 May 2016 15:52:34 GMT (envelope-from jmcneill@FreeBSD.org) Received: (from jmcneill@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u4FFqYa6088295; Sun, 15 May 2016 15:52:34 GMT (envelope-from jmcneill@FreeBSD.org) Message-Id: <201605151552.u4FFqYa6088295@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jmcneill set sender to jmcneill@FreeBSD.org using -f From: Jared McNeill Date: Sun, 15 May 2016 15:52:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r299859 - head/sys/arm/allwinner 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.22 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: Sun, 15 May 2016 15:52:35 -0000 Author: jmcneill Date: Sun May 15 15:52:34 2016 New Revision: 299859 URL: https://svnweb.freebsd.org/changeset/base/299859 Log: Allow RSB to be used from interrupt handlers. The driver uses polling mode if cold or !THREAD_CAN_SLEEP() and now implements the bus_* interface. Modified: head/sys/arm/allwinner/aw_rsb.c Modified: head/sys/arm/allwinner/aw_rsb.c ============================================================================== --- head/sys/arm/allwinner/aw_rsb.c Sun May 15 15:31:44 2016 (r299858) +++ head/sys/arm/allwinner/aw_rsb.c Sun May 15 15:52:34 2016 (r299859) @@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -201,21 +202,22 @@ static int rsb_start(device_t dev) { struct rsb_softc *sc; - int error, retry; + int error, retry, polling; sc = device_get_softc(dev); + polling = cold || !THREAD_CAN_SLEEP(); RSB_ASSERT_LOCKED(sc); /* Enable interrupts */ - if (!cold) + if (!polling) RSB_WRITE(sc, RSB_INTE, INT_MASK); /* Start the transfer */ RSB_WRITE(sc, RSB_CTRL, GLOBAL_INT_ENB | START_TRANS); /* Wait for transfer to complete */ - if (cold) { + if (polling) { error = ETIMEDOUT; for (retry = RSB_I2C_TIMEOUT; retry > 0; retry--) { sc->status |= RSB_READ(sc, RSB_INTS); @@ -482,6 +484,17 @@ static device_method_t rsb_methods[] = { DEVMETHOD(device_probe, rsb_probe), DEVMETHOD(device_attach, rsb_attach), + /* Bus interface */ + DEVMETHOD(bus_setup_intr, bus_generic_setup_intr), + DEVMETHOD(bus_teardown_intr, bus_generic_teardown_intr), + DEVMETHOD(bus_alloc_resource, bus_generic_alloc_resource), + DEVMETHOD(bus_release_resource, bus_generic_release_resource), + DEVMETHOD(bus_activate_resource, bus_generic_activate_resource), + DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource), + DEVMETHOD(bus_adjust_resource, bus_generic_adjust_resource), + DEVMETHOD(bus_set_resource, bus_generic_rl_set_resource), + DEVMETHOD(bus_get_resource, bus_generic_rl_get_resource), + /* OFW methods */ DEVMETHOD(ofw_bus_get_node, rsb_get_node),