brintos

brintos / linux-shallow public Read only

0
0
Text · 22.5 KiB · 3a89cc0 Raw
1060 lines · c
1/*2 * Copyright 2012-15 Advanced Micro Devices, Inc.3 *4 * Permission is hereby granted, free of charge, to any person obtaining a5 * copy of this software and associated documentation files (the "Software"),6 * to deal in the Software without restriction, including without limitation7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,8 * and/or sell copies of the Software, and to permit persons to whom the9 * Software is furnished to do so, subject to the following conditions:10 *11 * The above copyright notice and this permission notice shall be included in12 * all copies or substantial portions of the Software.13 *14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL17 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR20 * OTHER DEALINGS IN THE SOFTWARE.21 *22 * Authors: AMD23 *24 */25 26/**27 * DOC: overview28 *29 * Multiple Pipe/Plane Combiner (MPC) is a component in the hardware pipeline30 * that performs blending of multiple planes, using global and per-pixel alpha.31 * It also performs post-blending color correction operations according to the32 * hardware capabilities, such as color transformation matrix and gamma 1D and33 * 3D LUT.34 *35 * MPC receives output from all DPP pipes and combines them to multiple outputs36 * supporting "M MPC inputs -> N MPC outputs" flexible composition37 * architecture. It features:38 *39 * - Programmable blending structure to allow software controlled blending and40 *   cascading;41 * - Programmable window location of each DPP in active region of display;42 * - Combining multiple DPP pipes in one active region when a single DPP pipe43 *   cannot process very large surface;44 * - Combining multiple DPP from different SLS with blending;45 * - Stereo formats from single DPP in top-bottom or side-by-side modes;46 * - Stereo formats from 2 DPPs;47 * - Alpha blending of multiple layers from different DPP pipes;48 * - Programmable background color;49 */50 51#ifndef __DC_MPCC_H__52#define __DC_MPCC_H__53 54#include "dc_hw_types.h"55#include "hw_shared.h"56#include "transform.h"57 58#define MAX_MPCC 659#define MAX_OPP 660 61#define MAX_DWB		262 63enum mpc_output_csc_mode {64	MPC_OUTPUT_CSC_DISABLE = 0,65	MPC_OUTPUT_CSC_COEF_A,66	MPC_OUTPUT_CSC_COEF_B67};68 69 70enum mpcc_blend_mode {71	MPCC_BLEND_MODE_BYPASS,72	MPCC_BLEND_MODE_TOP_LAYER_PASSTHROUGH,73	MPCC_BLEND_MODE_TOP_LAYER_ONLY,74	MPCC_BLEND_MODE_TOP_BOT_BLENDING75};76 77/**78 * enum mpcc_alpha_blend_mode - define the alpha blend mode regarding pixel79 * alpha and plane alpha values80 */81enum mpcc_alpha_blend_mode {82	/**83	 * @MPCC_ALPHA_BLEND_MODE_PER_PIXEL_ALPHA: per pixel alpha using DPP84	 * alpha value85	 */86	MPCC_ALPHA_BLEND_MODE_PER_PIXEL_ALPHA,87	/**88	 * @MPCC_ALPHA_BLEND_MODE_PER_PIXEL_ALPHA_COMBINED_GLOBAL_GAIN: per89	 * pixel alpha using DPP alpha value multiplied by a global gain (plane90	 * alpha)91	 */92	MPCC_ALPHA_BLEND_MODE_PER_PIXEL_ALPHA_COMBINED_GLOBAL_GAIN,93	/**94	 * @MPCC_ALPHA_BLEND_MODE_GLOBAL_ALPHA: global alpha value, ignores95	 * pixel alpha and consider only plane alpha96	 */97	MPCC_ALPHA_BLEND_MODE_GLOBAL_ALPHA98};99 100enum mpcc_movable_cm_location {101	MPCC_MOVABLE_CM_LOCATION_BEFORE,102	MPCC_MOVABLE_CM_LOCATION_AFTER,103};104 105enum MCM_LUT_XABLE {106	MCM_LUT_DISABLE,107	MCM_LUT_DISABLED = MCM_LUT_DISABLE,108	MCM_LUT_ENABLE,109	MCM_LUT_ENABLED = MCM_LUT_ENABLE,110};111 112enum MCM_LUT_ID {113	MCM_LUT_3DLUT,114	MCM_LUT_1DLUT,115	MCM_LUT_SHAPER116};117 118union mcm_lut_params {119	const struct pwl_params *pwl;120	const struct tetrahedral_params *lut3d;121};122 123/**124 * struct mpcc_blnd_cfg - MPCC blending configuration125 */126struct mpcc_blnd_cfg {127	/**128	 * @black_color: background color.129	 */130	struct tg_color black_color;131 132	/**133	 * @alpha_mode: alpha blend mode (MPCC_ALPHA_BLND_MODE).134	 */135	enum mpcc_alpha_blend_mode alpha_mode;136 137	/**138	 * @pre_multiplied_alpha:139	 * Whether pixel color values were pre-multiplied by the alpha channel140	 * (MPCC_ALPHA_MULTIPLIED_MODE).141	 */142	bool pre_multiplied_alpha;143 144	/**145	 * @global_gain: Used when blend mode considers both pixel alpha and plane.146	 */147	int global_gain;148 149	/**150	 * @global_alpha: Plane alpha value.151	 */152	int global_alpha;153 154	/**155	 * @overlap_only: Whether overlapping of different planes is allowed.156	 */157	bool overlap_only;158 159	/* MPCC top/bottom gain settings */160 161	/**162	 * @bottom_gain_mode: Blend mode for bottom gain setting.163	 */164	int bottom_gain_mode;165 166	/**167	 * @background_color_bpc: Background color for bpc.168	 */169	int background_color_bpc;170 171	/**172	 * @top_gain: Top gain setting.173	 */174	int top_gain;175 176	/**177	 * @bottom_inside_gain: Blend mode for bottom inside.178	 */179	int bottom_inside_gain;180 181	/**182	 * @bottom_outside_gain: Blend mode for bottom outside.183	 */184	int bottom_outside_gain;185};186 187struct mpc_grph_gamut_adjustment {188	struct fixed31_32 temperature_matrix[CSC_TEMPERATURE_MATRIX_SIZE];189	enum graphics_gamut_adjust_type gamut_adjust_type;190	enum mpcc_gamut_remap_id mpcc_gamut_remap_block_id;191};192 193struct mpcc_sm_cfg {194	bool enable;195	/* 0-single plane,2-row subsampling,4-column subsampling,6-checkboard subsampling */196	int sm_mode;197	/* 0- disable frame alternate, 1- enable frame alternate */198	bool frame_alt;199	/* 0- disable field alternate, 1- enable field alternate */200	bool field_alt;201	/* 0-no force,2-force frame polarity from top,3-force frame polarity from bottom */202	int force_next_frame_porlarity;203	/* 0-no force,2-force field polarity from top,3-force field polarity from bottom */204	int force_next_field_polarity;205};206 207struct mpc_denorm_clamp {208	int clamp_max_r_cr;209	int clamp_min_r_cr;210	int clamp_max_g_y;211	int clamp_min_g_y;212	int clamp_max_b_cb;213	int clamp_min_b_cb;214};215 216struct mpc_dwb_flow_control {217	int flow_ctrl_mode;218	int flow_ctrl_cnt0;219	int flow_ctrl_cnt1;220};221 222/**223 * struct mpcc - MPCC connection and blending configuration for a single MPCC instance.224 *225 * This struct is used as a node in an MPC tree.226 */227struct mpcc {228	/**229	 * @mpcc_id: MPCC physical instance.230	 */231	int mpcc_id;232 233	/**234	 * @dpp_id: DPP input to this MPCC235	 */236	int dpp_id;237 238	/**239	 * @mpcc_bot: Pointer to bottom layer MPCC. NULL when not connected.240	 */241	struct mpcc *mpcc_bot;242 243	/**244	 * @blnd_cfg: The blending configuration for this MPCC.245	 */246	struct mpcc_blnd_cfg blnd_cfg;247 248	/**249	 * @sm_cfg: stereo mix setting for this MPCC250	 */251	struct mpcc_sm_cfg sm_cfg;252 253	/**254	 * @shared_bottom:255	 *256	 * If MPCC output to both OPP and DWB endpoints, true. Otherwise, false.257	 */258	bool shared_bottom;259};260 261/**262 * struct mpc_tree - MPC tree represents all MPCC connections for a pipe.263 *264 *265 */266struct mpc_tree {267	/**268	 * @opp_id: The OPP instance that owns this MPC tree.269	 */270	int opp_id;271 272	/**273	 * @opp_list: the top MPCC layer of the MPC tree that outputs to OPP endpoint274	 */275	struct mpcc *opp_list;276};277 278struct mpc {279	const struct mpc_funcs *funcs;280	struct dc_context *ctx;281 282	struct mpcc mpcc_array[MAX_MPCC];283	struct pwl_params blender_params;284	bool cm_bypass_mode;285};286 287struct mpcc_state {288	uint32_t opp_id;289	uint32_t dpp_id;290	uint32_t bot_mpcc_id;291	uint32_t mode;292	uint32_t alpha_mode;293	uint32_t pre_multiplied_alpha;294	uint32_t overlap_only;295	uint32_t idle;296	uint32_t busy;297	uint32_t shaper_lut_mode;298	uint32_t lut3d_mode;299	uint32_t lut3d_bit_depth;300	uint32_t lut3d_size;301	uint32_t rgam_mode;302	uint32_t rgam_lut;303	struct mpc_grph_gamut_adjustment gamut_remap;304};305 306/**307 * struct mpc_funcs - funcs308 */309struct mpc_funcs {310	/**311	* @read_mpcc_state:312	*313	* Read register content from given MPCC physical instance.314	*315	* Parameters:316	*317	* - [in/out] mpc - MPC context318	* - [in] mpcc_instance - MPC context instance319	* - [in] mpcc_state - MPC context state320	*321	* Return:322	*323	* void324	*/325	void (*read_mpcc_state)(326			struct mpc *mpc,327			int mpcc_inst,328			struct mpcc_state *s);329 330	/**331	* @insert_plane:332	*333	* Insert DPP into MPC tree based on specified blending position.334	* Only used for planes that are part of blending chain for OPP output335	*336	* Parameters:337	*338	* - [in/out] mpc  - MPC context.339	* - [in/out] tree - MPC tree structure that plane will be added to.340	* - [in] blnd_cfg - MPCC blending configuration for the new blending layer.341	* - [in] sm_cfg   - MPCC stereo mix configuration for the new blending layer.342	*                   stereo mix must disable for the very bottom layer of the tree config.343	* - [in] insert_above_mpcc - Insert new plane above this MPCC.344	*                          If NULL, insert as bottom plane.345	* - [in] dpp_id  - DPP instance for the plane to be added.346	* - [in] mpcc_id - The MPCC physical instance to use for blending.347	*348	* Return:349	*350	* struct mpcc* - MPCC that was added.351	*/352	struct mpcc* (*insert_plane)(353			struct mpc *mpc,354			struct mpc_tree *tree,355			struct mpcc_blnd_cfg *blnd_cfg,356			struct mpcc_sm_cfg *sm_cfg,357			struct mpcc *insert_above_mpcc,358			int dpp_id,359			int mpcc_id);360 361	/**362	* @remove_mpcc:363	*364	* Remove a specified MPCC from the MPC tree.365	*366	* Parameters:367	*368	* - [in/out] mpc   - MPC context.369	* - [in/out] tree  - MPC tree structure that plane will be removed from.370	* - [in/out] mpcc  - MPCC to be removed from tree.371	*372	* Return:373	*374	* void375	*/376	void (*remove_mpcc)(377			struct mpc *mpc,378			struct mpc_tree *tree,379			struct mpcc *mpcc);380 381	/**382	* @mpc_init:383	*384	* Reset the MPCC HW status by disconnecting all muxes.385	*386	* Parameters:387	*388	* - [in/out] mpc - MPC context.389	*390	* Return:391	*392	* void393	*/394	void (*mpc_init)(struct mpc *mpc);395 396	/**397	* @mpc_init_single_inst:398	*399	* Initialize given MPCC physical instance.400	*401	* Parameters:402	* - [in/out] mpc - MPC context.403	* - [in] mpcc_id - The MPCC physical instance to be initialized.404	*/405	void (*mpc_init_single_inst)(406			struct mpc *mpc,407			unsigned int mpcc_id);408 409	/**410	* @update_blending:411	*412	* Update the blending configuration for a specified MPCC.413	*414	* Parameters:415	*416	* - [in/out] mpc - MPC context.417	* - [in] blnd_cfg - MPCC blending configuration.418	* - [in] mpcc_id  - The MPCC physical instance.419	*420	* Return:421	*422	* void423	*/424	void (*update_blending)(425		struct mpc *mpc,426		struct mpcc_blnd_cfg *blnd_cfg,427		int mpcc_id);428 429	/**430	* @cursor_lock:431	*432	* Lock cursor updates for the specified OPP. OPP defines the set of433	* MPCC that are locked together for cursor.434	*435	* Parameters:436	*437	* - [in] mpc - MPC context.438	* - [in] opp_id  - The OPP to lock cursor updates on439	* - [in] lock - lock/unlock the OPP440	*441	* Return:442	*443	* void444	*/445	void (*cursor_lock)(446			struct mpc *mpc,447			int opp_id,448			bool lock);449 450	/**451	* @insert_plane_to_secondary:452	*453	* Add DPP into secondary MPC tree based on specified blending454	* position.  Only used for planes that are part of blending chain for455	* DWB output456	*457	* Parameters:458	*459	* - [in/out] mpc  - MPC context.460	* - [in/out] tree - MPC tree structure that plane will be added to.461	* - [in] blnd_cfg - MPCC blending configuration for the new blending layer.462	* - [in] sm_cfg   - MPCC stereo mix configuration for the new blending layer.463	*	    stereo mix must disable for the very bottom layer of the tree config.464	* - [in] insert_above_mpcc - Insert new plane above this MPCC.  If465	*          NULL, insert as bottom plane.466	* - [in] dpp_id - DPP instance for the plane to be added.467	* - [in] mpcc_id - The MPCC physical instance to use for blending.468	*469	* Return:470	*471	* struct mpcc* - MPCC that was added.472	*/473	struct mpcc* (*insert_plane_to_secondary)(474			struct mpc *mpc,475			struct mpc_tree *tree,476			struct mpcc_blnd_cfg *blnd_cfg,477			struct mpcc_sm_cfg *sm_cfg,478			struct mpcc *insert_above_mpcc,479			int dpp_id,480			int mpcc_id);481 482	/**483	* @remove_mpcc_from_secondary:484	*485	* Remove a specified DPP from the 'secondary' MPC tree.486	*487	* Parameters:488	*489	* - [in/out] mpc  - MPC context.490	* - [in/out] tree - MPC tree structure that plane will be removed from.491	* - [in]     mpcc - MPCC to be removed from tree.492	*493	* Return:494	*495	* void496	*/497	void (*remove_mpcc_from_secondary)(498			struct mpc *mpc,499			struct mpc_tree *tree,500			struct mpcc *mpcc);501 502	/**503	* @get_mpcc_for_dpp_from_secondary:504	*505	* Find, if it exists, a MPCC from a given 'secondary' MPC tree that506	* is associated with specified plane.507	*508	* Parameters:509	* - [in/out] tree - MPC tree structure to search for plane.510	* - [in] dpp_id - DPP to be searched.511	*512	* Return:513	*514	* struct mpcc* - pointer to plane or NULL if no plane found.515	*/516	struct mpcc* (*get_mpcc_for_dpp_from_secondary)(517			struct mpc_tree *tree,518			int dpp_id);519 520	/**521	* @get_mpcc_for_dpp:522	*523	* Find, if it exists, a MPCC from a given MPC tree that524	* is associated with specified plane.525	*526	* Parameters:527	* - [in/out] tree - MPC tree structure to search for plane.528	* - [in] dpp_id - DPP to be searched.529	*530	* Return:531	*532	* struct mpcc* - pointer to plane or NULL if no plane found.533	*/534	struct mpcc* (*get_mpcc_for_dpp)(535			struct mpc_tree *tree,536			int dpp_id);537 538	/**539	* @wait_for_idle:540	*541	* Wait for a MPCC in MPC context to enter idle state.542	*543	* Parameters:544	* - [in/out] mpc - MPC Context.545	* - [in] id - MPCC to wait for idle state.546	*547	* Return:548	*549	* void550	*/551	void (*wait_for_idle)(struct mpc *mpc, int id);552 553	/**554	* @assert_mpcc_idle_before_connect:555	*556	* Assert if MPCC in MPC context is in idle state.557	*558	* Parameters:559	* - [in/out] mpc - MPC context.560	* - [in] id - MPCC to assert idle state.561	*562	* Return:563	*564	* void565	*/566	void (*assert_mpcc_idle_before_connect)(struct mpc *mpc, int mpcc_id);567 568	/**569	* @init_mpcc_list_from_hw:570	*571	* Iterate through the MPCC array from a given MPC context struct572	* and configure each MPCC according to its registers' values.573	*574	* Parameters:575	* - [in/out] mpc - MPC context to initialize MPCC array.576	* - [in/out] tree - MPC tree structure containing MPCC contexts to initialize.577	*578	* Return:579	*580	* void581	*/582	void (*init_mpcc_list_from_hw)(583		struct mpc *mpc,584		struct mpc_tree *tree);585 586	/**587	* @set_denorm:588	*589	* Set corresponding OPP DENORM_CONTROL register value to specific denorm_mode590	* based on given color depth.591	*592	* Parameters:593	* - [in/out] mpc - MPC context.594	* - [in] opp_id - Corresponding OPP to update register.595	* - [in] output_depth - Arbitrary color depth to set denorm_mode.596	*597	* Return:598	*599	* void600	*/601	void (*set_denorm)(struct mpc *mpc,602			int opp_id,603			enum dc_color_depth output_depth);604 605	/**606	* @set_denorm_clamp:607	*608	* Set denorm clamp values on corresponding OPP DENORM CONTROL register.609	*610	* Parameters:611	* - [in/out] mpc - MPC context.612	* - [in] opp_id - Corresponding OPP to update register.613	* - [in] denorm_clamp - Arbitrary denorm clamp to be set.614	*615	* Return:616	*617	* void618	*/619	void (*set_denorm_clamp)(620			struct mpc *mpc,621			int opp_id,622			struct mpc_denorm_clamp denorm_clamp);623 624	/**625	* @set_output_csc:626	*627	* Set the Output Color Space Conversion matrix628	* with given values and mode.629	*630	* Parameters:631	* - [in/out] mpc - MPC context.632	* - [in] opp_id - Corresponding OPP to update register.633	* - [in] regval - Values to set in CSC matrix.634	* - [in] ocsc_mode - Mode to set CSC.635	*636	* Return:637	*638	* void639	*/640	void (*set_output_csc)(struct mpc *mpc,641			int opp_id,642			const uint16_t *regval,643			enum mpc_output_csc_mode ocsc_mode);644 645	/**646	* @set_ocsc_default:647	*648	* Set the Output Color Space Conversion matrix649	* to default values according to color space.650	*651	* Parameters:652	* - [in/out] mpc - MPC context.653	* - [in] opp_id - Corresponding OPP to update register.654	* - [in] color_space - OCSC color space.655	* - [in] ocsc_mode - Mode to set CSC.656	*657	* Return:658	*659	* void660	*661	*/662	void (*set_ocsc_default)(struct mpc *mpc,663			int opp_id,664			enum dc_color_space color_space,665			enum mpc_output_csc_mode ocsc_mode);666 667	/**668	* @set_output_gamma:669	*670	* Set Output Gamma with given curve parameters.671	*672	* Parameters:673	* - [in/out] mpc - MPC context.674	* - [in] mpcc_id - Corresponding MPC to update registers.675	* - [in] params - Parameters.676	*677	* Return:678	*679	* void680	*681	*/682	void (*set_output_gamma)(683			struct mpc *mpc,684			int mpcc_id,685			const struct pwl_params *params);686	/**687	* @power_on_mpc_mem_pwr:688	*689	* Power on/off memory LUT for given MPCC.690	* Powering on enables LUT to be updated.691	* Powering off allows entering low power mode.692	*693	* Parameters:694	* - [in/out] mpc - MPC context.695	* - [in] mpcc_id - MPCC to power on.696	* - [in] power_on697	*698	* Return:699	*700	* void701	*/702	void (*power_on_mpc_mem_pwr)(703			struct mpc *mpc,704			int mpcc_id,705			bool power_on);706	/**707	* @set_dwb_mux:708	*709	* Set corresponding Display Writeback mux710	* MPC register field to given MPCC id.711	*712	* Parameters:713	* - [in/out] mpc - MPC context.714	* - [in] dwb_id - DWB to be set.715	* - [in] mpcc_id - MPCC id to be stored in DWB mux register.716	*717	* Return:718	*719	* void720	*/721	void (*set_dwb_mux)(722			struct mpc *mpc,723			int dwb_id,724			int mpcc_id);725 726	/**727	* @disable_dwb_mux:728	*729	* Reset corresponding Display Writeback mux730	* MPC register field.731	*732	* Parameters:733	* - [in/out] mpc - MPC context.734	* - [in] dwb_id - DWB to be set.735	*736	* Return:737	*738	* void739	*/740	void (*disable_dwb_mux)(741		struct mpc *mpc,742		int dwb_id);743 744	/**745	* @is_dwb_idle:746	*747	* Check DWB status on MPC_DWB0_MUX_STATUS register field.748	* Return if it is null.749	*750	* Parameters:751	* - [in/out] mpc - MPC context.752	* - [in] dwb_id - DWB to be checked.753	*754	* Return:755	*756	* bool - wheter DWB is idle or not757	*/758	bool (*is_dwb_idle)(759		struct mpc *mpc,760		int dwb_id);761 762	/**763	* @set_out_rate_control:764	*765	* Set display output rate control.766	*767	* Parameters:768	* - [in/out] mpc - MPC context.769	* - [in] opp_id - OPP to be set.770	* - [in] enable771	* - [in] rate_2x_mode772	* - [in] flow_control773	*774	* Return:775	*776	* void777	*/778	void (*set_out_rate_control)(779		struct mpc *mpc,780		int opp_id,781		bool enable,782		bool rate_2x_mode,783		struct mpc_dwb_flow_control *flow_control);784 785	/**786	* @set_gamut_remap:787	*788	* Set post-blending CTM for given MPCC.789	*790	* Parameters:791	* - [in] mpc - MPC context.792	* - [in] mpcc_id - MPCC to set gamut map.793	* - [in] adjust794	*795	* Return:796	*797	* void798	*/799	void (*set_gamut_remap)(800			struct mpc *mpc,801			int mpcc_id,802			const struct mpc_grph_gamut_adjustment *adjust);803 804	/**805	* @program_1dlut:806	*807	* Set 1 dimensional Lookup Table.808	*809	* Parameters:810	* - [in/out] mpc - MPC context811	* - [in] params - curve parameters for the LUT configuration812	* - [in] rmu_idx813	*814	* bool - wheter LUT was set (set with given parameters) or not (params is NULL and LUT is disabled).815	*/816	bool (*program_1dlut)(817			struct mpc *mpc,818			const struct pwl_params *params,819			uint32_t rmu_idx);820 821	/**822	* @program_shaper:823	*824	* Set shaper.825	*826	* Parameters:827	* - [in/out] mpc - MPC context828	* - [in] params - curve parameters to be set829	* - [in] rmu_idx830	*831	* Return:832	*833	* bool - wheter shaper was set (set with given parameters) or not (params is NULL and LUT is disabled).834	*/835	bool (*program_shaper)(836			struct mpc *mpc,837			const struct pwl_params *params,838			uint32_t rmu_idx);839 840	/**841	* @acquire_rmu:842	*843	* Set given MPCC to be multiplexed to given RMU unit.844	*845	* Parameters:846	* - [in/out] mpc - MPC context847	* - [in] mpcc_id - MPCC848	* - [in] rmu_idx - Given RMU unit to set MPCC to be multiplexed to.849	*850	* Return:851	*852	* unit32_t - rmu_idx if operation was successful, -1 else.853	*/854	uint32_t (*acquire_rmu)(struct mpc *mpc, int mpcc_id, int rmu_idx);855 856	/**857	* @program_3dlut:858	*859	* Set 3 dimensional Lookup Table.860	*861	* Parameters:862	* - [in/out] mpc - MPC context863	* - [in] params - tetrahedral parameters for the LUT configuration864	* - [in] rmu_idx865	*866	* bool - wheter LUT was set (set with given parameters) or not (params is NULL and LUT is disabled).867	*/868	bool (*program_3dlut)(869			struct mpc *mpc,870			const struct tetrahedral_params *params,871			int rmu_idx);872 873	/**874	* @release_rmu:875	*876	* For a given MPCC, release the RMU unit it muliplexes to.877	*878	* Parameters:879	* - [in/out] mpc - MPC context880	* - [in] mpcc_id - MPCC881	*882	* Return:883	*884	* int - a valid rmu_idx representing released RMU unit or -1 if there was no RMU unit to release.885	*/886	int (*release_rmu)(struct mpc *mpc, int mpcc_id);887 888	/**889	* @get_mpc_out_mux:890	*891	* Return MPC out mux.892	*893	* Parameters:894	* - [in] mpc - MPC context.895	* - [in] opp_id - OPP896	*897	* Return:898	*899	* unsigned int - Out Mux900	*/901	unsigned int (*get_mpc_out_mux)(902				struct mpc *mpc,903				int opp_id);904 905	/**906	* @set_bg_color:907	*908	* Find corresponding bottommost MPCC and909	* set its bg color.910	*911	* Parameters:912	* - [in/out] mpc - MPC context.913	* - [in] bg_color - background color to be set.914	* - [in] mpcc_id915	*916	* Return:917	*918	* void919	*/920	void (*set_bg_color)(struct mpc *mpc,921			struct tg_color *bg_color,922			int mpcc_id);923 924	/**925	* @set_mpc_mem_lp_mode:926	*927	* Set mpc_mem_lp_mode.928	*929	* Parameters:930	* - [in/out] mpc - MPC context.931	*932	* Return:933	*934	* void935	*/936 937	void (*set_mpc_mem_lp_mode)(struct mpc *mpc);938	/**939	* @set_movable_cm_location:940	*941	* Set Movable CM Location.942	*943	* Parameters:944	* - [in/out] mpc - MPC context.945	* - [in] location946	* - [in] mpcc_id947	*948	* Return:949	*950	* void951	*/952 953	void (*set_movable_cm_location)(struct mpc *mpc, enum mpcc_movable_cm_location location, int mpcc_id);954	/**955	* @update_3dlut_fast_load_select:956	*957	* Update 3D LUT fast load select.958	*959	* Parameters:960	* - [in/out] mpc - MPC context.961	* - [in] mpcc_id962	* - [in] hubp_idx963	*964	* Return:965	*966	* void967	*/968 969	void (*update_3dlut_fast_load_select)(struct mpc *mpc, int mpcc_id, int hubp_idx);970	/**971	* @get_3dlut_fast_load_status:972	*973	* Get 3D LUT fast load status and reference them with done, soft_underflow and hard_underflow pointers.974	*975	* Parameters:976	* - [in/out] mpc - MPC context.977	* - [in] mpcc_id978	* - [in/out] done979	* - [in/out] soft_underflow980	* - [in/out] hard_underflow981	*982	* Return:983	*984	* void985	*/986	void (*get_3dlut_fast_load_status)(struct mpc *mpc, int mpcc_id, uint32_t *done, uint32_t *soft_underflow, uint32_t *hard_underflow);987 988	/**989	* @populate_lut:990	*991	* Populate LUT with given tetrahedral parameters.992	*993	* Parameters:994	* - [in/out] mpc - MPC context.995	* - [in] id996	* - [in] params997	* - [in] lut_bank_a998	* - [in] mpcc_id999	*1000	* Return:1001	*1002	* void1003	*/1004	void (*populate_lut)(struct mpc *mpc, const enum MCM_LUT_ID id, const union mcm_lut_params params,1005			bool lut_bank_a, int mpcc_id);1006 1007	/**1008	* @program_lut_read_write_control:1009	*1010	* Program LUT RW control.1011	*1012	* Parameters:1013	* - [in/out] mpc - MPC context.1014	* - [in] id1015	* - [in] lut_bank_a1016	* - [in] mpcc_id1017	*1018	* Return:1019	*1020	* void1021	*/1022	void (*program_lut_read_write_control)(struct mpc *mpc, const enum MCM_LUT_ID id, bool lut_bank_a, int mpcc_id);1023 1024	/**1025	* @program_lut_mode:1026	*1027	* Program LUT mode.1028	*1029	* Parameters:1030	* - [in/out] mpc - MPC context.1031	* - [in] id1032	* - [in] xable1033	* - [in] lut_bank_a1034	* - [in] mpcc_id1035	*1036	* Return:1037	*1038	* void1039	*/1040	void (*program_lut_mode)(struct mpc *mpc, const enum MCM_LUT_ID id, const enum MCM_LUT_XABLE xable,1041			bool lut_bank_a, int mpcc_id);1042	/**1043	* @program_3dlut_size:1044	*1045	* Program 3D LUT size.1046	*1047	* Parameters:1048	* - [in/out] mpc - MPC context.1049	* - [in] is_17x17x17 - is 3dlut 17x17x171050	* - [in] mpcc_id1051	*1052	* Return:1053	*1054	* void1055	*/1056	void (*program_3dlut_size)(struct mpc *mpc, bool is_17x17x17, int mpcc_id);1057};1058 1059#endif1060