示例#1
0
static int lar_module_redraw(WINDOW *win)
{
	int i, row = 2;
	struct larstat stat;

	print_module_title(win, "LAR Listing");

	if (lar == 0) {
		mvwprintw(win, 11, 61 / 2, "Bad or missing LAR");
		return 0;
	}

	/* Draw a line down the middle. */
	for (i = 2; i < 21; i++)
		mvwaddch(win, i, 30, ACS_VLINE);

	/* Draw the names down the left side. */
	for (i = 0; i < lcount; i++) {
		if (i == selected)
			wattrset(win, COLOR_PAIR(3) | A_BOLD);
		else
			wattrset(win, COLOR_PAIR(2));

		mvwprintw(win, 2 + i, 1, "%.25s", lnames[i]);
	}

	/* Get the information for the LAR. */
	if (larstat(lar, lnames[selected], &stat)) {
		printf("larstat failed\n");
		return 0;
	}

	wattrset(win, COLOR_PAIR(2));

	mvwprintw(win, row++, 32, "Offset: 0x%x", stat.offset);

	if (stat.compression) {
		mvwprintw(win, row++, 32, "Compression: %s",
			  compression_table[stat.compression]);
		mvwprintw(win, row++, 32, "Compressed length: %d", stat.len);
		mvwprintw(win, row++, 32, "Compressed checksum: 0x%x",
			  stat.compchecksum);
	}

	mvwprintw(win, row++, 32, "Length: %d", stat.reallen);
	mvwprintw(win, row++, 32, "Checksum: 0x%x", stat.checksum);
	mvwprintw(win, row++, 32, "Load address: 0x%llx", stat.loadaddress);
	mvwprintw(win, row++, 32, "Entry point: 0x%llx", stat.entry);

	return 0;
}
示例#2
0
文件: config.c 项目: XVilka/coreboot
static int add_payload(struct LAR *lar, struct larent *larent)
{
	struct payload *payload;
	int plen;
	u8 *params = NULL;
	u8 *fptr;

	if (bayoucfg.n_entries == BAYOU_MAX_ENTRIES)
		return -1;

	payload = &bayoucfg.entries[bayoucfg.n_entries];

	if (strncmp((char *)larent->name, "payload/", 8))
		return -1;

	if (larstat(lar, (const char *)larent->name, &payload->stat))
		return -1;

	/* Make sure the LAR entry is valid. */
	if (!lfverify(lar, (const char *)larent->name))
		return -1;

	/* Get a pointer to the start of the file. */
	fptr = larfptr(lar, (const char *)larent->name);

	if (fptr == NULL)
		return -1;

	if (!verify_self(fptr))
		return -1;

	payload->pentry.index = bayoucfg.n_entries;
	payload->pentry.parent = 0;
	payload->pentry.type = BPT_TYPE_CHOOSER;
	payload->pentry.flags = 0;

	plen = self_get_params(fptr, &params);
	payload_parse_params(payload, params, plen);

	payload->fptr = fptr;

	bayoucfg.n_entries++;

	return 0;
}
示例#3
0
文件: config.c 项目: XVilka/coreboot
int get_configuration(struct LAR *lar)
{
	struct larstat stat;
	struct bpt_config *bptcfg;
	u8 *fptr, *ptr;
	int i;

	/*
	 * If bayou_payload_table doesn't exist, then dummy up
	 * a table from the LAR contents.
	 */
	if (larstat(lar, "bayou_payload_table", &stat) ||
	    !lfverify(lar, "bayou_payload_table"))
		build_dummy_table(lar);

	/* Open up the BPT and get the creamy goodness within. */

	fptr = larfptr(lar, "bayou_payload_table");

	if (fptr == NULL)
		build_dummy_table(lar);

	bptcfg = (struct bpt_config *)fptr;
	bayoucfg.timeout = bptcfg->timeout;

	bayoucfg.n_entries = bptcfg->entries;

	if (bayoucfg.n_entries > BAYOU_MAX_ENTRIES) {
		printf("W:  Limiting the number of entries to %d\n",
		       BAYOU_MAX_ENTRIES);
		bayoucfg.n_entries = BAYOU_MAX_ENTRIES;
	}

	ptr = fptr + sizeof(struct bpt_config);

	for (i = 0; i < bayoucfg.n_entries; i++) {
		struct bpt_pentry *entry = (struct bpt_pentry *)ptr;
		struct payload *p = &(bayoucfg.entries[i]);
		int plen;
		u8 *params = NULL;

		memcpy(&p->pentry, entry, sizeof(struct bpt_pentry));

		if (entry->type != BPT_TYPE_CHAIN) {
			char *lname = (char *)ptr + sizeof(struct bpt_pentry);

			if (larstat(lar, (const char *)lname, &p->stat))
				build_dummy_table(lar);

			if (!lfverify(lar, (const char *)lname))
				build_dummy_table(lar);

			fptr = larfptr(lar, (const char *)lname);

			if (verify_self(fptr))
				p->fptr = fptr;
			else
				build_dummy_table(lar);

			plen = self_get_params(fptr, &params);
			payload_parse_params(p, params, plen);
		}

		ptr += sizeof(struct bpt_pentry) + entry->nlen;
	}

	return 0;
}