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