Changeset 5adf355a in rtems


Ignore:
Timestamp:
May 27, 1999, 4:11:52 PM (22 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, 4.8, 4.9, 5, master
Children:
556ea0e3
Parents:
1d1b1507
Message:

Split initialization and reserve resources from termios to reduce
size of mininum application.

Files:
6 added
4 edited

Legend:

Unmodified
Added
Removed
  • c/src/exec/libcsupport/src/termios.c

    r1d1b1507 r5adf355a  
    142142#define FL_MDXOF   0x400    /* output controlled with XON/XOFF protocol   */
    143143
    144 static struct rtems_termios_tty *ttyHead, *ttyTail;
    145 static rtems_id ttyMutex;
    146 
    147 /*
    148  *  Reserve enough resources to open every physical device once.
    149  */
    150 
    151 static int first_time;   /* assumed to be zeroed by BSS initialization */
    152 
    153 void
    154 rtems_termios_reserve_resources (
    155   rtems_configuration_table *configuration,
    156   rtems_unsigned32           number_of_devices
    157   )
    158 {
    159         rtems_api_configuration_table *rtems_config;
    160 
    161         if (!configuration)
    162                 rtems_fatal_error_occurred (0xFFF0F001);
    163         rtems_config = configuration->RTEMS_api_configuration;
    164         if (!rtems_config)
    165                 rtems_fatal_error_occurred (0xFFF0F002);
    166         if (!first_time)
    167                 rtems_config->maximum_semaphores += 1;
    168         first_time = 1;
    169         rtems_config->maximum_semaphores += (4 * number_of_devices);
    170 }
    171 
    172 void
    173 rtems_termios_initialize (void)
    174 {
    175         rtems_status_code sc;
    176 
    177         /*
    178          * Create the mutex semaphore for the tty list
    179          */
    180         if (!ttyMutex) {
    181                 sc = rtems_semaphore_create (
    182                         rtems_build_name ('T', 'R', 'm', 'i'),
    183                         1,
    184                         RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY,
    185                         RTEMS_NO_PRIORITY,
    186                         &ttyMutex);
    187                 if (sc != RTEMS_SUCCESSFUL)
    188                         rtems_fatal_error_occurred (sc);
    189         }
    190 }
    191        
     144extern struct rtems_termios_tty *rtems_termios_ttyHead;
     145extern struct rtems_termios_tty *rtems_termios_ttyTail;
     146extern rtems_id rtems_termios_ttyMutex;
     147
    192148/*
    193149 * Open a termios device
     
    208164         * See if the device has already been opened
    209165         */
    210         sc = rtems_semaphore_obtain (ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
     166        sc = rtems_semaphore_obtain (rtems_termios_ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
    211167        if (sc != RTEMS_SUCCESSFUL)
    212168                return sc;
    213         for (tty = ttyHead ; tty != NULL ; tty = tty->forw) {
     169        for (tty = rtems_termios_ttyHead ; tty != NULL ; tty = tty->forw) {
    214170                if ((tty->major == major) && (tty->minor == minor))
    215171                        break;
     
    223179                tty = calloc (1, sizeof (struct rtems_termios_tty));
    224180                if (tty == NULL) {
    225                         rtems_semaphore_release (ttyMutex);
     181                        rtems_semaphore_release (rtems_termios_ttyMutex);
    226182                        return RTEMS_NO_MEMORY;
    227183                }
    228                 tty->forw = ttyHead;
    229                 ttyHead = tty;
    230                 if (ttyTail == NULL)
    231                         ttyTail = tty;
     184                tty->forw = rtems_termios_ttyHead;
     185                rtems_termios_ttyHead = tty;
     186                if (rtems_termios_ttyTail == NULL)
     187                        rtems_termios_ttyTail = tty;
    232188
    233189                tty->minor = minor;
     
    318274        if (!tty->refcount++ && tty->device.firstOpen)
    319275                (*tty->device.firstOpen)(major, minor, arg);
    320         rtems_semaphore_release (ttyMutex);
     276        rtems_semaphore_release (rtems_termios_ttyMutex);
    321277        return RTEMS_SUCCESSFUL;
    322278}
     
    354310        rtems_status_code sc;
    355311
    356         sc = rtems_semaphore_obtain (ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
     312        sc = rtems_semaphore_obtain (rtems_termios_ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
    357313        if (sc != RTEMS_SUCCESSFUL)
    358314                rtems_fatal_error_occurred (sc);
     
    362318                         (*tty->device.lastClose)(tty->major, tty->minor, arg);
    363319                if (tty->forw == NULL)
    364                         ttyTail = tty->back;
     320                        rtems_termios_ttyTail = tty->back;
    365321                else
    366322                        tty->forw->back = tty->back;
    367323                if (tty->back == NULL)
    368                         ttyHead = tty->forw;
     324                        rtems_termios_ttyHead = tty->forw;
    369325                else
    370326                        tty->back->forw = tty->forw;
     
    376332                free (tty);
    377333        }
    378         rtems_semaphore_release (ttyMutex);
     334        rtems_semaphore_release (rtems_termios_ttyMutex);
    379335        return RTEMS_SUCCESSFUL;
    380336}
  • c/src/lib/libc/Makefile.in

    r1d1b1507 r5adf355a  
    2929
    3030TERMIOS_PIECES= cfgetispeed cfgetospeed cfsetispeed cfsetospeed \
    31   tcgetattr tcsetattr tcdrain termios
     31  tcgetattr tcsetattr tcdrain termios termiosinitialize \
     32  termiosreserveresources
    3233
    3334SYSTEM_CALL_PIECES=\
  • c/src/lib/libc/termios.c

    r1d1b1507 r5adf355a  
    142142#define FL_MDXOF   0x400    /* output controlled with XON/XOFF protocol   */
    143143
    144 static struct rtems_termios_tty *ttyHead, *ttyTail;
    145 static rtems_id ttyMutex;
    146 
    147 /*
    148  *  Reserve enough resources to open every physical device once.
    149  */
    150 
    151 static int first_time;   /* assumed to be zeroed by BSS initialization */
    152 
    153 void
    154 rtems_termios_reserve_resources (
    155   rtems_configuration_table *configuration,
    156   rtems_unsigned32           number_of_devices
    157   )
    158 {
    159         rtems_api_configuration_table *rtems_config;
    160 
    161         if (!configuration)
    162                 rtems_fatal_error_occurred (0xFFF0F001);
    163         rtems_config = configuration->RTEMS_api_configuration;
    164         if (!rtems_config)
    165                 rtems_fatal_error_occurred (0xFFF0F002);
    166         if (!first_time)
    167                 rtems_config->maximum_semaphores += 1;
    168         first_time = 1;
    169         rtems_config->maximum_semaphores += (4 * number_of_devices);
    170 }
    171 
    172 void
    173 rtems_termios_initialize (void)
    174 {
    175         rtems_status_code sc;
    176 
    177         /*
    178          * Create the mutex semaphore for the tty list
    179          */
    180         if (!ttyMutex) {
    181                 sc = rtems_semaphore_create (
    182                         rtems_build_name ('T', 'R', 'm', 'i'),
    183                         1,
    184                         RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY,
    185                         RTEMS_NO_PRIORITY,
    186                         &ttyMutex);
    187                 if (sc != RTEMS_SUCCESSFUL)
    188                         rtems_fatal_error_occurred (sc);
    189         }
    190 }
    191        
     144extern struct rtems_termios_tty *rtems_termios_ttyHead;
     145extern struct rtems_termios_tty *rtems_termios_ttyTail;
     146extern rtems_id rtems_termios_ttyMutex;
     147
    192148/*
    193149 * Open a termios device
     
    208164         * See if the device has already been opened
    209165         */
    210         sc = rtems_semaphore_obtain (ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
     166        sc = rtems_semaphore_obtain (rtems_termios_ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
    211167        if (sc != RTEMS_SUCCESSFUL)
    212168                return sc;
    213         for (tty = ttyHead ; tty != NULL ; tty = tty->forw) {
     169        for (tty = rtems_termios_ttyHead ; tty != NULL ; tty = tty->forw) {
    214170                if ((tty->major == major) && (tty->minor == minor))
    215171                        break;
     
    223179                tty = calloc (1, sizeof (struct rtems_termios_tty));
    224180                if (tty == NULL) {
    225                         rtems_semaphore_release (ttyMutex);
     181                        rtems_semaphore_release (rtems_termios_ttyMutex);
    226182                        return RTEMS_NO_MEMORY;
    227183                }
    228                 tty->forw = ttyHead;
    229                 ttyHead = tty;
    230                 if (ttyTail == NULL)
    231                         ttyTail = tty;
     184                tty->forw = rtems_termios_ttyHead;
     185                rtems_termios_ttyHead = tty;
     186                if (rtems_termios_ttyTail == NULL)
     187                        rtems_termios_ttyTail = tty;
    232188
    233189                tty->minor = minor;
     
    318274        if (!tty->refcount++ && tty->device.firstOpen)
    319275                (*tty->device.firstOpen)(major, minor, arg);
    320         rtems_semaphore_release (ttyMutex);
     276        rtems_semaphore_release (rtems_termios_ttyMutex);
    321277        return RTEMS_SUCCESSFUL;
    322278}
     
    354310        rtems_status_code sc;
    355311
    356         sc = rtems_semaphore_obtain (ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
     312        sc = rtems_semaphore_obtain (rtems_termios_ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
    357313        if (sc != RTEMS_SUCCESSFUL)
    358314                rtems_fatal_error_occurred (sc);
     
    362318                         (*tty->device.lastClose)(tty->major, tty->minor, arg);
    363319                if (tty->forw == NULL)
    364                         ttyTail = tty->back;
     320                        rtems_termios_ttyTail = tty->back;
    365321                else
    366322                        tty->forw->back = tty->back;
    367323                if (tty->back == NULL)
    368                         ttyHead = tty->forw;
     324                        rtems_termios_ttyHead = tty->forw;
    369325                else
    370326                        tty->back->forw = tty->forw;
     
    376332                free (tty);
    377333        }
    378         rtems_semaphore_release (ttyMutex);
     334        rtems_semaphore_release (rtems_termios_ttyMutex);
    379335        return RTEMS_SUCCESSFUL;
    380336}
  • cpukit/libcsupport/src/termios.c

    r1d1b1507 r5adf355a  
    142142#define FL_MDXOF   0x400    /* output controlled with XON/XOFF protocol   */
    143143
    144 static struct rtems_termios_tty *ttyHead, *ttyTail;
    145 static rtems_id ttyMutex;
    146 
    147 /*
    148  *  Reserve enough resources to open every physical device once.
    149  */
    150 
    151 static int first_time;   /* assumed to be zeroed by BSS initialization */
    152 
    153 void
    154 rtems_termios_reserve_resources (
    155   rtems_configuration_table *configuration,
    156   rtems_unsigned32           number_of_devices
    157   )
    158 {
    159         rtems_api_configuration_table *rtems_config;
    160 
    161         if (!configuration)
    162                 rtems_fatal_error_occurred (0xFFF0F001);
    163         rtems_config = configuration->RTEMS_api_configuration;
    164         if (!rtems_config)
    165                 rtems_fatal_error_occurred (0xFFF0F002);
    166         if (!first_time)
    167                 rtems_config->maximum_semaphores += 1;
    168         first_time = 1;
    169         rtems_config->maximum_semaphores += (4 * number_of_devices);
    170 }
    171 
    172 void
    173 rtems_termios_initialize (void)
    174 {
    175         rtems_status_code sc;
    176 
    177         /*
    178          * Create the mutex semaphore for the tty list
    179          */
    180         if (!ttyMutex) {
    181                 sc = rtems_semaphore_create (
    182                         rtems_build_name ('T', 'R', 'm', 'i'),
    183                         1,
    184                         RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY | RTEMS_PRIORITY,
    185                         RTEMS_NO_PRIORITY,
    186                         &ttyMutex);
    187                 if (sc != RTEMS_SUCCESSFUL)
    188                         rtems_fatal_error_occurred (sc);
    189         }
    190 }
    191        
     144extern struct rtems_termios_tty *rtems_termios_ttyHead;
     145extern struct rtems_termios_tty *rtems_termios_ttyTail;
     146extern rtems_id rtems_termios_ttyMutex;
     147
    192148/*
    193149 * Open a termios device
     
    208164         * See if the device has already been opened
    209165         */
    210         sc = rtems_semaphore_obtain (ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
     166        sc = rtems_semaphore_obtain (rtems_termios_ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
    211167        if (sc != RTEMS_SUCCESSFUL)
    212168                return sc;
    213         for (tty = ttyHead ; tty != NULL ; tty = tty->forw) {
     169        for (tty = rtems_termios_ttyHead ; tty != NULL ; tty = tty->forw) {
    214170                if ((tty->major == major) && (tty->minor == minor))
    215171                        break;
     
    223179                tty = calloc (1, sizeof (struct rtems_termios_tty));
    224180                if (tty == NULL) {
    225                         rtems_semaphore_release (ttyMutex);
     181                        rtems_semaphore_release (rtems_termios_ttyMutex);
    226182                        return RTEMS_NO_MEMORY;
    227183                }
    228                 tty->forw = ttyHead;
    229                 ttyHead = tty;
    230                 if (ttyTail == NULL)
    231                         ttyTail = tty;
     184                tty->forw = rtems_termios_ttyHead;
     185                rtems_termios_ttyHead = tty;
     186                if (rtems_termios_ttyTail == NULL)
     187                        rtems_termios_ttyTail = tty;
    232188
    233189                tty->minor = minor;
     
    318274        if (!tty->refcount++ && tty->device.firstOpen)
    319275                (*tty->device.firstOpen)(major, minor, arg);
    320         rtems_semaphore_release (ttyMutex);
     276        rtems_semaphore_release (rtems_termios_ttyMutex);
    321277        return RTEMS_SUCCESSFUL;
    322278}
     
    354310        rtems_status_code sc;
    355311
    356         sc = rtems_semaphore_obtain (ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
     312        sc = rtems_semaphore_obtain (rtems_termios_ttyMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
    357313        if (sc != RTEMS_SUCCESSFUL)
    358314                rtems_fatal_error_occurred (sc);
     
    362318                         (*tty->device.lastClose)(tty->major, tty->minor, arg);
    363319                if (tty->forw == NULL)
    364                         ttyTail = tty->back;
     320                        rtems_termios_ttyTail = tty->back;
    365321                else
    366322                        tty->forw->back = tty->back;
    367323                if (tty->back == NULL)
    368                         ttyHead = tty->forw;
     324                        rtems_termios_ttyHead = tty->forw;
    369325                else
    370326                        tty->back->forw = tty->forw;
     
    376332                free (tty);
    377333        }
    378         rtems_semaphore_release (ttyMutex);
     334        rtems_semaphore_release (rtems_termios_ttyMutex);
    379335        return RTEMS_SUCCESSFUL;
    380336}
Note: See TracChangeset for help on using the changeset viewer.