int __attribute__()

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;
}