dmi_print_memory_size("MEMORY_DEVICE", attr_suffix, slot_num, code, MEMORY_SIZE_UNIT_BYTES);
}
-static void dmi_decode(const struct dmi_header *h) {
+static void dmi_decode(const struct dmi_header *h,
+ unsigned *next_slot_num) {
const uint8_t *data = h->data;
- static unsigned next_slot_num = 0;
unsigned slot_num;
/*
dmi_print_memory_size("MEMORY_ARRAY", "MAX_CAPACITY", -1, DWORD(data + 0x07), MEMORY_SIZE_UNIT_KB);
else if (h->length >= 0x17)
dmi_print_memory_size("MEMORY_ARRAY", "MAX_CAPACITY", -1, QWORD(data + 0x0F), MEMORY_SIZE_UNIT_BYTES);
- printf("MEMORY_ARRAY_NUM_DEVICES=%u\n", WORD(data + 0x0D));
break;
case 17: /* 7.18 Memory Device */
- slot_num = next_slot_num;
- next_slot_num++;
+ slot_num = *next_slot_num;
+ *next_slot_num = slot_num + 1;
- log_debug("Memory Device");
+ log_debug("Memory Device: %u", slot_num);
if (h->length < 0x15)
break;
static void dmi_table_decode(const uint8_t *buf, size_t len, uint16_t num) {
const uint8_t *data = buf;
+ unsigned next_slot_num = 0;
/* 4 is the length of an SMBIOS structure header */
for (uint16_t i = 0; (i < num || num == 0) && data + 4 <= buf + len; i++) {
break;
if (display)
- dmi_decode(&h);
+ dmi_decode(&h, &next_slot_num);
data = next;
}
+ if (next_slot_num > 0)
+ printf("MEMORY_ARRAY_NUM_DEVICES=%u\n", next_slot_num);
}
static int dmi_table(int64_t base, uint32_t len, uint16_t num, const char *devmem, bool no_file_offset) {
MEMORY_ARRAY_LOCATION=System Board Or Motherboard
MEMORY_ARRAY_EC_TYPE=Multi-bit ECC
MEMORY_ARRAY_MAX_CAPACITY=12884901888
-MEMORY_ARRAY_NUM_DEVICES=3
MEMORY_ARRAY_LOCATION=System Board Or Motherboard
MEMORY_ARRAY_EC_TYPE=Multi-bit ECC
MEMORY_ARRAY_MAX_CAPACITY=12884901888
-MEMORY_ARRAY_NUM_DEVICES=3
MEMORY_DEVICE_0_TOTAL_WIDTH=72
MEMORY_DEVICE_0_DATA_WIDTH=64
MEMORY_DEVICE_0_SIZE=8589934592
MEMORY_DEVICE_6_SERIAL_NUMBER=Not Specified
MEMORY_DEVICE_6_ASSET_TAG=Not Specified
MEMORY_DEVICE_6_PART_NUMBER=Not Specified
+MEMORY_ARRAY_NUM_DEVICES=7
MEMORY_ARRAY_LOCATION=System Board Or Motherboard
MEMORY_ARRAY_MAX_CAPACITY=34359738368
-MEMORY_ARRAY_NUM_DEVICES=2
MEMORY_DEVICE_0_TOTAL_WIDTH=64
MEMORY_DEVICE_0_DATA_WIDTH=64
MEMORY_DEVICE_0_SIZE=4294967296
MEMORY_DEVICE_1_RANK=1
MEMORY_DEVICE_1_CONFIGURED_SPEED_MTS=2400
MEMORY_DEVICE_1_CONFIGURED_VOLTAGE=1
+MEMORY_ARRAY_NUM_DEVICES=2
MEMORY_ARRAY_LOCATION=System Board Or Motherboard
MEMORY_ARRAY_MAX_CAPACITY=68719476736
-MEMORY_ARRAY_NUM_DEVICES=4
MEMORY_DEVICE_0_TOTAL_WIDTH=64
MEMORY_DEVICE_0_DATA_WIDTH=64
MEMORY_DEVICE_0_SIZE=8589934592
MEMORY_DEVICE_3_MINIMUM_VOLTAGE=1
MEMORY_DEVICE_3_MAXIMUM_VOLTAGE=1
MEMORY_DEVICE_3_CONFIGURED_VOLTAGE=1
+MEMORY_ARRAY_NUM_DEVICES=4