diff options
Diffstat (limited to 'usr/src/uts/common/io/bscv.c')
-rw-r--r-- | usr/src/uts/common/io/bscv.c | 315 |
1 files changed, 147 insertions, 168 deletions
diff --git a/usr/src/uts/common/io/bscv.c b/usr/src/uts/common/io/bscv.c index 9353af7323..396b0a7d5c 100644 --- a/usr/src/uts/common/io/bscv.c +++ b/usr/src/uts/common/io/bscv.c @@ -19,7 +19,7 @@ * CDDL HEADER END */ /* - * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * Copyright 2007 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -42,7 +42,6 @@ #include <sys/stream.h> #include <sys/systm.h> #include <sys/conf.h> -#include <sys/cyclic.h> #include <sys/reboot.h> #include <sys/modctl.h> #include <sys/mkdev.h> @@ -52,7 +51,6 @@ #include <sys/consdev.h> #include <sys/file.h> #include <sys/stat.h> -#include <sys/time.h> #include <sys/disp.h> #include <sys/ddi.h> #include <sys/sunddi.h> @@ -223,7 +221,6 @@ static boolean_t bscv_panic_callback(void *, int); static void bscv_watchdog_cyclic_add(bscv_soft_state_t *); static void bscv_watchdog_cyclic_remove(bscv_soft_state_t *); -extern kmutex_t cpu_lock; /* needed for cyclics */ static uint8_t wdog_reset_on_timeout = 1; #define WDOG_ON 1 @@ -623,7 +620,7 @@ bscv_attach(dev_info_t *dip, ddi_attach_cmd_t cmd) ssp->cssp_prog = B_FALSE; ssp->task_flags = 0; ssp->debug = ddi_prop_get_int(DDI_DEV_T_ANY, dip, - DDI_PROP_DONTPASS, "debug", 0); + DDI_PROP_DONTPASS, "debug", 0); ssp->majornum = ddi_driver_major(dip); ssp->minornum = BSCV_INST_TO_MINOR(instance); #if defined(__i386) || defined(__amd64) @@ -703,7 +700,7 @@ bscv_attach(dev_info_t *dip, ddi_attach_cmd_t cmd) if (bscv_watchdog_enable && (boothowto & RB_DEBUG)) { bscv_watchdog_available = 0; cmn_err(CE_WARN, "bscv: kernel debugger " - "detected: hardware watchdog disabled"); + "detected: hardware watchdog disabled"); } /* @@ -856,7 +853,7 @@ bscv_map_regs(bscv_soft_state_t *ssp) * of elements of the regs property array. */ retval = ddi_prop_lookup_int_array(DDI_DEV_T_ANY, ssp->dip, - DDI_PROP_DONTPASS, "reg", &props, &nelements); + DDI_PROP_DONTPASS, "reg", &props, &nelements); /* We don't need props anymore. Free memory if it was allocated */ if (retval == DDI_PROP_SUCCESS) @@ -890,8 +887,8 @@ bscv_map_regs(bscv_soft_state_t *ssp) for (i = 0; i < ssp->nchannels; i++) { retval = ddi_regs_map_setup(ssp->dip, i, - (caddr_t *)&ssp->channel[i].regs, - 0, 0, &ssp->attr, &ssp->channel[i].handle); + (caddr_t *)&ssp->channel[i].regs, + 0, 0, &ssp->attr, &ssp->channel[i].handle); if (retval != DDI_SUCCESS) { bscv_trace(ssp, 'A', "bscv_map_regs", "map failure" " 0x%x on space %d", retval, i); @@ -988,9 +985,9 @@ bscv_full_stop(bscv_soft_state_t *ssp) #if defined(__i386) || defined(__amd64) if (ddi_in_panic()) { - bscv_inform_bsc(ssp, BSC_INFORM_PANIC); + bscv_inform_bsc(ssp, BSC_INFORM_PANIC); } else { - bscv_inform_bsc(ssp, BSC_INFORM_OFFLINE); + bscv_inform_bsc(ssp, BSC_INFORM_OFFLINE); } #endif /* __i386 || __amd64 */ @@ -1009,7 +1006,7 @@ bscv_full_stop(bscv_soft_state_t *ssp) break; } bscv_setclear8_volatile(ssp, chan_general, - EBUS_IDX_ALARM, bits2set, bits2clear); + EBUS_IDX_ALARM, bits2set, bits2clear); bscv_exit(ssp); } @@ -1367,10 +1364,10 @@ bscv_rep_rw8(bscv_soft_state_t *ssp, int chan, uint8_t *host_addr, } else { if (is_write) { bscv_put8_once(ssp, chan, - dev_addr, *host_addr++); + dev_addr, *host_addr++); } else { *host_addr++ = bscv_get8_once(ssp, chan, - dev_addr); + dev_addr); } /* We need this because _once routines don't do it */ if (ssp->command_error != 0) { @@ -1514,7 +1511,7 @@ bscv_put8_once(bscv_soft_state_t *ssp, int chan, bscv_addr_t addr, uint8_t val) /* Do the access and get fault code - may take a long time */ ddi_put8(ssp->channel[chan].handle, - &ssp->channel[chan].regs[addr], val); + &ssp->channel[chan].regs[addr], val); fault = ddi_get32(ssp->channel[chan].handle, (uint32_t *)BSC_NEXUS_ADDR(ssp, chan, 0, LOMBUS_FAULT_REG)); @@ -1572,7 +1569,7 @@ bscv_get8_once(bscv_soft_state_t *ssp, int chan, bscv_addr_t addr) /* Do the access and get fault code - may take a long time */ val = ddi_get8(ssp->channel[chan].handle, - &ssp->channel[chan].regs[addr]); + &ssp->channel[chan].regs[addr]); fault = ddi_get32(ssp->channel[chan].handle, (uint32_t *)BSC_NEXUS_ADDR(ssp, chan, 0, LOMBUS_FAULT_REG)); ssp->command_error = fault; @@ -1659,9 +1656,9 @@ bscv_resync_comms(bscv_soft_state_t *ssp, int chan) return; } if (command_error >= LOMBUS_ERR_BASE && - command_error != LOMBUS_ERR_REG_NUM && - command_error != LOMBUS_ERR_REG_SIZE && - command_error != LOMBUS_ERR_TIMEOUT) { + command_error != LOMBUS_ERR_REG_NUM && + command_error != LOMBUS_ERR_REG_SIZE && + command_error != LOMBUS_ERR_TIMEOUT) { /* Resync here to make sure that the lom is talking */ cmn_err(CE_WARN, "!bscv_resync_comms: " "Attempting comms resync after comms fault 0x%x", @@ -1670,7 +1667,7 @@ bscv_resync_comms(bscv_soft_state_t *ssp, int chan) /* Probe */ fault = ddi_get32(ssp->channel[chan].handle, (uint32_t *)BSC_NEXUS_ADDR(ssp, chan, 0, - LOMBUS_PROBE_REG)); + LOMBUS_PROBE_REG)); if (fault == 0) { break; @@ -1719,9 +1716,9 @@ bscv_window_setup(bscv_soft_state_t *ssp) return (ssp->eeinfo_valid); } ssp->eeprom_size = - bscv_get8(ssp, chan_general, EBUS_IDX_EEPROM_SIZE_KB) * 1024; + bscv_get8(ssp, chan_general, EBUS_IDX_EEPROM_SIZE_KB) * 1024; ssp->eventlog_start = bscv_get16(ssp, chan_general, - EBUS_IDX_LOG_START_HI); + EBUS_IDX_LOG_START_HI); /* * The log does not run to the end of the EEPROM because it is a @@ -2056,11 +2053,11 @@ bscv_ioc_dogstate(bscv_soft_state_t *ssp, intptr_t arg, int mode) dogstate.dog_enable = (dogval & EBUS_WDOG_ENABLE) ? 1 : 0; dogstate.reset_enable = (dogval & EBUS_WDOG_RST) ? 1 : 0; dogstate.dog_timeout = bscv_get8_locked(ssp, chan_general, - EBUS_IDX_WDOG_TIME, &res); + EBUS_IDX_WDOG_TIME, &res); if ((res == 0) && (ddi_copyout((caddr_t)&dogstate, - (caddr_t)arg, sizeof (dogstate), mode) < 0)) { + (caddr_t)arg, sizeof (dogstate), mode) < 0)) { res = EFAULT; } return (res); @@ -2082,7 +2079,7 @@ bscv_ioc_psustate(bscv_soft_state_t *ssp, intptr_t arg, int mode) for (i = 0; i < MAX_PSUS; i++) { psustat = bscv_get8_locked(ssp, chan_general, - EBUS_IDX_PSU1_STAT + i, &res); + EBUS_IDX_PSU1_STAT + i, &res); psudata.fitted[i] = psustat & EBUS_PSU_PRESENT; psudata.output[i] = psustat & EBUS_PSU_OUTPUT; psudata.supplyb[i] = psustat & EBUS_PSU_INPUTB; @@ -2153,7 +2150,7 @@ bscv_ioc_fledstate(bscv_soft_state_t *ssp, intptr_t arg, int mode) } if ((res == 0) && (ddi_copyout((caddr_t)&fled_info, (caddr_t)arg, - sizeof (fled_info), mode) < 0)) { + sizeof (fled_info), mode) < 0)) { res = EFAULT; } return (res); @@ -2226,7 +2223,7 @@ bscv_ioc_ledstate(bscv_soft_state_t *ssp, intptr_t arg, int mode) /* copy out lom_state */ if ((res == 0) && (ddi_copyout((caddr_t)&led_state, (caddr_t)arg, - sizeof (lom_led_state_t), mode) < 0)) { + sizeof (lom_led_state_t), mode) < 0)) { res = EFAULT; } return (res); @@ -2248,15 +2245,15 @@ bscv_ioc_info(bscv_soft_state_t *ssp, intptr_t arg, int mode) int res = 0; info.ser_char = bscv_get8_locked(ssp, chan_general, EBUS_IDX_ESCAPE, - &res); + &res); info.a3mode = WATCHDOG; info.fver = bscv_get8_locked(ssp, chan_general, EBUS_IDX_FW_REV, &res); csum = bscv_get8_locked(ssp, chan_general, EBUS_IDX_CHECK_HI, &res) - << 8; + << 8; csum |= bscv_get8_locked(ssp, chan_general, EBUS_IDX_CHECK_LO, &res); info.fchksum = csum; info.prod_rev = bscv_get8_locked(ssp, chan_general, EBUS_IDX_MODEL_REV, - &res); + &res); for (i = 0; i < sizeof (info.prod_id); i++) { info.prod_id[i] = bscv_get8_locked(ssp, chan_general, EBUS_IDX_MODEL_ID1 + i, &res); @@ -2292,9 +2289,9 @@ bscv_ioc_mread(bscv_soft_state_t *ssp, intptr_t arg, int mode) EBUS_IDX_MODEL_ID1 + i, &res); } mprog.mod_rev = bscv_get8_locked(ssp, chan_general, EBUS_IDX_MODEL_REV, - &res); + &res); mprog.config = bscv_get8_locked(ssp, chan_general, EBUS_IDX_CONFIG, - &res); + &res); /* Read the fan calibration values */ fanz = sizeof (mprog.fanhz) / sizeof (mprog.fanhz[0]); @@ -2324,8 +2321,8 @@ bscv_ioc_volts(bscv_soft_state_t *ssp, intptr_t arg, int mode) int res = 0; supply = (bscv_get8_locked(ssp, chan_general, EBUS_IDX_SUPPLY_HI, &res) - << 8) | bscv_get8_locked(ssp, chan_general, EBUS_IDX_SUPPLY_LO, - &res); + << 8) | bscv_get8_locked(ssp, chan_general, EBUS_IDX_SUPPLY_LO, + &res); for (i = 0; i < ssp->volts.num; i++) { ssp->volts.status[i] = (supply >> i) & 1; @@ -2333,7 +2330,7 @@ bscv_ioc_volts(bscv_soft_state_t *ssp, intptr_t arg, int mode) if ((res == 0) && (ddi_copyout((caddr_t)&ssp->volts, (caddr_t)arg, - sizeof (ssp->volts), mode) < 0)) { + sizeof (ssp->volts), mode) < 0)) { res = EFAULT; } return (res); @@ -2350,14 +2347,14 @@ bscv_ioc_stats(bscv_soft_state_t *ssp, intptr_t arg, int mode) int res = 0; status = bscv_get8_locked(ssp, chan_general, EBUS_IDX_CBREAK_STATUS, - &res); + &res); for (i = 0; i < ssp->sflags.num; i++) { ssp->sflags.status[i] = (int)((status >> i) & 1); } if ((res == 0) && (ddi_copyout((caddr_t)&ssp->sflags, (caddr_t)arg, - sizeof (ssp->sflags), mode) < 0)) { + sizeof (ssp->sflags), mode) < 0)) { res = EFAULT; } return (res); @@ -2392,7 +2389,7 @@ bscv_ioc_temp(bscv_soft_state_t *ssp, intptr_t arg, int mode) bcopy(ssp->temps.name_ov, temps.name_ov, sizeof (temps.name_ov)); temps.num_ov = ssp->temps.num_ov; status_ov = bscv_get8_locked(ssp, chan_general, EBUS_IDX_OTEMP_STATUS, - &res); + &res); for (i = 0; i < ssp->temps.num_ov; i++) { ssp->temps.status_ov[i] = (status_ov >> i) & 1; } @@ -2530,16 +2527,16 @@ bscv_ioc_eventlog2(bscv_soft_state_t *ssp, intptr_t arg, int mode) if (level <= eventlog2->level) { /* Arggh why the funny byte ordering 3, 2, 0, 1 */ eventlog2->code[events_recorded] = - ((unsigned)event.ev_event | - ((unsigned)event.ev_subsys << 8) | - ((unsigned)event.ev_resource << 16) | - ((unsigned)event.ev_detail << 24)); + ((unsigned)event.ev_event | + ((unsigned)event.ev_subsys << 8) | + ((unsigned)event.ev_resource << 16) | + ((unsigned)event.ev_detail << 24)); eventlog2->time[events_recorded] = - ((unsigned)event.ev_data[0] | - ((unsigned)event.ev_data[1] << 8) | - ((unsigned)event.ev_data[3] << 16) | - ((unsigned)event.ev_data[2] << 24)); + ((unsigned)event.ev_data[0] | + ((unsigned)event.ev_data[1] << 8) | + ((unsigned)event.ev_data[3] << 16) | + ((unsigned)event.ev_data[2] << 24)); bscv_build_eventstring(ssp, &event, eventlog2->string[events_recorded], @@ -2555,7 +2552,7 @@ bscv_ioc_eventlog2(bscv_soft_state_t *ssp, intptr_t arg, int mode) if ((res == 0) && (ddi_copyout((caddr_t)eventlog2, (caddr_t)arg, - sizeof (lom_eventlog2_t), mode) < 0)) { + sizeof (lom_eventlog2_t), mode) < 0)) { res = EFAULT; } @@ -2583,17 +2580,17 @@ bscv_ioc_info2(bscv_soft_state_t *ssp, intptr_t arg, int mode) info2.fver = bscv_get8_locked(ssp, chan_general, EBUS_IDX_FW_REV, &res); csum = bscv_get8_locked(ssp, chan_general, EBUS_IDX_CHECK_HI, &res) - << 8; + << 8; csum |= bscv_get8_locked(ssp, chan_general, EBUS_IDX_CHECK_LO, &res); info2.fchksum = csum; info2.prod_rev = bscv_get8_locked(ssp, chan_general, - EBUS_IDX_MODEL_REV, &res); + EBUS_IDX_MODEL_REV, &res); for (i = 0; i < sizeof (info2.prod_id); i++) { info2.prod_id[i] = bscv_get8_locked(ssp, chan_general, EBUS_IDX_MODEL_ID1 + i, &res); } info2.serial_config = bscv_get8_locked(ssp, chan_general, - EBUS_IDX_SER_TIMEOUT, &res); + EBUS_IDX_SER_TIMEOUT, &res); if (bscv_get8_locked(ssp, chan_general, EBUS_IDX_CONFIG_MISC, &res) & EBUS_CONFIG_MISC_SECURITY_ENABLED) { info2.serial_config |= LOM_SER_SECURITY; @@ -2607,14 +2604,14 @@ bscv_ioc_info2(bscv_soft_state_t *ssp, intptr_t arg, int mode) info2.serial_config |= LOM_DISABLE_WDOG_BREAK; } info2.baud_rate = bscv_get8_locked(ssp, chan_general, - EBUS_IDX_SER_BAUD, &res); + EBUS_IDX_SER_BAUD, &res); info2.serial_hw_config = - ((int)bscv_get8_locked(ssp, chan_general, - EBUS_IDX_SER_CHARMODE, &res) | - ((int)bscv_get8_locked(ssp, chan_general, - EBUS_IDX_SER_FLOWCTL, &res) << 8) | - ((int)bscv_get8_locked(ssp, chan_general, - EBUS_IDX_SER_MODEMTYPE, &res) << 16)); + ((int)bscv_get8_locked(ssp, chan_general, + EBUS_IDX_SER_CHARMODE, &res) | + ((int)bscv_get8_locked(ssp, chan_general, + EBUS_IDX_SER_FLOWCTL, &res) << 8) | + ((int)bscv_get8_locked(ssp, chan_general, + EBUS_IDX_SER_MODEMTYPE, &res) << 16)); /* * There is no phone home support on the blade platform. We hardcode @@ -2686,7 +2683,7 @@ bscv_ioc_test(bscv_soft_state_t *ssp, intptr_t arg, int mode) * and wait for the return code. */ bscv_put8(ssp, chan_general, - EBUS_IDX_SELFTEST0 + testnum, testarg); + EBUS_IDX_SELFTEST0 + testnum, testarg); if (bscv_faulty(ssp)) { res = EIO; } else { @@ -2740,7 +2737,7 @@ bscv_ioc_mprog2(bscv_soft_state_t *ssp, intptr_t arg, int mode) base_addr = (mprog2.addr_space - 240) * data_size; eeprom_size = bscv_get8(ssp, chan_general, EBUS_IDX_EEPROM_SIZE_KB) * - 1024; + 1024; if (bscv_faulty(ssp)) { bscv_exit(ssp); @@ -2815,7 +2812,7 @@ bscv_ioc_mread2(bscv_soft_state_t *ssp, intptr_t arg, int mode) data_size = 255; base_addr = (mprog2.addr_space - 240) * data_size; eeprom_size = bscv_get8(ssp, chan_general, EBUS_IDX_EEPROM_SIZE_KB) * - 1024; + 1024; if (bscv_faulty(ssp)) { bscv_exit(ssp); @@ -3007,7 +3004,7 @@ bscv_event_daemon(void *arg) utsname.nodename); ssp->nodename_change = B_TRUE; (void) strncpy(ssp->last_nodename, utsname.nodename, - sizeof (ssp->last_nodename)); + sizeof (ssp->last_nodename)); /* enforce null termination */ ssp->last_nodename[sizeof (ssp->last_nodename) - 1] = '\0'; @@ -3017,12 +3014,12 @@ bscv_event_daemon(void *arg) if (((ssp->task_flags & TASK_PAUSE_FLG) == 0) && fault_cnt == 0 && ssp->cssp_prog == B_FALSE && (ssp->event_waiting || ssp->status_change || - ssp->nodename_change || ssp->watchdog_change)) { + ssp->nodename_change || ssp->watchdog_change)) { do_events = ssp->event_waiting; ssp->event_waiting = B_FALSE; ssp->task_flags |= do_events ? - TASK_EVENT_PENDING_FLG : 0; + TASK_EVENT_PENDING_FLG : 0; do_status = ssp->status_change; ssp->status_change = B_FALSE; do_nodename = ssp->nodename_change; @@ -3119,7 +3116,7 @@ bscv_event_daemon(void *arg) ASSERT(!(ssp->task_flags & TASK_EVENT_PENDING_FLG)); ssp->task_flags &= - ~(TASK_STOP_FLG | TASK_ALIVE_FLG | TASK_EVENT_CONSUMER_FLG); + ~(TASK_STOP_FLG | TASK_ALIVE_FLG | TASK_EVENT_CONSUMER_FLG); mutex_exit(&ssp->task_mu); bscv_trace(ssp, 'D', "bscv_event_daemon", @@ -3161,8 +3158,8 @@ bscv_stop_event_daemon(bscv_soft_state_t *ssp) /* Wait for task daemon to stop running. */ for (try = 0; - ((ssp->task_flags & TASK_ALIVE_FLG) && try < 10); - try++) { + ((ssp->task_flags & TASK_ALIVE_FLG) && try < 10); + try++) { /* Signal that the task daemon should stop */ ssp->task_flags |= TASK_STOP_FLG; cv_signal(&ssp->task_cv); @@ -3211,10 +3208,10 @@ bscv_pause_event_daemon(bscv_soft_state_t *ssp) /* Wait for task daemon to pause. */ for (try = 0; - (!(ssp->task_flags & TASK_SLEEPING_FLG) && - (ssp->task_flags & TASK_ALIVE_FLG) && - try < 10); - try++) { + (!(ssp->task_flags & TASK_SLEEPING_FLG) && + (ssp->task_flags & TASK_ALIVE_FLG) && + try < 10); + try++) { /* Paranoia */ ssp->task_flags |= TASK_PAUSE_FLG; cv_signal(&ssp->task_cv); @@ -3392,7 +3389,7 @@ bscv_event_validate(bscv_soft_state_t *ssp, uint32_t newptr, uint8_t unread) (newptr >= (ssp->eventlog_start + ssp->eventlog_size))) { if (!ssp->event_fault_reported) { cmn_err(CE_WARN, "Event pointer out of range. " - "Cannot read events."); + "Cannot read events."); ssp->event_fault_reported = B_TRUE; } return (-1); @@ -3531,8 +3528,8 @@ bscv_event_snprintgmttime(char *buf, size_t bufsz, todinfo_t t) year = 1900 + t.tod_year; return (snprintf(buf, bufsz, "%04d-%02d-%02d %02d:%02d:%02dZ", - year, t.tod_month, t.tod_day, t.tod_hour, - t.tod_min, t.tod_sec)); + year, t.tod_month, t.tod_day, t.tod_hour, + t.tod_min, t.tod_sec)); } /* @@ -3569,19 +3566,19 @@ bscv_build_eventstring(bscv_soft_state_t *ssp, lom_event_t *event, /* time */ bsctm = (((uint32_t)event->ev_data[0]) << 24) | - (((uint32_t)event->ev_data[1]) << 16) | - (((uint32_t)event->ev_data[2]) << 8) | - ((uint32_t)event->ev_data[3]); + (((uint32_t)event->ev_data[1]) << 16) | + (((uint32_t)event->ev_data[2]) << 8) | + ((uint32_t)event->ev_data[3]); if (bsctm < BSC_TIME_SANITY) { /* offset */ buf += snprintf(buf, bufend-buf, "+P%dd%02dh%02dm%02ds", - (int)(bsctm/86400), (int)(bsctm/3600%24), - (int)(bsctm/60%60), (int)(bsctm%60)); + (int)(bsctm/86400), (int)(bsctm/3600%24), + (int)(bsctm/60%60), (int)(bsctm%60)); } else { /* absolute time */ mutex_enter(&tod_lock); buf += bscv_event_snprintgmttime(buf, bufend-buf, - utc_to_tod(bsctm)); + utc_to_tod(bsctm)); mutex_exit(&tod_lock); } buf += snprintf(buf, bufend-buf, " "); @@ -3640,7 +3637,7 @@ bscv_build_eventstring(bscv_soft_state_t *ssp, lom_event_t *event, switch (subsystem) { case EVENT_SUBSYS_TEMP: if ((eventtype != EVENT_RECOVERED) && - eventtype != EVENT_DEVICE_INACCESSIBLE) { + eventtype != EVENT_DEVICE_INACCESSIBLE) { buf += snprintf(buf, bufend - buf, " - %d degC", (int8_t)event->ev_detail); } @@ -3680,7 +3677,7 @@ bscv_build_eventstring(bscv_soft_state_t *ssp, lom_event_t *event, buf += snprintf(buf, bufend - buf, " by user"); break; case LOM_RESET_DETAIL_REPROGRAMMING: - buf += snprintf(buf, bufend - buf, + buf += snprintf(buf, bufend - buf, " after flash download"); break; default: @@ -3960,7 +3957,7 @@ bscv_status(bscv_soft_state_t *ssp, uint8_t state_chng, uint8_t dev_no) if ((state_chng & EBUS_STATE_FAN) && ((dev_no - 1) < MAX_FANS)) { fanspeed = bscv_get8(ssp, chan_general, - EBUS_IDX_FAN1_SPEED + dev_no - 1); + EBUS_IDX_FAN1_SPEED + dev_no - 1); /* * Only remember fanspeeds which are real values or * NOT PRESENT values. @@ -3973,7 +3970,7 @@ bscv_status(bscv_soft_state_t *ssp, uint8_t state_chng, uint8_t dev_no) if ((state_chng & EBUS_STATE_PSU) && ((dev_no - 1) < MAX_PSUS)) { (void) bscv_get8(ssp, chan_general, - EBUS_IDX_PSU1_STAT + dev_no - 1); + EBUS_IDX_PSU1_STAT + dev_no - 1); } if (state_chng & EBUS_STATE_GP) { @@ -3987,7 +3984,7 @@ bscv_status(bscv_soft_state_t *ssp, uint8_t state_chng, uint8_t dev_no) if ((state_chng & EBUS_STATE_TEMPERATURE) && ((dev_no - 1) < MAX_TEMPS)) { temp = bscv_get8(ssp, chan_general, - EBUS_IDX_TEMP1 + dev_no - 1); + EBUS_IDX_TEMP1 + dev_no - 1); /* * Only remember temperatures which are real values or * a NOT PRESENT value. @@ -4105,77 +4102,77 @@ bscv_sysevent(bscv_soft_state_t *ssp, lom_event_t *event) /* Map ev_subsys to sysevent class/sub-class */ switch (EVENT_DECODE_SUBSYS(event->ev_subsys)) { - case EVENT_SUBSYS_NONE: + case EVENT_SUBSYS_NONE: break; - case EVENT_SUBSYS_ALARM: + case EVENT_SUBSYS_ALARM: break; - case EVENT_SUBSYS_TEMP: + case EVENT_SUBSYS_TEMP: class = EC_ENV, subclass = ESC_ENV_TEMP; res_id = bscv_get_label(ssp->temps.name, ssp->temps.num, event->ev_resource - 1); switch (event->ev_event) { - case EVENT_SEVERE_OVERHEAT: + case EVENT_SEVERE_OVERHEAT: fru_state = ENV_FAILED; break; - case EVENT_OVERHEAT: + case EVENT_OVERHEAT: fru_state = ENV_WARNING; break; - case EVENT_NO_OVERHEAT: + case EVENT_NO_OVERHEAT: fru_state = ENV_OK; break; - default: + default: return; } break; - case EVENT_SUBSYS_OVERTEMP: + case EVENT_SUBSYS_OVERTEMP: break; - case EVENT_SUBSYS_FAN: + case EVENT_SUBSYS_FAN: class = EC_ENV, subclass = ESC_ENV_FAN; res_id = bscv_get_label(ssp->fan_names, ssp->num_fans, event->ev_resource - 1); switch (event->ev_event) { - case EVENT_FAILED: + case EVENT_FAILED: fru_state = ENV_FAILED; break; - case EVENT_RECOVERED: + case EVENT_RECOVERED: fru_state = ENV_OK; break; - default: + default: return; } break; - case EVENT_SUBSYS_SUPPLY: + case EVENT_SUBSYS_SUPPLY: class = EC_ENV, subclass = ESC_ENV_POWER; res_id = bscv_get_label(ssp->sflags.name, ssp->sflags.num, event->ev_resource - 1); switch (event->ev_event) { - case EVENT_FAILED: + case EVENT_FAILED: fru_state = ENV_FAILED; break; - case EVENT_RECOVERED: + case EVENT_RECOVERED: fru_state = ENV_OK; break; - default: + default: return; } break; - case EVENT_SUBSYS_BREAKER: + case EVENT_SUBSYS_BREAKER: break; - case EVENT_SUBSYS_PSU: + case EVENT_SUBSYS_PSU: break; - case EVENT_SUBSYS_USER: + case EVENT_SUBSYS_USER: break; - case EVENT_SUBSYS_PHONEHOME: + case EVENT_SUBSYS_PHONEHOME: break; - case EVENT_SUBSYS_LOM: + case EVENT_SUBSYS_LOM: break; - case EVENT_SUBSYS_HOST: + case EVENT_SUBSYS_HOST: break; - case EVENT_SUBSYS_EVENTLOG: + case EVENT_SUBSYS_EVENTLOG: break; - case EVENT_SUBSYS_EXTRA: + case EVENT_SUBSYS_EXTRA: break; - case EVENT_SUBSYS_LED: + case EVENT_SUBSYS_LED: if (event->ev_event != EVENT_FAULT_LED && event->ev_event != EVENT_STATE_CHANGE) return; @@ -4194,31 +4191,31 @@ bscv_sysevent(bscv_soft_state_t *ssp, lom_event_t *event) event->ev_resource - 1); switch (event->ev_detail) { - case LOM_LED_STATE_ON_STEADY: + case LOM_LED_STATE_ON_STEADY: fru_state = ENV_LED_ON; break; - case LOM_LED_STATE_ON_FLASHING: - case LOM_LED_STATE_ON_SLOWFLASH: + case LOM_LED_STATE_ON_FLASHING: + case LOM_LED_STATE_ON_SLOWFLASH: fru_state = ENV_LED_BLINKING; break; - case LOM_LED_STATE_OFF: + case LOM_LED_STATE_OFF: fru_state = ENV_LED_OFF; break; - case LOM_LED_STATE_INACCESSIBLE: + case LOM_LED_STATE_INACCESSIBLE: fru_state = ENV_LED_INACCESSIBLE; break; - case LOM_LED_STATE_STANDBY: + case LOM_LED_STATE_STANDBY: fru_state = ENV_LED_STANDBY; break; - case LOM_LED_STATE_NOT_PRESENT: + case LOM_LED_STATE_NOT_PRESENT: fru_state = ENV_LED_NOT_PRESENT; break; - default: + default: fru_state = ENV_LED_INACCESSIBLE; break; } break; - default : + default : break; } @@ -4300,7 +4297,7 @@ bscv_prog(bscv_soft_state_t *ssp, intptr_t arg, int mode) } else { if (ssp->image == NULL) { ssp->image = (uint8_t *)kmem_zalloc( - BSC_IMAGE_MAX_SIZE, KM_SLEEP); + BSC_IMAGE_MAX_SIZE, KM_SLEEP); } res = bscv_prog_receive_image(ssp, prog, ssp->image, BSC_IMAGE_MAX_SIZE); @@ -4352,7 +4349,7 @@ bscv_get_pagesize(bscv_soft_state_t *ssp) ASSERT(bscv_held(ssp)); pagesize = bscv_get32(ssp, chan_prog, - BSCVA(EBUS_CMD_SPACE_PROGRAM, EBUS_PROGRAM_PAGE0)); + BSCVA(EBUS_CMD_SPACE_PROGRAM, EBUS_PROGRAM_PAGE0)); bscv_trace(ssp, 'U', "bscv_get_pagesize", "pagesize 0x%x", pagesize); @@ -4376,7 +4373,7 @@ bscv_set_pagesize(bscv_soft_state_t *ssp, uint32_t pagesize) * changes it. */ bscv_put32(ssp, chan_prog, - BSCVA(EBUS_CMD_SPACE_PROGRAM, EBUS_PROGRAM_PSIZ0), pagesize); + BSCVA(EBUS_CMD_SPACE_PROGRAM, EBUS_PROGRAM_PSIZ0), pagesize); return (old_pagesize); } @@ -4389,11 +4386,11 @@ bscv_enter_programming_mode(bscv_soft_state_t *ssp) ASSERT(bscv_held(ssp)); bscv_put8(ssp, chan_prog, - BSCVA(EBUS_CMD_SPACE_PROGRAM, EBUS_PROGRAM_PCSR), - EBUS_PROGRAM_PCR_PRGMODE_ON); + BSCVA(EBUS_CMD_SPACE_PROGRAM, EBUS_PROGRAM_PCSR), + EBUS_PROGRAM_PCR_PRGMODE_ON); retval = bscv_get8(ssp, chan_prog, BSCVA(EBUS_CMD_SPACE_PROGRAM, - EBUS_PROGRAM_PCSR)); + EBUS_PROGRAM_PCSR)); return (retval); } @@ -4415,7 +4412,7 @@ bscv_leave_programming_mode(bscv_soft_state_t *ssp, boolean_t with_jmp) } bscv_put8(ssp, chan_prog, - BSCVA(EBUS_CMD_SPACE_PROGRAM, EBUS_PROGRAM_PCSR), reg); + BSCVA(EBUS_CMD_SPACE_PROGRAM, EBUS_PROGRAM_PCSR), reg); } @@ -4425,7 +4422,7 @@ bscv_set_jump_to_addr(bscv_soft_state_t *ssp, uint32_t loadaddr) ASSERT(bscv_held(ssp)); bscv_put32(ssp, chan_prog, - BSCVA(EBUS_CMD_SPACE_PROGRAM, EBUS_PROGRAM_PADR0), loadaddr); + BSCVA(EBUS_CMD_SPACE_PROGRAM, EBUS_PROGRAM_PADR0), loadaddr); bscv_trace(ssp, 'U', "bscv_set_jump_to_addr", "set jump to loadaddr 0x%x", loadaddr); @@ -4555,7 +4552,7 @@ bscv_do_page_data_once(bscv_soft_state_t *ssp, uint32_t index, for (i = size; i < pagesize; i++) { bscv_put8(ssp, chan_prog, BSCVA(EBUS_CMD_SPACE_PROGRAM, - EBUS_PROGRAM_DATA), + EBUS_PROGRAM_DATA), 0); } } @@ -4564,7 +4561,7 @@ bscv_do_page_data_once(bscv_soft_state_t *ssp, uint32_t index, chksum = 0; for (i = 0; i < size; i++) { chksum = ((chksum << 3) | (chksum >> 13)) ^ - *(imagep + index + i); + *(imagep + index + i); } /* Cope with non-pagesize sized bufers */ for (; i < pagesize; i++) { @@ -4578,7 +4575,7 @@ bscv_do_page_data_once(bscv_soft_state_t *ssp, uint32_t index, EBUS_PROGRAM_PCR_PROGRAM); retval = bscv_get8(ssp, chan_prog, - BSCVA(EBUS_CMD_SPACE_PROGRAM, EBUS_PROGRAM_PCSR)); + BSCVA(EBUS_CMD_SPACE_PROGRAM, EBUS_PROGRAM_PCSR)); *calcd_chksum = chksum; return (retval); @@ -4645,7 +4642,7 @@ bscv_do_pages(bscv_soft_state_t *ssp, uint32_t loadaddr, uint32_t image_size, for (index = 0; index < image_size; index += pagesize) { retval = bscv_do_page(ssp, loadaddr, index, image_size, - pagesize, imagep, is_image2); + pagesize, imagep, is_image2); if (bscv_faulty(ssp) || !PSR_SUCCESS(retval)) { bscv_trace(ssp, 'U', "bscv_do_pages", "Failed to program lom (status 0x%x)", retval); @@ -4710,7 +4707,7 @@ bscv_prog_image(bscv_soft_state_t *ssp, boolean_t is_image2, (void) bscv_set_pagesize(ssp, pagesize); retval = bscv_do_pages(ssp, loadaddr, image_size, pagesize, imagep, - is_image2); + is_image2); if (bscv_faulty(ssp) || !PSR_SUCCESS(retval)) { bscv_trace(ssp, 'U', "bscv_prog_image", "Failed to program lom (status 0x%x)", retval); @@ -4823,7 +4820,7 @@ bscv_prog_receive_image(bscv_soft_state_t *ssp, lom_prog_t *prog, ssp->image2_processing = !ssp->image2_processing; } else if ((ssp->image_ptr < sizeof (*prog_data)) || (prog_data->platform.bscv.size != - (ssp->image_ptr - sizeof (*prog_data)))) { + (ssp->image_ptr - sizeof (*prog_data)))) { /* Image too small for new style image */ cmn_err(CE_WARN, "image too small"); res = EINVAL; @@ -5129,9 +5126,7 @@ bscv_cleanup(bscv_soft_state_t *ssp) } #if defined(__i386) || defined(__amd64) - mutex_enter(&cpu_lock); bscv_watchdog_cyclic_remove(ssp); - mutex_exit(&cpu_lock); #endif /* __i386 || __amd64 */ ddi_soft_state_free(bscv_statep, instance); @@ -5209,7 +5204,7 @@ static int bscv_probe_check(bscv_soft_state_t *ssp) * sync so lets try the read again. */ probeval = bscv_get8(ssp, chan_general, - EBUS_IDX_PROBEAA); + EBUS_IDX_PROBEAA); if (bscv_faulty(ssp)) { bscv_trace(ssp, 'A', "bscv_probe_check", "Init readAA1 failed"); @@ -5603,7 +5598,7 @@ static void bscv_setup_watchdog(bscv_soft_state_t *ssp) /* Set the timeout */ bscv_put8(ssp, chan_general, - EBUS_IDX_WDOG_TIME, ssp->watchdog_timeout); + EBUS_IDX_WDOG_TIME, ssp->watchdog_timeout); /* Set whether to reset the system on timeout */ if (ssp->watchdog_reset_on_timeout) { @@ -5627,9 +5622,7 @@ static void bscv_setup_watchdog(bscv_soft_state_t *ssp) #if defined(__i386) || defined(__amd64) /* start the cyclic based watchdog patter */ - mutex_enter(&cpu_lock); bscv_watchdog_cyclic_add(ssp); - mutex_exit(&cpu_lock); #endif /* __i386 || __amd64 */ ssp->progress |= BSCV_WDOG_CFG; } @@ -5778,7 +5771,7 @@ bscv_write_hostname(bscv_soft_state_t *ssp, needretry = 0; for (i = 0; i < length; i++) { bscv_put8_once(ssp, chan_general, - EBUS_IDX_HNAME_CHAR, host_nodename[i]); + EBUS_IDX_HNAME_CHAR, host_nodename[i]); /* Retry on any error */ if (bscv_retcode(ssp) != 0) { needretry = 1; @@ -5832,7 +5825,7 @@ bscv_setup_static_info(bscv_soft_state_t *ssp) */ bzero(&ssp->volts, sizeof (lom_volts_t)); ssp->volts.num = EBUS_CONFIG2_NSUPPLY_DEC( - bscv_get8(ssp, chan_general, EBUS_IDX_CONFIG2)); + bscv_get8(ssp, chan_general, EBUS_IDX_CONFIG2)); if (ssp->volts.num > MAX_VOLTS) { cmn_err(CE_WARN, "lom: firmware reported too many voltage lines. "); @@ -5857,7 +5850,7 @@ bscv_setup_static_info(bscv_soft_state_t *ssp) for (i = 0; i < ssp->volts.num; i++) { ssp->volts.shutdown_enabled[i] = - (((mask >> i) & 1) == 0) ? 0 : 1; + (((mask >> i) & 1) == 0) ? 0 : 1; } /* @@ -5869,7 +5862,7 @@ bscv_setup_static_info(bscv_soft_state_t *ssp) bzero(&ssp->temps, sizeof (lom_temp_t)); ssp->temps.num = EBUS_CONFIG2_NTEMP_DEC( - bscv_get8(ssp, chan_general, EBUS_IDX_CONFIG2)); + bscv_get8(ssp, chan_general, EBUS_IDX_CONFIG2)); if (ssp->temps.num > MAX_TEMPS) { cmn_err(CE_WARN, "lom: firmware reported too many temperatures being " @@ -5879,7 +5872,7 @@ bscv_setup_static_info(bscv_soft_state_t *ssp) ssp->temps.num = MAX_TEMPS; } ssp->temps.num_ov = EBUS_CONFIG3_NOTEMP_DEC( - bscv_get8(ssp, chan_general, EBUS_IDX_CONFIG3)); + bscv_get8(ssp, chan_general, EBUS_IDX_CONFIG3)); if (ssp->temps.num_ov > MAX_TEMPS) { cmn_err(CE_WARN, "lom: firmware reported too many over temperatures being " @@ -5973,7 +5966,7 @@ bscv_setup_static_info(bscv_soft_state_t *ssp) * To get the fan static info we need address space 5 */ ssp->num_fans = EBUS_CONFIG_NFAN_DEC( - bscv_get8(ssp, chan_general, EBUS_IDX_CONFIG)); + bscv_get8(ssp, chan_general, EBUS_IDX_CONFIG)); if (ssp->num_fans > MAX_FANS) { cmn_err(CE_WARN, "lom: firmware reported too many fans. "); @@ -5985,7 +5978,7 @@ bscv_setup_static_info(bscv_soft_state_t *ssp) for (i = 0; i < ssp->num_fans; i++) { fanspeed = bscv_get8(ssp, chan_general, - EBUS_IDX_FAN1_SPEED + i); + EBUS_IDX_FAN1_SPEED + i); if ((fanspeed <= LOM_FAN_MAX_SPEED) || (fanspeed == LOM_FAN_NOT_PRESENT)) { /* @@ -6131,7 +6124,7 @@ bscv_setup_events(bscv_soft_state_t *ssp) bits2set |= EBUS_ALARM_NOEVENTS; } bscv_setclear8_volatile(ssp, chan_general, EBUS_IDX_ALARM, - bits2set, bits2clear); + bits2set, bits2clear); } #ifdef __sparc @@ -6260,7 +6253,7 @@ bscv_set_watchdog_timer(bscv_soft_state_t *ssp, uint_t timeoutval) */ if (bscv_watchdog_available && (!watchdog_activated || (watchdog_activated && - (timeoutval != bscv_watchdog_timeout_seconds)))) { + (timeoutval != bscv_watchdog_timeout_seconds)))) { bscv_watchdog_timeout_seconds = timeoutval; bscv_watchdog_cfg_request(ssp, WDOG_ON); return (bscv_watchdog_timeout_seconds); @@ -6321,23 +6314,12 @@ bscv_panic_callback(void *arg, int code) static void bscv_watchdog_cyclic_add(bscv_soft_state_t *ssp) { - cyc_handler_t hdlr; - cyc_time_t when; - - ASSERT(MUTEX_HELD(&cpu_lock)); /* for cyclic_add */ - - if (ssp->cyclic_id != CYCLIC_NONE) { + if (ssp->periodic_id != NULL) { return; } - hdlr.cyh_level = CY_LOCK_LEVEL; - hdlr.cyh_func = (cyc_func_t)bscv_watchdog_pat_request; - hdlr.cyh_arg = (void *)ssp; - - when.cyt_when = 0; - when.cyt_interval = WATCHDOG_PAT_INTERVAL; - - ssp->cyclic_id = cyclic_add(&hdlr, &when); + ssp->periodic_id = ddi_periodic_add(bscv_watchdog_pat_request, ssp, + WATCHDOG_PAT_INTERVAL, DDI_IPL_10); bscv_trace(ssp, 'X', "bscv_watchdog_cyclic_add:", "cyclic added"); @@ -6352,14 +6334,11 @@ bscv_watchdog_cyclic_add(bscv_soft_state_t *ssp) static void bscv_watchdog_cyclic_remove(bscv_soft_state_t *ssp) { - ASSERT(MUTEX_HELD(&cpu_lock)); /* for cyclic_remove */ - - if (ssp->cyclic_id == CYCLIC_NONE) { + if (ssp->periodic_id == NULL) { return; } - - cyclic_remove(ssp->cyclic_id); - ssp->cyclic_id = CYCLIC_NONE; + ddi_periodic_delete(ssp->periodic_id); + ssp->periodic_id = NULL; bscv_trace(ssp, 'X', "bscv_watchdog_cyclic_remove:", "cyclic removed"); } @@ -6383,7 +6362,7 @@ bscv_trace(bscv_soft_state_t *ssp, char code, const char *caller, if (ssp->debug & (1 << (code-'@'))) { p = buf; (void) snprintf(p, sizeof (buf) - (p - buf), - "%s/%s: ", MYNAME, caller); + "%s/%s: ", MYNAME, caller); p += strlen(p); va_start(va, fmt); |