Import upstream u-boot 1.1.4
[u-boot.git] / board / MAI / bios_emulator / scitech / src / pm / tests / rtc.c
1 /****************************************************************************
2 *
3 *                   SciTech OS Portability Manager Library
4 *
5 *  ========================================================================
6 *
7 *    The contents of this file are subject to the SciTech MGL Public
8 *    License Version 1.0 (the "License"); you may not use this file
9 *    except in compliance with the License. You may obtain a copy of
10 *    the License at http://www.scitechsoft.com/mgl-license.txt
11 *
12 *    Software distributed under the License is distributed on an
13 *    "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
14 *    implied. See the License for the specific language governing
15 *    rights and limitations under the License.
16 *
17 *    The Original Code is Copyright (C) 1991-1998 SciTech Software, Inc.
18 *
19 *    The Initial Developer of the Original Code is SciTech Software, Inc.
20 *    All Rights Reserved.
21 *
22 *  ========================================================================
23 *
24 * Language:     ANSI C
25 * Environment:  any
26 *
27 * Description:  Test program to check the ability to install a C based
28 *               Real Time Clock interrupt handler.
29 *
30 *               Functions tested:   PM_setRealTimeClockHandler()
31 *                                   PM_restoreRealTimeClockHandler()
32 *
33 ****************************************************************************/
34
35 #include <stdlib.h>
36 #include <stdio.h>
37 #include "pmapi.h"
38
39 volatile long count = 0;
40
41 #pragma off (check_stack)           /* No stack checking under Watcom   */
42
43 void PMAPI RTCHandler(void)
44 {
45     count++;
46 }
47
48 int main(void)
49 {
50     long            oldCount;
51     PM_lockHandle   lh;
52
53     printf("Program running in ");
54     switch (PM_getModeType()) {
55         case PM_realMode:
56             printf("real mode.\n\n");
57             break;
58         case PM_286:
59             printf("16 bit protected mode.\n\n");
60             break;
61         case PM_386:
62             printf("32 bit protected mode.\n\n");
63             break;
64         }
65
66     /* Install our timer handler and lock handler pages in memory. It is
67      * difficult to get the size of a function in C, but we know our
68      * function is well less than 100 bytes (and an entire 4k page will
69      * need to be locked by the server anyway).
70      */
71     PM_lockCodePages((__codePtr)RTCHandler,100,&lh);
72     PM_lockDataPages((void*)&count,sizeof(count),&lh);
73     PM_installBreakHandler();           /* We *DONT* want Ctrl-Breaks! */
74     PM_setRealTimeClockHandler(RTCHandler,128);
75     printf("RealTimeClock interrupt handler installed - Hit ESC to exit\n");
76     oldCount = count;
77     while (1) {
78         if (PM_kbhit() && (PM_getch() == 0x1B))
79             break;
80         if (count != oldCount) {
81             printf("Tick, Tock: %ld\n", count);
82             oldCount = count;
83             }
84         }
85
86     PM_restoreRealTimeClockHandler();
87     PM_restoreBreakHandler();
88     PM_unlockDataPages((void*)&count,sizeof(count),&lh);
89     PM_unlockCodePages((__codePtr)RTCHandler,100,&lh);
90     printf("RealTimeClock handler was called %ld times\n", count);
91     return 0;
92 }