diff options
author | Dave Airlie <airlied@gmail.com> | 2012-11-13 14:36:58 +1000 |
---|---|---|
committer | Dave Airlie <airlied@gmail.com> | 2012-11-13 14:36:58 +1000 |
commit | 2028a360b1df1ff3eda8810f0764903ca348f709 (patch) | |
tree | 452f0ba9f5e06d8c7a7490bf3d1aeee406e415fa | |
parent | 48e6068783e8998dbf6d38accfba36c7711a0cb0 (diff) |
qxl: move mem slots code to qxl_mem.c
This moves the mem slot setup code to qxl_mem.c.
Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r-- | src/qxl.h | 2 | ||||
-rw-r--r-- | src/qxl_driver.c | 78 | ||||
-rw-r--r-- | src/qxl_mem.c | 78 |
3 files changed, 80 insertions, 78 deletions
@@ -485,6 +485,8 @@ void * qxl_allocnf (qxl_screen_t *qxl, const char * name); int qxl_garbage_collect (qxl_screen_t *qxl); +void qxl_reset_and_create_mem_slots (qxl_screen_t *qxl); +void qxl_mark_mem_unverifiable (qxl_screen_t *qxl); #ifdef DEBUG_QXL_MEM void qxl_mem_unverifiable(struct qxl_mem *mem); #else diff --git a/src/qxl_driver.c b/src/qxl_driver.c index 29740fa..9384b6f 100644 --- a/src/qxl_driver.c +++ b/src/qxl_driver.c @@ -611,84 +611,6 @@ qxl_restore_state (ScrnInfoPtr pScrn) #endif /* XSPICE */ -static uint8_t -setup_slot (qxl_screen_t *qxl, uint8_t slot_index_offset, - unsigned long start_phys_addr, unsigned long end_phys_addr, - uint64_t start_virt_addr, uint64_t end_virt_addr) -{ - uint64_t high_bits; - qxl_memslot_t *slot; - uint8_t slot_index; - struct QXLRam *ram_header; - - ram_header = (void *)((unsigned long)qxl->ram + (unsigned long)qxl->rom->ram_header_offset); - - slot_index = qxl->rom->slots_start + slot_index_offset; - slot = &qxl->mem_slots[slot_index]; - slot->start_phys_addr = start_phys_addr; - slot->end_phys_addr = end_phys_addr; - slot->start_virt_addr = start_virt_addr; - slot->end_virt_addr = end_virt_addr; - - ram_header->mem_slot.mem_start = slot->start_phys_addr; - ram_header->mem_slot.mem_end = slot->end_phys_addr; - - qxl_io_memslot_add (qxl, slot_index); - - slot->generation = qxl->rom->slot_generation; - - high_bits = slot_index << qxl->slot_gen_bits; - high_bits |= slot->generation; - high_bits <<= (64 - (qxl->slot_gen_bits + qxl->slot_id_bits)); - slot->high_bits = high_bits; - - return slot_index; -} - -static void -qxl_reset_and_create_mem_slots (qxl_screen_t *qxl) -{ - ioport_write (qxl, QXL_IO_RESET, 0); - qxl->device_primary = QXL_DEVICE_PRIMARY_NONE; - /* Mem slots */ - ErrorF ("slots start: %d, slots end: %d\n", - qxl->rom->slots_start, - qxl->rom->slots_end); - - /* Main slot */ - qxl->n_mem_slots = qxl->rom->slots_end; - qxl->slot_gen_bits = qxl->rom->slot_gen_bits; - qxl->slot_id_bits = qxl->rom->slot_id_bits; - qxl->va_slot_mask = (~(uint64_t)0) >> (qxl->slot_id_bits + qxl->slot_gen_bits); - - qxl->mem_slots = xnfalloc (qxl->n_mem_slots * sizeof (qxl_memslot_t)); - -#ifdef XSPICE - qxl->main_mem_slot = qxl->vram_mem_slot = setup_slot (qxl, 0, 0, ~0, 0, ~0); -#else /* QXL */ - qxl->main_mem_slot = setup_slot (qxl, 0, - (unsigned long)qxl->ram_physical, - (unsigned long)qxl->ram_physical + qxl->surface0_size + - (unsigned long)qxl->rom->num_pages * getpagesize (), - (uint64_t)(uintptr_t)qxl->ram, - (uint64_t)(uintptr_t)qxl->ram + qxl->surface0_size + - (unsigned long)qxl->rom->num_pages * getpagesize () - ); - qxl->vram_mem_slot = setup_slot (qxl, 1, - (unsigned long)qxl->vram_physical, - (unsigned long)qxl->vram_physical + (unsigned long)qxl->vram_size, - (uint64_t)(uintptr_t)qxl->vram, - (uint64_t)(uintptr_t)qxl->vram + (uint64_t)qxl->vram_size); -#endif -} - -static void -qxl_mark_mem_unverifiable (qxl_screen_t *qxl) -{ - qxl_mem_unverifiable (qxl->mem); - qxl_mem_unverifiable (qxl->surf_mem); -} - static Bool qxl_close_screen (CLOSE_SCREEN_ARGS_DECL) { diff --git a/src/qxl_mem.c b/src/qxl_mem.c index a0341ff..87e0ab4 100644 --- a/src/qxl_mem.c +++ b/src/qxl_mem.c @@ -159,3 +159,81 @@ qxl_mem_free_all (struct qxl_mem *mem) mem->space = create_mspace_with_base (mem->base, mem->n_bytes, 0, NULL); } + +static uint8_t +setup_slot (qxl_screen_t *qxl, uint8_t slot_index_offset, + unsigned long start_phys_addr, unsigned long end_phys_addr, + uint64_t start_virt_addr, uint64_t end_virt_addr) +{ + uint64_t high_bits; + qxl_memslot_t *slot; + uint8_t slot_index; + struct QXLRam *ram_header; + + ram_header = (void *)((unsigned long)qxl->ram + (unsigned long)qxl->rom->ram_header_offset); + + slot_index = qxl->rom->slots_start + slot_index_offset; + slot = &qxl->mem_slots[slot_index]; + slot->start_phys_addr = start_phys_addr; + slot->end_phys_addr = end_phys_addr; + slot->start_virt_addr = start_virt_addr; + slot->end_virt_addr = end_virt_addr; + + ram_header->mem_slot.mem_start = slot->start_phys_addr; + ram_header->mem_slot.mem_end = slot->end_phys_addr; + + qxl_io_memslot_add (qxl, slot_index); + + slot->generation = qxl->rom->slot_generation; + + high_bits = slot_index << qxl->slot_gen_bits; + high_bits |= slot->generation; + high_bits <<= (64 - (qxl->slot_gen_bits + qxl->slot_id_bits)); + slot->high_bits = high_bits; + + return slot_index; +} + +void +qxl_reset_and_create_mem_slots (qxl_screen_t *qxl) +{ + ioport_write (qxl, QXL_IO_RESET, 0); + qxl->device_primary = QXL_DEVICE_PRIMARY_NONE; + /* Mem slots */ + ErrorF ("slots start: %d, slots end: %d\n", + qxl->rom->slots_start, + qxl->rom->slots_end); + + /* Main slot */ + qxl->n_mem_slots = qxl->rom->slots_end; + qxl->slot_gen_bits = qxl->rom->slot_gen_bits; + qxl->slot_id_bits = qxl->rom->slot_id_bits; + qxl->va_slot_mask = (~(uint64_t)0) >> (qxl->slot_id_bits + qxl->slot_gen_bits); + + qxl->mem_slots = xnfalloc (qxl->n_mem_slots * sizeof (qxl_memslot_t)); + +#ifdef XSPICE + qxl->main_mem_slot = qxl->vram_mem_slot = setup_slot (qxl, 0, 0, ~0, 0, ~0); +#else /* QXL */ + qxl->main_mem_slot = setup_slot (qxl, 0, + (unsigned long)qxl->ram_physical, + (unsigned long)qxl->ram_physical + qxl->surface0_size + + (unsigned long)qxl->rom->num_pages * getpagesize (), + (uint64_t)(uintptr_t)qxl->ram, + (uint64_t)(uintptr_t)qxl->ram + qxl->surface0_size + + (unsigned long)qxl->rom->num_pages * getpagesize () + ); + qxl->vram_mem_slot = setup_slot (qxl, 1, + (unsigned long)qxl->vram_physical, + (unsigned long)qxl->vram_physical + (unsigned long)qxl->vram_size, + (uint64_t)(uintptr_t)qxl->vram, + (uint64_t)(uintptr_t)qxl->vram + (uint64_t)qxl->vram_size); +#endif +} + +void +qxl_mark_mem_unverifiable (qxl_screen_t *qxl) +{ + qxl_mem_unverifiable (qxl->mem); + qxl_mem_unverifiable (qxl->surf_mem); +} |