Lines Matching refs:info

60 	virtio_gpu_driver_info*		info;
109 virtio_gpu_drain_queues(virtio_gpu_driver_info* info)
111 while (info->virtio->queue_dequeue(info->controlQueue, NULL, NULL))
114 while (info->virtio->queue_dequeue(info->cursorQueue, NULL, NULL))
122 virtio_gpu_send_cmd(virtio_gpu_driver_info* info, void *cmd, size_t cmdSize, void *response,
125 struct virtio_gpu_ctrl_hdr *hdr = (struct virtio_gpu_ctrl_hdr *)info->commandBuffer;
128 memcpy((void*)info->commandBuffer, cmd, cmdSize);
129 memset((void*)(info->commandBuffer + cmdSize), 0, responseSize);
131 hdr->fence_id = ++info->fenceId;
134 { info->commandPhysAddr, cmdSize },
135 { info->commandPhysAddr + cmdSize, responseSize },
137 if (!info->virtio->queue_is_empty(info->controlQueue))
140 status_t status = info->virtio->queue_request_v(info->controlQueue, entries, 1, 1, NULL);
144 acquire_sem(info->commandDone);
146 while (!info->virtio->queue_dequeue(info->controlQueue, NULL, NULL))
149 memcpy(response, (void*)(info->commandBuffer + cmdSize), responseSize);
151 if (responseHdr->fence_id != info->fenceId) {
159 virtio_gpu_get_display_info(virtio_gpu_driver_info* info)
167 virtio_gpu_send_cmd(info, &hdr, sizeof(hdr), &displayInfo, sizeof(displayInfo));
170 ERROR("failed getting display info\n");
179 info->displayWidth = displayInfo.pmodes[0].r.width;
180 info->displayHeight = displayInfo.pmodes[0].r.height;
182 info->displayWidth, info->displayHeight);
189 virtio_gpu_get_edids(virtio_gpu_driver_info* info, int scanout)
197 virtio_gpu_send_cmd(info, &getEdid, sizeof(getEdid), &response, sizeof(response));
204 info->sharedInfo->has_edid = true;
205 memcpy(&info->sharedInfo->edid_raw, response.edid, sizeof(edid1_raw));
213 virtio_gpu_create_2d(virtio_gpu_driver_info* info, int resourceId, int width, int height)
225 virtio_gpu_send_cmd(info, &resource, sizeof(resource), &response, sizeof(response));
237 virtio_gpu_unref(virtio_gpu_driver_info* info, int resourceId)
246 virtio_gpu_send_cmd(info, &resource, sizeof(resource), &response, sizeof(response));
258 virtio_gpu_attach_backing(virtio_gpu_driver_info* info, int resourceId)
268 status_t status = get_memory_map((void*)info->framebuffer, info->framebufferSize, entries, 16);
286 virtio_gpu_send_cmd(info, &backing, sizeof(backing), &response, sizeof(response));
298 virtio_gpu_detach_backing(virtio_gpu_driver_info* info, int resourceId)
307 virtio_gpu_send_cmd(info, &backing, sizeof(backing), &response, sizeof(response));
319 virtio_gpu_set_scanout(virtio_gpu_driver_info* info, int scanoutId, int resourceId,
332 virtio_gpu_send_cmd(info, &set_scanout, sizeof(set_scanout), &response, sizeof(response));
344 virtio_gpu_transfer_to_host_2d(virtio_gpu_driver_info* info, int resourceId,
355 virtio_gpu_send_cmd(info, &transferToHost, sizeof(transferToHost), &response,
368 virtio_gpu_flush_resource(virtio_gpu_driver_info* info, int resourceId, uint32 width,
379 virtio_gpu_send_cmd(info, &resourceFlush, sizeof(resourceFlush), &response, sizeof(response));
393 virtio_gpu_driver_info* info = (virtio_gpu_driver_info*)arg;
395 while (info->updateThreadRunning) {
397 MutexLocker commandLocker(&info->commandLock);
398 virtio_gpu_transfer_to_host_2d(info, info->displayResourceId, info->displayWidth,
399 info->displayHeight);
400 virtio_gpu_flush_resource(info, info->displayResourceId, info->displayWidth, info->displayHeight);
410 virtio_gpu_set_display_mode(virtio_gpu_driver_info* info, display_mode *mode)
414 int newResourceId = info->displayResourceId + 1;
420 status_t status = virtio_gpu_create_2d(info, newResourceId, mode->virtual_width, mode->virtual_height);
424 status = virtio_gpu_attach_backing(info, newResourceId);
428 status = virtio_gpu_unref(info, info->displayResourceId);
432 info->displayResourceId = newResourceId;
433 info->displayWidth = mode->virtual_width;
434 info->displayHeight = mode->virtual_height;
436 status = virtio_gpu_set_scanout(info, 0, 0, 0, 0);
440 status = virtio_gpu_set_scanout(info, 0, info->displayResourceId, info->displayWidth, info->displayHeight);
444 status = virtio_gpu_transfer_to_host_2d(info, info->displayResourceId, info->displayWidth, info->displayHeight);
448 status = virtio_gpu_flush_resource(info, info->displayResourceId, info->displayWidth, info->displayHeight);
453 virtio_gpu_shared_info& sharedInfo = *info->sharedInfo;
454 sharedInfo.frame_buffer_area = info->framebufferArea;
455 sharedInfo.frame_buffer = (uint8*)info->framebuffer;
456 sharedInfo.bytes_per_row = info->displayWidth * 4;
457 sharedInfo.current_mode.virtual_width = info->displayWidth;
458 sharedInfo.current_mode.virtual_height = info->displayHeight;
473 virtio_gpu_driver_info* info = (virtio_gpu_driver_info*)_info;
475 device_node* parent = sDeviceManager->get_parent_node(info->node);
476 sDeviceManager->get_driver(parent, (driver_module_info**)&info->virtio,
477 (void**)&info->virtio_device);
480 info->virtio->negotiate_features(info->virtio_device, VIRTIO_GPU_F_EDID,
481 &info->features, &get_feature_name);
487 status_t status = info->virtio->alloc_queues(info->virtio_device, 2,
494 info->controlQueue = virtioQueues[0];
495 info->cursorQueue = virtioQueues[1];
498 info->commandArea = create_area("virtiogpu command buffer", (void**)&info->commandBuffer,
501 if (info->commandArea < B_OK) {
502 status = info->commandArea;
507 status = get_memory_map((void*)info->commandBuffer, B_PAGE_SIZE, &entry, 1);
511 info->commandPhysAddr = entry.address;
512 mutex_init(&info->commandLock, "virtiogpu command lock");
515 status = info->virtio->setup_interrupt(info->virtio_device, NULL, info);
521 status = info->virtio->queue_setup_interrupt(info->controlQueue,
522 virtio_gpu_vqwait, info);
528 *_cookie = info;
533 delete_area(info->commandArea);
543 virtio_gpu_driver_info* info = (virtio_gpu_driver_info*)_cookie;
545 info->virtio->free_interrupts(info->virtio_device);
547 mutex_destroy(&info->commandLock);
549 delete_area(info->commandArea);
550 info->commandArea = -1;
551 info->virtio->free_queues(info->virtio_device);
559 virtio_gpu_driver_info* info = (virtio_gpu_driver_info*)_info;
569 info->commandDone = create_sem(1, "virtio_gpu_command");
570 if (info->commandDone < B_OK)
573 info->sharedArea = create_area("virtio_gpu shared info",
574 (void**)&info->sharedInfo, B_ANY_KERNEL_ADDRESS,
577 if (info->sharedArea < 0)
579 memset(info->sharedInfo, 0, sizeof(virtio_gpu_shared_info));
581 commandLocker.SetTo(&info->commandLock, false, true);
583 status = virtio_gpu_get_display_info(info);
587 if ((info->features & VIRTIO_GPU_F_EDID) != 0)
588 virtio_gpu_get_edids(info, 0);
591 info->framebufferWidth = 3840;
592 info->framebufferHeight = 2160;
595 info->framebufferSize = 4 * info->framebufferWidth * info->framebufferHeight;
596 info->framebufferArea = create_area("virtio_gpu framebuffer", (void**)&info->framebuffer,
597 B_ANY_KERNEL_ADDRESS, info->framebufferSize,
599 if (info->framebufferArea < B_OK) {
600 status = info->framebufferArea;
604 info->displayResourceId = 1;
605 status = virtio_gpu_create_2d(info, info->displayResourceId, info->displayWidth,
606 info->displayHeight);
610 status = virtio_gpu_attach_backing(info, info->displayResourceId);
614 status = virtio_gpu_set_scanout(info, 0, info->displayResourceId, info->displayWidth,
615 info->displayHeight);
620 virtio_gpu_shared_info& sharedInfo = *info->sharedInfo;
621 sharedInfo.frame_buffer_area = info->framebufferArea;
622 sharedInfo.frame_buffer = (uint8*)info->framebuffer;
623 sharedInfo.bytes_per_row = info->displayWidth * 4;
624 sharedInfo.current_mode.virtual_width = info->displayWidth;
625 sharedInfo.current_mode.virtual_height = info->displayHeight;
628 info->updateThreadRunning = true;
629 info->updateThread = spawn_kernel_thread(virtio_update_thread, "virtio_gpu update",
630 B_DISPLAY_PRIORITY, info);
631 if (info->updateThread < B_OK)
633 resume_thread(info->updateThread);
635 handle->info = info;
641 delete_area(info->framebufferArea);
642 info->framebufferArea = -1;
643 delete_sem(info->commandDone);
644 info->commandDone = -1;
656 virtio_gpu_driver_info* info = handle->info;
657 info->updateThreadRunning = false;
658 delete_sem(info->commandDone);
659 info->commandDone = -1;
671 virtio_gpu_driver_info* info = handle->info;
673 wait_for_thread(info->updateThread, &result);
674 info->updateThread = -1;
675 virtio_gpu_drain_queues(info);
685 virtio_gpu_driver_info* info = (virtio_gpu_driver_info*)cookie;
687 release_sem_etc(info->commandDone, 1, B_DO_NOT_RESCHEDULE);
713 virtio_gpu_driver_info* info = handle->info;
728 return user_memcpy(buffer, &info->sharedArea, sizeof(area_id));
739 MutexLocker commandLocker(&info->commandLock);
741 return virtio_gpu_set_display_mode(info, &mode);
801 virtio_gpu_driver_info* info = (virtio_gpu_driver_info*)malloc(
803 if (info == NULL)
806 memset(info, 0, sizeof(*info));
808 info->node = node;
810 *cookie = info;
819 virtio_gpu_driver_info* info = (virtio_gpu_driver_info*)_cookie;
820 free(info);
828 virtio_gpu_driver_info* info = (virtio_gpu_driver_info*)_cookie;
839 status = sDeviceManager->publish_device(info->node, name,