Lines Matching +full:libudev +full:- +full:dev
47 #include <libudev.h>
78 * The second part is a high-level library to manage modeset configurations
79 * which abstracts away some of the low-level details like the difference
81 * future the difference between legacy and atomic commit. These high-level
85 …* Note that this library's header pulls in the [i-g-t framebuffer](igt-gpu-tools-i-g-t-framebuffer…
99 * - 1920x1080 60Hz
100 * - 1280x720 60Hz
101 * - 1024x768 60Hz
102 * - 800x600 60Hz
103 * - 640x480 60Hz
134 * - 1400x1050 60Hz
135 * - 1920x1080 60Hz
136 * - 1280x720 60Hz
137 * - 1024x768 60Hz
138 * - 800x600 60Hz
139 * - 640x480 60Hz
184 edid->extensions_len = 1; in generate_audio_edid()
185 edid_ext = &edid->extensions[0]; in generate_audio_edid()
186 edid_cea = &edid_ext->data.cea; in generate_audio_edid()
187 cea_data = edid_cea->data; in generate_audio_edid()
207 assert(cea_data_size <= sizeof(edid_cea->data)); in generate_audio_edid()
289 edid->extensions_len = 1; in igt_kms_get_4k_edid()
290 edid_ext = &edid->extensions[0]; in igt_kms_get_4k_edid()
291 edid_cea = &edid_ext->data.cea; in igt_kms_get_4k_edid()
292 cea_data = edid_cea->data; in igt_kms_get_4k_edid()
299 /* Vendor-Specific Data Block */ in igt_kms_get_4k_edid()
301 hdmi->src_phy_addr[0] = 0x10; in igt_kms_get_4k_edid()
302 hdmi->src_phy_addr[1] = 0x00; in igt_kms_get_4k_edid()
304 hdmi->flags1 = 0; in igt_kms_get_4k_edid()
305 hdmi->max_tdms_clock = 0; in igt_kms_get_4k_edid()
306 hdmi->flags2 = HDMI_VSDB_VIDEO_PRESENT; in igt_kms_get_4k_edid()
307 hdmi->data[0] = 0x00; /* HDMI video flags */ in igt_kms_get_4k_edid()
308 hdmi->data[1] = 1 << 5; /* 1 VIC entry, 0 3D entries */ in igt_kms_get_4k_edid()
309 hdmi->data[2] = 0x01; /* 2160p, specified as short descriptor */ in igt_kms_get_4k_edid()
315 assert(cea_data_size <= sizeof(edid_cea->data)); in igt_kms_get_4k_edid()
341 edid->extensions_len = 1; in igt_kms_get_3d_edid()
342 edid_ext = &edid->extensions[0]; in igt_kms_get_3d_edid()
343 edid_cea = &edid_ext->data.cea; in igt_kms_get_3d_edid()
344 cea_data = edid_cea->data; in igt_kms_get_3d_edid()
351 /* Vendor-Specific Data Block */ in igt_kms_get_3d_edid()
353 hdmi->src_phy_addr[0] = 0x10; in igt_kms_get_3d_edid()
354 hdmi->src_phy_addr[1] = 0x00; in igt_kms_get_3d_edid()
356 hdmi->flags1 = 0; in igt_kms_get_3d_edid()
357 hdmi->max_tdms_clock = 0; in igt_kms_get_3d_edid()
358 hdmi->flags2 = HDMI_VSDB_VIDEO_PRESENT; in igt_kms_get_3d_edid()
359 hdmi->data[0] = HDMI_VSDB_VIDEO_3D_PRESENT; /* HDMI video flags */ in igt_kms_get_3d_edid()
360 hdmi->data[1] = 0; /* 0 VIC entries, 0 3D entries */ in igt_kms_get_3d_edid()
366 assert(cea_data_size <= sizeof(edid_cea->data)); in igt_kms_get_3d_edid()
418 [IGT_CONNECTOR_LINK_STATUS] = "link-status",
423 * plane->props.
432 fd = display->drm_fd; in igt_fill_plane_props()
434 props = drmModeObjectGetProperties(fd, plane->drm_plane->plane_id, DRM_MODE_OBJECT_PLANE); in igt_fill_plane_props()
437 for (i = 0; i < props->count_props; i++) { in igt_fill_plane_props()
439 drmModeGetProperty(fd, props->props[i]); in igt_fill_plane_props()
442 if (strcmp(prop->name, prop_names[j]) != 0) in igt_fill_plane_props()
445 plane->props[j] = props->props[i]; in igt_fill_plane_props()
457 * config->atomic_props_crtc and config->atomic_props_connector.
466 fd = display->drm_fd; in igt_atomic_fill_connector_props()
468 …props = drmModeObjectGetProperties(fd, output->config.connector->connector_id, DRM_MODE_OBJECT_CON… in igt_atomic_fill_connector_props()
471 for (i = 0; i < props->count_props; i++) { in igt_atomic_fill_connector_props()
473 drmModeGetProperty(fd, props->props[i]); in igt_atomic_fill_connector_props()
476 if (strcmp(prop->name, conn_prop_names[j]) != 0) in igt_atomic_fill_connector_props()
479 output->props[j] = props->props[i]; in igt_atomic_fill_connector_props()
496 fd = display->drm_fd; in igt_fill_pipe_props()
498 props = drmModeObjectGetProperties(fd, pipe->crtc_id, DRM_MODE_OBJECT_CRTC); in igt_fill_pipe_props()
501 for (i = 0; i < props->count_props; i++) { in igt_fill_pipe_props()
503 drmModeGetProperty(fd, props->props[i]); in igt_fill_pipe_props()
506 if (strcmp(prop->name, crtc_prop_names[j]) != 0) in igt_fill_pipe_props()
509 pipe->props[j] = props->props[i]; in igt_fill_pipe_props()
549 int r = pipe - 'A'; in kmstest_pipe_to_index()
552 return -EINVAL; in kmstest_pipe_to_index()
583 for (; names->name; names++) { in find_type_name()
584 if (names->type == type) in find_type_name()
585 return names->name; in find_type_name()
635 { DRM_MODE_CONNECTOR_DVII, "DVI-I" },
636 { DRM_MODE_CONNECTOR_DVID, "DVI-D" },
637 { DRM_MODE_CONNECTOR_DVIA, "DVI-A" },
644 { DRM_MODE_CONNECTOR_HDMIA, "HDMI-A" },
645 { DRM_MODE_CONNECTOR_HDMIB, "HDMI-B" },
667 switch (mode->flags & DRM_MODE_FLAG_3D_MASK) { in mode_stereo_name()
691 switch (mode->flags & DRM_MODE_FLAG_PIC_AR_MASK) { in mode_picture_aspect_name()
711 * Prints @mode to stdout in a human-readable form.
719 mode->name, mode->vrefresh, in kmstest_dump_mode()
720 mode->hdisplay, mode->hsync_start, in kmstest_dump_mode()
721 mode->hsync_end, mode->htotal, in kmstest_dump_mode()
722 mode->vdisplay, mode->vsync_start, in kmstest_dump_mode()
723 mode->vsync_end, mode->vtotal, in kmstest_dump_mode()
724 mode->flags, mode->type, mode->clock, in kmstest_dump_mode()
751 for (i = 0; i < res->count_crtcs; i++) { in kmstest_get_pipe_from_crtc_id()
752 crtc = drmModeGetCrtc(fd, res->crtcs[i]); in kmstest_get_pipe_from_crtc_id()
754 cur_id = crtc->crtc_id; in kmstest_get_pipe_from_crtc_id()
760 igt_assert(i < res->count_crtcs); in kmstest_get_pipe_from_crtc_id()
786 for (i = 0; i < connector->count_encoders; i++) { in kmstest_find_crtc_for_connector()
787 e = drmModeGetEncoder(fd, connector->encoders[i]); in kmstest_find_crtc_for_connector()
788 possible_crtcs = e->possible_crtcs & ~crtc_blacklist_idx_mask; in kmstest_find_crtc_for_connector()
793 return res->crtcs[j]; in kmstest_find_crtc_for_connector()
811 * Returns: The file-private handle of the created buffer object
867 err = -errno; in __kmstest_dumb_destroy()
885 * Returns: the previous mode, or KD_GRAPHICS if no /dev/tty0 was
892 static const char TTY0[] = "/dev/tty0"; in set_vt_mode()
905 return -errno; in set_vt_mode()
919 return -errno; in set_vt_mode()
923 static unsigned long orig_vt_mode = -1UL;
935 if (orig_vt_mode != -1UL) { in kmstest_restore_vt_mode()
940 orig_vt_mode = -1UL; in kmstest_restore_vt_mode()
1005 if ((connector->connector_type == DRM_MODE_CONNECTOR_HDMIA || in kmstest_force_connector()
1006 connector->connector_type == DRM_MODE_CONNECTOR_HDMIB || in kmstest_force_connector()
1007 connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) in kmstest_force_connector()
1018 value = "on-digital"; in kmstest_force_connector()
1038 if (asprintf(&path, "card%d-%s-%d/status", in kmstest_force_connector()
1040 kmstest_connector_type_str(connector->connector_type), in kmstest_force_connector()
1041 connector->connector_type_id) < 0) { in kmstest_force_connector()
1054 len = -1; in kmstest_force_connector()
1060 if (len != -1 && len < MAX_CONNECTORS) { in kmstest_force_connector()
1081 temp = drmModeGetConnector(drm_fd, connector->connector_id); in kmstest_force_connector()
1104 …igt_assert_neq(asprintf(&path, "%s-%d/edid_override", kmstest_connector_type_str(connector->connec… in kmstest_force_edid()
1105 -1); in kmstest_force_edid()
1109 igt_require(debugfs_fd != -1); in kmstest_force_edid()
1120 temp = drmModeGetConnector(drm_fd, connector->connector_id); in kmstest_force_edid()
1123 igt_assert(ret != -1); in kmstest_force_edid()
1141 if (!connector->count_modes) { in kmstest_get_connector_default_mode()
1143 connector->connector_id); in kmstest_get_connector_default_mode()
1147 for (i = 0; i < connector->count_modes; i++) { in kmstest_get_connector_default_mode()
1149 connector->modes[i].type & DRM_MODE_TYPE_PREFERRED) { in kmstest_get_connector_default_mode()
1150 *mode = connector->modes[i]; in kmstest_get_connector_default_mode()
1151 if (mode->type & DRM_MODE_TYPE_PREFERRED) in kmstest_get_connector_default_mode()
1166 config->valid_crtc_idx_mask = 0; in _kmstest_connector_config_crtc_mask()
1169 for (i = 0; i < connector->count_encoders; i++) { in _kmstest_connector_config_crtc_mask()
1171 connector->encoders[i]); in _kmstest_connector_config_crtc_mask()
1175 connector->encoders[i], in _kmstest_connector_config_crtc_mask()
1181 config->valid_crtc_idx_mask |= encoder->possible_crtcs; in _kmstest_connector_config_crtc_mask()
1191 for (i = 0; i < connector->count_encoders; i++) { in _kmstest_connector_config_find_encoder()
1192 drmModeEncoder *encoder = drmModeGetEncoder(drm_fd, connector->encoders[i]); in _kmstest_connector_config_find_encoder()
1196 connector->encoders[i], in _kmstest_connector_config_find_encoder()
1202 if (encoder->possible_crtcs & (1 << pipe)) in _kmstest_connector_config_find_encoder()
1218 * @probe: whether to fully re-probe mode list or not
1231 config->pipe = PIPE_NONE; in _kmstest_connector_config()
1248 if (connector->connector_id != connector_id) { in _kmstest_connector_config()
1250 connector->connector_id, connector_id); in _kmstest_connector_config()
1261 if (!connector->count_modes) in _kmstest_connector_config()
1262 memset(&config->default_mode, 0, sizeof(config->default_mode)); in _kmstest_connector_config()
1264 &config->default_mode)) in _kmstest_connector_config()
1267 config->connector = connector; in _kmstest_connector_config()
1269 crtc_idx_mask &= config->valid_crtc_idx_mask; in _kmstest_connector_config()
1271 /* Keep config->connector */ in _kmstest_connector_config()
1274 config->pipe = ffs(crtc_idx_mask) - 1; in _kmstest_connector_config()
1276 config->encoder = _kmstest_connector_config_find_encoder(drm_fd, connector, config->pipe); in _kmstest_connector_config()
1277 config->crtc = drmModeGetCrtc(drm_fd, resources->crtcs[config->pipe]); in _kmstest_connector_config()
1279 if (connector->connection != DRM_MODE_CONNECTED) in _kmstest_connector_config()
1282 if (!connector->count_modes) { in _kmstest_connector_config()
1284 igt_warn("connector %d/%s-%d has no modes\n", connector_id, in _kmstest_connector_config()
1285 kmstest_connector_type_str(connector->connector_type), in _kmstest_connector_config()
1286 connector->connector_type_id); in _kmstest_connector_config()
1345 drmModeFreeCrtc(config->crtc); in kmstest_free_connector_config()
1346 config->crtc = NULL; in kmstest_free_connector_config()
1348 drmModeFreeEncoder(config->encoder); in kmstest_free_connector_config()
1349 config->encoder = NULL; in kmstest_free_connector_config()
1351 drmModeFreeConnector(config->connector); in kmstest_free_connector_config()
1352 config->connector = NULL; in kmstest_free_connector_config()
1368 for (i = 0; i < connector->count_props; i++) { in kmstest_set_connector_dpms()
1370 .prop_id = connector->props[i], in kmstest_set_connector_dpms()
1384 connector->connector_id); in kmstest_set_connector_dpms()
1386 igt_assert(drmModeConnectorSetProperty(fd, connector->connector_id, in kmstest_set_connector_dpms()
1417 for (i = 0; i < proplist->count_props; i++) { in kmstest_get_property()
1418 _prop = drmModeGetProperty(drm_fd, proplist->props[i]); in kmstest_get_property()
1422 if (strcmp(_prop->name, name) == 0) { in kmstest_get_property()
1425 *prop_id = proplist->props[i]; in kmstest_get_property()
1427 *value = proplist->prop_values[i]; in kmstest_get_property()
1453 for (i = 0; i < resources->count_crtcs; i++) { in kmstest_unset_all_crtcs()
1454 rc = drmModeSetCrtc(drm_fd, resources->crtcs[i], 0, 0, 0, NULL, in kmstest_unset_all_crtcs()
1472 for (i = 0; i < res->count_crtcs; i++) in kmstest_get_crtc_idx()
1473 if (res->crtcs[i] == crtc_id) in kmstest_get_crtc_idx()
1497 * Returns 0 on success or non-zero unsigned integer otherwise
1548 plane->type = type; in get_plane()
1550 &plane->id, in get_plane()
1554 ret = sscanf(buf + 9, "%4d%*c%4d%*c", &plane->pos_x, &plane->pos_y); in get_plane()
1557 ret = sscanf(buf + 30, "%4d%*c%4d%*c", &plane->width, &plane->height); in get_plane()
1600 &crtc->id, &pipe, buf); in parse_crtc()
1603 crtc->pipe = kmstest_pipe_to_index(pipe); in parse_crtc()
1604 igt_assert(crtc->pipe >= 0); in parse_crtc()
1607 &crtc->width, &crtc->height); in parse_crtc()
1629 crtc->active = true; in kmstest_get_crtc()
1633 crtc->n_planes = parse_planes(file, NULL); in kmstest_get_crtc()
1634 igt_assert_lt(0, crtc->n_planes); in kmstest_get_crtc()
1635 crtc->planes = calloc(crtc->n_planes, sizeof(*crtc->planes)); in kmstest_get_crtc()
1636 igt_assert_f(crtc->planes, "Failed to allocate memory for %d planes\n", crtc->n_planes); in kmstest_get_crtc()
1639 parse_planes(file, crtc->planes); in kmstest_get_crtc()
1641 if (crtc->pipe != pipe) { in kmstest_get_crtc()
1642 free(crtc->planes); in kmstest_get_crtc()
1710 #define LOG_N_SPACES (sizeof(LOG_SPACES) - 1)
1719 igt_display_log_shift(d, -1); \
1732 for (i = 0; i < display->log_shift; i++) in igt_display_log()
1740 display->log_shift += shift; in igt_display_log_shift()
1741 igt_assert(display->log_shift >= 0); in igt_display_log_shift()
1746 igt_display_t *display = output->display; in igt_output_refresh()
1749 if (output->pending_pipe != PIPE_NONE) in igt_output_refresh()
1750 crtc_idx_mask = 1 << output->pending_pipe; in igt_output_refresh()
1752 kmstest_free_connector_config(&output->config); in igt_output_refresh()
1754 _kmstest_connector_config(display->drm_fd, output->id, crtc_idx_mask, in igt_output_refresh()
1755 &output->config, output->force_reprobe); in igt_output_refresh()
1756 output->force_reprobe = false; in igt_output_refresh()
1758 if (!output->name && output->config.connector) { in igt_output_refresh()
1759 drmModeConnector *c = output->config.connector; in igt_output_refresh()
1761 …igt_assert_neq(asprintf(&output->name, "%s-%d", kmstest_connector_type_str(c->connector_type), c->… in igt_output_refresh()
1762 -1); in igt_output_refresh()
1765 if (output->config.connector) in igt_output_refresh()
1769 LOG(display, "%s: Selecting pipe %s\n", output->name, in igt_output_refresh()
1770 kmstest_pipe_name(output->pending_pipe)); in igt_output_refresh()
1776 igt_pipe_t *pipe = plane->pipe; in igt_plane_set_property()
1777 igt_display_t *display = pipe->display; in igt_plane_set_property()
1779 return drmModeObjectSetProperty(display->drm_fd, plane->drm_plane->plane_id, in igt_plane_set_property()
1832 igt_plane_set_prop_enum(plane, IGT_PLANE_PIXEL_BLEND_MODE, "Pre-multiplied"); in igt_plane_reset()
1838 plane->pipe->display->drm_fd, in igt_plane_reset()
1839 plane->props[IGT_PLANE_ALPHA]); in igt_plane_reset()
1843 if (alpha_prop->flags & DRM_MODE_PROP_RANGE) in igt_plane_reset()
1845 max_alpha = alpha_prop->values[1]; in igt_plane_reset()
1856 plane->values[IGT_PLANE_IN_FENCE_FD] = ~0ULL; in igt_plane_reset()
1857 plane->gem_handle = 0; in igt_plane_reset()
1875 pipe->out_fence_fd = -1; in igt_pipe_reset()
1880 output->pending_pipe = PIPE_NONE; in igt_output_reset()
1881 output->use_override_mode = false; in igt_output_reset()
1882 memset(&output->override_mode, 0, sizeof(output->override_mode)); in igt_output_reset()
1903 * - %IGT_CONNECTOR_CRTC_ID
1904 * - %IGT_CONNECTOR_BROADCAST_RGB (if applicable)
1906 * - igt_output_override_mode() to default.
1909 * - %IGT_CRTC_MODE_ID (leaked)
1910 * - %IGT_CRTC_ACTIVE
1911 * - %IGT_CRTC_OUT_FENCE_PTR
1914 * - %IGT_PLANE_SRC_*
1915 * - %IGT_PLANE_CRTC_*
1916 * - %IGT_PLANE_FB_ID
1917 * - %IGT_PLANE_CRTC_ID
1918 * - %IGT_PLANE_ROTATION
1919 * - %IGT_PLANE_IN_FENCE_FD
1930 display->first_commit = true; in igt_display_reset()
1933 igt_pipe_t *pipe_obj = &display->pipes[pipe]; in igt_display_reset()
1942 for (i = 0; i < display->n_outputs; i++) { in igt_display_reset()
1943 igt_output_t *output = &display->outputs[i]; in igt_display_reset()
1973 display->drm_fd = drm_fd; in igt_display_require()
1975 resources = drmModeGetResources(display->drm_fd); in igt_display_require()
1983 display->n_pipes = resources->count_crtcs; in igt_display_require()
1984 display->pipes = calloc(sizeof(igt_pipe_t), display->n_pipes); in igt_display_require()
1985 igt_assert_f(display->pipes, "Failed to allocate memory for %d pipes\n", display->n_pipes); in igt_display_require()
1989 display->is_atomic = 1; in igt_display_require()
1991 plane_resources = drmModeGetPlaneResources(display->drm_fd); in igt_display_require()
1994 display->n_planes = plane_resources->count_planes; in igt_display_require()
1995 display->planes = calloc(sizeof(igt_plane_t), display->n_planes); in igt_display_require()
1996 igt_assert_f(display->planes, "Failed to allocate memory for %d planes\n", display->n_planes); in igt_display_require()
1998 for (i = 0; i < plane_resources->count_planes; ++i) { in igt_display_require()
1999 igt_plane_t *plane = &display->planes[i]; in igt_display_require()
2000 uint32_t id = plane_resources->planes[i]; in igt_display_require()
2002 plane->drm_plane = drmModeGetPlane(display->drm_fd, id); in igt_display_require()
2003 igt_assert(plane->drm_plane); in igt_display_require()
2005 plane->type = get_drm_plane_type(display->drm_fd, id); in igt_display_require()
2015 igt_pipe_t *pipe = &display->pipes[i]; in igt_display_require()
2021 pipe->crtc_id = resources->crtcs[i]; in igt_display_require()
2022 pipe->display = display; in igt_display_require()
2023 pipe->pipe = i; in igt_display_require()
2024 pipe->plane_cursor = -1; in igt_display_require()
2025 pipe->plane_primary = -1; in igt_display_require()
2026 pipe->planes = NULL; in igt_display_require()
2031 for (j = 0; j < display->n_planes; j++) { in igt_display_require()
2032 drmModePlane *drm_plane = display->planes[j].drm_plane; in igt_display_require()
2035 if (drm_plane->possible_crtcs & (1 << i)) in igt_display_require()
2040 pipe->planes = calloc(sizeof(igt_plane_t), n_planes); in igt_display_require()
2041 igt_assert_f(pipe->planes, "Failed to allocate memory for %d planes\n", n_planes); in igt_display_require()
2042 last_plane = n_planes - 1; in igt_display_require()
2045 for (j = 0; j < display->n_planes; j++) { in igt_display_require()
2046 igt_plane_t *global_plane = &display->planes[j]; in igt_display_require()
2047 drmModePlane *drm_plane = global_plane->drm_plane; in igt_display_require()
2049 if (!(drm_plane->possible_crtcs & (1 << i))) in igt_display_require()
2052 type = global_plane->type; in igt_display_require()
2054 if (type == DRM_PLANE_TYPE_PRIMARY && pipe->plane_primary == -1) { in igt_display_require()
2055 plane = &pipe->planes[0]; in igt_display_require()
2056 plane->index = 0; in igt_display_require()
2057 pipe->plane_primary = 0; in igt_display_require()
2058 } else if (type == DRM_PLANE_TYPE_CURSOR && pipe->plane_cursor == -1) { in igt_display_require()
2059 plane = &pipe->planes[last_plane]; in igt_display_require()
2060 plane->index = last_plane; in igt_display_require()
2061 pipe->plane_cursor = last_plane; in igt_display_require()
2062 display->has_cursor_plane = true; in igt_display_require()
2064 plane = &pipe->planes[p]; in igt_display_require()
2065 plane->index = p++; in igt_display_require()
2068 igt_assert_f(plane->index < n_planes, "n_planes < plane->index failed\n"); in igt_display_require()
2069 plane->type = type; in igt_display_require()
2070 plane->pipe = pipe; in igt_display_require()
2071 plane->drm_plane = drm_plane; in igt_display_require()
2072 plane->values[IGT_PLANE_IN_FENCE_FD] = ~0ULL; in igt_display_require()
2073 plane->ref = global_plane; in igt_display_require()
2079 if (!global_plane->ref) in igt_display_require()
2091 igt_assert_eq(pipe->plane_primary, 0); in igt_display_require()
2094 if (display->has_cursor_plane) in igt_display_require()
2099 pipe->n_planes = n_planes; in igt_display_require()
2109 display->n_outputs = resources->count_connectors; in igt_display_require()
2110 display->outputs = calloc(display->n_outputs, sizeof(igt_output_t)); in igt_display_require()
2111 igt_assert_f(display->outputs, "Failed to allocate memory for %d outputs\n", display->n_outputs); in igt_display_require()
2113 for (i = 0; i < display->n_outputs; i++) { in igt_display_require()
2114 igt_output_t *output = &display->outputs[i]; in igt_display_require()
2121 output->pending_pipe = PIPE_NONE; in igt_display_require()
2122 output->id = resources->connectors[i]; in igt_display_require()
2123 output->display = display; in igt_display_require()
2127 connector = output->config.connector; in igt_display_require()
2128 if (connector && (!connector->count_modes || in igt_display_require()
2129 connector->connection == DRM_MODE_UNKNOWNCONNECTION)) { in igt_display_require()
2130 output->force_reprobe = true; in igt_display_require()
2144 if (display->n_pipes && display->n_outputs) in igt_display_require()
2148 display->n_pipes, display->n_outputs); in igt_display_require()
2159 return display->n_pipes; in igt_display_get_n_pipes()
2217 for (i = 0; i < display->n_outputs; i++) { in igt_output_from_connector()
2218 output = &display->outputs[i]; in igt_output_from_connector()
2220 if (output->config.connector && in igt_output_from_connector()
2221 output->config.connector->connector_id == in igt_output_from_connector()
2222 connector->connector_id) { in igt_output_from_connector()
2256 free(pipe->planes); in igt_pipe_fini()
2257 pipe->planes = NULL; in igt_pipe_fini()
2259 if (pipe->out_fence_fd != -1) in igt_pipe_fini()
2260 close(pipe->out_fence_fd); in igt_pipe_fini()
2265 kmstest_free_connector_config(&output->config); in igt_output_fini()
2266 free(output->name); in igt_output_fini()
2267 output->name = NULL; in igt_output_fini()
2281 for (i = 0; i < display->n_planes; ++i) { in igt_display_fini()
2282 igt_plane_t *plane = &display->planes[i]; in igt_display_fini()
2284 if (plane->drm_plane) { in igt_display_fini()
2285 drmModeFreePlane(plane->drm_plane); in igt_display_fini()
2286 plane->drm_plane = NULL; in igt_display_fini()
2290 for (i = 0; i < display->n_pipes; i++) in igt_display_fini()
2291 igt_pipe_fini(&display->pipes[i]); in igt_display_fini()
2293 for (i = 0; i < display->n_outputs; i++) in igt_display_fini()
2294 igt_output_fini(&display->outputs[i]); in igt_display_fini()
2295 free(display->outputs); in igt_display_fini()
2296 display->outputs = NULL; in igt_display_fini()
2297 free(display->pipes); in igt_display_fini()
2298 display->pipes = NULL; in igt_display_fini()
2299 free(display->planes); in igt_display_fini()
2300 display->planes = NULL; in igt_display_fini()
2311 for (i = 0; i < display->n_outputs; i++) { in igt_display_refresh()
2312 output = &display->outputs[i]; in igt_display_refresh()
2314 if (output->pending_pipe != PIPE_NONE) { in igt_display_refresh()
2315 if (pipes_in_use & (1 << output->pending_pipe)) in igt_display_refresh()
2318 pipes_in_use |= 1 << output->pending_pipe; in igt_display_refresh()
2321 if (output->force_reprobe) in igt_display_refresh()
2328 for (; i > 0; i--) { in igt_display_refresh()
2329 igt_output_t *b = &display->outputs[i - 1]; in igt_display_refresh()
2331 igt_assert_f(output->pending_pipe != in igt_display_refresh()
2332 b->pending_pipe, in igt_display_refresh()
2335 kmstest_pipe_name(output->pending_pipe)); in igt_display_refresh()
2341 igt_display_t *display = output->display; in igt_output_get_driving_pipe()
2344 if (output->pending_pipe == PIPE_NONE) { in igt_output_get_driving_pipe()
2354 pipe = output->pending_pipe; in igt_output_get_driving_pipe()
2357 igt_assert(pipe >= 0 && pipe < display->n_pipes); in igt_output_get_driving_pipe()
2359 return &display->pipes[pipe]; in igt_output_get_driving_pipe()
2364 igt_require_f(plane_idx >= 0 && plane_idx < pipe->n_planes, in igt_pipe_get_plane()
2365 "Valid pipe->planes plane_idx not found, plane_idx=%d n_planes=%d", in igt_pipe_get_plane()
2366 plane_idx, pipe->n_planes); in igt_pipe_get_plane()
2368 return &pipe->planes[plane_idx]; in igt_pipe_get_plane()
2383 int i, plane_idx = -1; in igt_pipe_get_plane_type()
2387 plane_idx = pipe->plane_cursor; in igt_pipe_get_plane_type()
2390 plane_idx = pipe->plane_primary; in igt_pipe_get_plane_type()
2393 for(i = 0; i < pipe->n_planes; i++) in igt_pipe_get_plane_type()
2394 if (pipe->planes[i].type == DRM_PLANE_TYPE_OVERLAY) in igt_pipe_get_plane_type()
2401 igt_require_f(plane_idx >= 0 && plane_idx < pipe->n_planes, in igt_pipe_get_plane_type()
2402 "Valid pipe->planes idx not found. plane_idx=%d plane_type=%d n_planes=%d\n", in igt_pipe_get_plane_type()
2403 plane_idx, plane_type, pipe->n_planes); in igt_pipe_get_plane_type()
2405 return &pipe->planes[plane_idx]; in igt_pipe_get_plane_type()
2421 for(i = 0; i < pipe->n_planes; i++) in igt_pipe_count_plane_type()
2422 if (pipe->planes[i].type == plane_type) in igt_pipe_count_plane_type()
2443 for(i = 0; i < pipe->n_planes; i++) { in igt_pipe_get_plane_type_index()
2444 if (pipe->planes[i].type != plane_type) in igt_pipe_get_plane_type_index()
2448 return &pipe->planes[i]; in igt_pipe_get_plane_type_index()
2458 switch (output->config.connector->connector_type) { in output_is_internal_panel()
2471 unsigned full_pipe_mask = (1 << (display->n_pipes)) - 1, assigned_pipes = 0; in __igt_pipe_populate_outputs()
2475 memset(chosen_outputs, 0, sizeof(*chosen_outputs) * display->n_pipes); in __igt_pipe_populate_outputs()
2482 for (i = 0; i <= display->n_pipes; i++) { in __igt_pipe_populate_outputs()
2484 uint32_t pipe_mask = output->config.valid_crtc_idx_mask & full_pipe_mask; in __igt_pipe_populate_outputs()
2499 for (j = 0; j < display->n_pipes; j++) { in __igt_pipe_populate_outputs()
2539 igt_output_t *chosen_outputs[display->n_pipes]; in igt_get_single_output_for_pipe()
2542 igt_require(pipe < display->n_pipes); in igt_get_single_output_for_pipe()
2551 igt_display_t *display = pipe->display; in igt_pipe_get_output()
2554 for (i = 0; i < display->n_outputs; i++) { in igt_pipe_get_output()
2555 igt_output_t *output = &display->outputs[i]; in igt_pipe_get_output()
2557 if (output->pending_pipe == pipe->pipe) in igt_pipe_get_output()
2566 return plane->values[IGT_PLANE_FB_ID]; in igt_plane_get_fb_id()
2582 igt_display_t *display = pipe->display; in igt_atomic_prepare_plane_commit()
2585 igt_assert(plane->drm_plane); in igt_atomic_prepare_plane_commit()
2589 kmstest_pipe_name(pipe->pipe), in igt_atomic_prepare_plane_commit()
2590 plane->index, in igt_atomic_prepare_plane_commit()
2598 igt_assert(plane->props[i]); in igt_atomic_prepare_plane_commit()
2601 kmstest_pipe_name(pipe->pipe), plane->index, igt_plane_prop_names[i], in igt_atomic_prepare_plane_commit()
2602 plane->values[i], plane->values[i]); in igt_atomic_prepare_plane_commit()
2604 igt_assert_lt(0, drmModeAtomicAddProperty(req, plane->drm_plane->plane_id, in igt_atomic_prepare_plane_commit()
2605 plane->props[i], in igt_atomic_prepare_plane_commit()
2606 plane->values[i])); in igt_atomic_prepare_plane_commit()
2612 * - Obviously not the XYWH SRC/CRTC coordinates.
2613 * - Not CRTC_ID or FENCE_ID, done through SetPlane.
2614 * - Can't set IN_FENCE_FD, that would be silly.
2621 (((1ULL << IGT_NUM_PLANE_PROPS) - 1) & \
2637 igt_display_t *display = pipe->display; in igt_drm_plane_commit()
2651 plane->changed & IGT_PLANE_COORD_CHANGED_MASK; in igt_drm_plane_commit()
2653 igt_assert(plane->drm_plane); in igt_drm_plane_commit()
2656 crtc_id = pipe->crtc_id; in igt_drm_plane_commit()
2661 kmstest_pipe_name(pipe->pipe), in igt_drm_plane_commit()
2662 plane->index); in igt_drm_plane_commit()
2664 ret = drmModeSetPlane(display->drm_fd, in igt_drm_plane_commit()
2665 plane->drm_plane->plane_id, in igt_drm_plane_commit()
2678 src_x = plane->values[IGT_PLANE_SRC_X]; in igt_drm_plane_commit()
2679 src_y = plane->values[IGT_PLANE_SRC_Y]; in igt_drm_plane_commit()
2680 src_w = plane->values[IGT_PLANE_SRC_W]; in igt_drm_plane_commit()
2681 src_h = plane->values[IGT_PLANE_SRC_H]; in igt_drm_plane_commit()
2682 crtc_x = plane->values[IGT_PLANE_CRTC_X]; in igt_drm_plane_commit()
2683 crtc_y = plane->values[IGT_PLANE_CRTC_Y]; in igt_drm_plane_commit()
2684 crtc_w = plane->values[IGT_PLANE_CRTC_W]; in igt_drm_plane_commit()
2685 crtc_h = plane->values[IGT_PLANE_CRTC_H]; in igt_drm_plane_commit()
2690 kmstest_pipe_name(pipe->pipe), in igt_drm_plane_commit()
2691 plane->index, in igt_drm_plane_commit()
2696 ret = drmModeSetPlane(display->drm_fd, in igt_drm_plane_commit()
2697 plane->drm_plane->plane_id, in igt_drm_plane_commit()
2709 changed_mask = plane->changed & LEGACY_PLANE_COMMIT_MASK; in igt_drm_plane_commit()
2716 kmstest_pipe_name(pipe->pipe), plane->index, igt_plane_prop_names[i], in igt_drm_plane_commit()
2717 plane->values[i], plane->values[i]); in igt_drm_plane_commit()
2719 igt_assert(plane->props[i]); in igt_drm_plane_commit()
2722 plane->props[i], in igt_drm_plane_commit()
2723 plane->values[i]); in igt_drm_plane_commit()
2741 igt_display_t *display = pipe->display; in igt_cursor_commit_legacy()
2742 uint32_t crtc_id = pipe->crtc_id; in igt_cursor_commit_legacy()
2748 if (cursor->gem_handle) in igt_cursor_commit_legacy()
2751 kmstest_pipe_name(pipe->pipe), in igt_cursor_commit_legacy()
2752 cursor->gem_handle, in igt_cursor_commit_legacy()
2753 (unsigned)cursor->values[IGT_PLANE_CRTC_W], in igt_cursor_commit_legacy()
2754 (unsigned)cursor->values[IGT_PLANE_CRTC_H]); in igt_cursor_commit_legacy()
2758 kmstest_pipe_name(pipe->pipe)); in igt_cursor_commit_legacy()
2760 ret = drmModeSetCursor(display->drm_fd, crtc_id, in igt_cursor_commit_legacy()
2761 cursor->gem_handle, in igt_cursor_commit_legacy()
2762 cursor->values[IGT_PLANE_CRTC_W], in igt_cursor_commit_legacy()
2763 cursor->values[IGT_PLANE_CRTC_H]); in igt_cursor_commit_legacy()
2769 int x = cursor->values[IGT_PLANE_CRTC_X]; in igt_cursor_commit_legacy()
2770 int y = cursor->values[IGT_PLANE_CRTC_Y]; in igt_cursor_commit_legacy()
2774 kmstest_pipe_name(pipe->pipe), in igt_cursor_commit_legacy()
2777 ret = drmModeMoveCursor(display->drm_fd, crtc_id, x, y); in igt_cursor_commit_legacy()
2792 struct igt_display *display = primary->pipe->display; in igt_primary_plane_commit_legacy()
2799 igt_assert((primary->values[IGT_PLANE_CRTC_X] == 0 && primary->values[IGT_PLANE_CRTC_Y] == 0)); in igt_primary_plane_commit_legacy()
2802 if (!pipe->display->first_commit) in igt_primary_plane_commit_legacy()
2806 !(primary->changed & IGT_PLANE_COORD_CHANGED_MASK) && in igt_primary_plane_commit_legacy()
2807 !(igt_pipe_obj_is_prop_changed(primary->pipe, IGT_CRTC_MODE_ID) && in igt_primary_plane_commit_legacy()
2808 primary == igt_pipe_get_plane_type(primary->pipe, DRM_PLANE_TYPE_PRIMARY))) in igt_primary_plane_commit_legacy()
2811 crtc_id = pipe->crtc_id; in igt_primary_plane_commit_legacy()
2819 uint32_t src_x = primary->values[IGT_PLANE_SRC_X] >> 16; in igt_primary_plane_commit_legacy()
2820 uint32_t src_y = primary->values[IGT_PLANE_SRC_Y] >> 16; in igt_primary_plane_commit_legacy()
2826 kmstest_pipe_name(pipe->pipe), in igt_primary_plane_commit_legacy()
2829 mode->hdisplay, mode->vdisplay); in igt_primary_plane_commit_legacy()
2831 ret = drmModeSetCrtc(display->drm_fd, in igt_primary_plane_commit_legacy()
2835 &output->id, in igt_primary_plane_commit_legacy()
2841 kmstest_pipe_name(pipe->pipe)); in igt_primary_plane_commit_legacy()
2843 ret = drmModeSetCrtc(display->drm_fd, in igt_primary_plane_commit_legacy()
2865 LOG(pipe->display, "Fixing up initial rotation pipe %s, plane %d\n", in igt_plane_fixup_rotation()
2866 kmstest_pipe_name(pipe->pipe), plane->index); in igt_plane_fixup_rotation()
2869 ret = igt_plane_set_property(plane, plane->props[IGT_PLANE_ROTATION], in igt_plane_fixup_rotation()
2870 plane->values[IGT_PLANE_ROTATION]); in igt_plane_fixup_rotation()
2875 ret = drmModeSetPlane(pipe->display->drm_fd, in igt_plane_fixup_rotation()
2876 plane->drm_plane->plane_id, in igt_plane_fixup_rotation()
2877 pipe->crtc_id, 0, /* fb_id */ in igt_plane_fixup_rotation()
2883 if (ret && plane->type != DRM_PLANE_TYPE_PRIMARY) in igt_plane_fixup_rotation()
2888 ret = drmModeSetCrtc(pipe->display->drm_fd, in igt_plane_fixup_rotation()
2889 pipe->crtc_id, 0, 0, 0, NULL, 0, NULL); in igt_plane_fixup_rotation()
2896 return igt_plane_set_property(plane, plane->props[IGT_PLANE_ROTATION], in igt_plane_fixup_rotation()
2897 plane->values[IGT_PLANE_ROTATION]); in igt_plane_fixup_rotation()
2909 if (pipe->display->first_commit || (s == COMMIT_UNIVERSAL && in igt_plane_commit()
2917 if (plane->type == DRM_PLANE_TYPE_CURSOR && s == COMMIT_LEGACY) { in igt_plane_commit()
2919 } else if (plane->type == DRM_PLANE_TYPE_PRIMARY && s == COMMIT_LEGACY && in igt_plane_commit()
2920 plane == igt_pipe_get_plane_type(plane->pipe, DRM_PLANE_TYPE_PRIMARY)) { in igt_plane_commit()
2958 igt_assert(pipe->props[i]); in igt_pipe_commit()
2960 ret = drmModeObjectSetProperty(pipe->display->drm_fd, in igt_pipe_commit()
2961 pipe->crtc_id, DRM_MODE_OBJECT_CRTC, in igt_pipe_commit()
2962 pipe->props[i], pipe->values[i]); in igt_pipe_commit()
2967 for (i = 0; i < pipe->n_planes; i++) { in igt_pipe_commit()
2968 igt_plane_t *plane = &pipe->planes[i]; in igt_pipe_commit()
2971 if (plane->ref->pipe != pipe) in igt_pipe_commit()
2995 igt_assert(output->props[i]); in igt_output_commit()
2998 ret = drmModeConnectorSetProperty(output->display->drm_fd, output->id, in igt_output_commit()
2999 output->props[i], output->values[i]); in igt_output_commit()
3001 ret = drmModeObjectSetProperty(output->display->drm_fd, output->id, in igt_output_commit()
3003 output->props[i], output->values[i]); in igt_output_commit()
3021 proplist = drmModeObjectGetProperties(display->drm_fd, object_id, object_type); in igt_mode_object_get_prop()
3022 for (i = 0; i < proplist->count_props; i++) { in igt_mode_object_get_prop()
3023 if (proplist->props[i] != prop) in igt_mode_object_get_prop()
3032 ret = proplist->prop_values[i]; in igt_mode_object_get_prop()
3053 return igt_mode_object_get_prop(plane->pipe->display, DRM_MODE_OBJECT_PLANE, in igt_plane_get_prop()
3054 plane->drm_plane->plane_id, plane->props[prop]); in igt_plane_get_prop()
3065 for (i = 0; i < prop->count_enums; i++) in igt_mode_object_get_prop_enum_value()
3066 if (!strcmp(str, prop->enums[i].name)) { in igt_mode_object_get_prop_enum_value()
3067 *val = prop->enums[i].value; in igt_mode_object_get_prop_enum_value()
3079 igt_display_t *display = plane->pipe->display; in igt_plane_try_prop_enum()
3082 igt_assert(plane->props[prop]); in igt_plane_try_prop_enum()
3084 if (!igt_mode_object_get_prop_enum_value(display->drm_fd, in igt_plane_try_prop_enum()
3085 plane->props[prop], val, &uval)) in igt_plane_try_prop_enum()
3115 igt_display_t *display = plane->pipe->display; in igt_plane_replace_prop_blob()
3116 uint64_t *blob = &plane->values[prop]; in igt_plane_replace_prop_blob()
3120 igt_assert(drmModeDestroyPropertyBlob(display->drm_fd, in igt_plane_replace_prop_blob()
3124 igt_assert(drmModeCreatePropertyBlob(display->drm_fd, in igt_plane_replace_prop_blob()
3146 return igt_mode_object_get_prop(output->display, DRM_MODE_OBJECT_CONNECTOR, in igt_output_get_prop()
3147 output->id, output->props[prop]); in igt_output_get_prop()
3154 igt_display_t *display = output->display; in igt_output_try_prop_enum()
3157 igt_assert(output->props[prop]); in igt_output_try_prop_enum()
3159 if (!igt_mode_object_get_prop_enum_value(display->drm_fd, in igt_output_try_prop_enum()
3160 output->props[prop], val, &uval)) in igt_output_try_prop_enum()
3190 igt_display_t *display = output->display; in igt_output_replace_prop_blob()
3191 uint64_t *blob = &output->values[prop]; in igt_output_replace_prop_blob()
3195 igt_assert(drmModeDestroyPropertyBlob(display->drm_fd, in igt_output_replace_prop_blob()
3199 igt_assert(drmModeCreatePropertyBlob(display->drm_fd, in igt_output_replace_prop_blob()
3221 return igt_mode_object_get_prop(pipe->display, DRM_MODE_OBJECT_CRTC, in igt_pipe_obj_get_prop()
3222 pipe->crtc_id, pipe->props[prop]); in igt_pipe_obj_get_prop()
3229 igt_display_t *display = pipe_obj->display; in igt_pipe_obj_try_prop_enum()
3232 igt_assert(pipe_obj->props[prop]); in igt_pipe_obj_try_prop_enum()
3234 if (!igt_mode_object_get_prop_enum_value(display->drm_fd, in igt_pipe_obj_try_prop_enum()
3235 pipe_obj->props[prop], val, &uval)) in igt_pipe_obj_try_prop_enum()
3268 igt_display_t *display = pipe->display; in igt_pipe_obj_replace_prop_blob()
3269 uint64_t *blob = &pipe->values[prop]; in igt_pipe_obj_replace_prop_blob()
3273 igt_assert(drmModeDestroyPropertyBlob(display->drm_fd, in igt_pipe_obj_replace_prop_blob()
3277 igt_assert(drmModeCreatePropertyBlob(display->drm_fd, in igt_pipe_obj_replace_prop_blob()
3296 kmstest_pipe_name(pipe_obj->pipe), igt_crtc_prop_names[i], in igt_atomic_prepare_crtc_commit()
3297 pipe_obj->values[i], pipe_obj->values[i]); in igt_atomic_prepare_crtc_commit()
3299 …igt_assert_lt(0, drmModeAtomicAddProperty(req, pipe_obj->crtc_id, pipe_obj->props[i], pipe_obj->va… in igt_atomic_prepare_crtc_commit()
3302 if (pipe_obj->out_fence_fd != -1) { in igt_atomic_prepare_crtc_commit()
3303 close(pipe_obj->out_fence_fd); in igt_atomic_prepare_crtc_commit()
3304 pipe_obj->out_fence_fd = -1; in igt_atomic_prepare_crtc_commit()
3321 igt_assert(output->props[i]); in igt_atomic_prepare_connector_commit()
3325 output->values[i], output->values[i]); in igt_atomic_prepare_connector_commit()
3328 output->config.connector->connector_id, in igt_atomic_prepare_connector_commit()
3329 output->props[i], in igt_atomic_prepare_connector_commit()
3330 output->values[i])); in igt_atomic_prepare_connector_commit()
3346 if (display->is_atomic != 1) in igt_atomic_commit()
3347 return -1; in igt_atomic_commit()
3351 igt_pipe_t *pipe_obj = &display->pipes[pipe]; in igt_atomic_commit()
3357 if (pipe_obj->changed) in igt_atomic_commit()
3362 if (plane->ref->pipe != pipe_obj) in igt_atomic_commit()
3365 if (plane->changed) in igt_atomic_commit()
3371 for (i = 0; i < display->n_outputs; i++) { in igt_atomic_commit()
3372 output = &display->outputs[i]; in igt_atomic_commit()
3374 if (!output->config.connector || !output->changed) in igt_atomic_commit()
3379 kmstest_pipe_name(output->config.pipe)); in igt_atomic_commit()
3384 ret = drmModeAtomicCommit(display->drm_fd, req, flags, user_data); in igt_atomic_commit()
3398 igt_pipe_t *pipe_obj = &display->pipes[pipe]; in display_commit_changed()
3403 igt_assert(pipe_obj->out_fence_fd >= 0); in display_commit_changed()
3405 pipe_obj->values[IGT_CRTC_OUT_FENCE_PTR] = 0; in display_commit_changed()
3406 pipe_obj->changed = 0; in display_commit_changed()
3421 plane->changed = 0; in display_commit_changed()
3423 fd = plane->values[IGT_PLANE_IN_FENCE_FD]; in display_commit_changed()
3424 if (fd != -1) in display_commit_changed()
3428 plane->values[IGT_PLANE_IN_FENCE_FD] = -1; in display_commit_changed()
3430 plane->changed &= ~IGT_PLANE_COORD_CHANGED_MASK; in display_commit_changed()
3436 !(plane->type == DRM_PLANE_TYPE_PRIMARY || in display_commit_changed()
3437 plane->type == DRM_PLANE_TYPE_CURSOR)) in display_commit_changed()
3438 plane->changed &= ~LEGACY_PLANE_COMMIT_MASK; in display_commit_changed()
3440 if (display->first_commit) in display_commit_changed()
3446 for (i = 0; i < display->n_outputs; i++) { in display_commit_changed()
3447 igt_output_t *output = &display->outputs[i]; in display_commit_changed()
3450 output->changed = 0; in display_commit_changed()
3453 output->changed &= 1 << IGT_CONNECTOR_CRTC_ID; in display_commit_changed()
3456 if (display->first_commit) { in display_commit_changed()
3457 igt_reset_fifo_underrun_reporting(display->drm_fd); in display_commit_changed()
3461 display->first_commit = false; in display_commit_changed()
3483 assert(display->n_pipes && display->n_outputs); in do_display_commit()
3491 igt_pipe_t *pipe_obj = &display->pipes[pipe]; in do_display_commit()
3498 for (i = 0; !ret && i < display->n_outputs; i++) in do_display_commit()
3499 ret = igt_output_commit(&display->outputs[i], s, fail_on_error); in do_display_commit()
3536 assert(display->n_pipes && display->n_outputs); in igt_display_try_commit_atomic()
3549 if (display->first_commit) in igt_display_try_commit_atomic()
3621 * Note that in non-atomic commit styles, no display programming will be
3669 .fd = display->drm_fd, in igt_display_drop_events()
3678 retval = read(display->drm_fd, &buf, sizeof(buf)); in igt_display_drop_events()
3681 for (int i = 0; i < retval; i += ev->length) { in igt_display_drop_events()
3684 igt_info("Dropping event type %u length %u\n", ev->type, ev->length); in igt_display_drop_events()
3685 igt_assert(ev->length + i <= sizeof(buf)); in igt_display_drop_events()
3697 * Returns: String representing a connector's name, e.g. "DP-1".
3701 return output->name; in igt_output_name()
3714 if (output->use_override_mode) in igt_output_get_mode()
3715 return &output->override_mode; in igt_output_get_mode()
3717 return &output->config.default_mode; in igt_output_get_mode()
3734 output->override_mode = *mode; in igt_output_override_mode()
3736 output->use_override_mode = !!mode; in igt_output_override_mode()
3739 if (output->display->is_atomic) in igt_output_override_mode()
3757 igt_display_t *display = output->display; in igt_output_set_pipe()
3760 igt_assert(output->name); in igt_output_set_pipe()
3762 if (output->pending_pipe != PIPE_NONE) in igt_output_set_pipe()
3766 pipe_obj = &display->pipes[pipe]; in igt_output_set_pipe()
3770 output->pending_pipe = pipe; in igt_output_set_pipe()
3777 if (display->is_atomic) in igt_output_set_pipe()
3786 …igt_output_set_prop_value(output, IGT_CONNECTOR_CRTC_ID, pipe == PIPE_NONE ? 0 : display->pipes[pi… in igt_output_set_pipe()
3791 if (display->is_atomic) in igt_output_set_pipe()
3814 igt_pipe_t *pipe_obj = &display->pipes[pipe]; in igt_pipe_refresh()
3816 if (force && display->is_atomic) { in igt_pipe_refresh()
3819 pipe_obj->values[IGT_CRTC_MODE_ID] = 0; in igt_pipe_refresh()
3904 igt_pipe_t *pipe = plane->pipe; in igt_plane_set_fb()
3905 igt_display_t *display = pipe->display; in igt_plane_set_fb()
3907 LOG(display, "%s.%d: plane_set_fb(%d)\n", kmstest_pipe_name(pipe->pipe), in igt_plane_set_fb()
3908 plane->index, fb ? fb->fb_id : 0); in igt_plane_set_fb()
3910 igt_plane_set_prop_value(plane, IGT_PLANE_CRTC_ID, fb ? pipe->crtc_id : 0); in igt_plane_set_fb()
3911 igt_plane_set_prop_value(plane, IGT_PLANE_FB_ID, fb ? fb->fb_id : 0); in igt_plane_set_fb()
3913 if (plane->type == DRM_PLANE_TYPE_CURSOR && fb) in igt_plane_set_fb()
3914 plane->gem_handle = fb->gem_handle; in igt_plane_set_fb()
3916 plane->gem_handle = 0; in igt_plane_set_fb()
3921 igt_plane_set_size(plane, fb->width, fb->height); in igt_plane_set_fb()
3925 igt_fb_set_size(fb, plane, fb->width, fb->height); in igt_plane_set_fb()
3929 igt_color_encoding_to_str(fb->color_encoding)); in igt_plane_set_fb()
3932 igt_color_range_to_str(fb->color_range)); in igt_plane_set_fb()
3948 * @fence_fd: fence fd, disable fence_fd by setting it to -1
3957 fd = plane->values[IGT_PLANE_IN_FENCE_FD]; in igt_plane_set_fence_fd()
3958 if (fd != -1) in igt_plane_set_fence_fd()
3961 if (fence_fd != -1) { in igt_plane_set_fence_fd()
3963 igt_fail_on(fd == -1); in igt_plane_set_fence_fd()
3965 fd = -1; in igt_plane_set_fence_fd()
3983 plane->ref->ref = plane; in igt_plane_set_pipe()
3984 plane->ref->pipe = pipe; in igt_plane_set_pipe()
3998 igt_pipe_t *pipe = plane->pipe; in igt_plane_set_position()
3999 igt_display_t *display = pipe->display; in igt_plane_set_position()
4002 kmstest_pipe_name(pipe->pipe), plane->index, x, y); in igt_plane_set_position()
4020 igt_pipe_t *pipe = plane->pipe; in igt_plane_set_size()
4021 igt_display_t *display = pipe->display; in igt_plane_set_size()
4024 kmstest_pipe_name(pipe->pipe), plane->index, w, h); in igt_plane_set_size()
4043 igt_pipe_t *pipe = plane->pipe; in igt_fb_set_position()
4044 igt_display_t *display = pipe->display; in igt_fb_set_position()
4047 kmstest_pipe_name(pipe->pipe), plane->index, x, y); in igt_fb_set_position()
4067 igt_pipe_t *pipe = plane->pipe; in igt_fb_set_size()
4068 igt_display_t *display = pipe->display; in igt_fb_set_size()
4071 kmstest_pipe_name(pipe->pipe), plane->index, w, h); in igt_fb_set_size()
4104 igt_pipe_t *pipe = plane->pipe; in igt_plane_set_rotation()
4105 igt_display_t *display = pipe->display; in igt_plane_set_rotation()
4108 kmstest_pipe_name(pipe->pipe), in igt_plane_set_rotation()
4109 plane->index, rotation_name(rotation)); in igt_plane_set_rotation()
4123 igt_pipe_obj_set_prop_value(pipe, IGT_CRTC_OUT_FENCE_PTR, (ptrdiff_t)&pipe->out_fence_fd); in igt_pipe_request_out_fence()
4179 for (int i = 0; i < res->count_connectors; i++) { in igt_enable_connectors()
4183 c = drmModeGetConnector(drm_fd, res->connectors[i]); in igt_enable_connectors()
4185 igt_warn("Could not read connector %u: %m\n", res->connectors[i]); in igt_enable_connectors()
4191 if (c->connection == DRM_MODE_CONNECTED) in igt_enable_connectors()
4195 if (c->connector_type == DRM_MODE_CONNECTOR_VGA) { in igt_enable_connectors()
4197 igt_info("Unable to force state on %s-%d\n", in igt_enable_connectors()
4198 kmstest_connector_type_str(c->connector_type), in igt_enable_connectors()
4199 c->connector_type_id); in igt_enable_connectors()
4256 igt_assert_neq(fcntl(fd, F_SETFL, flags), -1); in igt_watch_hotplug()
4264 struct udev_device *dev; in event_detected() local
4278 dev = udev_monitor_receive_device(mon); in event_detected()
4280 hotplug_val = udev_device_get_property_value(dev, property); in event_detected()
4284 udev_device_unref(dev); in event_detected()
4326 struct udev_device *dev; in igt_flush_hotplugs() local
4328 while ((dev = udev_monitor_receive_device(mon))) in igt_flush_hotplugs()
4329 udev_device_unref(dev); in igt_flush_hotplugs()
4371 return (const uint32_t *)((const char *)blob + blob->formats_offset); in formats_ptr()
4377 return (const struct drm_format_modifier *)((const char *)blob + blob->modifiers_offset); in modifiers_ptr()
4387 for (int i = 0; i < blob_data->count_modifiers; i++) in igt_count_plane_format_mod()
4402 drmModePlanePtr p = plane->drm_plane; in igt_fill_plane_format_mod()
4404 count = p->count_formats; in igt_fill_plane_format_mod()
4406 plane->format_mod_count = count; in igt_fill_plane_format_mod()
4407 plane->formats = calloc(count, sizeof(plane->formats[0])); in igt_fill_plane_format_mod()
4408 igt_assert(plane->formats); in igt_fill_plane_format_mod()
4409 plane->modifiers = calloc(count, sizeof(plane->modifiers[0])); in igt_fill_plane_format_mod()
4410 igt_assert(plane->modifiers); in igt_fill_plane_format_mod()
4417 plane->formats[i] = p->formats[i]; in igt_fill_plane_format_mod()
4418 plane->modifiers[i] = DRM_FORMAT_MOD_LINEAR; in igt_fill_plane_format_mod()
4426 blob = drmModeGetPropertyBlob(display->drm_fd, blob_id); in igt_fill_plane_format_mod()
4430 blob_data = (const struct drm_format_modifier_blob *) blob->data; in igt_fill_plane_format_mod()
4436 plane->format_mod_count = count; in igt_fill_plane_format_mod()
4437 plane->formats = calloc(count, sizeof(plane->formats[0])); in igt_fill_plane_format_mod()
4438 igt_assert(plane->formats); in igt_fill_plane_format_mod()
4439 plane->modifiers = calloc(count, sizeof(plane->modifiers[0])); in igt_fill_plane_format_mod()
4440 igt_assert(plane->modifiers); in igt_fill_plane_format_mod()
4442 for (int i = 0; i < blob_data->count_modifiers; i++) { in igt_fill_plane_format_mod()
4451 plane->formats[idx] = formats[modifiers[i].offset + j]; in igt_fill_plane_format_mod()
4452 plane->modifiers[idx] = modifiers[i].modifier; in igt_fill_plane_format_mod()
4454 igt_assert_lte(idx, plane->format_mod_count); in igt_fill_plane_format_mod()
4458 igt_assert_eq(idx, plane->format_mod_count); in igt_fill_plane_format_mod()
4466 for (i = 0; i < plane->format_mod_count; i++) { in igt_plane_has_format_mod()
4467 if (plane->formats[i] == format && in igt_plane_has_format_mod()
4468 plane->modifiers[i] == modifier) in igt_plane_has_format_mod()
4485 count += plane->format_mod_count; in igt_count_display_format_mod()
4498 for (i = 0; i < display->format_mod_count; i++) { in igt_add_display_format_mod()
4499 if (display->formats[i] == format && in igt_add_display_format_mod()
4500 display->modifiers[i] == modifier) in igt_add_display_format_mod()
4505 display->formats[i] = format; in igt_add_display_format_mod()
4506 display->modifiers[i] = modifier; in igt_add_display_format_mod()
4507 display->format_mod_count++; in igt_add_display_format_mod()
4518 display->formats = calloc(count, sizeof(display->formats[0])); in igt_fill_display_format_mod()
4519 igt_assert(display->formats); in igt_fill_display_format_mod()
4520 display->modifiers = calloc(count, sizeof(display->modifiers[0])); in igt_fill_display_format_mod()
4521 igt_assert(display->modifiers); in igt_fill_display_format_mod()
4527 for (int i = 0; i < plane->format_mod_count; i++) { in igt_fill_display_format_mod()
4529 plane->formats[i], in igt_fill_display_format_mod()
4530 plane->modifiers[i]); in igt_fill_display_format_mod()
4531 igt_assert_lte(display->format_mod_count, count); in igt_fill_display_format_mod()
4542 for (i = 0; i < display->format_mod_count; i++) { in igt_display_has_format_mod()
4543 if (display->formats[i] == format && in igt_display_has_format_mod()
4544 display->modifiers[i] == modifier) in igt_display_has_format_mod()