mirror of https://github.com/proxmox/mirror_qemu
qxl: add xres and yres properties
Add properties for the default display resolution, pass on that information to the guest so the driver can use it. Also move up qxl_crc32() function so we don't need a forward declaration. Additionally guest driver updates are needed so the guest driver will actually pick this up, which will probably land in linux kernel 4.12. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Message-id: 20170421092234.8368-1-kraxel@redhat.commaster
parent
104bd1dc70
commit
6f663d7be9
|
@ -305,6 +305,16 @@ void qxl_spice_reset_cursor(PCIQXLDevice *qxl)
|
||||||
qxl->ssd.cursor = cursor_builtin_hidden();
|
qxl->ssd.cursor = cursor_builtin_hidden();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static uint32_t qxl_crc32(const uint8_t *p, unsigned len)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* zlib xors the seed with 0xffffffff, and xors the result
|
||||||
|
* again with 0xffffffff; Both are not done with linux's crc32,
|
||||||
|
* which we want to be compatible with, so undo that.
|
||||||
|
*/
|
||||||
|
return crc32(0xffffffff, p, len) ^ 0xffffffff;
|
||||||
|
}
|
||||||
|
|
||||||
static ram_addr_t qxl_rom_size(void)
|
static ram_addr_t qxl_rom_size(void)
|
||||||
{
|
{
|
||||||
#define QXL_REQUIRED_SZ (sizeof(QXLRom) + sizeof(QXLModes) + sizeof(qxl_modes))
|
#define QXL_REQUIRED_SZ (sizeof(QXLRom) + sizeof(QXLModes) + sizeof(qxl_modes))
|
||||||
|
@ -369,6 +379,18 @@ static void init_qxl_rom(PCIQXLDevice *d)
|
||||||
rom->num_pages = cpu_to_le32(num_pages);
|
rom->num_pages = cpu_to_le32(num_pages);
|
||||||
rom->ram_header_offset = cpu_to_le32(d->vga.vram_size - ram_header_size);
|
rom->ram_header_offset = cpu_to_le32(d->vga.vram_size - ram_header_size);
|
||||||
|
|
||||||
|
if (d->xres && d->yres) {
|
||||||
|
/* needs linux kernel 4.12+ to work */
|
||||||
|
rom->client_monitors_config.count = 1;
|
||||||
|
rom->client_monitors_config.heads[0].left = 0;
|
||||||
|
rom->client_monitors_config.heads[0].top = 0;
|
||||||
|
rom->client_monitors_config.heads[0].right = cpu_to_le32(d->xres);
|
||||||
|
rom->client_monitors_config.heads[0].bottom = cpu_to_le32(d->yres);
|
||||||
|
rom->client_monitors_config_crc = qxl_crc32(
|
||||||
|
(const uint8_t *)&rom->client_monitors_config,
|
||||||
|
sizeof(rom->client_monitors_config));
|
||||||
|
}
|
||||||
|
|
||||||
d->shadow_rom = *rom;
|
d->shadow_rom = *rom;
|
||||||
d->rom = rom;
|
d->rom = rom;
|
||||||
d->modes = modes;
|
d->modes = modes;
|
||||||
|
@ -1011,16 +1033,6 @@ static void interface_set_client_capabilities(QXLInstance *sin,
|
||||||
qxl_send_events(qxl, QXL_INTERRUPT_CLIENT);
|
qxl_send_events(qxl, QXL_INTERRUPT_CLIENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t qxl_crc32(const uint8_t *p, unsigned len)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* zlib xors the seed with 0xffffffff, and xors the result
|
|
||||||
* again with 0xffffffff; Both are not done with linux's crc32,
|
|
||||||
* which we want to be compatible with, so undo that.
|
|
||||||
*/
|
|
||||||
return crc32(0xffffffff, p, len) ^ 0xffffffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool qxl_rom_monitors_config_changed(QXLRom *rom,
|
static bool qxl_rom_monitors_config_changed(QXLRom *rom,
|
||||||
VDAgentMonitorsConfig *monitors_config,
|
VDAgentMonitorsConfig *monitors_config,
|
||||||
unsigned int max_outputs)
|
unsigned int max_outputs)
|
||||||
|
@ -2397,6 +2409,8 @@ static Property qxl_properties[] = {
|
||||||
#if SPICE_SERVER_VERSION >= 0x000c06 /* release 0.12.6 */
|
#if SPICE_SERVER_VERSION >= 0x000c06 /* release 0.12.6 */
|
||||||
DEFINE_PROP_UINT16("max_outputs", PCIQXLDevice, max_outputs, 0),
|
DEFINE_PROP_UINT16("max_outputs", PCIQXLDevice, max_outputs, 0),
|
||||||
#endif
|
#endif
|
||||||
|
DEFINE_PROP_UINT32("xres", PCIQXLDevice, xres, 0),
|
||||||
|
DEFINE_PROP_UINT32("yres", PCIQXLDevice, yres, 0),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
DEFINE_PROP_END_OF_LIST(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -119,6 +119,8 @@ typedef struct PCIQXLDevice {
|
||||||
uint32_t vram_size_mb;
|
uint32_t vram_size_mb;
|
||||||
uint32_t vram32_size_mb;
|
uint32_t vram32_size_mb;
|
||||||
uint32_t vgamem_size_mb;
|
uint32_t vgamem_size_mb;
|
||||||
|
uint32_t xres;
|
||||||
|
uint32_t yres;
|
||||||
|
|
||||||
/* qxl_render_update state */
|
/* qxl_render_update state */
|
||||||
int render_update_cookie_num;
|
int render_update_cookie_num;
|
||||||
|
|
Loading…
Reference in New Issue