drivers/gpu/drm/tests/drm_bridge_test.c
Source file repositories/reference/linux-study-clean/drivers/gpu/drm/tests/drm_bridge_test.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/gpu/drm/tests/drm_bridge_test.c- Extension
.c- Size
- 14193 bytes
- Lines
- 520
- Domain
- Driver Families
- Bucket
- drivers/gpu
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
drm/drm_atomic_state_helper.hdrm/drm_bridge.hdrm/drm_bridge_connector.hdrm/drm_bridge_helper.hdrm/drm_kunit_helpers.hkunit/device.hkunit/test.h
Detected Declarations
struct drm_bridge_privstruct drm_bridge_init_privfunction drm_test_bridge_priv_destroyfunction drm_test_bridge_enablefunction drm_test_bridge_disablefunction drm_test_bridge_atomic_enablefunction drm_test_bridge_atomic_disablefunction drm_kunit_bridge_addfunction drm_test_bridge_initfunction drm_bridge_get_current_statefunction drm_bridge_get_current_statefunction drm_bridge_helper_reset_crtcfunction drm_bridge_helper_reset_crtcfunction drm_bridge_helper_reset_crtcfunction drm_test_bridge_alloc_initfunction drm_test_drm_bridge_alloc_basicfunction drm_test_drm_bridge_alloc_get_put
Annotated Snippet
struct drm_bridge_priv {
unsigned int enable_count;
unsigned int disable_count;
struct drm_bridge bridge;
void *data;
};
struct drm_bridge_init_priv {
struct drm_device drm;
/** @dev: device, only for tests not needing a whole drm_device */
struct device *dev;
struct drm_plane *plane;
struct drm_crtc *crtc;
struct drm_encoder encoder;
struct drm_bridge_priv *test_bridge;
struct drm_connector *connector;
bool destroyed;
};
static struct drm_bridge_priv *bridge_to_priv(struct drm_bridge *bridge)
{
return container_of(bridge, struct drm_bridge_priv, bridge);
}
static void drm_test_bridge_priv_destroy(struct drm_bridge *bridge)
{
struct drm_bridge_priv *bridge_priv = bridge_to_priv(bridge);
struct drm_bridge_init_priv *priv = (struct drm_bridge_init_priv *)bridge_priv->data;
priv->destroyed = true;
}
static void drm_test_bridge_enable(struct drm_bridge *bridge)
{
struct drm_bridge_priv *priv = bridge_to_priv(bridge);
priv->enable_count++;
}
static void drm_test_bridge_disable(struct drm_bridge *bridge)
{
struct drm_bridge_priv *priv = bridge_to_priv(bridge);
priv->disable_count++;
}
static const struct drm_bridge_funcs drm_test_bridge_legacy_funcs = {
.destroy = drm_test_bridge_priv_destroy,
.enable = drm_test_bridge_enable,
.disable = drm_test_bridge_disable,
};
static void drm_test_bridge_atomic_enable(struct drm_bridge *bridge,
struct drm_atomic_commit *state)
{
struct drm_bridge_priv *priv = bridge_to_priv(bridge);
priv->enable_count++;
}
static void drm_test_bridge_atomic_disable(struct drm_bridge *bridge,
struct drm_atomic_commit *state)
{
struct drm_bridge_priv *priv = bridge_to_priv(bridge);
priv->disable_count++;
}
static const struct drm_bridge_funcs drm_test_bridge_atomic_funcs = {
.destroy = drm_test_bridge_priv_destroy,
.atomic_enable = drm_test_bridge_atomic_enable,
.atomic_disable = drm_test_bridge_atomic_disable,
.atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
.atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state,
.atomic_reset = drm_atomic_helper_bridge_reset,
};
KUNIT_DEFINE_ACTION_WRAPPER(drm_bridge_remove_wrapper,
drm_bridge_remove,
struct drm_bridge *);
static int drm_kunit_bridge_add(struct kunit *test,
struct drm_bridge *bridge)
{
drm_bridge_add(bridge);
return kunit_add_action_or_reset(test,
drm_bridge_remove_wrapper,
bridge);
}
Annotation
- Immediate include surface: `drm/drm_atomic_state_helper.h`, `drm/drm_bridge.h`, `drm/drm_bridge_connector.h`, `drm/drm_bridge_helper.h`, `drm/drm_kunit_helpers.h`, `kunit/device.h`, `kunit/test.h`.
- Detected declarations: `struct drm_bridge_priv`, `struct drm_bridge_init_priv`, `function drm_test_bridge_priv_destroy`, `function drm_test_bridge_enable`, `function drm_test_bridge_disable`, `function drm_test_bridge_atomic_enable`, `function drm_test_bridge_atomic_disable`, `function drm_kunit_bridge_add`, `function drm_test_bridge_init`, `function drm_bridge_get_current_state`.
- Atlas domain: Driver Families / drivers/gpu.
- Implementation status: source implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.