GNU Linux-libre 4.14.290-gnu1
[releases.git] / drivers / gpu / drm / msm / mdp / mdp5 / mdp5_mixer.h
1 /*
2  * Copyright (C) 2017 The Linux Foundation. All rights reserved.
3  *
4  * This program is free software; you can redistribute it and/or modify it
5  * under the terms of the GNU General Public License version 2 as published by
6  * the Free Software Foundation.
7  *
8  * This program is distributed in the hope that it will be useful, but WITHOUT
9  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
11  * more details.
12  *
13  * You should have received a copy of the GNU General Public License along with
14  * this program.  If not, see <http://www.gnu.org/licenses/>.
15  */
16
17 #ifndef __MDP5_LM_H__
18 #define __MDP5_LM_H__
19
20 /* represents a hw Layer Mixer, one (or more) is dynamically assigned to a crtc */
21 struct mdp5_hw_mixer {
22         int idx;
23
24         const char *name;
25
26         int lm;                 /* the LM instance # */
27         uint32_t caps;
28         int pp;
29         int dspp;
30
31         uint32_t flush_mask;      /* used to commit LM registers */
32 };
33
34 /* global atomic state of assignment between CRTCs and Layer Mixers: */
35 struct mdp5_hw_mixer_state {
36         struct drm_crtc *hwmixer_to_crtc[8];
37 };
38
39 struct mdp5_hw_mixer *mdp5_mixer_init(const struct mdp5_lm_instance *lm);
40 void mdp5_mixer_destroy(struct mdp5_hw_mixer *lm);
41 int mdp5_mixer_assign(struct drm_atomic_state *s, struct drm_crtc *crtc,
42                       uint32_t caps, struct mdp5_hw_mixer **mixer,
43                       struct mdp5_hw_mixer **r_mixer);
44 void mdp5_mixer_release(struct drm_atomic_state *s,
45                         struct mdp5_hw_mixer *mixer);
46
47 #endif /* __MDP5_LM_H__ */