1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26#ifndef __DAL_COMPRESSOR_H__
27#define __DAL_COMPRESSOR_H__
28
29#include "include/grph_object_id.h"
30#include "bios_parser_interface.h"
31
32enum fbc_compress_ratio {
33 FBC_COMPRESS_RATIO_INVALID = 0,
34 FBC_COMPRESS_RATIO_1TO1 = 1,
35 FBC_COMPRESS_RATIO_2TO1 = 2,
36 FBC_COMPRESS_RATIO_4TO1 = 4,
37 FBC_COMPRESS_RATIO_8TO1 = 8,
38};
39
40union fbc_physical_address {
41 struct {
42 uint32_t low_part;
43 int32_t high_part;
44 } addr;
45 uint64_t quad_part;
46};
47
48struct compr_addr_and_pitch_params {
49
50 uint32_t inst;
51 uint32_t source_view_width;
52 uint32_t source_view_height;
53};
54
55enum fbc_hw_max_resolution_supported {
56 FBC_MAX_X = 3840,
57 FBC_MAX_Y = 2400,
58 FBC_MAX_X_SG = 1920,
59 FBC_MAX_Y_SG = 1080,
60};
61
62struct compressor;
63
64struct compressor_funcs {
65
66 void (*power_up_fbc)(struct compressor *cp);
67 void (*enable_fbc)(struct compressor *cp,
68 struct compr_addr_and_pitch_params *params);
69 void (*disable_fbc)(struct compressor *cp);
70 void (*set_fbc_invalidation_triggers)(struct compressor *cp,
71 uint32_t fbc_trigger);
72 void (*surface_address_and_pitch)(
73 struct compressor *cp,
74 struct compr_addr_and_pitch_params *params);
75 bool (*is_fbc_enabled_in_hw)(struct compressor *cp,
76 uint32_t *fbc_mapped_crtc_id);
77};
78struct compressor {
79 struct dc_context *ctx;
80 uint32_t attached_inst;
81 bool is_enabled;
82 const struct compressor_funcs *funcs;
83 union {
84 uint32_t raw;
85 struct {
86 uint32_t FBC_SUPPORT:1;
87 uint32_t FB_POOL:1;
88 uint32_t DYNAMIC_ALLOC:1;
89 uint32_t LPT_SUPPORT:1;
90 uint32_t LPT_MC_CONFIG:1;
91 uint32_t DUMMY_BACKEND:1;
92 uint32_t CLK_GATING_DISABLED:1;
93
94 } bits;
95 } options;
96
97 union fbc_physical_address compr_surface_address;
98
99 uint32_t embedded_panel_h_size;
100 uint32_t embedded_panel_v_size;
101 uint32_t memory_bus_width;
102 uint32_t banks_num;
103 uint32_t raw_size;
104 uint32_t channel_interleave_size;
105 uint32_t dram_channels_num;
106
107 uint32_t allocated_size;
108 uint32_t preferred_requested_size;
109 uint32_t lpt_channels_num;
110 enum fbc_compress_ratio min_compress_ratio;
111};
112
113struct fbc_input_info {
114 bool dynamic_fbc_buffer_alloc;
115 unsigned int source_view_width;
116 unsigned int source_view_height;
117 unsigned int num_of_active_targets;
118};
119
120
121struct fbc_requested_compressed_size {
122 unsigned int preferred_size;
123 unsigned int preferred_size_alignment;
124 unsigned int min_size;
125 unsigned int min_size_alignment;
126 union {
127 struct {
128
129 unsigned int preferred_must_be_framebuffer_pool : 1;
130
131 unsigned int min_must_be_framebuffer_pool : 1;
132 } bits;
133 unsigned int flags;
134 };
135};
136#endif
137