diff options
author | Mauro Carvalho Chehab <mchehab@s-opensource.com> | 2017-05-14 14:18:08 -0400 |
---|---|---|
committer | Jonathan Corbet <corbet@lwn.net> | 2017-07-14 15:51:40 -0400 |
commit | f5981a5c59a90780138ea844ba3362bb72210808 (patch) | |
tree | fce643dfdf6352ef5332d957cef54e8491e4ae27 /Documentation/IPMI.txt | |
parent | 877b638ff814205ff256173295bb79a220f9ad0e (diff) |
IPMI.txt: standardize document format
Each text file under Documentation follows a different
format. Some doesn't even have titles!
Change its representation to follow the adopted standard,
using ReST markups for it to be parseable by Sphinx:
- fix document type;
- add missing markups for subitems;
- mark literal blocks;
- add whitespaces and blank lines where needed;
- use bulleted list markups where neded.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
Diffstat (limited to 'Documentation/IPMI.txt')
-rw-r--r-- | Documentation/IPMI.txt | 76 |
1 files changed, 44 insertions, 32 deletions
diff --git a/Documentation/IPMI.txt b/Documentation/IPMI.txt index 6962cab997ef..aa77a25a0940 100644 --- a/Documentation/IPMI.txt +++ b/Documentation/IPMI.txt | |||
@@ -1,9 +1,8 @@ | |||
1 | ===================== | ||
2 | The Linux IPMI Driver | ||
3 | ===================== | ||
1 | 4 | ||
2 | The Linux IPMI Driver | 5 | :Author: Corey Minyard <minyard@mvista.com> / <minyard@acm.org> |
3 | --------------------- | ||
4 | Corey Minyard | ||
5 | <minyard@mvista.com> | ||
6 | <minyard@acm.org> | ||
7 | 6 | ||
8 | The Intelligent Platform Management Interface, or IPMI, is a | 7 | The Intelligent Platform Management Interface, or IPMI, is a |
9 | standard for controlling intelligent devices that monitor a system. | 8 | standard for controlling intelligent devices that monitor a system. |
@@ -141,7 +140,7 @@ Addressing | |||
141 | ---------- | 140 | ---------- |
142 | 141 | ||
143 | The IPMI addressing works much like IP addresses, you have an overlay | 142 | The IPMI addressing works much like IP addresses, you have an overlay |
144 | to handle the different address types. The overlay is: | 143 | to handle the different address types. The overlay is:: |
145 | 144 | ||
146 | struct ipmi_addr | 145 | struct ipmi_addr |
147 | { | 146 | { |
@@ -153,7 +152,7 @@ to handle the different address types. The overlay is: | |||
153 | The addr_type determines what the address really is. The driver | 152 | The addr_type determines what the address really is. The driver |
154 | currently understands two different types of addresses. | 153 | currently understands two different types of addresses. |
155 | 154 | ||
156 | "System Interface" addresses are defined as: | 155 | "System Interface" addresses are defined as:: |
157 | 156 | ||
158 | struct ipmi_system_interface_addr | 157 | struct ipmi_system_interface_addr |
159 | { | 158 | { |
@@ -166,7 +165,7 @@ straight to the BMC on the current card. The channel must be | |||
166 | IPMI_BMC_CHANNEL. | 165 | IPMI_BMC_CHANNEL. |
167 | 166 | ||
168 | Messages that are destined to go out on the IPMB bus use the | 167 | Messages that are destined to go out on the IPMB bus use the |
169 | IPMI_IPMB_ADDR_TYPE address type. The format is | 168 | IPMI_IPMB_ADDR_TYPE address type. The format is:: |
170 | 169 | ||
171 | struct ipmi_ipmb_addr | 170 | struct ipmi_ipmb_addr |
172 | { | 171 | { |
@@ -184,16 +183,16 @@ spec. | |||
184 | Messages | 183 | Messages |
185 | -------- | 184 | -------- |
186 | 185 | ||
187 | Messages are defined as: | 186 | Messages are defined as:: |
188 | 187 | ||
189 | struct ipmi_msg | 188 | struct ipmi_msg |
190 | { | 189 | { |
191 | unsigned char netfn; | 190 | unsigned char netfn; |
192 | unsigned char lun; | 191 | unsigned char lun; |
193 | unsigned char cmd; | 192 | unsigned char cmd; |
194 | unsigned char *data; | 193 | unsigned char *data; |
195 | int data_len; | 194 | int data_len; |
196 | }; | 195 | }; |
197 | 196 | ||
198 | The driver takes care of adding/stripping the header information. The | 197 | The driver takes care of adding/stripping the header information. The |
199 | data portion is just the data to be send (do NOT put addressing info | 198 | data portion is just the data to be send (do NOT put addressing info |
@@ -208,7 +207,7 @@ block of data, even when receiving messages. Otherwise the driver | |||
208 | will have no place to put the message. | 207 | will have no place to put the message. |
209 | 208 | ||
210 | Messages coming up from the message handler in kernelland will come in | 209 | Messages coming up from the message handler in kernelland will come in |
211 | as: | 210 | as:: |
212 | 211 | ||
213 | struct ipmi_recv_msg | 212 | struct ipmi_recv_msg |
214 | { | 213 | { |
@@ -246,6 +245,7 @@ and the user should not have to care what type of SMI is below them. | |||
246 | 245 | ||
247 | 246 | ||
248 | Watching For Interfaces | 247 | Watching For Interfaces |
248 | ^^^^^^^^^^^^^^^^^^^^^^^ | ||
249 | 249 | ||
250 | When your code comes up, the IPMI driver may or may not have detected | 250 | When your code comes up, the IPMI driver may or may not have detected |
251 | if IPMI devices exist. So you might have to defer your setup until | 251 | if IPMI devices exist. So you might have to defer your setup until |
@@ -256,6 +256,7 @@ and tell you when they come and go. | |||
256 | 256 | ||
257 | 257 | ||
258 | Creating the User | 258 | Creating the User |
259 | ^^^^^^^^^^^^^^^^^ | ||
259 | 260 | ||
260 | To use the message handler, you must first create a user using | 261 | To use the message handler, you must first create a user using |
261 | ipmi_create_user. The interface number specifies which SMI you want | 262 | ipmi_create_user. The interface number specifies which SMI you want |
@@ -272,6 +273,7 @@ closing the device automatically destroys the user. | |||
272 | 273 | ||
273 | 274 | ||
274 | Messaging | 275 | Messaging |
276 | ^^^^^^^^^ | ||
275 | 277 | ||
276 | To send a message from kernel-land, the ipmi_request_settime() call does | 278 | To send a message from kernel-land, the ipmi_request_settime() call does |
277 | pretty much all message handling. Most of the parameter are | 279 | pretty much all message handling. Most of the parameter are |
@@ -321,6 +323,7 @@ though, since it is tricky to manage your own buffers. | |||
321 | 323 | ||
322 | 324 | ||
323 | Events and Incoming Commands | 325 | Events and Incoming Commands |
326 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
324 | 327 | ||
325 | The driver takes care of polling for IPMI events and receiving | 328 | The driver takes care of polling for IPMI events and receiving |
326 | commands (commands are messages that are not responses, they are | 329 | commands (commands are messages that are not responses, they are |
@@ -367,7 +370,7 @@ in the system. It discovers interfaces through a host of different | |||
367 | methods, depending on the system. | 370 | methods, depending on the system. |
368 | 371 | ||
369 | You can specify up to four interfaces on the module load line and | 372 | You can specify up to four interfaces on the module load line and |
370 | control some module parameters: | 373 | control some module parameters:: |
371 | 374 | ||
372 | modprobe ipmi_si.o type=<type1>,<type2>.... | 375 | modprobe ipmi_si.o type=<type1>,<type2>.... |
373 | ports=<port1>,<port2>... addrs=<addr1>,<addr2>... | 376 | ports=<port1>,<port2>... addrs=<addr1>,<addr2>... |
@@ -437,7 +440,7 @@ default is one. Setting to 0 is useful with the hotmod, but is | |||
437 | obviously only useful for modules. | 440 | obviously only useful for modules. |
438 | 441 | ||
439 | When compiled into the kernel, the parameters can be specified on the | 442 | When compiled into the kernel, the parameters can be specified on the |
440 | kernel command line as: | 443 | kernel command line as:: |
441 | 444 | ||
442 | ipmi_si.type=<type1>,<type2>... | 445 | ipmi_si.type=<type1>,<type2>... |
443 | ipmi_si.ports=<port1>,<port2>... ipmi_si.addrs=<addr1>,<addr2>... | 446 | ipmi_si.ports=<port1>,<port2>... ipmi_si.addrs=<addr1>,<addr2>... |
@@ -474,16 +477,22 @@ The driver supports a hot add and remove of interfaces. This way, | |||
474 | interfaces can be added or removed after the kernel is up and running. | 477 | interfaces can be added or removed after the kernel is up and running. |
475 | This is done using /sys/modules/ipmi_si/parameters/hotmod, which is a | 478 | This is done using /sys/modules/ipmi_si/parameters/hotmod, which is a |
476 | write-only parameter. You write a string to this interface. The string | 479 | write-only parameter. You write a string to this interface. The string |
477 | has the format: | 480 | has the format:: |
481 | |||
478 | <op1>[:op2[:op3...]] | 482 | <op1>[:op2[:op3...]] |
479 | The "op"s are: | 483 | |
484 | The "op"s are:: | ||
485 | |||
480 | add|remove,kcs|bt|smic,mem|i/o,<address>[,<opt1>[,<opt2>[,...]]] | 486 | add|remove,kcs|bt|smic,mem|i/o,<address>[,<opt1>[,<opt2>[,...]]] |
481 | You can specify more than one interface on the line. The "opt"s are: | 487 | |
488 | You can specify more than one interface on the line. The "opt"s are:: | ||
489 | |||
482 | rsp=<regspacing> | 490 | rsp=<regspacing> |
483 | rsi=<regsize> | 491 | rsi=<regsize> |
484 | rsh=<regshift> | 492 | rsh=<regshift> |
485 | irq=<irq> | 493 | irq=<irq> |
486 | ipmb=<ipmb slave addr> | 494 | ipmb=<ipmb slave addr> |
495 | |||
487 | and these have the same meanings as discussed above. Note that you | 496 | and these have the same meanings as discussed above. Note that you |
488 | can also use this on the kernel command line for a more compact format | 497 | can also use this on the kernel command line for a more compact format |
489 | for specifying an interface. Note that when removing an interface, | 498 | for specifying an interface. Note that when removing an interface, |
@@ -496,7 +505,7 @@ The SMBus Driver (SSIF) | |||
496 | The SMBus driver allows up to 4 SMBus devices to be configured in the | 505 | The SMBus driver allows up to 4 SMBus devices to be configured in the |
497 | system. By default, the driver will only register with something it | 506 | system. By default, the driver will only register with something it |
498 | finds in DMI or ACPI tables. You can change this | 507 | finds in DMI or ACPI tables. You can change this |
499 | at module load time (for a module) with: | 508 | at module load time (for a module) with:: |
500 | 509 | ||
501 | modprobe ipmi_ssif.o | 510 | modprobe ipmi_ssif.o |
502 | addr=<i2caddr1>[,<i2caddr2>[,...]] | 511 | addr=<i2caddr1>[,<i2caddr2>[,...]] |
@@ -535,7 +544,7 @@ the smb_addr parameter unless you have DMI or ACPI data to tell the | |||
535 | driver what to use. | 544 | driver what to use. |
536 | 545 | ||
537 | When compiled into the kernel, the addresses can be specified on the | 546 | When compiled into the kernel, the addresses can be specified on the |
538 | kernel command line as: | 547 | kernel command line as:: |
539 | 548 | ||
540 | ipmb_ssif.addr=<i2caddr1>[,<i2caddr2>[...]] | 549 | ipmb_ssif.addr=<i2caddr1>[,<i2caddr2>[...]] |
541 | ipmi_ssif.adapter=<adapter1>[,<adapter2>[...]] | 550 | ipmi_ssif.adapter=<adapter1>[,<adapter2>[...]] |
@@ -565,9 +574,9 @@ Some users need more detailed information about a device, like where | |||
565 | the address came from or the raw base device for the IPMI interface. | 574 | the address came from or the raw base device for the IPMI interface. |
566 | You can use the IPMI smi_watcher to catch the IPMI interfaces as they | 575 | You can use the IPMI smi_watcher to catch the IPMI interfaces as they |
567 | come or go, and to grab the information, you can use the function | 576 | come or go, and to grab the information, you can use the function |
568 | ipmi_get_smi_info(), which returns the following structure: | 577 | ipmi_get_smi_info(), which returns the following structure:: |
569 | 578 | ||
570 | struct ipmi_smi_info { | 579 | struct ipmi_smi_info { |
571 | enum ipmi_addr_src addr_src; | 580 | enum ipmi_addr_src addr_src; |
572 | struct device *dev; | 581 | struct device *dev; |
573 | union { | 582 | union { |
@@ -575,7 +584,7 @@ struct ipmi_smi_info { | |||
575 | void *acpi_handle; | 584 | void *acpi_handle; |
576 | } acpi_info; | 585 | } acpi_info; |
577 | } addr_info; | 586 | } addr_info; |
578 | }; | 587 | }; |
579 | 588 | ||
580 | Currently special info for only for SI_ACPI address sources is | 589 | Currently special info for only for SI_ACPI address sources is |
581 | returned. Others may be added as necessary. | 590 | returned. Others may be added as necessary. |
@@ -590,7 +599,7 @@ Watchdog | |||
590 | 599 | ||
591 | A watchdog timer is provided that implements the Linux-standard | 600 | A watchdog timer is provided that implements the Linux-standard |
592 | watchdog timer interface. It has three module parameters that can be | 601 | watchdog timer interface. It has three module parameters that can be |
593 | used to control it: | 602 | used to control it:: |
594 | 603 | ||
595 | modprobe ipmi_watchdog timeout=<t> pretimeout=<t> action=<action type> | 604 | modprobe ipmi_watchdog timeout=<t> pretimeout=<t> action=<action type> |
596 | preaction=<preaction type> preop=<preop type> start_now=x | 605 | preaction=<preaction type> preop=<preop type> start_now=x |
@@ -635,7 +644,7 @@ watchdog device is closed. The default value of nowayout is true | |||
635 | if the CONFIG_WATCHDOG_NOWAYOUT option is enabled, or false if not. | 644 | if the CONFIG_WATCHDOG_NOWAYOUT option is enabled, or false if not. |
636 | 645 | ||
637 | When compiled into the kernel, the kernel command line is available | 646 | When compiled into the kernel, the kernel command line is available |
638 | for configuring the watchdog: | 647 | for configuring the watchdog:: |
639 | 648 | ||
640 | ipmi_watchdog.timeout=<t> ipmi_watchdog.pretimeout=<t> | 649 | ipmi_watchdog.timeout=<t> ipmi_watchdog.pretimeout=<t> |
641 | ipmi_watchdog.action=<action type> | 650 | ipmi_watchdog.action=<action type> |
@@ -675,6 +684,7 @@ also get a bunch of OEM events holding the panic string. | |||
675 | 684 | ||
676 | 685 | ||
677 | The field settings of the events are: | 686 | The field settings of the events are: |
687 | |||
678 | * Generator ID: 0x21 (kernel) | 688 | * Generator ID: 0x21 (kernel) |
679 | * EvM Rev: 0x03 (this event is formatting in IPMI 1.0 format) | 689 | * EvM Rev: 0x03 (this event is formatting in IPMI 1.0 format) |
680 | * Sensor Type: 0x20 (OS critical stop sensor) | 690 | * Sensor Type: 0x20 (OS critical stop sensor) |
@@ -683,18 +693,20 @@ The field settings of the events are: | |||
683 | * Event Data 1: 0xa1 (Runtime stop in OEM bytes 2 and 3) | 693 | * Event Data 1: 0xa1 (Runtime stop in OEM bytes 2 and 3) |
684 | * Event data 2: second byte of panic string | 694 | * Event data 2: second byte of panic string |
685 | * Event data 3: third byte of panic string | 695 | * Event data 3: third byte of panic string |
696 | |||
686 | See the IPMI spec for the details of the event layout. This event is | 697 | See the IPMI spec for the details of the event layout. This event is |
687 | always sent to the local management controller. It will handle routing | 698 | always sent to the local management controller. It will handle routing |
688 | the message to the right place | 699 | the message to the right place |
689 | 700 | ||
690 | Other OEM events have the following format: | 701 | Other OEM events have the following format: |
691 | Record ID (bytes 0-1): Set by the SEL. | 702 | |
692 | Record type (byte 2): 0xf0 (OEM non-timestamped) | 703 | * Record ID (bytes 0-1): Set by the SEL. |
693 | byte 3: The slave address of the card saving the panic | 704 | * Record type (byte 2): 0xf0 (OEM non-timestamped) |
694 | byte 4: A sequence number (starting at zero) | 705 | * byte 3: The slave address of the card saving the panic |
695 | The rest of the bytes (11 bytes) are the panic string. If the panic string | 706 | * byte 4: A sequence number (starting at zero) |
696 | is longer than 11 bytes, multiple messages will be sent with increasing | 707 | The rest of the bytes (11 bytes) are the panic string. If the panic string |
697 | sequence numbers. | 708 | is longer than 11 bytes, multiple messages will be sent with increasing |
709 | sequence numbers. | ||
698 | 710 | ||
699 | Because you cannot send OEM events using the standard interface, this | 711 | Because you cannot send OEM events using the standard interface, this |
700 | function will attempt to find an SEL and add the events there. It | 712 | function will attempt to find an SEL and add the events there. It |