Lines Matching +full:smc +full:- +full:id
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
31 * Driver for Apple's System Management Console (SMC).
32 * SMC can be found on the MacBook, MacBook Pro and Mac Mini.
67 * SMC functions.
162 "MacBook1,1", "Apple SMC MacBook Core Duo",
168 "MacBook2,1", "Apple SMC MacBook Core 2 Duo",
174 "MacBook3,1", "Apple SMC MacBook Core 2 Duo",
180 "MacBook7,1", "Apple SMC MacBook Core 2 Duo (mid 2010)",
186 "MacBookPro1,1", "Apple SMC MacBook Pro Core Duo (15-inch)",
192 "MacBookPro1,2", "Apple SMC MacBook Pro Core Duo (17-inch)",
198 "MacBookPro2,1", "Apple SMC MacBook Pro Core 2 Duo (17-inch)",
204 "MacBookPro2,2", "Apple SMC MacBook Pro Core 2 Duo (15-inch)",
210 "MacBookPro3,1", "Apple SMC MacBook Pro Core 2 Duo (15-inch LED)",
216 "MacBookPro3,2", "Apple SMC MacBook Pro Core 2 Duo (17-inch HD)",
222 "MacBookPro4,1", "Apple SMC MacBook Pro Core 2 Duo (Penryn)",
228 "MacBookPro5,1", "Apple SMC MacBook Pro Core 2 Duo (2008/2009)",
234 "MacBookPro5,5", "Apple SMC MacBook Pro Core 2 Duo (Mid 2009)",
240 "MacBookPro6,2", "Apple SMC MacBook Pro (Mid 2010, 15-inch)",
246 "MacBookPro8,1", "Apple SMC MacBook Pro (early 2011, 13-inch)",
252 "MacBookPro8,2", "Apple SMC MacBook Pro (early 2011)",
258 "MacBookPro9,1", "Apple SMC MacBook Pro (mid 2012, 15-inch)",
264 "MacBookPro9,2", "Apple SMC MacBook Pro (mid 2012, 13-inch)",
270 "MacBookPro11,2", "Apple SMC MacBook Pro Retina Core i7 (2013/2014)",
276 "MacBookPro11,3", "Apple SMC MacBook Pro Retina Core i7 (2013/2014)",
282 "MacBookPro11,4", "Apple SMC MacBook Pro Retina Core i7 (mid 2015, 15-inch)",
289 "Macmini1,1", "Apple SMC Mac Mini",
298 "Macmini2,1", "Apple SMC Mac Mini 2,1",
307 "Macmini3,1", "Apple SMC Mac Mini 3,1",
314 /* The Mac Mini 4,1 (Mid-2010) has no SMS */
316 "Macmini4,1", "Apple SMC Mac mini 4,1 (Mid-2010)",
324 /* - same sensors as Mac Mini 5,2 */
326 "Macmini5,1", "Apple SMC Mac Mini 5,1",
335 "Macmini5,2", "Apple SMC Mac Mini 5,2",
343 /* - same sensors as Mac Mini 5,2 */
345 "Macmini5,3", "Apple SMC Mac Mini 5,3",
354 "Macmini7,1", "Apple SMC Mac Mini 7,1",
363 "MacPro1,1", "Apple SMC Mac Pro (Quad Core)",
370 /* Idem for the Mac Pro (8-core) */
372 "MacPro2", "Apple SMC Mac Pro (8-core)",
381 "MacPro5,1", "Apple SMC MacPro (2010)",
390 "MacPro6,1", "Apple SMC Mac Pro (2013)",
398 "MacBookAir1,1", "Apple SMC MacBook Air",
404 "MacBookAir3,1", "Apple SMC MacBook Air Core 2 Duo (Late 2010)",
410 "MacBookAir4,1", "Apple SMC Macbook Air 11-inch (Mid 2011)",
418 "MacBookAir4,2", "Apple SMC Macbook Air 13-inch (Mid 2011)",
426 "MacBookAir5,1", "Apple SMC MacBook Air 11-inch (Mid 2012)",
434 "MacBookAir5,2", "Apple SMC MacBook Air 13-inch (Mid 2012)",
441 "MacBookAir6,1", "Apple SMC MacBook Air 11-inch (Early 2013)",
448 "MacBookAir6,2", "Apple SMC MacBook Air 13-inch (Early 2013)",
455 "MacBookAir7,1", "Apple SMC MacBook Air 11-inch (Early 2015)",
462 "MacBookAir7,2", "Apple SMC MacBook Air 13-inch (Early 2015)",
551 device_set_desc(dev, model->smc_desc);
567 sc->sc_ioport = bus_alloc_resource_any(dev, SYS_RES_IOPORT,
568 &sc->sc_rid_port, RF_ACTIVE);
569 if (sc->sc_ioport == NULL) {
579 mtx_init(&sc->sc_mtx, "asmc", NULL, MTX_SPIN);
581 sc->sc_model = model;
587 sc->sc_fan_tree[0] = SYSCTL_ADD_NODE(sysctlctx,
591 for (i = 1; i <= sc->sc_nfan; i++) {
592 j = i - 1;
595 sc->sc_fan_tree[i] = SYSCTL_ADD_NODE(sysctlctx,
596 SYSCTL_CHILDREN(sc->sc_fan_tree[0]),
601 SYSCTL_CHILDREN(sc->sc_fan_tree[i]),
602 OID_AUTO, "id",
604 dev, j, model->smc_fan_id, "I",
605 "Fan ID");
608 SYSCTL_CHILDREN(sc->sc_fan_tree[i]),
611 dev, j, model->smc_fan_speed, "I",
615 SYSCTL_CHILDREN(sc->sc_fan_tree[i]),
618 dev, j, model->smc_fan_safespeed, "I",
622 SYSCTL_CHILDREN(sc->sc_fan_tree[i]),
625 dev, j, model->smc_fan_minspeed, "I",
629 SYSCTL_CHILDREN(sc->sc_fan_tree[i]),
632 dev, j, model->smc_fan_maxspeed, "I",
636 SYSCTL_CHILDREN(sc->sc_fan_tree[i]),
639 dev, j, model->smc_fan_targetspeed, "I",
646 sc->sc_temp_tree = SYSCTL_ADD_NODE(sysctlctx,
650 for (i = 0; model->smc_temps[i]; i++) {
652 SYSCTL_CHILDREN(sc->sc_temp_tree),
653 OID_AUTO, model->smc_tempnames[i],
656 model->smc_tempdescs[i]);
662 if (model->smc_light_left) {
663 sc->sc_light_tree = SYSCTL_ADD_NODE(sysctlctx,
669 SYSCTL_CHILDREN(sc->sc_light_tree),
672 dev, 0, model->smc_light_left, "I",
676 SYSCTL_CHILDREN(sc->sc_light_tree),
679 dev, 0, model->smc_light_right, "I",
683 SYSCTL_CHILDREN(sc->sc_light_tree),
687 model->smc_light_control, "I",
691 if (model->smc_sms_x == NULL)
697 sc->sc_sms_tree = SYSCTL_ADD_NODE(sysctlctx,
702 SYSCTL_CHILDREN(sc->sc_sms_tree),
705 dev, 0, model->smc_sms_x, "I",
709 SYSCTL_CHILDREN(sc->sc_sms_tree),
712 dev, 0, model->smc_sms_y, "I",
716 SYSCTL_CHILDREN(sc->sc_sms_tree),
719 dev, 0, model->smc_sms_z, "I",
732 sc->sc_sms_tq = NULL;
733 TASK_INIT(&sc->sc_sms_task, 0, asmc_sms_task, sc);
734 sc->sc_sms_tq = taskqueue_create_fast("asmc_taskq", M_WAITOK,
735 taskqueue_thread_enqueue, &sc->sc_sms_tq);
736 taskqueue_start_threads(&sc->sc_sms_tq, 1, PI_REALTIME, "%s sms taskq",
741 sc->sc_rid_irq = 0;
742 sc->sc_irq = bus_alloc_resource_any(dev, SYS_RES_IRQ,
743 &sc->sc_rid_irq, RF_ACTIVE);
744 if (sc->sc_irq == NULL) {
750 ret = bus_setup_intr(dev, sc->sc_irq,
753 dev, &sc->sc_cookie);
762 bus_release_resource(dev, SYS_RES_IRQ, sc->sc_rid_irq, sc->sc_irq);
764 bus_release_resource(dev, SYS_RES_IOPORT, sc->sc_rid_port,
765 sc->sc_ioport);
766 mtx_destroy(&sc->sc_mtx);
767 if (sc->sc_sms_tq)
768 taskqueue_free(sc->sc_sms_tq);
778 if (sc->sc_sms_tq) {
779 taskqueue_drain(sc->sc_sms_tq, &sc->sc_sms_task);
780 taskqueue_free(sc->sc_sms_tq);
782 if (sc->sc_cookie)
783 bus_teardown_intr(dev, sc->sc_irq, sc->sc_cookie);
784 if (sc->sc_irq)
785 bus_release_resource(dev, SYS_RES_IRQ, sc->sc_rid_irq,
786 sc->sc_irq);
787 if (sc->sc_ioport)
788 bus_release_resource(dev, SYS_RES_IOPORT, sc->sc_rid_port,
789 sc->sc_ioport);
790 mtx_destroy(&sc->sc_mtx);
823 if (sc->sc_model->smc_sms_x == NULL)
868 sc->sc_sms_intr_works = 0;
878 sc->sc_sms_intr_works = 1;
892 sc->sc_nfan = asmc_fan_count(dev);
893 if (sc->sc_nfan > ASMC_MAXFANS) {
896 sc->sc_nfan = ASMC_MAXFANS;
915 * We need to make sure that the SMC acks the byte sent.
936 * We need to make sure that the SMC acks the byte sent.
990 mtx_lock_spin(&sc->sc_mtx);
1018 mtx_unlock_spin(&sc->sc_mtx);
1035 mtx_lock_spin(&sc->sc_mtx);
1084 mtx_unlock_spin(&sc->sc_mtx);
1089 mtx_unlock_spin(&sc->sc_mtx);
1120 int i, error = -1, try = 0;
1123 mtx_lock_spin(&sc->sc_mtx);
1154 mtx_unlock_spin(&sc->sc_mtx);
1169 return (-1);
1183 return (-1);
1216 return (-1);
1277 if (error == 0 && req->newptr != NULL) {
1296 if (error == 0 && req->newptr != NULL) {
1315 if (error == 0 && req->newptr != NULL) {
1335 return (-1);
1347 val = asmc_temp_getvalue(dev, sc->sc_model->smc_temps[arg2]);
1385 asmc_sms_read(dev, ASMC_KEY_SMS_X, &sc->sms_rest_x);
1386 asmc_sms_read(dev, ASMC_KEY_SMS_Y, &sc->sms_rest_y);
1387 asmc_sms_read(dev, ASMC_KEY_SMS_Z, &sc->sms_rest_z);
1396 if (!sc->sc_sms_intr_works)
1399 mtx_lock_spin(&sc->sc_mtx);
1401 mtx_unlock_spin(&sc->sc_mtx);
1403 sc->sc_sms_intrtype = type;
1406 taskqueue_enqueue(sc->sc_sms_tq, &sc->sc_sms_task);
1430 if (strcmp(sc->sc_model->smc_model, "MacBookPro5,5") == 0 ||
1431 strcmp(sc->sc_model->smc_model, "MacBookPro6,2") == 0)
1446 switch (sc->sc_sms_intrtype) {
1550 if (error == 0 && req->newptr != NULL) {
1572 * This seems to be a 32 bit big endian value from buf[6] -> buf[9].
1580 * earlier SMC firmware version responses.