at v2.6.36-rc2 640 lines 19 kB view raw
1Naming and data format standards for sysfs files 2------------------------------------------------ 3 4The libsensors library offers an interface to the raw sensors data 5through the sysfs interface. Since lm-sensors 3.0.0, libsensors is 6completely chip-independent. It assumes that all the kernel drivers 7implement the standard sysfs interface described in this document. 8This makes adding or updating support for any given chip very easy, as 9libsensors, and applications using it, do not need to be modified. 10This is a major improvement compared to lm-sensors 2. 11 12Note that motherboards vary widely in the connections to sensor chips. 13There is no standard that ensures, for example, that the second 14temperature sensor is connected to the CPU, or that the second fan is on 15the CPU. Also, some values reported by the chips need some computation 16before they make full sense. For example, most chips can only measure 17voltages between 0 and +4V. Other voltages are scaled back into that 18range using external resistors. Since the values of these resistors 19can change from motherboard to motherboard, the conversions cannot be 20hard coded into the driver and have to be done in user space. 21 22For this reason, even if we aim at a chip-independent libsensors, it will 23still require a configuration file (e.g. /etc/sensors.conf) for proper 24values conversion, labeling of inputs and hiding of unused inputs. 25 26An alternative method that some programs use is to access the sysfs 27files directly. This document briefly describes the standards that the 28drivers follow, so that an application program can scan for entries and 29access this data in a simple and consistent way. That said, such programs 30will have to implement conversion, labeling and hiding of inputs. For 31this reason, it is still not recommended to bypass the library. 32 33Each chip gets its own directory in the sysfs /sys/devices tree. To 34find all sensor chips, it is easier to follow the device symlinks from 35/sys/class/hwmon/hwmon*. 36 37Up to lm-sensors 3.0.0, libsensors looks for hardware monitoring attributes 38in the "physical" device directory. Since lm-sensors 3.0.1, attributes found 39in the hwmon "class" device directory are also supported. Complex drivers 40(e.g. drivers for multifunction chips) may want to use this possibility to 41avoid namespace pollution. The only drawback will be that older versions of 42libsensors won't support the driver in question. 43 44All sysfs values are fixed point numbers. 45 46There is only one value per file, unlike the older /proc specification. 47The common scheme for files naming is: <type><number>_<item>. Usual 48types for sensor chips are "in" (voltage), "temp" (temperature) and 49"fan" (fan). Usual items are "input" (measured value), "max" (high 50threshold, "min" (low threshold). Numbering usually starts from 1, 51except for voltages which start from 0 (because most data sheets use 52this). A number is always used for elements that can be present more 53than once, even if there is a single element of the given type on the 54specific chip. Other files do not refer to a specific element, so 55they have a simple name, and no number. 56 57Alarms are direct indications read from the chips. The drivers do NOT 58make comparisons of readings to thresholds. This allows violations 59between readings to be caught and alarmed. The exact definition of an 60alarm (for example, whether a threshold must be met or must be exceeded 61to cause an alarm) is chip-dependent. 62 63When setting values of hwmon sysfs attributes, the string representation of 64the desired value must be written, note that strings which are not a number 65are interpreted as 0! For more on how written strings are interpreted see the 66"sysfs attribute writes interpretation" section at the end of this file. 67 68------------------------------------------------------------------------- 69 70[0-*] denotes any positive number starting from 0 71[1-*] denotes any positive number starting from 1 72RO read only value 73WO write only value 74RW read/write value 75 76Read/write values may be read-only for some chips, depending on the 77hardware implementation. 78 79All entries (except name) are optional, and should only be created in a 80given driver if the chip has the feature. 81 82 83********************* 84* Global attributes * 85********************* 86 87name The chip name. 88 This should be a short, lowercase string, not containing 89 spaces nor dashes, representing the chip name. This is 90 the only mandatory attribute. 91 I2C devices get this attribute created automatically. 92 RO 93 94update_rate The rate at which the chip will update readings. 95 Unit: millisecond 96 RW 97 Some devices have a variable update rate. This attribute 98 can be used to change the update rate to the desired 99 frequency. 100 101 102************ 103* Voltages * 104************ 105 106in[0-*]_min Voltage min value. 107 Unit: millivolt 108 RW 109 110in[0-*]_lcrit Voltage critical min value. 111 Unit: millivolt 112 RW 113 If voltage drops to or below this limit, the system may 114 take drastic action such as power down or reset. At the very 115 least, it should report a fault. 116 117in[0-*]_max Voltage max value. 118 Unit: millivolt 119 RW 120 121in[0-*]_crit Voltage critical max value. 122 Unit: millivolt 123 RW 124 If voltage reaches or exceeds this limit, the system may 125 take drastic action such as power down or reset. At the very 126 least, it should report a fault. 127 128in[0-*]_input Voltage input value. 129 Unit: millivolt 130 RO 131 Voltage measured on the chip pin. 132 Actual voltage depends on the scaling resistors on the 133 motherboard, as recommended in the chip datasheet. 134 This varies by chip and by motherboard. 135 Because of this variation, values are generally NOT scaled 136 by the chip driver, and must be done by the application. 137 However, some drivers (notably lm87 and via686a) 138 do scale, because of internal resistors built into a chip. 139 These drivers will output the actual voltage. Rule of 140 thumb: drivers should report the voltage values at the 141 "pins" of the chip. 142 143in[0-*]_label Suggested voltage channel label. 144 Text string 145 Should only be created if the driver has hints about what 146 this voltage channel is being used for, and user-space 147 doesn't. In all other cases, the label is provided by 148 user-space. 149 RO 150 151cpu[0-*]_vid CPU core reference voltage. 152 Unit: millivolt 153 RO 154 Not always correct. 155 156vrm Voltage Regulator Module version number. 157 RW (but changing it should no more be necessary) 158 Originally the VRM standard version multiplied by 10, but now 159 an arbitrary number, as not all standards have a version 160 number. 161 Affects the way the driver calculates the CPU core reference 162 voltage from the vid pins. 163 164Also see the Alarms section for status flags associated with voltages. 165 166 167******** 168* Fans * 169******** 170 171fan[1-*]_min Fan minimum value 172 Unit: revolution/min (RPM) 173 RW 174 175fan[1-*]_max Fan maximum value 176 Unit: revolution/min (RPM) 177 Only rarely supported by the hardware. 178 RW 179 180fan[1-*]_input Fan input value. 181 Unit: revolution/min (RPM) 182 RO 183 184fan[1-*]_div Fan divisor. 185 Integer value in powers of two (1, 2, 4, 8, 16, 32, 64, 128). 186 RW 187 Some chips only support values 1, 2, 4 and 8. 188 Note that this is actually an internal clock divisor, which 189 affects the measurable speed range, not the read value. 190 191fan[1-*]_target 192 Desired fan speed 193 Unit: revolution/min (RPM) 194 RW 195 Only makes sense if the chip supports closed-loop fan speed 196 control based on the measured fan speed. 197 198fan[1-*]_label Suggested fan channel label. 199 Text string 200 Should only be created if the driver has hints about what 201 this fan channel is being used for, and user-space doesn't. 202 In all other cases, the label is provided by user-space. 203 RO 204 205Also see the Alarms section for status flags associated with fans. 206 207 208******* 209* PWM * 210******* 211 212pwm[1-*] Pulse width modulation fan control. 213 Integer value in the range 0 to 255 214 RW 215 255 is max or 100%. 216 217pwm[1-*]_enable 218 Fan speed control method: 219 0: no fan speed control (i.e. fan at full speed) 220 1: manual fan speed control enabled (using pwm[1-*]) 221 2+: automatic fan speed control enabled 222 Check individual chip documentation files for automatic mode 223 details. 224 RW 225 226pwm[1-*]_mode 0: DC mode (direct current) 227 1: PWM mode (pulse-width modulation) 228 RW 229 230pwm[1-*]_freq Base PWM frequency in Hz. 231 Only possibly available when pwmN_mode is PWM, but not always 232 present even then. 233 RW 234 235pwm[1-*]_auto_channels_temp 236 Select which temperature channels affect this PWM output in 237 auto mode. Bitfield, 1 is temp1, 2 is temp2, 4 is temp3 etc... 238 Which values are possible depend on the chip used. 239 RW 240 241pwm[1-*]_auto_point[1-*]_pwm 242pwm[1-*]_auto_point[1-*]_temp 243pwm[1-*]_auto_point[1-*]_temp_hyst 244 Define the PWM vs temperature curve. Number of trip points is 245 chip-dependent. Use this for chips which associate trip points 246 to PWM output channels. 247 RW 248 249temp[1-*]_auto_point[1-*]_pwm 250temp[1-*]_auto_point[1-*]_temp 251temp[1-*]_auto_point[1-*]_temp_hyst 252 Define the PWM vs temperature curve. Number of trip points is 253 chip-dependent. Use this for chips which associate trip points 254 to temperature channels. 255 RW 256 257There is a third case where trip points are associated to both PWM output 258channels and temperature channels: the PWM values are associated to PWM 259output channels while the temperature values are associated to temperature 260channels. In that case, the result is determined by the mapping between 261temperature inputs and PWM outputs. When several temperature inputs are 262mapped to a given PWM output, this leads to several candidate PWM values. 263The actual result is up to the chip, but in general the highest candidate 264value (fastest fan speed) wins. 265 266 267**************** 268* Temperatures * 269**************** 270 271temp[1-*]_type Sensor type selection. 272 Integers 1 to 6 273 RW 274 1: PII/Celeron Diode 275 2: 3904 transistor 276 3: thermal diode 277 4: thermistor 278 5: AMD AMDSI 279 6: Intel PECI 280 Not all types are supported by all chips 281 282temp[1-*]_max Temperature max value. 283 Unit: millidegree Celsius (or millivolt, see below) 284 RW 285 286temp[1-*]_min Temperature min value. 287 Unit: millidegree Celsius 288 RW 289 290temp[1-*]_max_hyst 291 Temperature hysteresis value for max limit. 292 Unit: millidegree Celsius 293 Must be reported as an absolute temperature, NOT a delta 294 from the max value. 295 RW 296 297temp[1-*]_input Temperature input value. 298 Unit: millidegree Celsius 299 RO 300 301temp[1-*]_crit Temperature critical max value, typically greater than 302 corresponding temp_max values. 303 Unit: millidegree Celsius 304 RW 305 306temp[1-*]_crit_hyst 307 Temperature hysteresis value for critical limit. 308 Unit: millidegree Celsius 309 Must be reported as an absolute temperature, NOT a delta 310 from the critical value. 311 RW 312 313temp[1-*]_lcrit Temperature critical min value, typically lower than 314 corresponding temp_min values. 315 Unit: millidegree Celsius 316 RW 317 318temp[1-*]_offset 319 Temperature offset which is added to the temperature reading 320 by the chip. 321 Unit: millidegree Celsius 322 Read/Write value. 323 324temp[1-*]_label Suggested temperature channel label. 325 Text string 326 Should only be created if the driver has hints about what 327 this temperature channel is being used for, and user-space 328 doesn't. In all other cases, the label is provided by 329 user-space. 330 RO 331 332temp[1-*]_lowest 333 Historical minimum temperature 334 Unit: millidegree Celsius 335 RO 336 337temp[1-*]_highest 338 Historical maximum temperature 339 Unit: millidegree Celsius 340 RO 341 342temp[1-*]_reset_history 343 Reset temp_lowest and temp_highest 344 WO 345 346temp_reset_history 347 Reset temp_lowest and temp_highest for all sensors 348 WO 349 350Some chips measure temperature using external thermistors and an ADC, and 351report the temperature measurement as a voltage. Converting this voltage 352back to a temperature (or the other way around for limits) requires 353mathematical functions not available in the kernel, so the conversion 354must occur in user space. For these chips, all temp* files described 355above should contain values expressed in millivolt instead of millidegree 356Celsius. In other words, such temperature channels are handled as voltage 357channels by the driver. 358 359Also see the Alarms section for status flags associated with temperatures. 360 361 362************ 363* Currents * 364************ 365 366curr[1-*]_max Current max value 367 Unit: milliampere 368 RW 369 370curr[1-*]_min Current min value. 371 Unit: milliampere 372 RW 373 374curr[1-*]_input Current input value 375 Unit: milliampere 376 RO 377 378********* 379* Power * 380********* 381 382power[1-*]_average Average power use 383 Unit: microWatt 384 RO 385 386power[1-*]_average_interval Power use averaging interval. A poll 387 notification is sent to this file if the 388 hardware changes the averaging interval. 389 Unit: milliseconds 390 RW 391 392power[1-*]_average_interval_max Maximum power use averaging interval 393 Unit: milliseconds 394 RO 395 396power[1-*]_average_interval_min Minimum power use averaging interval 397 Unit: milliseconds 398 RO 399 400power[1-*]_average_highest Historical average maximum power use 401 Unit: microWatt 402 RO 403 404power[1-*]_average_lowest Historical average minimum power use 405 Unit: microWatt 406 RO 407 408power[1-*]_average_max A poll notification is sent to 409 power[1-*]_average when power use 410 rises above this value. 411 Unit: microWatt 412 RW 413 414power[1-*]_average_min A poll notification is sent to 415 power[1-*]_average when power use 416 sinks below this value. 417 Unit: microWatt 418 RW 419 420power[1-*]_input Instantaneous power use 421 Unit: microWatt 422 RO 423 424power[1-*]_input_highest Historical maximum power use 425 Unit: microWatt 426 RO 427 428power[1-*]_input_lowest Historical minimum power use 429 Unit: microWatt 430 RO 431 432power[1-*]_reset_history Reset input_highest, input_lowest, 433 average_highest and average_lowest. 434 WO 435 436power[1-*]_accuracy Accuracy of the power meter. 437 Unit: Percent 438 RO 439 440power[1-*]_alarm 1 if the system is drawing more power than the 441 cap allows; 0 otherwise. A poll notification is 442 sent to this file when the power use exceeds the 443 cap. This file only appears if the cap is known 444 to be enforced by hardware. 445 RO 446 447power[1-*]_cap If power use rises above this limit, the 448 system should take action to reduce power use. 449 A poll notification is sent to this file if the 450 cap is changed by the hardware. The *_cap 451 files only appear if the cap is known to be 452 enforced by hardware. 453 Unit: microWatt 454 RW 455 456power[1-*]_cap_hyst Margin of hysteresis built around capping and 457 notification. 458 Unit: microWatt 459 RW 460 461power[1-*]_cap_max Maximum cap that can be set. 462 Unit: microWatt 463 RO 464 465power[1-*]_cap_min Minimum cap that can be set. 466 Unit: microWatt 467 RO 468 469********** 470* Energy * 471********** 472 473energy[1-*]_input Cumulative energy use 474 Unit: microJoule 475 RO 476 477 478********** 479* Alarms * 480********** 481 482Each channel or limit may have an associated alarm file, containing a 483boolean value. 1 means than an alarm condition exists, 0 means no alarm. 484 485Usually a given chip will either use channel-related alarms, or 486limit-related alarms, not both. The driver should just reflect the hardware 487implementation. 488 489in[0-*]_alarm 490curr[1-*]_alarm 491fan[1-*]_alarm 492temp[1-*]_alarm 493 Channel alarm 494 0: no alarm 495 1: alarm 496 RO 497 498OR 499 500in[0-*]_min_alarm 501in[0-*]_max_alarm 502curr[1-*]_min_alarm 503curr[1-*]_max_alarm 504fan[1-*]_min_alarm 505fan[1-*]_max_alarm 506temp[1-*]_min_alarm 507temp[1-*]_max_alarm 508temp[1-*]_crit_alarm 509 Limit alarm 510 0: no alarm 511 1: alarm 512 RO 513 514Each input channel may have an associated fault file. This can be used 515to notify open diodes, unconnected fans etc. where the hardware 516supports it. When this boolean has value 1, the measurement for that 517channel should not be trusted. 518 519fan[1-*]_fault 520temp[1-*]_fault 521 Input fault condition 522 0: no fault occured 523 1: fault condition 524 RO 525 526Some chips also offer the possibility to get beeped when an alarm occurs: 527 528beep_enable Master beep enable 529 0: no beeps 530 1: beeps 531 RW 532 533in[0-*]_beep 534curr[1-*]_beep 535fan[1-*]_beep 536temp[1-*]_beep 537 Channel beep 538 0: disable 539 1: enable 540 RW 541 542In theory, a chip could provide per-limit beep masking, but no such chip 543was seen so far. 544 545Old drivers provided a different, non-standard interface to alarms and 546beeps. These interface files are deprecated, but will be kept around 547for compatibility reasons: 548 549alarms Alarm bitmask. 550 RO 551 Integer representation of one to four bytes. 552 A '1' bit means an alarm. 553 Chips should be programmed for 'comparator' mode so that 554 the alarm will 'come back' after you read the register 555 if it is still valid. 556 Generally a direct representation of a chip's internal 557 alarm registers; there is no standard for the position 558 of individual bits. For this reason, the use of this 559 interface file for new drivers is discouraged. Use 560 individual *_alarm and *_fault files instead. 561 Bits are defined in kernel/include/sensors.h. 562 563beep_mask Bitmask for beep. 564 Same format as 'alarms' with the same bit locations, 565 use discouraged for the same reason. Use individual 566 *_beep files instead. 567 RW 568 569 570*********************** 571* Intrusion detection * 572*********************** 573 574intrusion[0-*]_alarm 575 Chassis intrusion detection 576 0: OK 577 1: intrusion detected 578 RW 579 Contrary to regular alarm flags which clear themselves 580 automatically when read, this one sticks until cleared by 581 the user. This is done by writing 0 to the file. Writing 582 other values is unsupported. 583 584intrusion[0-*]_beep 585 Chassis intrusion beep 586 0: disable 587 1: enable 588 RW 589 590 591sysfs attribute writes interpretation 592------------------------------------- 593 594hwmon sysfs attributes always contain numbers, so the first thing to do is to 595convert the input to a number, there are 2 ways todo this depending whether 596the number can be negative or not: 597unsigned long u = simple_strtoul(buf, NULL, 10); 598long s = simple_strtol(buf, NULL, 10); 599 600With buf being the buffer with the user input being passed by the kernel. 601Notice that we do not use the second argument of strto[u]l, and thus cannot 602tell when 0 is returned, if this was really 0 or is caused by invalid input. 603This is done deliberately as checking this everywhere would add a lot of 604code to the kernel. 605 606Notice that it is important to always store the converted value in an 607unsigned long or long, so that no wrap around can happen before any further 608checking. 609 610After the input string is converted to an (unsigned) long, the value should be 611checked if its acceptable. Be careful with further conversions on the value 612before checking it for validity, as these conversions could still cause a wrap 613around before the check. For example do not multiply the result, and only 614add/subtract if it has been divided before the add/subtract. 615 616What to do if a value is found to be invalid, depends on the type of the 617sysfs attribute that is being set. If it is a continuous setting like a 618tempX_max or inX_max attribute, then the value should be clamped to its 619limits using SENSORS_LIMIT(value, min_limit, max_limit). If it is not 620continuous like for example a tempX_type, then when an invalid value is 621written, -EINVAL should be returned. 622 623Example1, temp1_max, register is a signed 8 bit value (-128 - 127 degrees): 624 625 long v = simple_strtol(buf, NULL, 10) / 1000; 626 v = SENSORS_LIMIT(v, -128, 127); 627 /* write v to register */ 628 629Example2, fan divider setting, valid values 2, 4 and 8: 630 631 unsigned long v = simple_strtoul(buf, NULL, 10); 632 633 switch (v) { 634 case 2: v = 1; break; 635 case 4: v = 2; break; 636 case 8: v = 3; break; 637 default: 638 return -EINVAL; 639 } 640 /* write v to register */