Commit | Line | Data |
---|---|---|
35c3a2d0 MR |
1 | // SPDX-License-Identifier: GPL-2.0 |
2 | ||
44a39283 MR |
3 | #ifndef DRM_KUNIT_HELPERS_H_ |
4 | #define DRM_KUNIT_HELPERS_H_ | |
5 | ||
139a2785 TH |
6 | #include <linux/device.h> |
7 | ||
d9878031 MR |
8 | #include <kunit/test.h> |
9 | ||
44a39283 MR |
10 | struct drm_device; |
11 | struct kunit; | |
12 | ||
9ecd8045 MR |
13 | struct device *drm_kunit_helper_alloc_device(struct kunit *test); |
14 | void drm_kunit_helper_free_device(struct kunit *test, struct device *dev); | |
15 | ||
83ee69a8 | 16 | struct drm_device * |
d9878031 MR |
17 | __drm_kunit_helper_alloc_drm_device_with_driver(struct kunit *test, |
18 | struct device *dev, | |
19 | size_t size, size_t offset, | |
20 | const struct drm_driver *driver); | |
21 | ||
22 | /** | |
23 | * drm_kunit_helper_alloc_drm_device_with_driver - Allocates a mock DRM device for KUnit tests | |
24 | * @_test: The test context object | |
25 | * @_dev: The parent device object | |
26 | * @_type: the type of the struct which contains struct &drm_device | |
27 | * @_member: the name of the &drm_device within @_type. | |
28 | * @_drv: Mocked DRM device driver features | |
29 | * | |
30 | * This function creates a struct &drm_device from @_dev and @_drv. | |
31 | * | |
32 | * @_dev should be allocated using drm_kunit_helper_alloc_device(). | |
33 | * | |
34 | * The driver is tied to the @_test context and will get cleaned at the | |
35 | * end of the test. The drm_device is allocated through | |
36 | * devm_drm_dev_alloc() and will thus be freed through a device-managed | |
37 | * resource. | |
38 | * | |
39 | * Returns: | |
40 | * A pointer to the new drm_device, or an ERR_PTR() otherwise. | |
41 | */ | |
42 | #define drm_kunit_helper_alloc_drm_device_with_driver(_test, _dev, _type, _member, _drv) \ | |
43 | ((_type *)__drm_kunit_helper_alloc_drm_device_with_driver(_test, _dev, \ | |
44 | sizeof(_type), \ | |
45 | offsetof(_type, _member), \ | |
46 | _drv)) | |
47 | ||
48 | static inline struct drm_device * | |
49 | __drm_kunit_helper_alloc_drm_device(struct kunit *test, | |
50 | struct device *dev, | |
a9143c58 | 51 | size_t size, size_t offset, |
d9878031 MR |
52 | u32 features) |
53 | { | |
54 | struct drm_driver *driver; | |
55 | ||
139a2785 | 56 | driver = devm_kzalloc(dev, sizeof(*driver), GFP_KERNEL); |
d9878031 MR |
57 | KUNIT_ASSERT_NOT_NULL(test, driver); |
58 | ||
59 | driver->driver_features = features; | |
60 | ||
61 | return __drm_kunit_helper_alloc_drm_device_with_driver(test, dev, | |
62 | size, offset, | |
63 | driver); | |
64 | } | |
a9143c58 MR |
65 | |
66 | /** | |
67 | * drm_kunit_helper_alloc_drm_device - Allocates a mock DRM device for KUnit tests | |
68 | * @_test: The test context object | |
69 | * @_dev: The parent device object | |
70 | * @_type: the type of the struct which contains struct &drm_device | |
71 | * @_member: the name of the &drm_device within @_type. | |
72 | * @_features: Mocked DRM device driver features | |
73 | * | |
74 | * This function creates a struct &drm_driver and will create a struct | |
75 | * &drm_device from @_dev and that driver. | |
76 | * | |
77 | * @_dev should be allocated using drm_kunit_helper_alloc_device(). | |
78 | * | |
79 | * The driver is tied to the @_test context and will get cleaned at the | |
80 | * end of the test. The drm_device is allocated through | |
81 | * devm_drm_dev_alloc() and will thus be freed through a device-managed | |
82 | * resource. | |
83 | * | |
84 | * Returns: | |
85 | * A pointer to the new drm_device, or an ERR_PTR() otherwise. | |
86 | */ | |
87 | #define drm_kunit_helper_alloc_drm_device(_test, _dev, _type, _member, _feat) \ | |
88 | ((_type *)__drm_kunit_helper_alloc_drm_device(_test, _dev, \ | |
89 | sizeof(_type), \ | |
90 | offsetof(_type, _member), \ | |
91 | _feat)) | |
6e193f9f MR |
92 | struct drm_modeset_acquire_ctx * |
93 | drm_kunit_helper_acquire_ctx_alloc(struct kunit *test); | |
44a39283 | 94 | |
394ba10e MR |
95 | struct drm_atomic_state * |
96 | drm_kunit_helper_atomic_state_alloc(struct kunit *test, | |
97 | struct drm_device *drm, | |
98 | struct drm_modeset_acquire_ctx *ctx); | |
99 | ||
44a39283 | 100 | #endif // DRM_KUNIT_HELPERS_H_ |