Annotation of Gnu-Mach/chips/mc_clock.h, revision 1.1.1.1

1.1       root        1: /* 
                      2:  * Mach Operating System
                      3:  * Copyright (c) 1991,1990 Carnegie Mellon University
                      4:  * All Rights Reserved.
                      5:  * 
                      6:  * Permission to use, copy, modify and distribute this software and its
                      7:  * documentation is hereby granted, provided that both the copyright
                      8:  * notice and this permission notice appear in all copies of the
                      9:  * software, derivative works or modified versions, and any portions
                     10:  * thereof, and that both notices appear in supporting documentation.
                     11:  * 
                     12:  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
                     13:  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
                     14:  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
                     15:  * 
                     16:  * Carnegie Mellon requests users of this software to return to
                     17:  * 
                     18:  *  Software Distribution Coordinator  or  [email protected]
                     19:  *  School of Computer Science
                     20:  *  Carnegie Mellon University
                     21:  *  Pittsburgh PA 15213-3890
                     22:  * 
                     23:  * any improvements or extensions that they make and grant Carnegie Mellon
                     24:  * the rights to redistribute these changes.
                     25:  */
                     26: /*
                     27:  *     File:   mc_clock.h
                     28:  *     Author: Alessandro Forin
                     29:  *     Date:   8/90
                     30:  *
                     31:  *     Definitions for the MC146818 Clock Driver
                     32:  */
                     33: 
                     34: /*
                     35:  *     Functions this module implements
                     36:  */
                     37: 
                     38: extern void    resettodr(/* */);       /* reset time-of-day register */
                     39: extern void    startrtclock(/* */);    /* start real-time clock */
                     40: extern void    stopclocks(/* */);      /* stop  real-time clock */
                     41: extern boolean_t ackrtclock(/* */);    /* acknowledge interrupt, if any */
                     42: extern boolean_t todr_running;         /* status */
                     43: 
                     44: extern boolean_t mc_new_century;       /* patch this after year 2000 (honest!) */
                     45: 
                     46: extern void    delay(/* int usecs */); /* waste that many microseconds */
                     47: extern void    config_delay(/* int speed */);          /* for delay() */
                     48: #define                MC_DELAY_PMAX   8
                     49: #define                MC_DELAY_3MAX   12
                     50: 
                     51: extern void    set_clock_addr(/* vm_offset_t addr */); /* RAM location */
                     52: 
                     53: /*
                     54:  *     Real-Time Clock plus RAM device (MC146818)
                     55:  */
                     56: 
                     57: /*
                     58:  * RAM Memory Map (as seen by the chip)
                     59:  */
                     60: typedef struct {
                     61:        volatile unsigned char  mc_second;
                     62:        volatile unsigned char  mc_alarm_second;
                     63:        volatile unsigned char  mc_minute;
                     64:        volatile unsigned char  mc_alarm_minute;
                     65:        volatile unsigned char  mc_hour;
                     66:        volatile unsigned char  mc_alarm_hour;
                     67:        volatile unsigned char  mc_day_of_week;
                     68:        volatile unsigned char  mc_day_of_month;
                     69:        volatile unsigned char  mc_month;
                     70:        volatile unsigned char  mc_year;
                     71:        volatile unsigned char  mc_register_A;
                     72:        volatile unsigned char  mc_register_B;
                     73:        volatile unsigned char  mc_register_C;
                     74:        volatile unsigned char  mc_register_D;
                     75:        unsigned char           mc_non_volatile_ram[50];
                     76: } mc_clock_t;
                     77: 
                     78: /*
                     79:  * Register A defines (read/write)
                     80:  */
                     81: 
                     82: #define        MC_REG_A_RS     0x0f            /* Interrupt rate (and SQwave) select */
                     83: #define        MC_REG_A_DV     0x70            /* Divider select */
                     84: #define        MC_REG_A_UIP    0x80            /* Update In Progress (read-only bit) */
                     85: 
                     86: /* Time base configuration */
                     87: #define        MC_BASE_4_MHz   0x00
                     88: #define        MC_BASE_1_MHz   0x10
                     89: #define        MC_BASE_32_KHz  0x20
                     90: #define        MC_BASE_NONE    0x60            /* actually, both of these reset */
                     91: #define        MC_BASE_RESET   0x70
                     92: 
                     93: /* Interrupt rate table */
                     94: #define        MC_RATE_NONE    0x0             /* disabled */
                     95: #define        MC_RATE_1       0x1             /* 256Hz if MC_BASE_32_KHz, else 32768Hz */
                     96: #define        MC_RATE_2       0x2             /* 128Hz if MC_BASE_32_KHz, else 16384Hz */
                     97: #define        MC_RATE_8192_Hz 0x3             /* Tpi: 122.070 usecs */
                     98: #define        MC_RATE_4096_Hz 0x4             /* Tpi: 244.141 usecs */
                     99: #define        MC_RATE_2048_Hz 0x5             /* Tpi: 488.281 usecs */
                    100: #define        MC_RATE_1024_Hz 0x6             /* Tpi: 976.562 usecs */
                    101: #define        MC_RATE_512_Hz  0x7             /* Tpi: 1.953125 ms */
                    102: #define        MC_RATE_256_Hz  0x8             /* Tpi: 3.90625 ms */
                    103: #define        MC_RATE_128_Hz  0x9             /* Tpi: 7.8125 ms */
                    104: #define        MC_RATE_64_Hz   0xa             /* Tpi: 15.625 ms */
                    105: #define        MC_RATE_32_Hz   0xb             /* Tpi: 31.25 ms */
                    106: #define        MC_RATE_16_Hz   0xc             /* Tpi: 62.5 ms */
                    107: #define        MC_RATE_8_Hz    0xd             /* Tpi: 125 ms */
                    108: #define        MC_RATE_4_Hz    0xe             /* Tpi: 250 ms */
                    109: #define        MC_RATE_2_Hz    0xf             /* Tpi: 500 ms */
                    110: 
                    111: /* Update cycle time */
                    112: #define MC_UPD_4_MHz    248            /* usecs */
                    113: #define MC_UPD_1_MHz    248            /* usecs */
                    114: #define MC_UPD_32_KHz  1984            /* usecs */
                    115: #define MC_UPD_MINIMUM  244            /* usecs, guaranteed if UIP=0 */
                    116: 
                    117: /*
                    118:  * Register B defines (read/write)
                    119:  */
                    120: 
                    121: #define MC_REG_B_DSE   0x01            /* Daylight Savings Enable */
                    122: #define MC_REG_B_24HM  0x02            /* 24/12 Hour Mode */
                    123: #define MC_REG_B_DM    0x04            /* Data Mode, 1=Binary 0=BCD */
                    124: #define MC_REG_B_SQWE  0x08            /* Sqare Wave Enable */
                    125: #define MC_REG_B_UIE   0x10            /* Update-ended Interrupt Enable */
                    126: #define MC_REG_B_AIE   0x20            /* Alarm Interrupt Enable */
                    127: #define MC_REG_B_PIE   0x40            /* Periodic Interrupt Enable */
                    128: #define MC_REG_B_SET   0x80            /* Set NVram info, e.g. update time or ..*/
                    129: #define MC_REG_B_STOP  MC_REG_B_SET    /* Stop updating the timing info */
                    130: 
                    131: /*
                    132:  * Register C defines (read-only)
                    133:  */
                    134: 
                    135: #define MC_REG_C_ZEROES        0x0f            /* Reads as zero bits  */
                    136: #define MC_REG_C_UF    0x10            /* Update-ended interrupt flag */
                    137: #define MC_REG_C_AF    0x20            /* Alarm interrupt flag */
                    138: #define MC_REG_C_PF    0x40            /* Periodic interrupt flag */
                    139: #define MC_REG_C_IRQF  0x80            /* Interrupt request flag */
                    140: 
                    141: /*
                    142:  * Register D defines (read-only)
                    143:  */
                    144: 
                    145: #define MC_REG_D_ZEROES        0x7f            /* Reads as zero bits  */
                    146: #define MC_REG_D_VRT   0x80            /* Valid RAM and Time */
                    147: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.