Lines Matching refs:config
13 struct vkms_config *config;
15 config = kzalloc(sizeof(*config), GFP_KERNEL);
16 if (!config)
19 config->dev_name = kstrdup_const(dev_name, GFP_KERNEL);
20 if (!config->dev_name) {
21 kfree(config);
25 INIT_LIST_HEAD(&config->planes);
26 INIT_LIST_HEAD(&config->crtcs);
27 INIT_LIST_HEAD(&config->encoders);
28 INIT_LIST_HEAD(&config->connectors);
30 return config;
38 struct vkms_config *config;
45 config = vkms_config_create(DEFAULT_DEVICE_NAME);
46 if (IS_ERR(config))
47 return config;
49 plane_cfg = vkms_config_create_plane(config);
54 crtc_cfg = vkms_config_create_crtc(config);
64 plane_cfg = vkms_config_create_plane(config);
77 plane_cfg = vkms_config_create_plane(config);
87 encoder_cfg = vkms_config_create_encoder(config);
94 connector_cfg = vkms_config_create_connector(config);
101 return config;
104 vkms_config_destroy(config);
109 void vkms_config_destroy(struct vkms_config *config)
116 list_for_each_entry_safe(plane_cfg, plane_tmp, &config->planes, link)
119 list_for_each_entry_safe(crtc_cfg, crtc_tmp, &config->crtcs, link)
120 vkms_config_destroy_crtc(config, crtc_cfg);
122 list_for_each_entry_safe(encoder_cfg, encoder_tmp, &config->encoders, link)
123 vkms_config_destroy_encoder(config, encoder_cfg);
125 list_for_each_entry_safe(connector_cfg, connector_tmp, &config->connectors, link)
128 kfree_const(config->dev_name);
129 kfree(config);
133 static bool valid_plane_number(const struct vkms_config *config)
135 struct drm_device *dev = config->dev ? &config->dev->drm : NULL;
138 n_planes = list_count_nodes((struct list_head *)&config->planes);
147 static bool valid_planes_for_crtc(const struct vkms_config *config,
150 struct drm_device *dev = config->dev ? &config->dev->drm : NULL;
155 vkms_config_for_each_plane(config, plane_cfg) {
192 static bool valid_plane_possible_crtcs(const struct vkms_config *config)
194 struct drm_device *dev = config->dev ? &config->dev->drm : NULL;
197 vkms_config_for_each_plane(config, plane_cfg) {
207 static bool valid_crtc_number(const struct vkms_config *config)
209 struct drm_device *dev = config->dev ? &config->dev->drm : NULL;
212 n_crtcs = list_count_nodes((struct list_head *)&config->crtcs);
221 static bool valid_encoder_number(const struct vkms_config *config)
223 struct drm_device *dev = config->dev ? &config->dev->drm : NULL;
226 n_encoders = list_count_nodes((struct list_head *)&config->encoders);
235 static bool valid_encoder_possible_crtcs(const struct vkms_config *config)
237 struct drm_device *dev = config->dev ? &config->dev->drm : NULL;
241 vkms_config_for_each_encoder(config, encoder_cfg) {
248 vkms_config_for_each_crtc(config, crtc_cfg) {
251 vkms_config_for_each_encoder(config, encoder_cfg) {
271 static bool valid_connector_number(const struct vkms_config *config)
273 struct drm_device *dev = config->dev ? &config->dev->drm : NULL;
276 n_connectors = list_count_nodes((struct list_head *)&config->connectors);
285 static bool valid_connector_possible_encoders(const struct vkms_config *config)
287 struct drm_device *dev = config->dev ? &config->dev->drm : NULL;
290 vkms_config_for_each_connector(config, connector_cfg) {
301 bool vkms_config_is_valid(const struct vkms_config *config)
305 if (!valid_plane_number(config))
308 if (!valid_crtc_number(config))
311 if (!valid_encoder_number(config))
314 if (!valid_connector_number(config))
317 if (!valid_plane_possible_crtcs(config))
320 vkms_config_for_each_crtc(config, crtc_cfg) {
321 if (!valid_planes_for_crtc(config, crtc_cfg))
325 if (!valid_encoder_possible_crtcs(config))
328 if (!valid_connector_possible_encoders(config))
346 dev_name = vkms_config_get_device_name((struct vkms_config *)vkmsdev->config);
349 vkms_config_for_each_plane(vkmsdev->config, plane_cfg) {
355 vkms_config_for_each_crtc(vkmsdev->config, crtc_cfg) {
361 vkms_config_for_each_encoder(vkmsdev->config, encoder_cfg)
364 vkms_config_for_each_connector(vkmsdev->config, connector_cfg)
380 struct vkms_config_plane *vkms_config_create_plane(struct vkms_config *config)
388 plane_cfg->config = config;
392 list_add_tail(&plane_cfg->link, &config->planes);
413 if (plane_cfg->config != crtc_cfg->config)
439 struct vkms_config_crtc *vkms_config_create_crtc(struct vkms_config *config)
447 crtc_cfg->config = config;
450 list_add_tail(&crtc_cfg->link, &config->crtcs);
456 void vkms_config_destroy_crtc(struct vkms_config *config,
462 vkms_config_for_each_plane(config, plane_cfg)
465 vkms_config_for_each_encoder(config, encoder_cfg)
476 * @config: Configuration containing the CRTC and the plane
483 static struct vkms_config_plane *vkms_config_crtc_get_plane(const struct vkms_config *config,
492 vkms_config_for_each_plane(config, plane_cfg) {
504 struct vkms_config_plane *vkms_config_crtc_primary_plane(const struct vkms_config *config,
507 return vkms_config_crtc_get_plane(config, crtc_cfg, DRM_PLANE_TYPE_PRIMARY);
511 struct vkms_config_plane *vkms_config_crtc_cursor_plane(const struct vkms_config *config,
514 return vkms_config_crtc_get_plane(config, crtc_cfg, DRM_PLANE_TYPE_CURSOR);
518 struct vkms_config_encoder *vkms_config_create_encoder(struct vkms_config *config)
526 encoder_cfg->config = config;
529 list_add_tail(&encoder_cfg->link, &config->encoders);
535 void vkms_config_destroy_encoder(struct vkms_config *config,
540 vkms_config_for_each_connector(config, connector_cfg)
556 if (encoder_cfg->config != crtc_cfg->config)
582 struct vkms_config_connector *vkms_config_create_connector(struct vkms_config *config)
590 connector_cfg->config = config;
593 list_add_tail(&connector_cfg->link, &config->connectors);
614 if (connector_cfg->config != encoder_cfg->config)