Date: Mon, 6 Aug 2012 17:58:59 +0000 (UTC) From: Jakub Wojciech Klama <jceel@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r239098 - user/jceel/soc2012_armv6/sys/arm/arm Message-ID: <201208061758.q76Hwx2r065419@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201208061758.q76Hwx2r065419>