STRUCT DRM_DP_MST_TOPOLOGY_MGR(9)
π NAME π
okay bestie, welcome to the Kernel API Manual page for struct drm_dp_mst_topology_mgr β the header shortens it to struct drm_d...topology_mgr(9), but we know the full name, periodt π
. This is the DisplayPort MST manager, and it's lowkey the main character of MST topology setup.
β¨ SYNOPSIS β¨
okay so here's the whole struct layout, copy-paste energy only bestie:
struct drm_dp_mst_topology_mgr {
struct drm_private_obj base;
struct drm_device *dev;
const struct drm_dp_mst_topology_cbs *cbs;
int max_dpcd_transaction_bytes;
struct drm_dp_aux *aux;
int max_payloads;
int conn_base_id;
struct drm_dp_sideband_msg_rx up_req_recv;
struct drm_dp_sideband_msg_rx down_rep_recv;
struct mutex lock;
struct mutex probe_lock;
bool mst_state : 1;
bool payload_id_table_cleared : 1;
bool reset_rx_state : 1;
u8 payload_count;
u8 next_start_slot;
struct drm_dp_mst_branch *mst_primary;
u8 dpcd[DP_RECEIVER_CAP_SIZE];
u8 sink_count;
const struct drm_private_state_funcs *funcs;
struct mutex qlock;
struct list_head tx_msg_downq;
wait_queue_head_t tx_waitq;
struct work_struct work;
struct work_struct tx_work;
struct list_head destroy_port_list;
struct list_head destroy_branch_device_list;
struct mutex delayed_destroy_lock;
struct workqueue_struct *delayed_destroy_wq;
struct work_struct delayed_destroy_work;
struct list_head up_req_list;
struct mutex up_req_lock;
struct work_struct up_req_work;
#if IS_ENABLED(CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS);
struct mutex topology_ref_history_lock;
#endif;
};
π«Ά Members π«Ά
baseβ Base private object for atomic, bestie. It's giving foundation energy β¨.devβ device pointer for adding i2c devices etc.cbsβ callbacks for connector addition and destruction.max_dpcd_transaction_bytesβ maximum number of bytes to read/write in one go. Don't try to do too much at once, okay? πauxβ AUX channel for the DP MST connector this topology manager is controlling.max_payloadsβ maximum number of payloads the GPU can generate.conn_base_idβ DRM connector ID this mgr is connected to. Only used to build the MST connector path value.up_req_recvβ Message receiver state for up requests.down_rep_recvβ Message receiver state for replies to down requests.lockβ protectsmst_state,mst_primary,dpcd, andpayload_id_table_cleared.probe_lockβ Preventsworkandup_req_work, the only writers ofdrm_dp_mst_port.mstbanddrm_dp_mst_branch.ports, from racing while they update the topology. no racing besties πmst_stateβ If this manager is enabled for an MST capable port. False if no MST sink/branch devices is connected.payload_id_table_clearedβ Whether or not we've cleared the payload ID table formst_primary. Protected bylock.reset_rx_stateβ The down request's reply and up request message receiver state must be reset, after the topology manager got removed. Protected bylock.payload_countβ The number of currently active payloads in hardware. This value is only intended to be used internally by MST helpers for payload tracking, and is only safe to read/write from the atomic commit (not check) context.next_start_slotβ The starting timeslot to use for new VC payloads. This value is used internally by MST helpers for payload tracking, and is only safe to read/write from the atomic commit (not check) context.mst_primaryβ Pointer to the primary/first branch device.dpcdβ Cache of DPCD for primary port.sink_countβ Sink count fromDEVICE_SERVICE_IRQ_VECTOR_ESI0.funcsβ Atomic helper callbacks.qlockβ protectstx_msg_downqanddrm_dp_sideband_msg_tx.state.tx_msg_downqβ List of pending down requests.tx_waitqβ Wait to queue stall for the tx worker.workβ Probe work.tx_workβ Sideband transmit worker. This can nest within the mainworkworker for each transaction work launches.destroy_port_listβ List of to be destroyed connectors.destroy_branch_device_listβ List of to be destroyed branch devices.delayed_destroy_lockβ Protectsdestroy_port_listanddestroy_branch_device_list.delayed_destroy_wqβ Workqueue used fordelayed_destroy_workitems. A dedicated WQ makes it possible to drain any requeued work items on it.delayed_destroy_workβ Work item to destroy MST port and branch devices, needed to avoid locking inversion.up_req_listβ List of pending up requests from the topology that need to be processed, in chronological order.up_req_lockβ Protectsup_req_list.up_req_workβ Work item to process up requests received from the topology. Needed to avoid blocking hotplug handling and sideband transmissions.topology_ref_history_lockβ protectsdrm_dp_mst_port.topology_ref_historyanddrm_dp_mst_branch.topology_ref_history. This one is inside the#if IS_ENABLED(CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS);situation, iykyk π«Ά.
bestie, forpayload_countandnext_start_slot: only safe to read/write from the atomic commit (not check) context. Do not mess with that vibe check π.
πΈ Description πΈ
This struct represents the toplevel displayport MST topology manager. There should be one instance of this for every MST capable DP connector on the GPU. fr fr, one per capable connector β that's the assignment π.
π SEE ALSO π
- Kernel file
./include/drm/display/drm_dp_mst_helper.h struct drm_dp_mst_port(9)struct drm_dp_mst_branch(9)struct drm_dp_mst_atomic_payload(9)struct drm_dp_mst_topology_state(9)enum drm_dp_mst_mode(9)__drm_dp_mst_state_iter_get(9)for_each_oldnew_mst_mgr_in_state(9)for_each_old_mst_mgr_in_state(9)for_each_new_mst_mgr_in_state(9)
mwah π this page is from ./include/drm/display, dated October 2026, and the footer title is struct drm_d...topology_mgr(9). byeee bestie, go read the header and slay ππ
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms