Commit ea55ffb37378dcb16972aef6ef898b3d0ba17fb0
1 parent
aa328add
Move date/time init to the RTC implementation.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2229 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
25 additions
and
22 deletions
hw/mc146818rtc.c
@@ -380,6 +380,29 @@ void rtc_set_date(RTCState *s, const struct tm *tm) | @@ -380,6 +380,29 @@ void rtc_set_date(RTCState *s, const struct tm *tm) | ||
380 | rtc_copy_date(s); | 380 | rtc_copy_date(s); |
381 | } | 381 | } |
382 | 382 | ||
383 | +/* PC cmos mappings */ | ||
384 | +#define REG_IBM_CENTURY_BYTE 0x32 | ||
385 | +#define REG_IBM_PS2_CENTURY_BYTE 0x37 | ||
386 | + | ||
387 | +void rtc_set_date_from_host(RTCState *s) | ||
388 | +{ | ||
389 | + time_t ti; | ||
390 | + struct tm *tm; | ||
391 | + int val; | ||
392 | + | ||
393 | + /* set the CMOS date */ | ||
394 | + time(&ti); | ||
395 | + if (rtc_utc) | ||
396 | + tm = gmtime(&ti); | ||
397 | + else | ||
398 | + tm = localtime(&ti); | ||
399 | + rtc_set_date(s, tm); | ||
400 | + | ||
401 | + val = to_bcd(s, (tm->tm_year / 100) + 19); | ||
402 | + rtc_set_memory(s, REG_IBM_CENTURY_BYTE, val); | ||
403 | + rtc_set_memory(s, REG_IBM_PS2_CENTURY_BYTE, val); | ||
404 | +} | ||
405 | + | ||
383 | static void rtc_save(QEMUFile *f, void *opaque) | 406 | static void rtc_save(QEMUFile *f, void *opaque) |
384 | { | 407 | { |
385 | RTCState *s = opaque; | 408 | RTCState *s = opaque; |
@@ -444,6 +467,8 @@ RTCState *rtc_init(int base, int irq) | @@ -444,6 +467,8 @@ RTCState *rtc_init(int base, int irq) | ||
444 | s->cmos_data[RTC_REG_C] = 0x00; | 467 | s->cmos_data[RTC_REG_C] = 0x00; |
445 | s->cmos_data[RTC_REG_D] = 0x80; | 468 | s->cmos_data[RTC_REG_D] = 0x80; |
446 | 469 | ||
470 | + rtc_set_date_from_host(s); | ||
471 | + | ||
447 | s->periodic_timer = qemu_new_timer(vm_clock, | 472 | s->periodic_timer = qemu_new_timer(vm_clock, |
448 | rtc_periodic_timer, s); | 473 | rtc_periodic_timer, s); |
449 | s->second_timer = qemu_new_timer(vm_clock, | 474 | s->second_timer = qemu_new_timer(vm_clock, |
hw/pc.c
@@ -111,14 +111,6 @@ static void pic_irq_request(void *opaque, int level) | @@ -111,14 +111,6 @@ static void pic_irq_request(void *opaque, int level) | ||
111 | /* PC cmos mappings */ | 111 | /* PC cmos mappings */ |
112 | 112 | ||
113 | #define REG_EQUIPMENT_BYTE 0x14 | 113 | #define REG_EQUIPMENT_BYTE 0x14 |
114 | -#define REG_IBM_CENTURY_BYTE 0x32 | ||
115 | -#define REG_IBM_PS2_CENTURY_BYTE 0x37 | ||
116 | - | ||
117 | - | ||
118 | -static inline int to_bcd(RTCState *s, int a) | ||
119 | -{ | ||
120 | - return ((a / 10) << 4) | (a % 10); | ||
121 | -} | ||
122 | 114 | ||
123 | static int cmos_get_fd_drive_type(int fd0) | 115 | static int cmos_get_fd_drive_type(int fd0) |
124 | { | 116 | { |
@@ -167,22 +159,8 @@ static void cmos_init(int ram_size, int boot_device, BlockDriverState **hd_table | @@ -167,22 +159,8 @@ static void cmos_init(int ram_size, int boot_device, BlockDriverState **hd_table | ||
167 | RTCState *s = rtc_state; | 159 | RTCState *s = rtc_state; |
168 | int val; | 160 | int val; |
169 | int fd0, fd1, nb; | 161 | int fd0, fd1, nb; |
170 | - time_t ti; | ||
171 | - struct tm *tm; | ||
172 | int i; | 162 | int i; |
173 | 163 | ||
174 | - /* set the CMOS date */ | ||
175 | - time(&ti); | ||
176 | - if (rtc_utc) | ||
177 | - tm = gmtime(&ti); | ||
178 | - else | ||
179 | - tm = localtime(&ti); | ||
180 | - rtc_set_date(s, tm); | ||
181 | - | ||
182 | - val = to_bcd(s, (tm->tm_year / 100) + 19); | ||
183 | - rtc_set_memory(s, REG_IBM_CENTURY_BYTE, val); | ||
184 | - rtc_set_memory(s, REG_IBM_PS2_CENTURY_BYTE, val); | ||
185 | - | ||
186 | /* various important CMOS locations needed by PC/Bochs bios */ | 164 | /* various important CMOS locations needed by PC/Bochs bios */ |
187 | 165 | ||
188 | /* memory size */ | 166 | /* memory size */ |