Linux Audio

Check our new training course

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