Lines Matching refs:qdev

34 static void qxl_dump_mode(struct qxl_device *qdev, void *p)  in qxl_dump_mode()  argument
42 static bool qxl_check_device(struct qxl_device *qdev) in qxl_check_device() argument
44 struct qxl_rom *rom = qdev->rom; in qxl_check_device()
63 qdev->vram_size = rom->surface0_area_size; in qxl_check_device()
67 qdev->mode_info.num_modes = ((u32 *)rom)[mode_offset]; in qxl_check_device()
69 qdev->mode_info.num_modes); in qxl_check_device()
70 qdev->mode_info.modes = (void *)((uint32_t *)rom + mode_offset + 1); in qxl_check_device()
71 for (i = 0; i < qdev->mode_info.num_modes; i++) in qxl_check_device()
72 qxl_dump_mode(qdev, qdev->mode_info.modes + i); in qxl_check_device()
76 static void setup_hw_slot(struct qxl_device *qdev, int slot_index, in setup_hw_slot() argument
79 qdev->ram_header->mem_slot.mem_start = slot->start_phys_addr; in setup_hw_slot()
80 qdev->ram_header->mem_slot.mem_end = slot->end_phys_addr; in setup_hw_slot()
81 qxl_io_memslot_add(qdev, slot_index); in setup_hw_slot()
84 static uint8_t setup_slot(struct qxl_device *qdev, uint8_t slot_index_offset, in setup_slot() argument
91 slot_index = qdev->rom->slots_start + slot_index_offset; in setup_slot()
92 slot = &qdev->mem_slots[slot_index]; in setup_slot()
96 setup_hw_slot(qdev, slot_index, slot); in setup_slot()
98 slot->generation = qdev->rom->slot_generation; in setup_slot()
99 high_bits = slot_index << qdev->slot_gen_bits; in setup_slot()
101 high_bits <<= (64 - (qdev->slot_gen_bits + qdev->slot_id_bits)); in setup_slot()
106 void qxl_reinit_memslots(struct qxl_device *qdev) in qxl_reinit_memslots() argument
108 setup_hw_slot(qdev, qdev->main_mem_slot, &qdev->mem_slots[qdev->main_mem_slot]); in qxl_reinit_memslots()
109 setup_hw_slot(qdev, qdev->surfaces_mem_slot, &qdev->mem_slots[qdev->surfaces_mem_slot]); in qxl_reinit_memslots()
114 struct qxl_device *qdev = container_of(work, struct qxl_device, gc_work); in qxl_gc_work() local
115 qxl_garbage_collect(qdev); in qxl_gc_work()
118 static int qxl_device_init(struct qxl_device *qdev, in qxl_device_init() argument
125 qdev->dev = &pdev->dev; in qxl_device_init()
126 qdev->ddev = ddev; in qxl_device_init()
127 qdev->pdev = pdev; in qxl_device_init()
128 qdev->flags = flags; in qxl_device_init()
130 mutex_init(&qdev->gem.mutex); in qxl_device_init()
131 mutex_init(&qdev->update_area_mutex); in qxl_device_init()
132 mutex_init(&qdev->release_mutex); in qxl_device_init()
133 mutex_init(&qdev->surf_evict_mutex); in qxl_device_init()
134 INIT_LIST_HEAD(&qdev->gem.objects); in qxl_device_init()
136 qdev->rom_base = pci_resource_start(pdev, 2); in qxl_device_init()
137 qdev->rom_size = pci_resource_len(pdev, 2); in qxl_device_init()
138 qdev->vram_base = pci_resource_start(pdev, 0); in qxl_device_init()
139 qdev->io_base = pci_resource_start(pdev, 3); in qxl_device_init()
141 qdev->vram_mapping = io_mapping_create_wc(qdev->vram_base, pci_resource_len(pdev, 0)); in qxl_device_init()
146 qdev->surfaceram_base = pci_resource_start(pdev, sb); in qxl_device_init()
147 qdev->surfaceram_size = pci_resource_len(pdev, sb); in qxl_device_init()
148 qdev->surface_mapping = in qxl_device_init()
149 io_mapping_create_wc(qdev->surfaceram_base, in qxl_device_init()
150 qdev->surfaceram_size); in qxl_device_init()
152 if (qdev->surface_mapping == NULL) { in qxl_device_init()
155 qdev->surfaceram_base = pci_resource_start(pdev, sb); in qxl_device_init()
156 qdev->surfaceram_size = pci_resource_len(pdev, sb); in qxl_device_init()
157 qdev->surface_mapping = in qxl_device_init()
158 io_mapping_create_wc(qdev->surfaceram_base, in qxl_device_init()
159 qdev->surfaceram_size); in qxl_device_init()
163 (unsigned long long)qdev->vram_base, in qxl_device_init()
167 (unsigned long long)qdev->surfaceram_base, in qxl_device_init()
169 (int)qdev->surfaceram_size / 1024 / 1024, in qxl_device_init()
170 (int)qdev->surfaceram_size / 1024, in qxl_device_init()
173 qdev->rom = ioremap(qdev->rom_base, qdev->rom_size); in qxl_device_init()
174 if (!qdev->rom) { in qxl_device_init()
179 qxl_check_device(qdev); in qxl_device_init()
181 r = qxl_bo_init(qdev); in qxl_device_init()
187 qdev->ram_header = ioremap(qdev->vram_base + in qxl_device_init()
188 qdev->rom->ram_header_offset, in qxl_device_init()
189 sizeof(*qdev->ram_header)); in qxl_device_init()
191 qdev->command_ring = qxl_ring_create(&(qdev->ram_header->cmd_ring_hdr), in qxl_device_init()
194 qdev->io_base + QXL_IO_NOTIFY_CMD, in qxl_device_init()
196 &qdev->display_event); in qxl_device_init()
198 qdev->cursor_ring = qxl_ring_create( in qxl_device_init()
199 &(qdev->ram_header->cursor_ring_hdr), in qxl_device_init()
202 qdev->io_base + QXL_IO_NOTIFY_CMD, in qxl_device_init()
204 &qdev->cursor_event); in qxl_device_init()
206 qdev->release_ring = qxl_ring_create( in qxl_device_init()
207 &(qdev->ram_header->release_ring_hdr), in qxl_device_init()
214 qdev->n_mem_slots = qdev->rom->slots_end; in qxl_device_init()
215 qdev->slot_gen_bits = qdev->rom->slot_gen_bits; in qxl_device_init()
216 qdev->slot_id_bits = qdev->rom->slot_id_bits; in qxl_device_init()
217 qdev->va_slot_mask = in qxl_device_init()
218 (~(uint64_t)0) >> (qdev->slot_id_bits + qdev->slot_gen_bits); in qxl_device_init()
220 qdev->mem_slots = in qxl_device_init()
221 kmalloc(qdev->n_mem_slots * sizeof(struct qxl_memslot), in qxl_device_init()
224 idr_init(&qdev->release_idr); in qxl_device_init()
225 spin_lock_init(&qdev->release_idr_lock); in qxl_device_init()
226 spin_lock_init(&qdev->release_lock); in qxl_device_init()
228 idr_init(&qdev->surf_id_idr); in qxl_device_init()
229 spin_lock_init(&qdev->surf_id_idr_lock); in qxl_device_init()
231 mutex_init(&qdev->async_io_mutex); in qxl_device_init()
235 qxl_io_reset(qdev); in qxl_device_init()
238 r = qxl_irq_init(qdev); in qxl_device_init()
246 qdev->main_mem_slot = setup_slot(qdev, 0, in qxl_device_init()
247 (unsigned long)qdev->vram_base, in qxl_device_init()
248 (unsigned long)qdev->vram_base + qdev->rom->ram_header_offset); in qxl_device_init()
249 qdev->surfaces_mem_slot = setup_slot(qdev, 1, in qxl_device_init()
250 (unsigned long)qdev->surfaceram_base, in qxl_device_init()
251 (unsigned long)qdev->surfaceram_base + qdev->surfaceram_size); in qxl_device_init()
253 qdev->main_mem_slot, in qxl_device_init()
254 (unsigned long)qdev->vram_base, qdev->rom->ram_header_offset); in qxl_device_init()
256 qdev->surfaces_mem_slot, in qxl_device_init()
257 (unsigned long)qdev->surfaceram_base, in qxl_device_init()
258 (unsigned long)qdev->surfaceram_size); in qxl_device_init()
261 qdev->gc_queue = create_singlethread_workqueue("qxl_gc"); in qxl_device_init()
262 INIT_WORK(&qdev->gc_work, qxl_gc_work); in qxl_device_init()
264 r = qxl_fb_init(qdev); in qxl_device_init()
271 static void qxl_device_fini(struct qxl_device *qdev) in qxl_device_fini() argument
273 if (qdev->current_release_bo[0]) in qxl_device_fini()
274 qxl_bo_unref(&qdev->current_release_bo[0]); in qxl_device_fini()
275 if (qdev->current_release_bo[1]) in qxl_device_fini()
276 qxl_bo_unref(&qdev->current_release_bo[1]); in qxl_device_fini()
277 flush_workqueue(qdev->gc_queue); in qxl_device_fini()
278 destroy_workqueue(qdev->gc_queue); in qxl_device_fini()
279 qdev->gc_queue = NULL; in qxl_device_fini()
281 qxl_ring_free(qdev->command_ring); in qxl_device_fini()
282 qxl_ring_free(qdev->cursor_ring); in qxl_device_fini()
283 qxl_ring_free(qdev->release_ring); in qxl_device_fini()
284 qxl_bo_fini(qdev); in qxl_device_fini()
285 io_mapping_free(qdev->surface_mapping); in qxl_device_fini()
286 io_mapping_free(qdev->vram_mapping); in qxl_device_fini()
287 iounmap(qdev->ram_header); in qxl_device_fini()
288 iounmap(qdev->rom); in qxl_device_fini()
289 qdev->rom = NULL; in qxl_device_fini()
290 qdev->mode_info.modes = NULL; in qxl_device_fini()
291 qdev->mode_info.num_modes = 0; in qxl_device_fini()
292 qxl_debugfs_remove_files(qdev); in qxl_device_fini()
297 struct qxl_device *qdev = dev->dev_private; in qxl_driver_unload() local
299 if (qdev == NULL) in qxl_driver_unload()
304 qxl_modeset_fini(qdev); in qxl_driver_unload()
305 qxl_device_fini(qdev); in qxl_driver_unload()
307 kfree(qdev); in qxl_driver_unload()
314 struct qxl_device *qdev; in qxl_driver_load() local
321 qdev = kzalloc(sizeof(struct qxl_device), GFP_KERNEL); in qxl_driver_load()
322 if (qdev == NULL) in qxl_driver_load()
325 dev->dev_private = qdev; in qxl_driver_load()
327 r = qxl_device_init(qdev, dev, dev->pdev, flags); in qxl_driver_load()
335 r = qxl_modeset_init(qdev); in qxl_driver_load()
339 drm_kms_helper_poll_init(qdev->ddev); in qxl_driver_load()
346 kfree(qdev); in qxl_driver_load()