OBSMMain.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577
  1. /****************************************************************
  2. ** **
  3. ** (C)Copyright 2007-2008, American Megatrends Inc. **
  4. ** **
  5. ** All Rights Reserved. **
  6. ** **
  7. ** 5555, Oakbrook Parkway, Suite 200, Norcross, **
  8. ** **
  9. ** Georgia - 30093, USA. Phone-(770)-246-8600. **
  10. ** **
  11. ****************************************************************/
  12. /****************************************************************
  13. * @file OBSMMain.h
  14. * @author Velu <velmuruganv@amiindia.co.in>
  15. * @brief
  16. ****************************************************************/
  17. #ifndef OBSM_MAIN_H
  18. #define OBSM_MAIN_H
  19. #include "Types.h"
  20. #include "IPMI_OBSM+.h"
  21. #include "OBSMPort.h"
  22. #include "IPMI_SEL.h"
  23. /*** Definitions and Macros ***/
  24. #define OBSM_MAJOR_VERSION 0x01
  25. #define OBSM_MINOR_VERSION 0x00
  26. #define OBSM_EXTN_VERSION ((OBSM_MAJOR_VERSION << 4) | (OBSM_MINOR_VERSION))
  27. #define MAX_SUPPORTED_FRU_DEV_ID 255
  28. #define OBSM_MOD_OPSTATE_SENSOR_TYPE 0x2C
  29. #define MAX_SIZE_GUID 8
  30. #define MAX_CHASSIS_MGR_OEM_DATA_SIZE 8
  31. #define MAX_BLADE_OEM_DATA_SIZE 8
  32. #define MAX_SWITCH_OEM_DATA_SIZE 8
  33. #define MAC_ADDR_LEN 6
  34. #define IP_ADDR_LEN 4
  35. #define TYPE_FRU_DEV_ID 0x00
  36. #define TYPE_PHY_SLOT_NUM 0x01
  37. #define TYPE_FRU_DEV_BMI_ADDR 0x02
  38. #define CHASSISINFO_SHM_KEY 0x1000
  39. #define OBSM_TIMER_TICK_INTERVAL_IN_SEC 1
  40. /* OBSM Task params */
  41. #define PARAM_OBSM_TIMER_TICK 1
  42. #define PARAM_OBSM_PLATFORM_EVT_MSG 2
  43. #define PARAM_IPMI_PLATFORM_EVT_MSG 3
  44. #define PARAM_BLADE_INS_REM_EVT_MSG 4
  45. #define PARAM_SWITCH_INS_REM_EVT_MSG 5
  46. /* OBSM return values */
  47. #define OBSM_RET_SUCCESS 0
  48. #define OBSM_RET_UNKNOWN_ERROR 1
  49. #define OBSM_RET_COMM_FAILURE 2
  50. #define OBSM_RET_SESSION_ERROR 3
  51. #define OBSM_RET_CMD_ERROR 4
  52. #define OBSM_RET_PARAM_ERROR 5
  53. /* M State values for OBSM states */
  54. #define M0_STATE 0
  55. #define M1_STATE 1
  56. #define M2_STATE 2
  57. #define M3_STATE 3
  58. #define M4_STATE 4
  59. #define M5_STATE 5
  60. #define M6_STATE 6
  61. #define M7_STATE 7
  62. #define M8_STATE 8
  63. /* State of the devices in the slot */
  64. #define STATUS_DEVICE_INACTIVE 0
  65. #define STATUS_DEVICE_ACTIVE 1
  66. #define STATUS_DEVICE_RECOVERY 2
  67. #define STATUS_DEVICE_ABSENT 3
  68. #define OBSM_SHARED_MEM_TIMEOUT WAIT_INFINITE
  69. /* Shared memory variables */
  70. #define LOCK_CMM_SHARED_MEM(BMCInst) OS_THREAD_MUTEX_ACQUIRE(&g_BMCInfo[BMCInst].OBSMSharedMemMutex, SHARED_MEM_TIMEOUT)
  71. #define UNLOCK_CMM_SHARED_MEM(BMCInst) OS_THREAD_MUTEX_RELEASE(&g_BMCInfo[BMCInst].OBSMSharedMemMutex)
  72. #define IS_BLADE_PRESENT(SLOTID, BMCInst) ( BMC_GET_SHARED_MEM(BMCInst)->ChassisInfo.bladePresBitMap & (1 << SLOTID))
  73. #define GET_BLADE_INFO(SLOTID, BMCInst) (& BMC_GET_SHARED_MEM(BMCInst)->ChassisInfo.bladeInfo[SLOTID])
  74. #define GET_CHASSIS_MNGR_INFO(SLOTID, BMCInst) (& BMC_GET_SHARED_MEM(BMCInst)->ChassisInfo.chassisMgrInfo[SLOTID])
  75. #define GET_CHASSIS_PWR_INFO(BMCInst) (& BMC_GET_SHARED_MEM(BMCInst)->ChassisInfo.pwrInfo)
  76. #define GET_CHASSIS_COOLING_INFO(BMCInst) (& BMC_GET_SHARED_MEM(BMCInst)->ChassisInfo.coolingInfo)
  77. #define GET_CHASSIS_INV_REC_INFO(BMCInst) (& BMC_GET_SHARED_MEM(BMCInst)->ChassisInvRecInfo)
  78. #define GET_CHASSIS_SLOT_MAP_REC(BMCInst) (& BMC_GET_SHARED_MEM(BMCInst)->ChassisInvRecInfo.hdrSlotMapRec)
  79. #define GET_CHASSIS_PWR_UNIT_REDUND_REC(BMCInst) (& BMC_GET_SHARED_MEM(BMCInst)->ChassisInvRecInfo.hdrPwrUnitRedundRec)
  80. #define GET_CHASSIS_OUTPUT_CURR_REC(BMCInst) (& BMC_GET_SHARED_MEM(BMCInst)->ChassisInvRecInfo.hdrOutputCurrRec)
  81. #define GET_CHASSIS_COOLING_DOM_REC(DOMNUM, BMCInst) (& BMC_GET_SHARED_MEM(BMCInst)->ChassisInvRecInfo.hdrChassisCoolingDomRec[DOMNUM])
  82. #define GET_CHASSIS_SLOT_INFO(BMCInst) (& BMC_GET_SHARED_MEM(BMCInst)->ChassisSlotInfo)
  83. /* Shared memory variables */
  84. #define LOCK_OBSM_SHARED_MEM() OS_THREAD_MUTEX_ACQUIRE(&g_hOBSMChassisInfoMutex, OBSM_SHARED_MEM_TIMEOUT)
  85. #define UNLOCK_OBSM_SHARED_MEM() OS_THREAD_MUTEX_RELEASE(&g_hOBSMChassisInfoMutex)
  86. /*** Typedef ***/
  87. #pragma pack(1)
  88. /**
  89. * @struct SlotInfo_T
  90. * @brief Slot information structure
  91. **/
  92. typedef struct
  93. {
  94. INT8U modClass;
  95. INT8U modType;
  96. INT8U slotIns;
  97. INT8U slotId;
  98. INT8U slotStatus;
  99. INT8U busNo;
  100. INT8U slaveAddr;
  101. } PACKED SlotInfo_T;
  102. /**
  103. * @struct ChassisSlotInfo_T
  104. * @brief Chassis slot information structure
  105. **/
  106. typedef struct
  107. {
  108. INT8U totalSlots;
  109. SlotInfo_T slotInfo [MAX_SLOT_NUM_SUPPORTED];
  110. } PACKED ChassisSlotInfo_T;
  111. /**
  112. * @struct PwrSupplyInfo_T
  113. * @brief Chassis power supply information structure
  114. **/
  115. typedef struct
  116. {
  117. INT8U pwrDomNum;
  118. INT8U slotId;
  119. INT8U slotNum;
  120. INT8U actvnBar;
  121. INT8U deactvnBar;
  122. INT8U opStateSensorNum;
  123. INT8U currOpState;
  124. INT8U prevOpState;
  125. INT16U pwrCapacity;
  126. INT16U currPwrOutput;
  127. } PACKED PwrSupplyInfo_T;
  128. /**
  129. * @struct PwrDomInfo_T
  130. * @brief Chassis power domain information structure
  131. **/
  132. typedef struct
  133. {
  134. INT8U primCtlrSlotNum;
  135. INT8U primCtlrBus;
  136. INT8U primCtlrSlaveAddr;
  137. INT8U secCtlrSlotNum;
  138. INT8U secCtlrBus;
  139. INT8U secCtlrSlaveAddr;
  140. INT8U redundancy;
  141. INT8U hotSwap;
  142. INT8U totalPwrdSlot;
  143. INT8U pwrdSlotNum [MAX_SLOT_NUM_SUPPORTED];
  144. INT8U totalPwrSupplySlot;
  145. INT8U reqPwrSupply;
  146. INT8U firstPwrSupplySlotNum;
  147. INT16U maxPwrOfPwrSupply;
  148. INT16U totalPwr;
  149. INT16U remPwr;
  150. INT32U pwrSupplyPresBitMap;
  151. PwrSupplyInfo_T pwrSupplyInfo [MAX_PWR_SUPPLY_SUPPORTED_PER_DOMAIN];
  152. } PACKED PwrDomInfo_T;
  153. /**
  154. * @struct PwrInfo_T
  155. * @brief Chassis power information structure
  156. **/
  157. typedef struct
  158. {
  159. INT8U initComplete;
  160. INT8U totalPwrDom;
  161. PwrDomInfo_T pwrDomInfo [MAX_PWR_DOMAIN_SUPPORTED];
  162. } PACKED ChassisPwrInfo_T;
  163. /**
  164. * @struct CoolingDomCtlrInfo_T
  165. * @brief Chassis cooling controller information structure
  166. **/
  167. typedef struct
  168. {
  169. INT8U slotNum;
  170. INT8U bus;
  171. INT8U slaveAddr;
  172. } PACKED CoolingDomCtlrInfo_T;
  173. /**
  174. * @struct CoolingDomZoneInfo_T
  175. * @brief Chassis cooling domain zone information structure
  176. **/
  177. typedef struct
  178. {
  179. INT8U domNum;
  180. INT8U slotNum;
  181. INT8U zoneNum;
  182. INT8U readingValid;
  183. INT8U sensorNum;
  184. INT8U currState;
  185. INT8U prevState;
  186. } PACKED CoolingDomSlotInfo_T;
  187. /**
  188. * @struct CoolingDomZoneInfo_T
  189. * @brief Chassis cooling domain zone information structure
  190. **/
  191. typedef struct
  192. {
  193. INT16U totalCooledSlots;
  194. CoolingDomSlotInfo_T cooledSlotInfo [MAX_SLOT_NUM_SUPPORTED * MAX_COOLING_ZONE_SUPPORTED_PER_DOMAIN];
  195. } PACKED CoolingDomZoneInfo_T;
  196. /**
  197. * @struct CoolingDomTempInfo_T
  198. * @brief Chassis cooling domain temperature information structure
  199. **/
  200. typedef struct
  201. {
  202. INT8U currThermState;
  203. INT8U prevThermState;
  204. } PACKED CoolingDomTempInfo_T;
  205. /**
  206. * @struct FanInfo_T
  207. * @brief Fan information structure
  208. **/
  209. typedef struct
  210. {
  211. INT8U domNum;
  212. INT8U slotId;
  213. INT8U slotNum;
  214. INT8U actvnBar;
  215. INT8U deactvnBar;
  216. INT8U opStateSensorNum;
  217. INT8U currOpState;
  218. INT8U prevOpState;
  219. INT16U pwrRequired;
  220. INT16U pwrGranted;
  221. INT16U pwrPending;
  222. }PACKED FanInfo_T;
  223. /**
  224. * @struct CoolingDomModuleInfo_T
  225. * @brief Chassis cooling module information structure
  226. **/
  227. typedef struct
  228. {
  229. INT8U totalFans;
  230. INT8U redundancy;
  231. INT8U hotSwap;
  232. INT16U pwrAllocated;
  233. INT16U maxPwrConsumption;
  234. INT16U currPwrConsumption;
  235. INT16U prevPwrConsumption;
  236. INT8U reqFanCount;
  237. INT32U fanPresBitMap;
  238. FanInfo_T fanInfo [MAX_FAN_SUPPORTED_PER_DOMAIN];
  239. } PACKED CoolingDomModuleInfo_T;
  240. /**
  241. * @struct CoolingDomInfo_T
  242. * @brief Chassis cooling domain information structure
  243. **/
  244. typedef struct
  245. {
  246. INT8U totalNumOfCtlr;
  247. INT8U totalNumOfZones;
  248. CoolingDomCtlrInfo_T ctlrInfo [MAX_COOLING_CTLR_SUPPORTED];
  249. CoolingDomZoneInfo_T zoneInfo [MAX_COOLING_ZONE_SUPPORTED_PER_DOMAIN];
  250. CoolingDomTempInfo_T tempInfo;
  251. CoolingDomModuleInfo_T moduleInfo;
  252. } PACKED CoolingDomInfo_T;
  253. /**
  254. * @struct CoolingInfo_T
  255. * @brief Chassis cooling information structure
  256. **/
  257. typedef struct
  258. {
  259. INT8U initComplete;
  260. INT8U totalCoolingDom;
  261. CoolingDomInfo_T coolingDomInfo [MAX_COOLING_DOMAIN_SUPPORTED];
  262. } PACKED ChassisCoolingInfo_T;
  263. /**
  264. * @struct ChassisMgrInfo_T
  265. * @brief Chassis manager information structure
  266. **/
  267. typedef struct
  268. {
  269. INT8U initComplete;
  270. INT8U guid [MAX_SIZE_GUID];
  271. INT8U slotId;
  272. INT8U slotNum;
  273. INT8U slotCount;
  274. INT8U maxFRUDevId;
  275. INT8U ipmbBus;
  276. INT8U ipmbSlaveAddr;
  277. INT8U OEMData [MAX_CHASSIS_MGR_OEM_DATA_SIZE];
  278. } PACKED ChassisMgrInfo_T;
  279. /**
  280. * @struct BladeLANInfo_T
  281. * @brief Blade LAN information structure
  282. **/
  283. typedef struct
  284. {
  285. INT8U macAddr [MAC_ADDR_LEN];
  286. INT8U ipAddr [IP_ADDR_LEN];
  287. INT16U port;
  288. } PACKED BladeLANInfo_T;
  289. /**
  290. * @struct BladeSlotPwrInfo_T
  291. * @brief Blade slots power information structure
  292. **/
  293. typedef struct
  294. {
  295. INT8U numPwrLevel;
  296. INT8U pwrMultiplier;
  297. INT8U pwrLevel [MAX_NUM_PWR_LEVEL];
  298. INT16U currPwr;
  299. INT16U desPwr;
  300. } PACKED BladeSlotPwrInfo_T;
  301. /**
  302. * @struct BladePwrInfo_T
  303. * @brief Blade power information structure
  304. **/
  305. typedef struct
  306. {
  307. INT8U pwrOnBar;
  308. INT8U pwrOffBar;
  309. INT8U dynamicCfg;
  310. INT8U pwrDrawFormat;
  311. INT16U totalCurrPwr;
  312. INT16U totalDesPwr;
  313. INT16U pwrGranted;
  314. INT16U pwrPending;
  315. BladeSlotPwrInfo_T slotPwrInfo [MAX_NUM_SLOTS_PER_MODULE];
  316. } PACKED BladePwrInfo_T;
  317. /**
  318. * @struct BladeInfo_T
  319. * @brief Blade information structure
  320. **/
  321. typedef struct
  322. {
  323. INT8U initComplete;
  324. INT8U guid [MAX_SIZE_GUID];
  325. INT8U slotId;
  326. INT8U slotNum;
  327. INT8U slotCount;
  328. INT8U slotlist [MAX_NUM_SLOTS_PER_MODULE];
  329. INT8U maxFRUDevId;
  330. INT8U obsmSupport;
  331. INT8U ipmbBus;
  332. INT8U ipmbSlaveAddr;
  333. INT8U currOpState;
  334. INT8U prevOpState;
  335. BladeLANInfo_T lanInfo;
  336. BladePwrInfo_T pwrInfo;
  337. INT8U OEMData [MAX_BLADE_OEM_DATA_SIZE];
  338. } PACKED BladeInfo_T;
  339. /**
  340. * @struct SwitchInfo_T
  341. * @brief Switch information structure
  342. **/
  343. typedef struct
  344. {
  345. INT8U initComplete;
  346. INT8U guid [MAX_SIZE_GUID];
  347. INT8U slotId;
  348. INT8U slotNum;
  349. INT8U slotCount;
  350. INT8U ipmbBus;
  351. INT8U ipmbSlaveAddr;
  352. INT8U OEMData [MAX_SWITCH_OEM_DATA_SIZE];
  353. } PACKED SwitchInfo_T;
  354. /**
  355. * @struct ChassisInfo_T
  356. * @brief Chassis information structure
  357. **/
  358. typedef struct
  359. {
  360. INT32U chassisMgrPresBitMap;
  361. ChassisMgrInfo_T chassisMgrInfo [MAX_CHASSIS_MNGR_SUPPORTED];
  362. INT32U bladePresBitMap;
  363. BladeInfo_T bladeInfo [MAX_BLADE_SUPPORTED];
  364. INT32U switchPresBitMap;
  365. SwitchInfo_T switchInfo [MAX_SWITCH_SUPPORTED];
  366. ChassisPwrInfo_T pwrInfo;
  367. ChassisCoolingInfo_T coolingInfo;
  368. } PACKED ChassisInfo_T;
  369. #pragma pack()
  370. /*** Extern Definitions ***/
  371. extern ChassisInfo_T *pChassisInfo;
  372. extern ChassisInvRecInfo_T g_ChassisInvRecInfo;
  373. extern ChassisSlotInfo_T g_ChassisSlotInfo;
  374. extern pthread_mutex_t g_hOBSMChassisInfoMutex;
  375. /*** Function Prototypes ***/
  376. /**
  377. * @brief Verify the validity of FRUDevId
  378. * @param fruDevId is the FRU device Id to validate
  379. * @return TRUE on success, else FALSE.
  380. **/
  381. extern BOOL SSICMM_IsValidFRUDevId(INT8U fruDevId);
  382. /**
  383. * @brief Verify the validity of physical slot number
  384. * @param slotNum is the slot number to validate
  385. * @return TRUE on success, else FALSE.
  386. **/
  387. extern BOOL SSICMM_IsValidPhySlotNum(INT8U slotNum, int BMCInst);
  388. /**
  389. * @brief Verify the validity of IPMB address for that devId
  390. * @param fruDevId is the FRU device Id
  391. * @param bmiAddr is the IPMB slave address
  392. * @return TRUE on success, else FALSE.
  393. **/
  394. extern BOOL SSICMM_IsValidFRUDevBMIAddr(INT8U fruDevId, INT8U bmiAddr, int BMCInst);
  395. /**
  396. * @brief Verify the validity of IPMB address
  397. * @param bmiAddr is the IPMB slave address
  398. * @return TRUE on success, else FALSE.
  399. **/
  400. extern BOOL SSICMM_IsValidBladeBMIAddr(INT8U bmiAddr, int BMCInst);
  401. /**
  402. * @brief Get the total slots occupied by the module
  403. * @param reqType is the type of request which shows the validity of each parameter
  404. * @param fruDevId is the FRU device Id
  405. * @param bmiAddr is the IPMB slave address
  406. * @param slotNum is the slot number of the occupied slot
  407. * @param pSlotCount is the slot count occuppied by the device
  408. * @return 0 if success -1 if error.
  409. **/
  410. extern int SSICMM_GetSlotCount (INT8U reqType, INT8U fruDevId, INT8U bmiAddr, INT8U slotNum, INT8U* pSlotCount, int BMCInst);
  411. /**
  412. * @brief Get the first slot occupied by the module
  413. * @param reqType is the type of request which shows the validity of each parameter
  414. * @param fruDevId is the FRU device Id
  415. * @param bmiAddr is the IPMB slave address
  416. * @param slotNum is the slot number of the occupied slot
  417. * @param pFirstSlotNum is the first occupied slot number
  418. * @return 0 if success -1 if error
  419. **/
  420. extern int SSICMM_GetFirstSlotNum (INT8U reqType, INT8U fruDevId, INT8U bmiAddr, INT8U slotNum, INT8U* pFirstSlotNum,int BMCInst);
  421. /**
  422. * @brief Get the IPMB address of the module
  423. * @param reqType is the type of request which shows the validity of each parameter
  424. * @param fruDevId is the FRU device Id
  425. * @param bmiAddr is the IPMB slave address
  426. * @param slotNum is the slot number of the occupied slot
  427. * @param pBMIAddr is the slave Address
  428. * @return 0 if success -1 if error
  429. **/
  430. extern int SSICMM_GetModuleBMIAddr(INT8U reqType, INT8U fruDevId, INT8U bmiAddr, INT8U slotNum, INT8U* pBMIAddr,int BMCInst);
  431. /**
  432. * @brief Get the site type of the module
  433. * @param reqType is the type of request which shows the validity of each parameter
  434. * @param fruDevId is the FRU device Id
  435. * @param bmiAddr is the IPMB slave address
  436. * @param slotNum is the slot number of the occupied slot
  437. * @param pSiteType is the site type
  438. * @return 0 if success -1 if error
  439. **/
  440. extern int SSICMM_GetModuleSiteType (INT8U reqType, INT8U fruDevId, INT8U bmiAddr, INT8U slotNum, INT8U* pSiteType,int BMCInst);
  441. /**
  442. * @brief Retrieve the chassis manager information from Slot ID
  443. * @param SlotId is the Slot Id of Chassis manager
  444. * @return Chassis manager information
  445. **/
  446. extern ChassisMgrInfo_T* SSICMM_GetChassisMngrInfoFromSlotId (INT8U slotId, int BMCInst);
  447. /**
  448. * @brief Retrieve the blade information from Slot ID
  449. * @param SlotId is the Slot Id of Blade
  450. * @return Blade information
  451. **/
  452. extern BladeInfo_T* SSICMM_GetBladeInfoFromSlotId(INT8U slotId, int BMCInst);
  453. /**
  454. * @brief Retrieve the blade information from blade number
  455. * @param bladeNo is the blade number (1 based)
  456. * @return Blade information
  457. **/
  458. extern BladeInfo_T* SSICMM_GetBladeInfoFromBladeNo (INT8U bladeNo, int BMCInst);
  459. /**
  460. * @brief Get the slot information
  461. * @param slotNum is the slot number
  462. * @return slot info on success, else NULL.
  463. **/
  464. //extern SlotInfo_T* AMIGetSlotInfo (INT8U slotNum, int BMCInst);
  465. /**
  466. * @brief Get the BMI (IPMB) information of device in the slot
  467. * @param slotNum is the slotId of the device
  468. * @param pIPMBBus is the Bus number of the blade
  469. * @param pSlaveAddr is the slave address of the blade
  470. * @return 0 on success, else -1.
  471. **/
  472. extern int SSICMM_GetBMIInfoFromSlotNum (INT8U slotNum,INT8U* pIPMBBus, INT8U* pSlaveAddr, int BMCInst);
  473. /**
  474. * @brief Retrieve the blade slotId information from slot number
  475. * @param slotNum is the slot number in the chassis
  476. * @return slotId if found, else 0xFF for invalid slotid
  477. **/
  478. extern INT8U SSICMM_GetBladeSlotIdFromSlotNum (INT8U slotNum, int BMCInst);
  479. /**
  480. * @brief Retrieve the blade slot number from slave address
  481. * @param slotId is the slot identifier of the blade
  482. * @return slot number if found, else 0xFF for invalid slotid
  483. **/
  484. extern INT8U SSICMM_GetBladeSlotNumFromSlaveAddr (INT8U slaveAddr, int BMCInst);
  485. /**
  486. * @brief Invoked by OBSM task on arrival of event
  487. * @param evtType is the type of event message received
  488. * @param pEvent is the SEL event message
  489. * @return 0 if success, -1 if error
  490. **/
  491. extern int SSICMM_BladeStateChangeEventHndlr (INT8U evtType, SELEventRecord_T *pEvent, int BMCInst);
  492. /**
  493. * @brief This routine is being called from MsgHndlr every n seconds.
  494. * @param None
  495. * @return 0 if success, -1 if error
  496. **/
  497. void OBSMTimer(int BMCInst);
  498. /**
  499. * @brief OBSM Task
  500. **/
  501. extern void* OBSMTask (void *pArg);
  502. #endif