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