// SPDX-License-Identifier: GPL-2.0 #include #include #include #include #include "drm_kunit_helpers.h" struct kunit_dev { struct drm_device base; }; static const struct drm_mode_config_funcs drm_mode_config_funcs = { }; static int dev_init(struct kunit_resource *res, void *ptr) { char *name = ptr; struct device *dev; dev = root_device_register(name); if (IS_ERR(dev)) return PTR_ERR(dev); res->data = dev; return 0; } static void dev_free(struct kunit_resource *res) { struct device *dev = res->data; root_device_unregister(dev); } struct drm_device *drm_kunit_device_init(struct kunit *test, u32 features, char *name) { struct kunit_dev *kdev; struct drm_device *drm; struct drm_driver *driver; struct device *dev; int ret; dev = kunit_alloc_resource(test, dev_init, dev_free, GFP_KERNEL, name); if (!dev) return ERR_PTR(-ENOMEM); driver = kunit_kzalloc(test, sizeof(*driver), GFP_KERNEL); if (!driver) return ERR_PTR(-ENOMEM); driver->driver_features = features; kdev = devm_drm_dev_alloc(dev, driver, struct kunit_dev, base); if (IS_ERR(kdev)) return ERR_CAST(kdev); drm = &kdev->base; drm->mode_config.funcs = &drm_mode_config_funcs; ret = drmm_mode_config_init(drm); if (ret) return ERR_PTR(ret); return drm; } MODULE_AUTHOR("Maxime Ripard "); MODULE_LICENSE("GPL");