Lines Matching defs:unitp
417 struct envctrlunit *unitp;
438 if (!(unitp = ddi_get_soft_state(envctrlsoft_statep, instance)))
440 mutex_enter(&unitp->umutex);
441 if (!unitp->suspended) {
442 mutex_exit(&unitp->umutex);
445 unitp->suspended = 0;
446 mutex_exit(&unitp->umutex);
447 unitp->initting = B_TRUE;
448 envctrl_init_bus(unitp);
449 unitp->initting = B_FALSE;
451 mutex_enter(&unitp->umutex);
452 envctrl_ps_probe(unitp);
453 envctrl_probe_cpus(unitp);
454 mutex_exit(&unitp->umutex);
472 unitp = ddi_get_soft_state(envctrlsoft_statep, instance);
474 if (ddi_regs_map_setup(dip, 0, (caddr_t *)&unitp->bus_ctl_regs, 0,
476 &unitp->ctlr_handle) != DDI_SUCCESS) {
495 &unitp->ic_trap_cookie) != DDI_SUCCESS) {
500 mutex_init(&unitp->umutex, NULL, MUTEX_DRIVER,
501 (void *)unitp->ic_trap_cookie);
504 if (ddi_add_intr(dip, 0, &unitp->ic_trap_cookie, NULL, envctrl_bus_isr,
505 (caddr_t)unitp) != DDI_SUCCESS) {
512 if (ddi_add_intr(dip, 1, &unitp->ic_trap_cookie, NULL, envctrl_dev_isr,
513 (caddr_t)unitp) != DDI_SUCCESS) {
528 mutex_enter(&unitp->umutex);
532 unitp->activity_led_blink = B_TRUE;
536 unitp->activity_led_blink = B_FALSE;
539 unitp->shutdown = B_FALSE;
540 unitp->num_ps_present = unitp->num_encl_present = 0;
541 unitp->num_fans_present = MIN_FAN_BANKS;
542 unitp->num_fans_failed = ENVCTRL_CHAR_ZERO;
543 unitp->AFB_present = B_TRUE;
544 unitp->dip = dip;
609 unitp->AFB_present = B_TRUE;
613 unitp->AFB_present = B_FALSE;
619 unitp->AFB_present = B_TRUE;
622 if (unitp->AFB_present == B_TRUE)
623 unitp->num_fans_present++;
626 mutex_exit(&unitp->umutex);
628 unitp->initting = B_TRUE;
629 envctrl_init_bus(unitp);
630 unitp->initting = B_FALSE;
633 mutex_enter(&unitp->umutex);
638 status = eHc_write_pcf8583((struct eHc_envcunit *)unitp,
645 status = eHc_write_pcf8583((struct eHc_envcunit *)unitp,
652 status = eHc_write_pcf8583((struct eHc_envcunit *)unitp,
657 unitp->timeout_id = 0;
658 unitp->blink_timeout_id = 0;
661 unitp->num_cpus_present = envctrl_numcpus;
663 envctrl_probe_cpus(unitp);
664 envctrl_ps_probe(unitp);
670 unitp->initting = B_TRUE;
671 envctrl_fan_fail_service(unitp);
672 unitp->initting = B_FALSE;
677 envctrl_add_kstats(unitp);
678 envctrl_init_fan_kstats(unitp);
679 envctrl_init_encl_kstats(unitp);
680 if (unitp->activity_led_blink == B_TRUE) {
681 unitp->present_led_state = B_FALSE;
682 mutex_exit(&unitp->umutex);
683 envctrl_led_blink((void *)unitp);
684 mutex_enter(&unitp->umutex);
687 envctrl_set_fsp(unitp, &fspval);
692 if (unitp->cpu_pr_location[i] == B_TRUE) {
693 cputemp = envctrl_get_cpu_temp(unitp, i);
694 envctrl_add_encl_kstats(unitp, ENVCTRL_ENCL_CPUTEMPR,
700 unitp->shutdown = B_TRUE;
709 cputemp = envctrl_get_cpu_temp(unitp, 0);
710 envctrl_add_encl_kstats(unitp, ENVCTRL_ENCL_CPUTEMPR, INSTANCE_0,
713 mutex_exit(&unitp->umutex);
715 envctrl_tempr_poll((void *)unitp);
729 ddi_remove_intr(dip, (uint_t)1, unitp->ic_trap_cookie);
731 ddi_remove_intr(dip, (uint_t)0, unitp->ic_trap_cookie);
734 mutex_destroy(&unitp->umutex);
737 if (unitp->ctlr_handle)
738 ddi_regs_map_free(&unitp->ctlr_handle);
750 struct envctrlunit *unitp;
753 unitp = ddi_get_soft_state(envctrlsoft_statep, instance);
759 if (unitp->psksp != NULL) {
760 kstat_delete(unitp->psksp);
762 if (unitp->fanksp != NULL) {
763 kstat_delete(unitp->fanksp);
765 if (unitp->enclksp != NULL) {
766 kstat_delete(unitp->enclksp);
769 if (unitp->timeout_id != 0) {
770 (void) untimeout(unitp->timeout_id);
771 unitp->timeout_id = 0;
773 if (unitp->blink_timeout_id != 0) {
774 (void) untimeout(unitp->blink_timeout_id);
775 unitp->blink_timeout_id = 0;
780 ddi_remove_intr(dip, (uint_t)0, unitp->ic_trap_cookie);
781 ddi_remove_intr(dip, (uint_t)1, unitp->ic_trap_cookie);
783 ddi_regs_map_free(&unitp->ctlr_handle);
785 mutex_destroy(&unitp->umutex);
793 if (!(unitp = ddi_get_soft_state(envctrlsoft_statep, instance)))
795 mutex_enter(&unitp->umutex);
796 if (unitp->suspended) {
798 mutex_exit(&unitp->umutex);
801 unitp->suspended = 1;
802 mutex_exit(&unitp->umutex);
819 struct envctrlunit *unitp;
825 if ((unitp = (struct envctrlunit *)
828 *result = unitp->dip;
851 struct envctrlunit *unitp;
858 unitp = (struct envctrlunit *)
861 if (unitp == NULL)
864 mutex_enter(&unitp->umutex);
867 if ((unitp->oflag & FWRITE)) {
868 mutex_exit(&unitp->umutex);
871 unitp->oflag |= FWRITE;
875 q->q_ptr = WR(q)->q_ptr = (caddr_t)unitp;
885 unitp->readq = RD(q);
886 unitp->writeq = WR(q);
887 unitp->msg = (mblk_t *)NULL;
889 mutex_exit(&unitp->umutex);
897 struct envctrlunit *unitp;
899 unitp = (struct envctrlunit *)q->q_ptr;
901 mutex_enter(&unitp->umutex);
903 unitp->oflag = B_FALSE;
904 unitp->current_mode = ENVCTRL_NORMAL_MODE;
910 mutex_exit(&unitp->umutex);
921 struct envctrlunit *unitp;
930 unitp = (struct envctrlunit *)q->q_ptr;
971 if (unitp->current_mode == ENVCTRL_DIAG_MODE) {
972 if (unitp->timeout_id != 0) {
973 (void) untimeout(unitp->timeout_id);
974 unitp->timeout_id = 0;
976 envctrl_tempr_poll((void *)unitp);
992 if (unitp->current_mode == ENVCTRL_DIAG_MODE &&
1002 if (unitp->current_mode == ENVCTRL_DIAG_MODE &&
1016 if (unitp->current_mode == ENVCTRL_DIAG_MODE &&
1086 mutex_enter(&unitp->umutex);
1087 if (envctrl_xmit(unitp, (caddr_t *)(void *)fanspeed,
1094 envctrl_fan_fail_service(unitp);
1095 mutex_exit(&unitp->umutex);
1098 mutex_exit(&unitp->umutex);
1104 mutex_enter(&unitp->umutex);
1112 if (unitp->current_mode == ENVCTRL_NORMAL_MODE) {
1114 mutex_exit(&unitp->umutex);
1119 envctrl_set_fsp(unitp, wdval);
1120 mutex_exit(&unitp->umutex);
1126 mutex_enter(&unitp->umutex);
1127 if (envctrl_set_dskled(unitp, ledchip)) {
1132 mutex_exit(&unitp->umutex);
1141 mutex_enter(&unitp->umutex);
1142 if (envctrl_get_dskled(unitp, ledchip)) {
1150 mutex_exit(&unitp->umutex);
1161 mutex_enter(&unitp->umutex);
1162 envctrl_recv(unitp, (caddr_t *)(void *)temp, PCF8591);
1163 mutex_exit(&unitp->umutex);
1178 mutex_enter(&unitp->umutex);
1179 envctrl_recv(unitp, (caddr_t *)(void *)a_fanspeed,
1181 mutex_exit(&unitp->umutex);
1192 mutex_enter(&unitp->umutex);
1193 envctrl_get_sys_temperatures(unitp, tempr);
1194 mutex_exit(&unitp->umutex);
1204 mutex_enter(&unitp->umutex);
1205 envctrl_reset_watchdog(unitp, wdval);
1206 mutex_exit(&unitp->umutex);
1218 *tempr = unitp->current_mode;
1228 mutex_enter(&unitp->umutex);
1229 unitp->current_mode = *wdval;
1230 if (unitp->timeout_id != 0 &&
1232 (void) untimeout(unitp->timeout_id);
1233 unitp->timeout_id =
1235 (caddr_t)unitp,
1240 envctrl_get_sys_temperatures(unitp,
1256 unitp->current_mode =
1258 envctrl_fan_fail_service(unitp);
1259 unitp->current_mode =
1262 mutex_exit(&unitp->umutex);
1296 struct envctrlunit *unitp = (struct envctrlunit *)(void *)arg;
1299 mutex_enter(&unitp->umutex);
1305 mutex_exit(&unitp->umutex);
1312 struct envctrlunit *unitp = (struct envctrlunit *)(void *)arg;
1320 mutex_enter(&unitp->umutex);
1345 status = eHc_read_pcf8574a((struct eHc_envcunit *)unitp,
1353 status = eHc_read_pcf8574a((struct eHc_envcunit *)unitp,
1375 mutex_exit(&unitp->umutex);
1376 envctrl_init_bus(unitp);
1377 mutex_enter(&unitp->umutex);
1378 envctrl_ps_probe(unitp);
1379 mutex_exit(&unitp->umutex);
1397 envctrl_PS_intr_service(unitp, PS1);
1402 envctrl_PS_intr_service(unitp, PS2);
1407 envctrl_PS_intr_service(unitp, PS3);
1421 envctrl_fan_fail_service(unitp);
1426 (void) envctrl_get_fpm_status(unitp);
1442 mutex_exit(&unitp->umutex);
1448 envctrl_init_bus(struct envctrlunit *unitp)
1456 mutex_enter(&unitp->umutex);
1458 ddi_put8(unitp->ctlr_handle,
1459 &unitp->bus_ctl_regs->s0, ENVCTRL_CHAR_ZERO);
1463 ddi_put8(unitp->ctlr_handle, &unitp->bus_ctl_regs->s1,
1465 (void) ddi_put8(unitp->ctlr_handle, &unitp->bus_ctl_regs->s0,
1469 ddi_put8(unitp->ctlr_handle,
1470 &unitp->bus_ctl_regs->s1, ENVCTRL_BUS_CLOCK0);
1474 ddi_put8(unitp->ctlr_handle,
1475 &unitp->bus_ctl_regs->s0, ENVCTRL_BUS_CLOCK1);
1478 ddi_put8(unitp->ctlr_handle,
1479 &unitp->bus_ctl_regs->s1, ENVCTRL_BUS_ESI);
1481 envctrl_stop_clock(unitp);
1498 if (unitp->initting == B_TRUE) {
1505 (unitp->AFB_present == B_FALSE))
1507 (void) envctrl_xmit(unitp, (caddr_t *)(void *)&fan,
1512 envctrl_reset_dflop(unitp);
1514 envctrl_enable_devintrs(unitp);
1516 unitp->current_mode = ENVCTRL_NORMAL_MODE;
1517 envctrl_reset_watchdog(unitp, &noval);
1519 mutex_exit(&unitp->umutex);
1523 envctrl_xmit(struct envctrlunit *unitp, caddr_t *data, int chip_type)
1533 ASSERT(MUTEX_HELD(&unitp->umutex));
1556 status = eHc_write_tda8444((struct eHc_envcunit *)unitp,
1565 mutex_exit(&unitp->umutex);
1566 envctrl_init_bus(unitp);
1567 mutex_enter(&unitp->umutex);
1581 unitp->fan_kstats[ENVCTRL_FAN_TYPE_CPU].fanspeed =
1585 unitp->fan_kstats[ENVCTRL_FAN_TYPE_PS].fanspeed =
1589 unitp->fan_kstats[ENVCTRL_FAN_TYPE_AFB].fanspeed =
1606 eHc_write_pcf8574a((struct eHc_envcunit *)unitp,
1610 status = eHc_write_pcf8574((struct eHc_envcunit *)unitp,
1620 mutex_exit(&unitp->umutex);
1621 envctrl_init_bus(unitp);
1622 mutex_enter(&unitp->umutex);
1643 envctrl_recv(struct envctrlunit *unitp, caddr_t *data, int chip_type)
1653 ASSERT(MUTEX_HELD(&unitp->umutex));
1661 status = eHc_read_pcf8591((struct eHc_envcunit *)unitp,
1676 mutex_exit(&unitp->umutex);
1677 envctrl_init_bus(unitp);
1678 mutex_enter(&unitp->umutex);
1701 status = eHc_read_pcf8574a((struct eHc_envcunit *)unitp,
1706 status = eHc_read_pcf8574((struct eHc_envcunit *)unitp,
1716 mutex_exit(&unitp->umutex);
1717 envctrl_init_bus(unitp);
1718 mutex_enter(&unitp->umutex);
1736 envctrl_get_ps_temp(struct envctrlunit *unitp, uint8_t psaddr)
1743 ASSERT(MUTEX_HELD(&unitp->umutex));
1749 status = eHc_read_pcf8591((struct eHc_envcunit *)unitp,
1781 mutex_exit(&unitp->umutex);
1782 envctrl_init_bus(unitp);
1783 mutex_enter(&unitp->umutex);
1796 envctrl_get_cpu_temp(struct envctrlunit *unitp, int cpunum)
1802 ASSERT(MUTEX_HELD(&unitp->umutex));
1815 status = eHc_read_pcf8591((struct eHc_envcunit *)unitp,
1834 mutex_exit(&unitp->umutex);
1835 envctrl_init_bus(unitp);
1836 mutex_enter(&unitp->umutex);
1849 envctrl_get_lm75_temp(struct envctrlunit *unitp)
1860 ASSERT(MUTEX_HELD(&unitp->umutex));
1862 status = eHc_read_lm75((struct eHc_envcunit *)unitp,
1901 struct envctrlunit *unitp = (struct envctrlunit *)arg;
1903 mutex_enter(&unitp->umutex);
1905 if (unitp->shutdown == B_TRUE) {
1916 if (unitp->current_mode == ENVCTRL_DIAG_MODE) {
1923 unitp->current_mode = ENVCTRL_NORMAL_MODE;
1924 envctrl_get_sys_temperatures(unitp, (uint8_t *)NULL);
1926 envctrl_fan_fail_service(unitp);
1929 unitp->timeout_id = (timeout(envctrl_tempr_poll,
1930 (caddr_t)unitp, overtemp_timeout_hz));
1932 mutex_exit(&unitp->umutex);
1939 struct envctrlunit *unitp = (struct envctrlunit *)arg;
1941 mutex_enter(&unitp->umutex);
1945 envctrl_recv(unitp, (caddr_t *)(void *)&fspchip, PCF8574);
1947 if (unitp->present_led_state == B_TRUE) {
1955 unitp->present_led_state = B_FALSE;
1958 unitp->present_led_state = B_TRUE;
1961 (void) envctrl_xmit(unitp, (caddr_t *)(void *)&fspchip, PCF8574);
1964 unitp->blink_timeout_id = (timeout(envctrl_led_blink,
1965 (caddr_t)unitp, blink_timeout_hz));
1967 mutex_exit(&unitp->umutex);
1972 envctrl_get_sys_temperatures(struct envctrlunit *unitp, uint8_t *diag_tempr)
1981 ASSERT(MUTEX_HELD(&unitp->umutex));
1997 if (unitp->current_mode == ENVCTRL_DIAG_MODE) {
1998 unitp->current_mode = ENVCTRL_NORMAL_MODE;
1999 envctrl_reset_watchdog(unitp, &noval);
2000 unitp->current_mode = ENVCTRL_DIAG_MODE;
2002 envctrl_reset_watchdog(unitp, &noval);
2011 envctrl_reset_dflop(unitp);
2013 envctrl_enable_devintrs(unitp);
2020 if (unitp->current_mode == ENVCTRL_DIAG_MODE && diag_tempr != NULL) {
2021 if (unitp->timeout_id != 0) {
2022 (void) untimeout(unitp->timeout_id);
2026 unitp->timeout_id = (timeout(envctrl_tempr_poll,
2027 (caddr_t)unitp, overtemp_timeout_hz));
2029 ambtemp = envctrl_get_lm75_temp(unitp);
2035 mutex_exit(&unitp->umutex);
2036 envctrl_init_bus(unitp);
2037 mutex_enter(&unitp->umutex);
2038 ambtemp = envctrl_get_lm75_temp(unitp);
2042 envctrl_mod_encl_kstats(unitp, ENVCTRL_ENCL_AMBTEMPR, INSTANCE_0,
2045 fspval = envctrl_get_fpm_status(unitp);
2050 unitp->current_mode == ENVCTRL_NORMAL_MODE) {
2051 unitp->shutdown = B_TRUE;
2053 if (unitp->current_mode == ENVCTRL_NORMAL_MODE) {
2059 if (envctrl_isother_fault_led(unitp, fspval,
2067 envctrl_set_fsp(unitp, &fspval);
2072 if (unitp->cpu_pr_location[i] == B_TRUE) {
2073 cputemp = envctrl_get_cpu_temp(unitp, i);
2074 envctrl_mod_encl_kstats(unitp, ENVCTRL_ENCL_CPUTEMPR,
2078 unitp->shutdown = B_TRUE;
2090 cputemp = envctrl_get_cpu_temp(unitp, 0);
2091 envctrl_mod_encl_kstats(unitp, ENVCTRL_ENCL_CPUTEMPR, 0, cputemp);
2094 fspval = envctrl_get_fpm_status(unitp);
2102 if (unitp->current_mode == ENVCTRL_DIAG_MODE && diag_tempr != NULL) {
2114 if (unitp->current_mode == ENVCTRL_NORMAL_MODE) {
2125 if (envctrl_isother_fault_led(unitp, fspval,
2133 envctrl_set_fsp(unitp, &fspval);
2140 unitp->fan_kstats[ENVCTRL_FAN_TYPE_CPU].fanspeed = fan.val;
2143 (void) envctrl_xmit(unitp, (caddr_t *)(void *)&fan, TDA8444T);
2146 if (unitp->AFB_present == B_TRUE) {
2149 unitp->fan_kstats[ENVCTRL_FAN_TYPE_AFB].fanspeed = fan.val;
2151 (void) envctrl_xmit(unitp, (caddr_t *)(void *)&fan, TDA8444T);
2160 if (unitp->ps_present[i]) {
2161 tmptemp = envctrl_get_ps_temp(unitp, psaddr[i]);
2162 unitp->ps_kstats[i].ps_tempr = tmptemp & 0xFFFF;
2168 unitp->shutdown = B_TRUE;
2180 fspval = envctrl_get_fpm_status(unitp);
2182 envctrl_set_fsp(unitp, &fspval);
2200 unitp->fan_kstats[ENVCTRL_FAN_TYPE_PS].fanspeed = fan.val;
2201 (void) envctrl_xmit(unitp, (caddr_t *)(void *)&fan, TDA8444T);
2206 envctrl_fan_fail_service(struct envctrlunit *unitp)
2220 ASSERT(MUTEX_HELD(&unitp->umutex));
2223 status = eHc_read_pcf8574a((struct eHc_envcunit *)unitp,
2234 unitp->fan_kstats[ENVCTRL_FAN_TYPE_PS].fans_ok = B_TRUE;
2235 unitp->fan_kstats[ENVCTRL_FAN_TYPE_CPU].fans_ok = B_TRUE;
2236 unitp->fan_kstats[ENVCTRL_FAN_TYPE_AFB].fans_ok = B_TRUE;
2237 unitp->fan_kstats[ENVCTRL_FAN_TYPE_PS].fanflt_num = 0;
2238 unitp->fan_kstats[ENVCTRL_FAN_TYPE_CPU].fanflt_num = 0;
2239 unitp->fan_kstats[ENVCTRL_FAN_TYPE_AFB].fanflt_num = 0;
2240 unitp->num_fans_failed = 0;
2241 fpmstat = envctrl_get_fpm_status(unitp);
2242 if (!(envctrl_isother_fault_led(unitp, fpmstat, 0))) {
2245 if (unitp->shutdown != B_TRUE) {
2246 envctrl_set_fsp(unitp, &fpmstat);
2264 unitp->fan_kstats[fantype].fans_ok = B_FALSE;
2265 unitp->fan_kstats[fantype].fanflt_num = psfanflt - 1;
2267 unitp->current_mode == ENVCTRL_NORMAL_MODE) {
2272 unitp->fan_kstats[fantype].fans_ok = B_TRUE;
2273 unitp->fan_kstats[fantype].fanflt_num = 0;
2289 unitp->fan_kstats[fantype].fans_ok = B_FALSE;
2290 unitp->fan_kstats[fantype].fanflt_num = cpufanflt - 1;
2292 unitp->current_mode == ENVCTRL_NORMAL_MODE) {
2297 unitp->fan_kstats[fantype].fans_ok = B_TRUE;
2298 unitp->fan_kstats[fantype].fanflt_num = 0;
2302 (unitp->AFB_present == B_TRUE)) {
2311 unitp->fan_kstats[ENVCTRL_FAN_TYPE_AFB].fans_ok
2313 unitp->fan_kstats[ENVCTRL_FAN_TYPE_AFB].fanflt_num =
2315 if (unitp->current_mode == ENVCTRL_NORMAL_MODE) {
2326 unitp->num_fans_failed != 0) {
2327 fpmstat = envctrl_get_fpm_status(unitp);
2328 if (!(envctrl_isother_fault_led(unitp,
2332 envctrl_set_fsp(unitp, &fpmstat);
2334 fpmstat = envctrl_get_fpm_status(unitp);
2336 envctrl_set_fsp(unitp, &fpmstat);
2339 if (unitp->AFB_present == B_FALSE) {
2344 (status != DDI_SUCCESS)) && !unitp->initting &&
2345 unitp->current_mode == ENVCTRL_NORMAL_MODE) {
2358 envctrl_get_sys_temperatures(unitp,
2363 unitp->shutdown = B_TRUE;
2368 unitp->num_fans_failed = (psfanflt + cpufanflt + afbfanflt);
2385 envctrl_PS_intr_service(struct envctrlunit *unitp, uint8_t psaddr)
2390 ASSERT(MUTEX_HELD(&unitp->umutex));
2392 if (unitp->current_mode == ENVCTRL_DIAG_MODE) {
2397 status = eHc_read_pcf8574a((struct eHc_envcunit *)unitp,
2405 mutex_exit(&unitp->umutex);
2406 envctrl_init_bus(unitp);
2407 mutex_enter(&unitp->umutex);
2421 unitp->pshotplug_id = (timeout(envctrl_pshotplug_poll,
2422 (caddr_t)unitp, pshotplug_timeout_hz));
2428 envctrl_reset_dflop(struct envctrlunit *unitp)
2432 ASSERT(MUTEX_HELD(&unitp->umutex));
2446 (void) envctrl_xmit(unitp, (caddr_t *)(void *)&initval, PCF8574);
2449 (void) envctrl_xmit(unitp, (caddr_t *)(void *)&initval, PCF8574);
2453 envctrl_add_encl_kstats(struct envctrlunit *unitp, int type,
2459 ASSERT(MUTEX_HELD(&unitp->umutex));
2462 if (unitp->encl_kstats[i].instance == I2C_NODEV) {
2463 unitp->encl_kstats[i].instance = instance;
2464 unitp->encl_kstats[i].type = type;
2465 unitp->encl_kstats[i].value = val;
2470 unitp->num_encl_present++;
2475 envctrl_enable_devintrs(struct envctrlunit *unitp)
2479 ASSERT(MUTEX_HELD(&unitp->umutex));
2493 (void) envctrl_xmit(unitp, (caddr_t *)(void *)&initval, PCF8574);
2500 (void) envctrl_xmit(unitp, (caddr_t *)(void *)&initval, PCF8574);
2505 envctrl_stop_clock(struct envctrlunit *unitp)
2519 ASSERT(MUTEX_HELD(&unitp->umutex));
2524 status = eHc_write_pcf8583((struct eHc_envcunit *)unitp,
2531 envctrl_reset_watchdog(struct envctrlunit *unitp, uint8_t *wdval)
2539 ASSERT(MUTEX_HELD(&unitp->umutex));
2542 envctrl_stop_clock(unitp);
2549 status = eHc_write_pcf8583((struct eHc_envcunit *)unitp,
2562 if (unitp->current_mode == ENVCTRL_DIAG_MODE) {
2563 if (unitp->timeout_id != 0) {
2564 (void) untimeout(unitp->timeout_id);
2565 unitp->timeout_id = 0;
2566 unitp->timeout_id = (timeout(envctrl_tempr_poll,
2567 (caddr_t)unitp, overtemp_timeout_hz));
2575 status = eHc_write_pcf8583((struct eHc_envcunit *)unitp,
2595 if (unitp->current_mode == ENVCTRL_DIAG_MODE) {
2611 status = eHc_write_pcf8583((struct eHc_envcunit *)unitp,
2624 status = eHc_write_pcf8583((struct eHc_envcunit *)unitp,
2633 envctrl_ps_probe(struct envctrlunit *unitp)
2644 ASSERT(MUTEX_HELD(&unitp->umutex));
2646 unitp->num_ps_present = 0;
2649 unitp->ps_present[i] = B_FALSE;
2650 unitp->ps_kstats[i].ps_rating = 0;
2651 unitp->ps_kstats[i].ps_tempr = 0;
2669 status = eHc_read_pcf8574a((struct eHc_envcunit *)unitp,
2677 mutex_exit(&unitp->umutex);
2678 envctrl_init_bus(unitp);
2679 mutex_enter(&unitp->umutex);
2714 unitp->ps_present[i] = B_TRUE;
2716 unitp->ps_kstats[i].instance = i;
2717 unitp->ps_kstats[i].ps_tempr = ENVCTRL_INIT_TEMPR;
2718 ++unitp->num_ps_present;
2727 unitp->ps_kstats[i].ps_rating = ENVCTRL_PS_550;
2730 unitp->ps_kstats[i].ps_rating = ENVCTRL_PS_650;
2735 unitp->ps_kstats[i].ps_ok = B_FALSE;
2738 unitp->ps_kstats[i].ps_ok = B_TRUE;
2743 unitp->ps_kstats[i].limit_ok = B_FALSE;
2746 unitp->ps_kstats[i].limit_ok = B_TRUE;
2751 unitp->ps_kstats[i].curr_share_ok = B_FALSE;
2754 unitp->ps_kstats[i].curr_share_ok = B_TRUE;
2778 fpmstat = envctrl_get_fpm_status(unitp);
2782 if (envctrl_isother_fault_led(unitp, fpmstat,
2791 envctrl_set_fsp(unitp, &fpmstat);
2798 if (unitp->current_mode == ENVCTRL_NORMAL_MODE) {
2799 envctrl_get_sys_temperatures(unitp, (uint8_t *)NULL);
2809 struct envctrlunit *unitp;
2819 if (unitp = (struct envctrlunit *)
2824 ASSERT(unitp);
2827 if ((unitp->encl_kstats[i].type == ENVCTRL_ENCL_FSP) &&
2828 (unitp->encl_kstats[i].instance != I2C_NODEV)) {
2829 secure = unitp->encl_kstats[i].value;
2855 envctrl_get_fpm_status(struct envctrlunit *unitp)
2860 ASSERT(MUTEX_HELD(&unitp->umutex));
2863 status = eHc_read_pcf8574a((struct eHc_envcunit *)unitp,
2877 mutex_exit(&unitp->umutex);
2878 envctrl_init_bus(unitp);
2879 mutex_enter(&unitp->umutex);
2886 envctrl_mod_encl_kstats(unitp, ENVCTRL_ENCL_FSP,
2893 envctrl_set_fsp(struct envctrlunit *unitp, uint8_t *val)
2897 ASSERT(MUTEX_HELD(&unitp->umutex));
2909 (void) envctrl_xmit(unitp, (caddr_t *)(void *)&chip, PCF8574);
2914 envctrl_get_dskled(struct envctrlunit *unitp, struct envctrl_pcf8574_chip *chip)
2918 ASSERT(MUTEX_HELD(&unitp->umutex));
2927 envctrl_recv(unitp, (caddr_t *)(void *)chip, PCF8574);
2934 envctrl_set_dskled(struct envctrlunit *unitp, struct envctrl_pcf8574_chip *chip)
2949 ASSERT(MUTEX_HELD(&unitp->umutex));
2975 envctrl_recv(unitp, (caddr_t *)(void *)&backchip, PCF8574);
2986 envctrl_recv(unitp, (caddr_t *)(void *)&fspchip, PCF8574);
2989 if (!(envctrl_isother_fault_led(unitp, fspchip.val & 0xFF,
3004 (void) envctrl_xmit(unitp, (caddr_t *)(void *)&fspchip, PCF8574);
3014 envctrl_mod_encl_kstats(unitp, ENVCTRL_ENCL_BACKPLANE4,
3018 envctrl_mod_encl_kstats(unitp, ENVCTRL_ENCL_BACKPLANE8,
3032 (void) envctrl_xmit(unitp, (caddr_t *)(void *)chip, PCF8574);
3037 envctrl_add_kstats(struct envctrlunit *unitp)
3040 ASSERT(MUTEX_HELD(&unitp->umutex));
3042 if ((unitp->enclksp = kstat_create(ENVCTRL_MODULE_NAME, unitp->instance,
3044 sizeof (unitp->encl_kstats),
3047 unitp->instance);
3051 unitp->enclksp->ks_update = envctrl_encl_kstat_update;
3052 unitp->enclksp->ks_private = (void *)unitp;
3053 kstat_install(unitp->enclksp);
3056 if ((unitp->fanksp = kstat_create(ENVCTRL_MODULE_NAME, unitp->instance,
3058 sizeof (unitp->fan_kstats),
3061 unitp->instance);
3065 unitp->fanksp->ks_update = envctrl_fanstat_kstat_update;
3066 unitp->fanksp->ks_private = (void *)unitp;
3067 kstat_install(unitp->fanksp);
3069 if ((unitp->psksp = kstat_create(ENVCTRL_MODULE_NAME, unitp->instance,
3071 sizeof (unitp->ps_kstats),
3074 unitp->instance);
3078 unitp->psksp->ks_update = envctrl_ps_kstat_update;
3079 unitp->psksp->ks_private = (void *)unitp;
3080 kstat_install(unitp->psksp);
3087 struct envctrlunit *unitp;
3092 unitp = (struct envctrlunit *)ksp->ks_private;
3094 mutex_enter(&unitp->umutex);
3095 ASSERT(MUTEX_HELD(&unitp->umutex));
3103 unitp->psksp->ks_ndata = unitp->num_ps_present;
3104 bcopy(&unitp->ps_kstats, kstatp, sizeof (unitp->ps_kstats));
3106 mutex_exit(&unitp->umutex);
3112 struct envctrlunit *unitp;
3116 unitp = (struct envctrlunit *)ksp->ks_private;
3118 mutex_enter(&unitp->umutex);
3119 ASSERT(MUTEX_HELD(&unitp->umutex));
3124 unitp->fanksp->ks_ndata = unitp->num_fans_present;
3125 bcopy(unitp->fan_kstats, kstatp, sizeof (unitp->fan_kstats));
3127 mutex_exit(&unitp->umutex);
3134 struct envctrlunit *unitp;
3139 unitp = (struct envctrlunit *)ksp->ks_private;
3141 mutex_enter(&unitp->umutex);
3142 ASSERT(MUTEX_HELD(&unitp->umutex));
3148 unitp->enclksp->ks_ndata = unitp->num_encl_present;
3149 (void) envctrl_get_fpm_status(unitp);
3151 bcopy(unitp->encl_kstats, kstatp, sizeof (unitp->encl_kstats));
3153 mutex_exit(&unitp->umutex);
3158 * called with unitp lock held
3162 envctrl_init_fan_kstats(struct envctrlunit *unitp)
3166 ASSERT(MUTEX_HELD(&unitp->umutex));
3168 for (i = 0; i < unitp->num_fans_present; i++) {
3169 unitp->fan_kstats[i].instance = 0;
3170 unitp->fan_kstats[i].type = 0;
3171 unitp->fan_kstats[i].fans_ok = B_TRUE;
3172 unitp->fan_kstats[i].fanflt_num = B_FALSE;
3173 unitp->fan_kstats[i].fanspeed = B_FALSE;
3176 unitp->fan_kstats[ENVCTRL_FAN_TYPE_PS].type = ENVCTRL_FAN_TYPE_PS;
3177 unitp->fan_kstats[ENVCTRL_FAN_TYPE_CPU].type = ENVCTRL_FAN_TYPE_CPU;
3178 if (unitp->AFB_present == B_TRUE)
3179 unitp->fan_kstats[ENVCTRL_FAN_TYPE_AFB].type =
3184 envctrl_init_encl_kstats(struct envctrlunit *unitp)
3193 ASSERT(MUTEX_HELD(&unitp->umutex));
3196 unitp->encl_kstats[i].instance = I2C_NODEV;
3213 envctrl_recv(unitp, (caddr_t *)(void *)&chip, PCF8574);
3215 envctrl_add_encl_kstats(unitp, ENVCTRL_ENCL_FSP, INSTANCE_0,
3218 val = envctrl_get_lm75_temp(unitp) & 0xFF;
3219 envctrl_add_encl_kstats(unitp, ENVCTRL_ENCL_AMBTEMPR, INSTANCE_0, val);
3221 if (ddi_prop_lookup_int_array(DDI_DEV_T_ANY, unitp->dip,
3236 envctrl_recv(unitp, (caddr_t *)(void *)&chip, PCF8574);
3237 envctrl_add_encl_kstats(unitp, ENVCTRL_ENCL_BACKPLANE4,
3242 envctrl_recv(unitp, (caddr_t *)(void *)&chip, PCF8574);
3243 envctrl_add_encl_kstats(unitp, ENVCTRL_ENCL_BACKPLANE8,
3253 envctrl_mod_encl_kstats(struct envctrlunit *unitp, int type,
3259 ASSERT(MUTEX_HELD(&unitp->umutex));
3262 if (unitp->encl_kstats[i].instance == instance &&
3263 unitp->encl_kstats[i].type == type) {
3264 unitp->encl_kstats[i].value = val;
3272 envctrl_probe_cpus(struct envctrlunit *unitp)
3290 unitp->cpu_pr_location[instance] = B_FALSE;
3293 ddi_walk_devs(ddi_root_node(), envctrl_match_cpu, unitp);
3303 struct envctrlunit *unitp = (struct envctrlunit *)arg;
3314 unitp->cpu_pr_location[cpu_slot] = B_TRUE;
3315 unitp->num_cpus_present++;
3335 envctrl_isother_fault_led(struct envctrlunit *unitp, uint8_t fspval,
3343 if (unitp->num_fans_failed > 0 && thisled != 0) {
3358 struct envctrlunit *unitp = (struct envctrlunit *)arg;
3360 mutex_enter(&unitp->umutex);
3362 envctrl_ps_probe(unitp);
3364 mutex_exit(&unitp->umutex);