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 scn_header { 00047 struct scn_header *next; 00048 struct rtas_event *re; 00049 uint32_t raw_offset; 00050 int scn_id; 00051 }; 00052 00053 #define RE_SHDR_SZ (sizeof(struct scn_header)) 00054 #define RE_SHDR_OFFSET(x) ((char *)(x) + RE_SHDR_SZ) 00055 00056 /* definitions for struct rtas_event_scn scn_id */ 00057 #define RTAS_EVENT_HDR 1 00058 #define RTAS_EVENT_EXT_HDR 2 00059 00060 #define RTAS_EPOW_SCN 3 00061 #define RTAS_IO_SCN 4 00062 00063 #define RTAS_CPU_SCN 5 00064 #define RTAS_IBM_DIAG_SCN 6 00065 #define RTAS_MEM_SCN 7 00066 #define RTAS_POST_SCN 8 00067 #define RTAS_IBM_SP_SCN 9 00068 #define RTAS_VEND_ERRLOG_SCN 10 00069 00070 #define RTAS_PRIV_HDR_SCN 11 00071 #define RTAS_USR_HDR_SCN 12 00072 #define RTAS_DUMP_SCN 13 00073 #define RTAS_LRI_SCN 14 00074 #define RTAS_MT_SCN 15 00075 #define RTAS_PSRC_SCN 16 00076 #define RTAS_SSRC_SCN 17 00077 #define RTAS_GENERIC_SCN 18 00078 00079 #define RTAS_MAX_SCN_ID 19 00080 00085 struct rtas_event { 00086 int version; 00087 int event_no; 00088 char *buffer; 00089 uint32_t offset; 00090 uint32_t event_length; 00091 struct scn_header *event_scns; 00092 }; 00093 00094 #define RE_EVENT_OFFSET(re) ((re)->buffer + (re)->offset) 00095 00100 struct rtas_date { 00101 uint32_t year:16; 00102 uint32_t month:8; 00103 uint32_t day:8; 00104 }; 00105 00110 struct rtas_time { 00111 uint32_t hour:8; 00112 uint32_t minutes:8; 00113 uint32_t seconds:8; 00114 uint32_t hundredths:8; 00115 }; 00116 00117 /* include version specific data */ 00118 #include "librtasevent_v4.h" 00119 #include "librtasevent_v6.h" 00120 00125 struct rtas_event_hdr { 00126 struct scn_header shdr; 00127 uint32_t version:8; 00128 uint32_t severity:3; 00129 #define RTAS_HDR_SEV_NO_ERROR 0 00130 #define RTAS_HDR_SEV_EVENT 1 00131 #define RTAS_HDR_SEV_WARNING 2 00132 #define RTAS_HDR_SEV_ERROR_SYNC 3 00133 #define RTAS_HDR_SEV_ERROR 4 00134 #define RTAS_HDR_SEV_FATAL 5 00135 #define RTAS_HDR_SEV_ALREADY_REPORTED 6 00136 00137 uint32_t disposition:2; 00138 #define RTAS_HDR_DISP_FULLY_RECOVERED 0 00139 #define RTAS_HDR_DISP_LIMITED_RECOVERY 1 00140 #define RTAS_HDR_DISP_NOT_RECOVERED 2 00141 00142 uint32_t extended:1; 00143 uint32_t /* reserved */ :2; 00144 uint32_t initiator:4; 00145 #define RTAS_HDR_INIT_UNKNOWN 0 00146 #define RTAS_HDR_INIT_CPU 1 00147 #define RTAS_HDR_INIT_PCI 2 00148 #define RTAS_HDR_INIT_ISA 3 00149 #define RTAS_HDR_INIT_MEMORY 4 00150 #define RTAS_HDR_INIT_HOT_PLUG 5 00151 00152 uint32_t target:4; 00153 #define RTAS_HDR_TARGET_UNKNOWN 0 00154 #define RTAS_HDR_TARGET_CPU 1 00155 #define RTAS_HDR_TARGET_PCI 2 00156 #define RTAS_HDR_TARGET_ISA 3 00157 #define RTAS_HDR_TARGET_MEMORY 4 00158 #define RTAS_HDR_TARGET_HOT_PLUG 5 00159 00160 uint32_t type:8; 00161 #define RTAS_HDR_TYPE_RETRY 1 00162 #define RTAS_HDR_TYPE_TCE_ERR 2 00163 #define RTAS_HDR_TYPE_INTERN_DEV_FAIL 3 00164 #define RTAS_HDR_TYPE_TIMEOUT 4 00165 #define RTAS_HDR_TYPE_DATA_PARITY 5 00166 #define RTAS_HDR_TYPE_ADDR_PARITY 6 00167 #define RTAS_HDR_TYPE_CACHE_PARITY 7 00168 #define RTAS_HDR_TYPE_ADDR_INVALID 8 00169 #define RTAS_HDR_TYPE_ECC_UNCORRECTED 9 00170 #define RTAS_HDR_TYPE_ECC_CORRECTED 10 00171 #define RTAS_HDR_TYPE_EPOW 64 00172 #define RTAS_HDR_TYPE_PLATFORM_ERROR 224 00173 #define RTAS_HDR_TYPE_IBM_IO_EVENT 225 00174 #define RTAS_HDR_TYPE_PLATFORM_INFO 226 00175 #define RTAS_HDR_TYPE_RESOURCE_DEALLOC 227 00176 #define RTAS_HDR_TYPE_DUMP_NOTIFICATION 228 00177 00178 uint32_t ext_log_length:32; 00179 }; 00180 00181 #define RE_EVENT_HDR_SZ 8 00182 00187 struct rtas_event_exthdr { 00188 struct scn_header shdr; 00189 uint32_t valid:1; 00190 uint32_t unrecoverable:1; 00191 uint32_t recoverable:1; 00192 uint32_t unrecoverable_bypassed:1; 00193 uint32_t predictive:1; 00194 uint32_t newlog:1; 00195 uint32_t bigendian:1; 00196 uint32_t /* reserved */:1; 00197 00198 uint32_t platform_specific:1; 00199 uint32_t /* reserved */:3; 00200 uint32_t platform_value:4; 00202 uint32_t power_pc:1; 00203 uint32_t /* reserved */:2; 00204 uint32_t addr_invalid:1; 00205 uint32_t format_type:4; 00206 #define RTAS_EXTHDR_FMT_CPU 1 00207 #define RTAS_EXTHDR_FMT_MEMORY 2 00208 #define RTAS_EXTHDR_FMT_IO 3 00209 #define RTAS_EXTHDR_FMT_POST 4 00210 #define RTAS_EXTHDR_FMT_EPOW 5 00211 #define RTAS_EXTHDR_FMT_IBM_DIAG 12 00212 #define RTAS_EXTHDR_FMT_IBM_SP 13 00213 #define RTAS_EXTHDR_FMT_VEND_SPECIFIC_1 14 00214 #define RTAS_EXTHDR_FMT_VEND_SPECIFIC_2 15 00215 00216 /* This group is in version 3+ only */ 00217 uint32_t non_hardware:1; 00218 uint32_t hot_plug:1; 00219 uint32_t group_failure:1; 00220 uint32_t /* reserved */:1; 00221 00222 uint32_t residual:1; 00223 uint32_t boot:1; 00224 uint32_t config_change:1; 00225 uint32_t post:1; 00226 00227 struct rtas_time time; 00228 struct rtas_date date; 00229 }; 00230 00231 #define RE_EXT_HDR_SZ 12 00232 00237 struct rtas_epow_scn { 00238 struct scn_header shdr; 00239 00240 /* The following represent the fields of a pre-version 6 RTAS EPOW event */ 00241 uint32_t sensor_value:28; 00242 uint32_t action_code:4; 00243 #define RTAS_EPOW_ACTION_RESET 0x00 00244 #define RTAS_EPOW_ACTION_WARN_COOLING 0x01 00245 #define RTAS_EPOW_ACTION_WARN_POWER 0x02 00246 #define RTAS_EPOW_ACTION_SYSTEM_SHUTDOWN 0x03 00247 #define RTAS_EPOW_ACTION_SYSTEM_HALT 0x04 00248 #define RTAS_EPOW_ACTION_MAIN_ENCLOSURE 0x05 00249 #define RTAS_EPOW_ACTION_POWER_OFF 0x07 00250 00251 uint32_t sensor:1; 00252 uint32_t power_fault:1; 00253 uint32_t fan:1; 00255 uint32_t temp:1; 00256 uint32_t redundancy:1; 00257 uint32_t CUoD:1; 00258 uint32_t /* reserved */ :2; 00259 00260 uint32_t general:1; 00261 uint32_t power_loss:1; 00262 uint32_t power_supply:1; 00263 uint32_t power_switch:1; 00265 uint32_t battery:1; 00266 uint32_t /* reserved */ :3; 00267 uint32_t /* reserved */ :16; 00268 uint32_t sensor_token:32; 00270 uint32_t sensor_index:32; 00271 uint32_t sensor_value2:32; 00272 uint32_t sensor_status:32; 00273 uint32_t /* reserved */ :32; 00274 00275 /* The following represent a version 6 RTAS EPOW event */ 00276 struct rtas_v6_hdr v6hdr; 00277 00278 uint32_t _v6_sensor_value:4; 00279 uint32_t _v6_action_code:4; 00280 uint32_t event_modifier:8; 00281 #define RTAS_EPOW_MOD_NA 0x00 00282 #define RTAS_EPOW_MOD_NORMAL_SHUTDOWN 0x01 00283 #define RTAS_EPOW_MOD_UTILITY_POWER_LOSS 0x02 00284 #define RTAS_EPOW_MOD_CRIT_FUNC_LOSS 0x03 00285 00286 uint32_t /* reserved */ :16; 00287 char reason_code[8]; 00288 }; 00289 00290 /* defines used for copying in data from the RTAS event */ 00291 #define RE_EPOW_V6_SCN_SZ 20 00292 00297 struct rtas_io_scn { 00298 struct scn_header shdr; 00299 00300 /* The following represents the pre-version 6 RTAS event */ 00301 uint32_t bus_addr_parity:1; 00302 uint32_t bus_data_parity:1; 00303 uint32_t bus_timeout:1; 00304 uint32_t bridge_internal:1; 00306 uint32_t non_pci:1; 00307 uint32_t mezzanine_addr_parity:1; 00308 uint32_t mezzanine_data_parity:1; 00309 uint32_t mezzanine_timeout:1; 00311 uint32_t bridge_via_sysbus:1; 00312 uint32_t bridge_via_mezzanine:1; 00314 uint32_t bridge_via_expbus:1; 00316 uint32_t detected_by_expbus:1; 00318 uint32_t expbus_data_parity:1; 00320 uint32_t expbus_timeout:1; 00321 uint32_t expbus_connection_failure:1; 00322 uint32_t expbus_not_operating:1; 00325 /* PCI Bus Data of the IOA signalling the error */ 00326 uint32_t pci_sig_bus_id:8; 00327 uint32_t pci_sig_busno:8; 00328 uint32_t pci_sig_devfn:8; 00329 uint32_t pci_sig_deviceid:16; 00331 uint32_t pci_sig_vendorid:16; 00334 uint32_t pci_sig_revisionid:8; 00336 uint32_t pci_sig_slot:8; 00339 /* PCI Bus Data of the IOA sending the the error */ 00340 uint32_t pci_send_bus_id:8; 00341 uint32_t pci_send_busno:8; 00342 uint32_t pci_send_devfn:8; 00343 uint32_t pci_send_deviceid:16; 00345 uint32_t pci_send_vendorid:16; 00348 uint32_t pci_send_revisionid:8; 00350 uint32_t pci_send_slot:8; 00353 uint32_t /* reserved */ :16; 00354 uint32_t /* reserved */ :32; 00355 uint32_t /* reserved */ :32; 00356 00357 /* The following represents the version 6 rtas event */ 00358 struct rtas_v6_hdr v6hdr; 00359 00360 uint32_t event_type:8; 00361 #define RTAS_IO_TYPE_DETECTED 0x01 00362 #define RTAS_IO_TYPE_RECOVERED 0x02 00363 #define RTAS_IO_TYPE_EVENT 0x03 00364 #define RTAS_IO_TYPE_RPC_PASS_THRU 0x04 00365 00366 uint32_t rpc_length:8; 00370 uint32_t scope:8; 00371 #define RTAS_IO_SCOPE_NA 0x00 00372 #define RTAS_IO_SCOPE_RIO_HUB 0x36 00373 #define RTAS_IO_SCOPE_RIO_BRIDGE 0x37 00374 #define RTAS_IO_SCOPE_PHB 0x38 00375 #define RTAS_IO_SCOPE_EADS_GLOBAL 0x39 00376 #define RTAS_IO_SCOPE_EADS_SLOT 0x3A 00377 00378 uint32_t subtype:8; 00379 #define RTAS_IO_SUBTYPE_NA 0x00 00380 #define RTAS_IO_SUBTYPE_REBALANCE 0x01 00381 #define RTAS_IO_SUBTYPE_NODE_ONLINE 0x02 00382 #define RTAS_IO_SUBTYPE_NODE_OFFLINE 0x04 00383 00384 uint32_t drc_index:32; 00385 char rpc_data[216]; 00386 }; 00387 00388 #define RE_IO_V6_SCN_OFFSET (RE_SCN_HDR_SZ + RE_V4_SCN_SZ) 00389 00390 /* Retrieving and free'ing parsed RTAS events */ 00391 struct rtas_event * parse_rtas_event(char *, int); 00392 int cleanup_rtas_event(struct rtas_event *); 00393 00394 /* Retrieving a particular section from a parsed RTAS event */ 00395 struct rtas_event_hdr * rtas_get_event_hdr_scn(struct rtas_event *); 00396 struct rtas_event_exthdr * rtas_get_event_exthdr_scn(struct rtas_event *); 00397 00398 struct rtas_epow_scn * rtas_get_epow_scn(struct rtas_event *); 00399 struct rtas_io_scn * rtas_get_io_scn(struct rtas_event *); 00400 00401 struct rtas_cpu_scn * rtas_get_cpu_scn(struct rtas_event *); 00402 struct rtas_ibm_diag_scn * rtas_get_ibmdiag_scn(struct rtas_event *); 00403 struct rtas_mem_scn * rtas_get_mem_scn(struct rtas_event *); 00404 struct rtas_post_scn * rtas_get_post_scn(struct rtas_event *); 00405 struct rtas_ibmsp_scn * rtas_get_ibm_sp_scn(struct rtas_event *); 00406 struct rtas_vend_errlog_scn * rtas_get_vend_errlog_scn(struct rtas_event *); 00407 00408 struct rtas_priv_hdr_scn * rtas_get_priv_hdr_scn(struct rtas_event *); 00409 struct rtas_usr_hdr_scn * rtas_get_usr_hdr_scn(struct rtas_event *); 00410 struct rtas_dump_scn * rtas_get_dump_scn(struct rtas_event *); 00411 struct rtas_lri_scn * rtas_get_lri_scn(struct rtas_event *); 00412 struct rtas_mt_scn * rtas_get_mt_scn(struct rtas_event *); 00413 struct rtas_src_scn * rtas_get_src_scn(struct rtas_event *); 00414 00415 int update_os_id_scn(struct rtas_event *, const char *); 00416 00417 /* Printing RTAS event data */ 00418 int rtas_print_scn(FILE *, struct scn_header *, int); 00419 int rtas_print_event(FILE *, struct rtas_event *, int); 00420 int rtas_print_raw_event(FILE *, struct rtas_event *); 00421 int rtas_set_print_width(int); 00422 00423 #endif
1.5.5