console: add GraphicHwOps
Pass a single GraphicHwOps struct pointer to graphic_console_init, instead of a bunch of function pointers. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
		
							parent
							
								
									27be55872d
								
							
						
					
					
						commit
						380cd056ec
					
				|  | @ -601,6 +601,11 @@ static const MemoryRegionOps musicpal_lcd_ops = { | ||||||
|     .endianness = DEVICE_NATIVE_ENDIAN, |     .endianness = DEVICE_NATIVE_ENDIAN, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | static const GraphicHwOps musicpal_gfx_ops = { | ||||||
|  |     .invalidate  = lcd_invalidate, | ||||||
|  |     .gfx_update  = lcd_refresh, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| static int musicpal_lcd_init(SysBusDevice *dev) | static int musicpal_lcd_init(SysBusDevice *dev) | ||||||
| { | { | ||||||
|     musicpal_lcd_state *s = FROM_SYSBUS(musicpal_lcd_state, dev); |     musicpal_lcd_state *s = FROM_SYSBUS(musicpal_lcd_state, dev); | ||||||
|  | @ -611,8 +616,7 @@ static int musicpal_lcd_init(SysBusDevice *dev) | ||||||
|                           "musicpal-lcd", MP_LCD_SIZE); |                           "musicpal-lcd", MP_LCD_SIZE); | ||||||
|     sysbus_init_mmio(dev, &s->iomem); |     sysbus_init_mmio(dev, &s->iomem); | ||||||
| 
 | 
 | ||||||
|     s->con = graphic_console_init(lcd_refresh, lcd_invalidate, |     s->con = graphic_console_init(&musicpal_gfx_ops, s); | ||||||
|                                   NULL, s); |  | ||||||
|     qemu_console_resize(s->con, 128*3, 64*3); |     qemu_console_resize(s->con, 128*3, 64*3); | ||||||
| 
 | 
 | ||||||
|     qdev_init_gpio_in(&dev->qdev, musicpal_lcd_gpio_brigthness_in, 3); |     qdev_init_gpio_in(&dev->qdev, musicpal_lcd_gpio_brigthness_in, 3); | ||||||
|  |  | ||||||
|  | @ -944,6 +944,11 @@ static void blizzard_update_display(void *opaque) | ||||||
| #define DEPTH 32 | #define DEPTH 32 | ||||||
| #include "blizzard_template.h" | #include "blizzard_template.h" | ||||||
| 
 | 
 | ||||||
|  | static const GraphicHwOps blizzard_ops = { | ||||||
|  |     .invalidate  = blizzard_invalidate_display, | ||||||
|  |     .gfx_update  = blizzard_update_display, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| void *s1d13745_init(qemu_irq gpio_int) | void *s1d13745_init(qemu_irq gpio_int) | ||||||
| { | { | ||||||
|     BlizzardState *s = (BlizzardState *) g_malloc0(sizeof(*s)); |     BlizzardState *s = (BlizzardState *) g_malloc0(sizeof(*s)); | ||||||
|  | @ -951,9 +956,7 @@ void *s1d13745_init(qemu_irq gpio_int) | ||||||
| 
 | 
 | ||||||
|     s->fb = g_malloc(0x180000); |     s->fb = g_malloc(0x180000); | ||||||
| 
 | 
 | ||||||
|     s->con = graphic_console_init(blizzard_update_display, |     s->con = graphic_console_init(&blizzard_ops, s); | ||||||
|                                   blizzard_invalidate_display, |  | ||||||
|                                   NULL, 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)) { | ||||||
|  |  | ||||||
|  | @ -2910,9 +2910,7 @@ static int vga_initfn(ISADevice *dev) | ||||||
|     vga_common_init(s); |     vga_common_init(s); | ||||||
|     cirrus_init_common(&d->cirrus_vga, CIRRUS_ID_CLGD5430, 0, |     cirrus_init_common(&d->cirrus_vga, CIRRUS_ID_CLGD5430, 0, | ||||||
|                        isa_address_space(dev), isa_address_space_io(dev)); |                        isa_address_space(dev), isa_address_space_io(dev)); | ||||||
|     s->con = graphic_console_init(s->update, s->invalidate, |     s->con = graphic_console_init(s->hw_ops, s); | ||||||
|                                   s->text_update, |  | ||||||
|                                   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 */ | ||||||
|  | @ -2959,9 +2957,7 @@ static int pci_cirrus_vga_initfn(PCIDevice *dev) | ||||||
|      vga_common_init(&s->vga); |      vga_common_init(&s->vga); | ||||||
|      cirrus_init_common(s, device_id, 1, pci_address_space(dev), |      cirrus_init_common(s, device_id, 1, pci_address_space(dev), | ||||||
|                         pci_address_space_io(dev)); |                         pci_address_space_io(dev)); | ||||||
|      s->vga.con = graphic_console_init(s->vga.update, s->vga.invalidate, |      s->vga.con = graphic_console_init(s->vga.hw_ops, &s->vga); | ||||||
|                                        s->vga.text_update, |  | ||||||
|                                        &s->vga); |  | ||||||
| 
 | 
 | ||||||
|      /* setup PCI */ |      /* setup PCI */ | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1887,6 +1887,11 @@ static const VMStateDescription exynos4210_fimd_vmstate = { | ||||||
|     } |     } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | static const GraphicHwOps exynos4210_fimd_ops = { | ||||||
|  |     .invalidate  = exynos4210_fimd_invalidate, | ||||||
|  |     .gfx_update  = exynos4210_fimd_update, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| static int exynos4210_fimd_init(SysBusDevice *dev) | static int exynos4210_fimd_init(SysBusDevice *dev) | ||||||
| { | { | ||||||
|     Exynos4210fimdState *s = FROM_SYSBUS(Exynos4210fimdState, dev); |     Exynos4210fimdState *s = FROM_SYSBUS(Exynos4210fimdState, dev); | ||||||
|  | @ -1900,8 +1905,7 @@ static int exynos4210_fimd_init(SysBusDevice *dev) | ||||||
|     memory_region_init_io(&s->iomem, &exynos4210_fimd_mmio_ops, s, |     memory_region_init_io(&s->iomem, &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(exynos4210_fimd_update, |     s->console = graphic_console_init(&exynos4210_fimd_ops, s); | ||||||
|                                       exynos4210_fimd_invalidate, NULL, s); |  | ||||||
| 
 | 
 | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -475,13 +475,16 @@ static const VMStateDescription vmstate_g364fb = { | ||||||
|     } |     } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | static const GraphicHwOps g364fb_ops = { | ||||||
|  |     .invalidate  = g364fb_invalidate_display, | ||||||
|  |     .gfx_update  = g364fb_update_display, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| static void g364fb_init(DeviceState *dev, G364State *s) | 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(g364fb_update_display, |     s->con = graphic_console_init(&g364fb_ops, s); | ||||||
|                                   g364fb_invalidate_display, |  | ||||||
|                                   NULL, s); |  | ||||||
| 
 | 
 | ||||||
|     memory_region_init_io(&s->mem_ctrl, &g364fb_ctrl_ops, s, "ctrl", 0x180000); |     memory_region_init_io(&s->mem_ctrl, &g364fb_ctrl_ops, s, "ctrl", 0x180000); | ||||||
|     memory_region_init_ram_ptr(&s->mem_vram, "vram", |     memory_region_init_ram_ptr(&s->mem_vram, "vram", | ||||||
|  |  | ||||||
|  | @ -254,6 +254,12 @@ static const VMStateDescription vmstate_jazz_led = { | ||||||
|     } |     } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | static const GraphicHwOps jazz_led_ops = { | ||||||
|  |     .invalidate  = jazz_led_invalidate_display, | ||||||
|  |     .gfx_update  = jazz_led_update_display, | ||||||
|  |     .text_update = jazz_led_text_update, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| static int jazz_led_init(SysBusDevice *dev) | static int jazz_led_init(SysBusDevice *dev) | ||||||
| { | { | ||||||
|     LedState *s = FROM_SYSBUS(LedState, dev); |     LedState *s = FROM_SYSBUS(LedState, dev); | ||||||
|  | @ -261,9 +267,7 @@ static int jazz_led_init(SysBusDevice *dev) | ||||||
|     memory_region_init_io(&s->iomem, &led_ops, s, "led", 1); |     memory_region_init_io(&s->iomem, &led_ops, s, "led", 1); | ||||||
|     sysbus_init_mmio(dev, &s->iomem); |     sysbus_init_mmio(dev, &s->iomem); | ||||||
| 
 | 
 | ||||||
|     s->con = graphic_console_init(jazz_led_update_display, |     s->con = graphic_console_init(&jazz_led_ops, s); | ||||||
|                                   jazz_led_invalidate_display, |  | ||||||
|                                   jazz_led_text_update, s); |  | ||||||
| 
 | 
 | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -270,6 +270,11 @@ static void milkymist_vgafb_reset(DeviceState *d) | ||||||
|     s->regs[R_BASEADDRESS] = 0; |     s->regs[R_BASEADDRESS] = 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static const GraphicHwOps vgafb_ops = { | ||||||
|  |     .invalidate  = vgafb_invalidate_display, | ||||||
|  |     .gfx_update  = vgafb_update_display, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| static int milkymist_vgafb_init(SysBusDevice *dev) | static int milkymist_vgafb_init(SysBusDevice *dev) | ||||||
| { | { | ||||||
|     MilkymistVgafbState *s = FROM_SYSBUS(typeof(*s), dev); |     MilkymistVgafbState *s = FROM_SYSBUS(typeof(*s), dev); | ||||||
|  | @ -278,9 +283,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(vgafb_update_display, |     s->con = graphic_console_init(&vgafb_ops, s); | ||||||
|                                   vgafb_invalidate_display, |  | ||||||
|                                   NULL, s); |  | ||||||
| 
 | 
 | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -384,6 +384,11 @@ void omap_lcdc_reset(struct omap_lcd_panel_s *s) | ||||||
|     s->ctrl = 0; |     s->ctrl = 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static const GraphicHwOps omap_ops = { | ||||||
|  |     .invalidate  = omap_invalidate_display, | ||||||
|  |     .gfx_update  = omap_update_display, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| struct omap_lcd_panel_s *omap_lcdc_init(MemoryRegion *sysmem, | struct omap_lcd_panel_s *omap_lcdc_init(MemoryRegion *sysmem, | ||||||
|                                         hwaddr base, |                                         hwaddr base, | ||||||
|                                         qemu_irq irq, |                                         qemu_irq irq, | ||||||
|  | @ -401,9 +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_init_io(&s->iomem, &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(omap_update_display, |     s->con = graphic_console_init(&omap_ops, s); | ||||||
|                                   omap_invalidate_display, |  | ||||||
|                                   NULL, s); |  | ||||||
| 
 | 
 | ||||||
|     return s; |     return s; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -444,6 +444,11 @@ static int vmstate_pl110_post_load(void *opaque, int version_id) | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static const GraphicHwOps pl110_gfx_ops = { | ||||||
|  |     .invalidate  = pl110_invalidate_display, | ||||||
|  |     .gfx_update  = pl110_update_display, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| static int pl110_init(SysBusDevice *dev) | static int pl110_init(SysBusDevice *dev) | ||||||
| { | { | ||||||
|     pl110_state *s = FROM_SYSBUS(pl110_state, dev); |     pl110_state *s = FROM_SYSBUS(pl110_state, dev); | ||||||
|  | @ -452,9 +457,7 @@ static int pl110_init(SysBusDevice *dev) | ||||||
|     sysbus_init_mmio(dev, &s->iomem); |     sysbus_init_mmio(dev, &s->iomem); | ||||||
|     sysbus_init_irq(dev, &s->irq); |     sysbus_init_irq(dev, &s->irq); | ||||||
|     qdev_init_gpio_in(&s->busdev.qdev, pl110_mux_ctrl_set, 1); |     qdev_init_gpio_in(&s->busdev.qdev, pl110_mux_ctrl_set, 1); | ||||||
|     s->con = graphic_console_init(pl110_update_display, |     s->con = graphic_console_init(&pl110_gfx_ops, s); | ||||||
|                                   pl110_invalidate_display, |  | ||||||
|                                   NULL, s); |  | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -991,6 +991,11 @@ static const VMStateDescription vmstate_pxa2xx_lcdc = { | ||||||
| #define BITS 32 | #define BITS 32 | ||||||
| #include "pxa2xx_template.h" | #include "pxa2xx_template.h" | ||||||
| 
 | 
 | ||||||
|  | static const GraphicHwOps pxa2xx_ops = { | ||||||
|  |     .invalidate  = pxa2xx_invalidate_display, | ||||||
|  |     .gfx_update  = pxa2xx_update_display, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| PXA2xxLCDState *pxa2xx_lcdc_init(MemoryRegion *sysmem, | PXA2xxLCDState *pxa2xx_lcdc_init(MemoryRegion *sysmem, | ||||||
|                                  hwaddr base, qemu_irq irq) |                                  hwaddr base, qemu_irq irq) | ||||||
| { | { | ||||||
|  | @ -1008,9 +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(pxa2xx_update_display, |     s->con = graphic_console_init(&pxa2xx_ops, s); | ||||||
|                                   pxa2xx_invalidate_display, |  | ||||||
|                                   NULL, 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)) { | ||||||
|  |  | ||||||
|  | @ -1753,7 +1753,7 @@ static void qxl_hw_update(void *opaque) | ||||||
| 
 | 
 | ||||||
|     switch (qxl->mode) { |     switch (qxl->mode) { | ||||||
|     case QXL_MODE_VGA: |     case QXL_MODE_VGA: | ||||||
|         vga->update(vga); |         vga->hw_ops->gfx_update(vga); | ||||||
|         break; |         break; | ||||||
|     case QXL_MODE_COMPAT: |     case QXL_MODE_COMPAT: | ||||||
|     case QXL_MODE_NATIVE: |     case QXL_MODE_NATIVE: | ||||||
|  | @ -1769,7 +1769,7 @@ static void qxl_hw_invalidate(void *opaque) | ||||||
|     PCIQXLDevice *qxl = opaque; |     PCIQXLDevice *qxl = opaque; | ||||||
|     VGACommonState *vga = &qxl->vga; |     VGACommonState *vga = &qxl->vga; | ||||||
| 
 | 
 | ||||||
|     vga->invalidate(vga); |     vga->hw_ops->invalidate(vga); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void qxl_hw_text_update(void *opaque, console_ch_t *chardata) | static void qxl_hw_text_update(void *opaque, console_ch_t *chardata) | ||||||
|  | @ -1778,7 +1778,7 @@ static void qxl_hw_text_update(void *opaque, console_ch_t *chardata) | ||||||
|     VGACommonState *vga = &qxl->vga; |     VGACommonState *vga = &qxl->vga; | ||||||
| 
 | 
 | ||||||
|     if (qxl->mode == QXL_MODE_VGA) { |     if (qxl->mode == QXL_MODE_VGA) { | ||||||
|         vga->text_update(vga, chardata); |         vga->hw_ops->text_update(vga, chardata); | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | @ -2038,6 +2038,12 @@ static int qxl_init_common(PCIQXLDevice *qxl) | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static const GraphicHwOps qxl_ops = { | ||||||
|  |     .invalidate  = qxl_hw_invalidate, | ||||||
|  |     .gfx_update  = qxl_hw_update, | ||||||
|  |     .text_update = qxl_hw_text_update, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| static int qxl_init_primary(PCIDevice *dev) | static int qxl_init_primary(PCIDevice *dev) | ||||||
| { | { | ||||||
|     PCIQXLDevice *qxl = DO_UPCAST(PCIQXLDevice, pci, dev); |     PCIQXLDevice *qxl = DO_UPCAST(PCIQXLDevice, pci, dev); | ||||||
|  | @ -2054,9 +2060,7 @@ static int qxl_init_primary(PCIDevice *dev) | ||||||
|     portio_list_init(qxl_vga_port_list, qxl_vga_portio_list, vga, "vga"); |     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); |     portio_list_add(qxl_vga_port_list, pci_address_space_io(dev), 0x3b0); | ||||||
| 
 | 
 | ||||||
|     vga->con = graphic_console_init(qxl_hw_update, qxl_hw_invalidate, |     vga->con = graphic_console_init(&qxl_ops, qxl); | ||||||
|                                     qxl_hw_text_update, |  | ||||||
|                                     qxl); |  | ||||||
|     qxl->ssd.con = vga->con, |     qxl->ssd.con = vga->con, | ||||||
|     qemu_spice_display_init_common(&qxl->ssd); |     qemu_spice_display_init_common(&qxl->ssd); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1383,6 +1383,10 @@ static void sm501_update_display(void *opaque) | ||||||
| 	sm501_draw_crt(s); | 	sm501_draw_crt(s); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static const GraphicHwOps sm501_ops = { | ||||||
|  |     .gfx_update  = sm501_update_display, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| void sm501_init(MemoryRegion *address_space_mem, uint32_t base, | void sm501_init(MemoryRegion *address_space_mem, uint32_t base, | ||||||
|                 uint32_t local_mem_bytes, qemu_irq irq, CharDriverState *chr) |                 uint32_t local_mem_bytes, qemu_irq irq, CharDriverState *chr) | ||||||
| { | { | ||||||
|  | @ -1445,6 +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(sm501_update_display, NULL, |     s->con = graphic_console_init(&sm501_ops, s); | ||||||
|                                   NULL, s); |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -284,13 +284,16 @@ static const VMStateDescription vmstate_ssd0303 = { | ||||||
|     } |     } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | static const GraphicHwOps ssd0303_ops = { | ||||||
|  |     .invalidate  = ssd0303_invalidate_display, | ||||||
|  |     .gfx_update  = ssd0303_update_display, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| static int ssd0303_init(I2CSlave *i2c) | static int ssd0303_init(I2CSlave *i2c) | ||||||
| { | { | ||||||
|     ssd0303_state *s = FROM_I2C_SLAVE(ssd0303_state, i2c); |     ssd0303_state *s = FROM_I2C_SLAVE(ssd0303_state, i2c); | ||||||
| 
 | 
 | ||||||
|     s->con = graphic_console_init(ssd0303_update_display, |     s->con = graphic_console_init(&ssd0303_ops, s); | ||||||
|                                   ssd0303_invalidate_display, |  | ||||||
|                                   NULL, s); |  | ||||||
|     qemu_console_resize(s->con, 96 * MAGNIFY, 16 * MAGNIFY); |     qemu_console_resize(s->con, 96 * MAGNIFY, 16 * MAGNIFY); | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -331,15 +331,18 @@ static int ssd0323_load(QEMUFile *f, void *opaque, int version_id) | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static const GraphicHwOps ssd0323_ops = { | ||||||
|  |     .invalidate  = ssd0323_invalidate_display, | ||||||
|  |     .gfx_update  = ssd0323_update_display, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| static int ssd0323_init(SSISlave *dev) | static int ssd0323_init(SSISlave *dev) | ||||||
| { | { | ||||||
|     ssd0323_state *s = FROM_SSI_SLAVE(ssd0323_state, dev); |     ssd0323_state *s = FROM_SSI_SLAVE(ssd0323_state, dev); | ||||||
| 
 | 
 | ||||||
|     s->col_end = 63; |     s->col_end = 63; | ||||||
|     s->row_end = 79; |     s->row_end = 79; | ||||||
|     s->con = graphic_console_init(ssd0323_update_display, |     s->con = graphic_console_init(&ssd0323_ops, s); | ||||||
|                                   ssd0323_invalidate_display, |  | ||||||
|                                   NULL, 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); | ||||||
|  |  | ||||||
|  | @ -548,6 +548,10 @@ static void tc6393xb_writeb(void *opaque, hwaddr addr, | ||||||
|                 (uint32_t) addr, (int)value & 0xff); |                 (uint32_t) addr, (int)value & 0xff); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static const GraphicHwOps tc6393xb_gfx_ops = { | ||||||
|  |     .gfx_update  = tc6393xb_update_display, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| TC6393xbState *tc6393xb_init(MemoryRegion *sysmem, uint32_t base, qemu_irq irq) | TC6393xbState *tc6393xb_init(MemoryRegion *sysmem, uint32_t base, qemu_irq irq) | ||||||
| { | { | ||||||
|     TC6393xbState *s; |     TC6393xbState *s; | ||||||
|  | @ -583,10 +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(tc6393xb_update_display, |     s->con = graphic_console_init(&tc6393xb_gfx_ops, s); | ||||||
|             NULL, /* invalidate */ |  | ||||||
|             NULL, /* text_update */ |  | ||||||
|             s); |  | ||||||
| 
 | 
 | ||||||
|     return s; |     return s; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -510,6 +510,16 @@ static const MemoryRegionOps dummy_ops = { | ||||||
|     }, |     }, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | static const GraphicHwOps tcx_ops = { | ||||||
|  |     .invalidate = tcx_invalidate_display, | ||||||
|  |     .gfx_update = tcx_update_display, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | static const GraphicHwOps tcx24_ops = { | ||||||
|  |     .invalidate = tcx24_invalidate_display, | ||||||
|  |     .gfx_update = tcx24_update_display, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| static int tcx_init1(SysBusDevice *dev) | static int tcx_init1(SysBusDevice *dev) | ||||||
| { | { | ||||||
|     TCXState *s = FROM_SYSBUS(TCXState, dev); |     TCXState *s = FROM_SYSBUS(TCXState, dev); | ||||||
|  | @ -562,18 +572,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(tcx24_update_display, |         s->con = graphic_console_init(&tcx24_ops, s); | ||||||
|                                       tcx24_invalidate_display, |  | ||||||
|                                       NULL, s); |  | ||||||
|     } else { |     } else { | ||||||
|         /* THC 8 bit (dummy) */ |         /* THC 8 bit (dummy) */ | ||||||
|         memory_region_init_io(&s->thc8, &dummy_ops, s, "tcx.thc8", |         memory_region_init_io(&s->thc8, &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(tcx_update_display, |         s->con = graphic_console_init(&tcx_ops, s); | ||||||
|                                       tcx_invalidate_display, |  | ||||||
|                                       NULL, s); |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     qemu_console_resize(s->con, s->width, s->height); |     qemu_console_resize(s->con, s->width, s->height); | ||||||
|  |  | ||||||
|  | @ -135,9 +135,7 @@ int isa_vga_mm_init(hwaddr vram_base, | ||||||
|     vga_common_init(&s->vga); |     vga_common_init(&s->vga); | ||||||
|     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(s->vga.update, s->vga.invalidate, |     s->vga.con = graphic_console_init(s->vga.hw_ops, s); | ||||||
|                                       s->vga.text_update, |  | ||||||
|                                       s); |  | ||||||
| 
 | 
 | ||||||
|     vga_init_vbe(&s->vga, address_space); |     vga_init_vbe(&s->vga, address_space); | ||||||
|     return 0; |     return 0; | ||||||
|  |  | ||||||
|  | @ -62,8 +62,7 @@ static int vga_initfn(ISADevice *dev) | ||||||
|                                         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(s->update, s->invalidate, |     s->con = graphic_console_init(s->hw_ops, s); | ||||||
|                                   s->text_update, s); |  | ||||||
| 
 | 
 | ||||||
|     vga_init_vbe(s, isa_address_space(dev)); |     vga_init_vbe(s, isa_address_space(dev)); | ||||||
|     /* ROM BIOS */ |     /* ROM BIOS */ | ||||||
|  |  | ||||||
|  | @ -150,8 +150,7 @@ static int pci_std_vga_initfn(PCIDevice *dev) | ||||||
|     vga_common_init(s); |     vga_common_init(s); | ||||||
|     vga_init(s, pci_address_space(dev), pci_address_space_io(dev), true); |     vga_init(s, pci_address_space(dev), pci_address_space_io(dev), true); | ||||||
| 
 | 
 | ||||||
|     s->con = graphic_console_init(s->update, s->invalidate, |     s->con = graphic_console_init(s->hw_ops, s); | ||||||
|                                   s->text_update, 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); | ||||||
|  |  | ||||||
|  | @ -2250,6 +2250,12 @@ const VMStateDescription vmstate_vga_common = { | ||||||
|     } |     } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | static const GraphicHwOps vga_ops = { | ||||||
|  |     .invalidate  = vga_invalidate_display, | ||||||
|  |     .gfx_update  = vga_update_display, | ||||||
|  |     .text_update = vga_update_text, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| void vga_common_init(VGACommonState *s) | void vga_common_init(VGACommonState *s) | ||||||
| { | { | ||||||
|     int i, j, v, b; |     int i, j, v, b; | ||||||
|  | @ -2293,9 +2299,7 @@ void vga_common_init(VGACommonState *s) | ||||||
|     s->get_bpp = vga_get_bpp; |     s->get_bpp = vga_get_bpp; | ||||||
|     s->get_offsets = vga_get_offsets; |     s->get_offsets = vga_get_offsets; | ||||||
|     s->get_resolution = vga_get_resolution; |     s->get_resolution = vga_get_resolution; | ||||||
|     s->update = vga_update_display; |     s->hw_ops = &vga_ops; | ||||||
|     s->invalidate = vga_invalidate_display; |  | ||||||
|     s->text_update = vga_update_text; |  | ||||||
|     switch (vga_retrace_method) { |     switch (vga_retrace_method) { | ||||||
|     case VGA_RETRACE_DUMB: |     case VGA_RETRACE_DUMB: | ||||||
|         s->retrace = vga_dumb_retrace; |         s->retrace = vga_dumb_retrace; | ||||||
|  |  | ||||||
|  | @ -152,9 +152,7 @@ typedef struct VGACommonState { | ||||||
|     uint32_t cursor_offset; |     uint32_t cursor_offset; | ||||||
|     unsigned int (*rgb_to_pixel)(unsigned int r, |     unsigned int (*rgb_to_pixel)(unsigned int r, | ||||||
|                                  unsigned int g, unsigned b); |                                  unsigned int g, unsigned b); | ||||||
|     graphic_hw_update_ptr update; |     const GraphicHwOps *hw_ops; | ||||||
|     graphic_hw_invalidate_ptr invalidate; |  | ||||||
|     graphic_hw_text_update_ptr text_update; |  | ||||||
|     bool full_update_text; |     bool full_update_text; | ||||||
|     bool full_update_gfx; |     bool full_update_gfx; | ||||||
|     /* hardware mouse cursor support */ |     /* hardware mouse cursor support */ | ||||||
|  |  | ||||||
|  | @ -913,7 +913,7 @@ static void vmsvga_value_write(void *opaque, uint32_t address, uint32_t value) | ||||||
|     case SVGA_REG_ENABLE: |     case SVGA_REG_ENABLE: | ||||||
|         s->enable = !!value; |         s->enable = !!value; | ||||||
|         s->invalidated = 1; |         s->invalidated = 1; | ||||||
|         s->vga.invalidate(&s->vga); |         s->vga.hw_ops->invalidate(&s->vga); | ||||||
|         if (s->enable && s->config) { |         if (s->enable && s->config) { | ||||||
|             vga_dirty_log_stop(&s->vga); |             vga_dirty_log_stop(&s->vga); | ||||||
|         } else { |         } else { | ||||||
|  | @ -1058,7 +1058,7 @@ static void vmsvga_update_display(void *opaque) | ||||||
|     bool dirty = false; |     bool dirty = false; | ||||||
| 
 | 
 | ||||||
|     if (!s->enable) { |     if (!s->enable) { | ||||||
|         s->vga.update(&s->vga); |         s->vga.hw_ops->gfx_update(&s->vga); | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -1112,7 +1112,7 @@ static void vmsvga_invalidate_display(void *opaque) | ||||||
| { | { | ||||||
|     struct vmsvga_state_s *s = opaque; |     struct vmsvga_state_s *s = opaque; | ||||||
|     if (!s->enable) { |     if (!s->enable) { | ||||||
|         s->vga.invalidate(&s->vga); |         s->vga.hw_ops->invalidate(&s->vga); | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -1123,8 +1123,8 @@ static void vmsvga_text_update(void *opaque, console_ch_t *chardata) | ||||||
| { | { | ||||||
|     struct vmsvga_state_s *s = opaque; |     struct vmsvga_state_s *s = opaque; | ||||||
| 
 | 
 | ||||||
|     if (s->vga.text_update) { |     if (s->vga.hw_ops->text_update) { | ||||||
|         s->vga.text_update(&s->vga, chardata); |         s->vga.hw_ops->text_update(&s->vga, chardata); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -1179,15 +1179,19 @@ static const VMStateDescription vmstate_vmware_vga = { | ||||||
|     } |     } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | static const GraphicHwOps vmsvga_ops = { | ||||||
|  |     .invalidate  = vmsvga_invalidate_display, | ||||||
|  |     .gfx_update  = vmsvga_update_display, | ||||||
|  |     .text_update = vmsvga_text_update, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| static void vmsvga_init(struct vmsvga_state_s *s, | static void vmsvga_init(struct vmsvga_state_s *s, | ||||||
|                         MemoryRegion *address_space, MemoryRegion *io) |                         MemoryRegion *address_space, MemoryRegion *io) | ||||||
| { | { | ||||||
|     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(vmsvga_update_display, |     s->vga.con = graphic_console_init(&vmsvga_ops, s); | ||||||
|                                       vmsvga_invalidate_display, |  | ||||||
|                                       vmsvga_text_update, s); |  | ||||||
| 
 | 
 | ||||||
|     s->fifo_size = SVGA_FIFO_SIZE; |     s->fifo_size = SVGA_FIFO_SIZE; | ||||||
|     memory_region_init_ram(&s->fifo_ram, "vmsvga.fifo", s->fifo_size); |     memory_region_init_ram(&s->fifo_ram, "vmsvga.fifo", s->fifo_size); | ||||||
|  |  | ||||||
|  | @ -977,6 +977,11 @@ struct XenDevOps xen_framebuffer_ops = { | ||||||
|     .frontend_changed = fb_frontend_changed, |     .frontend_changed = fb_frontend_changed, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | static const GraphicHwOps xenfb_ops = { | ||||||
|  |     .invalidate  = xenfb_invalidate, | ||||||
|  |     .gfx_update  = xenfb_update, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| /*
 | /*
 | ||||||
|  * FIXME/TODO: Kill this. |  * FIXME/TODO: Kill this. | ||||||
|  * Temporary needed while DisplayState reorganization is in flight. |  * Temporary needed while DisplayState reorganization is in flight. | ||||||
|  | @ -1004,10 +1009,7 @@ wait_more: | ||||||
| 
 | 
 | ||||||
|     /* vfb */ |     /* vfb */ | ||||||
|     fb = container_of(xfb, struct XenFB, c.xendev); |     fb = container_of(xfb, struct XenFB, c.xendev); | ||||||
|     fb->c.con = graphic_console_init(xenfb_update, |     fb->c.con = graphic_console_init(&xenfb_ops, fb); | ||||||
|                                      xenfb_invalidate, |  | ||||||
|                                      NULL, |  | ||||||
|                                      fb); |  | ||||||
|     fb->have_console = 1; |     fb->have_console = 1; | ||||||
| 
 | 
 | ||||||
|     /* vkbd */ |     /* vkbd */ | ||||||
|  |  | ||||||
|  | @ -78,6 +78,8 @@ static void puv3_board_init(CPUUniCore32State *env, ram_addr_t ram_size) | ||||||
|     memory_region_add_subregion(get_system_memory(), 0, ram_memory); |     memory_region_add_subregion(get_system_memory(), 0, ram_memory); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static const GraphicHwOps no_ops; | ||||||
|  | 
 | ||||||
| static void puv3_load_kernel(const char *kernel_filename) | static void puv3_load_kernel(const char *kernel_filename) | ||||||
| { | { | ||||||
|     int size; |     int size; | ||||||
|  | @ -92,7 +94,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, NULL, NULL, NULL); |     graphic_console_init(&no_ops, NULL); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void puv3_init(QEMUMachineInitArgs *args) | static void puv3_init(QEMUMachineInitArgs *args) | ||||||
|  |  | ||||||
|  | @ -267,13 +267,13 @@ static inline void console_write_ch(console_ch_t *dest, uint32_t ch) | ||||||
|     *dest = ch; |     *dest = ch; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| typedef void (*graphic_hw_update_ptr)(void *); | typedef struct GraphicHwOps { | ||||||
| typedef void (*graphic_hw_invalidate_ptr)(void *); |     void (*invalidate)(void *opaque); | ||||||
| typedef void (*graphic_hw_text_update_ptr)(void *, console_ch_t *); |     void (*gfx_update)(void *opaque); | ||||||
|  |     void (*text_update)(void *opaque, console_ch_t *text); | ||||||
|  | } GraphicHwOps; | ||||||
| 
 | 
 | ||||||
| QemuConsole *graphic_console_init(graphic_hw_update_ptr update, | QemuConsole *graphic_console_init(const GraphicHwOps *ops, | ||||||
|                                   graphic_hw_invalidate_ptr invalidate, |  | ||||||
|                                   graphic_hw_text_update_ptr text_update, |  | ||||||
|                                   void *opaque); |                                   void *opaque); | ||||||
| 
 | 
 | ||||||
| void graphic_hw_update(QemuConsole *con); | void graphic_hw_update(QemuConsole *con); | ||||||
|  |  | ||||||
							
								
								
									
										33
									
								
								ui/console.c
								
								
								
								
							
							
						
						
									
										33
									
								
								ui/console.c
								
								
								
								
							|  | @ -119,9 +119,7 @@ struct QemuConsole { | ||||||
|     DisplaySurface *surface; |     DisplaySurface *surface; | ||||||
| 
 | 
 | ||||||
|     /* Graphic console state.  */ |     /* Graphic console state.  */ | ||||||
|     graphic_hw_update_ptr hw_update; |     const GraphicHwOps *hw_ops; | ||||||
|     graphic_hw_invalidate_ptr hw_invalidate; |  | ||||||
|     graphic_hw_text_update_ptr hw_text_update; |  | ||||||
|     void *hw; |     void *hw; | ||||||
| 
 | 
 | ||||||
|     /* Text console state */ |     /* Text console state */ | ||||||
|  | @ -229,8 +227,8 @@ void graphic_hw_update(QemuConsole *con) | ||||||
|     if (!con) { |     if (!con) { | ||||||
|         con = active_console; |         con = active_console; | ||||||
|     } |     } | ||||||
|     if (con && con->hw_update) { |     if (con && con->hw_ops->gfx_update) { | ||||||
|         con->hw_update(con->hw); |         con->hw_ops->gfx_update(con->hw); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -239,8 +237,8 @@ void graphic_hw_invalidate(QemuConsole *con) | ||||||
|     if (!con) { |     if (!con) { | ||||||
|         con = active_console; |         con = active_console; | ||||||
|     } |     } | ||||||
|     if (con && con->hw_invalidate) { |     if (con && con->hw_ops->invalidate) { | ||||||
|         con->hw_invalidate(con->hw); |         con->hw_ops->invalidate(con->hw); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -310,8 +308,9 @@ void graphic_hw_text_update(QemuConsole *con, console_ch_t *chardata) | ||||||
|     if (!con) { |     if (!con) { | ||||||
|         con = active_console; |         con = active_console; | ||||||
|     } |     } | ||||||
|     if (con && con->hw_text_update) |     if (con && con->hw_ops->text_update) { | ||||||
|         con->hw_text_update(con->hw, chardata); |         con->hw_ops->text_update(con->hw, chardata); | ||||||
|  |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void vga_fill_rect(QemuConsole *con, | static void vga_fill_rect(QemuConsole *con, | ||||||
|  | @ -1493,9 +1492,7 @@ DisplayState *init_displaystate(void) | ||||||
|     return display_state; |     return display_state; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| QemuConsole *graphic_console_init(graphic_hw_update_ptr update, | QemuConsole *graphic_console_init(const GraphicHwOps *hw_ops, | ||||||
|                                   graphic_hw_invalidate_ptr invalidate, |  | ||||||
|                                   graphic_hw_text_update_ptr text_update, |  | ||||||
|                                   void *opaque) |                                   void *opaque) | ||||||
| { | { | ||||||
|     int width = 640; |     int width = 640; | ||||||
|  | @ -1506,9 +1503,7 @@ QemuConsole *graphic_console_init(graphic_hw_update_ptr update, | ||||||
|     ds = get_alloc_displaystate(); |     ds = get_alloc_displaystate(); | ||||||
|     trace_console_gfx_new(); |     trace_console_gfx_new(); | ||||||
|     s = new_console(ds, GRAPHIC_CONSOLE); |     s = new_console(ds, GRAPHIC_CONSOLE); | ||||||
|     s->hw_update = update; |     s->hw_ops = hw_ops; | ||||||
|     s->hw_invalidate = invalidate; |  | ||||||
|     s->hw_text_update = text_update; |  | ||||||
|     s->hw = opaque; |     s->hw = opaque; | ||||||
| 
 | 
 | ||||||
|     s->surface = qemu_create_displaysurface(width, height); |     s->surface = qemu_create_displaysurface(width, height); | ||||||
|  | @ -1542,6 +1537,11 @@ static void text_console_update_cursor(void *opaque) | ||||||
|                    qemu_get_clock_ms(rt_clock) + CONSOLE_CURSOR_PERIOD / 2); |                    qemu_get_clock_ms(rt_clock) + CONSOLE_CURSOR_PERIOD / 2); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static const GraphicHwOps text_console_ops = { | ||||||
|  |     .invalidate  = text_console_invalidate, | ||||||
|  |     .text_update = text_console_update, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| static void text_console_do_init(CharDriverState *chr, DisplayState *ds) | static void text_console_do_init(CharDriverState *chr, DisplayState *ds) | ||||||
| { | { | ||||||
|     QemuConsole *s; |     QemuConsole *s; | ||||||
|  | @ -1573,8 +1573,7 @@ static void text_console_do_init(CharDriverState *chr, DisplayState *ds) | ||||||
|     s->cursor_timer = |     s->cursor_timer = | ||||||
|         qemu_new_timer_ms(rt_clock, text_console_update_cursor, s); |         qemu_new_timer_ms(rt_clock, text_console_update_cursor, s); | ||||||
| 
 | 
 | ||||||
|     s->hw_invalidate = text_console_invalidate; |     s->hw_ops = &text_console_ops; | ||||||
|     s->hw_text_update = text_console_update; |  | ||||||
|     s->hw = s; |     s->hw = s; | ||||||
| 
 | 
 | ||||||
|     /* Set text attribute defaults */ |     /* Set text attribute defaults */ | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Gerd Hoffmann
						Gerd Hoffmann