Skip to content

Commit 4781138

Browse files
committed
add a cliloader option to print metric devices and exit
1 parent 7a73486 commit 4781138

File tree

2 files changed

+108
-4
lines changed

2 files changed

+108
-4
lines changed

cliloader/cliloader.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,11 @@ static bool parseArguments(int argc, char *argv[])
381381
printMetrics();
382382
return false;
383383
}
384+
else if (!strcmp(argv[i], "--metric-devices"))
385+
{
386+
printMetricDevices();
387+
return false;
388+
}
384389
#if defined(_WIN32)
385390
else if( !strcmp(argv[i], "--no-DLL-load") )
386391
{
@@ -591,6 +596,7 @@ static bool parseArguments(int argc, char *argv[])
591596
" --debug Enable cliloader Debug Messages\n"
592597
" --controls Print All Controls and Exit\n"
593598
" --metrics Print All MDAPI Metrics and Exit\n"
599+
" --metric-devices Print All MDAPI Devices and Exit\n"
594600
#if defined(_WIN32)
595601
" --no-DLL-load Do not load the Intercept DLL into the child process\n"
596602
#else // not Windows

cliloader/printmetrics.h

Lines changed: 102 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -192,10 +192,11 @@ static bool printMetricsForAdapterGroup(void* pLibrary)
192192
continue;
193193
}
194194

195-
fprintf(stderr, "\nAdapter: %s (%s)\n",
195+
fprintf(stderr, "\nAdapter %u: %s (%s)\n",
196+
a,
196197
pAdapterParams->ShortName,
197198
adapterTypeToString(pAdapterParams->Type));
198-
fprintf(stderr, "PCI Vendor Id: %04X, Device Id: %04X, Bus Info: %02X:%02X.%02X\n",
199+
fprintf(stderr, "\tPCI Vendor Id: %04X, Device Id: %04X, Bus Info: %02X:%02X.%02X\n",
199200
pAdapterParams->VendorId,
200201
pAdapterParams->DeviceId,
201202
pAdapterParams->BusNumber,
@@ -295,8 +296,6 @@ static bool printMetricsForLegacyDevice(void* pLibrary)
295296

296297
static bool printMetricsHelper()
297298
{
298-
TCompletionCode res = CC_OK;
299-
300299
void* pLibrary = OpenLibrary();
301300
if (pLibrary == NULL)
302301
{
@@ -313,9 +312,108 @@ static bool printMetricsHelper()
313312
return success;
314313
}
315314

315+
static bool printMetricDevicesForAdapterGroup(void* pLibrary)
316+
{
317+
TCompletionCode res = CC_OK;
318+
319+
OpenAdapterGroup_fn OpenAdapterGroup;
320+
OpenAdapterGroup = (OpenAdapterGroup_fn)GetFunctionAddress(pLibrary, "OpenAdapterGroup");
321+
if (OpenAdapterGroup == NULL)
322+
{
323+
fprintf(stderr, "Couldn't get pointer to OpenAdapterGroup!\n");
324+
return false;
325+
}
326+
327+
IAdapterGroupLatest* pAdapterGroup = NULL;
328+
res = OpenAdapterGroup(&pAdapterGroup);
329+
if (res != CC_OK)
330+
{
331+
fprintf(stderr, "OpenAdapterGroup failed, res: %d\n", res);
332+
return false;
333+
}
334+
335+
const TAdapterGroupParamsLatest* pAdapterGroupParams = pAdapterGroup->GetParams();
336+
if (NULL == pAdapterGroupParams)
337+
{
338+
fprintf(stderr, "AdapterGroup->GetParams() returned NULL\n");
339+
return false;
340+
}
341+
342+
fprintf(stderr, "MDAPI Headers: v%d.%d.%d, MDAPI Lib: v%d.%d.%d\n",
343+
MD_API_MAJOR_NUMBER_CURRENT,
344+
MD_API_MINOR_NUMBER_CURRENT,
345+
MD_API_BUILD_NUMBER_CURRENT,
346+
pAdapterGroupParams->Version.MajorNumber,
347+
pAdapterGroupParams->Version.MinorNumber,
348+
pAdapterGroupParams->Version.BuildNumber);
349+
if (pAdapterGroupParams->Version.MajorNumber < 1 ||
350+
(pAdapterGroupParams->Version.MajorNumber == 1 && pAdapterGroupParams->Version.MinorNumber < 1))
351+
{
352+
fprintf(stderr, "MDAPI Lib version must be at least v1.1!\n");
353+
}
354+
else
355+
{
356+
fprintf(stderr, "Found %u MDAPI Adapter%s.\n\n",
357+
pAdapterGroupParams->AdapterCount,
358+
pAdapterGroupParams->AdapterCount > 1 ? "s" : "");
359+
for (uint32_t a = 0; a < pAdapterGroupParams->AdapterCount; a++)
360+
{
361+
IAdapterLatest* pAdapter = pAdapterGroup->GetAdapter(a);
362+
if (NULL == pAdapter)
363+
{
364+
fprintf(stderr, "AdapterGroup->GetAdapter() returned NULL, skipping adapter.\n");
365+
continue;
366+
}
367+
368+
const TAdapterParamsLatest* pAdapterParams = pAdapter->GetParams();
369+
if (NULL == pAdapterParams)
370+
{
371+
fprintf(stderr, "Adapter->GetParams() returned NULL, skipping adapter.\n");
372+
continue;
373+
}
374+
375+
fprintf(stderr, "\nAdapter %u: %s (%s)\n",
376+
a,
377+
pAdapterParams->ShortName,
378+
adapterTypeToString(pAdapterParams->Type));
379+
fprintf(stderr, "\tPCI Vendor Id: %04X, Device Id: %04X, Bus Info: %02X:%02X.%02X\n",
380+
pAdapterParams->VendorId,
381+
pAdapterParams->DeviceId,
382+
pAdapterParams->BusNumber,
383+
pAdapterParams->DeviceNumber,
384+
pAdapterParams->FunctionNumber);
385+
}
386+
}
387+
388+
res = pAdapterGroup->Close();
389+
if (res != CC_OK)
390+
{
391+
fprintf(stderr, "AdapterGroup->Close() failed, res: %d\n", res);
392+
}
393+
394+
return true;
395+
}
396+
397+
static bool printMetricDevicesHelper()
398+
{
399+
void* pLibrary = OpenLibrary();
400+
if (pLibrary == NULL)
401+
{
402+
fprintf(stderr, "Couldn't load metrics discovery library!\n");
403+
return false;
404+
}
405+
406+
return printMetricDevicesForAdapterGroup(pLibrary);
407+
}
408+
316409
};
317410

318411
static void printMetrics()
319412
{
320413
MetricsDiscovery::printMetricsHelper();
321414
}
415+
416+
static void printMetricDevices()
417+
{
418+
MetricsDiscovery::printMetricDevicesHelper();
419+
}

0 commit comments

Comments
 (0)