Lines Matching refs:unitp

274 	register struct	envctrlunit *unitp;
294 if (!(unitp = ddi_get_soft_state(envctrlsoft_statep, instance)))
296 mutex_enter(&unitp->umutex);
297 if (!unitp->suspended) {
298 mutex_exit(&unitp->umutex);
301 unitp->suspended = 0;
302 unitp->initting = B_TRUE;
303 envctrl_init_bus(unitp);
304 unitp->initting = B_FALSE;
306 envctrl_ps_probe(unitp);
307 envctrl_probe_cpus(unitp);
308 mutex_exit(&unitp->umutex);
335 unitp = ddi_get_soft_state(envctrlsoft_statep, instance);
337 if (ddi_regs_map_setup(dip, 0, (caddr_t *)&unitp->bus_ctl_regs, 0,
339 &unitp->ctlr_handle) != DDI_SUCCESS) {
359 &unitp->ic_trap_cookie) != DDI_SUCCESS) {
365 mutex_init(&unitp->umutex, NULL, MUTEX_DRIVER,
366 (void *)unitp->ic_trap_cookie);
369 if (ddi_add_intr(dip, 0, &unitp->ic_trap_cookie, NULL, envctrl_bus_isr,
370 (caddr_t)unitp) != DDI_SUCCESS) {
377 if (ddi_add_intr(dip, 1, &unitp->ic_trap_cookie, NULL, envctrl_dev_isr,
378 (caddr_t)unitp) != DDI_SUCCESS) {
393 mutex_enter(&unitp->umutex);
399 unitp->activity_led_blink = B_TRUE;
400 unitp->shutdown = B_FALSE;
401 unitp->num_ps_present = 0;
402 unitp->num_encl_present = 1;
403 unitp->current_mode = ENVCTRL_NORMAL_MODE;
405 unitp->num_cpus_present = envctrl_numcpus;
407 envctrl_probe_cpus(unitp);
408 if ((unitp->cpu_pr_location[ENVCTRL_CPU0] == B_FALSE) ||
409 (unitp->cpu_pr_location[ENVCTRL_CPU1] == B_FALSE))
411 unitp->num_temps_present = 5;
413 unitp->num_temps_present = 6;
414 unitp->num_fans_present = 1;
415 unitp->dip = dip;
417 mutex_exit(&unitp->umutex);
463 mutex_enter(&unitp->umutex);
468 unitp->temp_kstats[k].type = sensor_types[i];
478 unitp->temp_kstats[k].min =
483 unitp->temp_kstats[k].warning_threshold =
488 unitp->temp_kstats[k].shutdown_threshold =
500 bcopy((caddr_t)&creg_prop[j], unitp->temp_kstats[k].label,
506 (unitp->cpu_pr_location[ENVCTRL_CPU0] ==
509 (unitp->cpu_pr_location[ENVCTRL_CPU1] == B_FALSE)))
526 unitp->initting = B_TRUE;
527 envctrl_init_bus(unitp);
529 unitp->initting = B_FALSE;
532 unitp->timeout_id = 0;
533 unitp->blink_timeout_id = 0;
535 unitp->fan_failed = 0;
536 unitp->fan_kstats.fans_ok = B_TRUE;
537 unitp->tempr_warning = 0;
539 envctrl_ps_probe(unitp);
541 unitp->initting = B_TRUE;
542 envctrl_fan_fail_service(unitp);
543 unitp->initting = B_FALSE;
549 status = envctrl_write_chip(unitp, ENVCTRL_PCF8591, EHC_DEV2, 0,
558 envctrl_add_kstats(unitp);
559 envctrl_init_encl_kstats(unitp);
560 envctrl_check_disk_kstats(unitp);
562 envctrl_update_fanspeed(unitp);
563 idle_fanspeed = unitp->fan_kstats.fanspeed;
565 if (unitp->activity_led_blink == B_TRUE) {
566 unitp->present_led_state = B_FALSE;
567 mutex_exit(&unitp->umutex);
568 envctrl_led_blink((void *)unitp);
569 mutex_enter(&unitp->umutex);
572 (void) envctrl_set_fsp(unitp, &fspval);
575 mutex_exit(&unitp->umutex);
577 envctrl_tempr_poll((void *)unitp);
591 ddi_remove_intr(dip, (uint_t)1, unitp->ic_trap_cookie);
593 ddi_remove_intr(dip, (uint_t)0, unitp->ic_trap_cookie);
596 mutex_destroy(&unitp->umutex);
599 if (unitp->ctlr_handle)
600 ddi_regs_map_free(&unitp->ctlr_handle);
612 register struct envctrlunit *unitp;
615 unitp = ddi_get_soft_state(envctrlsoft_statep, instance);
621 if (unitp->psksp != NULL) {
622 kstat_delete(unitp->psksp);
624 if (unitp->fanksp != NULL) {
625 kstat_delete(unitp->fanksp);
627 if (unitp->enclksp != NULL) {
628 kstat_delete(unitp->enclksp);
630 if (unitp->tempksp != NULL) {
631 kstat_delete(unitp->tempksp);
633 if (unitp->diskksp != NULL) {
634 kstat_delete(unitp->diskksp);
637 if (unitp->timeout_id != 0) {
638 (void) untimeout(unitp->timeout_id);
639 unitp->timeout_id = 0;
641 if (unitp->blink_timeout_id != 0) {
642 (void) untimeout(unitp->blink_timeout_id);
643 unitp->blink_timeout_id = 0;
648 ddi_remove_intr(dip, (uint_t)0, unitp->ic_trap_cookie);
649 ddi_remove_intr(dip, (uint_t)1, unitp->ic_trap_cookie);
651 ddi_regs_map_free(&unitp->ctlr_handle);
653 mutex_destroy(&unitp->umutex);
661 if (!(unitp = ddi_get_soft_state(envctrlsoft_statep, instance)))
663 mutex_enter(&unitp->umutex);
664 if (unitp->suspended) {
667 mutex_exit(&unitp->umutex);
670 unitp->suspended = 1;
671 mutex_exit(&unitp->umutex);
687 struct envctrlunit *unitp;
699 if ((unitp = (struct envctrlunit *)
702 *result = unitp->dip;
725 struct envctrlunit *unitp;
732 unitp = (struct envctrlunit *)
735 if (unitp == NULL)
741 mutex_enter(&unitp->umutex);
744 if ((unitp->oflag & FWRITE)) {
745 mutex_exit(&unitp->umutex);
748 unitp->oflag |= FWRITE;
752 mutex_exit(&unitp->umutex);
760 struct envctrlunit *unitp;
766 unitp = (struct envctrlunit *)
768 if (unitp == NULL)
771 mutex_enter(&unitp->umutex);
773 unitp->oflag = B_FALSE;
774 unitp->current_mode = ENVCTRL_NORMAL_MODE;
776 mutex_exit(&unitp->umutex);
788 struct envctrlunit *unitp;
801 unitp = (struct envctrlunit *)
827 mutex_enter(&unitp->umutex);
828 unitp->current_mode = wdval;
829 if (unitp->timeout_id != 0 &&
831 (void) untimeout(unitp->timeout_id);
832 unitp->timeout_id =
834 (caddr_t)unitp, overtemp_timeout_hz));
841 status = envctrl_write_chip(unitp,
848 driver_name, unitp->instance);
855 (void) envctrl_check_sys_temperatures(unitp);
856 unitp->current_mode = ENVCTRL_DIAG_MODE;
857 envctrl_fan_fail_service(unitp);
858 unitp->current_mode = ENVCTRL_NORMAL_MODE;
860 mutex_exit(&unitp->umutex);
866 wdval = unitp->current_mode;
877 if (unitp->current_mode == ENVCTRL_DIAG_MODE) {
878 if (unitp->timeout_id != 0) {
879 (void) untimeout(unitp->timeout_id);
880 unitp->timeout_id = 0;
882 envctrl_tempr_poll((void *)unitp);
901 mutex_enter(&unitp->umutex);
902 status = envctrl_read_chip(unitp, ENVCTRL_PCF8591,
904 mutex_exit(&unitp->umutex);
908 driver_name, unitp->instance);
925 if (unitp->current_mode == ENVCTRL_DIAG_MODE) {
937 mutex_enter(&unitp->umutex);
938 status = envctrl_set_fanspeed(unitp, &fanspeed);
943 driver_name, unitp->instance);
946 mutex_exit(&unitp->umutex);
963 mutex_enter(&unitp->umutex);
964 status = envctrl_read_chip(unitp, ENVCTRL_PCF8591,
967 mutex_exit(&unitp->umutex);
971 driver_name, unitp->instance);
986 unitp->fan_kstats.fanspeed = a_fanspeed.val;
1004 mutex_enter(&unitp->umutex);
1012 if (unitp->current_mode == ENVCTRL_NORMAL_MODE) {
1014 mutex_exit(&unitp->umutex);
1021 status = envctrl_set_fsp(unitp, &wdval);
1022 mutex_exit(&unitp->umutex);
1026 driver_name, unitp->instance);
1041 mutex_enter(&unitp->umutex);
1042 status = envctrl_get_fpm_status(unitp, &wdval);
1043 mutex_exit(&unitp->umutex);
1047 driver_name, unitp->instance);
1068 mutex_enter(&unitp->umutex);
1069 if (envctrl_set_dskled(unitp, &ledchip)) {
1072 mutex_exit(&unitp->umutex);
1085 mutex_enter(&unitp->umutex);
1086 if (envctrl_get_dskled(unitp, &ledchip)) {
1094 mutex_exit(&unitp->umutex);
1097 if (unitp->current_mode != ENVCTRL_DIAG_MODE) {
1106 mutex_enter(&unitp->umutex);
1107 status = envctrl_write_chip(unitp, temp.type, temp.chip_num,
1112 driver_name, unitp->instance);
1115 mutex_exit(&unitp->umutex);
1123 mutex_enter(&unitp->umutex);
1124 status = envctrl_read_chip(unitp, temp.type, temp.chip_num,
1129 driver_name, unitp->instance);
1132 mutex_exit(&unitp->umutex);
1148 struct envctrlunit *unitp = (struct envctrlunit *)(void *)arg;
1151 mutex_enter(&unitp->umutex);
1157 mutex_exit(&unitp->umutex);
1164 struct envctrlunit *unitp = (struct envctrlunit *)(void *)arg;
1173 mutex_enter(&unitp->umutex);
1198 status = ehc_read_pcf8574a((struct ehc_envcunit *)unitp,
1207 status = ehc_read_pcf8574a((struct ehc_envcunit *)unitp,
1225 driver_name, unitp->instance);
1226 ehc_init_pcf8584((struct ehc_envcunit *)unitp);
1227 mutex_exit(&unitp->umutex);
1241 (void) envctrl_check_sys_temperatures(unitp);
1246 envctrl_intr_latch_clr(unitp);
1253 envctrl_check_disk_kstats(unitp);
1266 envctrl_fan_fail_service(unitp);
1271 envctrl_intr_latch_clr(unitp);
1278 (void) envctrl_get_fpm_status(unitp, (uint8_t *)NULL);
1284 envctrl_PS_intr_service(unitp);
1302 driver_name, unitp->instance);
1308 mutex_exit(&unitp->umutex);
1315 envctrl_read_chip(struct envctrlunit *unitp, int type, int chip_num, int port,
1329 status = ehc_read_pcf8574a((struct ehc_envcunit *)unitp,
1333 status = ehc_read_pcf8574((struct ehc_envcunit *)unitp,
1337 status = ehc_read_pcf8591((struct ehc_envcunit *)unitp,
1349 ehc_init_pcf8584((struct ehc_envcunit *)unitp);
1359 envctrl_write_chip(struct envctrlunit *unitp, int type, int chip_num, int port,
1379 (struct ehc_envcunit *)unitp,
1383 status = ehc_write_pcf8574((struct ehc_envcunit *)unitp,
1387 status = ehc_write_pcf8591((struct ehc_envcunit *)unitp,
1400 ehc_init_pcf8584((struct ehc_envcunit *)unitp);
1411 envctrl_get_cpu_temp(struct envctrlunit *unitp, int cpunum)
1416 ASSERT(MUTEX_HELD(&unitp->umutex));
1426 status = envctrl_read_chip(unitp, ENVCTRL_PCF8591, EHC_DEV7, cpunum,
1430 driver_name, unitp->instance);
1442 struct envctrlunit *unitp = (struct envctrlunit *)arg;
1444 mutex_enter(&unitp->umutex);
1446 if (unitp->shutdown == B_TRUE) {
1453 envctrl_intr_latch_clr(unitp);
1455 envctrl_reset_dflop(unitp);
1456 envctrl_enable_devintrs(unitp);
1462 if (unitp->current_mode == ENVCTRL_DIAG_MODE) {
1467 driver_name, unitp->instance);
1470 unitp->current_mode = ENVCTRL_NORMAL_MODE;
1472 status = envctrl_check_sys_temperatures(unitp);
1476 driver_name, unitp->instance);
1480 envctrl_fan_fail_service(unitp);
1484 envctrl_ps_probe(unitp);
1487 if ((unitp->fan_failed == B_TRUE) || (unitp->tempr_warning == B_TRUE)) {
1492 if (unitp->timeout_id != 0)
1493 (void) untimeout(unitp->timeout_id);
1494 unitp->timeout_id = (timeout(envctrl_tempr_poll,
1495 (caddr_t)unitp, warning_timeout_hz));
1501 unitp->timeout_id = (timeout(envctrl_tempr_poll,
1502 (caddr_t)unitp, overtemp_timeout_hz));
1505 mutex_exit(&unitp->umutex);
1513 struct envctrlunit *unitp = (struct envctrlunit *)arg;
1515 mutex_enter(&unitp->umutex);
1517 status = envctrl_read_chip(unitp, ENVCTRL_PCF8574A, EHC_DEV6,
1521 driver_name, unitp->instance);
1523 unitp->blink_timeout_id = (timeout(envctrl_led_blink,
1524 (caddr_t)unitp, blink_timeout_hz));
1525 mutex_exit(&unitp->umutex);
1529 if (unitp->present_led_state == B_TRUE) {
1536 unitp->present_led_state = B_FALSE;
1539 unitp->present_led_state = B_TRUE;
1561 status = envctrl_write_chip(unitp, ENVCTRL_PCF8574A, EHC_DEV6,
1565 driver_name, unitp->instance);
1567 unitp->blink_timeout_id = (timeout(envctrl_led_blink,
1568 (caddr_t)unitp, blink_timeout_hz));
1569 mutex_exit(&unitp->umutex);
1574 unitp->blink_timeout_id = (timeout(envctrl_led_blink,
1575 (caddr_t)unitp, blink_timeout_hz));
1577 mutex_exit(&unitp->umutex);
1581 envctrl_check_sys_temperatures(struct envctrlunit *unitp)
1589 status = envctrl_read_chip(unitp, ENVCTRL_PCF8591, EHC_DEV2,
1593 driver_name, unitp->instance);
1597 warning_level = envctrl_check_tempr_levels(unitp, EHC_DEV2,
1608 unitp->tempr_warning = B_TRUE;
1610 unitp->tempr_warning = B_TRUE;
1612 unitp->shutdown = B_TRUE;
1618 status = envctrl_read_chip(unitp, ENVCTRL_PCF8591, EHC_DEV7,
1622 driver_name, unitp->instance);
1626 warning_level = envctrl_check_tempr_levels(unitp, EHC_DEV7,
1635 if ((warning_level == yellow) && (unitp->shutdown == B_FALSE))
1636 unitp->tempr_warning = B_TRUE;
1638 unitp->tempr_warning = B_TRUE;
1640 unitp->shutdown = B_TRUE;
1642 } else if ((level == green) && (unitp->tempr_warning == B_TRUE)) {
1650 unitp->tempr_warning = B_FALSE;
1653 status = envctrl_get_fpm_status(unitp, &fspval);
1657 driver_name, unitp->instance);
1660 if ((unitp->tempr_warning == B_TRUE) || (unitp->shutdown == B_TRUE))
1664 if (envctrl_isother_fault_led(unitp, fspval,
1672 status = envctrl_set_fsp(unitp, &fspval);
1676 driver_name, unitp->instance);
1682 if (unitp->tempr_warning == B_TRUE) {
1683 if (unitp->timeout_id != 0) {
1684 (void) untimeout(unitp->timeout_id);
1685 unitp->timeout_id = (timeout(envctrl_tempr_poll,
1686 (caddr_t)unitp, warning_timeout_hz));
1694 envctrl_check_tempr_levels(struct envctrlunit *unitp, int chip_num,
1711 unitp->fan_kstats.fanspeed = 255;
1713 unitp->fan_kstats.fanspeed = tval;
1715 unitp->fan_kstats.fanspeed, data[i]);
1722 if (unitp->cpu_pr_location[i] == B_FALSE)
1727 (j < unitp->num_temps_present))
1747 (unitp->current_mode == ENVCTRL_NORMAL_MODE)) {
1757 status = envctrl_write_chip(unitp, ENVCTRL_PCF8591,
1762 driver_name, unitp->instance);
1763 status = envctrl_read_chip(unitp, ENVCTRL_PCF8591,
1768 driver_name, unitp->instance);
1772 unitp->fan_kstats.fanspeed = 255;
1774 unitp->fan_kstats.fanspeed = tval;
1778 temp_degree_c, data[i], unitp->temp_kstats[j].label);
1780 unitp->temp_kstats[j].value = temp_degree_c;
1782 unitp->temp_kstats[j].warning_threshold) ||
1783 (temp_degree_c < unitp->temp_kstats[j].min)) {
1790 temp_degree_c, unitp->temp_kstats[j].label);
1793 unitp->temp_kstats[j].shutdown_threshold) {
1800 temp_degree_c, unitp->temp_kstats[j].label);
1812 envctrl_update_fanspeed(struct envctrlunit *unitp)
1818 status = envctrl_read_chip(unitp, ENVCTRL_PCF8591, EHC_DEV2,
1822 driver_name, unitp->instance);
1828 unitp->fan_kstats.fanspeed = 255;
1830 unitp->fan_kstats.fanspeed = tval;
1835 envctrl_fan_fail_service(struct envctrlunit *unitp)
1846 ASSERT(MUTEX_HELD(&unitp->umutex));
1851 envctrl_intr_latch_clr(unitp);
1854 status = ehc_read_pcf8574a((struct ehc_envcunit *)unitp,
1862 status = ehc_read_pcf8574a((struct ehc_envcunit *)unitp,
1874 driver_name, unitp->instance);
1875 ehc_init_pcf8584((struct ehc_envcunit *)unitp);
1883 if (unitp->fan_failed == B_TRUE) {
1884 if (unitp->current_mode == ENVCTRL_NORMAL_MODE)
1887 unitp->fan_kstats.fans_ok = B_TRUE;
1891 status = envctrl_get_fpm_status(unitp, &fpmstat);
1896 driver_name, unitp->instance);
1898 if (!(envctrl_isother_fault_led(unitp, fpmstat, 0))) {
1901 if (unitp->shutdown != B_TRUE) {
1902 status = envctrl_set_fsp(unitp, &fpmstat);
1907 driver_name, unitp->instance);
1914 unitp->fan_failed = B_FALSE;
1917 if (unitp->fan_failed == B_FALSE) {
1918 if (unitp->current_mode == ENVCTRL_NORMAL_MODE)
1921 unitp->fan_failed = B_TRUE;
1922 unitp->fan_kstats.fans_ok = B_FALSE;
1926 status = envctrl_get_fpm_status(unitp, &fpmstat);
1931 driver_name, unitp->instance);
1935 status = envctrl_set_fsp(unitp, &fpmstat);
1939 driver_name, unitp->instance);
1945 if (unitp->timeout_id != 0) {
1946 (void) untimeout(unitp->timeout_id);
1947 unitp->timeout_id =
1949 (caddr_t)unitp, warning_timeout_hz));
1968 envctrl_PS_intr_service(struct envctrlunit *unitp)
1971 ASSERT(MUTEX_HELD(&unitp->umutex));
1973 if (unitp->current_mode == ENVCTRL_DIAG_MODE) {
1983 unitp->pshotplug_id = (timeout(envctrl_pshotplug_poll,
1984 (caddr_t)unitp, pshotplug_timeout_hz));
1989 envctrl_init_bus(struct envctrlunit *unitp)
1991 ehc_init_pcf8584((struct ehc_envcunit *)unitp);
1996 envctrl_intr_latch_clr(unitp);
1998 envctrl_reset_dflop(unitp);
2000 envctrl_enable_devintrs(unitp);
2005 envctrl_reset_dflop(struct envctrlunit *unitp)
2010 ASSERT(MUTEX_HELD(&unitp->umutex));
2013 status = envctrl_write_chip(unitp, ENVCTRL_PCF8574A, EHC_DEV0,
2017 driver_name, unitp->instance);
2021 status = envctrl_write_chip(unitp, ENVCTRL_PCF8574A, EHC_DEV0,
2025 driver_name, unitp->instance);
2031 envctrl_enable_devintrs(struct envctrlunit *unitp)
2036 ASSERT(MUTEX_HELD(&unitp->umutex));
2039 status = envctrl_write_chip(unitp, ENVCTRL_PCF8574A, EHC_DEV0,
2043 driver_name, unitp->instance);
2047 status = envctrl_write_chip(unitp, ENVCTRL_PCF8574A, EHC_DEV0,
2051 driver_name, unitp->instance);
2056 envctrl_intr_latch_clr(struct envctrlunit *unitp)
2061 ASSERT(MUTEX_HELD(&unitp->umutex));
2064 status = envctrl_write_chip(unitp, ENVCTRL_PCF8574A, EHC_DEV0,
2068 driver_name, unitp->instance);
2072 status = envctrl_write_chip(unitp, ENVCTRL_PCF8574A, EHC_DEV0,
2076 driver_name, unitp->instance);
2080 /* Called with unitp mutex held */
2082 envctrl_ps_probe(struct envctrlunit *unitp)
2091 ASSERT(MUTEX_HELD(&unitp->umutex));
2093 unitp->num_ps_present = 0;
2095 status = envctrl_read_chip(unitp, ENVCTRL_PCF8574A, EHC_DEV1,
2099 driver_name, unitp->instance);
2104 unitp->ps_kstats[i].slot = -1;
2136 unitp->ps_kstats[j].slot = i;
2137 ++unitp->num_ps_present;
2148 unitp->ps_kstats[j].ps_ok = B_FALSE;
2152 unitp->ps_kstats[j].ps_ok = B_TRUE;
2192 status = envctrl_get_fpm_status(unitp, &fpmstat);
2195 driver_name, unitp->instance);
2201 if (envctrl_isother_fault_led(unitp, fpmstat,
2209 status = envctrl_set_fsp(unitp, &fpmstat);
2213 driver_name, unitp->instance);
2229 struct envctrlunit *unitp;
2239 if (unitp = (struct envctrlunit *)
2244 ASSERT(unitp);
2246 secure = unitp->encl_kstats.value;
2252 driver_name, unitp->instance);
2256 driver_name, unitp->instance);
2268 envctrl_get_fpm_status(struct envctrlunit *unitp, uint8_t *val)
2273 ASSERT(MUTEX_HELD(&unitp->umutex));
2275 status = envctrl_read_chip(unitp, ENVCTRL_PCF8574A, EHC_DEV6,
2279 driver_name, unitp->instance);
2288 unitp->encl_kstats.value = recv_data;
2294 envctrl_set_fsp(struct envctrlunit *unitp, uint8_t *val)
2301 ASSERT(MUTEX_HELD(&unitp->umutex));
2316 status = envctrl_write_chip(unitp, ENVCTRL_PCF8574A, EHC_DEV6,
2320 driver_name, unitp->instance);
2330 status = envctrl_get_fpm_status(unitp, &confirm_val);
2336 driver_name, unitp->instance);
2358 envctrl_get_dskled(struct envctrlunit *unitp, struct envctrl_chip *chip)
2362 ASSERT(MUTEX_HELD(&unitp->umutex));
2369 status = envctrl_read_chip(unitp, ENVCTRL_PCF8574A, EHC_DEV7,
2373 driver_name, unitp->instance);
2381 envctrl_set_dskled(struct envctrlunit *unitp, struct envctrl_chip *chip)
2394 ASSERT(MUTEX_HELD(&unitp->umutex));
2403 status = envctrl_read_chip(unitp, ENVCTRL_PCF8574A, EHC_DEV6,
2407 driver_name, unitp->instance);
2413 if (!(envctrl_isother_fault_led(unitp, val,
2427 status = envctrl_set_fsp(unitp, &val);
2430 driver_name, unitp->instance);
2435 status = envctrl_read_chip(unitp, ENVCTRL_PCF8574A, EHC_DEV5,
2439 driver_name, unitp->instance);
2443 envctrl_update_disk_kstats(unitp, val, ~(chip->val));
2457 status = envctrl_write_chip(unitp, ENVCTRL_PCF8574A, EHC_DEV7,
2461 driver_name, unitp->instance);
2474 status = envctrl_get_dskled(unitp, &confirm_chip);
2502 envctrl_set_fanspeed(struct envctrlunit *unitp, struct envctrl_chip *fanspeed)
2511 status = envctrl_write_chip(unitp, ENVCTRL_PCF8591,
2514 envctrl_fan_fail_service(unitp);
2517 unitp->instance);
2521 envctrl_update_fanspeed(unitp);
2522 readback_speed = unitp->fan_kstats.fanspeed;
2547 envctrl_add_kstats(struct envctrlunit *unitp)
2550 ASSERT(MUTEX_HELD(&unitp->umutex));
2552 if ((unitp->enclksp = kstat_create(ENVCTRL_MODULE_NAME, unitp->instance,
2554 sizeof (unitp->encl_kstats),
2557 driver_name, unitp->instance);
2561 unitp->enclksp->ks_update = envctrl_encl_kstat_update;
2562 unitp->enclksp->ks_private = (void *)unitp;
2563 kstat_install(unitp->enclksp);
2566 if ((unitp->fanksp = kstat_create(ENVCTRL_MODULE_NAME, unitp->instance,
2568 sizeof (unitp->fan_kstats),
2571 driver_name, unitp->instance);
2575 unitp->fanksp->ks_update = envctrl_fanstat_kstat_update;
2576 unitp->fanksp->ks_private = (void *)unitp;
2577 kstat_install(unitp->fanksp);
2579 if ((unitp->psksp = kstat_create(ENVCTRL_MODULE_NAME, unitp->instance,
2581 sizeof (unitp->ps_kstats),
2584 driver_name, unitp->instance);
2588 unitp->psksp->ks_update = envctrl_ps_kstat_update;
2589 unitp->psksp->ks_private = (void *)unitp;
2590 kstat_install(unitp->psksp);
2592 if ((unitp->tempksp = kstat_create(ENVCTRL_MODULE_NAME,
2593 unitp->instance, ENVCTRL_KSTAT_TEMPERATURE, "misc", KSTAT_TYPE_RAW,
2594 sizeof (unitp->temp_kstats),
2597 driver_name, unitp->instance);
2601 unitp->tempksp->ks_update = envctrl_temp_kstat_update;
2602 unitp->tempksp->ks_private = (void *)unitp;
2603 kstat_install(unitp->tempksp);
2605 if ((unitp->diskksp = kstat_create(ENVCTRL_MODULE_NAME,
2606 unitp->instance, ENVCTRL_KSTAT_DISK, "misc", KSTAT_TYPE_RAW,
2607 sizeof (unitp->disk_kstats),
2610 driver_name, unitp->instance);
2614 unitp->diskksp->ks_update = envctrl_disk_kstat_update;
2615 unitp->diskksp->ks_private = (void *)unitp;
2616 kstat_install(unitp->diskksp);
2623 struct envctrlunit *unitp;
2628 unitp = (struct envctrlunit *)ksp->ks_private;
2630 mutex_enter(&unitp->umutex);
2631 ASSERT(MUTEX_HELD(&unitp->umutex));
2636 mutex_exit(&unitp->umutex);
2640 unitp->psksp->ks_ndata = unitp->num_ps_present;
2641 bcopy((caddr_t)&unitp->ps_kstats, kstatp,
2642 sizeof (unitp->ps_kstats));
2644 mutex_exit(&unitp->umutex);
2651 struct envctrlunit *unitp;
2655 unitp = (struct envctrlunit *)ksp->ks_private;
2657 mutex_enter(&unitp->umutex);
2658 ASSERT(MUTEX_HELD(&unitp->umutex));
2661 mutex_exit(&unitp->umutex);
2664 unitp->fanksp->ks_ndata = unitp->num_fans_present;
2665 bcopy((caddr_t)&unitp->fan_kstats, kstatp,
2666 sizeof (unitp->fan_kstats));
2668 mutex_exit(&unitp->umutex);
2675 struct envctrlunit *unitp;
2681 unitp = (struct envctrlunit *)ksp->ks_private;
2683 mutex_enter(&unitp->umutex);
2684 ASSERT(MUTEX_HELD(&unitp->umutex));
2687 mutex_exit(&unitp->umutex);
2691 unitp->enclksp->ks_ndata = unitp->num_encl_present;
2692 status = envctrl_get_fpm_status(unitp, (uint8_t *)NULL);
2694 bcopy((caddr_t)&unitp->encl_kstats, kstatp,
2695 sizeof (unitp->encl_kstats));
2697 mutex_exit(&unitp->umutex);
2704 struct envctrlunit *unitp;
2708 unitp = (struct envctrlunit *)ksp->ks_private;
2710 mutex_enter(&unitp->umutex);
2711 ASSERT(MUTEX_HELD(&unitp->umutex));
2714 mutex_exit(&unitp->umutex);
2717 unitp->tempksp->ks_ndata = unitp->num_temps_present;
2718 bcopy((caddr_t)unitp->temp_kstats, kstatp,
2719 sizeof (unitp->temp_kstats));
2721 mutex_exit(&unitp->umutex);
2728 struct envctrlunit *unitp;
2732 unitp = (struct envctrlunit *)ksp->ks_private;
2734 mutex_enter(&unitp->umutex);
2735 ASSERT(MUTEX_HELD(&unitp->umutex));
2738 mutex_exit(&unitp->umutex);
2741 unitp->diskksp->ks_ndata = unitp->num_disks_present;
2742 bcopy((caddr_t)unitp->disk_kstats, kstatp,
2743 sizeof (unitp->disk_kstats));
2745 mutex_exit(&unitp->umutex);
2750 envctrl_init_encl_kstats(struct envctrlunit *unitp)
2755 ASSERT(MUTEX_HELD(&unitp->umutex));
2757 status = envctrl_read_chip(unitp, ENVCTRL_PCF8574A, EHC_DEV6,
2761 driver_name, unitp->instance);
2765 unitp->encl_kstats.value = val;
2769 envctrl_check_disk_kstats(struct envctrlunit *unitp)
2774 ASSERT(MUTEX_HELD(&unitp->umutex));
2776 status = envctrl_read_chip(unitp, ENVCTRL_PCF8574A, EHC_DEV5,
2780 driver_name, unitp->instance);
2783 status = envctrl_read_chip(unitp, ENVCTRL_PCF8574A, EHC_DEV7,
2787 driver_name, unitp->instance);
2790 envctrl_update_disk_kstats(unitp, diskpr, diskfl);
2795 envctrl_update_disk_kstats(struct envctrlunit *unitp, uint8_t diskpr,
2804 unitp->disk_kstats[count].disk_ok = 0;
2806 unitp->disk_kstats[count].disk_ok = 1;
2807 unitp->disk_kstats[count].slot = i;
2812 unitp->num_disks_present = count;
2816 envctrl_probe_cpus(struct envctrlunit *unitp)
2834 unitp->cpu_pr_location[instance] = B_FALSE;
2837 ddi_walk_devs(ddi_root_node(), envctrl_match_cpu, unitp);
2847 struct envctrlunit *unitp = (struct envctrlunit *)arg;
2858 driver_name, unitp->instance);
2860 unitp->cpu_pr_location[cpu_slot] = B_TRUE;
2861 unitp->num_cpus_present++;
2881 envctrl_isother_fault_led(struct envctrlunit *unitp, uint8_t fspval,
2889 if ((unitp->fan_failed == B_TRUE) && thisled != 0) {
2904 struct envctrlunit *unitp = (struct envctrlunit *)arg;
2906 mutex_enter(&unitp->umutex);
2908 envctrl_ps_probe(unitp);
2910 mutex_exit(&unitp->umutex);