16552de05SJayanth Othayoth #pragma once
26552de05SJayanth Othayoth 
3*2eb31ad2SJayanth Othayoth #include <phal_exception.H>
4*2eb31ad2SJayanth Othayoth 
56552de05SJayanth Othayoth #include <nlohmann/json.hpp>
66552de05SJayanth Othayoth 
76552de05SJayanth Othayoth #include <string>
86552de05SJayanth Othayoth #include <vector>
96552de05SJayanth Othayoth namespace openpower
106552de05SJayanth Othayoth {
116552de05SJayanth Othayoth namespace pel
126552de05SJayanth Othayoth {
136552de05SJayanth Othayoth using FFDCData = std::vector<std::pair<std::string, std::string>>;
146552de05SJayanth Othayoth 
156552de05SJayanth Othayoth using json = nlohmann::json;
166552de05SJayanth Othayoth 
17*2eb31ad2SJayanth Othayoth using namespace openpower::phal;
18*2eb31ad2SJayanth Othayoth 
196552de05SJayanth Othayoth /**
20*2eb31ad2SJayanth Othayoth  * @brief Create boot error PEL
216552de05SJayanth Othayoth  *
226552de05SJayanth Othayoth  * @param[in] ffdcData - failure data to append to PEL
236552de05SJayanth Othayoth  * @param[in] calloutData - callout data to append to PEL
246552de05SJayanth Othayoth  */
256552de05SJayanth Othayoth void createBootErrorPEL(const FFDCData& ffdcData, const json& calloutData);
266552de05SJayanth Othayoth 
276552de05SJayanth Othayoth /**
28*2eb31ad2SJayanth Othayoth  * @brief Create SBE boot error PEL
29*2eb31ad2SJayanth Othayoth  *
30*2eb31ad2SJayanth Othayoth  * @param[in] event - the event type
31*2eb31ad2SJayanth Othayoth  * @param[in] sbeError - SBE error object
32*2eb31ad2SJayanth Othayoth  * @param[in] ffdcData - failure data to append to PEL
33*2eb31ad2SJayanth Othayoth  */
34*2eb31ad2SJayanth Othayoth void createSbeErrorPEL(const std::string& event, const sbeError_t& sbeError,
35*2eb31ad2SJayanth Othayoth                        const FFDCData& ffdcData);
36*2eb31ad2SJayanth Othayoth 
37*2eb31ad2SJayanth Othayoth /**
38a8d2f710SJayanth Othayoth  * @brief Create a PEL for the specified event type and additional data
396552de05SJayanth Othayoth  *
40*2eb31ad2SJayanth Othayoth  *  @param[in]  event - the event type
41a8d2f710SJayanth Othayoth  *  @param[in] ffdcData - failure data to append to PEL
426552de05SJayanth Othayoth  */
43a8d2f710SJayanth Othayoth void createPEL(const std::string& event, const FFDCData& ffdcData = {});
446552de05SJayanth Othayoth 
456552de05SJayanth Othayoth /**
466552de05SJayanth Othayoth  * @class FFDCFile
476552de05SJayanth Othayoth  * @brief This class is used to create ffdc data file and to get fd
486552de05SJayanth Othayoth  */
496552de05SJayanth Othayoth class FFDCFile
506552de05SJayanth Othayoth {
516552de05SJayanth Othayoth   public:
526552de05SJayanth Othayoth     FFDCFile() = delete;
536552de05SJayanth Othayoth     FFDCFile(const FFDCFile&) = delete;
546552de05SJayanth Othayoth     FFDCFile& operator=(const FFDCFile&) = delete;
556552de05SJayanth Othayoth     FFDCFile(FFDCFile&&) = delete;
566552de05SJayanth Othayoth     FFDCFile& operator=(FFDCFile&&) = delete;
576552de05SJayanth Othayoth 
586552de05SJayanth Othayoth     /**
596552de05SJayanth Othayoth      * Used to pass json object to create unique ffdc file by using
606552de05SJayanth Othayoth      * passed json data.
616552de05SJayanth Othayoth      */
626552de05SJayanth Othayoth     explicit FFDCFile(const json& pHALCalloutData);
636552de05SJayanth Othayoth 
646552de05SJayanth Othayoth     /**
656552de05SJayanth Othayoth      * Used to remove created ffdc file.
666552de05SJayanth Othayoth      */
676552de05SJayanth Othayoth     ~FFDCFile();
686552de05SJayanth Othayoth 
696552de05SJayanth Othayoth     /**
706552de05SJayanth Othayoth      * Used to get created ffdc file file descriptor id.
716552de05SJayanth Othayoth      *
726552de05SJayanth Othayoth      * @return file descriptor id
736552de05SJayanth Othayoth      */
746552de05SJayanth Othayoth     int getFileFD() const;
756552de05SJayanth Othayoth 
766552de05SJayanth Othayoth   private:
776552de05SJayanth Othayoth     /**
786552de05SJayanth Othayoth      * Used to store callout ffdc data from passed json object.
796552de05SJayanth Othayoth      */
806552de05SJayanth Othayoth     std::string calloutData;
816552de05SJayanth Othayoth 
826552de05SJayanth Othayoth     /**
836552de05SJayanth Othayoth      * Used to store unique ffdc file name.
846552de05SJayanth Othayoth      */
856552de05SJayanth Othayoth     std::string calloutFile;
866552de05SJayanth Othayoth 
876552de05SJayanth Othayoth     /**
886552de05SJayanth Othayoth      * Used to store created ffdc file descriptor id.
896552de05SJayanth Othayoth      */
906552de05SJayanth Othayoth     int fileFD;
916552de05SJayanth Othayoth 
926552de05SJayanth Othayoth     /**
936552de05SJayanth Othayoth      * Used to create ffdc file to pass PEL api for creating
946552de05SJayanth Othayoth      * pel records.
956552de05SJayanth Othayoth      *
966552de05SJayanth Othayoth      * @return NULL
976552de05SJayanth Othayoth      */
986552de05SJayanth Othayoth     void prepareFFDCFile();
996552de05SJayanth Othayoth 
1006552de05SJayanth Othayoth     /**
1016552de05SJayanth Othayoth      * Create unique ffdc file.
1026552de05SJayanth Othayoth      *
1036552de05SJayanth Othayoth      * @return NULL
1046552de05SJayanth Othayoth      */
1056552de05SJayanth Othayoth     void createCalloutFile();
1066552de05SJayanth Othayoth 
1076552de05SJayanth Othayoth     /**
1086552de05SJayanth Othayoth      * Used write json object value into created file.
1096552de05SJayanth Othayoth      *
1106552de05SJayanth Othayoth      * @return NULL
1116552de05SJayanth Othayoth      */
1126552de05SJayanth Othayoth     void writeCalloutData();
1136552de05SJayanth Othayoth 
1146552de05SJayanth Othayoth     /**
1156552de05SJayanth Othayoth      * Used set ffdc file seek position begining to consume by PEL
1166552de05SJayanth Othayoth      *
1176552de05SJayanth Othayoth      * @return NULL
1186552de05SJayanth Othayoth      */
1196552de05SJayanth Othayoth     void setCalloutFileSeekPos();
1206552de05SJayanth Othayoth 
1216552de05SJayanth Othayoth     /**
1226552de05SJayanth Othayoth      * Used to remove created ffdc file.
1236552de05SJayanth Othayoth      *
1246552de05SJayanth Othayoth      * @return NULL
1256552de05SJayanth Othayoth      */
1266552de05SJayanth Othayoth     void removeCalloutFile();
1276552de05SJayanth Othayoth 
1286552de05SJayanth Othayoth }; // FFDCFile end
1296552de05SJayanth Othayoth 
1306552de05SJayanth Othayoth } // namespace pel
1316552de05SJayanth Othayoth } // namespace openpower
132