123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359 |
- /****************************************************************
- ****************************************************************
- ** **
- ** (C)Copyright 2005-2006, American Megatrends Inc. **
- ** **
- ** All Rights Reserved. **
- ** **
- ** 6145-F, Northbelt Parkway, Norcross, **
- ** **
- ** Georgia - 30071, USA. Phone-(770)-246-8600. **
- ** **
- ****************************************************************
- ****************************************************************/
- /*****************************************************************
- *
- * SensorMonitor.h
- * Sensor Monitor
- *
- * Author: Rama Rao Bisa <ramab@ami.com>
- *
- *****************************************************************/
- #ifndef SENSOR_MONITOR_H
- #define SENSOR_MONITOR_H
- //#include "IPMI_SDRRecord.h"
- /*** Soft Processor Control functions ***/
- #define READ_CTRL_FN 0x01
- #define LWR_NON_CRITICAL_GOING_LOW_CTRL_FN 0x02
- #define LWR_CRITICAL_GOING_LOW_CTRL_FN 0x03
- #define LWR_NON_RECOVERABLE_GOING_LOW_CTRL_FN 0x04
- #define UPPER_NON_CRITICAL_GOING_HIGH_CTRL_FN 0x05
- #define UPPER_CRITICAL_GOING_HIGH_CTRL_FN 0x06
- #define UPPER_NON_RECOVERABLE_GOING_HIGH_CTRL_FN 0x07
- #define LWR_NON_CRITICAL_GOING_HIGH_CTRL_FN 0x82
- #define LWR_CRITICAL_GOING_HIGH_CTRL_FN 0x83
- #define LWR_NON_RECOVERABLE_GOING_HIGH_CTRL_FN 0x84
- #define UPPER_NON_CRITICAL_GOING_LOW_CTRL_FN 0x85
- #define UPPER_CRITICAL_GOING_LOW_CTRL_FN 0x86
- #define UPPER_NON_RECOVERABLE_GOING_LOW_CTRL_FN 0x87
- #define GET_NORMAL_VALUE 0xFE
- #define INIT_CTRL_FN 0xFF
- /*** Sensor Event definitions ***/
- #define SENSOR_STATUS_NORMAL 0x00
- #define SENSOR_STATUS_WARNING_HIGH 0x01
- #define SENSOR_STATUS_WARNING_LOW 0x02
- #define SENSOR_STATUS_CRITICAL_HIGH 0x03
- #define SENSOR_STATUS_CRITICAL_LOW 0x04
- #define SENSOR_STATUS_NONRECOVERABLE_HIGH 0x05
- #define SENSOR_STATUS_NONRECOVERABLE_LOW 0x06
- #define SENSOR_STATUS_FATAL 0x08
- #define MAX_SENSORS_ALLOWED 20
- #ifdef SKIPPER
- #define MAX_SENSORS 0x13
- #define MAX_FANS 0x08
- #define MAX_VOLTS 0x08
- #define MAX_TEMPS 0x01
- #else
- #define MAX_SENSORS 0x11
- #define MAX_FANS 0x07
- #define MAX_VOLTS 0x08
- #define MAX_TEMPS 0x00
- #endif
- #define VALID_LUN 0x01
- #define MAX_SENSOR_NUMBERS (256 + (256 * VALID_LUN)) /* Multi-LUN support total number of sensors is 1024 */
- /*---------------------------------------------------
- * Parameters passed to the sensor monitor handler Q.
- *---------------------------------------------------*/
- #define PARAM_REARM_ALL_SENSORS 0x01
- #define PARAM_REARM_SENSOR 0x02
- #define PARAM_HANDLE_IRQ 0x03
- #define PARAM_SENSOR_SCAN 0x04
- typedef int (*pPDK_MonitorHook_T) (void* pSensorInfo,INT8U *pReadFlags,int BMCInst);
- typedef int (*pPDK_SensorInitHook_T) (void *pSensorInfo,int BMCInst);
- typedef int (*pPDK_MonitorExtHook_T) (void *pSensorInfo, INT8U* pReadFlags,int BMCInst);
- typedef int (*pPDK_PreEventLogHook_T) (void *pSensorInfo, INT8U* pEventData, INT8U* pReadFlags,int BMCInst);
- /* Hook Type supported */
- typedef enum
- {
- HT_INIT_SENSOR,
- HT_PRE_MONITOR,
- HT_POST_MONITOR
- } HookType_e;
-
- #define MAX_PRE_MONITOR_HOOKS 3
- #define MAX_POST_MONITOR_HOOKS 3
- #define MAX_POST_MONITOR_EXT_HOOKS 3
- #define MAX_INIT_SENSOR_HOOKS 3
- #define MAX_PRE_EVENT_LOG_HOOKS 3
- /* Sensor Monitor Event Flags */
- #define SET_SM_INIT_DONE(FLAGS) (FLAGS = FLAGS & 0xFE)
- #define SET_SM_REINIT(FLAGS) (FLAGS = FLAGS | 0x01)
- #define SET_SM_UNABLE_TO_READ(FLAGS) (FLAGS = FLAGS | 0x20)
- #define SET_SM_CLEAR_UNABLE_TO_READ(FLAGS) (FLAGS = FLAGS & 0xDF)
- #define SET_SM_ENABLE_SCAN(FLAGS) (FLAGS = FLAGS | 0x40)
- #define SET_SM_DISABLE_SCAN(FLAGS) (FLAGS = FLAGS & 0xBF)
- #define SET_SM_ENABLE_EVT(FLAGS) (FLAGS = FLAGS | 0x80)
- #define SET_SM_DISABLE_EVT(FLAGS) (FLAGS = FLAGS & 0x7F)
- #pragma pack (1)
- typedef struct
- {
- INT8U MonitorInterval;
- INT8U MonitorState ;
- INT16U NormalValue;
- INT8U PowerOnDelay; //Delay after chassis power on in seconds. 0 - don't delay
- INT8U SysResetDelay ; // Delay after chassis reset in seconds. 0 - don't delay
- } PACKED SensorProperties_T;
- typedef struct
- {
- INT8U SensorNum; /* Sensor Numbner */
- INT8U HookType; /* Type of the hook */
- pPDK_MonitorHook_T pHook; /* Hook */
- } PACKED PDKSensorHook_T;
- /**
- * @struct SensorInfo_T
- * @brief Sensor Information.
- **/
- typedef struct
- {
- BOOL IsSensorPresent;
- INT8U SensorNumber;
- INT16U SensorReading;
- INT16U SettableThreshMask;
- INT16U Err;
- INT16U PreviousState;
- INT16U RecordID;
- INT8U SensorTypeCode;
- INT8U EventTypeCode;
- INT8U SensorInit;
- // These values are copied from the SDR.
- INT8U Units1;
- INT8U Units2;
- INT8U Units3;
- // Caution !!! Order of these members has to maintained
- // Some of the command implementation needs the order to be maintained
- // the following set are used in Get Sensor Reading Factors command
- INT8U M_LSB;
- INT8U M_MSB_Tolerance;
- INT8U B_LSB;
- INT8U B_MSB_Accuracy;
- INT8U Accuracy_MSB_Exp;
- INT8U RExp_BExp;
- INT16U sensor_send_packed[12];
- // the following set are used in Get/Set Sensor Threshold commands
- INT8U LowerNonCritical;
- INT8U LowerCritical;
- INT8U LowerNonRecoverable;
- INT8U UpperNonCritical;
- INT8U UpperCritical;
- INT8U UpperNonRecoverable;
-
- // the following set are used in Get/Set Sensor Hysteresis commands
- INT8U PosHysteresis;
- INT8U NegHysteresis;
- // the following set are used in Get/Set Event Enables commands
- INT8U EventFlags;
- /* Event Flags description */
- /* Bit 0 - Initialization Done */
- /* Bit 1 - Update in Progress */
- /* Bit 2 - reserved */
- /* Bit 3 - reserved */
- /* Bit 4 - reserved */
- /* Bit 5 - Unable to read */
- /* Bit 6 - Sensor Scanning disabled */
- /* Bit 7 - Event Message Disabled */
- INT8U AssertionEventEnablesByte1;
- INT8U AssertionEventEnablesByte2;
- INT8U DeassertionEventEnablesByte1;
- INT8U DeassertionEventEnablesByte2;
- INT8U EventLevel;
- INT8U HealthLevel; // Added to provide correct Health state
- INT8U AssertionEventOccuredByte1;
- INT8U AssertionEventOccuredByte2;
- INT8U DeassertionEventOccuredByte1;
- INT8U DeassertionEventOccuredByte2;
- INT8U SensorMonitorInterval; // added to effect different sensor monitor intervals.
- INT8U SensorState;
- INT8U SensorReadType;
- INT8U PowerOnDelay; //Delay after chassis power on in seconds. 0 - don't delay
- INT8U SysResetDelay ; // Delay after chassis reset in seconds. 0 - don't delay
- /* Settable Sensor Fields */
- INT8U Operation;
- INT8U EvtData1;
- INT8U EvtData2;
- INT8U EvtData3;
- INT8U ComparisonStatus;
- INT8U SensorCaps; // JM 062306 - Added to support manual re-arm sensors
- INT8U AssertionHistoryByte1; // JM 062306 - Added to support manual re-arm sensors
- INT8U AssertionHistoryByte2; // JM 062306 - Added to support manual re-arm sensors
- INT8U DeassertionHistoryByte1; // JM 062306 - Added to support manual re-arm sensors
- INT8U DeassertionHistoryByte2; // JM 062306 - Added to support manual re-arm sensors
- /* Sensor Monitor Internal Flags
- * This flags overrides any IPMI SDR settings.
- *
- *
- * */
- INT8U InternalFlags;
- /* Bit 0 - Enable/Disable scanning - overrides SDR scanning bit */
- /* Bit 1 - reserved */
- /* Bit 2 - reserved */
- /* Bit 3 - reserved */
- /* Bit 4 - reserved */
- /* Bit 5 - reserved */
- /* Bit 6 - reserved */
- /* Bit 7 - reserved */
- INT8U OEMField;
- pPDK_MonitorHook_T pPreMonitor;
- pPDK_MonitorHook_T pPostMonitor;
- pPDK_SensorInitHook_T pInitSensor [MAX_INIT_SENSOR_HOOKS];
- INT8U InitSensorHookCnt;
- pPDK_MonitorExtHook_T pPostMontiorExt [MAX_POST_MONITOR_EXT_HOOKS];
- INT8U PostMonitorExtHookCnt;
- pPDK_PreEventLogHook_T pPreEventLog [MAX_PRE_EVENT_LOG_HOOKS];
- INT8U PreEventLogHookCnt;
- /* The offset for the sensor is added for OPMA Support */
- INT8U SenReadingOffset;
- INT8U SensorOwnerLun;
- BOOL IsDCMITempsensor;
- INT8U EntityID;
- INT8U EntiryInstance;
- SDRRecHdr_T* SDRRec;
- } PACKED SensorInfo_T;
- /**
- * @struct SensorSharedMem_T
- * @brief Shared memory for Sensor Information.
- **/
- typedef struct
- {
- SensorInfo_T SensorInfo [MAX_SENSOR_NUMBERS + 1]; /* Holds all sensor informations */
- INT8U GlobalSensorScanningEnable;
- } PACKED SensorSharedMem_T;
- #pragma pack ()
- /*---------------------------------------
- * InitInternalSensors
- *---------------------------------------*/
- extern int InitInternalSensors (SensorInfo_T *pSensorInfo,int BMCInst);
- /**
- * @var g_SensorValues
- * @brief Global array that holds current sensor values.
- **/
- extern _FAR_ INT8U g_SensorValues [];
- /*
- * @fn InitPowerOnTick
- * @brief Initialize the power on tick counter,
- * should be invoked when ever power on occurs.
- */
- extern void InitPowerOnTick ();
- /*
- * @fn InitSysResetTick
- * @brief Initialize the System Reset tick counter,
- * should be invoked when ever power reset occurs.
- */
- extern void InitSysResetTick ();
- /**
- * @brief Initialize Sensor monitoring.
- * @return 0 if success, -1 if error.
- **/
- extern int InitSensorMonitor (int BMCInst);
- /**
- * @brief Sensor monitoring task.
- **/
- extern void* SensorMonitorTask (void*);
- /**
- * @brief Post an Event message to System Event Log.
- **/
- extern int PostEventMessage (_NEAR_ INT8U *EventMsg, INT8U sysifcflag,INT8U size, int BMCInst);
- /**
- * @brief Returns the current sensor reading
- **/
- extern INT16U SM_GetSensorReading (INT8U SenNum, INT16U *pSensorReading);
-
- /*-------------------------------------------
- * GetSensorInfo
- *
- * This function will be used by the Sensor
- * hook functions to manipulate Sensor information
- * This function DOES NOT lock sensor information
- *------------------------------------------*/
- extern SensorInfo_T* GetSensorInfo (INT8U SensorNum, INT8U OwnerLUN, int BMCInst);
- /***
- *PreMonitorSensor
- *@brief The default pre-monitor hook function for all the senors.
- *@[in]pSensorInfo - The SensorInfo structure
- *@[in]pReadFlags - Flags to be used if any as in internal_sensor
- *@[in]BMCInst - The particular BMCInst
- **/
- int PreMonitorSensor (void* pSensorInfo,INT8U* pReadFlags,int BMCInst);
- /***
- *PostMonitorSensor
- *@brief The default post-monitor hook function for all the senors.
- *@[in]pSensorInfo - The SensorInfo structure
- *@[in]pReadFlags - Flags to be used if any as in internal_sensor
- *@[in]BMCInst - The particular BMCInst
- **/int PostMonitorSensor (void* pSensorInfo,INT8U* pReadFlags,int BMCInst);
- #endif /* SENSOR_MONITOR_H */
|