int rpaphp_get_sensor_state(struct slot *slot, int *state) { int rc; int setlevel; rc = rtas_get_sensor(DR_ENTITY_SENSE, slot->index, state); if (rc < 0) { if (rc == -EFAULT || rc == -EEXIST) { dbg("%s: slot must be power up to get sensor-state\n", __func__); /* some slots have to be powered up * before get-sensor will succeed. */ rc = rtas_set_power_level(slot->power_domain, POWER_ON, &setlevel); if (rc < 0) { dbg("%s: power on slot[%s] failed rc=%d.\n", __func__, slot->name, rc); } else { rc = rtas_get_sensor(DR_ENTITY_SENSE, slot->index, state); } } else if (rc == -ENODEV) info("%s: slot is unusable\n", __func__); else err("%s failed to get sensor state\n", __func__); } return rc; }
/** * set_power * @brief Sets the power level for the specified slot. * * @param domain power domain for the slot from "ibm,drc-power-domains" * @param level POWER_ON or POWER_OFF * @returns 0 Successful completion * @returns SPEED_ERROR Inserted a PCI 33 MHz IOA into a PCIbus which is * operating at 66 MHz. * @returns HW_ERROR Hardware error. * @returns SW_ERROR Other errors. */ int set_power(int domain, int level) { int ret_level; return rtas_set_power_level(domain, level, &ret_level); }
SaErrorT rtas_set_power_state(void *hnd, SaHpiResourceIdT id, SaHpiPowerStateT state) { int setlevel, rc; if (state == SAHPI_POWER_OFF) { rc = rtas_set_power_level(0, 0, &setlevel); if (rc > -1 && setlevel == 0) return SA_OK; else if (rc > -1 && setlevel != 0) return SA_ERR_HPI_BUSY; else return SA_ERR_HPI_INTERNAL_ERROR; } else { return SA_ERR_HPI_INTERNAL_ERROR; } }