Changeset 0e08ff00 in rtems


Ignore:
Timestamp:
Aug 2, 2000, 9:12:36 PM (21 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, 4.8, 4.9, 5, master
Children:
5b8d82a2
Parents:
3393f6dd
Message:

Patch from Eric Norum <eric@…> to add optional support for
fast mutexes that bypass the API level to directly interface with the
SuperCore?.

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • c/src/exec/libnetworking/rtems/rtems_glue.c

    r3393f6dd r0e08ff00  
    22 *  $Id$
    33 */
     4
     5#define RTEMS_FAST_MUTEX
     6
     7#ifdef RTEMS_FAST_MUTEX
     8#define __RTEMS_VIOLATE_KERNEL_VISIBILITY__ 1
     9#endif
    410
    511#include <string.h>
     
    4652 */
    4753static rtems_id networkSemaphore;
     54#ifdef RTEMS_FAST_MUTEX
     55Semaphore_Control   *the_networkSemaphore;
     56#endif
    4857static rtems_id networkDaemonTid;
    4958static rtems_unsigned32 networkDaemonPriority;
     
    222231        sc = rtems_semaphore_create (rtems_build_name('B', 'S', 'D', 'n'),
    223232                                        0,
    224                                         RTEMS_FIFO |
     233                                        RTEMS_PRIORITY |
    225234                                                RTEMS_BINARY_SEMAPHORE |
    226                                                 RTEMS_NO_INHERIT_PRIORITY |
     235                                                RTEMS_INHERIT_PRIORITY |
    227236                                                RTEMS_NO_PRIORITY_CEILING |
    228237                                                RTEMS_LOCAL,
     
    233242                return -1;
    234243        }
     244#ifdef RTEMS_FAST_MUTEX
     245        {
     246        Objects_Locations location;
     247        the_networkSemaphore = _Semaphore_Get( networkSemaphore, &location );
     248        _Thread_Enable_dispatch();
     249        }
     250#endif
    235251
    236252        /*
     
    271287rtems_bsdnet_semaphore_obtain (void)
    272288{
     289#ifdef RTEMS_FAST_MUTEX
     290        ISR_Level level;
     291        _ISR_Disable (level);
     292        _CORE_mutex_Seize (
     293                &the_networkSemaphore->Core_control.mutex,
     294                networkSemaphore,
     295                1,              /* wait */
     296                0,              /* forever */
     297                level
     298                );
     299        if (_Thread_Executing->Wait.return_code)
     300                rtems_panic ("Can't obtain network semaphore\n");
     301#else
    273302        rtems_status_code sc;
    274303
     
    276305        if (sc != RTEMS_SUCCESSFUL)
    277306                rtems_panic ("Can't obtain network semaphore: `%s'\n", rtems_status_text (sc));
     307#endif
    278308}
    279309
     
    284314rtems_bsdnet_semaphore_release (void)
    285315{
     316#ifdef RTEMS_FAST_MUTEX
     317        int i;
     318
     319        _Thread_Disable_dispatch();
     320        i = _CORE_mutex_Surrender (
     321                &the_networkSemaphore->Core_control.mutex,
     322                networkSemaphore,
     323                NULL
     324                );
     325        _Thread_Enable_dispatch();
     326        if (i)
     327                rtems_panic ("Can't release network semaphore\n");
     328#else
    286329        rtems_status_code sc;
    287330
     
    289332        if (sc != RTEMS_SUCCESSFUL)
    290333                rtems_panic ("Can't release network semaphore: `%s'\n", rtems_status_text (sc));
    291                                                                                 }
     334#endif
     335}
    292336
    293337/*
  • c/src/libnetworking/rtems/rtems_glue.c

    r3393f6dd r0e08ff00  
    22 *  $Id$
    33 */
     4
     5#define RTEMS_FAST_MUTEX
     6
     7#ifdef RTEMS_FAST_MUTEX
     8#define __RTEMS_VIOLATE_KERNEL_VISIBILITY__ 1
     9#endif
    410
    511#include <string.h>
     
    4652 */
    4753static rtems_id networkSemaphore;
     54#ifdef RTEMS_FAST_MUTEX
     55Semaphore_Control   *the_networkSemaphore;
     56#endif
    4857static rtems_id networkDaemonTid;
    4958static rtems_unsigned32 networkDaemonPriority;
     
    222231        sc = rtems_semaphore_create (rtems_build_name('B', 'S', 'D', 'n'),
    223232                                        0,
    224                                         RTEMS_FIFO |
     233                                        RTEMS_PRIORITY |
    225234                                                RTEMS_BINARY_SEMAPHORE |
    226                                                 RTEMS_NO_INHERIT_PRIORITY |
     235                                                RTEMS_INHERIT_PRIORITY |
    227236                                                RTEMS_NO_PRIORITY_CEILING |
    228237                                                RTEMS_LOCAL,
     
    233242                return -1;
    234243        }
     244#ifdef RTEMS_FAST_MUTEX
     245        {
     246        Objects_Locations location;
     247        the_networkSemaphore = _Semaphore_Get( networkSemaphore, &location );
     248        _Thread_Enable_dispatch();
     249        }
     250#endif
    235251
    236252        /*
     
    271287rtems_bsdnet_semaphore_obtain (void)
    272288{
     289#ifdef RTEMS_FAST_MUTEX
     290        ISR_Level level;
     291        _ISR_Disable (level);
     292        _CORE_mutex_Seize (
     293                &the_networkSemaphore->Core_control.mutex,
     294                networkSemaphore,
     295                1,              /* wait */
     296                0,              /* forever */
     297                level
     298                );
     299        if (_Thread_Executing->Wait.return_code)
     300                rtems_panic ("Can't obtain network semaphore\n");
     301#else
    273302        rtems_status_code sc;
    274303
     
    276305        if (sc != RTEMS_SUCCESSFUL)
    277306                rtems_panic ("Can't obtain network semaphore: `%s'\n", rtems_status_text (sc));
     307#endif
    278308}
    279309
     
    284314rtems_bsdnet_semaphore_release (void)
    285315{
     316#ifdef RTEMS_FAST_MUTEX
     317        int i;
     318
     319        _Thread_Disable_dispatch();
     320        i = _CORE_mutex_Surrender (
     321                &the_networkSemaphore->Core_control.mutex,
     322                networkSemaphore,
     323                NULL
     324                );
     325        _Thread_Enable_dispatch();
     326        if (i)
     327                rtems_panic ("Can't release network semaphore\n");
     328#else
    286329        rtems_status_code sc;
    287330
     
    289332        if (sc != RTEMS_SUCCESSFUL)
    290333                rtems_panic ("Can't release network semaphore: `%s'\n", rtems_status_text (sc));
    291                                                                                 }
     334#endif
     335}
    292336
    293337/*
  • cpukit/libnetworking/rtems/rtems_glue.c

    r3393f6dd r0e08ff00  
    22 *  $Id$
    33 */
     4
     5#define RTEMS_FAST_MUTEX
     6
     7#ifdef RTEMS_FAST_MUTEX
     8#define __RTEMS_VIOLATE_KERNEL_VISIBILITY__ 1
     9#endif
    410
    511#include <string.h>
     
    4652 */
    4753static rtems_id networkSemaphore;
     54#ifdef RTEMS_FAST_MUTEX
     55Semaphore_Control   *the_networkSemaphore;
     56#endif
    4857static rtems_id networkDaemonTid;
    4958static rtems_unsigned32 networkDaemonPriority;
     
    222231        sc = rtems_semaphore_create (rtems_build_name('B', 'S', 'D', 'n'),
    223232                                        0,
    224                                         RTEMS_FIFO |
     233                                        RTEMS_PRIORITY |
    225234                                                RTEMS_BINARY_SEMAPHORE |
    226                                                 RTEMS_NO_INHERIT_PRIORITY |
     235                                                RTEMS_INHERIT_PRIORITY |
    227236                                                RTEMS_NO_PRIORITY_CEILING |
    228237                                                RTEMS_LOCAL,
     
    233242                return -1;
    234243        }
     244#ifdef RTEMS_FAST_MUTEX
     245        {
     246        Objects_Locations location;
     247        the_networkSemaphore = _Semaphore_Get( networkSemaphore, &location );
     248        _Thread_Enable_dispatch();
     249        }
     250#endif
    235251
    236252        /*
     
    271287rtems_bsdnet_semaphore_obtain (void)
    272288{
     289#ifdef RTEMS_FAST_MUTEX
     290        ISR_Level level;
     291        _ISR_Disable (level);
     292        _CORE_mutex_Seize (
     293                &the_networkSemaphore->Core_control.mutex,
     294                networkSemaphore,
     295                1,              /* wait */
     296                0,              /* forever */
     297                level
     298                );
     299        if (_Thread_Executing->Wait.return_code)
     300                rtems_panic ("Can't obtain network semaphore\n");
     301#else
    273302        rtems_status_code sc;
    274303
     
    276305        if (sc != RTEMS_SUCCESSFUL)
    277306                rtems_panic ("Can't obtain network semaphore: `%s'\n", rtems_status_text (sc));
     307#endif
    278308}
    279309
     
    284314rtems_bsdnet_semaphore_release (void)
    285315{
     316#ifdef RTEMS_FAST_MUTEX
     317        int i;
     318
     319        _Thread_Disable_dispatch();
     320        i = _CORE_mutex_Surrender (
     321                &the_networkSemaphore->Core_control.mutex,
     322                networkSemaphore,
     323                NULL
     324                );
     325        _Thread_Enable_dispatch();
     326        if (i)
     327                rtems_panic ("Can't release network semaphore\n");
     328#else
    286329        rtems_status_code sc;
    287330
     
    289332        if (sc != RTEMS_SUCCESSFUL)
    290333                rtems_panic ("Can't release network semaphore: `%s'\n", rtems_status_text (sc));
    291                                                                                 }
     334#endif
     335}
    292336
    293337/*
Note: See TracChangeset for help on using the changeset viewer.