Lines Matching refs:ssp

95 static int bscv_tryenter(bscv_soft_state_t *ssp);
159 static void bscv_event_process(bscv_soft_state_t *ssp, boolean_t);
206 static void bscv_write_sig(bscv_soft_state_t *ssp, bscv_sig_t s);
209 static void bscv_setup_watchdog(bscv_soft_state_t *ssp);
493 bscv_soft_state_t *ssp; in bscv_getinfo() local
507 ssp = ddi_get_soft_state(bscv_statep, instance); in bscv_getinfo()
508 if (ssp == NULL) in bscv_getinfo()
510 *result = (void *) ssp->dip; in bscv_getinfo()
602 bscv_soft_state_t *ssp; in bscv_attach() local
616 ssp = ddi_get_soft_state(bscv_statep, instance); in bscv_attach()
618 ssp->progress = 0; in bscv_attach()
620 ssp->dip = dip; in bscv_attach()
621 ssp->instance = instance; in bscv_attach()
622 ssp->event_waiting = B_FALSE; in bscv_attach()
623 ssp->status_change = B_FALSE; in bscv_attach()
624 ssp->nodename_change = B_FALSE; in bscv_attach()
625 ssp->cap0 = 0; in bscv_attach()
626 ssp->cap1 = 0; in bscv_attach()
627 ssp->cap2 = 0; in bscv_attach()
628 ssp->prog_mode_only = B_FALSE; in bscv_attach()
629 ssp->programming = B_FALSE; in bscv_attach()
630 ssp->cssp_prog = B_FALSE; in bscv_attach()
631 ssp->task_flags = 0; in bscv_attach()
632 ssp->debug = ddi_prop_get_int(DDI_DEV_T_ANY, dip, in bscv_attach()
634 ssp->majornum = ddi_driver_major(dip); in bscv_attach()
635 ssp->minornum = BSCV_INST_TO_MINOR(instance); in bscv_attach()
637 ssp->last_nodename[0] = '\0'; in bscv_attach()
644 mutex_init(&ssp->cmd_mutex, NULL, MUTEX_DRIVER, NULL); in bscv_attach()
646 mutex_init(&ssp->task_mu, NULL, MUTEX_DRIVER, NULL); in bscv_attach()
647 cv_init(&ssp->task_cv, NULL, CV_DRIVER, NULL); in bscv_attach()
648 cv_init(&ssp->task_evnt_cv, NULL, CV_DRIVER, NULL); in bscv_attach()
649 mutex_init(&ssp->prog_mu, NULL, MUTEX_DRIVER, NULL); in bscv_attach()
650 ssp->progress |= BSCV_LOCKS; in bscv_attach()
652 BSCV_TRACE(ssp, 'A', "bscv_attach", in bscv_attach()
657 if (bscv_map_regs(ssp) != DDI_SUCCESS) { in bscv_attach()
658 (void) bscv_cleanup(ssp); in bscv_attach()
661 ssp->progress |= BSCV_MAPPED_REGS; in bscv_attach()
665 bscv_map_chan_logical_physical(ssp); in bscv_attach()
667 bscv_enter(ssp); in bscv_attach()
669 bscv_leave_programming_mode(ssp, B_FALSE); in bscv_attach()
671 if (bscv_attach_common(ssp) == DDI_FAILURE) { in bscv_attach()
672 bscv_exit(ssp); in bscv_attach()
673 (void) bscv_cleanup(ssp); in bscv_attach()
686 bscv_exit(ssp); in bscv_attach()
691 if (ddi_create_minor_node(ssp->dip, "lom", S_IFCHR, in bscv_attach()
694 (void) bscv_cleanup(ssp); in bscv_attach()
697 BSCV_TRACE(ssp, 'A', "bscv_attach", in bscv_attach()
699 ssp->progress |= BSCV_NODES; in bscv_attach()
701 if (!ssp->prog_mode_only) in bscv_attach()
702 bscv_start_event_daemon(ssp); in bscv_attach()
721 ssp->callb_id = callb_add(bscv_panic_callback, in bscv_attach()
722 (void *)ssp, CB_CL_PANIC, ""); in bscv_attach()
725 (void) bscv_set_watchdog_timer(ssp, in bscv_attach()
727 bscv_enter(ssp); in bscv_attach()
728 bscv_setup_watchdog(ssp); /* starts cyclic callback */ in bscv_attach()
729 bscv_exit(ssp); in bscv_attach()
768 bscv_soft_state_t *ssp; in bscv_quiesce() local
773 ssp = ddi_get_soft_state(bscv_statep, instance); in bscv_quiesce()
774 if (ssp == NULL) { in bscv_quiesce()
782 bscv_full_stop(ssp); in bscv_quiesce()
808 bscv_soft_state_t *ssp; in bscv_open() local
812 ssp = ddi_get_soft_state(bscv_statep, instance); in bscv_open()
813 if (ssp == NULL) { in bscv_open()
816 BSCV_TRACE(ssp, 'O', "bscv_open", "instance 0x%x", instance); in bscv_open()
839 bscv_soft_state_t *ssp; in bscv_close() local
843 ssp = ddi_get_soft_state(bscv_statep, instance); in bscv_close()
844 if (ssp == NULL) { in bscv_close()
847 BSCV_TRACE(ssp, 'O', "bscv_close", "instance 0x%x", instance); in bscv_close()
853 bscv_map_regs(bscv_soft_state_t *ssp) in bscv_map_regs() argument
860 ASSERT(ssp); in bscv_map_regs()
862 ssp->nchannels = 0; in bscv_map_regs()
868 retval = ddi_prop_lookup_int_array(DDI_DEV_T_ANY, ssp->dip, in bscv_map_regs()
877 BSCV_TRACE(ssp, 'A', "bscv_map_regs", "lookup reg returned" in bscv_map_regs()
881 BSCV_TRACE(ssp, 'A', "bscv_map_regs", "nelements %d not" in bscv_map_regs()
885 BSCV_TRACE(ssp, 'A', "bscv_map_regs", "nelements %d too large" in bscv_map_regs()
889 BSCV_TRACE(ssp, 'A', "bscv_map_regs", "nelements %d too small" in bscv_map_regs()
895 ssp->nchannels = nelements / LOMBUS_REGSPEC_SIZE; in bscv_map_regs()
897 ssp->attr.devacc_attr_version = DDI_DEVICE_ATTR_V0; in bscv_map_regs()
898 ssp->attr.devacc_attr_endian_flags = DDI_STRUCTURE_LE_ACC; in bscv_map_regs()
899 ssp->attr.devacc_attr_dataorder = DDI_STRICTORDER_ACC; in bscv_map_regs()
901 for (i = 0; i < ssp->nchannels; i++) { in bscv_map_regs()
902 retval = ddi_regs_map_setup(ssp->dip, i, in bscv_map_regs()
903 (caddr_t *)&ssp->channel[i].regs, in bscv_map_regs()
904 0, 0, &ssp->attr, &ssp->channel[i].handle); in bscv_map_regs()
906 BSCV_TRACE(ssp, 'A', "bscv_map_regs", "map failure" in bscv_map_regs()
912 ddi_regs_map_free(&ssp->channel[i].handle); in bscv_map_regs()
928 ssp->nchannels = 0; in bscv_map_regs()
933 bscv_unmap_regs(bscv_soft_state_t *ssp) in bscv_unmap_regs() argument
937 ASSERT(ssp); in bscv_unmap_regs()
939 for (i = 0; i < ssp->nchannels; i++) { in bscv_unmap_regs()
940 ddi_regs_map_free(&ssp->channel[i].handle); in bscv_unmap_regs()
948 bscv_map_chan_logical_physical(bscv_soft_state_t *ssp) in bscv_map_chan_logical_physical() argument
950 ASSERT(ssp); in bscv_map_chan_logical_physical()
966 if (ssp->nchannels > 2) in bscv_map_chan_logical_physical()
968 if (ssp->nchannels > 3) in bscv_map_chan_logical_physical()
970 if (ssp->nchannels > 4) in bscv_map_chan_logical_physical()
983 bscv_full_stop(bscv_soft_state_t *ssp) in bscv_full_stop() argument
989 BSCV_TRACE(ssp, 'W', "bscv_full_stop", in bscv_full_stop()
999 obtained_lock = (bscv_tryenter(ssp) != 0); in bscv_full_stop()
1003 bscv_inform_bsc(ssp, BSC_INFORM_PANIC); in bscv_full_stop()
1005 bscv_inform_bsc(ssp, BSC_INFORM_OFFLINE); in bscv_full_stop()
1010 switch (ssp->serial_reporting) { in bscv_full_stop()
1023 bscv_setclear8_volatile(ssp, chan_general, in bscv_full_stop()
1028 bscv_exit(ssp); in bscv_full_stop()
1130 bscv_enter(bscv_soft_state_t *ssp) in bscv_enter() argument
1132 BSCV_TRACE(ssp, '@', "bscv_enter", ""); in bscv_enter()
1133 mutex_enter(&ssp->cmd_mutex); in bscv_enter()
1134 ssp->had_session_error = B_FALSE; in bscv_enter()
1138 bscv_tryenter(bscv_soft_state_t *ssp) in bscv_tryenter() argument
1142 BSCV_TRACE(ssp, '@', "bscv_tryenter", ""); in bscv_tryenter()
1143 if ((rv = mutex_tryenter(&ssp->cmd_mutex)) != 0) { in bscv_tryenter()
1144 ssp->had_session_error = B_FALSE; in bscv_tryenter()
1150 bscv_exit(bscv_soft_state_t *ssp) in bscv_exit() argument
1152 mutex_exit(&ssp->cmd_mutex); in bscv_exit()
1153 BSCV_TRACE(ssp, '@', "bscv_exit", ""); in bscv_exit()
1158 bscv_held(bscv_soft_state_t *ssp) in bscv_held() argument
1160 return (mutex_owned(&ssp->cmd_mutex)); in bscv_held()
1165 bscv_put8(bscv_soft_state_t *ssp, int chan, bscv_addr_t addr, uint8_t val) in bscv_put8() argument
1170 ASSERT(bscv_held(ssp)); in bscv_put8()
1172 if (bscv_faulty(ssp)) { in bscv_put8()
1176 BSCV_TRACE(ssp, '@', "bscv_put8", in bscv_put8()
1182 bscv_put8_once(ssp, chan, addr, val); in bscv_put8()
1183 needretry = bscv_should_retry(ssp); in bscv_put8()
1188 if (ssp->command_error != 0) { in bscv_put8()
1189 ssp->had_session_error = B_TRUE; in bscv_put8()
1197 bscv_set_fault(ssp); in bscv_put8()
1199 BSCV_TRACE(ssp, 'R', "bscv_put8", in bscv_put8()
1206 bscv_put16(bscv_soft_state_t *ssp, int chan, bscv_addr_t addr, uint16_t val) in bscv_put16() argument
1208 ASSERT(bscv_held(ssp)); in bscv_put16()
1209 BSCV_TRACE(ssp, '@', "bscv_put16", in bscv_put16()
1211 bscv_put8(ssp, chan, addr, val >> 8); in bscv_put16()
1212 bscv_put8(ssp, chan, addr + 1, val & 0xff); in bscv_put16()
1216 bscv_put32(bscv_soft_state_t *ssp, int chan, bscv_addr_t addr, uint32_t val) in bscv_put32() argument
1218 ASSERT(bscv_held(ssp)); in bscv_put32()
1219 BSCV_TRACE(ssp, '@', "bscv_put32", in bscv_put32()
1221 bscv_put8(ssp, chan, addr, (val >> 24) & 0xff); in bscv_put32()
1222 bscv_put8(ssp, chan, addr + 1, (val >> 16) & 0xff); in bscv_put32()
1223 bscv_put8(ssp, chan, addr + 2, (val >> 8) & 0xff); in bscv_put32()
1224 bscv_put8(ssp, chan, addr + 3, val & 0xff); in bscv_put32()
1228 bscv_get8(bscv_soft_state_t *ssp, int chan, bscv_addr_t addr) in bscv_get8() argument
1234 ASSERT(bscv_held(ssp)); in bscv_get8()
1236 if (bscv_faulty(ssp)) { in bscv_get8()
1243 retval = bscv_get8_once(ssp, chan, addr); in bscv_get8()
1244 needretry = bscv_should_retry(ssp); in bscv_get8()
1249 if (ssp->command_error != 0) { in bscv_get8()
1250 ssp->had_session_error = B_TRUE; in bscv_get8()
1258 bscv_set_fault(ssp); in bscv_get8()
1260 BSCV_TRACE(ssp, 'R', "bscv_get8", in bscv_get8()
1265 BSCV_TRACE(ssp, '@', "bscv_get8", in bscv_get8()
1271 bscv_get16(bscv_soft_state_t *ssp, int chan, bscv_addr_t addr) in bscv_get16() argument
1275 ASSERT(bscv_held(ssp)); in bscv_get16()
1277 retval = bscv_get8(ssp, chan, addr) << 8; in bscv_get16()
1278 retval |= bscv_get8(ssp, chan, addr + 1); in bscv_get16()
1280 BSCV_TRACE(ssp, '@', "bscv_get16", in bscv_get16()
1286 bscv_get32(bscv_soft_state_t *ssp, int chan, bscv_addr_t addr) in bscv_get32() argument
1290 ASSERT(bscv_held(ssp)); in bscv_get32()
1292 retval = bscv_get8(ssp, chan, addr) << 24; in bscv_get32()
1293 retval |= bscv_get8(ssp, chan, addr + 1) << 16; in bscv_get32()
1294 retval |= bscv_get8(ssp, chan, addr + 2) << 8; in bscv_get32()
1295 retval |= bscv_get8(ssp, chan, addr + 3); in bscv_get32()
1297 BSCV_TRACE(ssp, '@', "bscv_get32", in bscv_get32()
1303 bscv_setclear8(bscv_soft_state_t *ssp, int chan, in bscv_setclear8() argument
1308 ASSERT(bscv_held(ssp)); in bscv_setclear8()
1311 val = ssp->lom_regs[addr] | set; in bscv_setclear8()
1314 BSCV_TRACE(ssp, '@', "bscv_setclear8", in bscv_setclear8()
1319 bscv_put8(ssp, chan, addr, val); in bscv_setclear8()
1323 bscv_setclear8_volatile(bscv_soft_state_t *ssp, int chan, in bscv_setclear8_volatile() argument
1330 ASSERT(bscv_held(ssp)); in bscv_setclear8_volatile()
1333 if (bscv_faulty(ssp)) { in bscv_setclear8_volatile()
1337 BSCV_TRACE(ssp, '@', "bscv_setclear8_volatile", in bscv_setclear8_volatile()
1341 val = bscv_get8_cached(ssp, addr); in bscv_setclear8_volatile()
1347 bscv_put8_once(ssp, chan, addr, val); in bscv_setclear8_volatile()
1348 if (ssp->command_error == EBUS_ERROR_STALEDATA) { in bscv_setclear8_volatile()
1350 val = bscv_get8_once(ssp, chan, addr); in bscv_setclear8_volatile()
1353 needretry = bscv_should_retry(ssp); in bscv_setclear8_volatile()
1359 if (ssp->command_error != 0) { in bscv_setclear8_volatile()
1360 ssp->had_session_error = B_TRUE; in bscv_setclear8_volatile()
1368 if (ssp->command_error != EBUS_ERROR_STALEDATA) { in bscv_setclear8_volatile()
1369 bscv_set_fault(ssp); in bscv_setclear8_volatile()
1372 BSCV_TRACE(ssp, 'R', "bscv_setclear8_volatile", in bscv_setclear8_volatile()
1379 bscv_rep_rw8(bscv_soft_state_t *ssp, int chan, uint8_t *host_addr, in bscv_rep_rw8() argument
1385 ASSERT(bscv_held(ssp)); in bscv_rep_rw8()
1391 bscv_put8(ssp, chan, dev_addr, *host_addr++); in bscv_rep_rw8()
1393 *host_addr++ = bscv_get8(ssp, chan, dev_addr); in bscv_rep_rw8()
1397 bscv_put8_once(ssp, chan, in bscv_rep_rw8()
1400 *host_addr++ = bscv_get8_once(ssp, chan, in bscv_rep_rw8()
1404 if (ssp->command_error != 0) { in bscv_rep_rw8()
1405 ssp->had_session_error = B_TRUE; in bscv_rep_rw8()
1408 if (bscv_faulty(ssp) || bscv_session_error(ssp)) { in bscv_rep_rw8()
1420 bscv_get8_cached(bscv_soft_state_t *ssp, bscv_addr_t addr) in bscv_get8_cached() argument
1425 return (ssp->lom_regs[addr]); in bscv_get8_cached()
1429 bscv_get8_locked(bscv_soft_state_t *ssp, int chan, bscv_addr_t addr, int *res) in bscv_get8_locked() argument
1434 bscv_enter(ssp); in bscv_get8_locked()
1435 retval = bscv_get8(ssp, chan, addr); in bscv_get8_locked()
1436 bscv_locked_result(ssp, res); in bscv_get8_locked()
1437 bscv_exit(ssp); in bscv_get8_locked()
1438 BSCV_TRACE(ssp, '@', "bscv_get8_locked", in bscv_get8_locked()
1444 bscv_rep_get8_locked(bscv_soft_state_t *ssp, int chan, uint8_t *host_addr, in bscv_rep_get8_locked() argument
1447 bscv_enter(ssp); in bscv_rep_get8_locked()
1448 bscv_rep_rw8(ssp, chan, host_addr, dev_addr, repcount, in bscv_rep_get8_locked()
1450 bscv_locked_result(ssp, res); in bscv_rep_get8_locked()
1451 bscv_exit(ssp); in bscv_rep_get8_locked()
1455 bscv_faulty(bscv_soft_state_t *ssp) in bscv_faulty() argument
1457 ASSERT(bscv_held(ssp)); in bscv_faulty()
1458 return (ssp->had_fault); in bscv_faulty()
1462 bscv_clear_fault(bscv_soft_state_t *ssp) in bscv_clear_fault() argument
1464 ASSERT(bscv_held(ssp)); in bscv_clear_fault()
1465 BSCV_TRACE(ssp, 'J', "bscv_clear_fault", "clearing fault flag"); in bscv_clear_fault()
1466 ssp->had_fault = B_FALSE; in bscv_clear_fault()
1467 ssp->had_session_error = B_FALSE; in bscv_clear_fault()
1471 bscv_set_fault(bscv_soft_state_t *ssp) in bscv_set_fault() argument
1473 ASSERT(bscv_held(ssp)); in bscv_set_fault()
1474 BSCV_TRACE(ssp, 'J', "bscv_set_fault", "setting fault flag"); in bscv_set_fault()
1475 ssp->had_fault = B_TRUE; in bscv_set_fault()
1479 bscv_session_error(bscv_soft_state_t *ssp) in bscv_session_error() argument
1481 ASSERT(bscv_held(ssp)); in bscv_session_error()
1482 return (ssp->had_session_error); in bscv_session_error()
1486 bscv_retcode(bscv_soft_state_t *ssp) in bscv_retcode() argument
1488 BSCV_TRACE(ssp, '@', "bscv_retcode", in bscv_retcode()
1489 "code 0x%x", ssp->command_error); in bscv_retcode()
1490 return (ssp->command_error); in bscv_retcode()
1494 bscv_should_retry(bscv_soft_state_t *ssp) in bscv_should_retry() argument
1496 if ((ssp->command_error == EBUS_ERROR_DEVICEFAIL) || in bscv_should_retry()
1497 (ssp->command_error >= LOMBUS_ERR_BASE)) { in bscv_should_retry()
1513 bscv_locked_result(bscv_soft_state_t *ssp, int *res) in bscv_locked_result() argument
1515 if (bscv_faulty(ssp) || (bscv_retcode(ssp) != 0)) { in bscv_locked_result()
1521 bscv_put8_once(bscv_soft_state_t *ssp, int chan, bscv_addr_t addr, uint8_t val) in bscv_put8_once() argument
1525 ASSERT(bscv_held(ssp)); in bscv_put8_once()
1527 ssp->command_error = 0; in bscv_put8_once()
1529 if (bscv_faulty(ssp)) { in bscv_put8_once()
1532 } else if (ssp->nchannels == 0) { in bscv_put8_once()
1534 BSCV_TRACE(ssp, '@', "bscv_put8_once", in bscv_put8_once()
1540 ddi_put32(ssp->channel[chan].handle, in bscv_put8_once()
1541 (uint32_t *)BSC_NEXUS_ADDR(ssp, chan, 0, LOMBUS_FAULT_REG), 0); in bscv_put8_once()
1544 ddi_put8(ssp->channel[chan].handle, in bscv_put8_once()
1545 &ssp->channel[chan].regs[addr], val); in bscv_put8_once()
1546 fault = ddi_get32(ssp->channel[chan].handle, in bscv_put8_once()
1547 (uint32_t *)BSC_NEXUS_ADDR(ssp, chan, 0, LOMBUS_FAULT_REG)); in bscv_put8_once()
1549 ssp->command_error = fault; in bscv_put8_once()
1555 ssp->lom_regs[addr] = val; in bscv_put8_once()
1563 bscv_resync_comms(ssp, chan); in bscv_put8_once()
1573 BSCV_TRACE(ssp, '@', "bscv_put8_once", in bscv_put8_once()
1578 bscv_get8_once(bscv_soft_state_t *ssp, int chan, bscv_addr_t addr) in bscv_get8_once() argument
1583 ASSERT(bscv_held(ssp)); in bscv_get8_once()
1585 ssp->command_error = 0; in bscv_get8_once()
1587 if (bscv_faulty(ssp)) { in bscv_get8_once()
1590 } else if (ssp->nchannels == 0) { in bscv_get8_once()
1592 BSCV_TRACE(ssp, '@', "bscv_get8_once", in bscv_get8_once()
1598 ddi_put32(ssp->channel[chan].handle, in bscv_get8_once()
1599 (uint32_t *)BSC_NEXUS_ADDR(ssp, chan, 0, LOMBUS_FAULT_REG), 0); in bscv_get8_once()
1602 val = ddi_get8(ssp->channel[chan].handle, in bscv_get8_once()
1603 &ssp->channel[chan].regs[addr]); in bscv_get8_once()
1604 fault = ddi_get32(ssp->channel[chan].handle, in bscv_get8_once()
1605 (uint32_t *)BSC_NEXUS_ADDR(ssp, chan, 0, LOMBUS_FAULT_REG)); in bscv_get8_once()
1606 ssp->command_error = fault; in bscv_get8_once()
1614 bscv_resync_comms(ssp, chan); in bscv_get8_once()
1630 if (!bscv_faulty(ssp)) { in bscv_get8_once()
1633 ssp->lom_regs[addr] = val; in bscv_get8_once()
1637 BSCV_TRACE(ssp, '@', "bscv_get8_once", in bscv_get8_once()
1643 bscv_probe(bscv_soft_state_t *ssp, int chan, uint32_t *fault) in bscv_probe() argument
1647 if (ssp->nchannels == 0) { in bscv_probe()
1652 BSCV_TRACE(ssp, '@', "bscv_probe", in bscv_probe()
1659 ddi_put32(ssp->channel[chan].handle, in bscv_probe()
1660 (uint32_t *)BSC_NEXUS_ADDR(ssp, chan, 0, LOMBUS_FAULT_REG), 0); in bscv_probe()
1662 *fault = ddi_get32(ssp->channel[chan].handle, in bscv_probe()
1663 (uint32_t *)BSC_NEXUS_ADDR(ssp, chan, 0, LOMBUS_PROBE_REG)); in bscv_probe()
1665 async_reg = ddi_get32(ssp->channel[chan].handle, in bscv_probe()
1666 (uint32_t *)BSC_NEXUS_ADDR(ssp, chan, 0, LOMBUS_ASYNC_REG)); in bscv_probe()
1668 BSCV_TRACE(ssp, '@', "bscv_probe", in bscv_probe()
1674 bscv_resync_comms(bscv_soft_state_t *ssp, int chan) in bscv_resync_comms() argument
1677 uint32_t command_error = ssp->command_error; in bscv_resync_comms()
1680 if (ssp->nchannels == 0) { in bscv_resync_comms()
1685 BSCV_TRACE(ssp, '@', "bscv_resync_comms", in bscv_resync_comms()
1699 fault = ddi_get32(ssp->channel[chan].handle, in bscv_resync_comms()
1700 (uint32_t *)BSC_NEXUS_ADDR(ssp, chan, 0, in bscv_resync_comms()
1714 ssp->bad_resync++; in bscv_resync_comms()
1718 ssp->bad_resync = 0; in bscv_resync_comms()
1741 bscv_window_setup(bscv_soft_state_t *ssp) in bscv_window_setup() argument
1743 ASSERT(bscv_held(ssp)); in bscv_window_setup()
1745 if (ssp->eeinfo_valid) { in bscv_window_setup()
1747 return (ssp->eeinfo_valid); in bscv_window_setup()
1749 ssp->eeprom_size = in bscv_window_setup()
1750 bscv_get8(ssp, chan_general, EBUS_IDX_EEPROM_SIZE_KB) * 1024; in bscv_window_setup()
1751 ssp->eventlog_start = bscv_get16(ssp, chan_general, in bscv_window_setup()
1759 ssp->eventlog_size = EBUS_LOG_END - ssp->eventlog_start; in bscv_window_setup()
1761 BSCV_TRACE(ssp, 'I', "bscv_window_setup", "eeprom size 0x%x log_start" in bscv_window_setup()
1762 " 0x%x log_size 0x%x", ssp->eeprom_size, ssp->eventlog_start, in bscv_window_setup()
1763 ssp->eventlog_size); in bscv_window_setup()
1765 if (bscv_faulty(ssp) || bscv_session_error(ssp)) { in bscv_window_setup()
1766 ssp->eeinfo_valid = B_FALSE; in bscv_window_setup()
1767 } else if ((ssp->eeprom_size == 0) || in bscv_window_setup()
1768 (ssp->eventlog_start >= ssp->eeprom_size)) { in bscv_window_setup()
1772 ssp->eeinfo_valid = B_FALSE; in bscv_window_setup()
1774 ssp->eeinfo_valid = B_TRUE; in bscv_window_setup()
1777 BSCV_TRACE(ssp, 'I', "bscv_window_setup", "returning eeinfo_valid %s", in bscv_window_setup()
1778 ssp->eeinfo_valid ? "true" : "false"); in bscv_window_setup()
1779 return (ssp->eeinfo_valid); in bscv_window_setup()
1790 bscv_eerw(bscv_soft_state_t *ssp, uint32_t eeoffset, uint8_t *buf, in bscv_eerw() argument
1810 bscv_put8(ssp, chan_eeprom, EBUS_IDX_EEPROM_PAGESEL, this_page); in bscv_eerw()
1812 BSCV_TRACE(ssp, 'M', "lom_eerw", in bscv_eerw()
1817 bscv_rep_rw8(ssp, chan_eeprom, in bscv_eerw()
1821 if (bscv_faulty(ssp) || bscv_session_error(ssp)) { in bscv_eerw()
1835 bscv_is_null_event(bscv_soft_state_t *ssp, lom_event_t *e) in bscv_is_null_event() argument
1844 BSCV_TRACE(ssp, 'E', "bscv_is_null_event", in bscv_is_null_event()
1853 BSCV_TRACE(ssp, 'E', "bscv_is_null_event", "0xffff null event"); in bscv_is_null_event()
1859 BSCV_TRACE(ssp, 'E', "bscv_is_null_event", "returning False"); in bscv_is_null_event()
1923 bscv_soft_state_t *ssp; in bscv_ioctl() local
1928 ssp = ddi_get_soft_state(bscv_statep, instance); in bscv_ioctl()
1929 if (ssp == NULL) { in bscv_ioctl()
1968 if (ssp->cssp_prog) { in bscv_ioctl()
1970 } else if ((ssp->prog_mode_only || ssp->programming) && in bscv_ioctl()
1997 res = bscv_ioc_dogstate(ssp, arg, mode); in bscv_ioctl()
2001 res = bscv_prog(ssp, arg, mode); in bscv_ioctl()
2005 res = bscv_ioc_psustate(ssp, arg, mode); in bscv_ioctl()
2009 res = bscv_ioc_fanstate(ssp, arg, mode); in bscv_ioctl()
2013 res = bscv_ioc_fledstate(ssp, arg, mode); in bscv_ioctl()
2017 res = bscv_ioc_ledstate(ssp, arg, mode); in bscv_ioctl()
2021 res = bscv_ioc_info(ssp, arg, mode); in bscv_ioctl()
2025 res = bscv_ioc_mread(ssp, arg, mode); in bscv_ioctl()
2029 res = bscv_ioc_volts(ssp, arg, mode); in bscv_ioctl()
2033 res = bscv_ioc_stats(ssp, arg, mode); in bscv_ioctl()
2037 res = bscv_ioc_temp(ssp, arg, mode); in bscv_ioctl()
2041 res = bscv_ioc_cons(ssp, arg, mode); in bscv_ioctl()
2045 res = bscv_ioc_eventlog2(ssp, arg, mode); in bscv_ioctl()
2049 res = bscv_ioc_info2(ssp, arg, mode); in bscv_ioctl()
2053 res = bscv_ioc_test(ssp, arg, mode); in bscv_ioctl()
2057 res = bscv_ioc_mprog2(ssp, arg, mode); in bscv_ioctl()
2061 res = bscv_ioc_mread2(ssp, arg, mode); in bscv_ioctl()
2065 BSCV_TRACE(ssp, 'I', "bscv_ioctl", "Invalid IOCTL 0x%x", cmd); in bscv_ioctl()
2077 bscv_ioc_dogstate(bscv_soft_state_t *ssp, intptr_t arg, int mode) in bscv_ioc_dogstate() argument
2083 dogval = bscv_get8_locked(ssp, chan_general, EBUS_IDX_WDOG_CTRL, &res); in bscv_ioc_dogstate()
2086 dogstate.dog_timeout = bscv_get8_locked(ssp, chan_general, in bscv_ioc_dogstate()
2104 bscv_ioc_psustate(bscv_soft_state_t *ssp, intptr_t arg, int mode) in bscv_ioc_psustate() argument
2112 psustat = bscv_get8_locked(ssp, chan_general, in bscv_ioc_psustate()
2136 bscv_ioc_fanstate(bscv_soft_state_t *ssp, intptr_t arg, int mode) in bscv_ioc_fanstate() argument
2144 numfans = EBUS_CONFIG_NFAN_DEC(bscv_get8_locked(ssp, in bscv_ioc_fanstate()
2147 if (ssp->fanspeed[i] != LOM_FAN_NOT_PRESENT) { in bscv_ioc_fanstate()
2149 fandata.speed[i] = ssp->fanspeed[i]; in bscv_ioc_fanstate()
2150 fandata.minspeed[i] = bscv_get8_cached(ssp, in bscv_ioc_fanstate()
2167 bscv_ioc_fledstate(bscv_soft_state_t *ssp, intptr_t arg, int mode) in bscv_ioc_fledstate() argument
2173 fledstate = bscv_get8_locked(ssp, chan_general, EBUS_IDX_ALARM, &res); in bscv_ioc_fledstate()
2194 bscv_ioc_ledstate(bscv_soft_state_t *ssp, intptr_t arg, int mode) in bscv_ioc_ledstate() argument
2219 fw_led_state = bscv_get8_locked(ssp, chan_general, in bscv_ioc_ledstate()
2251 ssp->led_names[led_state.index]); in bscv_ioc_ledstate()
2271 bscv_ioc_info(bscv_soft_state_t *ssp, intptr_t arg, int mode) in bscv_ioc_info() argument
2278 info.ser_char = bscv_get8_locked(ssp, chan_general, EBUS_IDX_ESCAPE, in bscv_ioc_info()
2281 info.fver = bscv_get8_locked(ssp, chan_general, EBUS_IDX_FW_REV, &res); in bscv_ioc_info()
2282 csum = bscv_get8_locked(ssp, chan_general, EBUS_IDX_CHECK_HI, &res) in bscv_ioc_info()
2284 csum |= bscv_get8_locked(ssp, chan_general, EBUS_IDX_CHECK_LO, &res); in bscv_ioc_info()
2286 info.prod_rev = bscv_get8_locked(ssp, chan_general, EBUS_IDX_MODEL_REV, in bscv_ioc_info()
2289 info.prod_id[i] = bscv_get8_locked(ssp, in bscv_ioc_info()
2292 if (bscv_get8_locked(ssp, chan_general, EBUS_IDX_ALARM, &res) & in bscv_ioc_info()
2311 bscv_ioc_mread(bscv_soft_state_t *ssp, intptr_t arg, int mode) in bscv_ioc_mread() argument
2319 mprog.mod_id[i] = bscv_get8_locked(ssp, chan_general, in bscv_ioc_mread()
2322 mprog.mod_rev = bscv_get8_locked(ssp, chan_general, EBUS_IDX_MODEL_REV, in bscv_ioc_mread()
2324 mprog.config = bscv_get8_locked(ssp, chan_general, EBUS_IDX_CONFIG, in bscv_ioc_mread()
2330 mprog.fanhz[i] = bscv_get8_cached(ssp, in bscv_ioc_mread()
2332 mprog.fanmin[i] = bscv_get8_cached(ssp, in bscv_ioc_mread()
2348 bscv_ioc_volts(bscv_soft_state_t *ssp, intptr_t arg, int mode) in bscv_ioc_volts() argument
2354 supply = (bscv_get8_locked(ssp, chan_general, EBUS_IDX_SUPPLY_HI, &res) in bscv_ioc_volts()
2355 << 8) | bscv_get8_locked(ssp, chan_general, EBUS_IDX_SUPPLY_LO, in bscv_ioc_volts()
2358 for (i = 0; i < ssp->volts.num; i++) { in bscv_ioc_volts()
2359 ssp->volts.status[i] = (supply >> i) & 1; in bscv_ioc_volts()
2363 (ddi_copyout((caddr_t)&ssp->volts, (caddr_t)arg, in bscv_ioc_volts()
2364 sizeof (ssp->volts), mode) < 0)) { in bscv_ioc_volts()
2374 bscv_ioc_stats(bscv_soft_state_t *ssp, intptr_t arg, int mode) in bscv_ioc_stats() argument
2380 status = bscv_get8_locked(ssp, chan_general, EBUS_IDX_CBREAK_STATUS, in bscv_ioc_stats()
2382 for (i = 0; i < ssp->sflags.num; i++) { in bscv_ioc_stats()
2383 ssp->sflags.status[i] = (int)((status >> i) & 1); in bscv_ioc_stats()
2387 (ddi_copyout((caddr_t)&ssp->sflags, (caddr_t)arg, in bscv_ioc_stats()
2388 sizeof (ssp->sflags), mode) < 0)) { in bscv_ioc_stats()
2398 bscv_ioc_temp(bscv_soft_state_t *ssp, intptr_t arg, int mode) in bscv_ioc_temp() argument
2408 for (i = 0; i < ssp->temps.num; i++) { in bscv_ioc_temp()
2409 if (ssp->temps.temp[i] != LOM_TEMP_STATE_NOT_PRESENT) { in bscv_ioc_temp()
2410 temps.temp[idx] = ssp->temps.temp[i]; in bscv_ioc_temp()
2411 bcopy(ssp->temps.name[i], temps.name[idx], in bscv_ioc_temp()
2413 temps.warning[idx] = ssp->temps.warning[i]; in bscv_ioc_temp()
2414 temps.shutdown[idx] = ssp->temps.shutdown[i]; in bscv_ioc_temp()
2420 bcopy(ssp->temps.name_ov, temps.name_ov, sizeof (temps.name_ov)); in bscv_ioc_temp()
2421 temps.num_ov = ssp->temps.num_ov; in bscv_ioc_temp()
2422 status_ov = bscv_get8_locked(ssp, chan_general, EBUS_IDX_OTEMP_STATUS, in bscv_ioc_temp()
2424 for (i = 0; i < ssp->temps.num_ov; i++) { in bscv_ioc_temp()
2425 ssp->temps.status_ov[i] = (status_ov >> i) & 1; in bscv_ioc_temp()
2440 bscv_ioc_cons(bscv_soft_state_t *ssp, intptr_t arg, int mode) in bscv_ioc_cons() argument
2452 bscv_rep_get8_locked(ssp, chan_general, (uint8_t *)cbuf.lrbuf, in bscv_ioc_cons()
2470 bscv_ioc_eventlog2(bscv_soft_state_t *ssp, intptr_t arg, int mode) in bscv_ioc_eventlog2() argument
2492 bscv_enter(ssp); in bscv_ioc_eventlog2()
2500 if (!bscv_window_setup(ssp)) { in bscv_ioc_eventlog2()
2502 bscv_exit(ssp); in bscv_ioc_eventlog2()
2511 (void) bscv_get8(ssp, chan_general, EBUS_IDX_UNREAD_EVENTS); in bscv_ioc_eventlog2()
2512 next_offset = bscv_get16(ssp, chan_general, EBUS_IDX_LOG_PTR_HI); in bscv_ioc_eventlog2()
2513 BSCV_TRACE(ssp, 'I', "bscv_ioc_eventlog2", "log_ptr_hi 0x%x", in bscv_ioc_eventlog2()
2526 if (next_offset <= ssp->eventlog_start) { in bscv_ioc_eventlog2()
2528 next_offset = ssp->eventlog_start + ssp->eventlog_size; in bscv_ioc_eventlog2()
2529 BSCV_TRACE(ssp, 'I', "bscv_ioc_eventlog2", "wrapping" in bscv_ioc_eventlog2()
2535 if (bscv_eerw(ssp, next_offset, (uint8_t *)&event, in bscv_ioc_eventlog2()
2538 BSCV_TRACE(ssp, 'I', "bscv_ioc_eventlog2", "read" in bscv_ioc_eventlog2()
2544 if (bscv_is_null_event(ssp, &event)) { in bscv_ioc_eventlog2()
2548 BSCV_TRACE(ssp, 'I', "bscv_ioc_eventlog2", "no more" in bscv_ioc_eventlog2()
2572 bscv_build_eventstring(ssp, in bscv_ioc_eventlog2()
2582 bscv_exit(ssp); in bscv_ioc_eventlog2()
2598 bscv_ioc_info2(bscv_soft_state_t *ssp, intptr_t arg, int mode) in bscv_ioc_info2() argument
2607 (void) strncpy(info2.escape_chars, ssp->escape_chars, in bscv_ioc_info2()
2609 info2.serial_events = ssp->reporting_level | ssp->serial_reporting; in bscv_ioc_info2()
2612 info2.fver = bscv_get8_locked(ssp, chan_general, EBUS_IDX_FW_REV, &res); in bscv_ioc_info2()
2613 csum = bscv_get8_locked(ssp, chan_general, EBUS_IDX_CHECK_HI, &res) in bscv_ioc_info2()
2615 csum |= bscv_get8_locked(ssp, chan_general, EBUS_IDX_CHECK_LO, &res); in bscv_ioc_info2()
2617 info2.prod_rev = bscv_get8_locked(ssp, chan_general, in bscv_ioc_info2()
2620 info2.prod_id[i] = bscv_get8_locked(ssp, chan_general, in bscv_ioc_info2()
2623 info2.serial_config = bscv_get8_locked(ssp, chan_general, in bscv_ioc_info2()
2625 if (bscv_get8_locked(ssp, chan_general, EBUS_IDX_CONFIG_MISC, &res) & in bscv_ioc_info2()
2629 if (bscv_get8_locked(ssp, chan_general, EBUS_IDX_CONFIG_MISC, &res) & in bscv_ioc_info2()
2633 if (bscv_get8_locked(ssp, chan_general, EBUS_IDX_WDOG_CTRL, &res) & in bscv_ioc_info2()
2637 info2.baud_rate = bscv_get8_locked(ssp, chan_general, in bscv_ioc_info2()
2640 ((int)bscv_get8_locked(ssp, chan_general, in bscv_ioc_info2()
2642 ((int)bscv_get8_locked(ssp, chan_general, in bscv_ioc_info2()
2644 ((int)bscv_get8_locked(ssp, chan_general, in bscv_ioc_info2()
2654 for (i = 0; i < ssp->num_fans; i++) { in bscv_ioc_info2()
2655 (void) strcpy(info2.fan_names[i], ssp->fan_names[i]); in bscv_ioc_info2()
2670 bscv_ioc_test(bscv_soft_state_t *ssp, intptr_t arg, int mode) in bscv_ioc_test() argument
2689 BSCV_TRACE(ssp, 'F', "bscv_ioc_test", in bscv_ioc_test()
2710 bscv_enter(ssp); in bscv_ioc_test()
2716 bscv_put8(ssp, chan_general, in bscv_ioc_test()
2718 if (bscv_faulty(ssp)) { in bscv_ioc_test()
2722 test = bscv_retcode(ssp); in bscv_ioc_test()
2725 bscv_exit(ssp); in bscv_ioc_test()
2729 BSCV_TRACE(ssp, 'F', "bscv_ioc_test", in bscv_ioc_test()
2743 bscv_ioc_mprog2(bscv_soft_state_t *ssp, intptr_t arg, int mode) in bscv_ioc_mprog2() argument
2764 bscv_enter(ssp); in bscv_ioc_mprog2()
2770 eeprom_size = bscv_get8(ssp, chan_general, EBUS_IDX_EEPROM_SIZE_KB) * in bscv_ioc_mprog2()
2773 if (bscv_faulty(ssp)) { in bscv_ioc_mprog2()
2774 bscv_exit(ssp); in bscv_ioc_mprog2()
2777 BSCV_TRACE(ssp, 'M', "bscv_ioc_mprog2", in bscv_ioc_mprog2()
2779 bscv_exit(ssp); in bscv_ioc_mprog2()
2783 bscv_put8(ssp, chan_general, EBUS_IDX_CMD_RES, EBUS_CMD_UNLOCK1); in bscv_ioc_mprog2()
2784 if (bscv_faulty(ssp)) { in bscv_ioc_mprog2()
2785 BSCV_TRACE(ssp, 'M', "bscv_ioc_mprog2", "ML1 Write failed"); in bscv_ioc_mprog2()
2786 bscv_exit(ssp); in bscv_ioc_mprog2()
2790 bscv_put8(ssp, chan_general, EBUS_IDX_CMD_RES, EBUS_CMD_UNLOCK2); in bscv_ioc_mprog2()
2791 if (bscv_faulty(ssp)) { in bscv_ioc_mprog2()
2792 BSCV_TRACE(ssp, 'M', "bscv_ioc_mprog2", "ML2 Write failed"); in bscv_ioc_mprog2()
2793 bscv_exit(ssp); in bscv_ioc_mprog2()
2797 if (bscv_eerw(ssp, base_addr, &mprog2.data[0], in bscv_ioc_mprog2()
2803 (void) bscv_get8(ssp, chan_general, EBUS_IDX_PROBEAA); in bscv_ioc_mprog2()
2805 if (bscv_faulty(ssp)) { in bscv_ioc_mprog2()
2808 bscv_exit(ssp); in bscv_ioc_mprog2()
2817 bscv_ioc_mread2(bscv_soft_state_t *ssp, intptr_t arg, int mode) in bscv_ioc_mread2() argument
2840 bscv_enter(ssp); in bscv_ioc_mread2()
2845 eeprom_size = bscv_get8(ssp, chan_general, EBUS_IDX_EEPROM_SIZE_KB) * in bscv_ioc_mread2()
2848 if (bscv_faulty(ssp)) { in bscv_ioc_mread2()
2849 bscv_exit(ssp); in bscv_ioc_mread2()
2852 BSCV_TRACE(ssp, 'M', "bscv_ioc_mread2", in bscv_ioc_mread2()
2854 bscv_exit(ssp); in bscv_ioc_mread2()
2858 if (bscv_eerw(ssp, base_addr, &mprog2.data[0], in bscv_ioc_mread2()
2863 if (bscv_faulty(ssp)) { in bscv_ioc_mread2()
2866 bscv_exit(ssp); in bscv_ioc_mread2()
2877 bscv_get_state_changes(bscv_soft_state_t *ssp) in bscv_get_state_changes() argument
2883 ASSERT(bscv_held(ssp)); in bscv_get_state_changes()
2885 while (i-- && !ssp->cssp_prog) { in bscv_get_state_changes()
2887 change = bscv_get8(ssp, chan_general, EBUS_IDX_STATE_CHNG); in bscv_get_state_changes()
2893 detail = bscv_get8(ssp, chan_general, EBUS_IDX_EVENT_DETAIL); in bscv_get_state_changes()
2895 bscv_status(ssp, change, detail); in bscv_get_state_changes()
2898 BSCV_TRACE(ssp, 'D', "bscv_get_state_changes", in bscv_get_state_changes()
2899 "loop index %d ssp->cssp_prog 0x%x", i, ssp->cssp_prog); in bscv_get_state_changes()
2917 bscv_soft_state_t *ssp = (void *)arg; in bscv_event_daemon() local
2927 BSCV_TRACE(ssp, 'D', "bscv_event_daemon", in bscv_event_daemon()
2931 mutex_enter(&ssp->task_mu); in bscv_event_daemon()
2933 ssp->task_flags |= TASK_ALIVE_FLG; in bscv_event_daemon()
2936 if ((ssp->task_flags & TASK_STOP_FLG) != 0) { in bscv_event_daemon()
2940 if ((ssp->task_flags & TASK_PAUSE_FLG) == 0) { in bscv_event_daemon()
2942 mutex_exit(&ssp->task_mu); in bscv_event_daemon()
2944 bscv_enter(ssp); in bscv_event_daemon()
2945 async_reg = bscv_probe(ssp, chan_general, &fault); in bscv_event_daemon()
2946 BSCV_TRACE(ssp, 'D', "bscv_event_daemon", in bscv_event_daemon()
2953 if (ssp->cssp_prog || ssp->prog_mode_only) { in bscv_event_daemon()
2958 ssp->cssp_prog = B_FALSE; in bscv_event_daemon()
2959 ssp->prog_mode_only = B_FALSE; in bscv_event_daemon()
2960 (void) bscv_attach_common(ssp); in bscv_event_daemon()
2963 bscv_clear_fault(ssp); in bscv_event_daemon()
2968 } else if (bscv_faulty(ssp)) { in bscv_event_daemon()
2970 bscv_clear_fault(ssp); in bscv_event_daemon()
2972 ssp->event_sleep = B_TRUE; in bscv_event_daemon()
2977 ssp->status_change = B_TRUE; in bscv_event_daemon()
2978 ssp->event_waiting = B_TRUE; in bscv_event_daemon()
2980 } else if (ssp->cssp_prog) { in bscv_event_daemon()
2990 bscv_set_fault(ssp); in bscv_event_daemon()
3001 ssp->event_sleep = B_TRUE; in bscv_event_daemon()
3003 if (bscv_faulty(ssp)) { in bscv_event_daemon()
3018 ssp->event_sleep = B_TRUE; in bscv_event_daemon()
3020 bscv_exit(ssp); in bscv_event_daemon()
3021 mutex_enter(&ssp->task_mu); in bscv_event_daemon()
3031 if (strcmp(ssp->last_nodename, utsname.nodename) != 0) { in bscv_event_daemon()
3033 BSCV_TRACE(ssp, 'X', "bscv_event_daemon", in bscv_event_daemon()
3036 ssp->nodename_change = B_TRUE; in bscv_event_daemon()
3037 (void) strncpy(ssp->last_nodename, utsname.nodename, in bscv_event_daemon()
3038 sizeof (ssp->last_nodename)); in bscv_event_daemon()
3040 ssp->last_nodename[sizeof (ssp->last_nodename) - 1] = in bscv_event_daemon()
3045 if (((ssp->task_flags & TASK_PAUSE_FLG) == 0) && in bscv_event_daemon()
3046 fault_cnt == 0 && ssp->cssp_prog == B_FALSE && in bscv_event_daemon()
3047 (ssp->event_waiting || ssp->status_change || in bscv_event_daemon()
3048 ssp->nodename_change || ssp->watchdog_change)) { in bscv_event_daemon()
3050 do_events = ssp->event_waiting; in bscv_event_daemon()
3051 ssp->event_waiting = B_FALSE; in bscv_event_daemon()
3052 ssp->task_flags |= do_events ? in bscv_event_daemon()
3054 do_status = ssp->status_change; in bscv_event_daemon()
3055 ssp->status_change = B_FALSE; in bscv_event_daemon()
3056 do_nodename = ssp->nodename_change; in bscv_event_daemon()
3057 ssp->nodename_change = B_FALSE; in bscv_event_daemon()
3058 do_watchdog = ssp->watchdog_change; in bscv_event_daemon()
3059 if (ssp->watchdog_change) { in bscv_event_daemon()
3060 ssp->watchdog_change = B_FALSE; in bscv_event_daemon()
3063 mutex_exit(&ssp->task_mu); in bscv_event_daemon()
3070 bscv_enter(ssp); in bscv_event_daemon()
3072 bscv_event_process(ssp, do_events); in bscv_event_daemon()
3075 BSCV_TRACE(ssp, 'D', "bscv_event_daemon", in bscv_event_daemon()
3077 bscv_setup_hostname(ssp); in bscv_event_daemon()
3080 BSCV_TRACE(ssp, 'D', "bscv_event_daemon", in bscv_event_daemon()
3082 bscv_setup_watchdog(ssp); in bscv_event_daemon()
3092 bscv_get_state_changes(ssp); in bscv_event_daemon()
3094 if (bscv_session_error(ssp)) { in bscv_event_daemon()
3102 BSCV_TRACE(ssp, 'D', "bscv_event_daemon", in bscv_event_daemon()
3104 ssp->event_sleep = B_TRUE; in bscv_event_daemon()
3106 bscv_exit(ssp); in bscv_event_daemon()
3108 mutex_enter(&ssp->task_mu); in bscv_event_daemon()
3110 if (ssp->task_flags & TASK_EVENT_PENDING_FLG) { in bscv_event_daemon()
3118 ssp->event_active_count++; in bscv_event_daemon()
3119 ssp->task_flags &= ~(TASK_EVENT_PENDING_FLG | in bscv_event_daemon()
3121 cv_broadcast(&ssp->task_evnt_cv); in bscv_event_daemon()
3125 ssp->event_sleep = B_TRUE; in bscv_event_daemon()
3128 if (ssp->event_sleep) { in bscv_event_daemon()
3129 ssp->task_flags |= TASK_SLEEPING_FLG; in bscv_event_daemon()
3131 (void) cv_reltimedwait(&ssp->task_cv, in bscv_event_daemon()
3132 &ssp->task_mu, poll_period, TR_CLOCK_TICK); in bscv_event_daemon()
3133 ssp->task_flags &= ~TASK_SLEEPING_FLG; in bscv_event_daemon()
3134 ssp->event_sleep = B_FALSE; in bscv_event_daemon()
3138 if (ssp->task_flags & TASK_EVENT_CONSUMER_FLG) { in bscv_event_daemon()
3143 ssp->event_active_count += 2; in bscv_event_daemon()
3144 cv_broadcast(&ssp->task_evnt_cv); in bscv_event_daemon()
3147 ASSERT(!(ssp->task_flags & TASK_EVENT_PENDING_FLG)); in bscv_event_daemon()
3148 ssp->task_flags &= in bscv_event_daemon()
3150 mutex_exit(&ssp->task_mu); in bscv_event_daemon()
3152 BSCV_TRACE(ssp, 'D', "bscv_event_daemon", in bscv_event_daemon()
3163 bscv_start_event_daemon(bscv_soft_state_t *ssp) in bscv_start_event_daemon() argument
3165 if (ssp->progress & BSCV_THREAD) in bscv_start_event_daemon()
3169 (void) thread_create(NULL, 0, (void (*)())bscv_event_daemon, ssp, in bscv_start_event_daemon()
3172 ssp->progress |= BSCV_THREAD; in bscv_start_event_daemon()
3182 bscv_stop_event_daemon(bscv_soft_state_t *ssp) in bscv_stop_event_daemon() argument
3187 mutex_enter(&ssp->task_mu); in bscv_stop_event_daemon()
3191 ((ssp->task_flags & TASK_ALIVE_FLG) && try < 10); in bscv_stop_event_daemon()
3194 ssp->task_flags |= TASK_STOP_FLG; in bscv_stop_event_daemon()
3195 cv_signal(&ssp->task_cv); in bscv_stop_event_daemon()
3197 mutex_exit(&ssp->task_mu); in bscv_stop_event_daemon()
3205 mutex_enter(&ssp->task_mu); in bscv_stop_event_daemon()
3208 if (ssp->task_flags & TASK_ALIVE_FLG) { in bscv_stop_event_daemon()
3211 mutex_exit(&ssp->task_mu); in bscv_stop_event_daemon()
3223 bscv_pause_event_daemon(bscv_soft_state_t *ssp) in bscv_pause_event_daemon() argument
3227 if (!(ssp->progress & BSCV_THREAD)) { in bscv_pause_event_daemon()
3232 BSCV_TRACE(ssp, 'D', "bscv_pause_event_daemon", in bscv_pause_event_daemon()
3235 mutex_enter(&ssp->task_mu); in bscv_pause_event_daemon()
3237 ssp->task_flags |= TASK_PAUSE_FLG; in bscv_pause_event_daemon()
3241 (!(ssp->task_flags & TASK_SLEEPING_FLG) && in bscv_pause_event_daemon()
3242 (ssp->task_flags & TASK_ALIVE_FLG) && in bscv_pause_event_daemon()
3246 ssp->task_flags |= TASK_PAUSE_FLG; in bscv_pause_event_daemon()
3247 cv_signal(&ssp->task_cv); in bscv_pause_event_daemon()
3249 mutex_exit(&ssp->task_mu); in bscv_pause_event_daemon()
3251 mutex_enter(&ssp->task_mu); in bscv_pause_event_daemon()
3253 if ((ssp->task_flags & TASK_SLEEPING_FLG) || in bscv_pause_event_daemon()
3254 !(ssp->task_flags & TASK_ALIVE_FLG)) { in bscv_pause_event_daemon()
3255 mutex_exit(&ssp->task_mu); in bscv_pause_event_daemon()
3256 BSCV_TRACE(ssp, 'D', "bscv_pause_event_daemon", in bscv_pause_event_daemon()
3260 mutex_exit(&ssp->task_mu); in bscv_pause_event_daemon()
3261 BSCV_TRACE(ssp, 'D', "bscv_pause_event_daemon", in bscv_pause_event_daemon()
3273 bscv_resume_event_daemon(bscv_soft_state_t *ssp) in bscv_resume_event_daemon() argument
3275 if (!(ssp->progress & BSCV_THREAD)) { in bscv_resume_event_daemon()
3280 mutex_enter(&ssp->task_mu); in bscv_resume_event_daemon()
3282 ssp->task_flags &= ~TASK_PAUSE_FLG; in bscv_resume_event_daemon()
3283 cv_signal(&ssp->task_cv); in bscv_resume_event_daemon()
3284 mutex_exit(&ssp->task_mu); in bscv_resume_event_daemon()
3286 BSCV_TRACE(ssp, 'D', "bscv_pause_event_daemon", in bscv_resume_event_daemon()
3297 bscv_event_process(bscv_soft_state_t *ssp, boolean_t do_events) in bscv_event_process() argument
3313 evcount = bscv_get8(ssp, chan_general, EBUS_IDX_UNREAD_EVENTS); in bscv_event_process()
3314 logptr = bscv_get16(ssp, chan_general, EBUS_IDX_LOG_PTR_HI); in bscv_event_process()
3317 count = bscv_event_validate(ssp, logptr, evcount); in bscv_event_process()
3330 ssp->event_sleep = B_TRUE; in bscv_event_process()
3334 if (ssp->event_fault_reported) { in bscv_event_process()
3337 ssp->event_fault_reported = B_FALSE; in bscv_event_process()
3341 currptr = logptr - ssp->eventlog_start; in bscv_event_process()
3342 currptr += ssp->eventlog_size; in bscv_event_process()
3344 currptr %= ssp->eventlog_size; in bscv_event_process()
3345 currptr += ssp->eventlog_start; in bscv_event_process()
3347 BSCV_TRACE(ssp, 'E', "bscv_event_process", in bscv_event_process()
3350 ssp->eventlog_start, in bscv_event_process()
3351 ssp->eventlog_start + ssp->eventlog_size); in bscv_event_process()
3355 if (bscv_eerw(ssp, currptr, (uint8_t *)&event, in bscv_event_process()
3361 bscv_event_process_one(ssp, &event); in bscv_event_process()
3362 bscv_sysevent(ssp, &event); in bscv_event_process()
3365 if (currptr >= ssp->eventlog_start + in bscv_event_process()
3366 ssp->eventlog_size) { in bscv_event_process()
3367 currptr = ssp->eventlog_start; in bscv_event_process()
3384 bscv_put8(ssp, chan_general, EBUS_IDX_UNREAD_EVENTS, evcount); in bscv_event_process()
3386 ssp->oldeeptr = currptr; in bscv_event_process()
3387 ssp->oldeeptr_valid = B_TRUE; in bscv_event_process()
3407 bscv_event_validate(bscv_soft_state_t *ssp, uint32_t newptr, uint8_t unread) in bscv_event_validate() argument
3412 if (!bscv_window_setup(ssp)) { in bscv_event_validate()
3418 if ((newptr < ssp->eventlog_start) || in bscv_event_validate()
3419 (newptr >= (ssp->eventlog_start + ssp->eventlog_size))) { in bscv_event_validate()
3420 if (!ssp->event_fault_reported) { in bscv_event_validate()
3423 ssp->event_fault_reported = B_TRUE; in bscv_event_validate()
3427 oldptr = ssp->oldeeptr; in bscv_event_validate()
3435 newptr += ssp->eventlog_size; in bscv_event_validate()
3437 if (!ssp->oldeeptr_valid) { in bscv_event_validate()
3458 BSCV_TRACE(ssp, 'E', "bscv_event_process", in bscv_event_validate()
3466 BSCV_TRACE(ssp, 'E', "bscv_event_process", in bscv_event_validate()
3491 bscv_event_process_one(bscv_soft_state_t *ssp, lom_event_t *event) in bscv_event_process_one() argument
3497 if (bscv_is_null_event(ssp, event)) { in bscv_event_process_one()
3515 bscv_build_eventstring(ssp, event, eventstr, eventstr + in bscv_event_process_one()
3518 if (level <= ssp->reporting_level) { in bscv_event_process_one()
3575 bscv_build_eventstring(bscv_soft_state_t *ssp, lom_event_t *event, in bscv_build_eventstring() argument
3582 BSCV_TRACE(ssp, 'S', "bscv_build_eventstring", "event %2x%2x%2x%2x", in bscv_build_eventstring()
3585 BSCV_TRACE(ssp, 'S', "bscv_build_eventstring", "time %2x%2x%2x%2x", in bscv_build_eventstring()
3639 ssp->led_names, MAX_LED_ID, event->ev_resource - 1)); in bscv_build_eventstring()
3941 bscv_status(bscv_soft_state_t *ssp, uint8_t state_chng, uint8_t dev_no) in bscv_status() argument
3946 ASSERT(bscv_held(ssp)); in bscv_status()
3948 BSCV_TRACE(ssp, 'D', "bscv_status", "state_chng 0x%x dev_no 0x%x", in bscv_status()
3962 ssp->cssp_prog = B_TRUE; in bscv_status()
3963 BSCV_TRACE(ssp, 'D', "bscv_status", in bscv_status()
3965 ssp->cssp_prog); in bscv_status()
3973 BSCV_TRACE(ssp, 'D', "bscv_status", in bscv_status()
3979 BSCV_TRACE(ssp, 'D', "bscv_status", in bscv_status()
3981 (void) bscv_attach_common(ssp); in bscv_status()
3982 BSCV_TRACE(ssp, 'D', "bscv_status", in bscv_status()
3989 fanspeed = bscv_get8(ssp, chan_general, in bscv_status()
3997 ssp->fanspeed[dev_no - 1] = fanspeed; in bscv_status()
4002 (void) bscv_get8(ssp, chan_general, in bscv_status()
4007 (void) bscv_get8(ssp, chan_general, EBUS_IDX_GPIP); in bscv_status()
4011 (void) bscv_get8(ssp, chan_general, EBUS_IDX_CBREAK_STATUS); in bscv_status()
4016 temp = bscv_get8(ssp, chan_general, in bscv_status()
4024 ssp->temps.temp[dev_no - 1] = temp; in bscv_status()
4029 (void) bscv_get8(ssp, chan_general, EBUS_IDX_SUPPLY_LO); in bscv_status()
4030 (void) bscv_get8(ssp, chan_general, EBUS_IDX_SUPPLY_HI); in bscv_status()
4048 bscv_generic_sysevent(bscv_soft_state_t *ssp, char *class, char *subclass, in bscv_generic_sysevent() argument
4054 BSCV_TRACE(ssp, 'E', "bscv_generic_sysevent", "%s/%s:(%s,%s,%d) %s", in bscv_generic_sysevent()
4059 BSCV_TRACE(ssp, 'E', "bscv_generic_sysevent", in bscv_generic_sysevent()
4064 BSCV_TRACE(ssp, 'E', "bscv_generic_sysevent", in bscv_generic_sysevent()
4070 BSCV_TRACE(ssp, 'E', "bscv_generic_sysevent", in bscv_generic_sysevent()
4076 BSCV_TRACE(ssp, 'E', "bscv_generic_sysevent", in bscv_generic_sysevent()
4082 BSCV_TRACE(ssp, 'E', "bscv_generic_sysevent", in bscv_generic_sysevent()
4088 BSCV_TRACE(ssp, 'E', "bscv_generic_sysevent", in bscv_generic_sysevent()
4094 BSCV_TRACE(ssp, 'E', "bscv_generic_sysevent", in bscv_generic_sysevent()
4100 rv = ddi_log_sysevent(ssp->dip, DDI_VENDOR_SUNW, class, in bscv_generic_sysevent()
4104 BSCV_TRACE(ssp, 'E', "bscv_generic_sysevent", "sent sysevent"); in bscv_generic_sysevent()
4120 bscv_sysevent(bscv_soft_state_t *ssp, lom_event_t *event) in bscv_sysevent() argument
4128 BSCV_TRACE(ssp, 'E', "bscv_sysevent", "processing event"); in bscv_sysevent()
4141 res_id = bscv_get_label(ssp->temps.name, ssp->temps.num, in bscv_sysevent()
4161 res_id = bscv_get_label(ssp->fan_names, ssp->num_fans, in bscv_sysevent()
4176 res_id = bscv_get_label(ssp->sflags.name, ssp->sflags.num, in bscv_sysevent()
4220 res_id = bscv_get_label(ssp->led_names, MAX_LED_ID, in bscv_sysevent()
4253 BSCV_TRACE(ssp, 'E', "bscv_sysevent", "class/subclass NULL"); in bscv_sysevent()
4257 bscv_generic_sysevent(ssp, class, subclass, fru_id, res_id, fru_state, in bscv_sysevent()
4284 bscv_prog(bscv_soft_state_t *ssp, intptr_t arg, int mode) in bscv_prog() argument
4301 BSCV_TRACE(ssp, 'U', "bscv_prog", in bscv_prog()
4304 mutex_enter(&ssp->prog_mu); in bscv_prog()
4313 prog->data[0] = bscv_get8_cached(ssp, in bscv_prog()
4321 res = bscv_prog_stop_lom(ssp); in bscv_prog()
4323 res = bscv_prog_start_lom(ssp); in bscv_prog()
4328 if (ssp->image == NULL) { in bscv_prog()
4329 ssp->image = (uint8_t *)kmem_zalloc( in bscv_prog()
4332 res = bscv_prog_receive_image(ssp, prog, in bscv_prog()
4333 ssp->image, BSC_IMAGE_MAX_SIZE); in bscv_prog()
4335 mutex_exit(&ssp->prog_mu); in bscv_prog()
4342 bscv_check_loader_config(bscv_soft_state_t *ssp, boolean_t is_image2) in bscv_check_loader_config() argument
4344 BSCV_TRACE(ssp, 'U', "bscv_check_loader_config", in bscv_check_loader_config()
4346 ssp->loader_running, is_image2); in bscv_check_loader_config()
4358 if (ssp->loader_running && !is_image2) { in bscv_check_loader_config()
4364 } else if (!ssp->loader_running && is_image2) { in bscv_check_loader_config()
4375 bscv_get_pagesize(bscv_soft_state_t *ssp) in bscv_get_pagesize() argument
4379 ASSERT(bscv_held(ssp)); in bscv_get_pagesize()
4381 pagesize = bscv_get32(ssp, chan_prog, in bscv_get_pagesize()
4384 BSCV_TRACE(ssp, 'U', "bscv_get_pagesize", "pagesize 0x%x", pagesize); in bscv_get_pagesize()
4393 bscv_set_pagesize(bscv_soft_state_t *ssp, uint32_t pagesize) in bscv_set_pagesize() argument
4397 ASSERT(bscv_held(ssp)); in bscv_set_pagesize()
4399 old_pagesize = bscv_get_pagesize(ssp); in bscv_set_pagesize()
4405 bscv_put32(ssp, chan_prog, in bscv_set_pagesize()
4412 bscv_enter_programming_mode(bscv_soft_state_t *ssp) in bscv_enter_programming_mode() argument
4416 ASSERT(bscv_held(ssp)); in bscv_enter_programming_mode()
4418 bscv_put8(ssp, chan_prog, in bscv_enter_programming_mode()
4422 retval = bscv_get8(ssp, chan_prog, BSCVA(EBUS_CMD_SPACE_PROGRAM, in bscv_enter_programming_mode()
4429 bscv_leave_programming_mode(bscv_soft_state_t *ssp, boolean_t with_jmp) in bscv_leave_programming_mode() argument
4432 ASSERT(bscv_held(ssp)); in bscv_leave_programming_mode()
4436 BSCV_TRACE(ssp, 'U', "bscv_leave_programming_mode", in bscv_leave_programming_mode()
4440 BSCV_TRACE(ssp, 'U', "bscv_leave_programming_mode", in bscv_leave_programming_mode()
4444 bscv_put8(ssp, chan_prog, in bscv_leave_programming_mode()
4450 bscv_set_jump_to_addr(bscv_soft_state_t *ssp, uint32_t loadaddr) in bscv_set_jump_to_addr() argument
4452 ASSERT(bscv_held(ssp)); in bscv_set_jump_to_addr()
4454 bscv_put32(ssp, chan_prog, in bscv_set_jump_to_addr()
4457 BSCV_TRACE(ssp, 'U', "bscv_set_jump_to_addr", in bscv_set_jump_to_addr()
4462 bscv_erase_once(bscv_soft_state_t *ssp, uint32_t loadaddr, uint32_t image_size) in bscv_erase_once() argument
4466 ASSERT(bscv_held(ssp)); in bscv_erase_once()
4477 BSCV_TRACE(ssp, 'U', "bscv_erase_once", "sending erase command"); in bscv_erase_once()
4479 bscv_put32(ssp, chan_prog, in bscv_erase_once()
4484 bscv_put32(ssp, chan_prog, in bscv_erase_once()
4489 bscv_put8(ssp, chan_prog, in bscv_erase_once()
4494 retval = bscv_get8(ssp, chan_prog, in bscv_erase_once()
4500 bscv_do_erase(bscv_soft_state_t *ssp, uint32_t loadaddr, uint32_t image_size, in bscv_do_erase() argument
4507 retval = bscv_erase_once(ssp, loadaddr, image_size); in bscv_do_erase()
4522 bscv_set_page(bscv_soft_state_t *ssp, uint32_t addr) in bscv_set_page() argument
4527 ASSERT(bscv_held(ssp)); in bscv_set_page()
4534 bscv_put32(ssp, chan_prog, in bscv_set_page()
4537 retval = bscv_get32(ssp, chan_prog, in bscv_set_page()
4554 bscv_do_page_data_once(bscv_soft_state_t *ssp, uint32_t index, in bscv_do_page_data_once() argument
4563 ASSERT(bscv_held(ssp)); in bscv_do_page_data_once()
4565 BSCV_TRACE(ssp, 'P', "bscv_do_page_data_once", "index 0x%x", index); in bscv_do_page_data_once()
4569 bscv_rep_rw8(ssp, chan_prog, imagep + index, in bscv_do_page_data_once()
4574 BSCV_TRACE(ssp, 'P', "bscv_do_page_once", in bscv_do_page_data_once()
4578 bscv_rep_rw8(ssp, chan_prog, imagep + index, in bscv_do_page_data_once()
4583 bscv_put8(ssp, chan_prog, in bscv_do_page_data_once()
4600 bscv_put16(ssp, chan_prog, in bscv_do_page_data_once()
4603 bscv_put8(ssp, chan_prog, in bscv_do_page_data_once()
4607 retval = bscv_get8(ssp, chan_prog, in bscv_do_page_data_once()
4614 static uint8_t bscv_do_page(bscv_soft_state_t *ssp, uint32_t loadaddr, in bscv_do_page() argument
4622 BSCV_TRACE(ssp, 'P', "bscv_do_page", "index 0x%x", index); in bscv_do_page()
4631 retval = bscv_set_page(ssp, loadaddr + index); in bscv_do_page()
4644 BSCV_TRACE(ssp, 'P', "bscv_do_page", "sending data for page"); in bscv_do_page()
4646 retval = bscv_do_page_data_once(ssp, index, image_size, in bscv_do_page()
4657 BSCV_TRACE(ssp, 'U', "bscv_do_page", "Returning 0x%x for index 0x%x," in bscv_do_page()
4665 bscv_do_pages(bscv_soft_state_t *ssp, uint32_t loadaddr, uint32_t image_size, in bscv_do_pages() argument
4671 BSCV_TRACE(ssp, 'P', "bscv_do_pages", "entered"); in bscv_do_pages()
4674 retval = bscv_do_page(ssp, loadaddr, index, image_size, in bscv_do_pages()
4676 if (bscv_faulty(ssp) || !PSR_SUCCESS(retval)) { in bscv_do_pages()
4677 BSCV_TRACE(ssp, 'U', "bscv_do_pages", in bscv_do_pages()
4687 bscv_prog_image(bscv_soft_state_t *ssp, boolean_t is_image2, in bscv_prog_image() argument
4694 BSCV_TRACE(ssp, 'U', "bscv_prog_image", in bscv_prog_image()
4698 if (!bscv_check_loader_config(ssp, is_image2)) in bscv_prog_image()
4705 bscv_enter(ssp); in bscv_prog_image()
4707 pagesize = bscv_get_pagesize(ssp); in bscv_prog_image()
4709 retval = bscv_enter_programming_mode(ssp); in bscv_prog_image()
4710 if (bscv_faulty(ssp) || !PSR_PROG(retval)) { in bscv_prog_image()
4716 BSCV_TRACE(ssp, 'U', "bscv_prog_image", "entered programming mode"); in bscv_prog_image()
4723 retval = bscv_do_erase(ssp, loadaddr, image_size, is_image2); in bscv_prog_image()
4724 if (bscv_faulty(ssp) || !PSR_SUCCESS(retval)) { in bscv_prog_image()
4731 BSCV_TRACE(ssp, 'U', "bscv_prog_image", in bscv_prog_image()
4737 (void) bscv_set_pagesize(ssp, pagesize); in bscv_prog_image()
4739 retval = bscv_do_pages(ssp, loadaddr, image_size, pagesize, imagep, in bscv_prog_image()
4741 if (bscv_faulty(ssp) || !PSR_SUCCESS(retval)) { in bscv_prog_image()
4742 BSCV_TRACE(ssp, 'U', "bscv_prog_image", in bscv_prog_image()
4754 bscv_set_jump_to_addr(ssp, loadaddr); in bscv_prog_image()
4755 ssp->loader_running = B_TRUE; in bscv_prog_image()
4756 bscv_leave_programming_mode(ssp, B_TRUE); in bscv_prog_image()
4762 bscv_set_jump_to_addr(ssp, 0); in bscv_prog_image()
4765 BSCV_TRACE(ssp, 'U', "bscv_prog_image", in bscv_prog_image()
4771 BSCV_TRACE(ssp, 'U', "bscv_prog_image", in bscv_prog_image()
4775 bscv_leave_programming_mode(ssp, B_FALSE); in bscv_prog_image()
4776 ssp->loader_running = B_FALSE; in bscv_prog_image()
4779 bscv_exit(ssp); in bscv_prog_image()
4786 bscv_prog_receive_image(bscv_soft_state_t *ssp, lom_prog_t *prog, in bscv_prog_receive_image() argument
4794 if ((prog->index & 0x7FFF) != ssp->prog_index) { in bscv_prog_receive_image()
4795 BSCV_TRACE(ssp, 'U', "bscv_prog_receive_image", in bscv_prog_receive_image()
4797 prog->index & 0x7fff, ssp->prog_index); in bscv_prog_receive_image()
4808 ssp->image_ptr = 0; in bscv_prog_receive_image()
4811 if ((ssp->image_ptr + prog->size) > max_size) { in bscv_prog_receive_image()
4814 (ssp->image_ptr + prog->size), max_size); in bscv_prog_receive_image()
4817 bcopy(prog->data, &imagep[ssp->image_ptr], prog->size); in bscv_prog_receive_image()
4818 ssp->image_ptr += prog->size; in bscv_prog_receive_image()
4820 ssp->prog_index++; in bscv_prog_receive_image()
4836 if (size != (ssp->image_ptr - 4)) { in bscv_prog_receive_image()
4839 size, (ssp->image_ptr - 1)); in bscv_prog_receive_image()
4842 res = bscv_prog_image(ssp, in bscv_prog_receive_image()
4843 ssp->image2_processing, in bscv_prog_receive_image()
4844 imagep + 4, ssp->image_ptr - 4, loadaddr); in bscv_prog_receive_image()
4850 ssp->image2_processing = !ssp->image2_processing; in bscv_prog_receive_image()
4851 } else if ((ssp->image_ptr < sizeof (*prog_data)) || in bscv_prog_receive_image()
4853 (ssp->image_ptr - sizeof (*prog_data)))) { in bscv_prog_receive_image()
4861 res = bscv_prog_image(ssp, B_TRUE, in bscv_prog_receive_image()
4865 ssp->image2_processing = B_FALSE; in bscv_prog_receive_image()
4868 res = bscv_prog_image(ssp, B_FALSE, in bscv_prog_receive_image()
4872 ssp->image2_processing = B_TRUE; in bscv_prog_receive_image()
4881 ssp->prog_index = 0; in bscv_prog_receive_image()
4882 ssp->image_ptr = 0; in bscv_prog_receive_image()
4888 bscv_prog_stop_lom(bscv_soft_state_t *ssp) in bscv_prog_stop_lom() argument
4890 if (ssp->programming) { in bscv_prog_stop_lom()
4898 if (bscv_pause_event_daemon(ssp) == BSCV_FAILURE) { in bscv_prog_stop_lom()
4899 BSCV_TRACE(ssp, 'Q', "bscv_prog_stop_lom", in bscv_prog_stop_lom()
4904 bscv_enter(ssp); in bscv_prog_stop_lom()
4906 ssp->programming = B_TRUE; in bscv_prog_stop_lom()
4908 bscv_exit(ssp); in bscv_prog_stop_lom()
4912 ssp->prog_index = 0; in bscv_prog_stop_lom()
4913 ssp->image2_processing = B_FALSE; in bscv_prog_stop_lom()
4919 bscv_prog_start_lom(bscv_soft_state_t *ssp) in bscv_prog_start_lom() argument
4923 if (!ssp->programming) { in bscv_prog_start_lom()
4928 if (ssp->image != NULL) { in bscv_prog_start_lom()
4929 kmem_free((void *)ssp->image, BSC_IMAGE_MAX_SIZE); in bscv_prog_start_lom()
4930 ssp->image = NULL; in bscv_prog_start_lom()
4938 bscv_enter(ssp); in bscv_prog_start_lom()
4941 bscv_clear_fault(ssp); in bscv_prog_start_lom()
4943 if (ssp->loader_running) { in bscv_prog_start_lom()
4948 bscv_put8(ssp, chan_prog, in bscv_prog_start_lom()
4951 bscv_put8(ssp, chan_prog, in bscv_prog_start_lom()
4954 ssp->loader_running = B_FALSE; in bscv_prog_start_lom()
4959 ssp->prog_mode_only = B_FALSE; in bscv_prog_start_lom()
4960 ssp->programming = B_FALSE; in bscv_prog_start_lom()
4962 if (bscv_attach_common(ssp) == DDI_FAILURE) { in bscv_prog_start_lom()
4963 ssp->prog_mode_only = B_TRUE; in bscv_prog_start_lom()
4967 bscv_exit(ssp); in bscv_prog_start_lom()
4969 if (!ssp->prog_mode_only) { in bscv_prog_start_lom()
4977 bscv_start_event_daemon(ssp); in bscv_prog_start_lom()
4978 bscv_resume_event_daemon(ssp); in bscv_prog_start_lom()
5006 bscv_attach_common(bscv_soft_state_t *ssp) in bscv_attach_common() argument
5008 ASSERT(bscv_held(ssp)); in bscv_attach_common()
5010 BSCV_TRACE(ssp, 'A', "bscv_attach_common:", ""); in bscv_attach_common()
5016 ssp->reporting_level = 2; in bscv_attach_common()
5023 ssp->serial_reporting = LOM_SER_EVENTS_DEF; in bscv_attach_common()
5026 bscv_setup_capability(ssp); in bscv_attach_common()
5028 if (bscv_probe_check(ssp) == DDI_FAILURE) { in bscv_attach_common()
5037 bscv_setup_hostname(ssp); in bscv_attach_common()
5038 bscv_setup_static_info(ssp); in bscv_attach_common()
5039 bscv_setup_events(ssp); in bscv_attach_common()
5042 bscv_inform_bsc(ssp, BSC_INFORM_ONLINE); in bscv_attach_common()
5050 if (ssp->progress & BSCV_WDOG_CFG) in bscv_attach_common()
5051 bscv_setup_watchdog(ssp); in bscv_attach_common()
5054 if (ssp->progress & BSCV_SIG_SENT) in bscv_attach_common()
5055 bscv_write_sig(ssp, ssp->last_sig); in bscv_attach_common()
5074 bscv_cleanup(bscv_soft_state_t *ssp) in bscv_cleanup() argument
5080 instance = ssp->instance; in bscv_cleanup()
5082 if (ssp->progress & BSCV_LOCKS) { in bscv_cleanup()
5083 bscv_enter(ssp); in bscv_cleanup()
5086 if (ssp->progress & BSCV_THREAD) { in bscv_cleanup()
5087 if (bscv_stop_event_daemon(ssp) == DDI_FAILURE) { in bscv_cleanup()
5089 if (ssp->progress & BSCV_LOCKS) { in bscv_cleanup()
5090 bscv_exit(ssp); in bscv_cleanup()
5096 if (ssp->progress & BSCV_NODES) { in bscv_cleanup()
5097 ddi_remove_minor_node(ssp->dip, NULL); in bscv_cleanup()
5100 if (ssp->progress & BSCV_MAPPED_REGS) { in bscv_cleanup()
5106 if (ssp->serial_reporting == LOM_SER_EVENTS_ON) { in bscv_cleanup()
5108 } else if (ssp->serial_reporting == LOM_SER_EVENTS_OFF) { in bscv_cleanup()
5110 } else if (ssp->serial_reporting == LOM_SER_EVENTS_DEF) { in bscv_cleanup()
5113 bscv_setclear8_volatile(ssp, chan_general, EBUS_IDX_ALARM, in bscv_cleanup()
5123 BSCV_TRACE(ssp, 'W', "bscv_cleanup", in bscv_cleanup()
5125 if (bscv_get8_cached(ssp, EBUS_IDX_WDOG_CTRL) & in bscv_cleanup()
5127 bscv_setclear8(ssp, chan_general, EBUS_IDX_WDOG_CTRL, in bscv_cleanup()
5136 if (ssp->progress & BSCV_MAPPED_REGS) { in bscv_cleanup()
5137 bscv_unmap_regs(ssp); in bscv_cleanup()
5145 if (ssp->progress & BSCV_LOCKS) { in bscv_cleanup()
5146 bscv_exit(ssp); in bscv_cleanup()
5147 cv_destroy(&ssp->task_cv); in bscv_cleanup()
5148 cv_destroy(&ssp->task_evnt_cv); in bscv_cleanup()
5149 mutex_destroy(&ssp->task_mu); in bscv_cleanup()
5150 mutex_destroy(&ssp->prog_mu); in bscv_cleanup()
5151 mutex_destroy(&ssp->cmd_mutex); in bscv_cleanup()
5154 if (ssp->image != NULL) { in bscv_cleanup()
5155 kmem_free((void *)ssp->image, BSC_IMAGE_MAX_SIZE); in bscv_cleanup()
5159 bscv_watchdog_cyclic_remove(ssp); in bscv_cleanup()
5173 static void bscv_setup_capability(bscv_soft_state_t *ssp) in bscv_setup_capability() argument
5175 ASSERT(bscv_held(ssp)); in bscv_setup_capability()
5177 if (ssp->prog_mode_only) { in bscv_setup_capability()
5179 ssp->cap0 = 0; in bscv_setup_capability()
5180 ssp->cap1 = 0; in bscv_setup_capability()
5181 ssp->cap2 = 0; in bscv_setup_capability()
5185 ssp->cap0 = bscv_get8(ssp, chan_general, EBUS_IDX_CAP0); in bscv_setup_capability()
5186 ssp->cap1 = bscv_get8(ssp, chan_general, EBUS_IDX_CAP1); in bscv_setup_capability()
5187 ssp->cap2 = bscv_get8(ssp, chan_general, EBUS_IDX_CAP2); in bscv_setup_capability()
5188 if (!bscv_faulty(ssp)) { in bscv_setup_capability()
5189 BSCV_TRACE(ssp, 'A', "bscv_setup_capability", in bscv_setup_capability()
5191 ssp->cap0, ssp->cap1, ssp->cap2); in bscv_setup_capability()
5194 ssp->cap0 = 0; ssp->cap1 = 0; ssp->cap2 = 0; in bscv_setup_capability()
5207 static int bscv_probe_check(bscv_soft_state_t *ssp) in bscv_probe_check() argument
5212 ASSERT(bscv_held(ssp)); in bscv_probe_check()
5214 BSCV_TRACE(ssp, 'A', "bscv_probe_check", ""); in bscv_probe_check()
5216 if (!ssp->prog_mode_only) { in bscv_probe_check()
5224 bscv_clear_fault(ssp); in bscv_probe_check()
5225 probeval = bscv_get8(ssp, chan_general, EBUS_IDX_PROBEAA); in bscv_probe_check()
5226 if (bscv_faulty(ssp)) { in bscv_probe_check()
5227 ssp->prog_mode_only = B_TRUE; in bscv_probe_check()
5229 BSCV_TRACE(ssp, 'A', "bscv_probe_check", in bscv_probe_check()
5236 probeval = bscv_get8(ssp, chan_general, in bscv_probe_check()
5238 if (bscv_faulty(ssp)) { in bscv_probe_check()
5239 BSCV_TRACE(ssp, 'A', "bscv_probe_check", in bscv_probe_check()
5241 ssp->prog_mode_only = B_TRUE; in bscv_probe_check()
5247 BSCV_TRACE(ssp, 'A', "bscv_probe_check", in bscv_probe_check()
5250 ssp->prog_mode_only = B_TRUE; in bscv_probe_check()
5262 if (!ssp->prog_mode_only) { in bscv_probe_check()
5263 (void) bscv_get8(ssp, chan_general, EBUS_IDX_STATE_CHNG); in bscv_probe_check()
5264 if (bscv_faulty(ssp)) { in bscv_probe_check()
5265 BSCV_TRACE(ssp, 'A', "bscv_probe_check", in bscv_probe_check()
5267 ssp->prog_mode_only = B_TRUE; in bscv_probe_check()
5271 if (!ssp->prog_mode_only) { in bscv_probe_check()
5283 (void) bscv_get8(ssp, chan_general, i); in bscv_probe_check()
5286 if (bscv_faulty(ssp)) { in bscv_probe_check()
5287 BSCV_TRACE(ssp, 'A', "bscv_probe_check", in bscv_probe_check()
5289 ssp->prog_mode_only = B_TRUE; in bscv_probe_check()
5300 if (!ssp->prog_mode_only) { in bscv_probe_check()
5301 if ((bscv_get8_cached(ssp, EBUS_IDX_PROBE55) != 0x55) || in bscv_probe_check()
5302 (bscv_get8_cached(ssp, EBUS_IDX_PROBEAA) != 0xAA)) { in bscv_probe_check()
5304 BSCV_TRACE(ssp, 'A', "bscv_probe_check", in bscv_probe_check()
5307 BSCV_TRACE(ssp, 'A', "bscv_probe_check", in bscv_probe_check()
5310 bscv_get8_cached(ssp, i), in bscv_probe_check()
5311 bscv_get8_cached(ssp, i + 1), in bscv_probe_check()
5312 bscv_get8_cached(ssp, i + 2), in bscv_probe_check()
5313 bscv_get8_cached(ssp, i + 3), in bscv_probe_check()
5314 bscv_get8_cached(ssp, i + 4), in bscv_probe_check()
5315 bscv_get8_cached(ssp, i + 5), in bscv_probe_check()
5316 bscv_get8_cached(ssp, i + 6), in bscv_probe_check()
5317 bscv_get8_cached(ssp, i + 7), in bscv_probe_check()
5318 bscv_get8_cached(ssp, i + 8), in bscv_probe_check()
5319 bscv_get8_cached(ssp, i + 9), in bscv_probe_check()
5320 bscv_get8_cached(ssp, i + 10), in bscv_probe_check()
5321 bscv_get8_cached(ssp, i + 11), in bscv_probe_check()
5322 bscv_get8_cached(ssp, i + 12), in bscv_probe_check()
5323 bscv_get8_cached(ssp, i + 13), in bscv_probe_check()
5324 bscv_get8_cached(ssp, i + 14), in bscv_probe_check()
5325 bscv_get8_cached(ssp, i + 15)); in bscv_probe_check()
5327 ssp->prog_mode_only = B_TRUE; in bscv_probe_check()
5331 return ((ssp->prog_mode_only == B_FALSE) ? DDI_SUCCESS : DDI_FAILURE); in bscv_probe_check()
5410 bscv_soft_state_t *ssp; in bscv_nodename_set() local
5412 ssp = ddi_get_soft_state(bscv_statep, bscv_idi_mgr.valid_inst); in bscv_nodename_set()
5414 if (ssp == NULL) { in bscv_nodename_set()
5421 mutex_enter(&ssp->task_mu); in bscv_nodename_set()
5422 ssp->nodename_change = B_TRUE; in bscv_nodename_set()
5423 cv_signal(&ssp->task_cv); in bscv_nodename_set()
5424 mutex_exit(&ssp->task_mu); in bscv_nodename_set()
5438 bscv_soft_state_t *ssp; in bscv_sig_set() local
5441 ssp = ddi_get_soft_state(bscv_statep, bscv_idi_mgr.valid_inst); in bscv_sig_set()
5443 if (ssp == NULL) { in bscv_sig_set()
5451 bscv_enter(ssp); in bscv_sig_set()
5452 bscv_write_sig(ssp, sig); in bscv_sig_set()
5453 bscv_exit(ssp); in bscv_sig_set()
5460 bscv_wdog_do_pat(bscv_soft_state_t *ssp) in bscv_wdog_do_pat() argument
5468 pat = ssp->pat_seq++; in bscv_wdog_do_pat()
5483 ddi_put8(ssp->channel[chan_wdogpat].handle, in bscv_wdog_do_pat()
5484 ssp->channel[chan_wdogpat].regs, pat); in bscv_wdog_do_pat()
5486 BSCV_TRACE(ssp, 'W', "bscv_wdog_pat", "patted the dog with seq %d", in bscv_wdog_do_pat()
5505 bscv_soft_state_t *ssp; in bscv_wdog_pat() local
5507 ssp = ddi_get_soft_state(bscv_statep, bscv_idi_mgr.valid_inst); in bscv_wdog_pat()
5509 if (ssp == NULL) { in bscv_wdog_pat()
5513 } else if (ssp->nchannels == 0) { in bscv_wdog_pat()
5520 bscv_wdog_do_pat(ssp); in bscv_wdog_pat()
5533 bscv_soft_state_t *ssp; in bscv_wdog_cfg() local
5535 ssp = ddi_get_soft_state(bscv_statep, bscv_idi_mgr.valid_inst); in bscv_wdog_cfg()
5537 if (ssp == NULL) { in bscv_wdog_cfg()
5541 } else if (ssp->nchannels == 0) { in bscv_wdog_cfg()
5549 BSCV_TRACE(ssp, 'W', "bscv_wdog_set", "data passed in is size" in bscv_wdog_cfg()
5555 BSCV_TRACE(ssp, 'W', "bscv_wdog_cfg", "enable_wdog %s, " in bscv_wdog_cfg()
5560 bscv_write_wdog_cfg(ssp, in bscv_wdog_cfg()
5569 bscv_write_wdog_cfg(bscv_soft_state_t *ssp, in bscv_write_wdog_cfg() argument
5583 ssp->watchdog_timeout = 1; in bscv_write_wdog_cfg()
5585 ssp->watchdog_timeout = 127; in bscv_write_wdog_cfg()
5587 ssp->watchdog_timeout = wdog_timeout_s; in bscv_write_wdog_cfg()
5601 ssp->watchdog_reset_on_timeout = reset_system_on_timeout; in bscv_write_wdog_cfg()
5603 ddi_put8(ssp->channel[chan_wdogpat].handle, in bscv_write_wdog_cfg()
5604 ssp->channel[chan_wdogpat].regs, cfg); in bscv_write_wdog_cfg()
5607 ssp->watchdog_change = B_TRUE; in bscv_write_wdog_cfg()
5609 BSCV_TRACE(ssp, 'W', "bscv_wdog_cfg", in bscv_write_wdog_cfg()
5619 static void bscv_setup_watchdog(bscv_soft_state_t *ssp) in bscv_setup_watchdog() argument
5627 ASSERT(bscv_held(ssp)); in bscv_setup_watchdog()
5630 bscv_put8(ssp, chan_general, in bscv_setup_watchdog()
5631 EBUS_IDX_WDOG_TIME, ssp->watchdog_timeout); in bscv_setup_watchdog()
5634 if (ssp->watchdog_reset_on_timeout) { in bscv_setup_watchdog()
5650 bscv_setclear8_volatile(ssp, chan_general, EBUS_IDX_WDOG_CTRL, in bscv_setup_watchdog()
5655 bscv_watchdog_cyclic_add(ssp); in bscv_setup_watchdog()
5657 ssp->progress |= BSCV_WDOG_CFG; in bscv_setup_watchdog()
5668 static void bscv_setup_hostname(bscv_soft_state_t *ssp) in bscv_setup_hostname() argument
5675 ASSERT(bscv_held(ssp)); in bscv_setup_hostname()
5685 bscv_read_hostname(ssp, lom_nodename); in bscv_setup_hostname()
5691 hostlen = (size_t)bscv_get8(ssp, chan_general, EBUS_IDX_HNAME_LENGTH); in bscv_setup_hostname()
5697 BSCV_TRACE(ssp, 'A', "bscv_setup_hostname", in bscv_setup_hostname()
5702 bscv_write_hostname(ssp, in bscv_setup_hostname()
5707 ssp->progress |= BSCV_HOSTNAME_DONE; in bscv_setup_hostname()
5718 bscv_read_hostname(bscv_soft_state_t *ssp, char *lom_nodename) in bscv_read_hostname() argument
5725 ASSERT(bscv_held(ssp)); in bscv_read_hostname()
5735 bscv_clear_fault(ssp); in bscv_read_hostname()
5736 length = bscv_get8(ssp, chan_general, EBUS_IDX_HNAME_LENGTH); in bscv_read_hostname()
5737 if (bscv_faulty(ssp)) { in bscv_read_hostname()
5742 lom_nodename[i] = bscv_get8_once(ssp, in bscv_read_hostname()
5745 if (bscv_retcode(ssp) != 0) { in bscv_read_hostname()
5765 ssp->had_fault = B_TRUE; in bscv_read_hostname()
5767 BSCV_TRACE(ssp, 'R', "bscv_read_hostname", in bscv_read_hostname()
5779 bscv_write_hostname(bscv_soft_state_t *ssp, in bscv_write_hostname() argument
5786 ASSERT(bscv_held(ssp)); in bscv_write_hostname()
5796 bscv_clear_fault(ssp); in bscv_write_hostname()
5797 bscv_put8(ssp, chan_general, EBUS_IDX_HNAME_LENGTH, length); in bscv_write_hostname()
5798 if (bscv_faulty(ssp)) { in bscv_write_hostname()
5803 bscv_put8_once(ssp, chan_general, in bscv_write_hostname()
5806 if (bscv_retcode(ssp) != 0) { in bscv_write_hostname()
5822 ssp->had_fault = B_TRUE; in bscv_write_hostname()
5824 BSCV_TRACE(ssp, 'R', "bscv_write_hostname", in bscv_write_hostname()
5837 bscv_setup_static_info(bscv_soft_state_t *ssp) in bscv_setup_static_info() argument
5846 ASSERT(bscv_held(ssp)); in bscv_setup_static_info()
5856 bzero(&ssp->volts, sizeof (lom_volts_t)); in bscv_setup_static_info()
5857 ssp->volts.num = EBUS_CONFIG2_NSUPPLY_DEC( in bscv_setup_static_info()
5858 bscv_get8(ssp, chan_general, EBUS_IDX_CONFIG2)); in bscv_setup_static_info()
5859 if (ssp->volts.num > MAX_VOLTS) { in bscv_setup_static_info()
5863 ssp->volts.num, MAX_VOLTS); in bscv_setup_static_info()
5864 ssp->volts.num = MAX_VOLTS; in bscv_setup_static_info()
5867 BSCV_TRACE(ssp, 'A', "bscv_setup_static_info", in bscv_setup_static_info()
5868 "num volts %d", ssp->volts.num); in bscv_setup_static_info()
5869 (void) bscv_read_env_name(ssp, in bscv_setup_static_info()
5873 ssp->volts.name, in bscv_setup_static_info()
5874 ssp->volts.num); in bscv_setup_static_info()
5876 mask = bscv_get8(ssp, chan_general, BSCVA(EBUS_CMD_SPACE2, in bscv_setup_static_info()
5878 mask |= bscv_get8(ssp, chan_general, BSCVA(EBUS_CMD_SPACE2, in bscv_setup_static_info()
5881 for (i = 0; i < ssp->volts.num; i++) { in bscv_setup_static_info()
5882 ssp->volts.shutdown_enabled[i] = in bscv_setup_static_info()
5891 bcopy(ssp->temps.temp, oldtemps, sizeof (oldtemps)); in bscv_setup_static_info()
5893 bzero(&ssp->temps, sizeof (lom_temp_t)); in bscv_setup_static_info()
5894 ssp->temps.num = EBUS_CONFIG2_NTEMP_DEC( in bscv_setup_static_info()
5895 bscv_get8(ssp, chan_general, EBUS_IDX_CONFIG2)); in bscv_setup_static_info()
5896 if (ssp->temps.num > MAX_TEMPS) { in bscv_setup_static_info()
5901 ssp->temps.num, MAX_TEMPS); in bscv_setup_static_info()
5902 ssp->temps.num = MAX_TEMPS; in bscv_setup_static_info()
5904 ssp->temps.num_ov = EBUS_CONFIG3_NOTEMP_DEC( in bscv_setup_static_info()
5905 bscv_get8(ssp, chan_general, EBUS_IDX_CONFIG3)); in bscv_setup_static_info()
5906 if (ssp->temps.num_ov > MAX_TEMPS) { in bscv_setup_static_info()
5911 ssp->temps.num_ov, MAX_TEMPS); in bscv_setup_static_info()
5912 ssp->temps.num_ov = MAX_TEMPS; in bscv_setup_static_info()
5914 BSCV_TRACE(ssp, 'A', "bscv_setup_static_info", in bscv_setup_static_info()
5916 ssp->temps.num, ssp->temps.num_ov); in bscv_setup_static_info()
5918 addr_space_ptr = bscv_read_env_name(ssp, in bscv_setup_static_info()
5922 ssp->temps.name, in bscv_setup_static_info()
5923 ssp->temps.num); in bscv_setup_static_info()
5925 for (i = 0; i < ssp->temps.num; i++) { in bscv_setup_static_info()
5926 ssp->temps.warning[i] = (int8_t)bscv_get8(ssp, chan_general, in bscv_setup_static_info()
5933 if ((bscv_get8(ssp, chan_general, BSCVA(EBUS_CMD_SPACE4, in bscv_setup_static_info()
5935 ssp->temps.shutdown[i] = (int8_t)bscv_get8(ssp, in bscv_setup_static_info()
5939 ssp->temps.shutdown[i] = 0; in bscv_setup_static_info()
5943 for (i = 0; i < ssp->temps.num; i++) { in bscv_setup_static_info()
5944 temp = bscv_get8(ssp, chan_general, EBUS_IDX_TEMP1 + i); in bscv_setup_static_info()
5947 ssp->temps.temp[i] = temp; in bscv_setup_static_info()
5950 ssp->temps.temp[i] = oldtemps[i]; in bscv_setup_static_info()
5958 if (bscv_get8(ssp, chan_general, in bscv_setup_static_info()
5963 (void) bscv_read_env_name(ssp, in bscv_setup_static_info()
5967 ssp->temps.name_ov, in bscv_setup_static_info()
5968 ssp->temps.num_ov); in bscv_setup_static_info()
5973 bzero(&ssp->sflags, sizeof (lom_sflags_t)); in bscv_setup_static_info()
5974 ssp->sflags.num = EBUS_CONFIG3_NBREAKERS_DEC(bscv_get8(ssp, in bscv_setup_static_info()
5976 if (ssp->sflags.num > MAX_STATS) { in bscv_setup_static_info()
5981 ssp->sflags.num, MAX_STATS); in bscv_setup_static_info()
5982 ssp->sflags.num = MAX_STATS; in bscv_setup_static_info()
5984 BSCV_TRACE(ssp, 'A', "bscv_setup_static_info", in bscv_setup_static_info()
5985 "num sflags %d", ssp->sflags.num); in bscv_setup_static_info()
5987 (void) bscv_read_env_name(ssp, in bscv_setup_static_info()
5991 ssp->sflags.name, in bscv_setup_static_info()
5992 ssp->sflags.num); in bscv_setup_static_info()
5998 ssp->num_fans = EBUS_CONFIG_NFAN_DEC( in bscv_setup_static_info()
5999 bscv_get8(ssp, chan_general, EBUS_IDX_CONFIG)); in bscv_setup_static_info()
6000 if (ssp->num_fans > MAX_FANS) { in bscv_setup_static_info()
6005 ssp->num_fans, MAX_FANS); in bscv_setup_static_info()
6006 ssp->num_fans = MAX_FANS; in bscv_setup_static_info()
6009 for (i = 0; i < ssp->num_fans; i++) { in bscv_setup_static_info()
6010 fanspeed = bscv_get8(ssp, chan_general, in bscv_setup_static_info()
6018 ssp->fanspeed[i] = fanspeed; in bscv_setup_static_info()
6022 BSCV_TRACE(ssp, 'A', "bscv_setup_static_info", in bscv_setup_static_info()
6023 "num fans %d", ssp->num_fans); in bscv_setup_static_info()
6025 (void) bscv_read_env_name(ssp, in bscv_setup_static_info()
6029 ssp->fan_names, in bscv_setup_static_info()
6030 ssp->num_fans); in bscv_setup_static_info()
6034 (void) bscv_read_env_name(ssp, in bscv_setup_static_info()
6038 ssp->led_names, in bscv_setup_static_info()
6054 bscv_read_env_name(bscv_soft_state_t *ssp, in bscv_read_env_name() argument
6067 ASSERT(bscv_held(ssp)); in bscv_read_env_name()
6069 BSCV_TRACE(ssp, 'A', "bscv_read_env_name", in bscv_read_env_name()
6084 this_char = bscv_get8(ssp, chan_general, in bscv_read_env_name()
6136 bscv_setup_events(bscv_soft_state_t *ssp) in bscv_setup_events() argument
6141 ASSERT(bscv_held(ssp)); in bscv_setup_events()
6149 if (ssp->serial_reporting == LOM_SER_EVENTS_ON) { in bscv_setup_events()
6151 } else if (ssp->serial_reporting == LOM_SER_EVENTS_OFF) { in bscv_setup_events()
6153 } else if (ssp->serial_reporting == LOM_SER_EVENTS_DEF) { in bscv_setup_events()
6156 bscv_setclear8_volatile(ssp, chan_general, EBUS_IDX_ALARM, in bscv_setup_events()
6169 bscv_write_sig(bscv_soft_state_t *ssp, bscv_sig_t s) in bscv_write_sig() argument
6171 ASSERT(bscv_held(ssp)); in bscv_write_sig()
6174 bscv_put32(ssp, chan_cpusig, in bscv_write_sig()
6186 bscv_put8(ssp, chan_cpusig, in bscv_write_sig()
6200 bscv_put8(ssp, chan_cpusig, in bscv_write_sig()
6205 ssp->last_sig = s; in bscv_write_sig()
6206 ssp->progress |= BSCV_SIG_SENT; in bscv_write_sig()
6220 bscv_inform_bsc(bscv_soft_state_t *ssp, uint32_t state) in bscv_inform_bsc() argument
6222 ASSERT(bscv_held(ssp)); in bscv_inform_bsc()
6224 BSCV_TRACE(ssp, 'X', "bscv_inform_bsc", in bscv_inform_bsc()
6227 bscv_put32(ssp, chan_general, in bscv_inform_bsc()
6229 bscv_put8(ssp, chan_cpusig, in bscv_inform_bsc()
6242 bscv_soft_state_t *ssp = (bscv_soft_state_t *)arg; in bscv_watchdog_pat_request() local
6244 bscv_wdog_do_pat(ssp); in bscv_watchdog_pat_request()
6254 bscv_watchdog_cfg_request(bscv_soft_state_t *ssp, uint8_t new_state) in bscv_watchdog_cfg_request() argument
6259 BSCV_TRACE(ssp, 'X', "bscv_watchdog_cfg_request", in bscv_watchdog_cfg_request()
6261 bscv_write_wdog_cfg(ssp, in bscv_watchdog_cfg_request()
6275 bscv_set_watchdog_timer(bscv_soft_state_t *ssp, uint_t timeoutval) in bscv_set_watchdog_timer() argument
6277 BSCV_TRACE(ssp, 'X', "bscv_set_watchdog_timer:", in bscv_set_watchdog_timer()
6288 bscv_watchdog_cfg_request(ssp, WDOG_ON); in bscv_set_watchdog_timer()
6304 bscv_clear_watchdog_timer(bscv_soft_state_t *ssp) in bscv_clear_watchdog_timer() argument
6306 BSCV_TRACE(ssp, 'X', "bscv_clear_watchdog_timer", ""); in bscv_clear_watchdog_timer()
6310 bscv_watchdog_cfg_request(ssp, WDOG_OFF); in bscv_clear_watchdog_timer()
6324 bscv_soft_state_t *ssp = (bscv_soft_state_t *)arg; in bscv_panic_callback() local
6326 BSCV_TRACE(ssp, 'X', "bscv_panic_callback", in bscv_panic_callback()
6329 bscv_clear_watchdog_timer(ssp); in bscv_panic_callback()
6334 bscv_full_stop(ssp); in bscv_panic_callback()
6345 bscv_watchdog_cyclic_add(bscv_soft_state_t *ssp) in bscv_watchdog_cyclic_add() argument
6347 if (ssp->periodic_id != NULL) { in bscv_watchdog_cyclic_add()
6351 ssp->periodic_id = ddi_periodic_add(bscv_watchdog_pat_request, ssp, in bscv_watchdog_cyclic_add()
6354 BSCV_TRACE(ssp, 'X', "bscv_watchdog_cyclic_add:", in bscv_watchdog_cyclic_add()
6365 bscv_watchdog_cyclic_remove(bscv_soft_state_t *ssp) in bscv_watchdog_cyclic_remove() argument
6367 if (ssp->periodic_id == NULL) { in bscv_watchdog_cyclic_remove()
6370 ddi_periodic_delete(ssp->periodic_id); in bscv_watchdog_cyclic_remove()
6371 ssp->periodic_id = NULL; in bscv_watchdog_cyclic_remove()
6372 BSCV_TRACE(ssp, 'X', "bscv_watchdog_cyclic_remove:", in bscv_watchdog_cyclic_remove()
6385 bscv_trace(bscv_soft_state_t *ssp, char code, const char *caller, in bscv_trace() argument
6392 if (ssp->debug & (1 << (code-'@'))) { in bscv_trace()
6403 (void) strlog((short)ssp->majornum, (short)ssp->minornum, code, in bscv_trace()
6412 bscv_trace(bscv_soft_state_t *ssp, char code, const char *caller, in bscv_trace() argument