Lines Matching +full:count +full:- +full:width
28 #include <linux/iosys-map.h>
46 return head->width && head->height; in qxl_head_enabled()
50 unsigned int count) in qxl_alloc_client_monitors_config() argument
52 if (qdev->client_monitors_config && in qxl_alloc_client_monitors_config()
53 count > qdev->client_monitors_config->count) { in qxl_alloc_client_monitors_config()
54 kfree(qdev->client_monitors_config); in qxl_alloc_client_monitors_config()
55 qdev->client_monitors_config = NULL; in qxl_alloc_client_monitors_config()
57 if (!qdev->client_monitors_config) { in qxl_alloc_client_monitors_config()
58 qdev->client_monitors_config = kzalloc( in qxl_alloc_client_monitors_config()
59 struct_size(qdev->client_monitors_config, in qxl_alloc_client_monitors_config()
60 heads, count), GFP_KERNEL); in qxl_alloc_client_monitors_config()
61 if (!qdev->client_monitors_config) in qxl_alloc_client_monitors_config()
62 return -ENOMEM; in qxl_alloc_client_monitors_config()
64 qdev->client_monitors_config->count = count; in qxl_alloc_client_monitors_config()
82 num_monitors = qdev->rom->client_monitors_config.count; in qxl_display_copy_rom_client_monitors_config()
83 crc = crc32(0, (const uint8_t *)&qdev->rom->client_monitors_config, in qxl_display_copy_rom_client_monitors_config()
84 sizeof(qdev->rom->client_monitors_config)); in qxl_display_copy_rom_client_monitors_config()
85 if (crc != qdev->rom->client_monitors_config_crc) in qxl_display_copy_rom_client_monitors_config()
96 num_monitors = qdev->rom->client_monitors_config.count; in qxl_display_copy_rom_client_monitors_config()
98 if (qdev->client_monitors_config in qxl_display_copy_rom_client_monitors_config()
99 && (num_monitors != qdev->client_monitors_config->count)) { in qxl_display_copy_rom_client_monitors_config()
107 qdev->client_monitors_config->max_allowed = qxl_num_crtc; in qxl_display_copy_rom_client_monitors_config()
108 for (i = 0 ; i < qdev->client_monitors_config->count ; ++i) { in qxl_display_copy_rom_client_monitors_config()
110 &qdev->rom->client_monitors_config.heads[i]; in qxl_display_copy_rom_client_monitors_config()
112 &qdev->client_monitors_config->heads[i]; in qxl_display_copy_rom_client_monitors_config()
113 if (client_head->x != c_rect->left) { in qxl_display_copy_rom_client_monitors_config()
114 client_head->x = c_rect->left; in qxl_display_copy_rom_client_monitors_config()
117 if (client_head->y != c_rect->top) { in qxl_display_copy_rom_client_monitors_config()
118 client_head->y = c_rect->top; in qxl_display_copy_rom_client_monitors_config()
121 if (client_head->width != c_rect->right - c_rect->left) { in qxl_display_copy_rom_client_monitors_config()
122 client_head->width = c_rect->right - c_rect->left; in qxl_display_copy_rom_client_monitors_config()
125 if (client_head->height != c_rect->bottom - c_rect->top) { in qxl_display_copy_rom_client_monitors_config()
126 client_head->height = c_rect->bottom - c_rect->top; in qxl_display_copy_rom_client_monitors_config()
129 if (client_head->surface_id != 0) { in qxl_display_copy_rom_client_monitors_config()
130 client_head->surface_id = 0; in qxl_display_copy_rom_client_monitors_config()
133 if (client_head->id != i) { in qxl_display_copy_rom_client_monitors_config()
134 client_head->id = i; in qxl_display_copy_rom_client_monitors_config()
137 if (client_head->flags != 0) { in qxl_display_copy_rom_client_monitors_config()
138 client_head->flags = 0; in qxl_display_copy_rom_client_monitors_config()
141 DRM_DEBUG_KMS("read %dx%d+%d+%d\n", client_head->width, client_head->height, in qxl_display_copy_rom_client_monitors_config()
142 client_head->x, client_head->y); in qxl_display_copy_rom_client_monitors_config()
150 struct drm_device *dev = &qdev->ddev; in qxl_update_offset_props()
155 list_for_each_entry(connector, &dev->mode_config.connector_list, head) { in qxl_update_offset_props()
158 head = &qdev->client_monitors_config->heads[output->index]; in qxl_update_offset_props()
160 drm_object_property_set_value(&connector->base, in qxl_update_offset_props()
161 dev->mode_config.suggested_x_property, head->x); in qxl_update_offset_props()
162 drm_object_property_set_value(&connector->base, in qxl_update_offset_props()
163 dev->mode_config.suggested_y_property, head->y); in qxl_update_offset_props()
169 struct drm_device *dev = &qdev->ddev; in qxl_display_read_client_monitors_config()
203 unsigned int width, in qxl_check_mode() argument
209 if (check_mul_overflow(width, 4u, &stride)) in qxl_check_mode()
210 return -EINVAL; in qxl_check_mode()
212 return -EINVAL; in qxl_check_mode()
213 if (size > qdev->vram_size) in qxl_check_mode()
214 return -ENOMEM; in qxl_check_mode()
221 return qxl_check_mode(qdev, bo->surf.width, bo->surf.height); in qxl_check_framebuffer()
225 unsigned int width, in qxl_add_mode() argument
229 struct drm_device *dev = connector->dev; in qxl_add_mode()
234 rc = qxl_check_mode(qdev, width, height); in qxl_add_mode()
238 mode = drm_cvt_mode(dev, width, height, 60, false, false, false); in qxl_add_mode()
240 mode->type |= DRM_MODE_TYPE_PREFERRED; in qxl_add_mode()
241 mode->hdisplay = width; in qxl_add_mode()
242 mode->vdisplay = height; in qxl_add_mode()
250 struct drm_device *dev = connector->dev; in qxl_add_monitors_config_modes()
253 int h = output->index; in qxl_add_monitors_config_modes()
256 if (!qdev->monitors_config) in qxl_add_monitors_config_modes()
260 if (!qdev->client_monitors_config) in qxl_add_monitors_config_modes()
262 if (h >= qdev->client_monitors_config->count) in qxl_add_monitors_config_modes()
265 head = &qdev->client_monitors_config->heads[h]; in qxl_add_monitors_config_modes()
266 DRM_DEBUG_KMS("head %d is %dx%d\n", h, head->width, head->height); in qxl_add_monitors_config_modes()
268 return qxl_add_mode(connector, head->width, head->height, true); in qxl_add_monitors_config_modes()
296 BUG_ON(!qdev->ram_header->monitors_config); in qxl_send_monitors_config()
298 if (qdev->monitors_config->count == 0) in qxl_send_monitors_config()
301 for (i = 0 ; i < qdev->monitors_config->count ; ++i) { in qxl_send_monitors_config()
302 struct qxl_head *head = &qdev->monitors_config->heads[i]; in qxl_send_monitors_config()
304 if (head->y > 8192 || head->x > 8192 || in qxl_send_monitors_config()
305 head->width > 8192 || head->height > 8192) { in qxl_send_monitors_config()
307 i, head->width, head->height, in qxl_send_monitors_config()
308 head->x, head->y); in qxl_send_monitors_config()
318 struct drm_device *dev = crtc->dev; in qxl_crtc_update_monitors_config()
322 int oldcount, i = qcrtc->index; in qxl_crtc_update_monitors_config()
324 if (!qdev->primary_bo) { in qxl_crtc_update_monitors_config()
329 if (!qdev->monitors_config || qxl_num_crtc <= i) in qxl_crtc_update_monitors_config()
335 oldcount = qdev->monitors_config->count; in qxl_crtc_update_monitors_config()
336 if (crtc->state->active) { in qxl_crtc_update_monitors_config()
337 struct drm_display_mode *mode = &crtc->mode; in qxl_crtc_update_monitors_config()
339 head.width = mode->hdisplay; in qxl_crtc_update_monitors_config()
340 head.height = mode->vdisplay; in qxl_crtc_update_monitors_config()
341 head.x = crtc->x; in qxl_crtc_update_monitors_config()
342 head.y = crtc->y; in qxl_crtc_update_monitors_config()
343 if (qdev->monitors_config->count < i + 1) in qxl_crtc_update_monitors_config()
344 qdev->monitors_config->count = i + 1; in qxl_crtc_update_monitors_config()
345 if (qdev->primary_bo == qdev->dumb_shadow_bo) in qxl_crtc_update_monitors_config()
346 head.x += qdev->dumb_heads[i].x; in qxl_crtc_update_monitors_config()
348 head.width = 0; in qxl_crtc_update_monitors_config()
352 if (qdev->monitors_config->count == i + 1) in qxl_crtc_update_monitors_config()
353 qdev->monitors_config->count = i; in qxl_crtc_update_monitors_config()
359 if (head.width == qdev->monitors_config->heads[i].width && in qxl_crtc_update_monitors_config()
360 head.height == qdev->monitors_config->heads[i].height && in qxl_crtc_update_monitors_config()
361 head.x == qdev->monitors_config->heads[i].x && in qxl_crtc_update_monitors_config()
362 head.y == qdev->monitors_config->heads[i].y && in qxl_crtc_update_monitors_config()
363 oldcount == qdev->monitors_config->count) in qxl_crtc_update_monitors_config()
367 i, head.width, head.height, head.x, head.y, in qxl_crtc_update_monitors_config()
368 crtc->state->active ? "on" : "off", reason); in qxl_crtc_update_monitors_config()
369 if (oldcount != qdev->monitors_config->count) in qxl_crtc_update_monitors_config()
370 DRM_DEBUG_KMS("active heads %d -> %d (%d total)\n", in qxl_crtc_update_monitors_config()
371 oldcount, qdev->monitors_config->count, in qxl_crtc_update_monitors_config()
374 qdev->monitors_config->heads[i] = head; in qxl_crtc_update_monitors_config()
375 qdev->monitors_config->max_allowed = qxl_num_crtc; in qxl_crtc_update_monitors_config()
389 qxl_bo_unref(&qxl_crtc->cursor_bo); in qxl_crtc_destroy()
410 struct qxl_device *qdev = to_qxl(fb->dev); in qxl_framebuffer_surface_dirty()
417 DRM_MODESET_LOCK_ALL_BEGIN(fb->dev, ctx, DRM_MODESET_ACQUIRE_INTERRUPTIBLE, ret); in qxl_framebuffer_surface_dirty()
419 qobj = gem_to_qxl_bo(fb->obj[0]); in qxl_framebuffer_surface_dirty()
421 is_primary = qobj->shadow ? qobj->shadow->is_primary : qobj->is_primary; in qxl_framebuffer_surface_dirty()
429 norect.x2 = fb->width; in qxl_framebuffer_surface_dirty()
430 norect.y2 = fb->height; in qxl_framebuffer_surface_dirty()
440 DRM_MODESET_LOCK_ALL_END(fb->dev, ctx, ret); in qxl_framebuffer_surface_dirty()
474 struct qxl_device *qdev = to_qxl(plane->dev); in qxl_primary_atomic_check()
477 if (!new_plane_state->crtc || !new_plane_state->fb) in qxl_primary_atomic_check()
480 bo = gem_to_qxl_bo(new_plane_state->fb->obj[0]); in qxl_primary_atomic_check()
488 struct drm_framebuffer *fb = plane_state->fb; in qxl_primary_apply_cursor()
489 struct qxl_crtc *qcrtc = to_qxl_crtc(plane_state->crtc); in qxl_primary_apply_cursor()
494 if (!qcrtc->cursor_bo) in qxl_primary_apply_cursor()
503 ret = qxl_release_list_add(release, qcrtc->cursor_bo); in qxl_primary_apply_cursor()
512 cmd->type = QXL_CURSOR_SET; in qxl_primary_apply_cursor()
513 cmd->u.set.position.x = plane_state->crtc_x + fb->hot_x; in qxl_primary_apply_cursor()
514 cmd->u.set.position.y = plane_state->crtc_y + fb->hot_y; in qxl_primary_apply_cursor()
516 cmd->u.set.shape = qxl_bo_physical_address(qdev, qcrtc->cursor_bo, 0); in qxl_primary_apply_cursor()
518 cmd->u.set.visible = 1; in qxl_primary_apply_cursor()
519 qxl_release_unmap(qdev, release, &cmd->release_info); in qxl_primary_apply_cursor()
534 struct drm_framebuffer *fb = plane_state->fb; in qxl_primary_move_cursor()
535 struct qxl_crtc *qcrtc = to_qxl_crtc(plane_state->crtc); in qxl_primary_move_cursor()
540 if (!qcrtc->cursor_bo) in qxl_primary_move_cursor()
556 cmd->type = QXL_CURSOR_MOVE; in qxl_primary_move_cursor()
557 cmd->u.position.x = plane_state->crtc_x + fb->hot_x; in qxl_primary_move_cursor()
558 cmd->u.position.y = plane_state->crtc_y + fb->hot_y; in qxl_primary_move_cursor()
559 qxl_release_unmap(qdev, release, &cmd->release_info); in qxl_primary_move_cursor()
596 cursor.header.width = 64; in qxl_create_cursor()
643 struct qxl_device *qdev = to_qxl(plane->dev); in qxl_primary_atomic_update()
644 struct qxl_bo *bo = gem_to_qxl_bo(new_state->fb->obj[0]); in qxl_primary_atomic_update()
649 .x2 = new_state->fb->width, in qxl_primary_atomic_update()
650 .y2 = new_state->fb->height in qxl_primary_atomic_update()
654 primary = bo->shadow ? bo->shadow : bo; in qxl_primary_atomic_update()
656 if (!primary->is_primary) { in qxl_primary_atomic_update()
657 if (qdev->primary_bo) in qxl_primary_atomic_update()
660 qxl_primary_apply_cursor(qdev, plane->state); in qxl_primary_atomic_update()
663 if (bo->is_dumb) in qxl_primary_atomic_update()
665 qdev->dumb_heads[new_state->crtc->index].x; in qxl_primary_atomic_update()
667 qxl_draw_dirty_fb(qdev, new_state->fb, bo, 0, 0, &norect, 1, 1, in qxl_primary_atomic_update()
676 struct qxl_device *qdev = to_qxl(plane->dev); in qxl_primary_atomic_disable()
678 if (old_state->fb) { in qxl_primary_atomic_disable()
679 struct qxl_bo *bo = gem_to_qxl_bo(old_state->fb->obj[0]); in qxl_primary_atomic_disable()
681 if (bo->shadow) in qxl_primary_atomic_disable()
682 bo = bo->shadow; in qxl_primary_atomic_disable()
683 if (bo->is_primary) in qxl_primary_atomic_disable()
695 struct qxl_device *qdev = to_qxl(plane->dev); in qxl_cursor_atomic_update()
696 struct drm_framebuffer *fb = new_state->fb; in qxl_cursor_atomic_update()
698 if (fb != old_state->fb) { in qxl_cursor_atomic_update()
710 struct qxl_device *qdev = to_qxl(plane->dev); in qxl_cursor_atomic_disable()
729 cmd->type = QXL_CURSOR_HIDE; in qxl_cursor_atomic_disable()
730 qxl_release_unmap(qdev, release, &cmd->release_info); in qxl_cursor_atomic_disable()
735 qcrtc = to_qxl_crtc(old_state->crtc); in qxl_cursor_atomic_disable()
736 qxl_free_cursor(qcrtc->cursor_bo); in qxl_cursor_atomic_disable()
737 qcrtc->cursor_bo = NULL; in qxl_cursor_atomic_disable()
743 uint32_t width, height; in qxl_update_dumb_head() local
745 if (index >= qdev->monitors_config->max_allowed) in qxl_update_dumb_head()
748 if (bo && bo->is_dumb) { in qxl_update_dumb_head()
749 width = bo->surf.width; in qxl_update_dumb_head()
750 height = bo->surf.height; in qxl_update_dumb_head()
752 width = 0; in qxl_update_dumb_head()
756 if (qdev->dumb_heads[index].width == width && in qxl_update_dumb_head()
757 qdev->dumb_heads[index].height == height) in qxl_update_dumb_head()
760 DRM_DEBUG("#%d: %dx%d -> %dx%d\n", index, in qxl_update_dumb_head()
761 qdev->dumb_heads[index].width, in qxl_update_dumb_head()
762 qdev->dumb_heads[index].height, in qxl_update_dumb_head()
763 width, height); in qxl_update_dumb_head()
764 qdev->dumb_heads[index].width = width; in qxl_update_dumb_head()
765 qdev->dumb_heads[index].height = height; in qxl_update_dumb_head()
775 for (i = 0; i < qdev->monitors_config->max_allowed; i++) { in qxl_calc_dumb_shadow()
776 head = qdev->dumb_heads + i; in qxl_calc_dumb_shadow()
777 head->x = surf->width; in qxl_calc_dumb_shadow()
778 surf->width += head->width; in qxl_calc_dumb_shadow()
779 if (surf->height < head->height) in qxl_calc_dumb_shadow()
780 surf->height = head->height; in qxl_calc_dumb_shadow()
782 if (surf->width < 64) in qxl_calc_dumb_shadow()
783 surf->width = 64; in qxl_calc_dumb_shadow()
784 if (surf->height < 64) in qxl_calc_dumb_shadow()
785 surf->height = 64; in qxl_calc_dumb_shadow()
786 surf->format = SPICE_SURFACE_FMT_32_xRGB; in qxl_calc_dumb_shadow()
787 surf->stride = surf->width * 4; in qxl_calc_dumb_shadow()
789 if (!qdev->dumb_shadow_bo || in qxl_calc_dumb_shadow()
790 qdev->dumb_shadow_bo->surf.width != surf->width || in qxl_calc_dumb_shadow()
791 qdev->dumb_shadow_bo->surf.height != surf->height) in qxl_calc_dumb_shadow()
792 DRM_DEBUG("%dx%d\n", surf->width, surf->height); in qxl_calc_dumb_shadow()
803 if (!qdev->dumb_shadow_bo || in qxl_prepare_shadow()
804 qdev->dumb_shadow_bo->surf.width != surf.width || in qxl_prepare_shadow()
805 qdev->dumb_shadow_bo->surf.height != surf.height) { in qxl_prepare_shadow()
806 if (qdev->dumb_shadow_bo) { in qxl_prepare_shadow()
807 qxl_bo_unpin(qdev->dumb_shadow_bo); in qxl_prepare_shadow()
809 (&qdev->dumb_shadow_bo->tbo.base); in qxl_prepare_shadow()
810 qdev->dumb_shadow_bo = NULL; in qxl_prepare_shadow()
814 &surf, &qdev->dumb_shadow_bo); in qxl_prepare_shadow()
816 if (user_bo->shadow != qdev->dumb_shadow_bo) { in qxl_prepare_shadow()
817 if (user_bo->shadow) { in qxl_prepare_shadow()
818 qxl_bo_unpin(user_bo->shadow); in qxl_prepare_shadow()
820 (&user_bo->shadow->tbo.base); in qxl_prepare_shadow()
821 user_bo->shadow = NULL; in qxl_prepare_shadow()
823 drm_gem_object_get(&qdev->dumb_shadow_bo->tbo.base); in qxl_prepare_shadow()
824 user_bo->shadow = qdev->dumb_shadow_bo; in qxl_prepare_shadow()
825 qxl_bo_pin(user_bo->shadow); in qxl_prepare_shadow()
832 struct qxl_device *qdev = to_qxl(plane->dev); in qxl_plane_prepare_fb()
837 if (!new_state->fb) in qxl_plane_prepare_fb()
840 obj = new_state->fb->obj[0]; in qxl_plane_prepare_fb()
843 if (plane->type == DRM_PLANE_TYPE_PRIMARY && in qxl_plane_prepare_fb()
844 user_bo->is_dumb) { in qxl_plane_prepare_fb()
845 qxl_prepare_shadow(qdev, user_bo, new_state->crtc->index); in qxl_plane_prepare_fb()
848 if (plane->type == DRM_PLANE_TYPE_CURSOR && in qxl_plane_prepare_fb()
849 plane->state->fb != new_state->fb) { in qxl_plane_prepare_fb()
850 struct qxl_crtc *qcrtc = to_qxl_crtc(new_state->crtc); in qxl_plane_prepare_fb()
851 struct qxl_bo *old_cursor_bo = qcrtc->cursor_bo; in qxl_plane_prepare_fb()
853 qcrtc->cursor_bo = qxl_create_cursor(qdev, user_bo, in qxl_plane_prepare_fb()
854 new_state->fb->hot_x, in qxl_plane_prepare_fb()
855 new_state->fb->hot_y); in qxl_plane_prepare_fb()
872 if (!old_state->fb) { in qxl_plane_cleanup_fb()
880 obj = old_state->fb->obj[0]; in qxl_plane_cleanup_fb()
884 if (old_state->fb != plane->state->fb && user_bo->shadow) { in qxl_plane_cleanup_fb()
885 qxl_bo_unpin(user_bo->shadow); in qxl_plane_cleanup_fb()
886 drm_gem_object_put(&user_bo->shadow->tbo.base); in qxl_plane_cleanup_fb()
887 user_bo->shadow = NULL; in qxl_plane_cleanup_fb()
955 return ERR_PTR(-EINVAL); in qxl_create_plane()
960 return ERR_PTR(-ENOMEM); in qxl_create_plane()
962 err = drm_universal_plane_init(&qdev->ddev, plane, possible_crtcs, in qxl_create_plane()
974 return ERR_PTR(-EINVAL); in qxl_create_plane()
986 return -ENOMEM; in qdev_crtc_init()
990 r = -ENOMEM; in qdev_crtc_init()
996 r = -ENOMEM; in qdev_crtc_init()
1000 r = drm_crtc_init_with_planes(dev, &qxl_crtc->base, primary, cursor, in qdev_crtc_init()
1005 qxl_crtc->index = crtc_id; in qdev_crtc_init()
1006 drm_crtc_helper_add(&qxl_crtc->base, &qxl_crtc_helper_funcs); in qdev_crtc_init()
1022 struct drm_device *dev = connector->dev; in qxl_conn_get_modes()
1029 if (qdev->client_monitors_config) { in qxl_conn_get_modes()
1031 head = &qdev->client_monitors_config->heads[output->index]; in qxl_conn_get_modes()
1032 if (head->width) in qxl_conn_get_modes()
1033 pwidth = head->width; in qxl_conn_get_modes()
1034 if (head->height) in qxl_conn_get_modes()
1035 pheight = head->height; in qxl_conn_get_modes()
1048 struct drm_device *ddev = connector->dev; in qxl_conn_mode_valid()
1051 if (qxl_check_mode(qdev, mode->hdisplay, mode->vdisplay) != 0) in qxl_conn_mode_valid()
1063 return &qxl_output->enc; in qxl_best_encoder()
1078 struct drm_device *ddev = connector->dev; in qxl_conn_detect()
1083 if (!qdev->client_monitors_config) { in qxl_conn_detect()
1084 if (output->index == 0) in qxl_conn_detect()
1087 connected = qdev->client_monitors_config->count > output->index && in qxl_conn_detect()
1088 qxl_head_enabled(&qdev->client_monitors_config->heads[output->index]); in qxl_conn_detect()
1090 DRM_DEBUG("#%d connected: %d\n", output->index, connected); in qxl_conn_detect()
1117 if (qdev->hotplug_mode_update_property) in qxl_mode_create_hotplug_mode_update_property()
1120 qdev->hotplug_mode_update_property = in qxl_mode_create_hotplug_mode_update_property()
1121 drm_property_create_range(&qdev->ddev, DRM_MODE_PROP_IMMUTABLE, in qxl_mode_create_hotplug_mode_update_property()
1137 return -ENOMEM; in qdev_output_init()
1139 qxl_output->index = num_output; in qdev_output_init()
1141 connector = &qxl_output->base; in qdev_output_init()
1142 encoder = &qxl_output->enc; in qdev_output_init()
1143 drm_connector_init(dev, &qxl_output->base, in qdev_output_init()
1146 ret = drm_simple_encoder_init(dev, &qxl_output->enc, in qdev_output_init()
1155 connector->polled = DRM_CONNECTOR_POLL_HPD; in qdev_output_init()
1156 encoder->possible_crtcs = 1 << num_output; in qdev_output_init()
1157 drm_connector_attach_encoder(&qxl_output->base, in qdev_output_init()
1158 &qxl_output->enc); in qdev_output_init()
1161 drm_object_attach_property(&connector->base, in qdev_output_init()
1162 qdev->hotplug_mode_update_property, 0); in qdev_output_init()
1163 drm_object_attach_property(&connector->base, in qdev_output_init()
1164 dev->mode_config.suggested_x_property, 0); in qdev_output_init()
1165 drm_object_attach_property(&connector->base, in qdev_output_init()
1166 dev->mode_config.suggested_y_property, 0); in qdev_output_init()
1170 drm_connector_cleanup(&qxl_output->base); in qdev_output_init()
1203 return -ENOMEM; in qxl_create_monitors_object()
1205 qdev->monitors_config_bo = gem_to_qxl_bo(gobj); in qxl_create_monitors_object()
1207 ret = qxl_bo_vmap(qdev->monitors_config_bo, &map); in qxl_create_monitors_object()
1211 qdev->monitors_config = qdev->monitors_config_bo->kptr; in qxl_create_monitors_object()
1212 qdev->ram_header->monitors_config = in qxl_create_monitors_object()
1213 qxl_bo_physical_address(qdev, qdev->monitors_config_bo, 0); in qxl_create_monitors_object()
1215 memset(qdev->monitors_config, 0, monitors_config_size); in qxl_create_monitors_object()
1216 qdev->dumb_heads = kcalloc(qxl_num_crtc, sizeof(qdev->dumb_heads[0]), in qxl_create_monitors_object()
1218 if (!qdev->dumb_heads) { in qxl_create_monitors_object()
1220 return -ENOMEM; in qxl_create_monitors_object()
1229 if (!qdev->monitors_config_bo) in qxl_destroy_monitors_object()
1232 qdev->monitors_config = NULL; in qxl_destroy_monitors_object()
1233 qdev->ram_header->monitors_config = 0; in qxl_destroy_monitors_object()
1235 ret = qxl_bo_vunmap(qdev->monitors_config_bo); in qxl_destroy_monitors_object()
1239 qxl_bo_unref(&qdev->monitors_config_bo); in qxl_destroy_monitors_object()
1248 ret = drmm_mode_config_init(&qdev->ddev); in qxl_modeset_init()
1256 qdev->ddev.mode_config.funcs = (void *)&qxl_mode_funcs; in qxl_modeset_init()
1259 qdev->ddev.mode_config.min_width = 0; in qxl_modeset_init()
1260 qdev->ddev.mode_config.min_height = 0; in qxl_modeset_init()
1261 qdev->ddev.mode_config.max_width = 8192; in qxl_modeset_init()
1262 qdev->ddev.mode_config.max_height = 8192; in qxl_modeset_init()
1264 drm_mode_create_suggested_offset_properties(&qdev->ddev); in qxl_modeset_init()
1268 qdev_crtc_init(&qdev->ddev, i); in qxl_modeset_init()
1269 qdev_output_init(&qdev->ddev, i); in qxl_modeset_init()
1274 drm_mode_config_reset(&qdev->ddev); in qxl_modeset_init()
1280 if (qdev->dumb_shadow_bo) { in qxl_modeset_fini()
1281 qxl_bo_unpin(qdev->dumb_shadow_bo); in qxl_modeset_fini()
1282 drm_gem_object_put(&qdev->dumb_shadow_bo->tbo.base); in qxl_modeset_fini()
1283 qdev->dumb_shadow_bo = NULL; in qxl_modeset_fini()