root/sys/dev/pci/drm/amd/display/modules/inc/mod_shared.h
/*
 * Copyright 2016 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 MOD_SHARED_H_
#define MOD_SHARED_H_

enum color_transfer_func {
        TRANSFER_FUNC_UNKNOWN,
        TRANSFER_FUNC_SRGB,
        TRANSFER_FUNC_BT709,
        TRANSFER_FUNC_PQ2084,
        TRANSFER_FUNC_PQ2084_INTERIM,
        TRANSFER_FUNC_LINEAR_0_1,
        TRANSFER_FUNC_LINEAR_0_125,
        TRANSFER_FUNC_GAMMA_22,
        TRANSFER_FUNC_GAMMA_26
};

enum vrr_packet_type {
        PACKET_TYPE_VRR,
        PACKET_TYPE_FS_V1,
        PACKET_TYPE_FS_V2,
        PACKET_TYPE_FS_V3,
        PACKET_TYPE_VTEM
};

union lut3d_control_flags {
        unsigned int raw;
        struct {
                unsigned int do_chroma_scale                            :1;
                unsigned int spec_version                               :3;
                unsigned int use_zero_display_black                     :1;
                unsigned int use_zero_source_black                      :1;
                unsigned int force_display_black                        :6;
                unsigned int apply_display_gamma                        :1;
                unsigned int exp_shaper_max                             :6;
                unsigned int unity_3dlut                                :1;
                unsigned int bypass_3dlut                               :1;
                unsigned int use_3dlut                                  :1;
                unsigned int less_than_dcip3                            :1;
                unsigned int override_lum                               :1;
                unsigned int use_gamut_map_lib                                  :1;
                unsigned int chromatic_adaptation_src                           :1;
                unsigned int chromatic_adaptation_dst                           :1;
                unsigned int do_blender_lut_degamma             :1;
                unsigned int reseved                                    :4;
        } bits;
};

enum tm_show_option_internal {
        tm_show_option_internal_single_file             = 0,/*flags2 not in use*/
        tm_show_option_internal_duplicate_file,         /*use flags2*/
        tm_show_option_internal_duplicate_sidebyside/*use flags2*/
};

enum lut3d_control_gamut_map {
        lut3d_control_gamut_map_none = 0,
        lut3d_control_gamut_map_tonemap,
        lut3d_control_gamut_map_chto,
        lut3d_control_gamut_map_chso,
        lut3d_control_gamut_map_chci
};

enum lut3d_control_rotation_mode {
        lut3d_control_rotation_mode_none = 0,
        lut3d_control_rotation_mode_hue,
        lut3d_control_rotation_mode_cc,
        lut3d_control_rotation_mode_hue_cc
};

struct lut3d_settings {
        unsigned char version;
        union lut3d_control_flags flags;
        union lut3d_control_flags flags2;
        enum tm_show_option_internal option;
        unsigned int min_lum;/*multiplied by 100*/
        unsigned int max_lum;
        unsigned int min_lum2;
        unsigned int max_lum2;
        enum lut3d_control_gamut_map map;
        enum lut3d_control_rotation_mode rotation;
        enum lut3d_control_gamut_map map2;
        enum lut3d_control_rotation_mode rotation2;
};

#endif /* MOD_SHARED_H_ */