mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 21:12:59 +00:00
[I8042PRT] Move DMI/SMBIOS parsing functions into library
This commit is contained in:
parent
d956eafda8
commit
0854c69a75
8 changed files with 179 additions and 116 deletions
|
@ -18,6 +18,7 @@ if(MSVC)
|
|||
endif()
|
||||
|
||||
add_subdirectory(delayimp)
|
||||
add_subdirectory(dmilib)
|
||||
#add_subdirectory(dnslib) Nothing links to this lib.
|
||||
add_subdirectory(drivers)
|
||||
add_subdirectory(dxguid)
|
||||
|
|
8
sdk/lib/dmilib/CMakeLists.txt
Normal file
8
sdk/lib/dmilib/CMakeLists.txt
Normal file
|
@ -0,0 +1,8 @@
|
|||
|
||||
list(APPEND SOURCE
|
||||
dmilib.c
|
||||
precomp.h)
|
||||
|
||||
add_library(dmilib ${SOURCE})
|
||||
add_pch(dmilib precomp.h SOURCE)
|
||||
add_dependencies(dmilib psdk)
|
109
sdk/lib/dmilib/dmi.h
Normal file
109
sdk/lib/dmilib/dmi.h
Normal file
|
@ -0,0 +1,109 @@
|
|||
/*
|
||||
* PROJECT: ReactOS DMI/SMBIOS Library
|
||||
* LICENSE: GPL - See COPYING in the top level directory
|
||||
* FILE: dmi.h
|
||||
* PURPOSE: SMBIOS table parsing functions
|
||||
* PROGRAMMERS: Timo Kreuzer (timo.kreuzer@reactos.org)
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
enum DMI_DEVICE_TYPE
|
||||
{
|
||||
DMI_DEV_TYPE_ANY = 0,
|
||||
DMI_DEV_TYPE_OTHER,
|
||||
DMI_DEV_TYPE_UNKNOWN,
|
||||
DMI_DEV_TYPE_VIDEO,
|
||||
DMI_DEV_TYPE_SCSI,
|
||||
DMI_DEV_TYPE_ETHERNET,
|
||||
DMI_DEV_TYPE_TOKENRING,
|
||||
DMI_DEV_TYPE_SOUND,
|
||||
DMI_DEV_TYPE_PATA,
|
||||
DMI_DEV_TYPE_SATA,
|
||||
DMI_DEV_TYPE_SAS,
|
||||
DMI_DEV_TYPE_IPMI = -1,
|
||||
DMI_DEV_TYPE_OEM_STRING = -2,
|
||||
DMI_DEV_TYPE_DEV_ONBOARD = -3,
|
||||
};
|
||||
|
||||
enum DMI_ENTRY_TYPE
|
||||
{
|
||||
DMI_ENTRY_BIOS = 0,
|
||||
DMI_ENTRY_SYSTEM = 1,
|
||||
DMI_ENTRY_BASEBOARD = 2,
|
||||
DMI_ENTRY_CHASSIS = 3,
|
||||
DMI_ENTRY_PROCESSOR = 4,
|
||||
DMI_ENTRY_MEM_CONTROLLER = 5,
|
||||
DMI_ENTRY_MEM_MODULE = 6,
|
||||
DMI_ENTRY_CACHE = 7,
|
||||
DMI_ENTRY_PORT_CONNECTOR = 8,
|
||||
DMI_ENTRY_SYSTEM_SLOT = 9,
|
||||
DMI_ENTRY_ONBOARD_DEVICE = 10,
|
||||
DMI_ENTRY_OEMSTRINGS = 11,
|
||||
DMI_ENTRY_SYSCONF = 12,
|
||||
DMI_ENTRY_BIOS_LANG = 13,
|
||||
DMI_ENTRY_GROUP_ASSOC = 14,
|
||||
DMI_ENTRY_SYSTEM_EVENT_LOG = 15,
|
||||
DMI_ENTRY_PHYS_MEM_ARRAY = 16,
|
||||
DMI_ENTRY_MEM_DEVICE = 17,
|
||||
DMI_ENTRY_32_MEM_ERROR = 18,
|
||||
DMI_ENTRY_MEM_ARRAY_MAPPED_ADDR = 19,
|
||||
DMI_ENTRY_MEM_DEV_MAPPED_ADDR = 20,
|
||||
DMI_ENTRY_BUILTIN_POINTING_DEV,
|
||||
DMI_ENTRY_PORTABLE_BATTERY,
|
||||
DMI_ENTRY_SYSTEM_RESET,
|
||||
DMI_ENTRY_HW_SECURITY,
|
||||
DMI_ENTRY_SYSTEM_POWER_CONTROLS = 25,
|
||||
DMI_ENTRY_VOLTAGE_PROBE,
|
||||
DMI_ENTRY_COOLING_DEV,
|
||||
DMI_ENTRY_TEMP_PROBE,
|
||||
DMI_ENTRY_ELECTRICAL_CURRENT_PROBE,
|
||||
DMI_ENTRY_OOB_REMOTE_ACCESS = 30,
|
||||
DMI_ENTRY_BIS_ENTRY,
|
||||
DMI_ENTRY_SYSTEM_BOOT = 32,
|
||||
DMI_ENTRY_MGMT_DEV,
|
||||
DMI_ENTRY_MGMT_DEV_COMPONENT,
|
||||
DMI_ENTRY_MGMT_DEV_THRES = 35,
|
||||
DMI_ENTRY_MEM_CHANNEL = 36,
|
||||
DMI_ENTRY_IPMI_DEV = 37,
|
||||
DMI_ENTRY_SYS_POWER_SUPPLY = 38,
|
||||
DMI_ENTRY_ADDITIONAL = 39,
|
||||
DMI_ENTRY_ONBOARD_DEV_EXT = 40,
|
||||
DMI_ENTRY_MGMT_CONTROLLER_HOST = 41,
|
||||
DMI_ENTRY_INACTIVE = 126,
|
||||
DMI_ENTRY_END_OF_TABLE = 127,
|
||||
};
|
||||
|
||||
enum _DMI_FIELD_OFFSETS
|
||||
{
|
||||
/* Type = 0: DMI_ENTRY_BIOS */
|
||||
DMI_BIOS_VENDOR = 0x04,
|
||||
DMI_BIOS_VERSION = 0x05,
|
||||
DMI_BIOS_DATE = 0x08,
|
||||
DMI_BIOS_SIZE = 0x14,
|
||||
|
||||
/* Type = 1: DMI_ENTRY_SYSTEM */
|
||||
DMI_SYS_VENDOR = 0x04,
|
||||
DMI_SYS_PRODUCT = 0x05,
|
||||
DMI_SYS_VERSION = 0x06,
|
||||
DMI_SYS_SERIAL = 0x07,
|
||||
DMI_SYS_SIZE = 0x1b,
|
||||
|
||||
/* Type = 2: DMI_ENTRY_BASEBOARD */
|
||||
DMI_BOARD_VENDOR = 0x04,
|
||||
DMI_BOARD_NAME = 0x05,
|
||||
DMI_BOARD_VERSION = 0x06,
|
||||
DMI_BOARD_SERIAL = 0x07,
|
||||
DMI_BOARD_ASSET_TAG = 0x08,
|
||||
DMI_BOARD_SIZE = 0x10,
|
||||
|
||||
|
||||
};
|
||||
|
||||
typedef struct _DMI_HEADER
|
||||
{
|
||||
UCHAR Type;
|
||||
UCHAR Length;
|
||||
USHORT Handle;
|
||||
} DMI_HEADER, *PDMI_HEADER;
|
||||
|
113
sdk/lib/dmilib/dmilib.c
Normal file
113
sdk/lib/dmilib/dmilib.c
Normal file
|
@ -0,0 +1,113 @@
|
|||
/*
|
||||
* PROJECT: ReactOS DMI/SMBIOS Library
|
||||
* LICENSE: GPL - See COPYING in the top level directory
|
||||
* FILE: dmilib.c
|
||||
* PURPOSE: SMBIOS table parsing functions
|
||||
* PROGRAMMERS: Timo Kreuzer (timo.kreuzer@reactos.org)
|
||||
* REFERENCES: http://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.0.0.pdf
|
||||
*/
|
||||
|
||||
#include "precomp.h"
|
||||
|
||||
static
|
||||
PCHAR
|
||||
GetDmiString(
|
||||
_In_ PDMI_HEADER Header,
|
||||
_In_ ULONG FieldOffset)
|
||||
{
|
||||
ULONG StringIndex;
|
||||
PCHAR String;
|
||||
|
||||
StringIndex = ((PUCHAR)Header)[FieldOffset];
|
||||
if (StringIndex == 0)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
String = (PCHAR)Header + Header->Length;
|
||||
|
||||
while (--StringIndex != 0)
|
||||
{
|
||||
while (*String != 0)
|
||||
String++;
|
||||
|
||||
String++;
|
||||
}
|
||||
|
||||
return String;
|
||||
}
|
||||
|
||||
VOID
|
||||
ParseSMBiosTables(
|
||||
_In_reads_bytes_(TableSize) PVOID SMBiosTables,
|
||||
_In_ ULONG TableSize,
|
||||
_Inout_updates_(ID_STRINGS_MAX) PCHAR * Strings)
|
||||
{
|
||||
PMSSmBios_RawSMBiosTables BiosTablesHeader = SMBiosTables;
|
||||
PDMI_HEADER Header;
|
||||
ULONG Remaining;
|
||||
PCHAR Data;
|
||||
|
||||
Header = (PDMI_HEADER)(&BiosTablesHeader->SMBiosData);
|
||||
Remaining = BiosTablesHeader->Size;
|
||||
|
||||
while (Remaining >= sizeof(*Header))
|
||||
{
|
||||
if (Header->Type == DMI_ENTRY_END_OF_TABLE)
|
||||
break;
|
||||
|
||||
switch (Header->Type)
|
||||
{
|
||||
case DMI_ENTRY_BIOS:
|
||||
if (Remaining < DMI_BIOS_SIZE)
|
||||
return;
|
||||
Strings[BIOS_VENDOR] = GetDmiString(Header, DMI_BIOS_VENDOR);
|
||||
Strings[BIOS_VERSION] = GetDmiString(Header, DMI_BIOS_VERSION);
|
||||
Strings[BIOS_DATE] = GetDmiString(Header, DMI_BIOS_DATE);
|
||||
break;
|
||||
|
||||
case DMI_ENTRY_SYSTEM:
|
||||
if (Remaining < DMI_SYS_SIZE)
|
||||
return;
|
||||
Strings[SYS_VENDOR] = GetDmiString(Header, DMI_SYS_VENDOR);
|
||||
Strings[SYS_PRODUCT] = GetDmiString(Header, DMI_SYS_PRODUCT);
|
||||
Strings[SYS_VERSION] = GetDmiString(Header, DMI_SYS_VERSION);
|
||||
Strings[SYS_SERIAL] = GetDmiString(Header, DMI_SYS_SERIAL);
|
||||
break;
|
||||
|
||||
case DMI_ENTRY_BASEBOARD:
|
||||
if (Remaining < DMI_BOARD_SIZE)
|
||||
return;
|
||||
Strings[BOARD_VENDOR] = GetDmiString(Header, DMI_BOARD_VENDOR);
|
||||
Strings[BOARD_NAME] = GetDmiString(Header, DMI_BOARD_NAME);
|
||||
Strings[BOARD_VERSION] = GetDmiString(Header, DMI_BOARD_VERSION);
|
||||
Strings[BOARD_SERIAL] = GetDmiString(Header, DMI_BOARD_SERIAL);
|
||||
Strings[BOARD_ASSET_TAG] = GetDmiString(Header, DMI_BOARD_ASSET_TAG);
|
||||
break;
|
||||
|
||||
case DMI_ENTRY_CHASSIS:
|
||||
case DMI_ENTRY_ONBOARD_DEVICE:
|
||||
case DMI_ENTRY_OEMSTRINGS:
|
||||
// DMI_ENTRY_IPMI_DEV?
|
||||
// DMI_ENTRY_ONBOARD_DEV_EXT?
|
||||
break;
|
||||
}
|
||||
|
||||
Remaining -= Header->Length;
|
||||
Data = (PCHAR)Header + Header->Length;
|
||||
|
||||
/* Now loop until we find 2 zeroes */
|
||||
while ((Remaining >= 2) && ((Data[0] != 0) || (Data[1] != 0)))
|
||||
{
|
||||
Data++;
|
||||
Remaining--;
|
||||
}
|
||||
|
||||
if (Remaining < 2)
|
||||
break;
|
||||
|
||||
/* Go to the next header */
|
||||
Remaining -= 2;
|
||||
Header = (PDMI_HEADER)((PUCHAR)Data + 2);
|
||||
}
|
||||
}
|
34
sdk/lib/dmilib/dmilib.h
Normal file
34
sdk/lib/dmilib/dmilib.h
Normal file
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* PROJECT: ReactOS DMI/SMBIOS Library
|
||||
* LICENSE: GPL - See COPYING in the top level directory
|
||||
* FILE: dmilib.h
|
||||
* PURPOSE: SMBIOS table parsing functions
|
||||
* PROGRAMMERS: Timo Kreuzer (timo.kreuzer@reactos.org)
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
enum _ID_STRINGS
|
||||
{
|
||||
ID_NONE = 0,
|
||||
BIOS_VENDOR,
|
||||
BIOS_VERSION,
|
||||
BIOS_DATE,
|
||||
SYS_VENDOR,
|
||||
SYS_PRODUCT,
|
||||
SYS_VERSION,
|
||||
SYS_SERIAL,
|
||||
BOARD_VENDOR,
|
||||
BOARD_NAME,
|
||||
BOARD_VERSION,
|
||||
BOARD_SERIAL,
|
||||
BOARD_ASSET_TAG,
|
||||
|
||||
ID_STRINGS_MAX,
|
||||
};
|
||||
|
||||
VOID
|
||||
ParseSMBiosTables(
|
||||
_In_reads_bytes_(TableSize) PVOID SMBiosTables,
|
||||
_In_ ULONG TableSize,
|
||||
_Inout_updates_(ID_STRINGS_MAX) PCHAR * Strings);
|
9
sdk/lib/dmilib/precomp.h
Normal file
9
sdk/lib/dmilib/precomp.h
Normal file
|
@ -0,0 +1,9 @@
|
|||
#ifndef _DMILIB_PCH_
|
||||
#define _DMILIB_PCH_
|
||||
|
||||
#include <ntdef.h>
|
||||
#include <wmidata.h>
|
||||
#include "dmi.h"
|
||||
#include "dmilib.h"
|
||||
|
||||
#endif /* _DMILIB_PCH_ */
|
Loading…
Add table
Add a link
Reference in a new issue