66#include "modules/cpu/cpu.h"
77#include "util/stringUtils.h"
88
9- #define FF_CPU_NUM_FORMAT_ARGS 9
9+ #define FF_CPU_NUM_FORMAT_ARGS 10
1010
1111static int sortCores (const FFCPUCore * a , const FFCPUCore * b )
1212{
@@ -20,6 +20,7 @@ void ffPrintCPU(FFCPUOptions* options)
2020 .frequencyMin = 0.0 /0.0 ,
2121 .frequencyMax = 0.0 /0.0 ,
2222 .frequencyBase = 0.0 /0.0 ,
23+ .frequencyBiosLimit = 0.0 /0.0 ,
2324 .name = ffStrbufCreate (),
2425 .vendor = ffStrbufCreate ()
2526 };
@@ -55,7 +56,9 @@ void ffPrintCPU(FFCPUOptions* options)
5556 if (cpu .coresOnline > 1 )
5657 ffStrbufAppendF (& str , " (%u)" , cpu .coresOnline );
5758
58- double freq = cpu .frequencyMax ;
59+ double freq = cpu .frequencyBiosLimit ;
60+ if (freq <= 0.0000001 )
61+ freq = cpu .frequencyMax ;
5962 if (freq <= 0.0000001 )
6063 freq = cpu .frequencyBase ;
6164 if (freq > 0.0000001 )
@@ -84,9 +87,19 @@ void ffPrintCPU(FFCPUOptions* options)
8487 else
8588 ffStrbufAppendF (& coreTypes , "%u" , cpu .coresOnline );
8689
87- char freqBase [32 ], freqMax [32 ];
88- snprintf (freqBase , sizeof (freqBase ), "%.*f" , options -> freqNdigits , cpu .frequencyBase );
89- snprintf (freqMax , sizeof (freqMax ), "%.*f" , options -> freqNdigits , cpu .frequencyMax );
90+ char freqBase [32 ], freqMax [32 ], freqBioslimit [32 ];
91+ if (cpu .frequencyBase > 0 )
92+ snprintf (freqBase , sizeof (freqBase ), "%.*f" , options -> freqNdigits , cpu .frequencyBase );
93+ else
94+ freqBase [0 ] = 0 ;
95+ if (cpu .frequencyMax > 0 )
96+ snprintf (freqMax , sizeof (freqMax ), "%.*f" , options -> freqNdigits , cpu .frequencyMax );
97+ else
98+ freqMax [0 ] = 0 ;
99+ if (cpu .frequencyBiosLimit > 0 )
100+ snprintf (freqBioslimit , sizeof (freqBioslimit ), "%.*f" , options -> freqNdigits , cpu .frequencyBiosLimit );
101+ else
102+ freqBioslimit [0 ] = 0 ;
90103
91104 FF_STRBUF_AUTO_DESTROY tempStr = ffStrbufCreate ();
92105 ffTempsAppendNum (cpu .temperature , & tempStr , options -> tempConfig , & options -> moduleArgs );
@@ -100,6 +113,7 @@ void ffPrintCPU(FFCPUOptions* options)
100113 {FF_FORMAT_ARG_TYPE_STRING , freqMax },
101114 {FF_FORMAT_ARG_TYPE_STRBUF , & tempStr },
102115 {FF_FORMAT_ARG_TYPE_STRBUF , & coreTypes },
116+ {FF_FORMAT_ARG_TYPE_STRING , freqBioslimit },
103117 }));
104118 }
105119 }
@@ -173,6 +187,7 @@ void ffGenerateCPUJsonResult(FFCPUOptions* options, yyjson_mut_doc* doc, yyjson_
173187 .frequencyMin = 0.0 /0.0 ,
174188 .frequencyMax = 0.0 /0.0 ,
175189 .frequencyBase = 0.0 /0.0 ,
190+ .frequencyBiosLimit = 0.0 /0.0 ,
176191 .name = ffStrbufCreate (),
177192 .vendor = ffStrbufCreate ()
178193 };
@@ -202,6 +217,7 @@ void ffGenerateCPUJsonResult(FFCPUOptions* options, yyjson_mut_doc* doc, yyjson_
202217 yyjson_mut_obj_add_real (doc , frequency , "base" , cpu .frequencyBase );
203218 yyjson_mut_obj_add_real (doc , frequency , "max" , cpu .frequencyMax );
204219 yyjson_mut_obj_add_real (doc , frequency , "min" , cpu .frequencyMin );
220+ yyjson_mut_obj_add_real (doc , frequency , "biosLimit" , cpu .frequencyBiosLimit );
205221
206222 yyjson_mut_val * coreTypes = yyjson_mut_obj_add_arr (doc , obj , "coreTypes" );
207223 for (uint32_t i = 0 ; i < sizeof (cpu .coreTypes ) / sizeof (cpu .coreTypes [0 ]) && cpu .coreTypes [i ].count > 0 ; i ++ )
@@ -230,6 +246,7 @@ void ffPrintCPUHelpFormat(void)
230246 "Max frequency" ,
231247 "Temperature (formatted)" ,
232248 "Logical core count grouped by frequency" ,
249+ "Bios limited frequency" ,
233250 }));
234251}
235252
0 commit comments