xref: /linux/drivers/char/ipmi/ipmi_si_intf.c (revision c537b994505099b7197e7d3125b942ecbcc51eb6)
1 /*
2  * ipmi_si.c
3  *
4  * The interface to the IPMI driver for the system interfaces (KCS, SMIC,
5  * BT).
6  *
7  * Author: MontaVista Software, Inc.
8  *         Corey Minyard <minyard@mvista.com>
9  *         source@mvista.com
10  *
11  * Copyright 2002 MontaVista Software Inc.
12  *
13  *  This program is free software; you can redistribute it and/or modify it
14  *  under the terms of the GNU General Public License as published by the
15  *  Free Software Foundation; either version 2 of the License, or (at your
16  *  option) any later version.
17  *
18  *
19  *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
20  *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21  *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22  *  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
24  *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
25  *  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
26  *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
27  *  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
28  *  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  *
30  *  You should have received a copy of the GNU General Public License along
31  *  with this program; if not, write to the Free Software Foundation, Inc.,
32  *  675 Mass Ave, Cambridge, MA 02139, USA.
33  */
34 
35 /*
36  * This file holds the "policy" for the interface to the SMI state
37  * machine.  It does the configuration, handles timers and interrupts,
38  * and drives the real SMI state machine.
39  */
40 
41 #include <linux/module.h>
42 #include <linux/moduleparam.h>
43 #include <asm/system.h>
44 #include <linux/sched.h>
45 #include <linux/timer.h>
46 #include <linux/errno.h>
47 #include <linux/spinlock.h>
48 #include <linux/slab.h>
49 #include <linux/delay.h>
50 #include <linux/list.h>
51 #include <linux/pci.h>
52 #include <linux/ioport.h>
53 #include <linux/notifier.h>
54 #include <linux/mutex.h>
55 #include <linux/kthread.h>
56 #include <asm/irq.h>
57 #include <linux/interrupt.h>
58 #include <linux/rcupdate.h>
59 #include <linux/ipmi_smi.h>
60 #include <asm/io.h>
61 #include "ipmi_si_sm.h"
62 #include <linux/init.h>
63 #include <linux/dmi.h>
64 #include <linux/string.h>
65 #include <linux/ctype.h>
66 
67 #define PFX "ipmi_si: "
68 
69 /* Measure times between events in the driver. */
70 #undef DEBUG_TIMING
71 
72 /* Call every 10 ms. */
73 #define SI_TIMEOUT_TIME_USEC	10000
74 #define SI_USEC_PER_JIFFY	(1000000/HZ)
75 #define SI_TIMEOUT_JIFFIES	(SI_TIMEOUT_TIME_USEC/SI_USEC_PER_JIFFY)
76 #define SI_SHORT_TIMEOUT_USEC  250 /* .25ms when the SM request a
77                                        short timeout */
78 
79 enum si_intf_state {
80 	SI_NORMAL,
81 	SI_GETTING_FLAGS,
82 	SI_GETTING_EVENTS,
83 	SI_CLEARING_FLAGS,
84 	SI_CLEARING_FLAGS_THEN_SET_IRQ,
85 	SI_GETTING_MESSAGES,
86 	SI_ENABLE_INTERRUPTS1,
87 	SI_ENABLE_INTERRUPTS2
88 	/* FIXME - add watchdog stuff. */
89 };
90 
91 /* Some BT-specific defines we need here. */
92 #define IPMI_BT_INTMASK_REG		2
93 #define IPMI_BT_INTMASK_CLEAR_IRQ_BIT	2
94 #define IPMI_BT_INTMASK_ENABLE_IRQ_BIT	1
95 
96 enum si_type {
97     SI_KCS, SI_SMIC, SI_BT
98 };
99 static char *si_to_str[] = { "kcs", "smic", "bt" };
100 
101 #define DEVICE_NAME "ipmi_si"
102 
103 static struct device_driver ipmi_driver =
104 {
105 	.name = DEVICE_NAME,
106 	.bus = &platform_bus_type
107 };
108 
109 struct smi_info
110 {
111 	int                    intf_num;
112 	ipmi_smi_t             intf;
113 	struct si_sm_data      *si_sm;
114 	struct si_sm_handlers  *handlers;
115 	enum si_type           si_type;
116 	spinlock_t             si_lock;
117 	spinlock_t             msg_lock;
118 	struct list_head       xmit_msgs;
119 	struct list_head       hp_xmit_msgs;
120 	struct ipmi_smi_msg    *curr_msg;
121 	enum si_intf_state     si_state;
122 
123 	/* Used to handle the various types of I/O that can occur with
124            IPMI */
125 	struct si_sm_io io;
126 	int (*io_setup)(struct smi_info *info);
127 	void (*io_cleanup)(struct smi_info *info);
128 	int (*irq_setup)(struct smi_info *info);
129 	void (*irq_cleanup)(struct smi_info *info);
130 	unsigned int io_size;
131 	char *addr_source; /* ACPI, PCI, SMBIOS, hardcode, default. */
132 	void (*addr_source_cleanup)(struct smi_info *info);
133 	void *addr_source_data;
134 
135 	/* Per-OEM handler, called from handle_flags().
136 	   Returns 1 when handle_flags() needs to be re-run
137 	   or 0 indicating it set si_state itself.
138 	*/
139 	int (*oem_data_avail_handler)(struct smi_info *smi_info);
140 
141 	/* Flags from the last GET_MSG_FLAGS command, used when an ATTN
142 	   is set to hold the flags until we are done handling everything
143 	   from the flags. */
144 #define RECEIVE_MSG_AVAIL	0x01
145 #define EVENT_MSG_BUFFER_FULL	0x02
146 #define WDT_PRE_TIMEOUT_INT	0x08
147 #define OEM0_DATA_AVAIL     0x20
148 #define OEM1_DATA_AVAIL     0x40
149 #define OEM2_DATA_AVAIL     0x80
150 #define OEM_DATA_AVAIL      (OEM0_DATA_AVAIL | \
151                              OEM1_DATA_AVAIL | \
152                              OEM2_DATA_AVAIL)
153 	unsigned char       msg_flags;
154 
155 	/* If set to true, this will request events the next time the
156 	   state machine is idle. */
157 	atomic_t            req_events;
158 
159 	/* If true, run the state machine to completion on every send
160 	   call.  Generally used after a panic to make sure stuff goes
161 	   out. */
162 	int                 run_to_completion;
163 
164 	/* The I/O port of an SI interface. */
165 	int                 port;
166 
167 	/* The space between start addresses of the two ports.  For
168 	   instance, if the first port is 0xca2 and the spacing is 4, then
169 	   the second port is 0xca6. */
170 	unsigned int        spacing;
171 
172 	/* zero if no irq; */
173 	int                 irq;
174 
175 	/* The timer for this si. */
176 	struct timer_list   si_timer;
177 
178 	/* The time (in jiffies) the last timeout occurred at. */
179 	unsigned long       last_timeout_jiffies;
180 
181 	/* Used to gracefully stop the timer without race conditions. */
182 	atomic_t            stop_operation;
183 
184 	/* The driver will disable interrupts when it gets into a
185 	   situation where it cannot handle messages due to lack of
186 	   memory.  Once that situation clears up, it will re-enable
187 	   interrupts. */
188 	int interrupt_disabled;
189 
190 	/* From the get device id response... */
191 	struct ipmi_device_id device_id;
192 
193 	/* Driver model stuff. */
194 	struct device *dev;
195 	struct platform_device *pdev;
196 
197 	 /* True if we allocated the device, false if it came from
198 	  * someplace else (like PCI). */
199 	int dev_registered;
200 
201 	/* Slave address, could be reported from DMI. */
202 	unsigned char slave_addr;
203 
204 	/* Counters and things for the proc filesystem. */
205 	spinlock_t count_lock;
206 	unsigned long short_timeouts;
207 	unsigned long long_timeouts;
208 	unsigned long timeout_restarts;
209 	unsigned long idles;
210 	unsigned long interrupts;
211 	unsigned long attentions;
212 	unsigned long flag_fetches;
213 	unsigned long hosed_count;
214 	unsigned long complete_transactions;
215 	unsigned long events;
216 	unsigned long watchdog_pretimeouts;
217 	unsigned long incoming_messages;
218 
219         struct task_struct *thread;
220 
221 	struct list_head link;
222 };
223 
224 #define SI_MAX_PARMS 4
225 
226 static int force_kipmid[SI_MAX_PARMS];
227 static int num_force_kipmid;
228 
229 static int unload_when_empty = 1;
230 
231 static int try_smi_init(struct smi_info *smi);
232 static void cleanup_one_si(struct smi_info *to_clean);
233 
234 static ATOMIC_NOTIFIER_HEAD(xaction_notifier_list);
235 static int register_xaction_notifier(struct notifier_block * nb)
236 {
237 	return atomic_notifier_chain_register(&xaction_notifier_list, nb);
238 }
239 
240 static void deliver_recv_msg(struct smi_info *smi_info,
241 			     struct ipmi_smi_msg *msg)
242 {
243 	/* Deliver the message to the upper layer with the lock
244            released. */
245 	spin_unlock(&(smi_info->si_lock));
246 	ipmi_smi_msg_received(smi_info->intf, msg);
247 	spin_lock(&(smi_info->si_lock));
248 }
249 
250 static void return_hosed_msg(struct smi_info *smi_info, int cCode)
251 {
252 	struct ipmi_smi_msg *msg = smi_info->curr_msg;
253 
254 	if (cCode < 0 || cCode > IPMI_ERR_UNSPECIFIED)
255 		cCode = IPMI_ERR_UNSPECIFIED;
256 	/* else use it as is */
257 
258 	/* Make it a reponse */
259 	msg->rsp[0] = msg->data[0] | 4;
260 	msg->rsp[1] = msg->data[1];
261 	msg->rsp[2] = cCode;
262 	msg->rsp_size = 3;
263 
264 	smi_info->curr_msg = NULL;
265 	deliver_recv_msg(smi_info, msg);
266 }
267 
268 static enum si_sm_result start_next_msg(struct smi_info *smi_info)
269 {
270 	int              rv;
271 	struct list_head *entry = NULL;
272 #ifdef DEBUG_TIMING
273 	struct timeval t;
274 #endif
275 
276 	/* No need to save flags, we aleady have interrupts off and we
277 	   already hold the SMI lock. */
278 	spin_lock(&(smi_info->msg_lock));
279 
280 	/* Pick the high priority queue first. */
281 	if (!list_empty(&(smi_info->hp_xmit_msgs))) {
282 		entry = smi_info->hp_xmit_msgs.next;
283 	} else if (!list_empty(&(smi_info->xmit_msgs))) {
284 		entry = smi_info->xmit_msgs.next;
285 	}
286 
287 	if (!entry) {
288 		smi_info->curr_msg = NULL;
289 		rv = SI_SM_IDLE;
290 	} else {
291 		int err;
292 
293 		list_del(entry);
294 		smi_info->curr_msg = list_entry(entry,
295 						struct ipmi_smi_msg,
296 						link);
297 #ifdef DEBUG_TIMING
298 		do_gettimeofday(&t);
299 		printk("**Start2: %d.%9.9d\n", t.tv_sec, t.tv_usec);
300 #endif
301 		err = atomic_notifier_call_chain(&xaction_notifier_list,
302 				0, smi_info);
303 		if (err & NOTIFY_STOP_MASK) {
304 			rv = SI_SM_CALL_WITHOUT_DELAY;
305 			goto out;
306 		}
307 		err = smi_info->handlers->start_transaction(
308 			smi_info->si_sm,
309 			smi_info->curr_msg->data,
310 			smi_info->curr_msg->data_size);
311 		if (err) {
312 			return_hosed_msg(smi_info, err);
313 		}
314 
315 		rv = SI_SM_CALL_WITHOUT_DELAY;
316 	}
317 	out:
318 	spin_unlock(&(smi_info->msg_lock));
319 
320 	return rv;
321 }
322 
323 static void start_enable_irq(struct smi_info *smi_info)
324 {
325 	unsigned char msg[2];
326 
327 	/* If we are enabling interrupts, we have to tell the
328 	   BMC to use them. */
329 	msg[0] = (IPMI_NETFN_APP_REQUEST << 2);
330 	msg[1] = IPMI_GET_BMC_GLOBAL_ENABLES_CMD;
331 
332 	smi_info->handlers->start_transaction(smi_info->si_sm, msg, 2);
333 	smi_info->si_state = SI_ENABLE_INTERRUPTS1;
334 }
335 
336 static void start_clear_flags(struct smi_info *smi_info)
337 {
338 	unsigned char msg[3];
339 
340 	/* Make sure the watchdog pre-timeout flag is not set at startup. */
341 	msg[0] = (IPMI_NETFN_APP_REQUEST << 2);
342 	msg[1] = IPMI_CLEAR_MSG_FLAGS_CMD;
343 	msg[2] = WDT_PRE_TIMEOUT_INT;
344 
345 	smi_info->handlers->start_transaction(smi_info->si_sm, msg, 3);
346 	smi_info->si_state = SI_CLEARING_FLAGS;
347 }
348 
349 /* When we have a situtaion where we run out of memory and cannot
350    allocate messages, we just leave them in the BMC and run the system
351    polled until we can allocate some memory.  Once we have some
352    memory, we will re-enable the interrupt. */
353 static inline void disable_si_irq(struct smi_info *smi_info)
354 {
355 	if ((smi_info->irq) && (!smi_info->interrupt_disabled)) {
356 		disable_irq_nosync(smi_info->irq);
357 		smi_info->interrupt_disabled = 1;
358 	}
359 }
360 
361 static inline void enable_si_irq(struct smi_info *smi_info)
362 {
363 	if ((smi_info->irq) && (smi_info->interrupt_disabled)) {
364 		enable_irq(smi_info->irq);
365 		smi_info->interrupt_disabled = 0;
366 	}
367 }
368 
369 static void handle_flags(struct smi_info *smi_info)
370 {
371  retry:
372 	if (smi_info->msg_flags & WDT_PRE_TIMEOUT_INT) {
373 		/* Watchdog pre-timeout */
374 		spin_lock(&smi_info->count_lock);
375 		smi_info->watchdog_pretimeouts++;
376 		spin_unlock(&smi_info->count_lock);
377 
378 		start_clear_flags(smi_info);
379 		smi_info->msg_flags &= ~WDT_PRE_TIMEOUT_INT;
380 		spin_unlock(&(smi_info->si_lock));
381 		ipmi_smi_watchdog_pretimeout(smi_info->intf);
382 		spin_lock(&(smi_info->si_lock));
383 	} else if (smi_info->msg_flags & RECEIVE_MSG_AVAIL) {
384 		/* Messages available. */
385 		smi_info->curr_msg = ipmi_alloc_smi_msg();
386 		if (!smi_info->curr_msg) {
387 			disable_si_irq(smi_info);
388 			smi_info->si_state = SI_NORMAL;
389 			return;
390 		}
391 		enable_si_irq(smi_info);
392 
393 		smi_info->curr_msg->data[0] = (IPMI_NETFN_APP_REQUEST << 2);
394 		smi_info->curr_msg->data[1] = IPMI_GET_MSG_CMD;
395 		smi_info->curr_msg->data_size = 2;
396 
397 		smi_info->handlers->start_transaction(
398 			smi_info->si_sm,
399 			smi_info->curr_msg->data,
400 			smi_info->curr_msg->data_size);
401 		smi_info->si_state = SI_GETTING_MESSAGES;
402 	} else if (smi_info->msg_flags & EVENT_MSG_BUFFER_FULL) {
403 		/* Events available. */
404 		smi_info->curr_msg = ipmi_alloc_smi_msg();
405 		if (!smi_info->curr_msg) {
406 			disable_si_irq(smi_info);
407 			smi_info->si_state = SI_NORMAL;
408 			return;
409 		}
410 		enable_si_irq(smi_info);
411 
412 		smi_info->curr_msg->data[0] = (IPMI_NETFN_APP_REQUEST << 2);
413 		smi_info->curr_msg->data[1] = IPMI_READ_EVENT_MSG_BUFFER_CMD;
414 		smi_info->curr_msg->data_size = 2;
415 
416 		smi_info->handlers->start_transaction(
417 			smi_info->si_sm,
418 			smi_info->curr_msg->data,
419 			smi_info->curr_msg->data_size);
420 		smi_info->si_state = SI_GETTING_EVENTS;
421 	} else if (smi_info->msg_flags & OEM_DATA_AVAIL &&
422 	           smi_info->oem_data_avail_handler) {
423 		if (smi_info->oem_data_avail_handler(smi_info))
424 			goto retry;
425 	} else {
426 		smi_info->si_state = SI_NORMAL;
427 	}
428 }
429 
430 static void handle_transaction_done(struct smi_info *smi_info)
431 {
432 	struct ipmi_smi_msg *msg;
433 #ifdef DEBUG_TIMING
434 	struct timeval t;
435 
436 	do_gettimeofday(&t);
437 	printk("**Done: %d.%9.9d\n", t.tv_sec, t.tv_usec);
438 #endif
439 	switch (smi_info->si_state) {
440 	case SI_NORMAL:
441 		if (!smi_info->curr_msg)
442 			break;
443 
444 		smi_info->curr_msg->rsp_size
445 			= smi_info->handlers->get_result(
446 				smi_info->si_sm,
447 				smi_info->curr_msg->rsp,
448 				IPMI_MAX_MSG_LENGTH);
449 
450 		/* Do this here becase deliver_recv_msg() releases the
451 		   lock, and a new message can be put in during the
452 		   time the lock is released. */
453 		msg = smi_info->curr_msg;
454 		smi_info->curr_msg = NULL;
455 		deliver_recv_msg(smi_info, msg);
456 		break;
457 
458 	case SI_GETTING_FLAGS:
459 	{
460 		unsigned char msg[4];
461 		unsigned int  len;
462 
463 		/* We got the flags from the SMI, now handle them. */
464 		len = smi_info->handlers->get_result(smi_info->si_sm, msg, 4);
465 		if (msg[2] != 0) {
466 			/* Error fetching flags, just give up for
467 			   now. */
468 			smi_info->si_state = SI_NORMAL;
469 		} else if (len < 4) {
470 			/* Hmm, no flags.  That's technically illegal, but
471 			   don't use uninitialized data. */
472 			smi_info->si_state = SI_NORMAL;
473 		} else {
474 			smi_info->msg_flags = msg[3];
475 			handle_flags(smi_info);
476 		}
477 		break;
478 	}
479 
480 	case SI_CLEARING_FLAGS:
481 	case SI_CLEARING_FLAGS_THEN_SET_IRQ:
482 	{
483 		unsigned char msg[3];
484 
485 		/* We cleared the flags. */
486 		smi_info->handlers->get_result(smi_info->si_sm, msg, 3);
487 		if (msg[2] != 0) {
488 			/* Error clearing flags */
489 			printk(KERN_WARNING
490 			       "ipmi_si: Error clearing flags: %2.2x\n",
491 			       msg[2]);
492 		}
493 		if (smi_info->si_state == SI_CLEARING_FLAGS_THEN_SET_IRQ)
494 			start_enable_irq(smi_info);
495 		else
496 			smi_info->si_state = SI_NORMAL;
497 		break;
498 	}
499 
500 	case SI_GETTING_EVENTS:
501 	{
502 		smi_info->curr_msg->rsp_size
503 			= smi_info->handlers->get_result(
504 				smi_info->si_sm,
505 				smi_info->curr_msg->rsp,
506 				IPMI_MAX_MSG_LENGTH);
507 
508 		/* Do this here becase deliver_recv_msg() releases the
509 		   lock, and a new message can be put in during the
510 		   time the lock is released. */
511 		msg = smi_info->curr_msg;
512 		smi_info->curr_msg = NULL;
513 		if (msg->rsp[2] != 0) {
514 			/* Error getting event, probably done. */
515 			msg->done(msg);
516 
517 			/* Take off the event flag. */
518 			smi_info->msg_flags &= ~EVENT_MSG_BUFFER_FULL;
519 			handle_flags(smi_info);
520 		} else {
521 			spin_lock(&smi_info->count_lock);
522 			smi_info->events++;
523 			spin_unlock(&smi_info->count_lock);
524 
525 			/* Do this before we deliver the message
526 			   because delivering the message releases the
527 			   lock and something else can mess with the
528 			   state. */
529 			handle_flags(smi_info);
530 
531 			deliver_recv_msg(smi_info, msg);
532 		}
533 		break;
534 	}
535 
536 	case SI_GETTING_MESSAGES:
537 	{
538 		smi_info->curr_msg->rsp_size
539 			= smi_info->handlers->get_result(
540 				smi_info->si_sm,
541 				smi_info->curr_msg->rsp,
542 				IPMI_MAX_MSG_LENGTH);
543 
544 		/* Do this here becase deliver_recv_msg() releases the
545 		   lock, and a new message can be put in during the
546 		   time the lock is released. */
547 		msg = smi_info->curr_msg;
548 		smi_info->curr_msg = NULL;
549 		if (msg->rsp[2] != 0) {
550 			/* Error getting event, probably done. */
551 			msg->done(msg);
552 
553 			/* Take off the msg flag. */
554 			smi_info->msg_flags &= ~RECEIVE_MSG_AVAIL;
555 			handle_flags(smi_info);
556 		} else {
557 			spin_lock(&smi_info->count_lock);
558 			smi_info->incoming_messages++;
559 			spin_unlock(&smi_info->count_lock);
560 
561 			/* Do this before we deliver the message
562 			   because delivering the message releases the
563 			   lock and something else can mess with the
564 			   state. */
565 			handle_flags(smi_info);
566 
567 			deliver_recv_msg(smi_info, msg);
568 		}
569 		break;
570 	}
571 
572 	case SI_ENABLE_INTERRUPTS1:
573 	{
574 		unsigned char msg[4];
575 
576 		/* We got the flags from the SMI, now handle them. */
577 		smi_info->handlers->get_result(smi_info->si_sm, msg, 4);
578 		if (msg[2] != 0) {
579 			printk(KERN_WARNING
580 			       "ipmi_si: Could not enable interrupts"
581 			       ", failed get, using polled mode.\n");
582 			smi_info->si_state = SI_NORMAL;
583 		} else {
584 			msg[0] = (IPMI_NETFN_APP_REQUEST << 2);
585 			msg[1] = IPMI_SET_BMC_GLOBAL_ENABLES_CMD;
586 			msg[2] = msg[3] | 1; /* enable msg queue int */
587 			smi_info->handlers->start_transaction(
588 				smi_info->si_sm, msg, 3);
589 			smi_info->si_state = SI_ENABLE_INTERRUPTS2;
590 		}
591 		break;
592 	}
593 
594 	case SI_ENABLE_INTERRUPTS2:
595 	{
596 		unsigned char msg[4];
597 
598 		/* We got the flags from the SMI, now handle them. */
599 		smi_info->handlers->get_result(smi_info->si_sm, msg, 4);
600 		if (msg[2] != 0) {
601 			printk(KERN_WARNING
602 			       "ipmi_si: Could not enable interrupts"
603 			       ", failed set, using polled mode.\n");
604 		}
605 		smi_info->si_state = SI_NORMAL;
606 		break;
607 	}
608 	}
609 }
610 
611 /* Called on timeouts and events.  Timeouts should pass the elapsed
612    time, interrupts should pass in zero. */
613 static enum si_sm_result smi_event_handler(struct smi_info *smi_info,
614 					   int time)
615 {
616 	enum si_sm_result si_sm_result;
617 
618  restart:
619 	/* There used to be a loop here that waited a little while
620 	   (around 25us) before giving up.  That turned out to be
621 	   pointless, the minimum delays I was seeing were in the 300us
622 	   range, which is far too long to wait in an interrupt.  So
623 	   we just run until the state machine tells us something
624 	   happened or it needs a delay. */
625 	si_sm_result = smi_info->handlers->event(smi_info->si_sm, time);
626 	time = 0;
627 	while (si_sm_result == SI_SM_CALL_WITHOUT_DELAY)
628 	{
629 		si_sm_result = smi_info->handlers->event(smi_info->si_sm, 0);
630 	}
631 
632 	if (si_sm_result == SI_SM_TRANSACTION_COMPLETE)
633 	{
634 		spin_lock(&smi_info->count_lock);
635 		smi_info->complete_transactions++;
636 		spin_unlock(&smi_info->count_lock);
637 
638 		handle_transaction_done(smi_info);
639 		si_sm_result = smi_info->handlers->event(smi_info->si_sm, 0);
640 	}
641 	else if (si_sm_result == SI_SM_HOSED)
642 	{
643 		spin_lock(&smi_info->count_lock);
644 		smi_info->hosed_count++;
645 		spin_unlock(&smi_info->count_lock);
646 
647 		/* Do the before return_hosed_msg, because that
648 		   releases the lock. */
649 		smi_info->si_state = SI_NORMAL;
650 		if (smi_info->curr_msg != NULL) {
651 			/* If we were handling a user message, format
652                            a response to send to the upper layer to
653                            tell it about the error. */
654 			return_hosed_msg(smi_info, IPMI_ERR_UNSPECIFIED);
655 		}
656 		si_sm_result = smi_info->handlers->event(smi_info->si_sm, 0);
657 	}
658 
659 	/* We prefer handling attn over new messages. */
660 	if (si_sm_result == SI_SM_ATTN)
661 	{
662 		unsigned char msg[2];
663 
664 		spin_lock(&smi_info->count_lock);
665 		smi_info->attentions++;
666 		spin_unlock(&smi_info->count_lock);
667 
668 		/* Got a attn, send down a get message flags to see
669                    what's causing it.  It would be better to handle
670                    this in the upper layer, but due to the way
671                    interrupts work with the SMI, that's not really
672                    possible. */
673 		msg[0] = (IPMI_NETFN_APP_REQUEST << 2);
674 		msg[1] = IPMI_GET_MSG_FLAGS_CMD;
675 
676 		smi_info->handlers->start_transaction(
677 			smi_info->si_sm, msg, 2);
678 		smi_info->si_state = SI_GETTING_FLAGS;
679 		goto restart;
680 	}
681 
682 	/* If we are currently idle, try to start the next message. */
683 	if (si_sm_result == SI_SM_IDLE) {
684 		spin_lock(&smi_info->count_lock);
685 		smi_info->idles++;
686 		spin_unlock(&smi_info->count_lock);
687 
688 		si_sm_result = start_next_msg(smi_info);
689 		if (si_sm_result != SI_SM_IDLE)
690 			goto restart;
691         }
692 
693 	if ((si_sm_result == SI_SM_IDLE)
694 	    && (atomic_read(&smi_info->req_events)))
695 	{
696 		/* We are idle and the upper layer requested that I fetch
697 		   events, so do so. */
698 		atomic_set(&smi_info->req_events, 0);
699 
700 		smi_info->curr_msg = ipmi_alloc_smi_msg();
701 		if (!smi_info->curr_msg)
702 			goto out;
703 
704 		smi_info->curr_msg->data[0] = (IPMI_NETFN_APP_REQUEST << 2);
705 		smi_info->curr_msg->data[1] = IPMI_READ_EVENT_MSG_BUFFER_CMD;
706 		smi_info->curr_msg->data_size = 2;
707 
708 		smi_info->handlers->start_transaction(
709 			smi_info->si_sm,
710 			smi_info->curr_msg->data,
711 			smi_info->curr_msg->data_size);
712 		smi_info->si_state = SI_GETTING_EVENTS;
713 		goto restart;
714 	}
715  out:
716 	return si_sm_result;
717 }
718 
719 static void sender(void                *send_info,
720 		   struct ipmi_smi_msg *msg,
721 		   int                 priority)
722 {
723 	struct smi_info   *smi_info = send_info;
724 	enum si_sm_result result;
725 	unsigned long     flags;
726 #ifdef DEBUG_TIMING
727 	struct timeval    t;
728 #endif
729 
730 	if (atomic_read(&smi_info->stop_operation)) {
731 		msg->rsp[0] = msg->data[0] | 4;
732 		msg->rsp[1] = msg->data[1];
733 		msg->rsp[2] = IPMI_ERR_UNSPECIFIED;
734 		msg->rsp_size = 3;
735 		deliver_recv_msg(smi_info, msg);
736 		return;
737 	}
738 
739 	spin_lock_irqsave(&(smi_info->msg_lock), flags);
740 #ifdef DEBUG_TIMING
741 	do_gettimeofday(&t);
742 	printk("**Enqueue: %d.%9.9d\n", t.tv_sec, t.tv_usec);
743 #endif
744 
745 	if (smi_info->run_to_completion) {
746 		/* If we are running to completion, then throw it in
747 		   the list and run transactions until everything is
748 		   clear.  Priority doesn't matter here. */
749 		list_add_tail(&(msg->link), &(smi_info->xmit_msgs));
750 
751 		/* We have to release the msg lock and claim the smi
752 		   lock in this case, because of race conditions. */
753 		spin_unlock_irqrestore(&(smi_info->msg_lock), flags);
754 
755 		spin_lock_irqsave(&(smi_info->si_lock), flags);
756 		result = smi_event_handler(smi_info, 0);
757 		while (result != SI_SM_IDLE) {
758 			udelay(SI_SHORT_TIMEOUT_USEC);
759 			result = smi_event_handler(smi_info,
760 						   SI_SHORT_TIMEOUT_USEC);
761 		}
762 		spin_unlock_irqrestore(&(smi_info->si_lock), flags);
763 		return;
764 	} else {
765 		if (priority > 0) {
766 			list_add_tail(&(msg->link), &(smi_info->hp_xmit_msgs));
767 		} else {
768 			list_add_tail(&(msg->link), &(smi_info->xmit_msgs));
769 		}
770 	}
771 	spin_unlock_irqrestore(&(smi_info->msg_lock), flags);
772 
773 	spin_lock_irqsave(&(smi_info->si_lock), flags);
774 	if ((smi_info->si_state == SI_NORMAL)
775 	    && (smi_info->curr_msg == NULL))
776 	{
777 		start_next_msg(smi_info);
778 	}
779 	spin_unlock_irqrestore(&(smi_info->si_lock), flags);
780 }
781 
782 static void set_run_to_completion(void *send_info, int i_run_to_completion)
783 {
784 	struct smi_info   *smi_info = send_info;
785 	enum si_sm_result result;
786 	unsigned long     flags;
787 
788 	spin_lock_irqsave(&(smi_info->si_lock), flags);
789 
790 	smi_info->run_to_completion = i_run_to_completion;
791 	if (i_run_to_completion) {
792 		result = smi_event_handler(smi_info, 0);
793 		while (result != SI_SM_IDLE) {
794 			udelay(SI_SHORT_TIMEOUT_USEC);
795 			result = smi_event_handler(smi_info,
796 						   SI_SHORT_TIMEOUT_USEC);
797 		}
798 	}
799 
800 	spin_unlock_irqrestore(&(smi_info->si_lock), flags);
801 }
802 
803 static int ipmi_thread(void *data)
804 {
805 	struct smi_info *smi_info = data;
806 	unsigned long flags;
807 	enum si_sm_result smi_result;
808 
809 	set_user_nice(current, 19);
810 	while (!kthread_should_stop()) {
811 		spin_lock_irqsave(&(smi_info->si_lock), flags);
812 		smi_result = smi_event_handler(smi_info, 0);
813 		spin_unlock_irqrestore(&(smi_info->si_lock), flags);
814 		if (smi_result == SI_SM_CALL_WITHOUT_DELAY) {
815 			/* do nothing */
816 		}
817 		else if (smi_result == SI_SM_CALL_WITH_DELAY)
818 			schedule();
819 		else
820 			schedule_timeout_interruptible(1);
821 	}
822 	return 0;
823 }
824 
825 
826 static void poll(void *send_info)
827 {
828 	struct smi_info *smi_info = send_info;
829 
830 	/*
831 	 * Make sure there is some delay in the poll loop so we can
832 	 * drive time forward and timeout things.
833 	 */
834 	udelay(10);
835 	smi_event_handler(smi_info, 10);
836 }
837 
838 static void request_events(void *send_info)
839 {
840 	struct smi_info *smi_info = send_info;
841 
842 	if (atomic_read(&smi_info->stop_operation))
843 		return;
844 
845 	atomic_set(&smi_info->req_events, 1);
846 }
847 
848 static int initialized;
849 
850 static void smi_timeout(unsigned long data)
851 {
852 	struct smi_info   *smi_info = (struct smi_info *) data;
853 	enum si_sm_result smi_result;
854 	unsigned long     flags;
855 	unsigned long     jiffies_now;
856 	long              time_diff;
857 #ifdef DEBUG_TIMING
858 	struct timeval    t;
859 #endif
860 
861 	if (atomic_read(&smi_info->stop_operation))
862 		return;
863 
864 	spin_lock_irqsave(&(smi_info->si_lock), flags);
865 #ifdef DEBUG_TIMING
866 	do_gettimeofday(&t);
867 	printk("**Timer: %d.%9.9d\n", t.tv_sec, t.tv_usec);
868 #endif
869 	jiffies_now = jiffies;
870 	time_diff = (((long)jiffies_now - (long)smi_info->last_timeout_jiffies)
871 		     * SI_USEC_PER_JIFFY);
872 	smi_result = smi_event_handler(smi_info, time_diff);
873 
874 	spin_unlock_irqrestore(&(smi_info->si_lock), flags);
875 
876 	smi_info->last_timeout_jiffies = jiffies_now;
877 
878 	if ((smi_info->irq) && (!smi_info->interrupt_disabled)) {
879 		/* Running with interrupts, only do long timeouts. */
880 		smi_info->si_timer.expires = jiffies + SI_TIMEOUT_JIFFIES;
881 		spin_lock_irqsave(&smi_info->count_lock, flags);
882 		smi_info->long_timeouts++;
883 		spin_unlock_irqrestore(&smi_info->count_lock, flags);
884 		goto do_add_timer;
885 	}
886 
887 	/* If the state machine asks for a short delay, then shorten
888            the timer timeout. */
889 	if (smi_result == SI_SM_CALL_WITH_DELAY) {
890 		spin_lock_irqsave(&smi_info->count_lock, flags);
891 		smi_info->short_timeouts++;
892 		spin_unlock_irqrestore(&smi_info->count_lock, flags);
893 		smi_info->si_timer.expires = jiffies + 1;
894 	} else {
895 		spin_lock_irqsave(&smi_info->count_lock, flags);
896 		smi_info->long_timeouts++;
897 		spin_unlock_irqrestore(&smi_info->count_lock, flags);
898 		smi_info->si_timer.expires = jiffies + SI_TIMEOUT_JIFFIES;
899 	}
900 
901  do_add_timer:
902 	add_timer(&(smi_info->si_timer));
903 }
904 
905 static irqreturn_t si_irq_handler(int irq, void *data)
906 {
907 	struct smi_info *smi_info = data;
908 	unsigned long   flags;
909 #ifdef DEBUG_TIMING
910 	struct timeval  t;
911 #endif
912 
913 	spin_lock_irqsave(&(smi_info->si_lock), flags);
914 
915 	spin_lock(&smi_info->count_lock);
916 	smi_info->interrupts++;
917 	spin_unlock(&smi_info->count_lock);
918 
919 	if (atomic_read(&smi_info->stop_operation))
920 		goto out;
921 
922 #ifdef DEBUG_TIMING
923 	do_gettimeofday(&t);
924 	printk("**Interrupt: %d.%9.9d\n", t.tv_sec, t.tv_usec);
925 #endif
926 	smi_event_handler(smi_info, 0);
927  out:
928 	spin_unlock_irqrestore(&(smi_info->si_lock), flags);
929 	return IRQ_HANDLED;
930 }
931 
932 static irqreturn_t si_bt_irq_handler(int irq, void *data)
933 {
934 	struct smi_info *smi_info = data;
935 	/* We need to clear the IRQ flag for the BT interface. */
936 	smi_info->io.outputb(&smi_info->io, IPMI_BT_INTMASK_REG,
937 			     IPMI_BT_INTMASK_CLEAR_IRQ_BIT
938 			     | IPMI_BT_INTMASK_ENABLE_IRQ_BIT);
939 	return si_irq_handler(irq, data);
940 }
941 
942 static int smi_start_processing(void       *send_info,
943 				ipmi_smi_t intf)
944 {
945 	struct smi_info *new_smi = send_info;
946 	int             enable = 0;
947 
948 	new_smi->intf = intf;
949 
950 	/* Set up the timer that drives the interface. */
951 	setup_timer(&new_smi->si_timer, smi_timeout, (long)new_smi);
952 	new_smi->last_timeout_jiffies = jiffies;
953 	mod_timer(&new_smi->si_timer, jiffies + SI_TIMEOUT_JIFFIES);
954 
955 	/*
956 	 * Check if the user forcefully enabled the daemon.
957 	 */
958 	if (new_smi->intf_num < num_force_kipmid)
959 		enable = force_kipmid[new_smi->intf_num];
960 	/*
961 	 * The BT interface is efficient enough to not need a thread,
962 	 * and there is no need for a thread if we have interrupts.
963 	 */
964  	else if ((new_smi->si_type != SI_BT) && (!new_smi->irq))
965 		enable = 1;
966 
967 	if (enable) {
968 		new_smi->thread = kthread_run(ipmi_thread, new_smi,
969 					      "kipmi%d", new_smi->intf_num);
970 		if (IS_ERR(new_smi->thread)) {
971 			printk(KERN_NOTICE "ipmi_si_intf: Could not start"
972 			       " kernel thread due to error %ld, only using"
973 			       " timers to drive the interface\n",
974 			       PTR_ERR(new_smi->thread));
975 			new_smi->thread = NULL;
976 		}
977 	}
978 
979 	return 0;
980 }
981 
982 static void set_maintenance_mode(void *send_info, int enable)
983 {
984 	struct smi_info   *smi_info = send_info;
985 
986 	if (!enable)
987 		atomic_set(&smi_info->req_events, 0);
988 }
989 
990 static struct ipmi_smi_handlers handlers =
991 {
992 	.owner                  = THIS_MODULE,
993 	.start_processing       = smi_start_processing,
994 	.sender			= sender,
995 	.request_events		= request_events,
996 	.set_maintenance_mode   = set_maintenance_mode,
997 	.set_run_to_completion  = set_run_to_completion,
998 	.poll			= poll,
999 };
1000 
1001 /* There can be 4 IO ports passed in (with or without IRQs), 4 addresses,
1002    a default IO port, and 1 ACPI/SPMI address.  That sets SI_MAX_DRIVERS */
1003 
1004 static LIST_HEAD(smi_infos);
1005 static DEFINE_MUTEX(smi_infos_lock);
1006 static int smi_num; /* Used to sequence the SMIs */
1007 
1008 #define DEFAULT_REGSPACING	1
1009 
1010 static int           si_trydefaults = 1;
1011 static char          *si_type[SI_MAX_PARMS];
1012 #define MAX_SI_TYPE_STR 30
1013 static char          si_type_str[MAX_SI_TYPE_STR];
1014 static unsigned long addrs[SI_MAX_PARMS];
1015 static int num_addrs;
1016 static unsigned int  ports[SI_MAX_PARMS];
1017 static int num_ports;
1018 static int           irqs[SI_MAX_PARMS];
1019 static int num_irqs;
1020 static int           regspacings[SI_MAX_PARMS];
1021 static int num_regspacings;
1022 static int           regsizes[SI_MAX_PARMS];
1023 static int num_regsizes;
1024 static int           regshifts[SI_MAX_PARMS];
1025 static int num_regshifts;
1026 static int slave_addrs[SI_MAX_PARMS];
1027 static int num_slave_addrs;
1028 
1029 #define IPMI_IO_ADDR_SPACE  0
1030 #define IPMI_MEM_ADDR_SPACE 1
1031 static char *addr_space_to_str[] = { "i/o", "mem" };
1032 
1033 static int hotmod_handler(const char *val, struct kernel_param *kp);
1034 
1035 module_param_call(hotmod, hotmod_handler, NULL, NULL, 0200);
1036 MODULE_PARM_DESC(hotmod, "Add and remove interfaces.  See"
1037 		 " Documentation/IPMI.txt in the kernel sources for the"
1038 		 " gory details.");
1039 
1040 module_param_named(trydefaults, si_trydefaults, bool, 0);
1041 MODULE_PARM_DESC(trydefaults, "Setting this to 'false' will disable the"
1042 		 " default scan of the KCS and SMIC interface at the standard"
1043 		 " address");
1044 module_param_string(type, si_type_str, MAX_SI_TYPE_STR, 0);
1045 MODULE_PARM_DESC(type, "Defines the type of each interface, each"
1046 		 " interface separated by commas.  The types are 'kcs',"
1047 		 " 'smic', and 'bt'.  For example si_type=kcs,bt will set"
1048 		 " the first interface to kcs and the second to bt");
1049 module_param_array(addrs, long, &num_addrs, 0);
1050 MODULE_PARM_DESC(addrs, "Sets the memory address of each interface, the"
1051 		 " addresses separated by commas.  Only use if an interface"
1052 		 " is in memory.  Otherwise, set it to zero or leave"
1053 		 " it blank.");
1054 module_param_array(ports, int, &num_ports, 0);
1055 MODULE_PARM_DESC(ports, "Sets the port address of each interface, the"
1056 		 " addresses separated by commas.  Only use if an interface"
1057 		 " is a port.  Otherwise, set it to zero or leave"
1058 		 " it blank.");
1059 module_param_array(irqs, int, &num_irqs, 0);
1060 MODULE_PARM_DESC(irqs, "Sets the interrupt of each interface, the"
1061 		 " addresses separated by commas.  Only use if an interface"
1062 		 " has an interrupt.  Otherwise, set it to zero or leave"
1063 		 " it blank.");
1064 module_param_array(regspacings, int, &num_regspacings, 0);
1065 MODULE_PARM_DESC(regspacings, "The number of bytes between the start address"
1066 		 " and each successive register used by the interface.  For"
1067 		 " instance, if the start address is 0xca2 and the spacing"
1068 		 " is 2, then the second address is at 0xca4.  Defaults"
1069 		 " to 1.");
1070 module_param_array(regsizes, int, &num_regsizes, 0);
1071 MODULE_PARM_DESC(regsizes, "The size of the specific IPMI register in bytes."
1072 		 " This should generally be 1, 2, 4, or 8 for an 8-bit,"
1073 		 " 16-bit, 32-bit, or 64-bit register.  Use this if you"
1074 		 " the 8-bit IPMI register has to be read from a larger"
1075 		 " register.");
1076 module_param_array(regshifts, int, &num_regshifts, 0);
1077 MODULE_PARM_DESC(regshifts, "The amount to shift the data read from the."
1078 		 " IPMI register, in bits.  For instance, if the data"
1079 		 " is read from a 32-bit word and the IPMI data is in"
1080 		 " bit 8-15, then the shift would be 8");
1081 module_param_array(slave_addrs, int, &num_slave_addrs, 0);
1082 MODULE_PARM_DESC(slave_addrs, "Set the default IPMB slave address for"
1083 		 " the controller.  Normally this is 0x20, but can be"
1084 		 " overridden by this parm.  This is an array indexed"
1085 		 " by interface number.");
1086 module_param_array(force_kipmid, int, &num_force_kipmid, 0);
1087 MODULE_PARM_DESC(force_kipmid, "Force the kipmi daemon to be enabled (1) or"
1088 		 " disabled(0).  Normally the IPMI driver auto-detects"
1089 		 " this, but the value may be overridden by this parm.");
1090 module_param(unload_when_empty, int, 0);
1091 MODULE_PARM_DESC(unload_when_empty, "Unload the module if no interfaces are"
1092 		 " specified or found, default is 1.  Setting to 0"
1093 		 " is useful for hot add of devices using hotmod.");
1094 
1095 
1096 static void std_irq_cleanup(struct smi_info *info)
1097 {
1098 	if (info->si_type == SI_BT)
1099 		/* Disable the interrupt in the BT interface. */
1100 		info->io.outputb(&info->io, IPMI_BT_INTMASK_REG, 0);
1101 	free_irq(info->irq, info);
1102 }
1103 
1104 static int std_irq_setup(struct smi_info *info)
1105 {
1106 	int rv;
1107 
1108 	if (!info->irq)
1109 		return 0;
1110 
1111 	if (info->si_type == SI_BT) {
1112 		rv = request_irq(info->irq,
1113 				 si_bt_irq_handler,
1114 				 IRQF_DISABLED,
1115 				 DEVICE_NAME,
1116 				 info);
1117 		if (!rv)
1118 			/* Enable the interrupt in the BT interface. */
1119 			info->io.outputb(&info->io, IPMI_BT_INTMASK_REG,
1120 					 IPMI_BT_INTMASK_ENABLE_IRQ_BIT);
1121 	} else
1122 		rv = request_irq(info->irq,
1123 				 si_irq_handler,
1124 				 IRQF_DISABLED,
1125 				 DEVICE_NAME,
1126 				 info);
1127 	if (rv) {
1128 		printk(KERN_WARNING
1129 		       "ipmi_si: %s unable to claim interrupt %d,"
1130 		       " running polled\n",
1131 		       DEVICE_NAME, info->irq);
1132 		info->irq = 0;
1133 	} else {
1134 		info->irq_cleanup = std_irq_cleanup;
1135 		printk("  Using irq %d\n", info->irq);
1136 	}
1137 
1138 	return rv;
1139 }
1140 
1141 static unsigned char port_inb(struct si_sm_io *io, unsigned int offset)
1142 {
1143 	unsigned int addr = io->addr_data;
1144 
1145 	return inb(addr + (offset * io->regspacing));
1146 }
1147 
1148 static void port_outb(struct si_sm_io *io, unsigned int offset,
1149 		      unsigned char b)
1150 {
1151 	unsigned int addr = io->addr_data;
1152 
1153 	outb(b, addr + (offset * io->regspacing));
1154 }
1155 
1156 static unsigned char port_inw(struct si_sm_io *io, unsigned int offset)
1157 {
1158 	unsigned int addr = io->addr_data;
1159 
1160 	return (inw(addr + (offset * io->regspacing)) >> io->regshift) & 0xff;
1161 }
1162 
1163 static void port_outw(struct si_sm_io *io, unsigned int offset,
1164 		      unsigned char b)
1165 {
1166 	unsigned int addr = io->addr_data;
1167 
1168 	outw(b << io->regshift, addr + (offset * io->regspacing));
1169 }
1170 
1171 static unsigned char port_inl(struct si_sm_io *io, unsigned int offset)
1172 {
1173 	unsigned int addr = io->addr_data;
1174 
1175 	return (inl(addr + (offset * io->regspacing)) >> io->regshift) & 0xff;
1176 }
1177 
1178 static void port_outl(struct si_sm_io *io, unsigned int offset,
1179 		      unsigned char b)
1180 {
1181 	unsigned int addr = io->addr_data;
1182 
1183 	outl(b << io->regshift, addr+(offset * io->regspacing));
1184 }
1185 
1186 static void port_cleanup(struct smi_info *info)
1187 {
1188 	unsigned int addr = info->io.addr_data;
1189 	int          idx;
1190 
1191 	if (addr) {
1192 	  	for (idx = 0; idx < info->io_size; idx++) {
1193 			release_region(addr + idx * info->io.regspacing,
1194 				       info->io.regsize);
1195 		}
1196 	}
1197 }
1198 
1199 static int port_setup(struct smi_info *info)
1200 {
1201 	unsigned int addr = info->io.addr_data;
1202 	int          idx;
1203 
1204 	if (!addr)
1205 		return -ENODEV;
1206 
1207 	info->io_cleanup = port_cleanup;
1208 
1209 	/* Figure out the actual inb/inw/inl/etc routine to use based
1210 	   upon the register size. */
1211 	switch (info->io.regsize) {
1212 	case 1:
1213 		info->io.inputb = port_inb;
1214 		info->io.outputb = port_outb;
1215 		break;
1216 	case 2:
1217 		info->io.inputb = port_inw;
1218 		info->io.outputb = port_outw;
1219 		break;
1220 	case 4:
1221 		info->io.inputb = port_inl;
1222 		info->io.outputb = port_outl;
1223 		break;
1224 	default:
1225 		printk("ipmi_si: Invalid register size: %d\n",
1226 		       info->io.regsize);
1227 		return -EINVAL;
1228 	}
1229 
1230 	/* Some BIOSes reserve disjoint I/O regions in their ACPI
1231 	 * tables.  This causes problems when trying to register the
1232 	 * entire I/O region.  Therefore we must register each I/O
1233 	 * port separately.
1234 	 */
1235   	for (idx = 0; idx < info->io_size; idx++) {
1236 		if (request_region(addr + idx * info->io.regspacing,
1237 				   info->io.regsize, DEVICE_NAME) == NULL) {
1238 			/* Undo allocations */
1239 			while (idx--) {
1240 				release_region(addr + idx * info->io.regspacing,
1241 					       info->io.regsize);
1242 			}
1243 			return -EIO;
1244 		}
1245 	}
1246 	return 0;
1247 }
1248 
1249 static unsigned char intf_mem_inb(struct si_sm_io *io, unsigned int offset)
1250 {
1251 	return readb((io->addr)+(offset * io->regspacing));
1252 }
1253 
1254 static void intf_mem_outb(struct si_sm_io *io, unsigned int offset,
1255 		     unsigned char b)
1256 {
1257 	writeb(b, (io->addr)+(offset * io->regspacing));
1258 }
1259 
1260 static unsigned char intf_mem_inw(struct si_sm_io *io, unsigned int offset)
1261 {
1262 	return (readw((io->addr)+(offset * io->regspacing)) >> io->regshift)
1263 		& 0xff;
1264 }
1265 
1266 static void intf_mem_outw(struct si_sm_io *io, unsigned int offset,
1267 		     unsigned char b)
1268 {
1269 	writeb(b << io->regshift, (io->addr)+(offset * io->regspacing));
1270 }
1271 
1272 static unsigned char intf_mem_inl(struct si_sm_io *io, unsigned int offset)
1273 {
1274 	return (readl((io->addr)+(offset * io->regspacing)) >> io->regshift)
1275 		& 0xff;
1276 }
1277 
1278 static void intf_mem_outl(struct si_sm_io *io, unsigned int offset,
1279 		     unsigned char b)
1280 {
1281 	writel(b << io->regshift, (io->addr)+(offset * io->regspacing));
1282 }
1283 
1284 #ifdef readq
1285 static unsigned char mem_inq(struct si_sm_io *io, unsigned int offset)
1286 {
1287 	return (readq((io->addr)+(offset * io->regspacing)) >> io->regshift)
1288 		& 0xff;
1289 }
1290 
1291 static void mem_outq(struct si_sm_io *io, unsigned int offset,
1292 		     unsigned char b)
1293 {
1294 	writeq(b << io->regshift, (io->addr)+(offset * io->regspacing));
1295 }
1296 #endif
1297 
1298 static void mem_cleanup(struct smi_info *info)
1299 {
1300 	unsigned long addr = info->io.addr_data;
1301 	int           mapsize;
1302 
1303 	if (info->io.addr) {
1304 		iounmap(info->io.addr);
1305 
1306 		mapsize = ((info->io_size * info->io.regspacing)
1307 			   - (info->io.regspacing - info->io.regsize));
1308 
1309 		release_mem_region(addr, mapsize);
1310 	}
1311 }
1312 
1313 static int mem_setup(struct smi_info *info)
1314 {
1315 	unsigned long addr = info->io.addr_data;
1316 	int           mapsize;
1317 
1318 	if (!addr)
1319 		return -ENODEV;
1320 
1321 	info->io_cleanup = mem_cleanup;
1322 
1323 	/* Figure out the actual readb/readw/readl/etc routine to use based
1324 	   upon the register size. */
1325 	switch (info->io.regsize) {
1326 	case 1:
1327 		info->io.inputb = intf_mem_inb;
1328 		info->io.outputb = intf_mem_outb;
1329 		break;
1330 	case 2:
1331 		info->io.inputb = intf_mem_inw;
1332 		info->io.outputb = intf_mem_outw;
1333 		break;
1334 	case 4:
1335 		info->io.inputb = intf_mem_inl;
1336 		info->io.outputb = intf_mem_outl;
1337 		break;
1338 #ifdef readq
1339 	case 8:
1340 		info->io.inputb = mem_inq;
1341 		info->io.outputb = mem_outq;
1342 		break;
1343 #endif
1344 	default:
1345 		printk("ipmi_si: Invalid register size: %d\n",
1346 		       info->io.regsize);
1347 		return -EINVAL;
1348 	}
1349 
1350 	/* Calculate the total amount of memory to claim.  This is an
1351 	 * unusual looking calculation, but it avoids claiming any
1352 	 * more memory than it has to.  It will claim everything
1353 	 * between the first address to the end of the last full
1354 	 * register. */
1355 	mapsize = ((info->io_size * info->io.regspacing)
1356 		   - (info->io.regspacing - info->io.regsize));
1357 
1358 	if (request_mem_region(addr, mapsize, DEVICE_NAME) == NULL)
1359 		return -EIO;
1360 
1361 	info->io.addr = ioremap(addr, mapsize);
1362 	if (info->io.addr == NULL) {
1363 		release_mem_region(addr, mapsize);
1364 		return -EIO;
1365 	}
1366 	return 0;
1367 }
1368 
1369 /*
1370  * Parms come in as <op1>[:op2[:op3...]].  ops are:
1371  *   add|remove,kcs|bt|smic,mem|i/o,<address>[,<opt1>[,<opt2>[,...]]]
1372  * Options are:
1373  *   rsp=<regspacing>
1374  *   rsi=<regsize>
1375  *   rsh=<regshift>
1376  *   irq=<irq>
1377  *   ipmb=<ipmb addr>
1378  */
1379 enum hotmod_op { HM_ADD, HM_REMOVE };
1380 struct hotmod_vals {
1381 	char *name;
1382 	int  val;
1383 };
1384 static struct hotmod_vals hotmod_ops[] = {
1385 	{ "add",	HM_ADD },
1386 	{ "remove",	HM_REMOVE },
1387 	{ NULL }
1388 };
1389 static struct hotmod_vals hotmod_si[] = {
1390 	{ "kcs",	SI_KCS },
1391 	{ "smic",	SI_SMIC },
1392 	{ "bt",		SI_BT },
1393 	{ NULL }
1394 };
1395 static struct hotmod_vals hotmod_as[] = {
1396 	{ "mem",	IPMI_MEM_ADDR_SPACE },
1397 	{ "i/o",	IPMI_IO_ADDR_SPACE },
1398 	{ NULL }
1399 };
1400 
1401 static int parse_str(struct hotmod_vals *v, int *val, char *name, char **curr)
1402 {
1403 	char *s;
1404 	int  i;
1405 
1406 	s = strchr(*curr, ',');
1407 	if (!s) {
1408 		printk(KERN_WARNING PFX "No hotmod %s given.\n", name);
1409 		return -EINVAL;
1410 	}
1411 	*s = '\0';
1412 	s++;
1413 	for (i = 0; hotmod_ops[i].name; i++) {
1414 		if (strcmp(*curr, v[i].name) == 0) {
1415 			*val = v[i].val;
1416 			*curr = s;
1417 			return 0;
1418 		}
1419 	}
1420 
1421 	printk(KERN_WARNING PFX "Invalid hotmod %s '%s'\n", name, *curr);
1422 	return -EINVAL;
1423 }
1424 
1425 static int check_hotmod_int_op(const char *curr, const char *option,
1426 			       const char *name, int *val)
1427 {
1428 	char *n;
1429 
1430 	if (strcmp(curr, name) == 0) {
1431 		if (!option) {
1432 			printk(KERN_WARNING PFX
1433 			       "No option given for '%s'\n",
1434 			       curr);
1435 			return -EINVAL;
1436 		}
1437 		*val = simple_strtoul(option, &n, 0);
1438 		if ((*n != '\0') || (*option == '\0')) {
1439 			printk(KERN_WARNING PFX
1440 			       "Bad option given for '%s'\n",
1441 			       curr);
1442 			return -EINVAL;
1443 		}
1444 		return 1;
1445 	}
1446 	return 0;
1447 }
1448 
1449 static int hotmod_handler(const char *val, struct kernel_param *kp)
1450 {
1451 	char *str = kstrdup(val, GFP_KERNEL);
1452 	int  rv;
1453 	char *next, *curr, *s, *n, *o;
1454 	enum hotmod_op op;
1455 	enum si_type si_type;
1456 	int  addr_space;
1457 	unsigned long addr;
1458 	int regspacing;
1459 	int regsize;
1460 	int regshift;
1461 	int irq;
1462 	int ipmb;
1463 	int ival;
1464 	int len;
1465 	struct smi_info *info;
1466 
1467 	if (!str)
1468 		return -ENOMEM;
1469 
1470 	/* Kill any trailing spaces, as we can get a "\n" from echo. */
1471 	len = strlen(str);
1472 	ival = len - 1;
1473 	while ((ival >= 0) && isspace(str[ival])) {
1474 		str[ival] = '\0';
1475 		ival--;
1476 	}
1477 
1478 	for (curr = str; curr; curr = next) {
1479 		regspacing = 1;
1480 		regsize = 1;
1481 		regshift = 0;
1482 		irq = 0;
1483 		ipmb = 0x20;
1484 
1485 		next = strchr(curr, ':');
1486 		if (next) {
1487 			*next = '\0';
1488 			next++;
1489 		}
1490 
1491 		rv = parse_str(hotmod_ops, &ival, "operation", &curr);
1492 		if (rv)
1493 			break;
1494 		op = ival;
1495 
1496 		rv = parse_str(hotmod_si, &ival, "interface type", &curr);
1497 		if (rv)
1498 			break;
1499 		si_type = ival;
1500 
1501 		rv = parse_str(hotmod_as, &addr_space, "address space", &curr);
1502 		if (rv)
1503 			break;
1504 
1505 		s = strchr(curr, ',');
1506 		if (s) {
1507 			*s = '\0';
1508 			s++;
1509 		}
1510 		addr = simple_strtoul(curr, &n, 0);
1511 		if ((*n != '\0') || (*curr == '\0')) {
1512 			printk(KERN_WARNING PFX "Invalid hotmod address"
1513 			       " '%s'\n", curr);
1514 			break;
1515 		}
1516 
1517 		while (s) {
1518 			curr = s;
1519 			s = strchr(curr, ',');
1520 			if (s) {
1521 				*s = '\0';
1522 				s++;
1523 			}
1524 			o = strchr(curr, '=');
1525 			if (o) {
1526 				*o = '\0';
1527 				o++;
1528 			}
1529 			rv = check_hotmod_int_op(curr, o, "rsp", &regspacing);
1530 			if (rv < 0)
1531 				goto out;
1532 			else if (rv)
1533 				continue;
1534 			rv = check_hotmod_int_op(curr, o, "rsi", &regsize);
1535 			if (rv < 0)
1536 				goto out;
1537 			else if (rv)
1538 				continue;
1539 			rv = check_hotmod_int_op(curr, o, "rsh", &regshift);
1540 			if (rv < 0)
1541 				goto out;
1542 			else if (rv)
1543 				continue;
1544 			rv = check_hotmod_int_op(curr, o, "irq", &irq);
1545 			if (rv < 0)
1546 				goto out;
1547 			else if (rv)
1548 				continue;
1549 			rv = check_hotmod_int_op(curr, o, "ipmb", &ipmb);
1550 			if (rv < 0)
1551 				goto out;
1552 			else if (rv)
1553 				continue;
1554 
1555 			rv = -EINVAL;
1556 			printk(KERN_WARNING PFX
1557 			       "Invalid hotmod option '%s'\n",
1558 			       curr);
1559 			goto out;
1560 		}
1561 
1562 		if (op == HM_ADD) {
1563 			info = kzalloc(sizeof(*info), GFP_KERNEL);
1564 			if (!info) {
1565 				rv = -ENOMEM;
1566 				goto out;
1567 			}
1568 
1569 			info->addr_source = "hotmod";
1570 			info->si_type = si_type;
1571 			info->io.addr_data = addr;
1572 			info->io.addr_type = addr_space;
1573 			if (addr_space == IPMI_MEM_ADDR_SPACE)
1574 				info->io_setup = mem_setup;
1575 			else
1576 				info->io_setup = port_setup;
1577 
1578 			info->io.addr = NULL;
1579 			info->io.regspacing = regspacing;
1580 			if (!info->io.regspacing)
1581 				info->io.regspacing = DEFAULT_REGSPACING;
1582 			info->io.regsize = regsize;
1583 			if (!info->io.regsize)
1584 				info->io.regsize = DEFAULT_REGSPACING;
1585 			info->io.regshift = regshift;
1586 			info->irq = irq;
1587 			if (info->irq)
1588 				info->irq_setup = std_irq_setup;
1589 			info->slave_addr = ipmb;
1590 
1591 			try_smi_init(info);
1592 		} else {
1593 			/* remove */
1594 			struct smi_info *e, *tmp_e;
1595 
1596 			mutex_lock(&smi_infos_lock);
1597 			list_for_each_entry_safe(e, tmp_e, &smi_infos, link) {
1598 				if (e->io.addr_type != addr_space)
1599 					continue;
1600 				if (e->si_type != si_type)
1601 					continue;
1602 				if (e->io.addr_data == addr)
1603 					cleanup_one_si(e);
1604 			}
1605 			mutex_unlock(&smi_infos_lock);
1606 		}
1607 	}
1608 	rv = len;
1609  out:
1610 	kfree(str);
1611 	return rv;
1612 }
1613 
1614 static __devinit void hardcode_find_bmc(void)
1615 {
1616 	int             i;
1617 	struct smi_info *info;
1618 
1619 	for (i = 0; i < SI_MAX_PARMS; i++) {
1620 		if (!ports[i] && !addrs[i])
1621 			continue;
1622 
1623 		info = kzalloc(sizeof(*info), GFP_KERNEL);
1624 		if (!info)
1625 			return;
1626 
1627 		info->addr_source = "hardcoded";
1628 
1629 		if (!si_type[i] || strcmp(si_type[i], "kcs") == 0) {
1630 			info->si_type = SI_KCS;
1631 		} else if (strcmp(si_type[i], "smic") == 0) {
1632 			info->si_type = SI_SMIC;
1633 		} else if (strcmp(si_type[i], "bt") == 0) {
1634 			info->si_type = SI_BT;
1635 		} else {
1636 			printk(KERN_WARNING
1637 			       "ipmi_si: Interface type specified "
1638 			       "for interface %d, was invalid: %s\n",
1639 			       i, si_type[i]);
1640 			kfree(info);
1641 			continue;
1642 		}
1643 
1644 		if (ports[i]) {
1645 			/* An I/O port */
1646 			info->io_setup = port_setup;
1647 			info->io.addr_data = ports[i];
1648 			info->io.addr_type = IPMI_IO_ADDR_SPACE;
1649 		} else if (addrs[i]) {
1650 			/* A memory port */
1651 			info->io_setup = mem_setup;
1652 			info->io.addr_data = addrs[i];
1653 			info->io.addr_type = IPMI_MEM_ADDR_SPACE;
1654 		} else {
1655 			printk(KERN_WARNING
1656 			       "ipmi_si: Interface type specified "
1657 			       "for interface %d, "
1658 			       "but port and address were not set or "
1659 			       "set to zero.\n", i);
1660 			kfree(info);
1661 			continue;
1662 		}
1663 
1664 		info->io.addr = NULL;
1665 		info->io.regspacing = regspacings[i];
1666 		if (!info->io.regspacing)
1667 			info->io.regspacing = DEFAULT_REGSPACING;
1668 		info->io.regsize = regsizes[i];
1669 		if (!info->io.regsize)
1670 			info->io.regsize = DEFAULT_REGSPACING;
1671 		info->io.regshift = regshifts[i];
1672 		info->irq = irqs[i];
1673 		if (info->irq)
1674 			info->irq_setup = std_irq_setup;
1675 
1676 		try_smi_init(info);
1677 	}
1678 }
1679 
1680 #ifdef CONFIG_ACPI
1681 
1682 #include <linux/acpi.h>
1683 
1684 /* Once we get an ACPI failure, we don't try any more, because we go
1685    through the tables sequentially.  Once we don't find a table, there
1686    are no more. */
1687 static int acpi_failure;
1688 
1689 /* For GPE-type interrupts. */
1690 static u32 ipmi_acpi_gpe(void *context)
1691 {
1692 	struct smi_info *smi_info = context;
1693 	unsigned long   flags;
1694 #ifdef DEBUG_TIMING
1695 	struct timeval t;
1696 #endif
1697 
1698 	spin_lock_irqsave(&(smi_info->si_lock), flags);
1699 
1700 	spin_lock(&smi_info->count_lock);
1701 	smi_info->interrupts++;
1702 	spin_unlock(&smi_info->count_lock);
1703 
1704 	if (atomic_read(&smi_info->stop_operation))
1705 		goto out;
1706 
1707 #ifdef DEBUG_TIMING
1708 	do_gettimeofday(&t);
1709 	printk("**ACPI_GPE: %d.%9.9d\n", t.tv_sec, t.tv_usec);
1710 #endif
1711 	smi_event_handler(smi_info, 0);
1712  out:
1713 	spin_unlock_irqrestore(&(smi_info->si_lock), flags);
1714 
1715 	return ACPI_INTERRUPT_HANDLED;
1716 }
1717 
1718 static void acpi_gpe_irq_cleanup(struct smi_info *info)
1719 {
1720 	if (!info->irq)
1721 		return;
1722 
1723 	acpi_remove_gpe_handler(NULL, info->irq, &ipmi_acpi_gpe);
1724 }
1725 
1726 static int acpi_gpe_irq_setup(struct smi_info *info)
1727 {
1728 	acpi_status status;
1729 
1730 	if (!info->irq)
1731 		return 0;
1732 
1733 	/* FIXME - is level triggered right? */
1734 	status = acpi_install_gpe_handler(NULL,
1735 					  info->irq,
1736 					  ACPI_GPE_LEVEL_TRIGGERED,
1737 					  &ipmi_acpi_gpe,
1738 					  info);
1739 	if (status != AE_OK) {
1740 		printk(KERN_WARNING
1741 		       "ipmi_si: %s unable to claim ACPI GPE %d,"
1742 		       " running polled\n",
1743 		       DEVICE_NAME, info->irq);
1744 		info->irq = 0;
1745 		return -EINVAL;
1746 	} else {
1747 		info->irq_cleanup = acpi_gpe_irq_cleanup;
1748 		printk("  Using ACPI GPE %d\n", info->irq);
1749 		return 0;
1750 	}
1751 }
1752 
1753 /*
1754  * Defined at
1755  * http://h21007.www2.hp.com/dspp/files/unprotected/devresource/Docs/TechPapers/IA64/hpspmi.pdf
1756  */
1757 struct SPMITable {
1758 	s8	Signature[4];
1759 	u32	Length;
1760 	u8	Revision;
1761 	u8	Checksum;
1762 	s8	OEMID[6];
1763 	s8	OEMTableID[8];
1764 	s8	OEMRevision[4];
1765 	s8	CreatorID[4];
1766 	s8	CreatorRevision[4];
1767 	u8	InterfaceType;
1768 	u8	IPMIlegacy;
1769 	s16	SpecificationRevision;
1770 
1771 	/*
1772 	 * Bit 0 - SCI interrupt supported
1773 	 * Bit 1 - I/O APIC/SAPIC
1774 	 */
1775 	u8	InterruptType;
1776 
1777 	/* If bit 0 of InterruptType is set, then this is the SCI
1778            interrupt in the GPEx_STS register. */
1779 	u8	GPE;
1780 
1781 	s16	Reserved;
1782 
1783 	/* If bit 1 of InterruptType is set, then this is the I/O
1784            APIC/SAPIC interrupt. */
1785 	u32	GlobalSystemInterrupt;
1786 
1787 	/* The actual register address. */
1788 	struct acpi_generic_address addr;
1789 
1790 	u8	UID[4];
1791 
1792 	s8      spmi_id[1]; /* A '\0' terminated array starts here. */
1793 };
1794 
1795 static __devinit int try_init_acpi(struct SPMITable *spmi)
1796 {
1797 	struct smi_info  *info;
1798 	u8 		 addr_space;
1799 
1800 	if (spmi->IPMIlegacy != 1) {
1801 	    printk(KERN_INFO "IPMI: Bad SPMI legacy %d\n", spmi->IPMIlegacy);
1802   	    return -ENODEV;
1803 	}
1804 
1805 	if (spmi->addr.space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY)
1806 		addr_space = IPMI_MEM_ADDR_SPACE;
1807 	else
1808 		addr_space = IPMI_IO_ADDR_SPACE;
1809 
1810 	info = kzalloc(sizeof(*info), GFP_KERNEL);
1811 	if (!info) {
1812 		printk(KERN_ERR "ipmi_si: Could not allocate SI data (3)\n");
1813 		return -ENOMEM;
1814 	}
1815 
1816 	info->addr_source = "ACPI";
1817 
1818 	/* Figure out the interface type. */
1819 	switch (spmi->InterfaceType)
1820 	{
1821 	case 1:	/* KCS */
1822 		info->si_type = SI_KCS;
1823 		break;
1824 	case 2:	/* SMIC */
1825 		info->si_type = SI_SMIC;
1826 		break;
1827 	case 3:	/* BT */
1828 		info->si_type = SI_BT;
1829 		break;
1830 	default:
1831 		printk(KERN_INFO "ipmi_si: Unknown ACPI/SPMI SI type %d\n",
1832 			spmi->InterfaceType);
1833 		kfree(info);
1834 		return -EIO;
1835 	}
1836 
1837 	if (spmi->InterruptType & 1) {
1838 		/* We've got a GPE interrupt. */
1839 		info->irq = spmi->GPE;
1840 		info->irq_setup = acpi_gpe_irq_setup;
1841 	} else if (spmi->InterruptType & 2) {
1842 		/* We've got an APIC/SAPIC interrupt. */
1843 		info->irq = spmi->GlobalSystemInterrupt;
1844 		info->irq_setup = std_irq_setup;
1845 	} else {
1846 		/* Use the default interrupt setting. */
1847 		info->irq = 0;
1848 		info->irq_setup = NULL;
1849 	}
1850 
1851 	if (spmi->addr.bit_width) {
1852 		/* A (hopefully) properly formed register bit width. */
1853 		info->io.regspacing = spmi->addr.bit_width / 8;
1854 	} else {
1855 		info->io.regspacing = DEFAULT_REGSPACING;
1856 	}
1857 	info->io.regsize = info->io.regspacing;
1858 	info->io.regshift = spmi->addr.bit_offset;
1859 
1860 	if (spmi->addr.space_id == ACPI_ADR_SPACE_SYSTEM_MEMORY) {
1861 		info->io_setup = mem_setup;
1862 		info->io.addr_type = IPMI_IO_ADDR_SPACE;
1863 	} else if (spmi->addr.space_id == ACPI_ADR_SPACE_SYSTEM_IO) {
1864 		info->io_setup = port_setup;
1865 		info->io.addr_type = IPMI_MEM_ADDR_SPACE;
1866 	} else {
1867 		kfree(info);
1868 		printk("ipmi_si: Unknown ACPI I/O Address type\n");
1869 		return -EIO;
1870 	}
1871 	info->io.addr_data = spmi->addr.address;
1872 
1873 	try_smi_init(info);
1874 
1875 	return 0;
1876 }
1877 
1878 static __devinit void acpi_find_bmc(void)
1879 {
1880 	acpi_status      status;
1881 	struct SPMITable *spmi;
1882 	int              i;
1883 
1884 	if (acpi_disabled)
1885 		return;
1886 
1887 	if (acpi_failure)
1888 		return;
1889 
1890 	for (i = 0; ; i++) {
1891 		status = acpi_get_table(ACPI_SIG_SPMI, i+1,
1892 					(struct acpi_table_header **)&spmi);
1893 		if (status != AE_OK)
1894 			return;
1895 
1896 		try_init_acpi(spmi);
1897 	}
1898 }
1899 #endif
1900 
1901 #ifdef CONFIG_DMI
1902 struct dmi_ipmi_data
1903 {
1904 	u8   		type;
1905 	u8   		addr_space;
1906 	unsigned long	base_addr;
1907 	u8   		irq;
1908 	u8              offset;
1909 	u8              slave_addr;
1910 };
1911 
1912 static int __devinit decode_dmi(struct dmi_header *dm,
1913 				struct dmi_ipmi_data *dmi)
1914 {
1915 	u8              *data = (u8 *)dm;
1916 	unsigned long  	base_addr;
1917 	u8		reg_spacing;
1918 	u8              len = dm->length;
1919 
1920 	dmi->type = data[4];
1921 
1922 	memcpy(&base_addr, data+8, sizeof(unsigned long));
1923 	if (len >= 0x11) {
1924 		if (base_addr & 1) {
1925 			/* I/O */
1926 			base_addr &= 0xFFFE;
1927 			dmi->addr_space = IPMI_IO_ADDR_SPACE;
1928 		}
1929 		else {
1930 			/* Memory */
1931 			dmi->addr_space = IPMI_MEM_ADDR_SPACE;
1932 		}
1933 		/* If bit 4 of byte 0x10 is set, then the lsb for the address
1934 		   is odd. */
1935 		dmi->base_addr = base_addr | ((data[0x10] & 0x10) >> 4);
1936 
1937 		dmi->irq = data[0x11];
1938 
1939 		/* The top two bits of byte 0x10 hold the register spacing. */
1940 		reg_spacing = (data[0x10] & 0xC0) >> 6;
1941 		switch(reg_spacing){
1942 		case 0x00: /* Byte boundaries */
1943 		    dmi->offset = 1;
1944 		    break;
1945 		case 0x01: /* 32-bit boundaries */
1946 		    dmi->offset = 4;
1947 		    break;
1948 		case 0x02: /* 16-byte boundaries */
1949 		    dmi->offset = 16;
1950 		    break;
1951 		default:
1952 		    /* Some other interface, just ignore it. */
1953 		    return -EIO;
1954 		}
1955 	} else {
1956 		/* Old DMI spec. */
1957 		/* Note that technically, the lower bit of the base
1958 		 * address should be 1 if the address is I/O and 0 if
1959 		 * the address is in memory.  So many systems get that
1960 		 * wrong (and all that I have seen are I/O) so we just
1961 		 * ignore that bit and assume I/O.  Systems that use
1962 		 * memory should use the newer spec, anyway. */
1963 		dmi->base_addr = base_addr & 0xfffe;
1964 		dmi->addr_space = IPMI_IO_ADDR_SPACE;
1965 		dmi->offset = 1;
1966 	}
1967 
1968 	dmi->slave_addr = data[6];
1969 
1970 	return 0;
1971 }
1972 
1973 static __devinit void try_init_dmi(struct dmi_ipmi_data *ipmi_data)
1974 {
1975 	struct smi_info *info;
1976 
1977 	info = kzalloc(sizeof(*info), GFP_KERNEL);
1978 	if (!info) {
1979 		printk(KERN_ERR
1980 		       "ipmi_si: Could not allocate SI data\n");
1981 		return;
1982 	}
1983 
1984 	info->addr_source = "SMBIOS";
1985 
1986 	switch (ipmi_data->type) {
1987 	case 0x01: /* KCS */
1988 		info->si_type = SI_KCS;
1989 		break;
1990 	case 0x02: /* SMIC */
1991 		info->si_type = SI_SMIC;
1992 		break;
1993 	case 0x03: /* BT */
1994 		info->si_type = SI_BT;
1995 		break;
1996 	default:
1997 		return;
1998 	}
1999 
2000 	switch (ipmi_data->addr_space) {
2001 	case IPMI_MEM_ADDR_SPACE:
2002 		info->io_setup = mem_setup;
2003 		info->io.addr_type = IPMI_MEM_ADDR_SPACE;
2004 		break;
2005 
2006 	case IPMI_IO_ADDR_SPACE:
2007 		info->io_setup = port_setup;
2008 		info->io.addr_type = IPMI_IO_ADDR_SPACE;
2009 		break;
2010 
2011 	default:
2012 		kfree(info);
2013 		printk(KERN_WARNING
2014 		       "ipmi_si: Unknown SMBIOS I/O Address type: %d.\n",
2015 		       ipmi_data->addr_space);
2016 		return;
2017 	}
2018 	info->io.addr_data = ipmi_data->base_addr;
2019 
2020 	info->io.regspacing = ipmi_data->offset;
2021 	if (!info->io.regspacing)
2022 		info->io.regspacing = DEFAULT_REGSPACING;
2023 	info->io.regsize = DEFAULT_REGSPACING;
2024 	info->io.regshift = 0;
2025 
2026 	info->slave_addr = ipmi_data->slave_addr;
2027 
2028 	info->irq = ipmi_data->irq;
2029 	if (info->irq)
2030 		info->irq_setup = std_irq_setup;
2031 
2032 	try_smi_init(info);
2033 }
2034 
2035 static void __devinit dmi_find_bmc(void)
2036 {
2037 	struct dmi_device    *dev = NULL;
2038 	struct dmi_ipmi_data data;
2039 	int                  rv;
2040 
2041 	while ((dev = dmi_find_device(DMI_DEV_TYPE_IPMI, NULL, dev))) {
2042 		memset(&data, 0, sizeof(data));
2043 		rv = decode_dmi((struct dmi_header *) dev->device_data, &data);
2044 		if (!rv)
2045 			try_init_dmi(&data);
2046 	}
2047 }
2048 #endif /* CONFIG_DMI */
2049 
2050 #ifdef CONFIG_PCI
2051 
2052 #define PCI_ERMC_CLASSCODE		0x0C0700
2053 #define PCI_ERMC_CLASSCODE_MASK		0xffffff00
2054 #define PCI_ERMC_CLASSCODE_TYPE_MASK	0xff
2055 #define PCI_ERMC_CLASSCODE_TYPE_SMIC	0x00
2056 #define PCI_ERMC_CLASSCODE_TYPE_KCS	0x01
2057 #define PCI_ERMC_CLASSCODE_TYPE_BT	0x02
2058 
2059 #define PCI_HP_VENDOR_ID    0x103C
2060 #define PCI_MMC_DEVICE_ID   0x121A
2061 #define PCI_MMC_ADDR_CW     0x10
2062 
2063 static void ipmi_pci_cleanup(struct smi_info *info)
2064 {
2065 	struct pci_dev *pdev = info->addr_source_data;
2066 
2067 	pci_disable_device(pdev);
2068 }
2069 
2070 static int __devinit ipmi_pci_probe(struct pci_dev *pdev,
2071 				    const struct pci_device_id *ent)
2072 {
2073 	int rv;
2074 	int class_type = pdev->class & PCI_ERMC_CLASSCODE_TYPE_MASK;
2075 	struct smi_info *info;
2076 	int first_reg_offset = 0;
2077 
2078 	info = kzalloc(sizeof(*info), GFP_KERNEL);
2079 	if (!info)
2080 		return -ENOMEM;
2081 
2082 	info->addr_source = "PCI";
2083 
2084 	switch (class_type) {
2085 	case PCI_ERMC_CLASSCODE_TYPE_SMIC:
2086 		info->si_type = SI_SMIC;
2087 		break;
2088 
2089 	case PCI_ERMC_CLASSCODE_TYPE_KCS:
2090 		info->si_type = SI_KCS;
2091 		break;
2092 
2093 	case PCI_ERMC_CLASSCODE_TYPE_BT:
2094 		info->si_type = SI_BT;
2095 		break;
2096 
2097 	default:
2098 		kfree(info);
2099 		printk(KERN_INFO "ipmi_si: %s: Unknown IPMI type: %d\n",
2100 		       pci_name(pdev), class_type);
2101 		return -ENOMEM;
2102 	}
2103 
2104 	rv = pci_enable_device(pdev);
2105 	if (rv) {
2106 		printk(KERN_ERR "ipmi_si: %s: couldn't enable PCI device\n",
2107 		       pci_name(pdev));
2108 		kfree(info);
2109 		return rv;
2110 	}
2111 
2112 	info->addr_source_cleanup = ipmi_pci_cleanup;
2113 	info->addr_source_data = pdev;
2114 
2115 	if (pdev->subsystem_vendor == PCI_HP_VENDOR_ID)
2116 		first_reg_offset = 1;
2117 
2118 	if (pci_resource_flags(pdev, 0) & IORESOURCE_IO) {
2119 		info->io_setup = port_setup;
2120 		info->io.addr_type = IPMI_IO_ADDR_SPACE;
2121 	} else {
2122 		info->io_setup = mem_setup;
2123 		info->io.addr_type = IPMI_MEM_ADDR_SPACE;
2124 	}
2125 	info->io.addr_data = pci_resource_start(pdev, 0);
2126 
2127 	info->io.regspacing = DEFAULT_REGSPACING;
2128 	info->io.regsize = DEFAULT_REGSPACING;
2129 	info->io.regshift = 0;
2130 
2131 	info->irq = pdev->irq;
2132 	if (info->irq)
2133 		info->irq_setup = std_irq_setup;
2134 
2135 	info->dev = &pdev->dev;
2136 
2137 	return try_smi_init(info);
2138 }
2139 
2140 static void __devexit ipmi_pci_remove(struct pci_dev *pdev)
2141 {
2142 }
2143 
2144 #ifdef CONFIG_PM
2145 static int ipmi_pci_suspend(struct pci_dev *pdev, pm_message_t state)
2146 {
2147 	return 0;
2148 }
2149 
2150 static int ipmi_pci_resume(struct pci_dev *pdev)
2151 {
2152 	return 0;
2153 }
2154 #endif
2155 
2156 static struct pci_device_id ipmi_pci_devices[] = {
2157 	{ PCI_DEVICE(PCI_HP_VENDOR_ID, PCI_MMC_DEVICE_ID) },
2158 	{ PCI_DEVICE_CLASS(PCI_ERMC_CLASSCODE, PCI_ERMC_CLASSCODE_MASK) }
2159 };
2160 MODULE_DEVICE_TABLE(pci, ipmi_pci_devices);
2161 
2162 static struct pci_driver ipmi_pci_driver = {
2163         .name =         DEVICE_NAME,
2164         .id_table =     ipmi_pci_devices,
2165         .probe =        ipmi_pci_probe,
2166         .remove =       __devexit_p(ipmi_pci_remove),
2167 #ifdef CONFIG_PM
2168         .suspend =      ipmi_pci_suspend,
2169         .resume =       ipmi_pci_resume,
2170 #endif
2171 };
2172 #endif /* CONFIG_PCI */
2173 
2174 
2175 static int try_get_dev_id(struct smi_info *smi_info)
2176 {
2177 	unsigned char         msg[2];
2178 	unsigned char         *resp;
2179 	unsigned long         resp_len;
2180 	enum si_sm_result     smi_result;
2181 	int                   rv = 0;
2182 
2183 	resp = kmalloc(IPMI_MAX_MSG_LENGTH, GFP_KERNEL);
2184 	if (!resp)
2185 		return -ENOMEM;
2186 
2187 	/* Do a Get Device ID command, since it comes back with some
2188 	   useful info. */
2189 	msg[0] = IPMI_NETFN_APP_REQUEST << 2;
2190 	msg[1] = IPMI_GET_DEVICE_ID_CMD;
2191 	smi_info->handlers->start_transaction(smi_info->si_sm, msg, 2);
2192 
2193 	smi_result = smi_info->handlers->event(smi_info->si_sm, 0);
2194 	for (;;)
2195 	{
2196 		if (smi_result == SI_SM_CALL_WITH_DELAY ||
2197 		    smi_result == SI_SM_CALL_WITH_TICK_DELAY) {
2198 			schedule_timeout_uninterruptible(1);
2199 			smi_result = smi_info->handlers->event(
2200 				smi_info->si_sm, 100);
2201 		}
2202 		else if (smi_result == SI_SM_CALL_WITHOUT_DELAY)
2203 		{
2204 			smi_result = smi_info->handlers->event(
2205 				smi_info->si_sm, 0);
2206 		}
2207 		else
2208 			break;
2209 	}
2210 	if (smi_result == SI_SM_HOSED) {
2211 		/* We couldn't get the state machine to run, so whatever's at
2212 		   the port is probably not an IPMI SMI interface. */
2213 		rv = -ENODEV;
2214 		goto out;
2215 	}
2216 
2217 	/* Otherwise, we got some data. */
2218 	resp_len = smi_info->handlers->get_result(smi_info->si_sm,
2219 						  resp, IPMI_MAX_MSG_LENGTH);
2220 	if (resp_len < 14) {
2221 		/* That's odd, it should be longer. */
2222 		rv = -EINVAL;
2223 		goto out;
2224 	}
2225 
2226 	if ((resp[1] != IPMI_GET_DEVICE_ID_CMD) || (resp[2] != 0)) {
2227 		/* That's odd, it shouldn't be able to fail. */
2228 		rv = -EINVAL;
2229 		goto out;
2230 	}
2231 
2232 	/* Record info from the get device id, in case we need it. */
2233 	ipmi_demangle_device_id(resp+3, resp_len-3, &smi_info->device_id);
2234 
2235  out:
2236 	kfree(resp);
2237 	return rv;
2238 }
2239 
2240 static int type_file_read_proc(char *page, char **start, off_t off,
2241 			       int count, int *eof, void *data)
2242 {
2243 	struct smi_info *smi = data;
2244 
2245 	return sprintf(page, "%s\n", si_to_str[smi->si_type]);
2246 }
2247 
2248 static int stat_file_read_proc(char *page, char **start, off_t off,
2249 			       int count, int *eof, void *data)
2250 {
2251 	char            *out = (char *) page;
2252 	struct smi_info *smi = data;
2253 
2254 	out += sprintf(out, "interrupts_enabled:    %d\n",
2255 		       smi->irq && !smi->interrupt_disabled);
2256 	out += sprintf(out, "short_timeouts:        %ld\n",
2257 		       smi->short_timeouts);
2258 	out += sprintf(out, "long_timeouts:         %ld\n",
2259 		       smi->long_timeouts);
2260 	out += sprintf(out, "timeout_restarts:      %ld\n",
2261 		       smi->timeout_restarts);
2262 	out += sprintf(out, "idles:                 %ld\n",
2263 		       smi->idles);
2264 	out += sprintf(out, "interrupts:            %ld\n",
2265 		       smi->interrupts);
2266 	out += sprintf(out, "attentions:            %ld\n",
2267 		       smi->attentions);
2268 	out += sprintf(out, "flag_fetches:          %ld\n",
2269 		       smi->flag_fetches);
2270 	out += sprintf(out, "hosed_count:           %ld\n",
2271 		       smi->hosed_count);
2272 	out += sprintf(out, "complete_transactions: %ld\n",
2273 		       smi->complete_transactions);
2274 	out += sprintf(out, "events:                %ld\n",
2275 		       smi->events);
2276 	out += sprintf(out, "watchdog_pretimeouts:  %ld\n",
2277 		       smi->watchdog_pretimeouts);
2278 	out += sprintf(out, "incoming_messages:     %ld\n",
2279 		       smi->incoming_messages);
2280 
2281 	return out - page;
2282 }
2283 
2284 static int param_read_proc(char *page, char **start, off_t off,
2285 			   int count, int *eof, void *data)
2286 {
2287 	struct smi_info *smi = data;
2288 
2289 	return sprintf(page,
2290 		       "%s,%s,0x%lx,rsp=%d,rsi=%d,rsh=%d,irq=%d,ipmb=%d\n",
2291 		       si_to_str[smi->si_type],
2292 		       addr_space_to_str[smi->io.addr_type],
2293 		       smi->io.addr_data,
2294 		       smi->io.regspacing,
2295 		       smi->io.regsize,
2296 		       smi->io.regshift,
2297 		       smi->irq,
2298 		       smi->slave_addr);
2299 }
2300 
2301 /*
2302  * oem_data_avail_to_receive_msg_avail
2303  * @info - smi_info structure with msg_flags set
2304  *
2305  * Converts flags from OEM_DATA_AVAIL to RECEIVE_MSG_AVAIL
2306  * Returns 1 indicating need to re-run handle_flags().
2307  */
2308 static int oem_data_avail_to_receive_msg_avail(struct smi_info *smi_info)
2309 {
2310 	smi_info->msg_flags = ((smi_info->msg_flags & ~OEM_DATA_AVAIL) |
2311 			      	RECEIVE_MSG_AVAIL);
2312 	return 1;
2313 }
2314 
2315 /*
2316  * setup_dell_poweredge_oem_data_handler
2317  * @info - smi_info.device_id must be populated
2318  *
2319  * Systems that match, but have firmware version < 1.40 may assert
2320  * OEM0_DATA_AVAIL on their own, without being told via Set Flags that
2321  * it's safe to do so.  Such systems will de-assert OEM1_DATA_AVAIL
2322  * upon receipt of IPMI_GET_MSG_CMD, so we should treat these flags
2323  * as RECEIVE_MSG_AVAIL instead.
2324  *
2325  * As Dell has no plans to release IPMI 1.5 firmware that *ever*
2326  * assert the OEM[012] bits, and if it did, the driver would have to
2327  * change to handle that properly, we don't actually check for the
2328  * firmware version.
2329  * Device ID = 0x20                BMC on PowerEdge 8G servers
2330  * Device Revision = 0x80
2331  * Firmware Revision1 = 0x01       BMC version 1.40
2332  * Firmware Revision2 = 0x40       BCD encoded
2333  * IPMI Version = 0x51             IPMI 1.5
2334  * Manufacturer ID = A2 02 00      Dell IANA
2335  *
2336  * Additionally, PowerEdge systems with IPMI < 1.5 may also assert
2337  * OEM0_DATA_AVAIL and needs to be treated as RECEIVE_MSG_AVAIL.
2338  *
2339  */
2340 #define DELL_POWEREDGE_8G_BMC_DEVICE_ID  0x20
2341 #define DELL_POWEREDGE_8G_BMC_DEVICE_REV 0x80
2342 #define DELL_POWEREDGE_8G_BMC_IPMI_VERSION 0x51
2343 #define DELL_IANA_MFR_ID 0x0002a2
2344 static void setup_dell_poweredge_oem_data_handler(struct smi_info *smi_info)
2345 {
2346 	struct ipmi_device_id *id = &smi_info->device_id;
2347 	if (id->manufacturer_id == DELL_IANA_MFR_ID) {
2348 		if (id->device_id       == DELL_POWEREDGE_8G_BMC_DEVICE_ID  &&
2349 		    id->device_revision == DELL_POWEREDGE_8G_BMC_DEVICE_REV &&
2350 		    id->ipmi_version   == DELL_POWEREDGE_8G_BMC_IPMI_VERSION) {
2351 			smi_info->oem_data_avail_handler =
2352 				oem_data_avail_to_receive_msg_avail;
2353 		}
2354 		else if (ipmi_version_major(id) < 1 ||
2355 			 (ipmi_version_major(id) == 1 &&
2356 			  ipmi_version_minor(id) < 5)) {
2357 			smi_info->oem_data_avail_handler =
2358 				oem_data_avail_to_receive_msg_avail;
2359 		}
2360 	}
2361 }
2362 
2363 #define CANNOT_RETURN_REQUESTED_LENGTH 0xCA
2364 static void return_hosed_msg_badsize(struct smi_info *smi_info)
2365 {
2366 	struct ipmi_smi_msg *msg = smi_info->curr_msg;
2367 
2368 	/* Make it a reponse */
2369 	msg->rsp[0] = msg->data[0] | 4;
2370 	msg->rsp[1] = msg->data[1];
2371 	msg->rsp[2] = CANNOT_RETURN_REQUESTED_LENGTH;
2372 	msg->rsp_size = 3;
2373 	smi_info->curr_msg = NULL;
2374 	deliver_recv_msg(smi_info, msg);
2375 }
2376 
2377 /*
2378  * dell_poweredge_bt_xaction_handler
2379  * @info - smi_info.device_id must be populated
2380  *
2381  * Dell PowerEdge servers with the BT interface (x6xx and 1750) will
2382  * not respond to a Get SDR command if the length of the data
2383  * requested is exactly 0x3A, which leads to command timeouts and no
2384  * data returned.  This intercepts such commands, and causes userspace
2385  * callers to try again with a different-sized buffer, which succeeds.
2386  */
2387 
2388 #define STORAGE_NETFN 0x0A
2389 #define STORAGE_CMD_GET_SDR 0x23
2390 static int dell_poweredge_bt_xaction_handler(struct notifier_block *self,
2391 					     unsigned long unused,
2392 					     void *in)
2393 {
2394 	struct smi_info *smi_info = in;
2395 	unsigned char *data = smi_info->curr_msg->data;
2396 	unsigned int size   = smi_info->curr_msg->data_size;
2397 	if (size >= 8 &&
2398 	    (data[0]>>2) == STORAGE_NETFN &&
2399 	    data[1] == STORAGE_CMD_GET_SDR &&
2400 	    data[7] == 0x3A) {
2401 		return_hosed_msg_badsize(smi_info);
2402 		return NOTIFY_STOP;
2403 	}
2404 	return NOTIFY_DONE;
2405 }
2406 
2407 static struct notifier_block dell_poweredge_bt_xaction_notifier = {
2408 	.notifier_call	= dell_poweredge_bt_xaction_handler,
2409 };
2410 
2411 /*
2412  * setup_dell_poweredge_bt_xaction_handler
2413  * @info - smi_info.device_id must be filled in already
2414  *
2415  * Fills in smi_info.device_id.start_transaction_pre_hook
2416  * when we know what function to use there.
2417  */
2418 static void
2419 setup_dell_poweredge_bt_xaction_handler(struct smi_info *smi_info)
2420 {
2421 	struct ipmi_device_id *id = &smi_info->device_id;
2422 	if (id->manufacturer_id == DELL_IANA_MFR_ID &&
2423 	    smi_info->si_type == SI_BT)
2424 		register_xaction_notifier(&dell_poweredge_bt_xaction_notifier);
2425 }
2426 
2427 /*
2428  * setup_oem_data_handler
2429  * @info - smi_info.device_id must be filled in already
2430  *
2431  * Fills in smi_info.device_id.oem_data_available_handler
2432  * when we know what function to use there.
2433  */
2434 
2435 static void setup_oem_data_handler(struct smi_info *smi_info)
2436 {
2437 	setup_dell_poweredge_oem_data_handler(smi_info);
2438 }
2439 
2440 static void setup_xaction_handlers(struct smi_info *smi_info)
2441 {
2442 	setup_dell_poweredge_bt_xaction_handler(smi_info);
2443 }
2444 
2445 static inline void wait_for_timer_and_thread(struct smi_info *smi_info)
2446 {
2447 	if (smi_info->intf) {
2448 		/* The timer and thread are only running if the
2449 		   interface has been started up and registered. */
2450 		if (smi_info->thread != NULL)
2451 			kthread_stop(smi_info->thread);
2452 		del_timer_sync(&smi_info->si_timer);
2453 	}
2454 }
2455 
2456 static __devinitdata struct ipmi_default_vals
2457 {
2458 	int type;
2459 	int port;
2460 } ipmi_defaults[] =
2461 {
2462 	{ .type = SI_KCS, .port = 0xca2 },
2463 	{ .type = SI_SMIC, .port = 0xca9 },
2464 	{ .type = SI_BT, .port = 0xe4 },
2465 	{ .port = 0 }
2466 };
2467 
2468 static __devinit void default_find_bmc(void)
2469 {
2470 	struct smi_info *info;
2471 	int             i;
2472 
2473 	for (i = 0; ; i++) {
2474 		if (!ipmi_defaults[i].port)
2475 			break;
2476 
2477 		info = kzalloc(sizeof(*info), GFP_KERNEL);
2478 		if (!info)
2479 			return;
2480 
2481 #ifdef CONFIG_PPC_MERGE
2482 		if (check_legacy_ioport(ipmi_defaults[i].port))
2483 			continue;
2484 #endif
2485 
2486 		info->addr_source = NULL;
2487 
2488 		info->si_type = ipmi_defaults[i].type;
2489 		info->io_setup = port_setup;
2490 		info->io.addr_data = ipmi_defaults[i].port;
2491 		info->io.addr_type = IPMI_IO_ADDR_SPACE;
2492 
2493 		info->io.addr = NULL;
2494 		info->io.regspacing = DEFAULT_REGSPACING;
2495 		info->io.regsize = DEFAULT_REGSPACING;
2496 		info->io.regshift = 0;
2497 
2498 		if (try_smi_init(info) == 0) {
2499 			/* Found one... */
2500 			printk(KERN_INFO "ipmi_si: Found default %s state"
2501 			       " machine at %s address 0x%lx\n",
2502 			       si_to_str[info->si_type],
2503 			       addr_space_to_str[info->io.addr_type],
2504 			       info->io.addr_data);
2505 			return;
2506 		}
2507 	}
2508 }
2509 
2510 static int is_new_interface(struct smi_info *info)
2511 {
2512 	struct smi_info *e;
2513 
2514 	list_for_each_entry(e, &smi_infos, link) {
2515 		if (e->io.addr_type != info->io.addr_type)
2516 			continue;
2517 		if (e->io.addr_data == info->io.addr_data)
2518 			return 0;
2519 	}
2520 
2521 	return 1;
2522 }
2523 
2524 static int try_smi_init(struct smi_info *new_smi)
2525 {
2526 	int rv;
2527 
2528 	if (new_smi->addr_source) {
2529 		printk(KERN_INFO "ipmi_si: Trying %s-specified %s state"
2530 		       " machine at %s address 0x%lx, slave address 0x%x,"
2531 		       " irq %d\n",
2532 		       new_smi->addr_source,
2533 		       si_to_str[new_smi->si_type],
2534 		       addr_space_to_str[new_smi->io.addr_type],
2535 		       new_smi->io.addr_data,
2536 		       new_smi->slave_addr, new_smi->irq);
2537 	}
2538 
2539 	mutex_lock(&smi_infos_lock);
2540 	if (!is_new_interface(new_smi)) {
2541 		printk(KERN_WARNING "ipmi_si: duplicate interface\n");
2542 		rv = -EBUSY;
2543 		goto out_err;
2544 	}
2545 
2546 	/* So we know not to free it unless we have allocated one. */
2547 	new_smi->intf = NULL;
2548 	new_smi->si_sm = NULL;
2549 	new_smi->handlers = NULL;
2550 
2551 	switch (new_smi->si_type) {
2552 	case SI_KCS:
2553 		new_smi->handlers = &kcs_smi_handlers;
2554 		break;
2555 
2556 	case SI_SMIC:
2557 		new_smi->handlers = &smic_smi_handlers;
2558 		break;
2559 
2560 	case SI_BT:
2561 		new_smi->handlers = &bt_smi_handlers;
2562 		break;
2563 
2564 	default:
2565 		/* No support for anything else yet. */
2566 		rv = -EIO;
2567 		goto out_err;
2568 	}
2569 
2570 	/* Allocate the state machine's data and initialize it. */
2571 	new_smi->si_sm = kmalloc(new_smi->handlers->size(), GFP_KERNEL);
2572 	if (!new_smi->si_sm) {
2573 		printk(" Could not allocate state machine memory\n");
2574 		rv = -ENOMEM;
2575 		goto out_err;
2576 	}
2577 	new_smi->io_size = new_smi->handlers->init_data(new_smi->si_sm,
2578 							&new_smi->io);
2579 
2580 	/* Now that we know the I/O size, we can set up the I/O. */
2581 	rv = new_smi->io_setup(new_smi);
2582 	if (rv) {
2583 		printk(" Could not set up I/O space\n");
2584 		goto out_err;
2585 	}
2586 
2587 	spin_lock_init(&(new_smi->si_lock));
2588 	spin_lock_init(&(new_smi->msg_lock));
2589 	spin_lock_init(&(new_smi->count_lock));
2590 
2591 	/* Do low-level detection first. */
2592 	if (new_smi->handlers->detect(new_smi->si_sm)) {
2593 		if (new_smi->addr_source)
2594 			printk(KERN_INFO "ipmi_si: Interface detection"
2595 			       " failed\n");
2596 		rv = -ENODEV;
2597 		goto out_err;
2598 	}
2599 
2600 	/* Attempt a get device id command.  If it fails, we probably
2601            don't have a BMC here. */
2602 	rv = try_get_dev_id(new_smi);
2603 	if (rv) {
2604 		if (new_smi->addr_source)
2605 			printk(KERN_INFO "ipmi_si: There appears to be no BMC"
2606 			       " at this location\n");
2607 		goto out_err;
2608 	}
2609 
2610 	setup_oem_data_handler(new_smi);
2611 	setup_xaction_handlers(new_smi);
2612 
2613 	/* Try to claim any interrupts. */
2614 	if (new_smi->irq_setup)
2615 		new_smi->irq_setup(new_smi);
2616 
2617 	INIT_LIST_HEAD(&(new_smi->xmit_msgs));
2618 	INIT_LIST_HEAD(&(new_smi->hp_xmit_msgs));
2619 	new_smi->curr_msg = NULL;
2620 	atomic_set(&new_smi->req_events, 0);
2621 	new_smi->run_to_completion = 0;
2622 
2623 	new_smi->interrupt_disabled = 0;
2624 	atomic_set(&new_smi->stop_operation, 0);
2625 	new_smi->intf_num = smi_num;
2626 	smi_num++;
2627 
2628 	/* Start clearing the flags before we enable interrupts or the
2629 	   timer to avoid racing with the timer. */
2630 	start_clear_flags(new_smi);
2631 	/* IRQ is defined to be set when non-zero. */
2632 	if (new_smi->irq)
2633 		new_smi->si_state = SI_CLEARING_FLAGS_THEN_SET_IRQ;
2634 
2635 	if (!new_smi->dev) {
2636 		/* If we don't already have a device from something
2637 		 * else (like PCI), then register a new one. */
2638 		new_smi->pdev = platform_device_alloc("ipmi_si",
2639 						      new_smi->intf_num);
2640 		if (rv) {
2641 			printk(KERN_ERR
2642 			       "ipmi_si_intf:"
2643 			       " Unable to allocate platform device\n");
2644 			goto out_err;
2645 		}
2646 		new_smi->dev = &new_smi->pdev->dev;
2647 		new_smi->dev->driver = &ipmi_driver;
2648 
2649 		rv = platform_device_add(new_smi->pdev);
2650 		if (rv) {
2651 			printk(KERN_ERR
2652 			       "ipmi_si_intf:"
2653 			       " Unable to register system interface device:"
2654 			       " %d\n",
2655 			       rv);
2656 			goto out_err;
2657 		}
2658 		new_smi->dev_registered = 1;
2659 	}
2660 
2661 	rv = ipmi_register_smi(&handlers,
2662 			       new_smi,
2663 			       &new_smi->device_id,
2664 			       new_smi->dev,
2665 			       "bmc",
2666 			       new_smi->slave_addr);
2667 	if (rv) {
2668 		printk(KERN_ERR
2669 		       "ipmi_si: Unable to register device: error %d\n",
2670 		       rv);
2671 		goto out_err_stop_timer;
2672 	}
2673 
2674 	rv = ipmi_smi_add_proc_entry(new_smi->intf, "type",
2675 				     type_file_read_proc, NULL,
2676 				     new_smi, THIS_MODULE);
2677 	if (rv) {
2678 		printk(KERN_ERR
2679 		       "ipmi_si: Unable to create proc entry: %d\n",
2680 		       rv);
2681 		goto out_err_stop_timer;
2682 	}
2683 
2684 	rv = ipmi_smi_add_proc_entry(new_smi->intf, "si_stats",
2685 				     stat_file_read_proc, NULL,
2686 				     new_smi, THIS_MODULE);
2687 	if (rv) {
2688 		printk(KERN_ERR
2689 		       "ipmi_si: Unable to create proc entry: %d\n",
2690 		       rv);
2691 		goto out_err_stop_timer;
2692 	}
2693 
2694 	rv = ipmi_smi_add_proc_entry(new_smi->intf, "params",
2695 				     param_read_proc, NULL,
2696 				     new_smi, THIS_MODULE);
2697 	if (rv) {
2698 		printk(KERN_ERR
2699 		       "ipmi_si: Unable to create proc entry: %d\n",
2700 		       rv);
2701 		goto out_err_stop_timer;
2702 	}
2703 
2704 	list_add_tail(&new_smi->link, &smi_infos);
2705 
2706 	mutex_unlock(&smi_infos_lock);
2707 
2708 	printk(" IPMI %s interface initialized\n",si_to_str[new_smi->si_type]);
2709 
2710 	return 0;
2711 
2712  out_err_stop_timer:
2713 	atomic_inc(&new_smi->stop_operation);
2714 	wait_for_timer_and_thread(new_smi);
2715 
2716  out_err:
2717 	if (new_smi->intf)
2718 		ipmi_unregister_smi(new_smi->intf);
2719 
2720 	if (new_smi->irq_cleanup)
2721 		new_smi->irq_cleanup(new_smi);
2722 
2723 	/* Wait until we know that we are out of any interrupt
2724 	   handlers might have been running before we freed the
2725 	   interrupt. */
2726 	synchronize_sched();
2727 
2728 	if (new_smi->si_sm) {
2729 		if (new_smi->handlers)
2730 			new_smi->handlers->cleanup(new_smi->si_sm);
2731 		kfree(new_smi->si_sm);
2732 	}
2733 	if (new_smi->addr_source_cleanup)
2734 		new_smi->addr_source_cleanup(new_smi);
2735 	if (new_smi->io_cleanup)
2736 		new_smi->io_cleanup(new_smi);
2737 
2738 	if (new_smi->dev_registered)
2739 		platform_device_unregister(new_smi->pdev);
2740 
2741 	kfree(new_smi);
2742 
2743 	mutex_unlock(&smi_infos_lock);
2744 
2745 	return rv;
2746 }
2747 
2748 static __devinit int init_ipmi_si(void)
2749 {
2750 	int  i;
2751 	char *str;
2752 	int  rv;
2753 
2754 	if (initialized)
2755 		return 0;
2756 	initialized = 1;
2757 
2758 	/* Register the device drivers. */
2759 	rv = driver_register(&ipmi_driver);
2760 	if (rv) {
2761 		printk(KERN_ERR
2762 		       "init_ipmi_si: Unable to register driver: %d\n",
2763 		       rv);
2764 		return rv;
2765 	}
2766 
2767 
2768 	/* Parse out the si_type string into its components. */
2769 	str = si_type_str;
2770 	if (*str != '\0') {
2771 		for (i = 0; (i < SI_MAX_PARMS) && (*str != '\0'); i++) {
2772 			si_type[i] = str;
2773 			str = strchr(str, ',');
2774 			if (str) {
2775 				*str = '\0';
2776 				str++;
2777 			} else {
2778 				break;
2779 			}
2780 		}
2781 	}
2782 
2783 	printk(KERN_INFO "IPMI System Interface driver.\n");
2784 
2785 	hardcode_find_bmc();
2786 
2787 #ifdef CONFIG_DMI
2788 	dmi_find_bmc();
2789 #endif
2790 
2791 #ifdef CONFIG_ACPI
2792 	acpi_find_bmc();
2793 #endif
2794 
2795 #ifdef CONFIG_PCI
2796 	rv = pci_register_driver(&ipmi_pci_driver);
2797 	if (rv){
2798 		printk(KERN_ERR
2799 		       "init_ipmi_si: Unable to register PCI driver: %d\n",
2800 		       rv);
2801 	}
2802 #endif
2803 
2804 	if (si_trydefaults) {
2805 		mutex_lock(&smi_infos_lock);
2806 		if (list_empty(&smi_infos)) {
2807 			/* No BMC was found, try defaults. */
2808 			mutex_unlock(&smi_infos_lock);
2809 			default_find_bmc();
2810 		} else {
2811 			mutex_unlock(&smi_infos_lock);
2812 		}
2813 	}
2814 
2815 	mutex_lock(&smi_infos_lock);
2816 	if (unload_when_empty && list_empty(&smi_infos)) {
2817 		mutex_unlock(&smi_infos_lock);
2818 #ifdef CONFIG_PCI
2819 		pci_unregister_driver(&ipmi_pci_driver);
2820 #endif
2821 		driver_unregister(&ipmi_driver);
2822 		printk("ipmi_si: Unable to find any System Interface(s)\n");
2823 		return -ENODEV;
2824 	} else {
2825 		mutex_unlock(&smi_infos_lock);
2826 		return 0;
2827 	}
2828 }
2829 module_init(init_ipmi_si);
2830 
2831 static void cleanup_one_si(struct smi_info *to_clean)
2832 {
2833 	int           rv;
2834 	unsigned long flags;
2835 
2836 	if (!to_clean)
2837 		return;
2838 
2839 	list_del(&to_clean->link);
2840 
2841 	/* Tell the timer and interrupt handlers that we are shutting
2842 	   down. */
2843 	spin_lock_irqsave(&(to_clean->si_lock), flags);
2844 	spin_lock(&(to_clean->msg_lock));
2845 
2846 	atomic_inc(&to_clean->stop_operation);
2847 
2848 	if (to_clean->irq_cleanup)
2849 		to_clean->irq_cleanup(to_clean);
2850 
2851 	spin_unlock(&(to_clean->msg_lock));
2852 	spin_unlock_irqrestore(&(to_clean->si_lock), flags);
2853 
2854 	/* Wait until we know that we are out of any interrupt
2855 	   handlers might have been running before we freed the
2856 	   interrupt. */
2857 	synchronize_sched();
2858 
2859 	wait_for_timer_and_thread(to_clean);
2860 
2861 	/* Interrupts and timeouts are stopped, now make sure the
2862 	   interface is in a clean state. */
2863 	while (to_clean->curr_msg || (to_clean->si_state != SI_NORMAL)) {
2864 		poll(to_clean);
2865 		schedule_timeout_uninterruptible(1);
2866 	}
2867 
2868 	rv = ipmi_unregister_smi(to_clean->intf);
2869 	if (rv) {
2870 		printk(KERN_ERR
2871 		       "ipmi_si: Unable to unregister device: errno=%d\n",
2872 		       rv);
2873 	}
2874 
2875 	to_clean->handlers->cleanup(to_clean->si_sm);
2876 
2877 	kfree(to_clean->si_sm);
2878 
2879 	if (to_clean->addr_source_cleanup)
2880 		to_clean->addr_source_cleanup(to_clean);
2881 	if (to_clean->io_cleanup)
2882 		to_clean->io_cleanup(to_clean);
2883 
2884 	if (to_clean->dev_registered)
2885 		platform_device_unregister(to_clean->pdev);
2886 
2887 	kfree(to_clean);
2888 }
2889 
2890 static __exit void cleanup_ipmi_si(void)
2891 {
2892 	struct smi_info *e, *tmp_e;
2893 
2894 	if (!initialized)
2895 		return;
2896 
2897 #ifdef CONFIG_PCI
2898 	pci_unregister_driver(&ipmi_pci_driver);
2899 #endif
2900 
2901 	mutex_lock(&smi_infos_lock);
2902 	list_for_each_entry_safe(e, tmp_e, &smi_infos, link)
2903 		cleanup_one_si(e);
2904 	mutex_unlock(&smi_infos_lock);
2905 
2906 	driver_unregister(&ipmi_driver);
2907 }
2908 module_exit(cleanup_ipmi_si);
2909 
2910 MODULE_LICENSE("GPL");
2911 MODULE_AUTHOR("Corey Minyard <minyard@mvista.com>");
2912 MODULE_DESCRIPTION("Interface to the IPMI driver for the KCS, SMIC, and BT system interfaces.");
2913