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