Root/
1 | |
2 | The Linux IPMI Driver |
3 | --------------------- |
4 | Corey Minyard |
5 | <minyard@mvista.com> |
6 | <minyard@acm.org> |
7 | |
8 | The Intelligent Platform Management Interface, or IPMI, is a |
9 | standard for controlling intelligent devices that monitor a system. |
10 | It provides for dynamic discovery of sensors in the system and the |
11 | ability to monitor the sensors and be informed when the sensor's |
12 | values change or go outside certain boundaries. It also has a |
13 | standardized database for field-replaceable units (FRUs) and a watchdog |
14 | timer. |
15 | |
16 | To use this, you need an interface to an IPMI controller in your |
17 | system (called a Baseboard Management Controller, or BMC) and |
18 | management software that can use the IPMI system. |
19 | |
20 | This document describes how to use the IPMI driver for Linux. If you |
21 | are not familiar with IPMI itself, see the web site at |
22 | http://www.intel.com/design/servers/ipmi/index.htm. IPMI is a big |
23 | subject and I can't cover it all here! |
24 | |
25 | Configuration |
26 | ------------- |
27 | |
28 | The Linux IPMI driver is modular, which means you have to pick several |
29 | things to have it work right depending on your hardware. Most of |
30 | these are available in the 'Character Devices' menu then the IPMI |
31 | menu. |
32 | |
33 | No matter what, you must pick 'IPMI top-level message handler' to use |
34 | IPMI. What you do beyond that depends on your needs and hardware. |
35 | |
36 | The message handler does not provide any user-level interfaces. |
37 | Kernel code (like the watchdog) can still use it. If you need access |
38 | from userland, you need to select 'Device interface for IPMI' if you |
39 | want access through a device driver. |
40 | |
41 | The driver interface depends on your hardware. If your system |
42 | properly provides the SMBIOS info for IPMI, the driver will detect it |
43 | and just work. If you have a board with a standard interface (These |
44 | will generally be either "KCS", "SMIC", or "BT", consult your hardware |
45 | manual), choose the 'IPMI SI handler' option. |
46 | |
47 | You should generally enable ACPI on your system, as systems with IPMI |
48 | can have ACPI tables describing them. |
49 | |
50 | If you have a standard interface and the board manufacturer has done |
51 | their job correctly, the IPMI controller should be automatically |
52 | detected (via ACPI or SMBIOS tables) and should just work. Sadly, |
53 | many boards do not have this information. The driver attempts |
54 | standard defaults, but they may not work. If you fall into this |
55 | situation, you need to read the section below named 'The SI Driver'. |
56 | |
57 | IPMI defines a standard watchdog timer. You can enable this with the |
58 | 'IPMI Watchdog Timer' config option. If you compile the driver into |
59 | the kernel, then via a kernel command-line option you can have the |
60 | watchdog timer start as soon as it initializes. It also have a lot |
61 | of other options, see the 'Watchdog' section below for more details. |
62 | Note that you can also have the watchdog continue to run if it is |
63 | closed (by default it is disabled on close). Go into the 'Watchdog |
64 | Cards' menu, enable 'Watchdog Timer Support', and enable the option |
65 | 'Disable watchdog shutdown on close'. |
66 | |
67 | IPMI systems can often be powered off using IPMI commands. Select |
68 | 'IPMI Poweroff' to do this. The driver will auto-detect if the system |
69 | can be powered off by IPMI. It is safe to enable this even if your |
70 | system doesn't support this option. This works on ATCA systems, the |
71 | Radisys CPI1 card, and any IPMI system that supports standard chassis |
72 | management commands. |
73 | |
74 | If you want the driver to put an event into the event log on a panic, |
75 | enable the 'Generate a panic event to all BMCs on a panic' option. If |
76 | you want the whole panic string put into the event log using OEM |
77 | events, enable the 'Generate OEM events containing the panic string' |
78 | option. |
79 | |
80 | Basic Design |
81 | ------------ |
82 | |
83 | The Linux IPMI driver is designed to be very modular and flexible, you |
84 | only need to take the pieces you need and you can use it in many |
85 | different ways. Because of that, it's broken into many chunks of |
86 | code. These chunks (by module name) are: |
87 | |
88 | ipmi_msghandler - This is the central piece of software for the IPMI |
89 | system. It handles all messages, message timing, and responses. The |
90 | IPMI users tie into this, and the IPMI physical interfaces (called |
91 | System Management Interfaces, or SMIs) also tie in here. This |
92 | provides the kernelland interface for IPMI, but does not provide an |
93 | interface for use by application processes. |
94 | |
95 | ipmi_devintf - This provides a userland IOCTL interface for the IPMI |
96 | driver, each open file for this device ties in to the message handler |
97 | as an IPMI user. |
98 | |
99 | ipmi_si - A driver for various system interfaces. This supports KCS, |
100 | SMIC, and BT interfaces. |
101 | |
102 | ipmi_watchdog - IPMI requires systems to have a very capable watchdog |
103 | timer. This driver implements the standard Linux watchdog timer |
104 | interface on top of the IPMI message handler. |
105 | |
106 | ipmi_poweroff - Some systems support the ability to be turned off via |
107 | IPMI commands. |
108 | |
109 | These are all individually selectable via configuration options. |
110 | |
111 | Note that the KCS-only interface has been removed. The af_ipmi driver |
112 | is no longer supported and has been removed because it was impossible |
113 | to do 32 bit emulation on 64-bit kernels with it. |
114 | |
115 | Much documentation for the interface is in the include files. The |
116 | IPMI include files are: |
117 | |
118 | net/af_ipmi.h - Contains the socket interface. |
119 | |
120 | linux/ipmi.h - Contains the user interface and IOCTL interface for IPMI. |
121 | |
122 | linux/ipmi_smi.h - Contains the interface for system management interfaces |
123 | (things that interface to IPMI controllers) to use. |
124 | |
125 | linux/ipmi_msgdefs.h - General definitions for base IPMI messaging. |
126 | |
127 | |
128 | Addressing |
129 | ---------- |
130 | |
131 | The IPMI addressing works much like IP addresses, you have an overlay |
132 | to handle the different address types. The overlay is: |
133 | |
134 | struct ipmi_addr |
135 | { |
136 | int addr_type; |
137 | short channel; |
138 | char data[IPMI_MAX_ADDR_SIZE]; |
139 | }; |
140 | |
141 | The addr_type determines what the address really is. The driver |
142 | currently understands two different types of addresses. |
143 | |
144 | "System Interface" addresses are defined as: |
145 | |
146 | struct ipmi_system_interface_addr |
147 | { |
148 | int addr_type; |
149 | short channel; |
150 | }; |
151 | |
152 | and the type is IPMI_SYSTEM_INTERFACE_ADDR_TYPE. This is used for talking |
153 | straight to the BMC on the current card. The channel must be |
154 | IPMI_BMC_CHANNEL. |
155 | |
156 | Messages that are destined to go out on the IPMB bus use the |
157 | IPMI_IPMB_ADDR_TYPE address type. The format is |
158 | |
159 | struct ipmi_ipmb_addr |
160 | { |
161 | int addr_type; |
162 | short channel; |
163 | unsigned char slave_addr; |
164 | unsigned char lun; |
165 | }; |
166 | |
167 | The "channel" here is generally zero, but some devices support more |
168 | than one channel, it corresponds to the channel as defined in the IPMI |
169 | spec. |
170 | |
171 | |
172 | Messages |
173 | -------- |
174 | |
175 | Messages are defined as: |
176 | |
177 | struct ipmi_msg |
178 | { |
179 | unsigned char netfn; |
180 | unsigned char lun; |
181 | unsigned char cmd; |
182 | unsigned char *data; |
183 | int data_len; |
184 | }; |
185 | |
186 | The driver takes care of adding/stripping the header information. The |
187 | data portion is just the data to be send (do NOT put addressing info |
188 | here) or the response. Note that the completion code of a response is |
189 | the first item in "data", it is not stripped out because that is how |
190 | all the messages are defined in the spec (and thus makes counting the |
191 | offsets a little easier :-). |
192 | |
193 | When using the IOCTL interface from userland, you must provide a block |
194 | of data for "data", fill it, and set data_len to the length of the |
195 | block of data, even when receiving messages. Otherwise the driver |
196 | will have no place to put the message. |
197 | |
198 | Messages coming up from the message handler in kernelland will come in |
199 | as: |
200 | |
201 | struct ipmi_recv_msg |
202 | { |
203 | struct list_head link; |
204 | |
205 | /* The type of message as defined in the "Receive Types" |
206 | defines above. */ |
207 | int recv_type; |
208 | |
209 | ipmi_user_t *user; |
210 | struct ipmi_addr addr; |
211 | long msgid; |
212 | struct ipmi_msg msg; |
213 | |
214 | /* Call this when done with the message. It will presumably free |
215 | the message and do any other necessary cleanup. */ |
216 | void (*done)(struct ipmi_recv_msg *msg); |
217 | |
218 | /* Place-holder for the data, don't make any assumptions about |
219 | the size or existence of this, since it may change. */ |
220 | unsigned char msg_data[IPMI_MAX_MSG_LENGTH]; |
221 | }; |
222 | |
223 | You should look at the receive type and handle the message |
224 | appropriately. |
225 | |
226 | |
227 | The Upper Layer Interface (Message Handler) |
228 | ------------------------------------------- |
229 | |
230 | The upper layer of the interface provides the users with a consistent |
231 | view of the IPMI interfaces. It allows multiple SMI interfaces to be |
232 | addressed (because some boards actually have multiple BMCs on them) |
233 | and the user should not have to care what type of SMI is below them. |
234 | |
235 | |
236 | Creating the User |
237 | |
238 | To user the message handler, you must first create a user using |
239 | ipmi_create_user. The interface number specifies which SMI you want |
240 | to connect to, and you must supply callback functions to be called |
241 | when data comes in. The callback function can run at interrupt level, |
242 | so be careful using the callbacks. This also allows to you pass in a |
243 | piece of data, the handler_data, that will be passed back to you on |
244 | all calls. |
245 | |
246 | Once you are done, call ipmi_destroy_user() to get rid of the user. |
247 | |
248 | From userland, opening the device automatically creates a user, and |
249 | closing the device automatically destroys the user. |
250 | |
251 | |
252 | Messaging |
253 | |
254 | To send a message from kernel-land, the ipmi_request() call does |
255 | pretty much all message handling. Most of the parameter are |
256 | self-explanatory. However, it takes a "msgid" parameter. This is NOT |
257 | the sequence number of messages. It is simply a long value that is |
258 | passed back when the response for the message is returned. You may |
259 | use it for anything you like. |
260 | |
261 | Responses come back in the function pointed to by the ipmi_recv_hndl |
262 | field of the "handler" that you passed in to ipmi_create_user(). |
263 | Remember again, these may be running at interrupt level. Remember to |
264 | look at the receive type, too. |
265 | |
266 | From userland, you fill out an ipmi_req_t structure and use the |
267 | IPMICTL_SEND_COMMAND ioctl. For incoming stuff, you can use select() |
268 | or poll() to wait for messages to come in. However, you cannot use |
269 | read() to get them, you must call the IPMICTL_RECEIVE_MSG with the |
270 | ipmi_recv_t structure to actually get the message. Remember that you |
271 | must supply a pointer to a block of data in the msg.data field, and |
272 | you must fill in the msg.data_len field with the size of the data. |
273 | This gives the receiver a place to actually put the message. |
274 | |
275 | If the message cannot fit into the data you provide, you will get an |
276 | EMSGSIZE error and the driver will leave the data in the receive |
277 | queue. If you want to get it and have it truncate the message, us |
278 | the IPMICTL_RECEIVE_MSG_TRUNC ioctl. |
279 | |
280 | When you send a command (which is defined by the lowest-order bit of |
281 | the netfn per the IPMI spec) on the IPMB bus, the driver will |
282 | automatically assign the sequence number to the command and save the |
283 | command. If the response is not receive in the IPMI-specified 5 |
284 | seconds, it will generate a response automatically saying the command |
285 | timed out. If an unsolicited response comes in (if it was after 5 |
286 | seconds, for instance), that response will be ignored. |
287 | |
288 | In kernelland, after you receive a message and are done with it, you |
289 | MUST call ipmi_free_recv_msg() on it, or you will leak messages. Note |
290 | that you should NEVER mess with the "done" field of a message, that is |
291 | required to properly clean up the message. |
292 | |
293 | Note that when sending, there is an ipmi_request_supply_msgs() call |
294 | that lets you supply the smi and receive message. This is useful for |
295 | pieces of code that need to work even if the system is out of buffers |
296 | (the watchdog timer uses this, for instance). You supply your own |
297 | buffer and own free routines. This is not recommended for normal use, |
298 | though, since it is tricky to manage your own buffers. |
299 | |
300 | |
301 | Events and Incoming Commands |
302 | |
303 | The driver takes care of polling for IPMI events and receiving |
304 | commands (commands are messages that are not responses, they are |
305 | commands that other things on the IPMB bus have sent you). To receive |
306 | these, you must register for them, they will not automatically be sent |
307 | to you. |
308 | |
309 | To receive events, you must call ipmi_set_gets_events() and set the |
310 | "val" to non-zero. Any events that have been received by the driver |
311 | since startup will immediately be delivered to the first user that |
312 | registers for events. After that, if multiple users are registered |
313 | for events, they will all receive all events that come in. |
314 | |
315 | For receiving commands, you have to individually register commands you |
316 | want to receive. Call ipmi_register_for_cmd() and supply the netfn |
317 | and command name for each command you want to receive. You also |
318 | specify a bitmask of the channels you want to receive the command from |
319 | (or use IPMI_CHAN_ALL for all channels if you don't care). Only one |
320 | user may be registered for each netfn/cmd/channel, but different users |
321 | may register for different commands, or the same command if the |
322 | channel bitmasks do not overlap. |
323 | |
324 | From userland, equivalent IOCTLs are provided to do these functions. |
325 | |
326 | |
327 | The Lower Layer (SMI) Interface |
328 | ------------------------------- |
329 | |
330 | As mentioned before, multiple SMI interfaces may be registered to the |
331 | message handler, each of these is assigned an interface number when |
332 | they register with the message handler. They are generally assigned |
333 | in the order they register, although if an SMI unregisters and then |
334 | another one registers, all bets are off. |
335 | |
336 | The ipmi_smi.h defines the interface for management interfaces, see |
337 | that for more details. |
338 | |
339 | |
340 | The SI Driver |
341 | ------------- |
342 | |
343 | The SI driver allows up to 4 KCS or SMIC interfaces to be configured |
344 | in the system. By default, scan the ACPI tables for interfaces, and |
345 | if it doesn't find any the driver will attempt to register one KCS |
346 | interface at the spec-specified I/O port 0xca2 without interrupts. |
347 | You can change this at module load time (for a module) with: |
348 | |
349 | modprobe ipmi_si.o type=<type1>,<type2>.... |
350 | ports=<port1>,<port2>... addrs=<addr1>,<addr2>... |
351 | irqs=<irq1>,<irq2>... |
352 | regspacings=<sp1>,<sp2>,... regsizes=<size1>,<size2>,... |
353 | regshifts=<shift1>,<shift2>,... |
354 | slave_addrs=<addr1>,<addr2>,... |
355 | force_kipmid=<enable1>,<enable2>,... |
356 | kipmid_max_busy_us=<ustime1>,<ustime2>,... |
357 | unload_when_empty=[0|1] |
358 | trydefaults=[0|1] trydmi=[0|1] tryacpi=[0|1] |
359 | tryplatform=[0|1] trypci=[0|1] |
360 | |
361 | Each of these except try... items is a list, the first item for the |
362 | first interface, second item for the second interface, etc. |
363 | |
364 | The si_type may be either "kcs", "smic", or "bt". If you leave it blank, it |
365 | defaults to "kcs". |
366 | |
367 | If you specify addrs as non-zero for an interface, the driver will |
368 | use the memory address given as the address of the device. This |
369 | overrides si_ports. |
370 | |
371 | If you specify ports as non-zero for an interface, the driver will |
372 | use the I/O port given as the device address. |
373 | |
374 | If you specify irqs as non-zero for an interface, the driver will |
375 | attempt to use the given interrupt for the device. |
376 | |
377 | trydefaults sets whether the standard IPMI interface at 0xca2 and |
378 | any interfaces specified by ACPE are tried. By default, the driver |
379 | tries it, set this value to zero to turn this off. |
380 | |
381 | The other try... items disable discovery by their corresponding |
382 | names. These are all enabled by default, set them to zero to disable |
383 | them. The tryplatform disables openfirmware. |
384 | |
385 | The next three parameters have to do with register layout. The |
386 | registers used by the interfaces may not appear at successive |
387 | locations and they may not be in 8-bit registers. These parameters |
388 | allow the layout of the data in the registers to be more precisely |
389 | specified. |
390 | |
391 | The regspacings parameter give the number of bytes between successive |
392 | register start addresses. For instance, if the regspacing is set to 4 |
393 | and the start address is 0xca2, then the address for the second |
394 | register would be 0xca6. This defaults to 1. |
395 | |
396 | The regsizes parameter gives the size of a register, in bytes. The |
397 | data used by IPMI is 8-bits wide, but it may be inside a larger |
398 | register. This parameter allows the read and write type to specified. |
399 | It may be 1, 2, 4, or 8. The default is 1. |
400 | |
401 | Since the register size may be larger than 32 bits, the IPMI data may not |
402 | be in the lower 8 bits. The regshifts parameter give the amount to shift |
403 | the data to get to the actual IPMI data. |
404 | |
405 | The slave_addrs specifies the IPMI address of the local BMC. This is |
406 | usually 0x20 and the driver defaults to that, but in case it's not, it |
407 | can be specified when the driver starts up. |
408 | |
409 | The force_ipmid parameter forcefully enables (if set to 1) or disables |
410 | (if set to 0) the kernel IPMI daemon. Normally this is auto-detected |
411 | by the driver, but systems with broken interrupts might need an enable, |
412 | or users that don't want the daemon (don't need the performance, don't |
413 | want the CPU hit) can disable it. |
414 | |
415 | If unload_when_empty is set to 1, the driver will be unloaded if it |
416 | doesn't find any interfaces or all the interfaces fail to work. The |
417 | default is one. Setting to 0 is useful with the hotmod, but is |
418 | obviously only useful for modules. |
419 | |
420 | When compiled into the kernel, the parameters can be specified on the |
421 | kernel command line as: |
422 | |
423 | ipmi_si.type=<type1>,<type2>... |
424 | ipmi_si.ports=<port1>,<port2>... ipmi_si.addrs=<addr1>,<addr2>... |
425 | ipmi_si.irqs=<irq1>,<irq2>... ipmi_si.trydefaults=[0|1] |
426 | ipmi_si.regspacings=<sp1>,<sp2>,... |
427 | ipmi_si.regsizes=<size1>,<size2>,... |
428 | ipmi_si.regshifts=<shift1>,<shift2>,... |
429 | ipmi_si.slave_addrs=<addr1>,<addr2>,... |
430 | ipmi_si.force_kipmid=<enable1>,<enable2>,... |
431 | ipmi_si.kipmid_max_busy_us=<ustime1>,<ustime2>,... |
432 | |
433 | It works the same as the module parameters of the same names. |
434 | |
435 | By default, the driver will attempt to detect any device specified by |
436 | ACPI, and if none of those then a KCS device at the spec-specified |
437 | 0xca2. If you want to turn this off, set the "trydefaults" option to |
438 | false. |
439 | |
440 | If your IPMI interface does not support interrupts and is a KCS or |
441 | SMIC interface, the IPMI driver will start a kernel thread for the |
442 | interface to help speed things up. This is a low-priority kernel |
443 | thread that constantly polls the IPMI driver while an IPMI operation |
444 | is in progress. The force_kipmid module parameter will all the user to |
445 | force this thread on or off. If you force it off and don't have |
446 | interrupts, the driver will run VERY slowly. Don't blame me, |
447 | these interfaces suck. |
448 | |
449 | Unfortunately, this thread can use a lot of CPU depending on the |
450 | interface's performance. This can waste a lot of CPU and cause |
451 | various issues with detecting idle CPU and using extra power. To |
452 | avoid this, the kipmid_max_busy_us sets the maximum amount of time, in |
453 | microseconds, that kipmid will spin before sleeping for a tick. This |
454 | value sets a balance between performance and CPU waste and needs to be |
455 | tuned to your needs. Maybe, someday, auto-tuning will be added, but |
456 | that's not a simple thing and even the auto-tuning would need to be |
457 | tuned to the user's desired performance. |
458 | |
459 | The driver supports a hot add and remove of interfaces. This way, |
460 | interfaces can be added or removed after the kernel is up and running. |
461 | This is done using /sys/modules/ipmi_si/parameters/hotmod, which is a |
462 | write-only parameter. You write a string to this interface. The string |
463 | has the format: |
464 | <op1>[:op2[:op3...]] |
465 | The "op"s are: |
466 | add|remove,kcs|bt|smic,mem|i/o,<address>[,<opt1>[,<opt2>[,...]]] |
467 | You can specify more than one interface on the line. The "opt"s are: |
468 | rsp=<regspacing> |
469 | rsi=<regsize> |
470 | rsh=<regshift> |
471 | irq=<irq> |
472 | ipmb=<ipmb slave addr> |
473 | and these have the same meanings as discussed above. Note that you |
474 | can also use this on the kernel command line for a more compact format |
475 | for specifying an interface. Note that when removing an interface, |
476 | only the first three parameters (si type, address type, and address) |
477 | are used for the comparison. Any options are ignored for removing. |
478 | |
479 | |
480 | Other Pieces |
481 | ------------ |
482 | |
483 | Get the detailed info related with the IPMI device |
484 | -------------------------------------------------- |
485 | |
486 | Some users need more detailed information about a device, like where |
487 | the address came from or the raw base device for the IPMI interface. |
488 | You can use the IPMI smi_watcher to catch the IPMI interfaces as they |
489 | come or go, and to grab the information, you can use the function |
490 | ipmi_get_smi_info(), which returns the following structure: |
491 | |
492 | struct ipmi_smi_info { |
493 | enum ipmi_addr_src addr_src; |
494 | struct device *dev; |
495 | union { |
496 | struct { |
497 | void *acpi_handle; |
498 | } acpi_info; |
499 | } addr_info; |
500 | }; |
501 | |
502 | Currently special info for only for SI_ACPI address sources is |
503 | returned. Others may be added as necessary. |
504 | |
505 | Note that the dev pointer is included in the above structure, and |
506 | assuming ipmi_smi_get_info returns success, you must call put_device |
507 | on the dev pointer. |
508 | |
509 | |
510 | Watchdog |
511 | -------- |
512 | |
513 | A watchdog timer is provided that implements the Linux-standard |
514 | watchdog timer interface. It has three module parameters that can be |
515 | used to control it: |
516 | |
517 | modprobe ipmi_watchdog timeout=<t> pretimeout=<t> action=<action type> |
518 | preaction=<preaction type> preop=<preop type> start_now=x |
519 | nowayout=x ifnum_to_use=n |
520 | |
521 | ifnum_to_use specifies which interface the watchdog timer should use. |
522 | The default is -1, which means to pick the first one registered. |
523 | |
524 | The timeout is the number of seconds to the action, and the pretimeout |
525 | is the amount of seconds before the reset that the pre-timeout panic will |
526 | occur (if pretimeout is zero, then pretimeout will not be enabled). Note |
527 | that the pretimeout is the time before the final timeout. So if the |
528 | timeout is 50 seconds and the pretimeout is 10 seconds, then the pretimeout |
529 | will occur in 40 second (10 seconds before the timeout). |
530 | |
531 | The action may be "reset", "power_cycle", or "power_off", and |
532 | specifies what to do when the timer times out, and defaults to |
533 | "reset". |
534 | |
535 | The preaction may be "pre_smi" for an indication through the SMI |
536 | interface, "pre_int" for an indication through the SMI with an |
537 | interrupts, and "pre_nmi" for a NMI on a preaction. This is how |
538 | the driver is informed of the pretimeout. |
539 | |
540 | The preop may be set to "preop_none" for no operation on a pretimeout, |
541 | "preop_panic" to set the preoperation to panic, or "preop_give_data" |
542 | to provide data to read from the watchdog device when the pretimeout |
543 | occurs. A "pre_nmi" setting CANNOT be used with "preop_give_data" |
544 | because you can't do data operations from an NMI. |
545 | |
546 | When preop is set to "preop_give_data", one byte comes ready to read |
547 | on the device when the pretimeout occurs. Select and fasync work on |
548 | the device, as well. |
549 | |
550 | If start_now is set to 1, the watchdog timer will start running as |
551 | soon as the driver is loaded. |
552 | |
553 | If nowayout is set to 1, the watchdog timer will not stop when the |
554 | watchdog device is closed. The default value of nowayout is true |
555 | if the CONFIG_WATCHDOG_NOWAYOUT option is enabled, or false if not. |
556 | |
557 | When compiled into the kernel, the kernel command line is available |
558 | for configuring the watchdog: |
559 | |
560 | ipmi_watchdog.timeout=<t> ipmi_watchdog.pretimeout=<t> |
561 | ipmi_watchdog.action=<action type> |
562 | ipmi_watchdog.preaction=<preaction type> |
563 | ipmi_watchdog.preop=<preop type> |
564 | ipmi_watchdog.start_now=x |
565 | ipmi_watchdog.nowayout=x |
566 | |
567 | The options are the same as the module parameter options. |
568 | |
569 | The watchdog will panic and start a 120 second reset timeout if it |
570 | gets a pre-action. During a panic or a reboot, the watchdog will |
571 | start a 120 timer if it is running to make sure the reboot occurs. |
572 | |
573 | Note that if you use the NMI preaction for the watchdog, you MUST NOT |
574 | use the nmi watchdog. There is no reasonable way to tell if an NMI |
575 | comes from the IPMI controller, so it must assume that if it gets an |
576 | otherwise unhandled NMI, it must be from IPMI and it will panic |
577 | immediately. |
578 | |
579 | Once you open the watchdog timer, you must write a 'V' character to the |
580 | device to close it, or the timer will not stop. This is a new semantic |
581 | for the driver, but makes it consistent with the rest of the watchdog |
582 | drivers in Linux. |
583 | |
584 | |
585 | Panic Timeouts |
586 | -------------- |
587 | |
588 | The OpenIPMI driver supports the ability to put semi-custom and custom |
589 | events in the system event log if a panic occurs. if you enable the |
590 | 'Generate a panic event to all BMCs on a panic' option, you will get |
591 | one event on a panic in a standard IPMI event format. If you enable |
592 | the 'Generate OEM events containing the panic string' option, you will |
593 | also get a bunch of OEM events holding the panic string. |
594 | |
595 | |
596 | The field settings of the events are: |
597 | * Generator ID: 0x21 (kernel) |
598 | * EvM Rev: 0x03 (this event is formatting in IPMI 1.0 format) |
599 | * Sensor Type: 0x20 (OS critical stop sensor) |
600 | * Sensor #: The first byte of the panic string (0 if no panic string) |
601 | * Event Dir | Event Type: 0x6f (Assertion, sensor-specific event info) |
602 | * Event Data 1: 0xa1 (Runtime stop in OEM bytes 2 and 3) |
603 | * Event data 2: second byte of panic string |
604 | * Event data 3: third byte of panic string |
605 | See the IPMI spec for the details of the event layout. This event is |
606 | always sent to the local management controller. It will handle routing |
607 | the message to the right place |
608 | |
609 | Other OEM events have the following format: |
610 | Record ID (bytes 0-1): Set by the SEL. |
611 | Record type (byte 2): 0xf0 (OEM non-timestamped) |
612 | byte 3: The slave address of the card saving the panic |
613 | byte 4: A sequence number (starting at zero) |
614 | The rest of the bytes (11 bytes) are the panic string. If the panic string |
615 | is longer than 11 bytes, multiple messages will be sent with increasing |
616 | sequence numbers. |
617 | |
618 | Because you cannot send OEM events using the standard interface, this |
619 | function will attempt to find an SEL and add the events there. It |
620 | will first query the capabilities of the local management controller. |
621 | If it has an SEL, then they will be stored in the SEL of the local |
622 | management controller. If not, and the local management controller is |
623 | an event generator, the event receiver from the local management |
624 | controller will be queried and the events sent to the SEL on that |
625 | device. Otherwise, the events go nowhere since there is nowhere to |
626 | send them. |
627 | |
628 | |
629 | Poweroff |
630 | -------- |
631 | |
632 | If the poweroff capability is selected, the IPMI driver will install |
633 | a shutdown function into the standard poweroff function pointer. This |
634 | is in the ipmi_poweroff module. When the system requests a powerdown, |
635 | it will send the proper IPMI commands to do this. This is supported on |
636 | several platforms. |
637 | |
638 | There is a module parameter named "poweroff_powercycle" that may |
639 | either be zero (do a power down) or non-zero (do a power cycle, power |
640 | the system off, then power it on in a few seconds). Setting |
641 | ipmi_poweroff.poweroff_control=x will do the same thing on the kernel |
642 | command line. The parameter is also available via the proc filesystem |
643 | in /proc/sys/dev/ipmi/poweroff_powercycle. Note that if the system |
644 | does not support power cycling, it will always do the power off. |
645 | |
646 | The "ifnum_to_use" parameter specifies which interface the poweroff |
647 | code should use. The default is -1, which means to pick the first one |
648 | registered. |
649 | |
650 | Note that if you have ACPI enabled, the system will prefer using ACPI to |
651 | power off. |
652 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9