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>
diff --git a/src/arm/mach/init.c b/src/arm/mach/init.c
index 6c632dd..76224b9 100644
--- a/src/arm/mach/init.c
+++ b/src/arm/mach/init.c
@@ -271,9 +271,8 @@
/* iPad 2 and up are supported */
case 2:
/*
- * iPad 2 [A5]: iPad2,1, iPad2,2, iPad2,3,
- * iPad2,4 iPad mini [A5]: iPad2,5, iPad2,6,
- * iPad2,7
+ * iPad 2 [A5]: iPad2,1, iPad2,2, iPad2,3, iPad2,4
+ * iPad mini [A5]: iPad2,5, iPad2,6, iPad2,7
*/
chip_model = major + 3;
break;
@@ -287,10 +286,9 @@
break;
case 4:
/*
- * iPad Air [A7]: iPad4,1, iPad4,2,
- * iPad4,3 iPad mini Retina [A7]: iPad4,4,
- * iPad4,5, iPad4,6 iPad mini 3 [A7]:
- * iPad4,7, iPad4,8, iPad4,9
+ * iPad Air [A7]: iPad4,1, iPad4,2, iPad4,3
+ * iPad mini Retina [A7]: iPad4,4, iPad4,5, iPad4,6
+ * iPad mini 3 [A7]: iPad4,7, iPad4,8, iPad4,9
*/
chip_model = major + 3;
break;
@@ -316,28 +314,135 @@
* iPad Pro 12.9" [A10X]: iPad7,1, iPad7,2
* iPad Pro 10.5" [A10X]: iPad7,3, iPad7,4
* iPad 6th Gen [A10]: iPad7,5, iPad7,6
+ * iPad 7th Gen [A10]: iPad7,11, iPad7,12
*/
chip_model = major + 3;
suffix = minor <= 4 ? 'X' : '\0';
break;
+ case 8:
+ /*
+ * iPad Pro 11" [A12X]: iPad8,1, iPad8,2, iPad8,3, iPad8,4
+ * iPad Pro 12.9" [A12X]: iPad8,5, iPad8,6, iPad8,7, iPad8,8
+ * iPad Pro 11" 2nd [A12Z]: iPad8,9, iPad8,10
+ * iPad Pro 12.9" 4th [A12Z]: iPad8,11, iPad8,12
+ */
+ chip_model = 12;
+ suffix = minor <= 8 ? 'X' : 'Z';
+ break;
+ case 11:
+ /*
+ * iPad mini 5th Gen [A12]: iPad11,1, iPad11,2
+ * iPad Air 3rd Gen [A12]: iPad11,3, iPad11,4
+ * iPad 8th Gen [A12]: iPad11,6, iPad11,7
+ */
+ chip_model = 12;
+ break;
+ case 12:
+ /*
+ * iPad 9th Gen [A13]: iPad12,1, iPad12,2
+ */
+ chip_model = 13;
+ break;
+ case 13:
+ /*
+ * iPad Air 4th Gen [A14]: iPad13,1, iPad13,2
+ * iPad Pro 11" 3rd [M1]: iPad13,4, iPad13,5, iPad13,6, iPad13,7
+ * iPad Pro 12.9" 5th [M1]: iPad13,8, iPad13,9, iPad13,10, iPad13,11
+ * iPad Air 5th Gen [M1]: iPad13,16, iPad13,17
+ * iPad 10th Gen [A14]: iPad13,18, iPad13,19
+ */
+ if (minor == 1 || minor == 2 || minor == 18 || minor == 19) {
+ chip_model = 14;
+ } else {
+ snprintf(package_name, CPUINFO_PACKAGE_NAME_MAX, "Apple M1");
+ return true;
+ }
+ break;
+ case 14:
+ /*
+ * iPad mini 6th Gen [A15]: iPad14,1, iPad14,2
+ * iPad Pro 11" 4th [M2]: iPad14,3, iPad14,4
+ * iPad Pro 12.9" 6th [M2]: iPad14,5, iPad14,6
+ * iPad Air 11" M2 [M2]: iPad14,8, iPad14,9
+ * iPad Air 13" M2 [M2]: iPad14,10, iPad14,11
+ */
+ if (minor == 1 || minor == 2) {
+ chip_model = 15;
+ } else {
+ snprintf(package_name, CPUINFO_PACKAGE_NAME_MAX, "Apple M2");
+ return true;
+ }
+ break;
+ case 16:
+ /*
+ * iPad mini 7th Gen [A17]: iPad16,1, iPad16,2
+ * iPad Pro 11" M4 [M4]: iPad16,3, iPad16,4
+ * iPad Pro 13" M4 [M4]: iPad16,5, iPad16,6
+ */
+ if (minor == 1 || minor == 2) {
+ chip_model = 17;
+ } else {
+ snprintf(package_name, CPUINFO_PACKAGE_NAME_MAX, "Apple M4");
+ return true;
+ }
+ break;
default:
cpuinfo_log_info("unknown iPad: %s", machine_name);
break;
}
} else if (strcmp(name, "iPod") == 0) {
switch (major) {
+ case 4:
+ /* iPod touch (4th Gen) [A4]: iPod4,1 */
+ chip_model = 4;
+ break;
case 5:
+ /* iPod touch (5th Gen) [A5]: iPod5,1 */
chip_model = 5;
break;
- /* iPod touch (5th Gen) [A5]: iPod5,1 */
case 7:
/* iPod touch (6th Gen, 2015) [A8]: iPod7,1 */
chip_model = 8;
break;
+ case 9:
+ /* iPod touch (7th Gen, 2019) [A10]: iPod9,1 */
+ chip_model = 10;
+ break;
default:
cpuinfo_log_info("unknown iPod: %s", machine_name);
break;
}
+ } else if (strcmp(name, "AppleTV") == 0) {
+ switch (major) {
+ case 2:
+ /* Apple TV 2nd Gen [A4]: AppleTV2,1 */
+ chip_model = 4;
+ break;
+ case 3:
+ /* Apple TV 3rd Gen [A5]: AppleTV3,1, AppleTV3,2 */
+ chip_model = 5;
+ break;
+ case 5:
+ /* Apple TV HD [A8]: AppleTV5,3 */
+ chip_model = 8;
+ break;
+ case 6:
+ /* Apple TV 4K 1st Gen [A10X]: AppleTV6,2 */
+ chip_model = 10;
+ suffix = 'X';
+ break;
+ case 11:
+ /* Apple TV 4K 2nd Gen [A12]: AppleTV11,1 */
+ chip_model = 12;
+ break;
+ case 14:
+ /* Apple TV 4K 3rd Gen [A15]: AppleTV14,1 */
+ chip_model = 15;
+ break;
+ default:
+ cpuinfo_log_info("unknown AppleTV: %s", machine_name);
+ break;
+ }
} else {
cpuinfo_log_info("unknown device: %s", machine_name);
}