Commit 8738a8d079b661a612e89612844dc270ef5f0924
1 parent
c0fe3827
serial load/save VM support (Vincent Pelletier)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1602 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
37 additions
and
0 deletions
hw/serial.c
| @@ -258,6 +258,41 @@ static void serial_event(void *opaque, int event) | @@ -258,6 +258,41 @@ static void serial_event(void *opaque, int event) | ||
| 258 | serial_receive_break(s); | 258 | serial_receive_break(s); |
| 259 | } | 259 | } |
| 260 | 260 | ||
| 261 | +static void serial_save(QEMUFile *f, void *opaque) | ||
| 262 | +{ | ||
| 263 | + SerialState *s = opaque; | ||
| 264 | + | ||
| 265 | + qemu_put_8s(f,&s->divider); | ||
| 266 | + qemu_put_8s(f,&s->rbr); | ||
| 267 | + qemu_put_8s(f,&s->ier); | ||
| 268 | + qemu_put_8s(f,&s->iir); | ||
| 269 | + qemu_put_8s(f,&s->lcr); | ||
| 270 | + qemu_put_8s(f,&s->mcr); | ||
| 271 | + qemu_put_8s(f,&s->lsr); | ||
| 272 | + qemu_put_8s(f,&s->msr); | ||
| 273 | + qemu_put_8s(f,&s->scr); | ||
| 274 | +} | ||
| 275 | + | ||
| 276 | +static int serial_load(QEMUFile *f, void *opaque, int version_id) | ||
| 277 | +{ | ||
| 278 | + SerialState *s = opaque; | ||
| 279 | + | ||
| 280 | + if(version_id != 1) | ||
| 281 | + return -EINVAL; | ||
| 282 | + | ||
| 283 | + qemu_get_8s(f,&s->divider); | ||
| 284 | + qemu_get_8s(f,&s->rbr); | ||
| 285 | + qemu_get_8s(f,&s->ier); | ||
| 286 | + qemu_get_8s(f,&s->iir); | ||
| 287 | + qemu_get_8s(f,&s->lcr); | ||
| 288 | + qemu_get_8s(f,&s->mcr); | ||
| 289 | + qemu_get_8s(f,&s->lsr); | ||
| 290 | + qemu_get_8s(f,&s->msr); | ||
| 291 | + qemu_get_8s(f,&s->scr); | ||
| 292 | + | ||
| 293 | + return 0; | ||
| 294 | +} | ||
| 295 | + | ||
| 261 | /* If fd is zero, it means that the serial device uses the console */ | 296 | /* If fd is zero, it means that the serial device uses the console */ |
| 262 | SerialState *serial_init(int base, int irq, CharDriverState *chr) | 297 | SerialState *serial_init(int base, int irq, CharDriverState *chr) |
| 263 | { | 298 | { |
| @@ -270,6 +305,8 @@ SerialState *serial_init(int base, int irq, CharDriverState *chr) | @@ -270,6 +305,8 @@ SerialState *serial_init(int base, int irq, CharDriverState *chr) | ||
| 270 | s->lsr = UART_LSR_TEMT | UART_LSR_THRE; | 305 | s->lsr = UART_LSR_TEMT | UART_LSR_THRE; |
| 271 | s->iir = UART_IIR_NO_INT; | 306 | s->iir = UART_IIR_NO_INT; |
| 272 | 307 | ||
| 308 | + register_savevm("serial", base, 1, serial_save, serial_load, s); | ||
| 309 | + | ||
| 273 | register_ioport_write(base, 8, 1, serial_ioport_write, s); | 310 | register_ioport_write(base, 8, 1, serial_ioport_write, s); |
| 274 | register_ioport_read(base, 8, 1, serial_ioport_read, s); | 311 | register_ioport_read(base, 8, 1, serial_ioport_read, s); |
| 275 | s->chr = chr; | 312 | s->chr = chr; |