180 lines
5.2 KiB
C
180 lines
5.2 KiB
C
/* Copyright 2013-2014 IBM Corp.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
* implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
#ifndef __PEL_H
|
|
#define __PEL_H
|
|
|
|
#include <compiler.h>
|
|
#include <errorlog.h>
|
|
|
|
/* Data Structures for PEL data. */
|
|
|
|
#define PRIVATE_HEADER_SECTION_SIZE 48
|
|
#define USER_HEADER_SECTION_SIZE 24
|
|
#define SRC_SECTION_SIZE 80
|
|
#define SRC_SUBSECTION_SIZE 4
|
|
#define SRC_LENGTH 72
|
|
#define OPAL_MAX_SRC_BYTES 32
|
|
#define EXTENDED_HEADER_SECTION_SIZE 76
|
|
#define MTMS_SECTION_SIZE 28
|
|
#define IO_EVENT_SECTION_SIZE 16
|
|
|
|
#define OPAL_ELOG_VERSION 1
|
|
#define OPAL_ELOG_SST 0
|
|
#define OPAL_SRC_MAX_WORD_COUNT 8
|
|
|
|
#define OPAL_SRC_FORMAT 0x80
|
|
#define OPAL_FAILING_SUBSYSTEM 0x82
|
|
|
|
#define OPAL_SYS_MODEL_LEN 8
|
|
#define OPAL_SYS_SERIAL_LEN 12
|
|
#define OPAL_VER_LEN 16
|
|
#define OPAL_SYMPID_LEN 80
|
|
#define OPAL_RC_NONE 0
|
|
|
|
#define OPAL_IO_MAX_RPC_DATA 216
|
|
#define OPAL_SRC_SEC_VER 0x02
|
|
#define OPAL_EXT_HRD_VER 0x01
|
|
|
|
/* Error log reporting action */
|
|
#define ERRL_ACTION_REPORT 0x2000
|
|
#define ERRL_ACTION_NONE 0x0000
|
|
|
|
enum elogSectionId {
|
|
ELOG_SID_PRIVATE_HEADER = 0x5048, /* PH */
|
|
ELOG_SID_USER_HEADER = 0x5548, /* UH */
|
|
ELOG_SID_EXTENDED_HEADER = 0x4548, /* EH */
|
|
ELOG_SID_PRIMARY_SRC = 0x5053, /* PS */
|
|
ELOG_SID_MACHINE_TYPE = 0x4D54, /* MT */
|
|
ELOG_SID_SECONDARY_SRC = 0x5353, /* SS */
|
|
ELOG_SID_CALL_HOME = 0x4348, /* CH */
|
|
ELOG_SID_DUMP_LOCATOR = 0x4448, /* DH */
|
|
ELOG_SID_SOFTWARE_ERROR = 0x5357, /* SW */
|
|
ELOG_SID_PARTITION = 0x4C50, /* LP */
|
|
ELOG_SID_LOGICAL_RESOURCE = 0x4C52, /* LR */
|
|
ELOG_SID_HMC_ID = 0x484D, /* HM */
|
|
ELOG_SID_EPOW = 0x4550, /* EP */
|
|
ELOG_SID_IO_EVENT = 0x4945, /* IE */
|
|
ELOG_SID_MFG_INFORMATION = 0x4D49, /* MI */
|
|
ELOG_SID_USER_DEFINED = 0x5544 /* UD */
|
|
};
|
|
|
|
|
|
struct opal_v6_header {
|
|
enum elogSectionId id:16; /* section id */
|
|
uint16_t length; /* section length */
|
|
uint8_t version; /* section version */
|
|
uint8_t subtype; /* section sub-type id */
|
|
uint16_t component_id; /* component id of section creator */
|
|
};
|
|
|
|
/* opal_srctype */
|
|
#define OPAL_SRC_TYPE_ERROR 0xBB
|
|
|
|
#define OPAL_CID_SAPPHIRE 'K' /* creator ID for sapphire log */
|
|
#define OPAL_CID_POWERNV 'P' /* creator ID for powernv log */
|
|
|
|
/* Origin of error, elog_origin */
|
|
#define ORG_SAPPHIRE 1
|
|
#define ORG_POWERNV 2
|
|
|
|
/* MAX time for error log commit */
|
|
#define ERRORLOG_TIMEOUT_INTERVAL 180
|
|
|
|
/*struct opal_private head section_ */
|
|
struct opal_private_header_section {
|
|
|
|
struct opal_v6_header v6header;
|
|
uint32_t create_date;
|
|
uint32_t create_time;
|
|
uint32_t commit_date;
|
|
uint32_t commit_time;
|
|
|
|
uint32_t creator_id:8; /* subsystem component id */
|
|
uint32_t reserved_0:16;
|
|
uint32_t section_count:8; /* number of sections in log */
|
|
uint32_t reserved_1;
|
|
uint32_t creator_subid_hi;
|
|
uint32_t creator_subid_lo;
|
|
uint32_t plid; /* platform log id */
|
|
uint32_t log_entry_id; /* Unique log entry id */
|
|
};
|
|
|
|
/* opal user header section */
|
|
struct opal_user_header_section {
|
|
|
|
struct opal_v6_header v6header;
|
|
|
|
uint8_t subsystem_id; /* subsystem id */
|
|
uint8_t event_scope;
|
|
uint8_t event_severity;
|
|
uint8_t event_type; /* error/event severity */
|
|
|
|
uint32_t reserved_0;
|
|
uint16_t reserved_1;
|
|
uint16_t action_flags; /* error action code */
|
|
uint32_t reserved_2;
|
|
};
|
|
|
|
struct opal_src_section {
|
|
struct opal_v6_header v6header;
|
|
uint8_t version;
|
|
uint8_t flags;
|
|
uint8_t reserved_0;
|
|
uint8_t wordcount;
|
|
uint16_t reserved_1;
|
|
uint16_t srclength;
|
|
uint32_t hexwords[OPAL_SRC_MAX_WORD_COUNT];
|
|
char srcstring[OPAL_MAX_SRC_BYTES];
|
|
};
|
|
|
|
struct opal_extended_header_section {
|
|
struct opal_v6_header v6header;
|
|
char model[OPAL_SYS_MODEL_LEN];
|
|
char serial_no[OPAL_SYS_SERIAL_LEN];
|
|
char opal_release_version[OPAL_VER_LEN];
|
|
char opal_subsys_version[OPAL_VER_LEN];
|
|
uint16_t reserved_0;
|
|
uint32_t extended_header_date;
|
|
uint32_t extended_header_time;
|
|
uint16_t reserved_1;
|
|
uint8_t reserved_2;
|
|
uint8_t opal_symid_len;
|
|
char opalsymid[OPAL_SYMPID_LEN];
|
|
};
|
|
|
|
/* opal MTMS section */
|
|
struct opal_mtms_section {
|
|
struct opal_v6_header v6header;
|
|
char model[OPAL_SYS_MODEL_LEN];
|
|
char serial_no[OPAL_SYS_SERIAL_LEN];
|
|
};
|
|
|
|
/* User defined section */
|
|
struct opal_user_section {
|
|
struct opal_v6_header v6header;
|
|
char dump[1];
|
|
};
|
|
|
|
/* The minimum size of a PEL record */
|
|
#define PEL_MIN_SIZE (PRIVATE_HEADER_SECTION_SIZE + USER_HEADER_SECTION_SIZE \
|
|
+ SRC_SECTION_SIZE + EXTENDED_HEADER_SECTION_SIZE \
|
|
+ MTMS_SECTION_SIZE)
|
|
|
|
size_t pel_size(struct errorlog *elog_data);
|
|
int create_pel_log(struct errorlog *elog_data, char *pel_buffer,
|
|
size_t pel_buffer_size) __warn_unused_result;
|
|
|
|
#endif
|