SELRecord.h 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  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. * SELRecord.h
  17. * SEL record structures.
  18. *
  19. * Author: Rama Rao Bisa<ramab@ami.com>
  20. *
  21. ******************************************************************/
  22. #ifndef SEL_RECORD_H
  23. #define SEL_RECORD_H
  24. #if defined(__linux__)
  25. #include <dirent.h>
  26. #endif
  27. #include "IPMI_SEL.h"
  28. /*** External Definitions ***/
  29. #define VALID_RECORD 0x5A
  30. /* This record limitation is because the JFFS2 File System
  31. Flushes only 20 Records and the remaining records which
  32. is held in RAM will be flushed by the JFFS2 garbage collector
  33. at anytime */
  34. #define MAX_SEL_RECORD 20
  35. #define MAX_RECORD_ID 65535
  36. #define SEL_RECLAIM_HEAD_NODE(BMCInst) g_BMCInfo[BMCInst].SELReclaimRepos.HeadeNode
  37. #define SEL_RECLAIM_TAIL_NODE(BMCInst) g_BMCInfo[BMCInst].SELReclaimRepos.TailNode
  38. #define SEL_RECLAIM_RECORD_HEAD_NODE(BMCInst) g_BMCInfo[BMCInst].SELReclaimRepos.HeadeRecNode
  39. #define SEL_RECLAIM_RECORD_TAIL_NODE(BMCInst) g_BMCInfo[BMCInst].SELReclaimRepos.TailRecNode
  40. #define SEL_RECORD_ADDR(BMCInst,Var) g_BMCInfo[BMCInst].SELReclaimRepos.pSELRecAddr[Var]
  41. #define SEL_PREV_RECORD_ADDR(BMCInst,Var) g_BMCInfo[BMCInst].SELReclaimRepos.pSELRecAddr[Var].RecAddr->PrevRec
  42. #define SEL_NEXT_RECORD_ADDR(BMCInst,Var) g_BMCInfo[BMCInst].SELReclaimRepos.pSELRecAddr[Var].RecAddr->NextRec
  43. #define SEL_MALLOC(Var) (struct Var *)malloc(sizeof(Var))
  44. #define SIGN_SIZE 4
  45. #define SEL_RECLAIM_SECTION_INFO "SELRECLAIMINFO"
  46. #define SEL_SIGNATURE "signature"
  47. #define SEL_NUMRECORDS "NumRecords"
  48. #define SEL_ADDTIMESTAMP "AddTimeStamp"
  49. #define SEL_ERASETIMESTAMP "EraseTimeStamp"
  50. #define SEL_LASTFILEINDEX "LastFileIndex"
  51. #define SEL_MAXRECPOS "MaxRecPos"
  52. #define SEL_FREE(Var) \
  53. do{ \
  54. free(Var); \
  55. Var=NULL; \
  56. }while(0);
  57. #pragma pack( 1 )
  58. /**
  59. * @struct SELRec_T
  60. * @brief SEL Record
  61. **/
  62. typedef struct
  63. {
  64. INT8U Valid;
  65. INT8U Len;
  66. SELEventRecord_T EvtRecord;
  67. } PACKED SELRec_T;
  68. /**
  69. * @struct SELRepository_T
  70. * @brief SEL Repository structure.
  71. **/
  72. typedef struct
  73. {
  74. INT8U Signature [SIGN_SIZE]; /* $SDR */
  75. INT16U NumRecords;
  76. INT16U Padding;
  77. INT32U AddTimeStamp;
  78. INT32U EraseTimeStamp;
  79. SELRec_T *SELRecord;
  80. } PACKED SELRepository_T;
  81. /* * @struct SELRecIDNode
  82. * @brief SELRecIDNode structure.
  83. **/
  84. typedef struct SELRecIDNode
  85. {
  86. INT16U RecordID;
  87. struct SELRecIDNode *NextRecID;
  88. }SELRecIDNode;
  89. /**
  90. * @struct SELEventNode
  91. * @brief SELEventNode structure.
  92. **/
  93. typedef struct SELEventNode
  94. {
  95. INT32U FileIndex;
  96. SELRec_T SELRecord;
  97. struct SELEventNode *NextRec;
  98. struct SELEventNode *PrevRec;
  99. }SELEventNode;
  100. typedef struct
  101. {
  102. INT32U RecPos;
  103. struct SELEventNode *RecAddr;
  104. }SELRecAddr;
  105. /**
  106. * @struct SELReclaimInfo_T
  107. * @brief SELReclaimInfo_T structure.
  108. **/
  109. typedef struct
  110. {
  111. INT8U Signature[SIGN_SIZE];
  112. INT16U NumRecords;
  113. INT32U AddTimeStamp;
  114. INT32U EraseTimeStamp;
  115. INT32U LastFileIndex;
  116. INT32U MaxRecPos;
  117. }PACKED SELReclaimInfo_T;
  118. /**
  119. * @struct SELReclaimRepository_T
  120. * @brief SELReclaimRepository_T structure.
  121. **/
  122. typedef struct
  123. {
  124. /* The Node Pointer needs to be maintained
  125. * at the top in order to avoid structure
  126. * alignment issues */
  127. SELEventNode *HeadeNode;
  128. SELEventNode *TailNode;
  129. SELRecIDNode *HeadeRecNode;
  130. SELRecIDNode *TailRecNode;
  131. SELRecAddr *pSELRecAddr;
  132. SELReclaimInfo_T *pSELReclaimInfo;
  133. }PACKED SELReclaimRepository_T;
  134. /* SEL Reclaim Function Prototypes */
  135. extern int DeleteSELRecordIDHeadNode(SELRecIDNode **HeadNode,SELRecIDNode **TailNode);
  136. extern int DeleteSELReclaimNode(SELEventNode **HeadNode,SELEventNode **TailNode,INT16U RecordID,unsigned int *FileIndex,int BMCInst);
  137. extern int AddSELRecalimNode(SELEventNode **HeadNode,SELEventNode **TailNode,SELRec_T *SELRecord,unsigned int FileIndex,int BMCInst);
  138. extern INT16U GetNextReclaimRecordID(int BMCInst);
  139. extern int FlushAddReclaimSEL(SELRec_T *SELRecord,int BMCInst);
  140. extern int ReFlushDeleteReclaimSEL(INT16U RecordID,int BMCInst);
  141. extern int AddSELRecordIDNode(SELRecIDNode **HeadNode,SELRecIDNode **TailNode,INT16U RecordID,int BMCInst);
  142. extern INT32U GetReclaimFileSize(char *FileName);
  143. extern void DeleteReclaimAllSELNode(SELEventNode **HeadNode,SELEventNode **TailNode,int BMCInst);
  144. extern int UpdateRecordIDList(INT8U *RecordID,int BMCInst);
  145. extern int CopySELReclaimEntries(SELEventNode **HeadNode,INT8U *RecordData,INT32U NumEntriesRetrd,INT32U NumOfEntries,int BMCInst);
  146. extern int LoadSELReclaimInfo( SELReclaimInfo_T *SELInfo,int BMCInst);
  147. extern int SaveSELReclaimInfo( SELReclaimInfo_T *SELInfo,int BMCInst);
  148. extern int CheckPreviousReclaimFile(INT32U FileIndex,INT32U FileSize,SELRec_T *pSELReclaimRec,INT8U *SELCount,char *PrevFileName ,int BMCInst);
  149. extern int FilterSELReclaimFiles(const struct dirent *entry);
  150. #pragma pack( )
  151. #endif /* SEL_RECORD_H */