提交 5643706a 编写于 作者: G Gerd Hoffmann

console: add head to index to qemu consoles.

Signed-off-by: NGerd Hoffmann <kraxel@redhat.com>
上级 5c07d00f
...@@ -630,7 +630,7 @@ static int musicpal_lcd_init(SysBusDevice *sbd) ...@@ -630,7 +630,7 @@ static int musicpal_lcd_init(SysBusDevice *sbd)
"musicpal-lcd", MP_LCD_SIZE); "musicpal-lcd", MP_LCD_SIZE);
sysbus_init_mmio(sbd, &s->iomem); sysbus_init_mmio(sbd, &s->iomem);
s->con = graphic_console_init(dev, &musicpal_gfx_ops, s); s->con = graphic_console_init(dev, 0, &musicpal_gfx_ops, s);
qemu_console_resize(s->con, 128*3, 64*3); qemu_console_resize(s->con, 128*3, 64*3);
qdev_init_gpio_in(dev, musicpal_lcd_gpio_brightness_in, 3); qdev_init_gpio_in(dev, musicpal_lcd_gpio_brightness_in, 3);
......
...@@ -956,7 +956,7 @@ void *s1d13745_init(qemu_irq gpio_int) ...@@ -956,7 +956,7 @@ void *s1d13745_init(qemu_irq gpio_int)
s->fb = g_malloc(0x180000); s->fb = g_malloc(0x180000);
s->con = graphic_console_init(NULL, &blizzard_ops, s); s->con = graphic_console_init(NULL, 0, &blizzard_ops, s);
surface = qemu_console_surface(s->con); surface = qemu_console_surface(s->con);
switch (surface_bits_per_pixel(surface)) { switch (surface_bits_per_pixel(surface)) {
......
...@@ -306,7 +306,7 @@ static void cg3_realizefn(DeviceState *dev, Error **errp) ...@@ -306,7 +306,7 @@ static void cg3_realizefn(DeviceState *dev, Error **errp)
sysbus_init_irq(sbd, &s->irq); sysbus_init_irq(sbd, &s->irq);
s->con = graphic_console_init(DEVICE(dev), &cg3_ops, s); s->con = graphic_console_init(DEVICE(dev), 0, &cg3_ops, s);
qemu_console_resize(s->con, s->width, s->height); qemu_console_resize(s->con, s->width, s->height);
} }
......
...@@ -2917,7 +2917,7 @@ static void isa_cirrus_vga_realizefn(DeviceState *dev, Error **errp) ...@@ -2917,7 +2917,7 @@ static void isa_cirrus_vga_realizefn(DeviceState *dev, Error **errp)
cirrus_init_common(&d->cirrus_vga, OBJECT(dev), CIRRUS_ID_CLGD5430, 0, cirrus_init_common(&d->cirrus_vga, OBJECT(dev), CIRRUS_ID_CLGD5430, 0,
isa_address_space(isadev), isa_address_space(isadev),
isa_address_space_io(isadev)); isa_address_space_io(isadev));
s->con = graphic_console_init(dev, s->hw_ops, s); s->con = graphic_console_init(dev, 0, s->hw_ops, s);
rom_add_vga(VGABIOS_CIRRUS_FILENAME); rom_add_vga(VGABIOS_CIRRUS_FILENAME);
/* XXX ISA-LFB support */ /* XXX ISA-LFB support */
/* FIXME not qdev yet */ /* FIXME not qdev yet */
...@@ -2963,7 +2963,7 @@ static int pci_cirrus_vga_initfn(PCIDevice *dev) ...@@ -2963,7 +2963,7 @@ static int pci_cirrus_vga_initfn(PCIDevice *dev)
vga_common_init(&s->vga, OBJECT(dev)); vga_common_init(&s->vga, OBJECT(dev));
cirrus_init_common(s, OBJECT(dev), device_id, 1, pci_address_space(dev), cirrus_init_common(s, OBJECT(dev), device_id, 1, pci_address_space(dev),
pci_address_space_io(dev)); pci_address_space_io(dev));
s->vga.con = graphic_console_init(DEVICE(dev), s->vga.hw_ops, &s->vga); s->vga.con = graphic_console_init(DEVICE(dev), 0, s->vga.hw_ops, &s->vga);
/* setup PCI */ /* setup PCI */
......
...@@ -1917,7 +1917,7 @@ static int exynos4210_fimd_init(SysBusDevice *dev) ...@@ -1917,7 +1917,7 @@ static int exynos4210_fimd_init(SysBusDevice *dev)
memory_region_init_io(&s->iomem, OBJECT(s), &exynos4210_fimd_mmio_ops, s, memory_region_init_io(&s->iomem, OBJECT(s), &exynos4210_fimd_mmio_ops, s,
"exynos4210.fimd", FIMD_REGS_SIZE); "exynos4210.fimd", FIMD_REGS_SIZE);
sysbus_init_mmio(dev, &s->iomem); sysbus_init_mmio(dev, &s->iomem);
s->console = graphic_console_init(DEVICE(dev), &exynos4210_fimd_ops, s); s->console = graphic_console_init(DEVICE(dev), 0, &exynos4210_fimd_ops, s);
return 0; return 0;
} }
......
...@@ -484,7 +484,7 @@ static void g364fb_init(DeviceState *dev, G364State *s) ...@@ -484,7 +484,7 @@ static void g364fb_init(DeviceState *dev, G364State *s)
{ {
s->vram = g_malloc0(s->vram_size); s->vram = g_malloc0(s->vram_size);
s->con = graphic_console_init(dev, &g364fb_ops, s); s->con = graphic_console_init(dev, 0, &g364fb_ops, s);
memory_region_init_io(&s->mem_ctrl, NULL, &g364fb_ctrl_ops, s, "ctrl", 0x180000); memory_region_init_io(&s->mem_ctrl, NULL, &g364fb_ctrl_ops, s, "ctrl", 0x180000);
memory_region_init_ram_ptr(&s->mem_vram, NULL, "vram", memory_region_init_ram_ptr(&s->mem_vram, NULL, "vram",
......
...@@ -271,7 +271,7 @@ static int jazz_led_init(SysBusDevice *dev) ...@@ -271,7 +271,7 @@ static int jazz_led_init(SysBusDevice *dev)
memory_region_init_io(&s->iomem, OBJECT(s), &led_ops, s, "led", 1); memory_region_init_io(&s->iomem, OBJECT(s), &led_ops, s, "led", 1);
sysbus_init_mmio(dev, &s->iomem); sysbus_init_mmio(dev, &s->iomem);
s->con = graphic_console_init(DEVICE(dev), &jazz_led_ops, s); s->con = graphic_console_init(DEVICE(dev), 0, &jazz_led_ops, s);
return 0; return 0;
} }
......
...@@ -290,7 +290,7 @@ static int milkymist_vgafb_init(SysBusDevice *dev) ...@@ -290,7 +290,7 @@ static int milkymist_vgafb_init(SysBusDevice *dev)
"milkymist-vgafb", R_MAX * 4); "milkymist-vgafb", R_MAX * 4);
sysbus_init_mmio(dev, &s->regs_region); sysbus_init_mmio(dev, &s->regs_region);
s->con = graphic_console_init(DEVICE(dev), &vgafb_ops, s); s->con = graphic_console_init(DEVICE(dev), 0, &vgafb_ops, s);
return 0; return 0;
} }
......
...@@ -406,7 +406,7 @@ struct omap_lcd_panel_s *omap_lcdc_init(MemoryRegion *sysmem, ...@@ -406,7 +406,7 @@ struct omap_lcd_panel_s *omap_lcdc_init(MemoryRegion *sysmem,
memory_region_init_io(&s->iomem, NULL, &omap_lcdc_ops, s, "omap.lcdc", 0x100); memory_region_init_io(&s->iomem, NULL, &omap_lcdc_ops, s, "omap.lcdc", 0x100);
memory_region_add_subregion(sysmem, base, &s->iomem); memory_region_add_subregion(sysmem, base, &s->iomem);
s->con = graphic_console_init(NULL, &omap_ops, s); s->con = graphic_console_init(NULL, 0, &omap_ops, s);
return s; return s;
} }
...@@ -464,7 +464,7 @@ static int pl110_initfn(SysBusDevice *sbd) ...@@ -464,7 +464,7 @@ static int pl110_initfn(SysBusDevice *sbd)
sysbus_init_mmio(sbd, &s->iomem); sysbus_init_mmio(sbd, &s->iomem);
sysbus_init_irq(sbd, &s->irq); sysbus_init_irq(sbd, &s->irq);
qdev_init_gpio_in(dev, pl110_mux_ctrl_set, 1); qdev_init_gpio_in(dev, pl110_mux_ctrl_set, 1);
s->con = graphic_console_init(dev, &pl110_gfx_ops, s); s->con = graphic_console_init(dev, 0, &pl110_gfx_ops, s);
return 0; return 0;
} }
......
...@@ -1013,7 +1013,7 @@ PXA2xxLCDState *pxa2xx_lcdc_init(MemoryRegion *sysmem, ...@@ -1013,7 +1013,7 @@ PXA2xxLCDState *pxa2xx_lcdc_init(MemoryRegion *sysmem,
"pxa2xx-lcd-controller", 0x00100000); "pxa2xx-lcd-controller", 0x00100000);
memory_region_add_subregion(sysmem, base, &s->iomem); memory_region_add_subregion(sysmem, base, &s->iomem);
s->con = graphic_console_init(NULL, &pxa2xx_ops, s); s->con = graphic_console_init(NULL, 0, &pxa2xx_ops, s);
surface = qemu_console_surface(s->con); surface = qemu_console_surface(s->con);
switch (surface_bits_per_pixel(surface)) { switch (surface_bits_per_pixel(surface)) {
......
...@@ -2069,7 +2069,7 @@ static int qxl_init_primary(PCIDevice *dev) ...@@ -2069,7 +2069,7 @@ static int qxl_init_primary(PCIDevice *dev)
portio_list_set_flush_coalesced(qxl_vga_port_list); portio_list_set_flush_coalesced(qxl_vga_port_list);
portio_list_add(qxl_vga_port_list, pci_address_space_io(dev), 0x3b0); portio_list_add(qxl_vga_port_list, pci_address_space_io(dev), 0x3b0);
vga->con = graphic_console_init(DEVICE(dev), &qxl_ops, qxl); vga->con = graphic_console_init(DEVICE(dev), 0, &qxl_ops, qxl);
qemu_spice_display_init_common(&qxl->ssd); qemu_spice_display_init_common(&qxl->ssd);
rc = qxl_init_common(qxl); rc = qxl_init_common(qxl);
...@@ -2094,7 +2094,7 @@ static int qxl_init_secondary(PCIDevice *dev) ...@@ -2094,7 +2094,7 @@ static int qxl_init_secondary(PCIDevice *dev)
qxl->vga.vram_size); qxl->vga.vram_size);
vmstate_register_ram(&qxl->vga.vram, &qxl->pci.qdev); vmstate_register_ram(&qxl->vga.vram, &qxl->pci.qdev);
qxl->vga.vram_ptr = memory_region_get_ram_ptr(&qxl->vga.vram); qxl->vga.vram_ptr = memory_region_get_ram_ptr(&qxl->vga.vram);
qxl->vga.con = graphic_console_init(DEVICE(dev), &qxl_ops, qxl); qxl->vga.con = graphic_console_init(DEVICE(dev), 0, &qxl_ops, qxl);
return qxl_init_common(qxl); return qxl_init_common(qxl);
} }
......
...@@ -1449,5 +1449,5 @@ void sm501_init(MemoryRegion *address_space_mem, uint32_t base, ...@@ -1449,5 +1449,5 @@ void sm501_init(MemoryRegion *address_space_mem, uint32_t base,
} }
/* create qemu graphic console */ /* create qemu graphic console */
s->con = graphic_console_init(DEVICE(dev), &sm501_ops, s); s->con = graphic_console_init(DEVICE(dev), 0, &sm501_ops, s);
} }
...@@ -299,7 +299,7 @@ static int ssd0303_init(I2CSlave *i2c) ...@@ -299,7 +299,7 @@ static int ssd0303_init(I2CSlave *i2c)
{ {
ssd0303_state *s = SSD0303(i2c); ssd0303_state *s = SSD0303(i2c);
s->con = graphic_console_init(DEVICE(i2c), &ssd0303_ops, s); s->con = graphic_console_init(DEVICE(i2c), 0, &ssd0303_ops, s);
qemu_console_resize(s->con, 96 * MAGNIFY, 16 * MAGNIFY); qemu_console_resize(s->con, 96 * MAGNIFY, 16 * MAGNIFY);
return 0; return 0;
} }
......
...@@ -342,7 +342,7 @@ static int ssd0323_init(SSISlave *dev) ...@@ -342,7 +342,7 @@ static int ssd0323_init(SSISlave *dev)
s->col_end = 63; s->col_end = 63;
s->row_end = 79; s->row_end = 79;
s->con = graphic_console_init(DEVICE(dev), &ssd0323_ops, s); s->con = graphic_console_init(DEVICE(dev), 0, &ssd0323_ops, s);
qemu_console_resize(s->con, 128 * MAGNIFY, 64 * MAGNIFY); qemu_console_resize(s->con, 128 * MAGNIFY, 64 * MAGNIFY);
qdev_init_gpio_in(&dev->qdev, ssd0323_cd, 1); qdev_init_gpio_in(&dev->qdev, ssd0323_cd, 1);
......
...@@ -587,7 +587,7 @@ TC6393xbState *tc6393xb_init(MemoryRegion *sysmem, uint32_t base, qemu_irq irq) ...@@ -587,7 +587,7 @@ TC6393xbState *tc6393xb_init(MemoryRegion *sysmem, uint32_t base, qemu_irq irq)
memory_region_add_subregion(sysmem, base + 0x100000, &s->vram); memory_region_add_subregion(sysmem, base + 0x100000, &s->vram);
s->scr_width = 480; s->scr_width = 480;
s->scr_height = 640; s->scr_height = 640;
s->con = graphic_console_init(NULL, &tc6393xb_gfx_ops, s); s->con = graphic_console_init(NULL, 0, &tc6393xb_gfx_ops, s);
return s; return s;
} }
...@@ -602,14 +602,14 @@ static int tcx_init1(SysBusDevice *dev) ...@@ -602,14 +602,14 @@ static int tcx_init1(SysBusDevice *dev)
&s->vram_mem, vram_offset, size); &s->vram_mem, vram_offset, size);
sysbus_init_mmio(dev, &s->vram_cplane); sysbus_init_mmio(dev, &s->vram_cplane);
s->con = graphic_console_init(DEVICE(dev), &tcx24_ops, s); s->con = graphic_console_init(DEVICE(dev), 0, &tcx24_ops, s);
} else { } else {
/* THC 8 bit (dummy) */ /* THC 8 bit (dummy) */
memory_region_init_io(&s->thc8, OBJECT(s), &dummy_ops, s, "tcx.thc8", memory_region_init_io(&s->thc8, OBJECT(s), &dummy_ops, s, "tcx.thc8",
TCX_THC_NREGS_8); TCX_THC_NREGS_8);
sysbus_init_mmio(dev, &s->thc8); sysbus_init_mmio(dev, &s->thc8);
s->con = graphic_console_init(DEVICE(dev), &tcx_ops, s); s->con = graphic_console_init(DEVICE(dev), 0, &tcx_ops, s);
} }
qemu_console_resize(s->con, s->width, s->height); qemu_console_resize(s->con, s->width, s->height);
......
...@@ -135,7 +135,7 @@ int isa_vga_mm_init(hwaddr vram_base, ...@@ -135,7 +135,7 @@ int isa_vga_mm_init(hwaddr vram_base,
vga_common_init(&s->vga, NULL); vga_common_init(&s->vga, NULL);
vga_mm_init(s, vram_base, ctrl_base, it_shift, address_space); vga_mm_init(s, vram_base, ctrl_base, it_shift, address_space);
s->vga.con = graphic_console_init(NULL, s->vga.hw_ops, s); s->vga.con = graphic_console_init(NULL, 0, s->vga.hw_ops, s);
vga_init_vbe(&s->vga, NULL, address_space); vga_init_vbe(&s->vga, NULL, address_space);
return 0; return 0;
......
...@@ -67,7 +67,7 @@ static void vga_isa_realizefn(DeviceState *dev, Error **errp) ...@@ -67,7 +67,7 @@ static void vga_isa_realizefn(DeviceState *dev, Error **errp)
isa_mem_base + 0x000a0000, isa_mem_base + 0x000a0000,
vga_io_memory, 1); vga_io_memory, 1);
memory_region_set_coalescing(vga_io_memory); memory_region_set_coalescing(vga_io_memory);
s->con = graphic_console_init(DEVICE(dev), s->hw_ops, s); s->con = graphic_console_init(DEVICE(dev), 0, s->hw_ops, s);
vga_init_vbe(s, OBJECT(dev), isa_address_space(isadev)); vga_init_vbe(s, OBJECT(dev), isa_address_space(isadev));
/* ROM BIOS */ /* ROM BIOS */
......
...@@ -151,7 +151,7 @@ static int pci_std_vga_initfn(PCIDevice *dev) ...@@ -151,7 +151,7 @@ static int pci_std_vga_initfn(PCIDevice *dev)
vga_init(s, OBJECT(dev), pci_address_space(dev), pci_address_space_io(dev), vga_init(s, OBJECT(dev), pci_address_space(dev), pci_address_space_io(dev),
true); true);
s->con = graphic_console_init(DEVICE(dev), s->hw_ops, s); s->con = graphic_console_init(DEVICE(dev), 0, s->hw_ops, s);
/* XXX: VGA_RAM_SIZE must be a power of two */ /* XXX: VGA_RAM_SIZE must be a power of two */
pci_register_bar(&d->dev, 0, PCI_BASE_ADDRESS_MEM_PREFETCH, &s->vram); pci_register_bar(&d->dev, 0, PCI_BASE_ADDRESS_MEM_PREFETCH, &s->vram);
......
...@@ -1199,7 +1199,7 @@ static void vmsvga_init(DeviceState *dev, struct vmsvga_state_s *s, ...@@ -1199,7 +1199,7 @@ static void vmsvga_init(DeviceState *dev, struct vmsvga_state_s *s,
s->scratch_size = SVGA_SCRATCH_SIZE; s->scratch_size = SVGA_SCRATCH_SIZE;
s->scratch = g_malloc(s->scratch_size * 4); s->scratch = g_malloc(s->scratch_size * 4);
s->vga.con = graphic_console_init(dev, &vmsvga_ops, s); s->vga.con = graphic_console_init(dev, 0, &vmsvga_ops, s);
s->fifo_size = SVGA_FIFO_SIZE; s->fifo_size = SVGA_FIFO_SIZE;
memory_region_init_ram(&s->fifo_ram, NULL, "vmsvga.fifo", s->fifo_size); memory_region_init_ram(&s->fifo_ram, NULL, "vmsvga.fifo", s->fifo_size);
......
...@@ -98,7 +98,7 @@ static void puv3_load_kernel(const char *kernel_filename) ...@@ -98,7 +98,7 @@ static void puv3_load_kernel(const char *kernel_filename)
} }
/* cheat curses that we have a graphic console, only under ocd console */ /* cheat curses that we have a graphic console, only under ocd console */
graphic_console_init(NULL, &no_ops, NULL); graphic_console_init(NULL, 0, &no_ops, NULL);
} }
static void puv3_init(QEMUMachineInitArgs *args) static void puv3_init(QEMUMachineInitArgs *args)
......
...@@ -268,7 +268,7 @@ typedef struct GraphicHwOps { ...@@ -268,7 +268,7 @@ typedef struct GraphicHwOps {
void (*update_interval)(void *opaque, uint64_t interval); void (*update_interval)(void *opaque, uint64_t interval);
} GraphicHwOps; } GraphicHwOps;
QemuConsole *graphic_console_init(DeviceState *dev, QemuConsole *graphic_console_init(DeviceState *dev, uint32_t head,
const GraphicHwOps *ops, const GraphicHwOps *ops,
void *opaque); void *opaque);
...@@ -277,11 +277,12 @@ void graphic_hw_invalidate(QemuConsole *con); ...@@ -277,11 +277,12 @@ void graphic_hw_invalidate(QemuConsole *con);
void graphic_hw_text_update(QemuConsole *con, console_ch_t *chardata); void graphic_hw_text_update(QemuConsole *con, console_ch_t *chardata);
QemuConsole *qemu_console_lookup_by_index(unsigned int index); QemuConsole *qemu_console_lookup_by_index(unsigned int index);
QemuConsole *qemu_console_lookup_by_device(DeviceState *dev); QemuConsole *qemu_console_lookup_by_device(DeviceState *dev, uint32_t head);
bool qemu_console_is_visible(QemuConsole *con); bool qemu_console_is_visible(QemuConsole *con);
bool qemu_console_is_graphic(QemuConsole *con); bool qemu_console_is_graphic(QemuConsole *con);
bool qemu_console_is_fixedsize(QemuConsole *con); bool qemu_console_is_fixedsize(QemuConsole *con);
int qemu_console_get_index(QemuConsole *con); int qemu_console_get_index(QemuConsole *con);
uint32_t qemu_console_get_head(QemuConsole *con);
int qemu_console_get_width(QemuConsole *con, int fallback); int qemu_console_get_width(QemuConsole *con, int fallback);
int qemu_console_get_height(QemuConsole *con, int fallback); int qemu_console_get_height(QemuConsole *con, int fallback);
......
...@@ -124,6 +124,7 @@ struct QemuConsole { ...@@ -124,6 +124,7 @@ struct QemuConsole {
/* Graphic console state. */ /* Graphic console state. */
Object *device; Object *device;
uint32_t head;
const GraphicHwOps *hw_ops; const GraphicHwOps *hw_ops;
void *hw; void *hw;
...@@ -1179,6 +1180,8 @@ static QemuConsole *new_console(DisplayState *ds, console_type_t console_type) ...@@ -1179,6 +1180,8 @@ static QemuConsole *new_console(DisplayState *ds, console_type_t console_type)
s = QEMU_CONSOLE(obj); s = QEMU_CONSOLE(obj);
object_property_add_link(obj, "device", TYPE_DEVICE, object_property_add_link(obj, "device", TYPE_DEVICE,
(Object **)&s->device, &local_err); (Object **)&s->device, &local_err);
object_property_add_uint32_ptr(obj, "head",
&s->head, &local_err);
if (!active_console || ((active_console->console_type != GRAPHIC_CONSOLE) && if (!active_console || ((active_console->console_type != GRAPHIC_CONSOLE) &&
(console_type == GRAPHIC_CONSOLE))) { (console_type == GRAPHIC_CONSOLE))) {
...@@ -1569,7 +1572,7 @@ DisplayState *init_displaystate(void) ...@@ -1569,7 +1572,7 @@ DisplayState *init_displaystate(void)
return display_state; return display_state;
} }
QemuConsole *graphic_console_init(DeviceState *dev, QemuConsole *graphic_console_init(DeviceState *dev, uint32_t head,
const GraphicHwOps *hw_ops, const GraphicHwOps *hw_ops,
void *opaque) void *opaque)
{ {
...@@ -1587,6 +1590,8 @@ QemuConsole *graphic_console_init(DeviceState *dev, ...@@ -1587,6 +1590,8 @@ QemuConsole *graphic_console_init(DeviceState *dev,
if (dev) { if (dev) {
object_property_set_link(OBJECT(s), OBJECT(dev), object_property_set_link(OBJECT(s), OBJECT(dev),
"device", &local_err); "device", &local_err);
object_property_set_int(OBJECT(s), head,
"head", &local_err);
} }
s->surface = qemu_create_displaysurface(width, height); s->surface = qemu_create_displaysurface(width, height);
...@@ -1601,10 +1606,11 @@ QemuConsole *qemu_console_lookup_by_index(unsigned int index) ...@@ -1601,10 +1606,11 @@ QemuConsole *qemu_console_lookup_by_index(unsigned int index)
return consoles[index]; return consoles[index];
} }
QemuConsole *qemu_console_lookup_by_device(DeviceState *dev) QemuConsole *qemu_console_lookup_by_device(DeviceState *dev, uint32_t head)
{ {
Error *local_err = NULL; Error *local_err = NULL;
Object *obj; Object *obj;
uint32_t h;
int i; int i;
for (i = 0; i < nb_consoles; i++) { for (i = 0; i < nb_consoles; i++) {
...@@ -1613,9 +1619,15 @@ QemuConsole *qemu_console_lookup_by_device(DeviceState *dev) ...@@ -1613,9 +1619,15 @@ QemuConsole *qemu_console_lookup_by_device(DeviceState *dev)
} }
obj = object_property_get_link(OBJECT(consoles[i]), obj = object_property_get_link(OBJECT(consoles[i]),
"device", &local_err); "device", &local_err);
if (DEVICE(obj) == dev) { if (DEVICE(obj) != dev) {
return consoles[i]; continue;
}
h = object_property_get_int(OBJECT(consoles[i]),
"head", &local_err);
if (h != head) {
continue;
} }
return consoles[i];
} }
return NULL; return NULL;
} }
...@@ -1649,6 +1661,14 @@ int qemu_console_get_index(QemuConsole *con) ...@@ -1649,6 +1661,14 @@ int qemu_console_get_index(QemuConsole *con)
return con ? con->index : -1; return con ? con->index : -1;
} }
uint32_t qemu_console_get_head(QemuConsole *con)
{
if (con == NULL) {
con = active_console;
}
return con ? con->head : -1;
}
int qemu_console_get_width(QemuConsole *con, int fallback) int qemu_console_get_width(QemuConsole *con, int fallback)
{ {
if (con == NULL) { if (con == NULL) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册