Commit 508d92d0573319d7dbd827f6216aec44c1421832
1 parent
64f5a135
16 bit divider
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2138 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
9 additions
and
6 deletions
hw/serial.c
| ... | ... | @@ -71,7 +71,7 @@ |
| 71 | 71 | #define UART_LSR_DR 0x01 /* Receiver data ready */ |
| 72 | 72 | |
| 73 | 73 | struct SerialState { |
| 74 | - uint8_t divider; | |
| 74 | + uint16_t divider; | |
| 75 | 75 | uint8_t rbr; /* receive register */ |
| 76 | 76 | uint8_t ier; |
| 77 | 77 | uint8_t iir; /* read only */ |
| ... | ... | @@ -310,7 +310,7 @@ static void serial_save(QEMUFile *f, void *opaque) |
| 310 | 310 | { |
| 311 | 311 | SerialState *s = opaque; |
| 312 | 312 | |
| 313 | - qemu_put_8s(f,&s->divider); | |
| 313 | + qemu_put_be16s(f,&s->divider); | |
| 314 | 314 | qemu_put_8s(f,&s->rbr); |
| 315 | 315 | qemu_put_8s(f,&s->ier); |
| 316 | 316 | qemu_put_8s(f,&s->iir); |
| ... | ... | @@ -325,10 +325,13 @@ static int serial_load(QEMUFile *f, void *opaque, int version_id) |
| 325 | 325 | { |
| 326 | 326 | SerialState *s = opaque; |
| 327 | 327 | |
| 328 | - if(version_id != 1) | |
| 328 | + if(version_id > 2) | |
| 329 | 329 | return -EINVAL; |
| 330 | 330 | |
| 331 | - qemu_get_8s(f,&s->divider); | |
| 331 | + if (version_id >= 2) | |
| 332 | + qemu_get_be16s(f, &s->divider); | |
| 333 | + else | |
| 334 | + s->divider = qemu_get_byte(f); | |
| 332 | 335 | qemu_get_8s(f,&s->rbr); |
| 333 | 336 | qemu_get_8s(f,&s->ier); |
| 334 | 337 | qemu_get_8s(f,&s->iir); |
| ... | ... | @@ -357,7 +360,7 @@ SerialState *serial_init(SetIRQFunc *set_irq, void *opaque, |
| 357 | 360 | s->iir = UART_IIR_NO_INT; |
| 358 | 361 | s->msr = UART_MSR_DCD | UART_MSR_DSR | UART_MSR_CTS; |
| 359 | 362 | |
| 360 | - register_savevm("serial", base, 1, serial_save, serial_load, s); | |
| 363 | + register_savevm("serial", base, 2, serial_save, serial_load, s); | |
| 361 | 364 | |
| 362 | 365 | register_ioport_write(base, 8, 1, serial_ioport_write, s); |
| 363 | 366 | register_ioport_read(base, 8, 1, serial_ioport_read, s); |
| ... | ... | @@ -444,7 +447,7 @@ SerialState *serial_mm_init (SetIRQFunc *set_irq, void *opaque, |
| 444 | 447 | s->base = base; |
| 445 | 448 | s->it_shift = it_shift; |
| 446 | 449 | |
| 447 | - register_savevm("serial", base, 1, serial_save, serial_load, s); | |
| 450 | + register_savevm("serial", base, 2, serial_save, serial_load, s); | |
| 448 | 451 | |
| 449 | 452 | s_io_memory = cpu_register_io_memory(0, serial_mm_read, |
| 450 | 453 | serial_mm_write, s); | ... | ... |