PAPI 7.1.0.0
Loading...
Searching...
No Matches
linux-lmsensors.c File Reference

This file has the source code for a component that enables PAPI-C to access hardware monitoring sensors through the libsensors library. This code will dynamically create a native events table for all the sensors that can be accesed by the libsensors library. In order to learn more about libsensors, visit: (http://www.lm-sensors.org) More...

Include dependency graph for linux-lmsensors.c:

Go to the source code of this file.

Data Structures

struct  _lmsensors_register_t
 
struct  _lmsensors_native_event_entry_t
 
struct  _lmsensors_reg_alloc_t
 
struct  _lmsensors_control_state_t
 
struct  _lmsensors_context_t
 

Macros

#define LM_SENSORS_REFRESHTIME   200000
 

Functions

static unsigned createNativeEvents (void)
 
static long_long getEventValue (unsigned event_id)
 
static int _lmsensors_init_thread (hwd_context_t *ctx)
 
static int _lmsensors_init_component (int cidx)
 
static int link_lmsensors_libraries ()
 
static int _lmsensors_init_control_state (hwd_control_state_t *ctl)
 
static int _lmsensors_start (hwd_context_t *ctx, hwd_control_state_t *ctl)
 
static int _lmsensors_stop (hwd_context_t *ctx, hwd_control_state_t *ctl)
 
static int _lmsensors_read (hwd_context_t *ctx, hwd_control_state_t *ctl, long_long **events, int flags)
 
static int _lmsensors_shutdown_component (void)
 
static int _lmsensors_shutdown_thread (hwd_context_t *ctx)
 
static int _lmsensors_ctl (hwd_context_t *ctx, int code, _papi_int_option_t *option)
 
static int _lmsensors_update_control_state (hwd_control_state_t *ctl, NativeInfo_t *native, int count, hwd_context_t *ctx)
 
static int _lmsensors_set_domain (hwd_control_state_t *ctl, int domain)
 
static int _lmsensors_reset (hwd_context_t *ctx, hwd_control_state_t *ctl)
 
static int _lmsensors_ntv_enum_events (unsigned int *EventCode, int modifier)
 
static int _lmsensors_ntv_code_to_name (unsigned int EventCode, char *name, int len)
 
static int _lmsensors_ntv_code_to_descr (unsigned int EventCode, char *name, int len)
 

Variables

static _lmsensors_native_event_entry_tlm_sensors_native_table
 
static int num_events = 0
 
static long_longcached_counts = NULL
 
static int(* sensors_initPtr )(FILE *input)
 
static void(* sensors_cleanupPtr )(void)
 
static int(* sensors_snprintf_chip_namePtr )(char *str, size_t size, const sensors_chip_name *chip)
 
static char *(* sensors_get_labelPtr )(const sensors_chip_name *name, const sensors_feature *feature)
 
static int(* sensors_get_valuePtr )(const sensors_chip_name *name, int subfeat_nr, double *value)
 
static const sensors_chip_name *(* sensors_get_detected_chipsPtr )(const sensors_chip_name *match, int *nr)
 
static const sensors_feature *(* sensors_get_featuresPtr )(const sensors_chip_name *name, int *nr)
 
static const sensors_subfeature *(* sensors_get_all_subfeaturesPtr )(const sensors_chip_name *name, const sensors_feature *feature, int *nr)
 
static void * dl1 = NULL
 
static char lmsensors_main [] =PAPI_LMSENSORS_MAIN
 
void(* _dl_non_dynamic_init )(void)
 
papi_vector_t _lmsensors_vector
 

Detailed Description

Author
Daniel Lucio
Joachim Protze
Heike Jagode jagod.nosp@m.e@ee.nosp@m.cs.ut.nosp@m.k.ed.nosp@m.u

LM_SENSORS component

Tested version of lm_sensors: 3.1.1

Notes:

  • I used the ACPI and MX components to write this component. A lot of the code in this file mimics what other components already do.
  • The return values are scaled by 1000 because PAPI can not return decimals.
  • A call of PAPI_read can take up to 2 seconds while using lm_sensors!
  • Please remember that libsensors uses the GPL license.

Definition in file linux-lmsensors.c.

Macro Definition Documentation

◆ LM_SENSORS_REFRESHTIME

#define LM_SENSORS_REFRESHTIME   200000

Definition at line 47 of file linux-lmsensors.c.

Function Documentation

◆ _lmsensors_ctl()

static int _lmsensors_ctl ( hwd_context_t ctx,
int  code,
_papi_int_option_t option 
)
static

Definition at line 581 of file linux-lmsensors.c.

582{
583 ( void ) ctx;
584 ( void ) code;
585 ( void ) option;
586 return PAPI_OK;
587}
#define PAPI_OK
Definition: f90papi.h:73

◆ _lmsensors_init_component()

static int _lmsensors_init_component ( int  cidx)
static

Definition at line 292 of file linux-lmsensors.c.

293{
294 int res;
295 (void) cidx;
296
297 /* link in all the lmsensor libraries and resolve the symbols we need to use */
299 SUBDBG ("Dynamic link of lmsensors libraries failed, component will be disabled.\n");
300 SUBDBG ("See disable reason in papi_component_avail output for more details.\n");
301 res = PAPI_ENOSUPP;
302 goto fn_fail;
303 }
304
305 /* Initialize libsensors library */
306 if ( ( res = sensors_initPtr( NULL ) ) != 0 ) {
308 "Cannot enable libsensors",PAPI_MAX_STR_LEN);
309 goto fn_fail;
310 }
311
312 /* Create dyanmic events table */
313 num_events = detectSensors( );
314 SUBDBG("Found %d sensors\n",num_events);
315
318
320 calloc( num_events, sizeof ( _lmsensors_native_event_entry_t )))
321 == NULL ) {
323 "Could not malloc room",PAPI_MAX_STR_LEN);
324 res = PAPI_ENOMEM;
325 goto fn_fail;
326 }
327
328 cached_counts = (long long*) calloc(num_events, sizeof(long long));
329
330 if (cached_counts == NULL) {
332 "Could not malloc room",PAPI_MAX_STR_LEN);
335 res = PAPI_ENOMEM;
336 goto fn_fail;
337 }
338
339 if ( ( unsigned ) num_events != createNativeEvents( ) ) {
341 "LM_SENSOR number mismatch",PAPI_MAX_STR_LEN);
342 free(cached_counts);
343 cached_counts = NULL;
346 res = PAPI_ECMP;
347 goto fn_fail;
348 }
349
352
353 fn_exit:
354 _papi_hwd[cidx]->cmp_info.disabled = res;
355 return res;
356 fn_fail:
357 goto fn_exit;
358}
struct papi_vectors * _papi_hwd[]
#define PAPI_ENOSUPP
Definition: f90papi.h:244
#define PAPI_MAX_STR_LEN
Definition: f90papi.h:77
#define PAPI_ECMP
Definition: f90papi.h:214
#define PAPI_ENOMEM
Definition: f90papi.h:16
static _lmsensors_native_event_entry_t * lm_sensors_native_table
static long_long * cached_counts
static int num_events
papi_vector_t _lmsensors_vector
static unsigned createNativeEvents(void)
static int(* sensors_initPtr)(FILE *input)
static int link_lmsensors_libraries()
#define SUBDBG(format, args...)
Definition: papi_debug.h:64
static int cidx
char disabled_reason[PAPI_HUGE_STR_LEN]
Definition: papi.h:634
PAPI_component_info_t cmp_info
Definition: papi_vector.h:20
Here is the call graph for this function:

◆ _lmsensors_init_control_state()

static int _lmsensors_init_control_state ( hwd_control_state_t ctl)
static

Definition at line 481 of file linux-lmsensors.c.

482{
483 int i;
484
485 for ( i = 0; i < num_events; i++ )
487
488 ( ( _lmsensors_control_state_t * ) ctl )->lastupdate =
490 return PAPI_OK;
491}
int i
get real time counter value in microseconds
static long_long getEventValue(unsigned event_id)
Here is the call graph for this function:

◆ _lmsensors_init_thread()

static int _lmsensors_init_thread ( hwd_context_t ctx)
static

Definition at line 280 of file linux-lmsensors.c.

281{
282 ( void ) ctx;
283 return PAPI_OK;
284}

◆ _lmsensors_ntv_code_to_descr()

static int _lmsensors_ntv_code_to_descr ( unsigned int  EventCode,
char *  name,
int  len 
)
static

Definition at line 686 of file linux-lmsensors.c.

687{
688 int index = EventCode;
689
690 if (index>=0 && index<num_events) {
691 strncpy( name, lm_sensors_native_table[index].description, len );
692 }
693 return PAPI_OK;
694}
const char * name
Definition: rocs.c:225

◆ _lmsensors_ntv_code_to_name()

static int _lmsensors_ntv_code_to_name ( unsigned int  EventCode,
char *  name,
int  len 
)
static

Definition at line 671 of file linux-lmsensors.c.

672{
673 int index = EventCode;
674
675 if (index>=0 && index<num_events) {
676 strncpy( name, lm_sensors_native_table[index].name, len );
677 }
678
679 return PAPI_OK;
680}

◆ _lmsensors_ntv_enum_events()

static int _lmsensors_ntv_enum_events ( unsigned int EventCode,
int  modifier 
)
static

Definition at line 639 of file linux-lmsensors.c.

640{
641
642 switch ( modifier ) {
643 case PAPI_ENUM_FIRST:
644 *EventCode = 0;
645
646 return PAPI_OK;
647 break;
648
649 case PAPI_ENUM_EVENTS:
650 {
651 int index = *EventCode;
652
653 if ( index < num_events - 1 ) {
654 *EventCode = *EventCode + 1;
655 return PAPI_OK;
656 } else
657 return PAPI_ENOEVNT;
658
659 break;
660 }
661 default:
662 return PAPI_EINVAL;
663 }
664 return PAPI_EINVAL;
665}
#define PAPI_ENUM_EVENTS
Definition: f90papi.h:224
#define PAPI_ENUM_FIRST
Definition: f90papi.h:85
#define PAPI_ENOEVNT
Definition: f90papi.h:139
#define PAPI_EINVAL
Definition: f90papi.h:115

◆ _lmsensors_read()

static int _lmsensors_read ( hwd_context_t ctx,
hwd_control_state_t ctl,
long_long **  events,
int  flags 
)
static

Definition at line 524 of file linux-lmsensors.c.

526{
527 ( void ) ctx;
528 ( void ) flags;
529 long long start = PAPI_get_real_usec( );
530 int i;
531
533
534 if ( start - control->lastupdate > 200000 ) { // cache refresh
535
536 for ( i = 0; i < num_events; i++ ) {
538 }
539 control->lastupdate = PAPI_get_real_usec( );
540 }
541
543 return PAPI_OK;
544}
char events[MAX_EVENTS][BUFSIZ]
static struct timeval start
Here is the call graph for this function:

◆ _lmsensors_reset()

static int _lmsensors_reset ( hwd_context_t ctx,
hwd_control_state_t ctl 
)
static

Definition at line 627 of file linux-lmsensors.c.

628{
629 ( void ) ctx;
630 ( void ) ctl;
631 return PAPI_OK;
632}

◆ _lmsensors_set_domain()

static int _lmsensors_set_domain ( hwd_control_state_t ctl,
int  domain 
)
static

Definition at line 613 of file linux-lmsensors.c.

614{
615 (void) ctl;
616 if ( PAPI_DOM_ALL != domain )
617 return ( PAPI_EINVAL );
618
619 return ( PAPI_OK );
620}
#define PAPI_DOM_ALL
Definition: f90papi.h:261

◆ _lmsensors_shutdown_component()

static int _lmsensors_shutdown_component ( void  )
static

Definition at line 548 of file linux-lmsensors.c.

549{
550 if (cached_counts) {
551 free(cached_counts);
552 cached_counts = NULL;
553 }
554
555 /* Call the libsensors cleaning function before leaving */
557
561 }
562
563 return PAPI_OK;
564}
static void(* sensors_cleanupPtr)(void)

◆ _lmsensors_shutdown_thread()

static int _lmsensors_shutdown_thread ( hwd_context_t ctx)
static

Definition at line 567 of file linux-lmsensors.c.

568{
569 ( void ) ctx;
570
571 return PAPI_OK;
572}

◆ _lmsensors_start()

static int _lmsensors_start ( hwd_context_t ctx,
hwd_control_state_t ctl 
)
static

Definition at line 498 of file linux-lmsensors.c.

499{
500 ( void ) ctx;
501 ( void ) ctl;
502
503 return PAPI_OK;
504}

◆ _lmsensors_stop()

static int _lmsensors_stop ( hwd_context_t ctx,
hwd_control_state_t ctl 
)
static

Definition at line 511 of file linux-lmsensors.c.

512{
513 ( void ) ctx;
514 ( void ) ctl;
515
516 return PAPI_OK;
517}

◆ _lmsensors_update_control_state()

static int _lmsensors_update_control_state ( hwd_control_state_t ctl,
NativeInfo_t native,
int  count,
hwd_context_t ctx 
)
static

Definition at line 591 of file linux-lmsensors.c.

595{
596 int i, index;
597 ( void ) ctx;
598 ( void ) ctl;
599
600 for ( i = 0; i < count; i++ ) {
601 index = native[i].ni_event;
602 native[i].ni_position =
604 }
605 return PAPI_OK;
606}
static long count
static int native
_lmsensors_register_t resources

◆ createNativeEvents()

static unsigned createNativeEvents ( void  )
static

Definition at line 171 of file linux-lmsensors.c.

172{
173 unsigned id = 0;
174 int chip_nr = 0;
175 const sensors_chip_name *chip_name;
176
177 /* component name and description */
178 strcpy( _lmsensors_vector.cmp_info.short_name, "lmsensors" );
180 "lm-sensors provides tools for monitoring the hardware health" );
181
182
183 /* Loop through all the chips found */
184 while ( ( chip_name =
185 sensors_get_detected_chipsPtr( NULL, &chip_nr ) ) != NULL ) {
186 int a, b;
187 const sensors_feature *feature;
188 const sensors_subfeature *sub;
189 char chipnamestring[PAPI_MIN_STR_LEN];
190
191 // lm_sensors_native_table[id].count = 0;
192
193 /* get chip name from its internal representation */
194 sensors_snprintf_chip_namePtr( chipnamestring,
195 PAPI_MIN_STR_LEN, chip_name );
196
197 a = 0;
198
199 /* Loop through all the features found */
200 while ( ( feature = sensors_get_featuresPtr( chip_name, &a ) ) ) {
201 char *featurelabel;
202
203 if ( !( featurelabel = sensors_get_labelPtr( chip_name, feature ))) {
204 fprintf( stderr, "ERROR: Can't get label of feature %s!\n",
205 feature->name );
206 continue;
207 }
208
209 b = 0;
210
211 /* Loop through all the subfeatures found */
212 while ((sub=sensors_get_all_subfeaturesPtr(chip_name,feature,&b))) {
213
214 /* replace spaces with underscores */
215 char *ptr;
216 while( (ptr = strchr(featurelabel, ' ')) != NULL ){ *ptr = '_'; }
217
218 /* Save native event data */
219 sprintf( lm_sensors_native_table[id].name, "%s.%s.%s",
220 chipnamestring, featurelabel, sub->name );
221
222 strncpy( lm_sensors_native_table[id].description,
225
226 /* The selector has to be !=0 . Starts with 1 */
228
229 /* Save the actual references to this event */
230 lm_sensors_native_table[id].resources.name = chip_name;
232
233 /* increment the table index counter */
234 id++;
235 }
236
237 // lm_sensors_native_table[id].count = count + 1;
238 free( featurelabel );
239 }
240 }
241
242 /* Return the number of events created */
243 return id;
244}
#define PAPI_MIN_STR_LEN
Definition: f90papi.h:208
static double a[MATRIX_SIZE][MATRIX_SIZE]
Definition: libmsr_basic.c:38
static double b[MATRIX_SIZE][MATRIX_SIZE]
Definition: libmsr_basic.c:39
static const sensors_chip_name *(* sensors_get_detected_chipsPtr)(const sensors_chip_name *match, int *nr)
static const sensors_feature *(* sensors_get_featuresPtr)(const sensors_chip_name *name, int *nr)
static const sensors_subfeature *(* sensors_get_all_subfeaturesPtr)(const sensors_chip_name *name, const sensors_feature *feature, int *nr)
static char *(* sensors_get_labelPtr)(const sensors_chip_name *name, const sensors_feature *feature)
static int(* sensors_snprintf_chip_namePtr)(char *str, size_t size, const sensors_chip_name *chip)
FILE * stderr
char description[PAPI_MAX_STR_LEN]
Definition: papi.h:630
char short_name[PAPI_MIN_STR_LEN]
Definition: papi.h:628
char description[PAPI_MAX_STR_LEN]
const sensors_chip_name * name
Here is the caller graph for this function:

◆ getEventValue()

static long_long getEventValue ( unsigned  event_id)
static

Definition at line 253 of file linux-lmsensors.c.

254{
255 double value;
256 int res;
257
258 res = sensors_get_valuePtr( lm_sensors_native_table[event_id].resources.name,
260 subfeat_nr, &value );
261
262 if ( res < 0 ) {
263 fprintf( stderr, "libsensors(): Could not read event #%d!\n",
264 event_id );
265 return -1;
266 }
267
268 return ( ( long_long ) ( value * 1000 ) );
269}
static int(* sensors_get_valuePtr)(const sensors_chip_name *name, int subfeat_nr, double *value)
#define long_long
Definition: papi.h:559
char name[PAPI_MAX_STR_LEN]
Here is the caller graph for this function:

◆ link_lmsensors_libraries()

static int link_lmsensors_libraries ( )
static

Definition at line 369 of file linux-lmsensors.c.

370{
371 if ( _dl_non_dynamic_init != NULL ) {
372 // If weak var present, statically linked insted of dynamic.
373 strncpy( _lmsensors_vector.cmp_info.disabled_reason, "The lmsensors component REQUIRES dynamic linking capabilities.", PAPI_MAX_STR_LEN-1);
374 // EXIT not supported.
375 return PAPI_ENOSUPP;
376 }
377
378 char path_name[1024];
379 char *lmsensors_root = getenv("PAPI_LMSENSORS_ROOT");
380
381 dl1 = NULL;
382 // Step 1: Process override if given.
383 if (strlen(lmsensors_main) > 0) { // If override given, it has to work.
384 dl1 = dlopen(lmsensors_main, RTLD_NOW | RTLD_GLOBAL); // Try to open that path.
385 if (dl1 == NULL) {
386 snprintf(_lmsensors_vector.cmp_info.disabled_reason, PAPI_MAX_STR_LEN, "PAPI_LMSENSORS_MAIN override '%s' given in Rules.lmsensors not found.", lmsensors_main);
387 return(PAPI_ENOSUPP); // Override given but not found.
388 }
389 }
390
391 // Step 2: Try system paths, will work with Spack, LD_LIBRARY_PATH, default paths.
392 if (dl1 == NULL) { // No override,
393 dl1 = dlopen("libsensors.so", RTLD_NOW | RTLD_GLOBAL); // Try system paths.
394 }
395
396 // Step 3: Try the explicit install default.
397 if (dl1 == NULL && lmsensors_root != NULL) { // if root given, try it.
398 snprintf(path_name, PATH_MAX, "%s/lib64/libsensors.so", lmsensors_root); // PAPI Root check.
399 dl1 = dlopen(path_name, RTLD_NOW | RTLD_GLOBAL); // Try to open that path.
400 }
401
402 // Step 4: Try another explicit install default.
403 if (dl1 == NULL && lmsensors_root != NULL) { // if root given, try it.
404 snprintf(path_name, PATH_MAX, "%s/lib/libsensors.so", lmsensors_root); // PAPI Root check.
405 dl1 = dlopen(path_name, RTLD_NOW | RTLD_GLOBAL); // Try to open that path.
406 }
407
408 // Check for failure.
409 if (dl1 == NULL) {
410 snprintf(_lmsensors_vector.cmp_info.disabled_reason, PAPI_MAX_STR_LEN, "libsensors.so not found.");
411 return(PAPI_ENOSUPP);
412 }
413
414 // We have dl1.
415
416 sensors_initPtr = dlsym(dl1, "sensors_init");
417 if (dlerror() != NULL)
418 {
420 "lmsensor function sensors_init.",PAPI_MAX_STR_LEN);
421 return ( PAPI_ENOSUPP );
422 }
423 sensors_cleanupPtr = dlsym(dl1, "sensors_cleanup");
424 if (dlerror() != NULL)
425 {
427 "lmsensor function sensors_cleanup.",PAPI_MAX_STR_LEN);
428 return ( PAPI_ENOSUPP );
429 }
430 sensors_snprintf_chip_namePtr = dlsym(dl1, "sensors_snprintf_chip_name");
431 if (dlerror() != NULL)
432 {
434 "lmsensor function sensors_snprintf_chip_name.",PAPI_MAX_STR_LEN);
435 return ( PAPI_ENOSUPP );
436 }
437 sensors_get_labelPtr = dlsym(dl1, "sensors_get_label");
438 if (dlerror() != NULL)
439 {
441 "lmsensor function sensors_get_label.",PAPI_MAX_STR_LEN);
442 return ( PAPI_ENOSUPP );
443 }
444 sensors_get_valuePtr = dlsym(dl1, "sensors_get_value");
445 if (dlerror() != NULL)
446 {
448 "lmsensor function sensors_get_value.",PAPI_MAX_STR_LEN);
449 return ( PAPI_ENOSUPP );
450 }
451 sensors_get_detected_chipsPtr = dlsym(dl1, "sensors_get_detected_chips");
452 if (dlerror() != NULL)
453 {
455 "lmsensor function sensors_get_detected_chips.",PAPI_MAX_STR_LEN);
456 return ( PAPI_ENOSUPP );
457 }
458 sensors_get_featuresPtr = dlsym(dl1, "sensors_get_features");
459 if (dlerror() != NULL)
460 {
462 "lmsensor function sensors_get_features.",PAPI_MAX_STR_LEN);
463 return ( PAPI_ENOSUPP );
464 }
465 sensors_get_all_subfeaturesPtr = dlsym(dl1, "sensors_get_all_subfeatures");
466 if (dlerror() != NULL)
467 {
469 "lmsensor function sensors_get_all_subfeatures.",PAPI_MAX_STR_LEN);
470 return ( PAPI_ENOSUPP );
471 }
472
473 return ( PAPI_OK );
474}
static void * dl1
static char lmsensors_main[]
void(* _dl_non_dynamic_init)(void)
Here is the caller graph for this function:

Variable Documentation

◆ _dl_non_dynamic_init

void(* _dl_non_dynamic_init) (void) ( void  )

Definition at line 129 of file linux-lmsensors.c.

143{
144 unsigned id = 0;
145 int chip_nr = 0;
146 const sensors_chip_name *chip_name;
147
148 /* Loop through all the chips, features, subfeatures found */
149 while ( ( chip_name =
150 sensors_get_detected_chipsPtr( NULL, &chip_nr ) ) != NULL ) {
151 int a = 0, b;
152 const sensors_feature *feature;
153
154 while ( ( feature = sensors_get_featuresPtr( chip_name, &a ) ) ) {
155 b = 0;
156 while ( ( sensors_get_all_subfeaturesPtr( chip_name, feature,
157 &b ) ) ) {
158 id++;
159 }
160 }
161 }
162
163 return id;
164}

◆ _lmsensors_vector

papi_vector_t _lmsensors_vector

Definition at line 701 of file linux-lmsensors.c.

◆ cached_counts

long_long* cached_counts = NULL
static

Definition at line 100 of file linux-lmsensors.c.

◆ dl1

void* dl1 = NULL
static

Definition at line 117 of file linux-lmsensors.c.

◆ lm_sensors_native_table

_lmsensors_native_event_entry_t* lm_sensors_native_table
static

Definition at line 97 of file linux-lmsensors.c.

◆ lmsensors_main

char lmsensors_main[] =PAPI_LMSENSORS_MAIN
static

Definition at line 120 of file linux-lmsensors.c.

◆ num_events

int num_events = 0
static

Definition at line 99 of file linux-lmsensors.c.

◆ sensors_cleanupPtr

void(* sensors_cleanupPtr) (void) ( void  )
static

Definition at line 104 of file linux-lmsensors.c.

◆ sensors_get_all_subfeaturesPtr

const sensors_subfeature *(* sensors_get_all_subfeaturesPtr) (const sensors_chip_name *name, const sensors_feature *feature, int *nr) ( const sensors_chip_name *  name,
const sensors_feature *  feature,
int nr 
)
static

Definition at line 113 of file linux-lmsensors.c.

◆ sensors_get_detected_chipsPtr

const sensors_chip_name *(* sensors_get_detected_chipsPtr) (const sensors_chip_name *match, int *nr) ( const sensors_chip_name *  match,
int nr 
)
static

Definition at line 110 of file linux-lmsensors.c.

◆ sensors_get_featuresPtr

const sensors_feature *(* sensors_get_featuresPtr) (const sensors_chip_name *name, int *nr) ( const sensors_chip_name *  name,
int nr 
)
static

Definition at line 112 of file linux-lmsensors.c.

◆ sensors_get_labelPtr

char *(* sensors_get_labelPtr) (const sensors_chip_name *name, const sensors_feature *feature) ( const sensors_chip_name *  name,
const sensors_feature *  feature 
)
static

Definition at line 107 of file linux-lmsensors.c.

◆ sensors_get_valuePtr

int(* sensors_get_valuePtr) (const sensors_chip_name *name, int subfeat_nr, double *value) ( const sensors_chip_name *  name,
int  subfeat_nr,
double *  value 
)
static

Definition at line 108 of file linux-lmsensors.c.

◆ sensors_initPtr

int(* sensors_initPtr) (FILE *input) ( FILE *  input)
static

Definition at line 103 of file linux-lmsensors.c.

◆ sensors_snprintf_chip_namePtr

int(* sensors_snprintf_chip_namePtr) (char *str, size_t size, const sensors_chip_name *chip) ( char *  str,
size_t  size,
const sensors_chip_name *  chip 
)
static

Definition at line 105 of file linux-lmsensors.c.