SensorMonitor.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  1. /****************************************************************
  2. ****************************************************************
  3. ** **
  4. ** (C)Copyright 2005-2006, American Megatrends Inc. **
  5. ** **
  6. ** All Rights Reserved. **
  7. ** **
  8. ** 6145-F, Northbelt Parkway, Norcross, **
  9. ** **
  10. ** Georgia - 30071, USA. Phone-(770)-246-8600. **
  11. ** **
  12. ****************************************************************
  13. ****************************************************************/
  14. /*****************************************************************
  15. *
  16. * SensorMonitor.h
  17. * Sensor Monitor
  18. *
  19. * Author: Rama Rao Bisa <ramab@ami.com>
  20. *
  21. *****************************************************************/
  22. #ifndef SENSOR_MONITOR_H
  23. #define SENSOR_MONITOR_H
  24. //#include "IPMI_SDRRecord.h"
  25. /*** Soft Processor Control functions ***/
  26. #define READ_CTRL_FN 0x01
  27. #define LWR_NON_CRITICAL_GOING_LOW_CTRL_FN 0x02
  28. #define LWR_CRITICAL_GOING_LOW_CTRL_FN 0x03
  29. #define LWR_NON_RECOVERABLE_GOING_LOW_CTRL_FN 0x04
  30. #define UPPER_NON_CRITICAL_GOING_HIGH_CTRL_FN 0x05
  31. #define UPPER_CRITICAL_GOING_HIGH_CTRL_FN 0x06
  32. #define UPPER_NON_RECOVERABLE_GOING_HIGH_CTRL_FN 0x07
  33. #define LWR_NON_CRITICAL_GOING_HIGH_CTRL_FN 0x82
  34. #define LWR_CRITICAL_GOING_HIGH_CTRL_FN 0x83
  35. #define LWR_NON_RECOVERABLE_GOING_HIGH_CTRL_FN 0x84
  36. #define UPPER_NON_CRITICAL_GOING_LOW_CTRL_FN 0x85
  37. #define UPPER_CRITICAL_GOING_LOW_CTRL_FN 0x86
  38. #define UPPER_NON_RECOVERABLE_GOING_LOW_CTRL_FN 0x87
  39. #define GET_NORMAL_VALUE 0xFE
  40. #define INIT_CTRL_FN 0xFF
  41. /*** Sensor Event definitions ***/
  42. #define SENSOR_STATUS_NORMAL 0x00
  43. #define SENSOR_STATUS_WARNING_HIGH 0x01
  44. #define SENSOR_STATUS_WARNING_LOW 0x02
  45. #define SENSOR_STATUS_CRITICAL_HIGH 0x03
  46. #define SENSOR_STATUS_CRITICAL_LOW 0x04
  47. #define SENSOR_STATUS_NONRECOVERABLE_HIGH 0x05
  48. #define SENSOR_STATUS_NONRECOVERABLE_LOW 0x06
  49. #define SENSOR_STATUS_FATAL 0x08
  50. #define MAX_SENSORS_ALLOWED 20
  51. #ifdef SKIPPER
  52. #define MAX_SENSORS 0x13
  53. #define MAX_FANS 0x08
  54. #define MAX_VOLTS 0x08
  55. #define MAX_TEMPS 0x01
  56. #else
  57. #define MAX_SENSORS 0x11
  58. #define MAX_FANS 0x07
  59. #define MAX_VOLTS 0x08
  60. #define MAX_TEMPS 0x00
  61. #endif
  62. #define VALID_LUN 0x01
  63. #define MAX_SENSOR_NUMBERS (256 + (256 * VALID_LUN)) /* Multi-LUN support total number of sensors is 1024 */
  64. /*---------------------------------------------------
  65. * Parameters passed to the sensor monitor handler Q.
  66. *---------------------------------------------------*/
  67. #define PARAM_REARM_ALL_SENSORS 0x01
  68. #define PARAM_REARM_SENSOR 0x02
  69. #define PARAM_HANDLE_IRQ 0x03
  70. #define PARAM_SENSOR_SCAN 0x04
  71. typedef int (*pPDK_MonitorHook_T) (void* pSensorInfo,INT8U *pReadFlags,int BMCInst);
  72. typedef int (*pPDK_SensorInitHook_T) (void *pSensorInfo,int BMCInst);
  73. typedef int (*pPDK_MonitorExtHook_T) (void *pSensorInfo, INT8U* pReadFlags,int BMCInst);
  74. typedef int (*pPDK_PreEventLogHook_T) (void *pSensorInfo, INT8U* pEventData, INT8U* pReadFlags,int BMCInst);
  75. /* Hook Type supported */
  76. typedef enum
  77. {
  78. HT_INIT_SENSOR,
  79. HT_PRE_MONITOR,
  80. HT_POST_MONITOR
  81. } HookType_e;
  82. #define MAX_PRE_MONITOR_HOOKS 3
  83. #define MAX_POST_MONITOR_HOOKS 3
  84. #define MAX_POST_MONITOR_EXT_HOOKS 3
  85. #define MAX_INIT_SENSOR_HOOKS 3
  86. #define MAX_PRE_EVENT_LOG_HOOKS 3
  87. /* Sensor Monitor Event Flags */
  88. #define SET_SM_INIT_DONE(FLAGS) (FLAGS = FLAGS & 0xFE)
  89. #define SET_SM_REINIT(FLAGS) (FLAGS = FLAGS | 0x01)
  90. #define SET_SM_UNABLE_TO_READ(FLAGS) (FLAGS = FLAGS | 0x20)
  91. #define SET_SM_CLEAR_UNABLE_TO_READ(FLAGS) (FLAGS = FLAGS & 0xDF)
  92. #define SET_SM_ENABLE_SCAN(FLAGS) (FLAGS = FLAGS | 0x40)
  93. #define SET_SM_DISABLE_SCAN(FLAGS) (FLAGS = FLAGS & 0xBF)
  94. #define SET_SM_ENABLE_EVT(FLAGS) (FLAGS = FLAGS | 0x80)
  95. #define SET_SM_DISABLE_EVT(FLAGS) (FLAGS = FLAGS & 0x7F)
  96. #pragma pack (1)
  97. typedef struct
  98. {
  99. INT8U MonitorInterval;
  100. INT8U MonitorState ;
  101. INT16U NormalValue;
  102. INT8U PowerOnDelay; //Delay after chassis power on in seconds. 0 - don't delay
  103. INT8U SysResetDelay ; // Delay after chassis reset in seconds. 0 - don't delay
  104. } PACKED SensorProperties_T;
  105. typedef struct
  106. {
  107. INT8U SensorNum; /* Sensor Numbner */
  108. INT8U HookType; /* Type of the hook */
  109. pPDK_MonitorHook_T pHook; /* Hook */
  110. } PACKED PDKSensorHook_T;
  111. /**
  112. * @struct SensorInfo_T
  113. * @brief Sensor Information.
  114. **/
  115. typedef struct
  116. {
  117. BOOL IsSensorPresent;
  118. INT8U SensorNumber;
  119. INT16U SensorReading;
  120. INT16U SettableThreshMask;
  121. INT16U Err;
  122. INT16U PreviousState;
  123. INT16U RecordID;
  124. INT8U SensorTypeCode;
  125. INT8U EventTypeCode;
  126. INT8U SensorInit;
  127. // These values are copied from the SDR.
  128. INT8U Units1;
  129. INT8U Units2;
  130. INT8U Units3;
  131. // Caution !!! Order of these members has to maintained
  132. // Some of the command implementation needs the order to be maintained
  133. // the following set are used in Get Sensor Reading Factors command
  134. INT8U M_LSB;
  135. INT8U M_MSB_Tolerance;
  136. INT8U B_LSB;
  137. INT8U B_MSB_Accuracy;
  138. INT8U Accuracy_MSB_Exp;
  139. INT8U RExp_BExp;
  140. INT16U sensor_send_packed[12];
  141. // the following set are used in Get/Set Sensor Threshold commands
  142. INT8U LowerNonCritical;
  143. INT8U LowerCritical;
  144. INT8U LowerNonRecoverable;
  145. INT8U UpperNonCritical;
  146. INT8U UpperCritical;
  147. INT8U UpperNonRecoverable;
  148. // the following set are used in Get/Set Sensor Hysteresis commands
  149. INT8U PosHysteresis;
  150. INT8U NegHysteresis;
  151. // the following set are used in Get/Set Event Enables commands
  152. INT8U EventFlags;
  153. /* Event Flags description */
  154. /* Bit 0 - Initialization Done */
  155. /* Bit 1 - Update in Progress */
  156. /* Bit 2 - reserved */
  157. /* Bit 3 - reserved */
  158. /* Bit 4 - reserved */
  159. /* Bit 5 - Unable to read */
  160. /* Bit 6 - Sensor Scanning disabled */
  161. /* Bit 7 - Event Message Disabled */
  162. INT8U AssertionEventEnablesByte1;
  163. INT8U AssertionEventEnablesByte2;
  164. INT8U DeassertionEventEnablesByte1;
  165. INT8U DeassertionEventEnablesByte2;
  166. INT8U EventLevel;
  167. INT8U HealthLevel; // Added to provide correct Health state
  168. INT8U AssertionEventOccuredByte1;
  169. INT8U AssertionEventOccuredByte2;
  170. INT8U DeassertionEventOccuredByte1;
  171. INT8U DeassertionEventOccuredByte2;
  172. INT8U SensorMonitorInterval; // added to effect different sensor monitor intervals.
  173. INT8U SensorState;
  174. INT8U SensorReadType;
  175. INT8U PowerOnDelay; //Delay after chassis power on in seconds. 0 - don't delay
  176. INT8U SysResetDelay ; // Delay after chassis reset in seconds. 0 - don't delay
  177. /* Settable Sensor Fields */
  178. INT8U Operation;
  179. INT8U EvtData1;
  180. INT8U EvtData2;
  181. INT8U EvtData3;
  182. INT8U ComparisonStatus;
  183. INT8U SensorCaps; // JM 062306 - Added to support manual re-arm sensors
  184. INT8U AssertionHistoryByte1; // JM 062306 - Added to support manual re-arm sensors
  185. INT8U AssertionHistoryByte2; // JM 062306 - Added to support manual re-arm sensors
  186. INT8U DeassertionHistoryByte1; // JM 062306 - Added to support manual re-arm sensors
  187. INT8U DeassertionHistoryByte2; // JM 062306 - Added to support manual re-arm sensors
  188. /* Sensor Monitor Internal Flags
  189. * This flags overrides any IPMI SDR settings.
  190. *
  191. *
  192. * */
  193. INT8U InternalFlags;
  194. /* Bit 0 - Enable/Disable scanning - overrides SDR scanning bit */
  195. /* Bit 1 - reserved */
  196. /* Bit 2 - reserved */
  197. /* Bit 3 - reserved */
  198. /* Bit 4 - reserved */
  199. /* Bit 5 - reserved */
  200. /* Bit 6 - reserved */
  201. /* Bit 7 - reserved */
  202. INT8U OEMField;
  203. pPDK_MonitorHook_T pPreMonitor;
  204. pPDK_MonitorHook_T pPostMonitor;
  205. pPDK_SensorInitHook_T pInitSensor [MAX_INIT_SENSOR_HOOKS];
  206. INT8U InitSensorHookCnt;
  207. pPDK_MonitorExtHook_T pPostMontiorExt [MAX_POST_MONITOR_EXT_HOOKS];
  208. INT8U PostMonitorExtHookCnt;
  209. pPDK_PreEventLogHook_T pPreEventLog [MAX_PRE_EVENT_LOG_HOOKS];
  210. INT8U PreEventLogHookCnt;
  211. /* The offset for the sensor is added for OPMA Support */
  212. INT8U SenReadingOffset;
  213. INT8U SensorOwnerLun;
  214. BOOL IsDCMITempsensor;
  215. INT8U EntityID;
  216. INT8U EntiryInstance;
  217. SDRRecHdr_T* SDRRec;
  218. } PACKED SensorInfo_T;
  219. /**
  220. * @struct SensorSharedMem_T
  221. * @brief Shared memory for Sensor Information.
  222. **/
  223. typedef struct
  224. {
  225. SensorInfo_T SensorInfo [MAX_SENSOR_NUMBERS + 1]; /* Holds all sensor informations */
  226. INT8U GlobalSensorScanningEnable;
  227. } PACKED SensorSharedMem_T;
  228. #pragma pack ()
  229. /*---------------------------------------
  230. * InitInternalSensors
  231. *---------------------------------------*/
  232. extern int InitInternalSensors (SensorInfo_T *pSensorInfo,int BMCInst);
  233. /**
  234. * @var g_SensorValues
  235. * @brief Global array that holds current sensor values.
  236. **/
  237. extern _FAR_ INT8U g_SensorValues [];
  238. /*
  239. * @fn InitPowerOnTick
  240. * @brief Initialize the power on tick counter,
  241. * should be invoked when ever power on occurs.
  242. */
  243. extern void InitPowerOnTick ();
  244. /*
  245. * @fn InitSysResetTick
  246. * @brief Initialize the System Reset tick counter,
  247. * should be invoked when ever power reset occurs.
  248. */
  249. extern void InitSysResetTick ();
  250. /**
  251. * @brief Initialize Sensor monitoring.
  252. * @return 0 if success, -1 if error.
  253. **/
  254. extern int InitSensorMonitor (int BMCInst);
  255. /**
  256. * @brief Sensor monitoring task.
  257. **/
  258. extern void* SensorMonitorTask (void*);
  259. /**
  260. * @brief Post an Event message to System Event Log.
  261. **/
  262. extern int PostEventMessage (_NEAR_ INT8U *EventMsg, INT8U sysifcflag,INT8U size, int BMCInst);
  263. /**
  264. * @brief Returns the current sensor reading
  265. **/
  266. extern INT16U SM_GetSensorReading (INT8U SenNum, INT16U *pSensorReading);
  267. /*-------------------------------------------
  268. * GetSensorInfo
  269. *
  270. * This function will be used by the Sensor
  271. * hook functions to manipulate Sensor information
  272. * This function DOES NOT lock sensor information
  273. *------------------------------------------*/
  274. extern SensorInfo_T* GetSensorInfo (INT8U SensorNum, INT8U OwnerLUN, int BMCInst);
  275. /***
  276. *PreMonitorSensor
  277. *@brief The default pre-monitor hook function for all the senors.
  278. *@[in]pSensorInfo - The SensorInfo structure
  279. *@[in]pReadFlags - Flags to be used if any as in internal_sensor
  280. *@[in]BMCInst - The particular BMCInst
  281. **/
  282. int PreMonitorSensor (void* pSensorInfo,INT8U* pReadFlags,int BMCInst);
  283. /***
  284. *PostMonitorSensor
  285. *@brief The default post-monitor hook function for all the senors.
  286. *@[in]pSensorInfo - The SensorInfo structure
  287. *@[in]pReadFlags - Flags to be used if any as in internal_sensor
  288. *@[in]BMCInst - The particular BMCInst
  289. **/int PostMonitorSensor (void* pSensorInfo,INT8U* pReadFlags,int BMCInst);
  290. #endif /* SENSOR_MONITOR_H */