summaryrefslogtreecommitdiffstats
path: root/dmi.c
diff options
context:
space:
mode:
Diffstat (limited to 'dmi.c')
-rw-r--r--dmi.c49
1 files changed, 29 insertions, 20 deletions
diff --git a/dmi.c b/dmi.c
index 3e5d570..1a43ab0 100644
--- a/dmi.c
+++ b/dmi.c
@@ -10,13 +10,11 @@
#include "test.h"
-#include <stdint.h>
-
+#include "stdint.h"
#define round_up(x,y) (((x) + (y) - 1) & ~((y)-1))
#define round_down(x,y) ((x) & ~((y)-1))
-
struct dmi_eps {
uint8_t anchor[4];
int8_t checksum;
@@ -95,6 +93,12 @@ struct mem_dev {
uint8_t serialnum;
uint8_t asset;
uint8_t partnum;
+ uint8_t attributes;
+ uint8_t ext_size;
+ uint8_t conf_ram_speed;
+ uint8_t min_voltage;
+ uint8_t max_votage;
+ uint8_t conf_voltage;
} __attribute__((packed));
struct md_map{
@@ -122,7 +126,7 @@ static char *form_factors[] = {
"?",
"Other", "Unknown", "SIMM", "SIP", "Chip", "DIP", "ZIP",
"Proprietary Card", "DIMM", "TSOP", "Row of chips", "RIMM",
- "SODIMM", "SRIMM", "FB-DIMM"
+ "SODIMM", "SRIMM", "FB-DIMM", "Die"
};
@@ -131,7 +135,8 @@ static char *memory_types[] = {
"Other", "????", "DRAM", "EDRAM", "VRAM", "SRAM", "RAM",
"ROM", "FLASH", "EEPROM", "FEPROM", "EPROM", "CDRAM", "3DRAM",
"SDRAM", "SGRAM", "RDRAM", "DDR", "DDR2", "DDR2 FB", "RSVD",
- "RSVD","RSVD","DDR3","FBD2"
+ "RSVD","RSVD","DDR3","FBD2", "DDR4", "LPDDR", "LPDDR2", "LPDDR3",
+ "LPDDR4", "LNVD", "HBM", "HBM2", "DDR5", "LPDDR5"
};
@@ -198,7 +203,6 @@ int open_dmi(void){
return -1;
}
-
table_start=(char *)eps->tableaddress;
dmi=table_start;
//look at all structs
@@ -209,8 +213,8 @@ int open_dmi(void){
(mem_devs_count < MAX_DMI_MEMDEVS))
mem_devs[mem_devs_count++] = (struct mem_dev *)dmi;
- // Need fix (SMBIOS/DDR3)
- if ((header->type == 20 || header->type == 1) &&
+ // Mem Dev Map
+ if ((header->type == 20) &&
(md_maps_count < MAX_DMI_MEMDEVS))
md_maps[md_maps_count++] = (struct md_map *)dmi;
@@ -258,11 +262,11 @@ void print_dmi_startup_info(void)
if(!dmi_initialized) { init_dmi(); }
string1 = get_tstruct_string(&dmi_system_info->header,dmi_system_info->manufacturer);
- sl1 = strlen(string1);
+ sl1 = mt86_strlen(string1);
string2 = get_tstruct_string(&dmi_system_info->header,dmi_system_info->productname);
- sl2 = strlen(string2);
+ sl2 = mt86_strlen(string2);
string3 = get_tstruct_string(&dmi_cpu_info->header,dmi_cpu_info->cpu_socket);
- sl3 = strlen(string3);
+ sl3 = mt86_strlen(string3);
slenght = sl1 + sl2;
if(sl3 > 2) { slenght += sl3 + 4; } else { slenght++; }
@@ -316,17 +320,22 @@ void print_dmi_info(void){
int size_in_mb;
int yof;
- yof=POP2_Y+5+2*(i-8*(page-1));
+ yof = POP2_Y+5+2*(i-8*(page-1));
cprint(yof, POP2_X+4, get_tstruct_string(&(mem_devs[i]->header), mem_devs[i]->dev_locator));
-
+
if (mem_devs[i]->size == 0){
cprint(yof, POP2_X+4+18, "Empty");
}else if (mem_devs[i]->size == 0xFFFF){
cprint(yof, POP2_X+4+18, "Unknown");
+ }else if (mem_devs[i]->size == 0x7FFF){
+ // SMBIOS 2.7+
+ size_in_mb = mem_devs[i]->ext_size;
+ itoa(string, size_in_mb);
+ cprint(yof, POP2_X+4+18, string);
}else{
- size_in_mb = 0xEFFF & mem_devs[i]->size;
+ size_in_mb = 0xFFFF & mem_devs[i]->size;
if (mem_devs[i]->size & 0x8000)
- size_in_mb = size_in_mb<<10;
+ size_in_mb <<= 10;
itoa(string, size_in_mb);
cprint(yof, POP2_X+4+18, string);
}
@@ -410,22 +419,22 @@ void print_dmi_err(void){
scroll();
- cprint(v->msg_line, 0,"Bad Memory Devices: ");
+ cprint(vv->msg_line, 0,"Bad Memory Devices: ");
of=20;
for ( i=count=0; i < MAX_DMI_MEMDEVS; i++){
if (!dmi_err_cnts[i])
continue;
struct mem_dev *md = mem_devs[i];
if(count++){
- cprint(v->msg_line, of, ", ");
+ cprint(vv->msg_line, of, ", ");
of+=2;
}
string=get_tstruct_string((struct tstruct_header *)md,md->dev_locator);
- if (strlen(string) + of > 80){
+ if (mt86_strlen(string) + of > 80){
scroll();
of=7;
}
- cprint(v->msg_line, of, string);
- of += strlen(string);
+ cprint(vv->msg_line, of, string);
+ of += mt86_strlen(string);
}
}