summaryrefslogtreecommitdiffstats
path: root/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_sensor/yosemite_sensor.c
diff options
context:
space:
mode:
Diffstat (limited to 'meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_sensor/yosemite_sensor.c')
-rw-r--r--meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_sensor/yosemite_sensor.c883
1 files changed, 0 insertions, 883 deletions
diff --git a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_sensor/yosemite_sensor.c b/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_sensor/yosemite_sensor.c
deleted file mode 100644
index 9d075ce..0000000
--- a/meta-facebook/meta-yosemite/recipes-yosemite/fblibs/files/yosemite_sensor/yosemite_sensor.c
+++ /dev/null
@@ -1,883 +0,0 @@
-/*
- *
- * Copyright 2015-present Facebook. All Rights Reserved.
- *
- * This file contains code to support IPMI2.0 Specificaton available @
- * http://www.intel.com/content/www/us/en/servers/ipmi/ipmi-specifications.html
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <stdbool.h>
-#include <math.h>
-#include <string.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <syslog.h>
-#include "yosemite_sensor.h"
-
-#define LARGEST_DEVICE_NAME 120
-
-#define GPIO_VAL "/sys/class/gpio/gpio%d/value"
-
-#define I2C_BUS_9_DIR "/sys/class/i2c-adapter/i2c-9/"
-#define I2C_BUS_10_DIR "/sys/class/i2c-adapter/i2c-10/"
-
-#define TACH_DIR "/sys/devices/platform/ast_pwm_tacho.0"
-#define ADC_DIR "/sys/devices/platform/ast_adc.0"
-
-#define SP_INLET_TEMP_DEVICE I2C_BUS_9_DIR "9-004e"
-#define SP_OUTLET_TEMP_DEVICE I2C_BUS_9_DIR "9-004f"
-#define HSC_DEVICE I2C_BUS_10_DIR "10-0040"
-
-#define FAN_TACH_RPM "tacho%d_rpm"
-#define ADC_VALUE "adc%d_value"
-#define HSC_IN_VOLT "in1_input"
-#define HSC_OUT_CURR "curr1_input"
-#define HSC_TEMP "temp1_input"
-
-#define UNIT_DIV 1000
-
-#define MEZZ_SENSOR_I2CBUS "11"
-#define MEZZ_SENSOR_I2C_BUS_ADDR "0x1f"
-#define MEZZ_SENSOR_TEMP_REGISTER "0x01"
-
-#define BIC_SENSOR_READ_NA 0x20
-
-#define MAX_SENSOR_NUM 0xFF
-#define ALL_BYTES 0xFF
-#define LAST_REC_ID 0xFFFF
-
-#define YOSEMITE_SDR_PATH "/tmp/sdr_%s.bin"
-
-// List of BIC sensors to be monitored
-const uint8_t bic_sensor_list[] = {
- /* Threshold sensors */
- BIC_SENSOR_MB_OUTLET_TEMP,
- BIC_SENSOR_VCCIN_VR_TEMP,
- BIC_SENSOR_VCC_GBE_VR_TEMP,
- BIC_SENSOR_1V05PCH_VR_TEMP,
- BIC_SENSOR_SOC_TEMP,
- BIC_SENSOR_MB_INLET_TEMP,
- BIC_SENSOR_PCH_TEMP,
- BIC_SENSOR_SOC_THERM_MARGIN,
- BIC_SENSOR_VDDR_VR_TEMP,
- BIC_SENSOR_VCC_GBE_VR_CURR,
- BIC_SENSOR_1V05_PCH_VR_CURR,
- BIC_SENSOR_VCCIN_VR_POUT,
- BIC_SENSOR_VCCIN_VR_CURR,
- BIC_SENSOR_VCCIN_VR_VOL,
- BIC_SENSOR_INA230_POWER,
- BIC_SENSOR_INA230_VOL,
- BIC_SENSOR_SOC_PACKAGE_PWR,
- BIC_SENSOR_SOC_TJMAX,
- BIC_SENSOR_VDDR_VR_POUT,
- BIC_SENSOR_VDDR_VR_CURR,
- BIC_SENSOR_VDDR_VR_VOL,
- BIC_SENSOR_VCC_SCSUS_VR_CURR,
- BIC_SENSOR_VCC_SCSUS_VR_VOL,
- BIC_SENSOR_VCC_SCSUS_VR_TEMP,
- BIC_SENSOR_VCC_SCSUS_VR_POUT,
- BIC_SENSOR_VCC_GBE_VR_POUT,
- BIC_SENSOR_VCC_GBE_VR_VOL,
- BIC_SENSOR_1V05_PCH_VR_POUT,
- BIC_SENSOR_1V05_PCH_VR_VOL,
- BIC_SENSOR_SOC_DIMMA0_TEMP,
- BIC_SENSOR_SOC_DIMMA1_TEMP,
- BIC_SENSOR_SOC_DIMMB0_TEMP,
- BIC_SENSOR_SOC_DIMMB1_TEMP,
- BIC_SENSOR_P3V3_MB,
- BIC_SENSOR_P12V_MB,
- BIC_SENSOR_P1V05_PCH,
- BIC_SENSOR_P3V3_STBY_MB,
- BIC_SENSOR_P5V_STBY_MB,
- BIC_SENSOR_PV_BAT,
- BIC_SENSOR_PVDDR,
- BIC_SENSOR_PVCC_GBE,
-};
-
-const uint8_t bic_discrete_list[] = {
- /* Discrete sensors */
- BIC_SENSOR_SYSTEM_STATUS,
- BIC_SENSOR_VR_HOT,
- BIC_SENSOR_CPU_DIMM_HOT,
-};
-
-// List of SPB sensors to be monitored
-const uint8_t spb_sensor_list[] = {
- SP_SENSOR_INLET_TEMP,
- SP_SENSOR_OUTLET_TEMP,
- //SP_SENSOR_MEZZ_TEMP
- SP_SENSOR_FAN0_TACH,
- SP_SENSOR_FAN1_TACH,
- //SP_SENSOR_AIR_FLOW,
- SP_SENSOR_P5V,
- SP_SENSOR_P12V,
- SP_SENSOR_P3V3_STBY,
- SP_SENSOR_P12V_SLOT1,
- SP_SENSOR_P12V_SLOT2,
- SP_SENSOR_P12V_SLOT3,
- SP_SENSOR_P12V_SLOT4,
- SP_SENSOR_P3V3,
- SP_SENSOR_HSC_IN_VOLT,
- SP_SENSOR_HSC_OUT_CURR,
- SP_SENSOR_HSC_TEMP,
- SP_SENSOR_HSC_IN_POWER,
-};
-
-// List of NIC sensors to be monitored
-const uint8_t nic_sensor_list[] = {
- MEZZ_SENSOR_TEMP,
-};
-
-float spb_sensor_threshold[MAX_SENSOR_NUM][MAX_SENSOR_THRESHOLD + 1] = {0};
-float nic_sensor_threshold[MAX_SENSOR_NUM][MAX_SENSOR_THRESHOLD + 1] = {0};
-
-static void
-sensor_thresh_array_init() {
- static bool init_done = false;
-
- if (init_done)
- return;
-
- spb_sensor_threshold[SP_SENSOR_INLET_TEMP][UCR_THRESH] = 40;
- spb_sensor_threshold[SP_SENSOR_OUTLET_TEMP][UCR_THRESH] = 70;
- spb_sensor_threshold[SP_SENSOR_FAN0_TACH][UCR_THRESH] = 10000;
- spb_sensor_threshold[SP_SENSOR_FAN0_TACH][LCR_THRESH] = 500;
- spb_sensor_threshold[SP_SENSOR_FAN1_TACH][UCR_THRESH] = 10000;
- spb_sensor_threshold[SP_SENSOR_FAN1_TACH][LCR_THRESH] = 500;
- //spb_sensor_threshold[SP_SENSOR_AIR_FLOW][UCR_THRESH] = {75.0, 0, 0, 0, 0, 0, 0, 0};
- spb_sensor_threshold[SP_SENSOR_P5V][UCR_THRESH] = 5.493;
- spb_sensor_threshold[SP_SENSOR_P5V][LCR_THRESH] = 4.501;
- spb_sensor_threshold[SP_SENSOR_P12V][UCR_THRESH] = 13.216;
- spb_sensor_threshold[SP_SENSOR_P12V][LCR_THRESH] = 11.269;
- spb_sensor_threshold[SP_SENSOR_P3V3_STBY][UCR_THRESH] = 3.625;
- spb_sensor_threshold[SP_SENSOR_P3V3_STBY][LCR_THRESH] = 2.973;
- spb_sensor_threshold[SP_SENSOR_P12V_SLOT1][UCR_THRESH] = 13.216;
- spb_sensor_threshold[SP_SENSOR_P12V_SLOT1][LCR_THRESH] = 11.269;
- spb_sensor_threshold[SP_SENSOR_P12V_SLOT2][UCR_THRESH] = 13.216;
- spb_sensor_threshold[SP_SENSOR_P12V_SLOT2][LCR_THRESH] = 11.269;
- spb_sensor_threshold[SP_SENSOR_P12V_SLOT3][UCR_THRESH] = 13.216;
- spb_sensor_threshold[SP_SENSOR_P12V_SLOT3][LCR_THRESH] = 11.269;
- spb_sensor_threshold[SP_SENSOR_P12V_SLOT4][UCR_THRESH] = 13.216;
- spb_sensor_threshold[SP_SENSOR_P12V_SLOT4][LCR_THRESH] = 11.269;
- spb_sensor_threshold[SP_SENSOR_P3V3][UCR_THRESH] = 3.625;
- spb_sensor_threshold[SP_SENSOR_P3V3][LCR_THRESH] = 2.973;
- spb_sensor_threshold[SP_SENSOR_HSC_IN_VOLT][UCR_THRESH] = 13.2;
- spb_sensor_threshold[SP_SENSOR_HSC_IN_VOLT][LCR_THRESH] = 10.8;
- spb_sensor_threshold[SP_SENSOR_HSC_OUT_CURR][UCR_THRESH] = 47.705;
- spb_sensor_threshold[SP_SENSOR_HSC_TEMP][UCR_THRESH] = 120;
- spb_sensor_threshold[SP_SENSOR_HSC_IN_POWER][UCR_THRESH] = 525;
-
- nic_sensor_threshold[MEZZ_SENSOR_TEMP][UCR_THRESH] = 80;
-
- init_done = true;
-}
-
-size_t bic_sensor_cnt = sizeof(bic_sensor_list)/sizeof(uint8_t);
-
-size_t bic_discrete_cnt = sizeof(bic_discrete_list)/sizeof(uint8_t);
-
-size_t spb_sensor_cnt = sizeof(spb_sensor_list)/sizeof(uint8_t);
-
-size_t nic_sensor_cnt = sizeof(nic_sensor_list)/sizeof(uint8_t);
-
-enum {
- FAN0 = 0,
- FAN1,
-};
-
-enum {
- ADC_PIN0 = 0,
- ADC_PIN1,
- ADC_PIN2,
- ADC_PIN3,
- ADC_PIN4,
- ADC_PIN5,
- ADC_PIN6,
- ADC_PIN7,
-};
-
-static sensor_info_t g_sinfo[MAX_NUM_FRUS][MAX_SENSOR_NUM] = {0};
-
-static int
-read_device(const char *device, int *value) {
- FILE *fp;
- int rc;
-
- fp = fopen(device, "r");
- if (!fp) {
- int err = errno;
-
-#ifdef DEBUG
- syslog(LOG_INFO, "failed to open device %s", device);
-#endif
- return err;
- }
-
- rc = fscanf(fp, "%d", value);
- fclose(fp);
-
- if (rc != 1) {
-#ifdef DEBUG
- syslog(LOG_INFO, "failed to read device %s", device);
-#endif
- return ENOENT;
- } else {
- return 0;
- }
-}
-
-static int
-read_device_float(const char *device, float *value) {
- FILE *fp;
- int rc;
- char tmp[10];
-
- fp = fopen(device, "r");
- if (!fp) {
- int err = errno;
-#ifdef DEBUG
- syslog(LOG_INFO, "failed to open device %s", device);
-#endif
- return err;
- }
-
- rc = fscanf(fp, "%s", tmp);
- fclose(fp);
-
- if (rc != 1) {
-#ifdef DEBUG
- syslog(LOG_INFO, "failed to read device %s", device);
-#endif
- return ENOENT;
- }
-
- *value = atof(tmp);
-
- return 0;
-}
-
-static int
-read_temp(const char *device, float *value) {
- char full_name[LARGEST_DEVICE_NAME + 1];
- int tmp;
-
- snprintf(
- full_name, LARGEST_DEVICE_NAME, "%s/temp1_input", device);
- if (read_device(full_name, &tmp)) {
- return -1;
- }
-
- *value = ((float)tmp)/UNIT_DIV;
-
- return 0;
-}
-
-static int
-read_fan_value(const int fan, const char *device, float *value) {
- char device_name[LARGEST_DEVICE_NAME];
- char full_name[LARGEST_DEVICE_NAME];
-
- snprintf(device_name, LARGEST_DEVICE_NAME, device, fan);
- snprintf(full_name, LARGEST_DEVICE_NAME, "%s/%s", TACH_DIR, device_name);
- return read_device_float(full_name, value);
-}
-
-static int
-read_adc_value(const int pin, const char *device, float *value) {
- char device_name[LARGEST_DEVICE_NAME];
- char full_name[LARGEST_DEVICE_NAME];
-
- snprintf(device_name, LARGEST_DEVICE_NAME, device, pin);
- snprintf(full_name, LARGEST_DEVICE_NAME, "%s/%s", ADC_DIR, device_name);
- return read_device_float(full_name, value);
-}
-
-static int
-read_hsc_value(const char *device, float *value) {
- char full_name[LARGEST_DEVICE_NAME];
- int tmp;
-
- snprintf(full_name, LARGEST_DEVICE_NAME, "%s/%s", HSC_DEVICE, device);
- if(read_device(full_name, &tmp)) {
- return -1;
- }
-
- *value = ((float) tmp)/UNIT_DIV;
-
- return 0;
-}
-
-static int
-read_nic_temp(uint8_t snr_num, float *value) {
- char command[64];
- char tmp[8];
-
- if (snr_num == MEZZ_SENSOR_TEMP) {
- sprintf(command, "i2cget -y %s %s %s b", MEZZ_SENSOR_I2CBUS,
- MEZZ_SENSOR_I2C_BUS_ADDR, MEZZ_SENSOR_TEMP_REGISTER);
-
- FILE *fp = popen(command, "r");
- fscanf(fp, "%s", tmp);
- pclose(fp);
-
- *value = (float) strtol(tmp, NULL, 16);
- }
-
- return 0;
-}
-
-static int
-bic_read_sensor_wrapper(uint8_t fru, uint8_t sensor_num, bool discrete,
- void *value) {
-
- int ret;
- sdr_full_t *sdr;
- ipmi_sensor_reading_t sensor;
-
- ret = bic_read_sensor(fru, sensor_num, &sensor);
- if (ret) {
- return ret;
- }
-
- if (sensor.flags & BIC_SENSOR_READ_NA) {
-#ifdef DEBUG
- syslog(LOG_ERR, "bic_read_sensor_wrapper: Reading Not Available");
- syslog(LOG_ERR, "bic_read_sensor_wrapper: sensor_num: 0x%X, flag: 0x%X",
- sensor_num, sensor.flags);
-#endif
- return -1;
- }
-
- if (discrete) {
- *(float *) value = (float) sensor.status;
- return 0;
- }
-
- sdr = &g_sinfo[fru-1][sensor_num].sdr;
-
- // If the SDR is not type1, no need for conversion
- if (sdr->type !=1) {
- *(float *) value = sensor.value;
- return 0;
- }
-
- // y = (mx + b * 10^b_exp) * 10^r_exp
- uint8_t x;
- uint8_t m_lsb, m_msb, m;
- uint8_t b_lsb, b_msb, b;
- int8_t b_exp, r_exp;
-
- x = sensor.value;
-
- m_lsb = sdr->m_val;
- m_msb = sdr->m_tolerance >> 6;
- m = (m_msb << 8) | m_lsb;
-
- b_lsb = sdr->b_val;
- b_msb = sdr->b_accuracy >> 6;
- b = (b_msb << 8) | b_lsb;
-
- // exponents are 2's complement 4-bit number
- b_exp = sdr->rb_exp & 0xF;
- if (b_exp > 7) {
- b_exp = (~b_exp + 1) & 0xF;
- b_exp = -b_exp;
- }
- r_exp = (sdr->rb_exp >> 4) & 0xF;
- if (r_exp > 7) {
- r_exp = (~r_exp + 1) & 0xF;
- r_exp = -r_exp;
- }
-
- //printf("m:%d, x:%d, b:%d, b_exp:%d, r_exp:%d\n", m, x, b, b_exp, r_exp);
-
- * (float *) value = ((m * x) + (b * pow(10, b_exp))) * (pow(10, r_exp));
-
- if ((sensor_num == BIC_SENSOR_SOC_THERM_MARGIN) && (* (float *) value > 0)) {
- * (float *) value -= (float) THERMAL_CONSTANT;
- }
-
- return 0;
-}
-
-int
-yosemite_sensor_sdr_path(uint8_t fru, char *path) {
-
-char fru_name[16] = {0};
-
-switch(fru) {
- case FRU_SLOT1:
- sprintf(fru_name, "%s", "slot1");
- break;
- case FRU_SLOT2:
- sprintf(fru_name, "%s", "slot2");
- break;
- case FRU_SLOT3:
- sprintf(fru_name, "%s", "slot3");
- break;
- case FRU_SLOT4:
- sprintf(fru_name, "%s", "slot4");
- break;
- case FRU_SPB:
- sprintf(fru_name, "%s", "spb");
- break;
- case FRU_NIC:
- sprintf(fru_name, "%s", "nic");
- break;
- default:
-#ifdef DEBUG
- syslog(LOG_WARNING, "yosemite_sensor_sdr_path: Wrong Slot ID\n");
-#endif
- return -1;
-}
-
-sprintf(path, YOSEMITE_SDR_PATH, fru_name);
-
-if (access(path, F_OK) == -1) {
- return -1;
-}
-
-return 0;
-}
-
-/* Populates all sensor_info_t struct using the path to SDR dump */
-int
-sdr_init(char *path, sensor_info_t *sinfo) {
-int fd;
-uint8_t buf[MAX_SDR_LEN] = {0};
-uint8_t bytes_rd = 0;
-uint8_t snr_num = 0;
-sdr_full_t *sdr;
-
-while (access(path, F_OK) == -1) {
- sleep(5);
-}
-
-fd = open(path, O_RDONLY);
-if (fd < 0) {
- syslog(LOG_ERR, "sdr_init: open failed for %s\n", path);
- return -1;
-}
-
-while ((bytes_rd = read(fd, buf, sizeof(sdr_full_t))) > 0) {
- if (bytes_rd != sizeof(sdr_full_t)) {
- syslog(LOG_ERR, "sdr_init: read returns %d bytes\n", bytes_rd);
- return -1;
- }
-
- sdr = (sdr_full_t *) buf;
- snr_num = sdr->sensor_num;
- sinfo[snr_num].valid = true;
- memcpy(&sinfo[snr_num].sdr, sdr, sizeof(sdr_full_t));
-}
-
-return 0;
-}
-
-int
-yosemite_sensor_sdr_init(uint8_t fru, sensor_info_t *sinfo) {
- int fd;
- uint8_t buf[MAX_SDR_LEN] = {0};
- uint8_t bytes_rd = 0;
- uint8_t sn = 0;
- char path[64] = {0};
-
- switch(fru) {
- case FRU_SLOT1:
- case FRU_SLOT2:
- case FRU_SLOT3:
- case FRU_SLOT4:
- if (yosemite_sensor_sdr_path(fru, path) < 0) {
-#ifdef DEBUG
- syslog(LOG_WARNING, "yosemite_sensor_sdr_init: get_fru_sdr_path failed\n");
-#endif
- return ERR_NOT_READY;
- }
-
- if (sdr_init(path, sinfo) < 0) {
-#ifdef DEBUG
- syslog(LOG_ERR, "yosemite_sensor_sdr_init: sdr_init failed for FRU %d", fru);
-#endif
- }
- break;
-
- case FRU_SPB:
- case FRU_NIC:
- return -1;
- break;
- }
-
- return 0;
-}
-
-static int
-yosemite_sdr_init(uint8_t fru) {
-
- static bool init_done[MAX_NUM_FRUS] = {false};
-
- if (!init_done[fru - 1]) {
-
- sensor_info_t *sinfo = g_sinfo[fru-1];
-
- if (yosemite_sensor_sdr_init(fru, sinfo) < 0)
- return ERR_NOT_READY;
-
- init_done[fru - 1] = true;
- }
-
- return 0;
-}
-
-static bool
-is_server_prsnt(uint8_t fru) {
- uint8_t gpio;
- int val;
- char path[64] = {0};
-
- switch(fru) {
- case 1:
- gpio = 61;
- break;
- case 2:
- gpio = 60;
- break;
- case 3:
- gpio = 63;
- break;
- case 4:
- gpio = 62;
- break;
- default:
- return 0;
- }
-
- sprintf(path, GPIO_VAL, gpio);
-
- if (read_device(path, &val)) {
- return -1;
- }
-
- if (val == 0x0) {
- return 1;
- } else {
- return 0;
- }
-}
-
-/* Get the units for the sensor */
-int
-yosemite_sensor_units(uint8_t fru, uint8_t sensor_num, char *units) {
- uint8_t op, modifier;
- sensor_info_t *sinfo;
-
- if (is_server_prsnt(fru) && (yosemite_sdr_init(fru) != 0)) {
- return -1;
- }
-
- switch(fru) {
- case FRU_SLOT1:
- case FRU_SLOT2:
- case FRU_SLOT3:
- case FRU_SLOT4:
- sprintf(units, "");
- break;
-
- case FRU_SPB:
- switch(sensor_num) {
- case SP_SENSOR_INLET_TEMP:
- sprintf(units, "C");
- break;
- case SP_SENSOR_OUTLET_TEMP:
- sprintf(units, "C");
- break;
- case SP_SENSOR_MEZZ_TEMP:
- sprintf(units, "C");
- break;
- case SP_SENSOR_FAN0_TACH:
- sprintf(units, "RPM");
- break;
- case SP_SENSOR_FAN1_TACH:
- sprintf(units, "RPM");
- break;
- case SP_SENSOR_AIR_FLOW:
- sprintf(units, "");
- break;
- case SP_SENSOR_P5V:
- sprintf(units, "Volts");
- break;
- case SP_SENSOR_P12V:
- sprintf(units, "Volts");
- break;
- case SP_SENSOR_P3V3_STBY:
- sprintf(units, "Volts");
- break;
- case SP_SENSOR_P12V_SLOT1:
- case SP_SENSOR_P12V_SLOT2:
- case SP_SENSOR_P12V_SLOT3:
- case SP_SENSOR_P12V_SLOT4:
- sprintf(units, "Volts");
- break;
- case SP_SENSOR_P3V3:
- sprintf(units, "Volts");
- break;
- case SP_SENSOR_HSC_IN_VOLT:
- sprintf(units, "Volts");
- break;
- case SP_SENSOR_HSC_OUT_CURR:
- sprintf(units, "Amps");
- break;
- case SP_SENSOR_HSC_TEMP:
- sprintf(units, "C");
- break;
- case SP_SENSOR_HSC_IN_POWER:
- sprintf(units, "Watts");
- break;
- }
- break;
- case FRU_NIC:
- switch(sensor_num) {
- case MEZZ_SENSOR_TEMP:
- sprintf(units, "C");
- break;
- }
- break;
- }
- return 0;
-}
-
-int
-yosemite_sensor_threshold(uint8_t fru, uint8_t sensor_num, uint8_t thresh, float *value) {
-
- sensor_thresh_array_init();
-
- switch(fru) {
- case FRU_SLOT1:
- case FRU_SLOT2:
- case FRU_SLOT3:
- case FRU_SLOT4:
- break;
- case FRU_SPB:
- *value = spb_sensor_threshold[sensor_num][thresh];
- break;
- case FRU_NIC:
- *value = nic_sensor_threshold[sensor_num][thresh];
- break;
- }
- return 0;
-}
-
-/* Get the name for the sensor */
-int
-yosemite_sensor_name(uint8_t fru, uint8_t sensor_num, char *name) {
-
- switch(fru) {
- case FRU_SLOT1:
- case FRU_SLOT2:
- case FRU_SLOT3:
- case FRU_SLOT4:
- switch(sensor_num) {
- case BIC_SENSOR_SYSTEM_STATUS:
- sprintf(name, "SYSTEM_STATUS");
- break;
- case BIC_SENSOR_SYS_BOOT_STAT:
- sprintf(name, "SYS_BOOT_STAT");
- break;
- case BIC_SENSOR_CPU_DIMM_HOT:
- sprintf(name, "CPU_DIMM_HOT");
- break;
- case BIC_SENSOR_PROC_FAIL:
- sprintf(name, "PROC_FAIL");
- break;
- case BIC_SENSOR_VR_HOT:
- sprintf(name, "VR_HOT");
- break;
- default:
- sprintf(name, "");
- break;
- }
- break;
-
- case FRU_SPB:
- switch(sensor_num) {
- case SP_SENSOR_INLET_TEMP:
- sprintf(name, "SP_INLET_TEMP");
- break;
- case SP_SENSOR_OUTLET_TEMP:
- sprintf(name, "SP_OUTLET_TEMP");
- break;
- case SP_SENSOR_MEZZ_TEMP:
- sprintf(name, "SP_MEZZ_TEMP");
- break;
- case SP_SENSOR_FAN0_TACH:
- sprintf(name, "SP_FAN0_TACH");
- break;
- case SP_SENSOR_FAN1_TACH:
- sprintf(name, "SP_FAN1_TACH");
- break;
- case SP_SENSOR_AIR_FLOW:
- sprintf(name, "SP_AIR_FLOW");
- break;
- case SP_SENSOR_P5V:
- sprintf(name, "SP_P5V");
- break;
- case SP_SENSOR_P12V:
- sprintf(name, "SP_P12V");
- break;
- case SP_SENSOR_P3V3_STBY:
- sprintf(name, "SP_P3V3_STBY");
- break;
- case SP_SENSOR_P12V_SLOT1:
- sprintf(name, "SP_P12V_SLOT1");
- break;
- case SP_SENSOR_P12V_SLOT2:
- sprintf(name, "SP_P12V_SLOT2");
- break;
- case SP_SENSOR_P12V_SLOT3:
- sprintf(name, "SP_P12V_SLOT3");
- break;
- case SP_SENSOR_P12V_SLOT4:
- sprintf(name, "SP_P12V_SLOT4");
- break;
- case SP_SENSOR_P3V3:
- sprintf(name, "SP_P3V3");
- break;
- case SP_SENSOR_HSC_IN_VOLT:
- sprintf(name, "SP_HSC_IN_VOLT");
- break;
- case SP_SENSOR_HSC_OUT_CURR:
- sprintf(name, "SP_HSC_OUT_CURR");
- break;
- case SP_SENSOR_HSC_TEMP:
- sprintf(name, "SP_HSC_TEMP");
- break;
- case SP_SENSOR_HSC_IN_POWER:
- sprintf(name, "SP_HSC_IN_POWER");
- break;
- }
- break;
- case FRU_NIC:
- switch(sensor_num) {
- case MEZZ_SENSOR_TEMP:
- sprintf(name, "MEZZ_SENSOR_TEMP");
- break;
- }
- break;
- }
- return 0;
-}
-
-
-int
-yosemite_sensor_read(uint8_t fru, uint8_t sensor_num, void *value) {
-
- float volt;
- float curr;
- int ret;
- bool discrete;
- int i;
-
- switch (fru) {
- case FRU_SLOT1:
- case FRU_SLOT2:
- case FRU_SLOT3:
- case FRU_SLOT4:
-
- if (!(is_server_prsnt(fru))) {
- return -1;
- }
-
- ret = yosemite_sdr_init(fru);
- if (ret < 0) {
- return ret;
- }
-
- discrete = false;
-
- i = 0;
- while (i < bic_discrete_cnt) {
- if (sensor_num == bic_discrete_list[i++]) {
- discrete = true;
- break;
- }
- }
-
- return bic_read_sensor_wrapper(fru, sensor_num, discrete, value);
-
- case FRU_SPB:
- switch(sensor_num) {
-
- // Inlet, Outlet Temp
- case SP_SENSOR_INLET_TEMP:
- return read_temp(SP_INLET_TEMP_DEVICE, (float*) value);
- case SP_SENSOR_OUTLET_TEMP:
- return read_temp(SP_OUTLET_TEMP_DEVICE, (float*) value);
-
- // Fan Tach Values
- case SP_SENSOR_FAN0_TACH:
- return read_fan_value(FAN0, FAN_TACH_RPM, (float*) value);
- case SP_SENSOR_FAN1_TACH:
- return read_fan_value(FAN1, FAN_TACH_RPM, (float*) value);
-
- // Various Voltages
- case SP_SENSOR_P5V:
- return read_adc_value(ADC_PIN0, ADC_VALUE, (float*) value);
- case SP_SENSOR_P12V:
- return read_adc_value(ADC_PIN1, ADC_VALUE, (float*) value);
- case SP_SENSOR_P3V3_STBY:
- return read_adc_value(ADC_PIN2, ADC_VALUE, (float*) value);
- case SP_SENSOR_P12V_SLOT1:
- return read_adc_value(ADC_PIN4, ADC_VALUE, (float*) value);
- case SP_SENSOR_P12V_SLOT2:
- return read_adc_value(ADC_PIN3, ADC_VALUE, (float*) value);
- case SP_SENSOR_P12V_SLOT3:
- return read_adc_value(ADC_PIN6, ADC_VALUE, (float*) value);
- case SP_SENSOR_P12V_SLOT4:
- return read_adc_value(ADC_PIN5, ADC_VALUE, (float*) value);
- case SP_SENSOR_P3V3:
- return read_adc_value(ADC_PIN7, ADC_VALUE, (float*) value);
-
- // Hot Swap Controller
- case SP_SENSOR_HSC_IN_VOLT:
- return read_hsc_value(HSC_IN_VOLT, (float*) value);
- case SP_SENSOR_HSC_OUT_CURR:
- return read_hsc_value(HSC_OUT_CURR, (float*) value);
- case SP_SENSOR_HSC_TEMP:
- return read_hsc_value(HSC_TEMP, (float*) value);
- case SP_SENSOR_HSC_IN_POWER:
- if (read_hsc_value(HSC_IN_VOLT, &volt)) {
- return -1;
- }
- if (read_hsc_value(HSC_OUT_CURR, &curr)) {
- return -1;
- }
- * (float*) value = volt * curr;
- return 0;
- }
- break;
-
- case FRU_NIC:
- switch(sensor_num) {
- // Mezz Temp
- case MEZZ_SENSOR_TEMP:
- return read_nic_temp(MEZZ_SENSOR_TEMP, (float*) value);
- }
- break;
- }
-}
-
OpenPOWER on IntegriCloud