Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F157177077
D56405.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
82 KB
Referenced Files
None
Subscribers
None
D56405.diff
View Options
diff --git a/sys/dev/asmc/asmc.c b/sys/dev/asmc/asmc.c
--- a/sys/dev/asmc/asmc.c
+++ b/sys/dev/asmc/asmc.c
@@ -98,13 +98,15 @@
static int asmc_sms_intrfast(void *arg);
static void asmc_sms_printintr(device_t dev, uint8_t);
static void asmc_sms_task(void *arg, int pending);
+static void asmc_sms_init(device_t dev);
+static void asmc_detect_capabilities(device_t dev);
#ifdef ASMC_DEBUG
void asmc_dumpall(device_t);
static int asmc_key_dump(device_t, int);
#endif
/*
- * Model functions.
+ * Sysctl handlers.
*/
static int asmc_mb_sysctl_fanid(SYSCTL_HANDLER_ARGS);
static int asmc_mb_sysctl_fanspeed(SYSCTL_HANDLER_ARGS);
@@ -138,474 +140,220 @@
static int asmc_sensor_sysctl(SYSCTL_HANDLER_ARGS);
static int asmc_detect_sensors(device_t);
static int asmc_key_dump_by_index(device_t, int, char *, char *, uint8_t *);
+static int asmc_key_search(device_t, const char *, unsigned int *);
+static const char *asmc_temp_desc(const char *key);
-struct asmc_model {
- const char *smc_model; /* smbios.system.product env var. */
- const char *smc_desc; /* driver description */
-
- /* Helper functions */
- int (*smc_sms_x)(SYSCTL_HANDLER_ARGS);
- int (*smc_sms_y)(SYSCTL_HANDLER_ARGS);
- int (*smc_sms_z)(SYSCTL_HANDLER_ARGS);
- int (*smc_fan_id)(SYSCTL_HANDLER_ARGS);
- int (*smc_fan_speed)(SYSCTL_HANDLER_ARGS);
- int (*smc_fan_safespeed)(SYSCTL_HANDLER_ARGS);
- int (*smc_fan_minspeed)(SYSCTL_HANDLER_ARGS);
- int (*smc_fan_maxspeed)(SYSCTL_HANDLER_ARGS);
- int (*smc_fan_targetspeed)(SYSCTL_HANDLER_ARGS);
- int (*smc_light_left)(SYSCTL_HANDLER_ARGS);
- int (*smc_light_right)(SYSCTL_HANDLER_ARGS);
- int (*smc_light_control)(SYSCTL_HANDLER_ARGS);
-
- const char *smc_temps[ASMC_TEMP_MAX];
- const char *smc_tempnames[ASMC_TEMP_MAX];
- const char *smc_tempdescs[ASMC_TEMP_MAX];
+/*
+ * SMC temperature key descriptions.
+ * These are universal across all Intel Apple hardware.
+ */
+static const struct {
+ const char *key;
+ const char *desc;
+} asmc_temp_descs[] = {
+ /* Ambient / airflow */
+ { "TA0P", "Ambient" },
+ { "TA0S", "PCIe Slot 1 Ambient" },
+ { "TA0p", "Ambient Air" },
+ { "TA1P", "Ambient 2" },
+ { "TA1S", "PCIe Slot 1 PCB" },
+ { "TA1p", "Ambient Air 2" },
+ { "TA2P", "Ambient 3" },
+ { "TA2S", "PCIe Slot 2 Ambient" },
+ { "TA3S", "PCIe Slot 2 PCB" },
+ { "TA0V", "Ambient" },
+ { "TALP", "Ambient Light Proximity" },
+ { "TaLC", "Airflow Left" },
+ { "TaRC", "Airflow Right" },
+ { "Ta0P", "Airflow Proximity" },
+ /* Battery / enclosure */
+ { "TB0T", "Enclosure Bottom" },
+ { "TB1T", "Battery 1" },
+ { "TB2T", "Battery 2" },
+ { "TB3T", "Battery 3" },
+ { "TBXT", "Battery" },
+ { "Tb0P", "BLC Proximity" },
+ /* CPU */
+ { "TC0C", "CPU Core 1" },
+ { "TC0D", "CPU Die" },
+ { "TC0E", "CPU 1" },
+ { "TC0F", "CPU 2" },
+ { "TC0G", "CPU Package GPU" },
+ { "TC0H", "CPU Heatsink" },
+ { "TC0h", "CPU Heatsink" },
+ { "TC0J", "CPU" },
+ { "TC0P", "CPU Proximity" },
+ { "TC0c", "CPU Core 1 PECI" },
+ { "TC0d", "CPU Die PECI" },
+ { "TC0p", "CPU Proximity" },
+ { "TC1C", "CPU Core 2" },
+ { "TC1c", "CPU Core 2 PECI" },
+ { "TC1P", "CPU Proximity 2" },
+ { "TC2C", "CPU Core 3" },
+ { "TC2P", "CPU Proximity 3" },
+ { "TC2c", "CPU Core 3 PECI" },
+ { "TC3C", "CPU Core 4" },
+ { "TC3P", "CPU Proximity 4" },
+ { "TC3c", "CPU Core 4 PECI" },
+ { "TC4C", "CPU Core 5" },
+ { "TC5C", "CPU Core 6" },
+ { "TC6C", "CPU Core 7" },
+ { "TC7C", "CPU Core 8" },
+ { "TC8C", "CPU Core 9" },
+ { "TCGC", "PECI GPU" },
+ { "TCGc", "PECI GPU" },
+ { "TCHP", "Charger Proximity" },
+ { "TCSA", "PECI SA" },
+ { "TCSC", "PECI SA" },
+ { "TCSc", "PECI SA" },
+ { "TCTD", "CPU DTS" },
+ { "TCXC", "PECI CPU" },
+ { "TCXc", "PECI CPU" },
+ { "TCPG", "CPU Package GPU" },
+ { "TCXR", "CPU PECI DTS" },
+ /* CPU dual-socket (Mac Pro) */
+ { "TCAG", "CPU A Package" },
+ { "TCAH", "CPU A Heatsink" },
+ { "TCBG", "CPU B Package" },
+ { "TCBH", "CPU B Heatsink" },
+ /* GPU */
+ { "TG0C", "GPU Core" },
+ { "TG0D", "GPU Diode" },
+ { "TG0H", "GPU Heatsink" },
+ { "TG0M", "GPU Memory" },
+ { "TG0P", "GPU Proximity" },
+ { "TG0T", "GPU Diode" },
+ { "TG0V", "GPU" },
+ { "TG0d", "GPU Die" },
+ { "TG0h", "GPU Heatsink" },
+ { "TG0p", "GPU Proximity" },
+ { "TGTV", "GPU" },
+ { "TG1D", "GPU 2 Diode" },
+ { "TG1H", "GPU 2 Heatsink" },
+ { "TG1P", "GPU 2 Proximity" },
+ { "TG1d", "GPU 2 Die" },
+ { "TGVP", "GPU Memory Proximity" },
+ /* Storage */
+ { "TH0A", "SSD A" },
+ { "TH0B", "SSD B" },
+ { "TH0C", "SSD C" },
+ { "TH0F", "SSD" },
+ { "TH0O", "HDD" },
+ { "TH0P", "HDD Proximity" },
+ { "TH0R", "SSD" },
+ { "TH0V", "SSD" },
+ { "TH0a", "SSD A" },
+ { "TH0b", "SSD B" },
+ { "TH0c", "SSD C" },
+ { "TH1O", "HDD 2" },
+ { "TH1P", "HDD Bay 2" },
+ { "TH2P", "HDD Bay 3" },
+ { "TH3P", "HDD Bay 4" },
+ { "Th0H", "Heatpipe 1" },
+ { "Th0N", "SSD" },
+ { "Th1H", "Heatpipe 2" },
+ { "Th2H", "Heatpipe 3" },
+ /* Thunderbolt */
+ { "THSP", "Thunderbolt Proximity" },
+ { "TI0P", "Thunderbolt 1" },
+ { "TI0p", "Thunderbolt 1" },
+ { "TI1P", "Thunderbolt 2" },
+ { "TI1p", "Thunderbolt 2" },
+ { "TTLD", "Thunderbolt Left" },
+ { "TTRD", "Thunderbolt Right" },
+ { "Te0T", "Thunderbolt Diode" },
+ { "Te0t", "Thunderbolt Diode" },
+ /* LCD */
+ { "TL0P", "LCD Proximity" },
+ { "TL0V", "LCD" },
+ { "TL0p", "LCD Proximity" },
+ { "TL1P", "LCD Panel 1" },
+ { "TL1V", "LCD 1" },
+ { "TL1p", "LCD Panel 1" },
+ { "TL1v", "LCD 1" },
+ { "TL2V", "LCD 2" },
+ { "TLAV", "LCD" },
+ { "TLBV", "LCD" },
+ { "TLCV", "LCD" },
+ /* Memory */
+ { "TM0P", "Memory Proximity" },
+ { "TM0S", "Memory Slot 1" },
+ { "TM0p", "Memory Proximity" },
+ { "TM1P", "Memory Riser A 2" },
+ { "TM1S", "Memory Slot 2" },
+ { "Tm0P", "Memory Proximity" },
+ { "Tm0p", "Memory Proximity" },
+ { "Tm1P", "Memory Proximity 2" },
+ { "TMBS", "Memory Bank" },
+ { "TMCD", "Memory DIMM" },
+ /* Northbridge / MCH */
+ { "TN0C", "Northbridge Core" },
+ { "TN0D", "Northbridge Diode" },
+ { "TN0H", "MCH Heatsink" },
+ { "TN0P", "Northbridge Proximity" },
+ { "TN1D", "MCH Die 2" },
+ { "TN1P", "Northbridge Proximity 2" },
+ /* PCH */
+ { "TP0P", "PCH Proximity" },
+ { "TP0p", "PCH Proximity" },
+ { "TPCD", "PCH Die" },
+ { "TPCd", "PCH Die" },
+ /* Optical drive */
+ { "TO0P", "Optical Drive" },
+ { "TO0p", "Optical Drive" },
+ /* Power supply */
+ { "Tp0C", "Power Supply" },
+ { "Tp0P", "Power Supply Proximity" },
+ { "Tp1C", "Power Supply 2" },
+ { "Tp1P", "Power Supply Component" },
+ { "Tp1p", "Power Supply Component" },
+ { "Tp2P", "Power Supply 2" },
+ { "Tp2h", "Power Supply 2" },
+ { "Tp2H", "Power Supply 2" },
+ { "Tp3P", "Power Supply 3 Inlet" },
+ { "Tp3h", "Power Supply 3" },
+ { "Tp3H", "Power Supply 3" },
+ { "Tp4P", "Power Supply 4" },
+ { "Tp5P", "Power Supply 5" },
+ /* Palm rest / trackpad */
+ { "Ts0P", "Palm Rest" },
+ { "Ts0S", "Memory Proximity" },
+ { "Ts1P", "Palm Rest 2" },
+ { "Ts1S", "Palm Rest 2" },
+ /* Wireless */
+ { "TW0P", "Wireless Proximity" },
+ { "TW0p", "Wireless Proximity" },
+ { "TBLR", "Bluetooth" },
+ /* Camera */
+ { "TS2P", "Camera Proximity" },
+ { "TS2V", "Camera" },
+ { "TS2p", "Camera Proximity" },
+ /* Expansion */
+ { "TS0C", "Expansion Slots" },
+ { "TS0P", "Expansion Proximity" },
+ { "TS0V", "Expansion" },
+ { "TS0p", "Expansion Proximity" },
+ /* Air vent */
+ { "TV0P", "Air Vent" },
+ /* VRM */
+ { "Tv0S", "VRM 1" },
+ { "Tv1S", "VRM 2" },
+ /* Misc */
+ { "TTF0", "Fan" },
+ { "TMLB", "Logic Board" },
};
-static const struct asmc_model *asmc_match(device_t dev);
-
-#define ASMC_SMS_FUNCS \
- .smc_sms_x = asmc_mb_sysctl_sms_x, \
- .smc_sms_y = asmc_mb_sysctl_sms_y, \
- .smc_sms_z = asmc_mb_sysctl_sms_z
-
-#define ASMC_SMS_FUNCS_DISABLED \
- .smc_sms_x = NULL, \
- .smc_sms_y = NULL, \
- .smc_sms_z = NULL
-
-#define ASMC_FAN_FUNCS \
- .smc_fan_id = asmc_mb_sysctl_fanid, \
- .smc_fan_speed = asmc_mb_sysctl_fanspeed, \
- .smc_fan_safespeed = asmc_mb_sysctl_fansafespeed, \
- .smc_fan_minspeed = asmc_mb_sysctl_fanminspeed, \
- .smc_fan_maxspeed = asmc_mb_sysctl_fanmaxspeed, \
- .smc_fan_targetspeed = asmc_mb_sysctl_fantargetspeed
-
-#define ASMC_FAN_FUNCS2 \
- .smc_fan_id = asmc_mb_sysctl_fanid, \
- .smc_fan_speed = asmc_mb_sysctl_fanspeed, \
- .smc_fan_safespeed = NULL, \
- .smc_fan_minspeed = asmc_mb_sysctl_fanminspeed, \
- .smc_fan_maxspeed = asmc_mb_sysctl_fanmaxspeed, \
- .smc_fan_targetspeed = asmc_mb_sysctl_fantargetspeed
-
-#define ASMC_LIGHT_FUNCS \
- .smc_light_left = asmc_mbp_sysctl_light_left, \
- .smc_light_right = asmc_mbp_sysctl_light_right, \
- .smc_light_control = asmc_mbp_sysctl_light_control
-
-#define ASMC_LIGHT_FUNCS_10BYTE \
- .smc_light_left = asmc_mbp_sysctl_light_left_10byte, \
- .smc_light_right = NULL, \
- .smc_light_control = asmc_mbp_sysctl_light_control
-
-#define ASMC_LIGHT_FUNCS_DISABLED \
- .smc_light_left = NULL, \
- .smc_light_right = NULL, \
- .smc_light_control = NULL
-
-#define ASMC_TEMPS_FUNCS_DISABLED \
- .smc_temps = {}, \
- .smc_tempnames = {}, \
- .smc_tempdescs = {} \
-
-static const struct asmc_model asmc_models[] = {
- {
- "MacBook1,1", "Apple SMC MacBook Core Duo",
- ASMC_SMS_FUNCS, ASMC_FAN_FUNCS, ASMC_LIGHT_FUNCS_DISABLED,
- ASMC_MB_TEMPS, ASMC_MB_TEMPNAMES, ASMC_MB_TEMPDESCS
- },
-
- {
- "MacBook2,1", "Apple SMC MacBook Core 2 Duo",
- ASMC_SMS_FUNCS, ASMC_FAN_FUNCS, ASMC_LIGHT_FUNCS_DISABLED,
- ASMC_MB_TEMPS, ASMC_MB_TEMPNAMES, ASMC_MB_TEMPDESCS
- },
-
- {
- "MacBook3,1", "Apple SMC MacBook Core 2 Duo",
- ASMC_SMS_FUNCS, ASMC_FAN_FUNCS, ASMC_LIGHT_FUNCS_DISABLED,
- ASMC_MB31_TEMPS, ASMC_MB31_TEMPNAMES, ASMC_MB31_TEMPDESCS
- },
-
- {
- "MacBook7,1", "Apple SMC MacBook Core 2 Duo (mid 2010)",
- ASMC_SMS_FUNCS, ASMC_FAN_FUNCS2, ASMC_LIGHT_FUNCS_DISABLED,
- ASMC_MB71_TEMPS, ASMC_MB71_TEMPNAMES, ASMC_MB71_TEMPDESCS
- },
-
- {
- "MacBookPro1,1", "Apple SMC MacBook Pro Core Duo (15-inch)",
- ASMC_SMS_FUNCS, ASMC_FAN_FUNCS, ASMC_LIGHT_FUNCS,
- ASMC_MBP_TEMPS, ASMC_MBP_TEMPNAMES, ASMC_MBP_TEMPDESCS
- },
-
- {
- "MacBookPro1,2", "Apple SMC MacBook Pro Core Duo (17-inch)",
- ASMC_SMS_FUNCS, ASMC_FAN_FUNCS, ASMC_LIGHT_FUNCS,
- ASMC_MBP_TEMPS, ASMC_MBP_TEMPNAMES, ASMC_MBP_TEMPDESCS
- },
-
- {
- "MacBookPro2,1", "Apple SMC MacBook Pro Core 2 Duo (17-inch)",
- ASMC_SMS_FUNCS, ASMC_FAN_FUNCS, ASMC_LIGHT_FUNCS,
- ASMC_MBP_TEMPS, ASMC_MBP_TEMPNAMES, ASMC_MBP_TEMPDESCS
- },
-
- {
- "MacBookPro2,2", "Apple SMC MacBook Pro Core 2 Duo (15-inch)",
- ASMC_SMS_FUNCS, ASMC_FAN_FUNCS, ASMC_LIGHT_FUNCS,
- ASMC_MBP_TEMPS, ASMC_MBP_TEMPNAMES, ASMC_MBP_TEMPDESCS
- },
-
- {
- "MacBookPro3,1", "Apple SMC MacBook Pro Core 2 Duo (15-inch LED)",
- ASMC_SMS_FUNCS, ASMC_FAN_FUNCS, ASMC_LIGHT_FUNCS,
- ASMC_MBP_TEMPS, ASMC_MBP_TEMPNAMES, ASMC_MBP_TEMPDESCS
- },
-
- {
- "MacBookPro3,2", "Apple SMC MacBook Pro Core 2 Duo (17-inch HD)",
- ASMC_SMS_FUNCS, ASMC_FAN_FUNCS, ASMC_LIGHT_FUNCS,
- ASMC_MBP_TEMPS, ASMC_MBP_TEMPNAMES, ASMC_MBP_TEMPDESCS
- },
-
- {
- "MacBookPro4,1", "Apple SMC MacBook Pro Core 2 Duo (Penryn)",
- ASMC_SMS_FUNCS, ASMC_FAN_FUNCS, ASMC_LIGHT_FUNCS,
- ASMC_MBP4_TEMPS, ASMC_MBP4_TEMPNAMES, ASMC_MBP4_TEMPDESCS
- },
-
- {
- "MacBookPro5,1", "Apple SMC MacBook Pro Core 2 Duo (2008/2009)",
- ASMC_SMS_FUNCS, ASMC_FAN_FUNCS, ASMC_LIGHT_FUNCS,
- ASMC_MBP51_TEMPS, ASMC_MBP51_TEMPNAMES, ASMC_MBP51_TEMPDESCS
- },
-
- {
- "MacBookPro5,5", "Apple SMC MacBook Pro Core 2 Duo (Mid 2009)",
- ASMC_SMS_FUNCS, ASMC_FAN_FUNCS2, ASMC_LIGHT_FUNCS,
- ASMC_MBP55_TEMPS, ASMC_MBP55_TEMPNAMES, ASMC_MBP55_TEMPDESCS
- },
-
- {
- "MacBookPro6,2", "Apple SMC MacBook Pro (Mid 2010, 15-inch)",
- ASMC_SMS_FUNCS, ASMC_FAN_FUNCS, ASMC_LIGHT_FUNCS,
- ASMC_MBP62_TEMPS, ASMC_MBP62_TEMPNAMES, ASMC_MBP62_TEMPDESCS
- },
-
- {
- "MacBookPro8,1", "Apple SMC MacBook Pro (early 2011, 13-inch)",
- ASMC_SMS_FUNCS_DISABLED, ASMC_FAN_FUNCS2, ASMC_LIGHT_FUNCS,
- ASMC_MBP81_TEMPS, ASMC_MBP81_TEMPNAMES, ASMC_MBP81_TEMPDESCS
- },
-
- {
- "MacBookPro8,2", "Apple SMC MacBook Pro (early 2011)",
- ASMC_SMS_FUNCS, ASMC_FAN_FUNCS, ASMC_LIGHT_FUNCS,
- ASMC_MBP82_TEMPS, ASMC_MBP82_TEMPNAMES, ASMC_MBP82_TEMPDESCS
- },
-
- {
- "MacBookPro8,3", "Apple SMC MacBook Pro (early 2011, 17-inch)",
- ASMC_SMS_FUNCS, ASMC_FAN_FUNCS2, ASMC_LIGHT_FUNCS,
- ASMC_MBP83_TEMPS, ASMC_MBP83_TEMPNAMES, ASMC_MBP83_TEMPDESCS
- },
-
- {
- "MacBookPro9,1", "Apple SMC MacBook Pro (mid 2012, 15-inch)",
- ASMC_SMS_FUNCS_DISABLED, ASMC_FAN_FUNCS, ASMC_LIGHT_FUNCS,
- ASMC_MBP91_TEMPS, ASMC_MBP91_TEMPNAMES, ASMC_MBP91_TEMPDESCS
- },
-
- {
- "MacBookPro9,2", "Apple SMC MacBook Pro (mid 2012, 13-inch)",
- ASMC_SMS_FUNCS_DISABLED, ASMC_FAN_FUNCS, ASMC_LIGHT_FUNCS,
- ASMC_MBP92_TEMPS, ASMC_MBP92_TEMPNAMES, ASMC_MBP92_TEMPDESCS
- },
-
- {
- "MacBookPro11,2", "Apple SMC MacBook Pro Retina Core i7 (2013/2014)",
- ASMC_SMS_FUNCS_DISABLED, ASMC_FAN_FUNCS2, ASMC_LIGHT_FUNCS,
- ASMC_MBP112_TEMPS, ASMC_MBP112_TEMPNAMES, ASMC_MBP112_TEMPDESCS
- },
-
- {
- "MacBookPro11,3", "Apple SMC MacBook Pro Retina Core i7 (2013/2014)",
- ASMC_SMS_FUNCS, ASMC_FAN_FUNCS, ASMC_LIGHT_FUNCS,
- ASMC_MBP113_TEMPS, ASMC_MBP113_TEMPNAMES, ASMC_MBP113_TEMPDESCS
- },
-
- {
- "MacBookPro11,4", "Apple SMC MacBook Pro Retina Core i7 (mid 2015, 15-inch)",
- ASMC_SMS_FUNCS_DISABLED, ASMC_FAN_FUNCS2, ASMC_LIGHT_FUNCS,
- ASMC_MBP114_TEMPS, ASMC_MBP114_TEMPNAMES, ASMC_MBP114_TEMPDESCS
- },
-
- {
- "MacBookPro11,5",
- "Apple SMC MacBook Pro Retina Core i7 (mid 2015, 15-inch, AMD GPU)",
- ASMC_SMS_FUNCS_DISABLED, ASMC_FAN_FUNCS2, ASMC_LIGHT_FUNCS,
- ASMC_MBP115_TEMPS, ASMC_MBP115_TEMPNAMES, ASMC_MBP115_TEMPDESCS
- },
-
- {
- "MacBookPro13,1", "Apple SMC MacBook Pro Retina Core i5 (late 2016, 13-inch)",
- ASMC_SMS_FUNCS_DISABLED, ASMC_FAN_FUNCS2, ASMC_LIGHT_FUNCS,
- ASMC_MBP131_TEMPS, ASMC_MBP131_TEMPNAMES, ASMC_MBP131_TEMPDESCS
- },
-
- /* The Mac Mini has no SMS */
- {
- "Macmini1,1", "Apple SMC Mac Mini",
- ASMC_SMS_FUNCS_DISABLED,
- ASMC_FAN_FUNCS,
- ASMC_LIGHT_FUNCS_DISABLED,
- ASMC_MM_TEMPS, ASMC_MM_TEMPNAMES, ASMC_MM_TEMPDESCS
- },
-
- /* The Mac Mini 2,1 has no SMS */
- {
- "Macmini2,1", "Apple SMC Mac Mini 2,1",
- ASMC_SMS_FUNCS_DISABLED,
- ASMC_FAN_FUNCS,
- ASMC_LIGHT_FUNCS_DISABLED,
- ASMC_MM21_TEMPS, ASMC_MM21_TEMPNAMES, ASMC_MM21_TEMPDESCS
- },
-
- /* The Mac Mini 3,1 has no SMS */
- {
- "Macmini3,1", "Apple SMC Mac Mini 3,1",
- ASMC_SMS_FUNCS_DISABLED,
- ASMC_FAN_FUNCS,
- ASMC_LIGHT_FUNCS_DISABLED,
- ASMC_MM31_TEMPS, ASMC_MM31_TEMPNAMES, ASMC_MM31_TEMPDESCS
- },
-
- /* The Mac Mini 4,1 (Mid-2010) has no SMS */
- {
- "Macmini4,1", "Apple SMC Mac mini 4,1 (Mid-2010)",
- ASMC_SMS_FUNCS_DISABLED,
- ASMC_FAN_FUNCS2,
- ASMC_LIGHT_FUNCS_DISABLED,
- ASMC_MM41_TEMPS, ASMC_MM41_TEMPNAMES, ASMC_MM41_TEMPDESCS
- },
-
- /* The Mac Mini 5,1 has no SMS */
- /* - same sensors as Mac Mini 5,2 */
- {
- "Macmini5,1", "Apple SMC Mac Mini 5,1",
- ASMC_SMS_FUNCS_DISABLED,
- ASMC_FAN_FUNCS2,
- ASMC_LIGHT_FUNCS_DISABLED,
- ASMC_MM52_TEMPS, ASMC_MM52_TEMPNAMES, ASMC_MM52_TEMPDESCS
- },
-
- /* The Mac Mini 5,2 has no SMS */
- {
- "Macmini5,2", "Apple SMC Mac Mini 5,2",
- ASMC_SMS_FUNCS_DISABLED,
- ASMC_FAN_FUNCS2,
- ASMC_LIGHT_FUNCS_DISABLED,
- ASMC_MM52_TEMPS, ASMC_MM52_TEMPNAMES, ASMC_MM52_TEMPDESCS
- },
-
- /* The Mac Mini 5,3 has no SMS */
- /* - same sensors as Mac Mini 5,2 */
- {
- "Macmini5,3", "Apple SMC Mac Mini 5,3",
- ASMC_SMS_FUNCS_DISABLED,
- ASMC_FAN_FUNCS2,
- ASMC_LIGHT_FUNCS_DISABLED,
- ASMC_MM52_TEMPS, ASMC_MM52_TEMPNAMES, ASMC_MM52_TEMPDESCS
- },
-
- /* The Mac Mini 6,1 has no SMS */
- {
- "Macmini6,1", "Apple SMC Mac Mini 6,1",
- ASMC_SMS_FUNCS_DISABLED,
- ASMC_FAN_FUNCS2,
- ASMC_LIGHT_FUNCS_DISABLED,
- ASMC_MM61_TEMPS, ASMC_MM61_TEMPNAMES, ASMC_MM61_TEMPDESCS
- },
-
- /* The Mac Mini 6,2 has no SMS */
- {
- "Macmini6,2", "Apple SMC Mac Mini 6,2",
- ASMC_SMS_FUNCS_DISABLED,
- ASMC_FAN_FUNCS2,
- ASMC_LIGHT_FUNCS_DISABLED,
- ASMC_MM62_TEMPS, ASMC_MM62_TEMPNAMES, ASMC_MM62_TEMPDESCS
- },
-
- /* The Mac Mini 7,1 has no SMS */
- {
- "Macmini7,1", "Apple SMC Mac Mini 7,1",
- ASMC_SMS_FUNCS_DISABLED,
- ASMC_FAN_FUNCS2,
- ASMC_LIGHT_FUNCS_DISABLED,
- ASMC_MM71_TEMPS, ASMC_MM71_TEMPNAMES, ASMC_MM71_TEMPDESCS
- },
-
- /* Idem for the Mac Pro "Quad Core" (original) */
- {
- "MacPro1,1", "Apple SMC Mac Pro (Quad Core)",
- ASMC_SMS_FUNCS_DISABLED,
- ASMC_FAN_FUNCS,
- ASMC_LIGHT_FUNCS_DISABLED,
- ASMC_MP1_TEMPS, ASMC_MP1_TEMPNAMES, ASMC_MP1_TEMPDESCS
- },
-
- /* Idem for the Mac Pro (Early 2008) */
- {
- "MacPro3,1", "Apple SMC Mac Pro (Early 2008)",
- ASMC_SMS_FUNCS_DISABLED,
- ASMC_FAN_FUNCS,
- ASMC_LIGHT_FUNCS_DISABLED,
- ASMC_MP31_TEMPS, ASMC_MP31_TEMPNAMES, ASMC_MP31_TEMPDESCS
- },
-
- /* Idem for the Mac Pro (8-core) */
- {
- "MacPro2", "Apple SMC Mac Pro (8-core)",
- ASMC_SMS_FUNCS_DISABLED,
- ASMC_FAN_FUNCS,
- ASMC_LIGHT_FUNCS_DISABLED,
- ASMC_MP2_TEMPS, ASMC_MP2_TEMPNAMES, ASMC_MP2_TEMPDESCS
- },
-
- /* Idem for the MacPro 2010*/
- {
- "MacPro5,1", "Apple SMC MacPro (2010)",
- ASMC_SMS_FUNCS_DISABLED,
- ASMC_FAN_FUNCS,
- ASMC_LIGHT_FUNCS_DISABLED,
- ASMC_MP5_TEMPS, ASMC_MP5_TEMPNAMES, ASMC_MP5_TEMPDESCS
- },
-
- /* Idem for the Mac Pro 2013 (cylinder) */
- {
- "MacPro6,1", "Apple SMC Mac Pro (2013)",
- ASMC_SMS_FUNCS_DISABLED,
- ASMC_FAN_FUNCS2,
- ASMC_LIGHT_FUNCS_DISABLED,
- ASMC_MP6_TEMPS, ASMC_MP6_TEMPNAMES, ASMC_MP6_TEMPDESCS
- },
-
- {
- "MacBookAir1,1", "Apple SMC MacBook Air",
- ASMC_SMS_FUNCS, ASMC_FAN_FUNCS, ASMC_LIGHT_FUNCS_DISABLED,
- ASMC_MBA_TEMPS, ASMC_MBA_TEMPNAMES, ASMC_MBA_TEMPDESCS
- },
-
- {
- "MacBookAir3,1", "Apple SMC MacBook Air Core 2 Duo (Late 2010)",
- ASMC_SMS_FUNCS, ASMC_FAN_FUNCS, ASMC_LIGHT_FUNCS_DISABLED,
- ASMC_MBA3_TEMPS, ASMC_MBA3_TEMPNAMES, ASMC_MBA3_TEMPDESCS
- },
-
- {
- "MacBookAir4,1", "Apple SMC Macbook Air 11-inch (Mid 2011)",
- ASMC_SMS_FUNCS_DISABLED,
- ASMC_FAN_FUNCS2,
- ASMC_LIGHT_FUNCS,
- ASMC_MBA4_TEMPS, ASMC_MBA4_TEMPNAMES, ASMC_MBA4_TEMPDESCS
- },
-
- {
- "MacBookAir4,2", "Apple SMC Macbook Air 13-inch (Mid 2011)",
- ASMC_SMS_FUNCS_DISABLED,
- ASMC_FAN_FUNCS2,
- ASMC_LIGHT_FUNCS,
- ASMC_MBA4_TEMPS, ASMC_MBA4_TEMPNAMES, ASMC_MBA4_TEMPDESCS
- },
-
- {
- "MacBookAir5,1", "Apple SMC MacBook Air 11-inch (Mid 2012)",
- ASMC_SMS_FUNCS_DISABLED,
- ASMC_FAN_FUNCS2,
- ASMC_LIGHT_FUNCS,
- ASMC_MBA5_TEMPS, ASMC_MBA5_TEMPNAMES, ASMC_MBA5_TEMPDESCS
- },
-
- {
- "MacBookAir5,2", "Apple SMC MacBook Air 13-inch (Mid 2012)",
- ASMC_SMS_FUNCS_DISABLED,
- ASMC_FAN_FUNCS2,
- ASMC_LIGHT_FUNCS,
- ASMC_MBA5_TEMPS, ASMC_MBA5_TEMPNAMES, ASMC_MBA5_TEMPDESCS
- },
- {
- "MacBookAir6,1", "Apple SMC MacBook Air 11-inch (Early 2013)",
- ASMC_SMS_FUNCS_DISABLED,
- ASMC_FAN_FUNCS2,
- ASMC_LIGHT_FUNCS_10BYTE,
- ASMC_MBA6_TEMPS, ASMC_MBA6_TEMPNAMES, ASMC_MBA6_TEMPDESCS
- },
- {
- "MacBookAir6,2", "Apple SMC MacBook Air 13-inch (Early 2013)",
- ASMC_SMS_FUNCS_DISABLED,
- ASMC_FAN_FUNCS2,
- ASMC_LIGHT_FUNCS_10BYTE,
- ASMC_MBA6_TEMPS, ASMC_MBA6_TEMPNAMES, ASMC_MBA6_TEMPDESCS
- },
- {
- "MacBookAir7,1", "Apple SMC MacBook Air 11-inch (Early 2015)",
- ASMC_SMS_FUNCS_DISABLED,
- ASMC_FAN_FUNCS2,
- ASMC_LIGHT_FUNCS,
- ASMC_MBA7_TEMPS, ASMC_MBA7_TEMPNAMES, ASMC_MBA7_TEMPDESCS
- },
- {
- "MacBookAir7,2", "Apple SMC MacBook Air 13-inch (Early 2015)",
- ASMC_SMS_FUNCS_DISABLED,
- ASMC_FAN_FUNCS2,
- ASMC_LIGHT_FUNCS,
- ASMC_MBA7_TEMPS, ASMC_MBA7_TEMPNAMES, ASMC_MBA7_TEMPDESCS
- }
-};
+static const char *
+asmc_temp_desc(const char *key)
+{
+ unsigned int i;
-static const struct asmc_model asmc_generic_models[] = {
- {
- .smc_model = "MacBookAir",
- .smc_desc = NULL,
- ASMC_SMS_FUNCS_DISABLED,
- ASMC_FAN_FUNCS2,
- ASMC_LIGHT_FUNCS,
- ASMC_TEMPS_FUNCS_DISABLED
- },
- {
- .smc_model = "MacBookPro",
- .smc_desc = NULL,
- ASMC_SMS_FUNCS_DISABLED,
- ASMC_FAN_FUNCS2,
- ASMC_LIGHT_FUNCS,
- ASMC_TEMPS_FUNCS_DISABLED
- },
- {
- .smc_model = "MacPro",
- .smc_desc = NULL,
- ASMC_SMS_FUNCS_DISABLED,
- ASMC_FAN_FUNCS2,
- ASMC_LIGHT_FUNCS_DISABLED,
- ASMC_TEMPS_FUNCS_DISABLED
- },
- {
- .smc_model = "Macmini",
- .smc_desc = NULL,
- ASMC_SMS_FUNCS_DISABLED,
- ASMC_FAN_FUNCS2,
- ASMC_LIGHT_FUNCS_DISABLED,
- ASMC_TEMPS_FUNCS_DISABLED
+ for (i = 0; i < nitems(asmc_temp_descs); i++) {
+ if (strcmp(asmc_temp_descs[i].key, key) == 0)
+ return (asmc_temp_descs[i].desc);
}
-};
-
-#undef ASMC_SMS_FUNCS
-#undef ASMC_SMS_FUNCS_DISABLED
-#undef ASMC_FAN_FUNCS
-#undef ASMC_FAN_FUNCS2
-#undef ASMC_LIGHT_FUNCS
+ return ("Temperature");
+}
/*
* Driver methods.
@@ -651,44 +399,10 @@
MODULE_DEPEND(asmc, acpi, 1, 1, 1);
MODULE_DEPEND(asmc, backlight, 1, 1, 1);
-static const struct asmc_model *
-asmc_match(device_t dev)
-{
- const struct asmc_model *model;
- char *model_name;
- int i;
-
- model = NULL;
-
- model_name = kern_getenv("smbios.system.product");
- if (model_name == NULL)
- goto out;
-
- for (i = 0; i < nitems(asmc_models); i++) {
- if (strncmp(model_name, asmc_models[i].smc_model,
- strlen(model_name)) == 0) {
- model = &asmc_models[i];
- goto out;
- }
- }
- for (i = 0; i < nitems(asmc_generic_models); i++) {
- if (strncmp(model_name, asmc_generic_models[i].smc_model,
- strlen(asmc_generic_models[i].smc_model)) == 0) {
- model = &asmc_generic_models[i];
- goto out;
- }
- }
-
-out:
- freeenv(model_name);
- return (model);
-}
-
static int
asmc_probe(device_t dev)
{
- const struct asmc_model *model;
- const char *device_desc;
+ char *product;
int rv;
if (resource_disabled("asmc", 0))
@@ -696,16 +410,9 @@
rv = ACPI_ID_PROBE(device_get_parent(dev), dev, asmc_ids, NULL);
if (rv > 0)
return (rv);
-
- model = asmc_match(dev);
- if (model == NULL) {
- device_printf(dev, "model not recognized\n");
- return (ENXIO);
- }
- device_desc = model->smc_desc == NULL ?
- model->smc_model : model->smc_desc;
- device_set_desc(dev, device_desc);
-
+ product = kern_getenv("smbios.system.product");
+ device_set_descf(dev, "Apple %s", product ? product : "SMC");
+ freeenv(product);
return (rv);
}
@@ -718,7 +425,6 @@
struct asmc_softc *sc = device_get_softc(dev);
struct sysctl_ctx_list *sysctlctx;
struct sysctl_oid *sysctlnode;
- const struct asmc_model *model;
sc->sc_ioport = bus_alloc_resource_any(dev, SYS_RES_IOPORT,
&sc->sc_rid_port, RF_ACTIVE);
@@ -730,12 +436,20 @@
sysctlctx = device_get_sysctl_ctx(dev);
sysctlnode = device_get_sysctl_tree(dev);
- model = asmc_match(dev);
-
mtx_init(&sc->sc_mtx, "asmc", NULL, MTX_SPIN);
- sc->sc_model = model;
- asmc_init(dev);
+ /* Read SMC revision, key count, fan count */
+ ret = asmc_init(dev);
+ if (ret != 0) {
+ device_printf(dev, "SMC not responding\n");
+ goto err;
+ }
+
+ /* Probe SMC keys to detect capabilities */
+ asmc_detect_capabilities(dev);
+
+ /* Auto-detect and register voltage/current/power/ambient/temp sensors */
+ asmc_detect_sensors(dev);
/*
* dev.asmc.n.fan.* tree.
@@ -756,37 +470,43 @@
SYSCTL_CHILDREN(sc->sc_fan_tree[i]),
OID_AUTO, "id",
CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, dev, j,
- model->smc_fan_id, "I", "Fan ID");
+ asmc_mb_sysctl_fanid, "I", "Fan ID");
SYSCTL_ADD_PROC(sysctlctx,
SYSCTL_CHILDREN(sc->sc_fan_tree[i]),
OID_AUTO, "speed",
CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE, dev, j,
- model->smc_fan_speed, "I", "Fan speed in RPM");
-
- SYSCTL_ADD_PROC(sysctlctx,
- SYSCTL_CHILDREN(sc->sc_fan_tree[i]),
- OID_AUTO, "safespeed",
- CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE, dev, j,
- model->smc_fan_safespeed, "I", "Fan safe speed in RPM");
+ asmc_mb_sysctl_fanspeed, "I", "Fan speed in RPM");
+
+ if (sc->sc_has_safespeed) {
+ SYSCTL_ADD_PROC(sysctlctx,
+ SYSCTL_CHILDREN(sc->sc_fan_tree[i]),
+ OID_AUTO, "safespeed",
+ CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE, dev, j,
+ asmc_mb_sysctl_fansafespeed, "I",
+ "Fan safe speed in RPM");
+ }
SYSCTL_ADD_PROC(sysctlctx,
SYSCTL_CHILDREN(sc->sc_fan_tree[i]),
OID_AUTO, "minspeed",
CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, dev, j,
- model->smc_fan_minspeed, "I", "Fan minimum speed in RPM");
+ asmc_mb_sysctl_fanminspeed, "I",
+ "Fan minimum speed in RPM");
SYSCTL_ADD_PROC(sysctlctx,
SYSCTL_CHILDREN(sc->sc_fan_tree[i]),
OID_AUTO, "maxspeed",
CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, dev, j,
- model->smc_fan_maxspeed, "I", "Fan maximum speed in RPM");
+ asmc_mb_sysctl_fanmaxspeed, "I",
+ "Fan maximum speed in RPM");
SYSCTL_ADD_PROC(sysctlctx,
SYSCTL_CHILDREN(sc->sc_fan_tree[i]),
OID_AUTO, "targetspeed",
CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, dev, j,
- model->smc_fan_targetspeed, "I", "Fan target speed in RPM");
+ asmc_mb_sysctl_fantargetspeed, "I",
+ "Fan target speed in RPM");
SYSCTL_ADD_PROC(sysctlctx,
SYSCTL_CHILDREN(sc->sc_fan_tree[i]),
@@ -803,19 +523,19 @@
SYSCTL_CHILDREN(sysctlnode), OID_AUTO, "temp",
CTLFLAG_RD | CTLFLAG_MPSAFE, 0, "Temperature sensors");
- for (i = 0; model->smc_temps[i]; i++) {
+ for (i = 0; i < sc->sc_temp_count; i++) {
SYSCTL_ADD_PROC(sysctlctx,
SYSCTL_CHILDREN(sc->sc_temp_tree),
- OID_AUTO, model->smc_tempnames[i],
+ OID_AUTO, sc->sc_temp_sensors[i],
CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE, dev, i,
asmc_temp_sysctl, "I",
- model->smc_tempdescs[i]);
+ asmc_temp_desc(sc->sc_temp_sensors[i]));
}
/*
* dev.asmc.n.light
*/
- if (model->smc_light_left) {
+ if (sc->sc_has_light) {
sc->sc_light_tree = SYSCTL_ADD_NODE(sysctlctx,
SYSCTL_CHILDREN(sysctlnode), OID_AUTO, "light",
CTLFLAG_RD | CTLFLAG_MPSAFE, 0,
@@ -825,21 +545,29 @@
SYSCTL_CHILDREN(sc->sc_light_tree),
OID_AUTO, "left",
CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE,
- dev, 0, model->smc_light_left, "I",
- "Keyboard backlight left sensor");
-
- SYSCTL_ADD_PROC(sysctlctx,
- SYSCTL_CHILDREN(sc->sc_light_tree),
- OID_AUTO, "right",
- CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE, dev, 0,
- model->smc_light_right, "I",
- "Keyboard backlight right sensor");
+ dev, 0,
+ sc->sc_light_len == ASMC_LIGHT_LONGLEN ?
+ asmc_mbp_sysctl_light_left_10byte :
+ asmc_mbp_sysctl_light_left,
+ "I", "Keyboard backlight left sensor");
+
+ if (sc->sc_light_len != ASMC_LIGHT_LONGLEN &&
+ asmc_key_getinfo(dev, ASMC_KEY_LIGHTRIGHT,
+ NULL, NULL) == 0) {
+ SYSCTL_ADD_PROC(sysctlctx,
+ SYSCTL_CHILDREN(sc->sc_light_tree),
+ OID_AUTO, "right",
+ CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE,
+ dev, 0,
+ asmc_mbp_sysctl_light_right, "I",
+ "Keyboard backlight right sensor");
+ }
SYSCTL_ADD_PROC(sysctlctx,
SYSCTL_CHILDREN(sc->sc_light_tree),
OID_AUTO, "control",
CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_ANYBODY | CTLFLAG_MPSAFE,
- dev, 0, model->smc_light_control, "I",
+ dev, 0, asmc_mbp_sysctl_light_control, "I",
"Keyboard backlight brightness control");
sc->sc_kbd_bkl = backlight_register("asmc", dev);
@@ -887,9 +615,14 @@
"SMC key type (4 chars)");
#endif
- if (model->smc_sms_x == NULL)
+ if (!sc->sc_has_sms)
goto nosms;
+ /*
+ * Initialize SMS hardware.
+ */
+ asmc_sms_init(dev);
+
/*
* dev.asmc.n.sms tree.
*/
@@ -901,21 +634,21 @@
SYSCTL_CHILDREN(sc->sc_sms_tree),
OID_AUTO, "x",
CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE,
- dev, 0, model->smc_sms_x, "I",
+ dev, 0, asmc_mb_sysctl_sms_x, "I",
"Sudden Motion Sensor X value");
SYSCTL_ADD_PROC(sysctlctx,
SYSCTL_CHILDREN(sc->sc_sms_tree),
OID_AUTO, "y",
CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE,
- dev, 0, model->smc_sms_y, "I",
+ dev, 0, asmc_mb_sysctl_sms_y, "I",
"Sudden Motion Sensor Y value");
SYSCTL_ADD_PROC(sysctlctx,
SYSCTL_CHILDREN(sc->sc_sms_tree),
OID_AUTO, "z",
CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE,
- dev, 0, model->smc_sms_z, "I",
+ dev, 0, asmc_mb_sysctl_sms_z, "I",
"Sudden Motion Sensor Z value");
/*
@@ -970,6 +703,10 @@
if (sc->sc_kbd_bkl != NULL)
backlight_destroy(sc->sc_kbd_bkl);
+ /* Free temperature sensor key arrays */
+ for (int i = 0; i < sc->sc_temp_count; i++)
+ free(sc->sc_temp_sensors[i], M_DEVBUF);
+
/* Free sensor key arrays */
for (int i = 0; i < sc->sc_voltage_count; i++)
free(sc->sc_voltage_sensors[i], M_DEVBUF);
@@ -1036,24 +773,73 @@
}
#endif
+/*
+ * Initialize SMC: read revision, key count, fan count.
+ * SMS initialization is handled separately in asmc_sms_init().
+ */
static int
asmc_init(device_t dev)
{
struct asmc_softc *sc = device_get_softc(dev);
struct sysctl_ctx_list *sysctlctx;
uint8_t buf[6];
- int i, error = 1;
+ int error;
sysctlctx = device_get_sysctl_ctx(dev);
error = asmc_key_read(dev, ASMC_KEY_REV, buf, 6);
if (error != 0)
- goto out_err;
+ goto out;
device_printf(dev, "SMC revision: %x.%x%x%x\n", buf[0], buf[1], buf[2],
ntohs(*(uint16_t *)buf + 4));
- if (sc->sc_model->smc_sms_x == NULL)
- goto nosms;
+ /* Wake-on-LAN convenience sysctl */
+ if (asmc_key_read(dev, ASMC_KEY_AUPO, buf, 1) == 0) {
+ SYSCTL_ADD_PROC(sysctlctx,
+ SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
+ OID_AUTO, "wol",
+ CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE,
+ dev, 0, asmc_wol_sysctl, "I",
+ "Wake-on-LAN enable (0=off, 1=on)");
+ }
+
+ sc->sc_nfan = asmc_fan_count(dev);
+ if (sc->sc_nfan > ASMC_MAXFANS) {
+ device_printf(dev,
+ "more than %d fans were detected. Please report this.\n",
+ ASMC_MAXFANS);
+ sc->sc_nfan = ASMC_MAXFANS;
+ }
+
+ /*
+ * Read and cache the number of SMC keys (32 bit buffer)
+ */
+ if (asmc_key_read(dev, ASMC_NKEYS, buf, 4) == 0) {
+ sc->sc_nkeys = be32dec(buf);
+ if (bootverbose)
+ device_printf(dev, "number of keys: %d\n",
+ sc->sc_nkeys);
+ } else {
+ sc->sc_nkeys = 0;
+ }
+
+out:
+#ifdef ASMC_DEBUG
+ asmc_dumpall(dev);
+#endif
+ return (error);
+}
+
+/*
+ * Initialize the Sudden Motion Sensor hardware.
+ * Called from asmc_attach() after capabilities are detected.
+ */
+static void
+asmc_sms_init(device_t dev)
+{
+ struct asmc_softc *sc = device_get_softc(dev);
+ uint8_t buf[2];
+ int i;
/*
* We are ready to receive interrupts from the SMS.
@@ -1106,9 +892,8 @@
for (i = 0; i < 1000; i++) {
if (asmc_key_read(dev, ASMC_KEY_SMS, buf, 2) == 0 &&
(buf[0] == ASMC_SMS_INIT1 && buf[1] == ASMC_SMS_INIT2)) {
- error = 0;
sc->sc_sms_intr_works = 1;
- goto out;
+ goto done;
}
buf[0] = ASMC_SMS_INIT1;
buf[1] = ASMC_SMS_INIT2;
@@ -1118,50 +903,71 @@
}
device_printf(dev, "WARNING: Sudden Motion Sensor not initialized!\n");
-out:
+done:
asmc_sms_calibrate(dev);
-nosms:
- /* Wake-on-LAN convenience sysctl */
- if (asmc_key_read(dev, ASMC_KEY_AUPO, buf, 1) == 0) {
- SYSCTL_ADD_PROC(sysctlctx,
- SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
- OID_AUTO, "wol",
- CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE,
- dev, 0, asmc_wol_sysctl, "I",
- "Wake-on-LAN enable (0=off, 1=on)");
- }
+}
- sc->sc_nfan = asmc_fan_count(dev);
- if (sc->sc_nfan > ASMC_MAXFANS) {
- device_printf(dev,
- "more than %d fans were detected. Please report this.\n",
- ASMC_MAXFANS);
- sc->sc_nfan = ASMC_MAXFANS;
- }
+/*
+ * Probe SMC keys to detect hardware capabilities.
+ */
+static void
+asmc_detect_capabilities(device_t dev)
+{
+ struct asmc_softc *sc = device_get_softc(dev);
+ uint8_t len;
+ char type[ASMC_TYPELEN + 1];
- /*
- * Read and cache the number of SMC keys (32 bit buffer)
- */
- if (asmc_key_read(dev, ASMC_NKEYS, buf, 4) == 0) {
- sc->sc_nkeys = be32dec(buf);
- if (bootverbose)
- device_printf(dev, "number of keys: %d\n",
- sc->sc_nkeys);
+ /* SMS: require all keys used by asmc_sms_init() */
+ sc->sc_has_sms =
+ (asmc_key_getinfo(dev, ASMC_KEY_SMS,
+ &len, type) == 0 &&
+ asmc_key_getinfo(dev, ASMC_KEY_SMS_X,
+ &len, type) == 0 &&
+ asmc_key_getinfo(dev, ASMC_KEY_SMS_Y,
+ &len, type) == 0 &&
+ asmc_key_getinfo(dev, ASMC_KEY_SMS_Z,
+ &len, type) == 0 &&
+ asmc_key_getinfo(dev, ASMC_KEY_SMS_LOW,
+ &len, type) == 0 &&
+ asmc_key_getinfo(dev, ASMC_KEY_SMS_HIGH,
+ &len, type) == 0 &&
+ asmc_key_getinfo(dev, ASMC_KEY_SMS_LOW_INT,
+ &len, type) == 0 &&
+ asmc_key_getinfo(dev, ASMC_KEY_SMS_HIGH_INT,
+ &len, type) == 0 &&
+ asmc_key_getinfo(dev, ASMC_KEY_SMS_FLAG,
+ &len, type) == 0 &&
+ asmc_key_getinfo(dev, ASMC_KEY_INTOK,
+ &len, type) == 0);
+
+ /* Light sensor: require ALV0 (len 6 or 10) and LKSB */
+ if (asmc_key_getinfo(dev, ASMC_KEY_LIGHTLEFT,
+ &len, type) == 0 &&
+ (len == ASMC_LIGHT_SHORTLEN || len == ASMC_LIGHT_LONGLEN) &&
+ asmc_key_getinfo(dev, ASMC_KEY_LIGHTVALUE,
+ NULL, NULL) == 0) {
+ sc->sc_has_light = 1;
+ sc->sc_light_len = len;
} else {
- sc->sc_nkeys = 0;
+ sc->sc_has_light = 0;
+ sc->sc_light_len = 0;
}
- /*
- * Auto-detect and register voltage/current/power/ambient sensors.
- * Scans SMC keys and creates sysctls for detected sensors.
- */
- asmc_detect_sensors(dev);
+ /* Fan safe speed */
+ sc->sc_has_safespeed =
+ (asmc_key_getinfo(dev, ASMC_KEY_FANSAFESPEED0,
+ &len, type) == 0);
-out_err:
-#ifdef ASMC_DEBUG
- asmc_dumpall(dev);
-#endif
- return (error);
+ /* Ambient light interrupt source */
+ sc->sc_has_alsl =
+ (asmc_key_getinfo(dev, ASMC_KEY_LIGHTSRC,
+ &len, type) == 0);
+
+ if (bootverbose)
+ device_printf(dev,
+ "capabilities: sms=%d light=%d (len=%d) safespeed=%d alsl=%d\n",
+ sc->sc_has_sms, sc->sc_has_light, sc->sc_light_len,
+ sc->sc_has_safespeed, sc->sc_has_alsl);
}
/*
@@ -1692,10 +1498,36 @@
}
/*
- * Detect and register voltage/current/power/ambient sensors.
- * Scans all SMC keys and identifies sensor keys by prefix.
- * Returns 0 on success, -1 on error.
+ * Scan a range of SMC key indices, adding matching sensors.
+ * Only considers 2-byte keys with a supported type.
*/
+static void
+asmc_scan_sensor_range(device_t dev, unsigned int start,
+ unsigned int end, char prefix, int *countp, char **sensors,
+ int maxcount)
+{
+ char key[ASMC_KEYLEN + 1];
+ char type[ASMC_TYPELEN + 1];
+ uint8_t len;
+ unsigned int i;
+ char *sensor_key;
+
+ for (i = start; i < end; i++) {
+ if (asmc_key_dump_by_index(dev, i, key, type, &len))
+ continue;
+ if (key[0] != prefix || len != 2)
+ continue;
+ if (!asmc_sensor_type_supported(type))
+ continue;
+ if (*countp >= maxcount)
+ break;
+ sensor_key = malloc(ASMC_KEYLEN + 1,
+ M_DEVBUF, M_WAITOK);
+ memcpy(sensor_key, key, ASMC_KEYLEN + 1);
+ sensors[(*countp)++] = sensor_key;
+ }
+}
+
static int
asmc_detect_sensors(device_t dev)
{
@@ -1705,71 +1537,88 @@
char key[ASMC_KEYLEN + 1];
char type[ASMC_TYPELEN + 1];
uint8_t len;
- unsigned int nkeys;
- unsigned int i;
+ unsigned int start, end, i;
int error;
char *sensor_key;
- /* Initialize counts */
sc->sc_voltage_count = 0;
sc->sc_current_count = 0;
sc->sc_power_count = 0;
sc->sc_light_count = 0;
+ sc->sc_temp_count = 0;
if (sc->sc_nkeys == 0)
return (0);
- nkeys = sc->sc_nkeys;
-
- /* Scan all keys for voltage/current/power/ambient light sensors */
- for (i = 0; i < nkeys; i++) {
- /* Get key name by index */
- error = asmc_key_dump_by_index(dev, i, key, type, &len);
- if (error != 0)
- continue;
- if (!asmc_sensor_type_supported(type))
- continue;
- /* Voltage sensors (VC*, VD*, VG*, VP*, VI*) */
- if (key[0] == 'V' && (key[1] == 'C' || key[1] == 'D' ||
- key[1] == 'G' || key[1] == 'P' || key[1] == 'I') &&
- len == 2) {
- if (sc->sc_voltage_count >= ASMC_MAX_SENSORS)
+ /*
+ * Temperature sensors: binary search for T..U range,
+ * then filter by type sp78.
+ */
+ error = asmc_key_search(dev, "T\0\0\0", &start);
+ if (error == 0)
+ error = asmc_key_search(dev, "U\0\0\0", &end);
+ if (error == 0) {
+ for (i = start; i < end; i++) {
+ if (asmc_key_dump_by_index(dev, i,
+ key, type, &len))
continue;
- sensor_key = malloc(ASMC_KEYLEN + 1,
- M_DEVBUF, M_WAITOK);
- memcpy(sensor_key, key, ASMC_KEYLEN + 1);
- sc->sc_voltage_sensors[sc->sc_voltage_count++] =
- sensor_key;
- } else if (key[0] == 'I' && (key[1] == 'C' ||
- key[1] == 'D' || key[1] == 'G' || key[1] == 'M' ||
- key[1] == 'N' || key[1] == 'O' || key[1] == 'H' ||
- key[1] == 'P' || key[1] == 'B' || key[1] == 'A' ||
- key[1] == 'L') && len == 2) {
- /* Current sensors */
- if (sc->sc_current_count >= ASMC_MAX_SENSORS)
+ if (len != 2 ||
+ strncmp(type, "sp78", 4) != 0)
continue;
+ if (sc->sc_temp_count >= ASMC_TEMP_MAX)
+ break;
sensor_key = malloc(ASMC_KEYLEN + 1,
M_DEVBUF, M_WAITOK);
memcpy(sensor_key, key, ASMC_KEYLEN + 1);
- sc->sc_current_sensors[sc->sc_current_count++] =
+ sc->sc_temp_sensors[sc->sc_temp_count++] =
sensor_key;
- } else if (key[0] == 'P' && (key[1] == 'C' ||
- key[1] == 'D' || key[1] == 'N' || key[1] == 'S' ||
- key[1] == 'T' || key[1] == 'H' || key[1] == 'F' ||
- key[1] == 'Z' || key[1] == 'z') && len == 2) {
- /* Power sensors */
- if (sc->sc_power_count >= ASMC_MAX_SENSORS)
+ }
+ }
+
+ /* Voltage sensors: V..W range */
+ error = asmc_key_search(dev, "V\0\0\0", &start);
+ if (error == 0)
+ error = asmc_key_search(dev, "W\0\0\0", &end);
+ if (error == 0)
+ asmc_scan_sensor_range(dev, start, end, 'V',
+ &sc->sc_voltage_count, sc->sc_voltage_sensors,
+ ASMC_MAX_SENSORS);
+
+ /* Current sensors: I..J range */
+ error = asmc_key_search(dev, "I\0\0\0", &start);
+ if (error == 0)
+ error = asmc_key_search(dev, "J\0\0\0", &end);
+ if (error == 0)
+ asmc_scan_sensor_range(dev, start, end, 'I',
+ &sc->sc_current_count, sc->sc_current_sensors,
+ ASMC_MAX_SENSORS);
+
+ /* Power sensors: P..Q range */
+ error = asmc_key_search(dev, "P\0\0\0", &start);
+ if (error == 0)
+ error = asmc_key_search(dev, "Q\0\0\0", &end);
+ if (error == 0)
+ asmc_scan_sensor_range(dev, start, end, 'P',
+ &sc->sc_power_count, sc->sc_power_sensors,
+ ASMC_MAX_SENSORS);
+
+ /* Ambient light sensors: AL* in A..B range */
+ error = asmc_key_search(dev, "A\0\0\0", &start);
+ if (error == 0)
+ error = asmc_key_search(dev, "B\0\0\0", &end);
+ if (error == 0) {
+ for (i = start; i < end; i++) {
+ if (asmc_key_dump_by_index(dev, i,
+ key, type, &len))
continue;
- sensor_key = malloc(ASMC_KEYLEN + 1,
- M_DEVBUF, M_WAITOK);
- memcpy(sensor_key, key, ASMC_KEYLEN + 1);
- sc->sc_power_sensors[sc->sc_power_count++] =
- sensor_key;
- } else if (key[0] == 'A' && key[1] == 'L' &&
- (key[2] == 'V' || key[2] == 'S') && len == 2) {
- /* Ambient light sensors */
- if (sc->sc_light_count >= ASMC_MAX_SENSORS)
+ if (key[0] != 'A' || key[1] != 'L' ||
+ (key[2] != 'V' && key[2] != 'S') ||
+ len != 2)
continue;
+ if (!asmc_sensor_type_supported(type))
+ continue;
+ if (sc->sc_light_count >= ASMC_MAX_SENSORS)
+ break;
sensor_key = malloc(ASMC_KEYLEN + 1,
M_DEVBUF, M_WAITOK);
memcpy(sensor_key, key, ASMC_KEYLEN + 1);
@@ -1780,9 +1629,10 @@
if (bootverbose)
device_printf(dev,
- "detected %d voltage, %d current, "
+ "detected %d temp, %d voltage, %d current, "
"%d power, %d light sensors\n",
- sc->sc_voltage_count, sc->sc_current_count,
+ sc->sc_temp_count, sc->sc_voltage_count,
+ sc->sc_current_count,
sc->sc_power_count, sc->sc_light_count);
/* Register sysctls for detected sensors */
@@ -1924,6 +1774,37 @@
return (error);
}
+/*
+ * Binary search for the first key index >= prefix.
+ * SMC keys are sorted, so this finds the lower bound efficiently.
+ */
+static int
+asmc_key_search(device_t dev, const char *prefix, unsigned int *idx)
+{
+ struct asmc_softc *sc = device_get_softc(dev);
+ unsigned int lo, hi, mid;
+ char key[ASMC_KEYLEN + 1];
+ char type[ASMC_TYPELEN + 1];
+ uint8_t len;
+ int error;
+
+ lo = 0;
+ hi = sc->sc_nkeys;
+ while (lo < hi) {
+ mid = lo + (hi - lo) / 2;
+ error = asmc_key_dump_by_index(dev, mid,
+ key, type, &len);
+ if (error != 0)
+ return (error);
+ if (strncmp(key, prefix, ASMC_KEYLEN) < 0)
+ lo = mid + 1;
+ else
+ hi = mid;
+ }
+ *idx = lo;
+ return (0);
+}
+
static int
asmc_key_write(device_t dev, const char *key, uint8_t *buf, uint8_t len)
{
@@ -2204,7 +2085,10 @@
struct asmc_softc *sc = device_get_softc(dev);
int error, val;
- val = asmc_temp_getvalue(dev, sc->sc_model->smc_temps[arg2]);
+ if (arg2 < 0 || arg2 >= sc->sc_temp_count)
+ return (EINVAL);
+
+ val = asmc_temp_getvalue(dev, sc->sc_temp_sensors[arg2]);
error = sysctl_handle_int(oidp, &val, 0, req);
return (error);
@@ -2263,6 +2147,10 @@
sc->sc_sms_intrtype = type;
asmc_sms_printintr(dev, type);
+ /* Don't queue SMS task for ambient light interrupts */
+ if (type == ASMC_ALSL_INT2A && sc->sc_has_alsl)
+ return (FILTER_HANDLED);
+
taskqueue_enqueue(sc->sc_sms_tq, &sc->sc_sms_task);
return (FILTER_HANDLED);
}
@@ -2285,10 +2173,9 @@
case ASMC_ALSL_INT2A:
/*
* This suppresses console and log messages for the ambient
- * light sensor for models known to generate this interrupt.
+ * light sensor interrupt on models that have ALSL.
*/
- if (strcmp(sc->sc_model->smc_model, "MacBookPro5,5") == 0 ||
- strcmp(sc->sc_model->smc_model, "MacBookPro6,2") == 0)
+ if (sc->sc_has_alsl)
break;
/* FALLTHROUGH */
default:
diff --git a/sys/dev/asmc/asmcvar.h b/sys/dev/asmc/asmcvar.h
--- a/sys/dev/asmc/asmcvar.h
+++ b/sys/dev/asmc/asmcvar.h
@@ -33,6 +33,9 @@
#define ASMC_TYPELEN 4 /* SMC type string length */
#define ASMC_MAX_SENSORS 64 /* Max sensors per type */
+/* Maximum number of auto-detected temperature sensors */
+#define ASMC_TEMP_MAX 80
+
struct asmc_softc {
device_t sc_dev;
struct mtx sc_mtx;
@@ -45,7 +48,6 @@
struct sysctl_oid *sc_temp_tree;
struct sysctl_oid *sc_sms_tree;
struct sysctl_oid *sc_light_tree;
- const struct asmc_model *sc_model;
int sc_rid_port;
int sc_rid_irq;
struct resource *sc_ioport;
@@ -74,6 +76,15 @@
int sc_power_count;
char *sc_light_sensors[ASMC_MAX_SENSORS];
int sc_light_count;
+ /* Auto-detected temperature sensors */
+ char *sc_temp_sensors[ASMC_TEMP_MAX];
+ int sc_temp_count;
+ /* Auto-detected capabilities */
+ int sc_has_sms;
+ int sc_has_light;
+ int sc_light_len; /* ASMC_LIGHT_{SHORT,LONG}LEN */
+ int sc_has_safespeed;
+ int sc_has_alsl; /* ALSL interrupt source */
};
/*
@@ -150,9 +161,13 @@
/*
* Keyboard backlight.
*/
-#define ASMC_KEY_LIGHTLEFT "ALV0" /* RO; 6 bytes */
+#define ASMC_LIGHT_SHORTLEN 6 /* ALV0 short format */
+#define ASMC_LIGHT_LONGLEN 10 /* ALV0 long format (10-byte) */
+#define ASMC_KEY_LIGHTLEFT "ALV0" /* RO; 6 or 10 bytes */
#define ASMC_KEY_LIGHTRIGHT "ALV1" /* RO; 6 bytes */
#define ASMC_KEY_LIGHTVALUE "LKSB" /* WO; 2 bytes */
+#define ASMC_KEY_LIGHTSRC "ALSL" /* RO; ambient light source */
+#define ASMC_KEY_FANSAFESPEED0 "F0Sf" /* RO; 2 bytes */
/*
* Clamshell.
@@ -168,945 +183,3 @@
* Interrupt keys.
*/
#define ASMC_KEY_INTOK "NTOK" /* WO; 1 byte */
-
-/*
- * Temperatures.
- *
- * First for MacBook, second for MacBook Pro, third for Intel Mac Mini,
- * fourth the Mac Pro 8-core and finally the MacBook Air.
- *
- */
-/* maximum array size for temperatures including the last NULL */
-#define ASMC_TEMP_MAX 80
-#define ASMC_MB_TEMPS { "TB0T", "TN0P", "TN1P", "Th0H", "Th1H", \
- "TM0P", NULL }
-#define ASMC_MB_TEMPNAMES { "enclosure", "northbridge1", \
- "northbridge2", "heatsink1", \
- "heatsink2", "memory", }
-#define ASMC_MB_TEMPDESCS { "Enclosure Bottomside", \
- "Northbridge Point 1", \
- "Northbridge Point 2", "Heatsink 1", \
- "Heatsink 2", "Memory Bank A", }
-
-#define ASMC_MB31_TEMPS { "TB0T", "TN0P", "Th0H", "Th1H", \
- "TM0P", NULL }
-
-#define ASMC_MB31_TEMPNAMES { "enclosure", "northbridge1", \
- "heatsink1", "heatsink2", \
- "memory", }
-
-#define ASMC_MB31_TEMPDESCS { "Enclosure Bottomside", \
- "Northbridge Point 1", \
- "Heatsink 1","Heatsink 2" \
- "Memory Bank A", }
-
-#define ASMC_MB71_TEMPS { "TB0T", "TB1T", "TB2T", "TC0D", "TC0P", \
- "TH0P", "TN0D", "TN0P", "TN0S", "TN1D", \
- "TN1E", "TN1F", "TN1G", "TN1S", "Th1H", \
- "Ts0P", "Ts0S", NULL }
-
-#define ASMC_MB71_TEMPNAMES { "enclosure_bottom0", "battery_1", "battery_2", "cpu_package", "cpu_proximity", \
- "hdd_bay", "northbridge0_diode", "northbridge0_proximity", "TN0S", "mpc_die2", \
- "TN1E", "TN1F", "TN1G", "TN1S", "heatsink1", \
- "palm_rest", "memory_proximity", }
-
-#define ASMC_MB71_TEMPDESCS { "Enclosure Bottom 0", "Battery 1", "Battery 2", "CPU Package", "CPU Proximity", \
- "HDD Bay", "Northbridge Diode", "Northbridge Proximity", "TN0S", "MPC Die 2", \
- "TN1E", "TN1F", "TN1G", "TN1S", "Heatsink 1", \
- "Palm Rest", "Memory Proximity", }
-
-#define ASMC_MBP_TEMPS { "TB0T", "Th0H", "Th1H", "Tm0P", \
- "TG0H", "TG0P", "TG0T", NULL }
-
-#define ASMC_MBP_TEMPNAMES { "enclosure", "heatsink1", \
- "heatsink2", "memory", "graphics", \
- "graphicssink", "unknown", }
-
-#define ASMC_MBP_TEMPDESCS { "Enclosure Bottomside", \
- "Heatsink 1", "Heatsink 2", \
- "Memory Controller", \
- "Graphics Chip", "Graphics Heatsink", \
- "Unknown", }
-
-#define ASMC_MBP4_TEMPS { "TB0T", "Th0H", "Th1H", "Th2H", "Tm0P", \
- "TG0H", "TG0D", "TC0D", "TC0P", "Ts0P", \
- "TTF0", "TW0P", NULL }
-
-#define ASMC_MBP4_TEMPNAMES { "enclosure", "heatsink1", "heatsink2", \
- "heatsink3", "memory", "graphicssink", \
- "graphics", "cpu", "cpu2", "unknown1", \
- "unknown2", "wireless", }
-
-#define ASMC_MBP4_TEMPDESCS { "Enclosure Bottomside", \
- "Main Heatsink 1", "Main Heatsink 2", \
- "Main Heatsink 3", \
- "Memory Controller", \
- "Graphics Chip Heatsink", \
- "Graphics Chip Diode", \
- "CPU Temperature Diode", "CPU Point 2", \
- "Unknown", "Unknown", \
- "Wireless Module", }
-
-#define ASMC_MBP51_TEMPS { "TB0T", "TB1T", "TB2T", "TB3T", "TC0D", \
- "TC0F", "TC0P", "TG0D", "TG0F", "TG0H", \
- "TG0P", "TG0T", "TG1H", "TN0D", "TN0P", \
- "TTF0", "Th2H", "Tm0P", "Ts0P", "Ts0S", \
- NULL }
-
-#define ASMC_MBP51_TEMPNAMES { "enclosure_bottom_0", "enclosure_bottom_1", \
- "enclosure_bottom_2", "enclosure_bottom_3", \
- "cpu_diode", "cpu", \
- "cpu_pin", "gpu_diode", \
- "gpu", "gpu_heatsink", \
- "gpu_pin", "gpu_transistor", \
- "gpu_2_heatsink", "northbridge_diode", \
- "northbridge_pin", "unknown", \
- "heatsink_2", "memory_controller", \
- "pci_express_slot_pin", "pci_express_slot_unk" }
-
-#define ASMC_MBP51_TEMPDESCS { "Enclosure Bottom 0", "Enclosure Bottom 1", \
- "Enclosure Bottom 2", "Enclosure Bottom 3", \
- "CPU Diode", "CPU ???", \
- "CPU Pin", "GPU Diode", \
- "GPU ???", "GPU Heatsink", \
- "GPU Pin", "GPU Transistor", \
- "GPU 2 Heatsink", "Northbridge Diode", \
- "Northbridge Pin", "Unknown", \
- "Heatsink 2", "Memory Controller", \
- "PCI Express Slot Pin", "PCI Express Slot (unk)" }
-
-#define ASMC_MBP62_TEMPS { "TB0T", "TB1T", "TB2T", \
- "TC0C", "TC0D", "TC0P", \
- "TC1C", "TG0D", "TG0P", \
- "TG0T", "TMCD", "TP0P", \
- "TPCD", "Th1H", "Th2H", \
- "Tm0P", "Ts0P", "Ts0S" }
-
-#define ASMC_MBP62_TEMPNAMES { "enclosure_bottom_0", "enclosure_bottom_1", \
- "enclosure_bottom_2", "cpu0", \
- "cpu_diode", "cpu_proximity", \
- "cpu1", "gpu_diode", \
- "gpu_pin", "gpu_transistor", \
- "TMCD", "pch_controller_proximity", \
- "pch_die", "heatsink1", \
- "heatsink2", "memory-controller", \
- "palmrest", "memoryproximity" }
-
-#define ASMC_MBP62_TEMPDESCS { "Enclosure Bottom 0", "Enclosure Bottom 1", \
- "Enclosure Bottom 2", "CPU 0", \
- "CPU Diode", "CPU Proximity", \
- "CPU 1", "GPU Diode", \
- "GPU Pin", "GPU Transistor", \
- "TMCD", "PCH Controller Proximity", \
- "PCH Die", "Heat Sink 1", \
- "Heat Sink 2", "Memory Controller", \
- "Palm Rest", "Memory Proximity" }
-
-#define ASMC_MBP55_TEMPS { "TB0T", "TB1T", \
- "TB2T", "TB3T", \
- "TC0D", "TC0P", \
- "TN0D", "TN0P", \
- "TTF0", \
- "Th0H", "Th1H", "ThFH", \
- "Ts0P", "Ts0S", \
- NULL }
-
-#define ASMC_MBP55_TEMPNAMES { "enclosure_bottom_0", "enclosure_bottom_1", \
- "enclosure_bottom_2", "enclosure_bottom_3", \
- "cpu_diode", "cpu_pin", \
- "northbridge_diode", "northbridge_pin", \
- "unknown", \
- "heatsink_0", "heatsink_1", "heatsink_2", \
- "pci_express_slot_pin", "pci_express_slot_unk" }
-
-#define ASMC_MBP55_TEMPDESCS { "Enclosure Bottom 0", "Enclosure Bottom 1", \
- "Enclosure Bottom 2", "Enclosure Bottom 3", \
- "CPU Diode", "CPU Pin", \
- "Northbridge Diode", "Northbridge Pin", \
- "Unknown", \
- "Heatsink 0", "Heatsink 1", "Heatsink 2", \
- "PCI Express Slot Pin", "PCI Express Slot (unk)" }
-
-#define ASMC_MBP81_TEMPS { "TB0T", "TB1T", "TB2T", "TC0C", "TC0D", \
- "TC0E", "TC0F", "TC0P", "TC1C", "TC2C", \
- "TCFC", "TCGC", "TCSA", "TM0S", "TMBS", \
- "TP0P", "TPCD", "TW0P", "Th1H", "Ts0P", \
- "Ts0S", NULL }
-
-#define ASMC_MBP81_TEMPNAMES { "enclosure", "TB1T", "TB2T", "TC0C", "TC0D", \
- "TC0E", "TC0F", "TC0P", "TC1C", "TC2C", \
- "TCFC", "TCGC", "TCSA", "TM0S", "TMBS", \
- "TP0P", "TPCD", "wireless", "Th1H", "Ts0P", \
- "Ts0S" }
-
-#define ASMC_MBP81_TEMPDESCS { "Enclosure Bottomside", "TB1T", "TB2T", "TC0C", "TC0D", \
- "TC0E", "TC0F", "TC0P", "TC1C", "TC2C", \
- "TCFC", "TCGC", "TCSA", "TM0S", "TMBS", \
- "TP0P", "TPCD", "TW0P", "Th1H", "Ts0P", \
- "Ts0S" }
-
-#define ASMC_MBP82_TEMPS { "TB0T", "TB1T", "TB2T", "TC0C", "TC0D", \
- "TC0E", "TC0F", "TC0P", "TC1C", "TC2C", \
- "TC3C", "TC4C", "TCFC", "TCGC", "TCSA", \
- "TCTD", "TG0D", "TG0P", "THSP", "TM0S", \
- "TMBS", "TP0P", "TPCD", "TW0P", "Th1H", \
- "Th2H", "Tm0P", "Ts0P", "Ts0S", NULL }
-
-#define ASMC_MBP82_TEMPNAMES { "enclosure", "TB1T", "TB2T", "TC0C", "TC0D", \
- "TC0E", "TC0F", "TC0P", "TC1C", "TC2C", \
- "TC3C", "TC4C", "TCFC", "TCGC", "TCSA", \
- "TCTD", "graphics", "TG0P", "THSP", "TM0S", \
- "TMBS", "TP0P", "TPCD", "wireless", "Th1H", \
- "Th2H", "memory", "Ts0P", "Ts0S" }
-
-#define ASMC_MBP82_TEMPDESCS { "Enclosure Bottomside", "TB1T", "TB2T", "TC0C", "TC0D", \
- "TC0E", "TC0F", "TC0P", "TC1C", "TC2C", \
- "TC3C", "TC4C", "TCFC", "TCGC", "TCSA", \
- "TCTD", "TG0D", "TG0P", "THSP", "TM0S", \
- "TMBS", "TP0P", "TPCD", "TW0P", "Th1H", \
- "Th2H", "Tm0P", "Ts0P", "Ts0S" }
-
-#define ASMC_MBP83_TEMPS { "ALSL", "F0Ac", "F1Ac", "IB0R", "IC0R", \
- "ID0R", "IG0R", "IO0R", "PCPC", "PCPG", \
- "PCPT", "PD0R", "TB1T", "TB2T", "TC0C", \
- "TC0D", "TC0P", "TC1C", "TC2C", "TC3C", \
- "TC4C", "TG0D", "TG0P", "THSP", "TP0P", \
- "TPCD", "Th1H", "Th2H", "Tm0P", "Ts0P", \
- "VC0C", "VD0R", "VG0C", "VN0C", "VP0R", NULL }
-
-#define ASMC_MBP83_TEMPNAMES { "ambient_light", "fan_leftside", "fan_rightside", \
- "battery_current", "cpu_vcorevtt", "dc_current", \
- "gpu_voltage", "other", "cpu_package_core", \
- "cpu_package_gpu", "cpu_package_total", "dc_in", \
- "battery_1", "battery_2", "cpu_die_digital", \
- "cpu_die_analog", "cpu_proximity", "cpu_core_1", \
- "cpu_core_2", "cpu_core_3", "cpu_core_4", "gpu_die_analog", \
- "gpu_proximity", "thunderbolt", "platform_controller", \
- "pch_die_digital", "right_fin_stack", "left_fin_stack", \
- "dc_in_air_flow", "palm_rest", "cpu_vcore", "dc_in_voltage", \
- "gpu_vcore", "intel_gpu_vcore", "pbus_voltage" }
-
-#define ASMC_MBP83_TEMPDESCS { "Ambient Light", "Fan Leftside", "Fan Rightside", \
- "Battery BMON Current", "CPU VcoreVTT", "DC In AMON Current", \
- "GPU Voltage", "Other 5V 3V", "CPU Package Core", \
- "CPU Package GPU", "CPU Package Total", "DC In", \
- "Battery Sensor 1", "Battery Sensor 2", "CPU Die Digital", \
- "CPU Die Analog", "CPU Proximity", "CPU Core 1 DTS", \
- "CPU Core 2 DTS", "CPU Core 3 DTS", "CPU Core 4 DTS", \
- "GPU Die Analog", "GPU Proximity", "Thunderbolt Proximity", \
- "Platform Controller Hub", "PCH Die Digital", \
- "Right Fin Stack Proximity", "Left Fin Stack Proximity", \
- "DC In Proximity Air Flow", "Palm Rest", "CPU VCore", \
- "DC In Voltage", "GPU VCore", "Intel GPU VCore", "PBus Voltage" }
-
-#define ASMC_MBP91_TEMPS { "TA0P", "TB0T", "TB1T", "TB2T", "TC0E", \
- "TC0F", "TC0P", "TC1C", "TC2C", "TC3C", \
- "TC4C", "TCGC", "TCSA", "TCXC", "TG0D", \
- "TG0P", "TG1D", "TG1F", "TG1d", "TGTC", \
- "TGTD", "TM0P", "TM0S", "TP0P", "TPCD", \
- "Th1H", "Th2H", "Ts0P", "Ts0S", "Tsqf", NULL }
-
-#define ASMC_MBP91_TEMPNAMES { "ambient", "enclosure_bottom_1", "enclosure_bottom_2", \
- "enclosure_bottom_3", "cpu_die_peci_0", "cpu_die_peci_1", \
- "cpu_proximity", "cpu_core_1", "cpu_core_2", "cpu_core_3", \
- "cpu_core_4", "intel_gpu", "cpu_sys_agent", \
- "cpu_core_peci", "gpu_analog", \
- "gpu_proximity", "geforce_gpu_digital", "tg1f", \
- "gpu_2_die", "tgtc", "tgtd", "memory_proximity", \
- "mem_bank_a1", "platform_ctrl_hub", "pch_digital", \
- "main_heatsink_r", "main_heatsink_l", "palm_rest", \
- "bottom_skin", "tsqf" }
-
-#define ASMC_MBP91_TEMPDESCS { "Ambient", "Enclosure Bottom 1", "Enclosure Bottom 2", \
- "Enclosure Bottom 3", "CPU Die PECI 0", "CPU Die PECI 1", \
- "CPU Proximity", "CPU Core 1", "CPU Core 2", \
- "CPU Core 3", "CPU Core 4", "Intel GPU", \
- "CPU System Agent Core", "CPU Core - PECI", \
- "GPU Die - Analog", "GPU Proximity", \
- "GeForce GPU Die - Digital", "TG1F", "GPU 2 Die" \
- "TGTC", "TGTD", "Memory Proximity", \
- "Memory Bank A1", "Platform Controller Hub", "PCH Die - Digital", \
- "Main Heatsink Right", "Main Heatsink Left", "Palm Rest", \
- "Bottom Skin", "Tsqf" }
-
-#define ASMC_MBP92_TEMPS { "Ts0P", "Ts0S", "TA0P", "TB1T", "TB2T", \
- "TB0T", "TC1C", "TC2C", "TC0E", "TC0F", \
- "TC0J", "TC0P", "TCFC", "TCGC", "TCSA", \
- "TCTD", "TCXC", "TG1D", "TM0P", "TM0S", \
- "TPCD", NULL }
-
-#define ASMC_MBP92_TEMPNAMES { "Ts0P", "Ts0S", "TA0P", "TB1T", "TB2T", \
- "TB0T", "TC1C", "TC2C", "TC0E", "TC0F", \
- "TC0J", "TC0P", "TCFC", "TCGC", "TCSA", \
- "TCTD", "TCXC", "TG1D", "TM0P", "TM0S", \
- "TPCD" }
-
-#define ASMC_MBP92_TEMPDESCS { "Palm Rest", "Memory Proximity", "Airflow 1", \
- "Battery 1", "Battery 2", "Battery TS_MAX", \
- "CPU Core 1", "CPU Core 2", "CPU1", "CPU1", \
- "TC0J", "CPU 1 Proximity", "TCFC", \
- "PECI GPU", "PECI SA", "TCTD", "PECI CPU", \
- "GPU Die", "Memory Bank A1", "Memory Module A1", \
- "PCH Die" }
-
-#define ASMC_MBP112_TEMPS { "TB0T", "TB1T", "TB2T", "TBXT", "TC0E", \
- "TC0F", "TC0P", "TC1C", "TC2C", "TC3C", \
- "TC4C", "TCFC", "TCGC", "TCSA", "TCTD", \
- "TCXC", "TH0A", "TH0B", "TH0F", "TH0R", \
- "TH0V", "TH0a", "TH0b", "TH0c", "TM0P", \
- "TM0S", "TP0P", "TPCD", "TW0P", "Ta0P", \
- "TaSP", "Th1H", "Th2H", "Ts0P", "Ts0S", \
- "Ts1S", NULL }
-
-#define ASMC_MBP112_TEMPNAMES { "TB0T", "TB1T", "TB2T", "TBXT", "TC0E", \
- "TC0F", "TC0P", "TC1C", "TC2C", "TC3C", \
- "TC4C", "TCFC", "TCGC", "TCSA", "TCTD", \
- "TCXC", "TH0A", "TH0B", "TH0F", "TH0R", \
- "TH0V", "TH0a", "TH0b", "TH0c", "TM0P", \
- "TM0S", "TP0P", "TPCD", "TW0P", "Ta0P", \
- "TaSP", "Th1H", "Th2H", "Ts0P", "Ts0S", \
- "Ts1S" }
-
-#define ASMC_MBP112_TEMPDESCS { "TB0T", "TB1T", "TB2T", "TBXT", "TC0E", \
- "TC0F", "TC0P", "TC1C", "TC2C", "TC3C", \
- "TC4C", "TCFC", "TCGC", "TCSA", "TCTD", \
- "TCXC", "TH0A", "TH0B", "TH0F", "TH0R", \
- "TH0V", "TH0a", "TH0b", "TH0c", "TM0P", \
- "TM0S", "TP0P", "TPCD", "TW0P", "Ta0P", \
- "TaSP", "Th1H", "Th2H", "Ts0P", "Ts0S", \
- "Ts1S" }
-
-#define ASMC_MBP113_TEMPS { "TB0T", "TB1T", "TB2T", "TBXT", "TC0E", \
- "TC0F", "TC0P", "TC1C", "TC2C", "TC3C", \
- "TC4C", "TCFC", "TCGC", "TCSA", "TCTD", \
- "TCXC", "TG0D", "TG0P", "TG1D", "TG1F", \
- "TG1d", "TH0A", "TH0B", "TH0F", "TH0R", \
- "TH0V", "TH0a", "TH0b", "TH0c", "TM0P", \
- "TM0S", "TP0P", "TPCD", "TW0P", "Ta0P", \
- "TaSP", "Th1H", "Th2H", "Ts0P", "Ts0S", \
- "Ts1S", NULL }
-
-#define ASMC_MBP113_TEMPNAMES { "TB0T", "TB1T", "TB2T", "TBXT", "TC0E", \
- "TC0F", "TC0P", "TC1C", "TC2C", "TC3C", \
- "TC4C", "TCFC", "TCGC", "TCSA", "TCTD", \
- "TCXC", "TG0D", "TG0P", "TG1D", "TG1F", \
- "TG1d", "TH0A", "TH0B", "TH0F", "TH0R", \
- "TH0V", "TH0a", "TH0b", "TH0c", "TM0P", \
- "TM0S", "TP0P", "TPCD", "TW0P", "Ta0P", \
- "TaSP", "Th1H", "Th2H", "Ts0P", "Ts0S", \
- "Ts1S" }
-
-#define ASMC_MBP113_TEMPDESCS { "TB0T", "TB1T", "TB2T", "TBXT", "TC0E", \
- "TC0F", "TC0P", "TC1C", "TC2C", "TC3C", \
- "TC4C", "TCFC", "TCGC", "TCSA", "TCTD", \
- "TCXC", "TG0D", "TG0P", "TG1D", "TG1F", \
- "TG1d", "TH0A", "TH0B", "TH0F", "TH0R", \
- "TH0V", "TH0a", "TH0b", "TH0c", "TM0P", \
- "TM0S", "TP0P", "TPCD", "TW0P", "Ta0P", \
- "TaSP", "Th1H", "Th2H", "Ts0P", "Ts0S", \
- "Ts1S" }
-
-#define ASMC_MBP114_TEMPS { "IC0C", "ID0R", "IHDC", "IPBR", "IC0R", \
- "IO3R", "IO5R", "IM0C", "IC1C", "IC2C", \
- "IC3C", "ILDC", "IBLC", "IAPC", "IHSC", \
- "ICMC", "TC0P", "TP0P", "TM0P", \
- "Ta0P", "Th2H", "Th1H", "TW0P", "Ts0P", \
- "Ts1P", "TB0T", "TB1T", "TB2T", "TH0A", "TH0B", \
- "TC1C", "TC2C", "TC3C", "TC4C", "TCXC", \
- "TCGC", "TPCD", "TCSA", "VC0C", "VD0R", \
- "VP0R", "ALSL", "F0Ac", "F1Ac", "PCPC", \
- "PCPG", "PCPT", "PSTR", "PDTR", NULL }
-
-#define ASMC_MBP114_TEMPNAMES { "IC0C", "ID0R", "IHDC", "IPBR", "IC0R", \
- "IO3R", "IO5R", "IM0C", "IC1C", "IC2C", \
- "IC3C", "ILDC", "IBLC", "IAPC", "IHSC", \
- "ICMC", "TC0P", "TP0P", "TM0P", \
- "Ta0P", "Th2H", "Th1H", "TW0P", "Ts0P", \
- "Ts1P", "TB0T", "TB1T", "TB2T", "TH0A", "TH0B", \
- "TC1C", "TC2C", "TC3C", "TC4C", "TCXC", \
- "TCGC", "TPCD", "TCSA", "VC0C", "VD0R", \
- "VP0R", "ALSL", "F0Ac", "F1Ac", "PCPC", \
- "PCPG", "PCPT", "PSTR", "PDTR" }
-
-#define ASMC_MBP114_TEMPDESCS { "CPU High (CPU, I/O)", "DC In", "SSD", "Charger (BMON)", "CPU", \
- "Other 3.3V", "Other 5V", "Memory", "Platform Controller Hub Core", "CPU Load Current Monitor", \
- "CPU DDR", "LCD Panel", "LCD Backlight", "Airport", "Thunderbolt", \
- "S2", "CPU Proximity", "Platform Controller Hub", "Memory Proximity", "Air Flow Proximity", \
- "Left Fin Stack", "Right Fin Stack", "Airport Proximity", "Palm Rest", "Palm Rest Actuator", \
- "Battery Max", "Battery Sensor 1", "Battery Sensor 2", "SSD A", "SSD B", \
- "CPU Core 1", "CPU Core 2", "CPU Core 3", "CPU Core 4", "CPU PECI Die", \
- "Intel GPU", "Platform Controller Hub PECI", "CPU System Agent Core", "CPU VCore", "DC In", \
- "Pbus", "Ambient Light", "Leftside", "Rightside", "CPU Package Core", \
- "CPU Package GPU", "CPU Package Total", "System Total", "DC In" }
-
-/* MacBookPro11,5 - same as 11,4 but without IBLC, ICMC, and IC2C keys */
-#define ASMC_MBP115_TEMPS { "IC0C", "ID0R", "IHDC", "IPBR", "IC0R", \
- "IO3R", "IO5R", "IM0C", "IC1C", \
- "IC3C", "ILDC", "IAPC", "IHSC", \
- "TC0P", "TP0P", "TM0P", \
- "Ta0P", "Th2H", "Th1H", "TW0P", "Ts0P", \
- "Ts1P", "TB0T", "TB1T", "TB2T", "TH0A", "TH0B", \
- "TC1C", "TC2C", "TC3C", "TC4C", "TCXC", \
- "TCGC", "TPCD", "TCSA", "VC0C", "VD0R", \
- "VP0R", "ALSL", "F0Ac", "F1Ac", "PCPC", \
- "PCPG", "PCPT", "PSTR", "PDTR", NULL }
-
-
-#define ASMC_MBP115_TEMPNAMES { "IC0C", "ID0R", "IHDC", "IPBR", "IC0R", \
- "IO3R", "IO5R", "IM0C", "IC1C", \
- "IC3C", "ILDC", "IAPC", "IHSC", \
- "TC0P", "TP0P", "TM0P", \
- "Ta0P", "Th2H", "Th1H", "TW0P", "Ts0P", \
- "Ts1P", "TB0T", "TB1T", "TB2T", "TH0A", "TH0B", \
- "TC1C", "TC2C", "TC3C", "TC4C", "TCXC", \
- "TCGC", "TPCD", "TCSA", "VC0C", "VD0R", \
- "VP0R", "ALSL", "F0Ac", "F1Ac", "PCPC", \
- "PCPG", "PCPT", "PSTR", "PDTR" }
-
-#define ASMC_MBP115_TEMPDESCS { "CPU High (CPU, I/O)", "DC In", "SSD", "Charger (BMON)", "CPU", \
- "Other 3.3V", "Other 5V", "Memory", "Platform Controller Hub Core", \
- "CPU DDR", "LCD Panel", "Airport", "Thunderbolt", \
- "CPU Proximity", "Platform Controller Hub", "Memory Proximity", "Air Flow Proximity", \
- "Left Fin Stack", "Right Fin Stack", "Airport Proximity", "Palm Rest", "Palm Rest Actuator", \
- "Battery Max", "Battery Sensor 1", "Battery Sensor 2", "SSD A", "SSD B", \
- "CPU Core 1", "CPU Core 2", "CPU Core 3", "CPU Core 4", "CPU PECI Die", \
- "Intel GPU", "Platform Controller Hub PECI", "CPU System Agent Core", "CPU VCore", "DC In", \
- "Pbus", "Ambient Light", "Leftside", "Rightside", "CPU Package Core", \
- "CPU Package GPU", "CPU Package Total", "System Total", "DC In" }
-
-#define ASMC_MBP131_TEMPS { "TB0T", "TB1T", "TB2T", "TC0F", \
- "TC0P", "TC1C", "TC2C", "TCGC", \
- "TCSA", "TCXC", "Th1H", "TM0P", \
- "TPCD", "Ts0P", "Ts0S", "TaLC", \
- "Ts1P", NULL }
-
-#define ASMC_MBP131_TEMPNAMES { "battery", "battery_1", "battery_2", "cpu_die_peci", \
- "cpu_proximity", "cpu_core_1", "cpu_core_2", "intel_gpu", \
- "cpu_sys_agent", "cpu_core_peci", "right_fin_stack", "memory_proximity", \
- "platform_ctrl_hub", "trackpad", "bottom_skin", "air_flow", \
- "trackpad_act" }
-
-#define ASMC_MBP131_TEMPDESCS { "Battery", "Battery Sensor 1", "Battery Sensor 2", "CPU Die (PECI)", \
- "CPU Proximity", "CPU Core 1", "CPU Core 2", "Intel GPU", \
- "CPU System Agent Core (PECI)", "CPU Core (PECI)", "Right Fin Stack", "DDR3 Proximity", \
- "Platform Controller Hub Die", "Trackpad", "Bottom Skin", "Air Flow", \
- "Trackpad Actuator" }
-
-#define ASMC_MM_TEMPS { "TN0P", "TN1P", NULL }
-#define ASMC_MM_TEMPNAMES { "northbridge1", "northbridge2" }
-#define ASMC_MM_TEMPDESCS { "Northbridge Point 1", \
- "Northbridge Point 2" }
-
-#define ASMC_MM21_TEMPS { "TA0P", "TC0D", \
- "TC0H", "TC0P", \
- "TC1P", "TN0P", \
- "TN1P", NULL }
-
-#define ASMC_MM21_TEMPNAMES { "ambient_air", "cpu_die", \
- "cpu_heatsink", "cpu_proximity1", \
- "cpu_proximity2", "northbridge_proximity1", \
- "northbridge_proximity2", }
-
-#define ASMC_MM21_TEMPDESCS { "Ambient Air Temperature" \
- "CPU Die Core Temperature", \
- "CPU Heatsink Temperature", \
- "CPU Proximity 1 Temperature", \
- "CPU Proximity 2 Temperature", \
- "Northbridge Proximity 1 Temperature", \
- "Northbridge Proximity 2 Temperature", }
-
-#define ASMC_MM31_TEMPS { "TC0D", "TC0H", \
- "TC0P", "TH0P", \
- "TN0D", "TN0P", \
- "TW0P", NULL }
-
-#define ASMC_MM31_TEMPNAMES { "cpu0_die", "cpu0_heatsink", \
- "cpu0_proximity", "hdd_bay", \
- "northbridge_die", \
- "northbridge_proximity", \
- "wireless_proximity", }
-
-#define ASMC_MM31_TEMPDESCS { "CPU0 Die Core Temperature", \
- "CPU0 Heatsink Temperature", \
- "CPU0 Proximity Temperature", \
- "HDD Bay Temperature", \
- "Northbridge Die Core Temperature", \
- "Northbridge Proximity Temperature", \
- "Wireless Module Proximity Temperature", }
-
-#define ASMC_MM41_TEMPS { "TA0P", "TC0D", "TC0G", "TC0H", "TC0P", \
- "TC0p", "TCPG", "TH0G", "TH0P", "TH0p", \
- "TM0G", "TM0P", "TM0p", "TN0D", "TN0G", \
- "TN0P", "TN0p", "TN1D", "TN1E", "TN1F", \
- "TN1G", "TN1S", "TNPG", "TO0P", "TO0p", \
- "TW0P", "Tm0P", "Tp0C", NULL }
-
-#define ASMC_MM41_TEMPNAMES { "TA0P", "TC0D", "TC0G", "TC0H", "TC0P", \
- "TC0p", "TCPG", "TH0G", "TH0P", "TH0p", \
- "TM0G", "TM0P", "TM0p", "TN0D", "TN0G", \
- "TN0P", "TN0p", "TN1D", "TN1E", "TN1F", \
- "TN1G", "TN1S", "TNPG", "TO0P", "TO0p", \
- "TW0P", "Tm0P", "Tp0C", NULL }
-
-#define ASMC_MM41_TEMPDESCS { "TA0P", "TC0D", "TC0G", "TC0H", "TC0P", \
- "TC0p", "TCPG", "TH0G", "TH0P", "TH0p", \
- "TM0G", "TM0P", "TM0p", "TN0D", "TN0G", \
- "TN0P", "TN0p", "TN1D", "TN1E", "TN1F", \
- "TN1G", "TN1S", "TNPG", "TO0P", "TO0p", \
- "TW0P", "Tm0P", "Tp0C", NULL }
-
-#define ASMC_MM52_TEMPS { "TA0P", "TA1P", \
- "TC0D", "TC0P", \
- "TG0D", "TG1D", \
- "TG0P", "TG0M", \
- "TI0P", \
- "TM0S", "TMBS", \
- "TM0P", "TP0P", \
- "TPCD", "Tp0C", \
- "TW0P", NULL }
-
-#define ASMC_MM52_TEMPNAMES { "ambient_air_proximity", "ambient_cpu_pch_wireless_dimm", \
- "cpu_die", "cpu_proximity", \
- "gpu_diode1", "gpu_diode2", \
- "gpu_proximity", "gpu_integrated_switcher", \
- "thunderbolt_proximity", \
- "memory_slot1", "memory_slot2", \
- "memory_proximity", "pch_controller_proximity", \
- "pch_controller_die", "pwr_supply", \
- "wireless_proximity", }
-
-#define ASMC_MM52_TEMPDESCS { "Ambient Air Proximity Temperature", \
- "Combo Ambient CPU PCH Wireless DIMM Temperature", \
- "CPU Die Temperature", "CPU Proximity Temperature", \
- "GPU Diode 1 Temperature" , "GPU Diode 2 Temperature", \
- "GPU Proximity Temperature", \
- "Integrated Graphics/GPU Switcher Temperature", \
- "Thunderbolt Proximity Temperature", \
- "Memory Slot 1 Temperature", \
- "Memory Slot 2 Temperature", \
- "Memory Slots Proximity Temperature", \
- "Platform Controller Hub Proximity Temperature", \
- "Platform Controller Hub Die Temperature", \
- "Power Supply Temperature", \
- "Wireless Module Proximity Temperature", }
-
-#define ASMC_MM61_TEMPS { "TA0P", "TA1P", \
- "TC0D", "TC0G", "TC0P", "TCPG", \
- "TI0P", \
- "TM0S", "TMBS", "TM0P", \
- "TP0P", "TPCD", \
- "Tp0C", \
- "TW0P", NULL }
-
-#define ASMC_MM61_TEMPNAMES { "ambient_air_proximity", "ambient_cpu_pch_wireless_dimm", \
- "cpu_die", "TC0G", "cpu_proximity", "TCPG", \
- "thunderbolt_proximity", \
- "memory_slot1", "memory_slot2", "memory_proximity", \
- "pch_controller_proximity", "pch_controller_die", \
- "pwr_supply", \
- "wireless_proximity", NULL }
-
-#define ASMC_MM61_TEMPDESCS { "Ambient Air Proximity Temperature", \
- "Combo Ambient CPU PCH Wireless DIMM Temperature", \
- "CPU Die Temperature", \
- NULL, \
- "CPU Proximity Temperature", \
- NULL, \
- "Thunderbolt Proximity Temperature", \
- "Memory Slot 1 Temperature", \
- "Memory Slot 2 Temperature", \
- "Memory Slots Proximity Temperature", \
- "Platform Controller Hub Proximity Temperature", \
- "Platform Controller Hub Die Temperature", \
- "Power Supply Temperature", \
- "Wireless Module Proximity Temperature", NULL }
-
-#define ASMC_MM62_TEMPS { "TA0P", "TA1P", \
- "TC0D", "TC0G", "TC0P", "TCPG", \
- "TI0P", \
- "TM0S", "TMBS", "TM0P", \
- "TP0P", "TPCD", \
- "Tp0C", \
- "TW0P", NULL }
-
-#define ASMC_MM62_TEMPNAMES { "ambient_air_proximity", "ambient_cpu_pch_wireless_dimm", \
- "cpu_die", "TC0G", "cpu_proximity", "TCPG", \
- "thunderbolt_proximity", \
- "memory_slot1", "memory_slot2", "memory_proximity", \
- "pch_controller_proximity", "pch_controller_die", \
- "pwr_supply", \
- "wireless_proximity", NULL }
-
-#define ASMC_MM62_TEMPDESCS { "Ambient Air Proximity Temperature", \
- "Combo Ambient CPU PCH Wireless DIMM Temperature", \
- "CPU Die Temperature", \
- NULL, \
- "CPU Proximity Temperature", \
- NULL, \
- "Thunderbolt Proximity Temperature", \
- "Memory Slot 1 Temperature", \
- "Memory Slot 2 Temperature", \
- "Memory Slots Proximity Temperature", \
- "Platform Controller Hub Proximity Temperature", \
- "Platform Controller Hub Die Temperature", \
- "Power Supply Temperature", \
- "Wireless Module Proximity Temperature", NULL }
-
-#define ASMC_MM71_TEMPS { "TA0p", "TA1p", \
- "TA2p", "TC0c", \
- "TC0p", "TC1c", \
- "TCGc", "TCSc", \
- "TCXC", "TCXR", \
- "TM0p", "TPCd", \
- "TW0p", "Te0T", \
- "Tm0P", NULL }
-
-#define ASMC_MM71_TEMPNAMES { "ambient_air1", "ambient_air2", \
- "ambient_air3", "cpu_core1_peci", \
- "cpu_proximity", "cpu_core2_peci", \
- "intel_gpu", "cpu_sa_core_peci", \
- "cpu_core", "cpu_peci_dts", \
- "memory_proximity", "pch_controller_die", \
- "wireless_proximity", "thunderbolt_diode", \
- "logic_board", }
-
-#define ASMC_MM71_TEMPDESCS { "Ambient Air Temperature 1", \
- "Ambient Air Temperature 2", \
- "Ambient Air Temperature 3", \
- "CPU Core 1 PECI Temperature", "CPU Proximity Temperature", \
- "CPU Core 2 PECI Temperature", "Intel GPU Temperature", \
- "CPU System Agent Core PECI Temperature", \
- "CPU Core Temperature", "CPU PECI DTS Temperature", \
- "Memory Proximity Temperature", \
- "Platform Controller Hub Die Temperature", \
- "Wireless Module Proximity Temperature", \
- "Thunderbolt Diode Temperature", \
- "Logic Board temperature", }
-
-#define ASMC_MP1_TEMPS { "TA0P", \
- "TCAH", "TCBH", \
- "TC0P", "TC0C", "TC1C", \
- "TC2C", "TC3C", "THTG", \
- "TH0P", "TH1P", \
- "TH2P", "TH3P", \
- "TM0P", "TM1P", "TM2P", \
- "TM8P", "TM9P", "TMAP", \
- "TM0S", "TM1S", "TM2P", "TM3S", \
- "TM8S", "TM9S", "TMAS", "TMBS", \
- "TN0H", "TS0C", \
- "Tp0C", "Tp1C", "Tv0S", "Tv1S", NULL }
-
-#define ASMC_MP1_TEMPNAMES { "ambient", \
- "cpu_a_heatsink", "cpu_b_heatsink", \
- "cpu_a_proximity", "cpu_core0", "cpu_core1", \
- "cpu_core2", "cpu_core3", "THTG", \
- "hdd_bay0", "hdd_bay1", \
- "hdd_bay2", "hdd_bay3", \
- "memory_card_a_proximity0", \
- "memory_card_a_proximity1", \
- "memory_card_a_proximity2", \
- "memory_card_b_proximity0", \
- "memory_card_b_proximity1", \
- "memory_card_b_proximity2", \
- "memory_card_a_slot0", \
- "memory_card_a_slot1", \
- "memory_card_a_slot2", \
- "memory_card_a_slot3", \
- "memory_card_b_slot0", \
- "memory_card_b_slot1", \
- "memory_card_b_slot2", \
- "memory_card_b_slot3", \
- "mch_heatsink", "expansion_slots", \
- "power_supply_loc0", "power_supply_loc1", \
- "Tv0S", "Tv1S", }
-
-#define ASMC_MP1_TEMPDESCS { "Ambient Air", \
- "CPU A Heatsink", "CPU B Heatsink", \
- "CPU A Proximity", \
- "CPU Core 1", "CPU Core 2", \
- "CPU Core 3", "CPU Core 4", "THTG", \
- "Hard Drive Bay 1", "Hard Drive Bay 2", \
- "Hard Drive Bay 3", "Hard Drive Bay 4", \
- "Memory Riser A, Proximity 1", \
- "Memory Riser A, Proximity 2", \
- "Memory Riser A, Proximity 3", \
- "Memory Riser B, Proximity 1", \
- "Memory Riser B, Proximity 2", \
- "Memory Riser B, Proximity 3", \
- "Memory Riser A, Slot 1", \
- "Memory Riser A, Slot 2", \
- "Memory Riser A, Slot 3", \
- "Memory Riser A, Slot 4", \
- "Memory Riser B, Slot 1", \
- "Memory Riser B, Slot 2", \
- "Memory Riser B, Slot 3", \
- "Memory Riser B, Slot 4", \
- "MCH Heatsink", "Expansion Slots", \
- "Power Supply, Location 1", \
- "Power Supply, Location 2", \
- "Tv0S", "Tv1S", }
-
-#define ASMC_MP31_TEMPS { "TA0P", \
- "TC0C", "TC0D", "TC0P", \
- "TC1C", "TC1D", \
- "TC2C", "TC2D", \
- "TC3C", "TC3D", \
- "TCAG", "TCAH", "TCBG", "TCBH", \
- "TH0P", "TH1P", "TH2P", "TH3P", \
- "TM0P", "TM0S", "TM1P", "TM1S", \
- "TM2P", "TM2S", "TM3S", \
- "TM8P", "TM8S", "TM9P", "TM9S", \
- "TMAP", "TMAS", "TMBS", \
- "TN0C", "TN0D", "TN0H", \
- "TS0C", \
- "Tp0C", "Tp1C", \
- "Tv0S", "Tv1S", NULL }
-
-#define ASMC_MP31_TEMPNAMES { "ambient", \
- "cpu_core0", "cpu_diode0", "cpu_a_proximity", \
- "cpu_core1", "cpu_diode1", \
- "cpu_core2", "cpu_diode2", \
- "cpu_core3", "cpu_diode3", \
- "cpu_a_pkg", "cpu_a_heatsink", \
- "cpu_b_pkg", "cpu_b_heatsink", \
- "hdd_bay0", "hdd_bay1", \
- "hdd_bay2", "hdd_bay3", \
- "mem_riser_a_prox0", "mem_riser_a_slot0", \
- "mem_riser_a_prox1", "mem_riser_a_slot1", \
- "mem_riser_a_prox2", "mem_riser_a_slot2", \
- "mem_riser_a_slot3", \
- "mem_riser_b_prox0", "mem_riser_b_slot0", \
- "mem_riser_b_prox1", "mem_riser_b_slot1", \
- "mem_riser_b_prox2", "mem_riser_b_slot2", \
- "mem_riser_b_slot3", \
- "northbridge_core", "northbridge_diode", \
- "northbridge_heatsink", \
- "expansion_slots", \
- "power_supply0", "power_supply1", \
- "vrm0", "vrm1", }
-
-#define ASMC_MP31_TEMPDESCS { "Ambient Air", \
- "CPU Core 1", "CPU Diode 1", \
- "CPU A Proximity", \
- "CPU Core 2", "CPU Diode 2", \
- "CPU Core 3", "CPU Diode 3", \
- "CPU Core 4", "CPU Diode 4", \
- "CPU A Package", "CPU A Heatsink", \
- "CPU B Package", "CPU B Heatsink", \
- "Hard Drive Bay 1", "Hard Drive Bay 2", \
- "Hard Drive Bay 3", "Hard Drive Bay 4", \
- "Memory Riser A, Proximity 1", \
- "Memory Riser A, Slot 1", \
- "Memory Riser A, Proximity 2", \
- "Memory Riser A, Slot 2", \
- "Memory Riser A, Proximity 3", \
- "Memory Riser A, Slot 3", \
- "Memory Riser A, Slot 4", \
- "Memory Riser B, Proximity 1", \
- "Memory Riser B, Slot 1", \
- "Memory Riser B, Proximity 2", \
- "Memory Riser B, Slot 2", \
- "Memory Riser B, Proximity 3", \
- "Memory Riser B, Slot 3", \
- "Memory Riser B, Slot 4", \
- "Northbridge Core", "Northbridge Diode", \
- "Northbridge Heatsink", \
- "Expansion Slots", \
- "Power Supply 1", "Power Supply 2", \
- "VRM 1", "VRM 2", }
-
-#define ASMC_MP2_TEMPS { "TA0P", "TCAG", "TCAH", "TCBG", "TCBH", \
- "TC0C", "TC0D", "TC0P", "TC1C", "TC1D", \
- "TC2C", "TC2D", "TC3C", "TC3D", "THTG", \
- "TH0P", "TH1P", "TH2P", "TH3P", "TMAP", \
- "TMAS", "TMBS", "TM0P", "TM0S", "TM1P", \
- "TM1S", "TM2P", "TM2S", "TM3S", "TM8P", \
- "TM8S", "TM9P", "TM9S", "TN0H", "TS0C", \
- NULL }
-
-#define ASMC_MP2_TEMPNAMES { "TA0P", "TCAG", "TCAH", "TCBG", "TCBH", \
- "TC0C", "TC0D", "TC0P", "TC1C", "TC1D", \
- "TC2C", "TC2D", "TC3C", "TC3D", "THTG", \
- "TH0P", "TH1P", "TH2P", "TH3P", "TMAP", \
- "TMAS", "TMBS", "TM0P", "TM0S", "TM1P", \
- "TM1S", "TM2P", "TM2S", "TM3S", "TM8P", \
- "TM8S", "TM9P", "TM9S", "TN0H", "TS0C", }
-
-#define ASMC_MP2_TEMPDESCS { "TA0P", "TCAG", "TCAH", "TCBG", "TCBH", \
- "TC0C", "TC0D", "TC0P", "TC1C", "TC1D", \
- "TC2C", "TC2D", "TC3C", "TC3D", "THTG", \
- "TH0P", "TH1P", "TH2P", "TH3P", "TMAP", \
- "TMAS", "TMBS", "TM0P", "TM0S", "TM1P", \
- "TM1S", "TM2P", "TM2S", "TM3S", "TM8P", \
- "TM8S", "TM9P", "TM9S", "TN0H", "TS0C", }
-
-#define ASMC_MP5_TEMPS { "TA0P", "TCAC", "TCAD", "TCAG", "TCAH", \
- "TCAS", "TCBC", "TCBD", "TCBG", "TCBH", \
- "TCBS", "TH1F", "TH1P", "TH1V", "TH2F", \
- "TH2P", "TH2V", "TH3F", "TH3P", "TH3V", \
- "TH4F", "TH4P", "TH4V", "THPS", "THTG", \
- "TM1P", "TM2P", "TM2V", "TM3P", "TM3V", \
- "TM4P", "TM5P", "TM6P", "TM6V", "TM7P", \
- "TM7V", "TM8P", "TM8V", "TM9V", "TMA1", \
- "TMA2", "TMA3", "TMA4", "TMB1", "TMB2", \
- "TMB3", "TMB4", "TMHS", "TMLS", "TMPS", \
- "TMPV", "TMTG", "TN0D", "TN0H", "TNTG", \
- "Te1F", "Te1P", "Te1S", "Te2F", "Te2S", \
- "Te3F", "Te3S", "Te4F", "Te4S", "Te5F", \
- "Te5S", "TeGG", "TeGP", "TeRG", "TeRP", \
- "TeRV", "Tp0C", "Tp1C", "TpPS", "TpTG", \
- NULL }
-
-#define ASMC_MP5_TEMPNAMES { "ambient", "TCAC", "TCAD", "TCAG", "TCAH", \
- "TCAS", "TCBC", "TCBD", "TCBG", "TCBH", \
- "TCBS", "TH1F", "TH1P", "TH1V", "TH2F", \
- "TH2P", "TH2V", "TH3F", "TH3P", "TH3V", \
- "TH4F", "TH4P", "TH4V", "THPS", "THTG", \
- "TM1P", "TM2P", "TM2V", "TM3P", "TM3V", \
- "TM4P", "TM5P", "TM6P", "TM6V", "TM7P", \
- "TM7V", "TM8P", "TM8V", "TM9V", "ram_a1", \
- "ram_a2", "ram_a3", "ram_a4", "ram_b1", "ram_b2", \
- "ram_b3", "ram_b4", "TMHS", "TMLS", "TMPS", \
- "TMPV", "TMTG", "TN0D", "TN0H", "TNTG", \
- "Te1F", "Te1P", "Te1S", "Te2F", "Te2S", \
- "Te3F", "Te3S", "Te4F", "Te4S", "Te5F", \
- "Te5S", "TeGG", "TeGP", "TeRG", "TeRP", \
- "TeRV", "Tp0C", "Tp1C", "TpPS", "TpTG", }
-
-#define ASMC_MP5_TEMPDESCS { "TA0P", "TCAC", "TCAD", "TCAG", "TCAH", \
- "TCAS", "TCBC", "TCBD", "TCBG", "TCBH", \
- "TCBS", "TH1F", "TH1P", "TH1V", "TH2F", \
- "TH2P", "TH2V", "TH3F", "TH3P", "TH3V", \
- "TH4F", "TH4P", "TH4V", "THPS", "THTG", \
- "TM1P", "TM2P", "TM2V", "TM3P", "TM3V", \
- "TM4P", "TM5P", "TM6P", "TM6V", "TM7P", \
- "TM7V", "TM8P", "TM8V", "TM9V", "TMA1", \
- "TMA2", "TMA3", "TMA4", "TMB1", "TMB2", \
- "TMB3", "TMB4", "TMHS", "TMLS", "TMPS", \
- "TMPV", "TMTG", "TN0D", "TN0H", "TNTG", \
- "Te1F", "Te1P", "Te1S", "Te2F", "Te2S", \
- "Te3F", "Te3S", "Te4F", "Te4S", "Te5F", \
- "Te5S", "TeGG", "TeGP", "TeRG", "TeRP", \
- "TeRV", "Tp0C", "Tp1C", "TpPS", "TpTG", }
-
-#define ASMC_MP6_TEMPS { "TA0P", "TA1P", "TC0P", "TG0D", "TG0P", \
- "TG1D", "TG1P", "TM0P", "TM1P", NULL }
-
-#define ASMC_MP6_TEMPNAMES { "ambient_air_1", "ambient_air_2", \
- "cpu_proximity", "gpu_diode_1", \
- "gpu_proximity_1", "gpu_diode_2", \
- "gpu_proximity_2", "mem_proximity_1", \
- "mem_proximity_2" }
-
-#define ASMC_MP6_TEMPDESCS { "Ambient Air 1", "Ambient Air 2", \
- "CPU Proximity", "GPU Diode 1", \
- "GPU Proximity 1", "GPU Diode 2", \
- "GPU Proximity 2", "Memory Bank A", \
- "Memory Bank B" }
-
-#define ASMC_MBA_TEMPS { "TB0T", NULL }
-#define ASMC_MBA_TEMPNAMES { "enclosure" }
-#define ASMC_MBA_TEMPDESCS { "Enclosure Bottom" }
-
-#define ASMC_MBA3_TEMPS { "TB0T", "TB1T", "TB2T", \
- "TC0D", "TC0E", "TC0P", NULL }
-
-#define ASMC_MBA3_TEMPNAMES { "enclosure", "TB1T", "TB2T", \
- "TC0D", "TC0E", "TC0P" }
-
-#define ASMC_MBA3_TEMPDESCS { "Enclosure Bottom", "TB1T", "TB2T", \
- "TC0D", "TC0E", "TC0P" }
-
-#define ASMC_MBA4_TEMPS { "TB0T", "TB1T", "TB2T", "TC0C", \
- "TC0D", "TC0E", "TC0F", "TC0P", \
- "TC1C", "TC2C", "TCGC", "TCSA", \
- "TH0F", "TH0J", "TH0O", "TH0o", \
- "TM0P", "TPCD", "Ta0P", "Th1H", \
- "Tm0P", "Tm1P", "Ts0P", "Ts0S", \
- NULL }
-
-#define ASMC_MBA4_TEMPNAMES { "TB0T", "TB1T", "TB2T", "TC0C", \
- "TC0D", "TC0E", "TC0F", "TC0P", \
- "TC1C", "TC2C", "TCGC", "TCSA", \
- "TH0F", "TH0J", "TH0O", "TH0o", \
- "TM0P", "TPCD", "Ta0P", "Th1H", \
- "Tm0P", "Tm1P", "Ts0P", "Ts0S", \
- NULL }
-
-#define ASMC_MBA4_TEMPDESCS { "TB0T", "TB1T", "TB2T", "TC0C", \
- "TC0D", "TC0E", "TC0F", "TC0P", \
- "TC1C", "TC2C", "TCGC", "TCSA", \
- "TH0F", "TH0J", "TH0O", "TH0o", \
- "TM0P", "TPCD", "Ta0P", "Th1H", \
- "Tm0P", "Tm1P", "Ts0P", "Ts0S", \
- NULL }
-
-#define ASMC_MBA5_TEMPS { "TB0T", "TB1T", "TB2T", "TC0C", \
- "TC0D", "TC0E", "TC0F", "TC0P", \
- "TC1C", "TC2C", "TCGC", "TCSA", \
- "TCXC", "THSP", "TM0P", "TPCD", \
- "Ta0P", "Th1H", "Tm0P", "Tm1P", \
- "Ts0P", "Ts0S", NULL }
-
-#define ASMC_MBA5_TEMPNAMES { "enclosure1", "enclosure2", "enclosure3", "TC0C", \
- "cpudiode", "cputemp1", "cputemp2", "cpuproximity", \
- "cpucore1", "cpucore2", "cpupeci", "pecisa", \
- "TCXC", "THSP", "memorybank", "pchdie", \
- "Ta0P", "heatpipe", "mainboardproximity1", "mainboardproximity2", \
- "palmrest", "memoryproximity" }
-
-#define ASMC_MBA5_TEMPDESCS { "Enclosure Bottom 1", "Enclosure Bottom 2", "Enclosure Bottom 3", "TC0C",\
- "CPU Diode", "CPU Temp 1", "CPU Temp 2", "CPU Proximity", \
- "CPU Core 1", "CPU Core 2", "CPU Peci Core", "PECI SA", \
- "TCXC", "THSP", "Memory Bank A", "PCH Die", \
- "Ta0P", "Heatpipe", "Mainboard Proximity 1", "Mainboard Proximity 2", \
- "Palm Rest", "Memory Proximity" }
-
-/*
- * TODO: validate the temp zones for MBA 6.x !
- */
-#define ASMC_MBA6_TEMPS { "TB0T", "TB1T", "TB2T", \
- "TC0E", "TC0F", "TC0P", \
- "TC1C", "TC2C", "TCGC", "TCSA", \
- "TCXC", "THSP", "TM0P", "TPCD", \
- "Ta0P", "Th1H", "Tm0P", \
- "Ts0P", "Ts0S", NULL }
-
-#define ASMC_MBA6_TEMPNAMES { "enclosure1", "enclosure2", "enclosure3", \
- "cputemp1", "cputemp2", "cpuproximity", \
- "cpucore1", "cpucore2", "cpupeci", "pecisa", \
- "TCXC", "THSP", "memorybank", "pchdie", \
- "Ta0P", "heatpipe", "mainboardproximity1", \
- "palmrest", "memoryproximity" }
-
-#define ASMC_MBA6_TEMPDESCS { "Enclosure Bottom 1", "Enclosure Bottom 2", "Enclosure Bottom 3", \
- "CPU Temp 1", "CPU Temp 2", "CPU Proximity", \
- "CPU Core 1", "CPU Core 2", "CPU Peci Core", "PECI SA", \
- "TCXC", "THSP", "Memory Bank A", "PCH Die", \
- "Ta0P", "Heatpipe", "Mainboard Proximity 1", \
- "Palm Rest", "Memory Proximity" }
-
-
-#define ASMC_MBA7_TEMPS { "TB0T", "TB1T", "TB2T", \
- "TC0E", "TC0F", "TC0P", \
- "TC1C", "TC2C", \
- "TCGC", "TCSA", "TCXC", \
- "THSP", "TM0P", "TPCD", \
- "TW0P" "Ta0P", "Th1H", \
- "Tm0P", "Ts0P", "Ts0S", NULL }
-
-#define ASMC_MBA7_TEMPNAMES { "enclosure1", "enclosure2", "enclosure3", \
- "cputemp1", "cputemp2", "cpuproximity", \
- "cpucore1", "cpucore2", \
- "pecigpu", "pecisa", "pecicpu", \
- "thunderboltproximity", "memorybank", "pchdie", \
- "wirelessproximity", "airflowproximity", "heatpipe", \
- "mainboardproximity", "palmrest", "memoryproximity" }
-
-#define ASMC_MBA7_TEMPDESCS { "Enclosure Bottom 1", "Enclosure Bottom 2", "Enclosure Bottom 3", \
- "CPU Temp 1", "CPU Temp 2", "CPU Proximity", \
- "CPU Core 1", "CPU Core 2", \
- "PECI GPU", "PECI SA", "PECI CPU", \
- "Thunderbolt Proximity", "Memory Bank A", "PCH Die", \
- "Wireless Proximity", "Airflow Proxmity", "Heatpipe", \
- "Mainboard Proximity", "Palm Rest", "Memory Proximity" }
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, May 20, 1:35 AM (2 h, 22 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33333572
Default Alt Text
D56405.diff (82 KB)
Attached To
Mode
D56405: asmc: replace hardcoded model table with universal probing
Attached
Detach File
Event Timeline
Log In to Comment