--- src/qxl_driver.c | 9 ++------ src/qxl_surface.c | 2 +- src/qxlhw.c | 10 +++++++++ src/qxlhw.h | 6 ++++++ src/qxlhw_pci.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 80 insertions(+), 8 deletions(-)
diff --git a/src/qxl_driver.c b/src/qxl_driver.c index 3de060d..972aa4a 100644 --- a/src/qxl_driver.c +++ b/src/qxl_driver.c @@ -611,7 +611,6 @@ qxl_screen_init(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) { ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; qxl_screen_t *qxl = pScrn->driverPrivate; - struct QXLRom *rom; VisualPtr visual; CHECK_POINT(); @@ -624,12 +623,8 @@ qxl_screen_init(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) #ifdef XSPICE spiceqxl_screen_init(scrnIndex, pScrn, qxl); #endif - rom = qxlhw_pci_get_rom(qxl->hw); - assert(rom); - - printf ("ram_header at %d\n", rom->ram_header_offset); - printf ("surf0 size: %d\n", rom->surface0_area_size); - + qxlhw_screen_init(qxl->hw); + qxlhw_save_state(qxl->hw, pScrn); qxl_blank_screen(pScreen, SCREEN_SAVER_ON); diff --git a/src/qxl_surface.c b/src/qxl_surface.c index d499593..9e9c364 100644 --- a/src/qxl_surface.c +++ b/src/qxl_surface.c @@ -545,7 +545,7 @@ retry: cmd.u.surface_create.height = height; cmd.u.surface_create.stride = -stride; - cmd.u.surface_create.data = pointer_to_u64(surface->address); + cmd.u.surface_create.data = pointer_to_u64(address); push_surface_cmd (cache, &cmd); diff --git a/src/qxlhw.c b/src/qxlhw.c index 7e444e0..a5c17c6 100644 --- a/src/qxlhw.c +++ b/src/qxlhw.c @@ -53,6 +53,16 @@ void qxlhw_unmap_memory(struct qxlhw *base, int scrnIndex) base->unmap_memory(base, scrnIndex); } +void qxlhw_screen_init(struct qxlhw *base) +{ + base->screen_init(base); +} + +Bool qxlhw_check_device(struct qxlhw *base, ScrnInfoPtr pScrn) +{ + return base->check_device(base, pScrn); +} + void *qxlhw_data_alloc(struct qxlhw *base, unsigned long size) { return base->data_alloc(base, size); diff --git a/src/qxlhw.h b/src/qxlhw.h index 0e9e6c8..f59649d 100644 --- a/src/qxlhw.h +++ b/src/qxlhw.h @@ -16,6 +16,8 @@ struct qxlhw { void (*restore_state)(struct qxlhw *base, ScrnInfoPtr pScrn); Bool (*map_memory)(struct qxlhw *base, int scrnIndex); void (*unmap_memory)(struct qxlhw *base, int scrnIndex); + void (*screen_init)(struct qxlhw *base); + Bool (*check_device)(struct qxlhw *base, ScrnInfoPtr pScrn); /* capabilities check / accessors */ int (*get_n_surfaces)(struct qxlhw *base); @@ -62,6 +64,10 @@ void qxlhw_restore_state(struct qxlhw *base, ScrnInfoPtr pScrn); Bool qxlhw_map_memory(struct qxlhw *base, int scrnIndex); void qxlhw_unmap_memory(struct qxlhw *base, int scrnIndex); +void qxlhw_screen_init(struct qxlhw *base); + +Bool qxlhw_check_device(struct qxlhw *base, ScrnInfoPtr pScrn); + /* memory translation, relocations. */ void *qxlhw_data_alloc(struct qxlhw *base, unsigned long size); void qxlhw_data_free(struct qxlhw *base, void *p); diff --git a/src/qxlhw_pci.c b/src/qxlhw_pci.c index 5ba2fd8..8613e1c 100644 --- a/src/qxlhw_pci.c +++ b/src/qxlhw_pci.c @@ -12,6 +12,11 @@ #include "spiceqxl_driver.h" #endif +#if 0 +#define CHECK_POINT() ErrorF ("%s: %d (%s)\n", __FILE__, __LINE__, __FUNCTION__); +#endif +#define CHECK_POINT() + typedef struct { uint8_t generation; @@ -563,6 +568,60 @@ static void qxlhw_pci_restore_state(struct qxlhw *base, ScrnInfoPtr pScrn) #endif } +static void qxlhw_pci_screen_init(struct qxlhw *base) +{ + struct qxlhw_pci *hw = (struct qxlhw_pci *)base; + + printf ("ram_header at %d\n", hw->rom->ram_header_offset); + printf ("surf0 size: %d\n", hw->rom->surface0_area_size); +} + +static Bool +qxlhw_pci_check_device(struct qxlhw *base, ScrnInfoPtr pScrn) +{ + struct qxlhw_pci *hw = (struct qxlhw_pci *)base; + int scrnIndex = pScrn->scrnIndex; +#ifndef XSPICE + struct QXLRom *rom = hw->rom; + struct QXLRam *ram_header = (void *)((unsigned long)hw->ram + rom->ram_header_offset); + + CHECK_POINT(); + + if (rom->magic != 0x4f525851) { /* "QXRO" little-endian */ + xf86DrvMsg(scrnIndex, X_ERROR, "Bad ROM signature %x\n", rom->magic); + return FALSE; + } + + xf86DrvMsg(scrnIndex, X_INFO, "Device version %d.%d\n", + rom->id, rom->update_id); + + xf86DrvMsg(scrnIndex, X_INFO, "Compression level %d, log level %d\n", + rom->compression_level, + rom->log_level); + + xf86DrvMsg(scrnIndex, X_INFO, "%d io pages at 0x%lx\n", + rom->num_pages, (unsigned long)hw->ram); + + xf86DrvMsg(scrnIndex, X_INFO, "RAM header offset: 0x%x\n", rom->ram_header_offset); + + if (ram_header->magic != 0x41525851) { /* "QXRA" little-endian */ + xf86DrvMsg(scrnIndex, X_ERROR, "Bad RAM signature %x at %p\n", + ram_header->magic, + &ram_header->magic); + return FALSE; + } + + xf86DrvMsg(scrnIndex, X_INFO, "Correct RAM signature %x\n", + ram_header->magic); +#endif /* !XSPICE */ + + pScrn->videoRam = (hw->rom->num_pages * 4096) / 1024; + xf86DrvMsg(scrnIndex, X_INFO, "%d KB of video RAM\n", pScrn->videoRam); + xf86DrvMsg(scrnIndex, X_INFO, "%d surfaces\n", hw->rom->n_surfaces); + + return TRUE; +} + static void *qxlhw_pci_data_alloc(struct qxlhw *base, unsigned long size) { struct qxlhw_pci *hw = (struct qxlhw_pci *)base; @@ -910,6 +969,8 @@ struct qxlhw *create_qxlhw_pci(qxl_screen_t *qxl, ScrnInfoPtr pScrn) base->restore_state = qxlhw_pci_restore_state; base->map_memory = qxlhw_pci_map_memory; base->unmap_memory = qxlhw_pci_unmap_memory; + base->screen_init = qxlhw_pci_screen_init; + base->check_device = qxlhw_pci_check_device; base->data_alloc = qxlhw_pci_data_alloc; base->data_free = qxlhw_pci_data_free; base->create_primary_surface = qxlhw_pci_create_primary_surface; -- 1.7.9.3 _______________________________________________ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel