From owner-svn-src-user@FreeBSD.ORG Sun Aug 19 20:24:47 2012 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 348E6106564A; Sun, 19 Aug 2012 20:24:46 +0000 (UTC) (envelope-from jceel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id D99AC8FC08; Sun, 19 Aug 2012 20:24:46 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7JKOk97031713; Sun, 19 Aug 2012 20:24:46 GMT (envelope-from jceel@svn.freebsd.org) Received: (from jceel@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7JKOk4i031711; Sun, 19 Aug 2012 20:24:46 GMT (envelope-from jceel@svn.freebsd.org) Message-Id: <201208192024.q7JKOk4i031711@svn.freebsd.org> From: Jakub Wojciech Klama Date: Sun, 19 Aug 2012 20:24:46 +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: r239403 - user/jceel/soc2012_armv6/sys/arm/lpc 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: Sun, 19 Aug 2012 20:24:47 -0000 Author: jceel Date: Sun Aug 19 20:24:46 2012 New Revision: 239403 URL: http://svn.freebsd.org/changeset/base/239403 Log: Fix lpc_intc trapframe passing to reflect changes in INTRNG API. Modified: user/jceel/soc2012_armv6/sys/arm/lpc/lpc_intc.c Modified: user/jceel/soc2012_armv6/sys/arm/lpc/lpc_intc.c ============================================================================== --- user/jceel/soc2012_armv6/sys/arm/lpc/lpc_intc.c Sun Aug 19 19:44:13 2012 (r239402) +++ user/jceel/soc2012_armv6/sys/arm/lpc/lpc_intc.c Sun Aug 19 20:24:46 2012 (r239403) @@ -124,15 +124,14 @@ lpc_intc_attach(device_t dev) static int lpc_intc_intr(void *arg) { - struct arm_intr_data *id = (struct arm_intr_data *)arg; - struct lpc_intc_softc *sc = (struct lpc_intc_softc *)id->arg; + struct lpc_intc_softc *sc = (struct lpc_intc_softc *)arg; uint32_t value; int i; value = intc_read_4(sc, LPC_INTC_SR); for (i = 0; i < 32; i++) { if (value & (1 << i)) - arm_dispatch_irq(sc->li_dev, id->tf, i); + arm_dispatch_irq(sc->li_dev, NULL, i); } return (FILTER_HANDLED); From owner-svn-src-user@FreeBSD.ORG Sun Aug 19 20:28:49 2012 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 C0F21106564A; Sun, 19 Aug 2012 20:28:49 +0000 (UTC) (envelope-from jceel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id A22938FC0C; Sun, 19 Aug 2012 20:28:49 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7JKSndA032217; Sun, 19 Aug 2012 20:28:49 GMT (envelope-from jceel@svn.freebsd.org) Received: (from jceel@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7JKSnbg032214; Sun, 19 Aug 2012 20:28:49 GMT (envelope-from jceel@svn.freebsd.org) Message-Id: <201208192028.q7JKSnbg032214@svn.freebsd.org> From: Jakub Wojciech Klama Date: Sun, 19 Aug 2012 20:28:49 +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: r239404 - in user/jceel/soc2012_armv6/sys/arm: conf ti 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: Sun, 19 Aug 2012 20:28:49 -0000 Author: jceel Date: Sun Aug 19 20:28:48 2012 New Revision: 239404 URL: http://svn.freebsd.org/changeset/base/239404 Log: Bring TI AINTC to INTRNG interface and update BEAGLEBONE kernel config accordingly. Modified: user/jceel/soc2012_armv6/sys/arm/conf/BEAGLEBONE user/jceel/soc2012_armv6/sys/arm/ti/aintc.c Modified: user/jceel/soc2012_armv6/sys/arm/conf/BEAGLEBONE ============================================================================== --- user/jceel/soc2012_armv6/sys/arm/conf/BEAGLEBONE Sun Aug 19 20:24:46 2012 (r239403) +++ user/jceel/soc2012_armv6/sys/arm/conf/BEAGLEBONE Sun Aug 19 20:28:48 2012 (r239404) @@ -46,6 +46,7 @@ options SYSVSEM #SYSV-style semaphore options _KPOSIX_PRIORITY_SCHEDULING #Posix P1003_1B real-time extensions options KBD_INSTALL_CDEV # install a CDEV entry in /dev options PREEMPTION +options ARM_INTRNG # Debugging makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols Modified: user/jceel/soc2012_armv6/sys/arm/ti/aintc.c ============================================================================== --- user/jceel/soc2012_armv6/sys/arm/ti/aintc.c Sun Aug 19 20:24:46 2012 (r239403) +++ user/jceel/soc2012_armv6/sys/arm/ti/aintc.c Sun Aug 19 20:28:48 2012 (r239404) @@ -45,6 +45,8 @@ __FBSDID("$FreeBSD$"); #include #include +#include "pic_if.h" + #define INTC_REVISION 0x00 #define INTC_SYSCONFIG 0x10 #define INTC_SYSSTATUS 0x14 @@ -61,22 +63,27 @@ struct ti_aintc_softc { struct resource * aintc_res[3]; bus_space_tag_t aintc_bst; bus_space_handle_t aintc_bsh; + void * aintc_intrhand; uint8_t ver; }; static struct resource_spec ti_aintc_spec[] = { { SYS_RES_MEMORY, 0, RF_ACTIVE }, + { SYS_RES_IRQ, 0, RF_ACTIVE }, { -1, 0 } }; - -static struct ti_aintc_softc *ti_aintc_sc = NULL; - -#define aintc_read_4(reg) \ - bus_space_read_4(ti_aintc_sc->aintc_bst, ti_aintc_sc->aintc_bsh, reg) -#define aintc_write_4(reg, val) \ - bus_space_write_4(ti_aintc_sc->aintc_bst, ti_aintc_sc->aintc_bsh, reg, val) - +#define aintc_read_4(_sc,reg) \ + bus_space_read_4(_sc->aintc_bst, _sc->aintc_bsh, (reg)) +#define aintc_write_4(_sc, reg, val) \ + bus_space_write_4(_sc->aintc_bst, _sc->aintc_bsh, (reg), (val)) + +static int ti_aintc_probe(device_t); +static int ti_aintc_attach(device_t); +static void ti_aintc_mask(device_t, int); +static void ti_aintc_unmask(device_t, int); +static void ti_aintc_eoi(device_t, int); +static int ti_aintc_intr(void *); static int ti_aintc_probe(device_t dev) @@ -95,9 +102,6 @@ ti_aintc_attach(device_t dev) sc->sc_dev = dev; - if (ti_aintc_sc) - return (ENXIO); - if (bus_alloc_resources(dev, ti_aintc_spec, sc->aintc_res)) { device_printf(dev, "could not allocate resources\n"); return (ENXIO); @@ -106,26 +110,39 @@ ti_aintc_attach(device_t dev) sc->aintc_bst = rman_get_bustag(sc->aintc_res[0]); sc->aintc_bsh = rman_get_bushandle(sc->aintc_res[0]); - ti_aintc_sc = sc; + arm_register_pic(dev); - x = aintc_read_4(INTC_REVISION); + if (bus_setup_intr(dev, sc->aintc_res[1], + INTR_TYPE_MISC | INTR_CONTROLLER, ti_aintc_intr, NULL, + sc, &sc->aintc_intrhand)) { + device_printf(dev, "could not install interrupt handler\n"); + return (ENXIO); + } + + x = aintc_read_4(sc, INTC_REVISION); device_printf(dev, "Revision %u.%u\n",(x >> 4) & 0xF, x & 0xF); /* SoftReset */ - aintc_write_4(INTC_SYSCONFIG, 2); + aintc_write_4(sc, INTC_SYSCONFIG, 2); /* Wait for reset to complete */ - while(!(aintc_read_4(INTC_SYSSTATUS) & 1)); + while(!(aintc_read_4(sc, INTC_SYSSTATUS) & 1)); /*Set Priority Threshold */ - aintc_write_4(INTC_THRESHOLD, 0xFF); + aintc_write_4(sc, INTC_THRESHOLD, 0xFF); return (0); } static device_method_t ti_aintc_methods[] = { + /* Device interface */ DEVMETHOD(device_probe, ti_aintc_probe), DEVMETHOD(device_attach, ti_aintc_attach), + /* PIC interface */ + DEVMETHOD(pic_mask, ti_aintc_mask), + DEVMETHOD(pic_unmask, ti_aintc_unmask), + DEVMETHOD(pic_eoi, ti_aintc_eoi), + { 0, 0 } }; @@ -139,41 +156,48 @@ static devclass_t ti_aintc_devclass; DRIVER_MODULE(aintc, simplebus, ti_aintc_driver, ti_aintc_devclass, 0, 0); -int -arm_get_next_irq(int last_irq) +static int +ti_aintc_intr(void *arg) { + struct ti_aintc_softc *sc = (struct ti_aintc_softc *)arg; uint32_t active_irq; - if (last_irq != -1) { - aintc_write_4(INTC_ISR_CLEAR(last_irq >> 5), - 1UL << (last_irq & 0x1F)); - aintc_write_4(INTC_CONTROL,1); - } - /* Get the next active interrupt */ - active_irq = aintc_read_4(INTC_SIR_IRQ); + active_irq = aintc_read_4(sc, INTC_SIR_IRQ); /* Check for spurious interrupt */ if ((active_irq & 0xffffff80)) { - device_printf(ti_aintc_sc->sc_dev, - "Spurious interrupt detected (0x%08x)\n", active_irq); + device_printf(sc->sc_dev, + "Spurious interrupt detected (0x%08x)\n", active_irq); return -1; } - if (active_irq != last_irq) - return active_irq; - else - return -1; + return active_irq; +} + +static void +ti_aintc_mask(device_t dev, int irq) +{ + struct ti_aintc_softc *sc = device_get_softc(dev); + + aintc_write_4(sc, INTC_MIR_SET(irq >> 5), (1UL << (irq & 0x1F))); } -void -arm_mask_irq(uintptr_t nb) +static void +ti_aintc_unmask(device_t dev, int irq) { - aintc_write_4(INTC_MIR_SET(nb >> 5), (1UL << (nb & 0x1F))); + struct ti_aintc_softc *sc = device_get_softc(dev); + + aintc_write_4(sc, INTC_MIR_CLEAR(irq >> 5), (1UL << (irq & 0x1F))); } -void -arm_unmask_irq(uintptr_t nb) +static void +ti_aintc_eoi(device_t dev, int irq) { - aintc_write_4(INTC_MIR_CLEAR(nb >> 5), (1UL << (nb & 0x1F))); + struct ti_aintc_softc *sc = device_get_softc(dev); + + aintc_write_4(sc, INTC_ISR_CLEAR(irq >> 5), + 1UL << (irq & 0x1F)); + aintc_write_4(sc, INTC_CONTROL,1); } + From owner-svn-src-user@FreeBSD.ORG Sun Aug 19 20:30:38 2012 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 3EC01106564A; Sun, 19 Aug 2012 20:30:38 +0000 (UTC) (envelope-from jceel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 299568FC08; Sun, 19 Aug 2012 20:30:38 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7JKUcMY032462; Sun, 19 Aug 2012 20:30:38 GMT (envelope-from jceel@svn.freebsd.org) Received: (from jceel@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7JKUbN2032460; Sun, 19 Aug 2012 20:30:37 GMT (envelope-from jceel@svn.freebsd.org) Message-Id: <201208192030.q7JKUbN2032460@svn.freebsd.org> From: Jakub Wojciech Klama Date: Sun, 19 Aug 2012 20:30:37 +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: r239405 - user/jceel/soc2012_armv6/sys/arm/arm 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: Sun, 19 Aug 2012 20:30:38 -0000 Author: jceel Date: Sun Aug 19 20:30:37 2012 New Revision: 239405 URL: http://svn.freebsd.org/changeset/base/239405 Log: Update arm_process_devmap() to became independent of FDT support in kernel. Modified: user/jceel/soc2012_armv6/sys/arm/arm/machdep.c Modified: user/jceel/soc2012_armv6/sys/arm/arm/machdep.c ============================================================================== --- user/jceel/soc2012_armv6/sys/arm/arm/machdep.c Sun Aug 19 20:28:48 2012 (r239404) +++ user/jceel/soc2012_armv6/sys/arm/arm/machdep.c Sun Aug 19 20:30:37 2012 (r239405) @@ -95,8 +95,10 @@ __FBSDID("$FreeBSD$"); #include #include +#if defined(FDT) #include #include +#endif /* Define various stack sizes in pages */ #define IRQ_STACK_SIZE 1 @@ -905,19 +907,23 @@ arm_bootstrap_pagetables(uint32_t memsiz static void arm_process_devmap(struct pmap_devmap *devmap) { +#if defined(FDT) struct fdt_range ranges[8]; struct fdt_range *rptr = ranges; - struct pmap_devmap *entry; phandle_t node, parent; - vm_offset_t totalsize = 0; u_long start, size; int addr_cells, size_cells, par_addr_cells; - int nranges, i; + int nranges; +#endif + struct pmap_devmap *entry; + vm_offset_t totalsize = 0; + int i; edebugf("processing devmap entries\n"); for (i = 0; devmap[i].pd_name != NULL || devmap[i].pd_pa != 0; i++) { entry = &devmap[i]; +#if defined(FDT) if (entry->pd_name != NULL) { edebugf("fdt %s: ", entry->pd_name); @@ -955,6 +961,7 @@ noparent: edebugf("entry: "); notfound: +#endif entry->pd_va = ARM_DEVMAP_START + totalsize; totalsize += entry->pd_size; eprintf("pa=0x%x va=0x%x size=0x%x\n", entry->pd_pa, entry->pd_va, entry->pd_size); @@ -964,7 +971,6 @@ notfound: arm_devmap_size = totalsize; } - void * arm_mmu_init(uint32_t memsize, uint32_t lastaddr, int high_vectors) { From owner-svn-src-user@FreeBSD.ORG Sun Aug 19 20:31:34 2012 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 554E9106566C; Sun, 19 Aug 2012 20:31:34 +0000 (UTC) (envelope-from jceel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 36ACD8FC0C; Sun, 19 Aug 2012 20:31:34 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7JKVYUc032595; Sun, 19 Aug 2012 20:31:34 GMT (envelope-from jceel@svn.freebsd.org) Received: (from jceel@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7JKVX0H032584; Sun, 19 Aug 2012 20:31:33 GMT (envelope-from jceel@svn.freebsd.org) Message-Id: <201208192031.q7JKVX0H032584@svn.freebsd.org> From: Jakub Wojciech Klama Date: Sun, 19 Aug 2012 20:31:33 +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: r239406 - in user/jceel/soc2012_armv6/sys/arm: at91 econa s3c2xx0 sa11x0 xscale/i80321 xscale/ixp425 xscale/pxa 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: Sun, 19 Aug 2012 20:31:34 -0000 Author: jceel Date: Sun Aug 19 20:31:33 2012 New Revision: 239406 URL: http://svn.freebsd.org/changeset/base/239406 Log: Unbreak all ARM ports broken by latest arm/machdep.c changes Modified: user/jceel/soc2012_armv6/sys/arm/at91/at91_machdep.c user/jceel/soc2012_armv6/sys/arm/at91/files.at91sam9 user/jceel/soc2012_armv6/sys/arm/econa/econa_machdep.c user/jceel/soc2012_armv6/sys/arm/s3c2xx0/s3c24x0_machdep.c user/jceel/soc2012_armv6/sys/arm/sa11x0/assabet_machdep.c user/jceel/soc2012_armv6/sys/arm/xscale/i80321/ep80219_machdep.c user/jceel/soc2012_armv6/sys/arm/xscale/i80321/iq31244_machdep.c user/jceel/soc2012_armv6/sys/arm/xscale/ixp425/avila_machdep.c user/jceel/soc2012_armv6/sys/arm/xscale/ixp425/files.ixp425 user/jceel/soc2012_armv6/sys/arm/xscale/pxa/pxa_machdep.c Modified: user/jceel/soc2012_armv6/sys/arm/at91/at91_machdep.c ============================================================================== --- user/jceel/soc2012_armv6/sys/arm/at91/at91_machdep.c Sun Aug 19 20:30:37 2012 (r239405) +++ user/jceel/soc2012_armv6/sys/arm/at91/at91_machdep.c Sun Aug 19 20:31:33 2012 (r239406) @@ -117,17 +117,14 @@ extern void *_end; extern int *end; /* Physical and virtual addresses for some global pages */ - -vm_paddr_t phys_avail[10]; -vm_paddr_t dump_avail[4]; vm_offset_t physical_pages; -struct pv_addr systempage; -struct pv_addr msgbufpv; -struct pv_addr irqstack; -struct pv_addr undstack; -struct pv_addr abtstack; -struct pv_addr kernelstack; +extern struct pv_addr systempage; +extern struct pv_addr msgbufpv; +extern struct pv_addr irqstack; +extern struct pv_addr undstack; +extern struct pv_addr abtstack; +extern struct pv_addr kernelstack; static void *boot_arg1; static void *boot_arg2; @@ -144,6 +141,7 @@ const struct pmap_devmap at91_devmap[] = * and the timer. Other devices should use newbus to * map their memory anyway. */ + NULL, 0xdff00000, 0xfff00000, 0x00100000, @@ -166,6 +164,7 @@ const struct pmap_devmap at91_devmap[] = * on this chip select for a VA/PA mapping. */ /* Internal Memory 1MB */ + NULL, AT91RM92_OHCI_BASE, AT91RM92_OHCI_PA_BASE, 0x00100000, @@ -174,6 +173,7 @@ const struct pmap_devmap at91_devmap[] = }, { /* CompactFlash controller. Portion of EBI CS4 1MB */ + NULL, AT91RM92_CF_BASE, AT91RM92_CF_PA_BASE, 0x00100000, @@ -184,6 +184,7 @@ const struct pmap_devmap at91_devmap[] = * addresses mapping is the same. */ { /* Internal Memory 1MB */ + NULL, AT91SAM9G20_OHCI_BASE, AT91SAM9G20_OHCI_PA_BASE, 0x00100000, @@ -192,13 +193,14 @@ const struct pmap_devmap at91_devmap[] = }, { /* EBI CS3 256MB */ + NULL, AT91SAM9G20_NAND_BASE, AT91SAM9G20_NAND_PA_BASE, AT91SAM9G20_NAND_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, }, - { 0, 0, 0, 0, 0, } + { NULL, 0, 0, 0, 0, 0, } }; long Modified: user/jceel/soc2012_armv6/sys/arm/at91/files.at91sam9 ============================================================================== --- user/jceel/soc2012_armv6/sys/arm/at91/files.at91sam9 Sun Aug 19 20:30:37 2012 (r239405) +++ user/jceel/soc2012_armv6/sys/arm/at91/files.at91sam9 Sun Aug 19 20:31:33 2012 (r239406) @@ -1,6 +1,7 @@ # $FreeBSD$ arm/arm/cpufunc_asm_arm9.S standard arm/arm/irq_dispatch.S standard +arm/arm/intr.c standard arm/at91/at91_machdep.c standard arm/at91/at91.c standard arm/at91/at91_mci.c optional at91_mci Modified: user/jceel/soc2012_armv6/sys/arm/econa/econa_machdep.c ============================================================================== --- user/jceel/soc2012_armv6/sys/arm/econa/econa_machdep.c Sun Aug 19 20:30:37 2012 (r239405) +++ user/jceel/soc2012_armv6/sys/arm/econa/econa_machdep.c Sun Aug 19 20:31:33 2012 (r239406) @@ -108,17 +108,14 @@ extern void *_end; extern int *end; /* Physical and virtual addresses for some global pages */ - -vm_paddr_t phys_avail[10]; -vm_paddr_t dump_avail[4]; vm_offset_t physical_pages; -struct pv_addr systempage; -struct pv_addr msgbufpv; -struct pv_addr irqstack; -struct pv_addr undstack; -struct pv_addr abtstack; -struct pv_addr kernelstack; +extern struct pv_addr systempage; +extern struct pv_addr msgbufpv; +extern struct pv_addr irqstack; +extern struct pv_addr undstack; +extern struct pv_addr abtstack; +extern struct pv_addr kernelstack; static void *boot_arg1; static void *boot_arg2; @@ -129,6 +126,7 @@ static const struct pmap_devmap econa_de /* * This maps DDR SDRAM */ + NULL, ECONA_SDRAM_BASE, /*virtual*/ ECONA_SDRAM_BASE, /*physical*/ ECONA_SDRAM_SIZE, /*size*/ @@ -144,6 +142,7 @@ static const struct pmap_devmap econa_de * This maps the interrupt controller, the UART * and the timer. */ + NULL, ECONA_IO_BASE, /*virtual*/ ECONA_IO_BASE, /*physical*/ ECONA_IO_SIZE, /*size*/ @@ -154,6 +153,7 @@ static const struct pmap_devmap econa_de /* * OHCI + EHCI */ + NULL, ECONA_OHCI_VBASE, /*virtual*/ ECONA_OHCI_PBASE, /*physical*/ ECONA_USB_SIZE, /*size*/ @@ -164,6 +164,7 @@ static const struct pmap_devmap econa_de /* * CFI */ + NULL, ECONA_CFI_VBASE, /*virtual*/ ECONA_CFI_PBASE, /*physical*/ ECONA_CFI_SIZE, @@ -171,6 +172,7 @@ static const struct pmap_devmap econa_de PTE_NOCACHE, }, { + NULL, 0, 0, 0, Modified: user/jceel/soc2012_armv6/sys/arm/s3c2xx0/s3c24x0_machdep.c ============================================================================== --- user/jceel/soc2012_armv6/sys/arm/s3c2xx0/s3c24x0_machdep.c Sun Aug 19 20:30:37 2012 (r239405) +++ user/jceel/soc2012_armv6/sys/arm/s3c2xx0/s3c24x0_machdep.c Sun Aug 19 20:31:33 2012 (r239406) @@ -123,17 +123,14 @@ extern void *_end; extern int *end; /* Physical and virtual addresses for some global pages */ - -vm_paddr_t phys_avail[10]; -vm_paddr_t dump_avail[4]; vm_offset_t physical_pages; -struct pv_addr systempage; -struct pv_addr msgbufpv; -struct pv_addr irqstack; -struct pv_addr undstack; -struct pv_addr abtstack; -struct pv_addr kernelstack; +extern struct pv_addr systempage; +extern struct pv_addr msgbufpv; +extern struct pv_addr irqstack; +extern struct pv_addr undstack; +extern struct pv_addr abtstack; +extern struct pv_addr kernelstack; #define _A(a) ((a) & ~L1_S_OFFSET) #define _S(s) (((s) + L1_S_SIZE - 1) & ~(L1_S_SIZE-1)) @@ -144,6 +141,7 @@ static const struct pmap_devmap s3c24x0_ * Map the devices we need early on. */ { + NULL, _A(S3C24X0_CLKMAN_BASE), _A(S3C24X0_CLKMAN_PA_BASE), _S(S3C24X0_CLKMAN_SIZE), @@ -151,6 +149,7 @@ static const struct pmap_devmap s3c24x0_ PTE_NOCACHE, }, { + NULL, _A(S3C24X0_GPIO_BASE), _A(S3C24X0_GPIO_PA_BASE), _S(S3C2410_GPIO_SIZE), @@ -158,6 +157,7 @@ static const struct pmap_devmap s3c24x0_ PTE_NOCACHE, }, { + NULL, _A(S3C24X0_INTCTL_BASE), _A(S3C24X0_INTCTL_PA_BASE), _S(S3C24X0_INTCTL_SIZE), @@ -165,6 +165,7 @@ static const struct pmap_devmap s3c24x0_ PTE_NOCACHE, }, { + NULL, _A(S3C24X0_TIMER_BASE), _A(S3C24X0_TIMER_PA_BASE), _S(S3C24X0_TIMER_SIZE), @@ -172,6 +173,7 @@ static const struct pmap_devmap s3c24x0_ PTE_NOCACHE, }, { + NULL, _A(S3C24X0_UART0_BASE), _A(S3C24X0_UART0_PA_BASE), _S(S3C24X0_UART_PA_BASE(3) - S3C24X0_UART0_PA_BASE), @@ -179,6 +181,7 @@ static const struct pmap_devmap s3c24x0_ PTE_NOCACHE, }, { + NULL, _A(S3C24X0_WDT_BASE), _A(S3C24X0_WDT_PA_BASE), _S(S3C24X0_WDT_SIZE), @@ -186,6 +189,7 @@ static const struct pmap_devmap s3c24x0_ PTE_NOCACHE, }, { + NULL, 0, 0, 0, Modified: user/jceel/soc2012_armv6/sys/arm/sa11x0/assabet_machdep.c ============================================================================== --- user/jceel/soc2012_armv6/sys/arm/sa11x0/assabet_machdep.c Sun Aug 19 20:30:37 2012 (r239405) +++ user/jceel/soc2012_armv6/sys/arm/sa11x0/assabet_machdep.c Sun Aug 19 20:31:33 2012 (r239406) @@ -132,18 +132,16 @@ extern int *end; #endif /* Physical and virtual addresses for some global pages */ -vm_paddr_t phys_avail[10]; -vm_paddr_t dump_avail[4]; vm_paddr_t physical_start; vm_paddr_t physical_end; vm_paddr_t physical_freestart; vm_offset_t physical_pages; -struct pv_addr systempage; -struct pv_addr irqstack; -struct pv_addr undstack; -struct pv_addr abtstack; -struct pv_addr kernelstack; +extern struct pv_addr systempage; +extern struct pv_addr irqstack; +extern struct pv_addr undstack; +extern struct pv_addr abtstack; +extern struct pv_addr kernelstack; /* Static device mappings. */ static const struct pmap_devmap assabet_devmap[] = { @@ -152,6 +150,7 @@ static const struct pmap_devmap assabet_ * with the MMU on or off. */ { + NULL, SACOM1_VBASE, SACOM1_BASE, SACOM1_SIZE, @@ -159,6 +158,7 @@ static const struct pmap_devmap assabet_ PTE_NOCACHE, }, { + NULL, SAIPIC_BASE, SAIPIC_BASE, SAIPIC_SIZE, @@ -166,6 +166,7 @@ static const struct pmap_devmap assabet_ PTE_NOCACHE, }, { + NULL, 0, 0, 0, Modified: user/jceel/soc2012_armv6/sys/arm/xscale/i80321/ep80219_machdep.c ============================================================================== --- user/jceel/soc2012_armv6/sys/arm/xscale/i80321/ep80219_machdep.c Sun Aug 19 20:30:37 2012 (r239405) +++ user/jceel/soc2012_armv6/sys/arm/xscale/i80321/ep80219_machdep.c Sun Aug 19 20:31:33 2012 (r239406) @@ -120,17 +120,14 @@ extern void *_end; extern int *end; /* Physical and virtual addresses for some global pages */ - -vm_paddr_t phys_avail[10]; -vm_paddr_t dump_avail[4]; vm_offset_t physical_pages; -struct pv_addr systempage; -struct pv_addr msgbufpv; -struct pv_addr irqstack; -struct pv_addr undstack; -struct pv_addr abtstack; -struct pv_addr kernelstack; +extern struct pv_addr systempage; +extern struct pv_addr msgbufpv; +extern struct pv_addr irqstack; +extern struct pv_addr undstack; +extern struct pv_addr abtstack; +extern struct pv_addr kernelstack; struct pv_addr minidataclean; @@ -144,6 +141,7 @@ static const struct pmap_devmap ep80219_ * with the MMU on or off. */ { + NULL, IQ80321_OBIO_BASE, IQ80321_OBIO_BASE, IQ80321_OBIO_SIZE, @@ -151,6 +149,7 @@ static const struct pmap_devmap ep80219_ PTE_NOCACHE, }, { + NULL, IQ80321_IOW_VBASE, VERDE_OUT_XLATE_IO_WIN0_BASE, VERDE_OUT_XLATE_IO_WIN_SIZE, @@ -158,6 +157,7 @@ static const struct pmap_devmap ep80219_ PTE_NOCACHE, }, { + NULL, IQ80321_80321_VBASE, VERDE_PMMR_BASE, VERDE_PMMR_SIZE, @@ -165,6 +165,7 @@ static const struct pmap_devmap ep80219_ PTE_NOCACHE, }, { + NULL, 0, 0, 0, Modified: user/jceel/soc2012_armv6/sys/arm/xscale/i80321/iq31244_machdep.c ============================================================================== --- user/jceel/soc2012_armv6/sys/arm/xscale/i80321/iq31244_machdep.c Sun Aug 19 20:30:37 2012 (r239405) +++ user/jceel/soc2012_armv6/sys/arm/xscale/i80321/iq31244_machdep.c Sun Aug 19 20:31:33 2012 (r239406) @@ -120,17 +120,14 @@ extern void *_end; extern int *end; /* Physical and virtual addresses for some global pages */ - -vm_paddr_t phys_avail[10]; -vm_paddr_t dump_avail[4]; vm_offset_t physical_pages; -struct pv_addr systempage; -struct pv_addr msgbufpv; -struct pv_addr irqstack; -struct pv_addr undstack; -struct pv_addr abtstack; -struct pv_addr kernelstack; +extern struct pv_addr systempage; +extern struct pv_addr msgbufpv; +extern struct pv_addr irqstack; +extern struct pv_addr undstack; +extern struct pv_addr abtstack; +extern struct pv_addr kernelstack; struct pv_addr minidataclean; #define IQ80321_OBIO_BASE 0xfe800000UL @@ -142,6 +139,7 @@ static const struct pmap_devmap iq80321_ * with the MMU on or off. */ { + NULL, IQ80321_OBIO_BASE, IQ80321_OBIO_BASE, IQ80321_OBIO_SIZE, @@ -149,14 +147,15 @@ static const struct pmap_devmap iq80321_ PTE_NOCACHE, }, { + NULL, IQ80321_IOW_VBASE, VERDE_OUT_XLATE_IO_WIN0_BASE, VERDE_OUT_XLATE_IO_WIN_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, }, - { + NULL, IQ80321_80321_VBASE, VERDE_PMMR_BASE, VERDE_PMMR_SIZE, @@ -164,6 +163,7 @@ static const struct pmap_devmap iq80321_ PTE_NOCACHE, }, { + NULL, 0, 0, 0, Modified: user/jceel/soc2012_armv6/sys/arm/xscale/ixp425/avila_machdep.c ============================================================================== --- user/jceel/soc2012_armv6/sys/arm/xscale/ixp425/avila_machdep.c Sun Aug 19 20:30:37 2012 (r239405) +++ user/jceel/soc2012_armv6/sys/arm/xscale/ixp425/avila_machdep.c Sun Aug 19 20:31:33 2012 (r239406) @@ -125,96 +125,94 @@ extern int *end; /* Physical and virtual addresses for some global pages */ -vm_paddr_t phys_avail[10]; -vm_paddr_t dump_avail[4]; vm_offset_t physical_pages; -struct pv_addr systempage; -struct pv_addr msgbufpv; -struct pv_addr irqstack; -struct pv_addr undstack; -struct pv_addr abtstack; -struct pv_addr kernelstack; +extern struct pv_addr systempage; +extern struct pv_addr msgbufpv; +extern struct pv_addr irqstack; +extern struct pv_addr undstack; +extern struct pv_addr abtstack; +extern struct pv_addr kernelstack; struct pv_addr minidataclean; /* Static device mappings. */ static const struct pmap_devmap ixp425_devmap[] = { /* Physical/Virtual address for I/O space */ - { IXP425_IO_VBASE, IXP425_IO_HWBASE, IXP425_IO_SIZE, + { NULL, IXP425_IO_VBASE, IXP425_IO_HWBASE, IXP425_IO_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, }, /* Expansion Bus */ - { IXP425_EXP_VBASE, IXP425_EXP_HWBASE, IXP425_EXP_SIZE, + { NULL, IXP425_EXP_VBASE, IXP425_EXP_HWBASE, IXP425_EXP_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, }, /* CFI Flash on the Expansion Bus */ - { IXP425_EXP_BUS_CS0_VBASE, IXP425_EXP_BUS_CS0_HWBASE, + { NULL, IXP425_EXP_BUS_CS0_VBASE, IXP425_EXP_BUS_CS0_HWBASE, IXP425_EXP_BUS_CS0_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, }, /* IXP425 PCI Configuration */ - { IXP425_PCI_VBASE, IXP425_PCI_HWBASE, IXP425_PCI_SIZE, + { NULL, IXP425_PCI_VBASE, IXP425_PCI_HWBASE, IXP425_PCI_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, }, /* SDRAM Controller */ - { IXP425_MCU_VBASE, IXP425_MCU_HWBASE, IXP425_MCU_SIZE, + { NULL, IXP425_MCU_VBASE, IXP425_MCU_HWBASE, IXP425_MCU_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, }, /* PCI Memory Space */ - { IXP425_PCI_MEM_VBASE, IXP425_PCI_MEM_HWBASE, IXP425_PCI_MEM_SIZE, + { NULL, IXP425_PCI_MEM_VBASE, IXP425_PCI_MEM_HWBASE, IXP425_PCI_MEM_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, }, /* Q-Mgr Memory Space */ - { IXP425_QMGR_VBASE, IXP425_QMGR_HWBASE, IXP425_QMGR_SIZE, + { NULL, IXP425_QMGR_VBASE, IXP425_QMGR_HWBASE, IXP425_QMGR_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, }, - { 0 }, + { NULL, 0 }, }; /* Static device mappings. */ static const struct pmap_devmap ixp435_devmap[] = { /* Physical/Virtual address for I/O space */ - { IXP425_IO_VBASE, IXP425_IO_HWBASE, IXP425_IO_SIZE, + { NULL, IXP425_IO_VBASE, IXP425_IO_HWBASE, IXP425_IO_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, }, - { IXP425_EXP_VBASE, IXP425_EXP_HWBASE, IXP425_EXP_SIZE, + { NULL, IXP425_EXP_VBASE, IXP425_EXP_HWBASE, IXP425_EXP_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, }, /* IXP425 PCI Configuration */ - { IXP425_PCI_VBASE, IXP425_PCI_HWBASE, IXP425_PCI_SIZE, + { NULL, IXP425_PCI_VBASE, IXP425_PCI_HWBASE, IXP425_PCI_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, }, /* DDRII Controller NB: mapped same place as IXP425 */ - { IXP425_MCU_VBASE, IXP435_MCU_HWBASE, IXP425_MCU_SIZE, + { NULL, IXP425_MCU_VBASE, IXP435_MCU_HWBASE, IXP425_MCU_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, }, /* PCI Memory Space */ - { IXP425_PCI_MEM_VBASE, IXP425_PCI_MEM_HWBASE, IXP425_PCI_MEM_SIZE, + { NULL, IXP425_PCI_MEM_VBASE, IXP425_PCI_MEM_HWBASE, IXP425_PCI_MEM_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, }, /* Q-Mgr Memory Space */ - { IXP425_QMGR_VBASE, IXP425_QMGR_HWBASE, IXP425_QMGR_SIZE, + { NULL, IXP425_QMGR_VBASE, IXP425_QMGR_HWBASE, IXP425_QMGR_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, }, /* CFI Flash on the Expansion Bus */ - { IXP425_EXP_BUS_CS0_VBASE, IXP425_EXP_BUS_CS0_HWBASE, + { NULL, IXP425_EXP_BUS_CS0_VBASE, IXP425_EXP_BUS_CS0_HWBASE, IXP425_EXP_BUS_CS0_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, }, /* USB1 Memory Space */ - { IXP435_USB1_VBASE, IXP435_USB1_HWBASE, IXP435_USB1_SIZE, + { NULL, IXP435_USB1_VBASE, IXP435_USB1_HWBASE, IXP435_USB1_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, }, /* USB2 Memory Space */ - { IXP435_USB2_VBASE, IXP435_USB2_HWBASE, IXP435_USB2_SIZE, + { NULL, IXP435_USB2_VBASE, IXP435_USB2_HWBASE, IXP435_USB2_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, }, /* GPS Memory Space */ - { CAMBRIA_GPS_VBASE, CAMBRIA_GPS_HWBASE, CAMBRIA_GPS_SIZE, + { NULL, CAMBRIA_GPS_VBASE, CAMBRIA_GPS_HWBASE, CAMBRIA_GPS_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, }, /* RS485 Memory Space */ - { CAMBRIA_RS485_VBASE, CAMBRIA_RS485_HWBASE, CAMBRIA_RS485_SIZE, + { NULL, CAMBRIA_RS485_VBASE, CAMBRIA_RS485_HWBASE, CAMBRIA_RS485_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, }, - { 0 } + { NULL, 0 } }; extern vm_offset_t xscale_cache_clean_addr; Modified: user/jceel/soc2012_armv6/sys/arm/xscale/ixp425/files.ixp425 ============================================================================== --- user/jceel/soc2012_armv6/sys/arm/xscale/ixp425/files.ixp425 Sun Aug 19 20:30:37 2012 (r239405) +++ user/jceel/soc2012_armv6/sys/arm/xscale/ixp425/files.ixp425 Sun Aug 19 20:31:33 2012 (r239406) @@ -2,6 +2,7 @@ arm/arm/bus_space_generic.c standard arm/arm/cpufunc_asm_xscale.S standard arm/arm/irq_dispatch.S standard +arm/arm/intr.c standard arm/xscale/ixp425/ixp425.c standard arm/xscale/ixp425/ixp425_mem.c standard arm/xscale/ixp425/ixp425_space.c standard Modified: user/jceel/soc2012_armv6/sys/arm/xscale/pxa/pxa_machdep.c ============================================================================== --- user/jceel/soc2012_armv6/sys/arm/xscale/pxa/pxa_machdep.c Sun Aug 19 20:30:37 2012 (r239405) +++ user/jceel/soc2012_armv6/sys/arm/xscale/pxa/pxa_machdep.c Sun Aug 19 20:31:33 2012 (r239406) @@ -121,16 +121,16 @@ extern int *end; /* Physical and virtual addresses for some global pages */ -vm_paddr_t phys_avail[PXA2X0_SDRAM_BANKS * 2 + 4]; -vm_paddr_t dump_avail[PXA2X0_SDRAM_BANKS * 2 + 4]; +//vm_paddr_t phys_avail[PXA2X0_SDRAM_BANKS * 2 + 4]; +//vm_paddr_t dump_avail[PXA2X0_SDRAM_BANKS * 2 + 4]; vm_offset_t physical_pages; -struct pv_addr systempage; -struct pv_addr msgbufpv; -struct pv_addr irqstack; -struct pv_addr undstack; -struct pv_addr abtstack; -struct pv_addr kernelstack; +extern struct pv_addr systempage; +extern struct pv_addr msgbufpv; +extern struct pv_addr irqstack; +extern struct pv_addr undstack; +extern struct pv_addr abtstack; +extern struct pv_addr kernelstack; struct pv_addr minidataclean; static void pxa_probe_sdram(bus_space_tag_t, bus_space_handle_t, @@ -143,13 +143,14 @@ static const struct pmap_devmap pxa_devm * up user-space. */ { + NULL, PXA2X0_PERIPH_START + PXA2X0_PERIPH_OFFSET, PXA2X0_PERIPH_START, PXA250_PERIPH_END - PXA2X0_PERIPH_START, VM_PROT_READ|VM_PROT_WRITE, PTE_NOCACHE, }, - { 0, 0, 0, 0, 0, } + { NULL, 0, 0, 0, 0, 0, } }; #define SDRAM_START 0xa0000000 From owner-svn-src-user@FreeBSD.ORG Mon Aug 20 18:32:47 2012 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 9B6FE1065672; Mon, 20 Aug 2012 18:32:47 +0000 (UTC) (envelope-from jceel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 86DEE8FC18; Mon, 20 Aug 2012 18:32:47 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7KIWl5i075815; Mon, 20 Aug 2012 18:32:47 GMT (envelope-from jceel@svn.freebsd.org) Received: (from jceel@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7KIWlA9075813; Mon, 20 Aug 2012 18:32:47 GMT (envelope-from jceel@svn.freebsd.org) Message-Id: <201208201832.q7KIWlA9075813@svn.freebsd.org> From: Jakub Wojciech Klama Date: Mon, 20 Aug 2012 18:32:47 +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: r239461 - user/jceel/soc2012_armv6/sys/arm/ti 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: Mon, 20 Aug 2012 18:32:47 -0000 Author: jceel Date: Mon Aug 20 18:32:46 2012 New Revision: 239461 URL: http://svn.freebsd.org/changeset/base/239461 Log: Fix obvious mistake in TI aintc driver. Modified: user/jceel/soc2012_armv6/sys/arm/ti/aintc.c Modified: user/jceel/soc2012_armv6/sys/arm/ti/aintc.c ============================================================================== --- user/jceel/soc2012_armv6/sys/arm/ti/aintc.c Mon Aug 20 18:27:02 2012 (r239460) +++ user/jceel/soc2012_armv6/sys/arm/ti/aintc.c Mon Aug 20 18:32:46 2012 (r239461) @@ -169,10 +169,11 @@ ti_aintc_intr(void *arg) if ((active_irq & 0xffffff80)) { device_printf(sc->sc_dev, "Spurious interrupt detected (0x%08x)\n", active_irq); - return -1; + return FILTER_HANDLED; } - return active_irq; + arm_dispatch_irq(sc->sc_dev, NULL, active_irq); + return FILTER_HANDLED; } static void From owner-svn-src-user@FreeBSD.ORG Wed Aug 22 02:41:03 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 6C20B1065674; Wed, 22 Aug 2012 02:41:03 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 3CE508FC1F; Wed, 22 Aug 2012 02:41:03 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7M2f3wl050970; Wed, 22 Aug 2012 02:41:03 GMT (envelope-from np@svn.freebsd.org) Received: (from np@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7M2f3rQ050969; Wed, 22 Aug 2012 02:41:03 GMT (envelope-from np@svn.freebsd.org) Message-Id: <201208220241.q7M2f3rQ050969@svn.freebsd.org> From: Navdeep Parhar Date: Wed, 22 Aug 2012 02:41:03 +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: r239551 - user/np/toe_iwarp 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: Wed, 22 Aug 2012 02:41:03 -0000 Author: np Date: Wed Aug 22 02:41:02 2012 New Revision: 239551 URL: http://svn.freebsd.org/changeset/base/239551 Log: Retire branch; these changes have made it into HEAD. Deleted: user/np/toe_iwarp/ From owner-svn-src-user@FreeBSD.ORG Wed Aug 22 03:00:57 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id C39E61065686; Wed, 22 Aug 2012 03:00:57 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 93C278FC1A; Wed, 22 Aug 2012 03:00:57 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7M30v4e053570; Wed, 22 Aug 2012 03:00:57 GMT (envelope-from np@svn.freebsd.org) Received: (from np@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7M30v00053569; Wed, 22 Aug 2012 03:00:57 GMT (envelope-from np@svn.freebsd.org) Message-Id: <201208220300.q7M30v00053569@svn.freebsd.org> From: Navdeep Parhar Date: Wed, 22 Aug 2012 03:00:57 +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: r239552 - user/np/stable_9_toe 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: Wed, 22 Aug 2012 03:00:57 -0000 Author: np Date: Wed Aug 22 03:00:57 2012 New Revision: 239552 URL: http://svn.freebsd.org/changeset/base/239552 Log: Backport of all TOE changes to stable/9. The changes are mostly MFC-able but will be available here initially rather than in stable/9 while they are being tested. Added: - copied from r239551, stable/9/ Directory Properties: user/np/stable_9_toe/ (props changed) From owner-svn-src-user@FreeBSD.ORG Wed Aug 22 21:15:00 2012 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 C61A5106566B; Wed, 22 Aug 2012 21:15:00 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id AE9E78FC24; Wed, 22 Aug 2012 21:15:00 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7MLF01p098938; Wed, 22 Aug 2012 21:15:00 GMT (envelope-from np@svn.freebsd.org) Received: (from np@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7MLF0qD098909; Wed, 22 Aug 2012 21:15:00 GMT (envelope-from np@svn.freebsd.org) Message-Id: <201208222115.q7MLF0qD098909@svn.freebsd.org> From: Navdeep Parhar Date: Wed, 22 Aug 2012 21:15:00 +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: r239594 - in user/np/stable_9_toe: sbin/ifconfig sys/amd64/conf sys/conf sys/contrib/rdma sys/contrib/rdma/krping sys/dev/cxgb/ulp/tom sys/dev/cxgbe sys/dev/cxgbe/common sys/dev/cxgbe/f... 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: Wed, 22 Aug 2012 21:15:00 -0000 Author: np Date: Wed Aug 22 21:14:59 2012 New Revision: 239594 URL: http://svn.freebsd.org/changeset/base/239594 Log: Fully up-to-date backport/MFC of TOE to stable/9. I'll promptly push any fixes that I make to HEAD to this workspace too. Added: user/np/stable_9_toe/sys/dev/cxgbe/tom/t4_ddp.c - copied, changed from r239344, head/sys/dev/cxgbe/tom/t4_ddp.c user/np/stable_9_toe/sys/modules/toecore/ - copied from r237263, head/sys/modules/toecore/ user/np/stable_9_toe/sys/netinet/toecore.c - copied, changed from r237263, head/sys/netinet/toecore.c user/np/stable_9_toe/sys/netinet/toecore.h - copied, changed from r237263, head/sys/netinet/toecore.h Deleted: user/np/stable_9_toe/sys/netinet/toedev.h Modified: user/np/stable_9_toe/sbin/ifconfig/ifconfig.c user/np/stable_9_toe/sys/amd64/conf/GENERIC user/np/stable_9_toe/sys/conf/NOTES user/np/stable_9_toe/sys/conf/files user/np/stable_9_toe/sys/conf/options user/np/stable_9_toe/sys/contrib/rdma/krping/krping.c user/np/stable_9_toe/sys/contrib/rdma/krping/krping.h user/np/stable_9_toe/sys/contrib/rdma/krping/krping_dev.c user/np/stable_9_toe/sys/contrib/rdma/rdma_addr.c user/np/stable_9_toe/sys/contrib/rdma/rdma_cache.c user/np/stable_9_toe/sys/dev/cxgb/ulp/tom/cxgb_cpl_io.c user/np/stable_9_toe/sys/dev/cxgb/ulp/tom/cxgb_listen.c user/np/stable_9_toe/sys/dev/cxgb/ulp/tom/cxgb_toepcb.h user/np/stable_9_toe/sys/dev/cxgbe/adapter.h user/np/stable_9_toe/sys/dev/cxgbe/common/t4_hw.h user/np/stable_9_toe/sys/dev/cxgbe/common/t4_msg.h user/np/stable_9_toe/sys/dev/cxgbe/firmware/t4fw_cfg.txt user/np/stable_9_toe/sys/dev/cxgbe/offload.h user/np/stable_9_toe/sys/dev/cxgbe/t4_main.c user/np/stable_9_toe/sys/dev/cxgbe/t4_sge.c user/np/stable_9_toe/sys/dev/cxgbe/tom/t4_connect.c user/np/stable_9_toe/sys/dev/cxgbe/tom/t4_cpl_io.c user/np/stable_9_toe/sys/dev/cxgbe/tom/t4_listen.c user/np/stable_9_toe/sys/dev/cxgbe/tom/t4_tom.c user/np/stable_9_toe/sys/dev/cxgbe/tom/t4_tom.h user/np/stable_9_toe/sys/i386/conf/GENERIC user/np/stable_9_toe/sys/i386/conf/XEN user/np/stable_9_toe/sys/modules/Makefile user/np/stable_9_toe/sys/modules/cxgb/Makefile user/np/stable_9_toe/sys/modules/cxgbe/Makefile user/np/stable_9_toe/sys/modules/cxgbe/tom/Makefile user/np/stable_9_toe/sys/modules/rdma/krping/Makefile user/np/stable_9_toe/sys/net/if_var.h user/np/stable_9_toe/sys/net/if_vlan.c user/np/stable_9_toe/sys/netinet/if_ether.c user/np/stable_9_toe/sys/netinet/if_ether.h user/np/stable_9_toe/sys/netinet/in.c user/np/stable_9_toe/sys/netinet/tcp_input.c user/np/stable_9_toe/sys/netinet/tcp_offload.c user/np/stable_9_toe/sys/netinet/tcp_offload.h user/np/stable_9_toe/sys/netinet/tcp_output.c user/np/stable_9_toe/sys/netinet/tcp_subr.c user/np/stable_9_toe/sys/netinet/tcp_syncache.c user/np/stable_9_toe/sys/netinet/tcp_syncache.h user/np/stable_9_toe/sys/netinet/tcp_timer.c user/np/stable_9_toe/sys/netinet/tcp_usrreq.c user/np/stable_9_toe/sys/netinet/tcp_var.h user/np/stable_9_toe/sys/ofed/drivers/infiniband/core/cma.c user/np/stable_9_toe/sys/ofed/drivers/infiniband/core/iwcm.c user/np/stable_9_toe/sys/ofed/include/linux/net.h user/np/stable_9_toe/sys/ofed/include/net/netevent.h user/np/stable_9_toe/sys/ofed/include/rdma/iw_cm.h user/np/stable_9_toe/usr.bin/netstat/inet.c user/np/stable_9_toe/usr.bin/sockstat/sockstat.c Directory Properties: user/np/stable_9_toe/sbin/ifconfig/ (props changed) user/np/stable_9_toe/sys/ (props changed) user/np/stable_9_toe/sys/conf/ (props changed) user/np/stable_9_toe/sys/dev/ (props changed) user/np/stable_9_toe/sys/modules/ (props changed) user/np/stable_9_toe/usr.bin/netstat/ (props changed) user/np/stable_9_toe/usr.bin/sockstat/ (props changed) Modified: user/np/stable_9_toe/sbin/ifconfig/ifconfig.c ============================================================================== --- user/np/stable_9_toe/sbin/ifconfig/ifconfig.c Wed Aug 22 20:56:53 2012 (r239593) +++ user/np/stable_9_toe/sbin/ifconfig/ifconfig.c Wed Aug 22 21:14:59 2012 (r239594) @@ -910,7 +910,7 @@ unsetifdescr(const char *val, int value, #define IFCAPBITS \ "\020\1RXCSUM\2TXCSUM\3NETCONS\4VLAN_MTU\5VLAN_HWTAGGING\6JUMBO_MTU\7POLLING" \ "\10VLAN_HWCSUM\11TSO4\12TSO6\13LRO\14WOL_UCAST\15WOL_MCAST\16WOL_MAGIC" \ -"\21VLAN_HWFILTER\23VLAN_HWTSO\24LINKSTATE\25NETMAP" \ +"\17TOE4\20TOE6\21VLAN_HWFILTER\23VLAN_HWTSO\24LINKSTATE\25NETMAP" \ "\26RXCSUM_IPV6\27TXCSUM_IPV6" /* @@ -1189,6 +1189,8 @@ static struct cmd basic_cmds[] = { DEF_CMD("-tso4", -IFCAP_TSO4, setifcap), DEF_CMD("tso", IFCAP_TSO, setifcap), DEF_CMD("-tso", -IFCAP_TSO, setifcap), + DEF_CMD("toe", IFCAP_TOE, setifcap), + DEF_CMD("-toe", -IFCAP_TOE, setifcap), DEF_CMD("lro", IFCAP_LRO, setifcap), DEF_CMD("-lro", -IFCAP_LRO, setifcap), DEF_CMD("wol", IFCAP_WOL, setifcap), Modified: user/np/stable_9_toe/sys/amd64/conf/GENERIC ============================================================================== --- user/np/stable_9_toe/sys/amd64/conf/GENERIC Wed Aug 22 20:56:53 2012 (r239593) +++ user/np/stable_9_toe/sys/amd64/conf/GENERIC Wed Aug 22 21:14:59 2012 (r239594) @@ -27,6 +27,7 @@ options SCHED_ULE # ULE scheduler options PREEMPTION # Enable kernel thread preemption options INET # InterNETworking options INET6 # IPv6 communications protocols +options TCP_OFFLOAD # TCP offload options SCTP # Stream Control Transmission Protocol options FFS # Berkeley Fast Filesystem options SOFTUPDATES # Enable FFS soft updates support Modified: user/np/stable_9_toe/sys/conf/NOTES ============================================================================== --- user/np/stable_9_toe/sys/conf/NOTES Wed Aug 22 20:56:53 2012 (r239593) +++ user/np/stable_9_toe/sys/conf/NOTES Wed Aug 22 21:14:59 2012 (r239594) @@ -545,6 +545,8 @@ options INET6 #IPv6 communications pr options ROUTETABLES=2 # max 16. 1 is back compatible. +options TCP_OFFLOAD # TCP offload support. + # In order to enable IPSEC you MUST also add device crypto to # your kernel configuration options IPSEC #IP security (requires device crypto) Modified: user/np/stable_9_toe/sys/conf/files ============================================================================== --- user/np/stable_9_toe/sys/conf/files Wed Aug 22 20:56:53 2012 (r239593) +++ user/np/stable_9_toe/sys/conf/files Wed Aug 22 21:14:59 2012 (r239594) @@ -2855,7 +2855,7 @@ netinet/tcp_hostcache.c optional inet | netinet/tcp_input.c optional inet | inet6 netinet/tcp_lro.c optional inet | inet6 netinet/tcp_output.c optional inet | inet6 -netinet/tcp_offload.c optional inet | inet6 +netinet/tcp_offload.c optional tcp_offload inet | tcp_offload inet6 netinet/tcp_reass.c optional inet | inet6 netinet/tcp_sack.c optional inet | inet6 netinet/tcp_subr.c optional inet | inet6 Modified: user/np/stable_9_toe/sys/conf/options ============================================================================== --- user/np/stable_9_toe/sys/conf/options Wed Aug 22 20:56:53 2012 (r239593) +++ user/np/stable_9_toe/sys/conf/options Wed Aug 22 21:14:59 2012 (r239594) @@ -430,7 +430,7 @@ RADIX_MPATH opt_mpath.h ROUTETABLES opt_route.h SLIP_IFF_OPTS opt_slip.h TCPDEBUG -TCP_OFFLOAD_DISABLE opt_inet.h #Disable code to dispatch tcp offloading +TCP_OFFLOAD opt_inet.h # Enable code to dispatch TCP offloading TCP_SIGNATURE opt_inet.h VLAN_ARRAY opt_vlan.h XBONEHACK Modified: user/np/stable_9_toe/sys/contrib/rdma/krping/krping.c ============================================================================== --- user/np/stable_9_toe/sys/contrib/rdma/krping/krping.c Wed Aug 22 20:56:53 2012 (r239593) +++ user/np/stable_9_toe/sys/contrib/rdma/krping/krping.c Wed Aug 22 21:14:59 2012 (r239594) @@ -41,7 +41,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include #include @@ -53,11 +52,13 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include -#include +#include +#include #include "getopt.h" #include "krping.h" @@ -83,6 +84,7 @@ static const struct krping_option krping {"bw", OPT_NOPARAM, 'B'}, {"tx-depth", OPT_INT, 't'}, {"poll", OPT_NOPARAM, 'P'}, + {"memlimit", OPT_INT, 'm'}, {NULL, 0, 0} }; @@ -254,10 +256,14 @@ static void krping_cq_event_handler(stru ib_req_notify_cq(cb->cq, IB_CQ_NEXT_COMP); while ((ret = ib_poll_cq(cb->cq, 1, &wc)) == 1) { if (wc.status) { - if (wc.status != IB_WC_WR_FLUSH_ERR) - log(LOG_ERR, "cq completion failed status %d\n", + if (wc.status == IB_WC_WR_FLUSH_ERR) { + DEBUG_LOG("cq flushed\n"); + continue; + } else { + log(LOG_CRIT, "cq completion failed status %d\n", wc.status); - goto error; + goto error; + } } switch (wc.opcode) { @@ -432,8 +438,17 @@ static int krping_setup_buffers(struct k } } - cb->rdma_buf = contigmalloc(cb->size, M_DEVBUF, M_WAITOK, 0, -1UL, - PAGE_SIZE, 0); + /* RNIC adapters have a limit upto which it can register physical memory + * If DMA-MR memory mode is set then normally driver registers maximum + * supported memory. After that if contigmalloc allocates memory beyond the + * specified RNIC limit then Krping may not work. + */ + if (cb->use_dmamr && cb->memlimit) + cb->rdma_buf = contigmalloc(cb->size, M_DEVBUF, M_WAITOK, 0, cb->memlimit, + PAGE_SIZE, 0); + else + cb->rdma_buf = contigmalloc(cb->size, M_DEVBUF, M_WAITOK, 0, -1UL, + PAGE_SIZE, 0); if (!cb->rdma_buf) { log(LOG_ERR, "rdma_buf malloc failed\n"); @@ -458,8 +473,12 @@ static int krping_setup_buffers(struct k } if (!cb->server || cb->wlat || cb->rlat || cb->bw) { - cb->start_buf = contigmalloc(cb->size, M_DEVBUF, M_WAITOK, - 0, -1UL, PAGE_SIZE, 0); + if (cb->use_dmamr && cb->memlimit) + cb->start_buf = contigmalloc(cb->size, M_DEVBUF, M_WAITOK, + 0, cb->memlimit, PAGE_SIZE, 0); + else + cb->start_buf = contigmalloc(cb->size, M_DEVBUF, M_WAITOK, + 0, -1UL, PAGE_SIZE, 0); if (!cb->start_buf) { log(LOG_ERR, "start_buf malloc failed\n"); ret = ENOMEM; @@ -1636,6 +1655,8 @@ int krping_doit(char *cmd) cb->state = IDLE; cb->size = 64; cb->txdepth = RPING_SQ_DEPTH; + cb->use_dmamr = 1; + cb->memlimit = 0; mtx_init(&cb->lock, "krping mtx", NULL, MTX_DUPOK|MTX_DEF); while ((op = krping_getopt("krping", &cmd, krping_opts, NULL, &optarg, @@ -1713,6 +1734,15 @@ int krping_doit(char *cmd) case 'd': debug++; break; + case 'm': + cb->memlimit = optint; + if (cb->memlimit < 1) { + log(LOG_ERR, "Invalid memory limit %ju\n", + cb->memlimit); + ret = EINVAL; + } else + DEBUG_LOG(PFX "memory limit %d\n", (int)optint); + break; default: log(LOG_ERR, "unknown opt %s\n", optarg); ret = EINVAL; Modified: user/np/stable_9_toe/sys/contrib/rdma/krping/krping.h ============================================================================== --- user/np/stable_9_toe/sys/contrib/rdma/krping/krping.h Wed Aug 22 20:56:53 2012 (r239593) +++ user/np/stable_9_toe/sys/contrib/rdma/krping/krping.h Wed Aug 22 21:14:59 2012 (r239594) @@ -1,7 +1,7 @@ /* * $FreeBSD$ */ -#include +#include #include /* @@ -92,6 +92,8 @@ struct krping_cb { int count; /* ping count */ int size; /* ping data size */ int validate; /* validate ping data */ + uint64_t memlimit; /* limit of the physical memory that + can be registered with dma_mr mode */ /* CM stuff */ struct rdma_cm_id *cm_id; /* connection on client side,*/ Modified: user/np/stable_9_toe/sys/contrib/rdma/krping/krping_dev.c ============================================================================== --- user/np/stable_9_toe/sys/contrib/rdma/krping/krping_dev.c Wed Aug 22 20:56:53 2012 (r239593) +++ user/np/stable_9_toe/sys/contrib/rdma/krping/krping_dev.c Wed Aug 22 21:14:59 2012 (r239594) @@ -14,7 +14,6 @@ __FBSDID("$FreeBSD$"); #include -#include #include /* uprintf */ #include #include /* defines used in kernel.h */ @@ -51,6 +50,9 @@ typedef struct s_krping { /* vars */ static struct cdev *krping_dev; +#undef MODULE_VERSION +#include + static int krping_loader(struct module *m, int what, void *arg) { @@ -175,6 +177,4 @@ krping_write(struct cdev *dev, struct ui return(err); } -MODULE_DEPEND(krping, rdma_core, 1, 1, 1); -MODULE_DEPEND(krping, rdma_cma, 1, 1, 1); DEV_MODULE(krping,krping_loader,NULL); Modified: user/np/stable_9_toe/sys/contrib/rdma/rdma_addr.c ============================================================================== --- user/np/stable_9_toe/sys/contrib/rdma/rdma_addr.c Wed Aug 22 20:56:53 2012 (r239593) +++ user/np/stable_9_toe/sys/contrib/rdma/rdma_addr.c Wed Aug 22 21:14:59 2012 (r239594) @@ -117,7 +117,8 @@ int rdma_copy_addr(struct rdma_dev_addr const unsigned char *dst_dev_addr) { dev_addr->dev_type = RDMA_NODE_RNIC; - memcpy(dev_addr->src_dev_addr, IF_LLADDR(dev), MAX_ADDR_LEN); + memset(dev_addr->src_dev_addr, 0, MAX_ADDR_LEN); + memcpy(dev_addr->src_dev_addr, IF_LLADDR(dev), dev->if_addrlen); memcpy(dev_addr->broadcast, dev->if_broadcastaddr, MAX_ADDR_LEN); if (dst_dev_addr) memcpy(dev_addr->dst_dev_addr, dst_dev_addr, MAX_ADDR_LEN); @@ -207,7 +208,7 @@ static int addr_resolve_remote(struct so goto put; } ret = arpresolve(iproute.ro_rt->rt_ifp, iproute.ro_rt, NULL, - rt_key(iproute.ro_rt), dmac, &lle); + (struct sockaddr *)dst_in, dmac, &lle); if (ret) { goto put; } Modified: user/np/stable_9_toe/sys/contrib/rdma/rdma_cache.c ============================================================================== --- user/np/stable_9_toe/sys/contrib/rdma/rdma_cache.c Wed Aug 22 20:56:53 2012 (r239593) +++ user/np/stable_9_toe/sys/contrib/rdma/rdma_cache.c Wed Aug 22 21:14:59 2012 (r239594) @@ -132,7 +132,7 @@ int ib_find_cached_gid(struct ib_device for (p = 0; p <= end_port(device) - start_port(device); ++p) { cache = device->cache.gid_cache[p]; for (i = 0; i < cache->table_len; ++i) { - if (!memcmp(gid, &cache->table[i], 6)) { /* XXX */ + if (!memcmp(gid, &cache->table[i], sizeof *gid)) { *port_num = p + start_port(device); if (index) *index = i; Modified: user/np/stable_9_toe/sys/dev/cxgb/ulp/tom/cxgb_cpl_io.c ============================================================================== --- user/np/stable_9_toe/sys/dev/cxgb/ulp/tom/cxgb_cpl_io.c Wed Aug 22 20:56:53 2012 (r239593) +++ user/np/stable_9_toe/sys/dev/cxgb/ulp/tom/cxgb_cpl_io.c Wed Aug 22 21:14:59 2012 (r239594) @@ -880,10 +880,10 @@ act_open_rpl_status_to_errno(int status) case CPL_ERR_CONN_TIMEDOUT: return (ETIMEDOUT); case CPL_ERR_TCAM_FULL: - return (ENOMEM); + return (EAGAIN); case CPL_ERR_CONN_EXIST: log(LOG_ERR, "ACTIVE_OPEN_RPL: 4-tuple in use\n"); - return (EADDRINUSE); + return (EAGAIN); default: return (EIO); } @@ -912,8 +912,7 @@ do_act_open_rpl(struct sge_qset *qs, str unsigned int atid = G_TID(ntohl(rpl->atid)); struct toepcb *toep = lookup_atid(&td->tid_maps, atid); struct inpcb *inp = toep->tp_inp; - struct tcpcb *tp = intotcpcb(inp); - int s = rpl->status; + int s = rpl->status, rc; CTR3(KTR_CXGB, "%s: atid %u, status %u ", __func__, atid, s); @@ -923,17 +922,14 @@ do_act_open_rpl(struct sge_qset *qs, str if (act_open_has_tid(s)) queue_tid_release(tod, GET_TID(rpl)); - if (s == CPL_ERR_TCAM_FULL || s == CPL_ERR_CONN_EXIST) { - INP_WLOCK(inp); - toe_connect_failed(tod, tp, EAGAIN); - toepcb_release(toep); /* unlocks inp */ - } else { + rc = act_open_rpl_status_to_errno(s); + if (rc != EAGAIN) INP_INFO_WLOCK(&V_tcbinfo); - INP_WLOCK(inp); - toe_connect_failed(tod, tp, act_open_rpl_status_to_errno(s)); - toepcb_release(toep); /* unlocks inp */ + INP_WLOCK(inp); + toe_connect_failed(tod, inp, rc); + toepcb_release(toep); /* unlocks inp */ + if (rc != EAGAIN) INP_INFO_WUNLOCK(&V_tcbinfo); - } m_freem(m); return (0); Modified: user/np/stable_9_toe/sys/dev/cxgb/ulp/tom/cxgb_listen.c ============================================================================== --- user/np/stable_9_toe/sys/dev/cxgb/ulp/tom/cxgb_listen.c Wed Aug 22 20:56:53 2012 (r239593) +++ user/np/stable_9_toe/sys/dev/cxgb/ulp/tom/cxgb_listen.c Wed Aug 22 21:14:59 2012 (r239594) @@ -41,6 +41,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #define TCPSTATES #include @@ -759,6 +760,15 @@ reset: goto reset; } + if (__predict_false(!(synqe->flags & TP_SYNQE_EXPANDED))) { + struct inpcb *new_inp = sotoinpcb(so); + + INP_WLOCK(new_inp); + tcp_timer_activate(intotcpcb(new_inp), TT_KEEP, 0); + t3_offload_socket(tod, synqe, so); + INP_WUNLOCK(new_inp); + } + /* Remove the synq entry and release its reference on the lctx */ TAILQ_REMOVE(&lctx->synq, synqe, link); inp = release_lctx(td, lctx); @@ -1136,5 +1146,6 @@ t3_offload_socket(struct toedev *tod, vo offload_socket(so, toep); make_established(so, cpl->snd_isn, cpl->rcv_isn, cpl->tcp_opt); update_tid(td, toep, synqe->tid); + synqe->flags |= TP_SYNQE_EXPANDED; } #endif Modified: user/np/stable_9_toe/sys/dev/cxgb/ulp/tom/cxgb_toepcb.h ============================================================================== --- user/np/stable_9_toe/sys/dev/cxgb/ulp/tom/cxgb_toepcb.h Wed Aug 22 20:56:53 2012 (r239593) +++ user/np/stable_9_toe/sys/dev/cxgb/ulp/tom/cxgb_toepcb.h Wed Aug 22 21:14:59 2012 (r239594) @@ -44,6 +44,7 @@ #define TP_IS_A_SYNQ_ENTRY (1 << 9) #define TP_ABORT_RPL_SENT (1 << 10) #define TP_SEND_FIN (1 << 11) +#define TP_SYNQE_EXPANDED (1 << 12) struct toepcb { TAILQ_ENTRY(toepcb) link; /* toep_list */ Modified: user/np/stable_9_toe/sys/dev/cxgbe/adapter.h ============================================================================== --- user/np/stable_9_toe/sys/dev/cxgbe/adapter.h Wed Aug 22 20:56:53 2012 (r239593) +++ user/np/stable_9_toe/sys/dev/cxgbe/adapter.h Wed Aug 22 21:14:59 2012 (r239594) @@ -135,6 +135,7 @@ enum { #else FL_BUF_SIZES = 3, /* cluster, jumbo9k, jumbo16k */ #endif + OFLD_BUF_SIZE = MJUM16BYTES, /* size of fl buffer for TOE rxq */ CTRL_EQ_QSIZE = 128, @@ -143,6 +144,12 @@ enum { TX_WR_FLITS = SGE_MAX_WR_LEN / 8 }; +#ifdef T4_PKT_TIMESTAMP +#define RX_COPY_THRESHOLD (MINCLSIZE - 8) +#else +#define RX_COPY_THRESHOLD MINCLSIZE +#endif + enum { /* adapter intr_type */ INTR_INTX = (1 << 0), @@ -510,6 +517,7 @@ struct rss_header; typedef int (*cpl_handler_t)(struct sge_iq *, const struct rss_header *, struct mbuf *); typedef int (*an_handler_t)(struct sge_iq *, const struct rsp_ctrl *); +typedef int (*fw_msg_handler_t)(struct adapter *, const __be64 *); struct adapter { SLIST_ENTRY(adapter) link; @@ -582,7 +590,8 @@ struct adapter { struct callout sfl_callout; an_handler_t an_handler __aligned(CACHE_LINE_SIZE); - cpl_handler_t cpl_handler[256]; + fw_msg_handler_t fw_msg_handler[4]; /* NUM_FW6_TYPES */ + cpl_handler_t cpl_handler[0xef]; /* NUM_CPL_CMDS */ }; #define ADAPTER_LOCK(sc) mtx_lock(&(sc)->sc_lock) @@ -741,6 +750,8 @@ void t4_os_link_changed(struct adapter * void t4_iterate(void (*)(struct adapter *, void *), void *); int t4_register_cpl_handler(struct adapter *, int, cpl_handler_t); int t4_register_an_handler(struct adapter *, an_handler_t); +int t4_register_fw_msg_handler(struct adapter *, int, fw_msg_handler_t); +int t4_filter_rpl(struct sge_iq *, const struct rss_header *, struct mbuf *); /* t4_sge.c */ void t4_sge_modload(void); Modified: user/np/stable_9_toe/sys/dev/cxgbe/common/t4_hw.h ============================================================================== --- user/np/stable_9_toe/sys/dev/cxgbe/common/t4_hw.h Wed Aug 22 20:56:53 2012 (r239593) +++ user/np/stable_9_toe/sys/dev/cxgbe/common/t4_hw.h Wed Aug 22 21:14:59 2012 (r239594) @@ -161,10 +161,12 @@ struct pagepod { #define S_PPOD_TAG 6 #define M_PPOD_TAG 0xFFFFFF #define V_PPOD_TAG(x) ((x) << S_PPOD_TAG) +#define G_PPOD_TAG(x) (((x) >> S_PPOD_TAG) & M_PPOD_TAG) #define S_PPOD_PGSZ 30 #define M_PPOD_PGSZ 0x3 #define V_PPOD_PGSZ(x) ((x) << S_PPOD_PGSZ) +#define G_PPOD_PGSZ(x) (((x) >> S_PPOD_PGSZ) & M_PPOD_PGSZ) #define S_PPOD_TID 32 #define M_PPOD_TID 0xFFFFFF Modified: user/np/stable_9_toe/sys/dev/cxgbe/common/t4_msg.h ============================================================================== --- user/np/stable_9_toe/sys/dev/cxgbe/common/t4_msg.h Wed Aug 22 20:56:53 2012 (r239593) +++ user/np/stable_9_toe/sys/dev/cxgbe/common/t4_msg.h Wed Aug 22 21:14:59 2012 (r239594) @@ -792,6 +792,14 @@ struct cpl_set_tcb_field { __be64 val; }; +struct cpl_set_tcb_field_core { + union opcode_tid ot; + __be16 reply_ctrl; + __be16 word_cookie; + __be64 mask; + __be64 val; +}; + /* cpl_set_tcb_field.word_cookie fields */ #define S_WORD 0 #define M_WORD 0x1F @@ -1376,6 +1384,11 @@ struct cpl_rx_data_ack { __be32 credit_dack; }; +struct cpl_rx_data_ack_core { + union opcode_tid ot; + __be32 credit_dack; +}; + /* cpl_rx_data_ack.ack_seq fields */ #define S_RX_CREDITS 0 #define M_RX_CREDITS 0x3FFFFFF @@ -2281,6 +2294,8 @@ enum { FW6_TYPE_WR_RPL = 1, FW6_TYPE_CQE = 2, FW6_TYPE_OFLD_CONNECTION_WR_RPL = 3, + + NUM_FW6_TYPES }; struct cpl_fw6_msg_ofld_connection_wr_rpl { Modified: user/np/stable_9_toe/sys/dev/cxgbe/firmware/t4fw_cfg.txt ============================================================================== --- user/np/stable_9_toe/sys/dev/cxgbe/firmware/t4fw_cfg.txt Wed Aug 22 20:56:53 2012 (r239593) +++ user/np/stable_9_toe/sys/dev/cxgbe/firmware/t4fw_cfg.txt Wed Aug 22 21:14:59 2012 (r239594) @@ -20,7 +20,7 @@ filterMode = fragmentation, mpshittype, protocol, vlan, port, fcoe # TP rx and tx payload memory (% of the total EDRAM + DDR3). - tp_pmrx = 40 + tp_pmrx = 38 tp_pmtx = 60 tp_pmrx_pagesize = 64K tp_pmtx_pagesize = 64K @@ -67,7 +67,8 @@ # driver will mask off features it won't use protocol = ofld - tp_l2t = 100 + tp_l2t = 4096 + tp_ddp = 2 # TCAM has 8K cells; each region must start at a multiple of 128 cell. # Each entry in these categories takes 4 cells each. nhash will use the @@ -136,7 +137,7 @@ [fini] version = 0x1 - checksum = 0xdb5813f9 + checksum = 0x162df193 # # $FreeBSD$ # Modified: user/np/stable_9_toe/sys/dev/cxgbe/offload.h ============================================================================== --- user/np/stable_9_toe/sys/dev/cxgbe/offload.h Wed Aug 22 20:56:53 2012 (r239593) +++ user/np/stable_9_toe/sys/dev/cxgbe/offload.h Wed Aug 22 21:14:59 2012 (r239594) @@ -31,13 +31,16 @@ #ifndef __T4_OFFLOAD_H__ #define __T4_OFFLOAD_H__ -#define INIT_ULPTX_WR(w, wrlen, atomic, tid) do { \ - (w)->wr.wr_hi = htonl(V_FW_WR_OP(FW_ULPTX_WR) | V_FW_WR_ATOMIC(atomic)); \ - (w)->wr.wr_mid = htonl(V_FW_WR_LEN16(DIV_ROUND_UP(wrlen, 16)) | \ +#define INIT_ULPTX_WRH(w, wrlen, atomic, tid) do { \ + (w)->wr_hi = htonl(V_FW_WR_OP(FW_ULPTX_WR) | V_FW_WR_ATOMIC(atomic)); \ + (w)->wr_mid = htonl(V_FW_WR_LEN16(DIV_ROUND_UP(wrlen, 16)) | \ V_FW_WR_FLOWID(tid)); \ - (w)->wr.wr_lo = cpu_to_be64(0); \ + (w)->wr_lo = cpu_to_be64(0); \ } while (0) +#define INIT_ULPTX_WR(w, wrlen, atomic, tid) \ + INIT_ULPTX_WRH(&((w)->wr), wrlen, atomic, tid) + #define INIT_TP_WR(w, tid) do { \ (w)->wr.wr_hi = htonl(V_FW_WR_OP(FW_TP_WR) | \ V_FW_WR_IMMDLEN(sizeof(*w) - sizeof(w->wr))); \ Modified: user/np/stable_9_toe/sys/dev/cxgbe/t4_main.c ============================================================================== --- user/np/stable_9_toe/sys/dev/cxgbe/t4_main.c Wed Aug 22 20:56:53 2012 (r239593) +++ user/np/stable_9_toe/sys/dev/cxgbe/t4_main.c Wed Aug 22 21:14:59 2012 (r239594) @@ -306,6 +306,7 @@ static void cxgbe_vlan_config(void *, st static int cpl_not_handled(struct sge_iq *, const struct rss_header *, struct mbuf *); static int an_not_handled(struct sge_iq *, const struct rsp_ctrl *); +static int fw_msg_not_handled(struct adapter *, const __be64 *); static int t4_sysctls(struct adapter *); static int cxgbe_sysctls(struct port_info *); static int sysctl_int_array(SYSCTL_HANDLER_ARGS); @@ -345,8 +346,6 @@ static int del_filter(struct adapter *, static void clear_filter(struct filter_entry *); static int set_filter_wr(struct adapter *, int); static int del_filter_wr(struct adapter *, int); -static int filter_rpl(struct sge_iq *, const struct rss_header *, - struct mbuf *); static int get_sge_context(struct adapter *, struct t4_sge_context *); static int read_card_mem(struct adapter *, struct t4_mem_range *); #ifdef TCP_OFFLOAD @@ -381,6 +380,10 @@ CTASSERT(offsetof(struct sge_ofld_rxq, i CTASSERT(offsetof(struct sge_ofld_rxq, fl) == offsetof(struct sge_rxq, fl)); #endif +/* No easy way to include t4_msg.h before adapter.h so we check this way */ +CTASSERT(ARRAY_SIZE(((struct adapter *)0)->cpl_handler) == NUM_CPL_CMDS); +CTASSERT(ARRAY_SIZE(((struct adapter *)0)->fw_msg_handler) == NUM_FW6_TYPES); + static int t4_probe(device_t dev) { @@ -458,7 +461,9 @@ t4_attach(device_t dev) sc->an_handler = an_not_handled; for (i = 0; i < ARRAY_SIZE(sc->cpl_handler); i++) sc->cpl_handler[i] = cpl_not_handled; - t4_register_cpl_handler(sc, CPL_SET_TCB_RPL, filter_rpl); + for (i = 0; i < ARRAY_SIZE(sc->fw_msg_handler); i++) + sc->fw_msg_handler[i] = fw_msg_not_handled; + t4_register_cpl_handler(sc, CPL_SET_TCB_RPL, t4_filter_rpl); /* Prepare the adapter for operation */ rc = -t4_prep_adapter(sc); @@ -510,18 +515,24 @@ t4_attach(device_t dev) goto done; /* error message displayed already */ if (sc->flags & MASTER_PF) { + uint16_t indsz = min(RX_COPY_THRESHOLD - 1, M_INDICATESIZE); /* final tweaks to some settings */ t4_load_mtus(sc, sc->params.mtus, sc->params.a_wnd, sc->params.b_wnd); - t4_write_reg(sc, A_ULP_RX_TDDP_PSZ, V_HPZ0(PAGE_SHIFT - 12)); + /* 4K, 16K, 64K, 256K DDP "page sizes" */ + t4_write_reg(sc, A_ULP_RX_TDDP_PSZ, V_HPZ0(0) | V_HPZ1(2) | + V_HPZ2(4) | V_HPZ3(6)); + t4_set_reg_field(sc, A_ULP_RX_CTL, F_TDDPTAGTCB, F_TDDPTAGTCB); t4_set_reg_field(sc, A_TP_PARA_REG3, F_TUNNELCNGDROP0 | - F_TUNNELCNGDROP1 | F_TUNNELCNGDROP2 | F_TUNNELCNGDROP3, 0); + F_TUNNELCNGDROP1 | F_TUNNELCNGDROP2 | F_TUNNELCNGDROP3, + F_TUNNELCNGDROP0 | F_TUNNELCNGDROP1 | F_TUNNELCNGDROP2 | + F_TUNNELCNGDROP3); t4_set_reg_field(sc, A_TP_PARA_REG5, V_INDICATESIZE(M_INDICATESIZE) | F_REARMDDPOFFSET | F_RESETDDPOFFSET, - V_INDICATESIZE(M_INDICATESIZE) | + V_INDICATESIZE(indsz) | F_REARMDDPOFFSET | F_RESETDDPOFFSET); } else { /* @@ -2942,7 +2953,8 @@ cxgbe_tick(void *arg) ifp->if_omcasts = s->tx_mcast_frames - s->tx_pause; ifp->if_imcasts = s->rx_mcast_frames - s->rx_pause; ifp->if_iqdrops = s->rx_ovflow0 + s->rx_ovflow1 + s->rx_ovflow2 + - s->rx_ovflow3; + s->rx_ovflow3 + s->rx_trunc0 + s->rx_trunc1 + s->rx_trunc2 + + s->rx_trunc3; drops = s->tx_drop; for_each_txq(pi, i, txq) @@ -2977,7 +2989,7 @@ cpl_not_handled(struct sge_iq *iq, const panic("%s: opcode 0x%02x on iq %p with payload %p", __func__, rss->opcode, iq, m); #else - log(LOG_ERR, "%s: opcode 0x%02x on iq %p with payload %p", + log(LOG_ERR, "%s: opcode 0x%02x on iq %p with payload %p\n", __func__, rss->opcode, iq, m); m_freem(m); #endif @@ -3006,7 +3018,7 @@ an_not_handled(struct sge_iq *iq, const #ifdef INVARIANTS panic("%s: async notification on iq %p (ctrl %p)", __func__, iq, ctrl); #else - log(LOG_ERR, "%s: async notification on iq %p (ctrl %p)", + log(LOG_ERR, "%s: async notification on iq %p (ctrl %p)\n", __func__, iq, ctrl); #endif return (EDOOFUS); @@ -3025,6 +3037,35 @@ t4_register_an_handler(struct adapter *s } static int +fw_msg_not_handled(struct adapter *sc, const __be64 *rpl) +{ + __be64 *r = __DECONST(__be64 *, rpl); + struct cpl_fw6_msg *cpl = member2struct(cpl_fw6_msg, data, r); + +#ifdef INVARIANTS + panic("%s: fw_msg type %d", __func__, cpl->type); +#else + log(LOG_ERR, "%s: fw_msg type %d\n", __func__, cpl->type); +#endif + return (EDOOFUS); +} + +int +t4_register_fw_msg_handler(struct adapter *sc, int type, fw_msg_handler_t h) +{ + uintptr_t *loc, new; + + if (type >= ARRAY_SIZE(sc->fw_msg_handler)) + return (EINVAL); + + new = h ? (uintptr_t)h : (uintptr_t)fw_msg_not_handled; + loc = (uintptr_t *) &sc->fw_msg_handler[type]; + atomic_store_rel_ptr(loc, new); + + return (0); +} + +static int t4_sysctls(struct adapter *sc) { struct sysctl_ctx_list *ctx; @@ -3191,10 +3232,13 @@ t4_sysctls(struct adapter *sc) sc->tt.ddp = 0; SYSCTL_ADD_INT(ctx, children, OID_AUTO, "ddp", CTLFLAG_RW, &sc->tt.ddp, 0, "DDP allowed"); - sc->tt.indsz = M_INDICATESIZE; + + sc->tt.indsz = G_INDICATESIZE(t4_read_reg(sc, A_TP_PARA_REG5)); SYSCTL_ADD_INT(ctx, children, OID_AUTO, "indsz", CTLFLAG_RW, &sc->tt.indsz, 0, "DDP max indicate size allowed"); - sc->tt.ddp_thres = 3*4096; + + sc->tt.ddp_thres = + G_RXCOALESCESIZE(t4_read_reg(sc, A_TP_PARA_REG2)); SYSCTL_ADD_INT(ctx, children, OID_AUTO, "ddp_thres", CTLFLAG_RW, &sc->tt.ddp_thres, 0, "DDP threshold"); } @@ -4961,8 +5005,8 @@ del_filter_wr(struct adapter *sc, int fi return (0); } -static int -filter_rpl(struct sge_iq *iq, const struct rss_header *rss, struct mbuf *m) +int +t4_filter_rpl(struct sge_iq *iq, const struct rss_header *rss, struct mbuf *m) { struct adapter *sc = iq->adapter; const struct cpl_set_tcb_rpl *rpl = (const void *)(rss + 1); Modified: user/np/stable_9_toe/sys/dev/cxgbe/t4_sge.c ============================================================================== --- user/np/stable_9_toe/sys/dev/cxgbe/t4_sge.c Wed Aug 22 20:56:53 2012 (r239593) +++ user/np/stable_9_toe/sys/dev/cxgbe/t4_sge.c Wed Aug 22 21:14:59 2012 (r239594) @@ -68,12 +68,37 @@ static struct fl_buf_info fl_buf_info[FL #define FL_BUF_TYPE(x) (fl_buf_info[x].type) #define FL_BUF_ZONE(x) (fl_buf_info[x].zone) -enum { - FL_PKTSHIFT = 2 -}; +/* + * Ethernet frames are DMA'd at this byte offset into the freelist buffer. + * 0-7 are valid values. + */ +static int fl_pktshift = 2; +TUNABLE_INT("hw.cxgbe.fl_pktshift", &fl_pktshift); -static int fl_pad = CACHE_LINE_SIZE; -static int spg_len = 64; +/* + * Pad ethernet payload up to this boundary. + * -1: driver should figure out a good value. + * Any power of 2, from 32 to 4096 (both inclusive) is a valid value. + */ +static int fl_pad = -1; +TUNABLE_INT("hw.cxgbe.fl_pad", &fl_pad); + +/* + * Status page length. + * -1: driver should figure out a good value. + * 64 or 128 are the only other valid values. + */ +static int spg_len = -1; +TUNABLE_INT("hw.cxgbe.spg_len", &spg_len); + +/* + * Congestion drops. + * -1: no congestion feedback (not recommended). + * 0: backpressure the channel instead of dropping packets right away. + * 1: no backpressure, drop packets for the congested queue immediately. + */ +static int cong_drop = 0; +TUNABLE_INT("hw.cxgbe.cong_drop", &cong_drop); /* Used to track coalesced tx work request */ struct txpkts { @@ -160,7 +185,7 @@ static void write_eqflush_wr(struct sge_ static __be64 get_flit(bus_dma_segment_t *, int, int); static int handle_sge_egr_update(struct sge_iq *, const struct rss_header *, struct mbuf *); -static int handle_fw_rpl(struct sge_iq *, const struct rss_header *, +static int handle_fw_msg(struct sge_iq *, const struct rss_header *, struct mbuf *); static int sysctl_uint16(SYSCTL_HANDLER_ARGS); @@ -170,7 +195,8 @@ extern u_int cpu_clflush_line_size; #endif /* - * Called on MOD_LOAD and fills up fl_buf_info[]. + * Called on MOD_LOAD. Fills up fl_buf_info[] and validates/calculates the SGE + * tunables. */ void t4_sge_modload(void) @@ -191,10 +217,49 @@ t4_sge_modload(void) FL_BUF_ZONE(i) = m_getzone(bufsize[i]); } + if (fl_pktshift < 0 || fl_pktshift > 7) { + printf("Invalid hw.cxgbe.fl_pktshift value (%d)," + " using 2 instead.\n", fl_pktshift); + fl_pktshift = 2; + } + + if (fl_pad < 32 || fl_pad > 4096 || !powerof2(fl_pad)) { + int pad; + #if defined(__i386__) || defined(__amd64__) - fl_pad = max(cpu_clflush_line_size, 32); - spg_len = cpu_clflush_line_size > 64 ? 128 : 64; + pad = max(cpu_clflush_line_size, 32); +#else + pad = max(CACHE_LINE_SIZE, 32); #endif + pad = min(pad, 4096); + + if (fl_pad != -1) { + printf("Invalid hw.cxgbe.fl_pad value (%d)," + " using %d instead.\n", fl_pad, pad); + } + fl_pad = pad; + } + + if (spg_len != 64 && spg_len != 128) { + int len; + +#if defined(__i386__) || defined(__amd64__) + len = cpu_clflush_line_size > 64 ? 128 : 64; +#else + len = 64; +#endif + if (spg_len != -1) { + printf("Invalid hw.cxgbe.spg_len value (%d)," + " using %d instead.\n", spg_len, len); + } + spg_len = len; + } + + if (cong_drop < -1 || cong_drop > 1) { + printf("Invalid hw.cxgbe.cong_drop value (%d)," + " using 0 instead.\n", cong_drop); + cong_drop = 0; + } } /** @@ -215,7 +280,7 @@ t4_sge_init(struct adapter *sc) ctrl_mask = V_PKTSHIFT(M_PKTSHIFT) | F_RXPKTCPLMODE | V_INGPADBOUNDARY(M_INGPADBOUNDARY) | F_EGRSTATUSPAGESIZE; - ctrl_val = V_PKTSHIFT(FL_PKTSHIFT) | F_RXPKTCPLMODE | + ctrl_val = V_PKTSHIFT(fl_pktshift) | F_RXPKTCPLMODE | V_INGPADBOUNDARY(ilog2(fl_pad) - 5) | V_EGRSTATUSPAGESIZE(spg_len == 128); @@ -296,11 +361,13 @@ t4_sge_init(struct adapter *sc) sc->sge.timer_val[4] = G_TIMERVALUE4(v) / core_ticks_per_usec(sc); sc->sge.timer_val[5] = G_TIMERVALUE5(v) / core_ticks_per_usec(sc); - t4_register_cpl_handler(sc, CPL_FW4_MSG, handle_fw_rpl); - t4_register_cpl_handler(sc, CPL_FW6_MSG, handle_fw_rpl); + t4_register_cpl_handler(sc, CPL_FW4_MSG, handle_fw_msg); + t4_register_cpl_handler(sc, CPL_FW6_MSG, handle_fw_msg); t4_register_cpl_handler(sc, CPL_SGE_EGR_UPDATE, handle_sge_egr_update); t4_register_cpl_handler(sc, CPL_RX_PKT, t4_eth_rx); + t4_register_fw_msg_handler(sc, FW6_TYPE_CMD_RPL, t4_handle_fw_rpl); + return (rc); } @@ -477,6 +544,18 @@ port_intr_iq(struct port_info *pi, int i return (iq); } +static inline int +mtu_to_bufsize(int mtu) +{ + int bufsize; + + /* large enough for a frame even when VLAN extraction is disabled */ + bufsize = ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN + mtu; + bufsize = roundup(bufsize + fl_pktshift, fl_pad); + + return (bufsize); +} + int t4_setup_port_queues(struct port_info *pi) { @@ -493,6 +572,7 @@ t4_setup_port_queues(struct port_info *p struct adapter *sc = pi->adapter; struct sysctl_oid *oid = device_get_sysctl_tree(pi->dev); struct sysctl_oid_list *children = SYSCTL_CHILDREN(oid); + int bufsize = mtu_to_bufsize(pi->ifp->if_mtu); oid = SYSCTL_ADD_NODE(&pi->ctx, children, OID_AUTO, "rxq", CTLFLAG_RD, NULL, "rx queues"); @@ -522,7 +602,7 @@ t4_setup_port_queues(struct port_info *p snprintf(name, sizeof(name), "%s rxq%d-fl", device_get_nameunit(pi->dev), i); - init_fl(&rxq->fl, pi->qsize_rxq / 8, pi->ifp->if_mtu, name); + init_fl(&rxq->fl, pi->qsize_rxq / 8, bufsize, name); if (sc->flags & INTR_DIRECT #ifdef TCP_OFFLOAD @@ -547,7 +627,7 @@ t4_setup_port_queues(struct port_info *p snprintf(name, sizeof(name), "%s ofld_rxq%d-fl", device_get_nameunit(pi->dev), i); - init_fl(&ofld_rxq->fl, pi->qsize_rxq / 8, MJUM16BYTES, name); + init_fl(&ofld_rxq->fl, pi->qsize_rxq / 8, OFLD_BUF_SIZE, name); if (sc->flags & INTR_DIRECT || (sc->intr_count > 1 && pi->nofldrxq > pi->nrxq)) { @@ -942,13 +1022,6 @@ service_iq(struct sge_iq *iq, int budget return (0); } - -#ifdef T4_PKT_TIMESTAMP -#define RX_COPY_THRESHOLD (MINCLSIZE - 8) -#else -#define RX_COPY_THRESHOLD MINCLSIZE -#endif - static struct mbuf * get_fl_payload(struct adapter *sc, struct sge_fl *fl, uint32_t len_newbuf, int *fl_bufs_used) @@ -1050,9 +1123,9 @@ t4_eth_rx(struct sge_iq *iq, const struc KASSERT(m0 != NULL, ("%s: no payload with opcode %02x", __func__, rss->opcode)); - m0->m_pkthdr.len -= FL_PKTSHIFT; - m0->m_len -= FL_PKTSHIFT; - m0->m_data += FL_PKTSHIFT; + m0->m_pkthdr.len -= fl_pktshift; + m0->m_len -= fl_pktshift; + m0->m_data += fl_pktshift; m0->m_pkthdr.rcvif = ifp; m0->m_flags |= M_FLOWID; @@ -1386,11 +1459,8 @@ t4_update_fl_bufsize(struct ifnet *ifp) struct port_info *pi = ifp->if_softc; struct sge_rxq *rxq; struct sge_fl *fl; - int i, bufsize; + int i, bufsize = mtu_to_bufsize(ifp->if_mtu); - /* large enough for a frame even when VLAN extraction is disabled */ - bufsize = ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN + ifp->if_mtu; - bufsize = roundup(bufsize + FL_PKTSHIFT, fl_pad); for_each_rxq(pi, i, rxq) { fl = &rxq->fl; @@ -1793,6 +1863,18 @@ free_mgmtq(struct adapter *sc) return free_wrq(sc, &sc->sge.mgmtq); } +static inline int +tnl_cong(struct port_info *pi) +{ + + if (cong_drop == -1) + return (-1); + else if (cong_drop == 1) + return (0); + else + return (1 << pi->tx_chan); +} + static int alloc_rxq(struct port_info *pi, struct sge_rxq *rxq, int intr_idx, int idx, struct sysctl_oid *oid) @@ -1801,7 +1883,7 @@ alloc_rxq(struct port_info *pi, struct s struct sysctl_oid_list *children; char name[16]; - rc = alloc_iq_fl(pi, &rxq->iq, &rxq->fl, intr_idx, 1 << pi->tx_chan); + rc = alloc_iq_fl(pi, &rxq->iq, &rxq->fl, intr_idx, tnl_cong(pi)); if (rc != 0) return (rc); @@ -3433,17 +3515,15 @@ handle_sge_egr_update(struct sge_iq *iq, } static int -handle_fw_rpl(struct sge_iq *iq, const struct rss_header *rss, struct mbuf *m) +handle_fw_msg(struct sge_iq *iq, const struct rss_header *rss, struct mbuf *m) { + struct adapter *sc = iq->adapter; const struct cpl_fw6_msg *cpl = (const void *)(rss + 1); KASSERT(m == NULL, ("%s: payload with opcode %02x", __func__, rss->opcode)); - if (cpl->type == FW6_TYPE_CMD_RPL) - t4_handle_fw_rpl(iq->adapter, cpl->data); - - return (0); + return (sc->fw_msg_handler[cpl->type](sc, &cpl->data[0])); } static int Modified: user/np/stable_9_toe/sys/dev/cxgbe/tom/t4_connect.c ============================================================================== --- user/np/stable_9_toe/sys/dev/cxgbe/tom/t4_connect.c Wed Aug 22 20:56:53 2012 (r239593) +++ user/np/stable_9_toe/sys/dev/cxgbe/tom/t4_connect.c Wed Aug 22 21:14:59 2012 (r239594) @@ -167,10 +167,10 @@ act_open_rpl_status_to_errno(int status) case CPL_ERR_CONN_TIMEDOUT: return (ETIMEDOUT); case CPL_ERR_TCAM_FULL: - return (ENOMEM); + return (EAGAIN); case CPL_ERR_CONN_EXIST: log(LOG_ERR, "ACTIVE_OPEN_RPL: 4-tuple in use\n"); - return (EADDRINUSE); + return (EAGAIN); default: return (EIO); } @@ -186,8 +186,8 @@ do_act_open_rpl(struct sge_iq *iq, const unsigned int status = G_AOPEN_STATUS(be32toh(cpl->atid_status)); struct toepcb *toep = lookup_atid(sc, atid); struct inpcb *inp = toep->inp; - struct tcpcb *tp = intotcpcb(inp); struct toedev *tod = &toep->td->tod; + int rc; KASSERT(m == NULL, ("%s: wasn't expecting payload", __func__)); KASSERT(toep->tid == atid, ("%s: toep tid/atid mismatch", __func__)); @@ -204,17 +204,14 @@ do_act_open_rpl(struct sge_iq *iq, const if (status && act_open_has_tid(status)) release_tid(sc, GET_TID(cpl), toep->ctrlq); - if (status == CPL_ERR_TCAM_FULL) { - INP_WLOCK(inp); - toe_connect_failed(tod, tp, EAGAIN); - final_cpl_received(toep); /* unlocks inp */ - } else { + rc = act_open_rpl_status_to_errno(status); + if (rc != EAGAIN) INP_INFO_WLOCK(&V_tcbinfo); - INP_WLOCK(inp); - toe_connect_failed(tod, tp, act_open_rpl_status_to_errno(status)); - final_cpl_received(toep); /* unlocks inp */ + INP_WLOCK(inp); + toe_connect_failed(tod, inp, rc); + final_cpl_received(toep); /* unlocks inp */ + if (rc != EAGAIN) INP_INFO_WUNLOCK(&V_tcbinfo); - } return (0); } @@ -247,10 +244,14 @@ calc_opt2a(struct socket *so) opt2 |= F_RX_COALESCE_VALID | V_RX_COALESCE(M_RX_COALESCE); opt2 |= F_RSS_QUEUE_VALID | V_RSS_QUEUE(toep->ofld_rxq->iq.abs_id); +#ifdef USE_DDP_RX_FLOW_CONTROL + if (toep->ulp_mode == ULP_MODE_TCPDDP) + opt2 |= F_RX_FC_VALID | F_RX_FC_DDP; +#endif + return (htobe32(opt2)); } - void t4_init_connect_cpl_handlers(struct adapter *sc) *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-user@FreeBSD.ORG Fri Aug 24 17:47:59 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 4039C106566B; Fri, 24 Aug 2012 17:47:59 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 2AFFD8FC16; Fri, 24 Aug 2012 17:47:59 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7OHlx7t078968; Fri, 24 Aug 2012 17:47:59 GMT (envelope-from adrian@svn.freebsd.org) Received: (from adrian@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7OHlwPF078962; Fri, 24 Aug 2012 17:47:58 GMT (envelope-from adrian@svn.freebsd.org) Message-Id: <201208241747.q7OHlwPF078962@svn.freebsd.org> From: Adrian Chadd Date: Fri, 24 Aug 2012 17:47:58 +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: r239659 - user/adrian/ath_radar_stuff/lib/libradarpkt 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, 24 Aug 2012 17:47:59 -0000 Author: adrian Date: Fri Aug 24 17:47:58 2012 New Revision: 239659 URL: http://svn.freebsd.org/changeset/base/239659 Log: * Add AR5212 radar parsing code * Due to API changes, ieee80211.h is now required. Added: user/adrian/ath_radar_stuff/lib/libradarpkt/ar5212_radar.c (contents, props changed) user/adrian/ath_radar_stuff/lib/libradarpkt/ar5212_radar.h (contents, props changed) Modified: user/adrian/ath_radar_stuff/lib/libradarpkt/Makefile user/adrian/ath_radar_stuff/lib/libradarpkt/ar5416_radar.c user/adrian/ath_radar_stuff/lib/libradarpkt/ar9280_radar.c Modified: user/adrian/ath_radar_stuff/lib/libradarpkt/Makefile ============================================================================== --- user/adrian/ath_radar_stuff/lib/libradarpkt/Makefile Fri Aug 24 17:39:57 2012 (r239658) +++ user/adrian/ath_radar_stuff/lib/libradarpkt/Makefile Fri Aug 24 17:47:58 2012 (r239659) @@ -1,6 +1,6 @@ LIB= radarpkt -SRCS= ar9280_radar.c ar5416_radar.c +SRCS= ar5212_radar.c ar9280_radar.c ar5416_radar.c # Define 'ATH_ENABLE_RADIOTAP_VENDOR_EXT' as it's not enabled by default # in the configuration file. Ideally this would just fake an "opt_ath.h" Added: user/adrian/ath_radar_stuff/lib/libradarpkt/ar5212_radar.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/adrian/ath_radar_stuff/lib/libradarpkt/ar5212_radar.c Fri Aug 24 17:47:58 2012 (r239659) @@ -0,0 +1,104 @@ +/*- + * Copyright (c) 2012 Adrian Chadd + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer, + * without modification. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any + * redistribution must be conditioned upon including a substantially + * similar Disclaimer requirement for further binary redistribution. + * + * NO WARRANTY + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, + * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGES. + * + * $FreeBSD$ + */ +#include +#include +#include +#include +#include /* for memcpy() */ + +/* Headers required for the ioctl interface */ +#include +#include +#include + +#include "net80211/ieee80211.h" +#include "net80211/ieee80211_radiotap.h" + +#include "dev/ath/if_athioctl.h" + +#include "pkt.h" + +#include "ar5212_radar.h" + +int +ar5212_radar_decode(struct ieee80211_radiotap_header *rh, + const unsigned char *pkt, int len, struct radar_entry *re) +{ + uint64_t tsf; + int8_t rssi, nf; + struct ath_rx_radiotap_header *rx = + (struct ath_rx_radiotap_header *) rh; + + /* XXX we should really be implementing a real radiotap parser */ + tsf = le64toh(rx->wr_tsf); + + rssi = rx->wr_v.vh_rssi; + nf = rx->wr_antnoise; + + /* Last byte is the pulse width */ + if (len < 1) { + printf("short radar frame\n"); + return (0); + } + +#if 0 + printf("phyerr: %d ", rx->wr_v.vh_phyerr_code); + printf("ts: %lld", tsf); + printf("\tit_present: %x", le32toh(rh->it_present)); + printf("\tlen: %d", len); + printf("\trssi: %d, nf: %d", rssi, nf); + printf("\tpri: %u", pkt[len - 1] & 0xff); + printf("\n"); +#endif + + /* + * If RSSI > 0x80, it's a negative RSSI. We store it signed + * so we can at least log that it was negative in order to + * plot it. The radar code IIRC just tosses it. + */ + re->re_rssi = rssi; + + /* + * XXX TODO: + * + * The radar event is timestamped by the MAC the end of the event. + * To work around this particular issue, a "best guess" of the event + * start time involves its duration. + */ + + re->re_timestamp = tsf; + /* XXX TODO: re->re_freq */ + re->re_dur = pkt[len - 1] & 0xff; + /* XXX TODO: also store ctl/ext RSSI, and some flags */ + re->re_freq = 0; + + return(1); +} Added: user/adrian/ath_radar_stuff/lib/libradarpkt/ar5212_radar.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/adrian/ath_radar_stuff/lib/libradarpkt/ar5212_radar.h Fri Aug 24 17:47:58 2012 (r239659) @@ -0,0 +1,47 @@ +/*- + * Copyright (c) 2012 Adrian Chadd + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer, + * without modification. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any + * redistribution must be conditioned upon including a substantially + * similar Disclaimer requirement for further binary redistribution. + * + * NO WARRANTY + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, + * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGES. + * + * $FreeBSD$ + */ +#ifndef __AR5212_RADAR_H__ +#define __AR5212_RADAR_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#define CHIP_AR5212 3 + +extern int ar5212_radar_decode(struct ieee80211_radiotap_header *rh, + const unsigned char *pkt, int len, struct radar_entry *re); + +#ifdef __cplusplus +} +#endif + +#endif /* __AR5212_RADAR__ */ Modified: user/adrian/ath_radar_stuff/lib/libradarpkt/ar5416_radar.c ============================================================================== --- user/adrian/ath_radar_stuff/lib/libradarpkt/ar5416_radar.c Fri Aug 24 17:39:57 2012 (r239658) +++ user/adrian/ath_radar_stuff/lib/libradarpkt/ar5416_radar.c Fri Aug 24 17:47:58 2012 (r239659) @@ -39,7 +39,7 @@ #include #include -//#include "net80211/ieee80211_var.h" +#include "net80211/ieee80211.h" #include "net80211/ieee80211_radiotap.h" #include "dev/ath/if_athioctl.h" Modified: user/adrian/ath_radar_stuff/lib/libradarpkt/ar9280_radar.c ============================================================================== --- user/adrian/ath_radar_stuff/lib/libradarpkt/ar9280_radar.c Fri Aug 24 17:39:57 2012 (r239658) +++ user/adrian/ath_radar_stuff/lib/libradarpkt/ar9280_radar.c Fri Aug 24 17:47:58 2012 (r239659) @@ -37,6 +37,7 @@ #include #include +#include "net80211/ieee80211.h" #include "net80211/ieee80211_radiotap.h" #include "dev/ath/if_athioctl.h" From owner-svn-src-user@FreeBSD.ORG Fri Aug 24 17:48:15 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id D4DE9106575C; Fri, 24 Aug 2012 17:48:15 +0000 (UTC) (envelope-from adrian@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C036B8FC14; Fri, 24 Aug 2012 17:48:15 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q7OHmFx9079037; Fri, 24 Aug 2012 17:48:15 GMT (envelope-from adrian@svn.freebsd.org) Received: (from adrian@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q7OHmFmG079035; Fri, 24 Aug 2012 17:48:15 GMT (envelope-from adrian@svn.freebsd.org) Message-Id: <201208241748.q7OHmFmG079035@svn.freebsd.org> From: Adrian Chadd Date: Fri, 24 Aug 2012 17:48:15 +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: r239660 - user/adrian/ath_radar_stuff/src/pktlog 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, 24 Aug 2012 17:48:15 -0000 Author: adrian Date: Fri Aug 24 17:48:15 2012 New Revision: 239660 URL: http://svn.freebsd.org/changeset/base/239660 Log: * Add AR5212 PHY reporting * Fix compile issues Modified: user/adrian/ath_radar_stuff/src/pktlog/main.c Modified: user/adrian/ath_radar_stuff/src/pktlog/main.c ============================================================================== --- user/adrian/ath_radar_stuff/src/pktlog/main.c Fri Aug 24 17:47:58 2012 (r239659) +++ user/adrian/ath_radar_stuff/src/pktlog/main.c Fri Aug 24 17:48:15 2012 (r239660) @@ -6,9 +6,11 @@ #include +#include "net80211/ieee80211.h" #include "net80211/ieee80211_radiotap.h" #include "libradarpkt/pkt.h" +#include "libradarpkt/ar5212_radar.h" #include "libradarpkt/ar5416_radar.h" #include "libradarpkt/ar9280_radar.h" @@ -84,8 +86,10 @@ pkt_handle(int chip, const char *pkt, in return; } #endif - - if (chip == CHIP_AR5416) + if (chip == CHIP_AR5212) + r = ar5212_radar_decode(rh, pkt + rh->it_len, len - rh->it_len, + &re); + else if (chip == CHIP_AR5416) r = ar5416_radar_decode(rh, pkt + rh->it_len, len - rh->it_len, &re); else if (chip == CHIP_AR9280) @@ -151,7 +155,7 @@ static void usage(const char *progname) { - printf("Usage: %s \n", + printf("Usage: %s \n", progname); } @@ -171,7 +175,9 @@ main(int argc, const char *argv[]) exit(255); } - if (strcmp(argv[1], "ar5416") == 0) { + if (strcmp(argv[1], "ar5212") == 0) { + chip = CHIP_AR5212; + } else if (strcmp(argv[1], "ar5416") == 0) { chip = CHIP_AR5416; } else if (strcmp(argv[1], "ar9280") == 0) { chip = CHIP_AR9280;