Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1) // SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2) #include "units.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3) #include <inttypes.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4) #include <limits.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5) #include <stdlib.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6) #include <string.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7) #include <linux/kernel.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8) #include <linux/time64.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) unsigned long parse_tag_value(const char *str, struct parse_tag *tags)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) 	struct parse_tag *i = tags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) 	while (i->tag) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) 		char *s = strchr(str, i->tag);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) 		if (s) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) 			unsigned long int value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) 			char *endptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) 			value = strtoul(str, &endptr, 10);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) 			if (s != endptr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) 				break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) 			if (value > ULONG_MAX / i->mult)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) 				break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) 			value *= i->mult;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) 			return value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) 		i++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) 	return (unsigned long) -1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) unsigned long convert_unit(unsigned long value, char *unit)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) 	*unit = ' ';
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) 	if (value > 1000) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) 		value /= 1000;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) 		*unit = 'K';
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) 	if (value > 1000) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) 		value /= 1000;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) 		*unit = 'M';
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) 	if (value > 1000) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) 		value /= 1000;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) 		*unit = 'G';
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) 	return value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) int unit_number__scnprintf(char *buf, size_t size, u64 n)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) 	char unit[4] = "BKMG";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) 	int i = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) 	while (((n / 1024) > 1) && (i < 3)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) 		n /= 1024;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) 		i++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) 	return scnprintf(buf, size, "%" PRIu64 "%c", n, unit[i]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) }