hrev44073 adds 1 changeset to branch 'master' old head: 11ff194b97c0772c72d9e4c5c08c8b1390d6e8e6 new head: 1f5facdbe7e25dc9618ec413eda01adf82d763f2 ---------------------------------------------------------------------------- 1f5facd: sysinfo: switch to c++ [ Jerome Duval <jerome.duval@xxxxxxxxx> ] ---------------------------------------------------------------------------- Revision: hrev44073 Commit: 1f5facdbe7e25dc9618ec413eda01adf82d763f2 URL: http://cgit.haiku-os.org/haiku/commit/?id=1f5facd Author: Jerome Duval <jerome.duval@xxxxxxxxx> Date: Sat Apr 28 07:59:52 2012 UTC ---------------------------------------------------------------------------- 2 files changed, 30 insertions(+), 49 deletions(-) src/bin/Jamfile | 2 +- src/bin/{sysinfo.c => sysinfo.cpp} | 77 ++++++++++++-------------------- ---------------------------------------------------------------------------- diff --git a/src/bin/Jamfile b/src/bin/Jamfile index c6b8355..1df5956 100644 --- a/src/bin/Jamfile +++ b/src/bin/Jamfile @@ -49,7 +49,7 @@ StdBinCommands release.c renice.c rescan.c - sysinfo.c + sysinfo.cpp unchop.c uptime.cpp vmstat.cpp diff --git a/src/bin/sysinfo.c b/src/bin/sysinfo.cpp similarity index 95% rename from src/bin/sysinfo.c rename to src/bin/sysinfo.cpp index b083c63..52a9f8d 100644 --- a/src/bin/sysinfo.c +++ b/src/bin/sysinfo.cpp @@ -143,12 +143,10 @@ struct cache_description { static void print_intel_cache_descriptors(enum cpu_types type, cpuid_info *info) { - int i, j, maxDesc; - uint8 cacheDescriptors[15]; // Max - maxDesc = 0; - i = 0; + int maxDesc = 0; + int i = 0; // put valid values into array if ((info->regs.eax & 0x80000000) == 0) { @@ -187,11 +185,12 @@ print_intel_cache_descriptors(enum cpu_types type, cpuid_info *info) putchar('\n'); - for (i = 0; i < maxDesc; i++) { + for (int i = 0; i < maxDesc; i++) { // ignore NULL descriptors if (cacheDescriptors[i] == 0) continue; + int j; for (j = 0; sIntelCacheDescriptions[j].code; j++) { if (cacheDescriptors[i] == sIntelCacheDescriptions[j].code) { if (cacheDescriptors[i] == 0x40) { @@ -217,17 +216,16 @@ print_intel_cache_descriptors(enum cpu_types type, cpuid_info *info) static void print_TLB(uint32 reg, const char *pages) { - int num; int entries[2]; int ways[2]; - char *name[2] = { "Inst TLB", "Data TLB" }; + const char *name[2] = { "Inst TLB", "Data TLB" }; entries[0] = (reg & 0xff); ways[0] = ((reg >> 8) & 0xff); entries[1] = ((reg >> 16) & 0xff); ways[1] = ((reg >> 24) & 0xff); - for (num = 0; num < 2; num++) { + for (int num = 0; num < 2; num++) { printf("\t%s: %s%s%u entries, ", name[num], pages ? pages : "", pages ? " pages, " : "", entries[num]); @@ -301,28 +299,21 @@ static void print_intel_cache_desc(int32 cpu) { cpuid_info info; - uint32 type; - uint32 level; - bool isFullyAssoc; - uint32 lineSize; - uint32 linesPerTag; - uint32 ways; - uint32 sets; - + // A second parameters needs to be passed to CPUID which determines the cache level to query get_cpuid(&info, 0x00000004, cpu); putchar('\n'); - type = info.regs.eax & 0xf; - level = (info.regs.eax & 0x70) >> 4; - isFullyAssoc = info.regs.eax & 0x100; + uint32 type = info.regs.eax & 0xf; + uint32 level = (info.regs.eax & 0x70) >> 4; + bool isFullyAssoc = info.regs.eax & 0x100; - lineSize = (info.regs.ebx & 0xfff) + 1; - linesPerTag = ((info.regs.ebx & 0x3ff000) >> 12) + 1; - ways = ((info.regs.ebx & 0xffc00000) >> 22) + 1; + uint32 lineSize = (info.regs.ebx & 0xfff) + 1; + uint32 linesPerTag = ((info.regs.ebx & 0x3ff000) >> 12) + 1; + uint32 ways = ((info.regs.ebx & 0xffc00000) >> 22) + 1; - sets = info.regs.ecx; + uint32 sets = info.regs.ecx; printf("\tL%ld ",level); @@ -340,7 +331,7 @@ print_intel_cache_desc(int32 cpu) printf("%lu lines/tag, %lu bytes/line\n", linesPerTag, lineSize); get_cpuid(&info, 0x80000006, cpu); - print_level2_cache(info.regs.ecx, "L2 cache"); + print_level2_cache(sets, "L2 cache"); } @@ -361,11 +352,10 @@ print_amd_power_management_features(uint32 features) "TS", "FID", "VID", "TTP", "TM", "STC", }; int32 found = 4; - int32 i; printf("\tPower Management Features:"); - for (i = 0; i < 6; i++) { + for (int32 i = 0; i < 6; i++) { if ((features & (1UL << i)) && kFeatures[i] != NULL) { printf("%s%s", found == 0 ? "\t\t" : " ", kFeatures[i]); found++; @@ -391,9 +381,8 @@ print_amd_features(uint32 features) NULL, "FFXSTR", NULL, "RDTSCP", NULL, "64", "3DNow+", "3DNow!" }; int32 found = 0; - int32 i; - for (i = 0; i < 32; i++) { + for (int32 i = 0; i < 32; i++) { if ((features & (1UL << i)) && kFeatures[i] != NULL) { printf("%s%s", found == 0 ? "\t\t" : " ", kFeatures[i]); found++; @@ -419,9 +408,8 @@ print_extended_features(uint32 features) NULL, "AES", "XSAVE", "OSXSAVE", NULL, NULL, NULL, NULL }; int32 found = 0; - int32 i; - for (i = 0; i < 32; i++) { + for (int32 i = 0; i < 32; i++) { if ((features & (1UL << i)) && kFeatures[i] != NULL) { printf("%s%s", found == 0 ? "\t\t" : " ", kFeatures[i]); found++; @@ -451,9 +439,8 @@ print_features(uint32 features) "HTT", "TM", NULL, "PBE", }; int32 found = 0; - int32 i; - for (i = 0; i < 32; i++) { + for (int32 i = 0; i < 32; i++) { if ((features & (1UL << i)) && kFeatures[i] != NULL) { printf("%s%s", found == 0 ? "\t\t" : " ", kFeatures[i]); found++; @@ -476,7 +463,7 @@ print_processor_signature(system_info *sys_info, cpuid_info *info, const char *p { if ((sys_info->cpu_type & B_CPU_x86_VENDOR_MASK) == B_CPU_AMD_x86) { - printf("\t%s%sype %u, family %u, model %u, stepping %u, features 0x%08lx\n", + printf("\t%s%sype %lu, family %lu, model %u, stepping %lu, features 0x%08lx\n", prefix ? prefix : "", prefix && prefix[0] ? "t" : "T", info->eax_1.type, info->eax_1.family + (info->eax_1.family == 0xf ? info->eax_1.extended_family : 0), @@ -485,7 +472,7 @@ print_processor_signature(system_info *sys_info, cpuid_info *info, const char *p info->eax_1.features); } else if ((sys_info->cpu_type & B_CPU_x86_VENDOR_MASK) == B_CPU_INTEL_x86) { // model calculation is different for INTEL - printf("\t%s%sype %u, family %u, model %u, stepping %u, features 0x%08lx\n", + printf("\t%s%sype %lu, family %lu, model %u, stepping %lu, features 0x%08lx\n", prefix ? prefix : "", prefix && prefix[0] ? "t" : "T", info->eax_1.type, info->eax_1.family + (info->eax_1.family == 0xf ? info->eax_1.extended_family : 0), @@ -521,34 +508,32 @@ dump_cpu(system_info *info, int32 cpu) */ cpuid_info baseInfo; - cpuid_info cpuInfo; - int32 maxStandardFunction, maxExtendedFunction = 0; - if (get_cpuid(&baseInfo, 0, cpu) != B_OK) { // this CPU doesn't support cpuid return; } - maxStandardFunction = baseInfo.eax_0.max_eax; + int32 maxStandardFunction = baseInfo.eax_0.max_eax; if (maxStandardFunction >= 500) maxStandardFunction = 0; /* old Pentium sample chips has cpu signature here */ /* Extended cpuid */ + cpuid_info cpuInfo; get_cpuid(&cpuInfo, 0x80000000, cpu); // extended cpuid is only supported if max_eax is greater than the service id + int32 maxExtendedFunction = 0; if (cpuInfo.eax_0.max_eax > 0x80000000) maxExtendedFunction = cpuInfo.eax_0.max_eax & 0xff; if (maxExtendedFunction >=4 ) { char buffer[49]; char *name = buffer; - int32 i; memset(buffer, 0, sizeof(buffer)); - for (i = 0; i < 3; i++) { + for (int32 i = 0; i < 3; i++) { cpuid_info nameInfo; get_cpuid(&nameInfo, 0x80000002 + i, cpu); @@ -653,7 +638,6 @@ dump_cpus(system_info *info) const char *vendor = get_cpu_vendor_string(info->cpu_type); const char *model = get_cpu_model_string(info); char modelString[32]; - int32 cpu; if (model == NULL && vendor == NULL) model = "(Unknown)"; @@ -670,7 +654,7 @@ dump_cpus(system_info *info) info->id[0], info->id[1]); #ifdef __INTEL__ - for (cpu = 0; cpu < info->cpu_count; cpu++) + for (int32 cpu = 0; cpu < info->cpu_count; cpu++) dump_cpu(info, cpu); #endif // __INTEL__ } @@ -750,15 +734,12 @@ dump_system_info(system_info *info) int main(int argc, char *argv[]) { - system_info info; - const char *opt; - int i; - if (!is_computer_on()) { printf("The computer is not on! No info available\n"); exit(EXIT_FAILURE); } + system_info info; if (get_system_info(&info) != B_OK) { printf("Error getting system information!\n"); return 1; @@ -767,8 +748,8 @@ main(int argc, char *argv[]) if (argc <= 1) { dump_system_info(&info); } else { - for (i = 1; i < argc; i++) { - opt = argv[i]; + for (int i = 1; i < argc; i++) { + const char *opt = argv[i]; if (strncmp(opt, "-id", strlen(opt)) == 0) { /* note: the original also assumes this option on "sysinfo -" */ printf("0x%.8lx 0x%.8lx\n", info.id[0], info.id[1]);