PhysicalMemory: detect ecc & bank locator

This commit is contained in:
李通洲
2024-05-12 19:55:04 +08:00
parent df6ab6427e
commit df2862996b
4 changed files with 28 additions and 13 deletions
@@ -9,10 +9,11 @@ typedef struct FFPhysicalMemoryResult
uint32_t runningSpeed; // MT/s
FFstrbuf type;
FFstrbuf formFactor;
FFstrbuf deviceLocator;
FFstrbuf locator;
FFstrbuf partNumber;
FFstrbuf vendor;
FFstrbuf serial;
bool ecc;
} FFPhysicalMemoryResult;
const char* ffDetectPhysicalMemory(FFlist* result); // list of FFPhysicalMemoryResult
@@ -12,15 +12,16 @@ static void appendDevice(
NSString* size,
// Intel only
NSString* deviceLocator,
NSString* locator,
NSString* serial,
NSString* partNumber,
NSString* speed)
NSString* speed,
bool ecc)
{
FFPhysicalMemoryResult* device = ffListAdd(result);
ffStrbufInitS(&device->type, type.UTF8String);
ffStrbufInit(&device->formFactor);
ffStrbufInitS(&device->deviceLocator, deviceLocator.UTF8String);
ffStrbufInitS(&device->locator, locator.UTF8String);
ffStrbufInitS(&device->vendor, vendor.UTF8String);
ffCleanUpSmbiosValue(&device->vendor);
ffStrbufInitS(&device->serial, serial.UTF8String);
@@ -30,6 +31,7 @@ static void appendDevice(
device->size = 0;
device->maxSpeed = 0;
device->runningSpeed = 0;
device->ecc = ecc;
if (size)
{
@@ -96,7 +98,8 @@ const char* ffDetectPhysicalMemory(FFlist* result)
item[@"_name"],
item[@"dimm_serial_number"],
item[@"dimm_part_number"],
item[@"dimm_speed"]);
item[@"dimm_speed"],
!![data[@"global_ecc_state"] isEqualToString:@"ecc_enabled"]);
}
}
else
@@ -109,7 +112,8 @@ const char* ffDetectPhysicalMemory(FFlist* result)
nil,
nil,
nil,
nil);
nil,
false);
}
}
@@ -85,13 +85,17 @@ const char* ffDetectPhysicalMemory(FFlist* result)
FFPhysicalMemoryResult* device = ffListAdd(result);
ffStrbufInit(&device->type);
ffStrbufInit(&device->formFactor);
ffStrbufInit(&device->deviceLocator);
ffStrbufInit(&device->locator);
ffStrbufInit(&device->vendor);
ffStrbufInit(&device->serial);
ffStrbufInit(&device->partNumber);
device->size = 0;
device->maxSpeed = 0;
device->runningSpeed = 0;
device->ecc = false;
if (data->TotalWidth != 0xFFFF && data->DataWidth != 0xFFFF)
device->ecc = data->TotalWidth > data->DataWidth;
if (data->Size != 0xFFFF)
{
@@ -109,8 +113,7 @@ const char* ffDetectPhysicalMemory(FFlist* result)
}
}
ffStrbufSetStatic(&device->deviceLocator, ffSmbiosLocateString(strings, data->DeviceLocator));
ffCleanUpSmbiosValue(&device->deviceLocator);
ffStrbufSetF(&device->locator, "%s/%s", ffSmbiosLocateString(strings, data->BankLocator), ffSmbiosLocateString(strings, data->DeviceLocator));
switch (data->FormFactor)
{