13fb4f7cdSSrinivas Pandruvada // SPDX-License-Identifier: GPL-2.0
23fb4f7cdSSrinivas Pandruvada /*
33fb4f7cdSSrinivas Pandruvada * Intel dynamic_speed_select -- Enumerate and control features
43fb4f7cdSSrinivas Pandruvada * Copyright (c) 2019 Intel Corporation.
53fb4f7cdSSrinivas Pandruvada */
63fb4f7cdSSrinivas Pandruvada
73fb4f7cdSSrinivas Pandruvada #include "isst.h"
83fb4f7cdSSrinivas Pandruvada
printcpulist(int str_len,char * str,int mask_size,cpu_set_t * cpu_mask)949aed155SPrarit Bhargava static void printcpulist(int str_len, char *str, int mask_size,
1049aed155SPrarit Bhargava cpu_set_t *cpu_mask)
1149aed155SPrarit Bhargava {
1249aed155SPrarit Bhargava int i, first, curr_index, index;
1349aed155SPrarit Bhargava
1449aed155SPrarit Bhargava if (!CPU_COUNT_S(mask_size, cpu_mask)) {
1549aed155SPrarit Bhargava snprintf(str, str_len, "none");
1649aed155SPrarit Bhargava return;
1749aed155SPrarit Bhargava }
1849aed155SPrarit Bhargava
1949aed155SPrarit Bhargava curr_index = 0;
2049aed155SPrarit Bhargava first = 1;
2149aed155SPrarit Bhargava for (i = 0; i < get_topo_max_cpus(); ++i) {
2249aed155SPrarit Bhargava if (!CPU_ISSET_S(i, mask_size, cpu_mask))
2349aed155SPrarit Bhargava continue;
2449aed155SPrarit Bhargava if (!first) {
2549aed155SPrarit Bhargava index = snprintf(&str[curr_index],
2649aed155SPrarit Bhargava str_len - curr_index, ",");
2749aed155SPrarit Bhargava curr_index += index;
282e70b710SSrinivas Pandruvada if (curr_index >= str_len)
292e70b710SSrinivas Pandruvada break;
3049aed155SPrarit Bhargava }
3149aed155SPrarit Bhargava index = snprintf(&str[curr_index], str_len - curr_index, "%d",
3249aed155SPrarit Bhargava i);
3349aed155SPrarit Bhargava curr_index += index;
342e70b710SSrinivas Pandruvada if (curr_index >= str_len)
352e70b710SSrinivas Pandruvada break;
3649aed155SPrarit Bhargava first = 0;
3749aed155SPrarit Bhargava }
3849aed155SPrarit Bhargava }
3949aed155SPrarit Bhargava
printcpumask(int str_len,char * str,int mask_size,cpu_set_t * cpu_mask)403fb4f7cdSSrinivas Pandruvada static void printcpumask(int str_len, char *str, int mask_size,
413fb4f7cdSSrinivas Pandruvada cpu_set_t *cpu_mask)
423fb4f7cdSSrinivas Pandruvada {
433fb4f7cdSSrinivas Pandruvada int i, max_cpus = get_topo_max_cpus();
443fb4f7cdSSrinivas Pandruvada unsigned int *mask;
453fb4f7cdSSrinivas Pandruvada int size, index, curr_index;
463fb4f7cdSSrinivas Pandruvada
473fb4f7cdSSrinivas Pandruvada size = max_cpus / (sizeof(unsigned int) * 8);
483fb4f7cdSSrinivas Pandruvada if (max_cpus % (sizeof(unsigned int) * 8))
493fb4f7cdSSrinivas Pandruvada size++;
503fb4f7cdSSrinivas Pandruvada
513fb4f7cdSSrinivas Pandruvada mask = calloc(size, sizeof(unsigned int));
523fb4f7cdSSrinivas Pandruvada if (!mask)
533fb4f7cdSSrinivas Pandruvada return;
543fb4f7cdSSrinivas Pandruvada
553fb4f7cdSSrinivas Pandruvada for (i = 0; i < max_cpus; ++i) {
563fb4f7cdSSrinivas Pandruvada int mask_index, bit_index;
573fb4f7cdSSrinivas Pandruvada
583fb4f7cdSSrinivas Pandruvada if (!CPU_ISSET_S(i, mask_size, cpu_mask))
593fb4f7cdSSrinivas Pandruvada continue;
603fb4f7cdSSrinivas Pandruvada
613fb4f7cdSSrinivas Pandruvada mask_index = i / (sizeof(unsigned int) * 8);
623fb4f7cdSSrinivas Pandruvada bit_index = i % (sizeof(unsigned int) * 8);
633fb4f7cdSSrinivas Pandruvada mask[mask_index] |= BIT(bit_index);
643fb4f7cdSSrinivas Pandruvada }
653fb4f7cdSSrinivas Pandruvada
663fb4f7cdSSrinivas Pandruvada curr_index = 0;
673fb4f7cdSSrinivas Pandruvada for (i = size - 1; i >= 0; --i) {
683fb4f7cdSSrinivas Pandruvada index = snprintf(&str[curr_index], str_len - curr_index, "%08x",
693fb4f7cdSSrinivas Pandruvada mask[i]);
703fb4f7cdSSrinivas Pandruvada curr_index += index;
712e70b710SSrinivas Pandruvada if (curr_index >= str_len)
722e70b710SSrinivas Pandruvada break;
733fb4f7cdSSrinivas Pandruvada if (i) {
743fb4f7cdSSrinivas Pandruvada strncat(&str[curr_index], ",", str_len - curr_index);
753fb4f7cdSSrinivas Pandruvada curr_index++;
763fb4f7cdSSrinivas Pandruvada }
772e70b710SSrinivas Pandruvada if (curr_index >= str_len)
782e70b710SSrinivas Pandruvada break;
793fb4f7cdSSrinivas Pandruvada }
803fb4f7cdSSrinivas Pandruvada
813fb4f7cdSSrinivas Pandruvada free(mask);
823fb4f7cdSSrinivas Pandruvada }
833fb4f7cdSSrinivas Pandruvada
format_and_print_txt(FILE * outf,int level,char * header,char * value)843fb4f7cdSSrinivas Pandruvada static void format_and_print_txt(FILE *outf, int level, char *header,
853fb4f7cdSSrinivas Pandruvada char *value)
863fb4f7cdSSrinivas Pandruvada {
873fb4f7cdSSrinivas Pandruvada char *spaces = " ";
883fb4f7cdSSrinivas Pandruvada static char delimiters[256];
893fb4f7cdSSrinivas Pandruvada int i, j = 0;
903fb4f7cdSSrinivas Pandruvada
913fb4f7cdSSrinivas Pandruvada if (!level)
923fb4f7cdSSrinivas Pandruvada return;
933fb4f7cdSSrinivas Pandruvada
943fb4f7cdSSrinivas Pandruvada if (level == 1) {
953fb4f7cdSSrinivas Pandruvada strcpy(delimiters, " ");
963fb4f7cdSSrinivas Pandruvada } else {
973fb4f7cdSSrinivas Pandruvada for (i = 0; i < level - 1; ++i)
983fb4f7cdSSrinivas Pandruvada j += snprintf(&delimiters[j], sizeof(delimiters) - j,
993fb4f7cdSSrinivas Pandruvada "%s", spaces);
1003fb4f7cdSSrinivas Pandruvada }
1013fb4f7cdSSrinivas Pandruvada
1023fb4f7cdSSrinivas Pandruvada if (header && value) {
1033fb4f7cdSSrinivas Pandruvada fprintf(outf, "%s", delimiters);
1043fb4f7cdSSrinivas Pandruvada fprintf(outf, "%s:%s\n", header, value);
1053fb4f7cdSSrinivas Pandruvada } else if (header) {
1063fb4f7cdSSrinivas Pandruvada fprintf(outf, "%s", delimiters);
1073fb4f7cdSSrinivas Pandruvada fprintf(outf, "%s\n", header);
1083fb4f7cdSSrinivas Pandruvada }
1093fb4f7cdSSrinivas Pandruvada }
1103fb4f7cdSSrinivas Pandruvada
1113fb4f7cdSSrinivas Pandruvada static int last_level;
format_and_print(FILE * outf,int level,char * header,char * value)1123fb4f7cdSSrinivas Pandruvada static void format_and_print(FILE *outf, int level, char *header, char *value)
1133fb4f7cdSSrinivas Pandruvada {
1143fb4f7cdSSrinivas Pandruvada char *spaces = " ";
1153fb4f7cdSSrinivas Pandruvada static char delimiters[256];
1163fb4f7cdSSrinivas Pandruvada int i;
1173fb4f7cdSSrinivas Pandruvada
1183fb4f7cdSSrinivas Pandruvada if (!out_format_is_json()) {
1193fb4f7cdSSrinivas Pandruvada format_and_print_txt(outf, level, header, value);
1203fb4f7cdSSrinivas Pandruvada return;
1213fb4f7cdSSrinivas Pandruvada }
1223fb4f7cdSSrinivas Pandruvada
1233fb4f7cdSSrinivas Pandruvada if (level == 0) {
1243fb4f7cdSSrinivas Pandruvada if (header)
1253fb4f7cdSSrinivas Pandruvada fprintf(outf, "{");
1263fb4f7cdSSrinivas Pandruvada else
1273fb4f7cdSSrinivas Pandruvada fprintf(outf, "\n}\n");
1283fb4f7cdSSrinivas Pandruvada
1293fb4f7cdSSrinivas Pandruvada } else {
1303fb4f7cdSSrinivas Pandruvada int j = 0;
1313fb4f7cdSSrinivas Pandruvada
1323fb4f7cdSSrinivas Pandruvada for (i = 0; i < level; ++i)
1333fb4f7cdSSrinivas Pandruvada j += snprintf(&delimiters[j], sizeof(delimiters) - j,
1343fb4f7cdSSrinivas Pandruvada "%s", spaces);
1353fb4f7cdSSrinivas Pandruvada
1363fb4f7cdSSrinivas Pandruvada if (last_level == level)
1373fb4f7cdSSrinivas Pandruvada fprintf(outf, ",\n");
1383fb4f7cdSSrinivas Pandruvada
1393fb4f7cdSSrinivas Pandruvada if (value) {
1403fb4f7cdSSrinivas Pandruvada if (last_level != level)
1413fb4f7cdSSrinivas Pandruvada fprintf(outf, "\n");
1423fb4f7cdSSrinivas Pandruvada
1433fb4f7cdSSrinivas Pandruvada fprintf(outf, "%s\"%s\": ", delimiters, header);
1443fb4f7cdSSrinivas Pandruvada fprintf(outf, "\"%s\"", value);
1453fb4f7cdSSrinivas Pandruvada } else {
1463fb4f7cdSSrinivas Pandruvada for (i = last_level - 1; i >= level; --i) {
1473fb4f7cdSSrinivas Pandruvada int k = 0;
1483fb4f7cdSSrinivas Pandruvada
1493fb4f7cdSSrinivas Pandruvada for (j = i; j > 0; --j)
1503fb4f7cdSSrinivas Pandruvada k += snprintf(&delimiters[k],
1513fb4f7cdSSrinivas Pandruvada sizeof(delimiters) - k,
1523fb4f7cdSSrinivas Pandruvada "%s", spaces);
1533fb4f7cdSSrinivas Pandruvada if (i == level && header)
1543fb4f7cdSSrinivas Pandruvada fprintf(outf, "\n%s},", delimiters);
1553fb4f7cdSSrinivas Pandruvada else
1563fb4f7cdSSrinivas Pandruvada fprintf(outf, "\n%s}", delimiters);
1573fb4f7cdSSrinivas Pandruvada }
1583fb4f7cdSSrinivas Pandruvada if (abs(last_level - level) < 3)
1593fb4f7cdSSrinivas Pandruvada fprintf(outf, "\n");
1603fb4f7cdSSrinivas Pandruvada if (header)
1613fb4f7cdSSrinivas Pandruvada fprintf(outf, "%s\"%s\": {", delimiters,
1623fb4f7cdSSrinivas Pandruvada header);
1633fb4f7cdSSrinivas Pandruvada }
1643fb4f7cdSSrinivas Pandruvada }
1653fb4f7cdSSrinivas Pandruvada
1663fb4f7cdSSrinivas Pandruvada last_level = level;
1673fb4f7cdSSrinivas Pandruvada }
1683fb4f7cdSSrinivas Pandruvada
print_package_info(struct isst_id * id,FILE * outf)169850337ecSZhang Rui static int print_package_info(struct isst_id *id, FILE *outf)
1703fb4f7cdSSrinivas Pandruvada {
1713fb4f7cdSSrinivas Pandruvada char header[256];
17246de87e3SZhang Rui int level = 1;
1733fb4f7cdSSrinivas Pandruvada
17474062363SSrinivas Pandruvada if (out_format_is_json()) {
17546de87e3SZhang Rui if (api_version() > 1)
17646de87e3SZhang Rui snprintf(header, sizeof(header), "package-%d:die-%d:powerdomain-%d:cpu-%d",
17746de87e3SZhang Rui id->pkg, id->die, id->punit, id->cpu);
17846de87e3SZhang Rui else
17974062363SSrinivas Pandruvada snprintf(header, sizeof(header), "package-%d:die-%d:cpu-%d",
18056d64692SZhang Rui id->pkg, id->die, id->cpu);
18146de87e3SZhang Rui format_and_print(outf, level, header, NULL);
18274062363SSrinivas Pandruvada return 1;
18374062363SSrinivas Pandruvada }
18456d64692SZhang Rui snprintf(header, sizeof(header), "package-%d", id->pkg);
18546de87e3SZhang Rui format_and_print(outf, level++, header, NULL);
18656d64692SZhang Rui snprintf(header, sizeof(header), "die-%d", id->die);
18746de87e3SZhang Rui format_and_print(outf, level++, header, NULL);
18846de87e3SZhang Rui if (api_version() > 1) {
18946de87e3SZhang Rui snprintf(header, sizeof(header), "powerdomain-%d", id->punit);
19046de87e3SZhang Rui format_and_print(outf, level++, header, NULL);
19146de87e3SZhang Rui }
192850337ecSZhang Rui snprintf(header, sizeof(header), "cpu-%d", id->cpu);
19346de87e3SZhang Rui format_and_print(outf, level, header, NULL);
19474062363SSrinivas Pandruvada
19546de87e3SZhang Rui return level;
1963fb4f7cdSSrinivas Pandruvada }
1973fb4f7cdSSrinivas Pandruvada
_isst_pbf_display_information(struct isst_id * id,FILE * outf,int level,struct isst_pbf_info * pbf_info,int disp_level)198850337ecSZhang Rui static void _isst_pbf_display_information(struct isst_id *id, FILE *outf, int level,
1993fb4f7cdSSrinivas Pandruvada struct isst_pbf_info *pbf_info,
2003fb4f7cdSSrinivas Pandruvada int disp_level)
2013fb4f7cdSSrinivas Pandruvada {
2023fb4f7cdSSrinivas Pandruvada char header[256];
2032e70b710SSrinivas Pandruvada char value[512];
2043fb4f7cdSSrinivas Pandruvada
2053b0fe3baSSrinivas Pandruvada snprintf(header, sizeof(header), "speed-select-base-freq-properties");
2063fb4f7cdSSrinivas Pandruvada format_and_print(outf, disp_level, header, NULL);
2073fb4f7cdSSrinivas Pandruvada
208808088e4SPrarit Bhargava snprintf(header, sizeof(header), "high-priority-base-frequency(MHz)");
2093fb4f7cdSSrinivas Pandruvada snprintf(value, sizeof(value), "%d",
21013b868f8SZhang Rui pbf_info->p1_high * isst_get_disp_freq_multiplier());
2113fb4f7cdSSrinivas Pandruvada format_and_print(outf, disp_level + 1, header, value);
2123fb4f7cdSSrinivas Pandruvada
2133fb4f7cdSSrinivas Pandruvada snprintf(header, sizeof(header), "high-priority-cpu-mask");
2143fb4f7cdSSrinivas Pandruvada printcpumask(sizeof(value), value, pbf_info->core_cpumask_size,
2153fb4f7cdSSrinivas Pandruvada pbf_info->core_cpumask);
2163fb4f7cdSSrinivas Pandruvada format_and_print(outf, disp_level + 1, header, value);
2173fb4f7cdSSrinivas Pandruvada
21849aed155SPrarit Bhargava snprintf(header, sizeof(header), "high-priority-cpu-list");
21949aed155SPrarit Bhargava printcpulist(sizeof(value), value,
22049aed155SPrarit Bhargava pbf_info->core_cpumask_size,
22149aed155SPrarit Bhargava pbf_info->core_cpumask);
22249aed155SPrarit Bhargava format_and_print(outf, disp_level + 1, header, value);
22349aed155SPrarit Bhargava
224808088e4SPrarit Bhargava snprintf(header, sizeof(header), "low-priority-base-frequency(MHz)");
2253fb4f7cdSSrinivas Pandruvada snprintf(value, sizeof(value), "%d",
22613b868f8SZhang Rui pbf_info->p1_low * isst_get_disp_freq_multiplier());
2273fb4f7cdSSrinivas Pandruvada format_and_print(outf, disp_level + 1, header, value);
2283fb4f7cdSSrinivas Pandruvada
229062e4aacSPrarit Bhargava if (is_clx_n_platform())
230062e4aacSPrarit Bhargava return;
231062e4aacSPrarit Bhargava
2323fb4f7cdSSrinivas Pandruvada snprintf(header, sizeof(header), "tjunction-temperature(C)");
2333fb4f7cdSSrinivas Pandruvada snprintf(value, sizeof(value), "%d", pbf_info->t_prochot);
2343fb4f7cdSSrinivas Pandruvada format_and_print(outf, disp_level + 1, header, value);
2353fb4f7cdSSrinivas Pandruvada
2363fb4f7cdSSrinivas Pandruvada snprintf(header, sizeof(header), "thermal-design-power(W)");
2373fb4f7cdSSrinivas Pandruvada snprintf(value, sizeof(value), "%d", pbf_info->tdp);
2383fb4f7cdSSrinivas Pandruvada format_and_print(outf, disp_level + 1, header, value);
2393fb4f7cdSSrinivas Pandruvada }
2403fb4f7cdSSrinivas Pandruvada
_isst_fact_display_information(struct isst_id * id,FILE * outf,int level,int fact_bucket,int fact_avx,struct isst_fact_info * fact_info,int base_level)241850337ecSZhang Rui static void _isst_fact_display_information(struct isst_id *id, FILE *outf, int level,
2423fb4f7cdSSrinivas Pandruvada int fact_bucket, int fact_avx,
2433fb4f7cdSSrinivas Pandruvada struct isst_fact_info *fact_info,
2443fb4f7cdSSrinivas Pandruvada int base_level)
2453fb4f7cdSSrinivas Pandruvada {
2463fb4f7cdSSrinivas Pandruvada struct isst_fact_bucket_info *bucket_info = fact_info->bucket_info;
24716c18920SZhang Rui int trl_max_levels = isst_get_trl_max_levels();
2483fb4f7cdSSrinivas Pandruvada char header[256];
2493fb4f7cdSSrinivas Pandruvada char value[256];
250a9fd6ae7SSrinivas Pandruvada int print = 0, j;
251a9fd6ae7SSrinivas Pandruvada
252a9fd6ae7SSrinivas Pandruvada for (j = 0; j < ISST_FACT_MAX_BUCKETS; ++j) {
253a9fd6ae7SSrinivas Pandruvada if (fact_bucket != 0xff && fact_bucket != j)
254a9fd6ae7SSrinivas Pandruvada continue;
255a9fd6ae7SSrinivas Pandruvada
256b1e9b87bSZhang Rui /* core count must be valid for CPU power domain */
257b1e9b87bSZhang Rui if (!bucket_info[j].hp_cores && id->cpu >= 0)
258a9fd6ae7SSrinivas Pandruvada break;
259a9fd6ae7SSrinivas Pandruvada
260a9fd6ae7SSrinivas Pandruvada print = 1;
261a9fd6ae7SSrinivas Pandruvada }
262a9fd6ae7SSrinivas Pandruvada if (!print) {
263a9fd6ae7SSrinivas Pandruvada fprintf(stderr, "Invalid bucket\n");
264a9fd6ae7SSrinivas Pandruvada return;
265a9fd6ae7SSrinivas Pandruvada }
2663fb4f7cdSSrinivas Pandruvada
2673b0fe3baSSrinivas Pandruvada snprintf(header, sizeof(header), "speed-select-turbo-freq-properties");
2683fb4f7cdSSrinivas Pandruvada format_and_print(outf, base_level, header, NULL);
2693fb4f7cdSSrinivas Pandruvada for (j = 0; j < ISST_FACT_MAX_BUCKETS; ++j) {
27016c18920SZhang Rui int i;
27116c18920SZhang Rui
2723fb4f7cdSSrinivas Pandruvada if (fact_bucket != 0xff && fact_bucket != j)
2733fb4f7cdSSrinivas Pandruvada continue;
2743fb4f7cdSSrinivas Pandruvada
27516c18920SZhang Rui if (!bucket_info[j].hp_cores)
2763fb4f7cdSSrinivas Pandruvada break;
2773fb4f7cdSSrinivas Pandruvada
2783fb4f7cdSSrinivas Pandruvada snprintf(header, sizeof(header), "bucket-%d", j);
2793fb4f7cdSSrinivas Pandruvada format_and_print(outf, base_level + 1, header, NULL);
2803fb4f7cdSSrinivas Pandruvada
2813fb4f7cdSSrinivas Pandruvada snprintf(header, sizeof(header), "high-priority-cores-count");
2823fb4f7cdSSrinivas Pandruvada snprintf(value, sizeof(value), "%d",
28316c18920SZhang Rui bucket_info[j].hp_cores);
2843fb4f7cdSSrinivas Pandruvada format_and_print(outf, base_level + 2, header, value);
28516c18920SZhang Rui for (i = 0; i < trl_max_levels; i++) {
2862c00056fSSrinivas Pandruvada if (!bucket_info[j].hp_ratios[i] || (fact_avx != 0xFF && !(fact_avx & (1 << i))))
28716c18920SZhang Rui continue;
2882c00056fSSrinivas Pandruvada if (i == 0 && api_version() == 1 && !is_emr_platform())
2893fb4f7cdSSrinivas Pandruvada snprintf(header, sizeof(header),
290808088e4SPrarit Bhargava "high-priority-max-frequency(MHz)");
29116c18920SZhang Rui else
2923fb4f7cdSSrinivas Pandruvada snprintf(header, sizeof(header),
29316c18920SZhang Rui "high-priority-max-%s-frequency(MHz)", isst_get_trl_level_name(i));
2943fb4f7cdSSrinivas Pandruvada snprintf(value, sizeof(value), "%d",
29513b868f8SZhang Rui bucket_info[j].hp_ratios[i] * isst_get_disp_freq_multiplier());
2963fb4f7cdSSrinivas Pandruvada format_and_print(outf, base_level + 2, header, value);
2973fb4f7cdSSrinivas Pandruvada }
2983fb4f7cdSSrinivas Pandruvada }
2993fb4f7cdSSrinivas Pandruvada snprintf(header, sizeof(header),
3003fb4f7cdSSrinivas Pandruvada "speed-select-turbo-freq-clip-frequencies");
3013fb4f7cdSSrinivas Pandruvada format_and_print(outf, base_level + 1, header, NULL);
30216c18920SZhang Rui
30316c18920SZhang Rui for (j = 0; j < trl_max_levels; j++) {
3042c00056fSSrinivas Pandruvada if (!fact_info->lp_ratios[j])
3052c00056fSSrinivas Pandruvada continue;
3062c00056fSSrinivas Pandruvada
30716c18920SZhang Rui /* No AVX level name for SSE to be consistent with previous formatting */
3082c00056fSSrinivas Pandruvada if (j == 0 && api_version() == 1 && !is_emr_platform())
309808088e4SPrarit Bhargava snprintf(header, sizeof(header), "low-priority-max-frequency(MHz)");
31016c18920SZhang Rui else
31116c18920SZhang Rui snprintf(header, sizeof(header), "low-priority-max-%s-frequency(MHz)",
31216c18920SZhang Rui isst_get_trl_level_name(j));
3133fb4f7cdSSrinivas Pandruvada snprintf(value, sizeof(value), "%d",
31413b868f8SZhang Rui fact_info->lp_ratios[j] * isst_get_disp_freq_multiplier());
3153fb4f7cdSSrinivas Pandruvada format_and_print(outf, base_level + 2, header, value);
31616c18920SZhang Rui }
3173fb4f7cdSSrinivas Pandruvada }
3183fb4f7cdSSrinivas Pandruvada
isst_ctdp_display_core_info(struct isst_id * id,FILE * outf,char * prefix,unsigned int val,char * str0,char * str1)319850337ecSZhang Rui void isst_ctdp_display_core_info(struct isst_id *id, FILE *outf, char *prefix,
3203d1a8579SSrinivas Pandruvada unsigned int val, char *str0, char *str1)
321b3abfd77SSrinivas Pandruvada {
322b3abfd77SSrinivas Pandruvada char value[256];
32346de87e3SZhang Rui int level = print_package_info(id, outf);
324b3abfd77SSrinivas Pandruvada
32546de87e3SZhang Rui level++;
326aa8b650bSPrarit Bhargava
3273d1a8579SSrinivas Pandruvada if (str0 && !val)
3283d1a8579SSrinivas Pandruvada snprintf(value, sizeof(value), "%s", str0);
3293d1a8579SSrinivas Pandruvada else if (str1 && val)
3303d1a8579SSrinivas Pandruvada snprintf(value, sizeof(value), "%s", str1);
3313d1a8579SSrinivas Pandruvada else
332b3abfd77SSrinivas Pandruvada snprintf(value, sizeof(value), "%u", val);
333aa8b650bSPrarit Bhargava format_and_print(outf, level, prefix, value);
334b3abfd77SSrinivas Pandruvada
335b3abfd77SSrinivas Pandruvada format_and_print(outf, 1, NULL, NULL);
336b3abfd77SSrinivas Pandruvada }
337b3abfd77SSrinivas Pandruvada
isst_ctdp_display_information(struct isst_id * id,FILE * outf,int tdp_level,struct isst_pkg_ctdp * pkg_dev)338850337ecSZhang Rui void isst_ctdp_display_information(struct isst_id *id, FILE *outf, int tdp_level,
3393fb4f7cdSSrinivas Pandruvada struct isst_pkg_ctdp *pkg_dev)
3403fb4f7cdSSrinivas Pandruvada {
3413fb4f7cdSSrinivas Pandruvada char header[256];
3422e70b710SSrinivas Pandruvada char value[512];
34374062363SSrinivas Pandruvada static int level;
3447c7e7c0dSZhang Rui int trl_max_levels = isst_get_trl_max_levels();
34574062363SSrinivas Pandruvada int i;
3463fb4f7cdSSrinivas Pandruvada
34720183ccdSSrinivas Pandruvada if (pkg_dev->processed)
348850337ecSZhang Rui level = print_package_info(id, outf);
3493fb4f7cdSSrinivas Pandruvada
3503fb4f7cdSSrinivas Pandruvada for (i = 0; i <= pkg_dev->levels; ++i) {
3513fb4f7cdSSrinivas Pandruvada struct isst_pkg_ctdp_level_info *ctdp_level;
3527c7e7c0dSZhang Rui int j, k;
3533fb4f7cdSSrinivas Pandruvada
3543fb4f7cdSSrinivas Pandruvada ctdp_level = &pkg_dev->ctdp_level[i];
3553fb4f7cdSSrinivas Pandruvada if (!ctdp_level->processed)
3563fb4f7cdSSrinivas Pandruvada continue;
3573fb4f7cdSSrinivas Pandruvada
3583fb4f7cdSSrinivas Pandruvada snprintf(header, sizeof(header), "perf-profile-level-%d",
3593fb4f7cdSSrinivas Pandruvada ctdp_level->level);
36074062363SSrinivas Pandruvada format_and_print(outf, level + 1, header, NULL);
3613fb4f7cdSSrinivas Pandruvada
362c7ff8ff3SZhang Rui if (id->cpu >= 0) {
3633fb4f7cdSSrinivas Pandruvada snprintf(header, sizeof(header), "cpu-count");
36430e0600eSZhang Rui j = get_cpu_count(id);
3653fb4f7cdSSrinivas Pandruvada snprintf(value, sizeof(value), "%d", j);
36674062363SSrinivas Pandruvada format_and_print(outf, level + 2, header, value);
3673fb4f7cdSSrinivas Pandruvada
368e44d7656SSrinivas Pandruvada j = CPU_COUNT_S(ctdp_level->core_cpumask_size,
369e44d7656SSrinivas Pandruvada ctdp_level->core_cpumask);
370e44d7656SSrinivas Pandruvada if (j) {
371e44d7656SSrinivas Pandruvada snprintf(header, sizeof(header), "enable-cpu-count");
372e44d7656SSrinivas Pandruvada snprintf(value, sizeof(value), "%d", j);
37374062363SSrinivas Pandruvada format_and_print(outf, level + 2, header, value);
374e44d7656SSrinivas Pandruvada }
375e44d7656SSrinivas Pandruvada
3767af5a95bSSrinivas Pandruvada if (ctdp_level->core_cpumask_size) {
3773fb4f7cdSSrinivas Pandruvada snprintf(header, sizeof(header), "enable-cpu-mask");
3783fb4f7cdSSrinivas Pandruvada printcpumask(sizeof(value), value,
3793fb4f7cdSSrinivas Pandruvada ctdp_level->core_cpumask_size,
3803fb4f7cdSSrinivas Pandruvada ctdp_level->core_cpumask);
38174062363SSrinivas Pandruvada format_and_print(outf, level + 2, header, value);
3823fb4f7cdSSrinivas Pandruvada
38349aed155SPrarit Bhargava snprintf(header, sizeof(header), "enable-cpu-list");
38449aed155SPrarit Bhargava printcpulist(sizeof(value), value,
38549aed155SPrarit Bhargava ctdp_level->core_cpumask_size,
38649aed155SPrarit Bhargava ctdp_level->core_cpumask);
38774062363SSrinivas Pandruvada format_and_print(outf, level + 2, header, value);
3887af5a95bSSrinivas Pandruvada }
389c7ff8ff3SZhang Rui }
39049aed155SPrarit Bhargava
3913fb4f7cdSSrinivas Pandruvada snprintf(header, sizeof(header), "thermal-design-power-ratio");
3923fb4f7cdSSrinivas Pandruvada snprintf(value, sizeof(value), "%d", ctdp_level->tdp_ratio);
39374062363SSrinivas Pandruvada format_and_print(outf, level + 2, header, value);
3943fb4f7cdSSrinivas Pandruvada
395808088e4SPrarit Bhargava snprintf(header, sizeof(header), "base-frequency(MHz)");
396263225c9SSrinivas Pandruvada if (!ctdp_level->sse_p1)
397263225c9SSrinivas Pandruvada ctdp_level->sse_p1 = ctdp_level->tdp_ratio;
3983fb4f7cdSSrinivas Pandruvada snprintf(value, sizeof(value), "%d",
39913b868f8SZhang Rui ctdp_level->sse_p1 * isst_get_disp_freq_multiplier());
40074062363SSrinivas Pandruvada format_and_print(outf, level + 2, header, value);
4013fb4f7cdSSrinivas Pandruvada
402263225c9SSrinivas Pandruvada if (ctdp_level->avx2_p1) {
403263225c9SSrinivas Pandruvada snprintf(header, sizeof(header), "base-frequency-avx2(MHz)");
404263225c9SSrinivas Pandruvada snprintf(value, sizeof(value), "%d",
40513b868f8SZhang Rui ctdp_level->avx2_p1 * isst_get_disp_freq_multiplier());
40674062363SSrinivas Pandruvada format_and_print(outf, level + 2, header, value);
407263225c9SSrinivas Pandruvada }
408263225c9SSrinivas Pandruvada
409263225c9SSrinivas Pandruvada if (ctdp_level->avx512_p1) {
410263225c9SSrinivas Pandruvada snprintf(header, sizeof(header), "base-frequency-avx512(MHz)");
411263225c9SSrinivas Pandruvada snprintf(value, sizeof(value), "%d",
41213b868f8SZhang Rui ctdp_level->avx512_p1 * isst_get_disp_freq_multiplier());
41374062363SSrinivas Pandruvada format_and_print(outf, level + 2, header, value);
414263225c9SSrinivas Pandruvada }
415263225c9SSrinivas Pandruvada
4160d5eea35SSrinivas Pandruvada if (ctdp_level->uncore_pm) {
417263225c9SSrinivas Pandruvada snprintf(header, sizeof(header), "uncore-frequency-min(MHz)");
418263225c9SSrinivas Pandruvada snprintf(value, sizeof(value), "%d",
41913b868f8SZhang Rui ctdp_level->uncore_pm * isst_get_disp_freq_multiplier());
42074062363SSrinivas Pandruvada format_and_print(outf, level + 2, header, value);
421263225c9SSrinivas Pandruvada }
422263225c9SSrinivas Pandruvada
423263225c9SSrinivas Pandruvada if (ctdp_level->uncore_p0) {
424263225c9SSrinivas Pandruvada snprintf(header, sizeof(header), "uncore-frequency-max(MHz)");
425263225c9SSrinivas Pandruvada snprintf(value, sizeof(value), "%d",
42613b868f8SZhang Rui ctdp_level->uncore_p0 * isst_get_disp_freq_multiplier());
42774062363SSrinivas Pandruvada format_and_print(outf, level + 2, header, value);
428263225c9SSrinivas Pandruvada }
429263225c9SSrinivas Pandruvada
430a835ff56SSrinivas Pandruvada if (ctdp_level->amx_p1) {
4315f319081SZhang Rui snprintf(header, sizeof(header), "base-frequency-amx(MHz)");
4325f319081SZhang Rui snprintf(value, sizeof(value), "%d",
4335f319081SZhang Rui ctdp_level->amx_p1 * isst_get_disp_freq_multiplier());
4345f319081SZhang Rui format_and_print(outf, level + 2, header, value);
4355f319081SZhang Rui }
4365f319081SZhang Rui
4370d5eea35SSrinivas Pandruvada if (ctdp_level->uncore_p1) {
4380d5eea35SSrinivas Pandruvada snprintf(header, sizeof(header), "uncore-frequency-base(MHz)");
4390d5eea35SSrinivas Pandruvada snprintf(value, sizeof(value), "%d",
44013b868f8SZhang Rui ctdp_level->uncore_p1 * isst_get_disp_freq_multiplier());
4410d5eea35SSrinivas Pandruvada format_and_print(outf, level + 2, header, value);
4420d5eea35SSrinivas Pandruvada }
4430d5eea35SSrinivas Pandruvada
444263225c9SSrinivas Pandruvada if (ctdp_level->mem_freq) {
445*dde9293bSSrinivas Pandruvada snprintf(header, sizeof(header), "max-mem-frequency(MHz)");
446263225c9SSrinivas Pandruvada snprintf(value, sizeof(value), "%d",
447159f130fSSrinivas Pandruvada ctdp_level->mem_freq);
44874062363SSrinivas Pandruvada format_and_print(outf, level + 2, header, value);
449263225c9SSrinivas Pandruvada }
450263225c9SSrinivas Pandruvada
4515f319081SZhang Rui if (api_version() > 1) {
4525f319081SZhang Rui snprintf(header, sizeof(header), "cooling_type");
4535f319081SZhang Rui snprintf(value, sizeof(value), "%d",
4545f319081SZhang Rui ctdp_level->cooling_type);
4555f319081SZhang Rui format_and_print(outf, level + 2, header, value);
4565f319081SZhang Rui }
4575f319081SZhang Rui
4583fb4f7cdSSrinivas Pandruvada snprintf(header, sizeof(header),
459dece22a2SPrarit Bhargava "speed-select-turbo-freq");
460dece22a2SPrarit Bhargava if (ctdp_level->fact_support) {
461dece22a2SPrarit Bhargava if (ctdp_level->fact_enabled)
462dece22a2SPrarit Bhargava snprintf(value, sizeof(value), "enabled");
463dece22a2SPrarit Bhargava else
464dece22a2SPrarit Bhargava snprintf(value, sizeof(value), "disabled");
465dece22a2SPrarit Bhargava } else
466dece22a2SPrarit Bhargava snprintf(value, sizeof(value), "unsupported");
46774062363SSrinivas Pandruvada format_and_print(outf, level + 2, header, value);
4683fb4f7cdSSrinivas Pandruvada
4693fb4f7cdSSrinivas Pandruvada snprintf(header, sizeof(header),
470dece22a2SPrarit Bhargava "speed-select-base-freq");
471dece22a2SPrarit Bhargava if (ctdp_level->pbf_support) {
472dece22a2SPrarit Bhargava if (ctdp_level->pbf_enabled)
473dece22a2SPrarit Bhargava snprintf(value, sizeof(value), "enabled");
474dece22a2SPrarit Bhargava else
475dece22a2SPrarit Bhargava snprintf(value, sizeof(value), "disabled");
476dece22a2SPrarit Bhargava } else
477dece22a2SPrarit Bhargava snprintf(value, sizeof(value), "unsupported");
47874062363SSrinivas Pandruvada format_and_print(outf, level + 2, header, value);
4793fb4f7cdSSrinivas Pandruvada
480645feeb2SSrinivas Pandruvada snprintf(header, sizeof(header),
481645feeb2SSrinivas Pandruvada "speed-select-core-power");
482645feeb2SSrinivas Pandruvada if (ctdp_level->sst_cp_support) {
483645feeb2SSrinivas Pandruvada if (ctdp_level->sst_cp_enabled)
484645feeb2SSrinivas Pandruvada snprintf(value, sizeof(value), "enabled");
485645feeb2SSrinivas Pandruvada else
486645feeb2SSrinivas Pandruvada snprintf(value, sizeof(value), "disabled");
487645feeb2SSrinivas Pandruvada } else
488645feeb2SSrinivas Pandruvada snprintf(value, sizeof(value), "unsupported");
48974062363SSrinivas Pandruvada format_and_print(outf, level + 2, header, value);
490645feeb2SSrinivas Pandruvada
491062e4aacSPrarit Bhargava if (is_clx_n_platform()) {
492062e4aacSPrarit Bhargava if (ctdp_level->pbf_support)
493850337ecSZhang Rui _isst_pbf_display_information(id, outf,
494062e4aacSPrarit Bhargava tdp_level,
495062e4aacSPrarit Bhargava &ctdp_level->pbf_info,
4964c35527aSPrarit Bhargava level + 2);
497062e4aacSPrarit Bhargava continue;
498062e4aacSPrarit Bhargava }
499062e4aacSPrarit Bhargava
5007af5a95bSSrinivas Pandruvada if (ctdp_level->pkg_tdp) {
5013fb4f7cdSSrinivas Pandruvada snprintf(header, sizeof(header), "thermal-design-power(W)");
5023fb4f7cdSSrinivas Pandruvada snprintf(value, sizeof(value), "%d", ctdp_level->pkg_tdp);
50374062363SSrinivas Pandruvada format_and_print(outf, level + 2, header, value);
5047af5a95bSSrinivas Pandruvada }
5053fb4f7cdSSrinivas Pandruvada
5067af5a95bSSrinivas Pandruvada if (ctdp_level->t_proc_hot) {
5073fb4f7cdSSrinivas Pandruvada snprintf(header, sizeof(header), "tjunction-max(C)");
5083fb4f7cdSSrinivas Pandruvada snprintf(value, sizeof(value), "%d", ctdp_level->t_proc_hot);
50974062363SSrinivas Pandruvada format_and_print(outf, level + 2, header, value);
5107af5a95bSSrinivas Pandruvada }
5113fb4f7cdSSrinivas Pandruvada
5127c7e7c0dSZhang Rui for (k = 0; k < trl_max_levels; k++) {
513c5a295caSZhang Rui if (!ctdp_level->trl_ratios[k][0])
514c5a295caSZhang Rui continue;
515c5a295caSZhang Rui
5167c7e7c0dSZhang Rui snprintf(header, sizeof(header), "turbo-ratio-limits-%s", isst_get_trl_level_name(k));
51774062363SSrinivas Pandruvada format_and_print(outf, level + 2, header, NULL);
5187c7e7c0dSZhang Rui
5193fb4f7cdSSrinivas Pandruvada for (j = 0; j < 8; ++j) {
5203fb4f7cdSSrinivas Pandruvada snprintf(header, sizeof(header), "bucket-%d", j);
52174062363SSrinivas Pandruvada format_and_print(outf, level + 3, header, NULL);
5223fb4f7cdSSrinivas Pandruvada
5233fb4f7cdSSrinivas Pandruvada snprintf(header, sizeof(header), "core-count");
5243fb4f7cdSSrinivas Pandruvada
5257c7e7c0dSZhang Rui snprintf(value, sizeof(value), "%llu", (ctdp_level->trl_cores >> (j * 8)) & 0xff);
52674062363SSrinivas Pandruvada format_and_print(outf, level + 4, header, value);
5273fb4f7cdSSrinivas Pandruvada
5287af5a95bSSrinivas Pandruvada snprintf(header, sizeof(header), "max-turbo-frequency(MHz)");
52913b868f8SZhang Rui snprintf(value, sizeof(value), "%d", ctdp_level->trl_ratios[k][j] * isst_get_disp_freq_multiplier());
53074062363SSrinivas Pandruvada format_and_print(outf, level + 4, header, value);
5313fb4f7cdSSrinivas Pandruvada }
5327af5a95bSSrinivas Pandruvada }
5337af5a95bSSrinivas Pandruvada
5343fb4f7cdSSrinivas Pandruvada if (ctdp_level->pbf_support)
535850337ecSZhang Rui _isst_pbf_display_information(id, outf, i,
5363fb4f7cdSSrinivas Pandruvada &ctdp_level->pbf_info,
53774062363SSrinivas Pandruvada level + 2);
5383fb4f7cdSSrinivas Pandruvada if (ctdp_level->fact_support)
539850337ecSZhang Rui _isst_fact_display_information(id, outf, i, 0xff, 0xff,
5403fb4f7cdSSrinivas Pandruvada &ctdp_level->fact_info,
54174062363SSrinivas Pandruvada level + 2);
5423fb4f7cdSSrinivas Pandruvada }
5433fb4f7cdSSrinivas Pandruvada
5443fb4f7cdSSrinivas Pandruvada format_and_print(outf, 1, NULL, NULL);
5453fb4f7cdSSrinivas Pandruvada }
5463fb4f7cdSSrinivas Pandruvada
54787e115b3SSrinivas Pandruvada static int start;
isst_ctdp_display_information_start(FILE * outf)5483fb4f7cdSSrinivas Pandruvada void isst_ctdp_display_information_start(FILE *outf)
5493fb4f7cdSSrinivas Pandruvada {
5503fb4f7cdSSrinivas Pandruvada last_level = 0;
5513fb4f7cdSSrinivas Pandruvada format_and_print(outf, 0, "start", NULL);
55287e115b3SSrinivas Pandruvada start = 1;
5533fb4f7cdSSrinivas Pandruvada }
5543fb4f7cdSSrinivas Pandruvada
isst_ctdp_display_information_end(FILE * outf)5553fb4f7cdSSrinivas Pandruvada void isst_ctdp_display_information_end(FILE *outf)
5563fb4f7cdSSrinivas Pandruvada {
5573fb4f7cdSSrinivas Pandruvada format_and_print(outf, 0, NULL, NULL);
55887e115b3SSrinivas Pandruvada start = 0;
5593fb4f7cdSSrinivas Pandruvada }
5603fb4f7cdSSrinivas Pandruvada
isst_pbf_display_information(struct isst_id * id,FILE * outf,int level,struct isst_pbf_info * pbf_info)561850337ecSZhang Rui void isst_pbf_display_information(struct isst_id *id, FILE *outf, int level,
5623fb4f7cdSSrinivas Pandruvada struct isst_pbf_info *pbf_info)
5633fb4f7cdSSrinivas Pandruvada {
56474062363SSrinivas Pandruvada int _level;
56574062363SSrinivas Pandruvada
566850337ecSZhang Rui _level = print_package_info(id, outf);
567850337ecSZhang Rui _isst_pbf_display_information(id, outf, level, pbf_info, _level + 1);
5683fb4f7cdSSrinivas Pandruvada format_and_print(outf, 1, NULL, NULL);
5693fb4f7cdSSrinivas Pandruvada }
5703fb4f7cdSSrinivas Pandruvada
isst_fact_display_information(struct isst_id * id,FILE * outf,int level,int fact_bucket,int fact_avx,struct isst_fact_info * fact_info)571850337ecSZhang Rui void isst_fact_display_information(struct isst_id *id, FILE *outf, int level,
5723fb4f7cdSSrinivas Pandruvada int fact_bucket, int fact_avx,
5733fb4f7cdSSrinivas Pandruvada struct isst_fact_info *fact_info)
5743fb4f7cdSSrinivas Pandruvada {
57574062363SSrinivas Pandruvada int _level;
57674062363SSrinivas Pandruvada
577850337ecSZhang Rui _level = print_package_info(id, outf);
578850337ecSZhang Rui _isst_fact_display_information(id, outf, level, fact_bucket, fact_avx,
57974062363SSrinivas Pandruvada fact_info, _level + 1);
5803fb4f7cdSSrinivas Pandruvada format_and_print(outf, 1, NULL, NULL);
5813fb4f7cdSSrinivas Pandruvada }
5823fb4f7cdSSrinivas Pandruvada
isst_clos_display_information(struct isst_id * id,FILE * outf,int clos,struct isst_clos_config * clos_config)583850337ecSZhang Rui void isst_clos_display_information(struct isst_id *id, FILE *outf, int clos,
5843fb4f7cdSSrinivas Pandruvada struct isst_clos_config *clos_config)
5853fb4f7cdSSrinivas Pandruvada {
5863fb4f7cdSSrinivas Pandruvada char header[256];
5873fb4f7cdSSrinivas Pandruvada char value[256];
58874062363SSrinivas Pandruvada int level;
5893fb4f7cdSSrinivas Pandruvada
590850337ecSZhang Rui level = print_package_info(id, outf);
5913fb4f7cdSSrinivas Pandruvada
5923fb4f7cdSSrinivas Pandruvada snprintf(header, sizeof(header), "core-power");
59374062363SSrinivas Pandruvada format_and_print(outf, level + 1, header, NULL);
5943fb4f7cdSSrinivas Pandruvada
5953fb4f7cdSSrinivas Pandruvada snprintf(header, sizeof(header), "clos");
5963fb4f7cdSSrinivas Pandruvada snprintf(value, sizeof(value), "%d", clos);
59774062363SSrinivas Pandruvada format_and_print(outf, level + 2, header, value);
5983fb4f7cdSSrinivas Pandruvada
5993fb4f7cdSSrinivas Pandruvada snprintf(header, sizeof(header), "epp");
6003fb4f7cdSSrinivas Pandruvada snprintf(value, sizeof(value), "%d", clos_config->epp);
60174062363SSrinivas Pandruvada format_and_print(outf, level + 2, header, value);
6023fb4f7cdSSrinivas Pandruvada
6033fb4f7cdSSrinivas Pandruvada snprintf(header, sizeof(header), "clos-proportional-priority");
6043fb4f7cdSSrinivas Pandruvada snprintf(value, sizeof(value), "%d", clos_config->clos_prop_prio);
60574062363SSrinivas Pandruvada format_and_print(outf, level + 2, header, value);
6063fb4f7cdSSrinivas Pandruvada
6073fb4f7cdSSrinivas Pandruvada snprintf(header, sizeof(header), "clos-min");
60813b868f8SZhang Rui snprintf(value, sizeof(value), "%d MHz", clos_config->clos_min * isst_get_disp_freq_multiplier());
60974062363SSrinivas Pandruvada format_and_print(outf, level + 2, header, value);
6103fb4f7cdSSrinivas Pandruvada
6113fb4f7cdSSrinivas Pandruvada snprintf(header, sizeof(header), "clos-max");
612137ba3b1SZhang Rui if ((clos_config->clos_max * isst_get_disp_freq_multiplier()) == 25500)
613fe6fb216SSrinivas Pandruvada snprintf(value, sizeof(value), "Max Turbo frequency");
614fe6fb216SSrinivas Pandruvada else
61513b868f8SZhang Rui snprintf(value, sizeof(value), "%d MHz", clos_config->clos_max * isst_get_disp_freq_multiplier());
61674062363SSrinivas Pandruvada format_and_print(outf, level + 2, header, value);
6173fb4f7cdSSrinivas Pandruvada
6183fb4f7cdSSrinivas Pandruvada snprintf(header, sizeof(header), "clos-desired");
61913b868f8SZhang Rui snprintf(value, sizeof(value), "%d MHz", clos_config->clos_desired * isst_get_disp_freq_multiplier());
62074062363SSrinivas Pandruvada format_and_print(outf, level + 2, header, value);
6213fb4f7cdSSrinivas Pandruvada
62274062363SSrinivas Pandruvada format_and_print(outf, level, NULL, NULL);
6233fb4f7cdSSrinivas Pandruvada }
6243fb4f7cdSSrinivas Pandruvada
isst_clos_display_clos_information(struct isst_id * id,FILE * outf,int clos_enable,int type,int state,int cap)625850337ecSZhang Rui void isst_clos_display_clos_information(struct isst_id *id, FILE *outf,
626143ad322SSrinivas Pandruvada int clos_enable, int type,
627143ad322SSrinivas Pandruvada int state, int cap)
628188afed9SSrinivas Pandruvada {
629188afed9SSrinivas Pandruvada char header[256];
630188afed9SSrinivas Pandruvada char value[256];
63174062363SSrinivas Pandruvada int level;
632188afed9SSrinivas Pandruvada
633850337ecSZhang Rui level = print_package_info(id, outf);
634188afed9SSrinivas Pandruvada
635188afed9SSrinivas Pandruvada snprintf(header, sizeof(header), "core-power");
63674062363SSrinivas Pandruvada format_and_print(outf, level + 1, header, NULL);
637188afed9SSrinivas Pandruvada
638143ad322SSrinivas Pandruvada snprintf(header, sizeof(header), "support-status");
639143ad322SSrinivas Pandruvada if (cap)
640143ad322SSrinivas Pandruvada snprintf(value, sizeof(value), "supported");
641143ad322SSrinivas Pandruvada else
642143ad322SSrinivas Pandruvada snprintf(value, sizeof(value), "unsupported");
64374062363SSrinivas Pandruvada format_and_print(outf, level + 2, header, value);
644143ad322SSrinivas Pandruvada
645188afed9SSrinivas Pandruvada snprintf(header, sizeof(header), "enable-status");
646143ad322SSrinivas Pandruvada if (state)
647143ad322SSrinivas Pandruvada snprintf(value, sizeof(value), "enabled");
648143ad322SSrinivas Pandruvada else
649143ad322SSrinivas Pandruvada snprintf(value, sizeof(value), "disabled");
65074062363SSrinivas Pandruvada format_and_print(outf, level + 2, header, value);
651143ad322SSrinivas Pandruvada
652143ad322SSrinivas Pandruvada snprintf(header, sizeof(header), "clos-enable-status");
6536320c9fbSSrinivas Pandruvada if (clos_enable)
6546320c9fbSSrinivas Pandruvada snprintf(value, sizeof(value), "enabled");
6556320c9fbSSrinivas Pandruvada else
6566320c9fbSSrinivas Pandruvada snprintf(value, sizeof(value), "disabled");
65774062363SSrinivas Pandruvada format_and_print(outf, level + 2, header, value);
658188afed9SSrinivas Pandruvada
659188afed9SSrinivas Pandruvada snprintf(header, sizeof(header), "priority-type");
6606320c9fbSSrinivas Pandruvada if (type)
6616320c9fbSSrinivas Pandruvada snprintf(value, sizeof(value), "ordered");
6626320c9fbSSrinivas Pandruvada else
6636320c9fbSSrinivas Pandruvada snprintf(value, sizeof(value), "proportional");
66474062363SSrinivas Pandruvada format_and_print(outf, level + 2, header, value);
665188afed9SSrinivas Pandruvada
66674062363SSrinivas Pandruvada format_and_print(outf, level, NULL, NULL);
667188afed9SSrinivas Pandruvada }
668188afed9SSrinivas Pandruvada
isst_clos_display_assoc_information(struct isst_id * id,FILE * outf,int clos)669850337ecSZhang Rui void isst_clos_display_assoc_information(struct isst_id *id, FILE *outf, int clos)
670e118fbe3SSrinivas Pandruvada {
671e118fbe3SSrinivas Pandruvada char header[256];
672e118fbe3SSrinivas Pandruvada char value[256];
67374062363SSrinivas Pandruvada int level;
674e118fbe3SSrinivas Pandruvada
675850337ecSZhang Rui level = print_package_info(id, outf);
676e118fbe3SSrinivas Pandruvada
677e118fbe3SSrinivas Pandruvada snprintf(header, sizeof(header), "get-assoc");
67874062363SSrinivas Pandruvada format_and_print(outf, level + 1, header, NULL);
679e118fbe3SSrinivas Pandruvada
680e118fbe3SSrinivas Pandruvada snprintf(header, sizeof(header), "clos");
681e118fbe3SSrinivas Pandruvada snprintf(value, sizeof(value), "%d", clos);
68274062363SSrinivas Pandruvada format_and_print(outf, level + 2, header, value);
683e118fbe3SSrinivas Pandruvada
68474062363SSrinivas Pandruvada format_and_print(outf, level, NULL, NULL);
685e118fbe3SSrinivas Pandruvada }
686e118fbe3SSrinivas Pandruvada
isst_display_result(struct isst_id * id,FILE * outf,char * feature,char * cmd,int result)687850337ecSZhang Rui void isst_display_result(struct isst_id *id, FILE *outf, char *feature, char *cmd,
6883fb4f7cdSSrinivas Pandruvada int result)
6893fb4f7cdSSrinivas Pandruvada {
6903fb4f7cdSSrinivas Pandruvada char header[256];
6913fb4f7cdSSrinivas Pandruvada char value[256];
69274062363SSrinivas Pandruvada int level = 3;
6933fb4f7cdSSrinivas Pandruvada
694850337ecSZhang Rui level = print_package_info(id, outf);
69574062363SSrinivas Pandruvada
6963fb4f7cdSSrinivas Pandruvada snprintf(header, sizeof(header), "%s", feature);
69774062363SSrinivas Pandruvada format_and_print(outf, level + 1, header, NULL);
6983fb4f7cdSSrinivas Pandruvada snprintf(header, sizeof(header), "%s", cmd);
699522586a9SPrarit Bhargava if (!result)
700522586a9SPrarit Bhargava snprintf(value, sizeof(value), "success");
701522586a9SPrarit Bhargava else
702522586a9SPrarit Bhargava snprintf(value, sizeof(value), "failed(error %d)", result);
70374062363SSrinivas Pandruvada format_and_print(outf, level + 2, header, value);
7043fb4f7cdSSrinivas Pandruvada
70574062363SSrinivas Pandruvada format_and_print(outf, level, NULL, NULL);
7063fb4f7cdSSrinivas Pandruvada }
70787e115b3SSrinivas Pandruvada
isst_display_error_info_message(int error,char * msg,int arg_valid,int arg)70887e115b3SSrinivas Pandruvada void isst_display_error_info_message(int error, char *msg, int arg_valid, int arg)
70987e115b3SSrinivas Pandruvada {
71087e115b3SSrinivas Pandruvada FILE *outf = get_output_file();
71187e115b3SSrinivas Pandruvada static int error_index;
71287e115b3SSrinivas Pandruvada char header[256];
71387e115b3SSrinivas Pandruvada char value[256];
71487e115b3SSrinivas Pandruvada
71587e115b3SSrinivas Pandruvada if (!out_format_is_json()) {
71687e115b3SSrinivas Pandruvada if (arg_valid)
71787e115b3SSrinivas Pandruvada snprintf(value, sizeof(value), "%s %d", msg, arg);
71887e115b3SSrinivas Pandruvada else
71987e115b3SSrinivas Pandruvada snprintf(value, sizeof(value), "%s", msg);
72087e115b3SSrinivas Pandruvada
72187e115b3SSrinivas Pandruvada if (error)
72287e115b3SSrinivas Pandruvada fprintf(outf, "Error: %s\n", value);
72387e115b3SSrinivas Pandruvada else
72487e115b3SSrinivas Pandruvada fprintf(outf, "Information: %s\n", value);
72587e115b3SSrinivas Pandruvada return;
72687e115b3SSrinivas Pandruvada }
72787e115b3SSrinivas Pandruvada
72887e115b3SSrinivas Pandruvada if (!start)
72987e115b3SSrinivas Pandruvada format_and_print(outf, 0, "start", NULL);
73087e115b3SSrinivas Pandruvada
73187e115b3SSrinivas Pandruvada if (error)
73287e115b3SSrinivas Pandruvada snprintf(header, sizeof(header), "Error%d", error_index++);
73387e115b3SSrinivas Pandruvada else
73487e115b3SSrinivas Pandruvada snprintf(header, sizeof(header), "Information:%d", error_index++);
73587e115b3SSrinivas Pandruvada format_and_print(outf, 1, header, NULL);
73687e115b3SSrinivas Pandruvada
73787e115b3SSrinivas Pandruvada snprintf(header, sizeof(header), "message");
73887e115b3SSrinivas Pandruvada if (arg_valid)
73987e115b3SSrinivas Pandruvada snprintf(value, sizeof(value), "%s %d", msg, arg);
74087e115b3SSrinivas Pandruvada else
74187e115b3SSrinivas Pandruvada snprintf(value, sizeof(value), "%s", msg);
74287e115b3SSrinivas Pandruvada
74387e115b3SSrinivas Pandruvada format_and_print(outf, 2, header, value);
74487e115b3SSrinivas Pandruvada format_and_print(outf, 1, NULL, NULL);
74587e115b3SSrinivas Pandruvada if (!start)
74687e115b3SSrinivas Pandruvada format_and_print(outf, 0, NULL, NULL);
74787e115b3SSrinivas Pandruvada }
7482c7dc57eSSrinivas Pandruvada
isst_trl_display_information(struct isst_id * id,FILE * outf,unsigned long long trl)749850337ecSZhang Rui void isst_trl_display_information(struct isst_id *id, FILE *outf, unsigned long long trl)
7502c7dc57eSSrinivas Pandruvada {
7512c7dc57eSSrinivas Pandruvada char header[256];
7522c7dc57eSSrinivas Pandruvada char value[256];
7532c7dc57eSSrinivas Pandruvada int level;
7542c7dc57eSSrinivas Pandruvada
755850337ecSZhang Rui level = print_package_info(id, outf);
7562c7dc57eSSrinivas Pandruvada
7572c7dc57eSSrinivas Pandruvada snprintf(header, sizeof(header), "get-trl");
7582c7dc57eSSrinivas Pandruvada format_and_print(outf, level + 1, header, NULL);
7592c7dc57eSSrinivas Pandruvada
7602c7dc57eSSrinivas Pandruvada snprintf(header, sizeof(header), "trl");
7612c7dc57eSSrinivas Pandruvada snprintf(value, sizeof(value), "0x%llx", trl);
7622c7dc57eSSrinivas Pandruvada format_and_print(outf, level + 2, header, value);
7632c7dc57eSSrinivas Pandruvada
7642c7dc57eSSrinivas Pandruvada format_and_print(outf, level, NULL, NULL);
7652c7dc57eSSrinivas Pandruvada }
766