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()
243 mode->type |= DRM_MODE_TYPE_PREFERRED; in qxl_add_mode()
244 mode->hdisplay = width; in qxl_add_mode()
245 mode->vdisplay = height; in qxl_add_mode()
253 struct drm_device *dev = connector->dev; in qxl_add_monitors_config_modes()
256 int h = output->index; in qxl_add_monitors_config_modes()
259 if (!qdev->monitors_config) in qxl_add_monitors_config_modes()
263 if (!qdev->client_monitors_config) in qxl_add_monitors_config_modes()
265 if (h >= qdev->client_monitors_config->count) in qxl_add_monitors_config_modes()
268 head = &qdev->client_monitors_config->heads[h]; in qxl_add_monitors_config_modes()
269 DRM_DEBUG_KMS("head %d is %dx%d\n", h, head->width, head->height); in qxl_add_monitors_config_modes()
271 return qxl_add_mode(connector, head->width, head->height, true); in qxl_add_monitors_config_modes()
299 BUG_ON(!qdev->ram_header->monitors_config); in qxl_send_monitors_config()
301 if (qdev->monitors_config->count == 0) in qxl_send_monitors_config()
304 for (i = 0 ; i < qdev->monitors_config->count ; ++i) { in qxl_send_monitors_config()
305 struct qxl_head *head = &qdev->monitors_config->heads[i]; in qxl_send_monitors_config()
307 if (head->y > 8192 || head->x > 8192 || in qxl_send_monitors_config()
308 head->width > 8192 || head->height > 8192) { in qxl_send_monitors_config()
310 i, head->width, head->height, in qxl_send_monitors_config()
311 head->x, head->y); in qxl_send_monitors_config()
321 struct drm_device *dev = crtc->dev; in qxl_crtc_update_monitors_config()
325 int oldcount, i = qcrtc->index; in qxl_crtc_update_monitors_config()
327 if (!qdev->primary_bo) { in qxl_crtc_update_monitors_config()
332 if (!qdev->monitors_config || qxl_num_crtc <= i) in qxl_crtc_update_monitors_config()
338 oldcount = qdev->monitors_config->count; in qxl_crtc_update_monitors_config()
339 if (crtc->state->active) { in qxl_crtc_update_monitors_config()
340 struct drm_display_mode *mode = &crtc->mode; in qxl_crtc_update_monitors_config()
342 head.width = mode->hdisplay; in qxl_crtc_update_monitors_config()
343 head.height = mode->vdisplay; in qxl_crtc_update_monitors_config()
344 head.x = crtc->x; in qxl_crtc_update_monitors_config()
345 head.y = crtc->y; in qxl_crtc_update_monitors_config()
346 if (qdev->monitors_config->count < i + 1) in qxl_crtc_update_monitors_config()
347 qdev->monitors_config->count = i + 1; in qxl_crtc_update_monitors_config()
348 if (qdev->primary_bo == qdev->dumb_shadow_bo) in qxl_crtc_update_monitors_config()
349 head.x += qdev->dumb_heads[i].x; in qxl_crtc_update_monitors_config()
351 head.width = 0; in qxl_crtc_update_monitors_config()
355 if (qdev->monitors_config->count == i + 1) in qxl_crtc_update_monitors_config()
356 qdev->monitors_config->count = i; in qxl_crtc_update_monitors_config()
362 if (head.width == qdev->monitors_config->heads[i].width && in qxl_crtc_update_monitors_config()
363 head.height == qdev->monitors_config->heads[i].height && in qxl_crtc_update_monitors_config()
364 head.x == qdev->monitors_config->heads[i].x && in qxl_crtc_update_monitors_config()
365 head.y == qdev->monitors_config->heads[i].y && in qxl_crtc_update_monitors_config()
366 oldcount == qdev->monitors_config->count) in qxl_crtc_update_monitors_config()
370 i, head.width, head.height, head.x, head.y, in qxl_crtc_update_monitors_config()
371 crtc->state->active ? "on" : "off", reason); in qxl_crtc_update_monitors_config()
372 if (oldcount != qdev->monitors_config->count) in qxl_crtc_update_monitors_config()
373 DRM_DEBUG_KMS("active heads %d -> %d (%d total)\n", in qxl_crtc_update_monitors_config()
374 oldcount, qdev->monitors_config->count, in qxl_crtc_update_monitors_config()
377 qdev->monitors_config->heads[i] = head; in qxl_crtc_update_monitors_config()
378 qdev->monitors_config->max_allowed = qxl_num_crtc; in qxl_crtc_update_monitors_config()
392 qxl_bo_unref(&qxl_crtc->cursor_bo); in qxl_crtc_destroy()
413 struct qxl_device *qdev = to_qxl(fb->dev); in qxl_framebuffer_surface_dirty()
420 DRM_MODESET_LOCK_ALL_BEGIN(fb->dev, ctx, DRM_MODESET_ACQUIRE_INTERRUPTIBLE, ret); in qxl_framebuffer_surface_dirty()
422 qobj = gem_to_qxl_bo(fb->obj[0]); in qxl_framebuffer_surface_dirty()
424 is_primary = qobj->shadow ? qobj->shadow->is_primary : qobj->is_primary; in qxl_framebuffer_surface_dirty()
432 norect.x2 = fb->width; in qxl_framebuffer_surface_dirty()
433 norect.y2 = fb->height; in qxl_framebuffer_surface_dirty()
443 DRM_MODESET_LOCK_ALL_END(fb->dev, ctx, ret); in qxl_framebuffer_surface_dirty()
477 struct qxl_device *qdev = to_qxl(plane->dev); in qxl_primary_atomic_check()
480 if (!new_plane_state->crtc || !new_plane_state->fb) in qxl_primary_atomic_check()
483 bo = gem_to_qxl_bo(new_plane_state->fb->obj[0]); in qxl_primary_atomic_check()
491 struct qxl_crtc *qcrtc = to_qxl_crtc(plane_state->crtc); in qxl_primary_apply_cursor()
496 if (!qcrtc->cursor_bo) in qxl_primary_apply_cursor()
505 ret = qxl_release_list_add(release, qcrtc->cursor_bo); in qxl_primary_apply_cursor()
514 cmd->type = QXL_CURSOR_SET; in qxl_primary_apply_cursor()
515 cmd->u.set.position.x = plane_state->crtc_x + plane_state->hotspot_x; in qxl_primary_apply_cursor()
516 cmd->u.set.position.y = plane_state->crtc_y + plane_state->hotspot_y; in qxl_primary_apply_cursor()
518 cmd->u.set.shape = qxl_bo_physical_address(qdev, qcrtc->cursor_bo, 0); in qxl_primary_apply_cursor()
520 cmd->u.set.visible = 1; in qxl_primary_apply_cursor()
521 qxl_release_unmap(qdev, release, &cmd->release_info); in qxl_primary_apply_cursor()
536 struct qxl_crtc *qcrtc = to_qxl_crtc(plane_state->crtc); in qxl_primary_move_cursor()
541 if (!qcrtc->cursor_bo) in qxl_primary_move_cursor()
557 cmd->type = QXL_CURSOR_MOVE; in qxl_primary_move_cursor()
558 cmd->u.position.x = plane_state->crtc_x + plane_state->hotspot_x; in qxl_primary_move_cursor()
559 cmd->u.position.y = plane_state->crtc_y + plane_state->hotspot_y; in qxl_primary_move_cursor()
560 qxl_release_unmap(qdev, release, &cmd->release_info); in qxl_primary_move_cursor()
597 cursor.header.width = 64; in qxl_create_cursor()
644 struct qxl_device *qdev = to_qxl(plane->dev); in qxl_primary_atomic_update()
645 struct qxl_bo *bo = gem_to_qxl_bo(new_state->fb->obj[0]); in qxl_primary_atomic_update()
650 .x2 = new_state->fb->width, in qxl_primary_atomic_update()
651 .y2 = new_state->fb->height in qxl_primary_atomic_update()
655 primary = bo->shadow ? bo->shadow : bo; in qxl_primary_atomic_update()
657 if (!primary->is_primary) { in qxl_primary_atomic_update()
658 if (qdev->primary_bo) in qxl_primary_atomic_update()
661 qxl_primary_apply_cursor(qdev, plane->state); in qxl_primary_atomic_update()
664 if (bo->is_dumb) in qxl_primary_atomic_update()
666 qdev->dumb_heads[new_state->crtc->index].x; in qxl_primary_atomic_update()
668 qxl_draw_dirty_fb(qdev, new_state->fb, bo, 0, 0, &norect, 1, 1, in qxl_primary_atomic_update()
677 struct qxl_device *qdev = to_qxl(plane->dev); in qxl_primary_atomic_disable()
679 if (old_state->fb) { in qxl_primary_atomic_disable()
680 struct qxl_bo *bo = gem_to_qxl_bo(old_state->fb->obj[0]); in qxl_primary_atomic_disable()
682 if (bo->shadow) in qxl_primary_atomic_disable()
683 bo = bo->shadow; in qxl_primary_atomic_disable()
684 if (bo->is_primary) in qxl_primary_atomic_disable()
696 struct qxl_device *qdev = to_qxl(plane->dev); in qxl_cursor_atomic_update()
697 struct drm_framebuffer *fb = new_state->fb; in qxl_cursor_atomic_update()
699 if (fb != old_state->fb) { in qxl_cursor_atomic_update()
711 struct qxl_device *qdev = to_qxl(plane->dev); in qxl_cursor_atomic_disable()
730 cmd->type = QXL_CURSOR_HIDE; in qxl_cursor_atomic_disable()
731 qxl_release_unmap(qdev, release, &cmd->release_info); in qxl_cursor_atomic_disable()
736 qcrtc = to_qxl_crtc(old_state->crtc); in qxl_cursor_atomic_disable()
737 qxl_free_cursor(qcrtc->cursor_bo); in qxl_cursor_atomic_disable()
738 qcrtc->cursor_bo = NULL; in qxl_cursor_atomic_disable()
744 uint32_t width, height; in qxl_update_dumb_head() local
746 if (index >= qdev->monitors_config->max_allowed) in qxl_update_dumb_head()
749 if (bo && bo->is_dumb) { in qxl_update_dumb_head()
750 width = bo->surf.width; in qxl_update_dumb_head()
751 height = bo->surf.height; in qxl_update_dumb_head()
753 width = 0; in qxl_update_dumb_head()
757 if (qdev->dumb_heads[index].width == width && in qxl_update_dumb_head()
758 qdev->dumb_heads[index].height == height) in qxl_update_dumb_head()
761 DRM_DEBUG("#%d: %dx%d -> %dx%d\n", index, in qxl_update_dumb_head()
762 qdev->dumb_heads[index].width, in qxl_update_dumb_head()
763 qdev->dumb_heads[index].height, in qxl_update_dumb_head()
764 width, height); in qxl_update_dumb_head()
765 qdev->dumb_heads[index].width = width; in qxl_update_dumb_head()
766 qdev->dumb_heads[index].height = height; in qxl_update_dumb_head()
776 for (i = 0; i < qdev->monitors_config->max_allowed; i++) { in qxl_calc_dumb_shadow()
777 head = qdev->dumb_heads + i; in qxl_calc_dumb_shadow()
778 head->x = surf->width; in qxl_calc_dumb_shadow()
779 surf->width += head->width; in qxl_calc_dumb_shadow()
780 if (surf->height < head->height) in qxl_calc_dumb_shadow()
781 surf->height = head->height; in qxl_calc_dumb_shadow()
783 if (surf->width < 64) in qxl_calc_dumb_shadow()
784 surf->width = 64; in qxl_calc_dumb_shadow()
785 if (surf->height < 64) in qxl_calc_dumb_shadow()
786 surf->height = 64; in qxl_calc_dumb_shadow()
787 surf->format = SPICE_SURFACE_FMT_32_xRGB; in qxl_calc_dumb_shadow()
788 surf->stride = surf->width * 4; in qxl_calc_dumb_shadow()
790 if (!qdev->dumb_shadow_bo || in qxl_calc_dumb_shadow()
791 qdev->dumb_shadow_bo->surf.width != surf->width || in qxl_calc_dumb_shadow()
792 qdev->dumb_shadow_bo->surf.height != surf->height) in qxl_calc_dumb_shadow()
793 DRM_DEBUG("%dx%d\n", surf->width, surf->height); in qxl_calc_dumb_shadow()
804 if (!qdev->dumb_shadow_bo || in qxl_prepare_shadow()
805 qdev->dumb_shadow_bo->surf.width != surf.width || in qxl_prepare_shadow()
806 qdev->dumb_shadow_bo->surf.height != surf.height) { in qxl_prepare_shadow()
807 if (qdev->dumb_shadow_bo) { in qxl_prepare_shadow()
808 qxl_bo_unpin(qdev->dumb_shadow_bo); in qxl_prepare_shadow()
810 (&qdev->dumb_shadow_bo->tbo.base); in qxl_prepare_shadow()
811 qdev->dumb_shadow_bo = NULL; in qxl_prepare_shadow()
815 &surf, &qdev->dumb_shadow_bo); in qxl_prepare_shadow()
817 if (user_bo->shadow != qdev->dumb_shadow_bo) { in qxl_prepare_shadow()
818 if (user_bo->shadow) { in qxl_prepare_shadow()
819 qxl_bo_unpin(user_bo->shadow); in qxl_prepare_shadow()
821 (&user_bo->shadow->tbo.base); in qxl_prepare_shadow()
822 user_bo->shadow = NULL; in qxl_prepare_shadow()
824 drm_gem_object_get(&qdev->dumb_shadow_bo->tbo.base); in qxl_prepare_shadow()
825 user_bo->shadow = qdev->dumb_shadow_bo; in qxl_prepare_shadow()
826 qxl_bo_pin(user_bo->shadow); in qxl_prepare_shadow()
833 struct qxl_device *qdev = to_qxl(plane->dev); in qxl_plane_prepare_fb()
838 if (!new_state->fb) in qxl_plane_prepare_fb()
841 obj = new_state->fb->obj[0]; in qxl_plane_prepare_fb()
844 if (plane->type == DRM_PLANE_TYPE_PRIMARY && in qxl_plane_prepare_fb()
845 user_bo->is_dumb) { in qxl_plane_prepare_fb()
846 qxl_prepare_shadow(qdev, user_bo, new_state->crtc->index); in qxl_plane_prepare_fb()
849 if (plane->type == DRM_PLANE_TYPE_CURSOR && in qxl_plane_prepare_fb()
850 plane->state->fb != new_state->fb) { in qxl_plane_prepare_fb()
851 struct qxl_crtc *qcrtc = to_qxl_crtc(new_state->crtc); in qxl_plane_prepare_fb()
852 struct qxl_bo *old_cursor_bo = qcrtc->cursor_bo; in qxl_plane_prepare_fb()
854 qcrtc->cursor_bo = qxl_create_cursor(qdev, user_bo, in qxl_plane_prepare_fb()
855 new_state->hotspot_x, in qxl_plane_prepare_fb()
856 new_state->hotspot_y); in qxl_plane_prepare_fb()
873 if (!old_state->fb) { in qxl_plane_cleanup_fb()
881 obj = old_state->fb->obj[0]; in qxl_plane_cleanup_fb()
885 if (old_state->fb != plane->state->fb && user_bo->shadow) { in qxl_plane_cleanup_fb()
886 qxl_bo_unpin(user_bo->shadow); in qxl_plane_cleanup_fb()
887 drm_gem_object_put(&user_bo->shadow->tbo.base); in qxl_plane_cleanup_fb()
888 user_bo->shadow = NULL; in qxl_plane_cleanup_fb()
956 return ERR_PTR(-EINVAL); in qxl_create_plane()
961 return ERR_PTR(-ENOMEM); in qxl_create_plane()
963 err = drm_universal_plane_init(&qdev->ddev, plane, possible_crtcs, in qxl_create_plane()
975 return ERR_PTR(-EINVAL); in qxl_create_plane()
987 return -ENOMEM; in qdev_crtc_init()
991 r = -ENOMEM; in qdev_crtc_init()
997 r = -ENOMEM; in qdev_crtc_init()
1001 r = drm_crtc_init_with_planes(dev, &qxl_crtc->base, primary, cursor, in qdev_crtc_init()
1006 qxl_crtc->index = crtc_id; in qdev_crtc_init()
1007 drm_crtc_helper_add(&qxl_crtc->base, &qxl_crtc_helper_funcs); in qdev_crtc_init()
1023 struct drm_device *dev = connector->dev; in qxl_conn_get_modes()
1030 if (qdev->client_monitors_config) { in qxl_conn_get_modes()
1032 head = &qdev->client_monitors_config->heads[output->index]; in qxl_conn_get_modes()
1033 if (head->width) in qxl_conn_get_modes()
1034 pwidth = head->width; in qxl_conn_get_modes()
1035 if (head->height) in qxl_conn_get_modes()
1036 pheight = head->height; in qxl_conn_get_modes()
1049 struct drm_device *ddev = connector->dev; in qxl_conn_mode_valid()
1052 if (qxl_check_mode(qdev, mode->hdisplay, mode->vdisplay) != 0) in qxl_conn_mode_valid()
1064 return &qxl_output->enc; in qxl_best_encoder()
1079 struct drm_device *ddev = connector->dev; in qxl_conn_detect()
1084 if (!qdev->client_monitors_config) { in qxl_conn_detect()
1085 if (output->index == 0) in qxl_conn_detect()
1088 connected = qdev->client_monitors_config->count > output->index && in qxl_conn_detect()
1089 qxl_head_enabled(&qdev->client_monitors_config->heads[output->index]); in qxl_conn_detect()
1091 DRM_DEBUG("#%d connected: %d\n", output->index, connected); in qxl_conn_detect()
1118 if (qdev->hotplug_mode_update_property) in qxl_mode_create_hotplug_mode_update_property()
1121 qdev->hotplug_mode_update_property = in qxl_mode_create_hotplug_mode_update_property()
1122 drm_property_create_range(&qdev->ddev, DRM_MODE_PROP_IMMUTABLE, in qxl_mode_create_hotplug_mode_update_property()
1138 return -ENOMEM; in qdev_output_init()
1140 qxl_output->index = num_output; in qdev_output_init()
1142 connector = &qxl_output->base; in qdev_output_init()
1143 encoder = &qxl_output->enc; in qdev_output_init()
1144 drm_connector_init(dev, &qxl_output->base, in qdev_output_init()
1147 ret = drm_simple_encoder_init(dev, &qxl_output->enc, in qdev_output_init()
1156 connector->polled = DRM_CONNECTOR_POLL_HPD; in qdev_output_init()
1157 encoder->possible_crtcs = 1 << num_output; in qdev_output_init()
1158 drm_connector_attach_encoder(&qxl_output->base, in qdev_output_init()
1159 &qxl_output->enc); in qdev_output_init()
1162 drm_object_attach_property(&connector->base, in qdev_output_init()
1163 qdev->hotplug_mode_update_property, 0); in qdev_output_init()
1164 drm_object_attach_property(&connector->base, in qdev_output_init()
1165 dev->mode_config.suggested_x_property, 0); in qdev_output_init()
1166 drm_object_attach_property(&connector->base, in qdev_output_init()
1167 dev->mode_config.suggested_y_property, 0); in qdev_output_init()
1171 drm_connector_cleanup(&qxl_output->base); in qdev_output_init()
1204 return -ENOMEM; in qxl_create_monitors_object()
1206 qdev->monitors_config_bo = gem_to_qxl_bo(gobj); in qxl_create_monitors_object()
1208 ret = qxl_bo_pin_and_vmap(qdev->monitors_config_bo, &map); in qxl_create_monitors_object()
1212 qdev->monitors_config = qdev->monitors_config_bo->kptr; in qxl_create_monitors_object()
1213 qdev->ram_header->monitors_config = in qxl_create_monitors_object()
1214 qxl_bo_physical_address(qdev, qdev->monitors_config_bo, 0); in qxl_create_monitors_object()
1216 memset(qdev->monitors_config, 0, monitors_config_size); in qxl_create_monitors_object()
1217 qdev->dumb_heads = kcalloc(qxl_num_crtc, sizeof(qdev->dumb_heads[0]), in qxl_create_monitors_object()
1219 if (!qdev->dumb_heads) { in qxl_create_monitors_object()
1221 return -ENOMEM; in qxl_create_monitors_object()
1230 if (!qdev->monitors_config_bo) in qxl_destroy_monitors_object()
1233 kfree(qdev->dumb_heads); in qxl_destroy_monitors_object()
1234 qdev->dumb_heads = NULL; in qxl_destroy_monitors_object()
1236 qdev->monitors_config = NULL; in qxl_destroy_monitors_object()
1237 qdev->ram_header->monitors_config = 0; in qxl_destroy_monitors_object()
1239 ret = qxl_bo_vunmap_and_unpin(qdev->monitors_config_bo); in qxl_destroy_monitors_object()
1243 qxl_bo_unref(&qdev->monitors_config_bo); in qxl_destroy_monitors_object()
1252 ret = drmm_mode_config_init(&qdev->ddev); in qxl_modeset_init()
1260 qdev->ddev.mode_config.funcs = (void *)&qxl_mode_funcs; in qxl_modeset_init()
1263 qdev->ddev.mode_config.min_width = 0; in qxl_modeset_init()
1264 qdev->ddev.mode_config.min_height = 0; in qxl_modeset_init()
1265 qdev->ddev.mode_config.max_width = 8192; in qxl_modeset_init()
1266 qdev->ddev.mode_config.max_height = 8192; in qxl_modeset_init()
1268 drm_mode_create_suggested_offset_properties(&qdev->ddev); in qxl_modeset_init()
1272 qdev_crtc_init(&qdev->ddev, i); in qxl_modeset_init()
1273 qdev_output_init(&qdev->ddev, i); in qxl_modeset_init()
1278 drm_mode_config_reset(&qdev->ddev); in qxl_modeset_init()
1284 if (qdev->dumb_shadow_bo) { in qxl_modeset_fini()
1285 qxl_bo_unpin(qdev->dumb_shadow_bo); in qxl_modeset_fini()
1286 drm_gem_object_put(&qdev->dumb_shadow_bo->tbo.base); in qxl_modeset_fini()
1287 qdev->dumb_shadow_bo = NULL; in qxl_modeset_fini()