aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/asmc
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/asmc')
-rw-r--r--sys/dev/asmc/asmc.c397
-rw-r--r--sys/dev/asmc/asmcvar.h104
2 files changed, 319 insertions, 182 deletions
diff --git a/sys/dev/asmc/asmc.c b/sys/dev/asmc/asmc.c
index 5d3b97a065c9..084b57331dd9 100644
--- a/sys/dev/asmc/asmc.c
+++ b/sys/dev/asmc/asmc.c
@@ -110,8 +110,8 @@ static int asmc_mbp_sysctl_light_control(SYSCTL_HANDLER_ARGS);
static int asmc_mbp_sysctl_light_left_10byte(SYSCTL_HANDLER_ARGS);
struct asmc_model {
- const char *smc_model; /* smbios.system.product env var. */
- const char *smc_desc; /* driver description */
+ const char *smc_model; /* smbios.system.product env var. */
+ const char *smc_desc; /* driver description */
/* Helper functions */
int (*smc_sms_x)(SYSCTL_HANDLER_ARGS);
@@ -134,48 +134,63 @@ struct asmc_model {
static const struct asmc_model *asmc_match(device_t dev);
-#define ASMC_SMS_FUNCS asmc_mb_sysctl_sms_x, asmc_mb_sysctl_sms_y, \
- asmc_mb_sysctl_sms_z
-
-#define ASMC_SMS_FUNCS_DISABLED NULL,NULL,NULL
-
-#define ASMC_FAN_FUNCS asmc_mb_sysctl_fanid, asmc_mb_sysctl_fanspeed, asmc_mb_sysctl_fansafespeed, \
- asmc_mb_sysctl_fanminspeed, \
- asmc_mb_sysctl_fanmaxspeed, \
- asmc_mb_sysctl_fantargetspeed
-
-#define ASMC_FAN_FUNCS2 asmc_mb_sysctl_fanid, asmc_mb_sysctl_fanspeed, NULL, \
- asmc_mb_sysctl_fanminspeed, \
- asmc_mb_sysctl_fanmaxspeed, \
- asmc_mb_sysctl_fantargetspeed
-
-#define ASMC_LIGHT_FUNCS asmc_mbp_sysctl_light_left, \
- asmc_mbp_sysctl_light_right, \
- asmc_mbp_sysctl_light_control
+#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 \
- asmc_mbp_sysctl_light_left_10byte, \
- NULL, \
- asmc_mbp_sysctl_light_control
+ .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 NULL, NULL, NULL
+#define ASMC_LIGHT_FUNCS_DISABLED \
+ .smc_light_left = NULL, \
+ .smc_light_right = NULL, \
+ .smc_light_control = NULL
static const struct asmc_model asmc_models[] = {
{
"MacBook1,1", "Apple SMC MacBook Core Duo",
- ASMC_SMS_FUNCS, ASMC_FAN_FUNCS, NULL, NULL, NULL,
+ 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, NULL, NULL, NULL,
+ 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, NULL, NULL, NULL,
+ ASMC_SMS_FUNCS, ASMC_FAN_FUNCS, ASMC_LIGHT_FUNCS_DISABLED,
ASMC_MB31_TEMPS, ASMC_MB31_TEMPNAMES, ASMC_MB31_TEMPDESCS
},
@@ -287,12 +302,19 @@ static const struct asmc_model asmc_models[] = {
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
+ },
+
/* The Mac Mini has no SMS */
{
"Macmini1,1", "Apple SMC Mac Mini",
- NULL, NULL, NULL,
+ ASMC_SMS_FUNCS_DISABLED,
ASMC_FAN_FUNCS,
- NULL, NULL, NULL,
+ ASMC_LIGHT_FUNCS_DISABLED,
ASMC_MM_TEMPS, ASMC_MM_TEMPNAMES, ASMC_MM_TEMPDESCS
},
@@ -308,9 +330,9 @@ static const struct asmc_model asmc_models[] = {
/* The Mac Mini 3,1 has no SMS */
{
"Macmini3,1", "Apple SMC Mac Mini 3,1",
- NULL, NULL, NULL,
+ ASMC_SMS_FUNCS_DISABLED,
ASMC_FAN_FUNCS,
- NULL, NULL, NULL,
+ ASMC_LIGHT_FUNCS_DISABLED,
ASMC_MM31_TEMPS, ASMC_MM31_TEMPNAMES, ASMC_MM31_TEMPDESCS
},
@@ -318,7 +340,7 @@ static const struct asmc_model asmc_models[] = {
{
"Macmini4,1", "Apple SMC Mac mini 4,1 (Mid-2010)",
ASMC_SMS_FUNCS_DISABLED,
- ASMC_FAN_FUNCS,
+ ASMC_FAN_FUNCS2,
ASMC_LIGHT_FUNCS_DISABLED,
ASMC_MM41_TEMPS, ASMC_MM41_TEMPNAMES, ASMC_MM41_TEMPDESCS
},
@@ -327,18 +349,18 @@ static const struct asmc_model asmc_models[] = {
/* - same sensors as Mac Mini 5,2 */
{
"Macmini5,1", "Apple SMC Mac Mini 5,1",
- NULL, NULL, NULL,
+ ASMC_SMS_FUNCS_DISABLED,
ASMC_FAN_FUNCS2,
- NULL, NULL, NULL,
+ 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",
- NULL, NULL, NULL,
+ ASMC_SMS_FUNCS_DISABLED,
ASMC_FAN_FUNCS2,
- NULL, NULL, NULL,
+ ASMC_LIGHT_FUNCS_DISABLED,
ASMC_MM52_TEMPS, ASMC_MM52_TEMPNAMES, ASMC_MM52_TEMPDESCS
},
@@ -346,63 +368,72 @@ static const struct asmc_model asmc_models[] = {
/* - same sensors as Mac Mini 5,2 */
{
"Macmini5,3", "Apple SMC Mac Mini 5,3",
- NULL, NULL, NULL,
+ ASMC_SMS_FUNCS_DISABLED,
ASMC_FAN_FUNCS2,
- NULL, NULL, NULL,
+ 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",
- NULL, NULL, NULL,
+ ASMC_SMS_FUNCS_DISABLED,
ASMC_FAN_FUNCS2,
- NULL, NULL, NULL,
+ 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",
- NULL, NULL, NULL,
+ ASMC_SMS_FUNCS_DISABLED,
ASMC_FAN_FUNCS2,
- NULL, NULL, NULL,
+ 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",
- NULL, NULL, NULL,
+ ASMC_SMS_FUNCS_DISABLED,
ASMC_FAN_FUNCS2,
- NULL, NULL, NULL,
+ 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)",
- NULL, NULL, NULL,
+ ASMC_SMS_FUNCS_DISABLED,
ASMC_FAN_FUNCS,
- NULL, NULL, NULL,
+ 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)",
- NULL, NULL, NULL,
+ ASMC_SMS_FUNCS_DISABLED,
ASMC_FAN_FUNCS,
- NULL, NULL, NULL,
+ ASMC_LIGHT_FUNCS_DISABLED,
ASMC_MP2_TEMPS, ASMC_MP2_TEMPNAMES, ASMC_MP2_TEMPDESCS
},
/* Idem for the MacPro 2010*/
{
"MacPro5,1", "Apple SMC MacPro (2010)",
- NULL, NULL, NULL,
+ ASMC_SMS_FUNCS_DISABLED,
ASMC_FAN_FUNCS,
- NULL, NULL, NULL,
+ ASMC_LIGHT_FUNCS_DISABLED,
ASMC_MP5_TEMPS, ASMC_MP5_TEMPNAMES, ASMC_MP5_TEMPDESCS
},
@@ -417,20 +448,20 @@ static const struct asmc_model asmc_models[] = {
{
"MacBookAir1,1", "Apple SMC MacBook Air",
- ASMC_SMS_FUNCS, ASMC_FAN_FUNCS, NULL, NULL, NULL,
+ 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, NULL, NULL, NULL,
+ 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_FAN_FUNCS2,
ASMC_LIGHT_FUNCS,
ASMC_MBA4_TEMPS, ASMC_MBA4_TEMPNAMES, ASMC_MBA4_TEMPDESCS
},
@@ -438,7 +469,7 @@ static const struct asmc_model asmc_models[] = {
{
"MacBookAir4,2", "Apple SMC Macbook Air 13-inch (Mid 2011)",
ASMC_SMS_FUNCS_DISABLED,
- ASMC_FAN_FUNCS2,
+ ASMC_FAN_FUNCS2,
ASMC_LIGHT_FUNCS,
ASMC_MBA4_TEMPS, ASMC_MBA4_TEMPNAMES, ASMC_MBA4_TEMPDESCS
},
@@ -518,9 +549,9 @@ static driver_t asmc_driver = {
#define _COMPONENT ACPI_OEM
ACPI_MODULE_NAME("ASMC")
#ifdef ASMC_DEBUG
-#define ASMC_DPRINTF(str) device_printf(dev, str)
+#define ASMC_DPRINTF(str, ...) device_printf(dev, str, ##__VA_ARGS__)
#else
-#define ASMC_DPRINTF(str)
+#define ASMC_DPRINTF(str, ...)
#endif
/* NB: can't be const */
@@ -592,7 +623,7 @@ asmc_attach(device_t dev)
return (ENOMEM);
}
- sysctlctx = device_get_sysctl_ctx(dev);
+ sysctlctx = device_get_sysctl_ctx(dev);
sysctlnode = device_get_sysctl_tree(dev);
model = asmc_match(dev);
@@ -614,57 +645,50 @@ asmc_attach(device_t dev)
name[0] = '0' + j;
name[1] = 0;
sc->sc_fan_tree[i] = SYSCTL_ADD_NODE(sysctlctx,
- SYSCTL_CHILDREN(sc->sc_fan_tree[0]),
- OID_AUTO, name, CTLFLAG_RD | CTLFLAG_MPSAFE, 0,
- "Fan Subtree");
+ SYSCTL_CHILDREN(sc->sc_fan_tree[0]), OID_AUTO, name,
+ CTLFLAG_RD | CTLFLAG_MPSAFE, 0, "Fan Subtree");
SYSCTL_ADD_PROC(sysctlctx,
SYSCTL_CHILDREN(sc->sc_fan_tree[i]),
OID_AUTO, "id",
- CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_NEEDGIANT,
- dev, j, model->smc_fan_id, "I",
- "Fan ID");
+ CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, dev, j,
+ model->smc_fan_id, "I", "Fan ID");
SYSCTL_ADD_PROC(sysctlctx,
SYSCTL_CHILDREN(sc->sc_fan_tree[i]),
OID_AUTO, "speed",
- CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_NEEDGIANT,
- dev, j, model->smc_fan_speed, "I",
- "Fan speed in RPM");
+ 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_NEEDGIANT,
- dev, j, model->smc_fan_safespeed, "I",
- "Fan safe speed in RPM");
+ CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE, dev, j,
+ model->smc_fan_safespeed, "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_NEEDGIANT,
- dev, j, model->smc_fan_minspeed, "I",
- "Fan minimum speed in RPM");
+ CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, dev, j,
+ model->smc_fan_minspeed, "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_NEEDGIANT,
- dev, j, model->smc_fan_maxspeed, "I",
- "Fan maximum speed in RPM");
+ CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, dev, j,
+ model->smc_fan_maxspeed, "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_NEEDGIANT,
- dev, j, model->smc_fan_targetspeed, "I",
- "Fan target speed in RPM");
+ CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, dev, j,
+ model->smc_fan_targetspeed, "I", "Fan target speed in RPM");
SYSCTL_ADD_PROC(sysctlctx,
SYSCTL_CHILDREN(sc->sc_fan_tree[i]),
OID_AUTO, "manual",
- CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT,
- dev, j, asmc_mb_sysctl_fanmanual, "I",
+ CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, dev, j,
+ asmc_mb_sysctl_fanmanual, "I",
"Fan manual mode (0=auto, 1=manual)");
}
@@ -679,8 +703,8 @@ asmc_attach(device_t dev)
SYSCTL_ADD_PROC(sysctlctx,
SYSCTL_CHILDREN(sc->sc_temp_tree),
OID_AUTO, model->smc_tempnames[i],
- CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_NEEDGIANT,
- dev, i, asmc_temp_sysctl, "I",
+ CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE, dev, i,
+ asmc_temp_sysctl, "I",
model->smc_tempdescs[i]);
}
@@ -696,23 +720,22 @@ asmc_attach(device_t dev)
SYSCTL_ADD_PROC(sysctlctx,
SYSCTL_CHILDREN(sc->sc_light_tree),
OID_AUTO, "left",
- CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_NEEDGIANT,
+ 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_NEEDGIANT,
- dev, 0, model->smc_light_right, "I",
+ CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE, dev, 0,
+ model->smc_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_NEEDGIANT, dev, 0,
- model->smc_light_control, "I",
+ CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_ANYBODY | CTLFLAG_MPSAFE,
+ dev, 0, model->smc_light_control, "I",
"Keyboard backlight brightness control");
}
@@ -729,21 +752,21 @@ asmc_attach(device_t dev)
SYSCTL_ADD_PROC(sysctlctx,
SYSCTL_CHILDREN(sc->sc_sms_tree),
OID_AUTO, "x",
- CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_NEEDGIANT,
+ CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE,
dev, 0, model->smc_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_NEEDGIANT,
+ CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE,
dev, 0, model->smc_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_NEEDGIANT,
+ CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE,
dev, 0, model->smc_sms_z, "I",
"Sudden Motion Sensor Z value");
@@ -767,33 +790,26 @@ asmc_attach(device_t dev)
* Allocate an IRQ for the SMS.
*/
sc->sc_rid_irq = 0;
- sc->sc_irq = bus_alloc_resource_any(dev, SYS_RES_IRQ,
- &sc->sc_rid_irq, RF_ACTIVE);
+ sc->sc_irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &sc->sc_rid_irq,
+ RF_ACTIVE);
if (sc->sc_irq == NULL) {
device_printf(dev, "unable to allocate IRQ resource\n");
ret = ENXIO;
- goto err2;
+ goto err;
}
- ret = bus_setup_intr(dev, sc->sc_irq,
- INTR_TYPE_MISC | INTR_MPSAFE,
- asmc_sms_intrfast, NULL,
- dev, &sc->sc_cookie);
-
+ ret = bus_setup_intr(dev, sc->sc_irq, INTR_TYPE_MISC | INTR_MPSAFE,
+ asmc_sms_intrfast, NULL, dev, &sc->sc_cookie);
if (ret) {
device_printf(dev, "unable to setup SMS IRQ\n");
- goto err1;
+ goto err;
}
+
nosms:
return (0);
-err1:
- bus_release_resource(dev, SYS_RES_IRQ, sc->sc_rid_irq, sc->sc_irq);
-err2:
- bus_release_resource(dev, SYS_RES_IOPORT, sc->sc_rid_port,
- sc->sc_ioport);
- mtx_destroy(&sc->sc_mtx);
- if (sc->sc_sms_tq)
- taskqueue_free(sc->sc_sms_tq);
+
+err:
+ asmc_detach(dev);
return (ret);
}
@@ -806,16 +822,25 @@ asmc_detach(device_t dev)
if (sc->sc_sms_tq) {
taskqueue_drain(sc->sc_sms_tq, &sc->sc_sms_task);
taskqueue_free(sc->sc_sms_tq);
+ sc->sc_sms_tq = NULL;
}
- if (sc->sc_cookie)
+ if (sc->sc_cookie) {
bus_teardown_intr(dev, sc->sc_irq, sc->sc_cookie);
- if (sc->sc_irq)
+ sc->sc_cookie = NULL;
+ }
+ if (sc->sc_irq) {
bus_release_resource(dev, SYS_RES_IRQ, sc->sc_rid_irq,
sc->sc_irq);
- if (sc->sc_ioport)
+ sc->sc_irq = NULL;
+ }
+ if (sc->sc_ioport) {
bus_release_resource(dev, SYS_RES_IOPORT, sc->sc_rid_port,
sc->sc_ioport);
- mtx_destroy(&sc->sc_mtx);
+ sc->sc_ioport = NULL;
+ }
+ if (mtx_initialized(&sc->sc_mtx)) {
+ mtx_destroy(&sc->sc_mtx);
+ }
return (0);
}
@@ -823,15 +848,18 @@ asmc_detach(device_t dev)
static int
asmc_resume(device_t dev)
{
- uint8_t buf[2];
- buf[0] = light_control;
- buf[1] = 0x00;
- asmc_key_write(dev, ASMC_KEY_LIGHTVALUE, buf, sizeof buf);
- return (0);
+ uint8_t buf[2];
+
+ buf[0] = light_control;
+ buf[1] = 0x00;
+ asmc_key_write(dev, ASMC_KEY_LIGHTVALUE, buf, sizeof(buf));
+
+ return (0);
}
#ifdef ASMC_DEBUG
-void asmc_dumpall(device_t dev)
+void
+asmc_dumpall(device_t dev)
{
struct asmc_softc *sc = device_get_softc(dev);
int i;
@@ -925,8 +953,9 @@ out:
nosms:
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);
+ device_printf(dev,
+ "more than %d fans were detected. Please report this.\n",
+ ASMC_MAXFANS);
sc->sc_nfan = ASMC_MAXFANS;
}
@@ -936,7 +965,8 @@ nosms:
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);
+ device_printf(dev, "number of keys: %d\n",
+ sc->sc_nkeys);
} else {
sc->sc_nkeys = 0;
}
@@ -985,12 +1015,9 @@ asmc_wait(device_t dev, uint8_t val)
#ifdef ASMC_DEBUG
sc = device_get_softc(dev);
-#endif
- val = val & ASMC_STATUS_MASK;
-#ifdef ASMC_DEBUG
- device_printf(dev, "%s failed: 0x%x, 0x%x\n", __func__, val,
- ASMC_CMDPORT_READ(sc));
+ device_printf(dev, "%s failed: 0x%x, 0x%x\n", __func__,
+ val & ASMC_STATUS_MASK, ASMC_CMDPORT_READ(sc));
#endif
return (1);
}
@@ -1000,11 +1027,12 @@ asmc_wait(device_t dev, uint8_t val)
* the acknowledgement fails.
*/
static int
-asmc_command(device_t dev, uint8_t command) {
+asmc_command(device_t dev, uint8_t command)
+{
int i;
struct asmc_softc *sc = device_get_softc(dev);
- for (i=0; i < 10; i++) {
+ for (i = 0; i < 10; i++) {
ASMC_CMDPORT_WRITE(sc, command);
if (asmc_wait_ack(dev, 0x0c, 100) == 0) {
return (0);
@@ -1047,9 +1075,10 @@ begin:
error = 0;
out:
if (error) {
- if (++try < 10) goto begin;
- device_printf(dev,"%s for key %s failed %d times, giving up\n",
- __func__, key, try);
+ if (++try < 10)
+ goto begin;
+ device_printf(dev, "%s for key %s failed %d times, giving up\n",
+ __func__, key, try);
}
mtx_unlock_spin(&sc->sc_mtx);
@@ -1115,12 +1144,12 @@ begin:
error = 0;
out:
if (error) {
- if (++try < 10) goto begin;
- device_printf(dev,"%s for key %s failed %d times, giving up\n",
- __func__, key, try);
+ if (++try < 10)
+ goto begin;
+ device_printf(dev, "%s for key %s failed %d times, giving up\n",
+ __func__, key, try);
mtx_unlock_spin(&sc->sc_mtx);
- }
- else {
+ } else {
char buf[1024];
char buf2[8];
mtx_unlock_spin(&sc->sc_mtx);
@@ -1129,16 +1158,17 @@ out:
type[5] = 0;
if (maxlen > sizeof(v)) {
device_printf(dev,
- "WARNING: cropping maxlen from %d to %zu\n",
- maxlen, sizeof(v));
+ "WARNING: cropping maxlen from %d to %zu\n", maxlen,
+ sizeof(v));
maxlen = sizeof(v);
}
for (i = 0; i < sizeof(v); i++) {
v[i] = 0;
}
asmc_key_read(dev, key, v, maxlen);
- snprintf(buf, sizeof(buf), "key %d is: %s, type %s "
- "(len %d), data", number, key, type, maxlen);
+ snprintf(buf, sizeof(buf),
+ "key %d is: %s, type %s (len %d), data",
+ number, key, type, maxlen);
for (i = 0; i < maxlen; i++) {
snprintf(buf2, sizeof(buf2), " %02x", v[i]);
strlcat(buf, buf2, sizeof(buf));
@@ -1183,15 +1213,15 @@ begin:
error = 0;
out:
if (error) {
- if (++try < 10) goto begin;
- device_printf(dev,"%s for key %s failed %d times, giving up\n",
- __func__, key, try);
+ if (++try < 10)
+ goto begin;
+ device_printf(dev, "%s for key %s failed %d times, giving up\n",
+ __func__, key, try);
}
mtx_unlock_spin(&sc->sc_mtx);
return (error);
-
}
/*
@@ -1202,7 +1232,7 @@ asmc_fan_count(device_t dev)
{
uint8_t buf[1];
- if (asmc_key_read(dev, ASMC_KEY_FANCOUNT, buf, sizeof buf) != 0)
+ if (asmc_key_read(dev, ASMC_KEY_FANCOUNT, buf, sizeof(buf)) != 0)
return (-1);
return (buf[0]);
@@ -1216,23 +1246,24 @@ asmc_fan_getvalue(device_t dev, const char *key, int fan)
char fankey[5];
snprintf(fankey, sizeof(fankey), key, fan);
- if (asmc_key_read(dev, fankey, buf, sizeof buf) != 0)
+ if (asmc_key_read(dev, fankey, buf, sizeof(buf)) != 0)
return (-1);
speed = (buf[0] << 6) | (buf[1] >> 2);
return (speed);
}
-static char*
-asmc_fan_getstring(device_t dev, const char *key, int fan, uint8_t *buf, uint8_t buflen)
+static char *
+asmc_fan_getstring(device_t dev, const char *key, int fan, uint8_t *buf,
+ uint8_t buflen)
{
char fankey[5];
- char* desc;
+ char *desc;
snprintf(fankey, sizeof(fankey), key, fan);
if (asmc_key_read(dev, fankey, buf, buflen) != 0)
return (NULL);
- desc = buf+4;
+ desc = buf + 4;
return (desc);
}
@@ -1245,11 +1276,11 @@ asmc_fan_setvalue(device_t dev, const char *key, int fan, int speed)
speed *= 4;
- buf[0] = speed>>8;
+ buf[0] = speed >> 8;
buf[1] = speed;
snprintf(fankey, sizeof(fankey), key, fan);
- if (asmc_key_write(dev, fankey, buf, sizeof buf) < 0)
+ if (asmc_key_write(dev, fankey, buf, sizeof(buf)) < 0)
return (-1);
return (0);
@@ -1258,7 +1289,7 @@ asmc_fan_setvalue(device_t dev, const char *key, int fan, int speed)
static int
asmc_mb_sysctl_fanspeed(SYSCTL_HANDLER_ARGS)
{
- device_t dev = (device_t) arg1;
+ device_t dev = (device_t)arg1;
int fan = arg2;
int error;
int32_t v;
@@ -1273,10 +1304,10 @@ static int
asmc_mb_sysctl_fanid(SYSCTL_HANDLER_ARGS)
{
uint8_t buf[16];
- device_t dev = (device_t) arg1;
+ device_t dev = (device_t)arg1;
int fan = arg2;
int error = true;
- char* desc;
+ char *desc;
desc = asmc_fan_getstring(dev, ASMC_KEY_FANID, fan, buf, sizeof(buf));
@@ -1289,7 +1320,7 @@ asmc_mb_sysctl_fanid(SYSCTL_HANDLER_ARGS)
static int
asmc_mb_sysctl_fansafespeed(SYSCTL_HANDLER_ARGS)
{
- device_t dev = (device_t) arg1;
+ device_t dev = (device_t)arg1;
int fan = arg2;
int error;
int32_t v;
@@ -1303,7 +1334,7 @@ asmc_mb_sysctl_fansafespeed(SYSCTL_HANDLER_ARGS)
static int
asmc_mb_sysctl_fanminspeed(SYSCTL_HANDLER_ARGS)
{
- device_t dev = (device_t) arg1;
+ device_t dev = (device_t)arg1;
int fan = arg2;
int error;
int32_t v;
@@ -1322,7 +1353,7 @@ asmc_mb_sysctl_fanminspeed(SYSCTL_HANDLER_ARGS)
static int
asmc_mb_sysctl_fanmaxspeed(SYSCTL_HANDLER_ARGS)
{
- device_t dev = (device_t) arg1;
+ device_t dev = (device_t)arg1;
int fan = arg2;
int error;
int32_t v;
@@ -1341,7 +1372,7 @@ asmc_mb_sysctl_fanmaxspeed(SYSCTL_HANDLER_ARGS)
static int
asmc_mb_sysctl_fantargetspeed(SYSCTL_HANDLER_ARGS)
{
- device_t dev = (device_t) arg1;
+ device_t dev = (device_t)arg1;
int fan = arg2;
int error;
int32_t v;
@@ -1360,7 +1391,7 @@ asmc_mb_sysctl_fantargetspeed(SYSCTL_HANDLER_ARGS)
static int
asmc_mb_sysctl_fanmanual(SYSCTL_HANDLER_ARGS)
{
- device_t dev = (device_t) arg1;
+ device_t dev = (device_t)arg1;
int fan = arg2;
int error;
int32_t v;
@@ -1384,7 +1415,8 @@ asmc_mb_sysctl_fanmanual(SYSCTL_HANDLER_ARGS)
if (v != 0 && v != 1)
return (EINVAL);
/* Read-modify-write of FS! bitmask */
- error = asmc_key_read(dev, ASMC_KEY_FANMANUAL, buf, sizeof(buf));
+ error = asmc_key_read(dev, ASMC_KEY_FANMANUAL, buf,
+ sizeof(buf));
if (error == 0) {
val = (buf[0] << 8) | buf[1];
@@ -1397,7 +1429,8 @@ asmc_mb_sysctl_fanmanual(SYSCTL_HANDLER_ARGS)
/* Write back */
buf[0] = val >> 8;
buf[1] = val & 0xff;
- error = asmc_key_write(dev, ASMC_KEY_FANMANUAL, buf, sizeof(buf));
+ error = asmc_key_write(dev, ASMC_KEY_FANMANUAL, buf,
+ sizeof(buf));
}
}
@@ -1415,7 +1448,7 @@ asmc_temp_getvalue(device_t dev, const char *key)
/*
* Check for invalid temperatures.
*/
- if (asmc_key_read(dev, key, buf, sizeof buf) != 0)
+ if (asmc_key_read(dev, key, buf, sizeof(buf)) != 0)
return (-1);
return (buf[0]);
@@ -1424,7 +1457,7 @@ asmc_temp_getvalue(device_t dev, const char *key)
static int
asmc_temp_sysctl(SYSCTL_HANDLER_ARGS)
{
- device_t dev = (device_t) arg1;
+ device_t dev = (device_t)arg1;
struct asmc_softc *sc = device_get_softc(dev);
int error, val;
@@ -1448,12 +1481,12 @@ asmc_sms_read(device_t dev, const char *key, int16_t *val)
case 'X':
case 'Y':
case 'Z':
- error = asmc_key_read(dev, key, buf, sizeof buf);
+ error = asmc_key_read(dev, key, buf, sizeof(buf));
break;
default:
device_printf(dev, "%s called with invalid argument %s\n",
- __func__, key);
- error = 1;
+ __func__, key);
+ error = EINVAL;
goto out;
}
*val = ((int16_t)buf[0] << 8) | buf[1];
@@ -1475,7 +1508,7 @@ static int
asmc_sms_intrfast(void *arg)
{
uint8_t type;
- device_t dev = (device_t) arg;
+ device_t dev = (device_t)arg;
struct asmc_softc *sc = device_get_softc(dev);
if (!sc->sc_sms_intr_works)
return (FILTER_HANDLED);
@@ -1548,13 +1581,13 @@ asmc_sms_task(void *arg, int pending)
static int
asmc_mb_sysctl_sms_x(SYSCTL_HANDLER_ARGS)
{
- device_t dev = (device_t) arg1;
+ device_t dev = (device_t)arg1;
int error;
int16_t val;
int32_t v;
asmc_sms_read(dev, ASMC_KEY_SMS_X, &val);
- v = (int32_t) val;
+ v = (int32_t)val;
error = sysctl_handle_int(oidp, &v, 0, req);
return (error);
@@ -1563,13 +1596,13 @@ asmc_mb_sysctl_sms_x(SYSCTL_HANDLER_ARGS)
static int
asmc_mb_sysctl_sms_y(SYSCTL_HANDLER_ARGS)
{
- device_t dev = (device_t) arg1;
+ device_t dev = (device_t)arg1;
int error;
int16_t val;
int32_t v;
asmc_sms_read(dev, ASMC_KEY_SMS_Y, &val);
- v = (int32_t) val;
+ v = (int32_t)val;
error = sysctl_handle_int(oidp, &v, 0, req);
return (error);
@@ -1578,13 +1611,13 @@ asmc_mb_sysctl_sms_y(SYSCTL_HANDLER_ARGS)
static int
asmc_mb_sysctl_sms_z(SYSCTL_HANDLER_ARGS)
{
- device_t dev = (device_t) arg1;
+ device_t dev = (device_t)arg1;
int error;
int16_t val;
int32_t v;
asmc_sms_read(dev, ASMC_KEY_SMS_Z, &val);
- v = (int32_t) val;
+ v = (int32_t)val;
error = sysctl_handle_int(oidp, &v, 0, req);
return (error);
@@ -1593,12 +1626,12 @@ asmc_mb_sysctl_sms_z(SYSCTL_HANDLER_ARGS)
static int
asmc_mbp_sysctl_light_left(SYSCTL_HANDLER_ARGS)
{
- device_t dev = (device_t) arg1;
+ device_t dev = (device_t)arg1;
uint8_t buf[6];
int error;
int32_t v;
- asmc_key_read(dev, ASMC_KEY_LIGHTLEFT, buf, sizeof buf);
+ asmc_key_read(dev, ASMC_KEY_LIGHTLEFT, buf, sizeof(buf));
v = buf[2];
error = sysctl_handle_int(oidp, &v, 0, req);
@@ -1608,12 +1641,12 @@ asmc_mbp_sysctl_light_left(SYSCTL_HANDLER_ARGS)
static int
asmc_mbp_sysctl_light_right(SYSCTL_HANDLER_ARGS)
{
- device_t dev = (device_t) arg1;
+ device_t dev = (device_t)arg1;
uint8_t buf[6];
int error;
int32_t v;
- asmc_key_read(dev, ASMC_KEY_LIGHTRIGHT, buf, sizeof buf);
+ asmc_key_read(dev, ASMC_KEY_LIGHTRIGHT, buf, sizeof(buf));
v = buf[2];
error = sysctl_handle_int(oidp, &v, 0, req);
@@ -1623,7 +1656,7 @@ asmc_mbp_sysctl_light_right(SYSCTL_HANDLER_ARGS)
static int
asmc_mbp_sysctl_light_control(SYSCTL_HANDLER_ARGS)
{
- device_t dev = (device_t) arg1;
+ device_t dev = (device_t)arg1;
uint8_t buf[2];
int error;
int v;
@@ -1637,7 +1670,7 @@ asmc_mbp_sysctl_light_control(SYSCTL_HANDLER_ARGS)
light_control = v;
buf[0] = light_control;
buf[1] = 0x00;
- asmc_key_write(dev, ASMC_KEY_LIGHTVALUE, buf, sizeof buf);
+ asmc_key_write(dev, ASMC_KEY_LIGHTVALUE, buf, sizeof(buf));
}
return (error);
}
@@ -1645,12 +1678,12 @@ asmc_mbp_sysctl_light_control(SYSCTL_HANDLER_ARGS)
static int
asmc_mbp_sysctl_light_left_10byte(SYSCTL_HANDLER_ARGS)
{
- device_t dev = (device_t) arg1;
+ device_t dev = (device_t)arg1;
uint8_t buf[10];
int error;
uint32_t v;
- asmc_key_read(dev, ASMC_KEY_LIGHTLEFT, buf, sizeof buf);
+ asmc_key_read(dev, ASMC_KEY_LIGHTLEFT, buf, sizeof(buf));
/*
* This seems to be a 32 bit big endian value from buf[6] -> buf[9].
diff --git a/sys/dev/asmc/asmcvar.h b/sys/dev/asmc/asmcvar.h
index b6d8686d9670..a6e9c75017e0 100644
--- a/sys/dev/asmc/asmcvar.h
+++ b/sys/dev/asmc/asmcvar.h
@@ -467,6 +467,41 @@ struct asmc_softc {
"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_MM_TEMPS { "TN0P", "TN1P", NULL }
#define ASMC_MM_TEMPNAMES { "northbridge1", "northbridge2" }
#define ASMC_MM_TEMPDESCS { "Northbridge Point 1", \
@@ -721,6 +756,75 @@ struct asmc_softc {
"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", \