From owner-svn-src-user@FreeBSD.ORG Mon Aug 6 17:58:59 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 A4EAF106564A; Mon, 6 Aug 2012 17:58:59 +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 766CF8FC14; Mon, 6 Aug 2012 17:58: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 q76HwxTW065421; Mon, 6 Aug 2012 17:58:59 GMT (envelope-from jceel@svn.freebsd.org) Received: (from jceel@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q76Hwx2r065419; Mon, 6 Aug 2012 17:58:59 GMT (envelope-from jceel@svn.freebsd.org) Message-Id: <201208061758.q76Hwx2r065419@svn.freebsd.org> From: Jakub Wojciech Klama Date: Mon, 6 Aug 2012 17:58:59 +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: r239098 - 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: Mon, 06 Aug 2012 17:58:59 -0000 Author: jceel Date: Mon Aug 6 17:58:58 2012 New Revision: 239098 URL: http://svn.freebsd.org/changeset/base/239098 Log: Improvements in intrng code: fill in arm_remove_irqhandler() routine, add support for interrupt counting, some general cleanup. Modified: user/jceel/soc2012_armv6/sys/arm/arm/intrng.c Modified: user/jceel/soc2012_armv6/sys/arm/arm/intrng.c ============================================================================== --- user/jceel/soc2012_armv6/sys/arm/arm/intrng.c Mon Aug 6 17:00:29 2012 (r239097) +++ user/jceel/soc2012_armv6/sys/arm/arm/intrng.c Mon Aug 6 17:58:58 2012 (r239098) @@ -73,11 +73,10 @@ struct arm_intr_controller { struct arm_intr_handler { device_t ih_dev; - int ih_intrcnt; + int ih_intrcnt_idx; int ih_irq; struct intr_event * ih_event; struct arm_intr_controller *ih_pic; - struct arm_intr_controller *ih_self; }; static void arm_mask_irq(void *); @@ -87,6 +86,9 @@ static void arm_eoi(void *); static struct arm_intr_handler arm_intrs[NIRQ]; static struct arm_intr_controller arm_pics[NPIC]; +static int intrcnt_index = 0; +static int last_printed = 0; + void arm_dispatch_irq(device_t dev, struct trapframe *tf, int irq) { @@ -108,7 +110,7 @@ arm_dispatch_irq(device_t dev, struct tr debugf("requested by %s\n", device_get_nameunit(ih->ih_dev)); - ih->ih_intrcnt++; + intrcnt[ih->ih_intrcnt_idx]++; if (intr_event_handle(ih->ih_event, tf) != 0) { /* Stray IRQ */ arm_mask_irq(ih); @@ -241,44 +243,45 @@ arm_setup_irqhandler(device_t dev, drive arm_unmask_irq(ih); - debugf("self interrupt controller %p\n", ih->ih_self); -#if 0 last_printed += snprintf(intrnames + last_printed, - MAXCOMLEN + 1, - "irq%d: %s", irq, device_get_nameunit(dev)); + MAXCOMLEN + 1, "%s:%d: %s", + device_get_nameunit(pic->ic_dev), + ih->ih_irq, device_get_nameunit(dev)); + last_printed++; - intrcnt_tab[irq] = intrcnt_index; + ih->ih_intrcnt_idx = intrcnt_index; intrcnt_index++; -#endif } intr_event_add_handler(ih->ih_event, device_get_nameunit(dev), filt, hand, arg, intr_priority(flags), flags, cookiep); - - debugf("done\n"); - *cookiep = ih; } int arm_remove_irqhandler(int irq, void *cookie) { - struct arm_intr_handler *ih = (struct arm_intr_handler *)ih; - /* - struct intr_event *event; + struct arm_intr_controller *pic; + struct arm_intr_handler *ih; int error; - event = intr_events[irq]; - arm_mask_irq(irq); - + if (irq < 0) + return (ENXIO); + + pic = &arm_pics[IRQ_PIC_IDX(irq)]; + ih = arm_lookup_intr_handler(pic->ic_dev, IRQ_VECTOR_IDX(irq)); + + if (ih->ih_event == NULL) + return (ENXIO); + + arm_mask_irq(ih); error = intr_event_remove_handler(cookie); - if (!TAILQ_EMPTY(&event->ie_handlers)) - arm_unmask_irq(irq); + if (!TAILQ_EMPTY(&ih->ih_event->ie_handlers)) + arm_unmask_irq(ih); + return (error); - */ - return (ENXIO); } void