#ifndef _PSVC_OBJECTS_H
#define _PSVC_OBJECTS_H
#ifdef __cplusplus
extern "C" {
#endif
#include <sys/types.h>
#include <pthread.h>
typedef struct psvc_opaque *psvc_opaque_t;
#define PSVC_SUCCESS 0
#define PSVC_FAILURE -1
#define PSVC_NOT_USED -1
#define PSVC_TEMPERATURE_SENSOR_CLASS 0
#define PSVC_FAN_CLASS 1
#define PSVC_LED_CLASS 2
#define PSVC_SYSTEM_CLASS 3
#define PSVC_DIGITAL_SENSOR_CLASS 4
#define PSVC_DIGITAL_CONTROL_CLASS 5
#define PSVC_BOOLEAN_GPIO_CLASS 6
#define PSVC_FAN_TACHOMETER_CLASS 7
#define PSVC_ON_OFF_SWITCH_CLASS 8
#define PSVC_KEYSWITCH_CLASS 9
#define PSVC_8BIT_GPIO_CLASS 10
#define PSVC_PHYSICAL_DEVICE_CLASS 11
#define PSVC_CHASSIS "SYSTEM"
#define PSVC_PRESENCE_SENSOR 0
#define PSVC_FAN_ONOFF_SENSOR 1
#define PSVC_FAN_SPEED_TACHOMETER 2
#define PSVC_FAN_PRIM_SEC_SELECTOR 3
#define PSVC_DEV_TEMP_SENSOR 4
#define PSVC_FAN_DRIVE_CONTROL 5
#define PSVC_KS_NORMAL_POS_SENSOR 6
#define PSVC_KS_DIAG_POS_SENSOR 7
#define PSVC_KS_LOCK_POS_SENSOR 8
#define PSVC_KS_OFF_POS_SENSOR 9
#define PSVC_SLOT_FAULT_LED 10
#define PSVC_SLOT_REMOVE_LED 11
#define PSVC_TS_OVERTEMP_LED 12
#define PSVC_PS_I_SENSOR 13
#define PSVC_DEV_FAULT_SENSOR 14
#define PSVC_DEV_FAULT_LED 15
#define PSVC_TABLE 16
#define PSVC_PARENT 17
#define PSVC_CPU 18
#define PSVC_ALTERNATE 19
#define PSVC_HOTPLUG_ENABLE_SWITCH 20
#define PSVC_PS 21
#define PSVC_FAN 22
#define PSVC_TS 23
#define PSVC_DISK 24
#define PSVC_LED 25
#define PSVC_FSP_LED 26
#define PSVC_KEYSWITCH 27
#define PSVC_PCI_CARD 28
#define PSVC_PHYSICAL_DEVICE 29
#define PSVC_DEV_TYPE_SENSOR 30
#define PSVC_FAN_TRAY_FANS 31
#define PSVC_FRU 32
#define PSVC_DEV_PERM 0x0000000000000001ULL
#define PSVC_DEV_HOTPLUG 0x0000000000000002ULL
#define PSVC_DEV_OPTION 0x0000000000000004ULL
#define PSVC_DEV_PRIMARY 0x0000000000000010ULL
#define PSVC_DEV_SECONDARY 0x0000000000000020ULL
#define PSVC_DEV_RDONLY 0x0000000000000100ULL
#define PSVC_DEV_RDWR 0x0000000000000400ULL
#define PSVC_DEV_FRU 0x0000000000000800ULL
#define PSVC_LOW_WARN 0x0000000000001000ULL
#define PSVC_LOW_SHUT 0x0000000000002000ULL
#define PSVC_HIGH_WARN 0x0000000000004000ULL
#define PSVC_HIGH_SHUT 0x0000000000008000ULL
#define PSVC_CONVERSION_TABLE 0x0000000000010000ULL
#define PSVC_OPT_TEMP 0x0000000000020000ULL
#define PSVC_HW_LOW_SHUT 0x0000000000040000ULL
#define PSVC_HW_HIGH_SHUT 0x0000000000080000ULL
#define PSVC_FAN_DRIVE_PR 0x0001000000000000ULL
#define PSVC_TEMP_DRIVEN 0x0002000000000000ULL
#define PSVC_SPEED_CTRL_PR 0x0004000000000000ULL
#define PSVC_FAN_ON_OFF 0x0008000000000000ULL
#define PSVC_CLOSED_LOOP_CTRL 0x0010000000000000ULL
#define PSVC_FAN_DRIVE_TABLE_PR 0x0010000000000000ULL
#define PSVC_DIE_TEMP 0x0001000000000000ULL
#define PSVC_AMB_TEMP 0x0002000000000000ULL
#define PSVC_DIGI_SENSOR 0x0100000000000000ULL
#define PSVC_BI_STATE 0x0001000000000000ULL
#define PSVC_TRI_STATE 0x0002000000000000ULL
#define PSVC_GREEN 0x0010000000000000ULL
#define PSVC_AMBER 0x0020000000000000ULL
#define PSVC_OUTPUT 0x0100000000000000ULL
#define PSVC_INPUT 0x0200000000000000ULL
#define PSVC_BIDIR 0x0400000000000000ULL
#define PSVC_BIT_POS 0x0001000000000000ULL
#define PSVC_VAL_POS 0x0002000000000000ULL
#define PSVC_NORMAL_POS_AV 0x0010000000000000ULL
#define PSVC_DIAG_POS_AV 0x0020000000000000ULL
#define PSVC_LOCK_POS_AV 0x0040000000000000ULL
#define PSVC_OFF_POS_AV 0x0080000000000000ULL
#define PSVC_GPIO_PORT 0x0001000000000000ULL
#define PSVC_GPIO_REG 0x0002000000000000ULL
#define PSVC_LED_GREEN "GREEN"
#define PSVC_LED_AMBER "AMBER"
#define PSVC_LED_WHITE "WHITE"
#define PSVC_LED_RED "RED"
#define PSVC_OK "OK"
#define PSVC_ERROR "ERROR"
#define PSVC_DEGRADED "DEGRADED"
#define PSVC_STOPPED "STOPPED"
#define PSVC_OVERHEATING "OVERHEATING"
#define PSVC_OFF "OFF"
#define PSVC_ON "ON"
#define PSVC_HOTPLUGGED "HOTPLUGGED"
#define PSVC_LOCK_RUNNING "running"
#define PSVC_LOCK_ENABLED "enabled"
#define PSVC_LOCK_DISABLED "disabled"
#define PSVC_LED_OFF PSVC_OFF
#define PSVC_LED_ON PSVC_ON
#define PSVC_LED_SLOW_BLINK "SLOW_BLINK"
#define PSVC_LED_FAST_BLINK "FAST_BLINK"
#define PSVC_SWITCH_OFF PSVC_OFF
#define PSVC_SWITCH_ON PSVC_ON
#define PSVC_OFF_POS PSVC_OFF
#define PSVC_NORMAL_POS "NORMAL"
#define PSVC_LOCKED_POS "LOCKED"
#define PSVC_DIAG_POS "DIAG"
#define PSVC_NO_FAULT "NO_FAULT"
#define PSVC_GEN_FAULT "DEVICE_FAULT"
#define PSVC_PS_LLO_FLT "PS_LLO_FAULT"
#define PSVC_PS_FAN_FLT "PS_FAN_FAULT"
#define PSVC_PS_TEMP_FLT "PS_TEMP_FAULT"
#define PSVC_PS_ISHARE_FLT "PS_ISHARE_FAULT"
#define PSVC_PS_TYPE_FLT "PS_TYPE_FLT"
#define PSVC_TEMP_LO_WARN "TEMP_LOW_WARNING"
#define PSVC_TEMP_LO_SHUT "TEMP_LOW_SHUTDOWN"
#define PSVC_TEMP_HI_WARN "TEMP_HIGH_WARNING"
#define PSVC_TEMP_HI_SHUT "TEMP_HIGH_SHUTDOWN"
#define PSVC_CLASS_ATTR 0
#define PSVC_SUBCLASS_ATTR 1
#define PSVC_PRESENCE_ATTR 2
#define PSVC_PREV_PRESENCE_ATTR 3
#define PSVC_STATE_ATTR 4
#define PSVC_PREV_STATE_ATTR 5
#define PSVC_ENABLE_ATTR 6
#define PSVC_FAULTID_ATTR 7
#define PSVC_FEATURES_ATTR 8
#define PSVC_LABEL_ATTR 9
#define PSVC_FRUID_ATTR 10
#define PSVC_INSTANCE_ATTR 11
#define PSVC_LED_COLOR_ATTR 12
#define PSVC_LO_WARN_ATTR 13
#define PSVC_LO_SHUT_ATTR 14
#define PSVC_HI_WARN_ATTR 15
#define PSVC_HI_SHUT_ATTR 16
#define PSVC_OPTIMAL_TEMP_ATTR 17
#define PSVC_HW_HI_SHUT_ATTR 18
#define PSVC_HW_LO_SHUT_ATTR 19
#define PSVC_SETPOINT_ATTR 20
#define PSVC_HYSTERESIS_ATTR 21
#define PSVC_LOOPGAIN_ATTR 22
#define PSVC_LOOPBIAS_ATTR 23
#define PSVC_TEMP_DIFFERENTIAL_ATTR 24
#define PSVC_TEMP_DIFFERENTIAL_INDEX_ATTR 25
#define PSVC_SENSOR_VALUE_ATTR 26
#define PSVC_GPIO_VALUE_ATTR 27
#define PSVC_GPIO_BITS 28
#define PSVC_CONTROL_VALUE_ATTR 29
#define PSVC_LED_STATE_ATTR 30
#define PSVC_SWITCH_STATE_ATTR 31
#define PSVC_PROBE_RESULT_ATTR 32
#define PSVC_TABLE_VALUE_ATTR 33
#define PSVC_ASSOC_ID_ATTR 34
#define PSVC_ASSOC_MATCHES_ATTR 35
#define PSVC_ADDR_SPEC_ATTR 36
#define PSVC_OBJECT_ID_ATTR 37
#define PSVC_LIT_COUNT_ATTR 38
#define PSVC_FRU_INFO_ATTR 39
#define PSVC_LED_IS_LOCATOR_ATTR 40
#define PSVC_LED_LOCATOR_NAME_ATTR 41
#define PSVC_LOCATOR_TRUE "true"
#define PSVC_ABSENT 0
#define PSVC_PRESENT 1
#define PSVC_DISABLED 0
#define PSVC_ENABLED 1
#define PSVC_DEV_PROBE_SUCCESS PSVC_SUCCESS
#define PSVC_DEV_PROBE_FAILED PSVC_FAILURE
#define PSVC_MAXERRORS 2
#define PSVC_VERSION 0
#define PSVC_VERSION_SHIFT 0
#define PSVC_ACTIVE_LOW_SHIFT 7
#define PSVC_BIT_NUM_SHIFT 4
#define PSVC_INVERT_SHIFT 4
#define PSVC_PORT_SHIFT 8
#define PSVC_BITSHIFT_SHIFT 12
#define PSVC_BYTEMASK_SHIFT 16
#define PSVC_REG_SHIFT 24
#define PSVC_TYPE_SHIFT 32
#define PSVC_BUSADDR_SHIFT 40
#define PSVC_BUSNUM_SHIFT 48
#define PSVC_CNTLR_SHIFT 56
#define PSVC_GET_VERSION(X) ((X >> PSVC_VERSION_SHIFT) & 0xF)
#define PSVC_IS_ACTIVE_LOW(X) ((X >> PSVC_ACTIVE_LOW_SHIFT) & 0x1)
#define PSVC_GET_BIT_NUM(X) ((X >> PSVC_BIT_NUM_SHIFT) & 0x7)
#define PSVC_HP_INVERT(X) (((X >> PSVC_INVERT_SHIFT) & 0x7) == 1)
#define PSVC_GET_ASPEC_PORT(X) ((X >> PSVC_PORT_SHIFT) & 0xF)
#define PSVC_GET_ASPEC_BITSHIFT(X) ((X >> PSVC_BITSHIFT_SHIFT) & 0xF)
#define PSVC_GET_ASPEC_BYTEMASK(X) ((X >> PSVC_BYTEMASK_SHIFT) & 0xFF)
#define PSVC_GET_ASPEC_REG(X) ((X >> PSVC_REG_SHIFT) & 0xFF)
#define PSVC_GET_ASPEC_TYPE(X) ((X >> PSVC_TYPE_SHIFT) & 0xFF)
#define PSVC_GET_ASPEC_BUSADDR(X) ((X >> PSVC_BUSADDR_SHIFT) & 0xFF)
#define PSVC_GET_ASPEC_BUSNUM(X) ((X >> PSVC_BUSNUM_SHIFT) & 0xFF)
#define PSVC_GET_ASPEC_CNTLR(X) ((X >> PSVC_CNTLR_SHIFT) & 0xFF)
#define PSVC_I2C_AT24 0
#define PSVC_I2C_HPC3130 1
#define PSVC_I2C_LM75 2
#define PSVC_I2C_LTC1427 3
#define PSVC_I2C_MAX1617 4
#define PSVC_I2C_PCF8574 5
#define PSVC_I2C_PCF8591 6
#define PSVC_I2C_SSC050 7
#define PSVC_I2C_TDA8444 8
#define PSVC_I2C_SSC100 9
#define PSVC_NUM_OF_RETRIES 5
#define PSVC_THRESHOLD_COUNTER 5
#ifndef LIBRARY_BUILD
int32_t psvc_init(psvc_opaque_t *);
int32_t psvc_fini(psvc_opaque_t);
int32_t psvc_get_attr(psvc_opaque_t, char *, int32_t, void *, ...);
int32_t psvc_set_attr(psvc_opaque_t, char *, int32_t, void *);
void psvcplugin_add_children(char *parent_path);
void psvcplugin_lookup(char *name, char *parent, picl_nodehdl_t *node);
#endif
typedef struct {
int32_t buf_start;
char *buf;
int32_t read_size;
}fru_info_t;
extern pthread_mutex_t fan_mutex;
#ifdef __cplusplus
}
#endif
#endif