@@ -6,6 +6,12 @@
MODULE_IMPORT_NS("EXPORTED_FOR_KUNIT_TESTING");
+struct default_config_case {
+ bool enable_cursor;
+ bool enable_writeback;
+ bool enable_overlay;
+};
+
static void vkms_config_test_empty_config(struct kunit *test)
{
struct vkms_config *config;
@@ -16,8 +22,40 @@ static void vkms_config_test_empty_config(struct kunit *test)
vkms_config_destroy(config);
}
+static struct default_config_case default_config_cases[] = {
+ { false, false, false },
+ { true, false, false },
+ { true, true, false },
+ { true, false, true },
+ { false, true, false },
+ { false, true, true },
+ { false, false, true },
+ { true, true, true },
+};
+
+KUNIT_ARRAY_PARAM(default_config, default_config_cases, NULL);
+
+static void vkms_config_test_default_config(struct kunit *test)
+{
+ const struct default_config_case *params = test->param_value;
+ struct vkms_config *config;
+
+ config = vkms_config_default_create(params->enable_cursor,
+ params->enable_writeback,
+ params->enable_overlay);
+ KUNIT_ASSERT_NOT_ERR_OR_NULL(test, config);
+
+ KUNIT_EXPECT_EQ(test, config->cursor, params->enable_cursor);
+ KUNIT_EXPECT_EQ(test, config->writeback, params->enable_writeback);
+ KUNIT_EXPECT_EQ(test, config->overlay, params->enable_overlay);
+
+ vkms_config_destroy(config);
+}
+
static struct kunit_case vkms_config_test_cases[] = {
KUNIT_CASE(vkms_config_test_empty_config),
+ KUNIT_CASE_PARAM(vkms_config_test_default_config,
+ default_config_gen_params),
{}
};
@@ -18,6 +18,23 @@ struct vkms_config *vkms_config_create(void)
return config;
}
+struct vkms_config *vkms_config_default_create(bool enable_cursor,
+ bool enable_writeback,
+ bool enable_overlay)
+{
+ struct vkms_config *config;
+
+ config = vkms_config_create();
+ if (IS_ERR(config))
+ return config;
+
+ config->cursor = enable_cursor;
+ config->writeback = enable_writeback;
+ config->overlay = enable_overlay;
+
+ return config;
+}
+
void vkms_config_destroy(struct vkms_config *config)
{
kfree(config);
@@ -31,6 +31,20 @@ struct vkms_config {
*/
struct vkms_config *vkms_config_create(void);
+/**
+ * vkms_config_default_create() - Create the configuration for the default device
+ * @enable_cursor: Create or not a cursor plane
+ * @enable_writeback: Create or not a writeback connector
+ * @enable_overlay: Create or not overlay planes
+ *
+ * Returns:
+ * The default vkms_config or an error. Call vkms_config_destroy() to free the
+ * returned configuration.
+ */
+struct vkms_config *vkms_config_default_create(bool enable_cursor,
+ bool enable_writeback,
+ bool enable_overlay);
+
/**
* vkms_config_destroy() - Free a VKMS configuration
* @config: vkms_config to free
@@ -211,16 +211,12 @@ static int __init vkms_init(void)
int ret;
struct vkms_config *config;
- config = vkms_config_create();
+ config = vkms_config_default_create(enable_cursor, enable_writeback, enable_overlay);
if (IS_ERR(config))
return PTR_ERR(config);
default_config = config;
- config->cursor = enable_cursor;
- config->writeback = enable_writeback;
- config->overlay = enable_overlay;
-
ret = vkms_create(config);
if (ret)
vkms_config_destroy(config);