PhysicalDisk (Linux): detect firmware revision

This commit is contained in:
Carter Li
2023-12-25 16:32:34 +08:00
parent 5e85864ab0
commit b2cabd2af7
2 changed files with 17 additions and 0 deletions
@@ -21,6 +21,7 @@ typedef struct FFPhysicalDiskResult
FFstrbuf interconnect;
FFstrbuf serial;
FFstrbuf devPath;
FFstrbuf firmwareRev;
FFPhysicalDiskType type;
uint64_t size;
} FFPhysicalDiskResult;
@@ -56,6 +56,15 @@ const char* ffDetectPhysicalDisk(FFlist* result, FFPhysicalDiskOptions* options)
if (device->name.length == 0)
ffStrbufSetS(&device->name, devName);
char diskseq[8] = "";
snprintf(pathSysBlock, PATH_MAX, "/sys/block/%s/diskseq", devName);
ffReadFileData(pathSysBlock, sizeof(diskseq) - 1, diskseq);
char* lineEnding = strchr(diskseq, '\n');
if (lineEnding)
*lineEnding = '\0';
if (!ffStrEquals(diskseq, "1"))
ffStrbufAppendF(&device->name, "-%s", diskseq);
if (options->namePrefix.length && !ffStrbufStartsWith(&device->name, &options->namePrefix))
{
ffStrbufDestroy(&device->name);
@@ -122,6 +131,13 @@ const char* ffDetectPhysicalDisk(FFlist* result, FFPhysicalDiskOptions* options)
if (ffReadFileBuffer(pathSysBlock, &device->serial))
ffStrbufTrimRightSpace(&device->serial);
}
{
ffStrbufInit(&device->firmwareRev);
snprintf(pathSysBlock, PATH_MAX, "/sys/block/%s/device/firmware_rev", devName);
if (ffReadFileBuffer(pathSysBlock, &device->firmwareRev))
ffStrbufTrimRightSpace(&device->firmwareRev);
}
}
return NULL;