| 1 |
|
| 2 |
|
| 3 |
|
| 4 | #ifndef __DRM_INTEL_DISPLAY_H__
|
| 5 | #define __DRM_INTEL_DISPLAY_H__
|
| 6 |
|
| 7 | #include <linux/build_bug.h>
|
| 8 | #include <linux/stddef.h>
|
| 9 | #include <linux/stringify.h>
|
| 10 |
|
| 11 | #include <drm/drm_device.h>
|
| 12 |
|
| 13 | struct intel_display;
|
| 14 |
|
| 15 | |
| 16 | * A dummy device struct to define the relative offsets of drm and display
|
| 17 | * members. With the members identically placed in struct drm_i915_private and
|
| 18 | * struct xe_device, this allows figuring out the struct intel_display pointer
|
| 19 | * without the definition of either driver specific structure.
|
| 20 |
|
| 21 | struct __intel_generic_device {
|
| 22 | struct drm_device drm;
|
| 23 | struct intel_display *display;
|
| 24 | };
|
| 25 |
|
| 26 | |
| 27 | * INTEL_DISPLAY_MEMBER_STATIC_ASSERT() - ensure correct placing of drm and display members
|
| 28 | * @type: The struct to check
|
| 29 | * @drm_member: Name of the struct drm_device member
|
| 30 | * @display_member: Name of the struct intel_display * member.
|
| 31 | *
|
| 32 | * Use this static assert macro to ensure the struct drm_i915_private and struct
|
| 33 | * xe_device struct drm_device and struct intel_display * members are at the
|
| 34 | * same relative offsets.
|
| 35 |
|
| 36 | #define INTEL_DISPLAY_MEMBER_STATIC_ASSERT(type, drm_member, display_member) \
|
| 37 | static_assert( \
|
| 38 | offsetof(struct __intel_generic_device, display) - offsetof(struct __intel_generic_device, drm) == \
|
| 39 | offsetof(type, display_member) - offsetof(type, drm_member), \
|
| 40 | __stringify(type) " " __stringify(drm_member) " and " __stringify(display_member) " members at invalid offsets")
|
| 41 |
|
| 42 | #endif
|