+static const char *PROVIDER_NAME = "nvctrl";
+
+static void set_nvidia_id(struct psensor *s, int id)
+{
+ *(int *)s->provider_data = id;
+}
+
+static int get_nvidia_id(struct psensor *s)
+{
+ return *(int *)s->provider_data;
+}
+
+static char *get_product_name(int id, int type)
+{
+ char *name;
+ Bool res;
+
+ if (type & SENSOR_TYPE_FAN)
+ return strdup("NVIDIA");
+
+ res = XNVCTRLQueryTargetStringAttribute(display,
+ NV_CTRL_TARGET_TYPE_GPU,
+ id,
+ 0,
+ NV_CTRL_STRING_PRODUCT_NAME,
+ &name);
+ if (res == True) {
+ if (strcmp(name, "Unknown"))
+ return name;
+
+ log_err(_("%s: Unknown NVIDIA product name for GPU %d"),
+ PROVIDER_NAME,
+ id);
+ free(name);
+ } else {
+ log_err(_("%s: "
+ "Failed to retrieve NVIDIA product name for GPU %d"),
+ PROVIDER_NAME,
+ id);
+ }
+
+ return strdup("NVIDIA");
+}
+
+static double get_att(int target, int id, int att)