Files
TheRock/rocm-systems/projects/rocm-smi-lib/oam/example/oam_example.c
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

118 lines
4.2 KiB
C

#include <stdio.h>
#include "oam/amd_oam.h"
#include "oam/oam_mapi.h"
const oam_ops_t amd_oam_ops = {
.init = amdoam_init,
.free = amdoam_free,
// .get_mapi_version = amdoam_get_mapi_version,
.discover_devices = amdoam_discover_devices,
.get_dev_properties = amdoam_get_dev_properties,
.get_pci_properties = amdoam_get_pci_properties,
.get_sensors_count = amdoam_get_sensors_count,
.get_error_description = amdoam_get_error_description,
.get_sensors_info = amdoam_get_sensors_info,
};
static int get_sensor_info(uint32_t device_id, oam_sensor_type_t type, uint32_t num_sensors,
char unit[]) {
uint32_t j;
oam_sensor_info_t* sensor_info = calloc(num_sensors, sizeof(oam_sensor_info_t));
if (!sensor_info) {
printf("Allocating power_info failed\n");
return -1;
}
amd_oam_ops.get_sensors_info(device_id, type, num_sensors, sensor_info);
for (j = 0; j < num_sensors; j++) {
printf("\tSensor Name : %s \n", sensor_info[j].sensor_name);
printf("\tSensor Type : %d \n", sensor_info[j].sensor_type);
printf("\tSensor Value : %ld %s\n", sensor_info[j].value, unit);
}
free(sensor_info);
printf("\t**************************************\n");
return 0;
}
int main() {
uint32_t dev_cnt = 0;
oam_mapi_version_t version;
oam_dev_properties_t* devs_prop;
int i;
oam_pci_info_t pci_info;
oam_sensor_count_t sensor_count;
const char* string;
if (amd_oam_ops.init()) {
printf("init failed\n");
return -1;
}
// amd_oam_ops.get_mapi_version(&version);
if (!amd_oam_ops.discover_devices(&dev_cnt)) printf("%u AMD devices are discovered\n", dev_cnt);
if (!dev_cnt) {
printf("No devices are found.\n");
return amd_oam_ops.free();
}
devs_prop = calloc(dev_cnt, sizeof(oam_dev_properties_t));
if (!devs_prop) {
printf("Allocating dev_prop failed\n");
return amd_oam_ops.free();
}
amd_oam_ops.get_dev_properties(dev_cnt, devs_prop);
for (i = 0; i < dev_cnt; i++) {
printf("Device %d:\n", i);
printf("\tdevice id %d\n", devs_prop[i].device_id);
printf("\tdevice_vendor %s\n", devs_prop[i].device_vendor);
printf("\tdevice_name %s\n", devs_prop[i].device_name);
printf("\tsku_name %s\n", devs_prop[i].sku_name);
printf("\tboard_name %s\n", devs_prop[i].board_name);
printf("\tboard_revision %s\n", devs_prop[i].board_revision);
printf("\tboard_serial_number %s\n", devs_prop[i].board_serial_number);
if (!amd_oam_ops.get_pci_properties(devs_prop[i].device_id, &pci_info)) {
printf("\tPCI domain : 0x%d \n", pci_info.domain);
printf("\tPCI bus : 0x%d \n", pci_info.bus);
printf("\tPCI device : 0x%d \n", pci_info.device);
printf("\tPCI function : 0x%d \n", pci_info.function);
}
printf("\t**************************************\n");
if (amd_oam_ops.get_sensors_count(devs_prop[i].device_id, &sensor_count)) continue;
printf("\tNumber of Power Sensors : %d \n", sensor_count.num_power_sensors);
if (get_sensor_info(devs_prop[i].device_id, OAM_SENSOR_TYPE_POWER,
sensor_count.num_power_sensors, "uW"))
goto failure;
printf("\tNumber of Voltage Sensors : %d \n", sensor_count.num_voltage_sensors);
if (get_sensor_info(devs_prop[i].device_id, OAM_SENSOR_TYPE_VOLTAGE,
sensor_count.num_voltage_sensors, "mV"))
goto failure;
printf("\tNumber of Current Sensors : %d \n", sensor_count.num_current_sensors);
if (get_sensor_info(devs_prop[i].device_id, OAM_SENSOR_TYPE_CURRENT,
sensor_count.num_current_sensors, "A"))
goto failure;
printf("\tNumber of Temperature Sensors : %d \n", sensor_count.num_temperature_sensors);
if (get_sensor_info(devs_prop[i].device_id, OAM_SENSOR_TYPE_TEMP,
sensor_count.num_temperature_sensors, "mC"))
goto failure;
printf("\tNumber of Fan Sensors : %d \n", sensor_count.num_fans);
if (get_sensor_info(devs_prop[i].device_id, OAM_SENSOR_TYPE_FAN_SPEED, sensor_count.num_fans,
"rpm"))
goto failure;
}
amd_oam_ops.get_error_description(1, &string);
printf("error code 1: %s\n", string);
failure:
free(devs_prop);
amd_oam_ops.free();
return 0;
}