Skip to content

Commit 45c3c45

Browse files
authored
Merge pull request #1868 from martin-frbg/aix_cpuid
Use prtconf to determine CPU type on AIX
2 parents 368d14f + 42bc2a9 commit 45c3c45

File tree

1 file changed

+36
-4
lines changed

1 file changed

+36
-4
lines changed

cpuid_power.c

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
#define CPUTYPE_CELL 6
5757
#define CPUTYPE_PPCG4 7
5858
#define CPUTYPE_POWER8 8
59+
#define CPUTYPE_POWER9 9
5960

6061
char *cpuname[] = {
6162
"UNKNOWN",
@@ -66,7 +67,8 @@ char *cpuname[] = {
6667
"POWER6",
6768
"CELL",
6869
"PPCG4",
69-
"POWER8"
70+
"POWER8",
71+
"POWER9"
7072
};
7173

7274
char *lowercpuname[] = {
@@ -78,7 +80,8 @@ char *lowercpuname[] = {
7880
"power6",
7981
"cell",
8082
"ppcg4",
81-
"power8"
83+
"power8",
84+
"power9"
8285
};
8386

8487
char *corename[] = {
@@ -90,7 +93,8 @@ char *corename[] = {
9093
"POWER6",
9194
"CELL",
9295
"PPCG4",
93-
"POWER8"
96+
"POWER8",
97+
"POWER8"
9498
};
9599

96100
int detect(void){
@@ -120,13 +124,41 @@ int detect(void){
120124
if (!strncasecmp(p, "POWER6", 6)) return CPUTYPE_POWER6;
121125
if (!strncasecmp(p, "POWER7", 6)) return CPUTYPE_POWER6;
122126
if (!strncasecmp(p, "POWER8", 6)) return CPUTYPE_POWER8;
127+
if (!strncasecmp(p, "POWER9", 6)) return CPUTYPE_POWER8;
123128
if (!strncasecmp(p, "Cell", 4)) return CPUTYPE_CELL;
124129
if (!strncasecmp(p, "7447", 4)) return CPUTYPE_PPCG4;
125130

126131
return CPUTYPE_UNKNOWN;
127132
#endif
128133

129134
#ifdef _AIX
135+
FILE *infile;
136+
char buffer[512], *p;
137+
138+
p = (char *)NULL;
139+
infile = popen("prtconf|grep 'Processor Type'");
140+
while (fgets(buffer, sizeof(buffer), infile)){
141+
if (!strncmp("Pro", buffer, 3)){
142+
p = strchr(buffer, ':') + 2;
143+
#if 0
144+
fprintf(stderr, "%s\n", p);
145+
#endif
146+
break;
147+
}
148+
}
149+
150+
pclose(infile);
151+
152+
if (!strncasecmp(p, "POWER3", 6)) return CPUTYPE_POWER3;
153+
if (!strncasecmp(p, "POWER4", 6)) return CPUTYPE_POWER4;
154+
if (!strncasecmp(p, "PPC970", 6)) return CPUTYPE_PPC970;
155+
if (!strncasecmp(p, "POWER5", 6)) return CPUTYPE_POWER5;
156+
if (!strncasecmp(p, "POWER6", 6)) return CPUTYPE_POWER6;
157+
if (!strncasecmp(p, "POWER7", 6)) return CPUTYPE_POWER6;
158+
if (!strncasecmp(p, "POWER8", 6)) return CPUTYPE_POWER8;
159+
if (!strncasecmp(p, "POWER9", 6)) return CPUTYPE_POWER8;
160+
if (!strncasecmp(p, "Cell", 4)) return CPUTYPE_CELL;
161+
if (!strncasecmp(p, "7447", 4)) return CPUTYPE_PPCG4;
130162
return CPUTYPE_POWER5;
131163
#endif
132164

@@ -148,7 +180,7 @@ int id;
148180
id = __asm __volatile("mfpvr %0" : "=r"(id));
149181
switch ( id >> 16 ) {
150182
case 0x4e: // POWER9
151-
return return CPUTYPE_POWER8;
183+
return CPUTYPE_POWER8;
152184
break;
153185
case 0x4d:
154186
case 0x4b: // POWER8/8E

0 commit comments

Comments
 (0)