qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

mc146818rtc_regs.h (2643B)


      1 /*
      2  * QEMU MC146818 RTC emulation
      3  *
      4  * Copyright (c) 2003-2004 Fabrice Bellard
      5  *
      6  * Permission is hereby granted, free of charge, to any person obtaining a copy
      7  * of this software and associated documentation files (the "Software"), to deal
      8  * in the Software without restriction, including without limitation the rights
      9  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     10  * copies of the Software, and to permit persons to whom the Software is
     11  * furnished to do so, subject to the following conditions:
     12  *
     13  * The above copyright notice and this permission notice shall be included in
     14  * all copies or substantial portions of the Software.
     15  *
     16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
     19  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
     22  * THE SOFTWARE.
     23  */
     24 
     25 #ifndef HW_RTC_MC146818RTC_REGS_H
     26 #define HW_RTC_MC146818RTC_REGS_H
     27 
     28 #include "qemu/timer.h"
     29 #include "qemu/host-utils.h"
     30 
     31 #define RTC_SECONDS             0
     32 #define RTC_SECONDS_ALARM       1
     33 #define RTC_MINUTES             2
     34 #define RTC_MINUTES_ALARM       3
     35 #define RTC_HOURS               4
     36 #define RTC_HOURS_ALARM         5
     37 #define RTC_ALARM_DONT_CARE    0xC0
     38 
     39 #define RTC_DAY_OF_WEEK         6
     40 #define RTC_DAY_OF_MONTH        7
     41 #define RTC_MONTH               8
     42 #define RTC_YEAR                9
     43 
     44 #define RTC_REG_A               10
     45 #define RTC_REG_B               11
     46 #define RTC_REG_C               12
     47 #define RTC_REG_D               13
     48 
     49 /* PC cmos mappings */
     50 #define RTC_CENTURY              0x32
     51 #define RTC_IBM_PS2_CENTURY_BYTE 0x37
     52 
     53 #define REG_A_UIP 0x80
     54 
     55 #define REG_B_SET  0x80
     56 #define REG_B_PIE  0x40
     57 #define REG_B_AIE  0x20
     58 #define REG_B_UIE  0x10
     59 #define REG_B_SQWE 0x08
     60 #define REG_B_DM   0x04
     61 #define REG_B_24H  0x02
     62 
     63 #define REG_C_UF   0x10
     64 #define REG_C_IRQF 0x80
     65 #define REG_C_PF   0x40
     66 #define REG_C_AF   0x20
     67 #define REG_C_MASK 0x70
     68 
     69 static inline uint32_t periodic_period_to_clock(int period_code)
     70 {
     71     if (!period_code) {
     72         return 0;
     73    }
     74 
     75     if (period_code <= 2) {
     76         period_code += 7;
     77     }
     78     /* period in 32 Khz cycles */
     79    return 1 << (period_code - 1);
     80 }
     81 
     82 #define RTC_CLOCK_RATE            32768
     83 
     84 static inline int64_t periodic_clock_to_ns(int64_t clocks)
     85 {
     86     return muldiv64(clocks, NANOSECONDS_PER_SECOND, RTC_CLOCK_RATE);
     87 }
     88 
     89 #endif