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