common/recipes-lib/obmc-pal/files/obmc-pal.h (504 lines of code) (raw):
/*
* Copyright 2015-present Facebook. All Rights Reserved.
*
* 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.
*/
#ifndef __OBMC_PAL_H__
#define __OBMC_PAL_H__
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
#include <errno.h>
#include <sys/file.h>
#include <stdbool.h>
#include <openbmc/ipmi.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifndef BIT
#define BIT(value, index) ((value >> index) & 1)
#endif // BIT
#define SETBIT(x, y) (x | (1ULL << y))
#define GETBIT(x, y) ((x & (1ULL << y)) > y)
#define CLEARBIT(x, y) (x & (~(1ULL << y)))
#define GETMASK(y) (1ULL << y)
#define SETMASK(y) (1ULL << y)
// for threshold-util
#define THRESHOLD_PATH "/tmp/thresh-cache"
#define INIT_THRESHOLD_BIN "/tmp/thresh-cache/%s_init_thresh-val.bin"
#define THRESHOLD_BIN "/tmp/thresh-cache/%s_thresh-val.bin"
#define THRESHOLD_RE_FLAG "/tmp/thresh-cache/%s_thresh-reinit"
#define MAX_SENSOR_NUMBER 0xFF
#define MAX_THERSH_LEN 256
// for fru device
#define DEV_ALL 0x0
#define DEV_NONE 0xff
// GUID
#define GUID_SIZE 16
/* To hold the sensor info and calculated threshold values from the SDR */
/* To hold the sensor info and calculated threshold values from the SDR */
typedef struct {
uint16_t flag;
float ucr_thresh;
float unc_thresh;
float unr_thresh;
float lcr_thresh;
float lnc_thresh;
float lnr_thresh;
float pos_hyst;
float neg_hyst;
int curr_state;
char name[32];
char units[64];
uint32_t poll_interval; // poll interval for each fru's sensor
} thresh_sensor_t;
typedef struct _sensor_info_t {
bool valid;
sdr_full_t sdr;
} sensor_info_t;
typedef struct _dimm_info {
uint8_t sled;
uint8_t socket;
uint8_t channel;
uint8_t slot;
} _dimm_info;
typedef enum {
FRU_TYPE_SERVER = 0,
FRU_TYPE_NIC = 1,
FRU_TYPE_BMC = 2,
FRU_TYPE_DEVICE = 3,
} fru_type_t;
enum {
FRU_STATUS_BAD = 0,
FRU_STATUS_GOOD = 1,
};
enum {
/* Does the FRU have a FRUID EEPROM? */
FRU_CAPABILITY_FRUID_WRITE = (1UL << 0),
FRU_CAPABILITY_FRUID_READ = (1UL << 1),
FRU_CAPABILITY_FRUID_ALL = FRU_CAPABILITY_FRUID_WRITE |
FRU_CAPABILITY_FRUID_READ,
/* Sensors on this FRU */
FRU_CAPABILITY_SENSOR_READ = (1UL << 2),
FRU_CAPABILITY_SENSOR_THRESHOLD_UPDATE = (1UL << 3),
FRU_CAPABILITY_SENSOR_HISTORY = (1UL << 4),
FRU_CAPABILITY_SENSOR_ALL = FRU_CAPABILITY_SENSOR_READ |
FRU_CAPABILITY_SENSOR_THRESHOLD_UPDATE |
FRU_CAPABILITY_SENSOR_HISTORY,
/* Server capability */
FRU_CAPABILITY_SERVER = (1UL << 5),
/* NIC capability */
FRU_CAPABILITY_NETWORK_CARD = (1UL << 6),
/* FRU containing the BMC */
FRU_CAPABILITY_MANAGEMENT_CONTROLLER = (1UL << 7),
/* FRU supports power control */
FRU_CAPABILITY_POWER_STATUS = (1UL << 8),
FRU_CAPABILITY_POWER_ON = (1UL << 9),
FRU_CAPABILITY_POWER_OFF = (1UL << 10),
FRU_CAPABILITY_POWER_CYCLE = (1UL << 11),
FRU_CAPABILITY_POWER_RESET = (1UL << 12),
FRU_CAPABILITY_POWER_12V_ON = (1UL << 13),
FRU_CAPABILITY_POWER_12V_OFF = (1UL << 14),
FRU_CAPABILITY_POWER_12V_CYCLE = (1UL << 15),
FRU_CAPABILITY_POWER_FORCE_12V_ON = (1UL << 16),
FRU_CAPABILITY_POWER_FORCE_ON = (1UL << 17),
/* Server power, most platforms support at least this */
FRU_CAPABILITY_POWER_ALL = FRU_CAPABILITY_POWER_STATUS |
FRU_CAPABILITY_POWER_ON |
FRU_CAPABILITY_POWER_OFF |
FRU_CAPABILITY_POWER_CYCLE |
FRU_CAPABILITY_POWER_RESET,
/* Server 12V power, most multi-node supports at least this */
FRU_CAPABILITY_POWER_12V_ALL = FRU_CAPABILITY_POWER_12V_ON |
FRU_CAPABILITY_POWER_12V_OFF |
FRU_CAPABILITY_POWER_12V_CYCLE,
/* FRU/device contains one or more complex device on its board */
FRU_CAPABILITY_HAS_DEVICE = (1UL << 18),
/* Other capabilities can be added here in a
* backwards compatible way */
/* Sensors of this fru depends on root fru */
FRU_CAPABILITY_SENSOR_SLAVE = (1UL << 19),
/* Magic to indicate all capabilities */
FRU_CAPABILITY_ALL = 0xffffffffUL
};
enum {
SENSORD_MODE_TESTING = 0x01,
SENSORD_MODE_NORMAL = 0x0F,
};
enum {
PAL_EOK = 0,
PAL_ENOTSUP = -ENOTSUP,
PAL_ENOTREADY = -EAGAIN,
/* non system errors start from -256 downwards */
};
//for power restore policy
enum {
POWER_CFG_OFF = 0,
POWER_CFG_LPS,
POWER_CFG_ON,
POWER_CFG_UKNOWN,
};
//For power control/status
enum {
SERVER_POWER_OFF,
SERVER_POWER_ON,
SERVER_POWER_CYCLE,
SERVER_POWER_RESET,
SERVER_GRACEFUL_SHUTDOWN,
SERVER_12V_OFF,
SERVER_12V_ON,
SERVER_12V_CYCLE,
SERVER_GLOBAL_RESET,
SERVER_GRACEFUL_POWER_ON,
SERVER_FORCE_POWER_ON,
SERVER_FORCE_12V_ON,
};
enum LED_LOW_ACTIVE{
LED_N_ON = 0,
LED_N_OFF,
};
enum LED_HIGH_ACTIVE{
LED_OFF = 0,
LED_ON,
};
enum GPIO_VALUE{
GPIO_LOW = 0,
GPIO_HIGH,
};
enum CTRL_HIGH_ACTIVE{
CTRL_ENABLE = 1,
CTRL_DISABLE = 0,
};
enum CTRL_LOW_ACTIVE{
CTRL_N_ENABLE = 0,
CTRL_N_DISABLE = 1,
};
/* Enum for type of Upper and Lower threshold values */
enum {
SENSOR_VALID = 0x0,
UCR_THRESH = 0x01, /* Upper Critical */
UNC_THRESH, /* Upper Non-Critical */
UNR_THRESH, /* Upper Non-Recoverable */
LCR_THRESH, /* Lower Critical */
LNC_THRESH, /* Lower Non-Critical */
LNR_THRESH, /* Lower Non-Recoverable */
POS_HYST, /* Positive Hysteresis */
NEG_HYST, /* Negative Hysteresis */
};
enum {
OS_BOOT = 0x1F,
};
enum {
UNIFIED_PCIE_ERR = 0x0,
UNIFIED_MEM_ERR = 0x1,
UNIFIED_UPI_ERR = 0x2,
UNIFIED_IIO_ERR = 0x3,
UNIFIED_POST_ERR = 0x8,
UNIFIED_PCIE_EVENT = 0x9,
UNIFIED_MEM_EVENT = 0xA,
UNIFIED_UPI_EVENT = 0xB,
UNIFIED_BOOT_GUARD = 0xC,
};
enum {
MEMORY_TRAINING_ERR = 0x0,
MEMORY_CORRECTABLE_ERR = 0x1,
MEMORY_UNCORRECTABLE_ERR = 0x2,
MEMORY_CORR_ERR_PTRL_SCR = 0x3,
MEMORY_UNCORR_ERR_PTRL_SCR = 0x4,
};
enum {
UPI_INIT_ERR = 0x0,
};
enum {
PCIE_DPC = 0x0,
};
enum {
MEM_PPR = 0x0,
MEM_NO_DIMM = 0x7,
};
// Enum for get the event sensor name in processing SEL
enum {
SYSTEM_EVENT = 0xE9,
THERM_THRESH_EVT = 0x7D,
BUTTON = 0xAA,
POWER_STATE = 0xAB,
CRITICAL_IRQ = 0xEA,
POST_ERROR = 0x2B,
MACHINE_CHK_ERR = 0x40,
PCIE_ERR = 0x41,
IIO_ERR = 0x43,
SMN_ERR = 0x44, //FBND
USB_ERR = 0x45, //FBND
PSB_ERR = 0x46, //FBND
MEMORY_ECC_ERR = 0X63,
MEMORY_ERR_LOG_DIS = 0X87,
PROCHOT_EXT = 0X51,
PWR_ERR = 0X56,
CATERR_A = 0xE6, // W100, FBTP
CATERR_B = 0xEB, // FBY2, FBTTN, LIGHTNING ,YOSEMITE
CPU_DIMM_HOT = 0xB3,
SOFTWARE_NMI = 0x90,
CPU0_THERM_STATUS = 0x1C,
CPU1_THERM_STATUS = 0x1D,
CPU2_THERM_STATUS = 0x1E,
CPU3_THERM_STATUS = 0x1F,
ME_POWER_STATE = 0x16,
SPS_FW_HEALTH = 0x17,
NM_EXCEPTION_A = 0x18, // W100, FBTP, FBY2, YOSEMITE, FBTTN
PCH_THERM_THRESHOLD = 0x8,
NM_HEALTH = 0x19,
NM_CAPABILITIES = 0x1A,
NM_THRESHOLD = 0x1B,
PWR_THRESH_EVT = 0x3B,
MSMI = 0xE7,
HPR_WARNING = 0xC5,
};
// Enum for BYPASS command selection
enum {
BYPASS_BIC = 0,
BYPASS_ME = 1,
BYPASS_IMC = 2,
BYPASS_NCSI = 3,
BYPASS_NETWORK = 4,
BYPASS_CNT,
};
enum {
PFR_NONE = 0,
PFR_ACTIVE = 1,
PFR_UNPROVISIONED = 2,
};
enum {
UPDATE_PCH_ACTIVE = 0x01,
UPDATE_PCH_RECOVERY = 0x02,
UPDATE_CPLD_ACTIVE = 0x04,
UPDATE_BMC_ACTIVE = 0x08,
UPDATE_BMC_RECOVERY = 0x10,
UPDATE_CPLD_RECOVERY = 0x20,
UPDATE_UPDATE_DYNAMIC = 0x40,
UPDATE_AT_RESET = 0x80,
};
// Helper function needed by some of pal functions
void msleep(int msec);
// Function Declarations
int pal_is_bmc_por(void);
int pal_bmc_reboot(int cmd);
int pal_is_crashdump_ongoing(uint8_t fru);
int pal_is_cplddump_ongoing(uint8_t fru);
int pal_init_sensor_check(uint8_t fru, uint8_t snr_num, void *snr);
int pal_set_last_boot_time(uint8_t slot, uint8_t *last_boot_time);
int pal_get_last_boot_time(uint8_t slot, uint8_t *last_boot_time);
void pal_get_chassis_status(uint8_t slot, uint8_t *req_data, uint8_t *res_data, uint8_t *res_len);
int pal_chassis_control(uint8_t slot, uint8_t *req_data, uint8_t req_len);
void pal_get_sys_intf_caps(uint8_t slot, uint8_t *req_data, uint8_t *res_data, uint8_t *res_len);
int pal_get_80port_record(uint8_t slot, uint8_t *buf, size_t max_len, size_t *len);
int pal_set_boot_order(uint8_t slot, uint8_t *boot, uint8_t *res_data, uint8_t *res_len);
int pal_get_boot_order(uint8_t slot, uint8_t *req_data, uint8_t *boot, uint8_t *res_len);
void pal_set_post_start(uint8_t slot, uint8_t *req_data, uint8_t *res_data, uint8_t *res_len);
void pal_set_post_end(uint8_t slot, uint8_t *req_data, uint8_t *res_data, uint8_t *res_len);
int pal_get_board_id(uint8_t slot, uint8_t *req_data, uint8_t req_len, uint8_t *res_data, uint8_t *res_len);
int pal_parse_oem_unified_sel(uint8_t fru, uint8_t *sel, char *error_log);
int pal_parse_oem_unified_sel_common(uint8_t fru, uint8_t *sel, char *error_log);
int pal_parse_oem_sel(uint8_t fru, uint8_t *sel, char *error_log);
int pal_set_ppin_info(uint8_t slot, uint8_t *req_data, uint8_t req_len, uint8_t *res_data, uint8_t *res_len);
int pal_bmc_err_enable(const char *error_item);
int pal_bmc_err_disable(const char *error_item);
int pal_set_bios_current_boot_list(uint8_t slot, uint8_t *boot_list, uint8_t list_length, uint8_t *cc);
int pal_get_bios_current_boot_list(uint8_t slot, uint8_t *boot_list, uint8_t *list_length);
int pal_set_bios_fixed_boot_device(uint8_t slot, uint8_t *fixed_boot_device);
int pal_get_bios_fixed_boot_device(uint8_t slot, uint8_t *fixed_boot_device);
int pal_set_bios_restores_default_setting(uint8_t slot, uint8_t *default_setting);
int pal_get_bios_restores_default_setting(uint8_t slot, uint8_t *default_setting);
uint8_t pal_set_power_restore_policy(uint8_t slot, uint8_t *pwr_policy, uint8_t *res_data);
uint8_t pal_set_slot_power_policy(uint8_t *pwr_policy, uint8_t *res_data);
void pal_set_boot_option(unsigned char para,unsigned char* pbuff);
int pal_get_boot_option(unsigned char para,unsigned char* pbuff);
int pal_set_slot_led(uint8_t fru, uint8_t *req_data, uint8_t req_len, uint8_t *res_data, uint8_t *res_len);
int pal_get_poss_pcie_config(uint8_t slot, uint8_t *req_data, uint8_t req_len, uint8_t *res_data, uint8_t *res_len);
int pal_get_pcie_port_config(uint8_t slot, uint8_t *req_data, uint8_t req_len, uint8_t *res_data, uint8_t *res_len);
int pal_set_pcie_port_config(uint8_t slot, uint8_t *req_data, uint8_t req_len, uint8_t *res_data, uint8_t *res_len);
int pal_set_imc_version(uint8_t slot, uint8_t *req_data, uint8_t req_len, uint8_t *res_data, uint8_t *res_len);
int pal_sled_ac_cycle(uint8_t slot, uint8_t *req_data, uint8_t req_len, uint8_t *res_data, uint8_t *res_len);
int pal_set_cpu_mem_threshold(const char* threshold_path);
int pal_open_fw_update_flag(void);
int pal_remove_fw_update_flag(void);
int pal_get_fw_update_flag(void);
int pal_get_platform_name(char *name);
int pal_get_num_slots(uint8_t *num);
int pal_get_num_devs(uint8_t slot, uint8_t *num);
int pal_is_fru_prsnt(uint8_t fru, uint8_t *status);
int pal_get_slot_index(unsigned char payload_id);
int pal_get_server_power(uint8_t slot_id, uint8_t *status);
int pal_set_server_power(uint8_t slot_id, uint8_t cmd);
int pal_get_device_power(uint8_t slot_id, uint8_t dev_id, uint8_t *status, uint8_t *type);
int pal_set_device_power(uint8_t slot_id, uint8_t dev_id, uint8_t cmd);
int pal_power_button_override(uint8_t slot_id);
int pal_sled_cycle(void);
int pal_post_handle(uint8_t slot, uint8_t status);
int pal_set_rst_btn(uint8_t slot, uint8_t status);
int pal_set_led(uint8_t led, uint8_t status);
int pal_set_hb_led(uint8_t status);
int pal_get_fru_count(void);
int pal_get_fru_list(char *list);
int pal_get_dev_list(uint8_t fru, char *list);
int pal_get_fru_id(char *fru_str, uint8_t *fru);
int pal_get_dev_id(char *fru_str, uint8_t *fru);
int pal_get_fru_name(uint8_t fru, char *name);
int pal_get_dev_name(uint8_t fru, uint8_t dev, char *name);
int pal_get_fruid_path(uint8_t fru, char *path);
int pal_get_dev_fruid_path(uint8_t fru, uint8_t dev_id, char *path);
int pal_get_fruid_eeprom_path(uint8_t fru, char *path);
int pal_get_dev_fruid_eeprom_path(uint8_t fru, uint8_t dev_id, char *path, uint8_t path_len);
int pal_get_fruid_name(uint8_t fru, char *name);
int pal_get_dev_fruid_name(uint8_t fru, uint8_t dev, char *name);
int pal_slotid_to_fruid(int slotid);
int pal_get_fru_sensor_list(uint8_t fru, uint8_t **sensor_list, int *cnt);
int pal_get_sensor_poll_interval(uint8_t fru, uint8_t sensor_num, uint32_t *value);
int pal_alter_sensor_poll_interval(uint8_t fru, uint8_t sensor_num, uint32_t *value);
bool pal_sensor_is_source_host(uint8_t fru, uint8_t sensor_num);
bool pal_is_host_snr_available(uint8_t fru, uint8_t sensor_id);
int pal_correct_sensor_reading_from_cache(uint8_t fru, uint8_t sensor_id, float *value);
int pal_get_fru_discrete_list(uint8_t fru, uint8_t **sensor_list, int *cnt);
int pal_fruid_write(uint8_t slot, char *path);
int pal_dev_fruid_write(uint8_t fru, uint8_t dev_id, char *path);
int pal_get_fru_devtty(uint8_t fru, char *devtty);
bool pal_sensor_is_cached(uint8_t fru, uint8_t sensor_num);
int pal_sensor_read_raw(uint8_t fru, uint8_t sensor_num, void *value);
int pal_sensor_threshold_flag(uint8_t fru, uint8_t snr_num, uint16_t *flag);
int pal_alter_sensor_thresh_flag(uint8_t fru, uint8_t snr_num, uint16_t *flag);
int pal_get_sensor_name(uint8_t fru, uint8_t sensor_num, char *name);
int pal_get_sensor_units(uint8_t fru, uint8_t sensor_num, char *units);
int pal_get_sensor_threshold(uint8_t fru, uint8_t sensor_num, uint8_t thresh, void *value);
int pal_cfg_key_check(char *key);
int pal_get_key_value(char *key, char *value);
int pal_set_key_value(char *key, char *value);
int pal_set_def_key_value(void);
void pal_dump_key_value(void);
int pal_get_last_pwr_state(uint8_t fru, char *state);
int pal_set_last_pwr_state(uint8_t fru, char *state);
int pal_get_sys_guid(uint8_t slot, char *guid);
int pal_set_sys_guid(uint8_t fru, char *guid);
int pal_get_sysfw_ver(uint8_t slot, uint8_t *ver);
int pal_set_sysfw_ver(uint8_t slot, uint8_t *ver);
int pal_is_cmd_valid(uint8_t *data);
int pal_sensor_discrete_check(uint8_t fru, uint8_t snr_num, char *snr_name, uint8_t o_val, uint8_t n_val);
bool pal_is_fru_x86(uint8_t fru);
int pal_get_x86_event_sensor_name(uint8_t fru, uint8_t snr_num, char *name);
int pal_get_event_sensor_name(uint8_t fru, uint8_t *sel, char *name);
int pal_sel_handler(uint8_t fru, uint8_t snr_num, uint8_t *event_data);
int pal_oem_unified_sel_handler(uint8_t fru, uint8_t general_info, uint8_t *sel);
bool pal_parse_sel_helper(uint8_t fru, uint8_t *sel, char *error_log);
int pal_parse_sel(uint8_t fru, uint8_t *sel, char *error_log);
void pal_add_cri_sel(char *str);
int pal_set_sensor_health(uint8_t fru, uint8_t value);
int pal_get_fru_health(uint8_t fru, uint8_t *value);
int pal_get_fan_name(uint8_t num, char *name);
int pal_get_fan_speed(uint8_t fan, int *rpm);
int pal_set_fan_speed(uint8_t fan, uint8_t pwm);
int pal_get_pwm_value(uint8_t fan_num, uint8_t *value);
bool pal_is_fan_prsnt(uint8_t fan);
int pal_fan_dead_handle(int fan_num);
int pal_fan_recovered_handle(int fan_num);
void pal_inform_bic_mode(uint8_t fru, uint8_t mode);
void pal_update_ts_sled(void);
int pal_handle_dcmi(uint8_t fru, uint8_t *tbuf, uint8_t tlen, uint8_t *rbuf, uint8_t *rlen);
int pal_is_fru_ready(uint8_t fru, uint8_t *status);
int pal_is_slot_server(uint8_t fru);
int pal_is_slot_support_update(uint8_t fru);
int pal_self_tray_location(uint8_t *value);
void pal_log_clear(char *fru);
void pal_populate_guid(char *guid, char *str);
int pal_get_dev_guid(uint8_t fru, char *guid);
int pal_set_dev_guid(uint8_t fru, char *guid);
int pal_get_plat_sku_id(void);
int pal_is_test_board(void);
void pal_sensor_assert_handle(uint8_t fru, uint8_t snr_num, float val, uint8_t thresh);
void pal_sensor_deassert_handle(uint8_t fru, uint8_t snr_num, float val, uint8_t thresh);
int pal_get_fw_info(uint8_t fru, unsigned char target, unsigned char* res, unsigned char* res_len);
void pal_i2c_crash_assert_handle(int i2c_bus_num);
void pal_i2c_crash_deassert_handle(int i2c_bus_num);
int pal_set_machine_configuration(uint8_t slot, uint8_t *req_data, uint8_t req_len, uint8_t *res_data, uint8_t *res_len);
int pal_handle_string_sel(char *log, uint8_t log_len);
int pal_set_adr_trigger(uint8_t slot, bool trigger);
int pal_flock_flag_retry(int fd, unsigned flag);
int pal_flock_retry(int fd);
int pal_unflock_retry(int fd);
int pal_devnum_to_fruid(int devnum);
int pal_channel_to_bus(int channel);
int pal_set_fw_update_ongoing(uint8_t fruid, uint16_t tmout);
bool pal_is_fw_update_ongoing(uint8_t fruid);
bool pal_is_fw_update_ongoing_system(void);
bool pal_sled_cycle_prepare(void);
bool pal_is_crashdump_ongoing_system(void);
bool pal_is_cplddump_ongoing_system(void);
bool pal_can_change_power(uint8_t fru);
int run_command(const char* cmd);
int pal_get_restart_cause(uint8_t slot, uint8_t *restart_cause);
int pal_set_restart_cause(uint8_t slot, uint8_t restart_cause);
int pal_get_nm_selftest_result(uint8_t fruid, uint8_t *data);
int pal_handle_oem_1s_intr(uint8_t slot, uint8_t *data);
int pal_handle_oem_1s_asd_msg_in(uint8_t slot, uint8_t *data, uint8_t data_len);
int pal_handle_oem_1s_ras_dump_in(uint8_t slot, uint8_t *data, uint8_t data_len);
int pal_set_gpio_value(int gpio_num, uint8_t value);
int pal_get_gpio_value(int gpio_num, uint8_t *value);
int pal_ipmb_processing(int bus, void *buf, uint16_t size);
int pal_ipmb_finished(int bus, void *buf, uint16_t size);
int pal_bypass_cmd(uint8_t slot, uint8_t *req_data, uint8_t req_len, uint8_t *res_data, uint8_t *res_len);
int pal_bypass_dev_card(uint8_t slot, uint8_t *req_data, uint8_t req_len, uint8_t *res_data, uint8_t *res_len);
void pal_set_def_restart_cause(uint8_t slot);
int pal_compare_fru_data(char *fru_out, char *fru_in, int cmp_size);
int pal_sensor_thresh_modify(uint8_t fru, uint8_t sensor_num, uint8_t thresh_type, float value);
int pal_get_all_thresh_from_file(uint8_t fru, thresh_sensor_t *sinfo, int mode);
int pal_copy_all_thresh_to_file(uint8_t fru, thresh_sensor_t *sinfo);
int pal_get_thresh_from_file(uint8_t fru, uint8_t snr_num, thresh_sensor_t *sinfo);
int pal_copy_thresh_to_file(uint8_t fru, uint8_t snr_num, thresh_sensor_t *sinfo);
bool pal_is_sensor_existing(uint8_t fru, uint8_t snr_num);
void pal_get_me_name(uint8_t fru, char *target_name);
uint8_t pal_parse_ras_sel(uint8_t slot, uint8_t *sel, char *error_log);
int pal_ignore_thresh(uint8_t fru, uint8_t snr_num, uint8_t thresh);
int pal_set_fru_post(uint8_t fru, uint8_t value);
uint8_t pal_add_imc_log(uint8_t slot, uint8_t *req_data, uint8_t req_len, uint8_t *res_data, uint8_t *res_len);
uint8_t pal_add_cper_log(uint8_t slot, uint8_t *req_data, uint8_t req_len, uint8_t *res_data, uint8_t *res_len);
uint8_t pal_set_psb_info(uint8_t slot, uint8_t *req_data, uint8_t req_len, uint8_t *res_data, uint8_t *res_len);
int pal_set_tpm_physical_presence(uint8_t slot, uint8_t presence);
int pal_get_tpm_physical_presence(uint8_t slot);
int pal_create_TPMTimer(int fru);
int pal_force_update_bic_fw(uint8_t slot_id, uint8_t comp, char *path);
void pal_specific_plat_fan_check(bool status);
int pal_get_sensor_util_timeout(uint8_t fru);
bool pal_get_pair_fru(uint8_t slot_id, uint8_t *pair_fru);
char *pal_get_pwn_list(void);
char *pal_get_tach_list(void);
char *pal_get_fan_opt_list(void);
int pal_get_pwm_cnt(void);
int pal_get_tach_cnt(void);
int pal_get_fan_opt_cnt(void);
int pal_set_fan_ctrl(char *ctrl_opt);
int pal_set_time_sync(uint8_t *req_data, uint8_t req_len);
int pal_get_bmc_ipmb_slave_addr(uint16_t *slave_addr, uint8_t bus_id);
int pal_is_mcu_ready(uint8_t bus);
int pal_wait_mcu_ready2update(uint8_t bus);
int pal_set_time_sync(uint8_t *req_data, uint8_t req_len);
int pal_set_sdr_update_flag(uint8_t slot, uint8_t update);
int pal_get_sdr_update_flag(uint8_t slot);
int pal_parse_mem_mapping_string(uint8_t channel, bool *support_mem_mapping, char *error_log);
int pal_convert_to_dimm_str(uint8_t cpu, uint8_t channel, uint8_t slot, char *str);
int pal_fw_update_prepare(uint8_t fru, const char *comp);
int pal_fw_update_finished(uint8_t fru, const char *comp, int status);
int pal_get_80port_page_record(uint8_t slot, uint8_t page_num, uint8_t *buf, size_t max_len, size_t *len);
bool pal_is_modify_sel_time(uint8_t *sel, int size);
int pal_update_sensor_reading_sdr (uint8_t fru);
int pal_set_usb_path (uint8_t slot, uint8_t endpoint);
int pal_display_4byte_post_code(uint8_t slot, uint32_t postcode_dw);
void pal_get_eth_intf_name(char *intf_name);
int pal_get_host_system_mode(uint8_t *mode);
int pal_get_altered_comp_name(char *comp_name);
int pal_sensor_monitor_initial(void);
int pal_sensor_thresh_init(void);
uint8_t pal_ipmb_get_sensor_val(uint8_t slot, uint8_t *req_data, uint8_t req_len, uint8_t *res_data, uint8_t *res_len);
int pal_set_host_system_mode(uint8_t mode);
int pal_is_pfr_active(void);
int pal_get_pfr_address(uint8_t fru, uint8_t *bus, uint8_t *addr, bool *bridged);
int pal_get_pfr_update_address(uint8_t fru, uint8_t *bus, uint8_t *addr, bool *bridged);
int pal_get_dev_card_sensor(uint8_t slot, uint8_t *req_data, uint8_t req_len, uint8_t *res_data, uint8_t *res_len);
int pal_set_bios_cap_fw_ver(uint8_t slot, uint8_t *req_data, uint8_t req_len, uint8_t *res_data, uint8_t *res_len);
int pal_is_sensor_valid(uint8_t fru, uint8_t snr_num);
int pal_get_fru_type_list(fru_type_t fru_type, const char ***fru_list, uint8_t* num_fru);
int pal_get_fw_ver(uint8_t slot, uint8_t *req_data, uint8_t *res_data, uint8_t *res_len);
int pal_get_fru_capability(uint8_t fru, unsigned int *caps);
int pal_get_dev_capability(uint8_t fru, uint8_t dev, unsigned int *caps);
bool pal_is_aggregate_snr_valid(uint8_t snr_num);
int pal_set_ioc_fw_recovery(uint8_t *ioc_recovery_setting, uint8_t req_len, uint8_t *res_data, uint8_t *res_len);
int pal_get_ioc_fw_recovery(uint8_t ioc_recovery_component, uint8_t *res_data, uint8_t *res_len);
int pal_setup_exp_uart_bridging(void);
int pal_teardown_exp_uart_bridging(void);
int pal_convert_sensor_reading(sdr_full_t *sdr, int in_value, float *out_value);
int pal_bic_self_test(void);
int pal_is_bic_ready(uint8_t fru, uint8_t *status);
bool pal_is_bic_heartbeat_ok(uint8_t fru);
int pal_bic_hw_reset(void);
int pal_get_server_12v_power(uint8_t fru_id, uint8_t *status);
int pal_set_ioc_wwid(uint8_t *ioc_wwid, uint8_t req_len, uint8_t *res_data, uint8_t *res_len);
int pal_get_ioc_wwid(uint8_t ioc_component, uint8_t *res_data, uint8_t *res_len);
int pal_handle_oem_1s_dev_power(uint8_t slot, uint8_t *req_data, uint8_t req_len, uint8_t *res_data, uint8_t *res_len);
int pal_handle_fan_fru_checksum_sel(char *log, uint8_t log_len);
int pal_get_fru_slot(uint8_t fru, uint8_t *slot);
int pal_get_print_fru_name(const char **list);
int pal_get_root_fru(uint8_t fru, uint8_t *root);
int pal_handle_oem_1s_update_sdr(uint8_t slot);
int pal_get_fru_list_by_caps(unsigned int caps, char *list, size_t size);
int pal_get_dev_list_by_caps(uint8_t fru, unsigned int caps, char *list, size_t size);
int pal_oem_bios_extra_setup(uint8_t slot, uint8_t *req_data, uint8_t req_len, uint8_t *res_data, uint8_t *res_len);
int pal_udbg_get_frame_total_num();
#ifdef __cplusplus
}
#endif
#endif