1 /*
2  * Copyright 2022 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 __DML_DCN32_DISPLAY_MODE_VBA_UTIL_32_H__
27 #define __DML_DCN32_DISPLAY_MODE_VBA_UTIL_32_H__
28 
29 #include "../display_mode_enums.h"
30 #include "os_types.h"
31 #include "../dc_features.h"
32 #include "../display_mode_structs.h"
33 #include "../display_mode_vba.h"
34 
35 unsigned int dml32_dscceComputeDelay(
36 		unsigned int bpc,
37 		double BPP,
38 		unsigned int sliceWidth,
39 		unsigned int numSlices,
40 		enum output_format_class pixelFormat,
41 		enum output_encoder_class Output);
42 
43 unsigned int dml32_dscComputeDelay(enum output_format_class pixelFormat, enum output_encoder_class Output);
44 
45 bool IsVertical(enum dm_rotation_angle Scan);
46 
47 void dml32_CalculateBytePerPixelAndBlockSizes(
48 		enum source_format_class SourcePixelFormat,
49 		enum dm_swizzle_mode SurfaceTiling,
50 
51 		/*Output*/
52 		unsigned int *BytePerPixelY,
53 		unsigned int *BytePerPixelC,
54 		double           *BytePerPixelDETY,
55 		double           *BytePerPixelDETC,
56 		unsigned int *BlockHeight256BytesY,
57 		unsigned int *BlockHeight256BytesC,
58 		unsigned int *BlockWidth256BytesY,
59 		unsigned int *BlockWidth256BytesC,
60 		unsigned int *MacroTileHeightY,
61 		unsigned int *MacroTileHeightC,
62 		unsigned int *MacroTileWidthY,
63 		unsigned int *MacroTileWidthC);
64 
65 void dml32_CalculateSinglePipeDPPCLKAndSCLThroughput(
66 		double HRatio,
67 		double HRatioChroma,
68 		double VRatio,
69 		double VRatioChroma,
70 		double MaxDCHUBToPSCLThroughput,
71 		double MaxPSCLToLBThroughput,
72 		double PixelClock,
73 		enum source_format_class SourcePixelFormat,
74 		unsigned int HTaps,
75 		unsigned int HTapsChroma,
76 		unsigned int VTaps,
77 		unsigned int VTapsChroma,
78 
79 		/* output */
80 		double *PSCL_THROUGHPUT,
81 		double *PSCL_THROUGHPUT_CHROMA,
82 		double *DPPCLKUsingSingleDPP);
83 
84 void dml32_CalculateSwathAndDETConfiguration(
85 		unsigned int DETSizeOverride[],
86 		enum dm_use_mall_for_pstate_change_mode UseMALLForPStateChange[],
87 		unsigned int ConfigReturnBufferSizeInKByte,
88 		unsigned int MaxTotalDETInKByte,
89 		unsigned int MinCompressedBufferSizeInKByte,
90 		double ForceSingleDPP,
91 		unsigned int NumberOfActiveSurfaces,
92 		unsigned int nomDETInKByte,
93 		enum unbounded_requesting_policy UseUnboundedRequestingFinal,
94 		bool DisableUnboundRequestIfCompBufReservedSpaceNeedAdjustment,
95 		unsigned int PixelChunkSizeKBytes,
96 		unsigned int ROBSizeKBytes,
97 		unsigned int CompressedBufferSegmentSizeInkByteFinal,
98 		enum output_encoder_class Output[],
99 		double ReadBandwidthLuma[],
100 		double ReadBandwidthChroma[],
101 		double MaximumSwathWidthLuma[],
102 		double MaximumSwathWidthChroma[],
103 		enum dm_rotation_angle SourceRotation[],
104 		bool ViewportStationary[],
105 		enum source_format_class SourcePixelFormat[],
106 		enum dm_swizzle_mode SurfaceTiling[],
107 		unsigned int ViewportWidth[],
108 		unsigned int ViewportHeight[],
109 		unsigned int ViewportXStart[],
110 		unsigned int ViewportYStart[],
111 		unsigned int ViewportXStartC[],
112 		unsigned int ViewportYStartC[],
113 		unsigned int SurfaceWidthY[],
114 		unsigned int SurfaceWidthC[],
115 		unsigned int SurfaceHeightY[],
116 		unsigned int SurfaceHeightC[],
117 		unsigned int Read256BytesBlockHeightY[],
118 		unsigned int Read256BytesBlockHeightC[],
119 		unsigned int Read256BytesBlockWidthY[],
120 		unsigned int Read256BytesBlockWidthC[],
121 		enum odm_combine_mode ODMMode[],
122 		unsigned int BlendingAndTiming[],
123 		unsigned int BytePerPixY[],
124 		unsigned int BytePerPixC[],
125 		double BytePerPixDETY[],
126 		double BytePerPixDETC[],
127 		unsigned int HActive[],
128 		double HRatio[],
129 		double HRatioChroma[],
130 		unsigned int DPPPerSurface[],
131 
132 		/* Output */
133 		unsigned int swath_width_luma_ub[],
134 		unsigned int swath_width_chroma_ub[],
135 		double SwathWidth[],
136 		double SwathWidthChroma[],
137 		unsigned int SwathHeightY[],
138 		unsigned int SwathHeightC[],
139 		unsigned int DETBufferSizeInKByte[],
140 		unsigned int DETBufferSizeY[],
141 		unsigned int DETBufferSizeC[],
142 		bool *UnboundedRequestEnabled,
143 		unsigned int *CompressedBufferSizeInkByte,
144 		unsigned int *CompBufReservedSpaceKBytes,
145 		bool *CompBufReservedSpaceNeedAdjustment,
146 		bool ViewportSizeSupportPerSurface[],
147 		bool *ViewportSizeSupport);
148 
149 void dml32_CalculateSwathWidth(
150 		bool ForceSingleDPP,
151 		unsigned int NumberOfActiveSurfaces,
152 		enum source_format_class SourcePixelFormat[],
153 		enum dm_rotation_angle SourceScan[],
154 		bool ViewportStationary[],
155 		unsigned int ViewportWidth[],
156 		unsigned int ViewportHeight[],
157 		unsigned int ViewportXStart[],
158 		unsigned int ViewportYStart[],
159 		unsigned int ViewportXStartC[],
160 		unsigned int ViewportYStartC[],
161 		unsigned int SurfaceWidthY[],
162 		unsigned int SurfaceWidthC[],
163 		unsigned int SurfaceHeightY[],
164 		unsigned int SurfaceHeightC[],
165 		enum odm_combine_mode ODMMode[],
166 		unsigned int BytePerPixY[],
167 		unsigned int BytePerPixC[],
168 		unsigned int Read256BytesBlockHeightY[],
169 		unsigned int Read256BytesBlockHeightC[],
170 		unsigned int Read256BytesBlockWidthY[],
171 		unsigned int Read256BytesBlockWidthC[],
172 		unsigned int BlendingAndTiming[],
173 		unsigned int HActive[],
174 		double HRatio[],
175 		unsigned int DPPPerSurface[],
176 
177 		/* Output */
178 		double SwathWidthdoubleDPPY[],
179 		double SwathWidthdoubleDPPC[],
180 		double SwathWidthY[], // per-pipe
181 		double SwathWidthC[], // per-pipe
182 		unsigned int MaximumSwathHeightY[],
183 		unsigned int MaximumSwathHeightC[],
184 		unsigned int swath_width_luma_ub[], // per-pipe
185 		unsigned int swath_width_chroma_ub[]);
186 
187 bool dml32_UnboundedRequest(enum unbounded_requesting_policy UseUnboundedRequestingFinal,
188 		unsigned int TotalNumberOfActiveDPP,
189 		bool NoChroma,
190 		enum output_encoder_class Output,
191 		enum dm_swizzle_mode SurfaceTiling,
192 		bool CompBufReservedSpaceNeedAdjustment,
193 		bool DisableUnboundRequestIfCompBufReservedSpaceNeedAdjustment);
194 
195 void dml32_CalculateDETBufferSize(
196 		unsigned int DETSizeOverride[],
197 		enum dm_use_mall_for_pstate_change_mode UseMALLForPStateChange[],
198 		bool ForceSingleDPP,
199 		unsigned int NumberOfActiveSurfaces,
200 		bool UnboundedRequestEnabled,
201 		unsigned int nomDETInKByte,
202 		unsigned int MaxTotalDETInKByte,
203 		unsigned int ConfigReturnBufferSizeInKByte,
204 		unsigned int MinCompressedBufferSizeInKByte,
205 		unsigned int CompressedBufferSegmentSizeInkByteFinal,
206 		enum source_format_class SourcePixelFormat[],
207 		double ReadBandwidthLuma[],
208 		double ReadBandwidthChroma[],
209 		unsigned int RoundedUpMaxSwathSizeBytesY[],
210 		unsigned int RoundedUpMaxSwathSizeBytesC[],
211 		unsigned int DPPPerSurface[],
212 		/* Output */
213 		unsigned int DETBufferSizeInKByte[],
214 		unsigned int *CompressedBufferSizeInkByte);
215 
216 void dml32_CalculateODMMode(
217 		unsigned int MaximumPixelsPerLinePerDSCUnit,
218 		unsigned int HActive,
219 		enum output_format_class OutFormat,
220 		enum output_encoder_class Output,
221 		enum odm_combine_policy ODMUse,
222 		double StateDispclk,
223 		double MaxDispclk,
224 		bool DSCEnable,
225 		unsigned int TotalNumberOfActiveDPP,
226 		unsigned int MaxNumDPP,
227 		double PixelClock,
228 		double DISPCLKDPPCLKDSCCLKDownSpreading,
229 		double DISPCLKRampingMargin,
230 		double DISPCLKDPPCLKVCOSpeed,
231 		unsigned int NumberOfDSCSlices,
232 
233 		/* Output */
234 		bool *TotalAvailablePipesSupport,
235 		unsigned int *NumberOfDPP,
236 		enum odm_combine_mode *ODMMode,
237 		double *RequiredDISPCLKPerSurface);
238 
239 double dml32_CalculateRequiredDispclk(
240 		enum odm_combine_mode ODMMode,
241 		double PixelClock,
242 		double DISPCLKDPPCLKDSCCLKDownSpreading,
243 		double DISPCLKRampingMargin,
244 		double DISPCLKDPPCLKVCOSpeed,
245 		double MaxDispclk);
246 
247 double dml32_RoundToDFSGranularity(double Clock, bool round_up, double VCOSpeed);
248 
249 void dml32_CalculateOutputLink(
250 		double PHYCLKPerState,
251 		double PHYCLKD18PerState,
252 		double PHYCLKD32PerState,
253 		double Downspreading,
254 		bool IsMainSurfaceUsingTheIndicatedTiming,
255 		enum output_encoder_class Output,
256 		enum output_format_class OutputFormat,
257 		unsigned int HTotal,
258 		unsigned int HActive,
259 		double PixelClockBackEnd,
260 		double ForcedOutputLinkBPP,
261 		unsigned int DSCInputBitPerComponent,
262 		unsigned int NumberOfDSCSlices,
263 		double AudioSampleRate,
264 		unsigned int AudioSampleLayout,
265 		enum odm_combine_mode ODMModeNoDSC,
266 		enum odm_combine_mode ODMModeDSC,
267 		bool DSCEnable,
268 		unsigned int OutputLinkDPLanes,
269 		enum dm_output_link_dp_rate OutputLinkDPRate,
270 
271 		/* Output */
272 		bool *RequiresDSC,
273 		double *RequiresFEC,
274 		double  *OutBpp,
275 		enum dm_output_type *OutputType,
276 		enum dm_output_rate *OutputRate,
277 		unsigned int *RequiredSlots);
278 
279 void dml32_CalculateDPPCLK(
280 		unsigned int NumberOfActiveSurfaces,
281 		double DISPCLKDPPCLKDSCCLKDownSpreading,
282 		double DISPCLKDPPCLKVCOSpeed,
283 		double DPPCLKUsingSingleDPP[],
284 		unsigned int DPPPerSurface[],
285 
286 		/* output */
287 		double *GlobalDPPCLK,
288 		double Dppclk[]);
289 
290 double dml32_TruncToValidBPP(
291 		double LinkBitRate,
292 		unsigned int Lanes,
293 		unsigned int HTotal,
294 		unsigned int HActive,
295 		double PixelClock,
296 		double DesiredBPP,
297 		bool DSCEnable,
298 		enum output_encoder_class Output,
299 		enum output_format_class Format,
300 		unsigned int DSCInputBitPerComponent,
301 		unsigned int DSCSlices,
302 		unsigned int AudioRate,
303 		unsigned int AudioLayout,
304 		enum odm_combine_mode ODMModeNoDSC,
305 		enum odm_combine_mode ODMModeDSC,
306 		/* Output */
307 		unsigned int *RequiredSlots);
308 
309 double dml32_RequiredDTBCLK(
310 		bool              DSCEnable,
311 		double               PixelClock,
312 		enum output_format_class  OutputFormat,
313 		double               OutputBpp,
314 		unsigned int              DSCSlices,
315 		unsigned int                 HTotal,
316 		unsigned int                 HActive,
317 		unsigned int              AudioRate,
318 		unsigned int              AudioLayout);
319 
320 unsigned int dml32_DSCDelayRequirement(bool DSCEnabled,
321 		enum odm_combine_mode ODMMode,
322 		unsigned int DSCInputBitPerComponent,
323 		double OutputBpp,
324 		unsigned int HActive,
325 		unsigned int HTotal,
326 		unsigned int NumberOfDSCSlices,
327 		enum output_format_class  OutputFormat,
328 		enum output_encoder_class Output,
329 		double PixelClock,
330 		double PixelClockBackEnd,
331 		double dsc_delay_factor_wa);
332 
333 void dml32_CalculateSurfaceSizeInMall(
334 		unsigned int NumberOfActiveSurfaces,
335 		unsigned int MALLAllocatedForDCN,
336 		enum dm_use_mall_for_static_screen_mode UseMALLForStaticScreen[],
337 		bool DCCEnable[],
338 		bool ViewportStationary[],
339 		unsigned int ViewportXStartY[],
340 		unsigned int ViewportYStartY[],
341 		unsigned int ViewportXStartC[],
342 		unsigned int ViewportYStartC[],
343 		unsigned int ViewportWidthY[],
344 		unsigned int ViewportHeightY[],
345 		unsigned int BytesPerPixelY[],
346 		unsigned int ViewportWidthC[],
347 		unsigned int ViewportHeightC[],
348 		unsigned int BytesPerPixelC[],
349 		unsigned int SurfaceWidthY[],
350 		unsigned int SurfaceWidthC[],
351 		unsigned int SurfaceHeightY[],
352 		unsigned int SurfaceHeightC[],
353 		unsigned int Read256BytesBlockWidthY[],
354 		unsigned int Read256BytesBlockWidthC[],
355 		unsigned int Read256BytesBlockHeightY[],
356 		unsigned int Read256BytesBlockHeightC[],
357 		unsigned int ReadBlockWidthY[],
358 		unsigned int ReadBlockWidthC[],
359 		unsigned int ReadBlockHeightY[],
360 		unsigned int ReadBlockHeightC[],
361 
362 		/* Output */
363 		unsigned int    SurfaceSizeInMALL[],
364 		bool *ExceededMALLSize);
365 
366 void dml32_CalculateVMRowAndSwath(
367 		unsigned int NumberOfActiveSurfaces,
368 		DmlPipe myPipe[],
369 		unsigned int SurfaceSizeInMALL[],
370 		unsigned int PTEBufferSizeInRequestsLuma,
371 		unsigned int PTEBufferSizeInRequestsChroma,
372 		unsigned int DCCMetaBufferSizeBytes,
373 		enum dm_use_mall_for_static_screen_mode UseMALLForStaticScreen[],
374 		enum dm_use_mall_for_pstate_change_mode UseMALLForPStateChange[],
375 		unsigned int MALLAllocatedForDCN,
376 		double SwathWidthY[],
377 		double SwathWidthC[],
378 		bool GPUVMEnable,
379 		bool HostVMEnable,
380 		unsigned int HostVMMaxNonCachedPageTableLevels,
381 		unsigned int GPUVMMaxPageTableLevels,
382 		unsigned int GPUVMMinPageSizeKBytes[],
383 		unsigned int HostVMMinPageSize,
384 
385 		/* Output */
386 		bool PTEBufferSizeNotExceeded[],
387 		bool DCCMetaBufferSizeNotExceeded[],
388 		unsigned int dpte_row_width_luma_ub[],
389 		unsigned int dpte_row_width_chroma_ub[],
390 		unsigned int dpte_row_height_luma[],
391 		unsigned int dpte_row_height_chroma[],
392 		unsigned int dpte_row_height_linear_luma[],     // VBA_DELTA
393 		unsigned int dpte_row_height_linear_chroma[],   // VBA_DELTA
394 		unsigned int meta_req_width[],
395 		unsigned int meta_req_width_chroma[],
396 		unsigned int meta_req_height[],
397 		unsigned int meta_req_height_chroma[],
398 		unsigned int meta_row_width[],
399 		unsigned int meta_row_width_chroma[],
400 		unsigned int meta_row_height[],
401 		unsigned int meta_row_height_chroma[],
402 		unsigned int vm_group_bytes[],
403 		unsigned int dpte_group_bytes[],
404 		unsigned int PixelPTEReqWidthY[],
405 		unsigned int PixelPTEReqHeightY[],
406 		unsigned int PTERequestSizeY[],
407 		unsigned int PixelPTEReqWidthC[],
408 		unsigned int PixelPTEReqHeightC[],
409 		unsigned int PTERequestSizeC[],
410 		unsigned int dpde0_bytes_per_frame_ub_l[],
411 		unsigned int meta_pte_bytes_per_frame_ub_l[],
412 		unsigned int dpde0_bytes_per_frame_ub_c[],
413 		unsigned int meta_pte_bytes_per_frame_ub_c[],
414 		double PrefetchSourceLinesY[],
415 		double PrefetchSourceLinesC[],
416 		double VInitPreFillY[],
417 		double VInitPreFillC[],
418 		unsigned int MaxNumSwathY[],
419 		unsigned int MaxNumSwathC[],
420 		double meta_row_bw[],
421 		double dpte_row_bw[],
422 		double PixelPTEBytesPerRow[],
423 		double PDEAndMetaPTEBytesFrame[],
424 		double MetaRowByte[],
425 		bool use_one_row_for_frame[],
426 		bool use_one_row_for_frame_flip[],
427 		bool UsesMALLForStaticScreen[],
428 		bool PTE_BUFFER_MODE[],
429 		unsigned int BIGK_FRAGMENT_SIZE[]);
430 
431 unsigned int dml32_CalculateVMAndRowBytes(
432 		bool ViewportStationary,
433 		bool DCCEnable,
434 		unsigned int NumberOfDPPs,
435 		unsigned int BlockHeight256Bytes,
436 		unsigned int BlockWidth256Bytes,
437 		enum source_format_class SourcePixelFormat,
438 		unsigned int SurfaceTiling,
439 		unsigned int BytePerPixel,
440 		enum dm_rotation_angle SourceScan,
441 		double SwathWidth,
442 		unsigned int ViewportHeight,
443 		unsigned int    ViewportXStart,
444 		unsigned int    ViewportYStart,
445 		bool GPUVMEnable,
446 		bool HostVMEnable,
447 		unsigned int HostVMMaxNonCachedPageTableLevels,
448 		unsigned int GPUVMMaxPageTableLevels,
449 		unsigned int GPUVMMinPageSizeKBytes,
450 		unsigned int HostVMMinPageSize,
451 		unsigned int PTEBufferSizeInRequests,
452 		unsigned int Pitch,
453 		unsigned int DCCMetaPitch,
454 		unsigned int MacroTileWidth,
455 		unsigned int MacroTileHeight,
456 
457 		/* Output */
458 		unsigned int *MetaRowByte,
459 		unsigned int *PixelPTEBytesPerRow,
460 		unsigned int    *dpte_row_width_ub,
461 		unsigned int *dpte_row_height,
462 		unsigned int *dpte_row_height_linear,
463 		unsigned int    *PixelPTEBytesPerRow_one_row_per_frame,
464 		unsigned int    *dpte_row_width_ub_one_row_per_frame,
465 		unsigned int    *dpte_row_height_one_row_per_frame,
466 		unsigned int *MetaRequestWidth,
467 		unsigned int *MetaRequestHeight,
468 		unsigned int *meta_row_width,
469 		unsigned int *meta_row_height,
470 		unsigned int *PixelPTEReqWidth,
471 		unsigned int *PixelPTEReqHeight,
472 		unsigned int *PTERequestSize,
473 		unsigned int    *DPDE0BytesFrame,
474 		unsigned int    *MetaPTEBytesFrame);
475 
476 double dml32_CalculatePrefetchSourceLines(
477 		double VRatio,
478 		unsigned int VTaps,
479 		bool Interlace,
480 		bool ProgressiveToInterlaceUnitInOPP,
481 		unsigned int SwathHeight,
482 		enum dm_rotation_angle SourceRotation,
483 		bool ViewportStationary,
484 		double SwathWidth,
485 		unsigned int ViewportHeight,
486 		unsigned int ViewportXStart,
487 		unsigned int ViewportYStart,
488 
489 		/* Output */
490 		double *VInitPreFill,
491 		unsigned int *MaxNumSwath);
492 
493 void dml32_CalculateMALLUseForStaticScreen(
494 		unsigned int NumberOfActiveSurfaces,
495 		unsigned int MALLAllocatedForDCNFinal,
496 		enum dm_use_mall_for_static_screen_mode *UseMALLForStaticScreen,
497 		unsigned int SurfaceSizeInMALL[],
498 		bool one_row_per_frame_fits_in_buffer[],
499 
500 		/* output */
501 		bool UsesMALLForStaticScreen[]);
502 
503 void dml32_CalculateRowBandwidth(
504 		bool GPUVMEnable,
505 		enum source_format_class SourcePixelFormat,
506 		double VRatio,
507 		double VRatioChroma,
508 		bool DCCEnable,
509 		double LineTime,
510 		unsigned int MetaRowByteLuma,
511 		unsigned int MetaRowByteChroma,
512 		unsigned int meta_row_height_luma,
513 		unsigned int meta_row_height_chroma,
514 		unsigned int PixelPTEBytesPerRowLuma,
515 		unsigned int PixelPTEBytesPerRowChroma,
516 		unsigned int dpte_row_height_luma,
517 		unsigned int dpte_row_height_chroma,
518 		/* Output */
519 		double *meta_row_bw,
520 		double *dpte_row_bw);
521 
522 double dml32_CalculateUrgentLatency(
523 		double UrgentLatencyPixelDataOnly,
524 		double UrgentLatencyPixelMixedWithVMData,
525 		double UrgentLatencyVMDataOnly,
526 		bool   DoUrgentLatencyAdjustment,
527 		double UrgentLatencyAdjustmentFabricClockComponent,
528 		double UrgentLatencyAdjustmentFabricClockReference,
529 		double FabricClock);
530 
531 void dml32_CalculateUrgentBurstFactor(
532 		enum dm_use_mall_for_pstate_change_mode UseMALLForPStateChange,
533 		unsigned int    swath_width_luma_ub,
534 		unsigned int    swath_width_chroma_ub,
535 		unsigned int SwathHeightY,
536 		unsigned int SwathHeightC,
537 		double  LineTime,
538 		double  UrgentLatency,
539 		double  CursorBufferSize,
540 		unsigned int CursorWidth,
541 		unsigned int CursorBPP,
542 		double  VRatio,
543 		double  VRatioC,
544 		double  BytePerPixelInDETY,
545 		double  BytePerPixelInDETC,
546 		unsigned int    DETBufferSizeY,
547 		unsigned int    DETBufferSizeC,
548 		/* Output */
549 		double *UrgentBurstFactorCursor,
550 		double *UrgentBurstFactorLuma,
551 		double *UrgentBurstFactorChroma,
552 		bool   *NotEnoughUrgentLatencyHiding);
553 
554 void dml32_CalculateDCFCLKDeepSleep(
555 		unsigned int NumberOfActiveSurfaces,
556 		unsigned int BytePerPixelY[],
557 		unsigned int BytePerPixelC[],
558 		double VRatio[],
559 		double VRatioChroma[],
560 		double SwathWidthY[],
561 		double SwathWidthC[],
562 		unsigned int DPPPerSurface[],
563 		double HRatio[],
564 		double HRatioChroma[],
565 		double PixelClock[],
566 		double PSCL_THROUGHPUT[],
567 		double PSCL_THROUGHPUT_CHROMA[],
568 		double Dppclk[],
569 		double ReadBandwidthLuma[],
570 		double ReadBandwidthChroma[],
571 		unsigned int ReturnBusWidth,
572 
573 		/* Output */
574 		double *DCFClkDeepSleep);
575 
576 double dml32_CalculateWriteBackDelay(
577 		enum source_format_class WritebackPixelFormat,
578 		double WritebackHRatio,
579 		double WritebackVRatio,
580 		unsigned int WritebackVTaps,
581 		unsigned int         WritebackDestinationWidth,
582 		unsigned int         WritebackDestinationHeight,
583 		unsigned int         WritebackSourceHeight,
584 		unsigned int HTotal);
585 
586 void dml32_UseMinimumDCFCLK(
587 		enum dm_use_mall_for_pstate_change_mode UseMALLForPStateChange[],
588 		bool DRRDisplay[],
589 		bool SynchronizeDRRDisplaysForUCLKPStateChangeFinal,
590 		unsigned int MaxInterDCNTileRepeaters,
591 		unsigned int MaxPrefetchMode,
592 		double DRAMClockChangeLatencyFinal,
593 		double FCLKChangeLatency,
594 		double SREnterPlusExitTime,
595 		unsigned int ReturnBusWidth,
596 		unsigned int RoundTripPingLatencyCycles,
597 		unsigned int ReorderingBytes,
598 		unsigned int PixelChunkSizeInKByte,
599 		unsigned int MetaChunkSize,
600 		bool GPUVMEnable,
601 		unsigned int GPUVMMaxPageTableLevels,
602 		bool HostVMEnable,
603 		unsigned int NumberOfActiveSurfaces,
604 		double HostVMMinPageSize,
605 		unsigned int HostVMMaxNonCachedPageTableLevels,
606 		bool DynamicMetadataVMEnabled,
607 		bool ImmediateFlipRequirement,
608 		bool ProgressiveToInterlaceUnitInOPP,
609 		double MaxAveragePercentOfIdealSDPPortBWDisplayCanUseInNormalSystemOperation,
610 		double PercentOfIdealSDPPortBWReceivedAfterUrgLatency,
611 		unsigned int VTotal[],
612 		unsigned int VActive[],
613 		unsigned int DynamicMetadataTransmittedBytes[],
614 		unsigned int DynamicMetadataLinesBeforeActiveRequired[],
615 		bool Interlace[],
616 		double RequiredDPPCLKPerSurface[][2][DC__NUM_DPP__MAX],
617 		double RequiredDISPCLK[][2],
618 		double UrgLatency[],
619 		unsigned int NoOfDPP[][2][DC__NUM_DPP__MAX],
620 		double ProjectedDCFClkDeepSleep[][2],
621 		double MaximumVStartup[][2][DC__NUM_DPP__MAX],
622 		unsigned int TotalNumberOfActiveDPP[][2],
623 		unsigned int TotalNumberOfDCCActiveDPP[][2],
624 		unsigned int dpte_group_bytes[],
625 		double PrefetchLinesY[][2][DC__NUM_DPP__MAX],
626 		double PrefetchLinesC[][2][DC__NUM_DPP__MAX],
627 		unsigned int swath_width_luma_ub_all_states[][2][DC__NUM_DPP__MAX],
628 		unsigned int swath_width_chroma_ub_all_states[][2][DC__NUM_DPP__MAX],
629 		unsigned int BytePerPixelY[],
630 		unsigned int BytePerPixelC[],
631 		unsigned int HTotal[],
632 		double PixelClock[],
633 		double PDEAndMetaPTEBytesPerFrame[][2][DC__NUM_DPP__MAX],
634 		double DPTEBytesPerRow[][2][DC__NUM_DPP__MAX],
635 		double MetaRowBytes[][2][DC__NUM_DPP__MAX],
636 		bool DynamicMetadataEnable[],
637 		double ReadBandwidthLuma[],
638 		double ReadBandwidthChroma[],
639 		double DCFCLKPerState[],
640 		/* Output */
641 		double DCFCLKState[][2]);
642 
643 unsigned int dml32_CalculateExtraLatencyBytes(unsigned int ReorderingBytes,
644 		unsigned int TotalNumberOfActiveDPP,
645 		unsigned int PixelChunkSizeInKByte,
646 		unsigned int TotalNumberOfDCCActiveDPP,
647 		unsigned int MetaChunkSize,
648 		bool GPUVMEnable,
649 		bool HostVMEnable,
650 		unsigned int NumberOfActiveSurfaces,
651 		unsigned int NumberOfDPP[],
652 		unsigned int dpte_group_bytes[],
653 		double HostVMInefficiencyFactor,
654 		double HostVMMinPageSize,
655 		unsigned int HostVMMaxNonCachedPageTableLevels);
656 
657 void dml32_CalculateVUpdateAndDynamicMetadataParameters(
658 		unsigned int MaxInterDCNTileRepeaters,
659 		double Dppclk,
660 		double Dispclk,
661 		double DCFClkDeepSleep,
662 		double PixelClock,
663 		unsigned int HTotal,
664 		unsigned int VBlank,
665 		unsigned int DynamicMetadataTransmittedBytes,
666 		unsigned int DynamicMetadataLinesBeforeActiveRequired,
667 		unsigned int InterlaceEnable,
668 		bool ProgressiveToInterlaceUnitInOPP,
669 		double *TSetup,
670 		double *Tdmbf,
671 		double *Tdmec,
672 		double *Tdmsks,
673 		unsigned int *VUpdateOffsetPix,
674 		double *VUpdateWidthPix,
675 		double *VReadyOffsetPix);
676 
677 double dml32_CalculateTWait(
678 		unsigned int PrefetchMode,
679 		enum dm_use_mall_for_pstate_change_mode UseMALLForPStateChange,
680 		bool SynchronizeDRRDisplaysForUCLKPStateChangeFinal,
681 		bool DRRDisplay,
682 		double DRAMClockChangeLatency,
683 		double FCLKChangeLatency,
684 		double UrgentLatency,
685 		double SREnterPlusExitTime);
686 
687 double dml32_get_return_bw_mbps(const soc_bounding_box_st *soc,
688 		const int VoltageLevel,
689 		const bool HostVMEnable,
690 		const double DCFCLK,
691 		const double FabricClock,
692 		const double DRAMSpeed);
693 
694 double dml32_get_return_bw_mbps_vm_only(const soc_bounding_box_st *soc,
695 		const int VoltageLevel,
696 		const double DCFCLK,
697 		const double FabricClock,
698 		const double DRAMSpeed);
699 
700 double dml32_CalculateExtraLatency(
701 		unsigned int RoundTripPingLatencyCycles,
702 		unsigned int ReorderingBytes,
703 		double DCFCLK,
704 		unsigned int TotalNumberOfActiveDPP,
705 		unsigned int PixelChunkSizeInKByte,
706 		unsigned int TotalNumberOfDCCActiveDPP,
707 		unsigned int MetaChunkSize,
708 		double ReturnBW,
709 		bool GPUVMEnable,
710 		bool HostVMEnable,
711 		unsigned int NumberOfActiveSurfaces,
712 		unsigned int NumberOfDPP[],
713 		unsigned int dpte_group_bytes[],
714 		double HostVMInefficiencyFactor,
715 		double HostVMMinPageSize,
716 		unsigned int HostVMMaxNonCachedPageTableLevels);
717 
718 bool dml32_CalculatePrefetchSchedule(
719 		struct vba_vars_st *v,
720 		unsigned int k,
721 		double HostVMInefficiencyFactor,
722 		DmlPipe *myPipe,
723 		unsigned int DSCDelay,
724 		unsigned int DPP_RECOUT_WIDTH,
725 		unsigned int VStartup,
726 		unsigned int MaxVStartup,
727 		double UrgentLatency,
728 		double UrgentExtraLatency,
729 		double TCalc,
730 		unsigned int PDEAndMetaPTEBytesFrame,
731 		unsigned int MetaRowByte,
732 		unsigned int PixelPTEBytesPerRow,
733 		double PrefetchSourceLinesY,
734 		unsigned int SwathWidthY,
735 		unsigned int VInitPreFillY,
736 		unsigned int MaxNumSwathY,
737 		double PrefetchSourceLinesC,
738 		unsigned int SwathWidthC,
739 		unsigned int VInitPreFillC,
740 		unsigned int MaxNumSwathC,
741 		unsigned int swath_width_luma_ub,
742 		unsigned int swath_width_chroma_ub,
743 		unsigned int SwathHeightY,
744 		unsigned int SwathHeightC,
745 		double TWait,
746 		double TPreReq,
747 		/* Output */
748 		double   *DSTXAfterScaler,
749 		double   *DSTYAfterScaler,
750 		double *DestinationLinesForPrefetch,
751 		double *PrefetchBandwidth,
752 		double *DestinationLinesToRequestVMInVBlank,
753 		double *DestinationLinesToRequestRowInVBlank,
754 		double *VRatioPrefetchY,
755 		double *VRatioPrefetchC,
756 		double *RequiredPrefetchPixDataBWLuma,
757 		double *RequiredPrefetchPixDataBWChroma,
758 		bool   *NotEnoughTimeForDynamicMetadata,
759 		double *Tno_bw,
760 		double *prefetch_vmrow_bw,
761 		double *Tdmdl_vm,
762 		double *Tdmdl,
763 		double *TSetup,
764 		unsigned int   *VUpdateOffsetPix,
765 		double   *VUpdateWidthPix,
766 		double   *VReadyOffsetPix);
767 
768 void dml32_CalculateFlipSchedule(
769 		double HostVMInefficiencyFactor,
770 		double UrgentExtraLatency,
771 		double UrgentLatency,
772 		unsigned int GPUVMMaxPageTableLevels,
773 		bool HostVMEnable,
774 		unsigned int HostVMMaxNonCachedPageTableLevels,
775 		bool GPUVMEnable,
776 		double HostVMMinPageSize,
777 		double PDEAndMetaPTEBytesPerFrame,
778 		double MetaRowBytes,
779 		double DPTEBytesPerRow,
780 		double BandwidthAvailableForImmediateFlip,
781 		unsigned int TotImmediateFlipBytes,
782 		enum source_format_class SourcePixelFormat,
783 		double LineTime,
784 		double VRatio,
785 		double VRatioChroma,
786 		double Tno_bw,
787 		bool DCCEnable,
788 		unsigned int dpte_row_height,
789 		unsigned int meta_row_height,
790 		unsigned int dpte_row_height_chroma,
791 		unsigned int meta_row_height_chroma,
792 		bool    use_one_row_for_frame_flip,
793 
794 		/* Output */
795 		double *DestinationLinesToRequestVMInImmediateFlip,
796 		double *DestinationLinesToRequestRowInImmediateFlip,
797 		double *final_flip_bw,
798 		bool *ImmediateFlipSupportedForPipe);
799 
800 void dml32_CalculateWatermarksMALLUseAndDRAMSpeedChangeSupport(
801 		struct vba_vars_st *v,
802 		unsigned int PrefetchMode,
803 		double DCFCLK,
804 		double ReturnBW,
805 		SOCParametersList mmSOCParameters,
806 		double SOCCLK,
807 		double DCFClkDeepSleep,
808 		unsigned int DETBufferSizeY[],
809 		unsigned int DETBufferSizeC[],
810 		unsigned int SwathHeightY[],
811 		unsigned int SwathHeightC[],
812 		double SwathWidthY[],
813 		double SwathWidthC[],
814 		unsigned int DPPPerSurface[],
815 		double BytePerPixelDETY[],
816 		double BytePerPixelDETC[],
817 		double DSTXAfterScaler[],
818 		double DSTYAfterScaler[],
819 		bool UnboundedRequestEnabled,
820 		unsigned int CompressedBufferSizeInkByte,
821 
822 		/* Output */
823 		enum clock_change_support *DRAMClockChangeSupport,
824 		double MaxActiveDRAMClockChangeLatencySupported[],
825 		unsigned int SubViewportLinesNeededInMALL[],
826 		enum dm_fclock_change_support *FCLKChangeSupport,
827 		double *MinActiveFCLKChangeLatencySupported,
828 		bool *USRRetrainingSupport,
829 		double ActiveDRAMClockChangeLatencyMargin[]);
830 
831 double dml32_CalculateWriteBackDISPCLK(
832 		enum source_format_class WritebackPixelFormat,
833 		double PixelClock,
834 		double WritebackHRatio,
835 		double WritebackVRatio,
836 		unsigned int WritebackHTaps,
837 		unsigned int WritebackVTaps,
838 		unsigned int   WritebackSourceWidth,
839 		unsigned int   WritebackDestinationWidth,
840 		unsigned int HTotal,
841 		unsigned int WritebackLineBufferSize,
842 		double DISPCLKDPPCLKVCOSpeed);
843 
844 void dml32_CalculateMinAndMaxPrefetchMode(
845 		enum dm_prefetch_modes   AllowForPStateChangeOrStutterInVBlankFinal,
846 		unsigned int             *MinPrefetchMode,
847 		unsigned int             *MaxPrefetchMode);
848 
849 void dml32_CalculatePixelDeliveryTimes(
850 		unsigned int             NumberOfActiveSurfaces,
851 		double              VRatio[],
852 		double              VRatioChroma[],
853 		double              VRatioPrefetchY[],
854 		double              VRatioPrefetchC[],
855 		unsigned int             swath_width_luma_ub[],
856 		unsigned int             swath_width_chroma_ub[],
857 		unsigned int             DPPPerSurface[],
858 		double              HRatio[],
859 		double              HRatioChroma[],
860 		double              PixelClock[],
861 		double              PSCL_THROUGHPUT[],
862 		double              PSCL_THROUGHPUT_CHROMA[],
863 		double              Dppclk[],
864 		unsigned int             BytePerPixelC[],
865 		enum dm_rotation_angle   SourceRotation[],
866 		unsigned int             NumberOfCursors[],
867 		unsigned int             CursorWidth[][DC__NUM_CURSOR__MAX],
868 		unsigned int             CursorBPP[][DC__NUM_CURSOR__MAX],
869 		unsigned int             BlockWidth256BytesY[],
870 		unsigned int             BlockHeight256BytesY[],
871 		unsigned int             BlockWidth256BytesC[],
872 		unsigned int             BlockHeight256BytesC[],
873 
874 		/* Output */
875 		double              DisplayPipeLineDeliveryTimeLuma[],
876 		double              DisplayPipeLineDeliveryTimeChroma[],
877 		double              DisplayPipeLineDeliveryTimeLumaPrefetch[],
878 		double              DisplayPipeLineDeliveryTimeChromaPrefetch[],
879 		double              DisplayPipeRequestDeliveryTimeLuma[],
880 		double              DisplayPipeRequestDeliveryTimeChroma[],
881 		double              DisplayPipeRequestDeliveryTimeLumaPrefetch[],
882 		double              DisplayPipeRequestDeliveryTimeChromaPrefetch[],
883 		double              CursorRequestDeliveryTime[],
884 		double              CursorRequestDeliveryTimePrefetch[]);
885 
886 void dml32_CalculateMetaAndPTETimes(
887 		bool use_one_row_for_frame[],
888 		unsigned int NumberOfActiveSurfaces,
889 		bool GPUVMEnable,
890 		unsigned int MetaChunkSize,
891 		unsigned int MinMetaChunkSizeBytes,
892 		unsigned int    HTotal[],
893 		double  VRatio[],
894 		double  VRatioChroma[],
895 		double  DestinationLinesToRequestRowInVBlank[],
896 		double  DestinationLinesToRequestRowInImmediateFlip[],
897 		bool DCCEnable[],
898 		double  PixelClock[],
899 		unsigned int BytePerPixelY[],
900 		unsigned int BytePerPixelC[],
901 		enum dm_rotation_angle SourceRotation[],
902 		unsigned int dpte_row_height[],
903 		unsigned int dpte_row_height_chroma[],
904 		unsigned int meta_row_width[],
905 		unsigned int meta_row_width_chroma[],
906 		unsigned int meta_row_height[],
907 		unsigned int meta_row_height_chroma[],
908 		unsigned int meta_req_width[],
909 		unsigned int meta_req_width_chroma[],
910 		unsigned int meta_req_height[],
911 		unsigned int meta_req_height_chroma[],
912 		unsigned int dpte_group_bytes[],
913 		unsigned int    PTERequestSizeY[],
914 		unsigned int    PTERequestSizeC[],
915 		unsigned int    PixelPTEReqWidthY[],
916 		unsigned int    PixelPTEReqHeightY[],
917 		unsigned int    PixelPTEReqWidthC[],
918 		unsigned int    PixelPTEReqHeightC[],
919 		unsigned int    dpte_row_width_luma_ub[],
920 		unsigned int    dpte_row_width_chroma_ub[],
921 
922 		/* Output */
923 		double DST_Y_PER_PTE_ROW_NOM_L[],
924 		double DST_Y_PER_PTE_ROW_NOM_C[],
925 		double DST_Y_PER_META_ROW_NOM_L[],
926 		double DST_Y_PER_META_ROW_NOM_C[],
927 		double TimePerMetaChunkNominal[],
928 		double TimePerChromaMetaChunkNominal[],
929 		double TimePerMetaChunkVBlank[],
930 		double TimePerChromaMetaChunkVBlank[],
931 		double TimePerMetaChunkFlip[],
932 		double TimePerChromaMetaChunkFlip[],
933 		double time_per_pte_group_nom_luma[],
934 		double time_per_pte_group_vblank_luma[],
935 		double time_per_pte_group_flip_luma[],
936 		double time_per_pte_group_nom_chroma[],
937 		double time_per_pte_group_vblank_chroma[],
938 		double time_per_pte_group_flip_chroma[]);
939 
940 void dml32_CalculateVMGroupAndRequestTimes(
941 		unsigned int     NumberOfActiveSurfaces,
942 		bool     GPUVMEnable,
943 		unsigned int     GPUVMMaxPageTableLevels,
944 		unsigned int     HTotal[],
945 		unsigned int     BytePerPixelC[],
946 		double      DestinationLinesToRequestVMInVBlank[],
947 		double      DestinationLinesToRequestVMInImmediateFlip[],
948 		bool     DCCEnable[],
949 		double      PixelClock[],
950 		unsigned int        dpte_row_width_luma_ub[],
951 		unsigned int        dpte_row_width_chroma_ub[],
952 		unsigned int     vm_group_bytes[],
953 		unsigned int     dpde0_bytes_per_frame_ub_l[],
954 		unsigned int     dpde0_bytes_per_frame_ub_c[],
955 		unsigned int        meta_pte_bytes_per_frame_ub_l[],
956 		unsigned int        meta_pte_bytes_per_frame_ub_c[],
957 
958 		/* Output */
959 		double      TimePerVMGroupVBlank[],
960 		double      TimePerVMGroupFlip[],
961 		double      TimePerVMRequestVBlank[],
962 		double      TimePerVMRequestFlip[]);
963 
964 void dml32_CalculateDCCConfiguration(
965 		bool             DCCEnabled,
966 		bool             DCCProgrammingAssumesScanDirectionUnknown,
967 		enum source_format_class SourcePixelFormat,
968 		unsigned int             SurfaceWidthLuma,
969 		unsigned int             SurfaceWidthChroma,
970 		unsigned int             SurfaceHeightLuma,
971 		unsigned int             SurfaceHeightChroma,
972 		unsigned int                nomDETInKByte,
973 		unsigned int             RequestHeight256ByteLuma,
974 		unsigned int             RequestHeight256ByteChroma,
975 		enum dm_swizzle_mode     TilingFormat,
976 		unsigned int             BytePerPixelY,
977 		unsigned int             BytePerPixelC,
978 		double              BytePerPixelDETY,
979 		double              BytePerPixelDETC,
980 		enum dm_rotation_angle   SourceRotation,
981 		/* Output */
982 		unsigned int        *MaxUncompressedBlockLuma,
983 		unsigned int        *MaxUncompressedBlockChroma,
984 		unsigned int        *MaxCompressedBlockLuma,
985 		unsigned int        *MaxCompressedBlockChroma,
986 		unsigned int        *IndependentBlockLuma,
987 		unsigned int        *IndependentBlockChroma);
988 
989 void dml32_CalculateStutterEfficiency(
990 		unsigned int      CompressedBufferSizeInkByte,
991 		enum dm_use_mall_for_pstate_change_mode UseMALLForPStateChange[],
992 		bool   UnboundedRequestEnabled,
993 		unsigned int      MetaFIFOSizeInKEntries,
994 		unsigned int      ZeroSizeBufferEntries,
995 		unsigned int      PixelChunkSizeInKByte,
996 		unsigned int   NumberOfActiveSurfaces,
997 		unsigned int      ROBBufferSizeInKByte,
998 		double    TotalDataReadBandwidth,
999 		double    DCFCLK,
1000 		double    ReturnBW,
1001 		unsigned int      CompbufReservedSpace64B,
1002 		unsigned int      CompbufReservedSpaceZs,
1003 		double    SRExitTime,
1004 		double    SRExitZ8Time,
1005 		bool   SynchronizeTimingsFinal,
1006 		unsigned int   BlendingAndTiming[],
1007 		double    StutterEnterPlusExitWatermark,
1008 		double    Z8StutterEnterPlusExitWatermark,
1009 		bool   ProgressiveToInterlaceUnitInOPP,
1010 		bool   Interlace[],
1011 		double    MinTTUVBlank[],
1012 		unsigned int   DPPPerSurface[],
1013 		unsigned int      DETBufferSizeY[],
1014 		unsigned int   BytePerPixelY[],
1015 		double    BytePerPixelDETY[],
1016 		double      SwathWidthY[],
1017 		unsigned int   SwathHeightY[],
1018 		unsigned int   SwathHeightC[],
1019 		double    NetDCCRateLuma[],
1020 		double    NetDCCRateChroma[],
1021 		double    DCCFractionOfZeroSizeRequestsLuma[],
1022 		double    DCCFractionOfZeroSizeRequestsChroma[],
1023 		unsigned int      HTotal[],
1024 		unsigned int      VTotal[],
1025 		double    PixelClock[],
1026 		double    VRatio[],
1027 		enum dm_rotation_angle SourceRotation[],
1028 		unsigned int   BlockHeight256BytesY[],
1029 		unsigned int   BlockWidth256BytesY[],
1030 		unsigned int   BlockHeight256BytesC[],
1031 		unsigned int   BlockWidth256BytesC[],
1032 		unsigned int   DCCYMaxUncompressedBlock[],
1033 		unsigned int   DCCCMaxUncompressedBlock[],
1034 		unsigned int      VActive[],
1035 		bool   DCCEnable[],
1036 		bool   WritebackEnable[],
1037 		double    ReadBandwidthSurfaceLuma[],
1038 		double    ReadBandwidthSurfaceChroma[],
1039 		double    meta_row_bw[],
1040 		double    dpte_row_bw[],
1041 
1042 		/* Output */
1043 		double   *StutterEfficiencyNotIncludingVBlank,
1044 		double   *StutterEfficiency,
1045 		unsigned int     *NumberOfStutterBurstsPerFrame,
1046 		double   *Z8StutterEfficiencyNotIncludingVBlank,
1047 		double   *Z8StutterEfficiency,
1048 		unsigned int     *Z8NumberOfStutterBurstsPerFrame,
1049 		double   *StutterPeriod,
1050 		bool  *DCHUBBUB_ARB_CSTATE_MAX_CAP_MODE);
1051 
1052 void dml32_CalculateMaxDETAndMinCompressedBufferSize(
1053 		unsigned int    ConfigReturnBufferSizeInKByte,
1054 		unsigned int    ROBBufferSizeInKByte,
1055 		unsigned int MaxNumDPP,
1056 		bool nomDETInKByteOverrideEnable, // VBA_DELTA, allow DV to override default DET size
1057 		unsigned int nomDETInKByteOverrideValue,  // VBA_DELTA
1058 
1059 		/* Output */
1060 		unsigned int *MaxTotalDETInKByte,
1061 		unsigned int *nomDETInKByte,
1062 		unsigned int *MinCompressedBufferSizeInKByte);
1063 
1064 bool dml32_CalculateVActiveBandwithSupport(unsigned int NumberOfActiveSurfaces,
1065 		double ReturnBW,
1066 		bool NotUrgentLatencyHiding[],
1067 		double ReadBandwidthLuma[],
1068 		double ReadBandwidthChroma[],
1069 		double cursor_bw[],
1070 		double meta_row_bandwidth[],
1071 		double dpte_row_bandwidth[],
1072 		unsigned int NumberOfDPP[],
1073 		double UrgentBurstFactorLuma[],
1074 		double UrgentBurstFactorChroma[],
1075 		double UrgentBurstFactorCursor[]);
1076 
1077 void dml32_CalculatePrefetchBandwithSupport(unsigned int NumberOfActiveSurfaces,
1078 		double ReturnBW,
1079 		bool NotUrgentLatencyHiding[],
1080 		double ReadBandwidthLuma[],
1081 		double ReadBandwidthChroma[],
1082 		double PrefetchBandwidthLuma[],
1083 		double PrefetchBandwidthChroma[],
1084 		double cursor_bw[],
1085 		double meta_row_bandwidth[],
1086 		double dpte_row_bandwidth[],
1087 		double cursor_bw_pre[],
1088 		double prefetch_vmrow_bw[],
1089 		unsigned int NumberOfDPP[],
1090 		double UrgentBurstFactorLuma[],
1091 		double UrgentBurstFactorChroma[],
1092 		double UrgentBurstFactorCursor[],
1093 		double UrgentBurstFactorLumaPre[],
1094 		double UrgentBurstFactorChromaPre[],
1095 		double UrgentBurstFactorCursorPre[],
1096 
1097 		/* output */
1098 		double  *PrefetchBandwidth,
1099 		double  *FractionOfUrgentBandwidth,
1100 		bool *PrefetchBandwidthSupport);
1101 
1102 double dml32_CalculateBandwidthAvailableForImmediateFlip(unsigned int NumberOfActiveSurfaces,
1103 		double ReturnBW,
1104 		double ReadBandwidthLuma[],
1105 		double ReadBandwidthChroma[],
1106 		double PrefetchBandwidthLuma[],
1107 		double PrefetchBandwidthChroma[],
1108 		double cursor_bw[],
1109 		double cursor_bw_pre[],
1110 		unsigned int NumberOfDPP[],
1111 		double UrgentBurstFactorLuma[],
1112 		double UrgentBurstFactorChroma[],
1113 		double UrgentBurstFactorCursor[],
1114 		double UrgentBurstFactorLumaPre[],
1115 		double UrgentBurstFactorChromaPre[],
1116 		double UrgentBurstFactorCursorPre[]);
1117 
1118 void dml32_CalculateImmediateFlipBandwithSupport(unsigned int NumberOfActiveSurfaces,
1119 		double ReturnBW,
1120 		enum immediate_flip_requirement ImmediateFlipRequirement[],
1121 		double final_flip_bw[],
1122 		double ReadBandwidthLuma[],
1123 		double ReadBandwidthChroma[],
1124 		double PrefetchBandwidthLuma[],
1125 		double PrefetchBandwidthChroma[],
1126 		double cursor_bw[],
1127 		double meta_row_bandwidth[],
1128 		double dpte_row_bandwidth[],
1129 		double cursor_bw_pre[],
1130 		double prefetch_vmrow_bw[],
1131 		unsigned int NumberOfDPP[],
1132 		double UrgentBurstFactorLuma[],
1133 		double UrgentBurstFactorChroma[],
1134 		double UrgentBurstFactorCursor[],
1135 		double UrgentBurstFactorLumaPre[],
1136 		double UrgentBurstFactorChromaPre[],
1137 		double UrgentBurstFactorCursorPre[],
1138 
1139 		/* output */
1140 		double  *TotalBandwidth,
1141 		double  *FractionOfUrgentBandwidth,
1142 		bool *ImmediateFlipBandwidthSupport);
1143 
1144 #endif
1145