Commit ea55ffb37378dcb16972aef6ef898b3d0ba17fb0

Authored by ths
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,
@@ -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 */