X-Git-Url: http://git.wpitchoune.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fnvidia.c;h=65cc9a7038ae67dd7ce55268cb2900c520985d65;hb=657fdb64bf68148a9480da1528b1af017ece4f00;hp=5a8a203f6ba50695fd94dd6312dbad94d70b03ef;hpb=8631d4513caba53ac4bbcd19cf807ca10bab2c71;p=psensor.git diff --git a/src/lib/nvidia.c b/src/lib/nvidia.c index 5a8a203..65cc9a7 100644 --- a/src/lib/nvidia.c +++ b/src/lib/nvidia.c @@ -34,10 +34,20 @@ #include #include -Display *display; +static Display *display; 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; @@ -220,15 +230,18 @@ static double get_value(int id, int type) static void update(struct psensor *sensor) { double v; + int id; + + id = get_nvidia_id(sensor); - v = get_value(sensor->nvidia_id, sensor->type); + v = get_value(id, sensor->type); if (v == UNKNOWN_DBL_VALUE) log_err(_("%s: Failed to retrieve measure of type %x " "for NVIDIA GPU %d"), PROVIDER_NAME, sensor->type, - sensor->nvidia_id); + id); psensor_set_current_value(sensor, v); } @@ -259,6 +272,7 @@ static struct psensor *create_nvidia_sensor(int id, int subtype, int value_len) int type; size_t n; struct psensor *s; + double v; type = SENSOR_TYPE_NVCTRL | subtype; @@ -277,7 +291,15 @@ static struct psensor *create_nvidia_sensor(int id, int subtype, int value_len) sprintf(sid, "%s %s", PROVIDER_NAME, name); s = psensor_create(sid, name, pname, type, value_len); - s->nvidia_id = id; + s->provider_data = malloc(sizeof(int)); + set_nvidia_id(s, id); + + if ((type & SENSOR_TYPE_GPU) && (type & SENSOR_TYPE_TEMP)) { + v = get_att(NV_CTRL_TARGET_TYPE_GPU, + id, + NV_CTRL_GPU_CORE_THRESHOLD); + s->max = v; + } free(strnid);