in common/recipes-lib/obmc-pal/files/obmc_pal_sensors.c [902:1021]
int __attribute__((weak))
pal_sensor_thresh_modify(uint8_t fru, uint8_t sensor_num, uint8_t thresh_type, float value) {
int ret = -1;
thresh_sensor_t snr;
char fru_name[16];
char fpath[128] = {0};
char initpath[128] = {0};
char cmd[512] = {0};
ret = pal_get_fru_name(fru, fru_name);
if (ret < 0) {
printf("%s: Fail to get fru%d name\n",__func__,fru);
return ret;
}
memset(fpath, 0, sizeof(fpath));
sprintf(fpath, THRESHOLD_BIN, fru_name);
memset(initpath, 0, sizeof(initpath));
sprintf(initpath, INIT_THRESHOLD_BIN, fru_name);
if (0 != access(fpath, F_OK)) {
sprintf(cmd,"cp -rf %s %s", initpath, fpath);
if (system(cmd) != 0) {
syslog(LOG_ERR, "%s failed", cmd);
}
}
ret = pal_get_thresh_from_file(fru, sensor_num, &snr);
if (ret < 0) {
syslog(LOG_ERR, "%s: Fail to get %s sensor threshold file\n",__func__,fru_name);
return ret;
}
switch (thresh_type) {
case UCR_THRESH:
if (((snr.flag & GETMASK(UNR_THRESH)) && (value > snr.unr_thresh)) ||
((snr.flag & GETMASK(UNC_THRESH)) && (value < snr.unc_thresh)) ||
((snr.flag & GETMASK(LNC_THRESH)) && (value < snr.lnc_thresh)) ||
((snr.flag & GETMASK(LCR_THRESH)) && (value < snr.lcr_thresh)) ||
((snr.flag & GETMASK(LNR_THRESH)) && (value < snr.lnr_thresh))) {
return -1;
}
snr.ucr_thresh = value;
snr.flag |= SETMASK(UCR_THRESH);
break;
case UNC_THRESH:
if (((snr.flag & GETMASK(UNR_THRESH)) && (value > snr.unr_thresh)) ||
((snr.flag & GETMASK(UCR_THRESH)) && (value > snr.ucr_thresh)) ||
((snr.flag & GETMASK(LNC_THRESH)) && (value < snr.lnc_thresh)) ||
((snr.flag & GETMASK(LCR_THRESH)) && (value < snr.lcr_thresh)) ||
((snr.flag & GETMASK(LNR_THRESH)) && (value < snr.lnr_thresh))) {
return -1;
}
snr.unc_thresh = value;
snr.flag |= SETMASK(UNC_THRESH);
break;
case UNR_THRESH:
if (((snr.flag & GETMASK(UCR_THRESH)) && (value < snr.ucr_thresh)) ||
((snr.flag & GETMASK(UNC_THRESH)) && (value < snr.unc_thresh)) ||
((snr.flag & GETMASK(LNC_THRESH)) && (value < snr.lnc_thresh)) ||
((snr.flag & GETMASK(LCR_THRESH)) && (value < snr.lcr_thresh)) ||
((snr.flag & GETMASK(LNR_THRESH)) && (value < snr.lnr_thresh))) {
return -1;
}
snr.unr_thresh = value;
snr.flag |= SETMASK(UNR_THRESH);
break;
case LCR_THRESH:
if (((snr.flag & GETMASK(LNR_THRESH)) && (value < snr.lnr_thresh)) ||
((snr.flag & GETMASK(LNC_THRESH)) && (value > snr.lnc_thresh)) ||
((snr.flag & GETMASK(UNC_THRESH)) && (value > snr.unc_thresh)) ||
((snr.flag & GETMASK(UCR_THRESH)) && (value > snr.ucr_thresh)) ||
((snr.flag & GETMASK(UNR_THRESH)) && (value > snr.unr_thresh))) {
return -1;
}
snr.lcr_thresh = value;
snr.flag |= SETMASK(LCR_THRESH);
break;
case LNC_THRESH:
if (((snr.flag & GETMASK(LNR_THRESH)) && (value < snr.lnr_thresh)) ||
((snr.flag & GETMASK(LCR_THRESH)) && (value < snr.lcr_thresh)) ||
((snr.flag & GETMASK(UNC_THRESH)) && (value > snr.unc_thresh)) ||
((snr.flag & GETMASK(UCR_THRESH)) && (value > snr.ucr_thresh)) ||
((snr.flag & GETMASK(UNR_THRESH)) && (value > snr.unr_thresh))) {
return -1;
}
snr.lnc_thresh = value;
snr.flag |= SETMASK(LNC_THRESH);
break;
case LNR_THRESH:
if (((snr.flag & GETMASK(LCR_THRESH)) && (value > snr.lcr_thresh)) ||
((snr.flag & GETMASK(LNC_THRESH)) && (value > snr.lnc_thresh)) ||
((snr.flag & GETMASK(UNC_THRESH)) && (value > snr.unc_thresh)) ||
((snr.flag & GETMASK(UCR_THRESH)) && (value > snr.ucr_thresh)) ||
((snr.flag & GETMASK(UNR_THRESH)) && (value > snr.unr_thresh))) {
return -1;
}
snr.lnr_thresh = value;
snr.flag |= SETMASK(LNR_THRESH);
break;
default:
syslog(LOG_WARNING, "%s Incorrect sensor threshold type",__func__);
return -1;
}
ret = pal_copy_thresh_to_file(fru, sensor_num, &snr);
if (ret < 0) {
printf("fail to set threshold file for %s\n", fru_name);
return ret;
}
// Create reinit file
memset(fpath, 0, sizeof(fpath));
sprintf(fpath, THRESHOLD_RE_FLAG, fru_name);
sprintf(cmd,"touch %s",fpath);
if (system(cmd) != 0) {
syslog(LOG_ERR, "%s failed", cmd);
}
return 0;
}