]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - include/drm/drm_dp_mst_helper.h
drm/dp_mst: Add DSC enablement helpers to DRM
[linux.git] / include / drm / drm_dp_mst_helper.h
index d5fc90b304876697740c7d994a78ea8692e9f85b..14ccda19d9cc06380a64d04539f047f54097539c 100644 (file)
@@ -156,6 +156,8 @@ struct drm_dp_mst_port {
         * audio-capable.
         */
        bool has_audio;
+
+       bool fec_capable;
 };
 
 /**
@@ -383,6 +385,7 @@ struct drm_dp_port_number_req {
 
 struct drm_dp_enum_path_resources_ack_reply {
        u8 port_number;
+       bool fec_capable;
        u16 full_payload_bw_number;
        u16 avail_payload_bw_number;
 };
@@ -499,6 +502,7 @@ struct drm_dp_payload {
 struct drm_dp_vcpi_allocation {
        struct drm_dp_mst_port *port;
        int vcpi;
+       bool dsc_enabled;
        struct list_head next;
 };
 
@@ -561,7 +565,8 @@ struct drm_dp_mst_topology_mgr {
        struct drm_dp_sideband_msg_rx up_req_recv;
 
        /**
-        * @lock: protects mst state, primary, dpcd.
+        * @lock: protects @mst_state, @mst_primary, @dpcd, and
+        * @payload_id_table_cleared.
         */
        struct mutex lock;
 
@@ -576,7 +581,14 @@ struct drm_dp_mst_topology_mgr {
         * @mst_state: If this manager is enabled for an MST capable port. False
         * if no MST sink/branch devices is connected.
         */
-       bool mst_state;
+       bool mst_state : 1;
+
+       /**
+        * @payload_id_table_cleared: Whether or not we've cleared the payload
+        * ID table for @mst_primary. Protected by @lock.
+        */
+       bool payload_id_table_cleared : 1;
+
        /**
         * @mst_primary: Pointer to the primary/first branch device.
         */
@@ -719,8 +731,7 @@ bool drm_dp_mst_port_has_audio(struct drm_dp_mst_topology_mgr *mgr,
 struct edid *drm_dp_mst_get_edid(struct drm_connector *connector, struct drm_dp_mst_topology_mgr *mgr, struct drm_dp_mst_port *port);
 
 
-int drm_dp_calc_pbn_mode(int clock, int bpp);
-
+int drm_dp_calc_pbn_mode(int clock, int bpp, bool dsc);
 
 bool drm_dp_mst_allocate_vcpi(struct drm_dp_mst_topology_mgr *mgr,
                              struct drm_dp_mst_port *port, int pbn, int slots);
@@ -769,7 +780,12 @@ struct drm_dp_mst_topology_state *drm_atomic_get_mst_topology_state(struct drm_a
 int __must_check
 drm_dp_atomic_find_vcpi_slots(struct drm_atomic_state *state,
                              struct drm_dp_mst_topology_mgr *mgr,
-                             struct drm_dp_mst_port *port, int pbn);
+                             struct drm_dp_mst_port *port, int pbn,
+                             int pbn_div);
+int drm_dp_mst_atomic_enable_dsc(struct drm_atomic_state *state,
+                                struct drm_dp_mst_port *port,
+                                int pbn, int pbn_div,
+                                bool enable);
 int __must_check
 drm_dp_atomic_release_vcpi_slots(struct drm_atomic_state *state,
                                 struct drm_dp_mst_topology_mgr *mgr,
@@ -781,6 +797,8 @@ int __must_check drm_dp_mst_atomic_check(struct drm_atomic_state *state);
 void drm_dp_mst_get_port_malloc(struct drm_dp_mst_port *port);
 void drm_dp_mst_put_port_malloc(struct drm_dp_mst_port *port);
 
+struct drm_dp_aux *drm_dp_mst_dsc_aux_for_port(struct drm_dp_mst_port *port);
+
 extern const struct drm_private_state_funcs drm_dp_mst_topology_state_funcs;
 
 /**