Changeset 7f7a339 in rtems-libbsd


Ignore:
Timestamp:
Sep 27, 2017, 7:33:41 AM (19 months ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
647dd08ae2aa69b935c2847ea450fb824322ecae, c6261f97870562d4c797cfb1ff1ba0affb85a916
Children:
a70edfc
Parents:
e2e4bf4
git-author:
Sebastian Huber <sebastian.huber@…> (09/27/17 07:33:41)
git-committer:
Sebastian Huber <sebastian.huber@…> (09/27/17 09:02:07)
Message:

ffec: Support up to three interrupt requests

File:
1 edited

Legend:

Unmodified
Added
Removed
  • freebsd/sys/dev/ffec/if_ffec.c

    re2e4bf4 r7f7a339  
    134134#define STATS_HARVEST_INTERVAL  3
    135135
     136#define MAX_IRQ_COUNT 3
     137
    136138struct ffec_bufmap {
    137139        struct mbuf     *mbuf;
     
    153155        int                     if_flags;
    154156        struct mtx              mtx;
    155         struct resource         *irq_res;
     157        struct resource         *irq_res[MAX_IRQ_COUNT];
     158        int                     irq_count;
    156159        struct resource         *mem_res;
    157         void *                  intr_cookie;
     160        void *                  intr_cookie[MAX_IRQ_COUNT];
    158161        struct callout          ffec_callout;
    159162        uint8_t                 phy_conn_type;
     
    13651368        struct ffec_softc *sc;
    13661369        bus_dmamap_t map;
    1367         int idx;
     1370        int idx, irq;
    13681371
    13691372        /*
     
    14191422
    14201423        /* Release bus resources. */
    1421         if (sc->intr_cookie)
    1422                 bus_teardown_intr(dev, sc->irq_res, sc->intr_cookie);
    1423 
    1424         if (sc->irq_res != NULL)
    1425                 bus_release_resource(dev, SYS_RES_IRQ, 0, sc->irq_res);
     1424        for (irq = 0; irq < sc->irq_count; ++irq) {
     1425                if (sc->intr_cookie[irq])
     1426                        bus_teardown_intr(dev, sc->irq_res[irq],
     1427                            sc->intr_cookie[irq]);
     1428
     1429                if (sc->irq_res[irq] != NULL)
     1430                        bus_release_resource(dev, SYS_RES_IRQ, 0,
     1431                            sc->irq_res[irq]);
     1432        }
    14261433
    14271434        if (sc->mem_res != NULL)
     
    14391446        struct mbuf *m;
    14401447        phandle_t ofw_node;
    1441         int error, rid;
     1448        int error, rid, irq;
    14421449        uint8_t eaddr[ETHER_ADDR_LEN];
    14431450        char phy_conn_name[32];
     
    15071514                goto out;
    15081515        }
    1509         rid = 0;
    1510         sc->irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
    1511             RF_ACTIVE);
    1512         if (sc->irq_res == NULL) {
     1516        for (irq = 0; irq < MAX_IRQ_COUNT; ++irq) {
     1517                rid = irq;
     1518                sc->irq_res[irq] = bus_alloc_resource_any(dev, SYS_RES_IRQ,
     1519                    &rid, RF_ACTIVE);
     1520                if (sc->irq_res[irq] == NULL)
     1521                        break;
     1522        }
     1523        sc->irq_count = irq;
     1524        if (irq == 0) {
    15131525                device_printf(dev, "could not allocate interrupt resources.\n");
    15141526                error = ENOMEM;
     
    16671679
    16681680        /* Setup interrupt handler. */
    1669         error = bus_setup_intr(dev, sc->irq_res, INTR_TYPE_NET | INTR_MPSAFE,
    1670             NULL, ffec_intr, sc, &sc->intr_cookie);
    1671         if (error != 0) {
    1672                 device_printf(dev, "could not setup interrupt handler.\n");
    1673                 goto out;
     1681        for (irq = 0; irq < sc->irq_count; ++irq) {
     1682                error = bus_setup_intr(dev, sc->irq_res[irq],
     1683                    INTR_TYPE_NET | INTR_MPSAFE, NULL, ffec_intr, sc,
     1684                    &sc->intr_cookie[irq]);
     1685                if (error != 0) {
     1686                        device_printf(dev,
     1687                            "could not setup interrupt handler.\n");
     1688                        goto out;
     1689                }
    16741690        }
    16751691
Note: See TracChangeset for help on using the changeset viewer.