1 /*
2  * ipmi_msghandler.c
3  *
4  * Incoming and outgoing message routing for an IPMI interface.
5  *
6  * Author: MontaVista Software, Inc.
7  *         Corey Minyard <minyard@mvista.com>
8  *         source@mvista.com
9  *
10  * Copyright 2002 MontaVista Software Inc.
11  *
12  *  This program is free software; you can redistribute it and/or modify it
13  *  under the terms of the GNU General Public License as published by the
14  *  Free Software Foundation; either version 2 of the License, or (at your
15  *  option) any later version.
16  *
17  *
18  *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
19  *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
20  *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21  *  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
23  *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
24  *  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25  *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
26  *  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
27  *  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  *
29  *  You should have received a copy of the GNU General Public License along
30  *  with this program; if not, write to the Free Software Foundation, Inc.,
31  *  675 Mass Ave, Cambridge, MA 02139, USA.
32  */
33 
34 #include <linux/module.h>
35 #include <linux/errno.h>
36 #include <asm/system.h>
37 #include <linux/poll.h>
38 #include <linux/spinlock.h>
39 #include <linux/mutex.h>
40 #include <linux/slab.h>
41 #include <linux/ipmi.h>
42 #include <linux/ipmi_smi.h>
43 #include <linux/notifier.h>
44 #include <linux/init.h>
45 #include <linux/proc_fs.h>
46 #include <linux/rcupdate.h>
47 
48 #define PFX "IPMI message handler: "
49 
50 #define IPMI_DRIVER_VERSION "39.1"
51 
52 static struct ipmi_recv_msg *ipmi_alloc_recv_msg(void);
53 static int ipmi_init_msghandler(void);
54 
55 static int initialized;
56 
57 #ifdef CONFIG_PROC_FS
58 static struct proc_dir_entry *proc_ipmi_root;
59 #endif /* CONFIG_PROC_FS */
60 
61 /* Remain in auto-maintenance mode for this amount of time (in ms). */
62 #define IPMI_MAINTENANCE_MODE_TIMEOUT 30000
63 
64 #define MAX_EVENTS_IN_QUEUE	25
65 
66 /* Don't let a message sit in a queue forever, always time it with at lest
67    the max message timer.  This is in milliseconds. */
68 #define MAX_MSG_TIMEOUT		60000
69 
70 
71 /*
72  * The main "user" data structure.
73  */
74 struct ipmi_user
75 {
76 	struct list_head link;
77 
78 	/* Set to "0" when the user is destroyed. */
79 	int valid;
80 
81 	struct kref refcount;
82 
83 	/* The upper layer that handles receive messages. */
84 	struct ipmi_user_hndl *handler;
85 	void             *handler_data;
86 
87 	/* The interface this user is bound to. */
88 	ipmi_smi_t intf;
89 
90 	/* Does this interface receive IPMI events? */
91 	int gets_events;
92 };
93 
94 struct cmd_rcvr
95 {
96 	struct list_head link;
97 
98 	ipmi_user_t   user;
99 	unsigned char netfn;
100 	unsigned char cmd;
101 	unsigned int  chans;
102 
103 	/*
104 	 * This is used to form a linked lised during mass deletion.
105 	 * Since this is in an RCU list, we cannot use the link above
106 	 * or change any data until the RCU period completes.  So we
107 	 * use this next variable during mass deletion so we can have
108 	 * a list and don't have to wait and restart the search on
109 	 * every individual deletion of a command. */
110 	struct cmd_rcvr *next;
111 };
112 
113 struct seq_table
114 {
115 	unsigned int         inuse : 1;
116 	unsigned int         broadcast : 1;
117 
118 	unsigned long        timeout;
119 	unsigned long        orig_timeout;
120 	unsigned int         retries_left;
121 
122 	/* To verify on an incoming send message response that this is
123            the message that the response is for, we keep a sequence id
124            and increment it every time we send a message. */
125 	long                 seqid;
126 
127 	/* This is held so we can properly respond to the message on a
128            timeout, and it is used to hold the temporary data for
129            retransmission, too. */
130 	struct ipmi_recv_msg *recv_msg;
131 };
132 
133 /* Store the information in a msgid (long) to allow us to find a
134    sequence table entry from the msgid. */
135 #define STORE_SEQ_IN_MSGID(seq, seqid) (((seq&0xff)<<26) | (seqid&0x3ffffff))
136 
137 #define GET_SEQ_FROM_MSGID(msgid, seq, seqid) \
138 	do {								\
139 		seq = ((msgid >> 26) & 0x3f);				\
140 		seqid = (msgid & 0x3fffff);				\
141         } while (0)
142 
143 #define NEXT_SEQID(seqid) (((seqid) + 1) & 0x3fffff)
144 
145 struct ipmi_channel
146 {
147 	unsigned char medium;
148 	unsigned char protocol;
149 
150 	/* My slave address.  This is initialized to IPMI_BMC_SLAVE_ADDR,
151 	   but may be changed by the user. */
152 	unsigned char address;
153 
154 	/* My LUN.  This should generally stay the SMS LUN, but just in
155 	   case... */
156 	unsigned char lun;
157 };
158 
159 #ifdef CONFIG_PROC_FS
160 struct ipmi_proc_entry
161 {
162 	char                   *name;
163 	struct ipmi_proc_entry *next;
164 };
165 #endif
166 
167 struct bmc_device
168 {
169 	struct platform_device *dev;
170 	struct ipmi_device_id  id;
171 	unsigned char          guid[16];
172 	int                    guid_set;
173 
174 	struct kref	       refcount;
175 
176 	/* bmc device attributes */
177 	struct device_attribute device_id_attr;
178 	struct device_attribute provides_dev_sdrs_attr;
179 	struct device_attribute revision_attr;
180 	struct device_attribute firmware_rev_attr;
181 	struct device_attribute version_attr;
182 	struct device_attribute add_dev_support_attr;
183 	struct device_attribute manufacturer_id_attr;
184 	struct device_attribute product_id_attr;
185 	struct device_attribute guid_attr;
186 	struct device_attribute aux_firmware_rev_attr;
187 };
188 
189 #define IPMI_IPMB_NUM_SEQ	64
190 #define IPMI_MAX_CHANNELS       16
191 struct ipmi_smi
192 {
193 	/* What interface number are we? */
194 	int intf_num;
195 
196 	struct kref refcount;
197 
198 	/* Used for a list of interfaces. */
199 	struct list_head link;
200 
201 	/* The list of upper layers that are using me.  seq_lock
202 	 * protects this. */
203 	struct list_head users;
204 
205 	/* Information to supply to users. */
206 	unsigned char ipmi_version_major;
207 	unsigned char ipmi_version_minor;
208 
209 	/* Used for wake ups at startup. */
210 	wait_queue_head_t waitq;
211 
212 	struct bmc_device *bmc;
213 	char *my_dev_name;
214 	char *sysfs_name;
215 
216 	/* This is the lower-layer's sender routine.  Note that you
217 	 * must either be holding the ipmi_interfaces_mutex or be in
218 	 * an umpreemptible region to use this.  You must fetch the
219 	 * value into a local variable and make sure it is not NULL. */
220 	struct ipmi_smi_handlers *handlers;
221 	void                     *send_info;
222 
223 #ifdef CONFIG_PROC_FS
224 	/* A list of proc entries for this interface.  This does not
225 	   need a lock, only one thread creates it and only one thread
226 	   destroys it. */
227 	spinlock_t             proc_entry_lock;
228 	struct ipmi_proc_entry *proc_entries;
229 #endif
230 
231 	/* Driver-model device for the system interface. */
232 	struct device          *si_dev;
233 
234 	/* A table of sequence numbers for this interface.  We use the
235            sequence numbers for IPMB messages that go out of the
236            interface to match them up with their responses.  A routine
237            is called periodically to time the items in this list. */
238 	spinlock_t       seq_lock;
239 	struct seq_table seq_table[IPMI_IPMB_NUM_SEQ];
240 	int curr_seq;
241 
242 	/* Messages that were delayed for some reason (out of memory,
243            for instance), will go in here to be processed later in a
244            periodic timer interrupt. */
245 	spinlock_t       waiting_msgs_lock;
246 	struct list_head waiting_msgs;
247 
248 	/* The list of command receivers that are registered for commands
249 	   on this interface. */
250 	struct mutex     cmd_rcvrs_mutex;
251 	struct list_head cmd_rcvrs;
252 
253 	/* Events that were queues because no one was there to receive
254            them. */
255 	spinlock_t       events_lock; /* For dealing with event stuff. */
256 	struct list_head waiting_events;
257 	unsigned int     waiting_events_count; /* How many events in queue? */
258 	int              delivering_events;
259 
260 	/* The event receiver for my BMC, only really used at panic
261 	   shutdown as a place to store this. */
262 	unsigned char event_receiver;
263 	unsigned char event_receiver_lun;
264 	unsigned char local_sel_device;
265 	unsigned char local_event_generator;
266 
267 	/* For handling of maintenance mode. */
268 	int maintenance_mode;
269 	int maintenance_mode_enable;
270 	int auto_maintenance_timeout;
271 	spinlock_t maintenance_mode_lock; /* Used in a timer... */
272 
273 	/* A cheap hack, if this is non-null and a message to an
274 	   interface comes in with a NULL user, call this routine with
275 	   it.  Note that the message will still be freed by the
276 	   caller.  This only works on the system interface. */
277 	void (*null_user_handler)(ipmi_smi_t intf, struct ipmi_recv_msg *msg);
278 
279 	/* When we are scanning the channels for an SMI, this will
280 	   tell which channel we are scanning. */
281 	int curr_channel;
282 
283 	/* Channel information */
284 	struct ipmi_channel channels[IPMI_MAX_CHANNELS];
285 
286 	/* Proc FS stuff. */
287 	struct proc_dir_entry *proc_dir;
288 	char                  proc_dir_name[10];
289 
290 	spinlock_t   counter_lock; /* For making counters atomic. */
291 
292 	/* Commands we got that were invalid. */
293 	unsigned int sent_invalid_commands;
294 
295 	/* Commands we sent to the MC. */
296 	unsigned int sent_local_commands;
297 	/* Responses from the MC that were delivered to a user. */
298 	unsigned int handled_local_responses;
299 	/* Responses from the MC that were not delivered to a user. */
300 	unsigned int unhandled_local_responses;
301 
302 	/* Commands we sent out to the IPMB bus. */
303 	unsigned int sent_ipmb_commands;
304 	/* Commands sent on the IPMB that had errors on the SEND CMD */
305 	unsigned int sent_ipmb_command_errs;
306 	/* Each retransmit increments this count. */
307 	unsigned int retransmitted_ipmb_commands;
308 	/* When a message times out (runs out of retransmits) this is
309            incremented. */
310 	unsigned int timed_out_ipmb_commands;
311 
312 	/* This is like above, but for broadcasts.  Broadcasts are
313            *not* included in the above count (they are expected to
314            time out). */
315 	unsigned int timed_out_ipmb_broadcasts;
316 
317 	/* Responses I have sent to the IPMB bus. */
318 	unsigned int sent_ipmb_responses;
319 
320 	/* The response was delivered to the user. */
321 	unsigned int handled_ipmb_responses;
322 	/* The response had invalid data in it. */
323 	unsigned int invalid_ipmb_responses;
324 	/* The response didn't have anyone waiting for it. */
325 	unsigned int unhandled_ipmb_responses;
326 
327 	/* Commands we sent out to the IPMB bus. */
328 	unsigned int sent_lan_commands;
329 	/* Commands sent on the IPMB that had errors on the SEND CMD */
330 	unsigned int sent_lan_command_errs;
331 	/* Each retransmit increments this count. */
332 	unsigned int retransmitted_lan_commands;
333 	/* When a message times out (runs out of retransmits) this is
334            incremented. */
335 	unsigned int timed_out_lan_commands;
336 
337 	/* Responses I have sent to the IPMB bus. */
338 	unsigned int sent_lan_responses;
339 
340 	/* The response was delivered to the user. */
341 	unsigned int handled_lan_responses;
342 	/* The response had invalid data in it. */
343 	unsigned int invalid_lan_responses;
344 	/* The response didn't have anyone waiting for it. */
345 	unsigned int unhandled_lan_responses;
346 
347 	/* The command was delivered to the user. */
348 	unsigned int handled_commands;
349 	/* The command had invalid data in it. */
350 	unsigned int invalid_commands;
351 	/* The command didn't have anyone waiting for it. */
352 	unsigned int unhandled_commands;
353 
354 	/* Invalid data in an event. */
355 	unsigned int invalid_events;
356 	/* Events that were received with the proper format. */
357 	unsigned int events;
358 };
359 #define to_si_intf_from_dev(device) container_of(device, struct ipmi_smi, dev)
360 
361 /**
362  * The driver model view of the IPMI messaging driver.
363  */
364 static struct device_driver ipmidriver = {
365 	.name = "ipmi",
366 	.bus = &platform_bus_type
367 };
368 static DEFINE_MUTEX(ipmidriver_mutex);
369 
370 static struct list_head ipmi_interfaces = LIST_HEAD_INIT(ipmi_interfaces);
371 static DEFINE_MUTEX(ipmi_interfaces_mutex);
372 
373 /* List of watchers that want to know when smi's are added and
374    deleted. */
375 static struct list_head smi_watchers = LIST_HEAD_INIT(smi_watchers);
376 static DEFINE_MUTEX(smi_watchers_mutex);
377 
378 
379 static void free_recv_msg_list(struct list_head *q)
380 {
381 	struct ipmi_recv_msg *msg, *msg2;
382 
383 	list_for_each_entry_safe(msg, msg2, q, link) {
384 		list_del(&msg->link);
385 		ipmi_free_recv_msg(msg);
386 	}
387 }
388 
389 static void free_smi_msg_list(struct list_head *q)
390 {
391 	struct ipmi_smi_msg *msg, *msg2;
392 
393 	list_for_each_entry_safe(msg, msg2, q, link) {
394 		list_del(&msg->link);
395 		ipmi_free_smi_msg(msg);
396 	}
397 }
398 
399 static void clean_up_interface_data(ipmi_smi_t intf)
400 {
401 	int              i;
402 	struct cmd_rcvr  *rcvr, *rcvr2;
403 	struct list_head list;
404 
405 	free_smi_msg_list(&intf->waiting_msgs);
406 	free_recv_msg_list(&intf->waiting_events);
407 
408 	/*
409 	 * Wholesale remove all the entries from the list in the
410 	 * interface and wait for RCU to know that none are in use.
411 	 */
412 	mutex_lock(&intf->cmd_rcvrs_mutex);
413 	INIT_LIST_HEAD(&list);
414 	list_splice_init_rcu(&intf->cmd_rcvrs, &list, synchronize_rcu);
415 	mutex_unlock(&intf->cmd_rcvrs_mutex);
416 
417 	list_for_each_entry_safe(rcvr, rcvr2, &list, link)
418 		kfree(rcvr);
419 
420 	for (i = 0; i < IPMI_IPMB_NUM_SEQ; i++) {
421 		if ((intf->seq_table[i].inuse)
422 		    && (intf->seq_table[i].recv_msg))
423 		{
424 			ipmi_free_recv_msg(intf->seq_table[i].recv_msg);
425 		}
426 	}
427 }
428 
429 static void intf_free(struct kref *ref)
430 {
431 	ipmi_smi_t intf = container_of(ref, struct ipmi_smi, refcount);
432 
433 	clean_up_interface_data(intf);
434 	kfree(intf);
435 }
436 
437 struct watcher_entry {
438 	int              intf_num;
439 	ipmi_smi_t       intf;
440 	struct list_head link;
441 };
442 
443 int ipmi_smi_watcher_register(struct ipmi_smi_watcher *watcher)
444 {
445 	ipmi_smi_t intf;
446 	struct list_head to_deliver = LIST_HEAD_INIT(to_deliver);
447 	struct watcher_entry *e, *e2;
448 
449 	mutex_lock(&smi_watchers_mutex);
450 
451 	mutex_lock(&ipmi_interfaces_mutex);
452 
453 	/* Build a list of things to deliver. */
454 	list_for_each_entry(intf, &ipmi_interfaces, link) {
455 		if (intf->intf_num == -1)
456 			continue;
457 		e = kmalloc(sizeof(*e), GFP_KERNEL);
458 		if (!e)
459 			goto out_err;
460 		kref_get(&intf->refcount);
461 		e->intf = intf;
462 		e->intf_num = intf->intf_num;
463 		list_add_tail(&e->link, &to_deliver);
464 	}
465 
466 	/* We will succeed, so add it to the list. */
467 	list_add(&watcher->link, &smi_watchers);
468 
469 	mutex_unlock(&ipmi_interfaces_mutex);
470 
471 	list_for_each_entry_safe(e, e2, &to_deliver, link) {
472 		list_del(&e->link);
473 		watcher->new_smi(e->intf_num, e->intf->si_dev);
474 		kref_put(&e->intf->refcount, intf_free);
475 		kfree(e);
476 	}
477 
478 	mutex_unlock(&smi_watchers_mutex);
479 
480 	return 0;
481 
482  out_err:
483 	mutex_unlock(&ipmi_interfaces_mutex);
484 	mutex_unlock(&smi_watchers_mutex);
485 	list_for_each_entry_safe(e, e2, &to_deliver, link) {
486 		list_del(&e->link);
487 		kref_put(&e->intf->refcount, intf_free);
488 		kfree(e);
489 	}
490 	return -ENOMEM;
491 }
492 
493 int ipmi_smi_watcher_unregister(struct ipmi_smi_watcher *watcher)
494 {
495 	mutex_lock(&smi_watchers_mutex);
496 	list_del(&(watcher->link));
497 	mutex_unlock(&smi_watchers_mutex);
498 	return 0;
499 }
500 
501 /*
502  * Must be called with smi_watchers_mutex held.
503  */
504 static void
505 call_smi_watchers(int i, struct device *dev)
506 {
507 	struct ipmi_smi_watcher *w;
508 
509 	list_for_each_entry(w, &smi_watchers, link) {
510 		if (try_module_get(w->owner)) {
511 			w->new_smi(i, dev);
512 			module_put(w->owner);
513 		}
514 	}
515 }
516 
517 static int
518 ipmi_addr_equal(struct ipmi_addr *addr1, struct ipmi_addr *addr2)
519 {
520 	if (addr1->addr_type != addr2->addr_type)
521 		return 0;
522 
523 	if (addr1->channel != addr2->channel)
524 		return 0;
525 
526 	if (addr1->addr_type == IPMI_SYSTEM_INTERFACE_ADDR_TYPE) {
527 		struct ipmi_system_interface_addr *smi_addr1
528 		    = (struct ipmi_system_interface_addr *) addr1;
529 		struct ipmi_system_interface_addr *smi_addr2
530 		    = (struct ipmi_system_interface_addr *) addr2;
531 		return (smi_addr1->lun == smi_addr2->lun);
532 	}
533 
534 	if ((addr1->addr_type == IPMI_IPMB_ADDR_TYPE)
535 	    || (addr1->addr_type == IPMI_IPMB_BROADCAST_ADDR_TYPE))
536 	{
537 		struct ipmi_ipmb_addr *ipmb_addr1
538 		    = (struct ipmi_ipmb_addr *) addr1;
539 		struct ipmi_ipmb_addr *ipmb_addr2
540 		    = (struct ipmi_ipmb_addr *) addr2;
541 
542 		return ((ipmb_addr1->slave_addr == ipmb_addr2->slave_addr)
543 			&& (ipmb_addr1->lun == ipmb_addr2->lun));
544 	}
545 
546 	if (addr1->addr_type == IPMI_LAN_ADDR_TYPE) {
547 		struct ipmi_lan_addr *lan_addr1
548 			= (struct ipmi_lan_addr *) addr1;
549 		struct ipmi_lan_addr *lan_addr2
550 		    = (struct ipmi_lan_addr *) addr2;
551 
552 		return ((lan_addr1->remote_SWID == lan_addr2->remote_SWID)
553 			&& (lan_addr1->local_SWID == lan_addr2->local_SWID)
554 			&& (lan_addr1->session_handle
555 			    == lan_addr2->session_handle)
556 			&& (lan_addr1->lun == lan_addr2->lun));
557 	}
558 
559 	return 1;
560 }
561 
562 int ipmi_validate_addr(struct ipmi_addr *addr, int len)
563 {
564 	if (len < sizeof(struct ipmi_system_interface_addr)) {
565 		return -EINVAL;
566 	}
567 
568 	if (addr->addr_type == IPMI_SYSTEM_INTERFACE_ADDR_TYPE) {
569 		if (addr->channel != IPMI_BMC_CHANNEL)
570 			return -EINVAL;
571 		return 0;
572 	}
573 
574 	if ((addr->channel == IPMI_BMC_CHANNEL)
575 	    || (addr->channel >= IPMI_MAX_CHANNELS)
576 	    || (addr->channel < 0))
577 		return -EINVAL;
578 
579 	if ((addr->addr_type == IPMI_IPMB_ADDR_TYPE)
580 	    || (addr->addr_type == IPMI_IPMB_BROADCAST_ADDR_TYPE))
581 	{
582 		if (len < sizeof(struct ipmi_ipmb_addr)) {
583 			return -EINVAL;
584 		}
585 		return 0;
586 	}
587 
588 	if (addr->addr_type == IPMI_LAN_ADDR_TYPE) {
589 		if (len < sizeof(struct ipmi_lan_addr)) {
590 			return -EINVAL;
591 		}
592 		return 0;
593 	}
594 
595 	return -EINVAL;
596 }
597 
598 unsigned int ipmi_addr_length(int addr_type)
599 {
600 	if (addr_type == IPMI_SYSTEM_INTERFACE_ADDR_TYPE)
601 		return sizeof(struct ipmi_system_interface_addr);
602 
603 	if ((addr_type == IPMI_IPMB_ADDR_TYPE)
604 	    || (addr_type == IPMI_IPMB_BROADCAST_ADDR_TYPE))
605 	{
606 		return sizeof(struct ipmi_ipmb_addr);
607 	}
608 
609 	if (addr_type == IPMI_LAN_ADDR_TYPE)
610 		return sizeof(struct ipmi_lan_addr);
611 
612 	return 0;
613 }
614 
615 static void deliver_response(struct ipmi_recv_msg *msg)
616 {
617 	if (!msg->user) {
618 		ipmi_smi_t    intf = msg->user_msg_data;
619 		unsigned long flags;
620 
621 		/* Special handling for NULL users. */
622 		if (intf->null_user_handler) {
623 			intf->null_user_handler(intf, msg);
624 			spin_lock_irqsave(&intf->counter_lock, flags);
625 			intf->handled_local_responses++;
626 			spin_unlock_irqrestore(&intf->counter_lock, flags);
627 		} else {
628 			/* No handler, so give up. */
629 			spin_lock_irqsave(&intf->counter_lock, flags);
630 			intf->unhandled_local_responses++;
631 			spin_unlock_irqrestore(&intf->counter_lock, flags);
632 		}
633 		ipmi_free_recv_msg(msg);
634 	} else {
635 		ipmi_user_t user = msg->user;
636 		user->handler->ipmi_recv_hndl(msg, user->handler_data);
637 	}
638 }
639 
640 static void
641 deliver_err_response(struct ipmi_recv_msg *msg, int err)
642 {
643 	msg->recv_type = IPMI_RESPONSE_RECV_TYPE;
644 	msg->msg_data[0] = err;
645 	msg->msg.netfn |= 1; /* Convert to a response. */
646 	msg->msg.data_len = 1;
647 	msg->msg.data = msg->msg_data;
648 	deliver_response(msg);
649 }
650 
651 /* Find the next sequence number not being used and add the given
652    message with the given timeout to the sequence table.  This must be
653    called with the interface's seq_lock held. */
654 static int intf_next_seq(ipmi_smi_t           intf,
655 			 struct ipmi_recv_msg *recv_msg,
656 			 unsigned long        timeout,
657 			 int                  retries,
658 			 int                  broadcast,
659 			 unsigned char        *seq,
660 			 long                 *seqid)
661 {
662 	int          rv = 0;
663 	unsigned int i;
664 
665 	for (i = intf->curr_seq;
666 	     (i+1)%IPMI_IPMB_NUM_SEQ != intf->curr_seq;
667 	     i = (i+1)%IPMI_IPMB_NUM_SEQ)
668 	{
669 		if (!intf->seq_table[i].inuse)
670 			break;
671 	}
672 
673 	if (!intf->seq_table[i].inuse) {
674 		intf->seq_table[i].recv_msg = recv_msg;
675 
676 		/* Start with the maximum timeout, when the send response
677 		   comes in we will start the real timer. */
678 		intf->seq_table[i].timeout = MAX_MSG_TIMEOUT;
679 		intf->seq_table[i].orig_timeout = timeout;
680 		intf->seq_table[i].retries_left = retries;
681 		intf->seq_table[i].broadcast = broadcast;
682 		intf->seq_table[i].inuse = 1;
683 		intf->seq_table[i].seqid = NEXT_SEQID(intf->seq_table[i].seqid);
684 		*seq = i;
685 		*seqid = intf->seq_table[i].seqid;
686 		intf->curr_seq = (i+1)%IPMI_IPMB_NUM_SEQ;
687 	} else {
688 		rv = -EAGAIN;
689 	}
690 
691 	return rv;
692 }
693 
694 /* Return the receive message for the given sequence number and
695    release the sequence number so it can be reused.  Some other data
696    is passed in to be sure the message matches up correctly (to help
697    guard against message coming in after their timeout and the
698    sequence number being reused). */
699 static int intf_find_seq(ipmi_smi_t           intf,
700 			 unsigned char        seq,
701 			 short                channel,
702 			 unsigned char        cmd,
703 			 unsigned char        netfn,
704 			 struct ipmi_addr     *addr,
705 			 struct ipmi_recv_msg **recv_msg)
706 {
707 	int           rv = -ENODEV;
708 	unsigned long flags;
709 
710 	if (seq >= IPMI_IPMB_NUM_SEQ)
711 		return -EINVAL;
712 
713 	spin_lock_irqsave(&(intf->seq_lock), flags);
714 	if (intf->seq_table[seq].inuse) {
715 		struct ipmi_recv_msg *msg = intf->seq_table[seq].recv_msg;
716 
717 		if ((msg->addr.channel == channel)
718 		    && (msg->msg.cmd == cmd)
719 		    && (msg->msg.netfn == netfn)
720 		    && (ipmi_addr_equal(addr, &(msg->addr))))
721 		{
722 			*recv_msg = msg;
723 			intf->seq_table[seq].inuse = 0;
724 			rv = 0;
725 		}
726 	}
727 	spin_unlock_irqrestore(&(intf->seq_lock), flags);
728 
729 	return rv;
730 }
731 
732 
733 /* Start the timer for a specific sequence table entry. */
734 static int intf_start_seq_timer(ipmi_smi_t intf,
735 				long       msgid)
736 {
737 	int           rv = -ENODEV;
738 	unsigned long flags;
739 	unsigned char seq;
740 	unsigned long seqid;
741 
742 
743 	GET_SEQ_FROM_MSGID(msgid, seq, seqid);
744 
745 	spin_lock_irqsave(&(intf->seq_lock), flags);
746 	/* We do this verification because the user can be deleted
747            while a message is outstanding. */
748 	if ((intf->seq_table[seq].inuse)
749 	    && (intf->seq_table[seq].seqid == seqid))
750 	{
751 		struct seq_table *ent = &(intf->seq_table[seq]);
752 		ent->timeout = ent->orig_timeout;
753 		rv = 0;
754 	}
755 	spin_unlock_irqrestore(&(intf->seq_lock), flags);
756 
757 	return rv;
758 }
759 
760 /* Got an error for the send message for a specific sequence number. */
761 static int intf_err_seq(ipmi_smi_t   intf,
762 			long         msgid,
763 			unsigned int err)
764 {
765 	int                  rv = -ENODEV;
766 	unsigned long        flags;
767 	unsigned char        seq;
768 	unsigned long        seqid;
769 	struct ipmi_recv_msg *msg = NULL;
770 
771 
772 	GET_SEQ_FROM_MSGID(msgid, seq, seqid);
773 
774 	spin_lock_irqsave(&(intf->seq_lock), flags);
775 	/* We do this verification because the user can be deleted
776            while a message is outstanding. */
777 	if ((intf->seq_table[seq].inuse)
778 	    && (intf->seq_table[seq].seqid == seqid))
779 	{
780 		struct seq_table *ent = &(intf->seq_table[seq]);
781 
782 		ent->inuse = 0;
783 		msg = ent->recv_msg;
784 		rv = 0;
785 	}
786 	spin_unlock_irqrestore(&(intf->seq_lock), flags);
787 
788 	if (msg)
789 		deliver_err_response(msg, err);
790 
791 	return rv;
792 }
793 
794 
795 int ipmi_create_user(unsigned int          if_num,
796 		     struct ipmi_user_hndl *handler,
797 		     void                  *handler_data,
798 		     ipmi_user_t           *user)
799 {
800 	unsigned long flags;
801 	ipmi_user_t   new_user;
802 	int           rv = 0;
803 	ipmi_smi_t    intf;
804 
805 	/* There is no module usecount here, because it's not
806            required.  Since this can only be used by and called from
807            other modules, they will implicitly use this module, and
808            thus this can't be removed unless the other modules are
809            removed. */
810 
811 	if (handler == NULL)
812 		return -EINVAL;
813 
814 	/* Make sure the driver is actually initialized, this handles
815 	   problems with initialization order. */
816 	if (!initialized) {
817 		rv = ipmi_init_msghandler();
818 		if (rv)
819 			return rv;
820 
821 		/* The init code doesn't return an error if it was turned
822 		   off, but it won't initialize.  Check that. */
823 		if (!initialized)
824 			return -ENODEV;
825 	}
826 
827 	new_user = kmalloc(sizeof(*new_user), GFP_KERNEL);
828 	if (!new_user)
829 		return -ENOMEM;
830 
831 	mutex_lock(&ipmi_interfaces_mutex);
832 	list_for_each_entry_rcu(intf, &ipmi_interfaces, link) {
833 		if (intf->intf_num == if_num)
834 			goto found;
835 	}
836 	/* Not found, return an error */
837 	rv = -EINVAL;
838 	goto out_kfree;
839 
840  found:
841 	/* Note that each existing user holds a refcount to the interface. */
842 	kref_get(&intf->refcount);
843 
844 	kref_init(&new_user->refcount);
845 	new_user->handler = handler;
846 	new_user->handler_data = handler_data;
847 	new_user->intf = intf;
848 	new_user->gets_events = 0;
849 
850 	if (!try_module_get(intf->handlers->owner)) {
851 		rv = -ENODEV;
852 		goto out_kref;
853 	}
854 
855 	if (intf->handlers->inc_usecount) {
856 		rv = intf->handlers->inc_usecount(intf->send_info);
857 		if (rv) {
858 			module_put(intf->handlers->owner);
859 			goto out_kref;
860 		}
861 	}
862 
863 	/* Hold the lock so intf->handlers is guaranteed to be good
864 	 * until now */
865 	mutex_unlock(&ipmi_interfaces_mutex);
866 
867 	new_user->valid = 1;
868 	spin_lock_irqsave(&intf->seq_lock, flags);
869 	list_add_rcu(&new_user->link, &intf->users);
870 	spin_unlock_irqrestore(&intf->seq_lock, flags);
871 	*user = new_user;
872 	return 0;
873 
874 out_kref:
875 	kref_put(&intf->refcount, intf_free);
876 out_kfree:
877 	mutex_unlock(&ipmi_interfaces_mutex);
878 	kfree(new_user);
879 	return rv;
880 }
881 
882 static void free_user(struct kref *ref)
883 {
884 	ipmi_user_t user = container_of(ref, struct ipmi_user, refcount);
885 	kfree(user);
886 }
887 
888 int ipmi_destroy_user(ipmi_user_t user)
889 {
890 	ipmi_smi_t       intf = user->intf;
891 	int              i;
892 	unsigned long    flags;
893 	struct cmd_rcvr  *rcvr;
894 	struct cmd_rcvr  *rcvrs = NULL;
895 
896 	user->valid = 0;
897 
898 	/* Remove the user from the interface's sequence table. */
899 	spin_lock_irqsave(&intf->seq_lock, flags);
900 	list_del_rcu(&user->link);
901 
902 	for (i = 0; i < IPMI_IPMB_NUM_SEQ; i++) {
903 		if (intf->seq_table[i].inuse
904 		    && (intf->seq_table[i].recv_msg->user == user))
905 		{
906 			intf->seq_table[i].inuse = 0;
907 			ipmi_free_recv_msg(intf->seq_table[i].recv_msg);
908 		}
909 	}
910 	spin_unlock_irqrestore(&intf->seq_lock, flags);
911 
912 	/*
913 	 * Remove the user from the command receiver's table.  First
914 	 * we build a list of everything (not using the standard link,
915 	 * since other things may be using it till we do
916 	 * synchronize_rcu()) then free everything in that list.
917 	 */
918 	mutex_lock(&intf->cmd_rcvrs_mutex);
919 	list_for_each_entry_rcu(rcvr, &intf->cmd_rcvrs, link) {
920 		if (rcvr->user == user) {
921 			list_del_rcu(&rcvr->link);
922 			rcvr->next = rcvrs;
923 			rcvrs = rcvr;
924 		}
925 	}
926 	mutex_unlock(&intf->cmd_rcvrs_mutex);
927 	synchronize_rcu();
928 	while (rcvrs) {
929 		rcvr = rcvrs;
930 		rcvrs = rcvr->next;
931 		kfree(rcvr);
932 	}
933 
934 	mutex_lock(&ipmi_interfaces_mutex);
935 	if (intf->handlers) {
936 		module_put(intf->handlers->owner);
937 		if (intf->handlers->dec_usecount)
938 			intf->handlers->dec_usecount(intf->send_info);
939 	}
940 	mutex_unlock(&ipmi_interfaces_mutex);
941 
942 	kref_put(&intf->refcount, intf_free);
943 
944 	kref_put(&user->refcount, free_user);
945 
946 	return 0;
947 }
948 
949 void ipmi_get_version(ipmi_user_t   user,
950 		      unsigned char *major,
951 		      unsigned char *minor)
952 {
953 	*major = user->intf->ipmi_version_major;
954 	*minor = user->intf->ipmi_version_minor;
955 }
956 
957 int ipmi_set_my_address(ipmi_user_t   user,
958 			unsigned int  channel,
959 			unsigned char address)
960 {
961 	if (channel >= IPMI_MAX_CHANNELS)
962 		return -EINVAL;
963 	user->intf->channels[channel].address = address;
964 	return 0;
965 }
966 
967 int ipmi_get_my_address(ipmi_user_t   user,
968 			unsigned int  channel,
969 			unsigned char *address)
970 {
971 	if (channel >= IPMI_MAX_CHANNELS)
972 		return -EINVAL;
973 	*address = user->intf->channels[channel].address;
974 	return 0;
975 }
976 
977 int ipmi_set_my_LUN(ipmi_user_t   user,
978 		    unsigned int  channel,
979 		    unsigned char LUN)
980 {
981 	if (channel >= IPMI_MAX_CHANNELS)
982 		return -EINVAL;
983 	user->intf->channels[channel].lun = LUN & 0x3;
984 	return 0;
985 }
986 
987 int ipmi_get_my_LUN(ipmi_user_t   user,
988 		    unsigned int  channel,
989 		    unsigned char *address)
990 {
991 	if (channel >= IPMI_MAX_CHANNELS)
992 		return -EINVAL;
993 	*address = user->intf->channels[channel].lun;
994 	return 0;
995 }
996 
997 int ipmi_get_maintenance_mode(ipmi_user_t user)
998 {
999 	int           mode;
1000 	unsigned long flags;
1001 
1002 	spin_lock_irqsave(&user->intf->maintenance_mode_lock, flags);
1003 	mode = user->intf->maintenance_mode;
1004 	spin_unlock_irqrestore(&user->intf->maintenance_mode_lock, flags);
1005 
1006 	return mode;
1007 }
1008 EXPORT_SYMBOL(ipmi_get_maintenance_mode);
1009 
1010 static void maintenance_mode_update(ipmi_smi_t intf)
1011 {
1012 	if (intf->handlers->set_maintenance_mode)
1013 		intf->handlers->set_maintenance_mode(
1014 			intf->send_info, intf->maintenance_mode_enable);
1015 }
1016 
1017 int ipmi_set_maintenance_mode(ipmi_user_t user, int mode)
1018 {
1019 	int           rv = 0;
1020 	unsigned long flags;
1021 	ipmi_smi_t    intf = user->intf;
1022 
1023 	spin_lock_irqsave(&intf->maintenance_mode_lock, flags);
1024 	if (intf->maintenance_mode != mode) {
1025 		switch (mode) {
1026 		case IPMI_MAINTENANCE_MODE_AUTO:
1027 			intf->maintenance_mode = mode;
1028 			intf->maintenance_mode_enable
1029 				= (intf->auto_maintenance_timeout > 0);
1030 			break;
1031 
1032 		case IPMI_MAINTENANCE_MODE_OFF:
1033 			intf->maintenance_mode = mode;
1034 			intf->maintenance_mode_enable = 0;
1035 			break;
1036 
1037 		case IPMI_MAINTENANCE_MODE_ON:
1038 			intf->maintenance_mode = mode;
1039 			intf->maintenance_mode_enable = 1;
1040 			break;
1041 
1042 		default:
1043 			rv = -EINVAL;
1044 			goto out_unlock;
1045 		}
1046 
1047 		maintenance_mode_update(intf);
1048 	}
1049  out_unlock:
1050 	spin_unlock_irqrestore(&intf->maintenance_mode_lock, flags);
1051 
1052 	return rv;
1053 }
1054 EXPORT_SYMBOL(ipmi_set_maintenance_mode);
1055 
1056 int ipmi_set_gets_events(ipmi_user_t user, int val)
1057 {
1058 	unsigned long        flags;
1059 	ipmi_smi_t           intf = user->intf;
1060 	struct ipmi_recv_msg *msg, *msg2;
1061 	struct list_head     msgs;
1062 
1063 	INIT_LIST_HEAD(&msgs);
1064 
1065 	spin_lock_irqsave(&intf->events_lock, flags);
1066 	user->gets_events = val;
1067 
1068 	if (intf->delivering_events)
1069 		/*
1070 		 * Another thread is delivering events for this, so
1071 		 * let it handle any new events.
1072 		 */
1073 		goto out;
1074 
1075 	/* Deliver any queued events. */
1076 	while (user->gets_events && !list_empty(&intf->waiting_events)) {
1077 		list_for_each_entry_safe(msg, msg2, &intf->waiting_events, link)
1078 			list_move_tail(&msg->link, &msgs);
1079 		intf->waiting_events_count = 0;
1080 
1081 		intf->delivering_events = 1;
1082 		spin_unlock_irqrestore(&intf->events_lock, flags);
1083 
1084 		list_for_each_entry_safe(msg, msg2, &msgs, link) {
1085 			msg->user = user;
1086 			kref_get(&user->refcount);
1087 			deliver_response(msg);
1088 		}
1089 
1090 		spin_lock_irqsave(&intf->events_lock, flags);
1091 		intf->delivering_events = 0;
1092 	}
1093 
1094  out:
1095 	spin_unlock_irqrestore(&intf->events_lock, flags);
1096 
1097 	return 0;
1098 }
1099 
1100 static struct cmd_rcvr *find_cmd_rcvr(ipmi_smi_t    intf,
1101 				      unsigned char netfn,
1102 				      unsigned char cmd,
1103 				      unsigned char chan)
1104 {
1105 	struct cmd_rcvr *rcvr;
1106 
1107 	list_for_each_entry_rcu(rcvr, &intf->cmd_rcvrs, link) {
1108 		if ((rcvr->netfn == netfn) && (rcvr->cmd == cmd)
1109 					&& (rcvr->chans & (1 << chan)))
1110 			return rcvr;
1111 	}
1112 	return NULL;
1113 }
1114 
1115 static int is_cmd_rcvr_exclusive(ipmi_smi_t    intf,
1116 				 unsigned char netfn,
1117 				 unsigned char cmd,
1118 				 unsigned int  chans)
1119 {
1120 	struct cmd_rcvr *rcvr;
1121 
1122 	list_for_each_entry_rcu(rcvr, &intf->cmd_rcvrs, link) {
1123 		if ((rcvr->netfn == netfn) && (rcvr->cmd == cmd)
1124 					&& (rcvr->chans & chans))
1125 			return 0;
1126 	}
1127 	return 1;
1128 }
1129 
1130 int ipmi_register_for_cmd(ipmi_user_t   user,
1131 			  unsigned char netfn,
1132 			  unsigned char cmd,
1133 			  unsigned int  chans)
1134 {
1135 	ipmi_smi_t      intf = user->intf;
1136 	struct cmd_rcvr *rcvr;
1137 	int             rv = 0;
1138 
1139 
1140 	rcvr = kmalloc(sizeof(*rcvr), GFP_KERNEL);
1141 	if (!rcvr)
1142 		return -ENOMEM;
1143 	rcvr->cmd = cmd;
1144 	rcvr->netfn = netfn;
1145 	rcvr->chans = chans;
1146 	rcvr->user = user;
1147 
1148 	mutex_lock(&intf->cmd_rcvrs_mutex);
1149 	/* Make sure the command/netfn is not already registered. */
1150 	if (!is_cmd_rcvr_exclusive(intf, netfn, cmd, chans)) {
1151 		rv = -EBUSY;
1152 		goto out_unlock;
1153 	}
1154 
1155 	list_add_rcu(&rcvr->link, &intf->cmd_rcvrs);
1156 
1157  out_unlock:
1158 	mutex_unlock(&intf->cmd_rcvrs_mutex);
1159 	if (rv)
1160 		kfree(rcvr);
1161 
1162 	return rv;
1163 }
1164 
1165 int ipmi_unregister_for_cmd(ipmi_user_t   user,
1166 			    unsigned char netfn,
1167 			    unsigned char cmd,
1168 			    unsigned int  chans)
1169 {
1170 	ipmi_smi_t      intf = user->intf;
1171 	struct cmd_rcvr *rcvr;
1172 	struct cmd_rcvr *rcvrs = NULL;
1173 	int i, rv = -ENOENT;
1174 
1175 	mutex_lock(&intf->cmd_rcvrs_mutex);
1176 	for (i = 0; i < IPMI_NUM_CHANNELS; i++) {
1177 		if (((1 << i) & chans) == 0)
1178 			continue;
1179 		rcvr = find_cmd_rcvr(intf, netfn, cmd, i);
1180 		if (rcvr == NULL)
1181 			continue;
1182 		if (rcvr->user == user) {
1183 			rv = 0;
1184 			rcvr->chans &= ~chans;
1185 			if (rcvr->chans == 0) {
1186 				list_del_rcu(&rcvr->link);
1187 				rcvr->next = rcvrs;
1188 				rcvrs = rcvr;
1189 			}
1190 		}
1191 	}
1192 	mutex_unlock(&intf->cmd_rcvrs_mutex);
1193 	synchronize_rcu();
1194 	while (rcvrs) {
1195 		rcvr = rcvrs;
1196 		rcvrs = rcvr->next;
1197 		kfree(rcvr);
1198 	}
1199 	return rv;
1200 }
1201 
1202 void ipmi_user_set_run_to_completion(ipmi_user_t user, int val)
1203 {
1204 	ipmi_smi_t intf = user->intf;
1205 	if (intf->handlers)
1206 		intf->handlers->set_run_to_completion(intf->send_info, val);
1207 }
1208 
1209 static unsigned char
1210 ipmb_checksum(unsigned char *data, int size)
1211 {
1212 	unsigned char csum = 0;
1213 
1214 	for (; size > 0; size--, data++)
1215 		csum += *data;
1216 
1217 	return -csum;
1218 }
1219 
1220 static inline void format_ipmb_msg(struct ipmi_smi_msg   *smi_msg,
1221 				   struct kernel_ipmi_msg *msg,
1222 				   struct ipmi_ipmb_addr *ipmb_addr,
1223 				   long                  msgid,
1224 				   unsigned char         ipmb_seq,
1225 				   int                   broadcast,
1226 				   unsigned char         source_address,
1227 				   unsigned char         source_lun)
1228 {
1229 	int i = broadcast;
1230 
1231 	/* Format the IPMB header data. */
1232 	smi_msg->data[0] = (IPMI_NETFN_APP_REQUEST << 2);
1233 	smi_msg->data[1] = IPMI_SEND_MSG_CMD;
1234 	smi_msg->data[2] = ipmb_addr->channel;
1235 	if (broadcast)
1236 		smi_msg->data[3] = 0;
1237 	smi_msg->data[i+3] = ipmb_addr->slave_addr;
1238 	smi_msg->data[i+4] = (msg->netfn << 2) | (ipmb_addr->lun & 0x3);
1239 	smi_msg->data[i+5] = ipmb_checksum(&(smi_msg->data[i+3]), 2);
1240 	smi_msg->data[i+6] = source_address;
1241 	smi_msg->data[i+7] = (ipmb_seq << 2) | source_lun;
1242 	smi_msg->data[i+8] = msg->cmd;
1243 
1244 	/* Now tack on the data to the message. */
1245 	if (msg->data_len > 0)
1246 		memcpy(&(smi_msg->data[i+9]), msg->data,
1247 		       msg->data_len);
1248 	smi_msg->data_size = msg->data_len + 9;
1249 
1250 	/* Now calculate the checksum and tack it on. */
1251 	smi_msg->data[i+smi_msg->data_size]
1252 		= ipmb_checksum(&(smi_msg->data[i+6]),
1253 				smi_msg->data_size-6);
1254 
1255 	/* Add on the checksum size and the offset from the
1256 	   broadcast. */
1257 	smi_msg->data_size += 1 + i;
1258 
1259 	smi_msg->msgid = msgid;
1260 }
1261 
1262 static inline void format_lan_msg(struct ipmi_smi_msg   *smi_msg,
1263 				  struct kernel_ipmi_msg *msg,
1264 				  struct ipmi_lan_addr  *lan_addr,
1265 				  long                  msgid,
1266 				  unsigned char         ipmb_seq,
1267 				  unsigned char         source_lun)
1268 {
1269 	/* Format the IPMB header data. */
1270 	smi_msg->data[0] = (IPMI_NETFN_APP_REQUEST << 2);
1271 	smi_msg->data[1] = IPMI_SEND_MSG_CMD;
1272 	smi_msg->data[2] = lan_addr->channel;
1273 	smi_msg->data[3] = lan_addr->session_handle;
1274 	smi_msg->data[4] = lan_addr->remote_SWID;
1275 	smi_msg->data[5] = (msg->netfn << 2) | (lan_addr->lun & 0x3);
1276 	smi_msg->data[6] = ipmb_checksum(&(smi_msg->data[4]), 2);
1277 	smi_msg->data[7] = lan_addr->local_SWID;
1278 	smi_msg->data[8] = (ipmb_seq << 2) | source_lun;
1279 	smi_msg->data[9] = msg->cmd;
1280 
1281 	/* Now tack on the data to the message. */
1282 	if (msg->data_len > 0)
1283 		memcpy(&(smi_msg->data[10]), msg->data,
1284 		       msg->data_len);
1285 	smi_msg->data_size = msg->data_len + 10;
1286 
1287 	/* Now calculate the checksum and tack it on. */
1288 	smi_msg->data[smi_msg->data_size]
1289 		= ipmb_checksum(&(smi_msg->data[7]),
1290 				smi_msg->data_size-7);
1291 
1292 	/* Add on the checksum size and the offset from the
1293 	   broadcast. */
1294 	smi_msg->data_size += 1;
1295 
1296 	smi_msg->msgid = msgid;
1297 }
1298 
1299 /* Separate from ipmi_request so that the user does not have to be
1300    supplied in certain circumstances (mainly at panic time).  If
1301    messages are supplied, they will be freed, even if an error
1302    occurs. */
1303 static int i_ipmi_request(ipmi_user_t          user,
1304 			  ipmi_smi_t           intf,
1305 			  struct ipmi_addr     *addr,
1306 			  long                 msgid,
1307 			  struct kernel_ipmi_msg *msg,
1308 			  void                 *user_msg_data,
1309 			  void                 *supplied_smi,
1310 			  struct ipmi_recv_msg *supplied_recv,
1311 			  int                  priority,
1312 			  unsigned char        source_address,
1313 			  unsigned char        source_lun,
1314 			  int                  retries,
1315 			  unsigned int         retry_time_ms)
1316 {
1317 	int                      rv = 0;
1318 	struct ipmi_smi_msg      *smi_msg;
1319 	struct ipmi_recv_msg     *recv_msg;
1320 	unsigned long            flags;
1321 	struct ipmi_smi_handlers *handlers;
1322 
1323 
1324 	if (supplied_recv) {
1325 		recv_msg = supplied_recv;
1326 	} else {
1327 		recv_msg = ipmi_alloc_recv_msg();
1328 		if (recv_msg == NULL) {
1329 			return -ENOMEM;
1330 		}
1331 	}
1332 	recv_msg->user_msg_data = user_msg_data;
1333 
1334 	if (supplied_smi) {
1335 		smi_msg = (struct ipmi_smi_msg *) supplied_smi;
1336 	} else {
1337 		smi_msg = ipmi_alloc_smi_msg();
1338 		if (smi_msg == NULL) {
1339 			ipmi_free_recv_msg(recv_msg);
1340 			return -ENOMEM;
1341 		}
1342 	}
1343 
1344 	rcu_read_lock();
1345 	handlers = intf->handlers;
1346 	if (!handlers) {
1347 		rv = -ENODEV;
1348 		goto out_err;
1349 	}
1350 
1351 	recv_msg->user = user;
1352 	if (user)
1353 		kref_get(&user->refcount);
1354 	recv_msg->msgid = msgid;
1355 	/* Store the message to send in the receive message so timeout
1356 	   responses can get the proper response data. */
1357 	recv_msg->msg = *msg;
1358 
1359 	if (addr->addr_type == IPMI_SYSTEM_INTERFACE_ADDR_TYPE) {
1360 		struct ipmi_system_interface_addr *smi_addr;
1361 
1362 		if (msg->netfn & 1) {
1363 			/* Responses are not allowed to the SMI. */
1364 			rv = -EINVAL;
1365 			goto out_err;
1366 		}
1367 
1368 		smi_addr = (struct ipmi_system_interface_addr *) addr;
1369 		if (smi_addr->lun > 3) {
1370 			spin_lock_irqsave(&intf->counter_lock, flags);
1371 			intf->sent_invalid_commands++;
1372 			spin_unlock_irqrestore(&intf->counter_lock, flags);
1373 			rv = -EINVAL;
1374 			goto out_err;
1375 		}
1376 
1377 		memcpy(&recv_msg->addr, smi_addr, sizeof(*smi_addr));
1378 
1379 		if ((msg->netfn == IPMI_NETFN_APP_REQUEST)
1380 		    && ((msg->cmd == IPMI_SEND_MSG_CMD)
1381 			|| (msg->cmd == IPMI_GET_MSG_CMD)
1382 			|| (msg->cmd == IPMI_READ_EVENT_MSG_BUFFER_CMD)))
1383 		{
1384 			/* We don't let the user do these, since we manage
1385 			   the sequence numbers. */
1386 			spin_lock_irqsave(&intf->counter_lock, flags);
1387 			intf->sent_invalid_commands++;
1388 			spin_unlock_irqrestore(&intf->counter_lock, flags);
1389 			rv = -EINVAL;
1390 			goto out_err;
1391 		}
1392 
1393 		if (((msg->netfn == IPMI_NETFN_APP_REQUEST)
1394 		      && ((msg->cmd == IPMI_COLD_RESET_CMD)
1395 			  || (msg->cmd == IPMI_WARM_RESET_CMD)))
1396 		     || (msg->netfn == IPMI_NETFN_FIRMWARE_REQUEST))
1397 		{
1398 			spin_lock_irqsave(&intf->maintenance_mode_lock, flags);
1399 			intf->auto_maintenance_timeout
1400 				= IPMI_MAINTENANCE_MODE_TIMEOUT;
1401 			if (!intf->maintenance_mode
1402 			    && !intf->maintenance_mode_enable)
1403 			{
1404 				intf->maintenance_mode_enable = 1;
1405 				maintenance_mode_update(intf);
1406 			}
1407 			spin_unlock_irqrestore(&intf->maintenance_mode_lock,
1408 					       flags);
1409 		}
1410 
1411 		if ((msg->data_len + 2) > IPMI_MAX_MSG_LENGTH) {
1412 			spin_lock_irqsave(&intf->counter_lock, flags);
1413 			intf->sent_invalid_commands++;
1414 			spin_unlock_irqrestore(&intf->counter_lock, flags);
1415 			rv = -EMSGSIZE;
1416 			goto out_err;
1417 		}
1418 
1419 		smi_msg->data[0] = (msg->netfn << 2) | (smi_addr->lun & 0x3);
1420 		smi_msg->data[1] = msg->cmd;
1421 		smi_msg->msgid = msgid;
1422 		smi_msg->user_data = recv_msg;
1423 		if (msg->data_len > 0)
1424 			memcpy(&(smi_msg->data[2]), msg->data, msg->data_len);
1425 		smi_msg->data_size = msg->data_len + 2;
1426 		spin_lock_irqsave(&intf->counter_lock, flags);
1427 		intf->sent_local_commands++;
1428 		spin_unlock_irqrestore(&intf->counter_lock, flags);
1429 	} else if ((addr->addr_type == IPMI_IPMB_ADDR_TYPE)
1430 		   || (addr->addr_type == IPMI_IPMB_BROADCAST_ADDR_TYPE))
1431 	{
1432 		struct ipmi_ipmb_addr *ipmb_addr;
1433 		unsigned char         ipmb_seq;
1434 		long                  seqid;
1435 		int                   broadcast = 0;
1436 
1437 		if (addr->channel >= IPMI_MAX_CHANNELS) {
1438 		        spin_lock_irqsave(&intf->counter_lock, flags);
1439 			intf->sent_invalid_commands++;
1440 			spin_unlock_irqrestore(&intf->counter_lock, flags);
1441 			rv = -EINVAL;
1442 			goto out_err;
1443 		}
1444 
1445 		if (intf->channels[addr->channel].medium
1446 		    != IPMI_CHANNEL_MEDIUM_IPMB)
1447 		{
1448 			spin_lock_irqsave(&intf->counter_lock, flags);
1449 			intf->sent_invalid_commands++;
1450 			spin_unlock_irqrestore(&intf->counter_lock, flags);
1451 			rv = -EINVAL;
1452 			goto out_err;
1453 		}
1454 
1455 		if (retries < 0) {
1456 		    if (addr->addr_type == IPMI_IPMB_BROADCAST_ADDR_TYPE)
1457 			retries = 0; /* Don't retry broadcasts. */
1458 		    else
1459 			retries = 4;
1460 		}
1461 		if (addr->addr_type == IPMI_IPMB_BROADCAST_ADDR_TYPE) {
1462 		    /* Broadcasts add a zero at the beginning of the
1463 		       message, but otherwise is the same as an IPMB
1464 		       address. */
1465 		    addr->addr_type = IPMI_IPMB_ADDR_TYPE;
1466 		    broadcast = 1;
1467 		}
1468 
1469 
1470 		/* Default to 1 second retries. */
1471 		if (retry_time_ms == 0)
1472 		    retry_time_ms = 1000;
1473 
1474 		/* 9 for the header and 1 for the checksum, plus
1475                    possibly one for the broadcast. */
1476 		if ((msg->data_len + 10 + broadcast) > IPMI_MAX_MSG_LENGTH) {
1477 			spin_lock_irqsave(&intf->counter_lock, flags);
1478 			intf->sent_invalid_commands++;
1479 			spin_unlock_irqrestore(&intf->counter_lock, flags);
1480 			rv = -EMSGSIZE;
1481 			goto out_err;
1482 		}
1483 
1484 		ipmb_addr = (struct ipmi_ipmb_addr *) addr;
1485 		if (ipmb_addr->lun > 3) {
1486 			spin_lock_irqsave(&intf->counter_lock, flags);
1487 			intf->sent_invalid_commands++;
1488 			spin_unlock_irqrestore(&intf->counter_lock, flags);
1489 			rv = -EINVAL;
1490 			goto out_err;
1491 		}
1492 
1493 		memcpy(&recv_msg->addr, ipmb_addr, sizeof(*ipmb_addr));
1494 
1495 		if (recv_msg->msg.netfn & 0x1) {
1496 			/* It's a response, so use the user's sequence
1497                            from msgid. */
1498 			spin_lock_irqsave(&intf->counter_lock, flags);
1499 			intf->sent_ipmb_responses++;
1500 			spin_unlock_irqrestore(&intf->counter_lock, flags);
1501 			format_ipmb_msg(smi_msg, msg, ipmb_addr, msgid,
1502 					msgid, broadcast,
1503 					source_address, source_lun);
1504 
1505 			/* Save the receive message so we can use it
1506 			   to deliver the response. */
1507 			smi_msg->user_data = recv_msg;
1508 		} else {
1509 			/* It's a command, so get a sequence for it. */
1510 
1511 			spin_lock_irqsave(&(intf->seq_lock), flags);
1512 
1513 			spin_lock(&intf->counter_lock);
1514 			intf->sent_ipmb_commands++;
1515 			spin_unlock(&intf->counter_lock);
1516 
1517 			/* Create a sequence number with a 1 second
1518                            timeout and 4 retries. */
1519 			rv = intf_next_seq(intf,
1520 					   recv_msg,
1521 					   retry_time_ms,
1522 					   retries,
1523 					   broadcast,
1524 					   &ipmb_seq,
1525 					   &seqid);
1526 			if (rv) {
1527 				/* We have used up all the sequence numbers,
1528 				   probably, so abort. */
1529 				spin_unlock_irqrestore(&(intf->seq_lock),
1530 						       flags);
1531 				goto out_err;
1532 			}
1533 
1534 			/* Store the sequence number in the message,
1535                            so that when the send message response
1536                            comes back we can start the timer. */
1537 			format_ipmb_msg(smi_msg, msg, ipmb_addr,
1538 					STORE_SEQ_IN_MSGID(ipmb_seq, seqid),
1539 					ipmb_seq, broadcast,
1540 					source_address, source_lun);
1541 
1542 			/* Copy the message into the recv message data, so we
1543 			   can retransmit it later if necessary. */
1544 			memcpy(recv_msg->msg_data, smi_msg->data,
1545 			       smi_msg->data_size);
1546 			recv_msg->msg.data = recv_msg->msg_data;
1547 			recv_msg->msg.data_len = smi_msg->data_size;
1548 
1549 			/* We don't unlock until here, because we need
1550                            to copy the completed message into the
1551                            recv_msg before we release the lock.
1552                            Otherwise, race conditions may bite us.  I
1553                            know that's pretty paranoid, but I prefer
1554                            to be correct. */
1555 			spin_unlock_irqrestore(&(intf->seq_lock), flags);
1556 		}
1557 	} else if (addr->addr_type == IPMI_LAN_ADDR_TYPE) {
1558 		struct ipmi_lan_addr  *lan_addr;
1559 		unsigned char         ipmb_seq;
1560 		long                  seqid;
1561 
1562 		if (addr->channel >= IPMI_MAX_CHANNELS) {
1563 			spin_lock_irqsave(&intf->counter_lock, flags);
1564 			intf->sent_invalid_commands++;
1565 			spin_unlock_irqrestore(&intf->counter_lock, flags);
1566 			rv = -EINVAL;
1567 			goto out_err;
1568 		}
1569 
1570 		if ((intf->channels[addr->channel].medium
1571 		    != IPMI_CHANNEL_MEDIUM_8023LAN)
1572 		    && (intf->channels[addr->channel].medium
1573 			!= IPMI_CHANNEL_MEDIUM_ASYNC))
1574 		{
1575 			spin_lock_irqsave(&intf->counter_lock, flags);
1576 			intf->sent_invalid_commands++;
1577 			spin_unlock_irqrestore(&intf->counter_lock, flags);
1578 			rv = -EINVAL;
1579 			goto out_err;
1580 		}
1581 
1582 		retries = 4;
1583 
1584 		/* Default to 1 second retries. */
1585 		if (retry_time_ms == 0)
1586 		    retry_time_ms = 1000;
1587 
1588 		/* 11 for the header and 1 for the checksum. */
1589 		if ((msg->data_len + 12) > IPMI_MAX_MSG_LENGTH) {
1590 			spin_lock_irqsave(&intf->counter_lock, flags);
1591 			intf->sent_invalid_commands++;
1592 			spin_unlock_irqrestore(&intf->counter_lock, flags);
1593 			rv = -EMSGSIZE;
1594 			goto out_err;
1595 		}
1596 
1597 		lan_addr = (struct ipmi_lan_addr *) addr;
1598 		if (lan_addr->lun > 3) {
1599 			spin_lock_irqsave(&intf->counter_lock, flags);
1600 			intf->sent_invalid_commands++;
1601 			spin_unlock_irqrestore(&intf->counter_lock, flags);
1602 			rv = -EINVAL;
1603 			goto out_err;
1604 		}
1605 
1606 		memcpy(&recv_msg->addr, lan_addr, sizeof(*lan_addr));
1607 
1608 		if (recv_msg->msg.netfn & 0x1) {
1609 			/* It's a response, so use the user's sequence
1610                            from msgid. */
1611 			spin_lock_irqsave(&intf->counter_lock, flags);
1612 			intf->sent_lan_responses++;
1613 			spin_unlock_irqrestore(&intf->counter_lock, flags);
1614 			format_lan_msg(smi_msg, msg, lan_addr, msgid,
1615 				       msgid, source_lun);
1616 
1617 			/* Save the receive message so we can use it
1618 			   to deliver the response. */
1619 			smi_msg->user_data = recv_msg;
1620 		} else {
1621 			/* It's a command, so get a sequence for it. */
1622 
1623 			spin_lock_irqsave(&(intf->seq_lock), flags);
1624 
1625 			spin_lock(&intf->counter_lock);
1626 			intf->sent_lan_commands++;
1627 			spin_unlock(&intf->counter_lock);
1628 
1629 			/* Create a sequence number with a 1 second
1630                            timeout and 4 retries. */
1631 			rv = intf_next_seq(intf,
1632 					   recv_msg,
1633 					   retry_time_ms,
1634 					   retries,
1635 					   0,
1636 					   &ipmb_seq,
1637 					   &seqid);
1638 			if (rv) {
1639 				/* We have used up all the sequence numbers,
1640 				   probably, so abort. */
1641 				spin_unlock_irqrestore(&(intf->seq_lock),
1642 						       flags);
1643 				goto out_err;
1644 			}
1645 
1646 			/* Store the sequence number in the message,
1647                            so that when the send message response
1648                            comes back we can start the timer. */
1649 			format_lan_msg(smi_msg, msg, lan_addr,
1650 				       STORE_SEQ_IN_MSGID(ipmb_seq, seqid),
1651 				       ipmb_seq, source_lun);
1652 
1653 			/* Copy the message into the recv message data, so we
1654 			   can retransmit it later if necessary. */
1655 			memcpy(recv_msg->msg_data, smi_msg->data,
1656 			       smi_msg->data_size);
1657 			recv_msg->msg.data = recv_msg->msg_data;
1658 			recv_msg->msg.data_len = smi_msg->data_size;
1659 
1660 			/* We don't unlock until here, because we need
1661                            to copy the completed message into the
1662                            recv_msg before we release the lock.
1663                            Otherwise, race conditions may bite us.  I
1664                            know that's pretty paranoid, but I prefer
1665                            to be correct. */
1666 			spin_unlock_irqrestore(&(intf->seq_lock), flags);
1667 		}
1668 	} else {
1669 	    /* Unknown address type. */
1670 		spin_lock_irqsave(&intf->counter_lock, flags);
1671 		intf->sent_invalid_commands++;
1672 		spin_unlock_irqrestore(&intf->counter_lock, flags);
1673 		rv = -EINVAL;
1674 		goto out_err;
1675 	}
1676 
1677 #ifdef DEBUG_MSGING
1678 	{
1679 		int m;
1680 		for (m = 0; m < smi_msg->data_size; m++)
1681 			printk(" %2.2x", smi_msg->data[m]);
1682 		printk("\n");
1683 	}
1684 #endif
1685 
1686 	handlers->sender(intf->send_info, smi_msg, priority);
1687 	rcu_read_unlock();
1688 
1689 	return 0;
1690 
1691  out_err:
1692 	rcu_read_unlock();
1693 	ipmi_free_smi_msg(smi_msg);
1694 	ipmi_free_recv_msg(recv_msg);
1695 	return rv;
1696 }
1697 
1698 static int check_addr(ipmi_smi_t       intf,
1699 		      struct ipmi_addr *addr,
1700 		      unsigned char    *saddr,
1701 		      unsigned char    *lun)
1702 {
1703 	if (addr->channel >= IPMI_MAX_CHANNELS)
1704 		return -EINVAL;
1705 	*lun = intf->channels[addr->channel].lun;
1706 	*saddr = intf->channels[addr->channel].address;
1707 	return 0;
1708 }
1709 
1710 int ipmi_request_settime(ipmi_user_t      user,
1711 			 struct ipmi_addr *addr,
1712 			 long             msgid,
1713 			 struct kernel_ipmi_msg  *msg,
1714 			 void             *user_msg_data,
1715 			 int              priority,
1716 			 int              retries,
1717 			 unsigned int     retry_time_ms)
1718 {
1719 	unsigned char saddr, lun;
1720 	int           rv;
1721 
1722 	if (!user)
1723 		return -EINVAL;
1724 	rv = check_addr(user->intf, addr, &saddr, &lun);
1725 	if (rv)
1726 		return rv;
1727 	return i_ipmi_request(user,
1728 			      user->intf,
1729 			      addr,
1730 			      msgid,
1731 			      msg,
1732 			      user_msg_data,
1733 			      NULL, NULL,
1734 			      priority,
1735 			      saddr,
1736 			      lun,
1737 			      retries,
1738 			      retry_time_ms);
1739 }
1740 
1741 int ipmi_request_supply_msgs(ipmi_user_t          user,
1742 			     struct ipmi_addr     *addr,
1743 			     long                 msgid,
1744 			     struct kernel_ipmi_msg *msg,
1745 			     void                 *user_msg_data,
1746 			     void                 *supplied_smi,
1747 			     struct ipmi_recv_msg *supplied_recv,
1748 			     int                  priority)
1749 {
1750 	unsigned char saddr, lun;
1751 	int           rv;
1752 
1753 	if (!user)
1754 		return -EINVAL;
1755 	rv = check_addr(user->intf, addr, &saddr, &lun);
1756 	if (rv)
1757 		return rv;
1758 	return i_ipmi_request(user,
1759 			      user->intf,
1760 			      addr,
1761 			      msgid,
1762 			      msg,
1763 			      user_msg_data,
1764 			      supplied_smi,
1765 			      supplied_recv,
1766 			      priority,
1767 			      saddr,
1768 			      lun,
1769 			      -1, 0);
1770 }
1771 
1772 #ifdef CONFIG_PROC_FS
1773 static int ipmb_file_read_proc(char *page, char **start, off_t off,
1774 			       int count, int *eof, void *data)
1775 {
1776 	char       *out = (char *) page;
1777 	ipmi_smi_t intf = data;
1778 	int        i;
1779 	int        rv = 0;
1780 
1781 	for (i = 0; i < IPMI_MAX_CHANNELS; i++)
1782 		rv += sprintf(out+rv, "%x ", intf->channels[i].address);
1783 	out[rv-1] = '\n'; /* Replace the final space with a newline */
1784 	out[rv] = '\0';
1785 	rv++;
1786 	return rv;
1787 }
1788 
1789 static int version_file_read_proc(char *page, char **start, off_t off,
1790 				  int count, int *eof, void *data)
1791 {
1792 	char       *out = (char *) page;
1793 	ipmi_smi_t intf = data;
1794 
1795 	return sprintf(out, "%d.%d\n",
1796 		       ipmi_version_major(&intf->bmc->id),
1797 		       ipmi_version_minor(&intf->bmc->id));
1798 }
1799 
1800 static int stat_file_read_proc(char *page, char **start, off_t off,
1801 			       int count, int *eof, void *data)
1802 {
1803 	char       *out = (char *) page;
1804 	ipmi_smi_t intf = data;
1805 
1806 	out += sprintf(out, "sent_invalid_commands:       %d\n",
1807 		       intf->sent_invalid_commands);
1808 	out += sprintf(out, "sent_local_commands:         %d\n",
1809 		       intf->sent_local_commands);
1810 	out += sprintf(out, "handled_local_responses:     %d\n",
1811 		       intf->handled_local_responses);
1812 	out += sprintf(out, "unhandled_local_responses:   %d\n",
1813 		       intf->unhandled_local_responses);
1814 	out += sprintf(out, "sent_ipmb_commands:          %d\n",
1815 		       intf->sent_ipmb_commands);
1816 	out += sprintf(out, "sent_ipmb_command_errs:      %d\n",
1817 		       intf->sent_ipmb_command_errs);
1818 	out += sprintf(out, "retransmitted_ipmb_commands: %d\n",
1819 		       intf->retransmitted_ipmb_commands);
1820 	out += sprintf(out, "timed_out_ipmb_commands:     %d\n",
1821 		       intf->timed_out_ipmb_commands);
1822 	out += sprintf(out, "timed_out_ipmb_broadcasts:   %d\n",
1823 		       intf->timed_out_ipmb_broadcasts);
1824 	out += sprintf(out, "sent_ipmb_responses:         %d\n",
1825 		       intf->sent_ipmb_responses);
1826 	out += sprintf(out, "handled_ipmb_responses:      %d\n",
1827 		       intf->handled_ipmb_responses);
1828 	out += sprintf(out, "invalid_ipmb_responses:      %d\n",
1829 		       intf->invalid_ipmb_responses);
1830 	out += sprintf(out, "unhandled_ipmb_responses:    %d\n",
1831 		       intf->unhandled_ipmb_responses);
1832 	out += sprintf(out, "sent_lan_commands:           %d\n",
1833 		       intf->sent_lan_commands);
1834 	out += sprintf(out, "sent_lan_command_errs:       %d\n",
1835 		       intf->sent_lan_command_errs);
1836 	out += sprintf(out, "retransmitted_lan_commands:  %d\n",
1837 		       intf->retransmitted_lan_commands);
1838 	out += sprintf(out, "timed_out_lan_commands:      %d\n",
1839 		       intf->timed_out_lan_commands);
1840 	out += sprintf(out, "sent_lan_responses:          %d\n",
1841 		       intf->sent_lan_responses);
1842 	out += sprintf(out, "handled_lan_responses:       %d\n",
1843 		       intf->handled_lan_responses);
1844 	out += sprintf(out, "invalid_lan_responses:       %d\n",
1845 		       intf->invalid_lan_responses);
1846 	out += sprintf(out, "unhandled_lan_responses:     %d\n",
1847 		       intf->unhandled_lan_responses);
1848 	out += sprintf(out, "handled_commands:            %d\n",
1849 		       intf->handled_commands);
1850 	out += sprintf(out, "invalid_commands:            %d\n",
1851 		       intf->invalid_commands);
1852 	out += sprintf(out, "unhandled_commands:          %d\n",
1853 		       intf->unhandled_commands);
1854 	out += sprintf(out, "invalid_events:              %d\n",
1855 		       intf->invalid_events);
1856 	out += sprintf(out, "events:                      %d\n",
1857 		       intf->events);
1858 
1859 	return (out - ((char *) page));
1860 }
1861 #endif /* CONFIG_PROC_FS */
1862 
1863 int ipmi_smi_add_proc_entry(ipmi_smi_t smi, char *name,
1864 			    read_proc_t *read_proc, write_proc_t *write_proc,
1865 			    void *data, struct module *owner)
1866 {
1867 	int                    rv = 0;
1868 #ifdef CONFIG_PROC_FS
1869 	struct proc_dir_entry  *file;
1870 	struct ipmi_proc_entry *entry;
1871 
1872 	/* Create a list element. */
1873 	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
1874 	if (!entry)
1875 		return -ENOMEM;
1876 	entry->name = kmalloc(strlen(name)+1, GFP_KERNEL);
1877 	if (!entry->name) {
1878 		kfree(entry);
1879 		return -ENOMEM;
1880 	}
1881 	strcpy(entry->name, name);
1882 
1883 	file = create_proc_entry(name, 0, smi->proc_dir);
1884 	if (!file) {
1885 		kfree(entry->name);
1886 		kfree(entry);
1887 		rv = -ENOMEM;
1888 	} else {
1889 		file->data = data;
1890 		file->read_proc = read_proc;
1891 		file->write_proc = write_proc;
1892 		file->owner = owner;
1893 
1894 		spin_lock(&smi->proc_entry_lock);
1895 		/* Stick it on the list. */
1896 		entry->next = smi->proc_entries;
1897 		smi->proc_entries = entry;
1898 		spin_unlock(&smi->proc_entry_lock);
1899 	}
1900 #endif /* CONFIG_PROC_FS */
1901 
1902 	return rv;
1903 }
1904 
1905 static int add_proc_entries(ipmi_smi_t smi, int num)
1906 {
1907 	int rv = 0;
1908 
1909 #ifdef CONFIG_PROC_FS
1910 	sprintf(smi->proc_dir_name, "%d", num);
1911 	smi->proc_dir = proc_mkdir(smi->proc_dir_name, proc_ipmi_root);
1912 	if (!smi->proc_dir)
1913 		rv = -ENOMEM;
1914 	else {
1915 		smi->proc_dir->owner = THIS_MODULE;
1916 	}
1917 
1918 	if (rv == 0)
1919 		rv = ipmi_smi_add_proc_entry(smi, "stats",
1920 					     stat_file_read_proc, NULL,
1921 					     smi, THIS_MODULE);
1922 
1923 	if (rv == 0)
1924 		rv = ipmi_smi_add_proc_entry(smi, "ipmb",
1925 					     ipmb_file_read_proc, NULL,
1926 					     smi, THIS_MODULE);
1927 
1928 	if (rv == 0)
1929 		rv = ipmi_smi_add_proc_entry(smi, "version",
1930 					     version_file_read_proc, NULL,
1931 					     smi, THIS_MODULE);
1932 #endif /* CONFIG_PROC_FS */
1933 
1934 	return rv;
1935 }
1936 
1937 static void remove_proc_entries(ipmi_smi_t smi)
1938 {
1939 #ifdef CONFIG_PROC_FS
1940 	struct ipmi_proc_entry *entry;
1941 
1942 	spin_lock(&smi->proc_entry_lock);
1943 	while (smi->proc_entries) {
1944 		entry = smi->proc_entries;
1945 		smi->proc_entries = entry->next;
1946 
1947 		remove_proc_entry(entry->name, smi->proc_dir);
1948 		kfree(entry->name);
1949 		kfree(entry);
1950 	}
1951 	spin_unlock(&smi->proc_entry_lock);
1952 	remove_proc_entry(smi->proc_dir_name, proc_ipmi_root);
1953 #endif /* CONFIG_PROC_FS */
1954 }
1955 
1956 static int __find_bmc_guid(struct device *dev, void *data)
1957 {
1958 	unsigned char *id = data;
1959 	struct bmc_device *bmc = dev_get_drvdata(dev);
1960 	return memcmp(bmc->guid, id, 16) == 0;
1961 }
1962 
1963 static struct bmc_device *ipmi_find_bmc_guid(struct device_driver *drv,
1964 					     unsigned char *guid)
1965 {
1966 	struct device *dev;
1967 
1968 	dev = driver_find_device(drv, NULL, guid, __find_bmc_guid);
1969 	if (dev)
1970 		return dev_get_drvdata(dev);
1971 	else
1972 		return NULL;
1973 }
1974 
1975 struct prod_dev_id {
1976 	unsigned int  product_id;
1977 	unsigned char device_id;
1978 };
1979 
1980 static int __find_bmc_prod_dev_id(struct device *dev, void *data)
1981 {
1982 	struct prod_dev_id *id = data;
1983 	struct bmc_device *bmc = dev_get_drvdata(dev);
1984 
1985 	return (bmc->id.product_id == id->product_id
1986 		&& bmc->id.device_id == id->device_id);
1987 }
1988 
1989 static struct bmc_device *ipmi_find_bmc_prod_dev_id(
1990 	struct device_driver *drv,
1991 	unsigned int product_id, unsigned char device_id)
1992 {
1993 	struct prod_dev_id id = {
1994 		.product_id = product_id,
1995 		.device_id = device_id,
1996 	};
1997 	struct device *dev;
1998 
1999 	dev = driver_find_device(drv, NULL, &id, __find_bmc_prod_dev_id);
2000 	if (dev)
2001 		return dev_get_drvdata(dev);
2002 	else
2003 		return NULL;
2004 }
2005 
2006 static ssize_t device_id_show(struct device *dev,
2007 			      struct device_attribute *attr,
2008 			      char *buf)
2009 {
2010 	struct bmc_device *bmc = dev_get_drvdata(dev);
2011 
2012 	return snprintf(buf, 10, "%u\n", bmc->id.device_id);
2013 }
2014 
2015 static ssize_t provides_dev_sdrs_show(struct device *dev,
2016 				      struct device_attribute *attr,
2017 				      char *buf)
2018 {
2019 	struct bmc_device *bmc = dev_get_drvdata(dev);
2020 
2021 	return snprintf(buf, 10, "%u\n",
2022 			(bmc->id.device_revision & 0x80) >> 7);
2023 }
2024 
2025 static ssize_t revision_show(struct device *dev, struct device_attribute *attr,
2026 			     char *buf)
2027 {
2028 	struct bmc_device *bmc = dev_get_drvdata(dev);
2029 
2030 	return snprintf(buf, 20, "%u\n",
2031 			bmc->id.device_revision & 0x0F);
2032 }
2033 
2034 static ssize_t firmware_rev_show(struct device *dev,
2035 				 struct device_attribute *attr,
2036 				 char *buf)
2037 {
2038 	struct bmc_device *bmc = dev_get_drvdata(dev);
2039 
2040 	return snprintf(buf, 20, "%u.%x\n", bmc->id.firmware_revision_1,
2041 			bmc->id.firmware_revision_2);
2042 }
2043 
2044 static ssize_t ipmi_version_show(struct device *dev,
2045 				 struct device_attribute *attr,
2046 				 char *buf)
2047 {
2048 	struct bmc_device *bmc = dev_get_drvdata(dev);
2049 
2050 	return snprintf(buf, 20, "%u.%u\n",
2051 			ipmi_version_major(&bmc->id),
2052 			ipmi_version_minor(&bmc->id));
2053 }
2054 
2055 static ssize_t add_dev_support_show(struct device *dev,
2056 				    struct device_attribute *attr,
2057 				    char *buf)
2058 {
2059 	struct bmc_device *bmc = dev_get_drvdata(dev);
2060 
2061 	return snprintf(buf, 10, "0x%02x\n",
2062 			bmc->id.additional_device_support);
2063 }
2064 
2065 static ssize_t manufacturer_id_show(struct device *dev,
2066 				    struct device_attribute *attr,
2067 				    char *buf)
2068 {
2069 	struct bmc_device *bmc = dev_get_drvdata(dev);
2070 
2071 	return snprintf(buf, 20, "0x%6.6x\n", bmc->id.manufacturer_id);
2072 }
2073 
2074 static ssize_t product_id_show(struct device *dev,
2075 			       struct device_attribute *attr,
2076 			       char *buf)
2077 {
2078 	struct bmc_device *bmc = dev_get_drvdata(dev);
2079 
2080 	return snprintf(buf, 10, "0x%4.4x\n", bmc->id.product_id);
2081 }
2082 
2083 static ssize_t aux_firmware_rev_show(struct device *dev,
2084 				     struct device_attribute *attr,
2085 				     char *buf)
2086 {
2087 	struct bmc_device *bmc = dev_get_drvdata(dev);
2088 
2089 	return snprintf(buf, 21, "0x%02x 0x%02x 0x%02x 0x%02x\n",
2090 			bmc->id.aux_firmware_revision[3],
2091 			bmc->id.aux_firmware_revision[2],
2092 			bmc->id.aux_firmware_revision[1],
2093 			bmc->id.aux_firmware_revision[0]);
2094 }
2095 
2096 static ssize_t guid_show(struct device *dev, struct device_attribute *attr,
2097 			 char *buf)
2098 {
2099 	struct bmc_device *bmc = dev_get_drvdata(dev);
2100 
2101 	return snprintf(buf, 100, "%Lx%Lx\n",
2102 			(long long) bmc->guid[0],
2103 			(long long) bmc->guid[8]);
2104 }
2105 
2106 static void remove_files(struct bmc_device *bmc)
2107 {
2108 	if (!bmc->dev)
2109 		return;
2110 
2111 	device_remove_file(&bmc->dev->dev,
2112 			   &bmc->device_id_attr);
2113 	device_remove_file(&bmc->dev->dev,
2114 			   &bmc->provides_dev_sdrs_attr);
2115 	device_remove_file(&bmc->dev->dev,
2116 			   &bmc->revision_attr);
2117 	device_remove_file(&bmc->dev->dev,
2118 			   &bmc->firmware_rev_attr);
2119 	device_remove_file(&bmc->dev->dev,
2120 			   &bmc->version_attr);
2121 	device_remove_file(&bmc->dev->dev,
2122 			   &bmc->add_dev_support_attr);
2123 	device_remove_file(&bmc->dev->dev,
2124 			   &bmc->manufacturer_id_attr);
2125 	device_remove_file(&bmc->dev->dev,
2126 			   &bmc->product_id_attr);
2127 
2128 	if (bmc->id.aux_firmware_revision_set)
2129 		device_remove_file(&bmc->dev->dev,
2130 				   &bmc->aux_firmware_rev_attr);
2131 	if (bmc->guid_set)
2132 		device_remove_file(&bmc->dev->dev,
2133 				   &bmc->guid_attr);
2134 }
2135 
2136 static void
2137 cleanup_bmc_device(struct kref *ref)
2138 {
2139 	struct bmc_device *bmc;
2140 
2141 	bmc = container_of(ref, struct bmc_device, refcount);
2142 
2143 	remove_files(bmc);
2144 	platform_device_unregister(bmc->dev);
2145 	kfree(bmc);
2146 }
2147 
2148 static void ipmi_bmc_unregister(ipmi_smi_t intf)
2149 {
2150 	struct bmc_device *bmc = intf->bmc;
2151 
2152 	if (intf->sysfs_name) {
2153 		sysfs_remove_link(&intf->si_dev->kobj, intf->sysfs_name);
2154 		kfree(intf->sysfs_name);
2155 		intf->sysfs_name = NULL;
2156 	}
2157 	if (intf->my_dev_name) {
2158 		sysfs_remove_link(&bmc->dev->dev.kobj, intf->my_dev_name);
2159 		kfree(intf->my_dev_name);
2160 		intf->my_dev_name = NULL;
2161 	}
2162 
2163 	mutex_lock(&ipmidriver_mutex);
2164 	kref_put(&bmc->refcount, cleanup_bmc_device);
2165 	intf->bmc = NULL;
2166 	mutex_unlock(&ipmidriver_mutex);
2167 }
2168 
2169 static int create_files(struct bmc_device *bmc)
2170 {
2171 	int err;
2172 
2173 	bmc->device_id_attr.attr.name = "device_id";
2174 	bmc->device_id_attr.attr.owner = THIS_MODULE;
2175 	bmc->device_id_attr.attr.mode = S_IRUGO;
2176 	bmc->device_id_attr.show = device_id_show;
2177 
2178 	bmc->provides_dev_sdrs_attr.attr.name = "provides_device_sdrs";
2179 	bmc->provides_dev_sdrs_attr.attr.owner = THIS_MODULE;
2180 	bmc->provides_dev_sdrs_attr.attr.mode = S_IRUGO;
2181 	bmc->provides_dev_sdrs_attr.show = provides_dev_sdrs_show;
2182 
2183 	bmc->revision_attr.attr.name = "revision";
2184 	bmc->revision_attr.attr.owner = THIS_MODULE;
2185 	bmc->revision_attr.attr.mode = S_IRUGO;
2186 	bmc->revision_attr.show = revision_show;
2187 
2188 	bmc->firmware_rev_attr.attr.name = "firmware_revision";
2189 	bmc->firmware_rev_attr.attr.owner = THIS_MODULE;
2190 	bmc->firmware_rev_attr.attr.mode = S_IRUGO;
2191 	bmc->firmware_rev_attr.show = firmware_rev_show;
2192 
2193 	bmc->version_attr.attr.name = "ipmi_version";
2194 	bmc->version_attr.attr.owner = THIS_MODULE;
2195 	bmc->version_attr.attr.mode = S_IRUGO;
2196 	bmc->version_attr.show = ipmi_version_show;
2197 
2198 	bmc->add_dev_support_attr.attr.name = "additional_device_support";
2199 	bmc->add_dev_support_attr.attr.owner = THIS_MODULE;
2200 	bmc->add_dev_support_attr.attr.mode = S_IRUGO;
2201 	bmc->add_dev_support_attr.show = add_dev_support_show;
2202 
2203 	bmc->manufacturer_id_attr.attr.name = "manufacturer_id";
2204 	bmc->manufacturer_id_attr.attr.owner = THIS_MODULE;
2205 	bmc->manufacturer_id_attr.attr.mode = S_IRUGO;
2206 	bmc->manufacturer_id_attr.show = manufacturer_id_show;
2207 
2208 	bmc->product_id_attr.attr.name = "product_id";
2209 	bmc->product_id_attr.attr.owner = THIS_MODULE;
2210 	bmc->product_id_attr.attr.mode = S_IRUGO;
2211 	bmc->product_id_attr.show = product_id_show;
2212 
2213 	bmc->guid_attr.attr.name = "guid";
2214 	bmc->guid_attr.attr.owner = THIS_MODULE;
2215 	bmc->guid_attr.attr.mode = S_IRUGO;
2216 	bmc->guid_attr.show = guid_show;
2217 
2218 	bmc->aux_firmware_rev_attr.attr.name = "aux_firmware_revision";
2219 	bmc->aux_firmware_rev_attr.attr.owner = THIS_MODULE;
2220 	bmc->aux_firmware_rev_attr.attr.mode = S_IRUGO;
2221 	bmc->aux_firmware_rev_attr.show = aux_firmware_rev_show;
2222 
2223 	err = device_create_file(&bmc->dev->dev,
2224 			   &bmc->device_id_attr);
2225 	if (err) goto out;
2226 	err = device_create_file(&bmc->dev->dev,
2227 			   &bmc->provides_dev_sdrs_attr);
2228 	if (err) goto out_devid;
2229 	err = device_create_file(&bmc->dev->dev,
2230 			   &bmc->revision_attr);
2231 	if (err) goto out_sdrs;
2232 	err = device_create_file(&bmc->dev->dev,
2233 			   &bmc->firmware_rev_attr);
2234 	if (err) goto out_rev;
2235 	err = device_create_file(&bmc->dev->dev,
2236 			   &bmc->version_attr);
2237 	if (err) goto out_firm;
2238 	err = device_create_file(&bmc->dev->dev,
2239 			   &bmc->add_dev_support_attr);
2240 	if (err) goto out_version;
2241 	err = device_create_file(&bmc->dev->dev,
2242 			   &bmc->manufacturer_id_attr);
2243 	if (err) goto out_add_dev;
2244 	err = device_create_file(&bmc->dev->dev,
2245 			   &bmc->product_id_attr);
2246 	if (err) goto out_manu;
2247 	if (bmc->id.aux_firmware_revision_set) {
2248 		err = device_create_file(&bmc->dev->dev,
2249 				   &bmc->aux_firmware_rev_attr);
2250 		if (err) goto out_prod_id;
2251 	}
2252 	if (bmc->guid_set) {
2253 		err = device_create_file(&bmc->dev->dev,
2254 				   &bmc->guid_attr);
2255 		if (err) goto out_aux_firm;
2256 	}
2257 
2258 	return 0;
2259 
2260 out_aux_firm:
2261 	if (bmc->id.aux_firmware_revision_set)
2262 		device_remove_file(&bmc->dev->dev,
2263 				   &bmc->aux_firmware_rev_attr);
2264 out_prod_id:
2265 	device_remove_file(&bmc->dev->dev,
2266 			   &bmc->product_id_attr);
2267 out_manu:
2268 	device_remove_file(&bmc->dev->dev,
2269 			   &bmc->manufacturer_id_attr);
2270 out_add_dev:
2271 	device_remove_file(&bmc->dev->dev,
2272 			   &bmc->add_dev_support_attr);
2273 out_version:
2274 	device_remove_file(&bmc->dev->dev,
2275 			   &bmc->version_attr);
2276 out_firm:
2277 	device_remove_file(&bmc->dev->dev,
2278 			   &bmc->firmware_rev_attr);
2279 out_rev:
2280 	device_remove_file(&bmc->dev->dev,
2281 			   &bmc->revision_attr);
2282 out_sdrs:
2283 	device_remove_file(&bmc->dev->dev,
2284 			   &bmc->provides_dev_sdrs_attr);
2285 out_devid:
2286 	device_remove_file(&bmc->dev->dev,
2287 			   &bmc->device_id_attr);
2288 out:
2289 	return err;
2290 }
2291 
2292 static int ipmi_bmc_register(ipmi_smi_t intf, int ifnum,
2293 			     const char *sysfs_name)
2294 {
2295 	int               rv;
2296 	struct bmc_device *bmc = intf->bmc;
2297 	struct bmc_device *old_bmc;
2298 	int               size;
2299 	char              dummy[1];
2300 
2301 	mutex_lock(&ipmidriver_mutex);
2302 
2303 	/*
2304 	 * Try to find if there is an bmc_device struct
2305 	 * representing the interfaced BMC already
2306 	 */
2307 	if (bmc->guid_set)
2308 		old_bmc = ipmi_find_bmc_guid(&ipmidriver, bmc->guid);
2309 	else
2310 		old_bmc = ipmi_find_bmc_prod_dev_id(&ipmidriver,
2311 						    bmc->id.product_id,
2312 						    bmc->id.device_id);
2313 
2314 	/*
2315 	 * If there is already an bmc_device, free the new one,
2316 	 * otherwise register the new BMC device
2317 	 */
2318 	if (old_bmc) {
2319 		kfree(bmc);
2320 		intf->bmc = old_bmc;
2321 		bmc = old_bmc;
2322 
2323 		kref_get(&bmc->refcount);
2324 		mutex_unlock(&ipmidriver_mutex);
2325 
2326 		printk(KERN_INFO
2327 		       "ipmi: interfacing existing BMC (man_id: 0x%6.6x,"
2328 		       " prod_id: 0x%4.4x, dev_id: 0x%2.2x)\n",
2329 		       bmc->id.manufacturer_id,
2330 		       bmc->id.product_id,
2331 		       bmc->id.device_id);
2332 	} else {
2333 		char name[14];
2334 		unsigned char orig_dev_id = bmc->id.device_id;
2335 		int warn_printed = 0;
2336 
2337 		snprintf(name, sizeof(name),
2338 			 "ipmi_bmc.%4.4x", bmc->id.product_id);
2339 
2340 		while (ipmi_find_bmc_prod_dev_id(&ipmidriver,
2341 						 bmc->id.product_id,
2342 						 bmc->id.device_id)) {
2343 			if (!warn_printed) {
2344 				printk(KERN_WARNING PFX
2345 				       "This machine has two different BMCs"
2346 				       " with the same product id and device"
2347 				       " id.  This is an error in the"
2348 				       " firmware, but incrementing the"
2349 				       " device id to work around the problem."
2350 				       " Prod ID = 0x%x, Dev ID = 0x%x\n",
2351 				       bmc->id.product_id, bmc->id.device_id);
2352 				warn_printed = 1;
2353 			}
2354 			bmc->id.device_id++; /* Wraps at 255 */
2355 			if (bmc->id.device_id == orig_dev_id) {
2356 				printk(KERN_ERR PFX
2357 				       "Out of device ids!\n");
2358 				break;
2359 			}
2360 		}
2361 
2362 		bmc->dev = platform_device_alloc(name, bmc->id.device_id);
2363 		if (!bmc->dev) {
2364 			mutex_unlock(&ipmidriver_mutex);
2365 			printk(KERN_ERR
2366 			       "ipmi_msghandler:"
2367 			       " Unable to allocate platform device\n");
2368 			return -ENOMEM;
2369 		}
2370 		bmc->dev->dev.driver = &ipmidriver;
2371 		dev_set_drvdata(&bmc->dev->dev, bmc);
2372 		kref_init(&bmc->refcount);
2373 
2374 		rv = platform_device_add(bmc->dev);
2375 		mutex_unlock(&ipmidriver_mutex);
2376 		if (rv) {
2377 			platform_device_put(bmc->dev);
2378 			bmc->dev = NULL;
2379 			printk(KERN_ERR
2380 			       "ipmi_msghandler:"
2381 			       " Unable to register bmc device: %d\n",
2382 			       rv);
2383 			/* Don't go to out_err, you can only do that if
2384 			   the device is registered already. */
2385 			return rv;
2386 		}
2387 
2388 		rv = create_files(bmc);
2389 		if (rv) {
2390 			mutex_lock(&ipmidriver_mutex);
2391 			platform_device_unregister(bmc->dev);
2392 			mutex_unlock(&ipmidriver_mutex);
2393 
2394 			return rv;
2395 		}
2396 
2397 		printk(KERN_INFO
2398 		       "ipmi: Found new BMC (man_id: 0x%6.6x, "
2399 		       " prod_id: 0x%4.4x, dev_id: 0x%2.2x)\n",
2400 		       bmc->id.manufacturer_id,
2401 		       bmc->id.product_id,
2402 		       bmc->id.device_id);
2403 	}
2404 
2405 	/*
2406 	 * create symlink from system interface device to bmc device
2407 	 * and back.
2408 	 */
2409 	intf->sysfs_name = kstrdup(sysfs_name, GFP_KERNEL);
2410 	if (!intf->sysfs_name) {
2411 		rv = -ENOMEM;
2412 		printk(KERN_ERR
2413 		       "ipmi_msghandler: allocate link to BMC: %d\n",
2414 		       rv);
2415 		goto out_err;
2416 	}
2417 
2418 	rv = sysfs_create_link(&intf->si_dev->kobj,
2419 			       &bmc->dev->dev.kobj, intf->sysfs_name);
2420 	if (rv) {
2421 		kfree(intf->sysfs_name);
2422 		intf->sysfs_name = NULL;
2423 		printk(KERN_ERR
2424 		       "ipmi_msghandler: Unable to create bmc symlink: %d\n",
2425 		       rv);
2426 		goto out_err;
2427 	}
2428 
2429 	size = snprintf(dummy, 0, "ipmi%d", ifnum);
2430 	intf->my_dev_name = kmalloc(size+1, GFP_KERNEL);
2431 	if (!intf->my_dev_name) {
2432 		kfree(intf->sysfs_name);
2433 		intf->sysfs_name = NULL;
2434 		rv = -ENOMEM;
2435 		printk(KERN_ERR
2436 		       "ipmi_msghandler: allocate link from BMC: %d\n",
2437 		       rv);
2438 		goto out_err;
2439 	}
2440 	snprintf(intf->my_dev_name, size+1, "ipmi%d", ifnum);
2441 
2442 	rv = sysfs_create_link(&bmc->dev->dev.kobj, &intf->si_dev->kobj,
2443 			       intf->my_dev_name);
2444 	if (rv) {
2445 		kfree(intf->sysfs_name);
2446 		intf->sysfs_name = NULL;
2447 		kfree(intf->my_dev_name);
2448 		intf->my_dev_name = NULL;
2449 		printk(KERN_ERR
2450 		       "ipmi_msghandler:"
2451 		       " Unable to create symlink to bmc: %d\n",
2452 		       rv);
2453 		goto out_err;
2454 	}
2455 
2456 	return 0;
2457 
2458 out_err:
2459 	ipmi_bmc_unregister(intf);
2460 	return rv;
2461 }
2462 
2463 static int
2464 send_guid_cmd(ipmi_smi_t intf, int chan)
2465 {
2466 	struct kernel_ipmi_msg            msg;
2467 	struct ipmi_system_interface_addr si;
2468 
2469 	si.addr_type = IPMI_SYSTEM_INTERFACE_ADDR_TYPE;
2470 	si.channel = IPMI_BMC_CHANNEL;
2471 	si.lun = 0;
2472 
2473 	msg.netfn = IPMI_NETFN_APP_REQUEST;
2474 	msg.cmd = IPMI_GET_DEVICE_GUID_CMD;
2475 	msg.data = NULL;
2476 	msg.data_len = 0;
2477 	return i_ipmi_request(NULL,
2478 			      intf,
2479 			      (struct ipmi_addr *) &si,
2480 			      0,
2481 			      &msg,
2482 			      intf,
2483 			      NULL,
2484 			      NULL,
2485 			      0,
2486 			      intf->channels[0].address,
2487 			      intf->channels[0].lun,
2488 			      -1, 0);
2489 }
2490 
2491 static void
2492 guid_handler(ipmi_smi_t intf, struct ipmi_recv_msg *msg)
2493 {
2494 	if ((msg->addr.addr_type != IPMI_SYSTEM_INTERFACE_ADDR_TYPE)
2495 	    || (msg->msg.netfn != IPMI_NETFN_APP_RESPONSE)
2496 	    || (msg->msg.cmd != IPMI_GET_DEVICE_GUID_CMD))
2497 		/* Not for me */
2498 		return;
2499 
2500 	if (msg->msg.data[0] != 0) {
2501 		/* Error from getting the GUID, the BMC doesn't have one. */
2502 		intf->bmc->guid_set = 0;
2503 		goto out;
2504 	}
2505 
2506 	if (msg->msg.data_len < 17) {
2507 		intf->bmc->guid_set = 0;
2508 		printk(KERN_WARNING PFX
2509 		       "guid_handler: The GUID response from the BMC was too"
2510 		       " short, it was %d but should have been 17.  Assuming"
2511 		       " GUID is not available.\n",
2512 		       msg->msg.data_len);
2513 		goto out;
2514 	}
2515 
2516 	memcpy(intf->bmc->guid, msg->msg.data, 16);
2517 	intf->bmc->guid_set = 1;
2518  out:
2519 	wake_up(&intf->waitq);
2520 }
2521 
2522 static void
2523 get_guid(ipmi_smi_t intf)
2524 {
2525 	int rv;
2526 
2527 	intf->bmc->guid_set = 0x2;
2528 	intf->null_user_handler = guid_handler;
2529 	rv = send_guid_cmd(intf, 0);
2530 	if (rv)
2531 		/* Send failed, no GUID available. */
2532 		intf->bmc->guid_set = 0;
2533 	wait_event(intf->waitq, intf->bmc->guid_set != 2);
2534 	intf->null_user_handler = NULL;
2535 }
2536 
2537 static int
2538 send_channel_info_cmd(ipmi_smi_t intf, int chan)
2539 {
2540 	struct kernel_ipmi_msg            msg;
2541 	unsigned char                     data[1];
2542 	struct ipmi_system_interface_addr si;
2543 
2544 	si.addr_type = IPMI_SYSTEM_INTERFACE_ADDR_TYPE;
2545 	si.channel = IPMI_BMC_CHANNEL;
2546 	si.lun = 0;
2547 
2548 	msg.netfn = IPMI_NETFN_APP_REQUEST;
2549 	msg.cmd = IPMI_GET_CHANNEL_INFO_CMD;
2550 	msg.data = data;
2551 	msg.data_len = 1;
2552 	data[0] = chan;
2553 	return i_ipmi_request(NULL,
2554 			      intf,
2555 			      (struct ipmi_addr *) &si,
2556 			      0,
2557 			      &msg,
2558 			      intf,
2559 			      NULL,
2560 			      NULL,
2561 			      0,
2562 			      intf->channels[0].address,
2563 			      intf->channels[0].lun,
2564 			      -1, 0);
2565 }
2566 
2567 static void
2568 channel_handler(ipmi_smi_t intf, struct ipmi_recv_msg *msg)
2569 {
2570 	int rv = 0;
2571 	int chan;
2572 
2573 	if ((msg->addr.addr_type == IPMI_SYSTEM_INTERFACE_ADDR_TYPE)
2574 	    && (msg->msg.netfn == IPMI_NETFN_APP_RESPONSE)
2575 	    && (msg->msg.cmd == IPMI_GET_CHANNEL_INFO_CMD))
2576 	{
2577 		/* It's the one we want */
2578 		if (msg->msg.data[0] != 0) {
2579 			/* Got an error from the channel, just go on. */
2580 
2581 			if (msg->msg.data[0] == IPMI_INVALID_COMMAND_ERR) {
2582 				/* If the MC does not support this
2583 				   command, that is legal.  We just
2584 				   assume it has one IPMB at channel
2585 				   zero. */
2586 				intf->channels[0].medium
2587 					= IPMI_CHANNEL_MEDIUM_IPMB;
2588 				intf->channels[0].protocol
2589 					= IPMI_CHANNEL_PROTOCOL_IPMB;
2590 				rv = -ENOSYS;
2591 
2592 				intf->curr_channel = IPMI_MAX_CHANNELS;
2593 				wake_up(&intf->waitq);
2594 				goto out;
2595 			}
2596 			goto next_channel;
2597 		}
2598 		if (msg->msg.data_len < 4) {
2599 			/* Message not big enough, just go on. */
2600 			goto next_channel;
2601 		}
2602 		chan = intf->curr_channel;
2603 		intf->channels[chan].medium = msg->msg.data[2] & 0x7f;
2604 		intf->channels[chan].protocol = msg->msg.data[3] & 0x1f;
2605 
2606 	next_channel:
2607 		intf->curr_channel++;
2608 		if (intf->curr_channel >= IPMI_MAX_CHANNELS)
2609 			wake_up(&intf->waitq);
2610 		else
2611 			rv = send_channel_info_cmd(intf, intf->curr_channel);
2612 
2613 		if (rv) {
2614 			/* Got an error somehow, just give up. */
2615 			intf->curr_channel = IPMI_MAX_CHANNELS;
2616 			wake_up(&intf->waitq);
2617 
2618 			printk(KERN_WARNING PFX
2619 			       "Error sending channel information: %d\n",
2620 			       rv);
2621 		}
2622 	}
2623  out:
2624 	return;
2625 }
2626 
2627 int ipmi_register_smi(struct ipmi_smi_handlers *handlers,
2628 		      void		       *send_info,
2629 		      struct ipmi_device_id    *device_id,
2630 		      struct device            *si_dev,
2631 		      const char               *sysfs_name,
2632 		      unsigned char            slave_addr)
2633 {
2634 	int              i, j;
2635 	int              rv;
2636 	ipmi_smi_t       intf;
2637 	ipmi_smi_t       tintf;
2638 	struct list_head *link;
2639 
2640 	/* Make sure the driver is actually initialized, this handles
2641 	   problems with initialization order. */
2642 	if (!initialized) {
2643 		rv = ipmi_init_msghandler();
2644 		if (rv)
2645 			return rv;
2646 		/* The init code doesn't return an error if it was turned
2647 		   off, but it won't initialize.  Check that. */
2648 		if (!initialized)
2649 			return -ENODEV;
2650 	}
2651 
2652 	intf = kmalloc(sizeof(*intf), GFP_KERNEL);
2653 	if (!intf)
2654 		return -ENOMEM;
2655 	memset(intf, 0, sizeof(*intf));
2656 
2657 	intf->ipmi_version_major = ipmi_version_major(device_id);
2658 	intf->ipmi_version_minor = ipmi_version_minor(device_id);
2659 
2660 	intf->bmc = kzalloc(sizeof(*intf->bmc), GFP_KERNEL);
2661 	if (!intf->bmc) {
2662 		kfree(intf);
2663 		return -ENOMEM;
2664 	}
2665 	intf->intf_num = -1; /* Mark it invalid for now. */
2666 	kref_init(&intf->refcount);
2667 	intf->bmc->id = *device_id;
2668 	intf->si_dev = si_dev;
2669 	for (j = 0; j < IPMI_MAX_CHANNELS; j++) {
2670 		intf->channels[j].address = IPMI_BMC_SLAVE_ADDR;
2671 		intf->channels[j].lun = 2;
2672 	}
2673 	if (slave_addr != 0)
2674 		intf->channels[0].address = slave_addr;
2675 	INIT_LIST_HEAD(&intf->users);
2676 	intf->handlers = handlers;
2677 	intf->send_info = send_info;
2678 	spin_lock_init(&intf->seq_lock);
2679 	for (j = 0; j < IPMI_IPMB_NUM_SEQ; j++) {
2680 		intf->seq_table[j].inuse = 0;
2681 		intf->seq_table[j].seqid = 0;
2682 	}
2683 	intf->curr_seq = 0;
2684 #ifdef CONFIG_PROC_FS
2685 	spin_lock_init(&intf->proc_entry_lock);
2686 #endif
2687 	spin_lock_init(&intf->waiting_msgs_lock);
2688 	INIT_LIST_HEAD(&intf->waiting_msgs);
2689 	spin_lock_init(&intf->events_lock);
2690 	INIT_LIST_HEAD(&intf->waiting_events);
2691 	intf->waiting_events_count = 0;
2692 	mutex_init(&intf->cmd_rcvrs_mutex);
2693 	spin_lock_init(&intf->maintenance_mode_lock);
2694 	INIT_LIST_HEAD(&intf->cmd_rcvrs);
2695 	init_waitqueue_head(&intf->waitq);
2696 
2697 	spin_lock_init(&intf->counter_lock);
2698 	intf->proc_dir = NULL;
2699 
2700 	mutex_lock(&smi_watchers_mutex);
2701 	mutex_lock(&ipmi_interfaces_mutex);
2702 	/* Look for a hole in the numbers. */
2703 	i = 0;
2704 	link = &ipmi_interfaces;
2705 	list_for_each_entry_rcu(tintf, &ipmi_interfaces, link) {
2706 		if (tintf->intf_num != i) {
2707 			link = &tintf->link;
2708 			break;
2709 		}
2710 		i++;
2711 	}
2712 	/* Add the new interface in numeric order. */
2713 	if (i == 0)
2714 		list_add_rcu(&intf->link, &ipmi_interfaces);
2715 	else
2716 		list_add_tail_rcu(&intf->link, link);
2717 
2718 	rv = handlers->start_processing(send_info, intf);
2719 	if (rv)
2720 		goto out;
2721 
2722 	get_guid(intf);
2723 
2724 	if ((intf->ipmi_version_major > 1)
2725 	    || ((intf->ipmi_version_major == 1)
2726 		&& (intf->ipmi_version_minor >= 5)))
2727 	{
2728 		/* Start scanning the channels to see what is
2729 		   available. */
2730 		intf->null_user_handler = channel_handler;
2731 		intf->curr_channel = 0;
2732 		rv = send_channel_info_cmd(intf, 0);
2733 		if (rv)
2734 			goto out;
2735 
2736 		/* Wait for the channel info to be read. */
2737 		wait_event(intf->waitq,
2738 			   intf->curr_channel >= IPMI_MAX_CHANNELS);
2739 		intf->null_user_handler = NULL;
2740 	} else {
2741 		/* Assume a single IPMB channel at zero. */
2742 		intf->channels[0].medium = IPMI_CHANNEL_MEDIUM_IPMB;
2743 		intf->channels[0].protocol = IPMI_CHANNEL_PROTOCOL_IPMB;
2744 	}
2745 
2746 	if (rv == 0)
2747 		rv = add_proc_entries(intf, i);
2748 
2749 	rv = ipmi_bmc_register(intf, i, sysfs_name);
2750 
2751  out:
2752 	if (rv) {
2753 		if (intf->proc_dir)
2754 			remove_proc_entries(intf);
2755 		intf->handlers = NULL;
2756 		list_del_rcu(&intf->link);
2757 		mutex_unlock(&ipmi_interfaces_mutex);
2758 		mutex_unlock(&smi_watchers_mutex);
2759 		synchronize_rcu();
2760 		kref_put(&intf->refcount, intf_free);
2761 	} else {
2762 		/*
2763 		 * Keep memory order straight for RCU readers.  Make
2764 		 * sure everything else is committed to memory before
2765 		 * setting intf_num to mark the interface valid.
2766 		 */
2767 		smp_wmb();
2768 		intf->intf_num = i;
2769 		mutex_unlock(&ipmi_interfaces_mutex);
2770 		/* After this point the interface is legal to use. */
2771 		call_smi_watchers(i, intf->si_dev);
2772 		mutex_unlock(&smi_watchers_mutex);
2773 	}
2774 
2775 	return rv;
2776 }
2777 
2778 static void cleanup_smi_msgs(ipmi_smi_t intf)
2779 {
2780 	int              i;
2781 	struct seq_table *ent;
2782 
2783 	/* No need for locks, the interface is down. */
2784 	for (i = 0; i < IPMI_IPMB_NUM_SEQ; i++) {
2785 		ent = &(intf->seq_table[i]);
2786 		if (!ent->inuse)
2787 			continue;
2788 		deliver_err_response(ent->recv_msg, IPMI_ERR_UNSPECIFIED);
2789 	}
2790 }
2791 
2792 int ipmi_unregister_smi(ipmi_smi_t intf)
2793 {
2794 	struct ipmi_smi_watcher *w;
2795 	int    intf_num = intf->intf_num;
2796 
2797 	ipmi_bmc_unregister(intf);
2798 
2799 	mutex_lock(&smi_watchers_mutex);
2800 	mutex_lock(&ipmi_interfaces_mutex);
2801 	intf->intf_num = -1;
2802 	intf->handlers = NULL;
2803 	list_del_rcu(&intf->link);
2804 	mutex_unlock(&ipmi_interfaces_mutex);
2805 	synchronize_rcu();
2806 
2807 	cleanup_smi_msgs(intf);
2808 
2809 	remove_proc_entries(intf);
2810 
2811 	/* Call all the watcher interfaces to tell them that
2812 	   an interface is gone. */
2813 	list_for_each_entry(w, &smi_watchers, link)
2814 		w->smi_gone(intf_num);
2815 	mutex_unlock(&smi_watchers_mutex);
2816 
2817 	kref_put(&intf->refcount, intf_free);
2818 	return 0;
2819 }
2820 
2821 static int handle_ipmb_get_msg_rsp(ipmi_smi_t          intf,
2822 				   struct ipmi_smi_msg *msg)
2823 {
2824 	struct ipmi_ipmb_addr ipmb_addr;
2825 	struct ipmi_recv_msg  *recv_msg;
2826 	unsigned long         flags;
2827 
2828 
2829 	/* This is 11, not 10, because the response must contain a
2830 	 * completion code. */
2831 	if (msg->rsp_size < 11) {
2832 		/* Message not big enough, just ignore it. */
2833 		spin_lock_irqsave(&intf->counter_lock, flags);
2834 		intf->invalid_ipmb_responses++;
2835 		spin_unlock_irqrestore(&intf->counter_lock, flags);
2836 		return 0;
2837 	}
2838 
2839 	if (msg->rsp[2] != 0) {
2840 		/* An error getting the response, just ignore it. */
2841 		return 0;
2842 	}
2843 
2844 	ipmb_addr.addr_type = IPMI_IPMB_ADDR_TYPE;
2845 	ipmb_addr.slave_addr = msg->rsp[6];
2846 	ipmb_addr.channel = msg->rsp[3] & 0x0f;
2847 	ipmb_addr.lun = msg->rsp[7] & 3;
2848 
2849 	/* It's a response from a remote entity.  Look up the sequence
2850 	   number and handle the response. */
2851 	if (intf_find_seq(intf,
2852 			  msg->rsp[7] >> 2,
2853 			  msg->rsp[3] & 0x0f,
2854 			  msg->rsp[8],
2855 			  (msg->rsp[4] >> 2) & (~1),
2856 			  (struct ipmi_addr *) &(ipmb_addr),
2857 			  &recv_msg))
2858 	{
2859 		/* We were unable to find the sequence number,
2860 		   so just nuke the message. */
2861 		spin_lock_irqsave(&intf->counter_lock, flags);
2862 		intf->unhandled_ipmb_responses++;
2863 		spin_unlock_irqrestore(&intf->counter_lock, flags);
2864 		return 0;
2865 	}
2866 
2867 	memcpy(recv_msg->msg_data,
2868 	       &(msg->rsp[9]),
2869 	       msg->rsp_size - 9);
2870 	/* THe other fields matched, so no need to set them, except
2871            for netfn, which needs to be the response that was
2872            returned, not the request value. */
2873 	recv_msg->msg.netfn = msg->rsp[4] >> 2;
2874 	recv_msg->msg.data = recv_msg->msg_data;
2875 	recv_msg->msg.data_len = msg->rsp_size - 10;
2876 	recv_msg->recv_type = IPMI_RESPONSE_RECV_TYPE;
2877 	spin_lock_irqsave(&intf->counter_lock, flags);
2878 	intf->handled_ipmb_responses++;
2879 	spin_unlock_irqrestore(&intf->counter_lock, flags);
2880 	deliver_response(recv_msg);
2881 
2882 	return 0;
2883 }
2884 
2885 static int handle_ipmb_get_msg_cmd(ipmi_smi_t          intf,
2886 				   struct ipmi_smi_msg *msg)
2887 {
2888 	struct cmd_rcvr          *rcvr;
2889 	int                      rv = 0;
2890 	unsigned char            netfn;
2891 	unsigned char            cmd;
2892 	unsigned char            chan;
2893 	ipmi_user_t              user = NULL;
2894 	struct ipmi_ipmb_addr    *ipmb_addr;
2895 	struct ipmi_recv_msg     *recv_msg;
2896 	unsigned long            flags;
2897 	struct ipmi_smi_handlers *handlers;
2898 
2899 	if (msg->rsp_size < 10) {
2900 		/* Message not big enough, just ignore it. */
2901 		spin_lock_irqsave(&intf->counter_lock, flags);
2902 		intf->invalid_commands++;
2903 		spin_unlock_irqrestore(&intf->counter_lock, flags);
2904 		return 0;
2905 	}
2906 
2907 	if (msg->rsp[2] != 0) {
2908 		/* An error getting the response, just ignore it. */
2909 		return 0;
2910 	}
2911 
2912 	netfn = msg->rsp[4] >> 2;
2913 	cmd = msg->rsp[8];
2914 	chan = msg->rsp[3] & 0xf;
2915 
2916 	rcu_read_lock();
2917 	rcvr = find_cmd_rcvr(intf, netfn, cmd, chan);
2918 	if (rcvr) {
2919 		user = rcvr->user;
2920 		kref_get(&user->refcount);
2921 	} else
2922 		user = NULL;
2923 	rcu_read_unlock();
2924 
2925 	if (user == NULL) {
2926 		/* We didn't find a user, deliver an error response. */
2927 		spin_lock_irqsave(&intf->counter_lock, flags);
2928 		intf->unhandled_commands++;
2929 		spin_unlock_irqrestore(&intf->counter_lock, flags);
2930 
2931 		msg->data[0] = (IPMI_NETFN_APP_REQUEST << 2);
2932 		msg->data[1] = IPMI_SEND_MSG_CMD;
2933 		msg->data[2] = msg->rsp[3];
2934 		msg->data[3] = msg->rsp[6];
2935                 msg->data[4] = ((netfn + 1) << 2) | (msg->rsp[7] & 0x3);
2936 		msg->data[5] = ipmb_checksum(&(msg->data[3]), 2);
2937 		msg->data[6] = intf->channels[msg->rsp[3] & 0xf].address;
2938                 /* rqseq/lun */
2939                 msg->data[7] = (msg->rsp[7] & 0xfc) | (msg->rsp[4] & 0x3);
2940 		msg->data[8] = msg->rsp[8]; /* cmd */
2941 		msg->data[9] = IPMI_INVALID_CMD_COMPLETION_CODE;
2942 		msg->data[10] = ipmb_checksum(&(msg->data[6]), 4);
2943 		msg->data_size = 11;
2944 
2945 #ifdef DEBUG_MSGING
2946 	{
2947 		int m;
2948 		printk("Invalid command:");
2949 		for (m = 0; m < msg->data_size; m++)
2950 			printk(" %2.2x", msg->data[m]);
2951 		printk("\n");
2952 	}
2953 #endif
2954 		rcu_read_lock();
2955 		handlers = intf->handlers;
2956 		if (handlers) {
2957 			handlers->sender(intf->send_info, msg, 0);
2958 			/* We used the message, so return the value
2959 			   that causes it to not be freed or
2960 			   queued. */
2961 			rv = -1;
2962 		}
2963 		rcu_read_unlock();
2964 	} else {
2965 		/* Deliver the message to the user. */
2966 		spin_lock_irqsave(&intf->counter_lock, flags);
2967 		intf->handled_commands++;
2968 		spin_unlock_irqrestore(&intf->counter_lock, flags);
2969 
2970 		recv_msg = ipmi_alloc_recv_msg();
2971 		if (!recv_msg) {
2972 			/* We couldn't allocate memory for the
2973                            message, so requeue it for handling
2974                            later. */
2975 			rv = 1;
2976 			kref_put(&user->refcount, free_user);
2977 		} else {
2978 			/* Extract the source address from the data. */
2979 			ipmb_addr = (struct ipmi_ipmb_addr *) &recv_msg->addr;
2980 			ipmb_addr->addr_type = IPMI_IPMB_ADDR_TYPE;
2981 			ipmb_addr->slave_addr = msg->rsp[6];
2982 			ipmb_addr->lun = msg->rsp[7] & 3;
2983 			ipmb_addr->channel = msg->rsp[3] & 0xf;
2984 
2985 			/* Extract the rest of the message information
2986 			   from the IPMB header.*/
2987 			recv_msg->user = user;
2988 			recv_msg->recv_type = IPMI_CMD_RECV_TYPE;
2989 			recv_msg->msgid = msg->rsp[7] >> 2;
2990 			recv_msg->msg.netfn = msg->rsp[4] >> 2;
2991 			recv_msg->msg.cmd = msg->rsp[8];
2992 			recv_msg->msg.data = recv_msg->msg_data;
2993 
2994 			/* We chop off 10, not 9 bytes because the checksum
2995 			   at the end also needs to be removed. */
2996 			recv_msg->msg.data_len = msg->rsp_size - 10;
2997 			memcpy(recv_msg->msg_data,
2998 			       &(msg->rsp[9]),
2999 			       msg->rsp_size - 10);
3000 			deliver_response(recv_msg);
3001 		}
3002 	}
3003 
3004 	return rv;
3005 }
3006 
3007 static int handle_lan_get_msg_rsp(ipmi_smi_t          intf,
3008 				  struct ipmi_smi_msg *msg)
3009 {
3010 	struct ipmi_lan_addr  lan_addr;
3011 	struct ipmi_recv_msg  *recv_msg;
3012 	unsigned long         flags;
3013 
3014 
3015 	/* This is 13, not 12, because the response must contain a
3016 	 * completion code. */
3017 	if (msg->rsp_size < 13) {
3018 		/* Message not big enough, just ignore it. */
3019 		spin_lock_irqsave(&intf->counter_lock, flags);
3020 		intf->invalid_lan_responses++;
3021 		spin_unlock_irqrestore(&intf->counter_lock, flags);
3022 		return 0;
3023 	}
3024 
3025 	if (msg->rsp[2] != 0) {
3026 		/* An error getting the response, just ignore it. */
3027 		return 0;
3028 	}
3029 
3030 	lan_addr.addr_type = IPMI_LAN_ADDR_TYPE;
3031 	lan_addr.session_handle = msg->rsp[4];
3032 	lan_addr.remote_SWID = msg->rsp[8];
3033 	lan_addr.local_SWID = msg->rsp[5];
3034 	lan_addr.channel = msg->rsp[3] & 0x0f;
3035 	lan_addr.privilege = msg->rsp[3] >> 4;
3036 	lan_addr.lun = msg->rsp[9] & 3;
3037 
3038 	/* It's a response from a remote entity.  Look up the sequence
3039 	   number and handle the response. */
3040 	if (intf_find_seq(intf,
3041 			  msg->rsp[9] >> 2,
3042 			  msg->rsp[3] & 0x0f,
3043 			  msg->rsp[10],
3044 			  (msg->rsp[6] >> 2) & (~1),
3045 			  (struct ipmi_addr *) &(lan_addr),
3046 			  &recv_msg))
3047 	{
3048 		/* We were unable to find the sequence number,
3049 		   so just nuke the message. */
3050 		spin_lock_irqsave(&intf->counter_lock, flags);
3051 		intf->unhandled_lan_responses++;
3052 		spin_unlock_irqrestore(&intf->counter_lock, flags);
3053 		return 0;
3054 	}
3055 
3056 	memcpy(recv_msg->msg_data,
3057 	       &(msg->rsp[11]),
3058 	       msg->rsp_size - 11);
3059 	/* The other fields matched, so no need to set them, except
3060            for netfn, which needs to be the response that was
3061            returned, not the request value. */
3062 	recv_msg->msg.netfn = msg->rsp[6] >> 2;
3063 	recv_msg->msg.data = recv_msg->msg_data;
3064 	recv_msg->msg.data_len = msg->rsp_size - 12;
3065 	recv_msg->recv_type = IPMI_RESPONSE_RECV_TYPE;
3066 	spin_lock_irqsave(&intf->counter_lock, flags);
3067 	intf->handled_lan_responses++;
3068 	spin_unlock_irqrestore(&intf->counter_lock, flags);
3069 	deliver_response(recv_msg);
3070 
3071 	return 0;
3072 }
3073 
3074 static int handle_lan_get_msg_cmd(ipmi_smi_t          intf,
3075 				  struct ipmi_smi_msg *msg)
3076 {
3077 	struct cmd_rcvr          *rcvr;
3078 	int                      rv = 0;
3079 	unsigned char            netfn;
3080 	unsigned char            cmd;
3081 	unsigned char            chan;
3082 	ipmi_user_t              user = NULL;
3083 	struct ipmi_lan_addr     *lan_addr;
3084 	struct ipmi_recv_msg     *recv_msg;
3085 	unsigned long            flags;
3086 
3087 	if (msg->rsp_size < 12) {
3088 		/* Message not big enough, just ignore it. */
3089 		spin_lock_irqsave(&intf->counter_lock, flags);
3090 		intf->invalid_commands++;
3091 		spin_unlock_irqrestore(&intf->counter_lock, flags);
3092 		return 0;
3093 	}
3094 
3095 	if (msg->rsp[2] != 0) {
3096 		/* An error getting the response, just ignore it. */
3097 		return 0;
3098 	}
3099 
3100 	netfn = msg->rsp[6] >> 2;
3101 	cmd = msg->rsp[10];
3102 	chan = msg->rsp[3] & 0xf;
3103 
3104 	rcu_read_lock();
3105 	rcvr = find_cmd_rcvr(intf, netfn, cmd, chan);
3106 	if (rcvr) {
3107 		user = rcvr->user;
3108 		kref_get(&user->refcount);
3109 	} else
3110 		user = NULL;
3111 	rcu_read_unlock();
3112 
3113 	if (user == NULL) {
3114 		/* We didn't find a user, just give up. */
3115 		spin_lock_irqsave(&intf->counter_lock, flags);
3116 		intf->unhandled_commands++;
3117 		spin_unlock_irqrestore(&intf->counter_lock, flags);
3118 
3119 		rv = 0; /* Don't do anything with these messages, just
3120 			   allow them to be freed. */
3121 	} else {
3122 		/* Deliver the message to the user. */
3123 		spin_lock_irqsave(&intf->counter_lock, flags);
3124 		intf->handled_commands++;
3125 		spin_unlock_irqrestore(&intf->counter_lock, flags);
3126 
3127 		recv_msg = ipmi_alloc_recv_msg();
3128 		if (!recv_msg) {
3129 			/* We couldn't allocate memory for the
3130                            message, so requeue it for handling
3131                            later. */
3132 			rv = 1;
3133 			kref_put(&user->refcount, free_user);
3134 		} else {
3135 			/* Extract the source address from the data. */
3136 			lan_addr = (struct ipmi_lan_addr *) &recv_msg->addr;
3137 			lan_addr->addr_type = IPMI_LAN_ADDR_TYPE;
3138 			lan_addr->session_handle = msg->rsp[4];
3139 			lan_addr->remote_SWID = msg->rsp[8];
3140 			lan_addr->local_SWID = msg->rsp[5];
3141 			lan_addr->lun = msg->rsp[9] & 3;
3142 			lan_addr->channel = msg->rsp[3] & 0xf;
3143 			lan_addr->privilege = msg->rsp[3] >> 4;
3144 
3145 			/* Extract the rest of the message information
3146 			   from the IPMB header.*/
3147 			recv_msg->user = user;
3148 			recv_msg->recv_type = IPMI_CMD_RECV_TYPE;
3149 			recv_msg->msgid = msg->rsp[9] >> 2;
3150 			recv_msg->msg.netfn = msg->rsp[6] >> 2;
3151 			recv_msg->msg.cmd = msg->rsp[10];
3152 			recv_msg->msg.data = recv_msg->msg_data;
3153 
3154 			/* We chop off 12, not 11 bytes because the checksum
3155 			   at the end also needs to be removed. */
3156 			recv_msg->msg.data_len = msg->rsp_size - 12;
3157 			memcpy(recv_msg->msg_data,
3158 			       &(msg->rsp[11]),
3159 			       msg->rsp_size - 12);
3160 			deliver_response(recv_msg);
3161 		}
3162 	}
3163 
3164 	return rv;
3165 }
3166 
3167 static void copy_event_into_recv_msg(struct ipmi_recv_msg *recv_msg,
3168 				     struct ipmi_smi_msg  *msg)
3169 {
3170 	struct ipmi_system_interface_addr *smi_addr;
3171 
3172 	recv_msg->msgid = 0;
3173 	smi_addr = (struct ipmi_system_interface_addr *) &(recv_msg->addr);
3174 	smi_addr->addr_type = IPMI_SYSTEM_INTERFACE_ADDR_TYPE;
3175 	smi_addr->channel = IPMI_BMC_CHANNEL;
3176 	smi_addr->lun = msg->rsp[0] & 3;
3177 	recv_msg->recv_type = IPMI_ASYNC_EVENT_RECV_TYPE;
3178 	recv_msg->msg.netfn = msg->rsp[0] >> 2;
3179 	recv_msg->msg.cmd = msg->rsp[1];
3180 	memcpy(recv_msg->msg_data, &(msg->rsp[3]), msg->rsp_size - 3);
3181 	recv_msg->msg.data = recv_msg->msg_data;
3182 	recv_msg->msg.data_len = msg->rsp_size - 3;
3183 }
3184 
3185 static int handle_read_event_rsp(ipmi_smi_t          intf,
3186 				 struct ipmi_smi_msg *msg)
3187 {
3188 	struct ipmi_recv_msg *recv_msg, *recv_msg2;
3189 	struct list_head     msgs;
3190 	ipmi_user_t          user;
3191 	int                  rv = 0;
3192 	int                  deliver_count = 0;
3193 	unsigned long        flags;
3194 
3195 	if (msg->rsp_size < 19) {
3196 		/* Message is too small to be an IPMB event. */
3197 		spin_lock_irqsave(&intf->counter_lock, flags);
3198 		intf->invalid_events++;
3199 		spin_unlock_irqrestore(&intf->counter_lock, flags);
3200 		return 0;
3201 	}
3202 
3203 	if (msg->rsp[2] != 0) {
3204 		/* An error getting the event, just ignore it. */
3205 		return 0;
3206 	}
3207 
3208 	INIT_LIST_HEAD(&msgs);
3209 
3210 	spin_lock_irqsave(&intf->events_lock, flags);
3211 
3212 	spin_lock(&intf->counter_lock);
3213 	intf->events++;
3214 	spin_unlock(&intf->counter_lock);
3215 
3216 	/* Allocate and fill in one message for every user that is getting
3217 	   events. */
3218 	rcu_read_lock();
3219 	list_for_each_entry_rcu(user, &intf->users, link) {
3220 		if (!user->gets_events)
3221 			continue;
3222 
3223 		recv_msg = ipmi_alloc_recv_msg();
3224 		if (!recv_msg) {
3225 			rcu_read_unlock();
3226 			list_for_each_entry_safe(recv_msg, recv_msg2, &msgs,
3227 						 link) {
3228 				list_del(&recv_msg->link);
3229 				ipmi_free_recv_msg(recv_msg);
3230 			}
3231 			/* We couldn't allocate memory for the
3232                            message, so requeue it for handling
3233                            later. */
3234 			rv = 1;
3235 			goto out;
3236 		}
3237 
3238 		deliver_count++;
3239 
3240 		copy_event_into_recv_msg(recv_msg, msg);
3241 		recv_msg->user = user;
3242 		kref_get(&user->refcount);
3243 		list_add_tail(&(recv_msg->link), &msgs);
3244 	}
3245 	rcu_read_unlock();
3246 
3247 	if (deliver_count) {
3248 		/* Now deliver all the messages. */
3249 		list_for_each_entry_safe(recv_msg, recv_msg2, &msgs, link) {
3250 			list_del(&recv_msg->link);
3251 			deliver_response(recv_msg);
3252 		}
3253 	} else if (intf->waiting_events_count < MAX_EVENTS_IN_QUEUE) {
3254 		/* No one to receive the message, put it in queue if there's
3255 		   not already too many things in the queue. */
3256 		recv_msg = ipmi_alloc_recv_msg();
3257 		if (!recv_msg) {
3258 			/* We couldn't allocate memory for the
3259                            message, so requeue it for handling
3260                            later. */
3261 			rv = 1;
3262 			goto out;
3263 		}
3264 
3265 		copy_event_into_recv_msg(recv_msg, msg);
3266 		list_add_tail(&(recv_msg->link), &(intf->waiting_events));
3267 		intf->waiting_events_count++;
3268 	} else {
3269 		/* There's too many things in the queue, discard this
3270 		   message. */
3271 		printk(KERN_WARNING PFX "Event queue full, discarding an"
3272 		       " incoming event\n");
3273 	}
3274 
3275  out:
3276 	spin_unlock_irqrestore(&(intf->events_lock), flags);
3277 
3278 	return rv;
3279 }
3280 
3281 static int handle_bmc_rsp(ipmi_smi_t          intf,
3282 			  struct ipmi_smi_msg *msg)
3283 {
3284 	struct ipmi_recv_msg *recv_msg;
3285 	unsigned long        flags;
3286 	struct ipmi_user     *user;
3287 
3288 	recv_msg = (struct ipmi_recv_msg *) msg->user_data;
3289 	if (recv_msg == NULL)
3290 	{
3291 		printk(KERN_WARNING"IPMI message received with no owner. This\n"
3292 			"could be because of a malformed message, or\n"
3293 			"because of a hardware error.  Contact your\n"
3294 			"hardware vender for assistance\n");
3295 		return 0;
3296 	}
3297 
3298 	user = recv_msg->user;
3299 	/* Make sure the user still exists. */
3300 	if (user && !user->valid) {
3301 		/* The user for the message went away, so give up. */
3302 		spin_lock_irqsave(&intf->counter_lock, flags);
3303 		intf->unhandled_local_responses++;
3304 		spin_unlock_irqrestore(&intf->counter_lock, flags);
3305 		ipmi_free_recv_msg(recv_msg);
3306 	} else {
3307 		struct ipmi_system_interface_addr *smi_addr;
3308 
3309 		spin_lock_irqsave(&intf->counter_lock, flags);
3310 		intf->handled_local_responses++;
3311 		spin_unlock_irqrestore(&intf->counter_lock, flags);
3312 		recv_msg->recv_type = IPMI_RESPONSE_RECV_TYPE;
3313 		recv_msg->msgid = msg->msgid;
3314 		smi_addr = ((struct ipmi_system_interface_addr *)
3315 			    &(recv_msg->addr));
3316 		smi_addr->addr_type = IPMI_SYSTEM_INTERFACE_ADDR_TYPE;
3317 		smi_addr->channel = IPMI_BMC_CHANNEL;
3318 		smi_addr->lun = msg->rsp[0] & 3;
3319 		recv_msg->msg.netfn = msg->rsp[0] >> 2;
3320 		recv_msg->msg.cmd = msg->rsp[1];
3321 		memcpy(recv_msg->msg_data,
3322 		       &(msg->rsp[2]),
3323 		       msg->rsp_size - 2);
3324 		recv_msg->msg.data = recv_msg->msg_data;
3325 		recv_msg->msg.data_len = msg->rsp_size - 2;
3326 		deliver_response(recv_msg);
3327 	}
3328 
3329 	return 0;
3330 }
3331 
3332 /* Handle a new message.  Return 1 if the message should be requeued,
3333    0 if the message should be freed, or -1 if the message should not
3334    be freed or requeued. */
3335 static int handle_new_recv_msg(ipmi_smi_t          intf,
3336 			       struct ipmi_smi_msg *msg)
3337 {
3338 	int requeue;
3339 	int chan;
3340 
3341 #ifdef DEBUG_MSGING
3342 	int m;
3343 	printk("Recv:");
3344 	for (m = 0; m < msg->rsp_size; m++)
3345 		printk(" %2.2x", msg->rsp[m]);
3346 	printk("\n");
3347 #endif
3348 	if (msg->rsp_size < 2) {
3349 		/* Message is too small to be correct. */
3350 		printk(KERN_WARNING PFX "BMC returned to small a message"
3351 		       " for netfn %x cmd %x, got %d bytes\n",
3352 		       (msg->data[0] >> 2) | 1, msg->data[1], msg->rsp_size);
3353 
3354 		/* Generate an error response for the message. */
3355 		msg->rsp[0] = msg->data[0] | (1 << 2);
3356 		msg->rsp[1] = msg->data[1];
3357 		msg->rsp[2] = IPMI_ERR_UNSPECIFIED;
3358 		msg->rsp_size = 3;
3359 	} else if (((msg->rsp[0] >> 2) != ((msg->data[0] >> 2) | 1))/* Netfn */
3360 		   || (msg->rsp[1] != msg->data[1]))		  /* Command */
3361 	{
3362 		/* The response is not even marginally correct. */
3363 		printk(KERN_WARNING PFX "BMC returned incorrect response,"
3364 		       " expected netfn %x cmd %x, got netfn %x cmd %x\n",
3365 		       (msg->data[0] >> 2) | 1, msg->data[1],
3366 		       msg->rsp[0] >> 2, msg->rsp[1]);
3367 
3368 		/* Generate an error response for the message. */
3369 		msg->rsp[0] = msg->data[0] | (1 << 2);
3370 		msg->rsp[1] = msg->data[1];
3371 		msg->rsp[2] = IPMI_ERR_UNSPECIFIED;
3372 		msg->rsp_size = 3;
3373 	}
3374 
3375 	if ((msg->rsp[0] == ((IPMI_NETFN_APP_REQUEST|1) << 2))
3376 	    && (msg->rsp[1] == IPMI_SEND_MSG_CMD)
3377 	    && (msg->user_data != NULL))
3378 	{
3379 		/* It's a response to a response we sent.  For this we
3380 		   deliver a send message response to the user. */
3381 		struct ipmi_recv_msg     *recv_msg = msg->user_data;
3382 
3383 		requeue = 0;
3384 		if (msg->rsp_size < 2)
3385 			/* Message is too small to be correct. */
3386 			goto out;
3387 
3388 		chan = msg->data[2] & 0x0f;
3389 		if (chan >= IPMI_MAX_CHANNELS)
3390 			/* Invalid channel number */
3391 			goto out;
3392 
3393 		if (!recv_msg)
3394 			goto out;
3395 
3396 		/* Make sure the user still exists. */
3397 		if (!recv_msg->user || !recv_msg->user->valid)
3398 			goto out;
3399 
3400 		recv_msg->recv_type = IPMI_RESPONSE_RESPONSE_TYPE;
3401 		recv_msg->msg.data = recv_msg->msg_data;
3402 		recv_msg->msg.data_len = 1;
3403 		recv_msg->msg_data[0] = msg->rsp[2];
3404 		deliver_response(recv_msg);
3405 	} else if ((msg->rsp[0] == ((IPMI_NETFN_APP_REQUEST|1) << 2))
3406 		   && (msg->rsp[1] == IPMI_GET_MSG_CMD))
3407 	{
3408 		/* It's from the receive queue. */
3409 		chan = msg->rsp[3] & 0xf;
3410 		if (chan >= IPMI_MAX_CHANNELS) {
3411 			/* Invalid channel number */
3412 			requeue = 0;
3413 			goto out;
3414 		}
3415 
3416 		switch (intf->channels[chan].medium) {
3417 		case IPMI_CHANNEL_MEDIUM_IPMB:
3418 			if (msg->rsp[4] & 0x04) {
3419 				/* It's a response, so find the
3420 				   requesting message and send it up. */
3421 				requeue = handle_ipmb_get_msg_rsp(intf, msg);
3422 			} else {
3423 				/* It's a command to the SMS from some other
3424 				   entity.  Handle that. */
3425 				requeue = handle_ipmb_get_msg_cmd(intf, msg);
3426 			}
3427 			break;
3428 
3429 		case IPMI_CHANNEL_MEDIUM_8023LAN:
3430 		case IPMI_CHANNEL_MEDIUM_ASYNC:
3431 			if (msg->rsp[6] & 0x04) {
3432 				/* It's a response, so find the
3433 				   requesting message and send it up. */
3434 				requeue = handle_lan_get_msg_rsp(intf, msg);
3435 			} else {
3436 				/* It's a command to the SMS from some other
3437 				   entity.  Handle that. */
3438 				requeue = handle_lan_get_msg_cmd(intf, msg);
3439 			}
3440 			break;
3441 
3442 		default:
3443 			/* We don't handle the channel type, so just
3444 			 * free the message. */
3445 			requeue = 0;
3446 		}
3447 
3448 	} else if ((msg->rsp[0] == ((IPMI_NETFN_APP_REQUEST|1) << 2))
3449 		   && (msg->rsp[1] == IPMI_READ_EVENT_MSG_BUFFER_CMD))
3450 	{
3451 		/* It's an asyncronous event. */
3452 		requeue = handle_read_event_rsp(intf, msg);
3453 	} else {
3454 		/* It's a response from the local BMC. */
3455 		requeue = handle_bmc_rsp(intf, msg);
3456 	}
3457 
3458  out:
3459 	return requeue;
3460 }
3461 
3462 /* Handle a new message from the lower layer. */
3463 void ipmi_smi_msg_received(ipmi_smi_t          intf,
3464 			   struct ipmi_smi_msg *msg)
3465 {
3466 	unsigned long flags;
3467 	int           rv;
3468 
3469 
3470 	if ((msg->data_size >= 2)
3471 	    && (msg->data[0] == (IPMI_NETFN_APP_REQUEST << 2))
3472 	    && (msg->data[1] == IPMI_SEND_MSG_CMD)
3473 	    && (msg->user_data == NULL))
3474 	{
3475 		/* This is the local response to a command send, start
3476                    the timer for these.  The user_data will not be
3477                    NULL if this is a response send, and we will let
3478                    response sends just go through. */
3479 
3480 		/* Check for errors, if we get certain errors (ones
3481                    that mean basically we can try again later), we
3482                    ignore them and start the timer.  Otherwise we
3483                    report the error immediately. */
3484 		if ((msg->rsp_size >= 3) && (msg->rsp[2] != 0)
3485 		    && (msg->rsp[2] != IPMI_NODE_BUSY_ERR)
3486 		    && (msg->rsp[2] != IPMI_LOST_ARBITRATION_ERR)
3487 		    && (msg->rsp[2] != IPMI_BUS_ERR)
3488 		    && (msg->rsp[2] != IPMI_NAK_ON_WRITE_ERR))
3489 		{
3490 			int chan = msg->rsp[3] & 0xf;
3491 
3492 			/* Got an error sending the message, handle it. */
3493 			spin_lock_irqsave(&intf->counter_lock, flags);
3494 			if (chan >= IPMI_MAX_CHANNELS)
3495 				; /* This shouldn't happen */
3496 			else if ((intf->channels[chan].medium
3497 				  == IPMI_CHANNEL_MEDIUM_8023LAN)
3498 				 || (intf->channels[chan].medium
3499 				     == IPMI_CHANNEL_MEDIUM_ASYNC))
3500 				intf->sent_lan_command_errs++;
3501 			else
3502 				intf->sent_ipmb_command_errs++;
3503 			spin_unlock_irqrestore(&intf->counter_lock, flags);
3504 			intf_err_seq(intf, msg->msgid, msg->rsp[2]);
3505 		} else {
3506 			/* The message was sent, start the timer. */
3507 			intf_start_seq_timer(intf, msg->msgid);
3508 		}
3509 
3510 		ipmi_free_smi_msg(msg);
3511 		goto out;
3512 	}
3513 
3514 	/* To preserve message order, if the list is not empty, we
3515            tack this message onto the end of the list. */
3516 	spin_lock_irqsave(&intf->waiting_msgs_lock, flags);
3517 	if (!list_empty(&intf->waiting_msgs)) {
3518 		list_add_tail(&msg->link, &intf->waiting_msgs);
3519 		spin_unlock_irqrestore(&intf->waiting_msgs_lock, flags);
3520 		goto out;
3521 	}
3522 	spin_unlock_irqrestore(&intf->waiting_msgs_lock, flags);
3523 
3524 	rv = handle_new_recv_msg(intf, msg);
3525 	if (rv > 0) {
3526 		/* Could not handle the message now, just add it to a
3527                    list to handle later. */
3528 		spin_lock_irqsave(&intf->waiting_msgs_lock, flags);
3529 		list_add_tail(&msg->link, &intf->waiting_msgs);
3530 		spin_unlock_irqrestore(&intf->waiting_msgs_lock, flags);
3531 	} else if (rv == 0) {
3532 		ipmi_free_smi_msg(msg);
3533 	}
3534 
3535  out:
3536 	return;
3537 }
3538 
3539 void ipmi_smi_watchdog_pretimeout(ipmi_smi_t intf)
3540 {
3541 	ipmi_user_t user;
3542 
3543 	rcu_read_lock();
3544 	list_for_each_entry_rcu(user, &intf->users, link) {
3545 		if (!user->handler->ipmi_watchdog_pretimeout)
3546 			continue;
3547 
3548 		user->handler->ipmi_watchdog_pretimeout(user->handler_data);
3549 	}
3550 	rcu_read_unlock();
3551 }
3552 
3553 
3554 static struct ipmi_smi_msg *
3555 smi_from_recv_msg(ipmi_smi_t intf, struct ipmi_recv_msg *recv_msg,
3556 		  unsigned char seq, long seqid)
3557 {
3558 	struct ipmi_smi_msg *smi_msg = ipmi_alloc_smi_msg();
3559 	if (!smi_msg)
3560 		/* If we can't allocate the message, then just return, we
3561 		   get 4 retries, so this should be ok. */
3562 		return NULL;
3563 
3564 	memcpy(smi_msg->data, recv_msg->msg.data, recv_msg->msg.data_len);
3565 	smi_msg->data_size = recv_msg->msg.data_len;
3566 	smi_msg->msgid = STORE_SEQ_IN_MSGID(seq, seqid);
3567 
3568 #ifdef DEBUG_MSGING
3569 	{
3570 		int m;
3571 		printk("Resend: ");
3572 		for (m = 0; m < smi_msg->data_size; m++)
3573 			printk(" %2.2x", smi_msg->data[m]);
3574 		printk("\n");
3575 	}
3576 #endif
3577 	return smi_msg;
3578 }
3579 
3580 static void check_msg_timeout(ipmi_smi_t intf, struct seq_table *ent,
3581 			      struct list_head *timeouts, long timeout_period,
3582 			      int slot, unsigned long *flags)
3583 {
3584 	struct ipmi_recv_msg     *msg;
3585 	struct ipmi_smi_handlers *handlers;
3586 
3587 	if (intf->intf_num == -1)
3588 		return;
3589 
3590 	if (!ent->inuse)
3591 		return;
3592 
3593 	ent->timeout -= timeout_period;
3594 	if (ent->timeout > 0)
3595 		return;
3596 
3597 	if (ent->retries_left == 0) {
3598 		/* The message has used all its retries. */
3599 		ent->inuse = 0;
3600 		msg = ent->recv_msg;
3601 		list_add_tail(&msg->link, timeouts);
3602 		spin_lock(&intf->counter_lock);
3603 		if (ent->broadcast)
3604 			intf->timed_out_ipmb_broadcasts++;
3605 		else if (ent->recv_msg->addr.addr_type == IPMI_LAN_ADDR_TYPE)
3606 			intf->timed_out_lan_commands++;
3607 		else
3608 			intf->timed_out_ipmb_commands++;
3609 		spin_unlock(&intf->counter_lock);
3610 	} else {
3611 		struct ipmi_smi_msg *smi_msg;
3612 		/* More retries, send again. */
3613 
3614 		/* Start with the max timer, set to normal
3615 		   timer after the message is sent. */
3616 		ent->timeout = MAX_MSG_TIMEOUT;
3617 		ent->retries_left--;
3618 		spin_lock(&intf->counter_lock);
3619 		if (ent->recv_msg->addr.addr_type == IPMI_LAN_ADDR_TYPE)
3620 			intf->retransmitted_lan_commands++;
3621 		else
3622 			intf->retransmitted_ipmb_commands++;
3623 		spin_unlock(&intf->counter_lock);
3624 
3625 		smi_msg = smi_from_recv_msg(intf, ent->recv_msg, slot,
3626 					    ent->seqid);
3627 		if (!smi_msg)
3628 			return;
3629 
3630 		spin_unlock_irqrestore(&intf->seq_lock, *flags);
3631 
3632 		/* Send the new message.  We send with a zero
3633 		 * priority.  It timed out, I doubt time is
3634 		 * that critical now, and high priority
3635 		 * messages are really only for messages to the
3636 		 * local MC, which don't get resent. */
3637 		handlers = intf->handlers;
3638 		if (handlers)
3639 			intf->handlers->sender(intf->send_info,
3640 					       smi_msg, 0);
3641 		else
3642 			ipmi_free_smi_msg(smi_msg);
3643 
3644 		spin_lock_irqsave(&intf->seq_lock, *flags);
3645 	}
3646 }
3647 
3648 static void ipmi_timeout_handler(long timeout_period)
3649 {
3650 	ipmi_smi_t           intf;
3651 	struct list_head     timeouts;
3652 	struct ipmi_recv_msg *msg, *msg2;
3653 	struct ipmi_smi_msg  *smi_msg, *smi_msg2;
3654 	unsigned long        flags;
3655 	int                  i;
3656 
3657 	rcu_read_lock();
3658 	list_for_each_entry_rcu(intf, &ipmi_interfaces, link) {
3659 		/* See if any waiting messages need to be processed. */
3660 		spin_lock_irqsave(&intf->waiting_msgs_lock, flags);
3661 		list_for_each_entry_safe(smi_msg, smi_msg2,
3662 					 &intf->waiting_msgs, link) {
3663 			if (!handle_new_recv_msg(intf, smi_msg)) {
3664 				list_del(&smi_msg->link);
3665 				ipmi_free_smi_msg(smi_msg);
3666 			} else {
3667 				/* To preserve message order, quit if we
3668 				   can't handle a message. */
3669 				break;
3670 			}
3671 		}
3672 		spin_unlock_irqrestore(&intf->waiting_msgs_lock, flags);
3673 
3674 		/* Go through the seq table and find any messages that
3675 		   have timed out, putting them in the timeouts
3676 		   list. */
3677 		INIT_LIST_HEAD(&timeouts);
3678 		spin_lock_irqsave(&intf->seq_lock, flags);
3679 		for (i = 0; i < IPMI_IPMB_NUM_SEQ; i++)
3680 			check_msg_timeout(intf, &(intf->seq_table[i]),
3681 					  &timeouts, timeout_period, i,
3682 					  &flags);
3683 		spin_unlock_irqrestore(&intf->seq_lock, flags);
3684 
3685 		list_for_each_entry_safe(msg, msg2, &timeouts, link)
3686 			deliver_err_response(msg, IPMI_TIMEOUT_COMPLETION_CODE);
3687 
3688 		/*
3689 		 * Maintenance mode handling.  Check the timeout
3690 		 * optimistically before we claim the lock.  It may
3691 		 * mean a timeout gets missed occasionally, but that
3692 		 * only means the timeout gets extended by one period
3693 		 * in that case.  No big deal, and it avoids the lock
3694 		 * most of the time.
3695 		 */
3696 		if (intf->auto_maintenance_timeout > 0) {
3697 			spin_lock_irqsave(&intf->maintenance_mode_lock, flags);
3698 			if (intf->auto_maintenance_timeout > 0) {
3699 				intf->auto_maintenance_timeout
3700 					-= timeout_period;
3701 				if (!intf->maintenance_mode
3702 				    && (intf->auto_maintenance_timeout <= 0))
3703 				{
3704 					intf->maintenance_mode_enable = 0;
3705 					maintenance_mode_update(intf);
3706 				}
3707 			}
3708 			spin_unlock_irqrestore(&intf->maintenance_mode_lock,
3709 					       flags);
3710 		}
3711 	}
3712 	rcu_read_unlock();
3713 }
3714 
3715 static void ipmi_request_event(void)
3716 {
3717 	ipmi_smi_t               intf;
3718 	struct ipmi_smi_handlers *handlers;
3719 
3720 	rcu_read_lock();
3721 	/* Called from the timer, no need to check if handlers is
3722 	 * valid. */
3723 	list_for_each_entry_rcu(intf, &ipmi_interfaces, link) {
3724 		/* No event requests when in maintenance mode. */
3725 		if (intf->maintenance_mode_enable)
3726 			continue;
3727 
3728 		handlers = intf->handlers;
3729 		if (handlers)
3730 			handlers->request_events(intf->send_info);
3731 	}
3732 	rcu_read_unlock();
3733 }
3734 
3735 static struct timer_list ipmi_timer;
3736 
3737 /* Call every ~100 ms. */
3738 #define IPMI_TIMEOUT_TIME	100
3739 
3740 /* How many jiffies does it take to get to the timeout time. */
3741 #define IPMI_TIMEOUT_JIFFIES	((IPMI_TIMEOUT_TIME * HZ) / 1000)
3742 
3743 /* Request events from the queue every second (this is the number of
3744    IPMI_TIMEOUT_TIMES between event requests).  Hopefully, in the
3745    future, IPMI will add a way to know immediately if an event is in
3746    the queue and this silliness can go away. */
3747 #define IPMI_REQUEST_EV_TIME	(1000 / (IPMI_TIMEOUT_TIME))
3748 
3749 static atomic_t stop_operation;
3750 static unsigned int ticks_to_req_ev = IPMI_REQUEST_EV_TIME;
3751 
3752 static void ipmi_timeout(unsigned long data)
3753 {
3754 	if (atomic_read(&stop_operation))
3755 		return;
3756 
3757 	ticks_to_req_ev--;
3758 	if (ticks_to_req_ev == 0) {
3759 		ipmi_request_event();
3760 		ticks_to_req_ev = IPMI_REQUEST_EV_TIME;
3761 	}
3762 
3763 	ipmi_timeout_handler(IPMI_TIMEOUT_TIME);
3764 
3765 	mod_timer(&ipmi_timer, jiffies + IPMI_TIMEOUT_JIFFIES);
3766 }
3767 
3768 
3769 static atomic_t smi_msg_inuse_count = ATOMIC_INIT(0);
3770 static atomic_t recv_msg_inuse_count = ATOMIC_INIT(0);
3771 
3772 /* FIXME - convert these to slabs. */
3773 static void free_smi_msg(struct ipmi_smi_msg *msg)
3774 {
3775 	atomic_dec(&smi_msg_inuse_count);
3776 	kfree(msg);
3777 }
3778 
3779 struct ipmi_smi_msg *ipmi_alloc_smi_msg(void)
3780 {
3781 	struct ipmi_smi_msg *rv;
3782 	rv = kmalloc(sizeof(struct ipmi_smi_msg), GFP_ATOMIC);
3783 	if (rv) {
3784 		rv->done = free_smi_msg;
3785 		rv->user_data = NULL;
3786 		atomic_inc(&smi_msg_inuse_count);
3787 	}
3788 	return rv;
3789 }
3790 
3791 static void free_recv_msg(struct ipmi_recv_msg *msg)
3792 {
3793 	atomic_dec(&recv_msg_inuse_count);
3794 	kfree(msg);
3795 }
3796 
3797 struct ipmi_recv_msg *ipmi_alloc_recv_msg(void)
3798 {
3799 	struct ipmi_recv_msg *rv;
3800 
3801 	rv = kmalloc(sizeof(struct ipmi_recv_msg), GFP_ATOMIC);
3802 	if (rv) {
3803 		rv->user = NULL;
3804 		rv->done = free_recv_msg;
3805 		atomic_inc(&recv_msg_inuse_count);
3806 	}
3807 	return rv;
3808 }
3809 
3810 void ipmi_free_recv_msg(struct ipmi_recv_msg *msg)
3811 {
3812 	if (msg->user)
3813 		kref_put(&msg->user->refcount, free_user);
3814 	msg->done(msg);
3815 }
3816 
3817 #ifdef CONFIG_IPMI_PANIC_EVENT
3818 
3819 static void dummy_smi_done_handler(struct ipmi_smi_msg *msg)
3820 {
3821 }
3822 
3823 static void dummy_recv_done_handler(struct ipmi_recv_msg *msg)
3824 {
3825 }
3826 
3827 #ifdef CONFIG_IPMI_PANIC_STRING
3828 static void event_receiver_fetcher(ipmi_smi_t intf, struct ipmi_recv_msg *msg)
3829 {
3830 	if ((msg->addr.addr_type == IPMI_SYSTEM_INTERFACE_ADDR_TYPE)
3831 	    && (msg->msg.netfn == IPMI_NETFN_SENSOR_EVENT_RESPONSE)
3832 	    && (msg->msg.cmd == IPMI_GET_EVENT_RECEIVER_CMD)
3833 	    && (msg->msg.data[0] == IPMI_CC_NO_ERROR))
3834 	{
3835 		/* A get event receiver command, save it. */
3836 		intf->event_receiver = msg->msg.data[1];
3837 		intf->event_receiver_lun = msg->msg.data[2] & 0x3;
3838 	}
3839 }
3840 
3841 static void device_id_fetcher(ipmi_smi_t intf, struct ipmi_recv_msg *msg)
3842 {
3843 	if ((msg->addr.addr_type == IPMI_SYSTEM_INTERFACE_ADDR_TYPE)
3844 	    && (msg->msg.netfn == IPMI_NETFN_APP_RESPONSE)
3845 	    && (msg->msg.cmd == IPMI_GET_DEVICE_ID_CMD)
3846 	    && (msg->msg.data[0] == IPMI_CC_NO_ERROR))
3847 	{
3848 		/* A get device id command, save if we are an event
3849 		   receiver or generator. */
3850 		intf->local_sel_device = (msg->msg.data[6] >> 2) & 1;
3851 		intf->local_event_generator = (msg->msg.data[6] >> 5) & 1;
3852 	}
3853 }
3854 #endif
3855 
3856 static void send_panic_events(char *str)
3857 {
3858 	struct kernel_ipmi_msg            msg;
3859 	ipmi_smi_t                        intf;
3860 	unsigned char                     data[16];
3861 	struct ipmi_system_interface_addr *si;
3862 	struct ipmi_addr                  addr;
3863 	struct ipmi_smi_msg               smi_msg;
3864 	struct ipmi_recv_msg              recv_msg;
3865 
3866 	si = (struct ipmi_system_interface_addr *) &addr;
3867 	si->addr_type = IPMI_SYSTEM_INTERFACE_ADDR_TYPE;
3868 	si->channel = IPMI_BMC_CHANNEL;
3869 	si->lun = 0;
3870 
3871 	/* Fill in an event telling that we have failed. */
3872 	msg.netfn = 0x04; /* Sensor or Event. */
3873 	msg.cmd = 2; /* Platform event command. */
3874 	msg.data = data;
3875 	msg.data_len = 8;
3876 	data[0] = 0x41; /* Kernel generator ID, IPMI table 5-4 */
3877 	data[1] = 0x03; /* This is for IPMI 1.0. */
3878 	data[2] = 0x20; /* OS Critical Stop, IPMI table 36-3 */
3879 	data[4] = 0x6f; /* Sensor specific, IPMI table 36-1 */
3880 	data[5] = 0xa1; /* Runtime stop OEM bytes 2 & 3. */
3881 
3882 	/* Put a few breadcrumbs in.  Hopefully later we can add more things
3883 	   to make the panic events more useful. */
3884 	if (str) {
3885 		data[3] = str[0];
3886 		data[6] = str[1];
3887 		data[7] = str[2];
3888 	}
3889 
3890 	smi_msg.done = dummy_smi_done_handler;
3891 	recv_msg.done = dummy_recv_done_handler;
3892 
3893 	/* For every registered interface, send the event. */
3894 	list_for_each_entry_rcu(intf, &ipmi_interfaces, link) {
3895 		if (!intf->handlers)
3896 			/* Interface is not ready. */
3897 			continue;
3898 
3899 		/* Send the event announcing the panic. */
3900 		intf->handlers->set_run_to_completion(intf->send_info, 1);
3901 		i_ipmi_request(NULL,
3902 			       intf,
3903 			       &addr,
3904 			       0,
3905 			       &msg,
3906 			       intf,
3907 			       &smi_msg,
3908 			       &recv_msg,
3909 			       0,
3910 			       intf->channels[0].address,
3911 			       intf->channels[0].lun,
3912 			       0, 1); /* Don't retry, and don't wait. */
3913 	}
3914 
3915 #ifdef CONFIG_IPMI_PANIC_STRING
3916 	/* On every interface, dump a bunch of OEM event holding the
3917 	   string. */
3918 	if (!str)
3919 		return;
3920 
3921 	/* For every registered interface, send the event. */
3922 	list_for_each_entry_rcu(intf, &ipmi_interfaces, link) {
3923 		char                  *p = str;
3924 		struct ipmi_ipmb_addr *ipmb;
3925 		int                   j;
3926 
3927 		if (intf->intf_num == -1)
3928 			/* Interface was not ready yet. */
3929 			continue;
3930 
3931 		/*
3932 		 * intf_num is used as an marker to tell if the
3933 		 * interface is valid.  Thus we need a read barrier to
3934 		 * make sure data fetched before checking intf_num
3935 		 * won't be used.
3936 		 */
3937 		smp_rmb();
3938 
3939 		/* First job here is to figure out where to send the
3940 		   OEM events.  There's no way in IPMI to send OEM
3941 		   events using an event send command, so we have to
3942 		   find the SEL to put them in and stick them in
3943 		   there. */
3944 
3945 		/* Get capabilities from the get device id. */
3946 		intf->local_sel_device = 0;
3947 		intf->local_event_generator = 0;
3948 		intf->event_receiver = 0;
3949 
3950 		/* Request the device info from the local MC. */
3951 		msg.netfn = IPMI_NETFN_APP_REQUEST;
3952 		msg.cmd = IPMI_GET_DEVICE_ID_CMD;
3953 		msg.data = NULL;
3954 		msg.data_len = 0;
3955 		intf->null_user_handler = device_id_fetcher;
3956 		i_ipmi_request(NULL,
3957 			       intf,
3958 			       &addr,
3959 			       0,
3960 			       &msg,
3961 			       intf,
3962 			       &smi_msg,
3963 			       &recv_msg,
3964 			       0,
3965 			       intf->channels[0].address,
3966 			       intf->channels[0].lun,
3967 			       0, 1); /* Don't retry, and don't wait. */
3968 
3969 		if (intf->local_event_generator) {
3970 			/* Request the event receiver from the local MC. */
3971 			msg.netfn = IPMI_NETFN_SENSOR_EVENT_REQUEST;
3972 			msg.cmd = IPMI_GET_EVENT_RECEIVER_CMD;
3973 			msg.data = NULL;
3974 			msg.data_len = 0;
3975 			intf->null_user_handler = event_receiver_fetcher;
3976 			i_ipmi_request(NULL,
3977 				       intf,
3978 				       &addr,
3979 				       0,
3980 				       &msg,
3981 				       intf,
3982 				       &smi_msg,
3983 				       &recv_msg,
3984 				       0,
3985 				       intf->channels[0].address,
3986 				       intf->channels[0].lun,
3987 				       0, 1); /* no retry, and no wait. */
3988 		}
3989 		intf->null_user_handler = NULL;
3990 
3991 		/* Validate the event receiver.  The low bit must not
3992 		   be 1 (it must be a valid IPMB address), it cannot
3993 		   be zero, and it must not be my address. */
3994                 if (((intf->event_receiver & 1) == 0)
3995 		    && (intf->event_receiver != 0)
3996 		    && (intf->event_receiver != intf->channels[0].address))
3997 		{
3998 			/* The event receiver is valid, send an IPMB
3999 			   message. */
4000 			ipmb = (struct ipmi_ipmb_addr *) &addr;
4001 			ipmb->addr_type = IPMI_IPMB_ADDR_TYPE;
4002 			ipmb->channel = 0; /* FIXME - is this right? */
4003 			ipmb->lun = intf->event_receiver_lun;
4004 			ipmb->slave_addr = intf->event_receiver;
4005 		} else if (intf->local_sel_device) {
4006 			/* The event receiver was not valid (or was
4007 			   me), but I am an SEL device, just dump it
4008 			   in my SEL. */
4009 			si = (struct ipmi_system_interface_addr *) &addr;
4010 			si->addr_type = IPMI_SYSTEM_INTERFACE_ADDR_TYPE;
4011 			si->channel = IPMI_BMC_CHANNEL;
4012 			si->lun = 0;
4013 		} else
4014 			continue; /* No where to send the event. */
4015 
4016 
4017 		msg.netfn = IPMI_NETFN_STORAGE_REQUEST; /* Storage. */
4018 		msg.cmd = IPMI_ADD_SEL_ENTRY_CMD;
4019 		msg.data = data;
4020 		msg.data_len = 16;
4021 
4022 		j = 0;
4023 		while (*p) {
4024 			int size = strlen(p);
4025 
4026 			if (size > 11)
4027 				size = 11;
4028 			data[0] = 0;
4029 			data[1] = 0;
4030 			data[2] = 0xf0; /* OEM event without timestamp. */
4031 			data[3] = intf->channels[0].address;
4032 			data[4] = j++; /* sequence # */
4033 			/* Always give 11 bytes, so strncpy will fill
4034 			   it with zeroes for me. */
4035 			strncpy(data+5, p, 11);
4036 			p += size;
4037 
4038 			i_ipmi_request(NULL,
4039 				       intf,
4040 				       &addr,
4041 				       0,
4042 				       &msg,
4043 				       intf,
4044 				       &smi_msg,
4045 				       &recv_msg,
4046 				       0,
4047 				       intf->channels[0].address,
4048 				       intf->channels[0].lun,
4049 				       0, 1); /* no retry, and no wait. */
4050 		}
4051 	}
4052 #endif /* CONFIG_IPMI_PANIC_STRING */
4053 }
4054 #endif /* CONFIG_IPMI_PANIC_EVENT */
4055 
4056 static int has_panicked;
4057 
4058 static int panic_event(struct notifier_block *this,
4059 		       unsigned long         event,
4060                        void                  *ptr)
4061 {
4062 	ipmi_smi_t intf;
4063 
4064 	if (has_panicked)
4065 		return NOTIFY_DONE;
4066 	has_panicked = 1;
4067 
4068 	/* For every registered interface, set it to run to completion. */
4069 	list_for_each_entry_rcu(intf, &ipmi_interfaces, link) {
4070 		if (!intf->handlers)
4071 			/* Interface is not ready. */
4072 			continue;
4073 
4074 		intf->handlers->set_run_to_completion(intf->send_info, 1);
4075 	}
4076 
4077 #ifdef CONFIG_IPMI_PANIC_EVENT
4078 	send_panic_events(ptr);
4079 #endif
4080 
4081 	return NOTIFY_DONE;
4082 }
4083 
4084 static struct notifier_block panic_block = {
4085 	.notifier_call	= panic_event,
4086 	.next		= NULL,
4087 	.priority	= 200	/* priority: INT_MAX >= x >= 0 */
4088 };
4089 
4090 static int ipmi_init_msghandler(void)
4091 {
4092 	int rv;
4093 
4094 	if (initialized)
4095 		return 0;
4096 
4097 	rv = driver_register(&ipmidriver);
4098 	if (rv) {
4099 		printk(KERN_ERR PFX "Could not register IPMI driver\n");
4100 		return rv;
4101 	}
4102 
4103 	printk(KERN_INFO "ipmi message handler version "
4104 	       IPMI_DRIVER_VERSION "\n");
4105 
4106 #ifdef CONFIG_PROC_FS
4107 	proc_ipmi_root = proc_mkdir("ipmi", NULL);
4108 	if (!proc_ipmi_root) {
4109 	    printk(KERN_ERR PFX "Unable to create IPMI proc dir");
4110 	    return -ENOMEM;
4111 	}
4112 
4113 	proc_ipmi_root->owner = THIS_MODULE;
4114 #endif /* CONFIG_PROC_FS */
4115 
4116 	setup_timer(&ipmi_timer, ipmi_timeout, 0);
4117 	mod_timer(&ipmi_timer, jiffies + IPMI_TIMEOUT_JIFFIES);
4118 
4119 	atomic_notifier_chain_register(&panic_notifier_list, &panic_block);
4120 
4121 	initialized = 1;
4122 
4123 	return 0;
4124 }
4125 
4126 static __init int ipmi_init_msghandler_mod(void)
4127 {
4128 	ipmi_init_msghandler();
4129 	return 0;
4130 }
4131 
4132 static __exit void cleanup_ipmi(void)
4133 {
4134 	int count;
4135 
4136 	if (!initialized)
4137 		return;
4138 
4139 	atomic_notifier_chain_unregister(&panic_notifier_list, &panic_block);
4140 
4141 	/* This can't be called if any interfaces exist, so no worry about
4142 	   shutting down the interfaces. */
4143 
4144 	/* Tell the timer to stop, then wait for it to stop.  This avoids
4145 	   problems with race conditions removing the timer here. */
4146 	atomic_inc(&stop_operation);
4147 	del_timer_sync(&ipmi_timer);
4148 
4149 #ifdef CONFIG_PROC_FS
4150 	remove_proc_entry(proc_ipmi_root->name, &proc_root);
4151 #endif /* CONFIG_PROC_FS */
4152 
4153 	driver_unregister(&ipmidriver);
4154 
4155 	initialized = 0;
4156 
4157 	/* Check for buffer leaks. */
4158 	count = atomic_read(&smi_msg_inuse_count);
4159 	if (count != 0)
4160 		printk(KERN_WARNING PFX "SMI message count %d at exit\n",
4161 		       count);
4162 	count = atomic_read(&recv_msg_inuse_count);
4163 	if (count != 0)
4164 		printk(KERN_WARNING PFX "recv message count %d at exit\n",
4165 		       count);
4166 }
4167 module_exit(cleanup_ipmi);
4168 
4169 module_init(ipmi_init_msghandler_mod);
4170 MODULE_LICENSE("GPL");
4171 MODULE_AUTHOR("Corey Minyard <minyard@mvista.com>");
4172 MODULE_DESCRIPTION("Incoming and outgoing message routing for an IPMI interface.");
4173 MODULE_VERSION(IPMI_DRIVER_VERSION);
4174 
4175 EXPORT_SYMBOL(ipmi_create_user);
4176 EXPORT_SYMBOL(ipmi_destroy_user);
4177 EXPORT_SYMBOL(ipmi_get_version);
4178 EXPORT_SYMBOL(ipmi_request_settime);
4179 EXPORT_SYMBOL(ipmi_request_supply_msgs);
4180 EXPORT_SYMBOL(ipmi_register_smi);
4181 EXPORT_SYMBOL(ipmi_unregister_smi);
4182 EXPORT_SYMBOL(ipmi_register_for_cmd);
4183 EXPORT_SYMBOL(ipmi_unregister_for_cmd);
4184 EXPORT_SYMBOL(ipmi_smi_msg_received);
4185 EXPORT_SYMBOL(ipmi_smi_watchdog_pretimeout);
4186 EXPORT_SYMBOL(ipmi_alloc_smi_msg);
4187 EXPORT_SYMBOL(ipmi_addr_length);
4188 EXPORT_SYMBOL(ipmi_validate_addr);
4189 EXPORT_SYMBOL(ipmi_set_gets_events);
4190 EXPORT_SYMBOL(ipmi_smi_watcher_register);
4191 EXPORT_SYMBOL(ipmi_smi_watcher_unregister);
4192 EXPORT_SYMBOL(ipmi_set_my_address);
4193 EXPORT_SYMBOL(ipmi_get_my_address);
4194 EXPORT_SYMBOL(ipmi_set_my_LUN);
4195 EXPORT_SYMBOL(ipmi_get_my_LUN);
4196 EXPORT_SYMBOL(ipmi_smi_add_proc_entry);
4197 EXPORT_SYMBOL(ipmi_user_set_run_to_completion);
4198 EXPORT_SYMBOL(ipmi_free_recv_msg);
4199