xref: /aosp_15_r20/external/musl/src/linux/x32/sysinfo.c (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
1*c9945492SAndroid Build Coastguard Worker #include <sys/sysinfo.h>
2*c9945492SAndroid Build Coastguard Worker #include "syscall.h"
3*c9945492SAndroid Build Coastguard Worker 
4*c9945492SAndroid Build Coastguard Worker #define klong long long
5*c9945492SAndroid Build Coastguard Worker #define kulong unsigned long long
6*c9945492SAndroid Build Coastguard Worker 
7*c9945492SAndroid Build Coastguard Worker struct kernel_sysinfo {
8*c9945492SAndroid Build Coastguard Worker 	klong uptime;
9*c9945492SAndroid Build Coastguard Worker 	kulong loads[3];
10*c9945492SAndroid Build Coastguard Worker 	kulong totalram;
11*c9945492SAndroid Build Coastguard Worker 	kulong freeram;
12*c9945492SAndroid Build Coastguard Worker 	kulong sharedram;
13*c9945492SAndroid Build Coastguard Worker 	kulong bufferram;
14*c9945492SAndroid Build Coastguard Worker 	kulong totalswap;
15*c9945492SAndroid Build Coastguard Worker 	kulong freeswap;
16*c9945492SAndroid Build Coastguard Worker 	short procs;
17*c9945492SAndroid Build Coastguard Worker 	short pad;
18*c9945492SAndroid Build Coastguard Worker 	kulong totalhigh;
19*c9945492SAndroid Build Coastguard Worker 	kulong freehigh;
20*c9945492SAndroid Build Coastguard Worker 	unsigned mem_unit;
21*c9945492SAndroid Build Coastguard Worker };
22*c9945492SAndroid Build Coastguard Worker 
__lsysinfo(struct sysinfo * info)23*c9945492SAndroid Build Coastguard Worker int __lsysinfo(struct sysinfo *info)
24*c9945492SAndroid Build Coastguard Worker {
25*c9945492SAndroid Build Coastguard Worker 	struct kernel_sysinfo tmp;
26*c9945492SAndroid Build Coastguard Worker 	int ret = syscall(SYS_sysinfo, &tmp);
27*c9945492SAndroid Build Coastguard Worker 	if(ret == -1) return ret;
28*c9945492SAndroid Build Coastguard Worker 	info->uptime = tmp.uptime;
29*c9945492SAndroid Build Coastguard Worker 	info->loads[0] = tmp.loads[0];
30*c9945492SAndroid Build Coastguard Worker 	info->loads[1] = tmp.loads[1];
31*c9945492SAndroid Build Coastguard Worker 	info->loads[2] = tmp.loads[2];
32*c9945492SAndroid Build Coastguard Worker 	kulong shifts;
33*c9945492SAndroid Build Coastguard Worker 	kulong max = tmp.totalram | tmp.totalswap;
34*c9945492SAndroid Build Coastguard Worker 	__asm__("bsr %1,%0" : "=r"(shifts) : "r"(max));
35*c9945492SAndroid Build Coastguard Worker 	shifts = shifts >= 32 ? shifts - 31 : 0;
36*c9945492SAndroid Build Coastguard Worker 	info->totalram = tmp.totalram >> shifts;
37*c9945492SAndroid Build Coastguard Worker 	info->freeram = tmp.freeram >> shifts;
38*c9945492SAndroid Build Coastguard Worker 	info->sharedram = tmp.sharedram >> shifts;
39*c9945492SAndroid Build Coastguard Worker 	info->bufferram = tmp.bufferram >> shifts;
40*c9945492SAndroid Build Coastguard Worker 	info->totalswap = tmp.totalswap >> shifts;
41*c9945492SAndroid Build Coastguard Worker 	info->freeswap = tmp.freeswap >> shifts;
42*c9945492SAndroid Build Coastguard Worker 	info->procs = tmp.procs ;
43*c9945492SAndroid Build Coastguard Worker 	info->totalhigh = tmp.totalhigh >> shifts;
44*c9945492SAndroid Build Coastguard Worker 	info->freehigh = tmp.freehigh >> shifts;
45*c9945492SAndroid Build Coastguard Worker 	info->mem_unit = (tmp.mem_unit ? tmp.mem_unit : 1) << shifts;
46*c9945492SAndroid Build Coastguard Worker 	return ret;
47*c9945492SAndroid Build Coastguard Worker }
48*c9945492SAndroid Build Coastguard Worker 
49*c9945492SAndroid Build Coastguard Worker weak_alias(__lsysinfo, sysinfo);
50