Ignore:
Timestamp:
09/27/95 20:53:58 (28 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, 4.8, 4.9, 5, master
Children:
07058e7
Parents:
c701f197
Message:

Modified UNIX simulator port so all references to native unix
stuff is in the executive source proper in the file cpu.c. This
should help avoid conflicts between RTEMS POSIX files and UNIX files.

Location:
c/src/lib/libbsp/unix/posix/shmsupp
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • c/src/lib/libbsp/unix/posix/shmsupp/addrconv.c

    rc701f197 r37f4c2d  
    2020 */
    2121
    22 #include <rtems.h>
    23 
    2422#include <bsp.h>
    2523#include <shm.h>
  • c/src/lib/libbsp/unix/posix/shmsupp/getcfg.c

    rc701f197 r37f4c2d  
    2626 */
    2727
    28 #include <rtems.h>
    29 
     28#include <bsp.h>
    3029#include <shm.h>
    31 #include <bsp.h>
    32 
    33 #include <sys/types.h>
    34 #include <stdio.h>
    35 #include <errno.h>
    36 #include <unistd.h>
    37 #include <stdlib.h>
    38 #include <sys/ipc.h>
    39 #include <sys/shm.h>
    40 #include <sys/sem.h>
    4130
    4231shm_config_table BSP_shm_cfgtbl;
     
    4837);
    4938
    50 void fix_semaphores( void )
    51 {
    52     rtems_unsigned32 maximum_nodes;
    53     int          i;
    54 
    55     int          shmid;
    56     char        *shm_addr;
    57     key_t        shm_key;
    58     key_t        sem_key;
    59     int          status;
    60     int          shm_size;
    61 
    62     if (getenv("RTEMS_SHM_KEY"))
    63         shm_key = strtol(getenv("RTEMS_SHM_KEY"), 0, 0);
    64     else
    65 #ifdef RTEMS_SHM_KEY
    66         shm_key = RTEMS_SHM_KEY;
    67 #else
    68         shm_key = 0xa000;
    69 #endif
    70  
    71     if (getenv("RTEMS_SHM_SIZE"))
    72         shm_size = strtol(getenv("RTEMS_SHM_SIZE"), 0, 0);
    73     else
    74 #ifdef RTEMS_SHM_SIZE
    75         shm_size = RTEMS_SHM_SIZE;
    76 #else
    77         shm_size = 64 * KILOBYTE;
    78 #endif
    79  
    80     if (getenv("RTEMS_SHM_SEMAPHORE_KEY"))
    81         sem_key = strtol(getenv("RTEMS_SHM_SEMAPHORE_KEY"), 0, 0);
    82     else
    83 #ifdef RTEMS_SHM_SEMAPHORE_KEY
    84         sem_key = RTEMS_SHM_SEMAPHORE_KEY;
    85 #else
    86         sem_key = 0xa001;
    87 #endif
    88 
    89     shmid = shmget(shm_key, shm_size, IPC_CREAT | 0660);
    90     if ( shmid == -1 ) {
    91        fix_syscall_errno(); /* in case of newlib */
    92        perror( "shmget" );
    93        rtems_fatal_error_occurred(RTEMS_UNSATISFIED);
    94     }
    95 
    96     shm_addr = shmat(shmid, (char *)0, SHM_RND);
    97     if ( shm_addr == (void *)-1 ) {
    98        fix_syscall_errno(); /* in case of newlib */
    99        perror( "shmat" );
    100        rtems_fatal_error_occurred(RTEMS_UNSATISFIED);
    101     }
    102 
    103     maximum_nodes = Shm_RTEMS_MP_Configuration->maximum_nodes;
    104     semid = semget(sem_key, maximum_nodes + 1, IPC_CREAT | 0660);
    105     if ( semid == -1 ) {
    106        fix_syscall_errno(); /* in case of newlib */
    107        perror( "semget" );
    108        rtems_fatal_error_occurred(RTEMS_UNSATISFIED);
    109     }
    110 
    111     if ( Shm_Is_master_node() ) {
    112       for ( i=0 ; i <= maximum_nodes ; i++ ) {
    113 
    114 #if defined(solaris2)
    115         union semun {
    116           int val;
    117           struct semid_ds *buf;
    118           ushort *array;
    119         } help;
    120  
    121         help.val = 1;
    122         semctl( semid, i, SETVAL, help );
    123 #endif
    124 #if defined(hpux)
    125         semctl( semid, i, SETVAL, 1 );
    126 #endif
    127 
    128         fix_syscall_errno(); /* in case of newlib */
    129         if ( status == -1 ) {
    130           fprintf( stderr, "Sem init failed %d\n", errno ); fflush( stderr );
    131           rtems_fatal_error_occurred(RTEMS_UNSATISFIED);
    132         }
    133       }
    134     }
    135 
    136     BSP_shm_cfgtbl.base         = (vol_u32 *)shm_addr;
    137     BSP_shm_cfgtbl.length       = shm_size;
    138 }
    139 
    14039void Shm_Get_configuration(
    14140  rtems_unsigned32   localnode,
     
    14342)
    14443{
    145     fix_semaphores();
     44  _CPU_SHM_Init(
     45    Shm_Maximum_nodes,
     46    Shm_Is_master_node(),
     47    (void **)&BSP_shm_cfgtbl.base,
     48    (unsigned32 *)&BSP_shm_cfgtbl.length
     49  );
    14650
    147     BSP_shm_cfgtbl.format       = SHM_BIG;
     51  BSP_shm_cfgtbl.format       = SHM_BIG;
    14852
    149     BSP_shm_cfgtbl.cause_intr   = Shm_Cause_interrupt_unix;
     53  BSP_shm_cfgtbl.cause_intr   = Shm_Cause_interrupt_unix;
    15054
    15155#ifdef NEUTRAL_BIG
    152     BSP_shm_cfgtbl.convert      = NULL_CONVERT;
     56  BSP_shm_cfgtbl.convert      = NULL_CONVERT;
    15357#else
    154     BSP_shm_cfgtbl.convert      = CPU_swap_u32;
     58  BSP_shm_cfgtbl.convert      = CPU_swap_u32;
    15559#endif
    15660
    157 #ifdef INTERRUPT_EXTERNAL_MPCI
     61  if ( _CPU_SHM_Get_vector() ) {
    15862    BSP_shm_cfgtbl.poll_intr    = INTR_MODE;
    159     BSP_shm_cfgtbl.Intr.address = (vol_u32 *) getpid();    /* process id */
    160     BSP_shm_cfgtbl.Intr.value   = INTERRUPT_EXTERNAL_MPCI; /* signal to send */
     63    BSP_shm_cfgtbl.Intr.address = (vol_u32 *) _CPU_Get_pid(); /* process id */
     64    BSP_shm_cfgtbl.Intr.value   = _CPU_SHM_Get_vector(); /* signal to send */
    16165    BSP_shm_cfgtbl.Intr.length  = LONG;
    162 #else
     66  } else {
    16367    BSP_shm_cfgtbl.poll_intr    = POLLED_MODE;
    16468    BSP_shm_cfgtbl.Intr.address = NO_INTERRUPT;
    16569    BSP_shm_cfgtbl.Intr.value   = NO_INTERRUPT;
    16670    BSP_shm_cfgtbl.Intr.length  = NO_INTERRUPT;
    167 #endif
     71  }
    16872
    169     *shmcfg = &BSP_shm_cfgtbl;
     73  *shmcfg = &BSP_shm_cfgtbl;
    17074}
  • c/src/lib/libbsp/unix/posix/shmsupp/intr.c

    rc701f197 r37f4c2d  
    2020 */
    2121
    22 #include <rtems.h>
     22#include <bsp.h>
    2323#include <shm.h>
    2424
    25 #include <stdio.h>
    26 #include <signal.h>
    27  
    2825void Shm_Cause_interrupt_unix(
    2926  rtems_unsigned32 node
    3027)
    3128{
    32     Shm_Interrupt_information *intr;
    33     intr = &Shm_Interrupt_table[node];
     29  Shm_Interrupt_information *intr;
     30  intr = &Shm_Interrupt_table[node];
    3431 
    35     kill((pid_t) intr->address, intr->value);
     32  _CPU_SHM_Send_interrupt( (int) intr->address, (int) intr->value );
    3633}
  • c/src/lib/libbsp/unix/posix/shmsupp/lock.c

    rc701f197 r37f4c2d  
    1818 */
    1919
    20 #include <rtems.h>
    21 
    2220#include <bsp.h>
    2321#include <shm.h>
    24 
    25 #include <errno.h>
    26 #include <stdio.h>
    27 #include <unistd.h>
    28 #include <sys/ipc.h>
    29 #include <sys/shm.h>
    30 #include <sys/sem.h>
    3122
    3223extern int      semid;
     
    5647)
    5748{
    58     rtems_unsigned32   isr_level;
    59     struct sembuf      sb;
    60     int                status;
     49  rtems_unsigned32   isr_level;
    6150
    62     sb.sem_num = lq_cb->lock;
    63     sb.sem_op  = -1;
    64     sb.sem_flg = 0;
     51  rtems_interrupt_disable( isr_level );
    6552
    66     rtems_interrupt_disable( isr_level );
     53  Shm_isrstat = isr_level;
    6754
    68     Shm_isrstat = isr_level;
    69 
    70     while (1) {
    71       status = semop(semid, &sb, 1);
    72       if ( status >= 0 )
    73         break;
    74       if ( status == -1 ) {
    75          fix_syscall_errno();    /* in case of newlib */
    76           if (errno == EINTR)
    77               continue;
    78           perror("shm lock");
    79           rtems_fatal_error_occurred(RTEMS_UNSATISFIED);
    80       }
    81     }
     55  _CPU_SHM_Lock( lq_cb->lock );
    8256}
    8357
     
    9266)
    9367{
    94     rtems_unsigned32   isr_level;
    95     struct sembuf      sb;
    96     int                status;
     68  rtems_unsigned32   isr_level;
    9769
    98     sb.sem_num = lq_cb->lock;
    99     sb.sem_op  = 1;
    100     sb.sem_flg = 0;
     70  _CPU_SHM_Unlock( lq_cb->lock );
    10171
    102     while (1) {
    103       status = semop(semid, &sb, 1);
    104       if ( status >= 0 )
    105         break;
    106 
    107       if ( status == -1 ) {
    108           fix_syscall_errno();    /* in case of newlib */
    109           if (errno == EINTR)
    110               continue;
    111           perror("shm unlock");
    112           rtems_fatal_error_occurred(RTEMS_UNSATISFIED);
    113       }
    114     }
    115 
    116     isr_level = Shm_isrstat;
    117     rtems_interrupt_enable( isr_level );
     72  isr_level = Shm_isrstat;
     73  rtems_interrupt_enable( isr_level );
    11874}
  • c/src/lib/libbsp/unix/posix/shmsupp/mpisr.c

    rc701f197 r37f4c2d  
    1919 */
    2020
    21 #include <rtems.h>
    22 
    2321#include <bsp.h>
    2422#include <shm.h>
     
    2624void Shm_setvec( void )
    2725{
    28 #ifdef INTERRUPT_EXTERNAL_MPCI
    29   set_vector( Shm_isr, INTERRUPT_EXTERNAL_MPCI, 1 );
    30 #endif
     26  int vector;
     27
     28  vector = _CPU_SHM_Get_vector();
     29
     30  if ( vector )
     31    set_vector( Shm_isr, vector, 1 );
    3132}
Note: See TracChangeset for help on using the changeset viewer.