Skip to content

Commit adbd050

Browse files
committed
biosdecode: Decode Intel Multiprocessor entry point
Decode the entry point defined in the Intel Multiprocessor specification.
1 parent 12fbde9 commit adbd050

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

CHANGELOG

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
2017-01-20 Jean Delvare <[email protected]>
2+
3+
* biosdecode.c: Decode the entry point defined in the Intel
4+
Multiprocessor specification.
5+
16
2017-01-20 Jean Delvare <[email protected]>
27

38
* dmidecode.c: Only decode one DMI table.

biosdecode.c

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* BIOS Decode
33
*
44
* Copyright (C) 2000-2002 Alan Cox <[email protected]>
5-
* Copyright (C) 2002-2015 Jean Delvare <[email protected]>
5+
* Copyright (C) 2002-2017 Jean Delvare <[email protected]>
66
*
77
* This program is free software; you can redistribute it and/or modify
88
* it under the terms of the GNU General Public License as published by
@@ -52,6 +52,9 @@
5252
* - Fujitsu application panel technical details
5353
* As of July 23rd, 2004
5454
* http://apanel.sourceforge.net/tech.php
55+
* - Intel Multiprocessor Specification
56+
* Version 1.4
57+
* http://www.intel.com/design/archives/processors/pro/docs/242016.htm
5558
*/
5659

5760
#include <stdio.h>
@@ -545,6 +548,34 @@ static int fjkeyinf_decode(const u8 *p, size_t len)
545548
return 1;
546549
}
547550

551+
/*
552+
* Intel Multiprocessor
553+
*/
554+
555+
static size_t mp_length(const u8 *p)
556+
{
557+
return 16 * p[8];
558+
}
559+
560+
static int mp_decode(const u8 *p, size_t len)
561+
{
562+
if (!checksum(p, len))
563+
return 0;
564+
565+
printf("Intel Multiprocessor present.\n");
566+
printf("\tSpecification Revision: %s\n",
567+
p[9] == 0x01 ? "1.1" : p[9] == 0x04 ? "1.4" : "Invalid");
568+
if (p[11])
569+
printf("\tDefault Configuration: #%d\n", p[11]);
570+
else
571+
printf("\tConfiguration Table Address: 0x%08X\n",
572+
DWORD(p + 4));
573+
printf("\tMode: %s\n", p[12] & (1 << 7) ?
574+
"IMCR and PIC" : "Virtual Wire");
575+
576+
return 1;
577+
}
578+
548579
/*
549580
* Main
550581
*/
@@ -562,6 +593,7 @@ static struct bios_entry bios_entries[] = {
562593
{ "32OS", 0, 0xE0000, 0xFFFFF, compaq_length, compaq_decode },
563594
{ "\252\125VPD", 0, 0xF0000, 0xFFFFF, vpd_length, vpd_decode },
564595
{ "FJKEYINF", 0, 0xF0000, 0xFFFFF, fjkeyinf_length, fjkeyinf_decode },
596+
{ "_MP_", 0, 0xE0000, 0xFFFFF, mp_length, mp_decode },
565597
{ NULL, 0, 0, 0, NULL, NULL }
566598
};
567599

0 commit comments

Comments
 (0)