|
Packit |
534379 |
// Copyright(c) 2018, Intel Corporation
|
|
Packit |
534379 |
//
|
|
Packit |
534379 |
// Redistribution and use in source and binary forms, with or without
|
|
Packit |
534379 |
// modification, are permitted provided that the following conditions are met:
|
|
Packit |
534379 |
//
|
|
Packit |
534379 |
// * Redistributions of source code must retain the above copyright notice,
|
|
Packit |
534379 |
// this list of conditions and the following disclaimer.
|
|
Packit |
534379 |
// * Redistributions in binary form must reproduce the above copyright notice,
|
|
Packit |
534379 |
// this list of conditions and the following disclaimer in the documentation
|
|
Packit |
534379 |
// and/or other materials provided with the distribution.
|
|
Packit |
534379 |
// * Neither the name of Intel Corporation nor the names of its contributors
|
|
Packit |
534379 |
// may be used to endorse or promote products derived from this software
|
|
Packit |
534379 |
// without specific prior written permission.
|
|
Packit |
534379 |
//
|
|
Packit |
534379 |
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
Packit |
534379 |
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
Packit |
534379 |
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
Packit |
534379 |
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
Packit |
534379 |
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
Packit |
534379 |
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
Packit |
534379 |
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
Packit |
534379 |
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
Packit |
534379 |
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
Packit |
534379 |
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
Packit |
534379 |
// POSSIBILITY OF SUCH DAMAGE.
|
|
Packit |
534379 |
/*
|
|
Packit |
534379 |
* @file bmcinfo.h
|
|
Packit |
534379 |
*
|
|
Packit |
534379 |
* @brief
|
|
Packit |
534379 |
*/
|
|
Packit |
534379 |
#ifndef BMCINFO_H
|
|
Packit |
534379 |
#define BMCINFO_H
|
|
Packit |
534379 |
|
|
Packit |
534379 |
#include <opae/fpga.h>
|
|
Packit |
534379 |
#include <wchar.h>
|
|
Packit |
534379 |
#include "bmc_types.h"
|
|
Packit |
534379 |
|
|
Packit |
534379 |
#ifdef __cplusplus
|
|
Packit |
534379 |
extern "C" {
|
|
Packit |
534379 |
#endif
|
|
Packit |
534379 |
|
|
Packit |
534379 |
#ifdef DEBUG
|
|
Packit |
534379 |
#define DBG_PRINT(...) \
|
|
Packit |
534379 |
do { \
|
|
Packit |
534379 |
fprintf(stderr, __VA_ARGS__); \
|
|
Packit |
534379 |
fflush(stdout); \
|
|
Packit |
534379 |
fflush(stderr); \
|
|
Packit |
534379 |
} while (0)
|
|
Packit |
534379 |
#else
|
|
Packit |
534379 |
#define DBG_PRINT(...) \
|
|
Packit |
534379 |
do { \
|
|
Packit |
534379 |
fflush(stdout); \
|
|
Packit |
534379 |
fflush(stderr); \
|
|
Packit |
534379 |
} while (0)
|
|
Packit |
534379 |
#endif
|
|
Packit |
534379 |
|
|
Packit |
534379 |
#define SYSFS_PATH_MAX 256
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// sysfs file names for power and temperature
|
|
Packit |
534379 |
#define SYSFS_SDR_FILE "avmmi-bmc.*.auto/bmc_info/sdr"
|
|
Packit |
534379 |
#define SYSFS_SENSOR_FILE "avmmi-bmc.*.auto/bmc_info/sensors"
|
|
Packit |
534379 |
#define SYSFS_DEVID_FILE "avmmi-bmc.*.auto/bmc_info/device_id"
|
|
Packit |
534379 |
#define SYSFS_RESET_FILE "avmmi-bmc.*.auto/bmc_info/reset_cause"
|
|
Packit |
534379 |
#define SYSFS_PWRDN_FILE "avmmi-bmc.*.auto/bmc_info/power_down_cause"
|
|
Packit |
534379 |
#define SYSFS_AVMMI_DIR "avmmi-bmc.*.auto"
|
|
Packit |
534379 |
#define SYSFS_THERMAL_FILE "thermal_mgmt/temperature"
|
|
Packit |
534379 |
|
|
Packit |
534379 |
#pragma pack(push, 1)
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// Structures used to read and decode Sensor Data Records (SDR)
|
|
Packit |
534379 |
typedef struct _sdr_header {
|
|
Packit |
534379 |
uint16_t record_id;
|
|
Packit |
534379 |
uint8_t sdr_version;
|
|
Packit |
534379 |
uint8_t record_type;
|
|
Packit |
534379 |
uint8_t record_length;
|
|
Packit |
534379 |
} sdr_header;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
typedef struct _sdr_key {
|
|
Packit |
534379 |
uint8_t sensor_owner_id;
|
|
Packit |
534379 |
uint8_t sensor_owner_lun;
|
|
Packit |
534379 |
uint8_t sensor_number;
|
|
Packit |
534379 |
} sdr_key;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
typedef struct _sdr_body {
|
|
Packit |
534379 |
uint8_t entity_id;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
union _entity_instance {
|
|
Packit |
534379 |
struct {
|
|
Packit |
534379 |
uint8_t instance_number : 7;
|
|
Packit |
534379 |
uint8_t physical_logical : 1;
|
|
Packit |
534379 |
} bits;
|
|
Packit |
534379 |
uint8_t _value;
|
|
Packit |
534379 |
} entity_instance;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
union _sensor_initialization {
|
|
Packit |
534379 |
struct {
|
|
Packit |
534379 |
uint8_t scanning_enabled : 1;
|
|
Packit |
534379 |
uint8_t events_enabled : 1;
|
|
Packit |
534379 |
uint8_t init_sensor_type : 1;
|
|
Packit |
534379 |
uint8_t init_hysteresis : 1;
|
|
Packit |
534379 |
uint8_t init_thresholds : 1;
|
|
Packit |
534379 |
uint8_t init_events : 1;
|
|
Packit |
534379 |
uint8_t init_scanning : 1;
|
|
Packit |
534379 |
uint8_t settable_sensor : 1;
|
|
Packit |
534379 |
} bits;
|
|
Packit |
534379 |
uint8_t _value;
|
|
Packit |
534379 |
} sensor_initialization;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
union _sensor_capabilities {
|
|
Packit |
534379 |
struct {
|
|
Packit |
534379 |
uint8_t msg_control_support : 2;
|
|
Packit |
534379 |
uint8_t threshold_access_support : 2;
|
|
Packit |
534379 |
uint8_t hysteresis_support : 2;
|
|
Packit |
534379 |
uint8_t auto_rearm : 1;
|
|
Packit |
534379 |
uint8_t ignore_sensor : 1;
|
|
Packit |
534379 |
} bits;
|
|
Packit |
534379 |
uint8_t _value;
|
|
Packit |
534379 |
} sensor_capabilities;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
uint8_t sensor_type;
|
|
Packit |
534379 |
#define SDR_SENSOR_IS_TEMP(psdr) ((psdr)->sensor_type == 0x1)
|
|
Packit |
534379 |
#define SDR_SENSOR_IS_POWER(psdr) \
|
|
Packit |
534379 |
(((psdr)->sensor_type == 0x2) || ((psdr)->sensor_type == 0x3) \
|
|
Packit |
534379 |
|| ((psdr)->sensor_type == 0x8))
|
|
Packit |
534379 |
|
|
Packit |
534379 |
uint8_t event_reading_type_code;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
union _assertion_event_lower_threshold_mask {
|
|
Packit |
534379 |
struct {
|
|
Packit |
534379 |
uint16_t event_offset_0 : 1;
|
|
Packit |
534379 |
uint16_t event_offset_1 : 1;
|
|
Packit |
534379 |
uint16_t event_offset_2 : 1;
|
|
Packit |
534379 |
uint16_t event_offset_3 : 1;
|
|
Packit |
534379 |
uint16_t event_offset_4 : 1;
|
|
Packit |
534379 |
uint16_t event_offset_5 : 1;
|
|
Packit |
534379 |
uint16_t event_offset_6 : 1;
|
|
Packit |
534379 |
uint16_t event_offset_7 : 1;
|
|
Packit |
534379 |
uint16_t event_offset_8 : 1;
|
|
Packit |
534379 |
uint16_t event_offset_9 : 1;
|
|
Packit |
534379 |
uint16_t event_offset_10 : 1;
|
|
Packit |
534379 |
uint16_t event_offset_11 : 1;
|
|
Packit |
534379 |
uint16_t event_offset_12 : 1;
|
|
Packit |
534379 |
uint16_t event_offset_13 : 1;
|
|
Packit |
534379 |
uint16_t event_offset_14 : 1;
|
|
Packit |
534379 |
uint16_t _reserved : 1;
|
|
Packit |
534379 |
} assertion_event_mask;
|
|
Packit |
534379 |
struct {
|
|
Packit |
534379 |
uint16_t _unused : 12;
|
|
Packit |
534379 |
uint16_t lower_nc_thresh_comparison : 1;
|
|
Packit |
534379 |
uint16_t lower_c_thresh_comparison : 1;
|
|
Packit |
534379 |
uint16_t lower_nr_thresh_comparison : 1;
|
|
Packit |
534379 |
uint16_t _reserved : 1;
|
|
Packit |
534379 |
} lower_threshold_mask;
|
|
Packit |
534379 |
struct {
|
|
Packit |
534379 |
uint16_t
|
|
Packit |
534379 |
assertion_event_lower_nc_going_low_supported : 1;
|
|
Packit |
534379 |
uint16_t
|
|
Packit |
534379 |
assertion_event_lower_nc_going_high_supported : 1;
|
|
Packit |
534379 |
uint16_t
|
|
Packit |
534379 |
assertion_event_lower_c_going_low_supported : 1;
|
|
Packit |
534379 |
uint16_t
|
|
Packit |
534379 |
assertion_event_lower_c_going_high_supported : 1;
|
|
Packit |
534379 |
uint16_t
|
|
Packit |
534379 |
assertion_event_lower_nr_going_low_supported : 1;
|
|
Packit |
534379 |
uint16_t
|
|
Packit |
534379 |
assertion_event_lower_nr_going_high_supported : 1;
|
|
Packit |
534379 |
uint16_t
|
|
Packit |
534379 |
assertion_event_upper_nc_going_low_supported : 1;
|
|
Packit |
534379 |
uint16_t
|
|
Packit |
534379 |
assertion_event_upper_nc_going_high_supported : 1;
|
|
Packit |
534379 |
uint16_t
|
|
Packit |
534379 |
assertion_event_upper_c_going_low_supported : 1;
|
|
Packit |
534379 |
uint16_t
|
|
Packit |
534379 |
assertion_event_upper_c_going_high_supported : 1;
|
|
Packit |
534379 |
uint16_t
|
|
Packit |
534379 |
assertion_event_upper_nr_going_low_supported : 1;
|
|
Packit |
534379 |
uint16_t
|
|
Packit |
534379 |
assertion_event_upper_nr_going_high_supported : 1;
|
|
Packit |
534379 |
uint16_t _unused : 4;
|
|
Packit |
534379 |
} threshold_assertion_event_mask;
|
|
Packit |
534379 |
uint16_t _value;
|
|
Packit |
534379 |
} assertion_event_lower_threshold_mask;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
union _deassertion_event_upper_threshold_mask {
|
|
Packit |
534379 |
struct {
|
|
Packit |
534379 |
uint16_t event_offset_0 : 1;
|
|
Packit |
534379 |
uint16_t event_offset_1 : 1;
|
|
Packit |
534379 |
uint16_t event_offset_2 : 1;
|
|
Packit |
534379 |
uint16_t event_offset_3 : 1;
|
|
Packit |
534379 |
uint16_t event_offset_4 : 1;
|
|
Packit |
534379 |
uint16_t event_offset_5 : 1;
|
|
Packit |
534379 |
uint16_t event_offset_6 : 1;
|
|
Packit |
534379 |
uint16_t event_offset_7 : 1;
|
|
Packit |
534379 |
uint16_t event_offset_8 : 1;
|
|
Packit |
534379 |
uint16_t event_offset_9 : 1;
|
|
Packit |
534379 |
uint16_t event_offset_10 : 1;
|
|
Packit |
534379 |
uint16_t event_offset_11 : 1;
|
|
Packit |
534379 |
uint16_t event_offset_12 : 1;
|
|
Packit |
534379 |
uint16_t event_offset_13 : 1;
|
|
Packit |
534379 |
uint16_t event_offset_14 : 1;
|
|
Packit |
534379 |
uint16_t _reserved : 1;
|
|
Packit |
534379 |
} deassertion_event_mask;
|
|
Packit |
534379 |
struct {
|
|
Packit |
534379 |
uint16_t _unused : 12;
|
|
Packit |
534379 |
uint16_t upper_nc_thresh_comparison : 1;
|
|
Packit |
534379 |
uint16_t upper_c_thresh_comparison : 1;
|
|
Packit |
534379 |
uint16_t upper_nr_thresh_comparison : 1;
|
|
Packit |
534379 |
uint16_t _reserved : 1;
|
|
Packit |
534379 |
} upper_threshold_mask;
|
|
Packit |
534379 |
struct {
|
|
Packit |
534379 |
uint16_t
|
|
Packit |
534379 |
deassertion_event_lower_nc_going_low_supported : 1;
|
|
Packit |
534379 |
uint16_t
|
|
Packit |
534379 |
deassertion_event_lower_nc_going_high_supported : 1;
|
|
Packit |
534379 |
uint16_t
|
|
Packit |
534379 |
deassertion_event_lower_c_going_low_supported : 1;
|
|
Packit |
534379 |
uint16_t
|
|
Packit |
534379 |
deassertion_event_lower_c_going_high_supported : 1;
|
|
Packit |
534379 |
uint16_t
|
|
Packit |
534379 |
deassertion_event_lower_nr_going_low_supported : 1;
|
|
Packit |
534379 |
uint16_t
|
|
Packit |
534379 |
deassertion_event_lower_nr_going_high_supported : 1;
|
|
Packit |
534379 |
uint16_t
|
|
Packit |
534379 |
deassertion_event_upper_nc_going_low_supported : 1;
|
|
Packit |
534379 |
uint16_t
|
|
Packit |
534379 |
deassertion_event_upper_nc_going_high_supported : 1;
|
|
Packit |
534379 |
uint16_t
|
|
Packit |
534379 |
deassertion_event_upper_c_going_low_supported : 1;
|
|
Packit |
534379 |
uint16_t
|
|
Packit |
534379 |
deassertion_event_upper_c_going_high_supported : 1;
|
|
Packit |
534379 |
uint16_t
|
|
Packit |
534379 |
deassertion_event_upper_nr_going_low_supported : 1;
|
|
Packit |
534379 |
uint16_t
|
|
Packit |
534379 |
deassertion_event_upper_nr_going_high_supported : 1;
|
|
Packit |
534379 |
uint16_t _unused : 4;
|
|
Packit |
534379 |
} threshold_deassertion_event_mask;
|
|
Packit |
534379 |
uint16_t _value;
|
|
Packit |
534379 |
} deassertion_event_upper_threshold_mask;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
union _discrete_settable_readable_threshold_mask {
|
|
Packit |
534379 |
struct {
|
|
Packit |
534379 |
uint16_t discrete_state_enable_0 : 1;
|
|
Packit |
534379 |
uint16_t discrete_state_enable_1 : 1;
|
|
Packit |
534379 |
uint16_t discrete_state_enable_2 : 1;
|
|
Packit |
534379 |
uint16_t discrete_state_enable_3 : 1;
|
|
Packit |
534379 |
uint16_t discrete_state_enable_4 : 1;
|
|
Packit |
534379 |
uint16_t discrete_state_enable_5 : 1;
|
|
Packit |
534379 |
uint16_t discrete_state_enable_6 : 1;
|
|
Packit |
534379 |
uint16_t discrete_state_enable_7 : 1;
|
|
Packit |
534379 |
uint16_t discrete_state_enable_8 : 1;
|
|
Packit |
534379 |
uint16_t discrete_state_enable_9 : 1;
|
|
Packit |
534379 |
uint16_t discrete_state_enable_10 : 1;
|
|
Packit |
534379 |
uint16_t discrete_state_enable_11 : 1;
|
|
Packit |
534379 |
uint16_t discrete_state_enable_12 : 1;
|
|
Packit |
534379 |
uint16_t discrete_state_enable_13 : 1;
|
|
Packit |
534379 |
uint16_t discrete_state_enable_14 : 1;
|
|
Packit |
534379 |
uint16_t _reserved : 1;
|
|
Packit |
534379 |
} discrete_reading_mask;
|
|
Packit |
534379 |
struct {
|
|
Packit |
534379 |
uint16_t _unused : 8;
|
|
Packit |
534379 |
uint16_t lower_nc_thresh_settable : 1;
|
|
Packit |
534379 |
uint16_t lower_c_thresh_settable : 1;
|
|
Packit |
534379 |
uint16_t lower_nr_thresh_settable : 1;
|
|
Packit |
534379 |
uint16_t upper_nc_thresh_settable : 1;
|
|
Packit |
534379 |
uint16_t upper_c_thresh_settable : 1;
|
|
Packit |
534379 |
uint16_t upper_nr_thresh_settable : 1;
|
|
Packit |
534379 |
uint16_t _reserved : 2;
|
|
Packit |
534379 |
} settable_threshold_mask;
|
|
Packit |
534379 |
struct {
|
|
Packit |
534379 |
uint16_t lower_nc_thresh_readable : 1;
|
|
Packit |
534379 |
uint16_t lower_c_thresh_readable : 1;
|
|
Packit |
534379 |
uint16_t lower_nr_thresh_readable : 1;
|
|
Packit |
534379 |
uint16_t upper_nc_thresh_readable : 1;
|
|
Packit |
534379 |
uint16_t upper_c_thresh_readable : 1;
|
|
Packit |
534379 |
uint16_t upper_nr_thresh_readable : 1;
|
|
Packit |
534379 |
uint16_t _unused : 10;
|
|
Packit |
534379 |
} readable_threshold_mask;
|
|
Packit |
534379 |
uint16_t _value;
|
|
Packit |
534379 |
} discrete_settable_readable_threshold_mask;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
union _sensor_units_1 {
|
|
Packit |
534379 |
struct {
|
|
Packit |
534379 |
uint8_t percentage : 1;
|
|
Packit |
534379 |
uint8_t modifier_unit : 2;
|
|
Packit |
534379 |
uint8_t rate_unit : 3;
|
|
Packit |
534379 |
uint8_t analog_data_format : 2;
|
|
Packit |
534379 |
} bits;
|
|
Packit |
534379 |
uint8_t _value;
|
|
Packit |
534379 |
} sensor_units_1;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
uint8_t sensor_units_2;
|
|
Packit |
534379 |
uint8_t sensor_units_3;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
union _linearization {
|
|
Packit |
534379 |
struct {
|
|
Packit |
534379 |
uint8_t linearity_enum : 7;
|
|
Packit |
534379 |
uint8_t _reserved : 1;
|
|
Packit |
534379 |
} bits;
|
|
Packit |
534379 |
uint8_t _value;
|
|
Packit |
534379 |
} linearization;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
uint8_t M_8_lsb;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
union _M_tolerance {
|
|
Packit |
534379 |
struct {
|
|
Packit |
534379 |
uint8_t tolerance : 6;
|
|
Packit |
534379 |
uint8_t M_2_msb : 2;
|
|
Packit |
534379 |
} bits;
|
|
Packit |
534379 |
uint8_t _value;
|
|
Packit |
534379 |
} M_tolerance;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
uint8_t B_8_lsb;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
union _B_accuracy {
|
|
Packit |
534379 |
struct {
|
|
Packit |
534379 |
uint8_t accuracy_6_lsb : 6;
|
|
Packit |
534379 |
uint8_t B_2_msb : 2;
|
|
Packit |
534379 |
} bits;
|
|
Packit |
534379 |
uint8_t _value;
|
|
Packit |
534379 |
} B_accuracy;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
union _accuracy_accexp_sensor_direction {
|
|
Packit |
534379 |
struct {
|
|
Packit |
534379 |
uint8_t sensor_direction : 2;
|
|
Packit |
534379 |
uint8_t accuracy_exp : 2;
|
|
Packit |
534379 |
uint8_t accuracy_4_msb : 4;
|
|
Packit |
534379 |
} bits;
|
|
Packit |
534379 |
uint8_t _value;
|
|
Packit |
534379 |
} accuracy_accexp_sensor_direction;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
union _R_exp_B_exp {
|
|
Packit |
534379 |
struct {
|
|
Packit |
534379 |
uint8_t B_exp : 4;
|
|
Packit |
534379 |
uint8_t R_exp : 4;
|
|
Packit |
534379 |
} bits;
|
|
Packit |
534379 |
uint8_t _value;
|
|
Packit |
534379 |
} R_exp_B_exp;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
union _analog_characteristic_flags {
|
|
Packit |
534379 |
struct {
|
|
Packit |
534379 |
uint8_t nominal_reading_specified : 1;
|
|
Packit |
534379 |
uint8_t normal_max_specified : 1;
|
|
Packit |
534379 |
uint8_t normal_min_specified : 1;
|
|
Packit |
534379 |
uint8_t _reserved : 5;
|
|
Packit |
534379 |
} bits;
|
|
Packit |
534379 |
uint8_t _value;
|
|
Packit |
534379 |
} analog_characteristic_flags;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
uint8_t nominal_reading;
|
|
Packit |
534379 |
uint8_t normal_maximum;
|
|
Packit |
534379 |
uint8_t normal_minimum;
|
|
Packit |
534379 |
uint8_t sensor_maximum_reading;
|
|
Packit |
534379 |
uint8_t sensor_minimum_reading;
|
|
Packit |
534379 |
uint8_t upper_nr_threshold;
|
|
Packit |
534379 |
uint8_t upper_c_threshold;
|
|
Packit |
534379 |
uint8_t upper_nc_threshold;
|
|
Packit |
534379 |
uint8_t lower_nr_threshold;
|
|
Packit |
534379 |
uint8_t lower_c_threshold;
|
|
Packit |
534379 |
uint8_t lower_nc_threshold;
|
|
Packit |
534379 |
uint8_t pos_going_threshold_hysteresis_val;
|
|
Packit |
534379 |
uint8_t neg_going_threshold_hysteresis_val;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
uint8_t _reserved0;
|
|
Packit |
534379 |
uint8_t _reserved1;
|
|
Packit |
534379 |
uint8_t oem;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
union _id_string_type_length_code {
|
|
Packit |
534379 |
struct {
|
|
Packit |
534379 |
uint8_t len_in_characters : 5; // 11111b reserved,
|
|
Packit |
534379 |
// 00000b means none
|
|
Packit |
534379 |
// following
|
|
Packit |
534379 |
uint8_t _reserved : 1;
|
|
Packit |
534379 |
uint8_t format : 2; // using TLC_FORMAT enum
|
|
Packit |
534379 |
} bits;
|
|
Packit |
534379 |
uint8_t _value;
|
|
Packit |
534379 |
} id_string_type_length_code;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
uint8_t string_bytes[26]; // Interpreted based on type/length code
|
|
Packit |
534379 |
} sdr_body;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
typedef enum _TLC_FORMAT {
|
|
Packit |
534379 |
unicode = 0x0,
|
|
Packit |
534379 |
BCD_plus = 0x1,
|
|
Packit |
534379 |
ASCII_6 = 0x2, // packed
|
|
Packit |
534379 |
ASCII_8 = 0x3
|
|
Packit |
534379 |
} TLC_FORMAT;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
extern uint8_t bcd_plus[];
|
|
Packit |
534379 |
|
|
Packit |
534379 |
extern uint8_t ASCII_6_bit_translation[];
|
|
Packit |
534379 |
|
|
Packit |
534379 |
typedef struct _sensor_reading {
|
|
Packit |
534379 |
uint8_t _header[3]; // Ignored
|
|
Packit |
534379 |
uint8_t completion_code;
|
|
Packit |
534379 |
uint8_t sens_reading;
|
|
Packit |
534379 |
union {
|
|
Packit |
534379 |
struct {
|
|
Packit |
534379 |
uint8_t _unused : 5;
|
|
Packit |
534379 |
uint8_t reading_state_unavailable : 1;
|
|
Packit |
534379 |
uint8_t sensor_scanning_disabled : 1;
|
|
Packit |
534379 |
uint8_t event_messages_disabled : 1;
|
|
Packit |
534379 |
} sensor_state;
|
|
Packit |
534379 |
uint8_t _value;
|
|
Packit |
534379 |
} sensor_validity;
|
|
Packit |
534379 |
union {
|
|
Packit |
534379 |
struct {
|
|
Packit |
534379 |
uint8_t at_or_below_lower_nc_threshold : 1;
|
|
Packit |
534379 |
uint8_t at_or_below_lower_c_threshold : 1;
|
|
Packit |
534379 |
uint8_t at_or_below_lower_nr_threshold : 1;
|
|
Packit |
534379 |
uint8_t at_or_above_upper_nc_threshold : 1;
|
|
Packit |
534379 |
uint8_t at_or_above_upper_c_threshold : 1;
|
|
Packit |
534379 |
uint8_t at_or_above_upper_nr_threshold : 1;
|
|
Packit |
534379 |
uint8_t _unused : 2;
|
|
Packit |
534379 |
} threshold_sensors;
|
|
Packit |
534379 |
struct {
|
|
Packit |
534379 |
uint8_t state_asserted_0 : 1;
|
|
Packit |
534379 |
uint8_t state_asserted_1 : 1;
|
|
Packit |
534379 |
uint8_t state_asserted_2 : 1;
|
|
Packit |
534379 |
uint8_t state_asserted_3 : 1;
|
|
Packit |
534379 |
uint8_t state_asserted_4 : 1;
|
|
Packit |
534379 |
uint8_t state_asserted_5 : 1;
|
|
Packit |
534379 |
uint8_t state_asserted_6 : 1;
|
|
Packit |
534379 |
uint8_t state_asserted_7 : 1;
|
|
Packit |
534379 |
} discrete_sensors;
|
|
Packit |
534379 |
uint8_t _value;
|
|
Packit |
534379 |
} threshold_events;
|
|
Packit |
534379 |
} sensor_reading;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
typedef struct _device_id {
|
|
Packit |
534379 |
uint8_t _header[3]; // Ignored
|
|
Packit |
534379 |
uint8_t completion_code;
|
|
Packit |
534379 |
uint8_t device_id;
|
|
Packit |
534379 |
union {
|
|
Packit |
534379 |
struct {
|
|
Packit |
534379 |
uint8_t device_revision : 3;
|
|
Packit |
534379 |
uint8_t _unused : 3;
|
|
Packit |
534379 |
uint8_t provides_sdrs : 2;
|
|
Packit |
534379 |
} bits;
|
|
Packit |
534379 |
uint8_t _value;
|
|
Packit |
534379 |
} device_revision;
|
|
Packit |
534379 |
union {
|
|
Packit |
534379 |
struct {
|
|
Packit |
534379 |
uint8_t device_available : 7;
|
|
Packit |
534379 |
uint8_t major_fw_revision : 1;
|
|
Packit |
534379 |
} bits;
|
|
Packit |
534379 |
uint8_t _value;
|
|
Packit |
534379 |
} firmware_revision_1;
|
|
Packit |
534379 |
uint8_t firmware_revision_2;
|
|
Packit |
534379 |
uint8_t ipmi_version;
|
|
Packit |
534379 |
union {
|
|
Packit |
534379 |
struct {
|
|
Packit |
534379 |
uint8_t sensor_device : 1;
|
|
Packit |
534379 |
uint8_t sdr_repository_device : 1;
|
|
Packit |
534379 |
uint8_t sel_device : 1;
|
|
Packit |
534379 |
uint8_t fru_inventory_device : 1;
|
|
Packit |
534379 |
uint8_t ipmb_event_receiver : 1;
|
|
Packit |
534379 |
uint8_t ipmb_event_generator : 1;
|
|
Packit |
534379 |
uint8_t bridge : 1;
|
|
Packit |
534379 |
uint8_t chassis_device : 1;
|
|
Packit |
534379 |
} bits;
|
|
Packit |
534379 |
uint8_t _value;
|
|
Packit |
534379 |
} additional_device_support;
|
|
Packit |
534379 |
uint8_t manufacturer_id_0_7;
|
|
Packit |
534379 |
uint8_t manufacturer_id_8_15;
|
|
Packit |
534379 |
uint8_t manufacturer_id_16_23;
|
|
Packit |
534379 |
uint8_t product_id_0_7;
|
|
Packit |
534379 |
uint8_t product_id_8_15;
|
|
Packit |
534379 |
uint8_t aux_fw_rev_0_7;
|
|
Packit |
534379 |
uint8_t aux_fw_rev_8_15;
|
|
Packit |
534379 |
uint8_t aux_fw_rev_16_23;
|
|
Packit |
534379 |
uint8_t aux_fw_rev_24_31;
|
|
Packit |
534379 |
} device_id;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
typedef struct _powerdown_cause {
|
|
Packit |
534379 |
uint8_t _header[3]; // Ignored
|
|
Packit |
534379 |
uint8_t completion_code;
|
|
Packit |
534379 |
uint8_t iana[3];
|
|
Packit |
534379 |
uint8_t count;
|
|
Packit |
534379 |
uint8_t message[40];
|
|
Packit |
534379 |
} powerdown_cause;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
typedef struct _reset_cause {
|
|
Packit |
534379 |
uint8_t _header[3]; // Ignored
|
|
Packit |
534379 |
uint8_t completion_code;
|
|
Packit |
534379 |
uint8_t iana[3];
|
|
Packit |
534379 |
uint8_t reset_cause; // * TODO: Not sure about this
|
|
Packit |
534379 |
} reset_cause;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
struct _sdr_content {
|
|
Packit |
534379 |
sdr_header header;
|
|
Packit |
534379 |
sdr_key key;
|
|
Packit |
534379 |
sdr_body body;
|
|
Packit |
534379 |
};
|
|
Packit |
534379 |
|
|
Packit |
534379 |
#pragma pack(pop)
|
|
Packit |
534379 |
|
|
Packit |
534379 |
typedef enum { SENSOR_INT, SENSOR_FLOAT } sensor_value_type;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
typedef struct _Values {
|
|
Packit |
534379 |
struct _Values *next;
|
|
Packit |
534379 |
char *name;
|
|
Packit |
534379 |
wchar_t *units;
|
|
Packit |
534379 |
char *annotation_1;
|
|
Packit |
534379 |
char *annotation_2;
|
|
Packit |
534379 |
char *annotation_3;
|
|
Packit |
534379 |
uint8_t raw_value;
|
|
Packit |
534379 |
uint8_t is_valid;
|
|
Packit |
534379 |
uint32_t tolerance;
|
|
Packit |
534379 |
double accuracy;
|
|
Packit |
534379 |
double M;
|
|
Packit |
534379 |
double B;
|
|
Packit |
534379 |
int32_t A_exp;
|
|
Packit |
534379 |
int32_t result_exp;
|
|
Packit |
534379 |
union {
|
|
Packit |
534379 |
double f_val;
|
|
Packit |
534379 |
uint64_t i_val;
|
|
Packit |
534379 |
} value;
|
|
Packit |
534379 |
uint8_t sensor_number;
|
|
Packit |
534379 |
BMC_SENSOR_TYPE sensor_type;
|
|
Packit |
534379 |
sensor_value_type val_type;
|
|
Packit |
534379 |
struct _sdr_content *sdr;
|
|
Packit |
534379 |
} Values;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
#define BMC_SDR_MAGIC (0x4922ab56)
|
|
Packit |
534379 |
|
|
Packit |
534379 |
struct _sdr_rec {
|
|
Packit |
534379 |
uint32_t magic;
|
|
Packit |
534379 |
fpga_token token;
|
|
Packit |
534379 |
uint32_t num_records;
|
|
Packit |
534379 |
char sysfs_path[SYSFS_PATH_MAX];
|
|
Packit |
534379 |
struct _sdr_content *contents;
|
|
Packit |
534379 |
};
|
|
Packit |
534379 |
|
|
Packit |
534379 |
#define BMC_VALUES_MAGIC (0x493afb56)
|
|
Packit |
534379 |
|
|
Packit |
534379 |
struct _bmc_values {
|
|
Packit |
534379 |
uint32_t magic;
|
|
Packit |
534379 |
uint32_t num_records;
|
|
Packit |
534379 |
sensor_reading *contents;
|
|
Packit |
534379 |
Values **values;
|
|
Packit |
534379 |
};
|
|
Packit |
534379 |
|
|
Packit |
534379 |
Values *bmc_build_values(sensor_reading *reading, sdr_header *header,
|
|
Packit |
534379 |
sdr_key *key, sdr_body *body);
|
|
Packit |
534379 |
|
|
Packit |
534379 |
#ifdef __cplusplus
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
#endif
|
|
Packit |
534379 |
|
|
Packit |
534379 |
#endif /* !BMCINFO_H */
|