diff --git a/devicemodel/hw/vga.c b/devicemodel/hw/vga.c index 02764304a..19cc06428 100644 --- a/devicemodel/hw/vga.c +++ b/devicemodel/hw/vga.c @@ -8,7 +8,6 @@ #include #include -#include #include #include #include @@ -339,7 +338,8 @@ vga_mem_rd_handler(struct vmctx *ctx, uint64_t addr, void *arg1) /* * monochrome text mode: base 0xb0000 size 32kb */ - assert(0); + pr_err("VGA: doesn't support monichrome text mode.\n"); + return 0; case 0x3: /* * color text mode and CGA: base 0xb8000 size 32kb @@ -357,7 +357,8 @@ vga_mem_rd_handler(struct vmctx *ctx, uint64_t addr, void *arg1) if (vd->vga_gc.gc_mode_rm) { /* read mode 1 */ - assert(0); + pr_err("VGA GC: doesn't support read mode 1.\n"); + return 0; } map_sel = vd->vga_gc.gc_read_map_sel; @@ -403,7 +404,8 @@ vga_mem_wr_handler(struct vmctx *ctx, uint64_t addr, uint8_t val, void *arg1) /* * monochrome text mode: base 0xb0000 size 32kb */ - assert(0); + pr_err("VGA: doesn't support monichrome text mode.\n"); + return; case 0x3: /* * color text mode and CGA: base 0xb8000 size 32kb @@ -778,8 +780,7 @@ vga_port_in_handler(struct vmctx *ctx, int in, int port, int bytes, break; default: pr_err("VGA CRTC: port 0x%04x at index %d\n", port, vd->vga_crtc.crtc_index); - assert(0); - break; + return (-1); } break; case ATC_IDX_PORT: @@ -807,8 +808,7 @@ vga_port_in_handler(struct vmctx *ctx, int in, int port, int bytes, break; default: pr_err("VGA ATC inb 0x%04x at index %d\n", port , vd->vga_atc.atc_index); - assert(0); - break; + return (-1); } break; case SEQ_IDX_PORT: @@ -833,8 +833,7 @@ vga_port_in_handler(struct vmctx *ctx, int in, int port, int bytes, break; default: pr_err("VGA SEQ: inb 0x%04x at index %d\n", port, vd->vga_seq.seq_index); - assert(0); - break; + return (-1); } break; case DAC_DATA_PORT: @@ -880,16 +879,15 @@ vga_port_in_handler(struct vmctx *ctx, int in, int port, int bytes, break; default: pr_err("VGA GC: inb 0x%04x at index %d\n", port, vd->vga_crtc.crtc_index); - assert(0); - break; + return (-1); } break; case GEN_MISC_OUTPUT_PORT: *val = vd->vga_misc; break; case GEN_INPUT_STS0_PORT: - assert(0); - break; + pr_err("VGA: doesn't support Status #0.\n"); + return (-1); case GEN_INPUT_STS1_MONO_PORT: case GEN_INPUT_STS1_COLOR_PORT: vd->vga_atc.atc_flipflop = 0; @@ -899,15 +897,13 @@ vga_port_in_handler(struct vmctx *ctx, int in, int port, int bytes, break; case GEN_FEATURE_CTRL_PORT: // OpenBvd calls this with bytes = 1 - //assert(0); *val = 0; break; case 0x3c3: *val = 0; break; default: - printf("vga_port_in_handler() unhandled port 0x%x\n", port); - //assert(0); + pr_err("%s: unhandled port 0x%x\n", __func__, port); return (-1); } @@ -1014,14 +1010,15 @@ vga_port_out_handler(struct vmctx *ctx, int in, int port, int bytes, break; default: pr_err("VGA CRTC: outb 0x%04x, 0x%02x at index %d\n", port, val, vd->vga_crtc.crtc_index); - assert(0); - break; + return (-1); } break; case ATC_IDX_PORT: if (vd->vga_atc.atc_flipflop == 0) { - if (vd->vga_atc.atc_index & 0x20) - assert(0); + if (vd->vga_atc.atc_index & 0x20) { + pr_err("VGA ATC: invalid index.\n"); + return (-1); + } vd->vga_atc.atc_index = val & ATC_IDX_MASK; } else { switch (vd->vga_atc.atc_index) { @@ -1049,8 +1046,7 @@ vga_port_out_handler(struct vmctx *ctx, int in, int port, int bytes, break; default: pr_err("VGA ATC: outb 0x%04x, 0x%02x at index %d\n", port, val, vd->vga_atc.atc_index); - assert(0); - break; + return (-1); } } vd->vga_atc.atc_flipflop ^= 1; @@ -1081,12 +1077,10 @@ vga_port_out_handler(struct vmctx *ctx, int in, int port, int bytes, case SEQ_MEMORY_MODE: vd->vga_seq.seq_mm = val; /* Windows queries Chain4 */ - //assert((vd->vga_seq.seq_mm & SEQ_MM_C4) == 0); break; default: pr_err("VGA SEQ: outb 0x%04x, 0x%02x at index %d\n", port, val, vd->vga_seq.seq_index); - assert(0); - break; + return (-1); } break; case DAC_MASK: @@ -1143,7 +1137,6 @@ vga_port_out_handler(struct vmctx *ctx, int in, int port, int bytes, case GC_MODE: vd->vga_gc.gc_mode = val; vd->vga_gc.gc_mode_c4 = (val & GC_MODE_C4) != 0; - assert(!vd->vga_gc.gc_mode_c4); vd->vga_gc.gc_mode_oe = (val & GC_MODE_OE) != 0; vd->vga_gc.gc_mode_rm = (val >> 3) & 0x1; vd->vga_gc.gc_mode_wm = val & 0x3; @@ -1165,8 +1158,7 @@ vga_port_out_handler(struct vmctx *ctx, int in, int port, int bytes, break; default: pr_err("VGA GC: outb 0x%04x, 0x%02x at index %d\n", port, val, vd->vga_gc.gc_index); - assert(0); - break; + return (-1); } break; case GEN_INPUT_STS0_PORT: @@ -1181,7 +1173,6 @@ vga_port_out_handler(struct vmctx *ctx, int in, int port, int bytes, // break; default: pr_dbg("vga_port_out_handler() unhandled port 0x%x, val 0x%x\n", port, val); - //assert(0); return (-1); } return (0); @@ -1232,7 +1223,6 @@ vga_port_handler(struct vmctx *ctx, int vcpu, int in, int port, int bytes, } break; default: - assert(0); return (-1); } @@ -1258,7 +1248,10 @@ vga_init(struct gfx_ctx *gc, int io_only) iop.arg = vd; error = register_inout(&iop); - assert(error == 0); + if (error == -1) { + pr_err("%s: failed to register inout port.\n", __func__); + return NULL; + } } vd->gc_image = gc->gc_image; @@ -1274,7 +1267,10 @@ vga_init(struct gfx_ctx *gc, int io_only) vd->mr.handler = vga_mem_handler; vd->mr.arg1 = vd; error = register_mem_fallback(&vd->mr); - assert(error == 0); + if (error == -1) { + pr_err("%s: failed to regitster mem fallback.\n", __func__); + return NULL; + } vd->vga_ram = malloc(256 * KB); memset(vd->vga_ram, 0, 256 * KB); @@ -1367,7 +1363,7 @@ vga_vbe_write(struct vmctx *ctx, int vcpu, struct vga *vga, break; default: pr_err("%s: write unknown size %d\n", __func__, size); - break; + return; } switch (offset) { @@ -1443,8 +1439,6 @@ void vga_deinit(struct vga *vga) iop.arg = NULL; unregister_inout(&iop); - //error = unregister_inout(&iop); - //assert(error == 0); } unregister_mem_fallback(&vd->mr);