* [Qemu-devel] [PULL 0/5] console: qom-ify consoles @ 2013-04-24 9:33 Gerd Hoffmann 2013-04-24 9:33 ` [Qemu-devel] [PATCH 1/5] console: qom-ify QemuConsole Gerd Hoffmann ` (5 more replies) 0 siblings, 6 replies; 7+ messages in thread From: Gerd Hoffmann @ 2013-04-24 9:33 UTC (permalink / raw) To: qemu-devel; +Cc: Gerd Hoffmann Hi, Here are the console patches, targeting 1.5. It's just the QemuConsole QOM-ification and two little fixes. I'll go hold back the screendump monitor patch until the dust from the qom api discussions has settled and it is clear which route we are taking wrt new vs. extended commands. Which implies it most likely is 1.6 material. please pull, Gerd The following changes since commit bb71623811686ce3c34ce724f073f5c5dd95f51b: Move TPM passthrough specific command line options to backend structure (2013-04-23 10:40:40 -0500) are available in the git repository at: git://git.kraxel.org/qemu pixman.v12 for you to fetch changes up to c7b02648d878828dd88868f59b5d666dbbbf1d6d: console: zap ds arg from register_displaychangelistener (2013-04-24 10:37:59 +0200) ---------------------------------------------------------------- Gerd Hoffmann (5): console: qom-ify QemuConsole console: add device link to QemuConsoles console: add qemu_console_lookup_by_device console: switch ppm_save to qemu_open console: zap ds arg from register_displaychangelistener hw/arm/musicpal.c | 2 +- hw/display/blizzard.c | 2 +- hw/display/cirrus_vga.c | 4 +-- hw/display/exynos4210_fimd.c | 2 +- hw/display/g364fb.c | 2 +- hw/display/jazz_led.c | 2 +- hw/display/milkymist-vgafb.c | 2 +- hw/display/omap_lcdc.c | 2 +- hw/display/pl110.c | 2 +- hw/display/pxa2xx_lcd.c | 2 +- hw/display/qxl.c | 6 ++-- hw/display/sm501.c | 2 +- hw/display/ssd0303.c | 2 +- hw/display/ssd0323.c | 2 +- hw/display/tc6393xb.c | 2 +- hw/display/tcx.c | 4 +-- hw/display/vga-isa-mm.c | 2 +- hw/display/vga-isa.c | 2 +- hw/display/vga-pci.c | 2 +- hw/display/vmware_vga.c | 7 +++-- hw/unicore32/puv3.c | 2 +- include/ui/console.h | 22 ++++++++++++-- ui/cocoa.m | 2 +- ui/console.c | 65 ++++++++++++++++++++++++++++++++++++------ ui/curses.c | 2 +- ui/gtk.c | 2 +- ui/sdl.c | 2 +- ui/spice-display.c | 2 +- ui/vnc.c | 2 +- 29 files changed, 109 insertions(+), 45 deletions(-) ^ permalink raw reply [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH 1/5] console: qom-ify QemuConsole 2013-04-24 9:33 [Qemu-devel] [PULL 0/5] console: qom-ify consoles Gerd Hoffmann @ 2013-04-24 9:33 ` Gerd Hoffmann 2013-04-24 9:33 ` [Qemu-devel] [PATCH 2/5] console: add device link to QemuConsoles Gerd Hoffmann ` (4 subsequent siblings) 5 siblings, 0 replies; 7+ messages in thread From: Gerd Hoffmann @ 2013-04-24 9:33 UTC (permalink / raw) To: qemu-devel; +Cc: Anthony Liguori, Gerd Hoffmann Just the minimal bits to turn QemuConsoles into Objects. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- include/ui/console.h | 15 +++++++++++++++ ui/console.c | 15 ++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/include/ui/console.h b/include/ui/console.h index e591d74..c8a274d 100644 --- a/include/ui/console.h +++ b/include/ui/console.h @@ -2,6 +2,7 @@ #define CONSOLE_H #include "ui/qemu-pixman.h" +#include "qom/object.h" #include "qapi/qmp/qdict.h" #include "qemu/notify.h" #include "monitor/monitor.h" @@ -106,6 +107,20 @@ void kbd_put_keysym(int keysym); /* consoles */ +#define TYPE_QEMU_CONSOLE "qemu-console" +#define QEMU_CONSOLE(obj) \ + OBJECT_CHECK(QemuConsole, (obj), TYPE_QEMU_CONSOLE) +#define QEMU_CONSOLE_GET_CLASS(obj) \ + OBJECT_GET_CLASS(QemuConsoleClass, (obj), TYPE_QEMU_CONSOLE) +#define QEMU_CONSOLE_CLASS(klass) \ + OBJECT_CLASS_CHECK(QemuConsoleClass, (klass), TYPE_QEMU_CONSOLE) + +typedef struct QemuConsoleClass QemuConsoleClass; + +struct QemuConsoleClass { + ObjectClass parent_class; +}; + #define QEMU_BIG_ENDIAN_FLAG 0x01 #define QEMU_ALLOCATED_FLAG 0x02 diff --git a/ui/console.c b/ui/console.c index 4f9219e..e9f3080 100644 --- a/ui/console.c +++ b/ui/console.c @@ -113,6 +113,8 @@ typedef enum { } console_type_t; struct QemuConsole { + Object parent; + int index; console_type_t console_type; DisplayState *ds; @@ -1197,12 +1199,14 @@ static void text_console_update(void *opaque, console_ch_t *chardata) static QemuConsole *new_console(DisplayState *ds, console_type_t console_type) { + Object *obj; QemuConsole *s; int i; if (nb_consoles >= MAX_CONSOLES) return NULL; - s = g_malloc0(sizeof(QemuConsole)); + obj = object_new(TYPE_QEMU_CONSOLE); + s = QEMU_CONSOLE(obj); if (!active_console || ((active_console->console_type != GRAPHIC_CONSOLE) && (console_type == GRAPHIC_CONSOLE))) { active_console = s; @@ -1920,8 +1924,17 @@ static void qemu_chr_parse_vc(QemuOpts *opts, ChardevBackend *backend, } } +static const TypeInfo qemu_console_info = { + .name = TYPE_QEMU_CONSOLE, + .parent = TYPE_OBJECT, + .instance_size = sizeof(QemuConsole), + .class_size = sizeof(QemuConsoleClass), +}; + + static void register_types(void) { + type_register_static(&qemu_console_info); register_char_driver_qapi("vc", CHARDEV_BACKEND_KIND_VC, qemu_chr_parse_vc); } -- 1.7.9.7 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH 2/5] console: add device link to QemuConsoles 2013-04-24 9:33 [Qemu-devel] [PULL 0/5] console: qom-ify consoles Gerd Hoffmann 2013-04-24 9:33 ` [Qemu-devel] [PATCH 1/5] console: qom-ify QemuConsole Gerd Hoffmann @ 2013-04-24 9:33 ` Gerd Hoffmann 2013-04-24 9:33 ` [Qemu-devel] [PATCH 3/5] console: add qemu_console_lookup_by_device Gerd Hoffmann ` (3 subsequent siblings) 5 siblings, 0 replies; 7+ messages in thread From: Gerd Hoffmann @ 2013-04-24 9:33 UTC (permalink / raw) To: qemu-devel Cc: Peter Maydell, Anthony Liguori, Dmitry Solodkiy, Igor Mitsyanko, Evgeny Voevodin, Jan Kiszka, Gerd Hoffmann, Guan Xuetao, Maksim Kozlov, Paul Brook So it is possible to figure which qemu console displays which device. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- hw/arm/musicpal.c | 2 +- hw/display/blizzard.c | 2 +- hw/display/cirrus_vga.c | 4 ++-- hw/display/exynos4210_fimd.c | 2 +- hw/display/g364fb.c | 2 +- hw/display/jazz_led.c | 2 +- hw/display/milkymist-vgafb.c | 2 +- hw/display/omap_lcdc.c | 2 +- hw/display/pl110.c | 2 +- hw/display/pxa2xx_lcd.c | 2 +- hw/display/qxl.c | 4 ++-- hw/display/sm501.c | 2 +- hw/display/ssd0303.c | 2 +- hw/display/ssd0323.c | 2 +- hw/display/tc6393xb.c | 2 +- hw/display/tcx.c | 4 ++-- hw/display/vga-isa-mm.c | 2 +- hw/display/vga-isa.c | 2 +- hw/display/vga-pci.c | 2 +- hw/display/vmware_vga.c | 7 ++++--- hw/unicore32/puv3.c | 2 +- include/ui/console.h | 3 ++- ui/console.c | 15 ++++++++++++++- 23 files changed, 43 insertions(+), 28 deletions(-) diff --git a/hw/arm/musicpal.c b/hw/arm/musicpal.c index f33ba9a..fbaf2be 100644 --- a/hw/arm/musicpal.c +++ b/hw/arm/musicpal.c @@ -616,7 +616,7 @@ static int musicpal_lcd_init(SysBusDevice *dev) "musicpal-lcd", MP_LCD_SIZE); sysbus_init_mmio(dev, &s->iomem); - s->con = graphic_console_init(&musicpal_gfx_ops, s); + s->con = graphic_console_init(DEVICE(dev), &musicpal_gfx_ops, s); qemu_console_resize(s->con, 128*3, 64*3); qdev_init_gpio_in(&dev->qdev, musicpal_lcd_gpio_brigthness_in, 3); diff --git a/hw/display/blizzard.c b/hw/display/blizzard.c index 1ca3355..4a466c8 100644 --- a/hw/display/blizzard.c +++ b/hw/display/blizzard.c @@ -956,7 +956,7 @@ void *s1d13745_init(qemu_irq gpio_int) s->fb = g_malloc(0x180000); - s->con = graphic_console_init(&blizzard_ops, s); + s->con = graphic_console_init(NULL, &blizzard_ops, s); surface = qemu_console_surface(s->con); switch (surface_bits_per_pixel(surface)) { diff --git a/hw/display/cirrus_vga.c b/hw/display/cirrus_vga.c index db232af..6e47956 100644 --- a/hw/display/cirrus_vga.c +++ b/hw/display/cirrus_vga.c @@ -2910,7 +2910,7 @@ static int vga_initfn(ISADevice *dev) vga_common_init(s); cirrus_init_common(&d->cirrus_vga, CIRRUS_ID_CLGD5430, 0, isa_address_space(dev), isa_address_space_io(dev)); - s->con = graphic_console_init(s->hw_ops, s); + s->con = graphic_console_init(DEVICE(dev), s->hw_ops, s); rom_add_vga(VGABIOS_CIRRUS_FILENAME); /* XXX ISA-LFB support */ /* FIXME not qdev yet */ @@ -2957,7 +2957,7 @@ static int pci_cirrus_vga_initfn(PCIDevice *dev) vga_common_init(&s->vga); cirrus_init_common(s, device_id, 1, pci_address_space(dev), pci_address_space_io(dev)); - s->vga.con = graphic_console_init(s->vga.hw_ops, &s->vga); + s->vga.con = graphic_console_init(DEVICE(dev), s->vga.hw_ops, &s->vga); /* setup PCI */ diff --git a/hw/display/exynos4210_fimd.c b/hw/display/exynos4210_fimd.c index e6e7b27..6cb5016 100644 --- a/hw/display/exynos4210_fimd.c +++ b/hw/display/exynos4210_fimd.c @@ -1905,7 +1905,7 @@ static int exynos4210_fimd_init(SysBusDevice *dev) memory_region_init_io(&s->iomem, &exynos4210_fimd_mmio_ops, s, "exynos4210.fimd", FIMD_REGS_SIZE); sysbus_init_mmio(dev, &s->iomem); - s->console = graphic_console_init(&exynos4210_fimd_ops, s); + s->console = graphic_console_init(DEVICE(dev), &exynos4210_fimd_ops, s); return 0; } diff --git a/hw/display/g364fb.c b/hw/display/g364fb.c index 03810e9..2a4047e 100644 --- a/hw/display/g364fb.c +++ b/hw/display/g364fb.c @@ -484,7 +484,7 @@ static void g364fb_init(DeviceState *dev, G364State *s) { s->vram = g_malloc0(s->vram_size); - s->con = graphic_console_init(&g364fb_ops, s); + s->con = graphic_console_init(dev, &g364fb_ops, s); memory_region_init_io(&s->mem_ctrl, &g364fb_ctrl_ops, s, "ctrl", 0x180000); memory_region_init_ram_ptr(&s->mem_vram, "vram", diff --git a/hw/display/jazz_led.c b/hw/display/jazz_led.c index 6306d8c..52035fc 100644 --- a/hw/display/jazz_led.c +++ b/hw/display/jazz_led.c @@ -267,7 +267,7 @@ static int jazz_led_init(SysBusDevice *dev) memory_region_init_io(&s->iomem, &led_ops, s, "led", 1); sysbus_init_mmio(dev, &s->iomem); - s->con = graphic_console_init(&jazz_led_ops, s); + s->con = graphic_console_init(DEVICE(dev), &jazz_led_ops, s); return 0; } diff --git a/hw/display/milkymist-vgafb.c b/hw/display/milkymist-vgafb.c index 716997c..3828296 100644 --- a/hw/display/milkymist-vgafb.c +++ b/hw/display/milkymist-vgafb.c @@ -283,7 +283,7 @@ static int milkymist_vgafb_init(SysBusDevice *dev) "milkymist-vgafb", R_MAX * 4); sysbus_init_mmio(dev, &s->regs_region); - s->con = graphic_console_init(&vgafb_ops, s); + s->con = graphic_console_init(DEVICE(dev), &vgafb_ops, s); return 0; } diff --git a/hw/display/omap_lcdc.c b/hw/display/omap_lcdc.c index e4a5595..fb72ebe 100644 --- a/hw/display/omap_lcdc.c +++ b/hw/display/omap_lcdc.c @@ -406,7 +406,7 @@ struct omap_lcd_panel_s *omap_lcdc_init(MemoryRegion *sysmem, memory_region_init_io(&s->iomem, &omap_lcdc_ops, s, "omap.lcdc", 0x100); memory_region_add_subregion(sysmem, base, &s->iomem); - s->con = graphic_console_init(&omap_ops, s); + s->con = graphic_console_init(NULL, &omap_ops, s); return s; } diff --git a/hw/display/pl110.c b/hw/display/pl110.c index d232431..f259955 100644 --- a/hw/display/pl110.c +++ b/hw/display/pl110.c @@ -457,7 +457,7 @@ static int pl110_init(SysBusDevice *dev) sysbus_init_mmio(dev, &s->iomem); sysbus_init_irq(dev, &s->irq); qdev_init_gpio_in(&s->busdev.qdev, pl110_mux_ctrl_set, 1); - s->con = graphic_console_init(&pl110_gfx_ops, s); + s->con = graphic_console_init(DEVICE(dev), &pl110_gfx_ops, s); return 0; } diff --git a/hw/display/pxa2xx_lcd.c b/hw/display/pxa2xx_lcd.c index 76276cf..3b68f26 100644 --- a/hw/display/pxa2xx_lcd.c +++ b/hw/display/pxa2xx_lcd.c @@ -1013,7 +1013,7 @@ PXA2xxLCDState *pxa2xx_lcdc_init(MemoryRegion *sysmem, "pxa2xx-lcd-controller", 0x00100000); memory_region_add_subregion(sysmem, base, &s->iomem); - s->con = graphic_console_init(&pxa2xx_ops, s); + s->con = graphic_console_init(NULL, &pxa2xx_ops, s); surface = qemu_console_surface(s->con); switch (surface_bits_per_pixel(surface)) { diff --git a/hw/display/qxl.c b/hw/display/qxl.c index e679830..f8bd7ff 100644 --- a/hw/display/qxl.c +++ b/hw/display/qxl.c @@ -2069,7 +2069,7 @@ static int qxl_init_primary(PCIDevice *dev) portio_list_init(qxl_vga_port_list, qxl_vga_portio_list, vga, "vga"); portio_list_add(qxl_vga_port_list, pci_address_space_io(dev), 0x3b0); - vga->con = graphic_console_init(&qxl_ops, qxl); + vga->con = graphic_console_init(DEVICE(dev), &qxl_ops, qxl); qemu_spice_display_init_common(&qxl->ssd); rc = qxl_init_common(qxl); @@ -2094,7 +2094,7 @@ static int qxl_init_secondary(PCIDevice *dev) memory_region_init_ram(&qxl->vga.vram, "qxl.vgavram", qxl->vga.vram_size); vmstate_register_ram(&qxl->vga.vram, &qxl->pci.qdev); qxl->vga.vram_ptr = memory_region_get_ram_ptr(&qxl->vga.vram); - qxl->vga.con = graphic_console_init(&qxl_ops, qxl); + qxl->vga.con = graphic_console_init(DEVICE(dev), &qxl_ops, qxl); return qxl_init_common(qxl); } diff --git a/hw/display/sm501.c b/hw/display/sm501.c index 916816f..f72e488 100644 --- a/hw/display/sm501.c +++ b/hw/display/sm501.c @@ -1448,5 +1448,5 @@ void sm501_init(MemoryRegion *address_space_mem, uint32_t base, } /* create qemu graphic console */ - s->con = graphic_console_init(&sm501_ops, s); + s->con = graphic_console_init(DEVICE(dev), &sm501_ops, s); } diff --git a/hw/display/ssd0303.c b/hw/display/ssd0303.c index 3d7ebbe..beea5bf 100644 --- a/hw/display/ssd0303.c +++ b/hw/display/ssd0303.c @@ -293,7 +293,7 @@ static int ssd0303_init(I2CSlave *i2c) { ssd0303_state *s = FROM_I2C_SLAVE(ssd0303_state, i2c); - s->con = graphic_console_init(&ssd0303_ops, s); + s->con = graphic_console_init(DEVICE(i2c), &ssd0303_ops, s); qemu_console_resize(s->con, 96 * MAGNIFY, 16 * MAGNIFY); return 0; } diff --git a/hw/display/ssd0323.c b/hw/display/ssd0323.c index 45e8dc1..c3231c6 100644 --- a/hw/display/ssd0323.c +++ b/hw/display/ssd0323.c @@ -342,7 +342,7 @@ static int ssd0323_init(SSISlave *dev) s->col_end = 63; s->row_end = 79; - s->con = graphic_console_init(&ssd0323_ops, s); + s->con = graphic_console_init(DEVICE(dev), &ssd0323_ops, s); qemu_console_resize(s->con, 128 * MAGNIFY, 64 * MAGNIFY); qdev_init_gpio_in(&dev->qdev, ssd0323_cd, 1); diff --git a/hw/display/tc6393xb.c b/hw/display/tc6393xb.c index b5b255c..0cb87bc 100644 --- a/hw/display/tc6393xb.c +++ b/hw/display/tc6393xb.c @@ -587,7 +587,7 @@ TC6393xbState *tc6393xb_init(MemoryRegion *sysmem, uint32_t base, qemu_irq irq) memory_region_add_subregion(sysmem, base + 0x100000, &s->vram); s->scr_width = 480; s->scr_height = 640; - s->con = graphic_console_init(&tc6393xb_gfx_ops, s); + s->con = graphic_console_init(NULL, &tc6393xb_gfx_ops, s); return s; } diff --git a/hw/display/tcx.c b/hw/display/tcx.c index d7465c6..fc27f45 100644 --- a/hw/display/tcx.c +++ b/hw/display/tcx.c @@ -571,14 +571,14 @@ static int tcx_init1(SysBusDevice *dev) &s->vram_mem, vram_offset, size); sysbus_init_mmio(dev, &s->vram_cplane); - s->con = graphic_console_init(&tcx24_ops, s); + s->con = graphic_console_init(DEVICE(dev), &tcx24_ops, s); } else { /* THC 8 bit (dummy) */ memory_region_init_io(&s->thc8, &dummy_ops, s, "tcx.thc8", TCX_THC_NREGS_8); sysbus_init_mmio(dev, &s->thc8); - s->con = graphic_console_init(&tcx_ops, s); + s->con = graphic_console_init(DEVICE(dev), &tcx_ops, s); } qemu_console_resize(s->con, s->width, s->height); diff --git a/hw/display/vga-isa-mm.c b/hw/display/vga-isa-mm.c index 2da08a1..ceeb92f 100644 --- a/hw/display/vga-isa-mm.c +++ b/hw/display/vga-isa-mm.c @@ -135,7 +135,7 @@ int isa_vga_mm_init(hwaddr vram_base, vga_common_init(&s->vga); vga_mm_init(s, vram_base, ctrl_base, it_shift, address_space); - s->vga.con = graphic_console_init(s->vga.hw_ops, s); + s->vga.con = graphic_console_init(NULL, s->vga.hw_ops, s); vga_init_vbe(&s->vga, address_space); return 0; diff --git a/hw/display/vga-isa.c b/hw/display/vga-isa.c index d2c548e..2b3cc9b 100644 --- a/hw/display/vga-isa.c +++ b/hw/display/vga-isa.c @@ -62,7 +62,7 @@ static int vga_initfn(ISADevice *dev) isa_mem_base + 0x000a0000, vga_io_memory, 1); memory_region_set_coalescing(vga_io_memory); - s->con = graphic_console_init(s->hw_ops, s); + s->con = graphic_console_init(DEVICE(dev), s->hw_ops, s); vga_init_vbe(s, isa_address_space(dev)); /* ROM BIOS */ diff --git a/hw/display/vga-pci.c b/hw/display/vga-pci.c index dc73f28..cea8db7 100644 --- a/hw/display/vga-pci.c +++ b/hw/display/vga-pci.c @@ -150,7 +150,7 @@ static int pci_std_vga_initfn(PCIDevice *dev) vga_common_init(s); vga_init(s, pci_address_space(dev), pci_address_space_io(dev), true); - s->con = graphic_console_init(s->hw_ops, s); + s->con = graphic_console_init(DEVICE(dev), s->hw_ops, s); /* XXX: VGA_RAM_SIZE must be a power of two */ pci_register_bar(&d->dev, 0, PCI_BASE_ADDRESS_MEM_PREFETCH, &s->vram); diff --git a/hw/display/vmware_vga.c b/hw/display/vmware_vga.c index 263bf09..fd3569d 100644 --- a/hw/display/vmware_vga.c +++ b/hw/display/vmware_vga.c @@ -1185,13 +1185,13 @@ static const GraphicHwOps vmsvga_ops = { .text_update = vmsvga_text_update, }; -static void vmsvga_init(struct vmsvga_state_s *s, +static void vmsvga_init(DeviceState *dev, struct vmsvga_state_s *s, MemoryRegion *address_space, MemoryRegion *io) { s->scratch_size = SVGA_SCRATCH_SIZE; s->scratch = g_malloc(s->scratch_size * 4); - s->vga.con = graphic_console_init(&vmsvga_ops, s); + s->vga.con = graphic_console_init(dev, &vmsvga_ops, s); s->fifo_size = SVGA_FIFO_SIZE; memory_region_init_ram(&s->fifo_ram, "vmsvga.fifo", s->fifo_size); @@ -1258,7 +1258,8 @@ static int pci_vmsvga_initfn(PCIDevice *dev) memory_region_set_flush_coalesced(&s->io_bar); pci_register_bar(&s->card, 0, PCI_BASE_ADDRESS_SPACE_IO, &s->io_bar); - vmsvga_init(&s->chip, pci_address_space(dev), pci_address_space_io(dev)); + vmsvga_init(DEVICE(dev), &s->chip, + pci_address_space(dev), pci_address_space_io(dev)); pci_register_bar(&s->card, 1, PCI_BASE_ADDRESS_MEM_PREFETCH, &s->chip.vga.vram); diff --git a/hw/unicore32/puv3.c b/hw/unicore32/puv3.c index f8d32bc..56d1afa 100644 --- a/hw/unicore32/puv3.c +++ b/hw/unicore32/puv3.c @@ -94,7 +94,7 @@ static void puv3_load_kernel(const char *kernel_filename) } /* cheat curses that we have a graphic console, only under ocd console */ - graphic_console_init(&no_ops, NULL); + graphic_console_init(NULL, &no_ops, NULL); } static void puv3_init(QEMUMachineInitArgs *args) diff --git a/include/ui/console.h b/include/ui/console.h index c8a274d..22670d8 100644 --- a/include/ui/console.h +++ b/include/ui/console.h @@ -291,7 +291,8 @@ typedef struct GraphicHwOps { void (*update_interval)(void *opaque, uint64_t interval); } GraphicHwOps; -QemuConsole *graphic_console_init(const GraphicHwOps *ops, +QemuConsole *graphic_console_init(DeviceState *dev, + const GraphicHwOps *ops, void *opaque); void graphic_hw_update(QemuConsole *con); diff --git a/ui/console.c b/ui/console.c index e9f3080..4102e8c 100644 --- a/ui/console.c +++ b/ui/console.c @@ -23,6 +23,7 @@ */ #include "qemu-common.h" #include "ui/console.h" +#include "hw/qdev-core.h" #include "qemu/timer.h" #include "qmp-commands.h" #include "sysemu/char.h" @@ -122,6 +123,7 @@ struct QemuConsole { int dcls; /* Graphic console state. */ + Object *device; const GraphicHwOps *hw_ops; void *hw; @@ -1199,14 +1201,19 @@ static void text_console_update(void *opaque, console_ch_t *chardata) static QemuConsole *new_console(DisplayState *ds, console_type_t console_type) { + Error *local_err = NULL; Object *obj; QemuConsole *s; int i; if (nb_consoles >= MAX_CONSOLES) return NULL; + obj = object_new(TYPE_QEMU_CONSOLE); s = QEMU_CONSOLE(obj); + object_property_add_link(obj, "device", TYPE_DEVICE, + (Object **)&s->device, &local_err); + if (!active_console || ((active_console->console_type != GRAPHIC_CONSOLE) && (console_type == GRAPHIC_CONSOLE))) { active_console = s; @@ -1557,9 +1564,11 @@ DisplayState *init_displaystate(void) return display_state; } -QemuConsole *graphic_console_init(const GraphicHwOps *hw_ops, +QemuConsole *graphic_console_init(DeviceState *dev, + const GraphicHwOps *hw_ops, void *opaque) { + Error *local_err = NULL; int width = 640; int height = 480; QemuConsole *s; @@ -1570,6 +1579,10 @@ QemuConsole *graphic_console_init(const GraphicHwOps *hw_ops, s = new_console(ds, GRAPHIC_CONSOLE); s->hw_ops = hw_ops; s->hw = opaque; + if (dev) { + object_property_set_link(OBJECT(s), OBJECT(dev), + "device", &local_err); + } s->surface = qemu_create_displaysurface(width, height); return s; -- 1.7.9.7 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH 3/5] console: add qemu_console_lookup_by_device 2013-04-24 9:33 [Qemu-devel] [PULL 0/5] console: qom-ify consoles Gerd Hoffmann 2013-04-24 9:33 ` [Qemu-devel] [PATCH 1/5] console: qom-ify QemuConsole Gerd Hoffmann 2013-04-24 9:33 ` [Qemu-devel] [PATCH 2/5] console: add device link to QemuConsoles Gerd Hoffmann @ 2013-04-24 9:33 ` Gerd Hoffmann 2013-04-24 9:33 ` [Qemu-devel] [PATCH 4/5] console: switch ppm_save to qemu_open Gerd Hoffmann ` (2 subsequent siblings) 5 siblings, 0 replies; 7+ messages in thread From: Gerd Hoffmann @ 2013-04-24 9:33 UTC (permalink / raw) To: qemu-devel; +Cc: Anthony Liguori, Gerd Hoffmann Look up the QemuConsole for a given device, using the new link. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- include/ui/console.h | 1 + ui/console.c | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/include/ui/console.h b/include/ui/console.h index 22670d8..c74e791 100644 --- a/include/ui/console.h +++ b/include/ui/console.h @@ -300,6 +300,7 @@ void graphic_hw_invalidate(QemuConsole *con); 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_device(DeviceState *dev); bool qemu_console_is_visible(QemuConsole *con); bool qemu_console_is_graphic(QemuConsole *con); bool qemu_console_is_fixedsize(QemuConsole *con); diff --git a/ui/console.c b/ui/console.c index 4102e8c..e3ab985 100644 --- a/ui/console.c +++ b/ui/console.c @@ -1596,6 +1596,25 @@ QemuConsole *qemu_console_lookup_by_index(unsigned int index) return consoles[index]; } +QemuConsole *qemu_console_lookup_by_device(DeviceState *dev) +{ + Error *local_err = NULL; + Object *obj; + int i; + + for (i = 0; i < nb_consoles; i++) { + if (!consoles[i]) { + continue; + } + obj = object_property_get_link(OBJECT(consoles[i]), + "device", &local_err); + if (DEVICE(obj) == dev) { + return consoles[i]; + } + } + return NULL; +} + bool qemu_console_is_visible(QemuConsole *con) { return (con == active_console) || (con->dcls > 0); -- 1.7.9.7 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH 4/5] console: switch ppm_save to qemu_open 2013-04-24 9:33 [Qemu-devel] [PULL 0/5] console: qom-ify consoles Gerd Hoffmann ` (2 preceding siblings ...) 2013-04-24 9:33 ` [Qemu-devel] [PATCH 3/5] console: add qemu_console_lookup_by_device Gerd Hoffmann @ 2013-04-24 9:33 ` Gerd Hoffmann 2013-04-24 9:33 ` [Qemu-devel] [PATCH 5/5] console: zap ds arg from register_displaychangelistener Gerd Hoffmann 2013-04-24 16:49 ` [Qemu-devel] [PULL 0/5] console: qom-ify consoles Anthony Liguori 5 siblings, 0 replies; 7+ messages in thread From: Gerd Hoffmann @ 2013-04-24 9:33 UTC (permalink / raw) To: qemu-devel; +Cc: Anthony Liguori, Gerd Hoffmann ... so it works with fdset. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- ui/console.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ui/console.c b/ui/console.c index e3ab985..3835316 100644 --- a/ui/console.c +++ b/ui/console.c @@ -269,18 +269,20 @@ static void ppm_save(const char *filename, struct DisplaySurface *ds, { int width = pixman_image_get_width(ds->image); int height = pixman_image_get_height(ds->image); + int fd; FILE *f; int y; int ret; pixman_image_t *linebuf; trace_ppm_save(filename, ds); - f = fopen(filename, "wb"); - if (!f) { + fd = qemu_open(filename, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0666); + if (fd == -1) { error_setg(errp, "failed to open file '%s': %s", filename, strerror(errno)); return; } + f = fdopen(fd, "wb"); ret = fprintf(f, "P6\n%d %d\n%d\n", width, height, 255); if (ret < 0) { linebuf = NULL; -- 1.7.9.7 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH 5/5] console: zap ds arg from register_displaychangelistener 2013-04-24 9:33 [Qemu-devel] [PULL 0/5] console: qom-ify consoles Gerd Hoffmann ` (3 preceding siblings ...) 2013-04-24 9:33 ` [Qemu-devel] [PATCH 4/5] console: switch ppm_save to qemu_open Gerd Hoffmann @ 2013-04-24 9:33 ` Gerd Hoffmann 2013-04-24 16:49 ` [Qemu-devel] [PULL 0/5] console: qom-ify consoles Anthony Liguori 5 siblings, 0 replies; 7+ messages in thread From: Gerd Hoffmann @ 2013-04-24 9:33 UTC (permalink / raw) To: qemu-devel; +Cc: Andreas Färber, Gerd Hoffmann, Anthony Liguori We don't have multiple DisplayStates any more, so passing it in as argument is not needed. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- hw/display/qxl.c | 2 +- include/ui/console.h | 3 +-- ui/cocoa.m | 2 +- ui/console.c | 10 +++++----- ui/curses.c | 2 +- ui/gtk.c | 2 +- ui/sdl.c | 2 +- ui/spice-display.c | 2 +- ui/vnc.c | 2 +- 9 files changed, 13 insertions(+), 14 deletions(-) diff --git a/hw/display/qxl.c b/hw/display/qxl.c index f8bd7ff..a14296c 100644 --- a/hw/display/qxl.c +++ b/hw/display/qxl.c @@ -2080,7 +2080,7 @@ static int qxl_init_primary(PCIDevice *dev) qxl->ssd.dcl.ops = &display_listener_ops; qxl->ssd.dcl.con = vga->con; ds = qemu_console_displaystate(vga->con); - register_displaychangelistener(ds, &qxl->ssd.dcl); + register_displaychangelistener(&qxl->ssd.dcl); return rc; } diff --git a/include/ui/console.h b/include/ui/console.h index c74e791..3e00c99 100644 --- a/include/ui/console.h +++ b/include/ui/console.h @@ -221,8 +221,7 @@ static inline int is_buffer_shared(DisplaySurface *surface) return !(surface->flags & QEMU_ALLOCATED_FLAG); } -void register_displaychangelistener(DisplayState *ds, - DisplayChangeListener *dcl); +void register_displaychangelistener(DisplayChangeListener *dcl); void update_displaychangelistener(DisplayChangeListener *dcl, uint64_t interval); void unregister_displaychangelistener(DisplayChangeListener *dcl); diff --git a/ui/cocoa.m b/ui/cocoa.m index d51462a..1971d9c 100644 --- a/ui/cocoa.m +++ b/ui/cocoa.m @@ -1030,7 +1030,7 @@ void cocoa_display_init(DisplayState *ds, int full_screen) // register vga output callbacks dcl->ops = &dcl_ops; - register_displaychangelistener(ds, dcl); + register_displaychangelistener(dcl); // register cleanup function atexit(cocoa_cleanup); diff --git a/ui/console.c b/ui/console.c index 3835316..a13fb64 100644 --- a/ui/console.c +++ b/ui/console.c @@ -178,6 +178,7 @@ static int nb_consoles = 0; static void text_console_do_init(CharDriverState *chr, DisplayState *ds); static void dpy_refresh(DisplayState *s); +static DisplayState *get_alloc_displaystate(void); static void gui_update(void *opaque) { @@ -1309,15 +1310,14 @@ void qemu_free_displaysurface(DisplaySurface *surface) g_free(surface); } -void register_displaychangelistener(DisplayState *ds, - DisplayChangeListener *dcl) +void register_displaychangelistener(DisplayChangeListener *dcl) { QemuConsole *con; trace_displaychangelistener_register(dcl, dcl->ops->dpy_name); - dcl->ds = ds; - QLIST_INSERT_HEAD(&ds->listeners, dcl, next); - gui_setup_refresh(ds); + dcl->ds = get_alloc_displaystate(); + QLIST_INSERT_HEAD(&dcl->ds->listeners, dcl, next); + gui_setup_refresh(dcl->ds); if (dcl->con) { dcl->con->dcls++; con = dcl->con; diff --git a/ui/curses.c b/ui/curses.c index a85a7da..289a955 100644 --- a/ui/curses.c +++ b/ui/curses.c @@ -359,7 +359,7 @@ void curses_display_init(DisplayState *ds, int full_screen) dcl = (DisplayChangeListener *) g_malloc0(sizeof(DisplayChangeListener)); dcl->ops = &dcl_ops; - register_displaychangelistener(ds, dcl); + register_displaychangelistener(dcl); invalidate = 1; } diff --git a/ui/gtk.c b/ui/gtk.c index 4110342..42e3c0a 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -1470,7 +1470,7 @@ void gtk_display_init(DisplayState *ds) gtk_widget_show_all(s->window); - register_displaychangelistener(ds, &s->dcl); + register_displaychangelistener(&s->dcl); global_state = s; } diff --git a/ui/sdl.c b/ui/sdl.c index c9f2928..39a42d6 100644 --- a/ui/sdl.c +++ b/ui/sdl.c @@ -937,7 +937,7 @@ void sdl_display_init(DisplayState *ds, int full_screen, int no_frame) dcl = g_malloc0(sizeof(DisplayChangeListener)); dcl->ops = &dcl_ops; - register_displaychangelistener(ds, dcl); + register_displaychangelistener(dcl); mouse_mode_notifier.notify = sdl_mouse_mode_change; qemu_add_mouse_mode_change_notifier(&mouse_mode_notifier); diff --git a/ui/spice-display.c b/ui/spice-display.c index 53c19be..82d8b9f 100644 --- a/ui/spice-display.c +++ b/ui/spice-display.c @@ -625,7 +625,7 @@ void qemu_spice_display_init(DisplayState *ds) ssd->dcl.ops = &display_listener_ops; ssd->dcl.con = qemu_console_lookup_by_index(0); - register_displaychangelistener(ds, &ssd->dcl); + register_displaychangelistener(&ssd->dcl); qemu_spice_create_host_primary(ssd); } diff --git a/ui/vnc.c b/ui/vnc.c index 8ee66b7..86fe1dd 100644 --- a/ui/vnc.c +++ b/ui/vnc.c @@ -2832,7 +2832,7 @@ void vnc_display_init(DisplayState *ds) vnc_start_worker_thread(); vs->dcl.ops = &dcl_ops; - register_displaychangelistener(ds, &vs->dcl); + register_displaychangelistener(&vs->dcl); } -- 1.7.9.7 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PULL 0/5] console: qom-ify consoles 2013-04-24 9:33 [Qemu-devel] [PULL 0/5] console: qom-ify consoles Gerd Hoffmann ` (4 preceding siblings ...) 2013-04-24 9:33 ` [Qemu-devel] [PATCH 5/5] console: zap ds arg from register_displaychangelistener Gerd Hoffmann @ 2013-04-24 16:49 ` Anthony Liguori 5 siblings, 0 replies; 7+ messages in thread From: Anthony Liguori @ 2013-04-24 16:49 UTC (permalink / raw) To: Gerd Hoffmann, qemu-devel Gerd Hoffmann <kraxel@redhat.com> writes: > Hi, > > Here are the console patches, targeting 1.5. It's just the QemuConsole > QOM-ification and two little fixes. > > I'll go hold back the screendump monitor patch until the dust from the > qom api discussions has settled and it is clear which route we are > taking wrt new vs. extended commands. Which implies it most likely is > 1.6 material. Breaks Xen. /home/aliguori/git/qemu/hw/display/xenfb.c: In function ‘xen_init_display’: /home/aliguori/git/qemu/hw/display/xenfb.c:990:5: error: passing argument 1 of ‘graphic_console_init’ from incompatible pointer type [-Werror] In file included from /home/aliguori/git/qemu/hw/display/xenfb.c:39:0: /home/aliguori/git/qemu/include/ui/console.h:280:14: note: expected ‘struct DeviceState *’ but argument is of type ‘const struct GraphicHwOps *’ /home/aliguori/git/qemu/hw/display/xenfb.c:990:5: error: passing argument 2 of ‘graphic_console_init’ from incompatible pointer type [-Werror] In file included from /home/aliguori/git/qemu/hw/display/xenfb.c:39:0: /home/aliguori/git/qemu/include/ui/console.h:280:14: note: expected ‘const struct GraphicHwOps *’ but argument is of type ‘struct XenFB *’ /home/aliguori/git/qemu/hw/display/xenfb.c:990:5: error: too few arguments to function ‘graphic_console_init’ In file included from /home/aliguori/git/qemu/hw/display/xenfb.c:39:0: /home/aliguori/git/qemu/include/ui/console.h:280:14: note: declared here Regards, Anthony Liguori > please pull, > Gerd > > The following changes since commit bb71623811686ce3c34ce724f073f5c5dd95f51b: > > Move TPM passthrough specific command line options to backend structure (2013-04-23 10:40:40 -0500) > > are available in the git repository at: > > git://git.kraxel.org/qemu pixman.v12 > > for you to fetch changes up to c7b02648d878828dd88868f59b5d666dbbbf1d6d: > > console: zap ds arg from register_displaychangelistener (2013-04-24 10:37:59 +0200) > > ---------------------------------------------------------------- > Gerd Hoffmann (5): > console: qom-ify QemuConsole > console: add device link to QemuConsoles > console: add qemu_console_lookup_by_device > console: switch ppm_save to qemu_open > console: zap ds arg from register_displaychangelistener > > hw/arm/musicpal.c | 2 +- > hw/display/blizzard.c | 2 +- > hw/display/cirrus_vga.c | 4 +-- > hw/display/exynos4210_fimd.c | 2 +- > hw/display/g364fb.c | 2 +- > hw/display/jazz_led.c | 2 +- > hw/display/milkymist-vgafb.c | 2 +- > hw/display/omap_lcdc.c | 2 +- > hw/display/pl110.c | 2 +- > hw/display/pxa2xx_lcd.c | 2 +- > hw/display/qxl.c | 6 ++-- > hw/display/sm501.c | 2 +- > hw/display/ssd0303.c | 2 +- > hw/display/ssd0323.c | 2 +- > hw/display/tc6393xb.c | 2 +- > hw/display/tcx.c | 4 +-- > hw/display/vga-isa-mm.c | 2 +- > hw/display/vga-isa.c | 2 +- > hw/display/vga-pci.c | 2 +- > hw/display/vmware_vga.c | 7 +++-- > hw/unicore32/puv3.c | 2 +- > include/ui/console.h | 22 ++++++++++++-- > ui/cocoa.m | 2 +- > ui/console.c | 65 ++++++++++++++++++++++++++++++++++++------ > ui/curses.c | 2 +- > ui/gtk.c | 2 +- > ui/sdl.c | 2 +- > ui/spice-display.c | 2 +- > ui/vnc.c | 2 +- > 29 files changed, 109 insertions(+), 45 deletions(-) ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2013-04-24 16:50 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-04-24 9:33 [Qemu-devel] [PULL 0/5] console: qom-ify consoles Gerd Hoffmann 2013-04-24 9:33 ` [Qemu-devel] [PATCH 1/5] console: qom-ify QemuConsole Gerd Hoffmann 2013-04-24 9:33 ` [Qemu-devel] [PATCH 2/5] console: add device link to QemuConsoles Gerd Hoffmann 2013-04-24 9:33 ` [Qemu-devel] [PATCH 3/5] console: add qemu_console_lookup_by_device Gerd Hoffmann 2013-04-24 9:33 ` [Qemu-devel] [PATCH 4/5] console: switch ppm_save to qemu_open Gerd Hoffmann 2013-04-24 9:33 ` [Qemu-devel] [PATCH 5/5] console: zap ds arg from register_displaychangelistener Gerd Hoffmann 2013-04-24 16:49 ` [Qemu-devel] [PULL 0/5] console: qom-ify consoles Anthony Liguori
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).