+ if (s)
+ psensor_list_append(sensors, s);
+}
+
+void nvidia_psensor_list_append(struct psensor ***ss, int values_len)
+{
+ int i, n, utype;
+ Bool ret;
+
+ if (!init())
+ return;
+
+ ret = XNVCTRLQueryTargetCount(display, NV_CTRL_TARGET_TYPE_GPU, &n);
+ if (ret == True) {
+ for (i = 0; i < n; i++) {
+ add(ss,
+ i,
+ SENSOR_TYPE_GPU | SENSOR_TYPE_TEMP,
+ values_len);
+
+ utype = SENSOR_TYPE_GPU | SENSOR_TYPE_PERCENT;
+ add(ss, i, utype | SENSOR_TYPE_AMBIENT, values_len);
+ add(ss, i, utype | SENSOR_TYPE_GRAPHICS, values_len);
+ add(ss, i, utype | SENSOR_TYPE_VIDEO, values_len);
+ add(ss, i, utype | SENSOR_TYPE_MEMORY, values_len);
+ add(ss, i, utype | SENSOR_TYPE_PCIE, values_len);
+ }
+ }
+
+ ret = XNVCTRLQueryTargetCount(display, NV_CTRL_TARGET_TYPE_COOLER, &n);
+ if (ret == True) {
+ log_fct("%s: Number of fans: %d", PROVIDER_NAME, n);
+ for (i = 0; i < n; i++) {
+ utype = SENSOR_TYPE_FAN | SENSOR_TYPE_RPM;
+ if (check_sensor(i, utype))
+ add(ss, i, utype, values_len);
+
+ utype = SENSOR_TYPE_FAN | SENSOR_TYPE_PERCENT;
+ if (check_sensor(i, utype))
+ add(ss, i, utype, values_len);
+ }
+ } else {
+ log_err(_("%s: Failed to retrieve number of fans."),
+ PROVIDER_NAME);
+ }
+}
+
+void nvidia_cleanup(void)
+{
+ if (display) {
+ XCloseDisplay(display);
+ display = NULL;
+ }