Home | History | Annotate | Download | only in sysmon

Lines Matching defs:sme

191 	struct sysmon_envsys *sme = NULL;
208 LIST_FOREACH(sme, &sysmon_envsys_list, sme_list) {
209 sysmon_envsys_acquire(sme, false);
210 error = sme_update_dictionary(sme);
214 sysmon_envsys_release(sme, false);
218 sysmon_envsys_release(sme, false);
275 * find the correct sme device.
277 sme = sysmon_envsys_find(devname);
278 if (!sme) {
279 DPRINTF(("%s: NULL sme\n", __func__));
293 sysmon_envsys_release(sme, false);
301 sysmon_envsys_release(sme, false);
315 error = sme_userset_dictionary(sme,
319 sysmon_envsys_release(sme, false);
327 sysmon_envsys_release(sme, false);
379 sme = sysmon_envsys_find_40(tred->sensor);
380 if (!sme)
384 tred->sensor = SME_SENSOR_IDX(sme, tred->sensor);
387 __func__, tred->sensor, oidx, sme->sme_name,
388 sme->sme_nsensors));
390 TAILQ_FOREACH(edata, &sme->sme_sensors_list, sensors_head) {
398 sysmon_envsys_release(sme, false);
403 if (tred->sensor < sme->sme_nsensors) {
404 if ((sme->sme_flags & SME_POLL_ONLY) == 0) {
405 mutex_enter(&sme->sme_mtx);
406 sysmon_envsys_refresh_sensor(sme, edata);
407 mutex_exit(&sme->sme_mtx);
447 sysmon_envsys_release(sme, false);
459 sme = sysmon_envsys_find_40(binfo->sensor);
460 if (!sme)
464 binfo->sensor = SME_SENSOR_IDX(sme, binfo->sensor);
466 TAILQ_FOREACH(edata, &sme->sme_sensors_list, sensors_head) {
474 sysmon_envsys_release(sme, false);
481 if (binfo->sensor < sme->sme_nsensors) {
491 if (strncmp(sme->sme_name, "acpi", 4) == 0)
493 "%s %s", sme->sme_name, edata->desc);
505 sysmon_envsys_release(sme, false);
526 struct sysmon_envsys *sme;
530 sme = kmem_zalloc(sizeof(*sme), KM_SLEEP);
531 TAILQ_INIT(&sme->sme_sensors_list);
532 LIST_INIT(&sme->sme_events_list);
533 mutex_init(&sme->sme_mtx, MUTEX_DEFAULT, IPL_NONE);
534 mutex_init(&sme->sme_work_mtx, MUTEX_DEFAULT, IPL_SOFTCLOCK);
535 cv_init(&sme->sme_condvar, "sme_wait");
537 return sme;
547 sysmon_envsys_destroy(struct sysmon_envsys *sme)
551 KASSERT(sme != NULL);
553 while (!TAILQ_EMPTY(&sme->sme_sensors_list)) {
554 edata = TAILQ_FIRST(&sme->sme_sensors_list);
555 TAILQ_REMOVE(&sme->sme_sensors_list, edata, sensors_head);
557 mutex_destroy(&sme->sme_mtx);
558 mutex_destroy(&sme->sme_work_mtx);
559 cv_destroy(&sme->sme_condvar);
560 kmem_free(sme, sizeof(*sme));
570 sysmon_envsys_sensor_attach(struct sysmon_envsys *sme, envsys_data_t *edata)
575 KASSERT(sme != NULL || edata != NULL);
590 mutex_enter(&sme->sme_mtx);
591 sysmon_envsys_acquire(sme, true);
592 TAILQ_FOREACH(oedata, &sme->sme_sensors_list, sensors_head) {
594 sysmon_envsys_release(sme, true);
595 mutex_exit(&sme->sme_mtx);
602 TAILQ_INSERT_TAIL(&sme->sme_sensors_list, edata, sensors_head);
607 edata->sensor = sme->sme_nsensors;
608 sme->sme_nsensors++;
609 sysmon_envsys_release(sme, true);
610 mutex_exit(&sme->sme_mtx);
626 sysmon_envsys_sensor_detach(struct sysmon_envsys *sme, envsys_data_t *edata)
632 KASSERT(sme != NULL || edata != NULL);
637 mutex_enter(&sme->sme_mtx);
638 sysmon_envsys_acquire(sme, true);
639 TAILQ_FOREACH(oedata, &sme->sme_sensors_list, sensors_head) {
647 sysmon_envsys_release(sme, true);
648 mutex_exit(&sme->sme_mtx);
657 sme_event_unregister_sensor(sme, edata);
658 mutex_enter(&sme->sme_work_mtx);
659 if (LIST_EMPTY(&sme->sme_events_list)) {
660 if (sme->sme_callout_state == SME_CALLOUT_READY)
661 sme_events_halt_callout(sme);
664 mutex_exit(&sme->sme_work_mtx);
665 TAILQ_REMOVE(&sme->sme_sensors_list, edata, sensors_head);
666 sme->sme_nsensors--;
667 sysmon_envsys_release(sme, true);
668 mutex_exit(&sme->sme_mtx);
671 sme_events_destroy(sme);
684 sysmon_envsys_register(struct sysmon_envsys *sme)
701 KASSERT(sme != NULL);
702 KASSERT(sme->sme_name != NULL);
712 if (strcmp(lsme->sme_name, sme->sme_name) == 0) {
723 if ((sme->sme_flags & SME_DISABLE_REFRESH) == 0)
724 if (!sme->sme_refresh)
730 if (TAILQ_EMPTY(&sme->sme_sensors_list)) {
732 sme->sme_name));
749 TAILQ_FOREACH(edata, &sme->sme_sensors_list, sensors_head) {
759 this_evdrv = sme_add_sensor_dictionary(sme, array,
775 sme->sme_name));
788 error = sme_add_property_dictionary(sme, array, dict2);
803 if (!prop_dictionary_set(sme_propd, sme->sme_name, array)) {
807 sme->sme_name));
814 LIST_INSERT_HEAD(&sysmon_envsys_list, sme, sme_list);
815 sme->sme_fsensor = sysmon_envsys_next_sensor_index;
816 sysmon_envsys_next_sensor_index += sme->sme_nsensors;
832 TAILQ_FOREACH(edata, &sme->sme_sensors_list, sensors_head) {
839 sme->sme_name, edata->desc);
885 if (sme->sme_flags & SME_INIT_REFRESH) {
886 sysmon_task_queue_sched(0, sme_initial_refresh, sme);
888 __func__, sme->sme_name));
896 __func__, sme->sme_name, sme->sme_nsensors, nevent));
913 sme->sme_name, error));
915 sme_event_unregister_all(sme);
916 while (!TAILQ_EMPTY(&sme->sme_sensors_list)) {
917 edata = TAILQ_FIRST(&sme->sme_sensors_list);
918 TAILQ_REMOVE(&sme->sme_sensors_list, edata, sensors_head);
977 sysmon_envsys_unregister(struct sysmon_envsys *sme)
983 KASSERT(sme != NULL);
991 sysmon_envsys_next_sensor_index -= sme->sme_nsensors;
993 if (osme->sme_fsensor >= sme->sme_fsensor)
994 osme->sme_fsensor -= sme->sme_nsensors;
996 LIST_REMOVE(sme, sme_list);
999 while ((edata = TAILQ_FIRST(&sme->sme_sensors_list)) != NULL) {
1000 sysmon_envsys_sensor_detach(sme, edata);
1006 sme_event_unregister_all(sme);
1011 array = prop_dictionary_get(sme_propd, sme->sme_name);
1014 prop_dictionary_remove(sme_propd, sme->sme_name);
1021 sysmon_envsys_destroy(sme);
1033 struct sysmon_envsys *sme;
1036 LIST_FOREACH(sme, &sysmon_envsys_list, sme_list) {
1037 if (strcmp(sme->sme_name, name) == 0) {
1038 sysmon_envsys_acquire(sme, false);
1044 return sme;
1053 struct sysmon_envsys *sme;
1056 LIST_FOREACH(sme, &sysmon_envsys_list, sme_list) {
1057 if (idx >= sme->sme_fsensor &&
1058 idx < (sme->sme_fsensor + sme->sme_nsensors)) {
1059 sysmon_envsys_acquire(sme, false);
1065 return sme;
1075 sysmon_envsys_acquire(struct sysmon_envsys *sme, bool locked)
1077 KASSERT(sme != NULL);
1080 while (sme->sme_flags & SME_FLAG_BUSY)
1081 cv_wait(&sme->sme_condvar, &sme->sme_mtx);
1082 sme->sme_flags |= SME_FLAG_BUSY;
1084 mutex_enter(&sme->sme_mtx);
1085 while (sme->sme_flags & SME_FLAG_BUSY)
1086 cv_wait(&sme->sme_condvar, &sme->sme_mtx);
1087 sme->sme_flags |= SME_FLAG_BUSY;
1088 mutex_exit(&sme->sme_mtx);
1099 sysmon_envsys_release(struct sysmon_envsys *sme, bool locked)
1101 KASSERT(sme != NULL);
1104 sme->sme_flags &= ~SME_FLAG_BUSY;
1105 cv_broadcast(&sme->sme_condvar);
1107 mutex_enter(&sme->sme_mtx);
1108 sme->sme_flags &= ~SME_FLAG_BUSY;
1109 cv_broadcast(&sme->sme_condvar);
1110 mutex_exit(&sme->sme_mtx);
1124 struct sysmon_envsys *sme = arg;
1127 mutex_enter(&sme->sme_mtx);
1128 sysmon_envsys_acquire(sme, true);
1129 TAILQ_FOREACH(edata, &sme->sme_sensors_list, sensors_head)
1130 sysmon_envsys_refresh_sensor(sme, edata);
1131 sysmon_envsys_release(sme, true);
1132 mutex_exit(&sme->sme_mtx);
1173 struct sysmon_envsys *sme;
1185 LIST_FOREACH(sme, &sysmon_envsys_list, sme_list) {
1186 sysmon_envsys_acquire(sme, false);
1187 array = prop_dictionary_get(sme_propd, sme->sme_name);
1189 TAILQ_FOREACH(edata, &sme->sme_sensors_list, sensors_head) {
1258 if (sme->sme_set_limits) {
1260 __func__, sme->sme_name, edata->desc));
1261 (*sme->sme_set_limits)(sme, edata, NULL, NULL);
1269 if (sme->sme_get_limits) {
1271 __func__, sme->sme_name, edata->desc));
1273 (*sme->sme_get_limits)(sme, edata, &lims,
1288 sme_event_unregister(sme, edata->desc,
1301 __func__, sme->sme_name, edata->desc));
1303 sme_event_register(sdict, edata, sme,
1313 sme_event_register(sdict, edata, sme,
1317 sme->sme_name, edata->desc);
1329 mutex_enter(&sme->sme_work_mtx);
1330 sme->sme_events_timeout = SME_EVENTS_DEFTIMEOUT;
1331 sme_schedule_callout(sme);
1332 mutex_exit(&sme->sme_work_mtx);
1334 sysmon_envsys_release(sme, false);
1345 sme_add_property_dictionary(struct sysmon_envsys *sme, prop_array_t array,
1374 mutex_enter(&sme->sme_work_mtx);
1375 if (sme->sme_events_timeout == 0) {
1376 sme->sme_events_timeout = SME_EVENTS_DEFTIMEOUT;
1377 sme_schedule_callout(sme);
1379 timo = sme->sme_events_timeout;
1380 mutex_exit(&sme->sme_work_mtx);
1386 if (sme->sme_class == SME_CLASS_BATTERY)
1388 else if (sme->sme_class == SME_CLASS_ACADAPTER)
1421 sme_add_sensor_dictionary(struct sysmon_envsys *sme, prop_array_t array,
1520 sme_evdrv_t->sed_sme = sme;
1547 struct sysmon_envsys *sme;
1552 LIST_FOREACH(sme, &sysmon_envsys_list, sme_list) {
1553 sysmon_envsys_acquire(sme, false);
1554 v = sme_get_max_value(sme, predicate, refresh);
1555 sysmon_envsys_release(sme, false);
1564 sme_get_max_value(struct sysmon_envsys *sme,
1575 TAILQ_FOREACH(edata, &sme->sme_sensors_list, sensors_head) {
1582 mutex_enter(&sme->sme_mtx);
1583 sysmon_envsys_refresh_sensor(sme, edata);
1584 mutex_exit(&sme->sme_mtx);
1602 sme_update_dictionary(struct sysmon_envsys *sme)
1612 array = prop_dictionary_get(sme_propd, sme->sme_name);
1614 DPRINTF(("%s: not an array (%s)\n", __func__, sme->sme_name));
1635 mutex_enter(&sme->sme_work_mtx);
1636 timo = sme->sme_events_timeout;
1637 mutex_exit(&sme->sme_work_mtx);
1648 sme->sme_name, sme->sme_nsensors));
1655 TAILQ_FOREACH(edata, &sme->sme_sensors_list, sensors_head) {
1659 mutex_enter(&sme->sme_mtx);
1660 sysmon_envsys_refresh_sensor(sme, edata);
1661 mutex_exit(&sme->sme_mtx);
1669 __func__, edata->sensor, sme->sme_name));
1822 sme_userset_dictionary(struct sysmon_envsys *sme, prop_dictionary_t udict,
1855 mutex_enter(&sme->sme_work_mtx);
1856 if (sme->sme_events_timeout != refresh_timo) {
1857 sme->sme_events_timeout = refresh_timo;
1858 sme_schedule_callout(sme);
1860 mutex_exit(&sme->sme_work_mtx);
1884 TAILQ_FOREACH(edata, &sme->sme_sensors_list, sensors_head) {
1912 for (i = 0; i < sme->sme_nsensors; i++) {
1927 mutex_enter(&sme->sme_mtx);
1932 mutex_exit(&sme->sme_mtx);
1939 mutex_exit(&sme->sme_mtx);
1949 mutex_enter(&sme->sme_mtx);
1952 mutex_exit(&sme->sme_mtx);
2048 error = sme_event_register(dict, edata, sme, &lims,
2087 struct sysmon_envsys *sme;
2091 LIST_FOREACH(sme, &sysmon_envsys_list, sme_list) {
2093 sysmon_envsys_acquire(sme, false);
2094 TAILQ_FOREACH(sensor, &sme->sme_sensors_list, sensors_head) {
2096 mutex_enter(&sme->sme_mtx);
2097 sysmon_envsys_refresh_sensor(sme, sensor);
2098 mutex_exit(&sme->sme_mtx);
2100 if (!(*func)(sme, sensor, arg))
2103 sysmon_envsys_release(sme, false);
2112 sysmon_envsys_refresh_sensor(struct sysmon_envsys *sme, envsys_data_t *edata)
2115 if ((sme->sme_flags & SME_DISABLE_REFRESH) == 0)
2116 (*sme->sme_refresh)(sme, edata);