Lines Matching refs:qdev

40 static void qxl_alloc_client_monitors_config(struct qxl_device *qdev, unsigned count)  in qxl_alloc_client_monitors_config()  argument
42 if (qdev->client_monitors_config && in qxl_alloc_client_monitors_config()
43 count > qdev->client_monitors_config->count) { in qxl_alloc_client_monitors_config()
44 kfree(qdev->client_monitors_config); in qxl_alloc_client_monitors_config()
45 qdev->client_monitors_config = NULL; in qxl_alloc_client_monitors_config()
47 if (!qdev->client_monitors_config) { in qxl_alloc_client_monitors_config()
48 qdev->client_monitors_config = kzalloc( in qxl_alloc_client_monitors_config()
51 if (!qdev->client_monitors_config) in qxl_alloc_client_monitors_config()
54 qdev->client_monitors_config->count = count; in qxl_alloc_client_monitors_config()
63 static int qxl_display_copy_rom_client_monitors_config(struct qxl_device *qdev) in qxl_display_copy_rom_client_monitors_config() argument
70 num_monitors = qdev->rom->client_monitors_config.count; in qxl_display_copy_rom_client_monitors_config()
71 crc = crc32(0, (const uint8_t *)&qdev->rom->client_monitors_config, in qxl_display_copy_rom_client_monitors_config()
72 sizeof(qdev->rom->client_monitors_config)); in qxl_display_copy_rom_client_monitors_config()
73 if (crc != qdev->rom->client_monitors_config_crc) in qxl_display_copy_rom_client_monitors_config()
79 if (num_monitors > qdev->monitors_config->max_allowed) { in qxl_display_copy_rom_client_monitors_config()
81 qdev->monitors_config->max_allowed, num_monitors); in qxl_display_copy_rom_client_monitors_config()
82 num_monitors = qdev->monitors_config->max_allowed; in qxl_display_copy_rom_client_monitors_config()
84 num_monitors = qdev->rom->client_monitors_config.count; in qxl_display_copy_rom_client_monitors_config()
86 if (qdev->client_monitors_config in qxl_display_copy_rom_client_monitors_config()
87 && (num_monitors != qdev->client_monitors_config->count)) { in qxl_display_copy_rom_client_monitors_config()
90 qxl_alloc_client_monitors_config(qdev, num_monitors); in qxl_display_copy_rom_client_monitors_config()
92 qdev->client_monitors_config->max_allowed = in qxl_display_copy_rom_client_monitors_config()
93 qdev->monitors_config->max_allowed; in qxl_display_copy_rom_client_monitors_config()
94 for (i = 0 ; i < qdev->client_monitors_config->count ; ++i) { in qxl_display_copy_rom_client_monitors_config()
96 &qdev->rom->client_monitors_config.heads[i]; in qxl_display_copy_rom_client_monitors_config()
98 &qdev->client_monitors_config->heads[i]; in qxl_display_copy_rom_client_monitors_config()
134 static void qxl_update_offset_props(struct qxl_device *qdev) in qxl_update_offset_props() argument
136 struct drm_device *dev = &qdev->ddev; in qxl_update_offset_props()
144 head = &qdev->client_monitors_config->heads[output->index]; in qxl_update_offset_props()
153 void qxl_display_read_client_monitors_config(struct qxl_device *qdev) in qxl_display_read_client_monitors_config() argument
155 struct drm_device *dev = &qdev->ddev; in qxl_display_read_client_monitors_config()
159 status = qxl_display_copy_rom_client_monitors_config(qdev); in qxl_display_read_client_monitors_config()
174 qxl_update_offset_props(qdev); in qxl_display_read_client_monitors_config()
188 struct qxl_device *qdev = dev->dev_private; in qxl_add_monitors_config_modes() local
194 if (!qdev->monitors_config) in qxl_add_monitors_config_modes()
196 if (h >= qdev->monitors_config->max_allowed) in qxl_add_monitors_config_modes()
198 if (!qdev->client_monitors_config) in qxl_add_monitors_config_modes()
200 if (h >= qdev->client_monitors_config->count) in qxl_add_monitors_config_modes()
203 head = &qdev->client_monitors_config->heads[h]; in qxl_add_monitors_config_modes()
216 qdev->monitors_config_width = mode->hdisplay; in qxl_add_monitors_config_modes()
217 qdev->monitors_config_height = mode->vdisplay; in qxl_add_monitors_config_modes()
261 static void qxl_send_monitors_config(struct qxl_device *qdev) in qxl_send_monitors_config() argument
265 BUG_ON(!qdev->ram_header->monitors_config); in qxl_send_monitors_config()
267 if (qdev->monitors_config->count == 0) in qxl_send_monitors_config()
270 for (i = 0 ; i < qdev->monitors_config->count ; ++i) { in qxl_send_monitors_config()
271 struct qxl_head *head = &qdev->monitors_config->heads[i]; in qxl_send_monitors_config()
281 qxl_io_monitors_config(qdev); in qxl_send_monitors_config()
288 struct qxl_device *qdev = dev->dev_private; in qxl_crtc_update_monitors_config() local
293 if (!qdev->primary_created) { in qxl_crtc_update_monitors_config()
298 if (!qdev->monitors_config || in qxl_crtc_update_monitors_config()
299 qdev->monitors_config->max_allowed <= i) in qxl_crtc_update_monitors_config()
304 oldcount = qdev->monitors_config->count; in qxl_crtc_update_monitors_config()
311 if (qdev->monitors_config->count < i + 1) in qxl_crtc_update_monitors_config()
312 qdev->monitors_config->count = i + 1; in qxl_crtc_update_monitors_config()
318 if (qdev->monitors_config->count == i + 1) in qxl_crtc_update_monitors_config()
319 qdev->monitors_config->count = i; in qxl_crtc_update_monitors_config()
325 if (head.width == qdev->monitors_config->heads[i].width && in qxl_crtc_update_monitors_config()
326 head.height == qdev->monitors_config->heads[i].height && in qxl_crtc_update_monitors_config()
327 head.x == qdev->monitors_config->heads[i].x && in qxl_crtc_update_monitors_config()
328 head.y == qdev->monitors_config->heads[i].y && in qxl_crtc_update_monitors_config()
329 oldcount == qdev->monitors_config->count) in qxl_crtc_update_monitors_config()
335 if (oldcount != qdev->monitors_config->count) in qxl_crtc_update_monitors_config()
337 oldcount, qdev->monitors_config->count, in qxl_crtc_update_monitors_config()
338 qdev->monitors_config->max_allowed); in qxl_crtc_update_monitors_config()
340 qdev->monitors_config->heads[i] = head; in qxl_crtc_update_monitors_config()
341 qxl_send_monitors_config(qdev); in qxl_crtc_update_monitors_config()
400 struct qxl_device *qdev = qxl_fb->base.dev->dev_private; in qxl_framebuffer_surface_dirty() local
425 qxl_draw_dirty_fb(qdev, qxl_fb, qobj, flags, color, in qxl_framebuffer_surface_dirty()
480 struct qxl_device *qdev = plane->dev->dev_private; in qxl_primary_atomic_check() local
490 if (bo->surf.stride * bo->surf.height > qdev->vram_size) { in qxl_primary_atomic_check()
501 struct qxl_device *qdev = dev->dev_private; in qxl_primary_apply_cursor() local
511 ret = qxl_alloc_release_reserved(qdev, sizeof(*cmd), in qxl_primary_apply_cursor()
525 cmd = (struct qxl_cursor_cmd *)qxl_release_map(qdev, release); in qxl_primary_apply_cursor()
530 cmd->u.set.shape = qxl_bo_physical_address(qdev, qcrtc->cursor_bo, 0); in qxl_primary_apply_cursor()
533 qxl_release_unmap(qdev, release, &cmd->release_info); in qxl_primary_apply_cursor()
535 qxl_push_cursor_ring_release(qdev, release, QXL_CMD_CURSOR, false); in qxl_primary_apply_cursor()
541 qxl_release_free(qdev, release); in qxl_primary_apply_cursor()
548 struct qxl_device *qdev = plane->dev->dev_private; in qxl_primary_atomic_update() local
580 qxl_io_destroy_primary(qdev); in qxl_primary_atomic_update()
591 qxl_io_create_primary(qdev, 0, bo); in qxl_primary_atomic_update()
595 qxl_draw_dirty_fb(qdev, qfb, bo, 0, 0, &norect, 1, 1); in qxl_primary_atomic_update()
601 struct qxl_device *qdev = plane->dev->dev_private; in qxl_primary_atomic_disable() local
609 qxl_io_destroy_primary(qdev); in qxl_primary_atomic_disable()
619 struct qxl_device *qdev = dev->dev_private; in qxl_cursor_atomic_update() local
631 ret = qxl_alloc_release_reserved(qdev, sizeof(*cmd), in qxl_cursor_atomic_update()
646 ret = qxl_alloc_bo_reserved(qdev, release, in qxl_cursor_atomic_update()
674 cmd = (struct qxl_cursor_cmd *) qxl_release_map(qdev, release); in qxl_cursor_atomic_update()
676 cmd->u.set.shape = qxl_bo_physical_address(qdev, in qxl_cursor_atomic_update()
689 cmd = (struct qxl_cursor_cmd *) qxl_release_map(qdev, release); in qxl_cursor_atomic_update()
696 qxl_release_unmap(qdev, release, &cmd->release_info); in qxl_cursor_atomic_update()
697 qxl_push_cursor_ring_release(qdev, release, QXL_CMD_CURSOR, false); in qxl_cursor_atomic_update()
714 qxl_release_free(qdev, release); in qxl_cursor_atomic_update()
722 struct qxl_device *qdev = plane->dev->dev_private; in qxl_cursor_atomic_disable() local
727 ret = qxl_alloc_release_reserved(qdev, sizeof(*cmd), in qxl_cursor_atomic_disable()
735 qxl_release_free(qdev, release); in qxl_cursor_atomic_disable()
739 cmd = (struct qxl_cursor_cmd *)qxl_release_map(qdev, release); in qxl_cursor_atomic_disable()
741 qxl_release_unmap(qdev, release, &cmd->release_info); in qxl_cursor_atomic_disable()
743 qxl_push_cursor_ring_release(qdev, release, QXL_CMD_CURSOR, false); in qxl_cursor_atomic_disable()
750 struct qxl_device *qdev = plane->dev->dev_private; in qxl_plane_prepare_fb() local
781 qxl_bo_create(qdev, user_bo->gem_base.size, in qxl_plane_prepare_fb()
860 static struct drm_plane *qxl_create_plane(struct qxl_device *qdev, in qxl_create_plane() argument
889 err = drm_universal_plane_init(&qdev->ddev, plane, possible_crtcs, in qxl_create_plane()
908 struct qxl_device *qdev = dev->dev_private; in qdev_crtc_init() local
915 primary = qxl_create_plane(qdev, 1 << crtc_id, DRM_PLANE_TYPE_PRIMARY); in qdev_crtc_init()
921 cursor = qxl_create_plane(qdev, 1 << crtc_id, DRM_PLANE_TYPE_CURSOR); in qdev_crtc_init()
964 struct qxl_device *qdev = ddev->dev_private; in qxl_conn_mode_valid() local
970 if(qdev->monitors_config_width == mode->hdisplay && in qxl_conn_mode_valid()
971 qdev->monitors_config_height == mode->vdisplay) in qxl_conn_mode_valid()
1007 struct qxl_device *qdev = ddev->dev_private; in qxl_conn_detect() local
1011 if (!qdev->client_monitors_config) { in qxl_conn_detect()
1015 connected = qdev->client_monitors_config->count > output->index && in qxl_conn_detect()
1016 qxl_head_enabled(&qdev->client_monitors_config->heads[output->index]); in qxl_conn_detect()
1053 static int qxl_mode_create_hotplug_mode_update_property(struct qxl_device *qdev) in qxl_mode_create_hotplug_mode_update_property() argument
1055 if (qdev->hotplug_mode_update_property) in qxl_mode_create_hotplug_mode_update_property()
1058 qdev->hotplug_mode_update_property = in qxl_mode_create_hotplug_mode_update_property()
1059 drm_property_create_range(&qdev->ddev, DRM_MODE_PROP_IMMUTABLE, in qxl_mode_create_hotplug_mode_update_property()
1067 struct qxl_device *qdev = dev->dev_private; in qdev_output_init() local
1095 qdev->hotplug_mode_update_property, 0); in qdev_output_init()
1136 int qxl_create_monitors_object(struct qxl_device *qdev) in qxl_create_monitors_object() argument
1144 ret = qxl_gem_object_create(qdev, monitors_config_size, 0, in qxl_create_monitors_object()
1151 qdev->monitors_config_bo = gem_to_qxl_bo(gobj); in qxl_create_monitors_object()
1153 ret = qxl_bo_pin(qdev->monitors_config_bo, QXL_GEM_DOMAIN_VRAM, NULL); in qxl_create_monitors_object()
1157 qxl_bo_kmap(qdev->monitors_config_bo, NULL); in qxl_create_monitors_object()
1159 qdev->monitors_config = qdev->monitors_config_bo->kptr; in qxl_create_monitors_object()
1160 qdev->ram_header->monitors_config = in qxl_create_monitors_object()
1161 qxl_bo_physical_address(qdev, qdev->monitors_config_bo, 0); in qxl_create_monitors_object()
1163 memset(qdev->monitors_config, 0, monitors_config_size); in qxl_create_monitors_object()
1164 qdev->monitors_config->max_allowed = max_allowed; in qxl_create_monitors_object()
1168 int qxl_destroy_monitors_object(struct qxl_device *qdev) in qxl_destroy_monitors_object() argument
1172 qdev->monitors_config = NULL; in qxl_destroy_monitors_object()
1173 qdev->ram_header->monitors_config = 0; in qxl_destroy_monitors_object()
1175 qxl_bo_kunmap(qdev->monitors_config_bo); in qxl_destroy_monitors_object()
1176 ret = qxl_bo_unpin(qdev->monitors_config_bo); in qxl_destroy_monitors_object()
1180 qxl_bo_unref(&qdev->monitors_config_bo); in qxl_destroy_monitors_object()
1184 int qxl_modeset_init(struct qxl_device *qdev) in qxl_modeset_init() argument
1189 drm_mode_config_init(&qdev->ddev); in qxl_modeset_init()
1191 ret = qxl_create_monitors_object(qdev); in qxl_modeset_init()
1195 qdev->ddev.mode_config.funcs = (void *)&qxl_mode_funcs; in qxl_modeset_init()
1198 qdev->ddev.mode_config.min_width = 0; in qxl_modeset_init()
1199 qdev->ddev.mode_config.min_height = 0; in qxl_modeset_init()
1200 qdev->ddev.mode_config.max_width = 8192; in qxl_modeset_init()
1201 qdev->ddev.mode_config.max_height = 8192; in qxl_modeset_init()
1203 qdev->ddev.mode_config.fb_base = qdev->vram_base; in qxl_modeset_init()
1205 drm_mode_create_suggested_offset_properties(&qdev->ddev); in qxl_modeset_init()
1206 qxl_mode_create_hotplug_mode_update_property(qdev); in qxl_modeset_init()
1209 qdev_crtc_init(&qdev->ddev, i); in qxl_modeset_init()
1210 qdev_output_init(&qdev->ddev, i); in qxl_modeset_init()
1213 qxl_display_read_client_monitors_config(qdev); in qxl_modeset_init()
1214 qdev->mode_info.mode_config_initialized = true; in qxl_modeset_init()
1216 drm_mode_config_reset(&qdev->ddev); in qxl_modeset_init()
1221 qxl_fbdev_init(qdev); in qxl_modeset_init()
1225 void qxl_modeset_fini(struct qxl_device *qdev) in qxl_modeset_fini() argument
1227 qxl_fbdev_fini(qdev); in qxl_modeset_fini()
1229 qxl_destroy_monitors_object(qdev); in qxl_modeset_fini()
1230 if (qdev->mode_info.mode_config_initialized) { in qxl_modeset_fini()
1231 drm_mode_config_cleanup(&qdev->ddev); in qxl_modeset_fini()
1232 qdev->mode_info.mode_config_initialized = false; in qxl_modeset_fini()