Ignore:
Timestamp:
03/03/14 08:49:12 (10 years ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
4.11, 5, master
Children:
718124e
Parents:
8b50a55
git-author:
Sebastian Huber <sebastian.huber@…> (03/03/14 08:49:12)
git-committer:
Sebastian Huber <sebastian.huber@…> (03/06/14 08:43:58)
Message:

bsps: SMP support for generic interrupt support

File:
1 edited

Legend:

Unmodified
Added
Removed
  • c/src/lib/libbsp/shared/include/irq-generic.h

    r8b50a55 re0609ac  
    1010 * Based on concepts of Pavel Pisa, Till Straumann and Eric Valette.
    1111 *
    12  * Copyright (c) 2008-2012 embedded brains GmbH.
     12 * Copyright (c) 2008-2014 embedded brains GmbH.
    1313 *
    1414 *  embedded brains GmbH
    15  *  Obere Lagerstr. 30
     15 *  Dornierstr. 4
    1616 *  82178 Puchheim
    1717 *  Germany
     
    3030#include <rtems/irq-extension.h>
    3131
     32#ifdef RTEMS_SMP
     33  #include <rtems/score/atomic.h>
     34#endif
     35
    3236#include <bsp/irq.h>
    3337
     
    5357#ifndef BSP_INTERRUPT_HANDLER_TABLE_SIZE
    5458  #define BSP_INTERRUPT_HANDLER_TABLE_SIZE BSP_INTERRUPT_VECTOR_NUMBER
     59#endif
     60
     61/* Internal macros for SMP support, do not use externally */
     62#ifdef RTEMS_SMP
     63  #define bsp_interrupt_disable(level) do { (void) level; } while (0)
     64  #define bsp_interrupt_enable(level) do { } while (0)
     65  #define bsp_interrupt_fence(order) _Atomic_Fence(order)
     66#else
     67  #define bsp_interrupt_disable(level) rtems_interrupt_disable(level)
     68  #define bsp_interrupt_enable(level) rtems_interrupt_enable(level)
     69  #define bsp_interrupt_fence(order) do { } while (0)
    5570#endif
    5671
     
    239254{
    240255  if (bsp_interrupt_is_valid_vector(vector)) {
    241     bsp_interrupt_handler_entry *e =
     256    const bsp_interrupt_handler_entry *e =
    242257      &bsp_interrupt_handler_table [bsp_interrupt_handler_index(vector)];
    243258
    244259    do {
    245       (*e->handler)(e->arg);
     260      rtems_interrupt_handler handler;
     261      void *arg;
     262
     263      arg = e->arg;
     264      bsp_interrupt_fence(ATOMIC_ORDER_ACQUIRE);
     265      handler = e->handler;
     266      (*handler)(arg);
     267
    246268      e = e->next;
    247269    } while (e != NULL);
Note: See TracChangeset for help on using the changeset viewer.