00001 00034 #ifndef _H_RTAS_EVENTS 00035 #define _H_RTAS_EVENTS 00036 00037 #include <stdio.h> 00038 #include <inttypes.h> 00039 00040 struct rtas_event; 00041 00046 struct rtas_event_scn { 00047 struct rtas_event_scn *next; 00048 char *data; 00049 int scn_id; 00050 struct rtas_event *re; 00051 struct rtas_event_scn *subscn; 00052 struct rtas_event_scn *other_scns; 00053 }; 00054 00055 /* definitions for struct rtas_event_scn scn_id */ 00056 #define RTAS_EVENT_HDR 1 00057 #define RTAS_EVENT_EXT_HDR 2 00058 00059 #define RTAS_EPOW_SCN 3 00060 #define RTAS_IO_SCN 4 00061 00062 #define RTAS_CPU_SCN 5 00063 #define RTAS_IBM_DIAG_SCN 6 00064 #define RTAS_MEM_SCN 7 00065 #define RTAS_POST_SCN 8 00066 #define RTAS_IBM_SP_SCN 9 00067 #define RTAS_VEND_SPECIFIC_SCN 10 00068 00069 #define RTAS_MAIN_A_SCN 11 00070 #define RTAS_MAIN_B_SCN 12 00071 #define RTAS_DUMP_SCN 13 00072 #define RTAS_LRI_SCN 14 00073 #define RTAS_MTMS_SCN 15 00074 #define RTAS_PSRC_SCN 16 00075 #define RTAS_SSRC_SCN 17 00076 #define RTAS_SRC_SUBSCN 18 00077 #define RTAS_FRU_SCN 19 00078 #define RTAS_FRU_SUBSCN 20 00079 00080 #define RTAS_MAX_SCN_ID 20 00081 00086 struct rtas_event { 00087 char *buffer; 00088 int length; 00089 int version; 00090 int event_no; 00091 struct rtas_event_scn *event_scns; 00092 }; 00093 00098 struct rtas_date { 00099 uint32_t year:16; 00100 uint32_t month:8; 00101 uint32_t day:8; 00102 }; 00103 00108 struct rtas_time { 00109 uint32_t hour:8; 00110 uint32_t minutes:8; 00111 uint32_t seconds:8; 00112 uint32_t hundredths:8; 00113 }; 00114 00119 struct rtas_event_hdr { 00120 uint32_t version:8; 00121 uint32_t severity:3; 00122 #define RTAS_HDR_SEV_NO_ERROR 0 00123 #define RTAS_HDR_SEV_EVENT 1 00124 #define RTAS_HDR_SEV_WARNING 2 00125 #define RTAS_HDR_SEV_ERROR_SYNC 3 00126 #define RTAS_HDR_SEV_ERROR 4 00127 #define RTAS_HDR_SEV_FATAL 5 00128 #define RTAS_HDR_SEV_ALREADY_REPORTED 6 00129 00130 uint32_t disposition:2; 00131 #define RTAS_HDR_DISP_FULLY_RECOVERED 0 00132 #define RTAS_HDR_DISP_LIMITED_RECOVERY 1 00133 #define RTAS_HDR_DISP_NOT_RECOVERED 2 00134 00135 uint32_t extended:1; 00136 uint32_t /* reserved */ :2; 00137 uint32_t initiator:4; 00138 #define RTAS_HDR_INIT_UNKNOWN 0 00139 #define RTAS_HDR_INIT_CPU 1 00140 #define RTAS_HDR_INIT_PCI 2 00141 #define RTAS_HDR_INIT_ISA 3 00142 #define RTAS_HDR_INIT_MEMORY 4 00143 #define RTAS_HDR_INIT_HOT_PLUG 5 00144 00145 uint32_t target:4; 00146 #define RTAS_HDR_TARGET_UNKNOWN 0 00147 #define RTAS_HDR_TARGET_CPU 1 00148 #define RTAS_HDR_TARGET_PCI 2 00149 #define RTAS_HDR_TARGET_ISA 3 00150 #define RTAS_HDR_TARGET_MEMORY 4 00151 #define RTAS_HDR_TARGET_HOT_PLUG 5 00152 00153 uint32_t type:8; 00154 #define RTAS_HDR_TYPE_RETRY 1 00155 #define RTAS_HDR_TYPE_TCE_ERR 2 00156 #define RTAS_HDR_TYPE_INTERN_DEV_FAIL 3 00157 #define RTAS_HDR_TYPE_TIMEOUT 4 00158 #define RTAS_HDR_TYPE_DATA_PARITY 5 00159 #define RTAS_HDR_TYPE_ADDR_PARITY 6 00160 #define RTAS_HDR_TYPE_CACHE_PARITY 7 00161 #define RTAS_HDR_TYPE_ADDR_INVALID 8 00162 #define RTAS_HDR_TYPE_ECC_UNCORRECTED 9 00163 #define RTAS_HDR_TYPE_ECC_CORRECTED 10 00164 #define RTAS_HDR_TYPE_EPOW 64 00165 #define RTAS_HDR_TYPE_PLATFORM_ERROR 224 00166 #define RTAS_HDR_TYPE_IBM_IO_EVENT 225 00167 #define RTAS_HDR_TYPE_PLATFORM_INFO 226 00168 #define RTAS_HDR_TYPE_RESOURCE_DEALLOC 227 00169 #define RTAS_HDR_TYPE_DUMP_NOTIFICATION 228 00170 00171 uint32_t ext_log_length:32; 00172 }; 00173 00178 struct rtas_event_exthdr { 00179 uint32_t valid:1; 00180 uint32_t unrecoverable:1; 00181 uint32_t recoverable:1; 00182 uint32_t unrecoverable_bypassed:1; 00183 uint32_t predictive:1; 00184 uint32_t newlog:1; 00185 uint32_t bigendian:1; 00186 uint32_t /* reserved */:1; 00187 00188 uint32_t platform_specific:1; 00189 uint32_t /* reserved */:3; 00190 uint32_t platform_value:4; 00192 uint32_t power_pc:1; 00193 uint32_t /* reserved */:2; 00194 uint32_t addr_invalid:1; 00195 uint32_t format_type:4; 00196 #define RTAS_EXTHDR_FMT_CPU 1 00197 #define RTAS_EXTHDR_FMT_MEMORY 2 00198 #define RTAS_EXTHDR_FMT_IO 3 00199 #define RTAS_EXTHDR_FMT_POST 4 00200 #define RTAS_EXTHDR_FMT_EPOW 5 00201 #define RTAS_EXTHDR_FMT_IBM_DIAG 12 00202 #define RTAS_EXTHDR_FMT_IBM_SP 13 00203 #define RTAS_EXTHDR_FMT_VEND_SPECIFIC_1 14 00204 #define RTAS_EXTHDR_FMT_VEND_SPECIFIC_2 15 00205 00206 /* This group is in version 3+ only */ 00207 uint32_t non_hardware:1; 00208 uint32_t hot_plug:1; 00209 uint32_t group_failure:1; 00210 uint32_t /* reserved */:1; 00211 00212 uint32_t residual:1; 00213 uint32_t boot:1; 00214 uint32_t config_change:1; 00215 uint32_t post:1; 00216 00217 struct rtas_time time; 00218 struct rtas_date date; 00219 }; 00220 00221 /* Retrieving and free'ing parsed RTAS events */ 00222 struct rtas_event * parse_rtas_event(char *, int); 00223 int cleanup_rtas_event(struct rtas_event *); 00224 00225 /* Retrieving a particular section from a parsed RTAS event */ 00226 struct rtas_event_scn * rtas_get_event_hdr_scn(struct rtas_event *); 00227 struct rtas_event_scn * rtas_get_event_exthdr_scn(struct rtas_event *); 00228 00229 struct rtas_event_scn * rtas_get_epow_scn(struct rtas_event *); 00230 struct rtas_event_scn * rtas_get_io_scn(struct rtas_event *); 00231 00232 struct rtas_event_scn * rtas_get_cpu_scn(struct rtas_event *); 00233 struct rtas_event_scn * rtas_get_ibmdiag_scn(struct rtas_event *); 00234 struct rtas_event_scn * rtas_get_mem_scn(struct rtas_event *); 00235 struct rtas_event_scn * rtas_get_post_scn(struct rtas_event *); 00236 struct rtas_event_scn * rtas_get_ibm_sp_scn(struct rtas_event *); 00237 struct rtas_event_scn * rtas_get_vend_specific_scn(struct rtas_event *); 00238 00239 struct rtas_event_scn * rtas_get_main_a_scn(struct rtas_event *); 00240 struct rtas_event_scn * rtas_get_main_b_scn(struct rtas_event *); 00241 struct rtas_event_scn * rtas_get_dump_scn(struct rtas_event *); 00242 struct rtas_event_scn * rtas_get_lri_scn(struct rtas_event *); 00243 struct rtas_event_scn * rtas_get_mtms_scn(struct rtas_event *); 00244 struct rtas_event_scn * rtas_get_src_scn(struct rtas_event *); 00245 00246 /* Printing RTAS event data */ 00247 int rtas_print_scn(FILE *, struct rtas_event_scn *, int); 00248 int rtas_print_event(FILE *, struct rtas_event *, int); 00249 int rtas_print_raw_event(FILE *, struct rtas_event *); 00250 int rtas_set_print_width(int); 00251 00252 /* include version specific data */ 00253 #include "librtasevent_v4.h" 00254 #include "librtasevent_v6.h" 00255 00256 #endif
1.5.3