drm/amd/display: Move dc_stream interface to separate header
authorHarry Wentland <harry.wentland@amd.com>
Wed, 8 Nov 2017 19:34:14 +0000 (14:34 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 6 Dec 2017 17:47:44 +0000 (12:47 -0500)
Signed-off-by: Harry Wentland <harry.wentland@amd.com>
Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
Acked-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dc.h
drivers/gpu/drm/amd/display/dc/dc_stream.h [new file with mode: 0644]

index 5fe86fab6995eef41ae22dfb1bcb90c25cf51a15..170cdcb5a0279a037f7914115cf388de2cf6498e 100644 (file)
@@ -137,6 +137,7 @@ struct dc;
 struct dc_plane_state;
 struct dc_state;
 
+
 struct dc_cap_funcs {
        bool (*get_dcc_compression_cap)(const struct dc *dc,
                        const struct dc_dcc_surface_param *input,
@@ -577,168 +578,7 @@ struct dc_flip_addrs {
 bool dc_post_update_surfaces_to_stream(
                struct dc *dc);
 
-/*******************************************************************************
- * Stream Interfaces
- ******************************************************************************/
-
-struct dc_stream_status {
-       int primary_otg_inst;
-       int stream_enc_inst;
-       int plane_count;
-       struct dc_plane_state *plane_states[MAX_SURFACE_NUM];
-
-       /*
-        * link this stream passes through
-        */
-       struct dc_link *link;
-};
-
-struct dc_stream_state {
-       struct dc_sink *sink;
-       struct dc_crtc_timing timing;
-
-       struct rect src; /* composition area */
-       struct rect dst; /* stream addressable area */
-
-       struct audio_info audio_info;
-
-       struct freesync_context freesync_ctx;
-
-       struct dc_hdr_static_metadata hdr_static_metadata;
-       struct dc_transfer_func *out_transfer_func;
-       struct colorspace_transform gamut_remap_matrix;
-       struct csc_transform csc_color_matrix;
-
-       enum dc_color_space output_color_space;
-       enum dc_dither_option dither_option;
-
-       enum view_3d_format view_format;
-
-       bool ignore_msa_timing_param;
-       /* TODO: custom INFO packets */
-       /* TODO: ABM info (DMCU) */
-       /* TODO: PSR info */
-       /* TODO: CEA VIC */
-
-       /* from core_stream struct */
-       struct dc_context *ctx;
-
-       /* used by DCP and FMT */
-       struct bit_depth_reduction_params bit_depth_params;
-       struct clamping_and_pixel_encoding_params clamping;
-
-       int phy_pix_clk;
-       enum signal_type signal;
-       bool dpms_off;
-
-       struct dc_stream_status status;
-
-       struct dc_cursor_attributes cursor_attributes;
-
-       /* from stream struct */
-       struct kref refcount;
-
-       struct crtc_trigger_info triggered_crtc_reset;
-
-};
-
-struct dc_stream_update {
-       struct rect src;
-       struct rect dst;
-       struct dc_transfer_func *out_transfer_func;
-       struct dc_hdr_static_metadata *hdr_static_metadata;
-};
-
-bool dc_is_stream_unchanged(
-       struct dc_stream_state *old_stream, struct dc_stream_state *stream);
-bool dc_is_stream_scaling_unchanged(
-       struct dc_stream_state *old_stream, struct dc_stream_state *stream);
-
-/*
- * Set up surface attributes and associate to a stream
- * The surfaces parameter is an absolute set of all surface active for the stream.
- * If no surfaces are provided, the stream will be blanked; no memory read.
- * Any flip related attribute changes must be done through this interface.
- *
- * After this call:
- *   Surfaces attributes are programmed and configured to be composed into stream.
- *   This does not trigger a flip.  No surface address is programmed.
- */
-
-bool dc_commit_planes_to_stream(
-               struct dc *dc,
-               struct dc_plane_state **plane_states,
-               uint8_t new_plane_count,
-               struct dc_stream_state *dc_stream,
-               struct dc_state *state);
-
-void dc_commit_updates_for_stream(struct dc *dc,
-               struct dc_surface_update *srf_updates,
-               int surface_count,
-               struct dc_stream_state *stream,
-               struct dc_stream_update *stream_update,
-               struct dc_plane_state **plane_states,
-               struct dc_state *state);
-/*
- * Log the current stream state.
- */
-void dc_stream_log(
-       const struct dc_stream_state *stream,
-       struct dal_logger *dc_logger,
-       enum dc_log_type log_type);
-
-uint8_t dc_get_current_stream_count(struct dc *dc);
-struct dc_stream_state *dc_get_stream_at_index(struct dc *dc, uint8_t i);
-
-/*
- * Return the current frame counter.
- */
-uint32_t dc_stream_get_vblank_counter(const struct dc_stream_state *stream);
-
-/* TODO: Return parsed values rather than direct register read
- * This has a dependency on the caller (amdgpu_get_crtc_scanoutpos)
- * being refactored properly to be dce-specific
- */
-bool dc_stream_get_scanoutpos(const struct dc_stream_state *stream,
-                                 uint32_t *v_blank_start,
-                                 uint32_t *v_blank_end,
-                                 uint32_t *h_position,
-                                 uint32_t *v_position);
-
-enum dc_status dc_add_stream_to_ctx(
-                       struct dc *dc,
-               struct dc_state *new_ctx,
-               struct dc_stream_state *stream);
-
-enum dc_status dc_remove_stream_from_ctx(
-               struct dc *dc,
-                       struct dc_state *new_ctx,
-                       struct dc_stream_state *stream);
-
-
-bool dc_add_plane_to_context(
-               const struct dc *dc,
-               struct dc_stream_state *stream,
-               struct dc_plane_state *plane_state,
-               struct dc_state *context);
-
-bool dc_remove_plane_from_context(
-               const struct dc *dc,
-               struct dc_stream_state *stream,
-               struct dc_plane_state *plane_state,
-               struct dc_state *context);
-
-bool dc_rem_all_planes_for_stream(
-               const struct dc *dc,
-               struct dc_stream_state *stream,
-               struct dc_state *context);
-
-bool dc_add_all_planes_for_stream(
-               const struct dc *dc,
-               struct dc_stream_state *stream,
-               struct dc_plane_state * const *plane_states,
-               int plane_count,
-               struct dc_state *context);
+#include "dc_stream.h"
 
 /*
  * Structure to store surface/stream associations for validation
@@ -749,22 +589,12 @@ struct dc_validation_set {
        uint8_t plane_count;
 };
 
-enum dc_status dc_validate_stream(struct dc *dc, struct dc_stream_state *stream);
-
 enum dc_status dc_validate_plane(struct dc *dc, const struct dc_plane_state *plane_state);
 
 enum dc_status dc_validate_global_state(
                struct dc *dc,
                struct dc_state *new_ctx);
 
-/*
- * This function takes a stream and checks if it is guaranteed to be supported.
- * Guaranteed means that MAX_COFUNC similar streams are supported.
- *
- * After this call:
- *   No hardware is programmed for call.  Only validation is done.
- */
-
 
 void dc_resource_state_construct(
                const struct dc *dc,
@@ -791,42 +621,6 @@ void dc_resource_state_destruct(struct dc_state *context);
  */
 bool dc_commit_state(struct dc *dc, struct dc_state *context);
 
-/*
- * Set up streams and links associated to drive sinks
- * The streams parameter is an absolute set of all active streams.
- *
- * After this call:
- *   Phy, Encoder, Timing Generator are programmed and enabled.
- *   New streams are enabled with blank stream; no memory read.
- */
-/*
- * Enable stereo when commit_streams is not required,
- * for example, frame alternate.
- */
-bool dc_enable_stereo(
-       struct dc *dc,
-       struct dc_state *context,
-       struct dc_stream_state *streams[],
-       uint8_t stream_count);
-
-/**
- * Create a new default stream for the requested sink
- */
-struct dc_stream_state *dc_create_stream_for_sink(struct dc_sink *dc_sink);
-
-void dc_stream_retain(struct dc_stream_state *dc_stream);
-void dc_stream_release(struct dc_stream_state *dc_stream);
-
-struct dc_stream_status *dc_stream_get_status(
-       struct dc_stream_state *dc_stream);
-
-enum surface_update_type dc_check_update_surfaces_for_stream(
-               struct dc *dc,
-               struct dc_surface_update *updates,
-               int surface_count,
-               struct dc_stream_update *stream_update,
-               const struct dc_stream_status *stream_status);
-
 
 struct dc_state *dc_create_state(void);
 void dc_retain_state(struct dc_state *context);
@@ -1076,18 +870,6 @@ struct dc_sink_init_data {
 
 struct dc_sink *dc_sink_create(const struct dc_sink_init_data *init_params);
 
-/*******************************************************************************
- * Cursor interfaces - To manages the cursor within a stream
- ******************************************************************************/
-/* TODO: Deprecated once we switch to dc_set_cursor_position */
-bool dc_stream_set_cursor_attributes(
-       struct dc_stream_state *stream,
-       const struct dc_cursor_attributes *attributes);
-
-bool dc_stream_set_cursor_position(
-       struct dc_stream_state *stream,
-       const struct dc_cursor_position *position);
-
 /* Newer interfaces  */
 struct dc_cursor {
        struct dc_plane_address address;
@@ -1124,5 +906,4 @@ bool dc_submit_i2c(
                uint32_t link_index,
                struct i2c_command *cmd);
 
-
 #endif /* DC_INTERFACE_H_ */
diff --git a/drivers/gpu/drm/amd/display/dc/dc_stream.h b/drivers/gpu/drm/amd/display/dc/dc_stream.h
new file mode 100644 (file)
index 0000000..bed2a93
--- /dev/null
@@ -0,0 +1,271 @@
+/*
+ * Copyright 2012-14 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors: AMD
+ *
+ */
+
+#ifndef DC_STREAM_H_
+#define DC_STREAM_H_
+
+#include "dc_types.h"
+#include "grph_object_defs.h"
+
+/*******************************************************************************
+ * Stream Interfaces
+ ******************************************************************************/
+
+struct dc_stream_status {
+       int primary_otg_inst;
+       int stream_enc_inst;
+       int plane_count;
+       struct dc_plane_state *plane_states[MAX_SURFACE_NUM];
+
+       /*
+        * link this stream passes through
+        */
+       struct dc_link *link;
+};
+
+struct dc_stream_state {
+       struct dc_sink *sink;
+       struct dc_crtc_timing timing;
+
+       struct rect src; /* composition area */
+       struct rect dst; /* stream addressable area */
+
+       struct audio_info audio_info;
+
+       struct freesync_context freesync_ctx;
+
+       struct dc_hdr_static_metadata hdr_static_metadata;
+       struct dc_transfer_func *out_transfer_func;
+       struct colorspace_transform gamut_remap_matrix;
+       struct csc_transform csc_color_matrix;
+
+       enum dc_color_space output_color_space;
+       enum dc_dither_option dither_option;
+
+       enum view_3d_format view_format;
+
+       bool ignore_msa_timing_param;
+       /* TODO: custom INFO packets */
+       /* TODO: ABM info (DMCU) */
+       /* TODO: PSR info */
+       /* TODO: CEA VIC */
+
+       /* from core_stream struct */
+       struct dc_context *ctx;
+
+       /* used by DCP and FMT */
+       struct bit_depth_reduction_params bit_depth_params;
+       struct clamping_and_pixel_encoding_params clamping;
+
+       int phy_pix_clk;
+       enum signal_type signal;
+       bool dpms_off;
+
+       struct dc_stream_status status;
+
+       struct dc_cursor_attributes cursor_attributes;
+
+       /* from stream struct */
+       struct kref refcount;
+
+       struct crtc_trigger_info triggered_crtc_reset;
+
+};
+
+struct dc_stream_update {
+       struct rect src;
+       struct rect dst;
+       struct dc_transfer_func *out_transfer_func;
+       struct dc_hdr_static_metadata *hdr_static_metadata;
+};
+
+bool dc_is_stream_unchanged(
+       struct dc_stream_state *old_stream, struct dc_stream_state *stream);
+bool dc_is_stream_scaling_unchanged(
+       struct dc_stream_state *old_stream, struct dc_stream_state *stream);
+
+/*
+ * Set up surface attributes and associate to a stream
+ * The surfaces parameter is an absolute set of all surface active for the stream.
+ * If no surfaces are provided, the stream will be blanked; no memory read.
+ * Any flip related attribute changes must be done through this interface.
+ *
+ * After this call:
+ *   Surfaces attributes are programmed and configured to be composed into stream.
+ *   This does not trigger a flip.  No surface address is programmed.
+ */
+
+bool dc_commit_planes_to_stream(
+               struct dc *dc,
+               struct dc_plane_state **plane_states,
+               uint8_t new_plane_count,
+               struct dc_stream_state *dc_stream,
+               struct dc_state *state);
+
+void dc_commit_updates_for_stream(struct dc *dc,
+               struct dc_surface_update *srf_updates,
+               int surface_count,
+               struct dc_stream_state *stream,
+               struct dc_stream_update *stream_update,
+               struct dc_plane_state **plane_states,
+               struct dc_state *state);
+/*
+ * Log the current stream state.
+ */
+void dc_stream_log(
+       const struct dc_stream_state *stream,
+       struct dal_logger *dc_logger,
+       enum dc_log_type log_type);
+
+uint8_t dc_get_current_stream_count(struct dc *dc);
+struct dc_stream_state *dc_get_stream_at_index(struct dc *dc, uint8_t i);
+
+/*
+ * Return the current frame counter.
+ */
+uint32_t dc_stream_get_vblank_counter(const struct dc_stream_state *stream);
+
+/* TODO: Return parsed values rather than direct register read
+ * This has a dependency on the caller (amdgpu_get_crtc_scanoutpos)
+ * being refactored properly to be dce-specific
+ */
+bool dc_stream_get_scanoutpos(const struct dc_stream_state *stream,
+                                 uint32_t *v_blank_start,
+                                 uint32_t *v_blank_end,
+                                 uint32_t *h_position,
+                                 uint32_t *v_position);
+
+enum dc_status dc_add_stream_to_ctx(
+                       struct dc *dc,
+               struct dc_state *new_ctx,
+               struct dc_stream_state *stream);
+
+enum dc_status dc_remove_stream_from_ctx(
+               struct dc *dc,
+                       struct dc_state *new_ctx,
+                       struct dc_stream_state *stream);
+
+
+bool dc_add_plane_to_context(
+               const struct dc *dc,
+               struct dc_stream_state *stream,
+               struct dc_plane_state *plane_state,
+               struct dc_state *context);
+
+bool dc_remove_plane_from_context(
+               const struct dc *dc,
+               struct dc_stream_state *stream,
+               struct dc_plane_state *plane_state,
+               struct dc_state *context);
+
+bool dc_rem_all_planes_for_stream(
+               const struct dc *dc,
+               struct dc_stream_state *stream,
+               struct dc_state *context);
+
+bool dc_add_all_planes_for_stream(
+               const struct dc *dc,
+               struct dc_stream_state *stream,
+               struct dc_plane_state * const *plane_states,
+               int plane_count,
+               struct dc_state *context);
+
+enum dc_status dc_validate_stream(struct dc *dc, struct dc_stream_state *stream);
+
+/*
+ * This function takes a stream and checks if it is guaranteed to be supported.
+ * Guaranteed means that MAX_COFUNC similar streams are supported.
+ *
+ * After this call:
+ *   No hardware is programmed for call.  Only validation is done.
+ */
+
+/*
+ * Set up streams and links associated to drive sinks
+ * The streams parameter is an absolute set of all active streams.
+ *
+ * After this call:
+ *   Phy, Encoder, Timing Generator are programmed and enabled.
+ *   New streams are enabled with blank stream; no memory read.
+ */
+/*
+ * Enable stereo when commit_streams is not required,
+ * for example, frame alternate.
+ */
+bool dc_enable_stereo(
+       struct dc *dc,
+       struct dc_state *context,
+       struct dc_stream_state *streams[],
+       uint8_t stream_count);
+
+
+enum surface_update_type dc_check_update_surfaces_for_stream(
+               struct dc *dc,
+               struct dc_surface_update *updates,
+               int surface_count,
+               struct dc_stream_update *stream_update,
+               const struct dc_stream_status *stream_status);
+
+/**
+ * Create a new default stream for the requested sink
+ */
+struct dc_stream_state *dc_create_stream_for_sink(struct dc_sink *dc_sink);
+
+void dc_stream_retain(struct dc_stream_state *dc_stream);
+void dc_stream_release(struct dc_stream_state *dc_stream);
+
+struct dc_stream_status *dc_stream_get_status(
+       struct dc_stream_state *dc_stream);
+
+/*******************************************************************************
+ * Cursor interfaces - To manages the cursor within a stream
+ ******************************************************************************/
+/* TODO: Deprecated once we switch to dc_set_cursor_position */
+bool dc_stream_set_cursor_attributes(
+       struct dc_stream_state *stream,
+       const struct dc_cursor_attributes *attributes);
+
+bool dc_stream_set_cursor_position(
+       struct dc_stream_state *stream,
+       const struct dc_cursor_position *position);
+
+bool dc_stream_adjust_vmin_vmax(struct dc *dc,
+                               struct dc_stream_state **stream,
+                               int num_streams,
+                               int vmin,
+                               int vmax);
+
+bool dc_stream_get_crtc_position(struct dc *dc,
+                                struct dc_stream_state **stream,
+                                int num_streams,
+                                unsigned int *v_pos,
+                                unsigned int *nom_v_pos);
+
+void dc_stream_set_static_screen_events(struct dc *dc,
+                                       struct dc_stream_state **stream,
+                                       int num_streams,
+                                       const struct dc_static_screen_events *events);
+
+#endif /* DC_STREAM_H_ */