static int __init isapnp_build_device_list()

in isapnp/core.c [752:787]


static int __init isapnp_build_device_list(void)
{
	int csn;
	unsigned char header[9];
	struct pnp_card *card;
	u32 eisa_id;
	char id[8];

	isapnp_wait();
	isapnp_key();
	for (csn = 1; csn <= isapnp_csn_count; csn++) {
		isapnp_wake(csn);
		isapnp_peek(header, 9);
		eisa_id = header[0] | header[1] << 8 |
			  header[2] << 16 | header[3] << 24;
		pnp_eisa_id_to_string(eisa_id, id);
		card = pnp_alloc_card(&isapnp_protocol, csn, id);
		if (!card)
			continue;

		INIT_LIST_HEAD(&card->devices);
		card->serial =
		    (header[7] << 24) | (header[6] << 16) | (header[5] << 8) |
		    header[4];
		isapnp_checksum_value = 0x00;
		isapnp_parse_resource_map(card);
		if (isapnp_checksum_value != 0x00)
			dev_err(&card->dev, "invalid checksum %#x\n",
				isapnp_checksum_value);
		card->checksum = isapnp_checksum_value;

		pnp_add_card(card);
	}
	isapnp_wait();
	return 0;
}