Пример #1
0
/****************************************************************************
 * try_convert_checksum_layout
 *
 * Perform sanity checking on CMOS checksum layout information and attempt to
 * convert information from bit positions to byte positions.  Return OK on
 * success or an error code on failure.
 ****************************************************************************/
static void try_convert_checksum_layout(cmos_checksum_layout_t * layout)
{
	switch (checksum_layout_to_bytes(layout)) {
	case OK:
		return;

	case LAYOUT_SUMMED_AREA_START_NOT_ALIGNED:
		fprintf(stderr,
			"%s: CMOS checksummed area start is not byte-aligned.\n",
			prog_name);
		break;

	case LAYOUT_SUMMED_AREA_END_NOT_ALIGNED:
		fprintf(stderr,
			"%s: CMOS checksummed area end is not byte-aligned.\n",
			prog_name);
		break;

	case LAYOUT_CHECKSUM_LOCATION_NOT_ALIGNED:
		fprintf(stderr,
			"%s: CMOS checksum location is not byte-aligned.\n",
			prog_name);
		break;

	case LAYOUT_INVALID_SUMMED_AREA:
		fprintf(stderr,
			"%s: CMOS checksummed area end must be greater than "
			"CMOS checksummed area start.\n", prog_name);
		break;

	case LAYOUT_CHECKSUM_OVERLAPS_SUMMED_AREA:
		fprintf(stderr,
			"%s: CMOS checksum overlaps checksummed area.\n",
			prog_name);
		break;

	case LAYOUT_SUMMED_AREA_OUT_OF_RANGE:
		fprintf(stderr,
			"%s: CMOS checksummed area out of range.\n", prog_name);
		break;

	case LAYOUT_CHECKSUM_LOCATION_OUT_OF_RANGE:
		fprintf(stderr,
			"%s: CMOS checksum location out of range.\n",
			prog_name);
		break;

	default:
		BUG();
	}

	exit(1);
}
Пример #2
0
/****************************************************************************
 * set_checksum_info
 *
 * Set CMOS checksum information according to input parameters and perform
 * sanity checking on input parameters.
 ****************************************************************************/
static void set_checksum_info(const char start_str[], const char end_str[],
			      const char index_str[])
{
	cmos_checksum_layout_t layout;

	/* These are bit positions that we want to convert to byte positions. */
	layout.summed_area_start =
	    string_to_unsigned(start_str, "CMOS checksummed area start");
	layout.summed_area_end =
	    string_to_unsigned(end_str, "CMOS checksummed area end");
	layout.checksum_at =
	    string_to_unsigned(index_str, "CMOS checksum location");

	switch (checksum_layout_to_bytes(&layout)) {
	case OK:
		break;

	case LAYOUT_SUMMED_AREA_START_NOT_ALIGNED:
		fprintf(stderr,
			"%s: Error on line %d of CMOS layout file.  CMOS "
			"checksummed area start is not byte-aligned.\n",
			prog_name, line_num);
		goto fail;

	case LAYOUT_SUMMED_AREA_END_NOT_ALIGNED:
		fprintf(stderr,
			"%s: Error on line %d of CMOS layout file.  CMOS "
			"checksummed area end is not byte-aligned.\n",
			prog_name, line_num);
		goto fail;

	case LAYOUT_CHECKSUM_LOCATION_NOT_ALIGNED:
		fprintf(stderr,
			"%s: Error on line %d of CMOS layout file.  CMOS "
			"checksum location is not byte-aligned.\n", prog_name,
			line_num);
		goto fail;

	case LAYOUT_INVALID_SUMMED_AREA:
		fprintf(stderr,
			"%s: Error on line %d of CMOS layout file.  CMOS "
			"checksummed area end must be greater than CMOS checksummed "
			"area start.\n", prog_name, line_num);
		goto fail;

	case LAYOUT_CHECKSUM_OVERLAPS_SUMMED_AREA:
		fprintf(stderr,
			"%s: Error on line %d of CMOS layout file.  CMOS "
			"checksum overlaps checksummed area.\n", prog_name,
			line_num);
		goto fail;

	case LAYOUT_SUMMED_AREA_OUT_OF_RANGE:
		fprintf(stderr,
			"%s: Error on line %d of CMOS layout file.  CMOS "
			"checksummed area out of range.\n", prog_name,
			line_num);
		goto fail;

	case LAYOUT_CHECKSUM_LOCATION_OUT_OF_RANGE:
		fprintf(stderr,
			"%s: Error on line %d of CMOS layout file.  CMOS "
			"checksum location out of range.\n", prog_name,
			line_num);
		goto fail;

	default:
		BUG();
	}

	cmos_checksum_start = layout.summed_area_start;
	cmos_checksum_end = layout.summed_area_end;
	cmos_checksum_index = layout.checksum_at;
	return;

      fail:
	exit(1);
}