Skip to content

Commit 2cd0406

Browse files
fbarchardmalfetclaude
authored
Add missing iOS, iPad, iPod, and AppleTV device model mappings (#428)
* Add missing iOS, iPad, iPod, and AppleTV device model mappings Update decode_package_name_from_hw_machine to support missing iPad, iPhone, iPod, and AppleTV hardware machine model identifiers (iPad8,x through iPad16,x; iPod9,1; AppleTV2,1 through AppleTV14,1) and map them to their corresponding Apple A-series and M-series SoCs. Fixes #425, #140 Co-authored-by: Nikita Shulga <nikita.shulga@gmail.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
1 parent d610881 commit 2cd0406

1 file changed

Lines changed: 113 additions & 8 deletions

File tree

src/arm/mach/init.c

Lines changed: 113 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -271,9 +271,8 @@ static int decode_package_name_from_hw_machine(char* package_name) {
271271
/* iPad 2 and up are supported */
272272
case 2:
273273
/*
274-
* iPad 2 [A5]: iPad2,1, iPad2,2, iPad2,3,
275-
* iPad2,4 iPad mini [A5]: iPad2,5, iPad2,6,
276-
* iPad2,7
274+
* iPad 2 [A5]: iPad2,1, iPad2,2, iPad2,3, iPad2,4
275+
* iPad mini [A5]: iPad2,5, iPad2,6, iPad2,7
277276
*/
278277
chip_model = major + 3;
279278
break;
@@ -287,10 +286,9 @@ static int decode_package_name_from_hw_machine(char* package_name) {
287286
break;
288287
case 4:
289288
/*
290-
* iPad Air [A7]: iPad4,1, iPad4,2,
291-
* iPad4,3 iPad mini Retina [A7]: iPad4,4,
292-
* iPad4,5, iPad4,6 iPad mini 3 [A7]:
293-
* iPad4,7, iPad4,8, iPad4,9
289+
* iPad Air [A7]: iPad4,1, iPad4,2, iPad4,3
290+
* iPad mini Retina [A7]: iPad4,4, iPad4,5, iPad4,6
291+
* iPad mini 3 [A7]: iPad4,7, iPad4,8, iPad4,9
294292
*/
295293
chip_model = major + 3;
296294
break;
@@ -316,28 +314,135 @@ static int decode_package_name_from_hw_machine(char* package_name) {
316314
* iPad Pro 12.9" [A10X]: iPad7,1, iPad7,2
317315
* iPad Pro 10.5" [A10X]: iPad7,3, iPad7,4
318316
* iPad 6th Gen [A10]: iPad7,5, iPad7,6
317+
* iPad 7th Gen [A10]: iPad7,11, iPad7,12
319318
*/
320319
chip_model = major + 3;
321320
suffix = minor <= 4 ? 'X' : '\0';
322321
break;
322+
case 8:
323+
/*
324+
* iPad Pro 11" [A12X]: iPad8,1, iPad8,2, iPad8,3, iPad8,4
325+
* iPad Pro 12.9" [A12X]: iPad8,5, iPad8,6, iPad8,7, iPad8,8
326+
* iPad Pro 11" 2nd [A12Z]: iPad8,9, iPad8,10
327+
* iPad Pro 12.9" 4th [A12Z]: iPad8,11, iPad8,12
328+
*/
329+
chip_model = 12;
330+
suffix = minor <= 8 ? 'X' : 'Z';
331+
break;
332+
case 11:
333+
/*
334+
* iPad mini 5th Gen [A12]: iPad11,1, iPad11,2
335+
* iPad Air 3rd Gen [A12]: iPad11,3, iPad11,4
336+
* iPad 8th Gen [A12]: iPad11,6, iPad11,7
337+
*/
338+
chip_model = 12;
339+
break;
340+
case 12:
341+
/*
342+
* iPad 9th Gen [A13]: iPad12,1, iPad12,2
343+
*/
344+
chip_model = 13;
345+
break;
346+
case 13:
347+
/*
348+
* iPad Air 4th Gen [A14]: iPad13,1, iPad13,2
349+
* iPad Pro 11" 3rd [M1]: iPad13,4, iPad13,5, iPad13,6, iPad13,7
350+
* iPad Pro 12.9" 5th [M1]: iPad13,8, iPad13,9, iPad13,10, iPad13,11
351+
* iPad Air 5th Gen [M1]: iPad13,16, iPad13,17
352+
* iPad 10th Gen [A14]: iPad13,18, iPad13,19
353+
*/
354+
if (minor == 1 || minor == 2 || minor == 18 || minor == 19) {
355+
chip_model = 14;
356+
} else {
357+
snprintf(package_name, CPUINFO_PACKAGE_NAME_MAX, "Apple M1");
358+
return true;
359+
}
360+
break;
361+
case 14:
362+
/*
363+
* iPad mini 6th Gen [A15]: iPad14,1, iPad14,2
364+
* iPad Pro 11" 4th [M2]: iPad14,3, iPad14,4
365+
* iPad Pro 12.9" 6th [M2]: iPad14,5, iPad14,6
366+
* iPad Air 11" M2 [M2]: iPad14,8, iPad14,9
367+
* iPad Air 13" M2 [M2]: iPad14,10, iPad14,11
368+
*/
369+
if (minor == 1 || minor == 2) {
370+
chip_model = 15;
371+
} else {
372+
snprintf(package_name, CPUINFO_PACKAGE_NAME_MAX, "Apple M2");
373+
return true;
374+
}
375+
break;
376+
case 16:
377+
/*
378+
* iPad mini 7th Gen [A17]: iPad16,1, iPad16,2
379+
* iPad Pro 11" M4 [M4]: iPad16,3, iPad16,4
380+
* iPad Pro 13" M4 [M4]: iPad16,5, iPad16,6
381+
*/
382+
if (minor == 1 || minor == 2) {
383+
chip_model = 17;
384+
} else {
385+
snprintf(package_name, CPUINFO_PACKAGE_NAME_MAX, "Apple M4");
386+
return true;
387+
}
388+
break;
323389
default:
324390
cpuinfo_log_info("unknown iPad: %s", machine_name);
325391
break;
326392
}
327393
} else if (strcmp(name, "iPod") == 0) {
328394
switch (major) {
395+
case 4:
396+
/* iPod touch (4th Gen) [A4]: iPod4,1 */
397+
chip_model = 4;
398+
break;
329399
case 5:
400+
/* iPod touch (5th Gen) [A5]: iPod5,1 */
330401
chip_model = 5;
331402
break;
332-
/* iPod touch (5th Gen) [A5]: iPod5,1 */
333403
case 7:
334404
/* iPod touch (6th Gen, 2015) [A8]: iPod7,1 */
335405
chip_model = 8;
336406
break;
407+
case 9:
408+
/* iPod touch (7th Gen, 2019) [A10]: iPod9,1 */
409+
chip_model = 10;
410+
break;
337411
default:
338412
cpuinfo_log_info("unknown iPod: %s", machine_name);
339413
break;
340414
}
415+
} else if (strcmp(name, "AppleTV") == 0) {
416+
switch (major) {
417+
case 2:
418+
/* Apple TV 2nd Gen [A4]: AppleTV2,1 */
419+
chip_model = 4;
420+
break;
421+
case 3:
422+
/* Apple TV 3rd Gen [A5]: AppleTV3,1, AppleTV3,2 */
423+
chip_model = 5;
424+
break;
425+
case 5:
426+
/* Apple TV HD [A8]: AppleTV5,3 */
427+
chip_model = 8;
428+
break;
429+
case 6:
430+
/* Apple TV 4K 1st Gen [A10X]: AppleTV6,2 */
431+
chip_model = 10;
432+
suffix = 'X';
433+
break;
434+
case 11:
435+
/* Apple TV 4K 2nd Gen [A12]: AppleTV11,1 */
436+
chip_model = 12;
437+
break;
438+
case 14:
439+
/* Apple TV 4K 3rd Gen [A15]: AppleTV14,1 */
440+
chip_model = 15;
441+
break;
442+
default:
443+
cpuinfo_log_info("unknown AppleTV: %s", machine_name);
444+
break;
445+
}
341446
} else {
342447
cpuinfo_log_info("unknown device: %s", machine_name);
343448
}

0 commit comments

Comments
 (0)