From owner-svn-src-user@FreeBSD.ORG Fri Apr 23 10:27:49 2010 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E55E61065672; Fri, 23 Apr 2010 10:27:48 +0000 (UTC) (envelope-from jmallett@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id D44768FC17; Fri, 23 Apr 2010 10:27:48 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o3NARmLB071529; Fri, 23 Apr 2010 10:27:48 GMT (envelope-from jmallett@svn.freebsd.org) Received: (from jmallett@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o3NARmla071526; Fri, 23 Apr 2010 10:27:48 GMT (envelope-from jmallett@svn.freebsd.org) Message-Id: <201004231027.o3NARmla071526@svn.freebsd.org> From: Juli Mallett Date: Fri, 23 Apr 2010 10:27:48 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r207111 - user/jmallett/octeon/sys/mips/cavium/octe X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 23 Apr 2010 10:27:49 -0000 Author: jmallett Date: Fri Apr 23 10:27:48 2010 New Revision: 207111 URL: http://svn.freebsd.org/changeset/base/207111 Log: Hook up RGMII RML interrupts. Modified: user/jmallett/octeon/sys/mips/cavium/octe/ethernet-rgmii.c user/jmallett/octeon/sys/mips/cavium/octe/octebusvar.h Modified: user/jmallett/octeon/sys/mips/cavium/octe/ethernet-rgmii.c ============================================================================== --- user/jmallett/octeon/sys/mips/cavium/octe/ethernet-rgmii.c Fri Apr 23 10:22:10 2010 (r207110) +++ user/jmallett/octeon/sys/mips/cavium/octe/ethernet-rgmii.c Fri Apr 23 10:27:48 2010 (r207111) @@ -33,6 +33,7 @@ AND WITH ALL FAULTS AND CAVIUM NETWORKS #include #include #include +#include #include #include #include @@ -43,6 +44,8 @@ AND WITH ALL FAULTS AND CAVIUM NETWORKS #include "wrapper-cvmx-includes.h" #include "ethernet-headers.h" +#include "octebusvar.h" + extern int octeon_is_simulation(void); extern struct ifnet *cvm_oct_device[]; @@ -154,12 +157,11 @@ static void cvm_oct_rgmii_poll(struct if } -#if 0 -static int cvm_oct_rgmii_rml_interrupt(int cpl, void *dev_id) +static int cvm_oct_rgmii_rml_interrupt(void *dev_id) { cvmx_npi_rsl_int_blocks_t rsl_int_blocks; int index; - int return_status = IRQ_NONE; + int return_status = FILTER_STRAY; rsl_int_blocks.u64 = cvmx_read_csr(CVMX_NPI_RSL_INT_BLOCKS); @@ -185,7 +187,7 @@ static int cvm_oct_rgmii_rml_interrupt(i gmx_rx_int_reg.s.phy_link = 1; gmx_rx_int_reg.s.phy_spd = 1; cvmx_write_csr(CVMX_GMXX_RXX_INT_REG(index, interface), gmx_rx_int_reg.u64); - return_status = IRQ_HANDLED; + return_status = FILTER_HANDLED; } } } @@ -212,13 +214,12 @@ static int cvm_oct_rgmii_rml_interrupt(i gmx_rx_int_reg.s.phy_link = 1; gmx_rx_int_reg.s.phy_spd = 1; cvmx_write_csr(CVMX_GMXX_RXX_INT_REG(index, interface), gmx_rx_int_reg.u64); - return_status = IRQ_HANDLED; + return_status = FILTER_HANDLED; } } } return return_status; } -#endif static int cvm_oct_rgmii_open(struct ifnet *ifp) @@ -259,10 +260,10 @@ static int cvm_oct_rgmii_stop(struct ifn int cvm_oct_rgmii_init(struct ifnet *ifp) { + struct octebus_softc *sc; cvm_oct_private_t *priv = (cvm_oct_private_t *)ifp->if_softc; -#if 0 - int r; -#endif + int error; + int rid; cvm_oct_common_init(ifp); priv->open = cvm_oct_rgmii_open; @@ -275,9 +276,24 @@ int cvm_oct_rgmii_init(struct ifnet *ifp This may cause problems if the PHY doesn't implement inband status properly */ if (number_rgmii_ports == 0) { -#if 0 - r = request_irq(OCTEON_IRQ_RML, cvm_oct_rgmii_rml_interrupt, IRQF_SHARED, "RGMII", &number_rgmii_ports); -#endif + sc = device_get_softc(device_get_parent(priv->dev)); + + rid = 0; + sc->sc_rgmii_irq = bus_alloc_resource(sc->sc_dev, SYS_RES_IRQ, &rid, + CVMX_IRQ_RML, CVMX_IRQ_RML, + 1, RF_ACTIVE); + if (sc->sc_rgmii_irq == NULL) { + device_printf(sc->sc_dev, "could not allocate RGMII irq"); + return ENXIO; + } + + error = bus_setup_intr(sc->sc_dev, sc->sc_rgmii_irq, INTR_TYPE_NET, + cvm_oct_rgmii_rml_interrupt, NULL, + &number_rgmii_ports, NULL); + if (error != 0) { + device_printf(sc->sc_dev, "could not setup RGMII irq"); + return error; + } } number_rgmii_ports++; @@ -332,9 +348,7 @@ void cvm_oct_rgmii_uninit(struct ifnet * /* Remove the interrupt handler when the last port is removed */ number_rgmii_ports--; -#if 0 if (number_rgmii_ports == 0) - free_irq(OCTEON_IRQ_RML, &number_rgmii_ports); -#endif + panic("%s: need to implement IRQ release.", __func__); } Modified: user/jmallett/octeon/sys/mips/cavium/octe/octebusvar.h ============================================================================== --- user/jmallett/octeon/sys/mips/cavium/octe/octebusvar.h Fri Apr 23 10:22:10 2010 (r207110) +++ user/jmallett/octeon/sys/mips/cavium/octe/octebusvar.h Fri Apr 23 10:27:48 2010 (r207111) @@ -31,7 +31,10 @@ struct octebus_softc { device_t sc_dev; + struct resource *sc_rx_irq; + + struct resource *sc_rgmii_irq; struct resource *sc_spi_irq; };