Ejemplo n.º 1
0
/**
 * rtas_print_event
 * @brief print the contents of an  entire rtas event
 *
 * @param stream output stream to print to
 * @param re rtas_event pointer to print out
 * @param verbosity verbose level of output
 * @return number of bytes written
 */
int
rtas_print_event(FILE *stream, struct rtas_event *re, int verbosity)
{
    struct scn_header *shdr;
    int len = 0;

    if ((stream == NULL) || (re == NULL)) {
        errno = EFAULT;
        return 0;
    }

    ostream = stream;

    if (re->event_no != -1)
        len += print_scn_title("RTAS Event Dump (%d) Begin", re->event_no);
    else
        len += print_scn_title("RTAS Event Dump Begin");

    for (shdr = re->event_scns; shdr != NULL; shdr = shdr->next)
        len += rtas_print_scn(stream, shdr, verbosity);

    if (re->event_no != -1)
        len += print_scn_title("RTAS Event Dump (%d) End", re->event_no);
    else
        len += print_scn_title("RTAS Event Dump End");

    return len;
}
Ejemplo n.º 2
0
/**
 * rtas_print_raw_event
 * @brief Dump the entire rtas event in raw format
 *
 * @param stream ouput stream to write to
 * @param re rtas_event pointer
 * @return number of bytes written
 */ 
int
rtas_print_raw_event(FILE *stream, struct rtas_event *re)
{
    int len = 0;
    
    ostream = stream;
    
    len += print_scn_title("Raw RTAS Event Begin");
    len += print_raw_data(re->buffer, re->event_length);
    len += print_scn_title("Raw RTAS Event End");

    return len;
}
Ejemplo n.º 3
0
/**
 * print_re_vend_specific_scn
 * @brief print the contents of a vendor specific section
 *
 * @param res rtas_event_scn to print
 * @param verbosity verbose level
 * @return number of bytes written
 */
int 
print_re_vend_errlog_scn(struct scn_header *shdr, int verbosity)
{
    struct rtas_vend_errlog *ve;
    int len = 0;

    if (shdr->scn_id != RTAS_VEND_ERRLOG_SCN)  {
        errno = EFAULT;
        return -1;
    }

    ve = (struct rtas_vend_errlog *)shdr;

    len += print_scn_title("Vendor Error Log Section");

    len += rtas_print("%-20s%c%c%c%c\n", "Vendor ID:", ve->vendor_id[0],
                      ve->vendor_id[1], ve->vendor_id[2], ve->vendor_id[3]);
    
    if (ve->vendor_data != NULL) {
        len += rtas_print("Raw Vendor Error Log:\n");
        len += print_raw_data(ve->vendor_data, ve->vendor_data_sz);
    }

    return len;
}
Ejemplo n.º 4
0
/**
 * print_fru_pe_scn
 * @bried print the contents of a FRU Power Enclosure substructure
 *
 * @param fruhdr pointer to the fru_hdr of the FRU PE section to print
 * @param verbosity verbose level
 * @returns the number of bytes printed
 */
static int
print_fru_pe_scn(struct rtas_fru_hdr *fruhdr, int verbosity)
{
    struct rtas_fru_pe_scn  *fru_pe = (struct rtas_fru_pe_scn *)fruhdr;
    int len;

    len = print_scn_title("FRU PE Section");
    len += print_fru_hdr(fruhdr, verbosity);
    len += print_mtms(&fru_pe->pce_mtms);

    if (fru_pe->pce_name[0] != '\0')
        len += rtas_print("%-20s%s\n\n", "PCE Name:", fru_pe->pce_name);
    else
        len += rtas_print("\n\n");

    return len;
}
Ejemplo n.º 5
0
/**
 * print_cpu_failure
 * @brief Print the contents of a cpu section
 *
 * @param res rtas_event_scn pointer to cpu section
 * @param verbosity verbose level of output
 * @return number of bytes written
 */
int
print_re_cpu_scn(struct scn_header *shdr, int verbosity)
{
    struct rtas_cpu_scn *cpu;
    int len = 0;

    if (shdr->scn_id != RTAS_CPU_SCN) {
        errno = EFAULT;
        return 0;
    }

    cpu = (struct rtas_cpu_scn *)shdr;

    len += print_scn_title("CPU Section");

    if (cpu->internal) 
       len += rtas_print("Internal error (not cache).\n");
    if (cpu->intcache) 
       len += rtas_print("Internal cache.\n");
    if (cpu->extcache_parity) 
       len += rtas_print("External cache parity (or multi-bit).\n");
    if (cpu->extcache_ecc) 
       len += rtas_print("External cache ECC.\n");
    if (cpu->sysbus_timeout) 
       len += rtas_print("System bus timeout.\n");
    if (cpu->io_timeout) 
       len += rtas_print("I/O timeout.\n");
    if (cpu->sysbus_parity) 
       len += rtas_print("System bus parity.\n");
    if (cpu->sysbus_protocol) 
       len += rtas_print("System bus protocol/transfer.\n");

    len += rtas_print(PRNT_FMT_2, "CPU id:", cpu->id,
                      "Failing Element:", cpu->element);
    
    len += rtas_print(PRNT_FMT_ADDR, "Failing address:", 
	              cpu->failing_address_hi, 
                      cpu->failing_address_lo);
    
    if ((shdr->re->version >= 4) && (cpu->try_reboot))
	len += rtas_print("A reboot of the system may correct the problem.\n");

    len += rtas_print("\n");
    return len;
}
Ejemplo n.º 6
0
/**
 * print_re_ibm_diag_scn
 * @brief print the contents of an IBM diagnostics log section
 *
 * @param res rtas_event_scn pointer for IBM diagnostics log section
 * @param verbosity verbose level of output
 * @return number of bytes written
 */
int
print_re_ibm_diag_scn(struct scn_header *shdr, int verbosity)
{
    struct rtas_ibm_diag_scn *ibmdiag;
    int len = 0;
   
    if (shdr->scn_id != RTAS_IBM_DIAG_SCN) {
        errno = EFAULT;
        return -1;
    }

    ibmdiag = (struct rtas_ibm_diag_scn *)shdr;

    len += print_scn_title("IBM Diagnostics Section");
    len += rtas_print(PRNT_FMT"\n", "Event ID:", ibmdiag->event_id);

    return len;
}
Ejemplo n.º 7
0
/**
 * print_v6_scn_hdr
 * @brief print the generic version 6 section header
 *
 * @param name section name
 * @param shdr rtas_v6_scn_hdr pointer
 * @param verbosity verbose level of output
 * @return number of bytes written
 */
int
print_v6_hdr(char *name, struct rtas_v6_hdr *v6hdr, int verbosity)
{
    int len;

    len = print_scn_title(name);

    if (verbosity > 1) {
        len += rtas_print("%-20s      %c%c    "PRNT_FMT_R, 
                          "Section ID:", v6hdr->id[0], v6hdr->id[1], 
                          "Section Length:", v6hdr->length);
        len += rtas_print(PRNT_FMT_2, "Version:", v6hdr->version, 
                          "Sub_type:", v6hdr->subtype);
        len += rtas_print(PRNT_FMT_R, "Component ID:", 
                          v6hdr->creator_comp_id);
    }

    return len;
}
Ejemplo n.º 8
0
/**
 * print_re_fru_scn
 * @brief print the contents of an FRU section
 *
 * @param res rtas_event_scn pointer for a fru section
 * @param verbosity verbose level of output
 * @param count current fru section number that we are printing
 * @return number of bytes written
 */
int
print_re_fru_scn(struct rtas_fru_scn *fru, int verbosity, int count)
{
    struct rtas_fru_hdr *fruhdr;
    int len = 0;

    len += print_scn_title("FRU Section (%d)", count);

    if (verbosity >= 2) {
        len += rtas_print(PRNT_FMT_2, "Length:", fru->length, 
	                  "Call-Out Type:", fru->type);
        
        len += rtas_print("%-20s%-8s    %-20s%-8s\n", "Fru ID Included:",
                          (fru->fru_id_included) ? "Yes" : "No", 
                          "Fru Subscns:", 
                          (fru->fru_subscn_included) ? "Yes" : "No");
    }

    len += print_fru_priority(fru->priority);

    if (fru->loc_code_length) {
        if (verbosity >= 2)
            len += rtas_print(PRNT_FMT_R, "Loc Code Length:", 
                              fru->loc_code_length);
        
        len += rtas_print("%-20s%s\n", "Location Code:", fru->loc_code);
    }

    len += rtas_print("\n");

    for (fruhdr = fru->subscns; fruhdr != NULL; fruhdr = fruhdr->next) {
        if (strncmp(fruhdr->id, "ID", 2) == 0) 
            len += print_fru_id_scn(fruhdr, verbosity);
        else if (strncmp(fruhdr->id, "PE", 2) == 0)
            len += print_fru_pe_scn(fruhdr, verbosity);
        else if (strncmp(fruhdr->id, "MR", 2) == 0)
            len += print_fru_mr_scn(fruhdr, verbosity);
    }

    return len;
}
Ejemplo n.º 9
0
/**
 * print_fru_mr_scn
 * @bried print the contents of a FRU Manufacturing Replaceable substructure
 *
 * @param fruhdr pointer to the fru_hdr of the FRU MR section to print
 * @param verbosity verbose level
 * @returns the number of bytes printed
 */
static int
print_fru_mr_scn(struct rtas_fru_hdr *fruhdr, int verbosity)
{
    struct rtas_fru_mr_scn  *fru_mr = (struct rtas_fru_mr_scn *)fruhdr;
    int i, len;

    len = print_scn_title("FRU MR Section");
    len += print_fru_hdr(fruhdr, verbosity);

    len += rtas_print("\nManufacturing Replaceable Unit Fields (%d):\n",
		      frumr_num_callouts(fru_mr));
    for (i = 0; i < frumr_num_callouts(fru_mr); i++) {
        struct fru_mru *mru = &fru_mr->mrus[i];

        len += rtas_print("%-20s%c           %-20s%08x\n", "MRU Priority:", 
			  mru->priority, "MRU ID:", mru->id);
    }

    len += rtas_print("\n");
    return len;
}
Ejemplo n.º 10
0
/**
 * print_fru_id_scn
 * @bried print the contents of a FRU Identity substructure
 *
 * @param fruhdr pointer to the fru_hdr of the FRU ID section to print
 * @param verbosity verbose level
 * @returns the number of bytes printed
 */
static int
print_fru_id_scn(struct rtas_fru_hdr *fruhdr, int verbosity)
{
    struct rtas_fru_id_scn  *fru_id = (struct rtas_fru_id_scn *)fruhdr;
    int len;
    uint32_t component;

    len = print_scn_title("FRU ID Section");
    len += print_fru_hdr(fruhdr, verbosity);

    component = fru_id->fruhdr.flags & RTAS_FRUID_COMP_MASK;

    if (component) {
        len += rtas_print(PRNT_FMT" ", "Failing Component:", component);
            
        switch (component) {
            case RTAS_FRUID_COMP_HARDWARE:
                len += rtas_print("(\"normal\" hardware FRU)\n");
                break;
                
            case RTAS_FRUID_COMP_CODE:
                len += rtas_print("(Code FRU)\n");
                break;
                
            case RTAS_FRUID_COMP_CONFIG_ERROR:
                len += rtas_print("(Configuration error)\n");
                break;
                
            case RTAS_FRUID_COMP_MAINT_REQUIRED:
                len += rtas_print("(Mainteneace procedure required)\n");
                break;
                
            case RTAS_FRUID_COMP_EXTERNAL: 
                len += rtas_print("(External FRU)\n");
                break;
                
            case RTAS_FRUID_COMP_EXTERNAL_CODE:
                len += rtas_print("(External Code FRU)\n");
                break;
                
            case RTAS_FRUID_COMP_TOOL:
                len += rtas_print("(Tool FRU)\n");
                break;
                
            case RTAS_FRUID_COMP_SYMBOLIC:
                len += rtas_print("(Symbolic FRU)\n");
                break;
                
            default:
                len += rtas_print("\n");
                break;
        }
    }

    if (fruid_has_part_no(fru_id))
        len += rtas_print("%-20s%s\n", "FRU Stocking Part:", fru_id->part_no);

    if (fruid_has_proc_id(fru_id))
        len += rtas_print("%-20s%s\n", "Procedure ID:", fru_id->procedure_id);

    if (fruid_has_ccin(fru_id))
        len += rtas_print("%-20s%s\n", "CCIN:", fru_id->ccin);

    if (fruid_has_serial_no(fru_id))
        len += rtas_print("%-20s%s\n", "Serial Number:", fru_id->serial_no);

    len += rtas_print("\n");
    return len;
}