xref: /aosp_15_r20/external/cpuinfo/src/arm/android/properties.c (revision 2b54f0db79fd8303838913b20ff3780cddaa909f)
1*2b54f0dbSXin Li #include <stdbool.h>
2*2b54f0dbSXin Li #include <stdint.h>
3*2b54f0dbSXin Li #include <stdlib.h>
4*2b54f0dbSXin Li #include <stddef.h>
5*2b54f0dbSXin Li #include <string.h>
6*2b54f0dbSXin Li 
7*2b54f0dbSXin Li #include <sys/system_properties.h>
8*2b54f0dbSXin Li 
9*2b54f0dbSXin Li #include <linux/api.h>
10*2b54f0dbSXin Li #include <arm/android/api.h>
11*2b54f0dbSXin Li #include <arm/linux/api.h>
12*2b54f0dbSXin Li #include <cpuinfo/log.h>
13*2b54f0dbSXin Li 
14*2b54f0dbSXin Li #if CPUINFO_MOCK
15*2b54f0dbSXin Li 	#include <cpuinfo-mock.h>
16*2b54f0dbSXin Li 
17*2b54f0dbSXin Li 	static struct cpuinfo_mock_property* cpuinfo_mock_properties = NULL;
18*2b54f0dbSXin Li 
cpuinfo_mock_android_properties(struct cpuinfo_mock_property * properties)19*2b54f0dbSXin Li 	void CPUINFO_ABI cpuinfo_mock_android_properties(struct cpuinfo_mock_property* properties) {
20*2b54f0dbSXin Li 		cpuinfo_log_info("Android properties mocking enabled");
21*2b54f0dbSXin Li 		cpuinfo_mock_properties = properties;
22*2b54f0dbSXin Li 	}
23*2b54f0dbSXin Li 
cpuinfo_android_property_get(const char * key,char * value)24*2b54f0dbSXin Li 	static int cpuinfo_android_property_get(const char* key, char* value) {
25*2b54f0dbSXin Li 		if (cpuinfo_mock_properties != NULL) {
26*2b54f0dbSXin Li 			for (const struct cpuinfo_mock_property* prop = cpuinfo_mock_properties; prop->key != NULL; prop++) {
27*2b54f0dbSXin Li 				if (strncmp(key, prop->key, CPUINFO_BUILD_PROP_NAME_MAX) == 0) {
28*2b54f0dbSXin Li 					strncpy(value, prop->value, CPUINFO_BUILD_PROP_VALUE_MAX);
29*2b54f0dbSXin Li 					return (int) strnlen(prop->value, CPUINFO_BUILD_PROP_VALUE_MAX);
30*2b54f0dbSXin Li 				}
31*2b54f0dbSXin Li 			}
32*2b54f0dbSXin Li 		}
33*2b54f0dbSXin Li 		*value = '\0';
34*2b54f0dbSXin Li 		return 0;
35*2b54f0dbSXin Li 	}
36*2b54f0dbSXin Li #else
cpuinfo_android_property_get(const char * key,char * value)37*2b54f0dbSXin Li 	static inline int cpuinfo_android_property_get(const char* key, char* value) {
38*2b54f0dbSXin Li 		return __system_property_get(key, value);
39*2b54f0dbSXin Li 	}
40*2b54f0dbSXin Li #endif
41*2b54f0dbSXin Li 
cpuinfo_arm_android_parse_properties(struct cpuinfo_android_properties properties[restrict static1])42*2b54f0dbSXin Li void cpuinfo_arm_android_parse_properties(struct cpuinfo_android_properties properties[restrict static 1]) {
43*2b54f0dbSXin Li 	const int ro_product_board_length =
44*2b54f0dbSXin Li 		cpuinfo_android_property_get("ro.product.board", properties->ro_product_board);
45*2b54f0dbSXin Li 	cpuinfo_log_debug("read ro.product.board = \"%.*s\"", ro_product_board_length, properties->ro_product_board);
46*2b54f0dbSXin Li 
47*2b54f0dbSXin Li 	const int ro_board_platform_length =
48*2b54f0dbSXin Li 		cpuinfo_android_property_get("ro.board.platform", properties->ro_board_platform);
49*2b54f0dbSXin Li 	cpuinfo_log_debug("read ro.board.platform = \"%.*s\"", ro_board_platform_length, properties->ro_board_platform);
50*2b54f0dbSXin Li 
51*2b54f0dbSXin Li 	const int ro_mediatek_platform_length =
52*2b54f0dbSXin Li 		cpuinfo_android_property_get("ro.mediatek.platform", properties->ro_mediatek_platform);
53*2b54f0dbSXin Li 	cpuinfo_log_debug("read ro.mediatek.platform = \"%.*s\"",
54*2b54f0dbSXin Li 		ro_mediatek_platform_length, properties->ro_mediatek_platform);
55*2b54f0dbSXin Li 
56*2b54f0dbSXin Li 	const int ro_arch_length =
57*2b54f0dbSXin Li 		cpuinfo_android_property_get("ro.arch", properties->ro_arch);
58*2b54f0dbSXin Li 	cpuinfo_log_debug("read ro.arch = \"%.*s\"", ro_arch_length, properties->ro_arch);
59*2b54f0dbSXin Li 
60*2b54f0dbSXin Li 	const int ro_chipname_length =
61*2b54f0dbSXin Li 		cpuinfo_android_property_get("ro.chipname", properties->ro_chipname);
62*2b54f0dbSXin Li 	cpuinfo_log_debug("read ro.chipname = \"%.*s\"", ro_chipname_length, properties->ro_chipname);
63*2b54f0dbSXin Li 
64*2b54f0dbSXin Li 	const int ro_hardware_chipname_length =
65*2b54f0dbSXin Li 		cpuinfo_android_property_get("ro.hardware.chipname", properties->ro_hardware_chipname);
66*2b54f0dbSXin Li 	cpuinfo_log_debug("read ro.hardware.chipname = \"%.*s\"", ro_hardware_chipname_length, properties->ro_hardware_chipname);
67*2b54f0dbSXin Li }
68