]>
Commit | Line | Data |
---|---|---|
f42ef862 JK |
1 | /* |
2 | * Copyright 2021 Advanced Micro Devices, Inc. | |
3 | * | |
4 | * Permission is hereby granted, free of charge, to any person obtaining a | |
5 | * copy of this software and associated documentation files (the "Software"), | |
6 | * to deal in the Software without restriction, including without limitation | |
7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
8 | * and/or sell copies of the Software, and to permit persons to whom the | |
9 | * Software is furnished to do so, subject to the following conditions: | |
10 | * | |
11 | * The above copyright notice and this permission notice shall be included in | |
12 | * all copies or substantial portions of the Software. | |
13 | * | |
14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | |
17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | |
18 | * 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 OR | |
20 | * OTHER DEALINGS IN THE SOFTWARE. | |
21 | * | |
22 | * Authors: AMD | |
23 | * | |
24 | */ | |
25 | ||
26 | #ifndef DC_INC_LINK_ENC_CFG_H_ | |
27 | #define DC_INC_LINK_ENC_CFG_H_ | |
28 | ||
29 | /* This module implements functionality for dynamically assigning DIG link | |
30 | * encoder resources to display endpoints (links). | |
31 | */ | |
32 | ||
33 | #include "core_types.h" | |
34 | ||
35 | /* | |
36 | * Initialise link encoder resource tracking. | |
37 | */ | |
38 | void link_enc_cfg_init( | |
6faacf90 | 39 | const struct dc *dc, |
f42ef862 JK |
40 | struct dc_state *state); |
41 | ||
42 | /* | |
43 | * Algorithm for assigning available DIG link encoders to streams. | |
44 | * | |
45 | * Update link_enc_assignments table and link_enc_avail list accordingly in | |
46 | * struct resource_context. | |
47 | * | |
48 | * Loop over all streams twice: | |
49 | * a) First assign encoders to unmappable endpoints. | |
50 | * b) Then assign encoders to mappable endpoints. | |
51 | */ | |
52 | void link_enc_cfg_link_encs_assign( | |
53 | struct dc *dc, | |
54 | struct dc_state *state, | |
55 | struct dc_stream_state *streams[], | |
56 | uint8_t stream_count); | |
57 | ||
58 | /* | |
59 | * Unassign a link encoder from a stream. | |
60 | * | |
61 | * Update link_enc_assignments table and link_enc_avail list accordingly in | |
62 | * struct resource_context. | |
63 | */ | |
64 | void link_enc_cfg_link_enc_unassign( | |
65 | struct dc_state *state, | |
66 | struct dc_stream_state *stream); | |
67 | ||
79ed7354 JK |
68 | /* |
69 | * Check whether the transmitter driven by a link encoder is a mappable | |
70 | * endpoint. | |
71 | */ | |
72 | bool link_enc_cfg_is_transmitter_mappable( | |
6f941d4e | 73 | struct dc *dc, |
79ed7354 JK |
74 | struct link_encoder *link_enc); |
75 | ||
6f941d4e JK |
76 | /* Return stream using DIG link encoder resource. NULL if unused. */ |
77 | struct dc_stream_state *link_enc_cfg_get_stream_using_link_enc( | |
78 | struct dc *dc, | |
79 | enum engine_id eng_id); | |
80 | ||
79ed7354 JK |
81 | /* Return link using DIG link encoder resource. NULL if unused. */ |
82 | struct dc_link *link_enc_cfg_get_link_using_link_enc( | |
6f941d4e | 83 | struct dc *dc, |
79ed7354 JK |
84 | enum engine_id eng_id); |
85 | ||
86 | /* Return DIG link encoder used by link. NULL if unused. */ | |
87 | struct link_encoder *link_enc_cfg_get_link_enc_used_by_link( | |
6f941d4e | 88 | struct dc *dc, |
ede4f6da JK |
89 | const struct dc_link *link); |
90 | ||
91 | /* Return next available DIG link encoder. NULL if none available. */ | |
6f941d4e | 92 | struct link_encoder *link_enc_cfg_get_next_avail_link_enc(struct dc *dc); |
79ed7354 | 93 | |
940e084d JK |
94 | /* Return DIG link encoder used by stream. NULL if unused. */ |
95 | struct link_encoder *link_enc_cfg_get_link_enc_used_by_stream( | |
6f941d4e | 96 | struct dc *dc, |
940e084d JK |
97 | const struct dc_stream_state *stream); |
98 | ||
6f941d4e JK |
99 | /* Return true if encoder available to use. */ |
100 | bool link_enc_cfg_is_link_enc_avail(struct dc *dc, enum engine_id eng_id); | |
101 | ||
ec7077b5 JK |
102 | /* Returns true if encoder assignments in supplied state pass validity checks. */ |
103 | bool link_enc_cfg_validate(struct dc *dc, struct dc_state *state); | |
104 | ||
f42ef862 | 105 | #endif /* DC_INC_LINK_ENC_CFG_H_ */ |