Changeset 0d5e41a in rtems


Ignore:
Timestamp:
12/01/22 07:55:24 (4 months ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
master
Children:
c46fbb9
Parents:
71d1acd
git-author:
Sebastian Huber <sebastian.huber@…> (12/01/22 07:55:24)
git-committer:
Sebastian Huber <sebastian.huber@…> (12/02/22 09:25:44)
Message:

bsps/irq: Add bsp_interrupt_get_dispatch_table_slot()

Update #4769.

Location:
bsps
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • bsps/include/bsp/irq-generic.h

    r71d1acd r0d5e41a  
    664664}
    665665
     666/**
     667 * @brief Gets a reference to the interrupt handler table slot associated with
     668 *   the index.
     669 *
     670 * @return Returns a reference to the interrupt handler table slot associated
     671 *   with the index.
     672 */
     673rtems_interrupt_entry **bsp_interrupt_get_dispatch_table_slot(
     674  rtems_vector_number index
     675);
     676
    666677#ifdef __cplusplus
    667678}
  • bsps/shared/irq/irq-entry-remove.c

    r71d1acd r0d5e41a  
    4848
    4949  index = bsp_interrupt_dispatch_index( vector );
    50   first = bsp_interrupt_dispatch_table[ index ];
     50  first = *bsp_interrupt_get_dispatch_table_slot( index );
    5151  entry_next = entry->next;
    5252
  • bsps/shared/irq/irq-generic.c

    r71d1acd r0d5e41a  
    5050bsp_interrupt_dispatch_table[ BSP_INTERRUPT_DISPATCH_TABLE_SIZE ];
    5151
     52RTEMS_WEAK rtems_interrupt_entry **bsp_interrupt_get_dispatch_table_slot(
     53  rtems_vector_number index
     54)
     55{
     56  return &bsp_interrupt_dispatch_table[ index ];
     57}
     58
    5259/* The last entry indicates if everything is initialized */
    5360uint8_t bsp_interrupt_handler_unique_table
     
    9299   * to carry out an atomic read-modify-write operation.
    93100   */
    94   ptr = (Atomic_Uintptr *) &bsp_interrupt_dispatch_table[
     101  ptr = (Atomic_Uintptr *) bsp_interrupt_get_dispatch_table_slot(
    95102    bsp_interrupt_dispatch_index( vector )
    96   ];
     103  );
    97104  first = (rtems_interrupt_entry *)
    98105    _Atomic_Fetch_add_uintptr( ptr, 0, ATOMIC_ORDER_ACQUIRE );
     
    144151  bsp_interrupt_assert( bsp_interrupt_is_valid_vector( vector ) );
    145152  index = bsp_interrupt_dispatch_index( vector );
    146   *previous_next = &bsp_interrupt_dispatch_table[ index ];
    147   entry = bsp_interrupt_dispatch_table[ index ];
     153  *previous_next = bsp_interrupt_get_dispatch_table_slot( index );
     154  entry = **previous_next;
    148155
    149156  while ( entry != NULL ) {
     
    188195#endif
    189196  bsp_interrupt_entry_store_release(
    190     &bsp_interrupt_dispatch_table[ index ],
     197    bsp_interrupt_get_dispatch_table_slot( index ),
    191198    entry
    192199  );
     
    221228
    222229  index = bsp_interrupt_dispatch_index( vector );
    223   first = bsp_interrupt_dispatch_table[ index ];
     230  first = *bsp_interrupt_get_dispatch_table_slot( index );
    224231
    225232  if ( first == NULL ) {
  • bsps/shared/irq/irq-handler-iterate.c

    r71d1acd r0d5e41a  
    5858
    5959  index = bsp_interrupt_dispatch_index( vector );
     60  entry = *bsp_interrupt_get_dispatch_table_slot( index );
    6061  options = bsp_interrupt_is_handler_unique( index ) ?
    6162    RTEMS_INTERRUPT_UNIQUE : RTEMS_INTERRUPT_SHARED;
    62   entry = bsp_interrupt_dispatch_table[ index ];
    6363
    6464  while ( entry != NULL ) {
Note: See TracChangeset for help on using the changeset viewer.