1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
// 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
|