Changeset 3a4ae6c in rtems for c/src/lib/libbsp/i960


Ignore:
Timestamp:
09/11/95 19:35:39 (28 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, 4.8, 4.9, 5, master
Children:
ced11f99
Parents:
5072b07
Message:

The word "RTEMS" almost completely removed from the core.

Configuration Table Template file added and all tests
modified to use this. All gvar.h and conftbl.h files
removed from test directories.

Configuration parameter maximum_devices added.

Core semaphore and mutex handlers added and RTEMS API Semaphore
Manager updated to reflect this.

Initialization sequence changed to invoke API specific initialization
routines. Initialization tasks table now owned by RTEMS Tasks Manager.

Added user extension for post-switch.

Utilized user extensions to implement API specific functionality
like signal dispatching.

Added extensions to the System Initialization Thread so that an
API can register a function to be invoked while the system
is being initialized. These are largely equivalent to the
pre-driver and post-driver hooks.

Added the Modules file oar-go32_p5, modified oar-go32, and modified
the file make/custom/go32.cfg to look at an environment varable which
determines what CPU model is being used.

All BSPs updated to reflect named devices and clock driver's IOCTL
used by the Shared Memory Driver. Also merged clock isr into
main file and removed ckisr.c where possible.

Updated spsize to reflect new and moved variables.

Makefiles for the executive source and include files updated to show
break down of files into Core, RTEMS API, and Neither.

Header and inline files installed into subdirectory based on whether
logically in the Core or a part of the RTEMS API.

Location:
c/src/lib/libbsp/i960/cvme961
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • c/src/lib/libbsp/i960/cvme961/clock/ckinit.c

    r5072b07 r3a4ae6c  
    2121#include <stdlib.h>
    2222
    23 #include <rtems.h>
    2423#include <bsp.h>
    25 #include <clockdrv.h>
     24#include <rtems/libio.h>
     25
     26#define CLOCK_VECTOR 5
    2627
    2728rtems_unsigned32 Clock_isrs;              /* ISRs until next tick */
     
    3031                                          /* ticks since initialization */
    3132
    32 rtems_device_driver Clock_initialize(
    33   rtems_device_major_number major,
    34   rtems_device_minor_number minor,
    35   void *pargp,
    36   rtems_id id,
    37   rtems_unsigned32 *rval )
    38 {
    39   Install_clock( Clock_isr );
    40   atexit( Clock_exit );
    41 }
     33void Clock_exit( void );
     34 
     35/*
     36 * These are set by clock driver during its init
     37 */
     38 
     39rtems_device_major_number rtems_clock_major = ~0;
     40rtems_device_minor_number rtems_clock_minor;
    4241
    43 void ReInstall_clock(
    44   rtems_isr_entry clock_isr
    45 )
    46 {
    47    (void) set_vector( clock_isr, 5, 1 );
    48 }
     42
     43/* this is later in the file to avoid it being inlined */
     44rtems_isr Clock_isr( rtems_vector_number vector );
    4945
    5046void Install_clock(
     
    5854
    5955  if ( BSP_Configuration.ticks_per_timeslice ) {
    60     Old_ticker = set_vector( clock_isr, 5, 1 );
     56    Old_ticker = set_vector( clock_isr, CLOCK_VECTOR, 1 );
    6157    victimer = (volatile unsigned char *) 0xa00000c3;
    6258    *victimer = 0x12;
    6359    *victimer = 0x92;      /* 1000 HZ */
    6460  }
     61}
     62
     63void ReInstall_clock(
     64  rtems_isr_entry clock_isr
     65)
     66{
     67   (void) set_vector( clock_isr, CLOCK_VECTOR, 1 );
    6568}
    6669
     
    7679  }
    7780}
     81
     82rtems_device_driver Clock_initialize(
     83  rtems_device_major_number major,
     84  rtems_device_minor_number minor,
     85  void *pargp
     86)
     87{
     88  Install_clock( Clock_isr );
     89 
     90  atexit( Clock_exit );
     91
     92  /*
     93   * make major/minor avail to others such as shared memory driver
     94   */
     95 
     96  rtems_clock_major = major;
     97  rtems_clock_minor = minor;
     98 
     99  return RTEMS_SUCCESSFUL;
     100}
     101 
     102rtems_device_driver Clock_control(
     103  rtems_device_major_number major,
     104  rtems_device_minor_number minor,
     105  void *pargp
     106)
     107{
     108    rtems_libio_ioctl_args_t *args = pargp;
     109 
     110    if (args == 0)
     111        goto done;
     112 
     113    /*
     114     * This is hokey, but until we get a defined interface
     115     * to do this, it will just be this simple...
     116     */
     117 
     118    if (args->command == rtems_build_name('I', 'S', 'R', ' '))
     119    {
     120        Clock_isr(CLOCK_VECTOR);
     121    }
     122    else if (args->command == rtems_build_name('N', 'E', 'W', ' '))
     123    {
     124        ReInstall_clock(args->buffer);
     125    }
     126 
     127done:
     128    return RTEMS_SUCCESSFUL;
     129}
     130
     131rtems_isr Clock_isr(
     132  rtems_vector_number vector
     133)
     134{
     135  /* enable_tracing(); */
     136  Clock_driver_ticks += 1;
     137  if ( Clock_isrs == 1 ) {
     138    rtems_clock_tick();
     139    Clock_isrs = BSP_Configuration.microseconds_per_tick / 1000;
     140  }
     141  else
     142    Clock_isrs -= 1;
     143  i960_clear_intr( 5 );
     144}
     145
  • c/src/lib/libbsp/i960/cvme961/console/console.c

    r5072b07 r3a4ae6c  
    11/*
    2  *  This file contains the MVME136 console IO package.
     2 *  This file contains the CVME961 console IO package.
    33 *
    44 *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
     
    1515#define C961_INIT
    1616
    17 #include <rtems.h>
    18 #include "console.h"
    19 #include "bsp.h"
     17#include <bsp.h>
     18#include <rtems/libio.h>
    2019
    2120/*  console_initialize
     
    3332  rtems_device_major_number  major,
    3433  rtems_device_minor_number  minor,
    35   void                      *arg,
    36   rtems_id                   self,
    37   rtems_unsigned32          *status
    38 )
    39 {
    40   *status = RTEMS_SUCCESSFUL;
     34  void                      *arg
     35)
     36{
     37 rtems_status_code status;
     38 
     39  status = rtems_io_register_name(
     40    "/dev/console",
     41    major,
     42    (rtems_device_minor_number) 0
     43  );
     44 
     45  if (status != RTEMS_SUCCESSFUL)
     46    rtems_fatal_error_occurred(status);
     47 
     48  return RTEMS_SUCCESSFUL;
    4149}
    4250
     
    101109
    102110/*
    103  * __read  -- read bytes from the serial port. Ignore fd, since
    104  *            we only have stdin.
    105  */
    106 
    107 int __read(
    108   int fd,
    109   char *buf,
    110   int nbytes
    111 )
    112 {
    113   int i = 0;
    114 
    115   for (i = 0; i < nbytes; i++) {
    116     *(buf + i) = inbyte();
    117     if ((*(buf + i) == '\n') || (*(buf + i) == '\r')) {
    118       (*(buf + i++)) = '\n';
    119       (*(buf + i)) = 0;
     111 *  Open entry point
     112 */
     113 
     114rtems_device_driver console_open(
     115  rtems_device_major_number major,
     116  rtems_device_minor_number minor,
     117  void                    * arg
     118)
     119{
     120  return RTEMS_SUCCESSFUL;
     121}
     122 
     123/*
     124 *  Close entry point
     125 */
     126 
     127rtems_device_driver console_close(
     128  rtems_device_major_number major,
     129  rtems_device_minor_number minor,
     130  void                    * arg
     131)
     132{
     133  return RTEMS_SUCCESSFUL;
     134}
     135 
     136/*
     137 * read bytes from the serial port. We only have stdin.
     138 */
     139 
     140rtems_device_driver console_read(
     141  rtems_device_major_number major,
     142  rtems_device_minor_number minor,
     143  void                    * arg
     144)
     145{
     146  rtems_libio_rw_args_t *rw_args;
     147  char *buffer;
     148  int maximum;
     149  int count = 0;
     150 
     151  rw_args = (rtems_libio_rw_args_t *) arg;
     152 
     153  buffer = rw_args->buffer;
     154  maximum = rw_args->count;
     155 
     156  for (count = 0; count < maximum; count++) {
     157    buffer[ count ] = inbyte();
     158    if (buffer[ count ] == '\n' || buffer[ count ] == '\r') {
     159      buffer[ count++ ]  = '\n';
     160      buffer[ count ]  = 0;
    120161      break;
    121162    }
    122163  }
    123   return (i);
    124 }
    125 
    126 /*
    127  * __write -- write bytes to the serial port. Ignore fd, since
    128  *            stdout and stderr are the same. Since we have no filesystem,
    129  *            open will only return an error.
    130  */
    131 
    132 int __write(
    133   int fd,
    134   char *buf,
    135   int nbytes
    136 )
    137 {
    138   int i;
    139 
    140   for (i = 0; i < nbytes; i++) {
    141     if (*(buf + i) == '\n') {
    142       outbyte ('\r');
     164 
     165  rw_args->bytes_moved = count;
     166  return (count >= 0) ? RTEMS_SUCCESSFUL : RTEMS_UNSATISFIED;
     167}
     168 
     169/*
     170 * write bytes to the serial port. Stdout and stderr are the same.
     171 */
     172 
     173rtems_device_driver console_write(
     174  rtems_device_major_number major,
     175  rtems_device_minor_number minor,
     176  void                    * arg
     177)
     178{
     179  int count;
     180  int maximum;
     181  rtems_libio_rw_args_t *rw_args;
     182  char *buffer;
     183 
     184  rw_args = (rtems_libio_rw_args_t *) arg;
     185 
     186  buffer = rw_args->buffer;
     187  maximum = rw_args->count;
     188 
     189  for (count = 0; count < maximum; count++) {
     190    if ( buffer[ count ] == '\n') {
     191      outbyte('\r');
    143192    }
    144     outbyte (*(buf + i));
     193    outbyte( buffer[ count ] );
    145194  }
    146   return (nbytes);
    147 }
     195  return maximum;
     196}
     197 
     198/*
     199 *  IO Control entry point
     200 */
     201 
     202rtems_device_driver console_control(
     203  rtems_device_major_number major,
     204  rtems_device_minor_number minor,
     205  void                    * arg
     206)
     207{
     208  return RTEMS_SUCCESSFUL;
     209}
     210
  • c/src/lib/libbsp/i960/cvme961/include/bsp.h

    r5072b07 r3a4ae6c  
    2525#include <rtems.h>
    2626#include <iosupp.h>
     27#include <console.h>
     28#include <clockdrv.h>
    2729
    2830/*
     
    116118BSP_EXTERN i960ca_control_table *Ctl_tbl;
    117119
     120/*
     121 *  Device Driver Table Entries
     122 */
     123
     124/*
     125 * NOTE: Use the standard Console driver entry
     126 */
     127 
     128/*
     129 * NOTE: Use the standard Clock driver entry
     130 */
     131
     132/*
     133 * How many libio files we want
     134 */
     135
     136#define BSP_LIBIO_MAX_FDS       20
     137
    118138/* functions */
    119139
  • c/src/lib/libbsp/i960/cvme961/startup/bspstart.c

    r5072b07 r3a4ae6c  
    2121 */
    2222
    23 #include <rtems.h>
    2423#include <bsp.h>
    25 #include "libcsupport.h"
    26 
    27 
    28 #include "stackchk.h"
     24#include <rtems/libio.h>
     25 
     26#include <libcsupport.h>
     27 
     28#include <string.h>
     29#include <fcntl.h>
     30 
     31#ifdef STACK_CHECKER_ON
     32#include <stackchk.h>
     33#endif
    2934
    3035/*
     
    3843
    3944rtems_cpu_table Cpu_table;
     45
     46char *rtems_progname;
    4047
    4148/*      Initialize whatever libc we are using
     
    5360
    5461    RTEMS_Malloc_Initialize((void *) heap_start, 64 * 1024, 0);
     62
     63    /*
     64     *  Init the RTEMS libio facility to provide UNIX-like system
     65     *  calls for use by newlib (ie: provide __open, __close, etc)
     66     *  Uses malloc() to get area for the iops, so must be after malloc init
     67     */
     68
     69    rtems_libio_init();
    5570
    5671    /*
     
    7186}
    7287
    73 int bsp_start(
     88/*
     89 * After drivers are setup, register some "filenames"
     90 * and open stdin, stdout, stderr files
     91 *
     92 * Newlib will automatically associate the files with these
     93 * (it hardcodes the numbers)
     94 */
     95 
     96void
     97bsp_postdriver_hook(void)
     98{
     99  int stdin_fd, stdout_fd, stderr_fd;
     100 
     101  if ((stdin_fd = __open("/dev/console", O_RDONLY, 0)) == -1)
     102    rtems_fatal_error_occurred('STD0');
     103 
     104  if ((stdout_fd = __open("/dev/console", O_WRONLY, 0)) == -1)
     105    rtems_fatal_error_occurred('STD1');
     106 
     107  if ((stderr_fd = __open("/dev/console", O_WRONLY, 0)) == -1)
     108    rtems_fatal_error_occurred('STD2');
     109 
     110  if ((stdin_fd != 0) || (stdout_fd != 1) || (stderr_fd != 2))
     111    rtems_fatal_error_occurred('STIO');
     112}
     113
     114int main(
    74115  int argc,
    75116  char **argv,
     
    77118)
    78119{
     120  if ((argc > 0) && argv && argv[0])
     121    rtems_progname = argv[0];
     122  else
     123    rtems_progname = "RTEMS";
     124
    79125  /* set node number in SQSIO4 CTL REG */
    80126
     
    111157  Cpu_table.predriver_hook = bsp_libc_init;  /* RTEMS resources available */
    112158
    113   Cpu_table.postdriver_hook = NULL;   /* Call our main() for constructors */
     159  Cpu_table.postdriver_hook = bsp_postdriver_hook;
    114160
    115161  Cpu_table.idle_task = NULL;  /* do not override system IDLE task */
     
    151197#endif
    152198
     199  /*
     200   * Tell libio how many fd's we want and allow it to tweak config
     201   */
     202
     203  rtems_libio_config(&BSP_Configuration, BSP_LIBIO_MAX_FDS);
     204
    153205  BSP_Configuration.work_space_start = (void *)
    154206     (RAM_END - BSP_Configuration.work_space_size);
Note: See TracChangeset for help on using the changeset viewer.