diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 1995-08-17 19:51:51 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 1995-08-17 19:51:51 +0000 |
commit | b06e68ef1f6df69cc86d72356c3a002054a35fad (patch) | |
tree | 722b2da3cc83f1cf03019cab8cf895a509eb6801 /c/src/lib/libbsp | |
parent | variable length messages (diff) | |
download | rtems-b06e68ef1f6df69cc86d72356c3a002054a35fad.tar.bz2 |
Numerous miscellaneous features incorporated from Tony Bennett
(tbennett@divnc.com) including the following major additions:
+ variable length messages
+ named devices
+ debug monitor
+ association tables/variables
Diffstat (limited to '')
-rw-r--r-- | c/src/lib/libbsp/hppa1.1/simhppa/include/bsp.h | 31 | ||||
-rw-r--r-- | c/src/lib/libbsp/hppa1.1/simhppa/startup/bspstart.c | 64 | ||||
-rw-r--r-- | c/src/lib/libbsp/shmdr/poll.c | 23 | ||||
-rw-r--r-- | c/src/lib/libbsp/shmdr/setckvec.c | 10 | ||||
-rw-r--r-- | c/src/lib/libbsp/shmdr/shm.h | 3 | ||||
-rw-r--r-- | c/src/lib/libbsp/shmdr/shm_driver.h | 3 | ||||
-rw-r--r-- | c/src/lib/libbsp/unix/posix/clock/clock.c | 123 | ||||
-rw-r--r-- | c/src/lib/libbsp/unix/posix/console/console.c | 7 | ||||
-rw-r--r-- | c/src/lib/libbsp/unix/posix/include/bsp.h | 14 |
9 files changed, 208 insertions, 70 deletions
diff --git a/c/src/lib/libbsp/hppa1.1/simhppa/include/bsp.h b/c/src/lib/libbsp/hppa1.1/simhppa/include/bsp.h index c3759739b5..723a66a1e9 100644 --- a/c/src/lib/libbsp/hppa1.1/simhppa/include/bsp.h +++ b/c/src/lib/libbsp/hppa1.1/simhppa/include/bsp.h @@ -21,7 +21,9 @@ extern "C" { #endif #include <rtems.h> -#include <iosupp.h> +#include <clockdrv.h> +#include <rtems/ttydrv.h> +#include <libcsupport.h> /* * Define the time limits for RTEMS Test Suite test durations. @@ -65,14 +67,41 @@ extern void Clock_delay(rtems_unsigned32 microseconds); Clock_delay(microseconds); /* + * Todo: this should be put somewhere else + */ + +#undef CLOCK_DRIVER_TABLE_ENTRY +#define CLOCK_DRIVER_TABLE_ENTRY { Clock_initialize, NULL, NULL, NULL, NULL, Clock_control } +rtems_device_driver Clock_control( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *pargp +); + +/* * We printf() to a buffer if multiprocessing, *or* if this is set. * ref: src/lib/libbsp/hppa/simhppa/iosupp/consupp.c */ extern int use_print_buffer; +/* + * When not doing printf to a buffer, we do printf thru RTEMS libio + * and our tty driver. Set it up so that console is right. + */ + +#define CONSOLE_DRIVER_TABLE_ENTRY \ + { tty_initialize, tty_open, tty_close, tty_read, tty_write, tty_control } + +/* + * How many libio files we want + */ +#define BSP_LIBIO_MAX_FDS 20 + #define HPPA_INTERRUPT_EXTERNAL_MPCI HPPA_INTERRUPT_EXTERNAL_10 +rtems_isr_entry set_vector(rtems_isr_entry, rtems_vector_number, int); + void bsp_start( void ); void bsp_cleanup( void ); diff --git a/c/src/lib/libbsp/hppa1.1/simhppa/startup/bspstart.c b/c/src/lib/libbsp/hppa1.1/simhppa/startup/bspstart.c index 115a5bd136..7e9b70f82e 100644 --- a/c/src/lib/libbsp/hppa1.1/simhppa/startup/bspstart.c +++ b/c/src/lib/libbsp/hppa1.1/simhppa/startup/bspstart.c @@ -1,6 +1,5 @@ /* - * @(#)bspstart.c 1.14 - 95/05/16 - * + * @(#)bspstart.c 1.16 - 95/06/28 */ /* bsp_start() @@ -24,13 +23,17 @@ * to the copyright license under the clause at DFARS 252.227-7013. This * notice must appear in all copies of this file and its derivatives. * - * bspstart.c,v 1.2 1995/05/09 20:17:33 joel Exp + * $Id$ */ +#include <rtems.h> #include <bsp.h> +#include <rtems/libio.h> + #include <libcsupport.h> #include <string.h> +#include <fcntl.h> #ifdef STACK_CHECKER_ON #include <stackchk.h> @@ -128,7 +131,16 @@ bsp_libc_init(void) RTEMS_Malloc_Initialize((void *) heap_start, 64 * 1024, 0); /* + * Init the RTEMS libio facility to provide UNIX-like system + * calls for use by newlib (ie: provide __open, __close, etc) + * Uses malloc() to get area for the iops, so must be after malloc init + */ + + rtems_libio_init(); + + /* * Set up for the libc handling. + * XXX; this should allow for case of some other non-clock interrupts */ if (BSP_Configuration.ticks_per_timeslice > 0) @@ -220,6 +232,32 @@ bsp_pretasking_hook(void) } /* + * After drivers are setup, register some "filenames" + * and open stdin, stdout, stderr files + * + * Newlib will automatically associate the files with these + * (it hardcodes the numbers) + */ + +void +bsp_postdriver_hook(void) +{ + int stdin_fd, stdout_fd, stderr_fd; + + if ((stdin_fd = __open("/dev/tty00", O_RDONLY, 0)) == -1) + rtems_fatal_error_occurred('STD0'); + + if ((stdout_fd = __open("/dev/tty00", O_WRONLY, 0)) == -1) + rtems_fatal_error_occurred('STD1'); + + if ((stderr_fd = __open("/dev/tty00", O_WRONLY, 0)) == -1) + rtems_fatal_error_occurred('STD2'); + + if ((stdin_fd != 0) || (stdout_fd != 1) || (stderr_fd != 2)) + rtems_fatal_error_occurred('STIO'); +} + +/* * Function: bsp_start * Created: 94/12/6 * @@ -289,7 +327,7 @@ bsp_start(void) Cpu_table.predriver_hook = NULL; - Cpu_table.postdriver_hook = NULL; + Cpu_table.postdriver_hook = bsp_postdriver_hook; /* register drivers */ Cpu_table.idle_task = NULL; /* do not override system IDLE task */ @@ -342,22 +380,28 @@ bsp_start(void) #endif #ifdef STACK_CHECKER_ON - /* - * Add 1 extension for stack checker - */ + /* + * Add 1 extension for stack checker + */ BSP_Configuration.maximum_extensions++; #endif #if SIMHPPA_FAST_IDLE - /* - * Add 1 extension for fast idle - */ + /* + * Add 1 extension for fast idle + */ BSP_Configuration.maximum_extensions++; #endif /* + * Tell libio how many fd's we want and allow it to tweak config + */ + + rtems_libio_config(&BSP_Configuration, BSP_LIBIO_MAX_FDS); + + /* * Add 1 extension for MPCI_fatal */ diff --git a/c/src/lib/libbsp/shmdr/poll.c b/c/src/lib/libbsp/shmdr/poll.c index 349a964356..cdc1991f1f 100644 --- a/c/src/lib/libbsp/shmdr/poll.c +++ b/c/src/lib/libbsp/shmdr/poll.c @@ -16,20 +16,24 @@ * to the copyright license under the clause at DFARS 252.227-7013. This * notice must appear in all copies of this file and its derivatives. * - * poll.c,v 1.2 1995/05/09 20:22:57 joel Exp + * $Id$ */ #include <rtems.h> #include <rtems/sysstate.h> +#include <rtems/libio.h> + #include "shm.h" -#include "clockdrv.h" void Shm_Poll() { rtems_unsigned32 tmpfront; + rtems_libio_ioctl_args_t args; - Clock_isr( 0 ); /* invoke standard clock ISR */ - + /* invoke clock isr */ + args.iop = 0; + args.command = rtems_build_name('I', 'S', 'R', ' '); + (void) rtems_io_control(rtems_clock_major, rtems_clock_minor, &args); /* * Check for msgs only if we are "up" @@ -39,14 +43,11 @@ void Shm_Poll() if (_System_state_Is_up(_System_state_Get())) { - /* enable_tracing(); */ - /* ticks += 1; */ - Shm_Lock( Shm_Local_receive_queue ); tmpfront = Shm_Local_receive_queue->front; - Shm_Unlock( Shm_Local_receive_queue ); - if ( Shm_Convert(tmpfront) != Shm_Locked_queue_End_of_list ) { - rtems_multiprocessing_announce(); - Shm_Interrupt_count++; + if ( Shm_Convert(tmpfront) != Shm_Locked_queue_End_of_list ) + { + rtems_multiprocessing_announce(); + Shm_Interrupt_count++; } } } diff --git a/c/src/lib/libbsp/shmdr/setckvec.c b/c/src/lib/libbsp/shmdr/setckvec.c index 0b5e306dab..bb3a19e1c8 100644 --- a/c/src/lib/libbsp/shmdr/setckvec.c +++ b/c/src/lib/libbsp/shmdr/setckvec.c @@ -19,10 +19,16 @@ */ #include <rtems.h> +#include <rtems/libio.h> + #include "shm.h" -#include "clockdrv.h" rtems_isr Shm_setclockvec() { - ReInstall_clock( Shm_Poll ); + rtems_libio_ioctl_args_t args; + args.iop = 0; + args.command = rtems_build_name('N', 'E', 'W', ' '); + args.buffer = (void *) Shm_Poll; + + (void) rtems_io_control(rtems_clock_major, rtems_clock_minor, &args); } diff --git a/c/src/lib/libbsp/shmdr/shm.h b/c/src/lib/libbsp/shmdr/shm.h index 82b4c00b7b..c223055be6 100644 --- a/c/src/lib/libbsp/shmdr/shm.h +++ b/c/src/lib/libbsp/shmdr/shm.h @@ -20,6 +20,8 @@ #ifndef __SHM_h #define __SHM_h +#include <clockdrv.h> + #ifdef __cplusplus extern "C" { #endif @@ -518,6 +520,7 @@ extern rtems_mpci_table MPCI_table; rtems_mpci_table MPCI_table = { 100000, /* default timeout value in ticks */ + MAX_PACKET_SIZE, /* maximum packet size */ Shm_Initialization, /* initialization procedure */ Shm_Get_packet, /* get packet procedure */ Shm_Return_packet, /* return packet procedure */ diff --git a/c/src/lib/libbsp/shmdr/shm_driver.h b/c/src/lib/libbsp/shmdr/shm_driver.h index 82b4c00b7b..c223055be6 100644 --- a/c/src/lib/libbsp/shmdr/shm_driver.h +++ b/c/src/lib/libbsp/shmdr/shm_driver.h @@ -20,6 +20,8 @@ #ifndef __SHM_h #define __SHM_h +#include <clockdrv.h> + #ifdef __cplusplus extern "C" { #endif @@ -518,6 +520,7 @@ extern rtems_mpci_table MPCI_table; rtems_mpci_table MPCI_table = { 100000, /* default timeout value in ticks */ + MAX_PACKET_SIZE, /* maximum packet size */ Shm_Initialization, /* initialization procedure */ Shm_Get_packet, /* get packet procedure */ Shm_Return_packet, /* return packet procedure */ diff --git a/c/src/lib/libbsp/unix/posix/clock/clock.c b/c/src/lib/libbsp/unix/posix/clock/clock.c index f2c6152990..7b22424251 100644 --- a/c/src/lib/libbsp/unix/posix/clock/clock.c +++ b/c/src/lib/libbsp/unix/posix/clock/clock.c @@ -1,7 +1,7 @@ /* Clock * - * This routine initializes the interval timer on the - * PA-RISC CPU. The tick frequency is specified by the bsp. + * This routine generates clock ticks using standard POSIX services. + * The tick frequency is specified by the bsp. * * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. * On-Line Applications Research Corporation (OAR). @@ -15,62 +15,44 @@ */ #include <rtems.h> +#include <rtems/libio.h> +#include <bsp.h> +/* + * In order to get the types and prototypes used in this file under + * Solaris 2.3, it is necessary to pull the following magic. + */ + +#if defined(solaris) +#warning "Ignore the undefining __STDC__ warning" +#undef __STDC__ +#define __STDC__ 0 +#undef _POSIX_C_SOURCE +#endif + #include <stdlib.h> #include <stdio.h> #include <signal.h> #include <time.h> -#include <sys/time.h> extern rtems_configuration_table Configuration; -extern sigset_t UNIX_SIGNAL_MASK; -/* - * Function prototypes - */ +void Clock_exit(void); -void Install_clock(); -void Clock_isr(); -void Clock_exit(); +volatile rtems_unsigned32 Clock_driver_ticks; /* - * CPU_HPPA_CLICKS_PER_TICK is either a #define or an rtems_unsigned32 - * allocated and set by bsp_start() + * These are set by clock driver during its init */ -#ifndef CPU_HPPA_CLICKS_PER_TICK -extern rtems_unsigned32 CPU_HPPA_CLICKS_PER_TICK; -#endif - -volatile rtems_unsigned32 Clock_driver_ticks; - -struct itimerval new; - -rtems_device_driver -Clock_initialize( - rtems_device_major_number major, - rtems_device_minor_number minor, - void *pargp, - rtems_id tid, - rtems_unsigned32 *rval -) -{ - Install_clock(Clock_isr); -} - -void -ReInstall_clock(rtems_isr_entry new_clock_isr) -{ - rtems_unsigned32 isrlevel = 0; - - rtems_interrupt_disable(isrlevel); - (void)set_vector(new_clock_isr, SIGALRM, 1); - rtems_interrupt_enable(isrlevel); -} +rtems_device_major_number rtems_clock_major = ~0; +rtems_device_minor_number rtems_clock_minor; void Install_clock(rtems_isr_entry clock_isr) { + struct itimerval new; + Clock_driver_ticks = 0; new.it_value.tv_sec = 0; @@ -86,10 +68,19 @@ Install_clock(rtems_isr_entry clock_isr) } void +ReInstall_clock(rtems_isr_entry new_clock_isr) +{ + rtems_unsigned32 isrlevel = 0; + + rtems_interrupt_disable(isrlevel); + (void)set_vector(new_clock_isr, SIGALRM, 1); + rtems_interrupt_enable(isrlevel); +} + +void Clock_isr(int vector) { Clock_driver_ticks++; - rtems_clock_tick(); } @@ -101,6 +92,7 @@ Clock_isr(int vector) void Clock_exit(void) { + struct itimerval new; struct sigaction act; /* @@ -121,3 +113,50 @@ Clock_exit(void) (void)set_vector(0, SIGALRM, 1); } + +rtems_device_driver +Clock_initialize( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *pargp +) +{ + Install_clock((rtems_isr_entry) Clock_isr); + + /* + * make major/minor avail to others such as shared memory driver + */ + rtems_clock_major = major; + rtems_clock_minor = minor; + + return RTEMS_SUCCESSFUL; +} + +rtems_device_driver Clock_control( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *pargp +) +{ + rtems_libio_ioctl_args_t *args = pargp; + + if (args == 0) + goto done; + + /* + * This is hokey, but until we get a defined interface + * to do this, it will just be this simple... + */ + + if (args->command == rtems_build_name('I', 'S', 'R', ' ')) + { + Clock_isr(SIGALRM); + } + else if (args->command == rtems_build_name('N', 'E', 'W', ' ')) + { + ReInstall_clock(args->buffer); + } + +done: + return RTEMS_SUCCESSFUL; +} diff --git a/c/src/lib/libbsp/unix/posix/console/console.c b/c/src/lib/libbsp/unix/posix/console/console.c index 7b6ee1b33d..07cb033958 100644 --- a/c/src/lib/libbsp/unix/posix/console/console.c +++ b/c/src/lib/libbsp/unix/posix/console/console.c @@ -28,10 +28,9 @@ rtems_device_driver console_initialize(rtems_device_major_number major, rtems_device_minor_number minor, - void * arg, - rtems_id self, - rtems_unsigned32 * status) + void * arg +) { - *status = RTEMS_SUCCESSFUL; + return RTEMS_SUCCESSFUL; } diff --git a/c/src/lib/libbsp/unix/posix/include/bsp.h b/c/src/lib/libbsp/unix/posix/include/bsp.h index da10d4de8c..3bf43ca0c8 100644 --- a/c/src/lib/libbsp/unix/posix/include/bsp.h +++ b/c/src/lib/libbsp/unix/posix/include/bsp.h @@ -78,6 +78,20 @@ extern rtems_configuration_table BSP_Configuration; */ /* #define INTERRUPT_EXTERNAL_MPCI SIGUSR1 */ + +/* + * Console driver init + */ + +rtems_device_driver console_initialize( + rtems_device_major_number, rtems_device_minor_number minor, void *); + +#define CONSOLE_DRIVER_TABLE_ENTRY \ + { console_initialize, NULL, NULL, NULL, NULL, NULL } + +/* + * NOTE: Use the standard Clock driver entry + */ /* functions */ |