source: rtems/c/src/lib/libbsp/i386/force386/clock/ckinit.c @ ea74482

4.104.114.84.95
Last change on this file since ea74482 was 3a4ae6c, checked in by Joel Sherrill <joel.sherrill@…>, on 09/11/95 at 19:35:39

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.

  • Property mode set to 100644
File size: 3.1 KB
Line 
1/*  Clock_initialize
2 *
3 *  This routine initializes the Motorola MFP 68901 on the
4 *  FORCE CPU386 board.  The tick frequency is 1 millisecond.
5 *
6 *  Input parameters:  NONE
7 *
8 *  Output parameters:  NONE
9 *
10 *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
11 *  On-Line Applications Research Corporation (OAR).
12 *  All rights assigned to U.S. Government, 1994.
13 *
14 *  This material may be reproduced by or for the U.S. Government pursuant
15 *  to the copyright license under the clause at DFARS 252.227-7013.  This
16 *  notice must appear in all copies of this file and its derivatives.
17 *
18 *  $Id$
19 */
20
21#include <bsp.h>
22
23#include <rtems/libio.h>
24
25#include <stdlib.h>
26
27#define CLOCK_VECTOR  0x38
28
29rtems_unsigned32 Clock_isrs;              /* ISRs until next tick */
30
31volatile rtems_unsigned32 Clock_driver_ticks;
32
33rtems_isr_entry  Old_ticker;
34
35void Clock_exit( void );
36 
37/*
38 * These are set by clock driver during its init
39 */
40 
41rtems_device_major_number rtems_clock_major = ~0;
42rtems_device_major_number rtems_clock_minor = 0;
43
44/*
45 *  This is the ISR handler.
46 */
47
48rtems_isr Clock_isr(
49  rtems_vector_number vector
50)
51{
52  /* enable_tracing(); */
53  Clock_driver_ticks += 1;
54  if ( Clock_isrs == 1 ) {
55    rtems_clock_tick();
56    Clock_isrs = BSP_Configuration.microseconds_per_tick / 1000;
57  }
58  else
59    Clock_isrs -= 1;
60}
61
62void Install_clock(
63  rtems_isr_entry clock_isr
64)
65{
66  Clock_driver_ticks = 0;
67  Clock_isrs = BSP_Configuration.microseconds_per_tick / 1000;
68
69  if ( BSP_Configuration.ticks_per_timeslice ) {
70    Old_ticker = ( rtems_isr_entry ) set_vector( clock_isr, CLOCK_VECTOR, 1 );
71    outport_byte( TBCR, 0x14 );  /* reset it, delay mode, 50X */
72    outport_byte( TBDR, 0x50 );  /* 1 millisecond */
73    outport_byte( IERA, 0x41 );  /* enable interrupt for B */
74  }
75  atexit( Clock_exit );
76}
77
78void ReInstall_clock(
79  rtems_isr_entry clock_isr
80)
81{
82  rtems_unsigned32 isrlevel = 0;
83
84  rtems_interrupt_disable( isrlevel );
85   (void) set_vector( clock_isr, CLOCK_VECTOR, 1 );
86  rtems_interrupt_enable( isrlevel );
87}
88
89void Clock_exit( void )
90{
91  if ( BSP_Configuration.ticks_per_timeslice ) {
92    outport_byte( TBCR, 0x00 );  /* initial value */
93    outport_byte( IERA, 0x40 );  /* disable interrupt */
94    /* ??? Is "do not restore old vector" causing problems? */
95  }
96}
97
98rtems_device_driver Clock_initialize(
99  rtems_device_major_number major,
100  rtems_device_minor_number minor,
101  void *pargp
102)
103{
104  Install_clock( Clock_isr );
105 
106  /*
107   * make major/minor avail to others such as shared memory driver
108   */
109 
110  rtems_clock_major = major;
111  rtems_clock_minor = minor;
112 
113  return RTEMS_SUCCESSFUL;
114}
115 
116rtems_device_driver Clock_control(
117  rtems_device_major_number major,
118  rtems_device_minor_number minor,
119  void *pargp
120)
121{
122    rtems_libio_ioctl_args_t *args = pargp;
123 
124    if (args == 0)
125        goto done;
126 
127    /*
128     * This is hokey, but until we get a defined interface
129     * to do this, it will just be this simple...
130     */
131 
132    if (args->command == rtems_build_name('I', 'S', 'R', ' '))
133    {
134        Clock_isr(CLOCK_VECTOR);
135    }
136    else if (args->command == rtems_build_name('N', 'E', 'W', ' '))
137    {
138        ReInstall_clock(args->buffer);
139    }
140 
141done:
142    return RTEMS_SUCCESSFUL;
143}
Note: See TracBrowser for help on using the repository browser.