/*** Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: CpuId.Linux.cpp Date: 2022-1-25 Author: Reece ***/ #include #include "HWInfo.hpp" #include "CpuInfo.hpp" #include "CpuInfo.Linux.hpp" #if defined(AURORA_IS_BSD_DERIVED) #include #include #endif #if defined(AURORA_IS_POSIX_DERIVED) #include #include #endif namespace Aurora::HWInfo { static AuUInt32 ReadUInt(const AuString &path) { AuString contents; if (AuIOFS::ReadString(path, contents)) { char *endPtr; auto word = strtoll(contents.c_str(), &endPtr, 10); if (errno == ERANGE) return 0; return word; } return 0; } static void SetCaches() { gCpuInfo.dwCacheLine = ReadUInt("/sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size"); gCpuInfo.dwCacheL1 = ReadUInt("/sys/devices/system/cpu/cpu0/cache/index1/size"); gCpuInfo.dwCacheL2 = ReadUInt("/sys/devices/system/cpu/cpu0/cache/index2/size"); gCpuInfo.dwCacheL3 = ReadUInt("/sys/devices/system/cpu/cpu0/cache/index3/size"); } void SetCpuTopologyLinux() { gCpuInfo.uSocket = 1; gCpuInfo.uCores = 1; gCpuInfo.uThreads = get_nprocs(); // TODO: parse /proc/cpuinfo gCpuInfo.bMaskMTHalf = true; SetCaches(); } }