Lines Matching refs:qdev
34 static bool qxl_check_device(struct qxl_device *qdev) in qxl_check_device() argument
36 struct qxl_rom *rom = qdev->rom; in qxl_check_device()
51 qdev->vram_size = rom->surface0_area_size; in qxl_check_device()
56 static void setup_hw_slot(struct qxl_device *qdev, int slot_index, in setup_hw_slot() argument
59 qdev->ram_header->mem_slot.mem_start = slot->start_phys_addr; in setup_hw_slot()
60 qdev->ram_header->mem_slot.mem_end = slot->end_phys_addr; in setup_hw_slot()
61 qxl_io_memslot_add(qdev, slot_index); in setup_hw_slot()
64 static uint8_t setup_slot(struct qxl_device *qdev, uint8_t slot_index_offset, in setup_slot() argument
71 slot_index = qdev->rom->slots_start + slot_index_offset; in setup_slot()
72 slot = &qdev->mem_slots[slot_index]; in setup_slot()
76 setup_hw_slot(qdev, slot_index, slot); in setup_slot()
78 slot->generation = qdev->rom->slot_generation; in setup_slot()
79 high_bits = slot_index << qdev->slot_gen_bits; in setup_slot()
81 high_bits <<= (64 - (qdev->slot_gen_bits + qdev->slot_id_bits)); in setup_slot()
86 void qxl_reinit_memslots(struct qxl_device *qdev) in qxl_reinit_memslots() argument
88 setup_hw_slot(qdev, qdev->main_mem_slot, &qdev->mem_slots[qdev->main_mem_slot]); in qxl_reinit_memslots()
89 setup_hw_slot(qdev, qdev->surfaces_mem_slot, &qdev->mem_slots[qdev->surfaces_mem_slot]); in qxl_reinit_memslots()
94 struct qxl_device *qdev = container_of(work, struct qxl_device, gc_work); in qxl_gc_work() local
95 qxl_garbage_collect(qdev); in qxl_gc_work()
98 int qxl_device_init(struct qxl_device *qdev, in qxl_device_init() argument
104 r = drm_dev_init(&qdev->ddev, drv, &pdev->dev); in qxl_device_init()
108 qdev->ddev.pdev = pdev; in qxl_device_init()
109 pci_set_drvdata(pdev, &qdev->ddev); in qxl_device_init()
110 qdev->ddev.dev_private = qdev; in qxl_device_init()
112 mutex_init(&qdev->gem.mutex); in qxl_device_init()
113 mutex_init(&qdev->update_area_mutex); in qxl_device_init()
114 mutex_init(&qdev->release_mutex); in qxl_device_init()
115 mutex_init(&qdev->surf_evict_mutex); in qxl_device_init()
116 qxl_gem_init(qdev); in qxl_device_init()
118 qdev->rom_base = pci_resource_start(pdev, 2); in qxl_device_init()
119 qdev->rom_size = pci_resource_len(pdev, 2); in qxl_device_init()
120 qdev->vram_base = pci_resource_start(pdev, 0); in qxl_device_init()
121 qdev->io_base = pci_resource_start(pdev, 3); in qxl_device_init()
123 qdev->vram_mapping = io_mapping_create_wc(qdev->vram_base, pci_resource_len(pdev, 0)); in qxl_device_init()
128 qdev->surfaceram_base = pci_resource_start(pdev, sb); in qxl_device_init()
129 qdev->surfaceram_size = pci_resource_len(pdev, sb); in qxl_device_init()
130 qdev->surface_mapping = in qxl_device_init()
131 io_mapping_create_wc(qdev->surfaceram_base, in qxl_device_init()
132 qdev->surfaceram_size); in qxl_device_init()
134 if (qdev->surface_mapping == NULL) { in qxl_device_init()
137 qdev->surfaceram_base = pci_resource_start(pdev, sb); in qxl_device_init()
138 qdev->surfaceram_size = pci_resource_len(pdev, sb); in qxl_device_init()
139 qdev->surface_mapping = in qxl_device_init()
140 io_mapping_create_wc(qdev->surfaceram_base, in qxl_device_init()
141 qdev->surfaceram_size); in qxl_device_init()
145 (unsigned long long)qdev->vram_base, in qxl_device_init()
149 (unsigned long long)qdev->surfaceram_base, in qxl_device_init()
151 (int)qdev->surfaceram_size / 1024 / 1024, in qxl_device_init()
152 (int)qdev->surfaceram_size / 1024, in qxl_device_init()
155 qdev->rom = ioremap(qdev->rom_base, qdev->rom_size); in qxl_device_init()
156 if (!qdev->rom) { in qxl_device_init()
161 qxl_check_device(qdev); in qxl_device_init()
163 r = qxl_bo_init(qdev); in qxl_device_init()
169 qdev->ram_header = ioremap(qdev->vram_base + in qxl_device_init()
170 qdev->rom->ram_header_offset, in qxl_device_init()
171 sizeof(*qdev->ram_header)); in qxl_device_init()
173 qdev->command_ring = qxl_ring_create(&(qdev->ram_header->cmd_ring_hdr), in qxl_device_init()
176 qdev->io_base + QXL_IO_NOTIFY_CMD, in qxl_device_init()
178 &qdev->display_event); in qxl_device_init()
180 qdev->cursor_ring = qxl_ring_create( in qxl_device_init()
181 &(qdev->ram_header->cursor_ring_hdr), in qxl_device_init()
184 qdev->io_base + QXL_IO_NOTIFY_CMD, in qxl_device_init()
186 &qdev->cursor_event); in qxl_device_init()
188 qdev->release_ring = qxl_ring_create( in qxl_device_init()
189 &(qdev->ram_header->release_ring_hdr), in qxl_device_init()
196 qdev->n_mem_slots = qdev->rom->slots_end; in qxl_device_init()
197 qdev->slot_gen_bits = qdev->rom->slot_gen_bits; in qxl_device_init()
198 qdev->slot_id_bits = qdev->rom->slot_id_bits; in qxl_device_init()
199 qdev->va_slot_mask = in qxl_device_init()
200 (~(uint64_t)0) >> (qdev->slot_id_bits + qdev->slot_gen_bits); in qxl_device_init()
202 qdev->mem_slots = in qxl_device_init()
203 kmalloc(qdev->n_mem_slots * sizeof(struct qxl_memslot), in qxl_device_init()
206 idr_init(&qdev->release_idr); in qxl_device_init()
207 spin_lock_init(&qdev->release_idr_lock); in qxl_device_init()
208 spin_lock_init(&qdev->release_lock); in qxl_device_init()
210 idr_init(&qdev->surf_id_idr); in qxl_device_init()
211 spin_lock_init(&qdev->surf_id_idr_lock); in qxl_device_init()
213 mutex_init(&qdev->async_io_mutex); in qxl_device_init()
217 qxl_io_reset(qdev); in qxl_device_init()
220 r = qxl_irq_init(qdev); in qxl_device_init()
228 qdev->main_mem_slot = setup_slot(qdev, 0, in qxl_device_init()
229 (unsigned long)qdev->vram_base, in qxl_device_init()
230 (unsigned long)qdev->vram_base + qdev->rom->ram_header_offset); in qxl_device_init()
231 qdev->surfaces_mem_slot = setup_slot(qdev, 1, in qxl_device_init()
232 (unsigned long)qdev->surfaceram_base, in qxl_device_init()
233 (unsigned long)qdev->surfaceram_base + qdev->surfaceram_size); in qxl_device_init()
235 qdev->main_mem_slot, in qxl_device_init()
236 (unsigned long)qdev->vram_base, qdev->rom->ram_header_offset); in qxl_device_init()
238 qdev->surfaces_mem_slot, in qxl_device_init()
239 (unsigned long)qdev->surfaceram_base, in qxl_device_init()
240 (unsigned long)qdev->surfaceram_size); in qxl_device_init()
243 INIT_WORK(&qdev->gc_work, qxl_gc_work); in qxl_device_init()
248 void qxl_device_fini(struct qxl_device *qdev) in qxl_device_fini() argument
250 if (qdev->current_release_bo[0]) in qxl_device_fini()
251 qxl_bo_unref(&qdev->current_release_bo[0]); in qxl_device_fini()
252 if (qdev->current_release_bo[1]) in qxl_device_fini()
253 qxl_bo_unref(&qdev->current_release_bo[1]); in qxl_device_fini()
254 flush_work(&qdev->gc_work); in qxl_device_fini()
255 qxl_ring_free(qdev->command_ring); in qxl_device_fini()
256 qxl_ring_free(qdev->cursor_ring); in qxl_device_fini()
257 qxl_ring_free(qdev->release_ring); in qxl_device_fini()
258 qxl_gem_fini(qdev); in qxl_device_fini()
259 qxl_bo_fini(qdev); in qxl_device_fini()
260 io_mapping_free(qdev->surface_mapping); in qxl_device_fini()
261 io_mapping_free(qdev->vram_mapping); in qxl_device_fini()
262 iounmap(qdev->ram_header); in qxl_device_fini()
263 iounmap(qdev->rom); in qxl_device_fini()
264 qdev->rom = NULL; in qxl_device_fini()