mirror of
https://github.com/memtest86plus/memtest86plus.git
synced 2024-11-27 10:00:17 -06:00
144 lines
3.3 KiB
C
144 lines
3.3 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
#ifndef SMBIOS_H
|
|
#define SMBIOS_H
|
|
/**
|
|
* \file
|
|
*
|
|
* Provides functions for reading SMBIOS tables
|
|
*
|
|
* Copyright (C) 2004-2022 Samuel Demeulemeester.
|
|
*/
|
|
|
|
#define DMI_SDR 0x0F
|
|
#define DMI_RDRAM 0x11
|
|
#define DMI_DDR 0x12
|
|
#define DMI_DDR2 0x13
|
|
#define DMI_DDR2_FBDIMM 0x14
|
|
#define DMI_DDR3 0x18
|
|
#define DMI_DDR4 0x1A
|
|
#define DMI_LPDDR 0x1B
|
|
#define DMI_LPDDR2 0x1C
|
|
#define DMI_LPDDR3 0x1D
|
|
#define DMI_LPDDR4 0x1E
|
|
#define DMI_DDR5 0x22
|
|
#define DMI_LPDDR5 0x23
|
|
|
|
typedef struct {
|
|
uint8_t anchor[4];
|
|
int8_t checksum;
|
|
uint8_t length;
|
|
uint8_t majorversion;
|
|
uint8_t minorversion;
|
|
uint16_t maxstructsize;
|
|
uint8_t revision;
|
|
uint8_t pad[5];
|
|
uint8_t intanchor[5];
|
|
int8_t intchecksum;
|
|
uint16_t tablelength;
|
|
uint32_t tableaddress;
|
|
uint16_t numstructs;
|
|
uint8_t SMBIOSrev;
|
|
} smbiosv2_t;
|
|
|
|
struct tstruct_header {
|
|
uint8_t type;
|
|
uint8_t length;
|
|
uint16_t handle;
|
|
} __attribute__((packed));
|
|
|
|
struct system_info {
|
|
struct tstruct_header header;
|
|
uint8_t manufacturer;
|
|
uint8_t productname;
|
|
uint8_t version;
|
|
uint8_t serialnumber;
|
|
uint8_t uuidbytes[16];
|
|
uint8_t wut; // Last field defined by SMBIOS 2.3.
|
|
/*uint8_t sku_number;
|
|
uint8_t family;*/
|
|
} __attribute__((packed));
|
|
|
|
struct baseboard_info {
|
|
struct tstruct_header header;
|
|
uint8_t manufacturer;
|
|
uint8_t productname;
|
|
uint8_t version;
|
|
uint8_t serialnumber; // Last field defined by SMBIOS 2.3.
|
|
/*uint8_t asset_tag;
|
|
uint8_t feature_flags;
|
|
uint8_t location_in_chassis;
|
|
uint16_t chassis_handle;
|
|
uint8_t board_type;
|
|
uint16_t number_contained_object_handles;*/
|
|
} __attribute__((packed));
|
|
|
|
struct mem_module {
|
|
struct tstruct_header header;
|
|
uint8_t socket_designation;
|
|
uint8_t bank_connections;
|
|
uint8_t current_speed;
|
|
uint16_t current_memory_type;
|
|
uint8_t installed_size;
|
|
uint8_t enabled_size;
|
|
uint8_t error_status;
|
|
} __attribute__((packed));
|
|
|
|
struct mem_dev {
|
|
struct tstruct_header header;
|
|
uint16_t pma_handle;
|
|
uint16_t err_handle;
|
|
uint16_t tot_width;
|
|
uint16_t dat_width;
|
|
uint16_t size;
|
|
uint8_t form;
|
|
uint8_t set;
|
|
uint8_t dev_locator;
|
|
uint8_t bank_locator;
|
|
uint8_t type;
|
|
uint16_t typedetail;
|
|
uint16_t speed;
|
|
uint8_t manufacturer;
|
|
uint8_t serialnum;
|
|
uint8_t asset;
|
|
uint8_t partnum; // Last field defined by SMBIOS 2.3.
|
|
/*uint8_t attributes;
|
|
uint32_t ext_size;
|
|
uint16_t conf_ram_speed;
|
|
uint16_t min_voltage;
|
|
uint16_t max_votage;
|
|
uint16_t conf_voltage;
|
|
uint8_t technology;
|
|
uint16_t operating_mode_capability;
|
|
uint8_t firmware_version;
|
|
uint16_t module_manufacturer_id;
|
|
uint16_t module_product_id;
|
|
uint16_t mem_subsystem_controller_manufacturer_id;
|
|
uint16_t mem_subsystem_controller_product_id;
|
|
uint64_t nonvolatile_size;
|
|
uint64_t volatile_size;
|
|
uint64_t cache_size;
|
|
uint64_t logical_size;
|
|
uint32_t extended_speed;
|
|
uint32_t extended_conf_speed;*/
|
|
} __attribute__((packed));
|
|
|
|
/**
|
|
* Memory device Structure (used for SPD decoding)
|
|
*/
|
|
|
|
extern struct mem_dev *dmi_memory_device;
|
|
|
|
/**
|
|
* Initialize SMBIOS/DMI (locate struct)
|
|
*/
|
|
|
|
int smbios_init(void);
|
|
|
|
/**
|
|
* Print DMI
|
|
*/
|
|
|
|
void print_smbios_startup_info(void);
|
|
|
|
#endif // SMBIOS_H
|