mirror of
https://github.com/xemu-project/xemu.git
synced 2025-02-03 10:43:28 +00:00
rtc: map CMOS index 0x37 to 0x32 on read and writes
QEMU's attempt to implement the century byte cover two possible places for the byte. A common one on modern chipsets is 0x32, but QEMU also stores the value in 0x37 (apparently for IBM PS/2 compatibility---it's only been 25 years). To simplify the implementation of the century byte, store it only at 0x32 but remap transparently 0x37 to 0x32 when reading and writing from CMOS. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
b6db4aca20
commit
e67edb943f
@ -399,6 +399,10 @@ static void cmos_ioport_write(void *opaque, uint32_t addr, uint32_t data)
|
||||
s->cmos_data[s->cmos_index] = data;
|
||||
check_update_timer(s);
|
||||
break;
|
||||
case RTC_IBM_PS2_CENTURY_BYTE:
|
||||
s->cmos_index = RTC_CENTURY;
|
||||
/* fall through */
|
||||
case RTC_CENTURY:
|
||||
case RTC_SECONDS:
|
||||
case RTC_MINUTES:
|
||||
case RTC_HOURS:
|
||||
@ -598,6 +602,10 @@ static uint32_t cmos_ioport_read(void *opaque, uint32_t addr)
|
||||
return 0xff;
|
||||
} else {
|
||||
switch(s->cmos_index) {
|
||||
case RTC_IBM_PS2_CENTURY_BYTE:
|
||||
s->cmos_index = RTC_CENTURY;
|
||||
/* fall through */
|
||||
case RTC_CENTURY:
|
||||
case RTC_SECONDS:
|
||||
case RTC_MINUTES:
|
||||
case RTC_HOURS:
|
||||
@ -661,10 +669,6 @@ void rtc_set_memory(ISADevice *dev, int addr, int val)
|
||||
s->cmos_data[addr] = val;
|
||||
}
|
||||
|
||||
/* PC cmos mappings */
|
||||
#define REG_IBM_CENTURY_BYTE 0x32
|
||||
#define REG_IBM_PS2_CENTURY_BYTE 0x37
|
||||
|
||||
static void rtc_set_date_from_host(ISADevice *dev)
|
||||
{
|
||||
RTCState *s = DO_UPCAST(RTCState, dev, dev);
|
||||
@ -681,8 +685,7 @@ static void rtc_set_date_from_host(ISADevice *dev)
|
||||
rtc_set_cmos(s, &tm);
|
||||
|
||||
val = rtc_to_bcd(s, (tm.tm_year / 100) + 19);
|
||||
rtc_set_memory(dev, REG_IBM_CENTURY_BYTE, val);
|
||||
rtc_set_memory(dev, REG_IBM_PS2_CENTURY_BYTE, val);
|
||||
rtc_set_memory(dev, RTC_CENTURY, val);
|
||||
}
|
||||
|
||||
static int rtc_post_load(void *opaque, int version_id)
|
||||
|
@ -44,6 +44,10 @@
|
||||
#define RTC_REG_C 12
|
||||
#define RTC_REG_D 13
|
||||
|
||||
/* PC cmos mappings */
|
||||
#define RTC_CENTURY 0x32
|
||||
#define RTC_IBM_PS2_CENTURY_BYTE 0x37
|
||||
|
||||
#define REG_A_UIP 0x80
|
||||
|
||||
#define REG_B_SET 0x80
|
||||
|
Loading…
x
Reference in New Issue
Block a user