|
32 | 32 |
|
33 | 33 | static bool pciDetectDriver(FFGPUResult* gpu, FFstrbuf* pciDir, FFstrbuf* buffer, FF_MAYBE_UNUSED const char* drmKey) |
34 | 34 | { |
| 35 | + uint32_t pciDirLength = pciDir->length; |
35 | 36 | ffStrbufAppendS(pciDir, "/driver"); |
36 | 37 | char pathBuf[PATH_MAX]; |
37 | 38 | ssize_t resultLength = readlink(pciDir->chars, pathBuf, sizeof(pathBuf)); |
38 | | - if(resultLength > 0) |
| 39 | + if(resultLength <= 0) return false; |
| 40 | + |
| 41 | + const char* slash = memrchr(pathBuf, '/', (size_t) resultLength); |
| 42 | + if (slash) |
39 | 43 | { |
40 | | - const char* slash = memrchr(pathBuf, '/', (size_t) resultLength); |
41 | | - if (slash) |
42 | | - { |
43 | | - slash++; |
44 | | - ffStrbufSetNS(&gpu->driver, (uint32_t) (resultLength - (slash - pathBuf)), slash); |
45 | | - } |
| 44 | + slash++; |
| 45 | + ffStrbufSetNS(&gpu->driver, (uint32_t) (resultLength - (slash - pathBuf)), slash); |
| 46 | + } |
46 | 47 |
|
| 48 | + if (instance.config.general.detectVersion) |
| 49 | + { |
47 | 50 | ffStrbufAppendS(pciDir, "/module/version"); |
48 | 51 | if (ffReadFileBuffer(pciDir->chars, buffer)) |
49 | 52 | { |
50 | 53 | ffStrbufTrimRightSpace(buffer); |
51 | 54 | ffStrbufAppendC(&gpu->driver, ' '); |
52 | 55 | ffStrbufAppend(&gpu->driver, buffer); |
53 | | - return true; |
| 56 | + } |
| 57 | + else if (ffStrbufEqualS(&gpu->driver, "zx")) |
| 58 | + { |
| 59 | + ffStrbufSubstrBefore(pciDir, pciDirLength); |
| 60 | + ffStrbufAppendS(pciDir, "/zx_info/driver_version"); |
| 61 | + if (ffReadFileBuffer(pciDir->chars, buffer)) |
| 62 | + { |
| 63 | + ffStrbufTrimRightSpace(buffer); |
| 64 | + ffStrbufAppendC(&gpu->driver, ' '); |
| 65 | + ffStrbufAppend(&gpu->driver, buffer); |
| 66 | + } |
54 | 67 | } |
55 | 68 | } |
56 | 69 |
|
57 | | - return false; |
| 70 | + return true; |
58 | 71 | } |
59 | 72 |
|
60 | 73 | static void pciDetectAmdSpecific(const FFGPUOptions* options, FFGPUResult* gpu, FFstrbuf* pciDir, FFstrbuf* buffer) |
|
0 commit comments