include/drm/display/drm_dp_tunnel.h

Source file repositories/reference/linux-study-clean/include/drm/display/drm_dp_tunnel.h

File Facts

System
Linux kernel
Corpus path
include/drm/display/drm_dp_tunnel.h
Extension
.h
Size
6555 bytes
Lines
255
Domain
Repository Root And Misc
Bucket
include
Inferred role
Repository Root And Misc: implementation source
Status
source implementation candidate

Why This File Exists

Top-level or miscellaneous repository surface. Use this as map coverage unless a later manual pass promotes the file into a deeper subsystem dossier.

Dependency Surface

Detected Declarations

Annotated Snippet

struct drm_dp_tunnel_ref {
	struct drm_dp_tunnel *tunnel;
	struct ref_tracker *tracker;
};

#ifdef CONFIG_DRM_DISPLAY_DP_TUNNEL

struct drm_dp_tunnel *
drm_dp_tunnel_get(struct drm_dp_tunnel *tunnel, struct ref_tracker **tracker);

void
drm_dp_tunnel_put(struct drm_dp_tunnel *tunnel, struct ref_tracker **tracker);

static inline void drm_dp_tunnel_ref_get(struct drm_dp_tunnel *tunnel,
					 struct drm_dp_tunnel_ref *tunnel_ref)
{
	tunnel_ref->tunnel = drm_dp_tunnel_get(tunnel, &tunnel_ref->tracker);
}

static inline void drm_dp_tunnel_ref_put(struct drm_dp_tunnel_ref *tunnel_ref)
{
	drm_dp_tunnel_put(tunnel_ref->tunnel, &tunnel_ref->tracker);
	tunnel_ref->tunnel = NULL;
}

struct drm_dp_tunnel *
drm_dp_tunnel_detect(struct drm_dp_tunnel_mgr *mgr,
		     struct drm_dp_aux *aux);
int drm_dp_tunnel_destroy(struct drm_dp_tunnel *tunnel);

int drm_dp_tunnel_enable_bw_alloc(struct drm_dp_tunnel *tunnel);
int drm_dp_tunnel_disable_bw_alloc(struct drm_dp_tunnel *tunnel);
bool drm_dp_tunnel_bw_alloc_is_enabled(const struct drm_dp_tunnel *tunnel);
bool drm_dp_tunnel_pr_optimization_supported(const struct drm_dp_tunnel *tunnel);
int drm_dp_tunnel_alloc_bw(struct drm_dp_tunnel *tunnel, int bw);
int drm_dp_tunnel_get_allocated_bw(struct drm_dp_tunnel *tunnel);
int drm_dp_tunnel_update_state(struct drm_dp_tunnel *tunnel);

void drm_dp_tunnel_set_io_error(struct drm_dp_tunnel *tunnel);

int drm_dp_tunnel_handle_irq(struct drm_dp_tunnel_mgr *mgr,
			     struct drm_dp_aux *aux);

int drm_dp_tunnel_max_dprx_rate(const struct drm_dp_tunnel *tunnel);
int drm_dp_tunnel_max_dprx_lane_count(const struct drm_dp_tunnel *tunnel);
int drm_dp_tunnel_available_bw(const struct drm_dp_tunnel *tunnel);

const char *drm_dp_tunnel_name(const struct drm_dp_tunnel *tunnel);

struct drm_dp_tunnel_state *
drm_dp_tunnel_atomic_get_state(struct drm_atomic_commit *state,
			       struct drm_dp_tunnel *tunnel);

struct drm_dp_tunnel_state *
drm_dp_tunnel_atomic_get_old_state(struct drm_atomic_commit *state,
				   const struct drm_dp_tunnel *tunnel);

struct drm_dp_tunnel_state *
drm_dp_tunnel_atomic_get_new_state(struct drm_atomic_commit *state,
				   const struct drm_dp_tunnel *tunnel);

int drm_dp_tunnel_atomic_set_stream_bw(struct drm_atomic_commit *state,
				       struct drm_dp_tunnel *tunnel,
				       u8 stream_id, int bw);
int drm_dp_tunnel_atomic_get_group_streams_in_state(struct drm_atomic_commit *state,
						    const struct drm_dp_tunnel *tunnel,
						    u32 *stream_mask);

int drm_dp_tunnel_atomic_check_stream_bws(struct drm_atomic_commit *state,
					  u32 *failed_stream_mask);

int drm_dp_tunnel_atomic_get_required_bw(const struct drm_dp_tunnel_state *tunnel_state);

struct drm_dp_tunnel_mgr *
drm_dp_tunnel_mgr_create(struct drm_device *dev, int max_group_count);
void drm_dp_tunnel_mgr_destroy(struct drm_dp_tunnel_mgr *mgr);

#else

static inline struct drm_dp_tunnel *
drm_dp_tunnel_get(struct drm_dp_tunnel *tunnel, struct ref_tracker **tracker)
{
	return NULL;
}

static inline void
drm_dp_tunnel_put(struct drm_dp_tunnel *tunnel, struct ref_tracker **tracker) {}

static inline void drm_dp_tunnel_ref_get(struct drm_dp_tunnel *tunnel,
					 struct drm_dp_tunnel_ref *tunnel_ref) {}

Annotation

Implementation Notes