STRUCT DRM_DP_MST_PORT(9)
π struct drm_dp_mst_port(9) π
okay so bestie, we're in the Kernel API Manual today and the star of the show is struct drm_dp_mst_port β literally the main character of MST topology. grab a strawberry drink π and let's get into it.
β¨ NAME β¨
struct drm_dp_mst_port β MST port. that's it, that's the vibe. short, iconic, no notes. π
π¦ SYNOPSIS π¦
here's the whole struct, copied exactly because we do not mess with source code:
struct drm_dp_mst_port {
struct kref topology_kref;
struct kref malloc_kref;
#if IS_ENABLED(CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS);
struct drm_dp_mst_topology_ref_history topology_ref_history;
#endif;
u8 port_num;
bool input;
bool mcs;
bool ddps;
u8 pdt;
bool ldps;
u8 dpcd_rev;
u8 num_sdp_streams;
u8 num_sdp_stream_sinks;
uint16_t full_pbn;
struct list_head next;
struct drm_dp_mst_branch *mstb;
struct drm_dp_aux aux;
struct drm_dp_aux *passthrough_aux;
struct drm_dp_mst_branch *parent;
struct drm_connector *connector;
struct drm_dp_mst_topology_mgr *mgr;
const struct drm_edid *cached_edid;
bool fec_capable;
};
like, look at all those fields. gorgeous. every single one gets an intro below, no skipping. π«Ά
π Members π
topology_krefβ the refcount for this port's lifetime in the topology. lowkey only the DP MST helpers should be touching this one, so hands off unless that's you. no cap.malloc_krefβ refcount for the memory allocation that contains this structure. peepdrm_dp_mst_get_port_mallocanddrm_dp_mst_put_port_mallocfor the whole story. πtopology_ref_historyβ a history of each topology reference/dereference. it's giving receipts. seeCONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS. (and yes, that's the one wrapped in the#ifabove π)port_numβ port number. simple, effective, slays.inputβ says whether this port is an input port. protected bydrm_dp_mst_topology_mgr.base.lock. πmcsβ message capability status, per the DP 1.2 spec. protected bydrm_dp_mst_topology_mgr.base.lock.ddpsβ DisplayPort Device Plug Status, DP 1.2. protected bydrm_dp_mst_topology_mgr.base.lock.pdtβ Peer Device Type. protected bydrm_dp_mst_topology_mgr.base.lock.ldpsβ Legacy Device Plug Status. protected bydrm_dp_mst_topology_mgr.base.lock.dpcd_revβ the DPCD revision of the device sitting on this port. protected bydrm_dp_mst_topology_mgr.base.lock.num_sdp_streamsβ number of simultaneous streams. protected bydrm_dp_mst_topology_mgr.base.lock.num_sdp_stream_sinksβ number of stream sinks. protected bydrm_dp_mst_topology_mgr.base.lock.full_pbnβ max possible bandwidth for this port. protected bydrm_dp_mst_topology_mgr.base.lock.nextβ link to the next port on this branch device. the chain continues πmstbβ the branch device connected to this port, if there is one. for reading, consider it protected bydrm_dp_mst_topology_mgr.lock. BUT β and this is the tea β β there are exactly two exceptions:drm_dp_mst_topology_mgr.up_req_workanddrm_dp_mst_topology_mgr.work. those two don't grabdrm_dp_mst_topology_mgr.lockwhile reading, but they're also the only updaters of this list, anddrm_dp_mst_topology_mgr.probe_lockkeeps them from writing at the same time. teamwork, honestly. π§auxβ the i2c aux transport used to talk to the device connected to this port. protected bydrm_dp_mst_topology_mgr.base.lock.passthrough_auxβ the parent aux that DSC pass-through requests get sent to, and it's only set if DSC pass-through is even possible. conditional icon β¨parentβ the branch device parent of this port. family tree moment πconnectorβ the DRM connector this port is connected to. protected bydrm_dp_mst_topology_mgr.base.lock.mgrβ the topology manager this port lives under. its whole landlord, basically.cached_edidβ for DP logical ports β it makes tiling work by making sure the EDID for all connectors gets read immediately. iykyk πfec_capableβ aboolsaying whether FEC can be supported up to that point in the MST topology. yes bestie, up to that point. π
πΈ Description πΈ
This structure represents an MST port endpoint on a device somewhere in the MST topology. that's the whole pitch. iconic behavior, honestly. π
β SEE ALSO β
- Kernel file
./include/drm/display/drm_dp_mst_helper.h struct drm_dp_mst_branch(9)struct drm_dp_mst_atomic_payload(9)struct drm_dp_mst_topology_state(9)struct drm_dp_mst_topology_mgr(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)
go read the header file, bestie. it's right there and it's the whole source of truth. π«‘
and that's the page!! π this one came from ./include/drm/display, dated October 2026, and it's filed under struct drm_dp_mst_port(9). mwah, bye, ily, go read your kernel headers ππ
π¦ 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