Ejemplo n.º 1
0
static int __init dmi_present(const u8 *buf)
{
	int smbios_ver;

	if (memcmp(buf, "_SM_", 4) == 0 &&
	    buf[5] < 32 && dmi_checksum(buf, buf[5])) {
		smbios_ver = (buf[6] << 8) + buf[7];

		/* Some BIOS report weird SMBIOS version, fix that up */
		switch (smbios_ver) {
		case 0x021F:
		case 0x0221:
			pr_debug("SMBIOS version fixup(2.%d->2.%d)\n",
				 smbios_ver & 0xFF, 3);
			smbios_ver = 0x0203;
			break;
		case 0x0233:
			pr_debug("SMBIOS version fixup(2.%d->2.%d)\n", 51, 6);
			smbios_ver = 0x0206;
			break;
		}
	} else {
		smbios_ver = 0;
	}

	buf += 16;

	if (memcmp(buf, "_DMI_", 5) == 0 && dmi_checksum(buf, 15)) {
		dmi_num = (buf[13] << 8) | buf[12];
		dmi_len = (buf[7] << 8) | buf[6];
		dmi_base = (buf[11] << 24) | (buf[10] << 16) |
			(buf[9] << 8) | buf[8];

		if (dmi_walk_early(dmi_decode) == 0) {
			if (smbios_ver) {
				dmi_ver = smbios_ver;
				pr_info("SMBIOS %d.%d present.\n",
				       dmi_ver >> 8, dmi_ver & 0xFF);
			} else {
				dmi_ver = (buf[14] & 0xF0) << 4 |
					   (buf[14] & 0x0F);
				pr_info("Legacy DMI %d.%d present.\n",
				       dmi_ver >> 8, dmi_ver & 0xFF);
			}
			dmi_format_ids(dmi_ids_string, sizeof(dmi_ids_string));
			printk(KERN_DEBUG "DMI: %s\n", dmi_ids_string);
			return 0;
		}
Ejemplo n.º 2
0
Archivo: dmi.c Proyecto: Jimx-/lyos
PRIVATE int dmi_present(const char * buf)
{
    int ver = 0;
    if (memcmp(buf, "_SM_", 4) == 0 && dmi_checksum(buf, buf[5])) {
        ver = (buf[6] << 8) + buf[7];
    }

    buf += 16;

    if (memcmp(buf, "_DMI_", 5) == 0 && dmi_checksum(buf, 15)) {
        dmi_num = (buf[13] << 8) | buf[12];
        dmi_len = (buf[7] << 8) | buf[6];
        dmi_base = ((buf[11] & 0xFF) << 24) | ((buf[10] & 0xFF) << 16) |
                            ((buf[9] & 0xFF) << 8) | (buf[8] & 0xFF);

        if (ver) {
            dmi_ver = ver;
            printl("SMBIOS %d.%d present.\n", dmi_ver >> 8, dmi_ver & 0xFF);
        } else {