Exemple #1
0
nvlist_t *
cmd_dimm_create_fault(fmd_hdl_t *hdl, cmd_dimm_t *dimm, const char *fltnm,
    uint_t cert)
{
#ifdef sun4v
	nvlist_t *flt, *nvlfru;
	/*
	 * Do NOT issue hc scheme FRU FMRIs for ultraSPARC-T1 platforms.
	 * The SP will misinterpret the FRU. Instead, reuse the ASRU FMRI
	 *
	 * Use the BR string as a distinguisher. BR (branch) is only
	 * present in ultraSPARC-T2/T2plus DIMM unums
	 */
	if (strstr(dimm->dimm_unum, "BR") == NULL) {
		flt = cmd_nvl_create_fault(hdl, fltnm, cert,
		    dimm->dimm_asru_nvl, dimm->dimm_asru_nvl, NULL);
	} else {
		nvlfru = cmd_mem2hc(hdl, dimm->dimm_asru_nvl);
		flt = cmd_nvl_create_fault(hdl, fltnm, cert,
		    dimm->dimm_asru_nvl, nvlfru, NULL);
		if (nvlfru != NULL)
			nvlist_free(nvlfru);
	}
	return (cmd_fault_add_location(hdl, flt, dimm->dimm_unum));
#else
	return (cmd_nvl_create_fault(hdl, fltnm, cert, dimm->dimm_asru_nvl,
	    dimm->dimm_asru_nvl, NULL));
#endif /* sun4v */
}
nvlist_t *
cmd_boardfru_create_fault(fmd_hdl_t *hdl, nvlist_t *asru, const char *fltnm,
    uint_t cert, char *loc)
{
	nvlist_t *flt, *nvlfru;
	char *serialstr, *partstr;

	if ((loc == NULL) || (strcmp(loc, EMPTY_STR) == 0))
		return (NULL);

	if (nvlist_lookup_string(asru, FM_FMRI_HC_SERIAL_ID, &serialstr) != 0)
		serialstr = NULL;
	if (nvlist_lookup_string(asru, FM_FMRI_HC_PART, &partstr) != 0)
		partstr = NULL;

	nvlfru = cmd_mkboard_fru(hdl, loc, serialstr, partstr);
	if (nvlfru == NULL)
		return (NULL);

	flt = cmd_nvl_create_fault(hdl, fltnm, cert, nvlfru, nvlfru, NULL);
	flt = cmd_fault_add_location(hdl, flt, loc);
	if (nvlfru != NULL)
		nvlist_free(nvlfru);
	return (flt);
}
Exemple #3
0
static void
add_bdflt_to_case(fmd_hdl_t *hdl, char *label, const char *fltnm,
    uint8_t board_cert, fmd_case_t *cp)
{
	nvlist_t *memb_nvl, *flt;

	memb_nvl = fru_by_label(hdl, label);
	if (memb_nvl != NULL) {
		flt = cmd_nvl_create_fault(hdl, fltnm, board_cert,
		    memb_nvl, memb_nvl, NULL);
		flt = cmd_fault_add_location(hdl, flt, label);
		if (flt != NULL) {
			fmd_case_add_suspect(hdl, cp, flt);
		}
		nvlist_free(memb_nvl);
	}
}