Changeset 2f50f0a in rtems-libbsd


Ignore:
Timestamp:
Jul 11, 2012, 1:49:13 PM (7 years ago)
Author:
Jennifer Averett <jennifer.averett@…>
Branches:
4.11, fd86c091b97759106da7355ce1dd81ebe030e285, freebsd-9.3, f020f08430150c1656a0ad0a1de13699db9b980b
Children:
59f69ea
Parents:
237c763
Message:

Added nexus_setup_intr support and did some cleanup.

Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • freebsd-to-rtems.py

    r237c763 r2f50f0a  
    515515                'rtems/machine/rtems-bsd-taskqueue.h',
    516516                'rtems/machine/rtems-bsd-bus-dma.h',
     517                'rtems/machine/rtems-bsd-bus-devicet.h',
    517518                'bsd.h',
    518519        ]
  • rtemsbsd/src/rtems-bsd-nexus.c

    r237c763 r2f50f0a  
    5050#include <freebsd/sys/malloc.h>
    5151
     52#include <bsp.h>
     53#include <freebsd/machine/rtems-bsd-devicet.h>
     54#include <bsp/irq.h>
     55#include <rtems/irq.h>
     56
    5257#if defined(__i386__)
    5358#include <freebsd/machine/rtems-bsd-config.h>
     
    109114         */
    110115        for (irq = 0; irq < NUM_IO_INTS; irq++)
    111 #ifndef __rtems__
    112                 if (intr_lookup_source(irq) != NULL)
    113 #endif
    114                         if (rman_manage_region(&irq_rman, irq, irq) != 0)
    115                                 panic("nexus_init_resources irq_rmand");
     116          if (rman_manage_region(&irq_rman, irq, irq) != 0)
     117            panic("nexus_init_resources irq_rmand");
    116118 
    117119        /*
     
    242244        switch (type) {
    243245        case SYS_RES_IRQ:
    244 printf( "nexus_alloc_resource: IRQ\n" );
    245246                rm = &irq_rman;
    246247                break;
    247248
    248249        case SYS_RES_DRQ:
    249 printf( "nexus_alloc_resource: DRQ\n" );
    250250                rm = &drq_rman;
    251251                break;
    252252
    253253        case SYS_RES_IOPORT:
    254 printf( "nexus_alloc_resource: IO\n" );
    255254                rm = &port_rman;
    256255                break;
    257256
    258257        case SYS_RES_MEMORY:
    259 printf( "nexus_alloc_resource: Memory\n" );
    260258                rm = &mem_rman;
    261259                break;
     
    266264
    267265        rv = rman_reserve_resource(rm, start, end, count, flags, child);
    268 printf( "nexus_alloc_resource: rman_reserve_resource ==> %d\n", rv );
    269266        if (rv == 0)
    270267                return 0;
     
    273270        if (needactivate) {
    274271                if (bus_activate_resource(child, type, *rid, rv)) {
    275 printf( "nexus_alloc_resource: bus_activate_resource failed\n", rv );
    276272                        rman_release_resource(rv);
    277273                        return 0;
     
    354350        }
    355351        return (rman_release_resource(r));
     352}
     353
     354static void noop(const rtems_irq_connect_data *unused) {};
     355static int  noop1(const rtems_irq_connect_data *unused) { return 0;};
     356
     357static int
     358bspExtInstallSharedISR(int irqLine, void (*isr)(void *), void * uarg, int flags)
     359{
     360  return rtems_interrupt_handler_install(
     361    irqLine,
     362    "BSD Interrupt",
     363    RTEMS_INTERRUPT_SHARED,
     364    isr,
     365    uarg
     366  );
     367}
     368
     369int
     370intr_add_handler(const char *name, int vector, driver_filter_t filter,
     371    driver_intr_t handler, void *arg, enum intr_type flags, void **cookiep)
     372{
     373  int  rval;
     374 
     375  rval = bspExtInstallSharedISR(vector, handler, arg, 0);
     376  return rval;
     377}
     378
     379static int
     380nexus_setup_intr(device_t bus, device_t child, struct resource *irq,
     381                 int flags, driver_filter_t filter, void (*ihand)(void *),
     382                 void *arg, void **cookiep)
     383{
     384        int             error;
     385
     386        /* somebody tried to setup an irq that failed to allocate! */
     387        if (irq == NULL)
     388                panic("nexus_setup_intr: NULL irq resource!");
     389
     390        *cookiep = 0;
     391        if ((rman_get_flags(irq) & RF_SHAREABLE) == 0)
     392                flags |= INTR_EXCL;
     393
     394        /*
     395         * We depend here on rman_activate_resource() being idempotent.
     396         */
     397        error = rman_activate_resource(irq);
     398        if (error)
     399                return (error);
     400
     401        error = intr_add_handler(device_get_nameunit(child),
     402            rman_get_start(irq), filter, ihand, arg, flags, cookiep);
     403
     404        return (error);
    356405}
    357406
     
    373422        DEVMETHOD(bus_activate_resource, nexus_activate_resource),
    374423        DEVMETHOD(bus_deactivate_resource, nexus_deactivate_resource),
     424        DEVMETHOD(bus_setup_intr,       nexus_setup_intr),
    375425
    376426        { 0, 0 }
Note: See TracChangeset for help on using the changeset viewer.