brintos

brintos / linux-shallow public Read only

0
0
Text · 2.0 KiB · 9b655be Raw
114 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2/*3 * PAPR Energy attributes sniff test4 * This checks if the papr folders and contents are populated relating to5 * the energy and frequency attributes6 *7 * Copyright 2022, Pratik Rajesh Sampat, IBM Corp.8 */9 10#include <errno.h>11#include <stdio.h>12#include <string.h>13#include <dirent.h>14#include <sys/types.h>15#include <sys/stat.h>16#include <unistd.h>17#include <stdlib.h>18 19#include "utils.h"20 21enum energy_freq_attrs {22	POWER_PERFORMANCE_MODE = 1,23	IDLE_POWER_SAVER_STATUS = 2,24	MIN_FREQ = 3,25	STAT_FREQ = 4,26	MAX_FREQ = 6,27	PROC_FOLDING_STATUS = 828};29 30enum type {31	INVALID,32	STR_VAL,33	NUM_VAL34};35 36static int value_type(int id)37{38	int val_type;39 40	switch (id) {41	case POWER_PERFORMANCE_MODE:42	case IDLE_POWER_SAVER_STATUS:43		val_type = STR_VAL;44		break;45	case MIN_FREQ:46	case STAT_FREQ:47	case MAX_FREQ:48	case PROC_FOLDING_STATUS:49		val_type = NUM_VAL;50		break;51	default:52		val_type = INVALID;53	}54 55	return val_type;56}57 58static int verify_energy_info(void)59{60	const char *path = "/sys/firmware/papr/energy_scale_info";61	struct dirent *entry;62	struct stat s;63	DIR *dirp;64 65	errno = 0;66	if (stat(path, &s)) {67		SKIP_IF(errno == ENOENT);68		FAIL_IF(errno);69	}70 71	FAIL_IF(!S_ISDIR(s.st_mode));72 73	dirp = opendir(path);74 75	while ((entry = readdir(dirp)) != NULL) {76		char file_name[64];77		int id, attr_type;78		FILE *f;79 80		if (strcmp(entry->d_name, ".") == 0 ||81		    strcmp(entry->d_name, "..") == 0)82			continue;83 84		id = atoi(entry->d_name);85		attr_type = value_type(id);86		FAIL_IF(attr_type == INVALID);87 88		/* Check if the files exist and have data in them */89		sprintf(file_name, "%s/%d/desc", path, id);90		f = fopen(file_name, "r");91		FAIL_IF(!f);92		FAIL_IF(fgetc(f) == EOF);93 94		sprintf(file_name, "%s/%d/value", path, id);95		f = fopen(file_name, "r");96		FAIL_IF(!f);97		FAIL_IF(fgetc(f) == EOF);98 99		if (attr_type == STR_VAL) {100			sprintf(file_name, "%s/%d/value_desc", path, id);101			f = fopen(file_name, "r");102			FAIL_IF(!f);103			FAIL_IF(fgetc(f) == EOF);104		}105	}106 107	return 0;108}109 110int main(void)111{112	return test_harness(verify_energy_info, "papr_attributes");113}114